// get by tag
function byTag(tag, obj)
{
	if (obj == null) {
		obj = document;
	}
	
	var col = [];
	tag = tag.split(",");
	for (var g = 0, l = tag.length; g < l; g ++) {
		var w = obj.getElementsByTagName(tag[g].toUpperCase());
		for (var q = 0, l2 = w.length; q < l2; q ++) {
			col.push(w[q]);
		}
	}		
	return col;
}

// 
function findParent(tag, obj)
{
	tag = tag.toUpperCase();
	while (obj && obj.tagName != tag) {
		obj = obj.parentNode;
	}
	return obj;
}

// extend objects
function extend(obj, props, force)
{
	for (var x in props) {
		if (typeof(obj[x]) == "undefined" || force) {
			obj[x] = props[x];
		}
	}
}

// returns objs document co-ordinates
function position(obj, type)
{
	var orig = obj;
	var retval = 0;
	if (type == "Left" && obj.x) {
		return obj.x;
	}
	else if (type == "Top" && obj.y) {
		return obj.y;
	}
	else {
		var useType = (type == "Left" || type == "Right" || type == "Center") ? "Left" : "Top";
		while (obj.offsetParent) {
			//if (obj && obj.style && obj.style.position) obj.style.position = "relative";
			retval += eval("obj.offset" + useType);
			obj = obj.offsetParent;
		}
		switch (type) {
			case "Center" : return retval + (orig.offsetWidth / 2); break;
			case "Right" : return retval + (orig.offsetWidth); break;
			default: return retval;
		}			
	}
	return false;
}

// Add easier event handling
if (! window.Event) {
	var Event = {};
}

// Event object extending
var ev = {
	
	get: function(e)
	{
		return (! e) ? window.event : e;
	},

	target: function(e)
	{
		e = this.get(e);
		return (e.target) ? e.target : (e.srcElement) ? e.srcElement : false;
	},

	add: function(elm, evType, fn, useCapture)
	{
		// cross-browser event handling for IE5+, NS6 and Mozilla By Scott Andrew
		if (elm.addEventListener) {
			elm.addEventListener(evType, fn, useCapture);
			return elm;
		} 
		else if (elm.attachEvent) {
			var r = elm.attachEvent('on' + evType, fn);
			return elm;
		} 
		else {
			elm['on' + evType] = fn;
			return elm;
		}	
	},
		
	key: function(e)
	{
		e = this.get(e);
		return (e.keyCode) ? e.keyCode : (e.which) ? e.which : e.charCode;
	},
		
	stop: function(e)
	{
		e = this.get(e);
		if (document.all) {
			e.returnValue = false;
			e.cancelBubble = true;
		}
		else {
			e.preventDefault();
			e.stopPropagation();
		}		
	}
	
};
extend(Event, ev);

var dropMenu = {
	
	menu:null,
	target:"mainMenu",
	
	setup:function()
	{
		if (typeof(dropMenu.target) == "string") {
			dropMenu.target = document.getElementById(dropMenu.target);
		}	
		if (dropMenu.target) {
			var li = byTag("LI", dropMenu.target);
			for (var q = 0, l = li.length; q < l; q ++) {
				var m = document.getElementById("dropdown" + li[q].className);
				if (m) {
					dropMenu.actions(m, li[q]);
				}
			}
		}
	},
	
	actions:function(m, li)
	{
		m.menuParent = li;
		Event.add(m, "mouseover", dropMenu.show, false);
		Event.add(li, "mouseover", dropMenu.show, false);
		Event.add(m, "mouseout", function(e) { dropMenu.startHide(e) }, false);
		Event.add(li, "mouseout", function(e) { dropMenu.startHide(e) }, false);
	},
	
	get:function(e)
	{
		var a = Event.target(e);
		var ul = findParent("UL", a);	
		if (ul && ul.className.match(/dropdown/)) {
			a = byTag("A", ul.menuParent)[0];
		}
		return a;
	},
	
	show:function(e)
	{
		var a = dropMenu.get(e);
		if (a.tagName == "A") {
			a = a.parentNode;
		}

		if (a != dropMenu.menu && dropMenu.menu != null) {
			dropMenu.hide(dropMenu.menu);
		}

		dropMenu.menu = a;
		//a.className = "on";
		clearTimeout(a.menuTimer);	

		var m = document.getElementById("dropdown" + ((a.tagName == "A") ? a.parentNode.className : a.className));
		m.style.left = (position(a, "Left") - document.getElementById("wrap").offsetLeft + 8) + "px";
		m.style.top = (position(a, "Top") + a.offsetHeight) + "px";
		m.style.display = "block";
		
	},
	
	startHide:function(e)
	{
		var a = dropMenu.get(e);
		if (a.tagName == "A") {
			a = a.parentNode;
		}
		a.menuTimer = setTimeout(function(){ dropMenu.hide(a); }, 250);
	},
	
	hide:function(a)
	{	
		var m = document.getElementById("dropdown" + ((a.tagName == "A") ? a.parentNode.className : a.className));	
		m.style.display = "none";
	}
};

//Event.add(window, "load", dropMenu.setup, false);
jQuery.event.add(window, "load", dropMenu.setup);