/*///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\*/
/* Javascript utility functions */
/*///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\*/
/*
/* Author:     Scott Whittaker (scott @ headfirst.co.nz)
/* Created:    Feb 2007
/* Modified:   June 2007
*/
/*///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\*/
// ---
/*	$import( jsFile ):Void
	Javascript import functionality
*/
_importedJS = {};
function $import(jsFile) {
	if (_importedJS[jsFile] != null) return;
	var scriptElm = document.createElement('script');
	scriptElm.type = 'text/javascript';
	scriptElm.src = jsFile;
	document.getElementsByTagName('head')[0].appendChild(scriptElm);
	_importedJS[jsFile] = true;
}

// ---
/*	getElementsByClassName( oElm, strTagName, oClassNames ):Array

    Written by Jonathan Snook, http://www.snook.ca/jonathan
    Add-ons by Robert Nyman, http://www.robertnyman.com

	Examples of how to call the function:
	
	To get all a elements in the document with a "info-links" class:
    getElementsByClassName(document, "a", "info-links");
    
	To get all div elements within the element named "container", with a "col" and a "left" class:
    getElementsByClassName(document.getElementById("container"), "div", ["col", "left"]);
*/
function getElementsByClassName(oElm, strTagName, oClassNames){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	var arrRegExpClassNames = new Array();
	if(typeof oClassNames == "object"){
		for(var i=0; i<oClassNames.length; i++){
			arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)"));
		}
	}
	else{
		arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames.replace(/\-/g, "\\-") + "(\\s|$)"));
	}
	var oElement;
	var bMatchesAll;
	for(var j=0; j<arrElements.length; j++){
		oElement = arrElements[j];
		bMatchesAll = true;
		for(var k=0; k<arrRegExpClassNames.length; k++){
			if(!arrRegExpClassNames[k].test(oElement.className)){
				bMatchesAll = false;
				break;
			}
		}
		if(bMatchesAll){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
}
// ---
// Array support for the push method in IE 5
if(typeof Array.prototype.push != "function"){
	Array.prototype.push = ArrayPush;
	function ArrayPush(value){
		this[this.length] = value;
	}
}

// ---
/*	getUrlVars():Object
	Read a page's GET URL variables and return them as an associative array.
*/
function getUrlVars() {
	var urlVars = {};
	var loc = window.location.href;
	var list = loc.slice(loc.indexOf('?')+1).split('&');
	var n = list.length;
	while (n--) {
		var pair = list[n].split('=');
		urlVars[pair[0]] = pair[1];
	}
	return urlVars;
}

// ---
function getHeight( elm ) {
	if ( elm.offsetHeight ) return elm.offsetHeight;
	else if ( elm.style.pixelHeight ) return elm.style.pixelHeight;
	else	return null;
}

// ---
function setIfUndefined( variable, initValue ) {
	if (typeof variable == 'undefined') return initValue
	else return variable;
}