window.onerror = function() {return true};

/*************************************************************
addVisibleMenu(Sender, menuID)
removeVisibleMenu(Sender, menuID)
renderMenu()
showMenuItem(menuID)
hideMenuItem(menuID)
*************************************************************/
/***************************************************************
new menu fuctions etc
***************************************************************/

var aTreeElements = new Array();
var oCurrentElement
var bHideAll;


/***************************************************************
hierchal structure
***************************************************************/
function treeElement(strId)
{
	this.childElements = new Array();
	this.id = strId;
	this.parentElement = null;
	this.top = 0;
	this.left = 0;
	this.visible = false;
	this.locked = false;
	aTreeElements[aTreeElements.length] = this;
}

treeElement.prototype.appendChild = function(oTreeElement)
{
	oTreeElement.parentElement = this;
	this.childElements[this.childElements.length] = oTreeElement;
	return oTreeElement;
}

treeElement.prototype.show = function()
{
  var oElement=document.getElementById(this.id);
  if (oElement!=null)
  {
		oElement.style.top=this.top;
		oElement.style.left=this.left;
		oElement.style.visibility="visible";
	}
}

//sets parents of an element back to the root
treeElement.prototype.setParentDisplayStatus = function(bDisplaystatus)
{
	if(this.parentElement!=null)
	{
		this.parentElement.visible=bDisplaystatus;
		this.parentElement.setParentDisplayStatus(bDisplaystatus);
	}
}

//sets all childs of an element
treeElement.prototype.setChildsDisplayStatus = function(bDisplaystatus)
{
	for(var i=0;i<this.childElements.length;i++) 
	{
		this.childElements[i].visible=bDisplaystatus;
		this.childElements[i].setChildsDisplayStatus(bDisplaystatus);
	}
}

treeElement.prototype.hide = function()
{
  var oElement=document.getElementById(this.id);
  if (oElement!=null)
  {
		oElement.style.visibility="hidden";
	}
}

//fill method
function addTreeElement(strID, strParentID)
{
	var oParentElement;
	oParentElement=findTreeElement(strParentID);
	oParentElement.appendChild(new treeElement(strID));
} 

function findTreeElement(strID)
{
	for(var i=0;i<aTreeElements.length;i++) 
	{	
		if(aTreeElements[i].id == strID) 
		{ 
			return aTreeElements[i];
		}
	}
	return null;
}

function addVisibleMenu(sender, menuID)
{
	bHideAll=false;
	hideAllTreeElements();
	var oElement=findTreeElement(menuID);
	if (oElement!=null)
	{
		oElement.visible=true;
		oElement.setParentDisplayStatus(true);
		oElement.top=getPosition(sender).top;//+5;
		oElement.left=getPosition(sender).right;
            	if(oElement.parentElement!=null)
            	{
            	        if(oElement.parentElement.id=='menu0')
            	        {
                        	oElement.left=getPosition(sender).right-20;
                       	}else{
                        	oElement.left=getPosition(sender).right-5;
						}

            	 }
		renderMenu();
	}
}

function removeVisibleMenu(sender, menuID)
{
	var oElement=findTreeElement(menuID);
	if (oElement!=null)
	{
		oElement.setChildsDisplayStatus(false);
		oElement.visible=false;
		initiateHide(menuID);
	}
}

function lockTreeElement(menuID)
{
	//get new object
	var oElement=findTreeElement(menuID);
	
	//set lock
	oElement.locked=true;
}

function unlockTreeElement(menuID)
{
	//get new object
	var oElement=findTreeElement(menuID);
	
	//set lock
	oElement.locked=false;
}

function lockParentTreeElement(menuID)
{
	//get new object
	var oElement=findTreeElement(menuID);
	
	//set lock
	if(oElement.parentElement!=null)
		oElement.parentElement.locked=true;
}

function unlockParentTreeElement(menuID)
{
	//get new object
	var oElement=findTreeElement(menuID);
	
	//set lock
	if(oElement.parentElement!=null)
		oElement.parentElement.locked=false;
}

function unlockAllTreeElements()
{
	for(var i=0;i<aTreeElements.length;i++) 
	{	
		aTreeElements[i].locked=false;
	}
}

function hideAllTreeElements()
{
	for(var i=0;i<aTreeElements.length;i++) 
	{	
		aTreeElements[i].visible=false;
	}
}

/***************************************************************
Render methods & Props
***************************************************************/


function renderMenu()
{
	for(var i=0;i<aTreeElements.length;i++) 
	{	
		if(aTreeElements[i].visible) 
		{ 
			aTreeElements[i].show();
		}
		else
		{
			if(!aTreeElements[i].locked)
				aTreeElements[i].hide();
		}
	}
	return null;
}

function preRenderMenu()
{
	if (bHideAll)
	{
		unlockAllTreeElements();
		for(var i=0;i<aTreeElements.length;i++) 
		{	
			if(aTreeElements[i].locked)
				return;
		}
		
		renderMenu();
		return;
	}
}


function initiateHide(menuID) {
  unlockTreeElement(menuID);
  timer = setTimeout(renderMenu, 200);
}

function initiateHideAll()
{
	bHideAll=true;
  timer = setTimeout(preRenderMenu, 200);
}
 
function makeMenu(iFrameTag){
	var sourceDoc = iFrameTag.contentWindow.document;
	var sourceElement = sourceDoc.getElementById("data");
	var target = document.getElementById(iFrameTag.attributes.targetid.value);

	var tdTags = sourceElement.getElementsByTagName("td");
	var n_tdTags = sourceElement.getElementsByTagName("td").length;
	var aTags_iframe = sourceElement.getElementsByTagName("a");

	var level = 0;
	var lastlevel =0;
	var highestlevel = 0;

	var menuLayer = new Array();
	var firstItemInMenu = new Array(0);
	firstItemInMenu[0] = 0;

	menuLayer[0] = '<table border="0" cellspacing="0" cellpadding="0" class="layout">\n';

	var oMenuRoot = new treeElement('menu0');

	for (i=0;i<aTags_iframe.length;i++){
		if (aTags_iframe[i].getAttribute('menuid')!=null)
		{
			temp = aTags_iframe[i].getAttribute('href') +"?menuid="+ aTags_iframe[i].getAttribute('menuid');
			aTags_iframe[i].setAttribute('href',temp)
		}
	} 
	
	for (i=0;i<n_tdTags;i++){
		level = tdTags[i].className.substring(5,10);
		if (lastlevel < level)
		{
			firstItemInMenu[level] = i;

			addTreeElement('menu'+i,'menu'+firstItemInMenu[lastlevel]);
		
		    	if(level>highestlevel){menuLayer[level]=''}

			menuLayer[level] += '<div class="MenuPopUp" id="menu'+i+'" onmouseover="lockParentTreeElement(\'menu'+i+'\')" '
			menuLayer[level] += ' onmouseout="unlockTreeElement(\'menu'+i+'\');initiateHideAll();">\n';
			menuLayer[level] += '<table border="0" cellspacing="0" cellpadding="0" class="MenuItemBox">\n'
		}

		
		if (level>0)
		{
			menuLayer[level] += '<tr>\n<td class="MenuItemBox" nowrap>\n<div class="MenuItemlink"'
			menuLayer[level] += ' onmouseover="lockTreeElement(\'menu'+firstItemInMenu[level]+'\')'
			menuLayer[level] += ';addVisibleMenu(this,\'menu'+(i+1)+'\');"'
			menuLayer[level] += ' onmouseout="removeVisibleMenu(this,\'menu'+(i+1)+'\');"'
			menuLayer[level] += '>'
			menuLayer[level] += tdTags[i].innerHTML+'</div></td></tr>';
		}


		if(level==0)
		{
			menuLayer[level] += '<tr>\n<td class="button">\n<div class="but"'
			menuLayer[level] += ' onmouseover="addVisibleMenu(this,\'menu'+(i+1)+'\');"'
			menuLayer[level] += ' onmouseout="removeVisibleMenu(this,\'menu'+(i+1)+'\');"'
			menuLayer[level] += '>'
			menuLayer[level] += tdTags[i].innerHTML+'</div></td></tr>\n';
		}
		

		if (lastlevel > level)
		{
			for(j=lastlevel;j>level;j--)
			{
				if (j>0)
					{menuLayer[j] += "</table></div>";}
				else
					{menuLayer[j] += "</table>";}
			} 
		}
		lastlevel = level;
		if (level>highestlevel){highestlevel=level;}
	}
		
	for(j=0;j<level;j++)
	{
		if (j>0)
			{menuLayer[j] += "</table></div>";}
		else
			{menuLayer[j] += "</table>";}
	} 


    document.all.menuContainer.innerHTML = "";
	for(j=0;j<=highestlevel;j++)
	{
		document.all.menuContainer.innerHTML += menuLayer[j];
	}
}

function callmenu() {
	if (self.location.href!=parent.location.href)	{
	    parent.makeMenu();
	}
}
