//<![CDATA[
//utility functions for map and map float
/* BEGIN UTILITY FUNCTIONS */
function toggleVisibility(e, displayFlag) {
	var elm = e;	
	if ( typeof e === 'string' ) {
		elm = getElm(e);
	}	
	if (elm) {
		if (elm.style) {
			elm.style.display = displayFlag;
		}
		else {
			//assume layers
			elm.display = displayFlag;
		} 
	}
}
function moveObject(e, newXCoordinate, newYCoordinate) {
	var elm = e;	
	if ( typeof e === 'string' ) {
		elm = getElm(e);
	}		
	if (elm) {
		if (elm.style) {
			elm.style.left = newXCoordinate + 'px';
			elm.style.top = newYCoordinate + 'px';				
		}
		else {
			//assume layers
			elm.left = newXCoordinate + 'px';
			elm.top = newYCoordinate + 'px';		
		} 
	}
}
function getElmSize(e) {
	var valueW = 0, valueH = 0;
	var elm = e;	
	if ( typeof e === 'string' ) {
		elm = getElm(e);
	}
	if (elm) {	
		valueW = elm.offsetWidth;		
		valueH = elm.offsetHeight;
	}
	return {width:valueW, height:valueH};
}
// Returns the X/Y coordinates of element relative to document & relative to viewport & relative to closest relative parent.
function getElementPagePos(e) {
	var valueT = 0, valueL = 0, valueRelativePageT = 0, valueRelativePageL = 0, valuePageT = 0, valuePageL = 0;
	var elm = e;
	var bRelParent = false;
	if ( typeof e === 'string' ) { elm = getElm(e); }
    var element = elm;
    do {
		if (element != elm && element.tagName != "BODY" && ! bRelParent) {		
			var positionStyle = (element.style.position != "" ? element.style.position 
				: getStyle(element, "position"));
			if ( positionStyle == "relative" ) { bRelParent=true; }
		}
		valueT = valuePageT += element.offsetTop  || 0;
		valueL = valuePageL += element.offsetLeft || 0;
		if (! bRelParent )
		{
			valueRelativePageT = valuePageT;
			valueRelativePageL = valuePageL;			
		}    				
      // Safari fix
      if (element.offsetParent == document.body)
        if (elm.style.position == 'absolute') break;
    } while (element = element.offsetParent);

    element = elm;
    do {
      if (!window.opera || element.tagName=='BODY') {
        valuePageT -= element.scrollTop  || 0;
        valuePageL -= element.scrollLeft || 0;
      }
    } while (element = element.parentNode);
    return {x:valueL, y:valueT, parentX:valueRelativePageL, parentY:valueRelativePageT, pageX:valuePageL, pageY:valuePageT};
}
function getElm(elmId)
{
	// cross-browser function to get an object's style object given its id
	if(document.getElementById && document.getElementById(elmId)) {
		// W3C DOM
		return document.getElementById(elmId);
	} else if (document.all && document.all(elmId)) {
		// MSIE 4 DOM
		return document.all(elmId);
	} else if (document.layers && document.layers[elmId]) {
		// NN 4 DOM.. note: this won't find nested layers
		return document.layers[elmId];
	} else {
		return false;
	}
} 
//returns an array of elements that match className
function getElementsByClassName(className, tag, elm){
	var testClass = new RegExp("(^|\\\\s)" + className + "(\\\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i < length; i++){
		current = elements[i];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}
	}
	return returnElements;
}
function getWindowSize() {
	var valueW = 0, valueH = 0;

	if( typeof( window.innerWidth ) == 'number' ) {
	//Non-IE
	valueW = window.innerWidth;
	valueH = window.innerHeight;
	} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
	//IE 6+ in 'standards compliant mode'
	valueW = document.documentElement.clientWidth;
	valueH = document.documentElement.clientHeight;
	} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
	//IE 4 compatible
	valueW = document.body.clientWidth;
	valueH = document.body.clientHeight; 
	}	
	return {width:valueW, height:valueH};
}
/* Gets the value of a style specified by global style sheets, inline styles, and HTML attributes computed by browser. */
function getStyle(e, style) {
	var elm = e;	
	if ( typeof e === 'string' ) { elm = getElm(e); }
	if (elm.currentStyle) { 
		//IE - TODO: IE requires multi-word styles to be in camelCase. Need to implement camelCase style convertion via regex
		return elm.currentStyle[style]; 
	} 
	else if (window.getComputedStyle) {
		return (document.defaultView.getComputedStyle(elm,null)) ? 
			document.defaultView.getComputedStyle(elm,null).getPropertyValue(style) : false;
	} else {return;}
}
/* Redirect parent if exists, otherwise redirect from self window */
function RedirectFromParent(sUrl) {
	if (parent && parent.frames && parent.frames.length > 0) {
		parent.location.href = sUrl;	
	}
	else {
		window.location.href = sUrl;
	}
}
/* END UTILITY FUNCTIONS */
//]]>
