// SpryURLUtils.js - version 0.1 - Spry Pre-Release 1.6.1

//

// Copyright (c) 2007. Adobe Systems Incorporated.

// All rights reserved.

//

// Redistribution and use in source and binary forms, with or without

// modification, are permitted provided that the following conditions are met:

//

//   * Redistributions of source code must retain the above copyright notice,

//     this list of conditions and the following disclaimer.

//   * Redistributions in binary form must reproduce the above copyright notice,

//     this list of conditions and the following disclaimer in the documentation

//     and/or other materials provided with the distribution.

//   * Neither the name of Adobe Systems Incorporated nor the names of its

//     contributors may be used to endorse or promote products derived from this

//     software without specific prior written permission.

//

// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 OWNER 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.



var Spry; if (!Spry) Spry = {}; if (!Spry.Utils) Spry.Utils = {};



// Spry.Utils.urlComponentToObject

//

// Given a URL component of name value pairs, it returns an object that has the

// the URL component names as properties, and the URL component values as the value

// of those properties.

//

// The paramSeparator and nameValueSeparator args are optional. If not specified,

// the default paramSeparator is '&' and the default nameValueSeparator is '='.



Spry.Utils.urlComponentToObject = function(ucStr, paramSeparator, nameValueSeparator)

{

	var o = new Object;

	if (ucStr)

	{

		if (!paramSeparator) paramSeparator = "&";

		if (!nameValueSeparator) nameValueSeparator = "=";

		var params = ucStr.split(paramSeparator);

		for (var i = 0; i < params.length; i++)

		{

			var a = params[i].split(nameValueSeparator);

			var n = decodeURIComponent(a[0]?a[0]:"");

			var v = decodeURIComponent(a[1]?a[1]:"");

			if (v.match(/^0$|^[1-9]\d*$/))

				v = parseInt(v);

			if (typeof o[n] == "undefined")

				o[n] = v;

			else			

			{

				if (typeof o[n] != "object")

				{

					var t = o[n];

					o[n] = new Array;

					o[n].push(t);

				}

				o[n].push(v);

			}

		}

	}

	return o;

};



// Spry.Utils.getLocationHashParamsAsObject

//

// Returns window.location.hash as an object that has the the URL component

// names as properties, and the URL component values as the value of those properties.



Spry.Utils.getLocationHashParamsAsObject = function(paramSeparator, nameValueSeparator)

{

	return Spry.Utils.urlComponentToObject(window.location.hash.replace(/^#/, ""), paramSeparator, nameValueSeparator);

};



// Spry.Utils.getLocationParamsAsObject

//

// Returns window.location.search as an object that has the the URL component

// names as properties, and the URL component values as the value of those properties.



Spry.Utils.getLocationParamsAsObject = function()

{

	return Spry.Utils.urlComponentToObject(window.location.search.replace(/^\?/, ""));

};



// Spry.Utils.getURLHashParamsAsObject

//

// Given a url string, extracts out the URL component that follows the '#' character

// and returns an object that has the the URL component names as properties, and the

// URL component values as the value of those properties.

//

// The paramSeparator and nameValueSeparator args are optional. If not specified,

// the default paramSeparator is '&' and the default nameValueSeparator is '='.



Spry.Utils.getURLHashParamsAsObject = function(url, paramSeparator, nameValueSeparator)

{

	var i;

	if (url && (i = url.search("#")) >= 0)

		return Spry.Utils.urlComponentToObject(url.substr(i+1), paramSeparator, nameValueSeparator);

	return new Object;

};



// Spry.Utils.getURLParamsAsObject

//

// Given a url string, extracts out the URL component that follows the '?' character

// and returns an object that has the the URL component names as properties, and the

// URL component values as the value of those properties.



Spry.Utils.getURLParamsAsObject = function(url)

{

	var s;

	if (url && (s = url.match(/\?[^#]*/)) && s)

		return Spry.Utils.urlComponentToObject(s[0].replace(/^\?/, ""));

	return new Object;

};


