var NO_SUBMENU = -1;
var BASE_SUBMENU = 0;
var SPECS_SUBMENU = 1;

// special Etalon menu
var Menu = Class.create();
Menu.prototype = {

	initialize: function(menuItems, menuMainContainerDivId, menuContainerDivId, backItemElementId, width) {
		this.menuItems = menuItems;
		this.menuContainerDivId = menuContainerDivId;
		this.backItemElementId = backItemElementId;		
		this.actualSubMenuLevel = 0;
		this.width = width;
		this.menuMainContainerDivId = menuMainContainerDivId;
		this.duration = 0.7;
		this.currentPath = new Array();
		this.selectedUrl = "";
	},
  
	getItem: function(path) {
		if (path.length==0) 
			return this.menuItems;
			
		var item = this.menuItems.subMenu[path[0]];
		
		for (i=1; i<path.length; i++) {
			if (item.subMenuType == NO_SUBMENU) 
				return item;				
			item = item.subMenu[path[i]];
		}
		
		return item;
	},
	
	getItemHTML: function(item, path, isDefault) {
		var pathAsString =  path.toString();
		var id = pathAsString.replace(/,/g,"-");
		
		if (isDefault)
			this.currentPath = path;
			
		var iconVisibility = (isDefault)? "visible" : "hidden";
		
		var html = new Array();		
		html.push("<p>");
		
		html.push("<span class=\"menuItemIcon\"><img id=\"icon-" + id + "\" style=\"visibility:" + iconVisibility + "\" src=\"../images/menu_item_icon.png\" width=\"6\" height=\"9\" border=\"0\" class=\"png\"/></span>")
		
		html.push("<a id=\"a-");
		html.push(id);
		html.push("\" href=\"");
		
		if (item.url != "")
			html.push(item.url);
		else
			html.push("#");
			
		html.push("\" ");
		
		if (item.url.indexOf("#")==0) {
			var url = item.url.substr(1);
	
			html.push("onclick=\"javascript:menu.onClick([");
			html.push(pathAsString);
			html.push("]);content.changePage('");
			html.push(url);
			html.push("')\"");
			
			
			html.push(" onmouseover=\"javascript:menu.onMouseOver('" + pathAsString + "');\"");
			html.push(" onmouseout=\"javascript:menu.onMouseOut('" + pathAsString + "');\"");
			
		}

		html.push(">");
		html.push(item.title);
		html.push("</a></p>");
		
		
		
		
		
		
		if (item.subMenuType == SPECS_SUBMENU) {
			html.push("<p id=\"");
			html.push(pathAsString.replace(/,/g,"-"));
			html.push("\" class=\"subSubMenu\" style=\"display:none\">");
				
			for (var i=0;i<item.subMenu.length;i++) {
				html.push("<a href=\"");
				html.push(item.subMenu[i].url);
				html.push("\" onclick=\"javascript:content.changePage('");
				html.push(item.subMenu[i].url);
				html.push("')\">");	
				html.push(item.subMenu[i].title);
				html.push("</a><br/>");
			}
			html.push("</p>");
		}
		
		
		
		
		return html.join("");
	},
	
	getMenuHTML: function(path) {
		var html = new Array();
		
		if (this.currentItem.subMenuType == NO_SUBMENU)
			return "";

		for (var i=0; i<this.currentItem.subMenu.length; i++) {
			html.push(this.getItemHTML(this.currentItem.subMenu[i], path.concat([i]), this.currentItem.defaultItem == i));
		}	
		
		

		return html.join("");
	},
	
	createSubMenu: function(path) {	
		var menuContainer = document.getElementById(this.menuContainerDivId);
		var actualDivId = "subMenu-" + path.length;
		var actualDivElement = document.getElementById(actualDivId);
		if (actualDivElement == null) {
			actualDivElement = document.createElement("div");			
			actualDivElement.id = actualDivId;
			Element.extend(actualDivElement);
			actualDivElement.addClassName("subMenu");
			menuContainer.appendChild(actualDivElement);			
		}

		actualDivElement.innerHTML = this.getMenuHTML(path);		

	},
	
	
	onMouseOver: function(path) {		
		var id = path.replace(/,/g,"-");
		document.getElementById('icon-' + id).style.visibility='visible';
	},
	
	onMouseOut: function(path) {
		if (this.currentPath != path) {
			this.hideIcon(path);
		}
	},
	
	hideIcon: function(path) {
		if (path.length==0) 
			return;
		var id = path.toString().replace(/,/g,"-");		
		document.getElementById('icon-' + id).style.visibility='hidden';
	},
	
	onClick: function(path) {
		this.hideIcon(this.currentPath);
		this.currentPath = path;	
		var id = path.toString().replace(/,/g,"-");
		document.getElementById('icon-' + id).style.visibility='visible';
		this.showMenu(path);
	},
	
	showMenu: function(path) {
		this.currentItem = this.getItem(path);								
		if (this.currentItem.subMenuType == NO_SUBMENU)
			return;
		this.createSubMenu(path);

		var menuContainer = document.getElementById(this.menuContainerDivId);
		if (path.length != this.actualSubMenuLevel) {
			if (this.currentItem.subMenuType == BASE_SUBMENU) {
				new Effect.Move(menuContainer, { x: this.width*(this.actualSubMenuLevel-path.length), duration: this.duration, queue: {position:'end', scope: 'menuscope'} }  );
				this.actualSubMenuLevel = path.length;	
				
			} else if (this.currentItem.subMenuType == SPECS_SUBMENU) {


				// TODO: kocka kirakása



				var subSubMenuElement = document.getElementById(path.join("-"));
				if (subSubMenuElement.style.display == 'none') {
					
					var subSubMenuElements = getElementsByClass("subSubMenu");
					for (var i=0;i<subSubMenuElements.length;i++)
						subSubMenuElements[i].style.display = "none";
				
	
					if (subSubMenuElement != null) {
						new Effect.Appear(path.join("-"));
					}
				}
			
			}
		}
		
		var backItemElement = document.getElementById(this.backItemElementId);				
		if (path.length!=0) {
			if (backItemElement.style.display == "none") 
				new Effect.Appear(this.backItemElementId);
		} else {
			if (backItemElement.style.display != "none") 
				new Effect.Fade(this.backItemElementId);
			
		}
		
				
	},
	
	back: function() {
		var menuContainer = document.getElementById(this.menuContainerDivId);
		if (this.actualSubMenuLevel > 0) {
			new Effect.Move(menuContainer, { x: this.width, duration: this.duration, queue: {position:'end', scope: 'menuscope'} } );
			this.actualSubMenuLevel--;
		}
		
		if (this.actualSubMenuLevel == 0) {
			var backItemElement = document.getElementById(this.backItemElementId);
			if (backItemElement.style.display != "none") 
				new Effect.Fade(this.backItemElementId);
			
		}		
	
		//TODO: visszaleptetni az oldalt
	},
	
	show: function() {
		this.showMenu([]);
		//new Effect.Appear(this.menuMainContainerDivId);
	}
  
};

