var cms_menus = new Array();

var table_class = "cmenu";
var td_class = "cmenu";
var td_class_over = "cmenu cmenu_hover";

var menu_id = 1;
var menu_debug = true;
var menu_keep_parent_highlighted = true;
var menu_offset_x = -10;
var menu_offset_y = 10;
var menu_gutter = 10;
//var menu_visible = false;

var _dom_parent = document;

function menu_item(label, onclick, parent, has_submenus)
{
	this.label = label;
	if (typeof(onclick) != "undefined") {
		this.onclick = onclick;
	}
	this.parent = (typeof(parent) == "undefined") ? 0 : parent;
	this.has_submenus = (typeof(has_submenus) == "undefined") ? false : has_submenus;
	this.menu_id = menu_id;
	cms_menus[menu_id] = this;
	menu_id ++;
}

function menu_position(divmenu, x, y)
{
	var my_x = (divmenu.id != "cms_menu_0") ? (x + dom_id(divmenu.parentmenu).offsetWidth + menu_offset_x) : x;
	var my_y = (divmenu.id != "cms_menu_0") ? (y + menu_offset_y) : y;
	
	if (window.navigator.userAgent.search(/MSIE/) == -1) {
		var screenwidth = window.innerWidth - menu_gutter;
		var screenheight = window.innerHeight - menu_gutter;
	}
	else {
		var screenwidth = _dom_parent.body.offsetWidth - menu_gutter;
		var screenheight = _dom_parent.body.offsetHeight - menu_gutter;
	}
	
	if ((my_x + divmenu.offsetWidth) > screenwidth) {
		my_x -= (divmenu.id != "cms_menu_0") ? ((divmenu.offsetWidth * 2) + (menu_offset_x * 2)) : divmenu.offsetWidth;
	}
	my_y += _dom_parent.body.scrollTop;
	if ((my_y + divmenu.offsetHeight) > screenheight) {
		my_y -= (divmenu.id != "cms_menu_0") ? divmenu.offsetHeight : divmenu.offsetHeight;
	}

	divmenu.style.left = my_x + "px";
	divmenu.style.top = my_y + "px";
}

function menu_show_main(event, refresh)
{	
	if (cms_menus.length == 0 || refresh) {
		menu_get_options();
	}
	var divmenu = _dom_parent.getElementById('cms_menu_0');

	if (divmenu) {
		_dom_parent.body.removeChild(divmenu);

	}
	var divmenu = menu_create('cms_menu_0');
	_dom_parent.body.appendChild(divmenu);
	menu_hide_children(divmenu.id);
	
	e = (typeof(event) != "object") ? window.event : event;
	menu_position(divmenu, e.clientX, e.clientY);
	divmenu.style.visibility = "visible";
	//menu_visible = true;

	return false;
}

function menu_show_sub(obj, parent)
{
	var divmenu = _dom_parent.getElementById("cms_menu_" + obj.menu_id);
	if (divmenu) {
		_dom_parent.body.removeChild(divmenu);
	}
	var	divmenu = menu_create("cms_menu_" + obj.menu_id);
	if (divmenu) {
		_dom_parent.body.appendChild(divmenu);
		divmenu.parentmenu = parent;		
		menu_position(divmenu, Math.floor(get_position(obj, "Left")), Math.floor(get_position(obj, "Top")));
		divmenu.style.visibility = "visible";
	}	
	menu_style_state(obj);
}

function menu_hide_children(id)
{
	var divs = _dom_parent.getElementsByTagName("div");
	for (var f = 0; f < divs.length; f ++) {
		if (divs[f].parentmenu && divs[f].parentmenu == id) {
			divs[f].style.visibility = "hidden";
			//menu_class_out(divs[f]);
			menu_hide_children(divs[f].id);
		}
	}
}

function menu_style_state(o)
{
	var pas = new Array();
	pas[0] = o.menu_id;
	var x = cms_menus[pas[0]];
	while (x.parent) {
		pas[pas.length] = x.parent;
		x = cms_menus[x.parent];
	}
	for (var f in cms_menus) {
		if (td = _dom_parent.getElementById("cms_menu_td_" + cms_menus[f].menu_id)) {
			if (array_pos(cms_menus[f].menu_id, pas) != -1) {
				td.className = td_class_over;
			}
			else {
				td.className = td_class;
			}
		}
	}
}

function menu_class_out(obj)
{
	obj.className = td_class;
}

function menu_create(parent)
{
	var d = _dom_parent.createElement("div");
	d.id = parent;
	d.style.position = "absolute";
	d.style.visibility = "hidden";

	var t = _dom_parent.createElement("table");
	t.cellPadding = 0;
	t.cellSpacing = 0;
	t.className = "cmenu";
	for (var c in cms_menus) {
		if ("cms_menu_" + cms_menus[c].parent == parent) {
			var tr = t.insertRow(t.rows.length);
			var td = tr.insertCell(0);
			td.className = td_class;
			td.menu_id = cms_menus[c].menu_id;
			td.id = "cms_menu_td_" + td.menu_id;			
			// mouseover actions
			var mo = new Array();
			//mo[mo.length] = "window.defaultStatus='ID = " + td.id + "'";
			mo[mo.length] = "menu_hide_children('" + parent + "')";	
			//mo[mo.length] = "this.className='" + td_class_over + "'";
			if (cms_menus[c].has_submenus) {							
				mo[mo.length] = "menu_show_sub(this, '" + parent + "')";
			}
			else {
				mo[mo.length] = "menu_style_state(this)";
			}
			// now add
			td.onmouseover = new Function(mo.join(";"));
			// mouseout actions
			var mo2 = new Array();
			mo2[mo2.length] = "menu_class_out(this)";				
			// add
			td.onmouseout = new Function(mo2.join(";"));
			// onclick
			if (typeof(cms_menus[c].onclick) != "undefined") {
				var oc = new Array();
				oc[oc.length] = "menu_hide_main()";	
				oc[oc.length] = cms_menus[c].onclick;	
				td.onclick = new Function(oc.join(";"));
			}
			td.innerHTML = cms_menus[c].label;
		}
	}	
	
	// dont add if menu is empty
	if (t.rows.length == 0) {
		return false;
	}
	else {
		d.appendChild(t);
		return d;
	}
}

// handles any clicks on the body, mainly used to hide menus
function menu_hide_main()
{
	// hide main main
	var	major = _dom_parent.getElementById("cms_menu_0");
	if (major) {
		major.style.display = "none";
		menu_hide_children("cms_menu_0");
		//menu_visible = false;
	}
}

function go(loc)
{
	document.location.href=loc;
}

function m_over(obj)
{
	obj.className='submenu_over';
    // obj.firstChild.style.color = "#6B001B";
}

function m_out(obj)
{
	obj.className='';
    // obj.firstChild.style.color = "#ffffff";
}