
function Querystring(qs) { // optionally pass a querystring to parse

	this.params = new Object();
	//this.nameAt = new Object();
	//this.paramAt = new Object();
	this.params.name = new Array();
	this.params.value = new Array();
	this.get=Querystring_get;
	this.set=Querystring_set;
	this.getIndex=qsGetIndex;
	this.flush=Querystring_flush;
	
	if (qs == null){
		qs=location.search.substring(1,location.search.length);
	}
	
// Turn <plus> back to <space>
// See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1
	qs = qs.replace(/\+/g, ' ');
	
	var args = qs.split('&'); // parse out name/value pairs separated via &
	if (args.length==1 && args[0]==""){
		this.count=0;
	}else{
		this.count=args.length;
	}
	var i=0;
// split out each name=value pair
	
	for (i=0;i<this.count;i++) {
		var value;
		var pair = args[i].split('=');
		var name = unescape(pair[0]);
		if (pair.length == 2)
			value = unescape(pair[1]);
		else
			value = name;
		//this.params[name] = value;
		
		this.params.name[i] = name;
		this.params.value[i] = value;
	}
}

function qsGetIndex(name){
	var myFlag=false;
	var i=0;
	for(i=0;i<this.count;i++){
		if(this.params.name[i]==name){
			myFlag=true;
			break;
		}
	}
	if(!myFlag) i=-1;
	return i;
}

function Querystring_set(key, val){
	if(this.params.value[this.getIndex(key)]==undefined){
		var cnt=this.params.name.length;
		this.params.name[cnt]=key;
		this.params.value[cnt]=val;
		this.count++;
	}else{
		this.params.value[this.getIndex(key)]=val;
	}
}

function Querystring_get(key, default_) {
	// This silly looking line changes UNDEFINED to NULL
	if (default_ == null) default_ = null;
	
	var value=this.params.value[this.getIndex(key)]
	if (value==null) value=default_;
	return value
}

function Querystring_flush(){
	var str="?";
	for(var i=0;i<this.count;i++){
		str=str+this.params.name[i]+"="+this.params.value[i];
		if (i<this.count-1){
			str=str+"&";
		}
	}
	if(str!="?"){
		return str;
	}else{
		return "";
	}
}