/*******************************************************************************
 * 
 * ParsedQueryString version 1.0
 * Copyright 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.
 * 
 ******************************************************************************/

function ParsedQueryString() {
	this._init();
}

ParsedQueryString.version = '1.0';

ParsedQueryString.prototype =
{
	_init:
		function ()
		{
			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 = this._decodeURL(pair[0]);
				if (Boolean(pair[1]))
				{
					var value = this._decodeURL(pair[1]);
					if (Boolean(this._parameters[name]))
						this._parameters[name].push(value);
					else
						this._parameters[name] = [value];
				}
			}
		},

	_decodeURL:
		function (url) {
			return decodeURIComponent(url.replace(/\+/g, " "));
		},

	param:
		function (name)
		{
			if (Boolean(this._parameters[name]))
				return this._parameters[name][0];
			else
				return "";
		},

	params:
		function (name)
		{
			if (Boolean(name))
			{
				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;
			}
		}
};
