
var ShownMenu = 0;
var xobtn = null;
var ulIdPref = 'vbUL_';
var menuId = 'ymMenu';
var menuTimeout = 300;

function menuInit(){	
	document.write('<div id="' + menuId + '" ></div>');
	var ULs = document.getElementsByTagName('UL');
	for (var i=0, cnt=ULs.length; i<cnt; i++)
		if (ULs[i].id
		&& (ULs[i].id.substring(0, ulIdPref.length)==ulIdPref)
		&& !((ULs[i].parentNode) && (ULs[i].parentNode.parentNode)
		&& (ULs[i].parentNode.parentNode.id.substring(0, ulIdPref.length)==ulIdPref)
		))
			CreateMenu(ULs[i], 0, 0);

	//Detect browser
	isDOM=document.getElementById; //DOM1 browser (MSIE 5+, Netscape 6, Opera 5+)
	isOp=isO5=window.opera && isDOM; //Opera 5+
	isOp6=isOp && window.print; //Opera 6+
	isOp7=isOp && document.readyState; //Opera 7+
	isIE=document.all && document.all.item && !isOp; //Microsoft Internet Explorer 4+
	isIE5=isDOM && isIE; //MSIE 5+
	isNS4=document.layers; //Netscape 4.*
	isMz=isDOM && navigator.appName=="Netscape"; //Mozilla or Netscape 6.*
}
menuInit();

function getObjectSize(o){
	var w = (isOp&&!isOp7) ? o.style.pixelWidth  : isNS4 ? o.clip.width  : o.offsetWidth;
	var h = (isOp&&!isOp7) ? o.style.pixelHeight : isNS4 ? o.clip.height : o.offsetHeight;
	return {x:w, y:h};
}

function getClientSize(){
	var x=0,y=0,w=0,h=0,doc=document,win=window;
	var cond = (!doc.compatMode || doc.compatMode == 'CSS1Compat') && !win.opera && doc.documentElement;

	if(cond && doc.documentElement.clientHeight) h=doc.documentElement.clientHeight;
	else if(doc.body && doc.body.clientHeight) h=doc.body.clientHeight;
	else if(getDef(win.innerWidth,win.innerHeight,doc.width)) {
		h=win.innerHeight;
		if(doc.width>win.innerWidth) h-=16;
	};

	if(cond && doc.documentElement.clientWidth) w=doc.documentElement.clientWidth;
	else if(doc.body && doc.body.clientWidth) w=doc.body.clientWidth;
	else if(xDef(win.innerWidth,win.innerHeight,doc.height)) {
		w=win.innerWidth;
		if(doc.height>win.innerHeight) w-=160;
	}

	if(win.document.documentElement && win.document.documentElement.scrollLeft) x=win.document.documentElement.scrollLeft;
	else if(win.document.body && getDef(win.document.body.scrollLeft)) x=win.document.body.scrollLeft;

	if(win.document.documentElement && win.document.documentElement.scrollTop) y=win.document.documentElement.scrollTop;
	else if(win.document.body && getDef(win.document.body.scrollTop)) y=win.document.body.scrollTop;
	
	return {x:x,y:y,w:w,h:h};
}

function getDef(){
    for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])=='undefined') return false;}
    return true;
}

function getPos(obj){
	var l=0, t=0,  s='';
	while (obj)
	{
		l += obj.offsetLeft;
		t += obj.offsetTop;
		s += obj.tagName + ':'+obj.offsetLeft+','+obj.offsetTop;
		if (obj.style){
			s += '(' + obj.id + ',';
			s += obj.style.width + ',' + obj.style.height + ':' + obj.style.left + ',' + obj.style.top;
			s += ');';
		}
		else s += 'u;';
		obj = obj.offsetParent;
	};
	return {x: l, y: t};
}

function CreateMenu(ulParent, iParent, level){
	var menuCont = document.getElementById(menuId);

	var oMenu = document.createElement('div');
	menuCont.appendChild(oMenu);
	var oTable = document.createElement('table');
	oMenu.appendChild(oTable);

	oMenu.id = ulParent.id + 'tbl';
	oMenu.className = ulParent.className;
	oMenu.style.position = 'absolute';
	oMenu.iParent = iParent;
	
	oMenu.level = level;
	oMenu.style.zIndex = 9 + oMenu.level;
	oTable.cellSpacing = 0;
	oTable.className = 'main_dnnmenu_submenu';

	oMenu.onmouseover = function (){mover(this);};
	oMenu.onmouseout = function (){mout(this)};

	oMenu.ClearMenuMark = function(){
		for (var j = 0; j < this.childNodes[0].rows.length; j++){
			p = this.childNodes[0].rows[j];
			if (p.tagName == 'TR') p.className = p.className.replace(' main_dnnmenu_itemhover','');
		};
	};

	oMenu.smShown = 0;
	
	for (var i=0, cntLI=ulParent.childNodes.length; i<cntLI; i++){
		var oLI = ulParent.childNodes[i];
		if (oLI.tagName == 'LI'){
			var oItem = oTable.insertRow(-1); //<TR>
			oItem.menu = oMenu;
            oItem.className = 'main_dnnmenu_item';
            
			oTDIMG = oItem.insertCell(-1);
			oTDLabel = oItem.insertCell(-1);
			oTDArrow = oItem.insertCell(-1);

            oTDIMG.className = 'main_dnnmenu_icon';
            oTDLabel.className = 'main_dnnmenu_item';
            oTDArrow.className = 'main_dnnmenu_item';
            
			var InnerAnchor = 0;
			var InnerImg = 0;
			var InnerUl = 0;
			var InnerArrow = 0;
			
			for (var j=0; j < oLI.childNodes.length; j++)
				if (oLI.childNodes[j].tagName == 'A') InnerAnchor = oLI.childNodes[j]
				else if (oLI.childNodes[j].tagName == 'IMG'){
					if (!InnerAnchor) InnerImg = oLI.childNodes[j]
					else InnerArrow = oLI.childNodes[j];
				}
				else if (oLI.childNodes[j].tagName == 'UL') InnerUl = oLI.childNodes[j]

			if (InnerImg) oTDIMG.appendChild(InnerImg);
			else oTDIMG.innerHTML = '&nbsp;';

			if (InnerAnchor) oTDLabel.appendChild(InnerAnchor);
			else oTDLabel.innerHTML = '&nbsp;';

			oItem.onmouseover = function (){
				this.menu.ClearMenuMark();
				this.className += ' main_dnnmenu_itemhover';
				if (this.smPopupId)
					showMenu(this.smPopupId, 1, this);
			};
			oItem.onmouseout = function (){
				this.menu.ClearMenuMark();
			};

			if (InnerUl){
				if (InnerArrow) oTDArrow.appendChild(InnerArrow)
				else oTDArrow.innerHTML = '&nbsp;';
				oItem.smPopupId = CreateMenu(InnerUl, oItem, level + 1);
			}
			else oTDArrow.innerHTML = '&nbsp;';
		}
	}
	
	return oMenu.id;
}

function StopTimeOut(menu){
	for( var o = menu; o; o = o.iParent? o.iParent.menu: 0)
		if (o.hideTimer)
			o.hideTimer = clearTimeout(o.hideTimer);
}

function show(ind, isVertical, iParent){
	showMenu(ulIdPref+ind+'tbl', isVertical, iParent);
}

function showMenu(menuID, isVertical, iParent){
	var menu = document.getElementById(menuID);
	if (!menu) return;
	
	if (menu.style.visibility == 'visible'){
		StopTimeOut(menu);
		return;
	}
	
	if (iParent && iParent.menu && iParent.menu.smShown)
		hideMenu(iParent.menu.smShown.id);
	if (!menu.level && (ShownMenu != menu))
		hideMenu(ShownMenu.id);

	if (!menu.level) xobtn = menuID.replace(ulIdPref,'').replace('tbl','');

	var parentObj;
	var parentAbs;
	if (iParent.tagName == 'A'){
		parentObj = iParent.parentNode;
	}
	else parentObj = iParent;

	var pos = getPos(parentObj);
	var size = getObjectSize(parentObj);
	if (iParent.tagName == 'TR'){
		pos.x = getPos(parentObj.menu).x;
		size.x = getObjectSize(parentObj.menu).x;
		}

	menu.goMenuX = 1;
	menu.goMenuDx = 1;
	if (menu.level > 0){
		menu.goMenuX = menu.iParent.menu.goMenuX;
		menu.goMenuDx = menu.iParent.menu.goMenuDx;
	};

	menu.style.overflow = 'visible';
	menu.style.height = 'auto';
	menu.style.width = 'auto';
	menu.style.left = '0px';
	menu.style.top = '0px';
	var parentAbs = getPos(menu);
	var WinSize = getClientSize();
	var menuSize = getObjectSize(menu);
	var CalcedPos = calcMenuPos(WinSize.y, WinSize.h, pos.y, size.y, menuSize.y, menu.goMenuDx, isVertical);
	
	menu.goMenuDx = CalcedPos.align;

	if (CalcedPos.size < menuSize.y){
		if (isIE) menu.style.overflowX = 'visible';
		if (isIE) menu.style.width = menu.offsetWidth + 17 + 'px';
		else if (isMz) menu.style.marginRight = 20;

		menu.style.height = CalcedPos.size - parentAbs.y + 'px';
		menu.scrollTop  = 0;
		menu.scrollLeft = 0;
	}
	menu.style.top = (CalcedPos.xy - parentAbs.y) + menuvertoffset + 'px';
	if (isOp) {
		if (!menu.OrigWidth) menu.OrigWidth = menu.clientWidth;
		if (isOp) menu.style.width = menu.OrigWidth + 'px';
	}
	menuSize = getObjectSize(menu);
	CalcedPos = calcMenuPos(WinSize.x, WinSize.w, pos.x, size.x, menuSize.x, menu.goMenuX, !isVertical);
	menu.goMenuX = CalcedPos.align;
	if (CalcedPos.size < menuSize.x)
		if (menu.goMenuX > 0)
			CalcedPos.xy -= (menuSize.x - CalcedPos.size);

	menu.style.left = CalcedPos.xy - parentAbs.x + 'px';
	menu.style.visibility = 'visible';
	if (!menu.level) ShownMenu = menu;
	else {
		iParent.menu.smShown = menu;
        try {iParent.setPopup();}
        catch(err){}
	}
}

function calcMenuPos(screenXY, screenSize, parentXY, parentSize, size, align, oHoriz) {
	var xy = parentXY;
	var newSize = size;
	var newAlign = align;
	var space = 5;
	
	if ((align == 0) && (!oHoriz)) align = 1;
	
	if (!oHoriz) {
		if	(((newAlign >= 0) && (parentXY + parentSize + size > screenSize + screenXY - space)) // don't go in screen from the align
							|| ((newAlign < 0) && (parentXY - size < space))){
			// correct direction about most of place
			if (parentXY - screenXY > screenSize + screenXY - (parentXY + parentSize)) newAlign = -1; else newAlign = 1;
		};
		if (newAlign >= 0){
			xy = parentXY + parentSize;
			if (screenSize + screenXY - space - xy < newSize) newSize = screenSize + screenXY  - space - xy;
		}
		else {
			xy = parentXY - newSize;
			if (xy - screenXY < space){
				xy = space + screenXY;
				newSize = parentXY - space - screenXY;
			}
		}
	}
	else {
		if (newSize > screenSize - 2*space) {
			xy = space + screenXY;
			newSize = screenSize - 2*space;
		}
		else{
			xy = parentXY + parentSize/2 - newSize/2 + newAlign * (newSize/2 - parentSize/2);
			if (xy < space + screenXY){
				newAlign = 1;
				xy = space + screenXY;
			}
			if (xy + size > screenSize  + screenXY - space){
				newAlign = -1;
				xy -= xy + newSize - (screenSize  + screenXY - space);
			}
		}
	};

	return {xy: xy, size: newSize, align: newAlign};
}

function hideMenu(menuId){
	var menu = document.getElementById(menuId);
	if (!menu) return;
	if ( menu.style.visibility == 'visible' ){
		if (menu.smShown)
			hideMenu(menu.smShown.id);
		menu.smShown = 0;
		if (menu.iParent) 
            try{menu.iParent.clrPopup();}
            catch(err){}

		if (menu.hideTimer){
			clearTimeout(menu.hideTimer);
			menu.hideTimer = null;
		}
		menu.ClearMenuMark();
		menu.style.visibility = 'hidden';
		if (menu.level == 0){
			elsrc(xobtn + 'n');
		}
	}
}

function mout(sender){
	if (!sender) return;
	for(var o = ShownMenu; o ; o = o.smShown){
			var code = 'hideMenu("' + o.id + '");';
			if (!o.hideTimer && o.id) o.hideTimer = setTimeout(code , menuTimeout);
	}
}

function mover(sender){
	if (!sender) return;
	StopTimeOut(sender);
}

function cmout(ele, classname){
  ele.className =  classname;
}

function elsrc(id){
    x=id.substring(0,id.length-1);
    if(document['vb'+x]){
        document['vb'+x].src=eval('vb'+id+'.src');
        if (id.indexOf('e')!=-1)
            document['vb'+x+'e'].src=eval('vb'+id+'e.src');
    }
    return false;
} 
