function NGUrl(b){this.reset();if(arguments.length>0){this.set(b)}}NGUrl.PORTS={80:"http",443:"https"};NGUrl.encode=function(c){if(!isStr(c)){if(isNull(c)||!isDef(c)){return null}try{if(isFunc(c.toString)){c=c.toString()}else{return null}}catch(d){return null}}return encodeURIComponent(c).replace(/%20/g,"+")};NGUrl.decode=function(b){if(!isStr(b)){return null}return decodeURIComponent(b.replace(/\+/g,"%20"))};NGUrl.parseUrl=function(k){var j=/^(([a-z0-9\.\+\-]+):(\/\/)?((([^#\/\?\/:]+)(:([^#\/\?\/:]*))?@)?([^#\/\?\/:]+)(:([0-9]+))?)?)?([^#\?]+)?((#(.*?))?\?([^#]*))?(#([^#\?]*)$)?$/;var l=j.exec(k);if(l===null){return null}var h={scheme:2,schemejoin:3,user:6,password:8,host:9,port:11,path:12,query:16,fragment:18};var g={};for(var i in h){if(!isFunc(h[i])){g[i]=(typeof l[h[i]]!="undefined"&&l[h[i]].length>0?l[h[i]]:null)}}if(g.port!==null&&g.port.length>5){return null}if(g.scheme!==null&&g.host===null&&g.schemejoin=="//"&&g.path[0]==="/"){g.path=g.path.substring(1);g.schemejoin+="/"}return g};NGUrl.parseVar=function(d){var e=[""];for(var f=0;f<d.length;f++){if(d.substr(f,1)=="["){e.push("")}else{if(d.substr(f,1)!="]"){e[e.length-1]+=d.substr(f,1)}}}return e};NGUrl.parseQuery=function(m){var n={};var o=m.split(/&/);var p={};for(var i,a,k,l=0;l<o.length;l++){k=o[l].split(/=/);if(k.length>0){k[0]=NGUrl.decode(k[0])}if(k.length>1){k[1]=NGUrl.decode(k[1])}if(k.length>0&&/^[^\[\]]+(\[[^\[\]]*\])+$/.test(k[0])){a=NGUrl.parseVar(k[0]);if(a[a.length-1].length==0){if(!isDef(typeof p[k[0]])){p[k[0]]=0}else{p[k[0]]++}a[a.length-1]=p[k[0]]}i=NGUrl._layPath(n,a);i[a[a.length-1]]=(k.length>1?k[1]:null)}else{n[k[0]]=(k.length>1?k[1]:null)}}return n};NGUrl.argDump=function(f){var d="";if(isArr(f)){for(var e=0;e<f.length;e++){if(d!=""){d+=", "}d+=NGUrl.argDump(f[e])}d="[ "+d+" ]"}else{if(isObj(f)){for(var e in f){if(!isFunc(f[e])){if(d!=""){d+=", "}d+=e+" : "+NGUrl.argDump(f[e])}}d="{ "+d+" }"}else{d=f}}return d};NGUrl.argToString=function(j,h){var l=[];if(!isArr(j)){j=[j]}if(isArr(h)){for(var k,a=0;a<h.length;a++){l=l.concat(NGUrl.argToString(j.concat([a]),h[a]))}}else{if(isObj(h)){for(var a in h){if(!isFunc(h[a])){l=l.concat(NGUrl.argToString(j.concat([a]),h[a]))}}}else{var i=j.shift();if(j.length>0){i+="["+j.join("][")+"]"}if(h===null){l.push(NGUrl.encode(i))}else{l.push(NGUrl.encode(i)+"="+NGUrl.encode(h))}}}return l};NGUrl.thisRequest=function(b){if(!b){b=window}return new NGUrl(b.location.href)};NGUrl.redirect=function(d,c){if(!c){c=window}c.location=d};NGUrl.prototype.reset=function(){this.scheme=this.host=this.port=this.path=this.fragment=null;this.arguments={}};NGUrl.prototype.toString=function(){var f="";if(this.scheme!==null){f+=this.scheme+":";if(this.schemejoin!==null){f+=this.schemejoin}if(this.host!==null){if(this.user!==null){f+=this.user;if(this.password!==null){f+=":"+this.password}f+="@"}f+=this.host;if(this.port!==null&&(!isDef(typeof NGUrl.PORTS[this.port])||NGUrl.PORTS[this.port]!=this.scheme.toLowerCase())){f+=":"+this.port}}}if(this.path!==null){f+=this.path}if(this.arguments!==null){var d=[];for(var e in this.arguments){if(!isFunc(this.arguments[e])){d=d.concat(NGUrl.argToString(e,this.arguments[e]))}}if(d.length>0){f+="?"+d.join("&")}}if(this.fragment!==null){f+="#"+this.fragment}return f};NGUrl.prototype.set=function(d){this.reset();var c=NGUrl.parseUrl(d);if(c===null){return false}this.scheme=c.scheme;this.schemejoin=c.schemejoin;this.user=c.user;this.password=c.password;this.host=c.host;this.port=c.port;this.path=c.path;this.fragment=c.fragment;if(c.query!==null){this.arguments=NGUrl.parseQuery(c.query)}return this.isValid()};NGUrl._layPath=function(h,l){var i=h;for(var b,j=0;j<l.length-1;j++){if(!isDef(typeof i[l[j]])){if(l[j+1]===""||l[j+1]===null){i[l[j]]=[];l[j+1]="0"}else{if(l[j+1]==="0"||l[j+1]===0){i[l[j]]=[]}else{i[l[j]]={}}}}else{if(isArr(i[l[j]])&&i[l[j]].length!=l[j+1]){if(l[j+1]===""||l[j+1]===null){l[j+1]=i[l[j]].length}else{if(l[j+1]>i[l[j]].length){b={};for(var k=0;k<i[l[j]].length;k++){b[k]=i[l[j]][k]}i[l[j]]=b}}}}i=i[l[j]]}return i};NGUrl._getPath=function(e,h){var f=e;for(var g=0;g<h.length-1;g++){if(!isDef(typeof f[h[g]])||!isObj(f[h[g]])){return null}f=f[h[g]]}return f};NGUrl._mergeArgs=function(){var a=arguments;var g=true;for(var h=0;g&&h<a.length;h++){if(!isArr(a[h])){g=false}}if(g){var i=[];for(var h=a.length-1;h>=0;h--){if(a[h].length>i.length){i=i.concat(a[h].slice(i.length-a[h].length))}}}else{var i={};for(var h=0;h<a.length;h++){if(isArr(a[h])){for(var j=0;j<a[h].length;j++){i[j]=a[h][j]}}else{for(var j in a[h]){if(!isFunc(a[h][j])){i[j]=a[h][j]}}}}}return i};NGUrl.prototype.addArgument=function(f,e,g){if(isFunc(e)){throw ("Value passed was a function in NGUrl::addArgument()")}if(isArr(f)){var h=NGUrl._layPath(this.arguments,f);f=f[f.length-1]}else{var h=this.arguments}if(!isDef(typeof h[f])||g){if(isObj(h[f])&&isObj(e)){h[f]=NGUrl._mergeArgs(h[f],e)}else{h[f]=e}}};NGUrl.flatArgs=function(f){var a=[];for(var e=0;e<f.length;e++){if(isArr(f[e])){a=a.concat(f[e])}else{a.push(f[e])}}return a};NGUrl.prototype.delArgument=function(){var d=NGUrl.flatArgs(arguments);var c=NGUrl._getPath(this.arguments,d);if(c===null||!isDef(typeof c[d[d.length-1]])){return false}delete c[d[d.length-1]];return true};NGUrl.prototype.getArgument=function(){var d=NGUrl.flatArgs(arguments);var c=NGUrl._getPath(this.arguments,d);if(c===null||!isDef(typeof c[d[d.length-1]])){return null}return c[d[d.length-1]]};NGUrl.prototype.isRelative=function(){return(this.path!==null&&this.path[0]!="/")};NGUrl.prototype.isAbsolute=function(){return !this.isRelative()};NGUrl.prototype.isValid=function(){return(this.arguments!==null)};NGUrl.prototype.redirect=function(b){NGUrl.redirect(this.toString(),b)};
