function URI(str){if(!str)str="";var parser=/^(?:([^:\/?\#]+):)?(?:\/\/([^\/?\#]*))?([^?\#]*)(?:\?([^\#]*))?(?:\#(.*))?/;var result=str.match(parser);this.scheme=result[1]||null;this.authority=result[2]||null;this.path=result[3]||null;this.query=result[4]||null;this.fragment=result[5]||null;}URI.prototype.toString=function(){var str="";if(this.scheme){str+=this.scheme+":";}if(this.authority){str+="//"+this.authority;}if(this.path){str+=this.path;}if(this.query){str+="?"+this.query;}if(this.fragment){str+="#"+this.fragment;}return str;};(function(){function merge(base,rel_path){var dirname=/^(.*)\//;if(base.authority&&!base.path){return"/"+rel_path;}else{return base.path.match(dirname)[0]+rel_path;}}var DoubleDot=/\/((?!\.\.\/)[^\/]*)\/\.\.\//;function remove_dot_segments(path){if(!path)return"";var newpath=path.replace(/\/\.\//g,'/');newpath=newpath.replace(/\/\.$/,'/');while(newpath.match(DoubleDot)){newpath=newpath.replace(DoubleDot,'/');}newpath=newpath.replace(/\/([^\/]*)\/\.\.$/,'/');while(newpath.match(/\/\.\.\//)){newpath=newpath.replace(/\/\.\.\//,'/');}return newpath;}URI.prototype.resolve=function(base){var target=new URI();if(this.scheme){target.scheme=this.scheme;target.authority=this.authority;target.path=remove_dot_segments(this.path);target.query=this.query;}else{if(this.authority){target.authority=this.authority;target.path=remove_dot_segments(this.path);target.query=this.query;}else{if(!this.path){target.path=base.path;if(this.query){target.query=this.query;}else{target.query=base.query;}}else{if(this.path.charAt(0)==='/'){target.path=remove_dot_segments(this.path);}else{target.path=merge(base,this.path);target.path=remove_dot_segments(target.path);}target.query=this.query;}target.authority=base.authority;}target.scheme=base.scheme;}target.fragment=this.fragment;return target;};})();
