function addLoadEvent(func){
	var oldonload = window.onload;
	if(typeof window.onload != 'function'){
		window.onload = func;
	}else{
		window.onload = function(){
			oldonload();
			func();
		}
	}
}

function addUnloadEvent(func){
	var oldonunload = window.unonload;
	if(typeof window.unonload != 'function'){
		window.unonload = func;
	}else{
		window.unonload = function(){
			oldonunload();
			func();
		}
	}
}

function mapUnload(){
	GUnload();
}

function setOpacity( elem, level){
	if(elem.filters){
		elem.style.filters = 'alpha(opacity=' + level + ')';
	} else {
		elem.style.opacity = level/100;
	}
}

function pageHeight(){
	return document.body.scrollHeight;
}

function pageWidth(){
	return document.body.scrollWidth;
}

function hide(elem){
	var curDisplay = getStyle(elem, 'display');
	if(curDisplay != 'none'){
		elem.$oldDisplay = curDisplay;
	}
	elem.style.display = 'none';
}

function show( elem ){
	elem.style.display  = elem.$oldDisplay || 'block';
}

function getStyle( elem, name ){
	if( elem.style[name] ){
		return elem.style[name];
	}else if( elem.currentStyle ){
		return elem.currentStyle[name];
	}else if( document.defaultView && document.defaultView.getComputedStyle ){
		name = name.replace(/([A-Z])/g,"-$1");
		name = name.toLowerCase();
		var s = document.defaultView.getComputedStyle(elem,"");
		return s && s.getPropertyValue(name);
	} else {
		return null;
	}
}

function elid( name ){
	return document.getElementById(name);
}

function tag(name, elem){
	return (elem || document).getElementsByTagName(name);
}

function getHeight( elem ){
	return parseInt(getStyle(elem,'height'));
}

function getWidth( elem ){
	return parseInt(getStyle(elem,'width'));
}

function setX(elem, pos){
	elem.style.left = pos + "px";
}

function setY(elem, pos){
	elem.style.top = pos + "px";
}

function scroll_X(){
	var de = document.documentElement;
	return self.pageXOffset || 
	(de && de.scrollLeft) ||
	document.body.scrollLeft;
}

function scroll_Y(){
	var de = document.documentElement;
	return self.pageYOffset || (de && de.scrollTop) || document.body.scrollTop;	
}

function windowHeight(){
	var de = document.documentElement;
	return self.innerHeight || 
	(de && de.clientHeight) ||
	document.body.clientHeight;	
}

function windowWidth(){
	var de = document.documentElement;
	return self.innerWidth || 
	(de && de.clientWidth ) ||
	document.body.clientWidth;	
}

String.prototype.supplant = function (o) { 
    return this.replace(/{([^{}]*)}/g, 
        function (a, b) {  
            var r = o[b];
            return typeof r === 'string' ? 
                r : a; 
        }
    ); 
};

String.prototype.trim = function(){
	return this.replace(/^\s+|\s+$/g, '');
}

/* this function changes the cursor style*/
function changeCursor(element, cursorstyle){
	element.style.cursor = cursorstyle
}

/* this function changes the body tag class */
function changeBodyClass(from, to){
	document.body.className = document.body.className.replace(from, to);
	return false;
}

/* this function changes the body tag class */
function changeElementClass(element_id,from, to){
	if(!document.getElementById || !document.getElementsByTagName) return;
	var element = document.getElementById(element_id);
	element.className = element.className.replace(from,to);
	return false;
}

function queryString() {
	var qsParm = new Array();
	var query = window.location.search.substring(1);
	var parms = query.split('&');
	for (var i=0; i<parms.length; i++) {
		var pos = parms[i].indexOf('=');
		if (pos > 0) {
			var key = parms[i].substring(0,pos);
			var val = parms[i].substring(pos+1);
			qsParm[key] = val;
		}
	}
	return qsParm;
}

function getHTTPObject(){
	var xhr = false;
	if(window.XMLHttpRequest){
		xhr = new XMLHttpRequest();
	} else if (window.ActiveXObject){
		try{
			xhr = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e){
			try {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				xhr = false;
			}
		}
	}
}

function fadeUp(element, red, green, blue){
	if(element.fade){
		clearTimeout(element.fade);
	}
	element.style.backgroundColor = "rgb(" + red + ", " + green + "," + blue + ")";
	if(red == 255 && green == 255 && blue == 255){
		return;
	}
	var newred = red + Math.ceil((255 - red)/10);
	var newgreen = green + Math.ceil((255 - green)/10);
	var newblue = blue + Math.ceil((255 - blue)/10);
	var repeat = function(){
		fadeUp(element, newred, newgreen, newblue);
	}
	element.fade = setTimeout(repeat, 100);
}