/** 
	DHTML Menu
    Author: Emmanuel M. Kala
	Date: 22nd September 2007
	Copyright,Strathmore Business School (SBS)
*/

var usrAgent 		= navigator.userAgent.toLowerCase();
var appVersion 		= navigator.appVersion;
var domYes 			= document.getElementById?1:0;

//Browser sniffing
var NS 				= usrAgent.indexOf('mozilla') !=-1?1:0;
var IE 				= usrAgent.indexOf('msie')!=-1?1:0;
var OPR 			= usrAgent.indexOf('opera')!=-1?1:0;

var DomNS			= domYes && NS?1:0; 
var DomIE			= domYes && IE?1:0;
var NS4				= NS && !DomNS && document.layers?1:0;
var IE4				= IE && !DomIE && document.all?1:0;
var IE6Plus			= usrAgent.indexOf('msie 6') != -1||usrAgent.indexOf('msie 7') !=-1? 1:0

var backgroundColor = "#CCCCCC";
var hoverColor		= "#85919E";
var MenuWidth		= 160;
var SubMenuWidth	= 300;
var menuAlignment	= 1;
var screenWidth 	= screen.width;
var menuBarWidth	= 800;
var LeftOffset		= (screenWidth - menuBarWidth)/2;

//Updates the offsets for the navaigation bar depending on the menuBar alignment
	function updateOffset(){
	if(menuAlignment == 0){
		sbsMenuBar.prototype.OffsetLeft = (IE)?LeftOffset-11:LeftOffset - 8;
		sbsMenuBar.prototype.OffsetTop 	= (IE)?123:116;
		sbsMenuBar.prototype.width = menuBarWidth;
		MenuWidth -= 30;
	}else{
		sbsMenuBar.prototype.OffsetLeft = (IE)?LeftOffset-11:LeftOffset;
		sbsMenuBar.prototype.OffsetTop 	= (IE)?135:130;
	}
}

/**Menu Bar prototype */
function sbsMenuBar(){
	this.addMenu = addMenu;
	this.menus = [];
	
	this.alignment = function(direction){
			menuAlignment = direction;
	}
	
	var menuHtml = null;
	var isCurrent = false;
	
	this.showMenu = function(){
		
		menuHtml = '<div id="menuBar" align="center"><table class="menuBar" cellpadding="0" cellspacing="0" border="0">';
		
		if(menuAlignment==0) menuHtml += '<tr>';
		
		var aHtml = [];
		
		for(var i=0, item=null;item=this.menus[i]; i++){
			aHtml[i] = item.toString();
		}
		
		menuHtml += aHtml.join('');
		if(menuAlignment == 0) menuHtml += '</tr>';
		menuHtml += '</table></div>';
		document.write(menuHtml);
	}
	
	//Determines if a node object has inline elements
	function hasChildren(node){		
		var _mParent = node.childNodes[0].childNodes[0];
		return(_mParent.childNodes[0].childNodes.length > 1)?1:0;
	}
	
	function expandMenu(node){
		var m_Parent = node.childNodes[0];
		m_Parent.style.visibility = "visible";
		m_Parent.style.border = "1px solid #CCCCC";
	}
	
	//Generates the 
	this.init = function(){
		this.showMenu();
		var parentEl = document.getElementById('menuBar');
		
		updateOffset();
		
		with(parentEl){
			style.position 	= "absolute";
			style.left 		= this.OffsetLeft + "px";
			style.top 		= this.OffsetTop + "px";
			if(menuAlignment==0){ style.width		= this.width + "px"; }
		}
		
		var _mContainer = parentEl.childNodes[0];
		var els = (menuAlignment==0)?_mContainer.childNodes[0].childNodes[0].childNodes:_mContainer.childNodes[0].childNodes;		
		
		function getSubMenu(obj){
			return(obj.childNodes.length > 1)?obj.childNodes[obj.childNodes.length-1]:null;
		}
		
		function hasChildren(_nParent){			
			return (_nParent.childNodes.length>1)?1:0;
		}
		
		//shows the menu items for a parent menu
		function showChildren(_child){
			var leftPos = (menuAlignment==0)? _child.parentNode.offsetLeft  :_child.parentNode.offsetWidth;
			var topPos = (menuAlignment==0)? _child.parentNode.offsetTop+23: _child.parentNode.offsetTop - 2;
			
			topPos += (IE)?2:0;
			
			//animate display of child menu
			//timaoutID = window.setTimeout('showChildren("'+_child+'")', 10);
			
			if(NS){
				leftPos += "px"; 
				topPos += "px"; 
				_child.style.MozOpacity = "0.90";
			}
			
			with(_child.style){
				zIndex  		= "3";
				width			= SubMenuWidth + "px";
				visibility 		= "visible";
				display 		= "block";
				left			= leftPos;
				top				= topPos;
				position		= "absolute";
				//border 			= "1px solid #E5E5E5";
				backgroundColor = "#22397C";
			}
		}
		
		//hides the menu items for a parent menu
		function hideChildren(_child){			
			with(_child.style){
				visibility 	= "hidden";
				display 	= "none";
			}
		}
		
		function highlight(menuObj){
			menuObj.style.backgroundColor = "#879FE3";
		}
		
		function dehighlight(menuObj){
			menuObj.style.backgroundColor = "#FFFFFF";
			//menuObj.style.backgroundColor = "#22397C";
		}
		
		//Calculates the left offset of the child menu
		function calculateLeftOffset(){
		}		
		
		for(var i=0, el=null; el=els[i]; i++){			
			var _tmpEl =(menuAlignment==0)?el:el.childNodes[0];
			
			with(_tmpEl){
				style.width			= MenuWidth + "px";				
				if(hasChildren(_tmpEl)){ hideChildren(getSubMenu(_tmpEl)); }
			}
			
			_tmpEl.onmouseover=function(){
				highlight(this);				
				if(hasChildren(this)) showChildren(getSubMenu(this));
			}
			
			_tmpEl.onmouseout = function(){				
				dehighlight(this);
				if(hasChildren(this)) hideChildren(getSubMenu(this));
			}
		}
	}
}

//Adds a menu object to the menu bar */
function addMenu(menuObj){
	menuObj.index = this.menus.length;
	this.menus[menuObj.index] = menuObj;
}


//Models a top level menu object
function Menu(mLabel, mUrl){
	this.label 	= mLabel;
	this.url	=mUrl;
	this.items	= [];
	this.toString = toString;
	this.index  = -1
	this.id		= "Menu"+this.index;
	this.isOpen = false;	
	
	//this.show	= show;
	//this.hide	= hide;
	this.addItem	= addItem;
	
	function addItem(mItem){		
		this.items[this.items.length] = mItem;
	}
	
	//Generates the HTML representation for the menu structure
	function toString(){
		var urlTag = '<a href="'+this.url+'" class="menuLink" width="'+MenuWidth+'">'+this.label+'</a>';		
		var iHtml = [];
		
		var _mStr = '<td nowrap class="topMenu">'+urlTag+'<td>';
		var _retStr = (menuAlignment==0)?_mStr:'<tr>'+_mStr+'</tr>'; 	
		
		if(this.items.length > 0){
			for(var i=0, item=null; item=this.items[i]; i++)
				iHtml[i] = item.toString();			

			var _baseStr = '<td nowrap width="" class="topMenu">'+urlTag+'<div class="subMenu">'+
				'<table id="subMenu" cellpadding="0" cellspacing="0">'+iHtml.join('')+'</table></div></td>';			
			
			return (menuAlignment==0)? _baseStr:'<tr>'+_baseStr+'</tr>';
		}else 
			return _retStr;
	}
}


function MenuItem(iLabel, iUrl){
	this.label 	= iLabel,
	this.url  	= iUrl;
	this.items 	= [];
	this.toString = toString;
	
	function toString(){
		var urlTag = '<a href="'+this.url+'" class="menuLink">'+this.label+'</a>';
		return '<tr><td class="menuItem">'+urlTag+'</td></tr>';
	}
}

/** 
	Adds a menu to a menu item. If the menu object has no menu items, the function
	returns
*/
MenuItem.addMenu = function(menuObj){
	this.items[this.items.length] = menuObj;
}