var menuPosition = 0;
var animator;
var menuTimeout;
var menu;
var menuButton;
var menuHeight = 128;
var eventListenersSet = 0;
var timeout = 1000;
var isIEMac = false;
var isSafari = false;
var safariVersion;

function addEvent(obj, evType, fn){
	if (obj.addEventListener){
		obj.addEventListener(evType, fn, true);
		return true;
	} else if (obj.attachEvent){
		var r = obj.attachEvent("on"+evType, fn);
		return r;
	} else {
		if (evType == 'mouseover') {
			obj.onmouseover = fn;
		} else if (evType == 'mousemove') {
			obj.onmousemove = fn;
		} else if (evType == 'mouseout') {
			obj.onmouseout = fn;
		} else if (evType == 'click') {
			obj.onclick = fn;
		} else if (evType == 'load') {
			obj.onload = fn;
		} else {
			return false;
		}
	}
}

function getEventTarget(e) {
	var t;
	if (e.target) {
		t = e.target;
	} else if (e.srcElement) {
		t = e.srcElement;
	}
	if (t.nodeType == 3) // defeat Safari bug
		t = t.parentNode;
	return t;
}

function openMenu(menuID, s) {
	if (isSafari) {
		menu = document.getElementById(menuID);
		menu.style.display = 'block';
		menuButton = s.parentNode;
		menuButton.className = 'hover';
		if (!eventListenersSet) {
			addEvent(menu, 'mouseover', cancelTimeout);
			addEvent(menu, 'mouseout', resetTimeout);
			addEvent(s, 'mouseout', closeSooner);
			addEvent(document, 'click', closeMenu);
			
			l = menuButton.parentNode.parentNode.getElementsByTagName('A');
			for (i = 0; i < l.length; i++) {
				if (l[i] != menuButton) {
					addEvent(l[i], 'mouseover', closeMenu);
				}
			}
			
			eventListenersSet = 1;
		}
	} else {
		clearInterval(menuTimeout);
		menu = document.getElementById(menuID);
		if (menuPosition < menuHeight) {
			clearInterval(animator);
			menuButton = s.parentNode;
			menuButton.className = 'hover';
			menu.style.display = 'block';
			menu.style.top = (40 - menuHeight + menuPosition) + 'px';
			menu.style.clip = 'rect(' + (menuHeight - menuPosition) + 'px auto auto auto)';
			animator = setInterval('slideDown()', 20);
			//menuTimeout = setInterval('closeMenu()', timeout);
			if (!eventListenersSet) {
				addEvent(menu, 'mouseover', cancelTimeout);
				addEvent(menu, 'mouseout', resetTimeout);
				addEvent(s, 'mouseout', closeSooner);
				addEvent(document, 'click', closeMenu);
				
				l = menuButton.parentNode.parentNode.getElementsByTagName('A');
				for (i = 0; i < l.length; i++) {
					if (l[i] != menuButton) {
						addEvent(l[i], 'mouseover', closeMenu);
					}
				}
				
				eventListenersSet = 1;
			}
		}
	}
}

function slideDown() {
	menuPosition += 12;
	if (menuPosition >= menuHeight) {
		menuPosition = menuHeight;
		clearInterval(animator);
	}
	menu.style.top = (40 - menuHeight + menuPosition) + 'px';
	menu.style.clip = 'rect(' + (menuHeight - menuPosition) + 'px, auto, auto, auto)';
}

function slideUp() {
	menuPosition -= 6;
	if (menuPosition <= 0) {
		menuPosition = 0;
		menu.style.display = 'none';
		clearInterval(animator);
		clearInterval(menuTimeout);
	}
	menu.style.top = (40 - menuHeight + menuPosition) + 'px';
	menu.style.clip = 'rect(' + (menuHeight - menuPosition) + 'px auto auto auto)';
}

function closeSooner() {
	clearInterval(menuTimeout);
	menuTimeout = setInterval('closeMenu()', 100);
}

function resetTimeout() {
	clearInterval(menuTimeout);
	menuTimeout = setInterval('closeMenu()', timeout);
}

function cancelTimeout(e) {
	clearInterval(menuTimeout);
	//menuTimeout = setInterval('closeMenu()', timeout);
}

function closeMenu() {
	if (isSafari) {
		clearInterval(menuTimeout);
		menu.style.display = 'none';
		menuButton.className = '';
	} else {
		clearInterval(menuTimeout);
		clearInterval(animator);
		animator = setInterval('slideUp()', 20);
		menuButton.className = '';
	}
}

function navClicked(e) {
	if (!e) var e = window.event;
	var t = getEventTarget(e);
	
	window.location.href = t.parentNode.href;
	return true;
}

function initMenu() {
	isIEMac = window.ActiveXObject && navigator.platform.indexOf( 'Mac' ) + 1 && !navigator.__ice_version && !window.opera;
	isSafari = navigator.appVersion.indexOf('Safari') + 1;

	if (isIEMac) {
		var navMenu = document.getElementById('menu');
		var items = navMenu.getElementsByTagName('SPAN');
		for (i = 0; i < items.length; i++) {
			if (items[i].parentNode.nodeName.toUpperCase() == 'A') {
				addEvent(items[i], 'click', navClicked);
			}
		}
	}

	if (isSafari) {
		safariVersion = parseInt(navigator.appVersion.substr(isSafari + 6));
		setSafariNavPos('services', 80);
		setSafariNavPos('newsletter', 195);
		setSafariNavPos('about', 306);
		setSafariNavPos('faq', 430);
		setSafariNavPos('home', 494);
	}
}

function mouseGoesOver(e) {
	if (!e) var e = window.event;
	var t = getEventTarget(e);
	t.parentNode.className = 'hover';
	t.style.display = 'block';
	t.style.zIndex = 100;
}

function mouseGoesOut(e) {
	if (!e) var e = window.event;
	var t = getEventTarget(e);
	t.parentNode.className = '';
	t.style.display = 'block';
	t.style.zIndex = 0;
}

function setSafariNavPos(n, x) {
	l = document.getElementById('link-'+n);
	if (l) {
		s = l.getElementsByTagName('SPAN');
		if (safariVersion < 100) {
			s[0].style.left = x + 'px';
			if (n != 'services') {
				addEvent(s[0], 'mouseover', mouseGoesOver);
				addEvent(s[0], 'mouseout', mouseGoesOut);
			}
		}
	}
}

function goMenu(selectBox) {
	url = selectBox.options[selectBox.selectedIndex].value;
	if (url != '') {
		window.location.href = url;
	}
}

addEvent(window, 'load', initMenu);

/**********/

var menuParent;
var theMenu;
var dropMenuButton;

function dropDown(a) {
	if (dropMenuButton) {
		dropUp(dropMenuButton);
		if (dropMenuButton == a) {
			dropMenuButton = null;
			return false;
		}
	}
	
	dropMenuButton = a;
	menuParent = a.parentNode.parentNode;
	m = menuParent.getElementsByTagName('UL');
	if (m.length > 0) {
		theMenu = m[0];
		theMenu.style.display = 'block';
	}
	return false;
}

function dropUp(a) {
	theMenu.style.display = 'none';
	theMenu = null;
	dropMenuButton = null;
	return true;
}

function docClick(e) {
	if (!e) var e = window.event;
	var t = getEventTarget(e);
	
	if (t && t.tagName && t.tagName == 'A') {
		if (t.parentNode.className && t.parentNode.className == 'menu') {
			window.location.href = t.href;
		}
	} else {
		if (theMenu) {
			theMenu.style.display = 'none';
			theMenu = null;
			dropMenuButton = null;
		}
	}
}

addEvent(document, 'click', docClick);
