var Navigator = {
	openMenu : null,
	openSubMenu : null,
	defMenu : null,
	defSubMenu : null,
	initTimer : null,

	create : function() {
		$$("#mainNavi>ul>li").each(function(_element){
			var menu = new Navigator.Menu(_element);
			if (menu.status == "on")
				Navigator.defMenu = menu;
		});
		
		$$("#mainNavi>ul>li>div.depth2>div.inner>ul>li").each(function(_element) {
			var subMenu = new Navigator.subMenu(_element);
			if (subMenu.status == "on") {
				Navigator.defSubMenu = subMenu;
			}
		});
	},
	setInitTimer : function() {
		Navigator.stopInitTimer();
		Navigator.initTimer = new PeriodicalExecuter(Navigator.init, 0.7);
	},
	stopInitTimer : function() {
		if (Navigator.initTimer)
			Navigator.initTimer.stop();
	},
	init : function() {
		Navigator.stopInitTimer();
		if (Navigator.openMenu)
			Navigator.openMenu.off();
		if (Navigator.defMenu)
			Navigator.defMenu.on();
		if (Navigator.openSubMenu)
			Navigator.openSubMenu.off();
		if (Navigator.defSubMenu)
			Navigator.defSubMenu.on();
	}
}

Navigator.Menu = Class.create();
Navigator.Menu.prototype = {
	initialize : function(_li){
		this.status = "off";
		this.element = _li;
		this.onImageSrc = null;
		this.offImageSrc =  null;

		if (_li.hasClassName("on"))
			this.status = "on";

		var img = _li.down("img");
		if (img.src.indexOf("_on")>0) {
			this.onImageSrc = img.src;
			this.offImageSrc = img.src.replace("_on.gif", ".gif");
		} else {
			this.offImageSrc = img.src;
			this.onImageSrc = img.src.replace(".gif", "_on.gif");
		}

		Event.observe(_li, "mouseover", this.mouseOverListener.bind(this));
		Event.observe(_li, "mouseout", this.mouseOutListener.bind(this));
	},
	on : function(){
		this.element.down("img").src = this.onImageSrc;
		this.element.addClassName("on");
		this.status = "on";
	},
	off : function(){
		this.element.down("img").src = this.offImageSrc;
		this.element.removeClassName("on");
		this.element.removeClassName("open");
		this.status = "off";
	},
	open : function(){
		this.element.down("img").src = this.onImageSrc;
		this.element.addClassName("open");
		this.status = "open";
	},
	
	mouseOverListener : function(){
		Navigator.stopInitTimer();
		if (this.status != "open") {
			if (Navigator.openMenu)
				Navigator.openMenu.off();
			if (Navigator.defMenu)
				Navigator.defMenu.off();
			
			this.open();
			Navigator.openMenu = this;
		}
	},
	mouseOutListener : function(){
		Navigator.setInitTimer();
	}
}

Navigator.subMenu = Class.create();
Navigator.subMenu.prototype = {
	initialize : function(_li){
		this.element = _li;
		this.status = "off";

		if (_li.hasClassName("on"))
			this.status = "on";
			
		Event.observe(_li, "mouseover", this.mouseOverListener.bind(this));
		Event.observe(_li, "mouseout", this.mouseOutListener.bind(this));
	},
	on : function(){
		this.element.removeClassName("out");
		this.element.addClassName("on");
		this.status = "on";
	},
	off : function(){
		this.element.removeClassName("on");
		this.element.removeClassName("open");
		this.element.addClassName("out");
		this.status = "off";
	},
	open : function(){
		this.element.removeClassName("out");
		this.element.addClassName("open");
		this.status = "open";
	},
	mouseOverListener : function(){
		Navigator.stopInitTimer();
		if (this.status != "open") {
			if (Navigator.openSubMenu)
				Navigator.openSubMenu.off();
			if (Navigator.defSubMenu)
				Navigator.defSubMenu.off();
			
			this.open();
			Navigator.openSubMenu = this;
		}
	},
	mouseOutListener : function(){
		/*this.element.removeClassName("over");
		this.element.addClassName("out");*/
		Navigator.setInitTimer();
	}
}
