//arr = '1','level1','Level1a da',-//-, "da", "LeftMenu".

var count;//number of pages
var pageID;
var lang;
var startLevel;
var direction;
var pref;

var arrItemsToShow = new Array();
var arrItemsToHide = new Array();

var bIsNN = navigator.userAgent.indexOf('Netscape')>-1;
var bIsOpera = navigator.userAgent.indexOf('Opera')>-1;
var bIsMac = navigator.userAgent.indexOf('Mac')>-1;
var bIsIE = (document.all)?!bIsOpera:false;

var bIsNN7 = (navigator.userAgent.indexOf('Netscape6/6.0')==-1);

//Timers
var nHideTimer;
var nShowTimer;

var colNumber;
var infoNumber = 7;
var showImages = false;
///////////////////////////////////////// Arrays functionality ////////////////////////
Array.prototype.popItem = popItem_
Array.prototype.contains = contains_
Array.prototype.sumuniq = sumuniq_
Array.prototype.remove = remove_
Array.prototype.indexOf = indexOf_
Array.prototype.isEqual = isEqual_

// Returns true if array contains item element, otherwise false
function contains_(item){
   for (i = 0; i < this.length; i++)
	if (this[i] == item)
		return true;
   return false;
}
//creates Array that adds all unique items from second array
function sumuniq_(arr)
{
	for (var i = 0; i < arr.length; i++)
		if (!this.contains(arr[i]))
			this[this.length] = arr[i];
	return this;
}
//removes from array elements of arr array
function remove_(arr)
{
	var pos;
	var retArr = this;
	for (var i = 0; i < arr.length; i++)
	{
		pos = retArr.indexOf(arr[i]);
		if (pos != -1)
		{
			//retArr.splice(pos,1); only in 5.5 version
			retArr = retArr.popItem(pos);
		}
	}
	return retArr;
}
//returns position of element that == elem
// if not found returns -1
function indexOf_(elem)
{
	for (var i = 0; i < this.length; i++)
		if (this[i] == elem)
			return i;
	return -1;
}
// removes from array element from pos position and returns it
function popItem_(pos)
{
	var retArr = new Array();
	/*var arrSt = retArr.slice(0, pos-1);
	var arrEnd = retArr.slice(pos,-1);
	retArr = arrSt.concat(arrEnd);*/
	/*var lastElem = retArr[retArr.length-1];
	retArr[retArr.length-1] = retArr[pos];
	retArr[pos] = lastElem;
	retArr.pop();*/
	var shift = 0;
	for (var i = 0; i < this.length - 1; i++)
	{
		if (i == pos)
			shift = 1;
		retArr[i] = this[i + shift];
	}
	return retArr;
}
// returns true if array have same elements(does not check sorting)
function isEqual_(arr){
	if (this.length != arr.length)
		return false;
   for (i = 0; i < this.length; i++)
	if (!arr.contains(this[i]))
		return false;
   return true;
}
/////////////////////////////////////////end of arrays functionality/////////////////
//Creates divs for lvl level
function CreateDiv(lvl)
{
	var length = arr.length;
	
	var started = false; // if true: we started to document.write content but did not close the root tag
	var parentID;
	var innerStr = "";
	///var obj = null;
	var strHasChildren = ""; 
	var imagesHTML = "onmouseout=\"Hide(this)\" onmouseover=\"Show(this)\">";
	for (var i = 0; i < length - infoNumber; i += colNumber)
	{
		// ID of page
		var id = arr[i];
		
		// Level of page
		var level = arr[i + 1].substr(5);
		
		// Name of page
		var name = arr[i + 2];
		
		//Title of page
		var title = arr[i + 3];
		
		if (level  == lvl - 1)
			parentID = id;
			
		if (started == false && level  == lvl)
		{
			var outStr = "<div style=\"position:absolute;left:0px;top:0px;visibility:hidden\" id=\"containerDiv" + parentID + "\" "
							+ "class=\"" + pref + "ContainerDiv" + "\">";
			document.write(outStr);
			///var newDiv = document.createElement(outStr);
			innerStr = "<table border=0 cellpadding=0 cellspacing=0>";
			
			started = true;
		}
		if (level == lvl)
		{
			if (i + colNumber >= length - infoNumber || arr[i + 1 + colNumber].substr(5) <= level)
				strHasChildren = "";//"";
			else
				strHasChildren = "";
				//strHasChildren = "HasChildren";
			
			if (showImages)
			{
				for (var k = 3; k < 7; k++)
				if (arr[i + k] == "")
					arr[i + k] = "/images/null.gif";
				imagesHTML="onmouseover=\"Show(this);this.firstChild.src='"+arr[i + 6]+ "'\""+
				" onmouseout=\"Hide(this);this.firstChild.src='";
				
				if (id == pageID)
					imagesHTML += arr[i + 5] + "'\"><img class='leftImage' align='middle' src=\"" + arr[i + 5] + "\">";
				else
					imagesHTML += arr[i + 4] + "'\"><img class='leftImage' align='middle' src=\"" + arr[i + 4] + "\">";
			}
			
			innerStr += "<tr><td id=\"itemTD" + id + "\" "
								+ "pageID=\"" + id + "\" "
								+ "onclick=\"onClick(this)\" "
								+ "class=\"" + pref + "Level" + /*strHasChildren + */"\" " +
								imagesHTML + 
								strHasChildren + 
								"<a class=\"" + pref + "Link\" "
									+ "title=\"" + title + "\" "
									+ "href=\"/default.aspx?pageID=" + id + "&lang=" + lang +
								"\">"
									
									+ name
								+ "</a>"
							+ "</td></tr>";
		}
		if (level < lvl && started)
		{
			innerStr += "</table>"; /*</div>"*/
			///newDiv.innerHTML = innerStr;
			///document.body.insertBefore(newDiv);
			document.write(innerStr + "</div>");
			started = false;
		}
		
	}
	if (started)
	{
		///innerStr += "</table></div>";
		innerStr += "</table>" /*</div>"*/;
		///newDiv.innerHTML = innerStr;
		///document.body.insertBefore(newDiv);
		document.write(innerStr + "</div>");
	}
		
}
// Creates main top menu and calls functions for creating drop down menu
function CreateMenu()
{

	var length = arr.length;
	
	showImages = arr[length - infoNumber].toLowerCase()=="true"?true:false;
	if (arr[1] == "index")
		arr[1] = "level0";
	if (showImages)
		colNumber = 8;
	else 
		colNumber = 4;
	
	count = (length-infoNumber)/colNumber;
	
	startLevel = parseInt(arr[length - 6].substr(5));
	direction = arr[length - 4].toLowerCase();
	pageID = arr[length - 3];
	lang = arr[length - 2];
	pref = arr[length - 1];
	
	var maxLevel = 0;
	var level;
	var imagesHTML = "onmouseover=\"Show(this,100)\" onmouseout=\"Hide(this)\">";
	for (var i = 0; i < length - infoNumber; i += colNumber)
	{
		level = arr[i + 1].substr(5)
		if (level > maxLevel)
			maxLevel = level;
	}
	
	// Creating divs for DD menu
	for (var i = startLevel+1; i <= maxLevel; i++)
		CreateDiv(i);
		
	///var newDiv = document.createElement("<div>");
	///document.body.insertBefore(newDiv);
	var selectedRoot;
	for (var i = 0; i < length - infoNumber; i += colNumber)
	{
		var id = arr[i];
		if (id == pageID)
		{
			var level = arr[i + 1].substr(5);
			selectedRoot = arr[i - (level - startLevel) * colNumber];
		}
	}
	//Creating topmenu(part that does not drop)
	document.write("<table border=0 cellpadding=0 cellspacing=0>");
	if (direction != "left" || direction != "right")
		document.write("<tr>");
	for (var i = 0; i < length - infoNumber; i += colNumber)
	{
		var id = arr[i];
		var level = arr[i + 1];
		var name = arr[i + 2];
		var title = arr[i + 3];
		
		if (level == "level" + startLevel)
		{
		if (direction == "left" || direction == "right")
			document.write("<tr>");
			if (showImages)
			{
				for (var k = 3; k < 7; k++)
				if (arr[i + k] == "")
					arr[i + k] = "/images/null.gif";
				imagesHTML="onmouseover=\"Show(this,100);this.firstChild.src='"+arr[i + 6]+ "'\""+
				" onmouseout=\"Hide(this);this.firstChild.src='";
				
				if (id == pageID)
					imagesHTML += arr[i + 5] + "'\"><img class='leftImage' align='middle' src=\"" + arr[i + 5] + "\">";
				else
				if (selectedRoot == id)
					imagesHTML += arr[i + 7] + "'\"><img class='leftImage' align='middle' src=\"" + arr[i + 7] + "\">";
				else
					imagesHTML += arr[i + 4] + "'\"><img class='leftImage' align='middle' src=\"" + arr[i + 4] + "\">";
				
			}
			document.write("<td id=\"itemTD" + id + "\" "
								+ "pageID=\"" + id + "\" "
								+ "onclick=\"onClick(this)\" "
								+ "class=\"" + pref + "StartLevel" + "\" "
								+ imagesHTML + 
								"<a class=\"" + pref + "Link\" "
									+ "title=\"" + title + "\" "
									+ "href=\"/default.aspx?pageID=" + id + "&lang=" + lang +
								"\">"
									+ name + 
								"</a>" +
							"</td><td width='40'></td>");
		}
	}
	if (direction != "left" || direction != "right")
	document.write("</tr>");
	document.write("</table>");
	//prompt(document.body.innerHTML,document.body.innerHTML);
}
function onClick(obj)
{
//debugger
	window.location.href = obj.lastChild.href;
}
// Returns left position of topmenu(part that does not drop)
function getTDLeft(obj)
{
	var l = 0;
	for (;obj.offsetParent != null;)
	{
		l += obj.offsetLeft;
		/*if (obj.style.paddingLeft != "")
			l += parseInt(obj.style.paddingLeft);
		if (obj.style.paddingRight != "")
			l += parseInt(obj.style.paddingRight);
		*/
		if (obj.id.indexOf("containerDiv") == 0)
			break;
		obj = obj.offsetParent;
	}	
	return l;
}

// Returns top position of topmenu(part that does not drop)
function getTDTop(obj)
{
	var t = 0;
	for (;obj.offsetParent != null;)
	{
		t += obj.offsetTop;
		obj = obj.offsetParent;
	}	
	return t;
}
// Handles event on mouseover over td item of menu
function Show(o, time)
{
	var obj = document.getElementById(o.id.replace("itemTD", "containerDiv"));
	o.className = o.className + "Hover";
	
	if (obj != null)
	{
		FillItemsToShow(obj);
		arrItemsToHide.remove(arrItemsToShow);
		SetShowTimer(time);
	}
	else
	{
		for (;o != null;)
		{
			if (o.id != null && o.id.indexOf("containerDiv") == 0)
			{
				FillItemsToShow(o);
				arrItemsToHide.remove(arrItemsToShow);
				SetShowTimer(time);
				break;
			}
			o = o.parentNode;
		}
	}
}


// Enables nHideTimer timer
function Hide(o)
{
	//removing Hover ending
	o.className = o.className.replace("Hover", "");
//	document.getElementById("lbl1").innerText += "hide";
	
	var per=400;
	/*if (nTimer != null)
	{
		clearInterval(nTimer);
		per = 1000;
	}*/
	///if (time != null)
	///	per = 0;
	
	//adding to hide array items that was showed earlier
	arrItemsToHide = arrItemsToHide.sumuniq(arrItemsToShow);
	arrItemsToShow = new Array();
	
	if (nHideTimer == null)
		nHideTimer = setInterval("onHideTimer()", per)
	
}
// Fills array for show according to selected item in DD menu
function FillItemsToShow(obj)
{
	arrItemsToShow = new Array();
	arrItemsToShow[0] = obj;
	
	for (var i = 1; ; i++)
	{
		var obj = document.getElementById(arrItemsToShow[i-1].id.replace("containerDiv", "itemTD"));
		for (;obj != null;)
		{
			if (obj.id != null && obj.id.indexOf("containerDiv") == 0)
			{
				arrItemsToShow[i] = obj;
				break;
			}
			obj = obj.parentNode;
		}
		if (obj == null)
			break;
	}	
}

// Handles nShowTimer event - draws visible divs
function onShowTimer()
{
///document.getElementById("lbl1").innerText += "onShowTimer:"
	onHideTimer(false);
 	if (arrItemsToShow.length > 0)
	{
		var objTD = document.getElementById(arrItemsToShow[arrItemsToShow.length - 1].id.replace("containerDiv", "itemTD"));
		var tdX = getTDLeft(objTD);
		var tdY = getTDTop(objTD);
		
		if (direction != "up" && direction != "left" && direction != "right")
		{ 
			 tdY += objTD.offsetHeight;
		}
		
		var x = 0, y = 0;
		
		if (!bIsNN || bIsMac || bIsNN7)
		{
			y = tdY;
			if (direction == "up")
			{
				if (bIsMac && bIsNN)
				{
					y -= arrItemsToShow[arrItemsToShow.length - 1].firstChild.offsetHeight - objTD.offsetHeight;
				}
				y -= arrItemsToShow[arrItemsToShow.length - 1].offsetHeight;
			}
		}
		
		if (direction == "right")
		{
			tdX +=  arrItemsToShow[arrItemsToShow.length - 1].offsetWidth;
		}
		if (direction == "left")
		{
			tdX -=  arrItemsToShow[arrItemsToShow.length - 1].offsetWidth;
			if (tdX < 0)
				tdX +=  2 * arrItemsToShow[arrItemsToShow.length - 1].offsetWidth;
		}
		for (var i = arrItemsToShow.length - 1; i >= 0 ; i--)
		{
			
			if (i == arrItemsToShow.length - 1)
			{
				arrItemsToShow[i].style.left = tdX;
				if (direction == "up")
				{
					//document.getElementById("lbl1").innerText += tdy
					if (bIsMac && bIsNN)
					{
						arrItemsToShow[i].style.top = tdY - arrItemsToShow[arrItemsToShow.length - 1].firstChild.offsetHeight;
					}
					else
					{
						if (arrItemsToShow[i].style.top < tdY - arrItemsToShow[arrItemsToShow.length - 1].offsetHeight)
							arrItemsToShow[i].style.top = tdY + arrItemsToShow[arrItemsToShow.length - 1].offsetHeight;
						else
							arrItemsToShow[i].style.top = tdY - arrItemsToShow[arrItemsToShow.length - 1].offsetHeight;
					}
				}
				else
				arrItemsToShow[i].style.top = tdY;
			}
			else
			{
				var itemTD = document.getElementById(arrItemsToShow[i].id.replace("containerDiv", "itemTD"));
				
				if (direction == "left")
				{
					x -= itemTD.offsetWidth;
					if (tdX + x < 0)
						x +=  2 * itemTD.offsetWidth;
				}
				else
					x += itemTD.offsetWidth;
				
				if (bIsIE && bIsMac)
					y += itemTD.parentElement.offsetTop;
				else
					y += itemTD.offsetTop;
				
				if (bIsNN && !bIsMac && !bIsNN7)
					y = itemTD.offsetTop;

				arrItemsToShow[i].style.left = tdX + x;
				
				if (direction == "up")
				{
					if (bIsMac && bIsNN && (y + arrItemsToShow[i].firstChild.offsetHeight) > tdY)
					{
						y -= arrItemsToShow[i].firstChild.offsetHeight - itemTD.offsetHeight;
					}
					else
					if ((y + arrItemsToShow[i].offsetHeight) > tdY)
						y -= arrItemsToShow[i].offsetHeight - itemTD.offsetHeight;
				}	
				
				arrItemsToShow[i].style.top = y;
			}
			//if (arrItemsToShow[i].style.display != 'block')
				arrItemsToShow[i].style.visibility = "visible";
		}
	}
	if (nShowTimer != null)
	{
		clearInterval(nShowTimer);
		nShowTimer = null;
	}
	//clearInterval(nTimer);
}

// Handles nHideTimer event - hides unvisible divs
function onHideTimer(bShowDiv)
{
	clearInterval(nHideTimer);
	nHideTimer = null;
	for (var i = arrItemsToHide.length - 1; i >= 0 ; i--)
	{
		if (!arrItemsToShow.contains(arrItemsToHide[i]))
		{
			arrItemsToHide[i].style.visibility = 'hidden';
		}
		arrItemsToHide = arrItemsToHide.popItem(i);
	}
	//document.getElementById("lbl1").innerText += "onhideTimer:"
	if (bShowDiv != false)
		onShowTimer();
}
// Enables nShowTimer timer
function SetShowTimer(time)
{
	var interval = 400;
	if (time != null)
	{
		interval = time;
		onHideTimer(false);
	}
	if (nShowTimer != null)
			clearInterval(nShowTimer);
	nShowTimer = setInterval("onShowTimer()", interval)
}