﻿

function PetMenu(petobj, xmlobj){
	var me = this;
	this.submenu = new Array();
	this.submenucount = 0;
	this.menudiv = appendHTMLElement(view, "<div visible='false' width='0' height='16' />");	
	// constructor
	var tmpmenus = xmlobj.getElementsByTagName('menu');
	var loadcount=0,inloop=true;	
	for(var i=0; i<tmpmenus.length; i++){
		if(tmpmenus[i].tagName=="menu"){
			
			this.submenu[this.submenucount] = new PetSubMenu(petobj, this, this.submenucount, tmpmenus[i]);
			this.submenucount++;
		}
	}
	
	var newmenu=null, menuitem=null, textnode=null;;
	
	newmenu = xmlobj.createElement("menu"); 
	menuitem = xmlobj.createElement("item");
	textnode = xmlobj.createTextNode("options");
	menuitem.appendChild(textnode);
	newmenu.appendChild(menuitem);	
	newmenu.setAttribute("pic","config.gif");
	newmenu.setAttribute("picover","config.gif");
	menuitem.setAttribute("type","special");
	menuitem.setAttribute("name","menuoptions");
	menuitem.setAttribute("action","options");
	this.submenu[this.submenucount] = new PetSubMenu(petobj, this, this.submenucount, newmenu);
	this.submenucount++;
	
	newmenu = xmlobj.createElement("menu"); 
	menuitem = xmlobj.createElement("item");
	textnode = xmlobj.createTextNode("call home");
	menuitem.appendChild(textnode);
	newmenu.appendChild(menuitem);	
	newmenu.setAttribute("pic","home.gif");
	newmenu.setAttribute("picover","home.gif");
	menuitem.setAttribute("type","special");
	menuitem.setAttribute("name","menuhome");
	menuitem.setAttribute("action","callhome");
	this.submenu[this.submenucount] = new PetSubMenu(petobj, this, this.submenucount, newmenu);
	this.submenucount++;	
	homeVisible(false);
	
	if(compat_window) 
		this.menudiv.style.width=this.submenucount*16; 
	else 
		this.menudiv.width=this.submenucount*16;
	
	// pet left/returned home
	this.homeVisible = homeVisible;
	function homeVisible(newvalue){
		me.submenu[me.submenucount-1].setButtonVisible(newvalue);		
	}
	// this pet move
	this.setPos = function(petimg){
		if(compat_window){
			me.menudiv.style.left = petimg.getX();
			me.menudiv.style.top = petimg.getY()+16;
			//me.menudiv.style.width = petimg.getWidth();
		}else{
			me.menudiv.x = petimg.getX();
			me.menudiv.y = petimg.getY()+16;
			//me.menudiv.width = petimg.getWidth();			
		}
		for(var i=0; i<me.submenucount; i++){
			me.submenu[i].setPos(petimg);	
		}
	}
	// this pet mouse out
	this.hideMenu = function(){ setMenuVisible(false); }
	this.showMenu = function(){ setMenuVisible(true); }
	
	this.setMenuVisible=setMenuVisible;
	function setMenuVisible(newValue){
		if(newValue==true){
			if(compat_window) me.menudiv.style.visibility="visible"; else me.menudiv.visible="true";	
		}else{		
			if(compat_window) me.menudiv.style.visibility="hidden"; else me.menudiv.visible="false";	
		}
	}
	// hide menus
	this.onmouseout=onmouseout;
	function onmouseout(){
		for(var i=0; i<me.submenucount; i++){
			me.submenu[i].hidesubmenu(); //onmouseout();
		}
	}
	// this destroy
	this.destroy = destroy;
	function destroy(){
		for(var i=0; i<me.submenucount; i++){
			me.submenu[i].destroy();
			me.submenu[i]=null;
		}
		me.submenucount=0;
		if(compat_window) view.removeChild(me.menudiv); else view.removeElement(me.menudiv);
		me.menudiv=null;
	}
	
}

function PetSubMenu(petobj, menuobj, index, menuxml){
	var me=this.me = this;
	this.container = 
	appendHTMLElement(view, "<div width='100' y='16' background='#FFFFFF' visible='false' />");
	this.menuitem = new Array();
	this.menuitemcount = 0;
	
	var controls = new Array();
	var outticker=0;
	this.button=null;
	// constructor
	construct();
	function construct(){
		var ypos=0;
		var src = petobj.rootfolder + "menu" + petobj.dirslash + menuxml.getAttribute("pic");
//		var src = "/pets/cat/menu/"+menuxml.getAttribute("pic");
		me.button = appendHTMLElement(menuobj.menudiv,
		"<img enabled='true' x='"+index*16+"' width='16' height='16' src='"+src+"' />");
		me.button.onmouseover=onmouseover;
		me.button.onmouseout=onmouseout;
		for (j=0; j < menuxml.childNodes.length; j++){
			if (menuxml.childNodes[j].nodeType != 1) continue;
			ele = menuxml.childNodes[j];
			me.menuitem[me.menuitemcount] = new MenuItem(petobj, ele,me,ypos);
			me.menuitemcount++;
			ypos+=16;
		}
		if(compat_window)
			me.container.style.height=ypos;
		else
			me.container.height=ypos;
	}
	// main functions
	this.setButtonVisible = setButtonVisible;
	function setButtonVisible(newvalue){
		if(compat_window){
		if(newvalue==true) me.button.style.visibility="visible"; else me.button.style.visibility="hidden";	
		}else{
		if(newvalue==true) me.button.visible="true"; else me.button.visible="false";				
		}
	}
	this.setPos = function(petimg){
		if(compat_window){
			me.container.style.left = petimg.getX();
			me.container.style.top = petimg.getY()+32;
			me.container.style.width = petimg.getWidth();
		}else{
			me.container.x = petimg.getX();
			me.container.y = petimg.getY()+32;
			me.container.width = petimg.getWidth();			
		}
	}	
	
	this.resetticker = resetticker;
	function resetticker(){
		if(outticker!=0) clearTimeout(outticker);
		outticker = setTimeout(hidesubmenu,1000);
	}

	this.clearticker = clearticker;
	function clearticker(){
		if(outticker!=0) clearTimeout(outticker);
	}
	
	function onmouseover(){
		menuobj.onmouseout();
		if(outticker!=0) clearTimeout(outticker);
		//resetticker();
		if(compat_window)
			me.container.style.visibility="visible";
		else
			me.container.visible="true";
	}
	
	this.onmouseout=onmouseout;
	function onmouseout(){
		//outticker=0;
		resetticker();
		//hidesubmenu();
	}

	this.hidesubmenu = hidesubmenu;
	function hidesubmenu(){
		//outticker=0;
		clearticker();
		if(compat_window)
			me.container.style.visibility="hidden";		
		else
			me.container.visible="false";				
	}
	
	this.destroy = destroy;
	function destroy(){
		for(var i=0; i<me.menuitemcount; i++){
			me.menuitem[i].destroy(); 
			me.menuitem[i] = null;
		}
		if(compat_window){
			view.removeChild(me.container); 
			menuobj.menudiv.removeChild(me.button);
		}else{ 
			view.removeElement(me.container);
			menuobj.menudiv.removeElement(me.button);
		}
		me.container = me.button=null;
	}
	
	function MenuItem(petobj,itemxml,p, ypos){
		// constructor
		var me=this.me=this;
		this.caption = itemxml.firstChild.nodeValue;
		this.itemtype= this.itemname = this.itemaction = "";
		if(!(this.itemtype = itemxml.getAttribute("type"))) 	this.itemtype = "";
		if(!(this.itemname = itemxml.getAttribute("name"))) 	this.itemname = "";
		if(!(this.itemaction = itemxml.getAttribute("action"))) this.itemaction = "";

		this.itemback = 
		appendHTMLElement(p.container,"<div y='"+ypos+"' enabled='true' width='100%' height='16' background='#999999' />");
		this.itemlabel = appendHTMLElement(this.itemback,"<label >"+this.caption+"</label>");
		// setup events
		this.itemback.onmouseover=mouseover;
		this.itemback.onmouseout=mouseout;
		this.itemback.onclick=onclick;
		// events
		function mouseover(){
		p.clearticker();
		if(compat_window) me.itemback.style.backgroundColor = "#666666"; else me.itemback.background= "#666666";
		}
		function mouseout(){
		p.resetticker();
		if(compat_window) me.itemback.style.backgroundColor = "#999999"; else me.itemback.background= "#999999";
		}
		function onclick(){
			p.hidesubmenu();
			switch(me.itemtype){
				case 'special': 
					switch(me.itemaction){
						case "stats": petobj.mood.showme(); break;
						case "callhome": 
							petobj.passport.appid=0;
							petobj.passport.getPassport();
							break;
						case "options":
							showOptions();
							break;
						
					}
					
					break;
				case 'object':
					if(me.itemaction=="add"){
						//petobj.petobjects.getObjectByName(me.itemname).setVisible(true);
						petobj.petobjects.getObjectByName(me.itemname).setValue(10);
					}else{
						//petobj.petobjects.getObjectByName(me.itemname).setVisible(false);
						petobj.petobjects.getObjectByName(me.itemname).setValue(0);						
					}
					break;
			}
		}		
		// main functions
		this.destroy=destroy;
		function destroy(){
			if(compat_window){
				me.itemback.removeChild(me.itemlabel);
				p.container.removeChild(me.itemback);
			}else{
				me.itemback.removeElement(me.itemlabel);
				p.container.removeElement(me.itemback);
			}
			me.itemback = me.itemlabel = null;
			
		}
	}
}
