﻿// Functions for the main menu

// stored if the current browser is IE 6
var isIE6 = checkForIE6();

// stores all hidden selectboxes
var _hiddenSelectboxes = null;


function menuMouseOver(listItem) {
	if(!isIE6)
		return;
		
	if(_hiddenSelectboxes != null) {
		// show hidden selectboxes
		menuShowHiddenSelectBoxes();
	}
	
	// get all direct submenu items
	var subItems = listItem.getElementsByTagName("li");
	
	// get all select boxes on the page
	var selectboxes = document.getElementsByTagName("select");
	
	// check if any of this selectboxes if overlapped by a 
	// submenu item.
	_hiddenSelectboxes = new Array();
	for(var i = 0; i < selectboxes.length; i++) {
		var selectBox = selectboxes[i];
		
		for(var k = 0; k < subItems.length; k++) {
			var li = subItems[k];
			
			if(menuOverlapsObject(li, selectBox)) {
				_hiddenSelectboxes.push(selectBox);
				break;
			}
		}
	}
	
	// hide all dropdown boxes
	//_hiddenSelectboxes = selectboxes;
	
	// hide all overlapped dropdown boxes
	for(var i = 0; i < _hiddenSelectboxes.length; i++) {
		_hiddenSelectboxes[i].style.visibility = "hidden";
	}
}

/**
 * Triggered, if the mouse moves out of a menu item
 **/
function menuMouseOut(listItem) {
	if(_hiddenSelectboxes == null)
		return;
		
	menuShowHiddenSelectBoxes();
}

/**
 * Check if the object if overlapped by the target (or vice versa?)
 **/
function menuOverlapsObject(target, obj) {
	// hide currently all dropdown boxes
	return true;
	
	return elementOverlapsObject(target, obj);
}

function elementOverlapsObject(target, obj) {
	if (!obj) 
		return false;

	var result = false;
	var l = menuGetParentProps(target, "offsetLeft");
	var t = menuGetParentProps(target, "offsetTop");
	var r = l + Number(target.offsetWidth);
	var b = t + Number(target.offsetHeight);
	var ol = menuGetParentProps(obj, "offsetLeft");
	var ot = menuGetParentProps(obj, "offsetTop");
	var or = ol + Number(obj.offsetWidth);
	var ob = ot + Number(obj.offsetHeight);
	
	// Debug
	//alert('l=' + l + ', t=' + t + ', r=' + r + ', b=' + b + ', ol=' + ol + ', ot=' + ot + ', or=' + or + ', ob=' + ob);
	
	if (ol <= l) {
		if (ot <= t)
			result = (ob > t) && (or > l);
		else 
			result = (ot <= b) && (or > l);
	} else if (ol <= r) {
		if (ot <= t)
			result = (ob > t);
		else
			result = (ot <= b);
	}
		
	return result;
}

/**
 * Returns the sum of the property "prop" along the offsetParent row of elem
 **/
function menuGetParentProps(elem, prop) {
	var result = 0;
	while (elem != null) {
		result += elem[prop];
		elem = elem.offsetParent;
	}
	return result;
}

/**
 * Shows all previously hidden selectboxes
 **/
function menuShowHiddenSelectBoxes() {
	for(var i = 0; i < _hiddenSelectboxes.length; i++) {
		_hiddenSelectboxes[i].style.visibility = "visible";
	}
	
	_hiddenSelectboxes = null;
}

/**
 * Returns true, if the current browser is IE 6 (or below)
 **/
function checkForIE6() {
	var mmUA = navigator.userAgent;
	var ie = mmUA.search(/MSIE/i);
	
	if (ie >= 0) {
		ieVersion = mmUA.substr(ie + 4, 3);
		return (parseInt(ieVersion) < 7.0);
	}
	
	return false;
}
