var Kartel = new Class({
  Implements: Options,
  options: {},

  initialize: function(options) {
    this.setOptions(options);
    window.addEvent('domready', this.start.bindWithEvent(this));
  },

  start: function() {
    this.findMenus();
    this.menus.each(this.selectMenu.bind(this));
    this.menus.each(this.hideChildNaviation.bind(this));
  },

  findMenus: function() {
    this.menus = [];
    $$('ul').each(function(ul) {
      if(ul.id.match(/^nav(sub)?_/))
        this.menus.push(ul);
    }.bind(this));
  },

  selectMenu: function(menu) {
    var lis = menu.getChildren('li');
    lis.each(function(li) {

      var link = li.getElement('a');
      if(link) {
        var href = link.href;
        if(Kartel.isActive(href)) {
          Kartel.selectMenu(li);
        }
      }
    }.bind(this));
  },

  hideChildNaviation: function(menu) {
    var lis = menu.getChildren('li');
    lis.each(function(li) {
      if(this.options.hideChildNavigation && !li.hasClass('selected'))
        Kartel.hideChildren(li);
      else
        Kartel.showChildren(li);
    }.bind(this));
  }
});

Kartel.isActive = function(href) {
  var path = window.location.href;
  var regex = /(?:\/\/.*?)?(\/.*)$/;
  var match = regex.exec(path);

  if(match[1]) {
    var pathMatch = regex.exec(href);
    if(match[1] == pathMatch[1]) return true;
  }

  return false;
};

Kartel.selectMenu = function(menu) {
  var lis = menu.getParents('li');
  lis.each(function(li){li.addClass('selected');});
  menu.addClass('selected');
}

Kartel.hideChildren = function(menu) {
  menu.getChildren('ul').each(function(ul) {
    ul.setStyle('display', 'none');
  });
}

Kartel.showChildren = function(menu) {
  menu.getChildren('ul').each(function(ul) {
    ul.setStyle('display', 'block');
  });
}