var oTools = { // utility functions

		mListener : function ( bAdd, oNode, sEvent, oHandler, bCapture ) { // add event listener
			if ( document.addEventListener ) oNode [ bAdd ? "addEventListener" : "removeEventListener" ] ( sEvent, oHandler, bCapture );
			else if ( document.attachEvent ) oNode [ bAdd ? "attachEvent" : "detachEvent" ] ( "on" + sEvent, oHandler );
			else oNode [ "on" + sEvent ] = bAdd ? oHandler : null;
		},
		mContains : function ( oNode, oTarget ) { // emulate contains ()
			var bContains = false;
			while ( oNode.parentNode ) 
				if ( oNode.parentNode == oTarget ) { bContains = true; break; }
				else oNode = oNode.parentNode;
			return bContains;
		},
		mWindow : function ( sProperty ) { // measure
			var iReturn;
			var oDocelement = document [ "documentElement" ? "documentElement" : "body" ];
			switch ( sProperty ) {
				case "xscroll":	iReturn = window.pageXOffset ? window.pageXOffset : oDocelement.scrollLeft; break;
				case "yscroll":	iReturn = window.pageYOffset ? window.pageYOffset : oDocelement.scrollTop; break;
				case "height" : iReturn = window.innerHeight ? window.innerHeight : document.body.clientHeight; break;
				case "width"  :	iReturn = window.innerWidth ? window.innerWidth : document.body.clientWidth; break;
				case "top"    :	iReturn = oClient.bIE ? window.screenTop : window.screenY; break;
				case "left"   :	iReturn = oClient.bIE ? window.screenLeft : window.screenX; break;
			}
			return isNaN ( iReturn ) ? 0 : iReturn;
		}
}

var oMenu = { // topmenu


		aSelects : [],
		mInit : function () { // init onload
			
			var startInit = new Date();
			
			//if topmenu does not exist, do nothing
			if ( ! document.getElementById( "topmenu" ) ) { return; }

		
			oMenu.oSon = document.getElementById ( "topmenu" ).getElementsByTagName ( "ul" ).item ( 0 );
			var aLinks = oMenu.oSon.getElementsByTagName ( "a" );


			//THSC: lines below are not needed unless the menu needs to restore itself after a few seconds of inactivity
			/*
			for ( var i = aLinks.length - 1; i >= 0; i-- ) {
			//for ( var i = 0; i < aLinks.length; i++ ) {
				//if ( !aLinks.item ( i ).href ) aLinks.item ( i ).href = "javascript://"; //not needed for DanBolig at all
				if ( aLinks.item ( i ).className == "on" || aLinks.item ( i ).className == "selected" ) oMenu.aSelects [ oMenu.aSelects.length ] = aLinks.item ( i );
				//if ( aLinks.item ( i ).parentNode.className == "toolbox" ) oBox.mSetup ( aLinks.item ( i ).parentNode ); //not needed for DanBolig at all
	 		}
	 		*/

			oMenu.oSon.onmousedown 	= oMenu.mPerform;
			oMenu.oSon.onkeydown 	= oMenu.mPerform;
			oMenu.oSon.onmouseup 	= function () { oTools.mListener ( true, document.body, "mousedown", oMenu.mRestore, false	); }
			
			if ( document.attachEvent ) document.body.attachEvent ( "onclick", function () {
				if ( window.event.srcElement.href == "javascript://" ) 
					window.event.returnValue = false;
			});
			
			var endInit = new Date();
			var millis = endInit - startInit;
			//alert('Init took ' + millis + ' ms');
			
		},
		mPerform : function ( e, oNode ) { // dynamics onmousedown
		
			if ( oMenu.oResetTimeout ) window.clearTimeout ( oMenu.oResetTimeout );
			var bRestore = oNode;
			if ( !bRestore ) {
				if ( !e ) var e = window.event;
				if ( e.type == "keydown" && e.keyCode != 13 ) return;
				var oNode = e.target ? e.target : e.srcElement;
				if ( oNode.nodeType != 1 ) oNode = oNode.parentNode;
				if ( oNode.nodeName.toLowerCase() != "a" ) return;
			}
			var oLi = oNode.parentNode;
			if ( !oLi.bToolbox ) 
			{ // exclude toolbox
				var oUl = oLi.parentNode;
				var aItems = oUl.getElementsByTagName( "a" );
				var aSubmenus = oUl.getElementsByTagName ( "ul" );
				//clear menu items
				for ( var i = aSubmenus.length - 1; i >= 0; i-- ) 
				{
					var aNode = aSubmenus[i];
					if ( aNode.className != "" )
						aNode.className = "";
				}
				for ( var i = aItems.length - 1; i >= 0; i-- ) 
				{
					var liNode = aItems[i];
					if ( liNode.className != "")
						liNode.className = "";
				}
				
				try { oLi.getElementsByTagName ( "ul" ).item ( 0 ).className = "active"; } catch ( e ) {}
				if ( oUl.className == "active" ) oUl.className = "on";
				if ( !bRestore ) oMenu.oResetTimeout = window.setTimeout ( "oMenu.mRestore ( null, true )", 8000 );
				oNode.className = "on";
			}
			
			//oMenu.oLastNode = oNode.parentNode;
		},
		mRestore : function ( e, bForce ) { // reset if idle
			if ( !bForce ) {
				if ( !e ) var e = window.event;
				var oNode = e.target ? e.target : e.srcElement;
			}
			if ( bForce || !oTools.mContains ( oNode, oMenu.oSon )) {
				for ( var i = 0; i < oMenu.aSelects.length; i++ ) oMenu.mPerform ( null, oMenu.aSelects [ i ] );
				oTools.mListener ( false, document.body, "mousedown", oMenu.mRestore, false	);
			}
		}
}

//oGod.mOnload( oMenu.mInit );

//iframe buster
function HandleIFrame(e)
{
	if( document.location != top.location )
	{
		top.location = document.location;
	}
}
//document.onmouseover = HandleIFrame;
