jQuery.url=function(){var segments={},parsed={},options={url:window.location,strictMode:false,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}},parseUri=function(){str=decodeURI(options.url);var m=options.parser[options.strictMode?"strict":"loose"].exec(str),uri={},i=14;while(i--)uri[options.key[i]]=m[i]||"";uri[options.q.name]={};uri[options.key[12]].replace(options.q.parser,function($0,$1,$2){if($1)uri[options.q.name][$1]=$2});return uri},key=function(key){!parsed.length&&setUp();if(key=="base")if(parsed.port!==null&&parsed.port!=="")return parsed.protocol+"://"+parsed.host+":"+parsed.port+"/";else return parsed.protocol+"://"+parsed.host+"/";return parsed[key]===""?null:parsed[key]},param=function(item){!parsed.length&&setUp();return parsed.queryKey[item]===null?null:parsed.queryKey[item]},setUp=function(){parsed=parseUri();getSegments()},getSegments=function(){var p=parsed.path;segments=[];segments=parsed.path.length==1?{}:(p.charAt(p.length-1)=="/"?p.substring(1,p.length-1):(path=p.substring(1))).split("/")};return {setMode:function(mode){strictMode=mode=="strict"?true:false;return this},setUrl:function(newUri){options.url=newUri===undefined?window.location:newUri;setUp();return this},segment:function(pos){!parsed.length&&setUp();if(pos===undefined)return segments.length;return segments[pos]===""||segments[pos]===undefined?null:segments[pos]},attr:key,param:param}}()