// jsuri-1.1.0.min.js - http://code.google.com/p/jsuri/
jsUri=function(s){if(s==undefined)
s='';this._uri=this.parseUri(s);this._query=new jsUri.query(this._uri.query);}
jsUri.options={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*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};jsUri.prototype={};jsUri.prototype.parseUri=function(str){var o=jsUri.options,m=o.parser[o.strictMode?"strict":"loose"].exec(str),uri={},i=14;while(i--)uri[o.key[i]]=m[i]||"";uri[o.q.name]={};uri[o.key[12]].replace(o.q.parser,function($0,$1,$2){if($1)uri[o.q.name][$1]=$2;});return uri;}
jsUri.prototype.toString=function(){var s='';var is=function(s){return(s!=null&&s!='');}
if(is(this.protocol())){s+=this.protocol();if(this.protocol().indexOf(':')!=this.protocol().length-1){s+=':';}
s+='//';}
else{if(this.hasAuthorityPrefix()&&is(this.host()))
s+='//';}
if(is(this.userInfo())&&is(this.host())){s+=this.userInfo();if(this.userInfo().indexOf('@')!=this.userInfo().length-1)
s+='@';}
if(is(this.host())){s+=this.host();if(is(this.port()))
s+=':'+this.port();}
if(is(this.path()))
s+=this.path();else
if(is(this.host())&&(is(this.query().toString())||is(this.anchor())))
s+='/';if(is(this.query().toString())){if(this.query().toString().indexOf('?')!=0)
s+='?';s+=this.query().toString();}
if(is(this.anchor())){if(this.anchor().indexOf('#')!=0)
s+='#';s+=this.anchor();}
return s;}
jsUri.prototype.protocol=function(val){if(typeof val!='undefined'){this._uri.protocol=val;}
return this._uri.protocol;}
jsUri.prototype.hasAuthorityPrefix=function(val){if(typeof val!='undefined'){this._hasAuthorityPrefix=val;}
if(this._hasAuthorityPrefix==null)
return(this._uri.source.indexOf('//')!=-1);else
return this._hasAuthorityPrefix;}
jsUri.prototype.userInfo=function(val){if(typeof val!='undefined'){this._uri.userInfo=val;}
return this._uri.userInfo;}
jsUri.prototype.host=function(val){if(typeof val!='undefined'){this._uri.host=val;}
return this._uri.host;}
jsUri.prototype.port=function(val){if(typeof val!='undefined'){this._uri.port=val;}
return this._uri.port;}
jsUri.prototype.path=function(val){if(typeof val!='undefined'){this._uri.path=val;}
return this._uri.path;}
jsUri.prototype.query=function(val){if(typeof val!='undefined'){this._query=new jsUri.query(val);}
return this._query;}
jsUri.prototype.anchor=function(val){if(typeof val!='undefined'){this._uri.anchor=val;}
return this._uri.anchor;}
jsUri.prototype.setProtocol=function(val){this.protocol(val);return this;}
jsUri.prototype.setHasAuthorityPrefix=function(val){this.hasAuthorityPrefix(val);return this;}
jsUri.prototype.setUserInfo=function(val){this.userInfo(val);return this;}
jsUri.prototype.setHost=function(val){this.host(val);return this;}
jsUri.prototype.setPort=function(val){this.port(val);return this;}
jsUri.prototype.setPath=function(val){this.path(val);return this;}
jsUri.prototype.setQuery=function(val){this.query(val);return this;}
jsUri.prototype.setAnchor=function(val){this.anchor(val);return this;}
jsUri.query=function(q){this.params=this.parseQuery(q);}
jsUri.query.prototype={};jsUri.query.prototype.toString=function(){var s='';for(var p in this.params){var param=this.params[p];var joined=param.join('=');if(s.length>0)
s+='&';s+=param.join('=');}
return s;}
jsUri.query.prototype.parseQuery=function(q){var arr=[];if(q==null||q=='')
return arr;var params=q.toString().split(/[&;]/);for(var p in params){var param=params[p];var keyval=param.split('=');arr.push([keyval[0],keyval[1]]);}
return arr;}
jsUri.query.prototype.decode=function(s){s=decodeURIComponent(s);s=s.replace('+',' ');return s;}
jsUri.prototype.getQueryParamValue=function(key){for(var p in this.query().params){var param=this.query().params[p];if(this.query().decode(key)==this.query().decode(param[0]))
return param[1];}}
jsUri.prototype.getQueryParamValues=function(key){var arr=[];for(var p in this.query().params){var param=this.query().params[p];if(this.query().decode(key)==this.query().decode(param[0]))
arr.push(param[1]);}
return arr;}
jsUri.prototype.deleteQueryParam=function(key,val){var arr=[];for(var p in this.query().params){var param=this.query().params[p];if(arguments.length==2&&this.query().decode(param[0])==this.query().decode(key)&&this.query().decode(param[1])==this.query().decode(val))
continue;else if(arguments.length==1&&this.query().decode(param[0])==this.query().decode(key))
continue;arr.push(param);}
this.query().params=arr;return this;}
jsUri.prototype.addQueryParam=function(key,val,index){if(arguments.length==3&&index!=-1){index=Math.min(index,this.query().params.length);this.query().params.splice(index,0,[key,val]);}
else if(arguments.length>0)
this.query().params.push([key,val]);return this;}
jsUri.prototype.replaceQueryParam=function(key,newVal,oldVal){if(arguments.length==3){var index=-1;for(var p in this.query().params){var param=this.query().params[p];if(this.query().decode(param[0])==this.query().decode(key)&&decodeURIComponent(param[1])==this.query().decode(oldVal)){index=p;break;}}
return this.deleteQueryParam(key,oldVal).addQueryParam(key,newVal,index);}
else{var index=-1;for(var p in this.query().params){var param=this.query().params[p];if(this.query().decode(param[0])==this.query().decode(key)){index=p;break;}}
return this.deleteQueryParam(key).addQueryParam(key,newVal,index);}}
jsUri.prototype.clone=function(){return new jsUri(this.toString());}
