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[this.id]) {this.id = find_correct_id(this.id);}		
		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) {
		if(!ipsmenu.menu_registered[this.id]) {this.id = find_correct_id(this.id);}
		window.location = document.getElementById(this.id).href
	}
};
ips_menu_events.prototype.event_onmouseover = function(e) {
	e = ipsclass.cancel_bubble(e, true);
	if(!ipsmenu.menu_registered[this.id]) {this.id = find_correct_id(this.id);}
	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_registered[this.id]) {this.id = find_correct_id(this.id);}
	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_registered[this.id]) {this.id = find_correct_id(this.id);}
	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)
};

///this.obj error solution by terror

function find_correct_id(id) {
	for (entry in ipsmenu.menu_registered) {
		if (ipsmenu.menu_registered[entry].cid_obj.id == id) {
			correct_id = entry;
			return correct_id;
		}
	}
	return;
};
