
var Menu = Class.create();

Menu.prototype = {

	version: "0.1",

	_hidePause: 1000,
	_hideTimeout: null,
	_activeSubMenu: null,

	initialize : function(element) {

		this.element = $(element);
		if(!this.element) return false;

		this.anchor = $A(this.element.getElementsByTagName('a'));
		this.anchor.each(this.setup.bind(this));
	},

	setup : function(elm) {

		elm = $(elm);

		if(elm.readAttribute('class') =='submenu') {
			Event.observe(elm, 'mouseover', this._showSubmenu.bindAsEventListener(this), false);
			Event.observe(elm, 'mouseout', this._hideSubmenu.bindAsEventListener(this), false);
		} else if(elm.readAttribute('class') == 'subitem') {
			Event.observe(elm, 'mouseover', this._keepSubmenu.bindAsEventListener(this), false);
			Event.observe(elm, 'mouseout', this._unkeepSubmenu.bindAsEventListener(this), false);
		} else {
			Event.observe(elm, 'mouseover', this._hideAllOpened.bindAsEventListener(this), false);
		}

	},

	_showSubmenu :  function(event) {

		this._hideAllOpened();

		var element = Event.element(event);
		var identificator = element.getOffsetParent().readAttribute('id').replace("menu_", "");

		if($('submenu_'+identificator))
			$('submenu_'+identificator).show();

		this._activeSubMenu = $('submenu_'+identificator);


	},

	_keepSubmenu :  function(event) {

		var element = Event.element(event);
		var identificator = element.getOffsetParent().getOffsetParent().readAttribute('id');

		if (this._hideTimeout)
			window.clearTimeout(this._hideTimeout);

		if($(identificator))
			$(identificator).show();

	},

	_unkeepSubmenu :  function(event) {

		var element = Event.element(event);
		var identificator = element.getOffsetParent().getOffsetParent().readAttribute('id');

		this._hideTimeout = window.setTimeout(function() {

			if($(identificator))
				$(identificator).hide();

		}, this._hidePause);

	},

	_hideSubmenu :  function(event) {

		var element = Event.element(event);
		var identificator = element.getOffsetParent().readAttribute('id').replace("menu_", "");

		this._hideTimeout = window.setTimeout(function() {

			if($('submenu_'+identificator))
				$('submenu_'+identificator).hide();

		}, this._hidePause);

	},

	_hideAllOpened : function(event) {

		if (this._hideTimeout)
			window.clearTimeout(this._hideTimeout);

		if(this._activeSubMenu != null)
			this._activeSubMenu.hide();

	}

}

Event.observe(window, 'load', function(){ new Menu('menu'); }, false);

