function fnGetInnerText( node )
{
	var txt="";
	for ( var n = 0; n < node.childNodes.length; n++ )
	{
		if ( node.childNodes[n].nodeType == 3 )
		{
			var v = node.childNodes[n].nodeValue;
			//alert( ">"+v+"<");
			
			v = v.replace( /\n */, '');
			v = v.replace( /\r */, '');
			v = v.replace( /[ \t]*$/, '');
			
			//alert( "replaced>"+v+"<");
			if ( v.length )
				txt += v;
		}
	}
	return txt;
}

//Get the parent menuitem of the subitem
function fnGetParentMenu( item )
{
	while ( item && item.className != "menuitem" && item.className != "menuitemActive" )
		item = item.parentNode;

	return item;
}

//get active menu item | subitem
function fnGetActiveItem()
{
	var items = document.getElementsByTagName( "DIV" );
	var i;
	for ( i = 0; i < items.length; i++ )
	{
		if ( items[i].className == "menuitemActive" || items[i].className == "submenuitemActive" )
			return items[i].parentNode;
	}
	var noth;
	return noth;
}

// selects the item with given text
// first arg (optional) is the text of the item to select, if not specified all items will be deselected
// second (optional, boolean) if the items target should be navigated, default false
function fnSelectNamed( )
{
	var argv = fnSelectNamed.arguments;
	var argc = argv.length;
	
	if ( argc > 2 )
	{
		alert("Invalid arguments in fnSelectNamed");
		return;
	}
	
	var thename;
	var bGoTarget = false;
	
	if ( argc > 0 )
		thename = argv[0];
	if ( argc > 1 )
		bGoTarget = argv[1];
	
	var oldAct = fnGetActiveItem();
		
	if ( !thename || thename=="")
	{
		fnExpandMenu( fnGetParentMenu(oldAct), false );
		fnSelectItem(oldAct, false);
		return;
	}
	
	var tabs = document.getElementsByTagName( "div" )
	
	var targt;
	
	if ( tabs.length )
	{
		for ( i = 0; i < tabs.length; i++ )
		{
			if ( tabs[i].className != "menuitem" && tabs[i].className != "menuitemActive" && 
				tabs[i].className != "submenuitem" && tabs[i].className != "submenuitemActive")
				continue;

			var txt = fnGetInnerText(tabs[i]);	
			if ( txt == thename )
			{
				if ( oldAct == tabs[i].parentNode )
					return;
				
				targt = tabs[i];
				
				fnExpandMenu( fnGetParentMenu(oldAct), false );
				fnSelectItem(oldAct, false);
				break;
			}
		}
	}
	
	if ( targt )
	{
		fnSelectItem( targt.parentNode, true );
		
		if ( targt.className == "submenuitemActive")
		{
			var par = fnGetParentMenu(targt);
			fnExpandMenu( par, true );
		}
		else
			fnExpandMenu( targt.parentNode, true );
		
		if ( bGoTarget == true )
		{
			fnGoItemTarget( targt );
		}
	}
		
}		

// selects the item with given text
// first arg (optional) is the text of the item to select, if not specified all items will be deselected
// second (optional, boolean) if the items target should be navigated, default false
function fnSelectIded( )
{
	var argv = fnSelectIded.arguments;
	var argc = argv.length;
	
	if ( argc > 2 )
	{
		alert("Invalid arguments in fnSelectIded");
		return;
	}
	
	var theid;
	var bGoTarget = false;
	
	if ( argc > 0 )
		theid = argv[0];
	if ( argc > 1 )
		bGoTarget = argv[1];
	
	var oldAct = fnGetActiveItem();
		
	if ( !theid || theid=="")
	{
		fnExpandMenu( fnGetParentMenu(oldAct), false );
		fnSelectItem(oldAct, false);
		return;
	}
	
	var elms = document.getElementsByTagName("DIV");
	var targt;

	for ( var e1 = 0; e1 < elms.length; e1++ )
	{
		if ( elms[e1].id.indexOf( "menuid="+theid ) != -1 )
	                {
                		targt = elms[e1];
			break;
		}
	}
	
	if ( targt )
	{
		if ( oldAct == targt.parentNode )
			return;
			
		fnExpandMenu( fnGetParentMenu(oldAct), false );
		fnSelectItem(oldAct, false);
	}
	
	if ( targt )
	{
		fnSelectItem( targt.parentNode, true );
		
		if ( targt.className == "submenuitemActive")
		{
			var par = fnGetParentMenu(targt);
			fnExpandMenu( par, true );
		}
		else
			fnExpandMenu( targt.parentNode, true );
		
		if ( bGoTarget == true )
		{
			fnGoItemTarget( targt );
		}
	}
}

function fnGoItemTarget( obj )
{
	if ( obj && obj.id && obj.id != "" && parent.frames["thecontent"] )
		parent.frames["thecontent"].window.open(obj.id,"_self");
}
	
			
function fnOnClickItem(evt)
{
	evt = evt ? evt : event;
	
	var cur = evt.target || evt.srcElement;

	if ( cur.nodeType == 3 ) //text node
	{
		cur = cur.parentNode;
	}
	//alert( cur + ">" + cur.tagName + "--" + cur.id );
	
	var newItem = cur;
	if ( cur.tagName == "DIV" )
		newItem = cur.parentNode;
		
	if ( cur.className == "submenuitem" )
	{
		var oldActive = fnGetActiveItem();
		fnSelectItem( oldActive, false );
		fnSelectItem( newItem, true );
		fnGoItemTarget( cur );
	}
	else if ( cur.className=="menuitem" || cur.className=="menuitemActive" )
	{
		var oldActive = fnGetActiveItem();
		var oldExpand = fnGetParentMenu(oldActive);
		
		if ( oldExpand == newItem && fnIsMenuExpanded(newItem) )
		{
			fnSelectItem( oldActive, false );
			fnExpandMenu( oldExpand, false );
			fnSelectItem( newItem, true );
			if ( oldActive != newItem )
				fnGoItemTarget( cur );
		}
		else if ( oldExpand == newItem && !fnIsMenuExpanded(newItem) )
		{
			fnSelectItem( oldActive, false );
			fnExpandMenu( oldExpand, true );
			fnSelectItem( newItem, true );
			if ( oldActive != newItem )
				fnGoItemTarget( cur );
		}
		else
		{
			fnSelectItem( oldActive, false );
			fnExpandMenu( fnGetParentMenu(oldActive), false );
			fnSelectItem( newItem, true );
			fnExpandMenu( newItem, true );
			fnGoItemTarget( cur );
		}
	}
	
	evt.returnValue = false;
	if ( document.all )
		evt.cancelBubble = true;
	else
		evt.preventBubble();
}

function fnSelectItem( obj, bSelect )
{
	if ( !obj )
		return;
		
	var divs = obj.getElementsByTagName("DIV");

	var oldStyle = bSelect ? "menuitem" : "menuitemActive";
	var newStyle = bSelect ? "menuitemActive" : "menuitem";
	
	var oldStyle1 = bSelect ? "submenuitem" : "submenuitemActive";
	var newStyle1 = bSelect ? "submenuitemActive" : "submenuitem";

	var i;
	for ( i = 0; i < divs.length; i++ )
	{
		if ( divs[i].className == oldStyle )
		{
			divs[i].className = newStyle;
			break;
		}
		else if ( divs[i].className == oldStyle1 )
		{
			divs[i].className = newStyle1;
			break;
		}
	}
}

function fnIsMenuExpanded( obj )
{
	if ( !obj )
		return false;

	var submenus = obj.getElementsByTagName( "DIV" );
	var i, submenu;
	
	for ( i = 0; i < submenus.length; i++ )
	{
		if ( submenus[i].id == "dummy" )
		{
			submenu = submenus[i];
			break;
		}
	}

	if ( !submenu )
		return false;
		
	return submenu.style.display == "";
}

function fnExpandMenu( obj, bExpand )
{
	if ( !obj )
		return;
	
	
	var submenus = obj.getElementsByTagName( "DIV" );
	var i, submenu;
	
	for ( i = 0; i < submenus.length; i++ )
	{
		if ( submenus[i].id == "dummy" )
		{
			submenu = submenus[i];
			break;
		}
	}

	if ( !submenu )
		return;
		
	var tbls = submenu.getElementsByTagName("TABLE");
	var oldStyle = bExpand ? "none" : "";
	var newStyle = bExpand ? "" : "none";
	
	if ( submenu.style.display != newStyle )
	{
		//alert(bExpand + " oldstyle '"+oldStyle + "' newStyle '"+newStyle + "'");
		submenu.style.display = bExpand ? '' : 'none'; 
			
		//alert( submenus[i].tagName + " "+submenus[i].id+" " +submenus[i].style.display );
		if ( newStyle != "none" )
		{
			for ( i = 0; i < tbls.length; i++ )
			{
				tbls[i].style.paddingTop = "3px";
				tbls[i].style.paddingBottom = "3px";
				//Fix the firstrow
				var tds = tbls[i].getElementsByTagName( "td" );
				tds[0].style.borderTopStyle="solid";
				tds[tds.length-1].style.borderBottomStyle="none";
			}
		}
	}
}

function fnOnInit()
{

	var agent = new Agent();
	
	if ( agent.ie4 || agent.ie5 )
	{
		//Modify style.cursor from pointer to hand
		
		for ( var sts = 0; sts < document.styleSheets.length; sts++ )
		{
			for( var css = 0; css < document.styleSheets[sts].rules.length; css++ )
			{
				
				if( document.styleSheets[sts].rules[css].selectorText.toLowerCase() == "div.menuitem" || 
					document.styleSheets[sts].rules[css].selectorText.toLowerCase() == "div.submenuitem" )
				{
					document.styleSheets[sts].rules[css].style.cursor = "hand";
				}
			}
		}
	}
}
