epiton.context={}; epiton.context.Browser=function(){ var _private={ uriParts:{}, initUriParts:function(){ epiton.classloader.require("epiton.context.Browser.uriParts"); _private.uriParts=this.parseUri(document.location); epiton.classloader.setRequireLoaded("epiton.context.Browser.uriParts"); }, parseOptions : { 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*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ } }, isIp:function(str){ var p=str.split("."); if(p.length==4){ var i=0; for(i=0;i