ipsmenu=new ips_menu();

function ips_menu()
	{
	this.menu_registered=new Array();
	this.menu_openfuncs=new Array();
	this.menu_over_css=new Array();
	this.menu_out_css=new Array();
	this.menu_open_event=new Array();
	this.dynamic_register=new Array();
	this.menu_cur_open=null;
	this.dynamic_html=null
	}

ips_menu.prototype.register=function(cid,callback,menu_over_css,menu_out_css,event_type)
	{
	if(event_type)
		{
		this.menu_open_event[cid]=(event_type=='onmouseover')?'onmouseover':'onclick'
		}
	this.menu_registered[cid]=new ips_menu_class(cid);
	
	if(callback)
		{
		this.menu_openfuncs[cid]=callback
		}
	if(menu_over_css&&menu_out_css)
		{
		this.menu_over_css[cid]=menu_over_css;
		this.menu_out_css[cid]=menu_out_css
		}
	return this.menu_registered[cid]
	};

ips_menu.prototype.close=function()
	{
	if(this.menu_cur_open)
		{
		this.menu_registered[this.menu_cur_open].close()
		}
	};

function ips_menu_class(cid)
	{
	this.cid=cid;
	this.initialized=false;
	this.init_control_object();
	this.init_menu()};
	ips_menu_class.prototype.init_control_object=function()
		{
		this.cid_obj=document.getElementById(this.cid);
		try
			{
			this.cid_obj.style.cursor="pointer"
			}
		catch(e)
			{
			this.cid_obj.style.cursor="hand"
			}
		
		this.cid_obj.unselectable=true;
		
		if(ipsmenu.menu_open_event[this.cid]=='onmouseover')
			{
			this.cid_obj.onmouseover=ips_menu_events.prototype.event_onclick
			}
		else
			{
			this.cid_obj.onclick=ips_menu_events.prototype.event_onclick;
			this.cid_obj.onmouseover=ips_menu_events.prototype.event_onmouseover
			}
		this.cid_obj.onmouseout=ips_menu_events.prototype.event_onmouseout
		};
	
	ips_menu_class.prototype.init_menu=function()
		{
		this.cid_menu_obj=document.getElementById(this.cid+'_menu');
		if(this.cid_menu_obj)
			{
			if(this.initialized){return}
			this.cid_menu_obj.style.display="none";
			this.cid_menu_obj.style.position="absolute";
			this.cid_menu_obj.style.left="0px";
			this.cid_menu_obj.style.top="0px";
			this.cid_menu_obj.onclick=ipsclass.cancel_bubble_low;
			this.cid_menu_obj.zIndex=50;
			this.initialized=true
			}
		};
	ips_menu_class.prototype.open=function(obj)
		{
		if(!this.cid_menu_obj)
			{
			this.initialized=false;
			this.init_menu()
			}
		if(ipsmenu.menu_cur_open!=null)
			{
			ipsmenu.menu_registered[ipsmenu.menu_cur_open].close()
			}
		if(ipsmenu.menu_cur_open==obj.id)
		{return false}
		ipsmenu.menu_cur_open=obj.id;
		var left_px=ipsclass.get_obj_leftpos(obj);
		var top_px=ipsclass.get_obj_toppos(obj)+obj.offsetHeight;
		var ifid=obj.id;
		
		this.cid_menu_obj.style.zIndex=-1;
		this.cid_menu_obj.style.display="";
		var width=parseInt(this.cid_menu_obj.style.width)?parseInt(this.cid_menu_obj.style.width):this.cid_menu_obj.offsetWidth;
		
		if((left_px+width)>=document.body.clientWidth)
			{
			left_px=left_px+obj.offsetWidth-width
			}
		if(is_moz)
			{
			top_px-=1
			}
		this.cid_menu_obj.style.left=left_px+"px";
		this.cid_menu_obj.style.top=top_px+"px";
		this.cid_menu_obj.style.zIndex=100;
		if(ipsmenu.menu_openfuncs[obj.id])
			{
			eval(ipsmenu.menu_openfuncs[obj.id])
			}
		if(is_ie)
			{
			try
				{
				if(!document.getElementById('if_'+obj.id))
					{
					var iframeobj=document.createElement('iframe');
					iframeobj.src='javascript:;';
					iframeobj.id='if_'+obj.id;document.getElementsByTagName('body').appendChild(iframeobj)
					}
				else
					{
					var iframeobj=document.getElementById('if_'+obj.id)
					}
				iframeobj.scrolling='no';
				iframeobj.frameborder='no';
				iframeobj.className='iframeshim';
				iframeobj.style.position='absolute';
				iframeobj.style.width=parseInt(this.cid_menu_obj.offsetWidth)+'px';
				iframeobj.style.height=parseInt(this.cid_menu_obj.offsetHeight)+'px';
				iframeobj.style.top=this.cid_menu_obj.style.top;
				iframeobj.style.left=this.cid_menu_obj.style.left;
				iframeobj.style.zIndex=99;
				iframeobj.style.display="block"
				}
			catch(error){}
			}
	
	if(is_safari)
		{
		try{mlinks=this.cid_menu_obj.getElementsByTagName('a');
		
			for(var i=0;i<=mlinks.length;i++)
				{
				if(mlinks[i]!=null&&mlinks[i].href!=null&&mlinks[i].href&&(mlinks[i].href.indexOf('#',0)!=(mlinks[i].href.length-1)))
					{
					mlinks[i].onmousedown=ips_menu_events.prototype.event_safari_onclick_handler;
					mlinks[i].id='saf-link-'+this.cid+i
					}
				}
			}
		catch(error){}
		}
	
	if(this.cid_obj.editor_id)
		{
		this.cid_obj.state=true;
		IPS_editor[this.cid_obj.editor_id].set_menu_context(this.cid_obj,'mousedown')
		}
	return false
	};
	
ips_menu_class.prototype.close=function()
	{
	if(this.cid_menu_obj!=null)
		{
		this.cid_menu_obj.style.display="none"
		}
	else if(ipsmenu.menu_cur_open!=null)
		{
		ipsmenu.menu_registered[ipsmenu.menu_cur_open].cid_menu_obj.style.display='none'
		}
	ipsmenu.menu_cur_open=null;
	
	if(this.cid_obj)
		{
		if(ipsmenu.menu_out_css[this.cid_obj.id])
			{
			this.cid_obj.className=ipsmenu.menu_out_css[this.cid_obj.id]
			}
		}
	if(is_ie)
		{try{document.getElementById('if_'+this.cid).style.display="none"}
		catch(error){}
		}
	
	if(this.cid_obj.editor_id)
		{
		this.cid_obj.state=false;
		IPS_editor[this.cid_obj.editor_id].set_menu_context(this.cid_obj,'mouseout')
		}
	};

ips_menu_class.prototype.hover=function(e)
	{
	if(ipsmenu.menu_cur_open!=null)
		{
		if(ipsmenu.menu_registered[ipsmenu.menu_cur_open].cid!=this.id)
			{this.open(e)
			}
		}
	};

function ips_menu_events(){};

ips_menu_events.prototype.event_safari_onclick_handler=function()
	{
	if(this.id)
		{
		window.location=document.getElementById(this.id).href
		}
	};

ips_menu_events.prototype.event_onmouseover=function(e)
	{
	e=ipsclass.cancel_bubble(e,true);
	ipsmenu.menu_registered[this.id].hover(this);
	if(ipsmenu.menu_over_css[this.id])
		{
		this.className=ipsmenu.menu_over_css[this.id]
		}
	};

ips_menu_events.prototype.event_onmouseout=function(e)
	{
		
	e=ipsclass.cancel_bubble(e,true);
	
	if(ipsmenu.menu_out_css[this.id]&&ipsmenu.menu_cur_open!=this.id)
		{
		/*this.className=ipsmenu.menu_out_css[this.id]*/
		ipsmenu.menu_registered[this.id].close();
		}
	
	};

ips_menu_events.prototype.event_onclick=function(e)
	{
	e=ipsclass.cancel_bubble(e,true);
	if(ipsmenu.menu_cur_open==null)
		{
		if(ipsmenu.menu_over_css[this.id])
			{
			this.className=ipsmenu.menu_over_css[this.id]
			}
		ipsmenu.menu_registered[this.id].open(this)
		}
	else
		{
		if(ipsmenu.menu_cur_open==this.id)
			{
			ipsmenu.menu_registered[this.id].close();
			if(ipsmenu.menu_out_css[this.id])
				{
				this.className=ipsmenu.menu_out_css[this.id]
				}
			}
		else
			{
			if(ipsmenu.menu_over_css[this.id])
				{
				this.className=ipsmenu.menu_over_css[this.id]
				}
			ipsmenu.menu_registered[this.id].open(this)
			}
		}
	};

function menu_do_global_init()
	{
	document.onclick=menu_action_close;
	if(ipsmenu.dynamic_html!=null&&ipsmenu.dynamic_html!=''){}
	if(ipsmenu.dynamic_register.length)
		{
		for(var i=0;i<ipsmenu.dynamic_register.length;i++)
			{
			if(ipsmenu.dynamic_register[i])
				{
				ipsmenu.register(ipsmenu.dynamic_register[i])}}}};

function menu_action_close(e)
	{
	try{
		if(e.button==2||e.button==3){return}
		}
	catch(acold){};
	ipsmenu.close(e)
	};