// MENU set construct0r
function ew_menu_set(name)
{
	// properties
	this.name = name;
	this.menu_struct = new Array();
	this.timeout = 500;
	this.menucss = '';
	this.uicss = '';
	this.divEnabled = false;
	
	// methods
	this.create_menu = create_menu;	
	this.place = place;
	this.show = show;
	this.hide = hide;
	this.chk_to_hide = chk_to_hide;
	this.setDivClass = setDivClass;
	this.setUlClass = setUlClass;
	this.enableDivWrapper = enableDivWrapper;
	
	function setDivClass(name) {
		this.menucss = name;
	}
	
	function setUlClass(name) {
		this.uicss = name;
	}
	
	function enableDivWrapper(value) {
		this.divEnabled = value;
	}
	
	function create_menu(name, width, x_offset, y_offset) {			
		this.menu_struct[name] = new ew_drop_menu(name, width, this.name, x_offset, y_offset);
		return this.menu_struct[name];		
	}
		
	function show(id_list, what) {
		id_array = id_list.split(',');		
		for(i = 0; i < id_array.length; i++) {
			this.menu_struct[id_array[i]].to_hide = 0;			
		}
		
		// loop thru entire menu structure, turning off all unrequired elements
		// this behavior is to eliminate menus remaining open when going from one top level menu to another
		for(drop_menu_id in this.menu_struct) {
			var drop_menu = this.menu_struct[drop_menu_id];
			var menuElement = document.getElementById(drop_menu.name);						
			if(typeof(what) != 'undefined') {
				menuElement.style.left = findPosX(what) + drop_menu.x_offset + "px";
				menuElement.style.top = findPosY(what) + drop_menu.y_offset + "px";
			}
			
			if(drop_menu.to_hide == 1 && !in_array(id_array, drop_menu.name)) {
				menuElement.style.visibility = "hidden";
			} else {
				menuElement.style.visibility = "visible";
			}
		}
	}
	
	function hide(id_list) {
		id_array = id_list.split(',');
		for (i=0; i < id_array.length; i++) {			
			this.menu_struct[id_array[i]].to_hide = 1;
			setTimeout(this.name + '.chk_to_hide(\'' + id_array[i] + '\');', this.timeout);
		}
	}
	
	function chk_to_hide(id) {
		if(this.menu_struct[id].to_hide == 1) {		
			document.getElementById(id).style.visibility = "hidden";
		}
	}
	
	function place() {
		
		for(drop_menu_id in this.menu_struct) {
			drop_menu = this.menu_struct[drop_menu_id];
		
			// init menu
			html_menu = '';
			if(this.divEnabled==true) html_menu += '<div class="' + this.menucss + '">';
			html_menu += '<ul ';
			if(this.divEnabled==false) html_menu += 'class="ulClass" ';
			html_menu += '>';
			
			for(menu_item_id in drop_menu.menu_struct) {
				menu_item = this.menu_struct[drop_menu_id].menu_struct[menu_item_id];				
			
				// establish mouse_over and mouse_outs
					id_list = drop_menu.name;
					
					// TARGET MENU DEFINED / CHILD MENU
					if(typeof(menu_item.target_menu) != 'undefined'
						&& menu_item.target_menu != ''
						&& menu_item.target_menu != null)
					{
						id_list += ',' + menu_item.target_menu;
					}
					
					mouse_over = drop_menu.constructor_name + '.show(\'' + id_list + '\');';
					mouse_out = drop_menu.constructor_name + '.hide(\'' + id_list + '\');';
					
					html_menu += '<li>';
						html_menu += '<a href="' + menu_item.url;
						html_menu += '" target="' + menu_item.url_target;
						html_menu += '" onmouseover="';
						html_menu += mouse_over;
						html_menu += '" onmouseout="';
						html_menu += mouse_out;
						html_menu += '" >';
						html_menu += menu_item.description;
						html_menu += '</a>';
				html_menu += "</li>";
			}

			// terminate menu
			html_menu += '</ul>';
			if(this.divEnabled==true) html_menu += '</div>';
			// alert(html_menu);
			
			// div code
			id_list = drop_menu.name;
			
			mouse_out = drop_menu.constructor_name + '.hide(\'' + id_list + '\');';
			mouse_over = drop_menu.constructor_name + '.show(\'' + id_list + '\');';
			
			div_code = '';
			if(this.divEnabled==true){
			div_code += '<div id="' + drop_menu.name + '" style="width:' + drop_menu.width + 'px; position:absolute; ';			
			//div_code += 'margin-left:' + drop_menu.x_pos + 'px; top:' + drop_menu.y_pos + 'px; visibility:hidden; z-index:99; ';
			div_code += 'visibility:hidden; z-index:99;" ';
			div_code += 'onmouseover="' + mouse_over + ';" ';
			div_code += 'onmouseout="' + mouse_out + ';"';
			div_code += '>';}
			div_code += html_menu;
			if(this.divEnabled==true) div_code += '</div>';
			
			//alert(div_code);			
			document.write(div_code);
		}
		//alert(get_parents('test_child'));
	}
}
// MENU construct0r
function ew_drop_menu(name, width, constructor_name, x_offset, y_offset) {
	
	// properties
	this.name = name;
	this.constructor_name = constructor_name;
	this.width = width;
	this.to_hide = 1;
	this.menu_struct = new Array();	
	this.x_offset = x_offset;
	this.y_offset = y_offset;
	
	// methods
	this.add_nav = add_nav;
	
	// MENU-ITEM construct0r
	function menu_item(str_desc, str_link, target_menu, url_target) {
		this.description = str_desc;
		this.url = str_link;
		if(typeof(url_target) != 'undefined')
			{this.url_target = url_target;}
		else
			{this.url_target = '_top';}
		
		this.target_menu = target_menu;
	}
	
	// METHODS
	function add_nav(str_desc, str_link, target_menu, url_target) {
		return this.menu_struct[this.menu_struct.length] = new menu_item(str_desc, str_link, target_menu, url_target);
	}
	
	function do_hide(id) {
		document.getElementById(id).style.visibility = "hidden";
	}
}

function in_array(array_var, val) {
	for (indx=0; indx < array_var.length; indx++) {
		if(array_var[indx] == val) {
			return true;
		}
	}
	return false;
}

