//javascript document
//поддерживается только 3 уровня
function Menu(){
	var t = this; 
	
	//global
	t.global = new Global();
	if(!t.global) return false;
	
	//Init
	t.menuInit = function(data){
		t.pagecell = (document.getElementById("pagecell")) ? document.getElementById("pagecell") : null;
		if(!t.pagecell) return false;
		t.global.setEvent("pagecell", "onmousemove", "js.menu.menuToHide(event)");
		t.setSubMenu(data);
	}
	
	
	//menu DOM objects
	t.menu = new Array();//menuitem
	t.menuDiv = new Array();//menucell
	
	t.setSubMenu = function (hash){
		if((typeof hash).toLowerCase() != 'object') return false;
		t.menu = hash;
		for(var i=0; i<hash.length; i++){
			if(hash[i].parent == 1) {
				t.menu[i].level = 0;
				if(document.getElementById("menu["+t.menu[i].id+"]")) t.menu[i].domObj = document.getElementById("menu["+t.menu[i].id+"]");
			}else {
				t.menu[i].level = t.setLevel(t.menu[i], hash);				
				if(!document.getElementById("menucell["+hash[i].parent+"]")) t.newMenuCell(t.menu[i], i);
				else t.newMenuItem(t.menu[i], i);				
			}
		}
		
	};
	
	t.setLevel = function(currentMenuElement, hash){
		var level = 1;
		for(var i=0; i<hash.length; i++){
			if(hash[i].id == currentMenuElement.parent) {
				level =(t.menu[i].level != 0) ?  2 : 1;
				break;
			}
		}
		return level;
	};
	
	//create new menuCell
	t.newMenuCell = function (hash, i){
		if((typeof hash).toLowerCase() != 'object') return false;
		var div = document.createElement("div");
		div.setAttribute("id", "menucell["+hash.parent+"]");
		div.className = "submenu";				
		document.body.appendChild(div);
		var ind = t.menuDiv.length;
		t.menuDiv[ind] = {'div' : div, 'chld' : hash.parent, 'id' : hash.id, 'level' : hash.level};
		t.newMenuItem(hash, i);
	};
	
	t.newMenuItem = function (hash, ind){
		if((typeof hash).toLowerCase() != 'object') return false;
		for(var i=0; i<t.menuDiv.length; i++){			
			if(t.menuDiv[i].chld == hash.parent) {				
				var cell = t.menuDiv[i].div;
				break;
			}
		}
		var itm = document.createElement("div");
			itm.className = "submenuitem";
			itm.setAttribute("id", "menuitem["+hash.id+"]");			
			cell.appendChild(itm);
			t.global.setEvent(itm.id, "onmouseover", "js.menu.toShow(this)");
		var a = document.createElement("a");
			a.setAttribute("id", "amenu["+hash.id+"]");
			a.setAttribute("href", hash.url);
			a.className = "glink";
			itm.appendChild(a);
		var txt = document.createTextNode(hash.title);
			a.appendChild(txt);
		t.menu[ind].domObj = itm;
	};
	
	t.toShow = function (obj){
		if(!obj || !t.menu.length) return false;
		var el = null;
		var chld = null;
		var winSize = t.getWinSize();
		for(var i=0; i<t.menu.length; i++){					
			if(obj.id == "menu["+t.menu[i].id+"]" || obj.id == "menuitem["+t.menu[i].id+"]"){
				el = t.menu[i];
				break;
			}
		}
		if(!el) return false;
		if(document.getElementById("menucell["+el.id+"]")) var chld = document.getElementById("menucell["+el.id+"]");
		var T = 0, L = 0, H = 0, W = 0;//top, left, height, width
		if(el.level == 0){//top menu			
			var deltaT = (t.global.billy && !t.global.opera)? parseInt(document.getElementById("menu").offsetTop)-2 : -4 ;
			var deltaL = (t.global.billy && !t.global.opera)? parseInt(document.getElementById("main").offsetLeft) : -2 ;
			L = parseInt(obj.offsetLeft) + deltaL;
			T = parseInt(obj.offsetTop) + parseInt(obj.offsetHeight) + deltaT;
			W = parseInt(obj.style.width);
			for(var i=0; i<t.menu.length; i++){					
				if(t.menu[i] && t.menu[i].level == 0) t.menu[i].domObj.className = "menuitem";
			}
			for(var i=0; i<t.menuDiv.length; i++){
				if(t.menuDiv[i].div != chld) t.menuDiv[i].div.style.display = "none";
			}
			el.domObj.className = "menuitem_selected";			
		}else{//level >0
			var cell = document.getElementById("menucell["+el.parent+"]");
			var deltaT = parseInt(obj.offsetTop)-6;
			var deltaL = (t.global.billy && !t.global.opera)? parseInt(obj.offsetLeft)-2 : -2 ;
			L = (t.global.billy && !t.global.opera)? parseInt(cell.offsetLeft) + deltaL + parseInt(cell.offsetWidth) - 2: parseInt(cell.offsetLeft) + deltaL + parseInt(cell.offsetWidth);
			T = parseInt(cell.offsetTop) + deltaT;
			W = parseInt(cell.offsetWidth);
			if((L+W) >= winSize[0] && el.level == 1) L = parseInt(cell.offsetLeft) - parseInt(cell.offsetWidth);//////////////////////////////////////
			for(var i=0; i<t.menuDiv.length; i++){
				if((document.getElementById("menucell["+t.menuDiv[i].chld+"]") && t.menuDiv[i].chld == el.parent) || t.menu[el.parent].parent >1) continue;
				t.menuDiv[i].div.style.display = "none";
			}
			for(var i=0; i<t.menu.length; i++){					
				if(t.menu[i] && t.menu[i].id != el.id && t.menu[i].parent == el.parent) t.menu[i].domObj.className = "submenuitem";
			}
			el.domObj.className = "submenuitem_selected";
			
		}		
		if(chld){
			chld.style.left = L+"px";
			chld.style.top = T+"px";
			chld.style.width = W+"px";
			chld.style.display = "block";
		}
	};

	
	t.menuToHide = function(evt){
		var elem = (evt.target) ? evt.target : evt.srcElement;
		if(elem.id && (elem.id.substring(0,4) == "menu" || elem.id.substring(0,5) == "amenu")) {
			return false;
		}else {
			for(var i=0; i<t.menuDiv.length; i++){
				t.menuDiv[i].div.style.display = "none";
			}
		};
		for(var i=0; i<t.menu.length; i++){				
			if(t.menu[i] && t.menu[i].level == 0) t.menu[i].domObj.className = "menuitem";
			else if(t.menu[i]) t.menu[i].domObj.className = "submenuitem";
			else continue;
		}
	};

	t.getWinSize = function(){
		return [document.body.offsetWidth, document.body.offsetHeight];
	};

};