
function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}

function ltrim(stringToTrim) {
	return stringToTrim.replace(/^\s+/,"");
}

function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/,"");
}

var ns4 = (navigator.appName.indexOf("Netscape")>=0 
          && parseFloat(navigator.appVersion) >= 4 
          && parseFloat(navigator.appVersion) < 5)? true : false;
var ns6 = (parseFloat(navigator.appVersion) >= 5 
          && navigator.appName.indexOf("Netscape")>=0 )? true: false;
var ns = (document.layers)? true:false;
var ie = (document.all)? true:false;

function getElLeft(el) {
    if (ns4) {return el.pageX;} 
    else {
        xPos = el.offsetLeft;
        tempEl = el.offsetParent;
        while (tempEl != null) {
            xPos += tempEl.offsetLeft;
              tempEl = tempEl.offsetParent;
        }
        return xPos;
    }
}
function getElTop(el) {
    if (ns4) {return el.pageY;} 
    else {
        yPos = el.offsetTop;
        tempEl = el.offsetParent;
        while (tempEl != null) {
            yPos += tempEl.offsetTop;
              tempEl = tempEl.offsetParent;
        }
        return yPos;
    }
}

function checkForEnterKey(e)
{
	var keynum;
	var keychar;
	var numcheck;

	if(window.event) // IE
		keynum = e.keyCode;
	else if(e.which) // Netscape/Firefox/Opera
		keynum = e.which;

	if(keynum==13)
		return true;
	else
		return false;
}

function blockKeyPresses(e, reg_exp_str) // onkeypress should contain: "return noNumbers(event);"
{
	var keynum;
	var keychar;

	if(window.event) // IE
	{
		keynum = e.keyCode;
	}
	else if(e.which) // Netscape/Firefox/Opera
	{
		keynum = e.which;
	}
	keychar = String.fromCharCode(keynum);
	return !reg_exp_str.test(keychar);
}

function get_url_value(name)
{  
	name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regexS = "[\\?&]"+name+"=([^&#]*)";
	var regex = new RegExp( regexS );  
	var results = regex.exec( window.location.href ); 
	if(results == null)    
		return "";  
	else   
		return results[1];
}

function get_url_only(url)
{
	var url_parts = url.split('?');
	return url_parts[0];
}

function runJS(html_str)
{
// The following is standard handling of ajax loaded JS		
	var temp_div = document.createElement('div');
	temp_div.innerHTML = html_str;
	var new_nodes = temp_div.childNodes;
	for(var i=0; i<new_nodes.length; i++)
	{
		if(new_nodes[i].nodeName=="SCRIPT" || new_nodes[i].nodeName=="script")
		{
			if(window.execScript)
				window.execScript(new_nodes[i].innerHTML);
			else
				eval.call(null, new_nodes[i].innerHTML);
		}
	}			
	temp_div.innerHTML = "";
}

function urlSafe(str)
{
	var ret_str = str.replace(/\,/g,"!!44");
	ret_str = ret_str.replace(/\&/g,"!!38");
	ret_str = ret_str.replace(/\@/g,"!!64");
	ret_str = ret_str.replace(/\$/g,"!!36");
 	ret_str = ret_str.replace(/\+/g,"!!43");
 	ret_str = ret_str.replace(/\//g,"!!47");
 	ret_str = ret_str.replace(/\:/g,"!!58");
 	ret_str = ret_str.replace(/\;/g,"!!59");
 	ret_str = ret_str.replace(/\=/g,"!!61");
 	ret_str = ret_str.replace(/\?/g,"!!63");
	ret_str = ret_str.replace(/'/g,"!!39");
	return ret_str;
}

function urlDecode(str)
{
	var ret_str = str.replace(/!!44/g,",");
	ret_str = ret_str.replace(/!!38/g,"&");
	ret_str = ret_str.replace(/!!64/g,"@");
	ret_str = ret_str.replace(/!!36/g,"$");
 	ret_str = ret_str.replace(/!!43/g,"+");
 	ret_str = ret_str.replace(/!!47/g,"/");
 	ret_str = ret_str.replace(/!!58/g,":");
 	ret_str = ret_str.replace(/!!59/g,";");
 	ret_str = ret_str.replace(/!!61/g,"=");
 	ret_str = ret_str.replace(/!!63/g,"?");
	ret_str = ret_str.replace(/!!39/g,"'");
	return ret_str;
}

function urlencode (str) {
    // http://kevin.vanzonneveld.net
    // +   original by: Philip Peterson
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: AJ
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: travc
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Lars Fischer
    // +      input by: Ratheous
    // +      reimplemented by: Brett Zamir (http://brett-zamir.me)
    // %          note 1: This reflects PHP 5.3/6.0+ behavior
    // *     example 1: urlencode('Kevin van Zonneveld!');
    // *     returns 1: 'Kevin+van+Zonneveld%21'
    // *     example 2: urlencode('http://kevin.vanzonneveld.net/');
    // *     returns 2: 'http%3A%2F%2Fkevin.vanzonneveld.net%2F'
    // *     example 3: urlencode('http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a');
    // *     returns 3: 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a'
 
    var hexStr = function (dec) {
        return '%' + dec.toString(16).toUpperCase();
    };
 
    var ret = '',
            unreserved = /[\w.-]/; // A-Za-z0-9_.- // Tilde is not here for historical reasons; to preserve it, use rawurlencode instead
    str = (str+'').toString();
 
    for (var i = 0, dl = str.length; i < dl; i++) {
        var ch = str.charAt(i);
        if (unreserved.test(ch)) {
            ret += ch;
        }
        else {
            var code = str.charCodeAt(i);
            // Reserved assumed to be in UTF-8, as in PHP
            if (code === 32) {
                ret += '+'; // %20 in rawurlencode
            }
            else if (code < 128) { // 1 byte
                ret += hexStr(code);
            }
            else if (code >= 128 && code < 2048) { // 2 bytes
                ret += hexStr((code >> 6) | 0xC0);
                ret += hexStr((code & 0x3F) | 0x80);
            }
            else if (code >= 2048 && code < 65536) { // 3 bytes
                ret += hexStr((code >> 12) | 0xE0);
                ret += hexStr(((code >> 6) & 0x3F) | 0x80);
                ret += hexStr((code & 0x3F) | 0x80);
            }
            else if (code >= 65536) { // 4 bytes
                ret += hexStr((code >> 18) | 0xF0);
                ret += hexStr(((code >> 12) & 0x3F) | 0x80);
                ret += hexStr(((code >> 6) & 0x3F) | 0x80);
                ret += hexStr((code & 0x3F) | 0x80);
            }
        }
    }
    return ret;
}

function isNumeric(sText)
{
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;
 
	for (i = 0; i < sText.length && IsNumber == true; i++) 
	{ 
		Char = sText.charAt(i); 
		if(ValidChars.indexOf(Char) == -1) 
			IsNumber = false;
	}
   return IsNumber;
   
}

function getElHeight(el)
{
	
	if(el.nodeName!="div" && el.nodeName!="DIV")
	{alert(el.nodeName);
		return 0;
	}
	var h = 0;
	
	if(el.offsetHeight>h)
		h=el.offsetHeight;
	
	var nodes = el.childNodes;
	
	for(var x=0; x<nodes.length; x++)
	{
		var c_h = getElHeight(nodes[x]);
		
		if(c_h>h)
			h=c_h;
	}
	
	return h;
}