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(){
    //alert(this.cid);
    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]
        }
    };

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)
};
