//
//		Script Last Modified: 10.11.2005
// the amazing menu-o-matic-five-thousand script.
//
// functions: showMenu, setBrowser, getIdProperty, setIdProperty,
//            genericMove, moveTo, moveBy, hex, getBackgroundColour,
//		  getDocument
//


	var		isNav6 = false;
	var		isNav4 = false;
	var		isIE4 = false;

	function showMenu(owner)
	{	
		owner = splitParentEle(owner);
		if (getIdProperty(owner, "display") != "block" )
		{
			setIdProperty(owner, "display", "block");
		}
		else
		{
			setIdProperty(owner, "display", "none");
		}
		
				
	}

	function splitParentEle(owner) 
	{			
		var caseCollapse = owner.substr((owner.indexOf("-")-1),1);
		switch (caseCollapse) 
		{
			case("t"): 
				//Menu expansion (left handside nav)
				return "s" + owner.substr((owner.indexOf("-")+1),(owner.length-12));	
				break
			case("r"): 
				setIdProperty("r" + owner.substr((owner.indexOf("-")+1),owner.length), "background", "#ffffff");
				setIdProperty("r" + owner.substr((owner.indexOf("-")+1),owner.length), "border", "1px solid #eee");
				setIdProperty("r" + owner.substr((owner.indexOf("-")+1),owner.length), "padding", "5px");
				return "r" + owner.substr((owner.indexOf("-")+1),owner.length);	
				break
			case("c"): 
				//list collapse (main-content) 
				
				return "c" + owner.substr((owner.indexOf("-")+1),owner.length);	
				break
			default:
				return "s" + owner.substr((owner.indexOf("-")+1),(owner.length-12));
				break
		}
				
		
		/*if (owner.substr((owner.indexOf("-")-1),1) != "r") {

		} else {
			//Contact expansion

		}*/
		
		
	}
	
	function setBrowser()
	{
		
		if (navigator.appVersion.charAt(0) == "4")
		{
			if (navigator.appName.indexOf("Explorer") >= 0)
			{
				isIE4 = true;
			}
			else
			{
				isNav4 = true;
			}
		}
		else if (navigator.appVersion.charAt(0) > "4")
		{
			isNav6 = true;
		}
	}	

	
	
	function getIdProperty( id, property )
	{
		if (isNav6)
		{
			var styleObject = document.getElementById( id );
			if (styleObject != null)
			{
				styleObject = styleObject.style;
				if (styleObject[property])
				{
					return styleObject[ property ];
				}
			}
			styleObject = getStyleBySelector( "#" + id );
			return (styleObject != null) ?
				styleObject[property] :
				null;
		}
		else if (isNav4)
		{
			return document[id][property];
		}
		else
		{
			return document.all[id].style[property];
		}
	}


	/*
	 *
	 * Given a selector string, return a style object
	 * by searching through stylesheets. Return null if
	 * none found
	 *
	 */
	function getStyleBySelector( selector )
	{
		if (!isNav6)
		{
			return null;
		}
		var sheetList = document.styleSheets;
		var ruleList;
		var i, j;
	
		/* look through stylesheets in reverse order that
		   they appear in the document */
		for (i=sheetList.length-1; i >= 0; i--)
		{
			ruleList = sheetList[i].cssRules;
			for (j=0; j<ruleList.length; j++)
			{
				if (ruleList[j].type == CSSRule.STYLE_RULE &&
					ruleList[j].selectorText == selector)
				{
					return ruleList[j].style;
				}   
			}
		}
		return null;
	}

/*
 *
 * Given an id and a property (as strings), set
 * the given property of that id to the value provided.
 *
 * The property is set directly on the tag, not in the
 * stylesheet.
 *
 */
	function setIdProperty( id, property, value )
	{
		if (isNav6)
		{
			var styleObject = document.getElementById( id );
			if (styleObject != null)
			{
				styleObject = styleObject.style;
				styleObject[ property ] = value;
			}
			
		}
		else if (isNav4)
		{
			document[id][property] = value;
		}
		else if (isIE4)
		{
			 document.all[id].style[property] = value;
		}
	}
	
/*
 *
 * Move a given id.  If additive is true,
 * then move it by xValue dots horizontally and
 * yValue units vertically.  If additive is
 * false, then move it to (xValue, yValue)
 *
 * Note: do not precede the id with a # -- it will be
 * appended when searching the stylesheets
 *
 * Note also: length units are preserved in Navigator 6
 * and Internet Explorer. That is, if left is 2cm and
 * top is 3cm, and you move to (4, 5), the left will
 * become 4cm and the top 5cm.
 *
 */
function genericMove( id, xValue, yValue, additive )
{
    var left = getIdProperty(id, "left");
    var top = getIdProperty(id, "top");
    var leftMatch, topMatch;

    if (isNav4)
    {
        leftMatch = new Array( 0, left, "");
        topMatch = new Array( 0, top, "");
    }
    else if (isNav6 || isIE4 )
    {
        var splitexp = /([-0-9.]+)(\w+)/;
        leftMatch = splitexp.exec( left );
        topMatch = splitexp.exec( top );
        if (leftMatch == null || topMatch == null)
        {
            leftMatch = new Array(0, 0, "px");
            topMatch = new Array(0, 0, "px");
        }
    }
    left = ((additive) ? parseFloat( leftMatch[1] ) : 0) + xValue;
    top = ((additive) ? parseFloat( topMatch[1] ) : 0) + yValue;
    setIdProperty( id, "left", left + leftMatch[2] );
    setIdProperty( id, "top", top + topMatch[2] );
}

/*
 *
 * Move a given id to position (xValue, yValue)
 *
 */
	function moveTo( id, x, y )
	{
		genericMove( id, x, y, false );
	}

/*
 *
 * Move a given id to (currentX + xValue, currentY + yValue)
 *
 */
	function moveBy( id, x, y)
	{
		genericMove( id, x, y, true );
	}

/*
 *
 * Function used when converting rgb format colors
 * from Navigator 6 to a hex format
 *
 */ 
	function hex( n )
	{
		var hexdigits = "0123456789abcdef";
		return ( hexdigits.charAt(n >> 4) + hexdigits.charAt(n & 0x0f) );
	}

/*
 *
 * Retrieve background color for a given id.
 * The value returned will be in hex format (#rrggbb)
 *
 */ 
	function getBackgroundColour( id )
	{
		var color;
	
		if (isNav4)
		{
			color = document[id].bgColor;
		}
		else if (isNav6)
		{
			var parseExp = /rgb.(\d+),(\d+),(\d+)./;
			var rgbvals;
			color = getIdProperty( id, "backgroundColor" );
			if (color)
			{
				rgbvals = parseExp.exec( color );
				if (rgbvals)
				{
					color = "#" + hex( rgbvals[1] ) + hex( rgbvals[2] ) +
						hex( rgbvals[3] );
				}
			}
			return color;
		}
		else if (isIE4)
		{
			return document.all[id].backgroundColor;
		}
		return "";
	}

/*
 *
 * Return a division's document
 * 
 */
	function getDocument( divName )
	{
		var doc;
	
		if (isNav4)
		{
			doc = window.document[divName].document;
		}
		else if (isNav6)
		{
			doc = document;
		}
		else if (isIE4)
		{
			doc = document;
		}
		return doc;
	}	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
