CGI -- Query String parser

function CGI(query_string) {

	this.parameters = {};

	this.query_string = (query_string
		|| window.location.search).replace(/^\?/, '');

	this.keyValuePairs = [];
	if (this.query_string) {

		this.keyValuePairs = this.query_string.split(/&/);

		for(var j=0; j < this.keyValuePairs.length; j++) {
			var keyvalue = this.keyValuePairs[j].split("=");
			if (keyvalue.length > 1) {
				var name  = decodeURIComponent( keyvalue[0] );
				var value = decodeURIComponent( keyvalue[1].replace(/\+/g,' ') );
				if( typeof this.parameters[ name ] == 'undefined'  )
					this.parameters[ name ] = value;
				else if ( this.parameters[ name ] instanceof Array )
					this.parameters[ name ].push( value );
				else
					this.parameters[ name ] = [ this.parameters[ name ], value ];
			}
		}
	}
}

CGI.prototype.param = function() {
	if (arguments.length == 0){
		var rv = [];
		for( var name in this.parameters )
			if ( this.parameters.hasOwnProperty(name) )
				rv.push(name);
		return rv;
	}
	if (arguments.length > 1) {
		this.parameters[ arguments[0] ] = arguments[1];
	}
	return this.parameters[arguments[0]]
};
2008-03-25 - Woosta 2008-03-25 - Woosta -- removed attempt to make the constructor work as a method if that's what the user wants. JS doesn't support that?!