(function($) {

  var helpers = {
	addPart : function (a, i) {
	  return (typeof a[i] == 'undefined' || !a[i] || !a[i].length) ? '' : a[i];  
	}
  }

  $.extend({
    href : {
      get : function (options) {
    
		options = jQuery.extend({
		  'href': window.location,
		  'key': null,
		  'cgi': null
		}, options || {});
		
		var parts = /(.*?:\/{2})?(\w*:\w*@)?([-\w.]+)(:\d+)?(\/?[\w\/_.]*)?(\?([^#.]+))?(#(.+))?/.exec(options.href);	
		var o = {};
		var query, i, p = null;
		
		o.protocal = helpers.addPart(parts, 1);
		o.password = helpers.addPart(parts, 2);
		o.server = helpers.addPart(parts, 3);
		o.port = helpers.addPart(parts, 4);
		o.script = helpers.addPart(parts, 5);
		o.queryString = helpers.addPart(parts, 7);
		o.queryObject = {};
		o.anchor = helpers.addPart(parts, 9);
	
		if (o.queryString) {
		  query = o.queryString.split('&');
		
		  for (i = 0; i < query.length; i++) {
			p = query[i].split('=');
			o.queryObject[p[0]] = p[1];
		  }
		}
	
		return options.key && o[options.key] ? (options.key == 'queryObject' && o[options.key][options.cgi] ? o[options.key][options.cgi] : o[options.key]) : o;
      }
    }
  });
  
})(jQuery);