function queryString(qs) {
	this.data = new Object()

	this.word_is = "=";
	this.word_and = "&";

	this.init = function(qs){

		if (qs == null)
			qs=location.search.substring(1,location.search.length); //Remove ?

		if (qs.length == 0) return

	// 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 pairs = qs.split(this.word_and) // parse out name/value pairs separated via &

	// split out each name=value pair
		for (var i=0;i<pairs.length;i++) {
			var value;
			var pair = pairs[i].split(this.word_is);
			var key = unescape(pair[0]);

			if (pair.length == 2)
				value = unescape(pair[1]);
			else
				value = name;

			//this.data[name] = value;
			this.set(key, value);

		}
		return this;
	}

	//-- Given a querystring, perform a set() on each item.
	this.append = function(qs){

		//Remove leading ? if present
		if( qs.substring(0,1)=="?" ) qs=qs.substring(1,qs.length);

		var pairs = qs.split(this.word_and);
		for (var i=0;i<pairs.length;i++) {
			var value;
			var pair = pairs[i].split(this.word_is);
			var key = unescape(pair[0]);

			if (pair.length == 2)
				value = unescape(pair[1]);
			else
				value = name;

			this.set(key, value);
		}
	}


	this.get = function() {
		if(arguments.length == 2) return this.getAsStringWithChange( arguments[0], arguments[1] );
		if(arguments.length == 1) return this.getValue( arguments[0] );
		return this.getAsString();
	}

	this.getAsString = function() {
		var qs = "";
		var pair, key, value;
		var qsArray = new Array();

		for( key in this.data ){
			pair = key + this.word_is + escape(this.data[key]);
			qsArray[qsArray.length] = pair;
		}
		qs = qsArray.join( this.word_and );

		return qs;
	}

	this.getValue = function(key) {
		var value=this.data[key];
		return value;
	}

	this.getAsStringWithChange = function(key, value) {

		var preexisted = false;
		var prevalue;
		var qs;

		if( this.data[key] != undefined ) {
			preexisted = true;
			prevalue = this.data[key];
		}

		this.set(key, value);
		qs = this.get();

		if( preexisted ) {
			this.data[key] = prevalue;
		} else {
			delete this.data[key];
		}

		return qs;

	}

	this.set = function(key, value){
		this.data[key] = value;
		return this;
	}

	this.dump = function(){
		var debug, key;

		debug = "";

		for( key in this.data )
			debug += key + " : " + this.data[key] + "\n";

		alert( "DUMP\n\n" + debug );

	}

	//--- Call constuctor
	this.init(qs);

}