/*******************************************************************************
 * 
 * ParsedQueryString v1.0
 * (C) 2007, Jeff Mott <mott.jeff@gmail.com>. All rights reserved.
 * 
 * Redistribution and use in source and binary forms with or without
 * modification are permitted provided that the above copyright notice,
 * this condition, and the following disclaimer are retained.
 *
 * THIS SOFTWARE IS PROVIDED AS IS, AND ANY EXPRESS OR IMPLIED WARRANTIES,
 * INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING BUT NOT
 * LIMITED TO PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * 
 ******************************************************************************/

String.prototype.urlDecode = function()
{
	return decodeURIComponent(this.replace(/\+/g, " "));
}

function ParsedQueryString()
{
	this.parameters = {};

	if ( ! location.search.length > 1 )
		return;

	var pairs = location.search.substr(1).split(/[&;]/);
	for (var i = 0; i < pairs.length; i++)
	{
		var pair = pairs[i].split(/=/);
		var name = pair[0].urlDecode();
		if (Boolean(pair[1]))
		{
			var value = pair[1].urlDecode();
			if (Boolean(this.parameters[name]))
				this.parameters[name].push(value);
			else
				this.parameters[name] = [value];
		}
	}
}

ParsedQueryString.prototype.param = function(name)
{
	if (Boolean(this.parameters[name]))
		return this.parameters[name][0];
	else
		return "";
}

ParsedQueryString.prototype.params = function(name)
{
	if (arguments.length >= 1)
	{
		if (Boolean(this.parameters[name]))
		{
			var values = [];
			for (var i = 0; i < this.parameters[name].length; i++)
				values.push(this.parameters[name][i]);
			return values;
		}
		else
			return [];
	}
	else
	{
		var names = [];
		for (var name in this.parameters)
			names.push(name);
		return names;
	}
}
