function CGI() {
	/* load up the url parameters */

	this._keys = new Array();
	this.data = new Object();

	var string = location.search.replace(/^\?/,"");
	this.server_name = location.href.replace(/^https?:\/\/([^\/]+).+$/,"$1");

	var key = ""; 
	var value = "";
	var inkey = true;
	var invalue = false;

	for( var idx = 0; idx!= string.length; idx++ ) {

		var c = string.charAt(idx);

		if( c == "=" )	{
			invalue = true;
			inkey = false;
			continue;
		} 

		if(c == "&" || c == ";") {
			inkey = 1;
			invalue = 0;
			if( ! this.data[key] ) this.data[key] = [];
			this.data[key].push(decodeURIComponent(value));
			this._keys.push(key);
			key = ""; value = "";
			continue;
		}

		if(inkey) key += c;
		else if(invalue) value += c;
	}

	if( ! this.data[key] ) this.data[key] = [];
	this.data[key].push(decodeURIComponent(value));
	this._keys.push(key);
}

/* returns the value for the given param.  If there is only one value for the
   given param, it returns that value.  Otherwise it returns an array of values
 */
CGI.prototype.param = function(p) {
	if(this.data[p] == null) return null;
	if(this.data[p].length == 1)
		return this.data[p][0];
	return this.data[p];
}

/* returns an array of param names */
CGI.prototype.keys = function() {
	return this._keys;
}

/* debuggin method */
CGI.prototype.toString = function() {
	var string = "";
	var keys = this.keys();

	for( var k in keys ) {
		string += keys[k] + " : ";
		var params = this.param(keys[k]);

		for( var p in params ) {
			string +=  params[p] + " ";
		}
		string += "\n";
	}
	return string;
}


