// JavaScript Document
var Location = function(loc) {
	if(typeof(loc) == "object" && loc.search != null) {
		var qs = loc.search;
		var kvp = qs.replace(/^\?/i,'').split('&');
		var params = {};
		if(kvp instanceof Array) {
			kvp.reverse();
			var vpl = kvp.length-1;
			var vp, op;								
			do {
				vp = kvp[vpl].split('=');
				switch(true) {
					case ((params[vp[0]]!=null) && !(params[vp[0]] instanceof Array)):
						op = params[vp[0]];
						params[vp[0]] = [op, vp[1]];
						break;
					case (params[vp[0]] instanceof Array):
						params[vp[0]].push(vp[1]);
						break;
					default:			
						params[vp[0]] = vp[1];
				}
			} while(vpl--);
			kvp = null;
		}
		//Returns a value of the querystring param by name
		loc.getParam = function(name) {
			try {
				return params[name];
			} catch(e) { return null; }
		}
		//Returns an object with name/value properties
		loc.getParams = function() {
			return params;
		}
		//Url check that detects if address is secure
		loc.isSecure = function() {
			return (loc.protocol === "https:");
		}		
		//Builds a Querystring from an object
		loc.buildSearch = function(qsObj) {
			if(typeof(qsObj) == "object") {
				var qs = [];
				for(var param in qsObj) {
					if(typeof(qsObj[param]) == "string" || typeof(qsObj[param]) == "number") {
						qs.push(param+"="+loc.encode(qsObj[param]+""));
					} else if (qsObj[param] instanceof Array) {									
						for(var p in qsObj[param]) {
							qs.push(param+"="+loc.encode(String(qsObj[param][p])));
						}
					}
				}
				return "?" + qs.join('&');
			} else { return "" };
		}
		//Url encode function
		loc.encode = function(url) {
			if(typeof(url) == "string") {
				return escape(url).replace(/\+/g, "%2b").replace(/ /g, "+");	
			}
		}
		//Url decode
		loc.decode = function(url) {
			if(typeof(url) == "string") {
				return unescape(url.replace(/\+/g, " ").replace(/\%2[B,b]/g, "+"));
			}
		}
	}
	return loc;
}
