(function ($) {
	
	// uri object
	$.extend({
		
		uri: (function () {
			
			var l;
					
			// initializer or constructor for the uri object
			(function () {			
				
				l = window.location;
			})();
			
			// return the uri object
			return {
				
				host: l.hostname,
				
				port: l.port,
				
				query: l.search,
				
				originalUrl: l
			};
		})()
	});
	
	// hhtpRequest object
	$.extend({
		
		httpRequest: (function () {
			
			// initializer or constructor for the httpRequest object
			(function () {			
				
			})();
			
			// return the httpRequest object
			return {
				
				// public property: queryString map object
				queryString: (function () {
			
					// private properties
					var qs, keys = [], values = [], map = {};
					
					// initializer or constructor for the queryString map object
					(function () {
						
						qs = $.uri.query; 
						
						$.each(qs.replace(/^\?/, '').replace(/\&$/, '').split('&'), function (i) {
							
							var kvPair = this.split('=');
							
							keys[i] = kvPair[0];
							values[i] = kvPair[1];
							map[kvPair[0]] = kvPair[1];
						});
					})();
					
					// return the the queryString map object
					return $.extend(map, {
						
						// public property: the original query component
						rawQueryComponent: qs,
						
						// public property: an array of all query string keys
						keys: keys,
						
						// public property: an array of all query string values
						values: values,
						
						// public method: returns a value from the query string collection
						getValue: function (key) {
							
							return this[key];
						}
					});
				})(),
				
				// public property: uri object
				url: $.uri
			};
		})()
	});
})(jQuery);