vBulletin.add_event("vBmenuShow");
vBulletin.add_event("vBmenuHide");
function vB_Popup_Handler() {
	this.open_steps=10;
	this.open_fade=false;
	this.active=false;
	this.menus=new Array();
	this.activemenu=null
}

vB_Popup_Handler.prototype.activate=function(A){this.active=A;console.log("vBmenu :: System Activated")};
vB_Popup_Handler.prototype.register=function(D,A,C)
{	this.menus[D]=new vB_Popup_Menu(D,A,C);
	var B=YAHOO.util.Dom.get("usercss");
	if(B&&YAHOO.util.Dom.isAncestor(B,D))
	{this.menus[D].imgsrc=IMGDIR_MISC+"/menu_open_usercss.gif"}this.menus[D].startup();
		return this.menus[D]
};
	
vB_Popup_Handler.prototype.hide=function()
{	if(this.activemenu!=null)
	{	this.menus[this.activemenu].hide()
	}
};

var vBmenu=new vB_Popup_Handler();

function vbmenu_hide(A)
{	if(A&&A.button&&A.button!=1&&A.type=="click")
	{	return true
	} else {
		vBmenu.hide()
	}
}

function vB_Popup_Menu(C,A,B)
{	this.controlkey=C;
	this.noimage=A;
	this.noslide=B;
	this.menuname=this.controlkey.split(".")[0]+"_menu";
	this.imgsrc=IMGDIR_MISC+"/menu_open.gif"}vB_Popup_Menu.prototype.startup=function()
	{	this.init_control(this.noimage);
		if(fetch_object(this.menuname))
		{	this.init_menu()
		}
		this.slide_open=(this.noslide?false:true);
		this.open_steps=vBmenu.open_steps;vBulletin.add_event("vBmenuShow_"+this.controlkey);
		vBulletin.add_event("vBmenuHide_"+this.controlkey)
	};
	
	vB_Popup_Menu.prototype.init_control=function(A)
	{	this.controlobj=fetch_object(this.controlkey);
		this.controlobj.state=false;
		if(this.controlobj.firstChild&&(this.controlobj.firstChild.tagName=="TEXTAREA"||this.controlobj.firstChild.tagName=="INPUT"))
		{} else
		{	if(!A&&!(is_mac&&is_ie))
			{	var C=document.createTextNode(" ");
				this.controlobj.appendChild(C);
			}
			
			this.controlobj.unselectable=true;
			if(!A)
			{	this.controlobj.style.cursor=pointer_cursor
			}
			
			this.controlobj.onclick=vB_Popup_Events.prototype.controlobj_onclick;
			this.controlobj.onmouseover=vB_Popup_Events.prototype.controlobj_onmouseover
		}
	};
	
	vB_Popup_Menu.prototype.init_menu=function()
	{	this.menuobj=fetch_object(this.menuname);
		this.select_handler=new vB_Select_Overlay_Handler(this.menuobj);
		if(this.menuobj&&!this.menuobj.initialized)
		{	this.menuobj.initialized=true;
			this.menuobj.onclick=e_by_gum;
			this.menuobj.style.zIndex=50;
			
			if(is_ie&&!is_mac)
			{	if(!is_ie7){this.menuobj.style.filter+="alpha(enabled=1,opacity=100)"
			} else {
				this.menuobj.style.minHeight="1%"
			}
			
		}
		this.init_menu_contents()
		}
	};
			
	vB_Popup_Menu.prototype.init_menu_contents=function()
	{	var E=new Array("td","li");
		for(var D=0;D<E.length;D++) 
		{	var H=fetch_tags(this.menuobj,E[D]);
			for(var F=0;F<H.length;F++)
			{	if(H[F].className=="vbmenu_option")
				{	if(H[F].title&&H[F].title=="nohilite")
					{	H[F].title=""
					} else { 
						H[F].controlkey=this.controlkey;H[F].onmouseover=vB_Popup_Events.prototype.menuoption_onmouseover;H[F].onmouseout=vB_Popup_Events.prototype.menuoption_onmouseout;
						var C=fetch_tags(H[F],"a");
						if(C.length==1)
						{	H[F].className=H[F].className+" vbmenu_option_alink";H[F].islink=true;
							var B=C[0];
							var A=false;
							H[F].target=B.getAttribute("target");
							if(typeof B.onclick=="function")
							{	H[F].ofunc=B.onclick
								H[F].onclick=vB_Popup_Events.prototype.menuoption_onclick_function;
								A=true
							} else {
								if(typeof H[F].onclick=="function")
								{	H[F].ofunc=H[F].onclick;
									H[F].onclick=vB_Popup_Events.prototype.menuoption_onclick_function;
									A=true
								} else {
									H[F].href=B.href;H[F].onclick=vB_Popup_Events.prototype.menuoption_onclick_link
								}
							}
							
							if(A)
							{	var G=document.createElement("a");
								G.innerHTML=B.innerHTML;
								G.href="#";
								G.onclick=function(I){I=I?I:window.event;I.returnValue=false;return false};
								H[F].insertBefore(G,B);
								H[F].removeChild(B)
							}
						} else {
							if(typeof H[F].onclick=="function")
							{	H[F].ofunc=H[F].onclick;
								H[F].onclick=vB_Popup_Events.prototype.menuoption_onclick_function
							}
						}
					}
				}
			}
		}
	};
	
	vB_Popup_Menu.prototype.show=function(B,A)
	{	if(!vBmenu.active)
		{	return false
		} else {
			if(!this.menuobj)
			{	this.init_menu()
			}
		}
		
		if(!this.menuobj||vBmenu.activemenu==this.controlkey)
		{	return false
		}
		
		console.log("vBmenu :: Show '%s'",this.controlkey);
		
		if(vBmenu.activemenu!=null&&vBmenu.activemenu!=this.controlkey)
		{	vBmenu.menus[vBmenu.activemenu].hide()
		}
		
		vBmenu.activemenu=this.controlkey;this.menuobj.style.display="";
		
		if(this.slide_open)
		{	this.menuobj.style.clip="rect(auto, 0px, 0px, auto)"
		}
		
		this.set_menu_position(B);
		
		if(!A&&this.slide_open)
		{	this.intervalX=Math.ceil(this.menuobj.offsetWidth/this.open_steps);
			this.intervalY=Math.ceil(this.menuobj.offsetHeight/this.open_steps);
			this.slide((this.direction=="left"?0:this.menuobj.offsetWidth),0,0)
		} else {
			if(this.menuobj.style.clip&&this.slide_open)
			{	this.menuobj.style.clip="rect(auto, auto, auto, auto)"
			}
		}
		
		this.select_handler.hide();
		if(this.controlobj.editorid)
		{	this.controlobj.state=true;
			vB_Editor[this.controlobj.editorid].menu_context(this.controlobj,"mousedown")
		}
		
		vBulletin.events["vBmenuShow_"+this.controlkey].fire(this.controlkey);
		vBulletin.events.vBmenuShow.fire(this.controlkey);
		
		
	};
	
	vB_Popup_Menu.prototype.set_menu_position=function(A){
		this.pos=this.fetch_offset(A);
		this.leftpx=this.pos.left-231;
		this.toppx=this.pos.top-34;
		this.direction="left";	
		
		this.menuobj.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/popup_BG.png', sizingMethod='scale')";
		//this.menuobj.style.backgroundImage = 'url(../images/popup_BG.png)';
		
		if(this.controlkey.match(/^pagenav\.\d+$/))
		{	A.appendChild(this.menuobj)
		}

		//Assign popup locations here
		if(A.className == "vbmenu_cat1")
			this.menuobj.style.left="0px";
		else if(A.className == "vbmenu_cat2")
			this.menuobj.style.left="310px";
		else if(A.className == "vbmenu_cat3")
			this.menuobj.style.left="620px";
		
		//this.menuobj.style.left=this.leftpx+"px";
		this.menuobj.style.top=this.toppx+"px"
		
		if(A.className.substr(0,11) == "vbmenu_4cat")
		{	//calculate movement offset
			temp1 = document.getElementById("itemselection").style.left.split('px');
			located = (temp1[0] * 1) + 10;
			if (parseInt(A.className.substr(11, 2)) <= '9')
			    locate = located + ((A.className.substr(11, 1) - 1) * 218);
			else
			    locate = located + ((A.className.substr(11, 2) - 1) * 218);
			
			//if(A.className.substr(11,1)%4 == 1)
				//this.menuobj.style.left = loc1 + "px";
			//else if(A.className.substr(11,1)%4 == 2)
				//this.menuobj.style.left = loc2 + "px";
			//else if(A.className.substr(11,1)%4 == 3)
				//this.menuobj.style.left = loc3 + "px";
			//else if(A.className.substr(11,1)%4 == 0)
				//this.menuobj.style.left = loc4 + "px";
			
			this.menuobj.style.left = locate + "px";
			
			//this.menuobj.style.left=this.leftpx+"px";
			this.menuobj.style.top=(this.toppx+40)+"px"
		}
		
		if(A.className.substr(0,11) == "vbmenu_3cat")
		{	//Assign 3 item popup locations here
			if(A.className == "vbmenu_3cat1")
				this.menuobj.style.left="147px";
			else if(A.className == "vbmenu_3cat2")
				this.menuobj.style.left="365px";
			else if(A.className == "vbmenu_3cat3")
				this.menuobj.style.left="578px";
			
			//this.menuobj.style.left=this.leftpx+"px";
			this.menuobj.style.top=(this.toppx+40)+"px"
		}
		
		if(A.className.substr(0,11) == "vbmenu_2cat")
		{	//Assign 2 item popup locations here
			if(A.className == "vbmenu_2cat1")
				this.menuobj.style.left="240px";
			else if(A.className == "vbmenu_2cat2")
				this.menuobj.style.left="458px";
			
			//this.menuobj.style.left=this.leftpx+"px";
			this.menuobj.style.top=(this.toppx+40)+"px"
		}
		
		if(A.className == "vbmenu_1cat1")
		{	this.menuobj.style.left="349px";
			//this.menuobj.style.left=this.leftpx+"px";
			this.menuobj.style.top=(this.toppx+40)+"px"
		}
		
	};
	
	vB_Popup_Menu.prototype.hide=function(A){
		if(A&&A.button&&A.button!=1){return true}
		console.log("vBmenu :: Hide '%s'",this.controlkey);
		this.stop_slide();
		this.menuobj.style.display="none";
		this.select_handler.show();
		if(this.controlobj.editorid)
		{	this.controlobj.state=false;
			vB_Editor[this.controlobj.editorid].menu_context(this.controlobj,"mouseout")
		}
		vBmenu.activemenu=null;
		vBulletin.events["vBmenuHide_"+this.controlkey].fire(this.controlkey);
		vBulletin.events.vBmenuHide.fire(this.controlkey)
	};
	
	vB_Popup_Menu.prototype.hover=function(A){
		if(vBmenu.activemenu!=null)
		{	if(vBmenu.menus[vBmenu.activemenu].controlkey!=this.id)
			{this.show(A,true)}
		}
	};
	
	vB_Popup_Menu.prototype.slide=function(C,B,A){
		if(this.direction=="left"&&(C<this.menuobj.offsetWidth||B<this.menuobj.offsetHeight))
		{	C+=this.intervalX;B+=this.intervalY;this.menuobj.style.clip="rect(auto, "+C+"px, "+B+"px, auto)";
			this.slidetimer=setTimeout("vBmenu.menus[vBmenu.activemenu].slide("+C+", "+B+", "+A+");",0)
		} else{ 
			if(this.direction=="right"&&(C>0||B<this.menuobj.offsetHeight))
			{	C-=this.intervalX;B+=this.intervalY;this.menuobj.style.clip="rect(auto, "+this.menuobj.offsetWidth+"px, "+B+"px, "+C+"px)";
				this.slidetimer=setTimeout("vBmenu.menus[vBmenu.activemenu].slide("+C+", "+B+", "+A+");",0)
			} else{this.stop_slide()} 
		}
	};
	
	vB_Popup_Menu.prototype.stop_slide=function(){
		clearTimeout(this.slidetimer);
		this.menuobj.style.clip="rect(auto, auto, auto, auto)"
	};
	
	vB_Popup_Menu.prototype.fetch_offset=function(E){
		if(E.getBoundingClientRect){
			var C=E.getBoundingClientRect();
			var D=Math.max(document.documentElement.scrollTop,document.body.scrollTop);
			var F=Math.max(document.documentElement.scrollLeft,document.body.scrollLeft);
			if(document.documentElement.dir=="rtl")
			{	F=F+document.documentElement.clientWidth-document.documentElement.scrollWidth
			} return{left:C.left+F,top:C.top+D}
		}
		var B=E.offsetLeft;
		var A=E.offsetTop;
		while((E=E.offsetParent)!=null)
		{	B+=E.offsetLeft;A+=E.offsetTop}return{left:B,top:A}
	};
			
	function vB_Popup_Events(){}
	
	vB_Popup_Events.prototype.controlobj_onclick=function(A){	
		//code for original hover
		if(typeof do_an_e=="function")
		{	do_an_e(A);
			vBmenu.menus[this.id].hover(this)
		}
		
		//code for original click
		if(typeof do_an_e=="function")
		{	do_an_e(A);
			if(vBmenu.activemenu==null||vBmenu.menus[vBmenu.activemenu].controlkey!=this.id)
			{	vBmenu.menus[this.id].show(this)
			} else {
				vBmenu.menus[this.id].hide()
			}
		}
	};
	
	vB_Popup_Events.prototype.controlobj_onmouseover=function(A){	
		if(typeof do_an_e=="function")
		{	do_an_e(A);
			if(vBmenu.activemenu==null||vBmenu.menus[vBmenu.activemenu].controlkey!=this.id)
			{	vBmenu.menus[this.id].show(this)
			} else {
				//vBmenu.menus[this.id].hide()
			}
		}
	};
	
	vB_Popup_Events.prototype.menuoption_onclick_function=function(A){
		this.ofunc(A);vBmenu.menus[this.controlkey].hide()
	};
	
	vB_Popup_Events.prototype.menuoption_onclick_link=function(A){
		A=A?A:window.event;
		A.cancelBubble=true;
		if(A.stopPropagation){A.stopPropagation()}
		if(A.preventDefault){A.preventDefault()}
		if(A.shiftKey||(this.target!=null&&this.target!=""&&this.target.toLowerCase()!="_self"))
		{	if(this.target!=null&&this.target.charAt(0)!="_")
			{	window.open(this.href,this.target) } 
			else { window.open(this.href) }
		} else { window.location=this.href }
		vBmenu.menus[this.controlkey].hide();
		return false
	};
			
	vB_Popup_Events.prototype.menuoption_onmouseover=function(A)
	{	
		this.className="vbmenu_hilite"+(this.islink?" vbmenu_hilite_alink":"");
		this.style.cursor=pointer_cursor;
	};
	
	vB_Popup_Events.prototype.menuoption_onmouseout=function(A)
	{	this.className="vbmenu_option"+(this.islink?" vbmenu_option_alink":"");
		this.style.cursor="default"
	};
	
