//addEvent(window, 'load', function(){Menu.init('main-nav')})

// sinusoidal easing out - decelerating to zero velocity
Math.easeOutSine = function(t,b,c,d){
	return c*Math.sin(t/d*(Math.PI/2))+b;
}

Tween = {
	onComplete: [],

	resizeTo: function(id, endH, duration, fn, startH, startTime)
	{
		var obj = document.getElementById(id);
		
		if(!startH) var startH = obj.offsetHeight;
		if(!startTime) var startTime = new Date().getTime();
		
		var elapsed	= new Date().getTime() - startTime;
		
		if (elapsed < duration){
			obj.style.height = Math.easeOutSine(elapsed,startH,(endH-startH),duration) + 'px';
			setTimeout('Tween.resizeTo("'+ id +'",'+ endH +','+ duration +','+ fn +','+ startH +','+ startTime +')',0);
		}
		else{
			obj.style.height = endH + 'px';
			if (fn) eval(Tween.onComplete[id]);
		}
	}
}

Menu = {
	current: null,
	orig_height: [],

	toggle:function(){
		var p = this.parentNode;
		var o = p.getElementsByTagName('UL')[0];
		var delay = 0;
		if(p.className.indexOf('smopen') > -1){ // close
			var h = 0;
			Tween.onComplete[o.id] = 'Menu.current = null';
			var fn = true;
		}
		else{ // open
			var h = Menu.orig_height[o.id.replace('ul','')];
			var fn = false;
			if(Menu.current){ // close any currently open menu items
				var u = Menu.current;
				var l = u.parentNode;
				delay = 100;
				Tween.onComplete[u.id] = 'if(Menu.current.id == "'+ u.id +'")Menu.current = null';
				Tween.resizeTo(u.id, 0, 150, true);
				l.className = l.className.indexOf('smopen') > -1 ? l.className.replace('smopen','smclosed') : l.className.replace('smclosed','smopen');
			}
			Menu.current = o;
		}
		this.blur();
		p.className = p.className.indexOf('smopen') > -1 ? p.className.replace('smopen','smclosed') : p.className.replace('smclosed','smopen');
		return !setTimeout('Tween.resizeTo("'+ o.id +'",'+ h +',200,'+ fn +')',delay);
	},

	init:function(id){
		var bid = document.body.id.replace('m','').split('-');
		var ul = document.getElementById(id);
		var li = [], tmpli = ul.childNodes;
		
		for(var i = 0; i < tmpli.length; i++) if(tmpli[i].tagName == 'LI') li.push(tmpli[i]);

		for(var i = 0; i < li.length; i++){
			
			var sul = li[i].getElementsByTagName('UL');

			if(sul.length > 0){
				var indx = Menu.orig_height.push(sul[0].offsetHeight) - 1;

				sul[0].id = 'ul' + indx;
				li[i].getElementsByTagName('A')[0].onclick = Menu.toggle;

				if(bid[0]-1 == i){
					li[i].className = 'smopen selected';
					Menu.current = sul[0];
					sul[0].style.height = Menu.orig_height[indx] + 'px';

					if(bid[1] > 0){
						var sli = [], tmpsli = sul[0].childNodes;
						for(var j = 0; j < tmpsli.length; j++) if(tmpsli[j].tagName == 'LI') sli.push(tmpsli[j]);
						sli[bid[1]-1].className = 'selected';
						// Third Level
						var slili = sli[bid[1]-1].getElementsByTagName('LI');
						if(slili.length > 0 && bid[2]){
								slili[0].parentNode.style.height = 'auto';
								var pul = slili[0].parentNode.parentNode.parentNode;
								pul.style.height = 'auto';
								Menu.orig_height[pul.id.replace('ul','')] = pul.offsetHeight;
								if(bid[2] > 0) slili[bid[2]-1].className = 'selected';
						}
					}
				}
				else li[i].className = 'smclosed';
			}
			else if(bid[0]-1 == i) li[i].className = 'selected';
		}

		// prevent accidental selection of menu text
		var disabletext = function(e){ return!hasParent(e.target,id) }
		if(/MSIE/.test(navigator.userAgent)) ul.onselectstart = disabletext; 
		else document.onmousedown = disabletext;
	}
}

function hasParent(o,id) {
	if (o == null) return false;
	else if (o.nodeType == 1 && o.id == id) return true;
	else if (o.parentNode != null) return hasParent(o.parentNode,id);
	else return false;
}
// emulates push for browsers that don't support it (Mac IE) 
Array.prototype.push = function(e) {
	this[this.length] = e;
	return this.length;
}


// written by Dean Edwards, 2005
// http://dean.edwards.name/
function addEvent(element, type, handler) {
	// assign each event handler a unique ID
	if (!handler.$$guid) handler.$$guid = addEvent.guid++;
	// create a hash table of event types for the element
	if (!element.events) element.events = {};
	// create a hash table of event handlers for each element/event pair
	var handlers = element.events[type];
	if (!handlers) {
		handlers = element.events[type] = {};
		// store the existing event handler (if there is one)
		if (element["on" + type]) {
			handlers[0] = element["on" + type];
		}
	}
	// store the event handler in the hash table
	handlers[handler.$$guid] = handler;
	// assign a global event handler to do all the work
	element["on" + type] = handleEvent;
};
// a counter used to create unique IDs
addEvent.guid = 1;

function handleEvent(event) {
	// grab the event object (IE uses a global event object)
	event = event || window.event;
	// get a reference to the hash table of event handlers
	var handlers = this.events[event.type];
	// execute each event handler
	for (var i in handlers) {
		this.$$handleEvent = handlers[i];
		this.$$handleEvent(event);
	}
};

/* get window positions determined by screen height and width
************************/
function getAlignPos(width)
{
	var browX = screen.width
	var newBrowX = (browX - width)/2

	return newBrowX;
}

function getValignPos(height)
{
	var browY = screen.height
	var newBrowY = (browY - height)/2

	return newBrowY;
}

