// Global Parameter manager ...
function Param(n,v) { this.name=n;this.value=v; }
function sToParams(s,p) {
    p.length=0;
    if(!s||s=="") return;
    var i=s.indexOf("?")+1;
    var bEsc = false;
    if(i<=0) {
        i=s.indexOf("%3F");
        if (i < 0) return;
        i += 3;
        bEsc = true;
    }
    var j;
    var bDone=false;
    var nSkip;
    while (!bDone) {
        j=s.indexOf("&",i); 
        nSkip = 1;
        if (j < 0) {
            j = s.indexOf("%26", i);
            nSkip = 3;
            if (j < 0) { j=s.length; bDone=true; }
        }
        str=s.substring(i,j);
        k=str.indexOf("="); if(k<0) k=str.length-1;
        pm = new Param(unescape(str.substring(0,k)), unescape(str.substring(k+1,str.length)));
        p[p.length] = pm;
        i = j + nSkip;
    }
}
function paramsToS(p, bEnc) {
    var s = (bEnc ? "%3F" : "?");
	var bFirst=true;
    for(var i=0;i<p.length;i++)
        if (p[i].name!="") { s+=(bFirst?"":"&")+escape(p[i].name)+"="+escape(p[i].value); bFirst=false;}
	return (s == (bEnc ? "%3F" : "?"))?"":s;
}
function getPm(p,name) {
	var pm=null;
    for (i=0;i<p.length;i++) {
    	if (p[i].name==name) pm=p[i];
    }
   	return pm;
}
function getParam(p,name) {
    pm=getPm(p,name);
    return (pm?pm.value:"");
}
function setParam(p,name,val) {
    pm=getPm(p,name);
    if(pm) {
        if (val) pm.value=val;
        else pm.name="";
    }
    else if (val) { pm = new Param(name,val); p[p.length]=pm; }
}

// automatically get the URL param set ...
var searchParams = new Array;
sToParams(location.href, searchParams);

// a convenient API ...
function GetParam(name) { return getParam(searchParams,name); }
function GetParamL(name) { var str = getParam(searchParams,name); return str.toLowerCase(); }
function SetParam(name, val) { setParam(searchParams, name, val);  }
function ClearParam(name) { setParam(searchParams, name, null); }
function ParamsToS() { return paramsToS(searchParams, false); }
function PullParam(name) { var str = GetParam(name); ClearParam(name); return str; }
function isTrue(s) {  var t = s.toLowerCase(); return (t=='t'||t=='true'||t=='1'); }
function isAutoAPS(s) { var t= s.toLowerCase(); return (t=='a'||t=='auto'||t=='2'); }
function AddParams(url) { return url + paramsToS(searchParams, needIE4Fix(url)); }
function urlWithParams(url) {
    var arg = 1;
    var name;
    var value;
    var bFirst = true;
    while (arg < urlWithParams.arguments.length) {
        name = urlWithParams.arguments[arg++];
        value = (arg < urlWithParams.arguments.length) ? urlWithParams.arguments[arg++] : "";
        if (name != null && name != '') 
            url += (bFirst ? searchChar(url) : "&") + name + "=" + escape(value);
        bFirst = false;
    }
    return url;
}
// IE4 does not accept '?' in a relative URL when in file: protocol
function searchChar(url) { return (needIE4Fix(url) ? "%3F" : "?"); }
function hasFileProtocol(url) { return url.indexOf("file:") == 0; }
function isRelative(url) { return url.indexOf(":") < 0; }
function isIE4() {
	var browserName = navigator.appName;
	var isIE = (browserName.toLowerCase().indexOf("internet") != -1);
	if (!isIE) return false;


	var bIsIE4 = false;
	var IEVersionPrefix = "msie ";
	var sBrowserVersion = navigator.appVersion.toLowerCase();
	var indexVer = sBrowserVersion.indexOf(IEVersionPrefix );
	if (indexVer == -1)
	{
		bIsIE4 = true;
	}
	else
	{
		var Ver = 0;
		sBrowserVersion = sBrowserVersion.substring(indexVer + IEVersionPrefix.length);
		Ver = parseInt("0"+ parseInt(sBrowserVersion));
		bIsIE4 = (Ver <= 4);
	}
	return bIsIE4 ;
}
function needIE4Fix(url) { return (isIE4() && hasFileProtocol(location.href) && isRelative(url)); }
