How to use detect method in Cypress

Best JavaScript code snippet using cypress

plugindetect.js

Source:plugindetect.js Github

copy

Full Screen

...4[ QuickTime Java DevalVR Flash Shockwave WindowsMediaPlayer Silverlight VLC AdobeReader PDFReader RealPlayer IEcomponent ActiveX PDFjs ]5[ isMinVersion getVersion hasMimeType onDetectionDone ]6[ AllowActiveX ]7*/8var PluginDetect={version:"0.9.0",name:"PluginDetect",addPlugin:function(p,q){if(p&&PluginDetect.isString(p)&&q&&PluginDetect.isFunc(q.getVersion)){p=p.replace(/\s/g,"").toLowerCase();PluginDetect.Plugins[p]=q;if(!PluginDetect.isDefined(q.getVersionDone)){q.installed=null;q.version=null;q.version0=null;q.getVersionDone=null;q.pluginName=p;}}},uniqueName:function(){return PluginDetect.name+"998"},openTag:"<",hasOwnPROP:({}).constructor.prototype.hasOwnProperty,hasOwn:function(s,t){var p;try{p=PluginDetect.hasOwnPROP.call(s,t)}catch(q){}return !!p},rgx:{str:/string/i,num:/number/i,fun:/function/i,arr:/array/i},toString:({}).constructor.prototype.toString,isDefined:function(p){return typeof p!="undefined"},isArray:function(p){return PluginDetect.rgx.arr.test(PluginDetect.toString.call(p))},isString:function(p){return PluginDetect.rgx.str.test(PluginDetect.toString.call(p))},isNum:function(p){return PluginDetect.rgx.num.test(PluginDetect.toString.call(p))},isStrNum:function(p){return PluginDetect.isString(p)&&(/\d/).test(p)},isFunc:function(p){return PluginDetect.rgx.fun.test(PluginDetect.toString.call(p))},getNumRegx:/[\d][\d\.\_,\-]*/,splitNumRegx:/[\.\_,\-]/g,getNum:function(q,r){var p=PluginDetect.isStrNum(q)?(PluginDetect.isDefined(r)?new RegExp(r):PluginDetect.getNumRegx).exec(q):null;return p?p[0]:null},compareNums:function(w,u,t){var s,r,q,v=parseInt;if(PluginDetect.isStrNum(w)&&PluginDetect.isStrNum(u)){if(PluginDetect.isDefined(t)&&t.compareNums){return t.compareNums(w,u)}s=w.split(PluginDetect.splitNumRegx);r=u.split(PluginDetect.splitNumRegx);for(q=0;q<Math.min(s.length,r.length);q++){if(v(s[q],10)>v(r[q],10)){return 1}if(v(s[q],10)<v(r[q],10)){return -1}}}return 0},formatNum:function(q,r){var p,s;if(!PluginDetect.isStrNum(q)){return null}if(!PluginDetect.isNum(r)){r=4}r--;s=q.replace(/\s/g,"").split(PluginDetect.splitNumRegx).concat(["0","0","0","0"]);for(p=0;p<4;p++){if(/^(0+)(.+)$/.test(s[p])){s[p]=RegExp.$2}if(p>r||!(/\d/).test(s[p])){s[p]="0"}}return s.slice(0,4).join(",")},pd:{getPROP:function(s,q,p){try{if(s){p=s[q]}}catch(r){}return p},findNavPlugin:function(u){if(u.dbug){return u.dbug}var A=null;if(window.navigator){var z={Find:PluginDetect.isString(u.find)?new RegExp(u.find,"i"):u.find,Find2:PluginDetect.isString(u.find2)?new RegExp(u.find2,"i"):u.find2,Avoid:u.avoid?(PluginDetect.isString(u.avoid)?new RegExp(u.avoid,"i"):u.avoid):0,Num:u.num?/\d/:0},s,r,t,y,x,q,p=navigator.mimeTypes,w=navigator.plugins;if(u.mimes&&p){y=PluginDetect.isArray(u.mimes)?[].concat(u.mimes):(PluginDetect.isString(u.mimes)?[u.mimes]:[]);for(s=0;s<y.length;s++){r=0;try{if(PluginDetect.isString(y[s])&&/[^\s]/.test(y[s])){r=p[y[s]].enabledPlugin}}catch(v){}if(r){t=this.findNavPlugin_(r,z);if(t.obj){A=t.obj}if(A&&!PluginDetect.dbug){return A}}}}if(u.plugins&&w){x=PluginDetect.isArray(u.plugins)?[].concat(u.plugins):(PluginDetect.isString(u.plugins)?[u.plugins]:[]);for(s=0;s<x.length;s++){r=0;try{if(x[s]&&PluginDetect.isString(x[s])){r=w[x[s]]}}catch(v){}if(r){t=this.findNavPlugin_(r,z);if(t.obj){A=t.obj}if(A&&!PluginDetect.dbug){return A}}}q=w.length;if(PluginDetect.isNum(q)){for(s=0;s<q;s++){r=0;try{r=w[s]}catch(v){}if(r){t=this.findNavPlugin_(r,z);if(t.obj){A=t.obj}if(A&&!PluginDetect.dbug){return A}}}}}}return A},findNavPlugin_:function(t,s){var r=t.description||"",q=t.name||"",p={};if((s.Find.test(r)&&(!s.Find2||s.Find2.test(q))&&(!s.Num||s.Num.test(RegExp.leftContext+RegExp.rightContext)))||(s.Find.test(q)&&(!s.Find2||s.Find2.test(r))&&(!s.Num||s.Num.test(RegExp.leftContext+RegExp.rightContext)))){if(!s.Avoid||!(s.Avoid.test(r)||s.Avoid.test(q))){p.obj=t}}return p},getVersionDelimiter:",",findPlugin:function(r){var q,p={status:-3,plugin:0};if(!PluginDetect.isString(r)){return p}if(r.length==1){this.getVersionDelimiter=r;return p}r=r.toLowerCase().replace(/\s/g,"");q=PluginDetect.Plugins[r];if(!q||!q.getVersion){return p}p.plugin=q;p.status=1;return p}},getPluginFileVersion:function(u,q){var t,s,v,p,r=-1;if(!u){return q}if(u.version){t=PluginDetect.getNum(u.version+"")}if(!t||!q){return q||t||null}s=(PluginDetect.formatNum(q)).split(PluginDetect.splitNumRegx);v=(PluginDetect.formatNum(t)).split(PluginDetect.splitNumRegx);for(p=0;p<s.length;p++){if(r>-1&&p>r&&s[p]!="0"){return q}if(v[p]!=s[p]){if(r==-1){r=p}if(s[p]!="0"){return q}}}return t},AXO:(function(){var q;try{q=new window.ActiveXObject()}catch(p){}return q?null:window.ActiveXObject})(),getAXO:function(p){var r=null;try{r=new PluginDetect.AXO(p)}catch(q){PluginDetect.errObj=q;}if(r){PluginDetect.browser.ActiveXEnabled=!0}return r},browser:{detectPlatform:function(){var r=this,q,p=window.navigator?navigator.platform||"":"";PluginDetect.OS=100;if(p){var s=["Win",1,"Mac",2,"Linux",3,"FreeBSD",4,"iPhone",21.1,"iPod",21.2,"iPad",21.3,"Win.*CE",22.1,"Win.*Mobile",22.2,"Pocket\\s*PC",22.3,"",100];for(q=s.length-2;q>=0;q=q-2){if(s[q]&&new RegExp(s[q],"i").test(p)){PluginDetect.OS=s[q+1];break}}}},detectIE:function(){var r=this,u=document,t,q,v=window.navigator?navigator.userAgent||"":"",w,p,y;r.ActiveXFilteringEnabled=!1;r.ActiveXEnabled=!1;try{r.ActiveXFilteringEnabled=!!window.external.msActiveXFilteringEnabled()}catch(s){}p=["Msxml2.XMLHTTP","Msxml2.DOMDocument","Microsoft.XMLDOM","TDCCtl.TDCCtl","Shell.UIHelper","HtmlDlgSafeHelper.HtmlDlgSafeHelper","Scripting.Dictionary"];y=["WMPlayer.OCX","ShockwaveFlash.ShockwaveFlash","AgControl.AgControl"];w=p.concat(y);for(t=0;t<w.length;t++){if(PluginDetect.getAXO(w[t])&&!PluginDetect.dbug){break}}if(r.ActiveXEnabled&&r.ActiveXFilteringEnabled){for(t=0;t<y.length;t++){if(PluginDetect.getAXO(y[t])){r.ActiveXFilteringEnabled=!1;break}}}q=u.documentMode;try{u.documentMode=""}catch(s){}r.isIE=r.ActiveXEnabled;r.isIE=r.isIE||PluginDetect.isNum(u.documentMode)||new Function("return/*@cc_on!@*/!1")();try{u.documentMode=q}catch(s){}r.verIE=null;if(r.isIE){r.verIE=(PluginDetect.isNum(u.documentMode)&&u.documentMode>=7?u.documentMode:0)||((/^(?:.*?[^a-zA-Z])??(?:MSIE|rv\s*\:)\s*(\d+\.?\d*)/i).test(v)?parseFloat(RegExp.$1,10):7)}},detectNonIE:function(){var p=this,s=window.navigator?navigator:{},r=p.isIE?"":s.userAgent||"",t=s.vendor||"",q=s.product||"";p.isGecko=(/Gecko/i).test(q)&&(/Gecko\s*\/\s*\d/i).test(r);p.verGecko=p.isGecko?PluginDetect.formatNum((/rv\s*\:\s*([\.\,\d]+)/i).test(r)?RegExp.$1:"0.9"):null;p.isOpera=(/(OPR\s*\/|Opera\s*\/\s*\d.*\s*Version\s*\/|Opera\s*[\/]?)\s*(\d+[\.,\d]*)/i).test(r);p.verOpera=p.isOpera?PluginDetect.formatNum(RegExp.$2):null;p.isChrome=!p.isOpera&&(/(Chrome|CriOS)\s*\/\s*(\d[\d\.]*)/i).test(r);p.verChrome=p.isChrome?PluginDetect.formatNum(RegExp.$2):null;p.isSafari=!p.isOpera&&!p.isChrome&&((/Apple/i).test(t)||!t)&&(/Safari\s*\/\s*(\d[\d\.]*)/i).test(r);p.verSafari=p.isSafari&&(/Version\s*\/\s*(\d[\d\.]*)/i).test(r)?PluginDetect.formatNum(RegExp.$1):null;},init:function(){var p=this;p.detectPlatform();p.detectIE();p.detectNonIE()}},init:{hasRun:0,library:function(){window[PluginDetect.name]=PluginDetect;var q=this,p=document;PluginDetect.win.init();PluginDetect.head=p.getElementsByTagName("head")[0]||p.getElementsByTagName("body")[0]||p.body||null;PluginDetect.browser.init();q.hasRun=1;}},ev:{addEvent:function(r,q,p){if(r&&q&&p){if(r.addEventListener){r.addEventListener(q,p,false)}else{if(r.attachEvent){r.attachEvent("on"+q,p)}else{r["on"+q]=this.concatFn(p,r["on"+q])}}}},removeEvent:function(r,q,p){if(r&&q&&p){if(r.removeEventListener){r.removeEventListener(q,p,false)}else{if(r.detachEvent){r.detachEvent("on"+q,p)}}}},concatFn:function(q,p){return function(){q();if(typeof p=="function"){p()}}},handler:function(t,s,r,q,p){return function(){t(s,r,q,p)}},handlerOnce:function(s,r,q,p){return function(){var u=PluginDetect.uniqueName();if(!s[u]){s[u]=1;s(r,q,p)}}},handlerWait:function(s,u,r,q,p){var t=this;return function(){t.setTimeout(t.handler(u,r,q,p),s)}},setTimeout:function(q,p){if(PluginDetect.win&&PluginDetect.win.unload){return}setTimeout(q,p)},fPush:function(q,p){if(PluginDetect.isArray(p)&&(PluginDetect.isFunc(q)||(PluginDetect.isArray(q)&&q.length>0&&PluginDetect.isFunc(q[0])))){p.push(q)}},call0:function(q){var p=PluginDetect.isArray(q)?q.length:-1;if(p>0&&PluginDetect.isFunc(q[0])){q[0](PluginDetect,p>1?q[1]:0,p>2?q[2]:0,p>3?q[3]:0)}else{if(PluginDetect.isFunc(q)){q(PluginDetect)}}},callArray0:function(p){var q=this,r;if(PluginDetect.isArray(p)){while(p.length){r=p[0];p.splice(0,1);if(PluginDetect.win&&PluginDetect.win.unload&&p!==PluginDetect.win.unloadHndlrs){}else{q.call0(r)}}}},call:function(q){var p=this;p.call0(q);p.ifDetectDoneCallHndlrs()},callArray:function(p){var q=this;q.callArray0(p);q.ifDetectDoneCallHndlrs()},allDoneHndlrs:[],ifDetectDoneCallHndlrs:function(){var r=this,p,q;if(!r.allDoneHndlrs.length){return}if(PluginDetect.win){if(!PluginDetect.win.loaded||PluginDetect.win.loadPrvtHndlrs.length||PluginDetect.win.loadPblcHndlrs.length){return}}if(PluginDetect.Plugins){for(p in PluginDetect.Plugins){if(PluginDetect.hasOwn(PluginDetect.Plugins,p)){q=PluginDetect.Plugins[p];if(q&&PluginDetect.isFunc(q.getVersion)){if(q.OTF==3||(q.DoneHndlrs&&q.DoneHndlrs.length)||(q.BIHndlrs&&q.BIHndlrs.length)){return}}}}}r.callArray0(r.allDoneHndlrs);}},isMinVersion:function(v,u,r,q){var s=PluginDetect.pd.findPlugin(v),t,p=-1;if(s.status<0){return s.status}t=s.plugin;u=PluginDetect.formatNum(PluginDetect.isNum(u)?u.toString():(PluginDetect.isStrNum(u)?PluginDetect.getNum(u):"0"));if(t.getVersionDone!=1){t.getVersion(u,r,q);if(t.getVersionDone===null){t.getVersionDone=1}}if(t.installed!==null){p=t.installed<=0.5?t.installed:(t.installed==0.7?1:(t.version===null?0:(PluginDetect.compareNums(t.version,u,t)>=0?1:-0.1)))}return p},getVersion:function(u,r,q){var s=PluginDetect.pd.findPlugin(u),t,p;if(s.status<0){return null}t=s.plugin;if(t.getVersionDone!=1){t.getVersion(null,r,q);if(t.getVersionDone===null){t.getVersionDone=1}}p=(t.version||t.version0);p=p?p.replace(PluginDetect.splitNumRegx,PluginDetect.pd.getVersionDelimiter):p;return p},hasMimeType:function(t){if(t&&window.navigator&&navigator.mimeTypes){var w,v,q,s,p=navigator.mimeTypes,r=PluginDetect.isArray(t)?[].concat(t):(PluginDetect.isString(t)?[t]:[]);s=r.length;for(q=0;q<s;q++){w=0;try{if(PluginDetect.isString(r[q])&&/[^\s]/.test(r[q])){w=p[r[q]]}}catch(u){}v=w?w.enabledPlugin:0;if(v&&(v.name||v.description)){return w}}}return null},onDetectionDone:function(u,t,q,p){var r=PluginDetect.pd.findPlugin(u),v,s;if(r.status==-3){return -1}s=r.plugin;if(!PluginDetect.isArray(s.DoneHndlrs)){s.DoneHndlrs=[];}if(s.getVersionDone!=1){v=PluginDetect.getVersion?PluginDetect.getVersion(u,q,p):PluginDetect.isMinVersion(u,"0",q,p)}if(s.installed!=-0.5&&s.installed!=0.5){PluginDetect.ev.call(t);return 1}PluginDetect.ev.fPush(t,s.DoneHndlrs);return 0},codebase:{isDisabled:function(){if(PluginDetect.browser.ActiveXEnabled&&PluginDetect.isDefined(PluginDetect.pd.getPROP(document.createElement("object"),"object"))){return 0}return 1},isMin:function(u,t){var s=this,r,q,p=0;if(!PluginDetect.isStrNum(t)||s.isDisabled()){return p}s.init(u);if(!u.L){u.L={};for(r=0;r<u.Lower.length;r++){if(s.isActiveXObject(u,u.Lower[r])){u.L=s.convert(u,u.Lower[r]);break}}}if(u.L.v){q=s.convert(u,t,1);if(q.x>=0){p=(u.L.x==q.x?s.isActiveXObject(u,q.v):PluginDetect.compareNums(t,u.L.v)<=0)?1:-1}}return p},search:function(v){var B=this,w=v.$$,q=0,r;r=v.searchHasRun||B.isDisabled()?1:0;v.searchHasRun=1;if(r){return v.version||null}B.init(v);var F,E,D,s=v.DIGITMAX,t,p,C=99999999,u=[0,0,0,0],G=[0,0,0,0];var A=function(y,PluginDetect){var H=[].concat(u),I;H[y]=PluginDetect;I=B.isActiveXObject(v,H.join(","));if(I){q=1;u[y]=PluginDetect}else{G[y]=PluginDetect}return I};for(F=0;F<G.length;F++){u[F]=Math.floor(v.DIGITMIN[F])||0;t=u.join(",");p=u.slice(0,F).concat([C,C,C,C]).slice(0,u.length).join(",");for(D=0;D<s.length;D++){if(PluginDetect.isArray(s[D])){s[D].push(0);if(s[D][F]>G[F]&&PluginDetect.compareNums(p,v.Lower[D])>=0&&PluginDetect.compareNums(t,v.Upper[D])<0){G[F]=Math.floor(s[D][F])}}}for(E=0;E<30;E++){if(G[F]-u[F]<=16){for(D=G[F];D>=u[F]+(F?1:0);D--){if(A(F,D)){break}}break}A(F,Math.round((G[F]+u[F])/2))}if(!q){break}G[F]=u[F];}if(q){v.version=B.convert(v,u.join(",")).v}return v.version||null},emptyNode:function(p){try{p.innerHTML=""}catch(q){}},HTML:[],len:0,onUnload:function(r,q){var p,t=q.HTML,s;for(p=0;p<t.length;p++){s=t[p];if(s){t[p]=0;q.emptyNode(s.span());s.span=0;s.spanObj=0;s=0}}q.iframe=0},init:function(u){var t=this;if(!t.iframe){var s=PluginDetect.DOM,q;q=s.iframe.insert(0,"$.codebase{ }");t.iframe=q;s.iframe.write(q," ");s.iframe.close(q);}if(!u.init){u.init=1;var p,r;PluginDetect.ev.fPush([t.onUnload,t],PluginDetect.win.unloadHndlrs);u.tagA='<object width="1" height="1" style="display:none;" codebase="#version=';r=u.classID||u.$$.classID||"";u.tagB='" '+((/clsid\s*:/i).test(r)?'classid="':'type="')+r+'">'+PluginDetect.openTag+"/object>";for(p=0;p<u.Lower.length;p++){u.Lower[p]=PluginDetect.formatNum(u.Lower[p]);u.Upper[p]=PluginDetect.formatNum(u.Upper[p]);}}},isActiveXObject:function(u,q){var t=this,p=0,s=u.$$,r=(PluginDetect.DOM.iframe.doc(t.iframe)||document).createElement("span");if(u.min&&PluginDetect.compareNums(q,u.min)<=0){return 1}if(u.max&&PluginDetect.compareNums(q,u.max)>=0){return 0}r.innerHTML=u.tagA+q+u.tagB;if(PluginDetect.pd.getPROP(r.firstChild,"object")){p=1}if(p){u.min=q;t.HTML.push({spanObj:r,span:t.span})}else{u.max=q;r.innerHTML=""}return p},span:function(){return this.spanObj},convert_:function(t,p,q,s){var r=t.convert[p];return r?(PluginDetect.isFunc(r)?PluginDetect.formatNum(r(q.split(PluginDetect.splitNumRegx),s).join(",")):q):r},convert:function(v,r,u){var t=this,q,p,s;r=PluginDetect.formatNum(r);p={v:r,x:-1};if(r){for(q=0;q<v.Lower.length;q++){s=t.convert_(v,q,v.Lower[q]);if(s&&PluginDetect.compareNums(r,u?s:v.Lower[q])>=0&&(!q||PluginDetect.compareNums(r,u?t.convert_(v,q,v.Upper[q]):v.Upper[q])<0)){p.v=t.convert_(v,q,r,u);p.x=q;break}}}return p},z:0},win:{disable:function(){this.cancel=true},cancel:false,loaded:false,unload:false,hasRun:0,init:function(){var p=this;if(!p.hasRun){p.hasRun=1;if((/complete/i).test(document.readyState||"")){p.loaded=true;}else{PluginDetect.ev.addEvent(window,"load",p.onLoad)}PluginDetect.ev.addEvent(window,"unload",p.onUnload)}},loadPrvtHndlrs:[],loadPblcHndlrs:[],unloadHndlrs:[],onUnload:function(){var p=PluginDetect.win;if(p.unload){return}p.unload=true;PluginDetect.ev.removeEvent(window,"load",p.onLoad);PluginDetect.ev.removeEvent(window,"unload",p.onUnload);PluginDetect.ev.callArray(p.unloadHndlrs)},onLoad:function(){var p=PluginDetect.win;if(p.loaded||p.unload||p.cancel){return}p.loaded=true;PluginDetect.ev.callArray(p.loadPrvtHndlrs);PluginDetect.ev.callArray(p.loadPblcHndlrs);}},DOM:{isEnabled:{objectTag:function(){var q=PluginDetect.browser,p=q.isIE?0:1;if(q.ActiveXEnabled){p=1}return !!p},objectTagUsingActiveX:function(){var p=0;if(PluginDetect.browser.ActiveXEnabled){p=1}return !!p},objectProperty:function(p){if(p&&p.tagName&&PluginDetect.browser.isIE){if((/applet/i).test(p.tagName)){return(!this.objectTag()||PluginDetect.isDefined(PluginDetect.pd.getPROP(document.createElement("object"),"object"))?1:0)}return PluginDetect.isDefined(PluginDetect.pd.getPROP(document.createElement(p.tagName),"object"))?1:0}return 0}},HTML:[],div:null,divID:"plugindetect",divWidth:500,getDiv:function(){return this.div||document.getElementById(this.divID)||null},initDiv:function(){var q=this,p;if(!q.div){p=q.getDiv();if(p){q.div=p;}else{q.div=document.createElement("div");q.div.id=q.divID;q.setStyle(q.div,q.getStyle.div());q.insertDivInBody(q.div)}PluginDetect.ev.fPush([q.onUnload,q],PluginDetect.win.unloadHndlrs)}p=0},pluginSize:1,iframeWidth:40,iframeHeight:10,altHTML:"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;",emptyNode:function(q){var p=this;if(q&&(/div|span/i).test(q.tagName||"")){if(PluginDetect.browser.isIE){p.setStyle(q,["display","none"])}try{q.innerHTML=""}catch(r){}}},removeNode:function(p){try{if(p&&p.parentNode){p.parentNode.removeChild(p)}}catch(q){}},onUnload:function(u,t){var r,q,s,v,w=t.HTML,p=w.length;if(p){for(q=p-1;q>=0;q--){v=w[q];if(v){w[q]=0;t.emptyNode(v.span());t.removeNode(v.span());v.span=0;v.spanObj=0;v.doc=0;v.objectProperty=0}}}r=t.getDiv();t.emptyNode(r);t.removeNode(r);v=0;s=0;r=0;t.div=0},span:function(){var p=this;if(!p.spanObj){p.spanObj=p.doc.getElementById(p.spanId)}return p.spanObj||null},width:function(){var t=this,s=t.span(),q,r,p=-1;q=s&&PluginDetect.isNum(s.scrollWidth)?s.scrollWidth:p;r=s&&PluginDetect.isNum(s.offsetWidth)?s.offsetWidth:p;s=0;return r>0?r:(q>0?q:Math.max(r,q))},obj:function(){var p=this.span();return p?p.firstChild||null:null},readyState:function(){var p=this;return PluginDetect.browser.isIE&&PluginDetect.isDefined(PluginDetect.pd.getPROP(p.span(),"readyState"))?PluginDetect.pd.getPROP(p.obj(),"readyState"):PluginDetect.UNDEFINED},objectProperty:function(){var r=this,q=r.DOM,p;if(q.isEnabled.objectProperty(r)){p=PluginDetect.pd.getPROP(r.obj(),"object")}return p},onLoadHdlr:function(p,q){q.loaded=1},getTagStatus:function(q,A,E,D,t,H,v){var F=this;if(!q||!q.span()){return -2}var y=q.width(),r=q.obj()?1:0,s=q.readyState(),p=q.objectProperty();if(p){return 1.5}var u=/clsid\s*\:/i,C=E&&u.test(E.outerHTML||"")?E:(D&&u.test(D.outerHTML||"")?D:0),w=E&&!u.test(E.outerHTML||"")?E:(D&&!u.test(D.outerHTML||"")?D:0),z=q&&u.test(q.outerHTML||"")?C:w;if(!A||!A.span()||!z||!z.span()){return -2}var x=z.width(),B=A.width(),G=z.readyState();if(y<0||x<0||B<=F.pluginSize){return 0}if(v&&!q.pi&&PluginDetect.isDefined(p)&&PluginDetect.browser.isIE&&q.tagName==z.tagName&&q.time<=z.time&&y===x&&s===0&&G!==0){q.pi=1}if(x<B||!q.loaded||!A.loaded||!z.loaded){return q.pi?-0.1:0}if(y==B||!r){return q.pi?-0.5:-1}else{if(y==F.pluginSize&&r&&(!PluginDetect.isNum(s)||s===4)){return 1}}return q.pi?-0.5:-1},setStyle:function(q,t){var s=q.style,p;if(s&&t){for(p=0;p<t.length;p=p+2){try{s[t[p]]=t[p+1]}catch(r){}}}q=0;s=0},getStyle:{iframe:function(){return this.span()},span:function(r){var q=PluginDetect.DOM,p;p=r?this.plugin():([].concat(this.Default).concat(["display","inline","fontSize",(q.pluginSize+3)+"px","lineHeight",(q.pluginSize+3)+"px"]));return p},div:function(){var p=PluginDetect.DOM;return[].concat(this.Default).concat(["display","block","width",p.divWidth+"px","height",(p.pluginSize+3)+"px","fontSize",(p.pluginSize+3)+"px","lineHeight",(p.pluginSize+3)+"px","position","absolute","right","9999px","top","-9999px"])},plugin:function(q){var p=PluginDetect.DOM;return"background-color:transparent;background-image:none;vertical-align:baseline;outline-style:none;border-style:none;padding:0px;margin:0px;visibility:"+(q?"hidden;":"visible;")+"display:inline;font-size:"+(p.pluginSize+3)+"px;line-height:"+(p.pluginSize+3)+"px;"},Default:["backgroundColor","transparent","backgroundImage","none","verticalAlign","baseline","outlineStyle","none","borderStyle","none","padding","0px","margin","0px","visibility","visible"]},insertDivInBody:function(v,t){var u="pd33993399",q=null,s=t?window.top.document:window.document,p=s.getElementsByTagName("body")[0]||s.body;if(!p){try{s.write('<div id="'+u+'">.'+PluginDetect.openTag+"/div>");q=s.getElementById(u)}catch(r){}}p=s.getElementsByTagName("body")[0]||s.body;if(p){p.insertBefore(v,p.firstChild);if(q){p.removeChild(q)}}v=0},iframe:{onLoad:function(p,q){PluginDetect.ev.callArray(p);},insert:function(r,q){var s=this,v=PluginDetect.DOM,p,u=document.createElement("iframe"),t;v.setStyle(u,v.getStyle.iframe());u.width=v.iframeWidth;u.height=v.iframeHeight;v.initDiv();p=v.getDiv();p.appendChild(u);try{s.doc(u).open()}catch(w){}u[PluginDetect.uniqueName()]=[];t=PluginDetect.ev.handlerOnce(PluginDetect.isNum(r)&&r>0?PluginDetect.ev.handlerWait(r,s.onLoad,u[PluginDetect.uniqueName()],q):PluginDetect.ev.handler(s.onLoad,u[PluginDetect.uniqueName()],q));PluginDetect.ev.addEvent(u,"load",t);if(!u.onload){u.onload=t}PluginDetect.ev.addEvent(s.win(u),"load",t);return u},addHandler:function(q,p){if(q){PluginDetect.ev.fPush(p,q[PluginDetect.uniqueName()])}},close:function(p){try{this.doc(p).close()}catch(q){}},write:function(p,r){try{this.doc(p).write(r)}catch(q){}},win:function(p){try{return p.contentWindow}catch(q){}return null},doc:function(p){var r;try{r=p.contentWindow.document}catch(q){}try{if(!r){r=p.contentDocument}}catch(q){}return r||null}},insert:function(t,s,u,p,y,w,v){var D=this,F,E,C,B,A;if(!v){D.initDiv();v=D.getDiv()}if(v){if((/div/i).test(v.tagName)){B=v.ownerDocument}if((/iframe/i).test(v.tagName)){B=D.iframe.doc(v)}}if(B&&B.createElement){}else{B=document}if(!PluginDetect.isDefined(p)){p=""}if(PluginDetect.isString(t)&&(/[^\s]/).test(t)){t=t.toLowerCase().replace(/\s/g,"");F=PluginDetect.openTag+t+" ";F+='style="'+D.getStyle.plugin(w)+'" ';var r=1,q=1;for(A=0;A<s.length;A=A+2){if(/[^\s]/.test(s[A+1])){F+=s[A]+'="'+s[A+1]+'" '}if((/width/i).test(s[A])){r=0}if((/height/i).test(s[A])){q=0}}F+=(r?'width="'+D.pluginSize+'" ':"")+(q?'height="'+D.pluginSize+'" ':"");if(t=="embed"||t=="img"){F+=" />"}else{F+=">";for(A=0;A<u.length;A=A+2){if(/[^\s]/.test(u[A+1])){F+=PluginDetect.openTag+'param name="'+u[A]+'" value="'+u[A+1]+'" />'}}F+=p+PluginDetect.openTag+"/"+t+">"}}else{t="";F=p}E={spanId:"",spanObj:null,span:D.span,loaded:null,tagName:t,outerHTML:F,DOM:D,time:new Date().getTime(),width:D.width,obj:D.obj,readyState:D.readyState,objectProperty:D.objectProperty,doc:B};if(v&&v.parentNode){if((/iframe/i).test(v.tagName)){D.iframe.addHandler(v,[D.onLoadHdlr,E]);E.loaded=0;E.spanId=PluginDetect.name+"Span"+D.HTML.length;C='<span id="'+E.spanId+'" style="'+D.getStyle.span(1)+'">'+F+"</span>";D.iframe.write(v,C)}else{if((/div/i).test(v.tagName)){C=B.createElement("span");D.setStyle(C,D.getStyle.span());v.appendChild(C);try{C.innerHTML=F}catch(z){}E.spanObj=C}}}C=0;v=0;D.HTML.push(E);return E}},file:{any:"fileStorageAny999",valid:"fileStorageValid999",save:function(s,t,r){var q=this,p;if(s&&PluginDetect.isDefined(r)){if(!s[q.any]){s[q.any]=[]}if(!s[q.valid]){s[q.valid]=[]}s[q.any].push(r);p=q.split(t,r);if(p){s[q.valid].push(p)}}},getValidLength:function(p){return p&&p[this.valid]?p[this.valid].length:0},getAnyLength:function(p){return p&&p[this.any]?p[this.any].length:0},getValid:function(r,p){var q=this;return r&&r[q.valid]?q.get(r[q.valid],p):null},getAny:function(r,p){var q=this;return r&&r[q.any]?q.get(r[q.any],p):null},get:function(s,p){var r=s.length-1,q=PluginDetect.isNum(p)?p:r;return(q<0||q>r)?null:s[q]},split:function(t,q){var s=null,p,r;t=t?t.replace(".","\\."):"";r=new RegExp("^(.*[^\\/])("+t+"\\s*)$");if(PluginDetect.isString(q)&&r.test(q)){p=(RegExp.$1).split("/");s={name:p[p.length-1],ext:RegExp.$2,full:q};p[p.length-1]="";s.path=p.join("/")}return s}},Plugins:{}};PluginDetect.init.library();var i={setPluginStatus:function(q,p,s){var r=this;r.version=p?PluginDetect.formatNum(p,3):null;r.installed=r.version?1:(s?(s>0?0.7:-0.1):(q?0:-1));r.getVersionDone=r.installed==0.7||r.installed==-0.1||r.nav.done===0?0:1;},getVersion:function(s,t){var u=this,p=null,r=0,q;t=PluginDetect.browser.isIE?0:t;if((!r||PluginDetect.dbug)&&u.nav.query(t).installed){r=1}if((!p||PluginDetect.dbug)&&u.nav.query(t).version){p=u.nav.version}q=!p?u.codebase.isMin(s):0;if(q){u.setPluginStatus(0,0,q);return}if(!p||PluginDetect.dbug){q=u.codebase.search();if(q){r=1;p=q}}if((!r||PluginDetect.dbug)&&u.axo.query().installed){r=1}if((!p||PluginDetect.dbug)&&u.axo.query().version){p=u.axo.version}u.setPluginStatus(r,p)},nav:{done:null,installed:0,version:null,result:[0,0],mimeType:["video/quicktime","application/x-quicktimeplayer","image/x-macpaint","image/x-quicktime","application/x-rtsp","application/x-sdp","application/sdp","audio/vnd.qcelp","video/sd-video","audio/mpeg","video/mp4","video/3gpp2","application/x-mpeg","audio/x-m4b","audio/x-aac","video/flc"],find:"QuickTime.*Plug-?in",find2:"QuickTime.*Plug-?in",find3filename:"QuickTime|QT",avoid:"Totem|VLC|RealPlayer|Helix|MPlayer|Windows\\s*Media\\s*Player",plugins:"QuickTime Plug-in",detect:function(s){var t=this,r,q,p={installed:0,version:null,plugin:null};r=PluginDetect.pd.findNavPlugin({find:t.find,find2:s?0:t.find2,avoid:s?0:t.avoid,mimes:t.mimeType,plugins:t.plugins});if(r){p.plugin=r;p.installed=1;q=new RegExp(t.find,"i");if(r.name&&q.test(r.name+"")){p.version=PluginDetect.getNum(r.name+"")}}return p},query:function(r){var q=this,t,s;r=r?1:0;if(q.done===null){if(PluginDetect.hasMimeType(q.mimeType)){s=q.detect(1);if(s.installed){t=q.detect(0);q.result=[t,t.installed?t:s]}var x=q.result[0],v=q.result[1],w=new RegExp(q.avoid,"i"),u=new RegExp(q.find3filename,"i"),p;x=x?x.plugin:0;v=v?v.plugin:0;if(!x&&v&&v.name&&(!v.description||(/^[\s]*$/).test(v.description+""))&&!w.test(v.name+"")){p=(v.filename||"")+"";if((/^.*[\\\/]([^\\\/]*)$/).test(p)){p=RegExp.$1;}if(p&&u.test(p)&&!w.test(p)){q.result[0]=q.result[1]}}}q.done=q.result[0]===q.result[1]?1:0;}if(q.result[r]){q.installed=q.result[r].installed;q.version=q.result[r].version}return q}},codebase:{classID:"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B",isMin:function(r){var s=this,q,p=0;s.$$=i;if(PluginDetect.isStrNum(r)){q=r.split(PluginDetect.splitNumRegx);if(q.length>3&&parseInt(q[3],10)>0){q[3]="9999"}r=q.join(",");p=PluginDetect.codebase.isMin(s,r)}return p},search:function(){this.$$=i;return PluginDetect.codebase.search(this)},DIGITMAX:[[12,11,11],[7,60],[7,11,11],0,[7,11,11]],DIGITMIN:[5,0,0,0],Upper:["999","7,60","7,50","7,6","7,5"],Lower:["7,60","7,50","7,6","7,5","0"],convert:[1,function(r,q){return q?[r[0],r[1]+r[2],r[3],"0"]:[r[0],r[1].charAt(0),r[1].charAt(1),r[2]]},1,0,1]},axo:{hasRun:0,installed:0,version:null,progID:["QuickTimeCheckObject.QuickTimeCheck","QuickTimeCheckObject.QuickTimeCheck.1"],progID0:"QuickTime.QuickTime",query:function(){var r=this,t,p,q,s=r.hasRun||!PluginDetect.browser.ActiveXEnabled;r.hasRun=1;if(s){return r}for(p=0;p<r.progID.length;p++){t=PluginDetect.getAXO(r.progID[p]);if(t){r.installed=1;q=PluginDetect.pd.getPROP(t,"QuickTimeVersion");if(q&&q.toString){q=q.toString(16);r.version=parseInt(q.charAt(0)||"0",16)+"."+parseInt(q.charAt(1)||"0",16)+"."+parseInt(q.charAt(2)||"0",16);if(!PluginDetect.dbug){break}}}}return r}}};PluginDetect.addPlugin("quicktime",i);var a={mimeType:["application/x-java-applet","application/x-java-vm","application/x-java-bean"],mimeType_dummy:"application/dummymimejavaapplet",classID:"clsid:8AD9C840-044E-11D1-B3E9-00805F499D93",classID_dummy:"clsid:8AD9C840-044E-11D1-B3E9-BA9876543210",navigator:{init:function(){var q=this,p=a;q.mimeObj=PluginDetect.hasMimeType(p.mimeType);if(q.mimeObj){q.pluginObj=q.mimeObj.enabledPlugin}},a:(function(){try{return window.navigator.javaEnabled()}catch(p){}return 1})(),javaEnabled:function(){return !!this.a},mimeObj:0,pluginObj:0},OTF:null,getVerifyTagsDefault:function(){return[1,this.applet.isDisabled.VerifyTagsDefault_1()?0:1,1]},getVersion:function(x,u,w){var q=this,s,p=q.applet,v=q.verify,y=q.navigator,t=null,z=null,r=null;if(q.getVersionDone===null){q.OTF=0;y.init();if(v){v.init()}}p.setVerifyTagsArray(w);PluginDetect.file.save(q,".jar",u);if(q.getVersionDone===0){if(p.should_Insert_Query_Any()){s=p.insert_Query_Any(x);q.setPluginStatus(s[0],s[1],t,x)}return}if((!t||PluginDetect.dbug)&&q.navMime.query().version){t=q.navMime.version}if((!t||PluginDetect.dbug)&&q.navPlugin.query().version){t=q.navPlugin.version}if((!t||PluginDetect.dbug)&&q.DTK.query().version){t=q.DTK.version}if(q.nonAppletDetectionOk(t)){r=t}q.setPluginStatus(r,z,t,x);if(p.should_Insert_Query_Any()){s=p.insert_Query_Any(x);if(s[0]){r=s[0];z=s[1]}}q.setPluginStatus(r,z,t,x)},nonAppletDetectionOk:function(q){var t=this,p=t.navigator,r=PluginDetect.browser,s=1;if(!q||!p.javaEnabled()||(!r.isIE&&!p.mimeObj)){s=0}return s},setPluginStatus:function(v,w,p,u){var t=this,s,q=0,r=t.applet;p=p||t.version0;s=r.isRange(v);if(s){if(r.setRange(s,u)==v){q=s}v=0}if(t.OTF<3){t.installed=q?(q>0?0.7:-0.1):(v?1:(p?-0.2:-1))}if(t.OTF==2&&t.NOTF&&!t.applet.getResult()[0]){t.installed=p?-0.2:-1}if(t.OTF==3&&t.installed!=-0.5&&t.installed!=0.5){t.installed=(t.NOTF.isJavaActive(1)>=1?0.5:-0.5)}if(t.OTF==4&&(t.installed==-0.5||t.installed==0.5)){if(v){t.installed=1}else{if(q){t.installed=q>0?0.7:-0.1}else{if(t.NOTF.isJavaActive(1)>=1){if(p){t.installed=1;v=p}else{t.installed=0}}else{if(p){t.installed=-0.2}else{t.installed=-1}}}}}if(p){t.version0=PluginDetect.formatNum(PluginDetect.getNum(p))}if(v&&!q){t.version=PluginDetect.formatNum(PluginDetect.getNum(v))}if(w&&PluginDetect.isString(w)){t.vendor=w}if(!t.vendor){t.vendor=""}if(t.verify&&t.verify.isEnabled()){t.getVersionDone=0}else{if(t.getVersionDone!=1){if(t.OTF<2){t.getVersionDone=0}else{t.getVersionDone=t.applet.can_Insert_Query_Any()?0:1}}}},DTK:{hasRun:0,status:null,VERSIONS:[],version:"",HTML:null,Plugin2Status:null,classID:["clsid:CAFEEFAC-DEC7-0000-0001-ABCDEFFEDCBA","clsid:CAFEEFAC-DEC7-0000-0000-ABCDEFFEDCBA"],mimeType:["application/java-deployment-toolkit","application/npruntime-scriptable-plugin;DeploymentToolkit"],isDisabled:function(p){var q=this;if(q.HTML){return 1}if(p||PluginDetect.dbug){return 0}if(q.hasRun||!PluginDetect.DOM.isEnabled.objectTagUsingActiveX()){return 1}return 0},query:function(B){var z=this,t=a,A,v,p=PluginDetect.DOM.altHTML,u={},q,s=null,w=null,r=z.isDisabled(B);z.hasRun=1;if(r){return z}z.status=0;if(PluginDetect.DOM.isEnabled.objectTagUsingActiveX()){for(A=0;A<z.classID.length;A++){z.HTML=PluginDetect.DOM.insert("object",["classid",z.classID[A]],[],p);s=z.HTML.obj();if(PluginDetect.pd.getPROP(s,"jvms")){break}}}else{v=PluginDetect.hasMimeType(z.mimeType);if(v&&v.type){z.HTML=PluginDetect.DOM.insert("object",["type",v.type],[],p);s=z.HTML.obj()}}if(s){try{q=PluginDetect.pd.getPROP(s,"jvms");if(q){w=q.getLength();if(PluginDetect.isNum(w)){z.status=w>0?1:-1;for(A=0;A<w;A++){v=PluginDetect.getNum(q.get(w-1-A).version);if(v){z.VERSIONS.push(v);u["a"+PluginDetect.formatNum(v)]=1}}}}}catch(y){}if(z.VERSIONS.length){z.version=PluginDetect.formatNum(z.VERSIONS[0])}}return z}},navMime:{hasRun:0,mimetype:"",version:"",mimeObj:0,pluginObj:0,regexJPI:/^\s*application\/x-java-applet;jpi-version\s*=\s*(\d.*)$/i,isDisabled:function(){var p=this,q=a;if(p.hasRun||!q.navigator.mimeObj){return 1}return 0},update:function(s){var p=this,r=s?s.enabledPlugin:0,q=s&&p.regexJPI.test(s.type||"")?PluginDetect.formatNum(PluginDetect.getNum(RegExp.$1)):0;if(q&&r&&(r.description||r.name)){if(PluginDetect.compareNums(q,p.version||PluginDetect.formatNum("0"))>0){p.version=q;p.mimeObj=s;p.pluginObj=r;p.mimetype=s.type;}}},query:function(){var t=this,s=a,w,v,B,A,z,r,q=navigator.mimeTypes,p=t.isDisabled();t.hasRun=1;if(p){return t}r=q.length;if(PluginDetect.isNum(r)){for(w=0;w<r;w++){B=0;try{B=q[w]}catch(u){}t.update(B)}}if(!t.version||PluginDetect.dbug){z=PluginDetect.isArray(s.mimeType)?s.mimeType:[s.mimeType];for(w=0;w<z.length;w++){B=0;try{B=q[z[w]]}catch(u){}A=B?B.enabledPlugin:0;r=A?A.length:null;if(PluginDetect.isNum(r)){for(v=0;v<r;v++){B=0;try{B=A[v]}catch(u){}t.update(B)}}}}return t}},navPlugin:{hasRun:0,version:"",getPlatformNum:function(){var q=a,p=0,r=/Java.*TM.*Platform[^\d]*(\d+)[\.,_]?(\d*)\s*U?(?:pdate)?\s*(\d*)/i,s=PluginDetect.pd.findNavPlugin({find:r,mimes:q.mimeType,plugins:1});if(s&&(r.test(s.name||"")||r.test(s.description||""))&&parseInt(RegExp.$1,10)>=5){p="1,"+RegExp.$1+","+(RegExp.$2?RegExp.$2:"0")+","+(RegExp.$3?RegExp.$3:"0");}return p},getPluginNum:function(){var s=this,q=a,p=0,u,t,r,w,v=0;r=/Java[^\d]*Plug-in/i;w=PluginDetect.pd.findNavPlugin({find:r,num:1,mimes:q.mimeType,plugins:1,dbug:v});if(w){u=s.checkPluginNum(w.description,r);t=s.checkPluginNum(w.name,r);p=u&&t?(PluginDetect.compareNums(u,t)>0?u:t):(u||t)}if(!p){r=/Java.*\d.*Plug-in/i;w=PluginDetect.pd.findNavPlugin({find:r,mimes:q.mimeType,plugins:1,dbug:v});if(w){u=s.checkPluginNum(w.description,r);t=s.checkPluginNum(w.name,r);p=u&&t?(PluginDetect.compareNums(u,t)>0?u:t):(u||t)}}return p},checkPluginNum:function(s,r){var p,q;p=r.test(s)?PluginDetect.formatNum(PluginDetect.getNum(s)):0;if(p&&PluginDetect.compareNums(p,PluginDetect.formatNum("10"))>=0){q=p.split(PluginDetect.splitNumRegx);p=PluginDetect.formatNum("1,"+(parseInt(q[0],10)-3)+",0,"+q[1])}if(p&&(PluginDetect.compareNums(p,PluginDetect.formatNum("1,3"))<0||PluginDetect.compareNums(p,PluginDetect.formatNum("2"))>=0)){p=0}return p},query:function(){var t=this,s=a,r,p=0,q=t.hasRun||!s.navigator.mimeObj;t.hasRun=1;if(q){return t}if(!p||PluginDetect.dbug){r=t.getPlatformNum();if(r){p=r}}if(!p||PluginDetect.dbug){r=t.getPluginNum();if(r){p=r}}if(p){t.version=PluginDetect.formatNum(p)}return t}},applet:{codebase:{isMin:function(p){this.$$=a;return PluginDetect.codebase.isMin(this,p)},search:function(){this.$$=a;return PluginDetect.codebase.search(this)},DIGITMAX:[[15,128],[6,0,512],0,[1,5,2,256],0,[1,4,1,1],[1,4,0,64],[1,3,2,32]],DIGITMIN:[1,0,0,0],Upper:["999","10","5,0,20","1,5,0,20","1,4,1,20","1,4,1,2","1,4,1","1,4"],Lower:["10","5,0,20","1,5,0,20","1,4,1,20","1,4,1,2","1,4,1","1,4","0"],convert:[function(r,q){return q?[parseInt(r[0],10)>1?"99":parseInt(r[1],10)+3+"",r[3],"0","0"]:["1",parseInt(r[0],10)-3+"","0",r[1]]},function(r,q){return q?[r[1],r[2],r[3]+"0","0"]:["1",r[0],r[1],r[2].substring(0,r[2].length-1||1)]},0,function(r,q){return q?[r[0],r[1],r[2],r[3]+"0"]:[r[0],r[1],r[2],r[3].substring(0,r[3].length-1||1)]},0,1,function(r,q){return q?[r[0],r[1],r[2],r[3]+"0"]:[r[0],r[1],r[2],r[3].substring(0,r[3].length-1||1)]},1]},results:[[null,null],[null,null],[null,null],[null,null]],getResult:function(){var q=this,s=q.results,p,r=[];for(p=s.length-1;p>=0;p--){r=s[p];if(r[0]){break}}r=[].concat(r);return r},DummySpanTagHTML:0,HTML:[0,0,0,0],active:[0,0,0,0],DummyObjTagHTML:0,DummyObjTagHTML2:0,allowed:[1,1,1,1],VerifyTagsHas:function(q){var r=this,p;for(p=0;p<r.allowed.length;p++){if(r.allowed[p]===q){return 1}}return 0},saveAsVerifyTagsArray:function(r){var q=this,p;if(PluginDetect.isArray(r)){for(p=1;p<q.allowed.length;p++){if(r.length>p-1&&PluginDetect.isNum(r[p-1])){if(r[p-1]<0){r[p-1]=0}if(r[p-1]>3){r[p-1]=3}q.allowed[p]=r[p-1]}}q.allowed[0]=q.allowed[3];}},setVerifyTagsArray:function(r){var q=this,p=a;if(p.getVersionDone===null){q.saveAsVerifyTagsArray(p.getVerifyTagsDefault())}if(PluginDetect.dbug){q.saveAsVerifyTagsArray([3,3,3])}else{if(r){q.saveAsVerifyTagsArray(r)}}},isDisabled:{single:function(q){var p=this;if(p.all()){return 1}if(q==1){return !PluginDetect.DOM.isEnabled.objectTag()}if(q==2){return p.AppletTag()}if(q===0){return PluginDetect.codebase.isDisabled()}if(q==3){return !PluginDetect.DOM.isEnabled.objectTagUsingActiveX()}return 1},all_:null,all:function(){var r=this,t=a,q=t.navigator,p,s=PluginDetect.browser;if(r.all_===null){if((s.isOpera&&PluginDetect.compareNums(s.verOpera,"13,0,0,0")<0&&!q.javaEnabled())||(r.AppletTag()&&!PluginDetect.DOM.isEnabled.objectTag())||(!q.mimeObj&&!s.isIE)){p=1}else{p=0}r.all_=p}return r.all_},AppletTag:function(){var q=a,p=q.navigator;return PluginDetect.browser.isIE?!p.javaEnabled():0},VerifyTagsDefault_1:function(){var q=PluginDetect.browser,p=1;if(q.isIE&&!q.ActiveXEnabled){p=0}if((q.isIE&&q.verIE<9)||(q.verGecko&&PluginDetect.compareNums(q.verGecko,PluginDetect.formatNum("2"))<0)||(q.isSafari&&(!q.verSafari||PluginDetect.compareNums(q.verSafari,PluginDetect.formatNum("4"))<0))||(q.isOpera&&PluginDetect.compareNums(q.verOpera,PluginDetect.formatNum("11"))<0)){p=0}return p}},can_Insert_Query:function(s){var q=this,r=q.results[0][0],p=q.getResult()[0];if(q.HTML[s]||(s===0&&r!==null&&!q.isRange(r))||(s===0&&p&&!q.isRange(p))){return 0}return !q.isDisabled.single(s)},can_Insert_Query_Any:function(){var q=this,p;for(p=0;p<q.results.length;p++){if(q.can_Insert_Query(p)){return 1}}return 0},should_Insert_Query:function(s){var r=this,t=r.allowed,q=a,p=r.getResult()[0];p=p&&(s>0||!r.isRange(p));if(!r.can_Insert_Query(s)||t[s]===0){return 0}if(t[s]==3||(t[s]==2.8&&!p)){return 1}if(!q.nonAppletDetectionOk(q.version0)){if(t[s]==2||(t[s]==1&&!p)){return 1}}return 0},should_Insert_Query_Any:function(){var q=this,p;for(p=0;p<q.allowed.length;p++){if(q.should_Insert_Query(p)){return 1}}return 0},query:function(t){var p=this,s=a,x=null,y=null,q=p.results,r,v,u=p.HTML[t];if(!u||!u.obj()||q[t][0]||s.bridgeDisabled){return}r=u.obj();v=u.readyState();if(!PluginDetect.isNum(v)||v==4){try{x=PluginDetect.getNum(r.getVersion()+"");y=r.getVendor()+"";r.statusbar(PluginDetect.win.loaded?" ":" ")}catch(w){}if(x&&PluginDetect.isStrNum(x)&&!(PluginDetect.dbug&&s.OTF<3)){q[t]=[x,y];p.active[t]=2;}}},isRange:function(p){return(/^[<>]/).test(p||"")?(p.charAt(0)==">"?1:-1):0},setRange:function(q,p){return(q?(q>0?">":"<"):"")+(PluginDetect.isString(p)?p:"")},insertJavaTag:function(z,w,p,s,D){var t=a,v="A.class",A=PluginDetect.file.getValid(t),y=A.name+A.ext,x=A.path;var u=["archive",y,"code",v],E=(s?["width",s]:[]).concat(D?["height",D]:[]),r=["mayscript","true"],C=["scriptable","true","codebase_lookup","false"].concat(r),B=t.navigator,q=!PluginDetect.browser.isIE&&B.mimeObj&&B.mimeObj.type?B.mimeObj.type:t.mimeType[0];if(z==1){return PluginDetect.browser.isIE?PluginDetect.DOM.insert("object",["type",q].concat(E),["codebase",x].concat(u).concat(C),p,t,0,w):PluginDetect.DOM.insert("object",["type",q].concat(E),["codebase",x].concat(u).concat(C),p,t,0,w)}if(z==2){return PluginDetect.browser.isIE?PluginDetect.DOM.insert("applet",["alt",p].concat(r).concat(u).concat(E),["codebase",x].concat(C),p,t,0,w):PluginDetect.DOM.insert("applet",["codebase",x,"alt",p].concat(r).concat(u).concat(E),[].concat(C),p,t,0,w)}if(z==3){return PluginDetect.browser.isIE?PluginDetect.DOM.insert("object",["classid",t.classID].concat(E),["codebase",x].concat(u).concat(C),p,t,0,w):PluginDetect.DOM.insert()}if(z==4){return PluginDetect.DOM.insert("embed",["codebase",x].concat(u).concat(["type",q]).concat(C).concat(E),[],p,t,0,w)}return PluginDetect.DOM.insert()},insertIframe:function(p){return PluginDetect.DOM.iframe.insert(99,p)},insert_Query_Any:function(w){var q=this,r=a,y=PluginDetect.DOM,u=q.results,x=q.HTML,p=y.altHTML,t,s,v=PluginDetect.file.getValid(r);if(q.should_Insert_Query(0)){if(r.OTF<2){r.OTF=2}u[0]=[0,0];t=w?q.codebase.isMin(w):q.codebase.search();if(t){u[0][0]=w?q.setRange(t,w):t}q.active[0]=t?1.5:-1}if(!v){return q.getResult()}if(!q.DummySpanTagHTML){s=q.insertIframe("applet.DummySpanTagHTML");q.DummySpanTagHTML=y.insert("",[],[],p,0,0,s);y.iframe.close(s)}if(q.should_Insert_Query(1)){if(r.OTF<2){r.OTF=2}s=q.insertIframe("applet.HTML[1]");x[1]=q.insertJavaTag(1,s,p);y.iframe.close(s);u[1]=[0,0];q.query(1)}if(q.should_Insert_Query(2)){if(r.OTF<2){r.OTF=2}s=q.insertIframe("applet.HTML[2]");x[2]=q.insertJavaTag(2,s,p);y.iframe.close(s);u[2]=[0,0];q.query(2)}if(q.should_Insert_Query(3)){if(r.OTF<2){r.OTF=2}s=q.insertIframe("applet.HTML[3]");x[3]=q.insertJavaTag(3,s,p);y.iframe.close(s);u[3]=[0,0];q.query(3)}if(y.isEnabled.objectTag()){if(!q.DummyObjTagHTML&&(x[1]||x[2])){s=q.insertIframe("applet.DummyObjTagHTML");q.DummyObjTagHTML=y.insert("object",["type",r.mimeType_dummy],[],p,0,0,s);y.iframe.close(s)}if(!q.DummyObjTagHTML2&&x[3]){s=q.insertIframe("applet.DummyObjTagHTML2");q.DummyObjTagHTML2=y.insert("object",["classid",r.classID_dummy],[],p,0,0,s);y.iframe.close(s)}}r.NOTF.init();return q.getResult()}},NOTF:{count:0,count2:0,countMax:25,intervalLength:250,init:function(){var q=this,p=a;if(p.OTF<3&&q.shouldContinueQuery()){p.OTF=3;PluginDetect.ev.setTimeout(q.onIntervalQuery,q.intervalLength);}},allHTMLloaded:function(){var r=a.applet,q,p=[r.DummySpanTagHTML,r.DummyObjTagHTML,r.DummyObjTagHTML2].concat(r.HTML);for(q=0;q<p.length;q++){if(p[q]&&p[q].loaded!==null&&!p[q].loaded){return 0}}return 1},shouldContinueQuery:function(){var t=this,s=a,r=s.applet,q,p=0;if(t.allHTMLloaded()){if(t.count-t.count2>2){return p}}else{t.count2=t.count}for(q=0;q<r.results.length;q++){if(r.HTML[q]){if(!r.results[q][0]&&(r.allowed[q]>=2||(r.allowed[q]==1&&!r.getResult()[0]))&&(!t.count||t.isAppletActive(q)>=0)){p=1}}}return p},isJavaActive:function(s){var u=this,r=a,p,q,t=-9;for(p=0;p<r.applet.HTML.length;p++){q=u.isAppletActive(p,s);if(q>t){t=q}}return t},isAppletActive:function(t,u){var v=this,q=a,A=q.navigator,p=q.applet,w=p.HTML[t],s=p.active,z,r=0,y,B=s[t];if(u||B>=1.5||!w||!w.span()){return B}y=PluginDetect.DOM.getTagStatus(w,p.DummySpanTagHTML,p.DummyObjTagHTML,p.DummyObjTagHTML2,v.count);for(z=0;z<s.length;z++){if(s[z]>0){r=1}}if(y!=1){B=y}else{if(PluginDetect.browser.isIE||(q.version0&&A.javaEnabled()&&A.mimeObj&&(w.tagName=="object"||r))){B=1}else{B=0}}s[t]=B;return B},onIntervalQuery:function(){var q=a.NOTF,p;q.count++;if(a.OTF==3){p=q.queryAllApplets();if(!q.shouldContinueQuery()){q.queryCompleted(p)}}if(a.OTF==3){PluginDetect.ev.setTimeout(q.onIntervalQuery,q.intervalLength)}},queryAllApplets:function(){var t=this,s=a,r=s.applet,q,p;for(q=0;q<r.results.length;q++){r.query(q)}p=r.getResult();return p},queryCompleted:function(p){var r=this,q=a;if(q.OTF>=4){return}q.OTF=4;r.isJavaActive();q.setPluginStatus(p[0],p[1],0);PluginDetect.ev.callArray(q.DoneHndlrs);}}};PluginDetect.addPlugin("java",a);var m={getVersion:function(){var r=this,p=null,q;if((!q||PluginDetect.dbug)&&r.nav.query().installed){q=1}if((!p||PluginDetect.dbug)&&r.nav.query().version){p=r.nav.version}if((!q||PluginDetect.dbug)&&r.axo.query().installed){q=1}if((!p||PluginDetect.dbug)&&r.axo.query().version){p=r.axo.version}r.installed=p?1:(q?0:-1);r.version=PluginDetect.formatNum(p)},nav:{hasRun:0,installed:0,version:null,mimeType:"application/x-devalvrx",query:function(){var s=this,p,r,q=s.hasRun||!PluginDetect.hasMimeType(s.mimeType);s.hasRun=1;if(q){return s}r=PluginDetect.pd.findNavPlugin({find:"DevalVR.*Plug-?in",mimes:s.mimeType,plugins:"DevalVR 3D Plugin"});if(r&&(/Plug-?in(.*)/i).test(r.description||"")){p=PluginDetect.getNum(RegExp.$1)}if(r){s.installed=1}if(p){s.version=p}return s}},axo:{hasRun:0,installed:0,version:null,progID:["DevalVRXCtrl.DevalVRXCtrl","DevalVRXCtrl.DevalVRXCtrl.1"],classID:"clsid:5D2CF9D0-113A-476B-986F-288B54571614",query:function(){var s=this,v=m,q,p,u,r,t=s.hasRun;s.hasRun=1;if(t){return s}for(p=0;p<s.progID.length;p++){u=PluginDetect.getAXO(s.progID[p]);if(u){s.installed=1;if(!PluginDetect.dbug){break}}}if(u&&PluginDetect.DOM.isEnabled.objectTagUsingActiveX()){r=PluginDetect.pd.getPROP(PluginDetect.DOM.insert("object",["classid",s.classID],["src",""],"",v).obj(),"pluginversion");if(r&&r.toString){q="00000000"+r.toString(16);q=q.substr(q.length-8,8);q=parseInt(q.substr(0,2)||"0",16)+","+parseInt(q.substr(2,2)||"0",16)+","+parseInt(q.substr(4,2)||"0",16)+","+parseInt(q.substr(6,2)||"0",16);if(q){s.version=q}}}return s}}};PluginDetect.addPlugin("devalvr",m);var e={mimeType:"application/x-shockwave-flash",setPluginStatus:function(s,p){var r=this,q;r.installed=p?1:(s?0:-1);r.version=PluginDetect.formatNum(p);q=r.installed==-1||r.instance.version;q=q||r.axo.version;r.getVersionDone=q?1:0},getVersion:function(t,q){var r=this,p=null,s=0;if((!s||PluginDetect.dbug)&&r.navPlugin.query().installed){s=1}if((!p||PluginDetect.dbug)&&r.navPlugin.query().version){p=r.navPlugin.version}if((!s||PluginDetect.dbug)&&r.axo.query().installed){s=1}if((!p||PluginDetect.dbug)&&r.axo.query().version){p=r.axo.version}if(((!s&&!p)||q||PluginDetect.dbug)&&r.instance.query().version){s=1;p=r.instance.version}r.setPluginStatus(s,p)},navPlugin:{hasRun:0,installed:0,version:null,getNum:function(q){if(!q){return null}var p=/[\d][\d\,\.\s]*[rRdD]{0,1}[\d\,]*/.exec(q);return p?p[0].replace(/[rRdD\.]/g,",").replace(/\s/g,""):null},query:function(){var s=this,q=e,p,t,r=s.hasRun||!PluginDetect.hasMimeType(q.mimeType);s.hasRun=1;if(r){return s}t=PluginDetect.pd.findNavPlugin({find:"Shockwave.*Flash",mimes:q.mimeType,plugins:["Shockwave Flash"]});if(t){s.installed=1;if(t.description){p=s.getNum(t.description)}}if(p){p=PluginDetect.getPluginFileVersion(t,p)}if(p){s.version=p}return s}},axo:{hasRun:0,installed:0,version:null,progID:"ShockwaveFlash.ShockwaveFlash",classID:"clsid:D27CDB6E-AE6D-11CF-96B8-444553540000",query:function(){var r=this,q,p,u,s=r.hasRun;r.hasRun=1;if(s){return r}for(p=0;p<10;p++){u=PluginDetect.getAXO(r.progID+(p?"."+p:""));if(u){r.installed=1;q=0;try{q=PluginDetect.getNum(u.GetVariable("$version")+"");}catch(t){}if(q){r.version=q;if(!PluginDetect.dbug){break}}}}return r}},instance:{hasRun:0,version:null,HTML:null,isEnabled:function(){var q=this,r=e,p=1;if(q.hasRun||PluginDetect.DOM.isEnabled.objectTagUsingActiveX()||!PluginDetect.DOM.isEnabled.objectTag()||!PluginDetect.hasMimeType(r.mimeType)){p=0}return p},query:function(){var p=this,r=e,q=p.isEnabled();p.hasRun=1;if(q){p.HTML=PluginDetect.DOM.insert("object",["type",r.mimeType],["play","false","menu","false"],"",r);try{p.version=PluginDetect.getNum(p.HTML.obj().GetVariable("$version")+"");}catch(s){}}return p}}};PluginDetect.addPlugin("flash",e);var k={getVersion:function(){var r=this,p=null,q;if((!q||PluginDetect.dbug)&&r.nav.query().installed){q=1}if((!p||PluginDetect.dbug)&&r.nav.query().version){p=r.nav.version}if((!q||PluginDetect.dbug)&&r.axo.query().installed){q=1}if((!p||PluginDetect.dbug)&&r.axo.query().version){p=r.axo.version}r.installed=p?1:(q?0:-1);r.version=PluginDetect.formatNum(p)},nav:{hasRun:0,installed:0,version:null,mimeType:"application/x-director",query:function(){var s=this,p,r,q=s.hasRun||!PluginDetect.hasMimeType(s.mimeType);s.hasRun=1;if(q){return s}r=PluginDetect.pd.findNavPlugin({find:"Shockwave\\s*for\\s*Director",mimes:s.mimeType,plugins:"Shockwave for Director"});if(r&&r.description){p=PluginDetect.getNum(r.description+"")}if(p){p=PluginDetect.getPluginFileVersion(r,p)}if(r){s.installed=1}if(p){s.version=p}return s}},axo:{hasRun:0,installed:null,version:null,progID:["SWCtl.SWCtl","SWCtl.SWCtl.1","SWCtl.SWCtl.7","SWCtl.SWCtl.8","SWCtl.SWCtl.11","SWCtl.SWCtl.12"],classID:"clsid:166B1BCA-3F9C-11CF-8075-444553540000",query:function(){var t=this,v,p,q,w,s,r=!t.hasRun;t.hasRun=1;if(r){for(p=0;p<t.progID.length;p++){v=PluginDetect.getAXO(t.progID[p]);if(v){t.installed=1;w="";try{w=v.ShockwaveVersion("")+"";}catch(u){}if((/(\d[\d\.\,]*)(?:\s*r\s*(\d+))?/i).test(w)){s=RegExp.$2;q=PluginDetect.formatNum(RegExp.$1);if(s){q=q.split(PluginDetect.splitNumRegx);q[3]=s;q=q.join(",")}}if(q){t.version=q;if(!PluginDetect.dbug){break}}}}}return t}}};PluginDetect.addPlugin("shockwave",k);var o={setPluginStatus:function(p,r){var q=this;if(p){q.version=PluginDetect.formatNum(p)}q.installed=q.version?1:(r?0:-1);q.getVersionDone=q.installed===0?0:1;},getVersion:function(t,q){var r=this,s,p=null;if((!s||PluginDetect.dbug)&&r.nav.query().installed){s=1}if((!s||PluginDetect.dbug)&&r.axo.query().installed){s=1}if((!p||PluginDetect.dbug)&&r.axo.query().version){p=r.axo.version}if(((!s&&!p)||q||PluginDetect.dbug)&&r.FirefoxPlugin.query().version){s=1;p=r.FirefoxPlugin.version}r.setPluginStatus(p,s)},mimeType:["application/x-ms-wmp","application/asx","application/x-mplayer2","video/x-ms-asf","video/x-ms-wm","video/x-ms-asf-plugin"],find:["Microsoft.*Windows\\s*Media\\s*Player.*Firefox.*Plug-?in","Windows\\s*Media\\s*Player\\s*Plug-?in\\s*Dynamic\\s*Link\\s*Library","Flip4Mac.*Windows\\s*Media.*Plug-?in|Flip4Mac.*WMV.*Plug-?in"],avoid:"Totem|VLC|RealPlayer|Helix",plugins:["Microsoft"+String.fromCharCode(174)+" Windows Media Player Firefox Plugin","Windows Media Player Plug-in Dynamic Link Library"],nav:{hasRun:0,installed:0,query:function(){var s=this,p=o,r,q=s.hasRun||!PluginDetect.hasMimeType(p.mimeType);s.hasRun=1;if(q){return s}r=PluginDetect.pd.findNavPlugin({find:p.find.join("|"),avoid:p.avoid,mimes:p.mimeType,plugins:p.plugins});if(r){s.installed=1}return s}},FirefoxPlugin:{hasRun:0,version:null,isDisabled:function(){var p=this,r=o,q=PluginDetect.browser;if(p.hasRun||(q.isGecko&&PluginDetect.compareNums(q.verGecko,PluginDetect.formatNum("1.8"))<0)||(q.isOpera&&PluginDetect.compareNums(q.verOpera,PluginDetect.formatNum("10"))<0)||PluginDetect.DOM.isEnabled.objectTagUsingActiveX()||!PluginDetect.hasMimeType(r.mimeType)||!PluginDetect.pd.findNavPlugin({find:r.find[0],avoid:r.avoid,mimes:r.mimeType,plugins:r.plugins[0]})){return 1}return 0},query:function(){var q=this,r=o,p,s=q.isDisabled();q.hasRun=1;if(s){return q}p=PluginDetect.pd.getPROP(PluginDetect.DOM.insert("object",["type",PluginDetect.hasMimeType(r.mimeType).type,"data",""],["src",""],"",r).obj(),"versionInfo");if(p){q.version=PluginDetect.getNum(p)}return q}},axo:{hasRun:0,installed:null,version:null,progID:["WMPlayer.OCX","WMPlayer.OCX.7"],classID:"clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6",query:function(){var s=this,t,p,q,r=!s.hasRun;s.hasRun=1;if(r){for(p=0;p<s.progID.length;p++){t=PluginDetect.getAXO(s.progID[p]);if(t){s.installed=1;q=PluginDetect.pd.getPROP(t,"versionInfo",0);if(q){q=PluginDetect.getNum(q)}if(q){s.version=q;if(!PluginDetect.dbug){break}}}}}return s}}};PluginDetect.addPlugin("windowsmediaplayer",o);var h={getVersion:function(){var r=this,p=null,q=0;if((!q||PluginDetect.dbug)&&r.nav.query().installed){q=1}if((!p||PluginDetect.dbug)&&r.nav.query().version){p=r.nav.version}if((!q||PluginDetect.dbug)&&r.axo.query().installed){q=1}if((!p||PluginDetect.dbug)&&r.axo.query().version){p=r.axo.version}r.version=PluginDetect.formatNum(p);r.installed=p?1:(q?0:-1)},nav:{hasRun:0,installed:0,version:null,mimeType:["application/x-silverlight","application/x-silverlight-2"],query:function(){var t=this,p,q,s,r=t.hasRun||!PluginDetect.hasMimeType(t.mimeType);t.hasRun=1;if(r){return t}s=PluginDetect.pd.findNavPlugin({find:"Silverlight.*Plug-?in",mimes:t.mimeType,plugins:"Silverlight Plug-In"});if(s){t.installed=1}if(s&&s.description){q=PluginDetect.formatNum(PluginDetect.getNum(s.description+""))}if(q){p=q.split(PluginDetect.splitNumRegx);if(parseInt(p[0],10)<2&&parseInt(p[2],10)>=30226){p[0]="2"}q=p.join(",")}if(q){t.version=q}return t}},axo:{hasRun:0,installed:0,version:null,progID:"AgControl.AgControl",maxdigit:[20,10,10,100,100,10],mindigit:[0,0,0,0,0,0],IsVersionSupported:function(s,q){var p=this;try{return p.testVersion?PluginDetect.compareNums(PluginDetect.formatNum(p.testVersion.join(",")),PluginDetect.formatNum(q.join(",")))>=0:s.IsVersionSupported(p.format(q))}catch(r){}return 0},format:function(q){var p=this;return(q[0]+"."+q[1]+"."+q[2]+p.make2digits(q[3])+p.make2digits(q[4])+"."+q[5])},make2digits:function(p){return(p<10?"0":"")+p+""},query:function(){var r=this,q,v,s=r.hasRun;r.hasRun=1;if(s){return r}v=PluginDetect.getAXO(r.progID);if(v){r.installed=1}if(v&&r.IsVersionSupported(v,r.mindigit)){var p=[].concat(r.mindigit),u,t=0;for(q=0;q<r.maxdigit.length;q++){u=0;while(r.maxdigit[q]-r.mindigit[q]>1&&u<20){u++;t++;p[q]=Math.round((r.maxdigit[q]+r.mindigit[q])/2);if(r.IsVersionSupported(v,p)){r.mindigit[q]=p[q]}else{r.maxdigit[q]=p[q]}}p[q]=r.mindigit[q]}r.version=r.format(p);}return r}}};PluginDetect.addPlugin("silverlight",h);var f={compareNums:function(s,r){var A=s.split(PluginDetect.splitNumRegx),y=r.split(PluginDetect.splitNumRegx),w,q,p,v,u,z;for(w=0;w<Math.min(A.length,y.length);w++){z=/([\d]+)([a-z]?)/.test(A[w]);q=parseInt(RegExp.$1,10);v=(w==2&&RegExp.$2.length>0)?RegExp.$2.charCodeAt(0):-1;z=/([\d]+)([a-z]?)/.test(y[w]);p=parseInt(RegExp.$1,10);u=(w==2&&RegExp.$2.length>0)?RegExp.$2.charCodeAt(0):-1;if(q!=p){return(q>p?1:-1)}if(w==2&&v!=u){return(v>u?1:-1)}}return 0},setPluginStatus:function(r,p,s){var q=this;q.installed=p?1:(s?(s>0?0.7:-0.1):(r?0:-1));if(p){q.version=PluginDetect.formatNum(p)}q.getVersionDone=q.installed==0.7||q.installed==-0.1?0:1;},getVersion:function(s){var t=this,r,p=null,q;if((!r||PluginDetect.dbug)&&t.nav.query().installed){r=1}if((!p||PluginDetect.dbug)&&t.nav.query().version){p=t.nav.version}if((!r||PluginDetect.dbug)&&t.axo.query().installed){r=1}if((!p||PluginDetect.dbug)&&t.axo.query().version){p=t.axo.version}if(!p||PluginDetect.dbug){q=t.codebase.isMin(s);if(q){t.setPluginStatus(0,0,q);return}}if(!p||PluginDetect.dbug){q=t.codebase.search();if(q){r=1;p=q}}t.setPluginStatus(r,p,0)},nav:{hasRun:0,installed:0,version:null,mimeType:["application/x-vlc-plugin","application/x-google-vlc-plugin","application/mpeg4-muxcodetable","application/x-matroska","application/xspf+xml","video/divx","video/webm","video/x-mpeg","video/x-msvideo","video/ogg","audio/x-flac","audio/amr","audio/amr"],find:"VLC.*Plug-?in",find2:"VLC|VideoLAN",avoid:"Totem|Helix",plugins:["VLC Web Plugin","VLC Multimedia Plug-in","VLC Multimedia Plugin","VLC multimedia plugin"],query:function(){var s=this,p,r,q=s.hasRun||!PluginDetect.hasMimeType(s.mimeType);s.hasRun=1;if(q){return s}r=PluginDetect.pd.findNavPlugin({find:s.find,avoid:s.avoid,mimes:s.mimeType,plugins:s.plugins});if(r){s.installed=1;if(r.description){p=PluginDetect.getNum(r.description+"","[\\d][\\d\\.]*[a-z]*")}if(p){s.version=p}}return s}},axo:{hasRun:0,installed:0,version:null,progID:"VideoLAN.VLCPlugin",query:function(){var q=this,s,p,r=q.hasRun;q.hasRun=1;if(r){return q}s=PluginDetect.getAXO(q.progID);if(s){q.installed=1;p=PluginDetect.getNum(PluginDetect.pd.getPROP(s,"VersionInfo"),"[\\d][\\d\\.]*[a-z]*");if(p){q.version=p}}return q}},codebase:{classID:"clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921",isMin:function(p){this.$$=f;return PluginDetect.codebase.isMin(this,p)},search:function(){this.$$=f;return PluginDetect.codebase.search(this)},DIGITMAX:[[11,11,16]],DIGITMIN:[0,0,0,0],Upper:["999"],Lower:["0"],convert:[1]}};PluginDetect.addPlugin("vlc",f);var c={OTF:null,setPluginStatus:function(){var p=this,B=p.OTF,v=p.nav.detected,x=p.nav.version,z=p.nav.precision,C=z,u=x,s=v>0;var H=p.axo.detected,r=p.axo.version,w=p.axo.precision,D=p.doc.detected,G=p.doc.version,t=p.doc.precision,E=p.doc2.detected,F=p.doc2.version,y=p.doc2.precision;u=F||u||r||G;C=y||C||w||t;s=E>0||s||H>0||D>0;u=u||null;p.version=PluginDetect.formatNum(u);p.precision=C;var q=-1;if(B==3){q=p.version?0.5:-0.5}else{if(u){q=1}else{if(s){q=0}else{if(H==-0.5||D==-0.5){q=-0.15}else{if(PluginDetect.browser.isIE&&(!PluginDetect.browser.ActiveXEnabled||PluginDetect.browser.ActiveXFilteringEnabled)){q=-1.5}}}}}p.installed=q;if(p.getVersionDone!=1){var A=1;if((p.verify&&p.verify.isEnabled())||p.installed==0.5||p.installed==-0.5){A=0}else{if(p.doc2.isDisabled()==1){A=0}}p.getVersionDone=A}},getVersion:function(s,r){var p=this,q=0,t=p.verify;if(p.getVersionDone===null){p.OTF=0;if(t){t.init()}}PluginDetect.file.save(p,".pdf",r);if(p.getVersionDone===0){p.doc2.insertHTMLQuery();p.setPluginStatus();return}if((!q||PluginDetect.dbug)&&p.nav.query().version){q=1}if((!q||PluginDetect.dbug)&&p.axo.query().version){q=1}if((!q||PluginDetect.dbug)&&p.doc.query().version){q=1}if(1){p.doc2.insertHTMLQuery()}p.setPluginStatus()},getPrecision:function(v,u,t){if(PluginDetect.isString(v)){u=u||"";t=t||"";var q,s="\\d+",r="[\\.]",p=[s,s,s,s];for(q=4;q>0;q--){if((new RegExp(u+p.slice(0,q).join(r)+t)).test(v)){return q}}}return 0},nav:{detected:0,version:null,precision:0,mimeType:["application/pdf","application/vnd.adobe.pdfxml"],find:"Adobe.*PDF.*Plug-?in|Adobe.*Acrobat.*Plug-?in|Adobe.*Reader.*Plug-?in",plugins:["Adobe Acrobat","Adobe Acrobat and Reader Plug-in","Adobe Reader Plugin"],query:function(){var r=this,q,p=null;if(r.detected||!PluginDetect.hasMimeType(r.mimeType)){return r}q=PluginDetect.pd.findNavPlugin({find:r.find,mimes:r.mimeType,plugins:r.plugins});r.detected=q?1:-1;if(q){p=PluginDetect.getNum(q.description)||PluginDetect.getNum(q.name);p=PluginDetect.getPluginFileVersion(q,p);if(!p){p=r.attempt3()}if(p){r.version=p;r.precision=c.getPrecision(p)}}return r},attempt3:function(){var p=null;if(PluginDetect.OS==1){if(PluginDetect.hasMimeType("application/vnd.adobe.pdfxml")){p="9"}else{if(PluginDetect.hasMimeType("application/vnd.adobe.x-mars")){p="8"}else{if(PluginDetect.hasMimeType("application/vnd.adobe.xfdf")){p="6"}}}}return p}},activexQuery:function(w){var u="",t,q,s,r,p={precision:0,version:null};try{if(w){u=w.GetVersions()+"";}}catch(v){}if(u&&PluginDetect.isString(u)){t=/\=\s*[\d\.]+/g;r=u.match(t);if(r){for(q=0;q<r.length;q++){s=PluginDetect.formatNum(PluginDetect.getNum(r[q]));if(s&&(!p.version||PluginDetect.compareNums(s,p.version)>0)){p.version=s}}p.precision=c.getPrecision(u,"\\=\\s*")}}return p},axo:{detected:0,version:null,precision:0,progID:["AcroPDF.PDF","AcroPDF.PDF.1","PDF.PdfCtrl","PDF.PdfCtrl.5","PDF.PdfCtrl.1"],progID_dummy:"AcroDUMMY.DUMMY",query:function(){var t=this,q=c,u,v,s,r,p,w;if(t.detected){return t}t.detected=-1;v=PluginDetect.getAXO(t.progID_dummy);if(!v){w=PluginDetect.errObj}for(p=0;p<t.progID.length;p++){v=PluginDetect.getAXO(t.progID[p]);if(v){t.detected=1;u=q.activexQuery(v);s=u.version;r=u.precision;if(!PluginDetect.dbug&&s){break}}else{if(w&&PluginDetect.errObj&&w!==PluginDetect.errObj&&w.message!==PluginDetect.errObj.message){t.detected=-0.5}}}if(s){t.version=s}if(r){t.precision=r}return t}},doc:{detected:0,version:null,precision:0,classID:"clsid:CA8A9780-280D-11CF-A24D-444553540000",classID_dummy:"clsid:CA8A9780-280D-11CF-A24D-BA9876543210",DummySpanTagHTML:0,HTML:0,DummyObjTagHTML1:0,DummyObjTagHTML2:0,isDisabled:function(){var q=this,p=0;if(q.HTML){p=1}else{if(PluginDetect.dbug){}else{if(!PluginDetect.DOM.isEnabled.objectTagUsingActiveX()){p=1}}}return p},query:function(){var y=this,v=c,p=PluginDetect.DOM.altHTML,r=1,s,x,w,t,u=1,q;if(y.isDisabled()){return y}s=PluginDetect.DOM.iframe.insert(99,"Adobe Reader");y.DummySpanTagHTML=PluginDetect.DOM.insert("",[],[],p,v,u,s);y.HTML=PluginDetect.DOM.insert("object",["classid",y.classID],[],p,v,u,s);y.DummyObjTagHTML2=PluginDetect.DOM.insert("object",["classid",y.classID_dummy],[],p,v,u,s);PluginDetect.DOM.iframe.close(s);q=PluginDetect.DOM.getTagStatus(y.HTML,y.DummySpanTagHTML,y.DummyObjTagHTML1,y.DummyObjTagHTML2,0,0,r);x=v.activexQuery(y.HTML.obj());w=x.version;t=x.precision;y.detected=q>0||w?1:(q==-0.1||q==-0.5?-0.5:-1);if(w){y.version=w}if(t){y.precision=t}return y}},doc2:{detected:0,version:null,precision:0,classID:"clsid:CA8A9780-280D-11CF-A24D-444553540000",mimeType:"application/pdf",HTML:0,count:0,count2:0,time2:0,intervalLength:50,maxCount:150,isDisabled:function(){var r=this,v=c,u=v.axo,p=v.nav,x=v.doc,w,t,q=0,s;if(r.HTML){q=2}else{if(PluginDetect.dbug){}else{if(!PluginDetect.DOM.isEnabled.objectTagUsingActiveX()){q=2}else{w=(p?p.version:0)||(u?u.version:0)||(x?x.version:0)||0;t=(p?p.precision:0)||(u?u.precision:0)||(x?x.precision:0)||0;if(!w||!t||t>2||PluginDetect.compareNums(PluginDetect.formatNum(w),PluginDetect.formatNum("11"))<0){q=2}}}}if(q<2){s=PluginDetect.file.getValid(v);if(!s||!s.full){q=1}}return q},handlerSet:0,onMessage:function(){var p=this;return function(q){if(p.version){return}p.detected=1;if(PluginDetect.isArray(q)){q=q[0]}q=PluginDetect.getNum(q+"");if(q){if(!(/[.,_]/).test(q)){q+="."}q+="00000";if((/^(\d+)[.,_](\d)(\d\d)(\d\d)/).test(q)){q=RegExp.$1+","+RegExp.$2+","+RegExp.$3+","+RegExp.$4}p.version=PluginDetect.formatNum(q);p.precision=3;c.setPluginStatus()}}},isDefinedMsgHandler:function(q,r){try{return q?q.messageHandler!==r:0}catch(p){}return 1},queryObject:function(){var r=this,s=r.HTML,q=s?s.obj():0;if(!q){return}if(!r.handlerSet&&r.isDefinedMsgHandler(q)){try{q.messageHandler={onMessage:r.onMessage()}}catch(p){}r.handlerSet=1;r.count2=r.count;r.time2=(new Date()).getTime()}if(!r.detected){if(r.count>3&&!r.handlerSet){r.detected=-1}else{if(r.time2&&r.count-r.count2>=r.maxCount&&(new Date()).getTime()-r.time2>=r.intervalLength*r.maxCount){r.detected=-0.5}}}if(r.detected){if(r.detected!=-1){}}},insertHTMLQuery:function(){var u=this,p=c,r=PluginDetect.DOM.altHTML,q,s,t=0;if(u.isDisabled()){return u}if(p.OTF<2){p.OTF=2}q=PluginDetect.file.getValid(p).full;s=PluginDetect.DOM.iframe.insert(0,"Adobe Reader");PluginDetect.DOM.iframe.write(s,'<script type="text/javascript"><\/script>');u.HTML=PluginDetect.DOM.insert("object",["data",q].concat(PluginDetect.browser.isIE?["classid",u.classID]:["type",u.mimeType]),["src",q],r,p,t,s);PluginDetect.DOM.iframe.addHandler(s,u.onIntervalQuery);if(p.OTF<3&&u.HTML){p.OTF=3;}PluginDetect.DOM.iframe.close(s);return u},onIntervalQuery:function(){var p=c,q=p.doc2;q.count++;if(p.OTF==3){q.queryObject();if(q.detected){q.queryCompleted()}}if(p.OTF==3){PluginDetect.ev.setTimeout(q.onIntervalQuery,q.intervalLength)}},queryCompleted:function(){var q=this,p=c;if(p.OTF==4){return}p.OTF=4;p.setPluginStatus();PluginDetect.ev.callArray(p.DoneHndlrs);},z:0}};PluginDetect.addPlugin("adobereader",c);var l={OTF:null,detectIE3P:0,setPluginStatus:function(){var p=this,q=p.OTF,u=p.doc.result,t=p.mime.result,s=u>0||t>0;var r=p.axo.result;s=s||r>0;p.version=null;if(q==3){p.installed=-0.5}else{s=s?0:-1;if(s==-1){s=r==-0.5||u==-0.5?-0.15:(PluginDetect.browser.isIE&&(!PluginDetect.browser.ActiveXEnabled||PluginDetect.browser.ActiveXFilteringEnabled||!p.detectIE3P)?-1.5:-1)}p.installed=s}if(p.verify&&p.verify.isEnabled()){p.getVersionDone=0}else{if(p.getVersionDone!=1){p.getVersionDone=(p.installed==-0.5||(p.installed==-1&&p.doc.isDisabled1()<2&&p.doc.isDisabled2()<2))?0:1}}},getVersion:function(s,r,t){var p=this,q=false,v=p.doc,u=p.verify;if(PluginDetect.isDefined(t)){p.detectIE3P=t?1:0}if(p.getVersionDone===null){p.OTF=0;if(u){u.init()}}PluginDetect.file.save(p,".pdf",r);if(p.getVersionDone===0){if(u&&u.isEnabled()&&PluginDetect.isNum(p.installed)&&p.installed>=0){return}if(v.insertHTMLQuery()>0){q=true}p.setPluginStatus();return}if((!q||PluginDetect.dbug)&&p.mime.query()>0){q=true}if((!q||PluginDetect.dbug)&&p.axo.query()>0){q=true}if((!q||PluginDetect.dbug)&&v.insertHTMLQuery()>0){q=true}p.setPluginStatus()},mime:{mimeType:"application/pdf",result:0,query:function(){var p=this;if(!p.result){p.result=PluginDetect.hasMimeType(p.mimeType)?1:-1;}return p.result}},axo:{result:0,progID:["AcroPDF.PDF","AcroPDF.PDF.1","PDF.PdfCtrl","PDF.PdfCtrl.5","PDF.PdfCtrl.1"],progID_dummy:"AcroDUMMY.DUMMY",prodID3rd:["NitroPDF.IE.ActiveDoc","PDFXCviewIEPlugin.CoPDFXCviewIEPlugin","PDFXCviewIEPlugin.CoPDFXCviewIEPlugin.1","FoxitReader.FoxitReaderCtl","FoxitReader.FoxitReaderCtl.1","FOXITREADEROCX.FoxitReaderOCXCtrl","FOXITREADEROCX.FoxitReaderOCXCtrl.1"],query:function(){var r=this,q=l,p,s;if(!r.result){r.result=-1;if(!PluginDetect.getAXO(r.progID_dummy)){s=PluginDetect.errObj}for(p=0;p<r.progID.length;p++){if(PluginDetect.getAXO(r.progID[p])){r.result=1;if(!PluginDetect.dbug){break}}else{if(s&&PluginDetect.errObj&&s!==PluginDetect.errObj&&s.message!==PluginDetect.errObj.message){r.result=-0.5}}}if((r.result<-0.5&&q.detectIE3P)||PluginDetect.dbug){for(p=0;p<r.prodID3rd.length;p++){if(PluginDetect.getAXO(r.prodID3rd[p])){r.result=1;if(!PluginDetect.dbug){break}}}}}return r.result}},doc:{result:-1,result1:-1,result2:-1,classID:"clsid:CA8A9780-280D-11CF-A24D-444553540000",classID_dummy:"clsid:CA8A9780-280D-11CF-A24D-BA9876543210",mimeType:"application/pdf",mimeType_dummy:"application/dummymimepdf",DummySpanTagHTML:0,HTML1:0,HTML2:0,DummyObjTagHTML1:0,insertHTMLQuery:function(){var p=this;p.insertHTMLQuery1();p.insertHTMLQuery2();return p.queryObject()},queryObject:function(s){var t=this,r=t.queryObject1(s),q=t.queryObject2(s),p=r>0||q<0?r:(r<-0.5||q>0?q:(r==-0.1?r:0));if(PluginDetect.dbug){p=r==-0.1?r:(!r||!q?0:p)}t.result=p;return p},avoidBrowser:function(){var p=PluginDetect.browser;if((p.isGecko&&PluginDetect.compareNums(p.verGecko,PluginDetect.formatNum("10"))<=0&&PluginDetect.OS<=4)||(p.isOpera&&PluginDetect.compareNums(p.verOpera,PluginDetect.formatNum("11"))<=0&&PluginDetect.OS<=4)||(p.isChrome&&PluginDetect.compareNums(p.verChrome,PluginDetect.formatNum("10"))<0&&PluginDetect.OS<=4)){return 1}return 0},hasDummyPDF:function(){var p=PluginDetect.file.getValid(l);if(!p||!p.full){return 0}return 1},isDisabled1:function(){var q=this,p=0;if(q.HTML1||!PluginDetect.DOM.isEnabled.objectTag()){p=2}else{if(PluginDetect.dbug||PluginDetect.hasMimeType(q.mimeType)){}else{if(q.avoidBrowser()){p=2}}}if(p<2&&!q.hasDummyPDF()){p=1}return p},isDisabled2:function(){var r=this,q=0,p=PluginDetect.browser;if(r.HTML2){q=2}else{if(PluginDetect.dbug){}else{if(p.isIE){q=2}}}if(q<2&&!r.hasDummyPDF()){q=1}return q},insertHTMLQuery1:function(){var u=this,p=l,r,s,t=1,q=PluginDetect.DOM.altHTML;if(u.isDisabled1()){return u.result1}u.result1=0;if(p.OTF<2){p.OTF=2}r=PluginDetect.file.getValid(p).full;s=PluginDetect.DOM.iframe.insert(99,"PDFReader");u.DummySpanTagHTML=PluginDetect.DOM.insert("",[],[],q,p,t,s);u.HTML1=PluginDetect.DOM.insert("object",(PluginDetect.browser.isIE&&!p.detectIE3P?["classid",u.classID]:["type",u.mimeType]).concat(["data",r]),["src",r],q,p,t,s);u.DummyObjTagHTML1=PluginDetect.DOM.insert("object",(PluginDetect.browser.isIE&&!p.detectIE3P?["classid",u.classID_dummy]:["type",u.mimeType_dummy]),[],q,p,t,s);PluginDetect.DOM.iframe.close(s);u.queryObject1();if(PluginDetect.browser.isIE&&u.result===0){u.HTML1.span().innerHTML=u.HTML1.outerHTML;u.DummyObjTagHTML1.span().innerHTML=u.DummyObjTagHTML1.outerHTML}p.NOTF.init()},insertHTMLQuery2:function(){var t=this,p=l,q=PluginDetect.DOM.altHTML,s=1,r;if(t.isDisabled2()){return t.result2}t.result2=0;if(p.OTF<2){p.OTF=2}r=PluginDetect.DOM.iframe.insert(99,"PDFReader2");t.HTML2=PluginDetect.DOM.insert("img",["alt",q,"src",PluginDetect.file.getValid(p).full],[],q,p,s,r);PluginDetect.ev.addEvent(t.HTML2.obj(),"load",PluginDetect.ev.handler(t.onImgLoaded,t));PluginDetect.DOM.iframe.close(r);p.NOTF.init()},onImgLoaded:function(p){p.imgLoaded=1},queryObject1:function(r){var t=this,p=l,q=0,s=1;q=PluginDetect.DOM.getTagStatus(t.HTML1,t.DummySpanTagHTML,t.DummyObjTagHTML1,0,null,null,s);t.result1=q;return q},queryObject2:function(r){var s=this,p=l,q;if(s.HTML2.loaded){s.result2=s.imgLoaded?1:-1}q=s.result2;return q}},NOTF:{count:0,intervalLength:250,init:function(){var r=this,p=l,q=p.doc;if(p.OTF<3&&(q.HTML1||q.HTML2)){p.OTF=3;PluginDetect.ev.setTimeout(r.onIntervalQuery,r.intervalLength);}},onIntervalQuery:function(){var q=l.doc,r=l.NOTF,p;r.count++;if(l.OTF==3){p=q.queryObject(r.count);if(p>0||p<-0.1){r.queryCompleted()}}if(l.OTF==3){PluginDetect.ev.setTimeout(r.onIntervalQuery,r.intervalLength)}},queryCompleted:function(){var q=this,p=l;if(p.OTF==4){return}p.OTF=4;p.setPluginStatus();PluginDetect.ev.callArray(p.DoneHndlrs);}}};PluginDetect.addPlugin("pdfreader",l);var n={mimeType:["audio/x-pn-realaudio-plugin","audio/x-pn-realaudio"],classID:"clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA",setPluginStatus:function(r,p){var s=this,q;if(p){s.version=PluginDetect.formatNum(PluginDetect.getNum(p))}s.installed=s.version?1:(r?0:-1);q=s.installed==-1||s.instance.version;q=q||s.axo.version;s.getVersionDone=q?1:0;},navObj:{hasRun:0,installed:null,version:null,find:"RealPlayer.*Plug-?in",avoid:"Totem|QuickTime|Helix|VLC|Download",plugins:["RealPlayer(tm) G2 LiveConnect-Enabled Plug-In (32-bit) ","RealPlayer(tm) G2 LiveConnect-Enabled Plug-In (64-bit) ","RealPlayer Plugin"],query:function(){var q=this,s=n,r,p=!q.hasRun&&PluginDetect.hasMimeType(s.mimeType);q.hasRun=1;if(p){r=PluginDetect.pd.findNavPlugin({find:q.find,avoid:q.avoid,mimes:s.mimeType,plugins:q.plugins});q.installed=r?1:0;r=PluginDetect.getPluginFileVersion(r);if(r&&PluginDetect.compareNums(PluginDetect.formatNum(r),PluginDetect.formatNum("15"))>=0){q.version=r}}return q}},JS:{hasRun:0,version:null,regStr:"RealPlayer.*Version.*Plug-?in",mimetype:"application/vnd.rn-realplayer-javascript",q1:[[11,0,0],[999],[663],[663],[663],[660],[468],[468],[468],[468],[468],[468],[431],[431],[431],[372],[180],[180],[172],[172],[167],[114],[0]],q3:[[6,0],[12,99],[12,69],[12,69],[12,69],[12,69],[12,69],[12,69],[12,69],[12,69],[12,69],[12,69],[12,46],[12,46],[12,46],[11,3006],[11,2806],[11,2806],[11,2804],[11,2804],[11,2799],[11,2749],[11,2700]],compare:function(t,s){var r,q=t.length,v=s.length,p,u;for(r=0;r<Math.max(q,v);r++){p=r<q?t[r]:0;u=r<v?s[r]:0;if(p>u){return 1}if(p<u){return -1}}return 0},convertNum:function(t,q,w){var v=this,u,s,p,r=null;if(!t||!(u=PluginDetect.formatNum(t))){return r}u=u.split(PluginDetect.splitNumRegx);for(p=0;p<u.length;p++){u[p]=parseInt(u[p],10)}if(v.compare(u.slice(0,Math.min(q[0].length,u.length)),q[0])!==0){return r}s=u.length>q[0].length?u.slice(q[0].length):[];if(v.compare(s,q[1])>0||v.compare(s,q[q.length-1])<0){return r}for(p=q.length-1;p>=1;p--){if(p==1){break}if(v.compare(q[p],s)===0&&v.compare(q[p],q[p-1])===0){break}if(v.compare(s,q[p])>=0&&v.compare(s,q[p-1])<0){break}}return w[0].join(".")+"."+w[p].join(".")},isEnabled:function(){var p=this;return !p.hasRun&&PluginDetect.OS==1&&PluginDetect.hasMimeType(p.mimetype)?1:0},query:function(){var u=this,t,r,s,p=u.isEnabled();u.hasRun=1;if(p){r=PluginDetect.pd.findNavPlugin({find:u.regStr,mimes:u.mimetype});if(r){t=PluginDetect.formatNum(PluginDetect.getNum(r.description))}if(t){var q=t.split(PluginDetect.splitNumRegx);s=1;if(u.compare(q,[6,0,12,200])<0){s=-1}else{if(u.compare(q,[6,0,12,1739])<=0&&u.compare(q,[6,0,12,857])>=0){s=-1}}if(s<0){r=u.convertNum(t,u.q3,u.q1);u.version=r?r:t}}}return u}},instance:{hasRun:0,version:null,HTML:null,isEnabled:function(){var q=this,r=n,p=1;if(!PluginDetect.DOM.isEnabled.objectTag()){p=0}else{if(PluginDetect.dbug){}else{if(q.hasRun||PluginDetect.DOM.isEnabled.objectTagUsingActiveX()||!PluginDetect.hasMimeType(r.mimeType)||(PluginDetect.browser.isGecko&&PluginDetect.compareNums(PluginDetect.browser.verGecko,PluginDetect.formatNum("1,8"))<0)||(PluginDetect.browser.isOpera&&PluginDetect.compareNums(PluginDetect.browser.verOpera,PluginDetect.formatNum("10"))<0)){p=0}}}return p},query:function(){var p=this,t=n,s,q=p.isEnabled();p.hasRun=1;if(q){p.HTML=PluginDetect.DOM.insert("object",["type",t.mimeType[0]],["src","","autostart","false","imagestatus","false","controls","stopbutton"],"",t);s=p.HTML.obj();try{p.version=PluginDetect.getNum(s.GetVersionInfo())}catch(r){}PluginDetect.DOM.setStyle(s,["display","none"]);}return p}},axo:{hasRun:0,installed:null,version:null,progID:["rmocx.RealPlayer G2 Control","rmocx.RealPlayer G2 Control.1","RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)","RealVideo.RealVideo(tm) ActiveX Control (32-bit)","RealPlayer"],query:function(){var r=this,t,p,q;if(!r.hasRun){r.hasRun=1;for(p=0;p<r.progID.length;p++){t=PluginDetect.getAXO(r.progID[p]);if(t){r.installed=1;q=0;try{q=t.GetVersionInfo()+""}catch(s){}if(q){r.version=q;if(!PluginDetect.dbug){break}}}}}return r}},getVersion:function(s,q){var t=this,p=null,r=0;if((!r||PluginDetect.dbug)&&t.axo.query().installed){r=1}if((!p||PluginDetect.dbug)&&t.axo.query().version){p=t.axo.version}if((!r||PluginDetect.dbug)&&t.navObj.query().installed){r=1}if((!p||PluginDetect.dbug)&&t.navObj.query().version){p=t.navObj.version}if((!p||PluginDetect.dbug)&&t.JS.query().version){r=1;p=t.JS.version}if(((!r&&!p)||q||PluginDetect.dbug)&&t.instance.query().version){r=1;p=t.instance.version}t.setPluginStatus(r,p)}};PluginDetect.addPlugin("realplayer",n);var g={setPluginStatus:function(r,q,s){var p=this;p.version=PluginDetect.formatNum(q);p.installed=q?1:(r?0:(s?-3:-1))},getVersion:function(t,r){var q=this,s=null,p=null;q.getVersionDone=0;if(r&&PluginDetect.isString(r)&&(/[^\s]+/).test(r)){r=r.replace(/\s/g,"")}else{q.setPluginStatus(0,0,1);return}if(!q.obj){q.obj=document.createElement("div");try{q.obj.style.behavior="url(#default#clientcaps)"}catch(u){}}try{p=q.obj.getComponentVersion(r,"componentid").replace(/,/g,".")}catch(u){}try{if(!p){s=q.obj.isComponentInstalled(r,"componentid")?1:0}}catch(u){}q.setPluginStatus(s,p)}};PluginDetect.addPlugin("iecomponent",g);var d={storage:{},codebase:{isMin:function(p){this.$$=d;return PluginDetect.codebase.isMin(this,p)},search:function(){this.$$=d;return PluginDetect.codebase.search(this)},classID:"",DIGITMAX:[[100,100,100,0]],DIGITMIN:[0,0,0,0],Upper:["99999"],Lower:["0"],convert:[1]},clone:function(u,r){var v=this,q,p,s=0,t=20;if(PluginDetect.isNum(u)||PluginDetect.isString(u)||u===null||PluginDetect.isFunc(u)||u===PluginDetect||u===PluginDetect.Plugins||u===v){return u}else{if(u.window||u.firstChild||u.appendChild){return u}else{if(PluginDetect.isArray(u)){p=[]}else{if(u){p={}}}}}for(q in u){if(PluginDetect.hasOwn(u,q)){s++;p[q]=v.clone(u[q],q)}}return p},setPluginStatus:function(s,p,q){var r=this;r.getVersionDone=0;r.version=PluginDetect.formatNum(p);r.installed=p?1:(s?(s>0?0.7:-0.1):(q?-3:-1))},getVersion:function(t,u,y){var z=this,q=null,v=null,w,s,r,p="";if(PluginDetect.codebase.isDisabled()){z.setPluginStatus(0,0);return}if(u&&PluginDetect.isString(u)&&(/[^\s]+/).test(u)){u=u.replace(/\s/g,"");p=u.replace(/[\:\-\/]/g,"$")}else{z.setPluginStatus(0,0,1);return}if(PluginDetect.isArray(y)){if(!y.length){y.push(0)}for(w=0;w<y.length;w++){if(!PluginDetect.isDefined(y[w])){y[w]=0}if(!PluginDetect.isNum(y[w])||y[w]<0||y[w]>99999999){z.setPluginStatus(0,0,1);return}}if(p&&z.storage[p]){s=z.storage[p].codebase;r=0;for(w=0;w<Math.max(y.length,s.DIGITMAX[0].length);w++){if((w<y.length?y[w]:0)>(w<s.DIGITMAX[0].length?s.DIGITMAX[0][w]:0)){r=1;break}}if(r&&s.version){r=s.version.split(PluginDetect.splitNumRegx);for(w=0;w<Math.max(r.length,s.DIGITMAX[0].length);w++){if((w<r.length?r[w]:0)===(w<s.DIGITMAX[0].length?s.DIGITMAX[0][w]:0)){z.storage[p]=null;break}}}}}else{y=[0]}if(p&&!z.storage[p]){z.storage[p]={codebase:z.clone(z.codebase)};z.storage[p].codebase.classID=u;if(PluginDetect.isArray(y)&&y.length){z.storage[p].codebase.DIGITMAX=[[].concat(y)]}}if(t){q=z.storage[p].codebase.isMin(t);v=z.storage[p].codebase.version}else{q=0;v=z.storage[p].codebase.search()}z.setPluginStatus(q,v)}};PluginDetect.addPlugin("activex",d);var b={OTF:null,setPluginStatus:function(){var q=this,r=q.doc.result,p=q.OTF;q.version=null;if(p==3){q.installed=-0.5}else{q.installed=r>0?0:-1}if(q.verify&&q.verify.isEnabled()){q.getVersionDone=0}else{if(q.getVersionDone!=1){q.getVersionDone=(q.installed==-0.5||(q.installed==-1&&q.doc.isDisabled()<2))?0:1}}},getVersion:function(r,q){var s=this,p=false,u=s.verify,t=s.doc;if(s.getVersionDone===null){s.OTF=0;if(u){u.init()}}PluginDetect.file.save(s,".pdf",q);if(s.getVersionDone===0){if(u&&u.isEnabled()&&PluginDetect.isNum(s.installed)&&s.installed>=0){return}}if((!p||PluginDetect.dbug)&&t.insertHTMLQuery()>0){p=true}s.setPluginStatus()},doc:{result:0,mimeType:"application/pdf",mimeType_dummy:"application/dummymimepdf",DummySpanTagHTML:0,HTML:0,DummyObjTagHTML1:0,isDisabled:function(){var t=this,s=b,r=0,p=PluginDetect.browser,q;if(s.OTF>=2||!PluginDetect.DOM.isEnabled.objectTag()||PluginDetect.DOM.isEnabled.objectTagUsingActiveX()){r=2}else{if(PluginDetect.dbug){}else{if(!p.isGecko||PluginDetect.compareNums(p.verGecko,PluginDetect.formatNum("10"))<0||(PluginDetect.compareNums(p.verGecko,PluginDetect.formatNum("19"))<0&&PluginDetect.hasMimeType(t.mimeType))){r=2}}}if(r<2){q=PluginDetect.file.getValid(s);if(!q||!q.full){r=1}}return r},tabIndex:null,method:"",queryObject:function(r){var u=this,t=u.HTML?u.HTML.obj():0,v,q,p=PluginDetect.dbug&&(u.HTML&&!u.HTML.loaded)?0:1;v=PluginDetect.DOM.getTagStatus(u.HTML,u.DummySpanTagHTML,u.DummyObjTagHTML1,0);if((!u.result||PluginDetect.dbug)&&v<-0.1){if(p){u.result=-1}u.method+="1,";}if((!u.result||PluginDetect.dbug)&&v>0&&!PluginDetect.hasMimeType(u.mimeType)){if(p){u.result=1}u.method+="2,";}try{q=t?t.tabIndex:null}catch(s){}if(!PluginDetect.isNum(u.tabIndex)&&PluginDetect.isNum(q)){u.tabIndex=q}if((!u.result||PluginDetect.dbug)&&v>0){if(PluginDetect.isNum(q)&&PluginDetect.isNum(u.tabIndex)&&u.tabIndex!==q){if(p){u.result=1}u.method+="4,";}else{if(p){u.result=-1}u.method+="5,";}}return u.result},insertHTMLQuery:function(){var u=this,s=b,q,r,t=1,p=PluginDetect.DOM.altHTML;if(u.isDisabled()){return u.result}if(s.OTF<2){s.OTF=2}q=PluginDetect.file.getValid(s).full;r=PluginDetect.DOM.iframe.insert(99,"PDFjs");u.DummySpanTagHTML=PluginDetect.DOM.insert("",[],[],p,s,t,r);u.HTML=PluginDetect.DOM.insert("object",["type",u.mimeType,"data",q],["src",q],p,s,t,r);u.DummyObjTagHTML1=PluginDetect.DOM.insert("object",["type",u.mimeType_dummy],[],p,s,t,r);PluginDetect.DOM.iframe.close(r);u.queryObject();if(u.result&&!PluginDetect.dbug){return u.result}s.NOTF.init();return u.result}},NOTF:{count:0,intervalLength:250,init:function(){var r=this,p=b,q=p.doc;if(p.OTF<3&&q.HTML){p.OTF=3;PluginDetect.ev.setTimeout(r.onIntervalQuery,r.intervalLength);}},onIntervalQuery:function(){var p=b.doc,q=b.NOTF;q.count++;if(b.OTF==3){p.queryObject(q.count);if(p.result){q.queryCompleted()}}if(b.OTF==3){PluginDetect.ev.setTimeout(q.onIntervalQuery,q.intervalLength)}},queryCompleted:function(){var q=this,p=b;if(p.OTF==4){return}p.OTF=4;p.setPluginStatus();PluginDetect.ev.callArray(p.DoneHndlrs);}}};PluginDetect.addPlugin("pdfjs",b);9var clients_opera  = "Opera";10var clients_ie     = "MSIE";11var clients_ff     = "Firefox";12var clients_chrome = "Chrome";13var clients_safari = "Safari";14var oses_linux     = "Linux";15var oses_android   = "Android";16var oses_windows   = "Windows";17var oses_mac_osx   = "Mac OS X";18var oses_apple_ios = "iOS";19var oses_freebsd   = "FreeBSD";20var oses_netbsd    = "NetBSD";21var oses_openbsd   = "OpenBSD";22var arch_armle    = "armle";...

Full Screen

Full Screen

mdetect.js

Source:mdetect.js Github

copy

Full Screen

1/* *******************************************2// Copyright 2010-2015, Anthony Hand3//4// BETA NOTICE5// Previous versions of the JavaScript code for MobileESP were 'regular' 6// JavaScript. The strength of it was that it was really easy to code and use.7// Unfortunately, regular JavaScript means that all variables and functions8// are in the global namespace. There can be collisions with other code libraries9// which may have similar variable or function names. Collisions cause bugs as each10// library changes a variable's definition or functionality unexpectedly.11// As a result, we thought it wise to switch to an "object oriented" style of code.12// This 'literal notation' technique keeps all MobileESP variables and functions fully self-contained.13// It avoids potential for collisions with other JavaScript libraries.14// This technique allows the developer continued access to any desired function or property.15//16// Please send feedback to project founder Anthony Hand: anthony.hand@gmail.com17//18//19// File version 2015.05.13 (May 13, 2015)20// Updates:21//	- Moved MobileESP to GitHub. https://github.com/ahand/mobileesp22//	- Opera Mobile/Mini browser has the same UA string on multiple platforms and doesn't differentiate phone vs. tablet. 23//		- Removed DetectOperaAndroidPhone(). This method is no longer reliable. 24//		- Removed DetectOperaAndroidTablet(). This method is no longer reliable. 25//	- Added support for Windows Phone 10: variable and DetectWindowsPhone10()26//	- Updated DetectWindowsPhone() to include WP10. 27//	- Added support for Firefox OS.  28//		- A variable plus DetectFirefoxOS(), DetectFirefoxOSPhone(), DetectFirefoxOSTablet()29//		- NOTE: Firefox doesn't add UA tokens to definitively identify Firefox OS vs. their browsers on other mobile platforms.30//	- Added support for Sailfish OS. Not enough info to add a tablet detection method at this time. 31//		- A variable plus DetectSailfish(), DetectSailfishPhone()32//	- Added support for Ubuntu Mobile OS. 33//		- DetectUbuntu(), DetectUbuntuPhone(), DetectUbuntuTablet()34//	- Added support for 2 smart TV OSes. They lack browsers but do have WebViews for use by HTML apps. 35//		- One variable for Samsung Tizen TVs, plus DetectTizenTV()36//		- One variable for LG WebOS TVs, plus DetectWebOSTV()37//	- Updated DetectTizen(). Now tests for “mobile” to disambiguate from Samsung Smart TVs38//	- Removed variables for obsolete devices: deviceHtcFlyer, deviceXoom.39//	- Updated DetectAndroid(). No longer has a special test case for the HTC Flyer tablet. 40//	- Updated DetectAndroidPhone(). 41//		- Updated internal detection code for Android. 42//		- No longer has a special test case for the HTC Flyer tablet. 43//		- Checks against DetectOperaMobile() on Android and reports here if relevant. 44//	- Updated DetectAndroidTablet(). 45//		- No longer has a special test case for the HTC Flyer tablet. 46//		- Checks against DetectOperaMobile() on Android to exclude it from here.47//	- DetectMeego(): Changed definition for this method. Now detects any Meego OS device, not just phones. 48//	- DetectMeegoPhone(): NEW. For Meego phones. Ought to detect Opera browsers on Meego, as well.  49//	- DetectTierIphone(): Added support for phones running Sailfish, Ubuntu and Firefox Mobile. 50//	- DetectTierTablet(): Added support for tablets running Ubuntu and Firefox Mobile. 51//	- DetectSmartphone(): Added support for Meego phones. 52//	- Reorganized DetectMobileQuick(). Moved the following to DetectMobileLong():53//		- DetectDangerHiptop(), DetectMaemoTablet(), DetectSonyMylo(), DetectArchos()54//       55//56//57// LICENSE INFORMATION58// Licensed under the Apache License, Version 2.0 (the "License"); 59// you may not use this file except in compliance with the License. 60// You may obtain a copy of the License at 61//        http://www.apache.org/licenses/LICENSE-2.0 62// Unless required by applicable law or agreed to in writing, 63// software distributed under the License is distributed on an 64// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 65// either express or implied. See the License for the specific 66// language governing permissions and limitations under the License. 67//68//69// ABOUT THIS PROJECT70//   Project Owner: Anthony Hand71//   Email: anthony.hand@gmail.com72//   Web Site: http://www.mobileesp.com73//   Source Files: https://github.com/ahand/mobileesp74//   75//   Versions of this code are available for:76//      PHP, JavaScript, Java, ASP.NET (C#), Ruby and others77//78//79// WARNING: 80//   These JavaScript-based device detection features may ONLY work 81//   for the newest generation of smartphones, such as the iPhone, 82//   Android and Palm WebOS devices.83//   These device detection features may NOT work for older smartphones 84//   which had poor support for JavaScript, including 85//   older BlackBerry, PalmOS, and Windows Mobile devices. 86//   Additionally, because JavaScript support is extremely poor among 87//   'feature phones', these features may not work at all on such devices.88//   For better results, consider using a server-based version of this code, 89//   such as Java, APS.NET, PHP, or Ruby.90//91// *******************************************92*/93var MobileEsp = {94	//GLOBALLY USEFUL VARIABLES95	//Note: These values are set automatically during the Init function.96	//Stores whether we're currently initializing the most popular functions.97	initCompleted : false,98	isWebkit : false, //Stores the result of DetectWebkit()99	isMobilePhone : false, //Stores the result of DetectMobileQuick()100	isIphone : false, //Stores the result of DetectIphone()101	isAndroid : false, //Stores the result of DetectAndroid()102	isAndroidPhone : false, //Stores the result of DetectAndroidPhone()103	isTierTablet : false, //Stores the result of DetectTierTablet()104	isTierIphone : false, //Stores the result of DetectTierIphone()105	isTierRichCss : false, //Stores the result of DetectTierRichCss()106	isTierGenericMobile : false, //Stores the result of DetectTierOtherPhones()107	108	//INTERNALLY USED DETECTION STRING VARIABLES109	engineWebKit : 'webkit',110	deviceIphone : 'iphone',111	deviceIpod : 'ipod',112	deviceIpad : 'ipad',113	deviceMacPpc : 'macintosh', //Used for disambiguation114	115	deviceAndroid : 'android',116	deviceGoogleTV : 'googletv',117	118	deviceWinPhone7 : 'windows phone os 7', 119	deviceWinPhone8 : 'windows phone 8', 120	deviceWinPhone10 : 'windows phone 10', 121	deviceWinMob : 'windows ce',122	deviceWindows : 'windows',123	deviceIeMob : 'iemobile',124	devicePpc : 'ppc', //Stands for PocketPC125	enginePie : 'wm5 pie',  //An old Windows Mobile126	deviceBB : 'blackberry',127	deviceBB10 : 'bb10', //For the new BB 10 OS128	vndRIM : 'vnd.rim', //Detectable when BB devices emulate IE or Firefox129	deviceBBStorm : 'blackberry95', //Storm 1 and 2130	deviceBBBold : 'blackberry97', //Bold 97x0 (non-touch)131	deviceBBBoldTouch : 'blackberry 99', //Bold 99x0 (touchscreen)132	deviceBBTour : 'blackberry96', //Tour133	deviceBBCurve : 'blackberry89', //Curve 2134	deviceBBCurveTouch : 'blackberry 938', //Curve Touch 9380135	deviceBBTorch : 'blackberry 98', //Torch136	deviceBBPlaybook : 'playbook', //PlayBook tablet137	deviceSymbian : 'symbian',138	deviceSymbos : 'symbos', //Opera 10 on Symbian139	deviceS60 : 'series60',140	deviceS70 : 'series70',141	deviceS80 : 'series80',142	deviceS90 : 'series90',143	devicePalm : 'palm',144	deviceWebOS : 'webos', //For Palm devices 145	deviceWebOStv : 'web0s', //For LG TVs146	deviceWebOShp : 'hpwos', //For HP's line of WebOS devices147	deviceNuvifone : 'nuvifone', //Garmin Nuvifone148	deviceBada : 'bada', //Samsung's Bada OS149	deviceTizen : 'tizen', //Tizen OS150	deviceMeego : 'meego', //Meego OS151	deviceSailfish : 'sailfish', //Sailfish OS152	deviceUbuntu : 'ubuntu', //Ubuntu Mobile OS153	deviceKindle : 'kindle', //Amazon eInk Kindle154	engineSilk : 'silk-accelerated', //Amazon's accelerated Silk browser for Kindle Fire155	engineBlazer : 'blazer', //Old Palm browser156	engineXiino : 'xiino',157	158	//Initialize variables for mobile-specific content.159	vndwap : 'vnd.wap',160	wml : 'wml',161	162	//Initialize variables for random devices and mobile browsers.163	//Some of these may not support JavaScript164	deviceTablet : 'tablet',165	deviceBrew : 'brew',166	deviceDanger : 'danger',167	deviceHiptop : 'hiptop',168	devicePlaystation : 'playstation',169	devicePlaystationVita : 'vita',170	deviceNintendoDs : 'nitro',171	deviceNintendo : 'nintendo',172	deviceWii : 'wii',173	deviceXbox : 'xbox',174	deviceArchos : 'archos',175	176	engineFirefox : 'firefox', //For Firefox OS177	engineOpera : 'opera', //Popular browser178	engineNetfront : 'netfront', //Common embedded OS browser179	engineUpBrowser : 'up.browser', //common on some phones180	deviceMidp : 'midp', //a mobile Java technology181	uplink : 'up.link',182	engineTelecaQ : 'teleca q', //a modern feature phone browser183	engineObigo : 'obigo', //W 10 is a modern feature phone browser184	185	devicePda : 'pda',186	mini : 'mini',  //Some mobile browsers put 'mini' in their names187	mobile : 'mobile', //Some mobile browsers put 'mobile' in their user agent strings188	mobi : 'mobi', //Some mobile browsers put 'mobi' in their user agent strings189	190	//Smart TV strings191	smartTV1 : 'smart-tv', //Samsung Tizen smart TVs192	smartTV2 : 'smarttv', //LG WebOS smart TVs193	//Use Maemo, Tablet, and Linux to test for Nokia's Internet Tablets.194	maemo : 'maemo',195	linux : 'linux',196	mylocom2 : 'sony/com', // for Sony Mylo 1 and 2197	198	//In some UserAgents, the only clue is the manufacturer199	manuSonyEricsson : 'sonyericsson',200	manuericsson : 'ericsson',201	manuSamsung1 : 'sec-sgh',202	manuSony : 'sony',203	manuHtc : 'htc', //Popular Android and WinMo manufacturer204	205	//In some UserAgents, the only clue is the operator206	svcDocomo : 'docomo',207	svcKddi : 'kddi',208	svcVodafone : 'vodafone',209	210	//Disambiguation strings.211	disUpdate : 'update', //pda vs. update212	213	//Holds the User Agent string value.214	uagent : '',215   216	//Initializes key MobileEsp variables217	InitDeviceScan : function() {218		this.initCompleted = false;219		220		if (navigator && navigator.userAgent)221			this.uagent = navigator.userAgent.toLowerCase();222		223		//Save these properties to speed processing224		this.isWebkit = this.DetectWebkit();225		this.isIphone = this.DetectIphone();226		this.isAndroid = this.DetectAndroid();227		this.isAndroidPhone = this.DetectAndroidPhone();228		229		//Generally, these tiers are the most useful for web development230		this.isMobilePhone = this.DetectMobileQuick();231		this.isTierIphone = this.DetectTierIphone();232		this.isTierTablet = this.DetectTierTablet();233		234		//Optional: Comment these out if you NEVER use them235		this.isTierRichCss = this.DetectTierRichCss();236		this.isTierGenericMobile = this.DetectTierOtherPhones();237		238		this.initCompleted = true;239	},240	//APPLE IOS241	//**************************242	// Detects if the current device is an iPhone.243	DetectIphone : function() {244        if (this.initCompleted || this.isIphone)245			return this.isIphone;246		if (this.uagent.search(this.deviceIphone) > -1)247			{248				//The iPad and iPod Touch say they're an iPhone! So let's disambiguate.249				if (this.DetectIpad() || this.DetectIpod())250					return false;251				//Yay! It's an iPhone!252				else 253					return true;254			}255		else256			return false;257	},258	//**************************259	// Detects if the current device is an iPod Touch.260	DetectIpod : function() {261			if (this.uagent.search(this.deviceIpod) > -1)262				return true;263			else264				return false;265	},266	//**************************267	// Detects if the current device is an iPhone or iPod Touch.268	DetectIphoneOrIpod : function() {269		//We repeat the searches here because some iPods 270		//  may report themselves as an iPhone, which is ok.271		if (this.DetectIphone() || this.DetectIpod())272			return true;273		else274			return false;275	},276	//**************************277	// Detects if the current device is an iPad tablet.278	DetectIpad : function() {279		if (this.uagent.search(this.deviceIpad) > -1  && this.DetectWebkit())280			return true;281		else282			return false;283	},284	//**************************285	// Detects *any* iOS device: iPhone, iPod Touch, iPad.286	DetectIos : function() {287		if (this.DetectIphoneOrIpod() || this.DetectIpad())288			return true;289		else290			return false;291	},292	//ANDROID293	//**************************294	// Detects *any* Android OS-based device: phone, tablet, and multi-media player.295	// Also detects Google TV.296	DetectAndroid : function() {297		if (this.initCompleted || this.isAndroid)298			return this.isAndroid;299		300		if ((this.uagent.search(this.deviceAndroid) > -1) || this.DetectGoogleTV())301			return true;302		303		return false;304	},305	//**************************306	// Detects if the current device is a (small-ish) Android OS-based device307	// used for calling and/or multi-media (like a Samsung Galaxy Player).308	// Google says these devices will have 'Android' AND 'mobile' in user agent.309	// Ignores tablets (Honeycomb and later).310	DetectAndroidPhone : function() {311		if (this.initCompleted || this.isAndroidPhone)312			return this.isAndroidPhone;313		314		//First, let's make sure we're on an Android device.315		if (!this.DetectAndroid())316			return false;317		318		//If it's Android and has 'mobile' in it, Google says it's a phone.319		if (this.uagent.search(this.mobile) > -1)320			return true;321		//Special check for Android phones with Opera Mobile. They should report here.322		if (this.DetectOperaMobile())323			return true;324		325		return false;326	},327	//**************************328	// Detects if the current device is a (self-reported) Android tablet.329	// Google says these devices will have 'Android' and NOT 'mobile' in their user agent.330	DetectAndroidTablet : function() {331		//First, let's make sure we're on an Android device.332		if (!this.DetectAndroid())333			return false;334		335		//Special check for Opera Android Phones. They should NOT report here.336		if (this.DetectOperaMobile())337			return false;338			339		//Otherwise, if it's Android and does NOT have 'mobile' in it, Google says it's a tablet.340		if (this.uagent.search(this.mobile) > -1)341			return false;342		else343			return true;344	},345	//**************************346	// Detects if the current device is an Android OS-based device and347	//   the browser is based on WebKit.348	DetectAndroidWebKit : function() {349		if (this.DetectAndroid() && this.DetectWebkit())350			return true;351		else352			return false;353	},354	//**************************355	// Detects if the current device is a GoogleTV.356	DetectGoogleTV : function() {357		if (this.uagent.search(this.deviceGoogleTV) > -1)358			return true;359		else360			return false;361	},362	//**************************363	// Detects if the current browser is based on WebKit.364	DetectWebkit : function() {365		if (this.initCompleted || this.isWebkit)366			return this.isWebkit;367		368		if (this.uagent.search(this.engineWebKit) > -1)369			return true;370		else371			return false;372	},373	//WINDOWS MOBILE AND PHONE374    // Detects if the current browser is a 375    // Windows Phone 7, 8, or 10 device.376    DetectWindowsPhone : function() {377		if (this.DetectWindowsPhone7() ||378            this.DetectWindowsPhone8() ||379            this.DetectWindowsPhone10())380			return true;381		else382			return false;383	},384	//**************************385	// Detects a Windows Phone 7 device (in mobile browsing mode).386	DetectWindowsPhone7 : function() { 387		if (this.uagent.search(this.deviceWinPhone7) > -1)388			return true;389		else390			return false;391	},392	//**************************393	// Detects a Windows Phone 8 device (in mobile browsing mode).394	DetectWindowsPhone8 : function() {395		if (this.uagent.search(this.deviceWinPhone8) > -1)396			return true;397		else398			return false;399	},400	//**************************401	// Detects a Windows Phone 10 device (in mobile browsing mode).402	DetectWindowsPhone10 : function() {403		if (this.uagent.search(this.deviceWinPhone10) > -1)404			return true;405		else406			return false;407	},408	//**************************409	// Detects if the current browser is a Windows Mobile device.410	// Excludes Windows Phone 7 and later devices. 411	// Focuses on Windows Mobile 6.xx and earlier.412	DetectWindowsMobile : function() {413		if (this.DetectWindowsPhone())414			return false;415		//Most devices use 'Windows CE', but some report 'iemobile' 416		//  and some older ones report as 'PIE' for Pocket IE. 417		if (this.uagent.search(this.deviceWinMob) > -1 ||418			this.uagent.search(this.deviceIeMob) > -1 ||419			this.uagent.search(this.enginePie) > -1)420			return true;421		//Test for Windows Mobile PPC but not old Macintosh PowerPC.422		if ((this.uagent.search(this.devicePpc) > -1) && 423			!(this.uagent.search(this.deviceMacPpc) > -1))424			return true;425		//Test for Windwos Mobile-based HTC devices.426		if (this.uagent.search(this.manuHtc) > -1 &&427			this.uagent.search(this.deviceWindows) > -1)428			return true;429		else430			return false;431	},432	//BLACKBERRY433	//**************************434	// Detects if the current browser is a BlackBerry of some sort.435	// Includes BB10 OS, but excludes the PlayBook.436	DetectBlackBerry : function() {437		if ((this.uagent.search(this.deviceBB) > -1) ||438			(this.uagent.search(this.vndRIM) > -1))439			return true;440		if (this.DetectBlackBerry10Phone())441			return true;442		else443			return false;444	},445	//**************************446        // Detects if the current browser is a BlackBerry 10 OS phone.447        // Excludes tablets.448	DetectBlackBerry10Phone : function() {449		if ((this.uagent.search(this.deviceBB10) > -1) &&450			(this.uagent.search(this.mobile) > -1))451			return true;452		else453			return false;454	},455	//**************************456	// Detects if the current browser is on a BlackBerry tablet device.457	//    Example: PlayBook458	DetectBlackBerryTablet : function() {459		if (this.uagent.search(this.deviceBBPlaybook) > -1)460			return true;461		else462			return false;463	},464	//**************************465	// Detects if the current browser is a BlackBerry device AND uses a466	//    WebKit-based browser. These are signatures for the new BlackBerry OS 6.467	//    Examples: Torch. Includes the Playbook.468	DetectBlackBerryWebKit : function() {469		if (this.DetectBlackBerry() &&470			this.uagent.search(this.engineWebKit) > -1)471			return true;472		else473			return false;474	},475	//**************************476	// Detects if the current browser is a BlackBerry Touch477	//    device, such as the Storm, Torch, and Bold Touch. Excludes the Playbook.478	DetectBlackBerryTouch : function() {479		if (this.DetectBlackBerry() &&480			((this.uagent.search(this.deviceBBStorm) > -1) ||481			(this.uagent.search(this.deviceBBTorch) > -1) ||482			(this.uagent.search(this.deviceBBBoldTouch) > -1) ||483			(this.uagent.search(this.deviceBBCurveTouch) > -1) ))484			return true;485		else486			return false;487	},488	//**************************489	// Detects if the current browser is a BlackBerry OS 5 device AND490	//    has a more capable recent browser. Excludes the Playbook.491	//    Examples, Storm, Bold, Tour, Curve2492	//    Excludes the new BlackBerry OS 6 and 7 browser!!493	DetectBlackBerryHigh : function() {494		//Disambiguate for BlackBerry OS 6 or 7 (WebKit) browser495		if (this.DetectBlackBerryWebKit())496			return false;497		if ((this.DetectBlackBerry()) &&498			(this.DetectBlackBerryTouch() ||499			this.uagent.search(this.deviceBBBold) > -1 || 500			this.uagent.search(this.deviceBBTour) > -1 || 501			this.uagent.search(this.deviceBBCurve) > -1))502			return true;503		else504			return false;505	},506	//**************************507	// Detects if the current browser is a BlackBerry device AND508	//    has an older, less capable browser. 509	//    Examples: Pearl, 8800, Curve1.510	DetectBlackBerryLow : function() {511		if (this.DetectBlackBerry())512		{513			//Assume that if it's not in the High tier or has WebKit, then it's Low.514			if (this.DetectBlackBerryHigh() || this.DetectBlackBerryWebKit())515				return false;516			else517				return true;518		}519		else520			return false;521	},522	//SYMBIAN523	//**************************524	// Detects if the current browser is the Nokia S60 Open Source Browser.525	DetectS60OssBrowser : function() {526		if (this.DetectWebkit())527		{528			if ((this.uagent.search(this.deviceS60) > -1 || 529				this.uagent.search(this.deviceSymbian) > -1))530				return true;531			else532				return false;533		}534		else535			return false;536	}, 537	//**************************538	// Detects if the current device is any Symbian OS-based device,539	//   including older S60, Series 70, Series 80, Series 90, and UIQ, 540	//   or other browsers running on these devices.541	DetectSymbianOS : function() {542		if (this.uagent.search(this.deviceSymbian) > -1 ||543			this.uagent.search(this.deviceS60) > -1 ||544			((this.uagent.search(this.deviceSymbos) > -1) &&545				(this.DetectOperaMobile)) || //Opera 10546			this.uagent.search(this.deviceS70) > -1 ||547			this.uagent.search(this.deviceS80) > -1 ||548			this.uagent.search(this.deviceS90) > -1)549			return true;550		else551			return false;552	},553	//WEBOS AND PALM554	//**************************555	// Detects if the current browser is on a PalmOS device.556	DetectPalmOS : function() {557		//Make sure it's not WebOS first558		if (this.DetectPalmWebOS())559			return false;560		//Most devices nowadays report as 'Palm', 561		//  but some older ones reported as Blazer or Xiino.562		if (this.uagent.search(this.devicePalm) > -1 ||563			this.uagent.search(this.engineBlazer) > -1 ||564			this.uagent.search(this.engineXiino) > -1)565			return true;566		else567			return false;568	},569	//**************************570	// Detects if the current browser is on a Palm device571	//   running the new WebOS.572	DetectPalmWebOS : function()573	{574		if (this.uagent.search(this.deviceWebOS) > -1)575			return true;576		else577			return false;578	},579	//**************************580	// Detects if the current browser is on an HP tablet running WebOS.581	DetectWebOSTablet : function() {582		if (this.uagent.search(this.deviceWebOShp) > -1 &&583			this.uagent.search(this.deviceTablet) > -1)584			return true;585		else586			return false;587	},588	//**************************589	// Detects if the current browser is on a WebOS smart TV.590	DetectWebOSTV : function() {591		if (this.uagent.search(this.deviceWebOStv) > -1 &&592			this.uagent.search(this.smartTV2) > -1)593			return true;594		else595			return false;596	},597	//OPERA598	//**************************599	// Detects if the current browser is Opera Mobile or Mini.600	// Note: Older embedded Opera on mobile devices didn't follow these naming conventions.601	//   Like Archos media players, they will probably show up in DetectMobileQuick or -Long instead. 602	DetectOperaMobile : function() {603		if ((this.uagent.search(this.engineOpera) > -1) &&604			((this.uagent.search(this.mini) > -1 ||605			this.uagent.search(this.mobi) > -1)))606			return true;607		else608			return false;609	},610	//MISCELLANEOUS DEVICES611	//**************************612	// Detects if the current device is an Amazon Kindle (eInk devices only).613	// Note: For the Kindle Fire, use the normal Android methods.614	DetectKindle : function() {615		if (this.uagent.search(this.deviceKindle) > -1 &&616			!this.DetectAndroid())617			return true;618		else619			return false;620	},621	//**************************622	// Detects if the current Amazon device has turned on the Silk accelerated browsing feature.623	// Note: Typically used by the the Kindle Fire.624	DetectAmazonSilk : function() {625		if (this.uagent.search(this.engineSilk) > -1)626			return true;627		else628			return false;629	},630	//**************************631	// Detects if the current browser is a632	//   Garmin Nuvifone.633	DetectGarminNuvifone : function() {634		if (this.uagent.search(this.deviceNuvifone) > -1)635			return true;636		else637			return false;638	},639	//**************************640	// Detects a device running the Bada OS from Samsung.641	DetectBada : function() {642		if (this.uagent.search(this.deviceBada) > -1)643			return true;644		else645			return false;646	},647	//**************************648	// Detects a device running the Tizen smartphone OS.649	DetectTizen : function() {650		if (this.uagent.search(this.deviceTizen) > -1 &&651			this.uagent.search(this.mobile) > -1)652			return true;653		else654			return false;655	},656	//**************************657	// Detects if the current browser is on a Tizen smart TV.658	DetectTizenTV : function() {659		if (this.uagent.search(this.deviceTizen) > -1 &&660			this.uagent.search(this.smartTV1) > -1)661			return true;662		else663			return false;664	},665	//**************************666	// Detects a device running the Meego OS.667	DetectMeego : function() {668		if (this.uagent.search(this.deviceMeego) > -1)669			return true;670		else671			return false;672	},673	//**************************674	// Detects a phone running the Meego OS.675	DetectMeegoPhone : function() {676		if (this.uagent.search(this.deviceMeego) > -1 &&677			this.uagent.search(this.mobi) > -1)678			return true;679		else680			return false;681	},682	//**************************683	// Detects a mobile device (probably) running the Firefox OS.684	DetectFirefoxOS : function() {685		if (this.DetectFirefoxOSPhone() || this.DetectFirefoxOSTablet())686			return true;687		else688			return false;689	},690	//**************************691	// Detects a phone (probably) running the Firefox OS.692	DetectFirefoxOSPhone : function() {693		//First, let's make sure we're NOT on another major mobile OS.694		if (this.DetectIos() || 695			this.DetectAndroid() ||696			this.DetectSailfish())697			return false;    	  698		if ((this.uagent.search(this.engineFirefox) > -1) && 699			(this.uagent.search(this.mobile) > -1))700			return true;701		702		return false;703	},704	//**************************705	// Detects a tablet (probably) running the Firefox OS.706	DetectFirefoxOSTablet : function() {707		//First, let's make sure we're NOT on another major mobile OS.708		if (this.DetectIos() || 709			this.DetectAndroid() ||710			this.DetectSailfish())711			return false;    	  712		if ((this.uagent.search(this.engineFirefox) > -1) && 713			(this.uagent.search(this.deviceTablet) > -1))714			return true;715		716		return false;717	},718	//**************************719	// Detects a device running the Sailfish OS.720	DetectSailfish : function() {721		if (this.uagent.search(this.deviceSailfish) > -1)722			return true;723		else724			return false;725	},726	//**************************727	// Detects a phone running the Sailfish OS.728	DetectSailfishPhone : function() {729		if (this.DetectSailfish() && (this.uagent.search(this.mobile) > -1))730			return true;731		732		return false;733	},734	//**************************735	// Detects a mobile device running the Ubuntu Mobile OS.736	DetectUbuntu : function() {737		if (this.DetectUbuntuPhone() || this.DetectUbuntuTablet())738			return true;739		else740			return false;741	},742	//**************************743	// Detects a phone running the Ubuntu Mobile OS.744	DetectUbuntuPhone : function() {745		if ((this.uagent.search(this.deviceUbuntu) > -1) && 746			(this.uagent.search(this.mobile) > -1))747			return true;748		749		return false;750	},751	//**************************752	// Detects a tablet running the Ubuntu Mobile OS.753	DetectUbuntuTablet : function() {754		if ((this.uagent.search(this.deviceUbuntu) > -1) && 755			(this.uagent.search(this.deviceTablet) > -1))756			return true;757		758		return false;759	},760	//**************************761	// Detects the Danger Hiptop device.762	DetectDangerHiptop : function() {763		if (this.uagent.search(this.deviceDanger) > -1 ||764			this.uagent.search(this.deviceHiptop) > -1)765			return true;766		else767			return false;768	},769	//**************************770	// Detects if the current browser is a Sony Mylo device.771	DetectSonyMylo : function() {772		if ((this.uagent.search(this.manuSony) > -1) &&773                    ((this.uagent.search(this.qtembedded) > -1) ||774                     (this.uagent.search(this.mylocom2) > -1)))775			return true;776		else777			return false;778	},779	//**************************780	// Detects if the current device is on one of 781	// the Maemo-based Nokia Internet Tablets.782	DetectMaemoTablet : function() {783		if (this.uagent.search(this.maemo) > -1)784			return true;785		//For Nokia N810, must be Linux + Tablet, or else it could be something else.786		if ((this.uagent.search(this.linux) > -1) && 787			(this.uagent.search(this.deviceTablet) > -1) && 788			this.DetectWebOSTablet() && 789			!this.DetectAndroid())790			return true;791		else792			return false;793	},794        //**************************795	// Detects if the current device is an Archos media player/Internet tablet.796	DetectArchos : function() {797		if (this.uagent.search(this.deviceArchos) > -1)798			return true;799		else800			return false;801	},802	//**************************803	// Detects if the current device is an Internet-capable game console.804	// Includes many handheld consoles.805	DetectGameConsole : function() {806		if (this.DetectSonyPlaystation() || 807			this.DetectNintendo() ||808			this.DetectXbox())809			return true;810		else811			return false;812	},813	//**************************814	// Detects if the current device is a Sony Playstation.815	DetectSonyPlaystation : function() {816		if (this.uagent.search(this.devicePlaystation) > -1)817			return true;818		else819			return false;820	},821	//**************************822	// Detects if the current device is a handheld gaming device with823    // a touchscreen and modern iPhone-class browser. Includes the Playstation Vita.824	DetectGamingHandheld : function() {825		if ((this.uagent.search(this.devicePlaystation) > -1) &&826                   (this.uagent.search(this.devicePlaystationVita) > -1))827			return true;828		else829			return false;830	},831	//**************************832	// Detects if the current device is a Nintendo game device.833	DetectNintendo : function() {834		if (this.uagent.search(this.deviceNintendo) > -1   || 835			this.uagent.search(this.deviceWii) > -1 ||836			this.uagent.search(this.deviceNintendoDs) > -1)837			return true;838		else839			return false;840	},841	//**************************842	// Detects if the current device is a Microsoft Xbox.843	DetectXbox : function() {844		if (this.uagent.search(this.deviceXbox) > -1)845			return true;846		else847			return false;848	},849        850        851	//**************************852	// Detects whether the device is a Brew-powered device.853	//   Note: Limited to older Brew-powered feature phones.854	//   Ignores newer Brew versions like MP. Refer to DetectMobileQuick().855	DetectBrewDevice : function() {856		if (this.uagent.search(this.deviceBrew) > -1)857			return true;858		else859			return false;860	},861	// DEVICE CLASSES862	//**************************863	// Check to see whether the device is *any* 'smartphone'.864	//   Note: It's better to use DetectTierIphone() for modern touchscreen devices. 865	DetectSmartphone : function() {866		//Exclude duplicates from TierIphone867        if (this.DetectTierIphone() ||868            this.DetectS60OssBrowser() ||869			this.DetectSymbianOS() ||870			this.DetectWindowsMobile() ||871			this.DetectBlackBerry() ||872			this.DetectMeegoPhone() ||873			this.DetectPalmOS())874			return true;875		876		//Otherwise, return false.877		return false;878	},879	//**************************880	// Detects if the current device is a mobile device.881	//  This method catches most of the popular modern devices.882	//  Excludes Apple iPads and other modern tablets.883	DetectMobileQuick : function() {884		if (this.initCompleted || this.isMobilePhone)885			return this.isMobilePhone;886		//Let's exclude tablets.887		if (this.DetectTierTablet())888			return false;889		//Most mobile browsing is done on smartphones890		if (this.DetectSmartphone())891			return true;892		//Catch-all for many mobile devices893		if (this.uagent.search(this.mobile) > -1)894			return true;895		if (this.DetectOperaMobile())896			return true;897		//We also look for Kindle devices898		if (this.DetectKindle() ||899			this.DetectAmazonSilk())900			return true;901		if (this.uagent.search(this.deviceMidp) > -1 ||902			this.DetectBrewDevice())903			return true;904		if ((this.uagent.search(this.engineObigo) > -1) ||905			(this.uagent.search(this.engineNetfront) > -1) ||906			(this.uagent.search(this.engineUpBrowser) > -1))907			return true;908		return false;909	},910	//**************************911	// Detects in a more comprehensive way if the current device is a mobile device.912	DetectMobileLong : function() {913		if (this.DetectMobileQuick())914			return true;915		if (this.DetectGameConsole())916			return true;917		if (this.DetectDangerHiptop() ||918			this.DetectMaemoTablet() ||919			this.DetectSonyMylo() ||920			this.DetectArchos())921			return true;922		if ((this.uagent.search(this.devicePda) > -1) &&923			!(this.uagent.search(this.disUpdate) > -1)) 924			return true;925		926		//Detect for certain very old devices with stupid useragent strings.927		if ((this.uagent.search(this.manuSamsung1) > -1) ||928			(this.uagent.search(this.manuSonyEricsson) > -1) || 929			(this.uagent.search(this.manuericsson) > -1) ||930			(this.uagent.search(this.svcDocomo) > -1) ||931			(this.uagent.search(this.svcKddi) > -1) ||932			(this.uagent.search(this.svcVodafone) > -1))933			return true;934		935		return false;936	},937	//*****************************938	// For Mobile Web Site Design939	//*****************************940	941	//**************************942	// The quick way to detect for a tier of devices.943	//   This method detects for the new generation of944	//   HTML 5 capable, larger screen tablets.945	//   Includes iPad, Android (e.g., Xoom), BB Playbook, WebOS, etc.946	DetectTierTablet : function() {947		if (this.initCompleted || this.isTierTablet)948			return this.isTierTablet;949		950		if (this.DetectIpad() ||951			this.DetectAndroidTablet() ||952			this.DetectBlackBerryTablet() ||953			this.DetectFirefoxOSTablet() ||954			this.DetectUbuntuTablet() ||955			this.DetectWebOSTablet())956			return true;957		else958			return false;959	},960	//**************************961	// The quick way to detect for a tier of devices.962	//   This method detects for devices which can 963	//   display iPhone-optimized web content.964	//   Includes iPhone, iPod Touch, Android, Windows Phone 7 and 8, BB10, WebOS, Playstation Vita, etc.965	DetectTierIphone : function() {966		if (this.initCompleted || this.isTierIphone)967			return this.isTierIphone;968		if (this.DetectIphoneOrIpod() ||969                        this.DetectAndroidPhone() ||970			this.DetectWindowsPhone() ||971			this.DetectBlackBerry10Phone() ||972			this.DetectPalmWebOS() ||973			this.DetectBada() ||974			this.DetectTizen() ||975			this.DetectFirefoxOSPhone() ||976			this.DetectSailfishPhone() ||977			this.DetectUbuntuPhone() ||978			this.DetectGamingHandheld())979			return true;980        //Note: BB10 phone is in the previous paragraph981		if (this.DetectBlackBerryWebKit() && this.DetectBlackBerryTouch())982			return true;983		984		else985			return false;986	},987	//**************************988	// The quick way to detect for a tier of devices.989	//   This method detects for devices which are likely to be 990	//   capable of viewing CSS content optimized for the iPhone, 991	//   but may not necessarily support JavaScript.992	//   Excludes all iPhone Tier devices.993	DetectTierRichCss : function() {994		if (this.initCompleted || this.isTierRichCss)995			return this.isTierRichCss;996		//Exclude iPhone and Tablet Tiers and e-Ink Kindle devices997		if (this.DetectTierIphone() ||998			this.DetectKindle() ||999			this.DetectTierTablet())1000			return false;1001		1002		//Exclude if not mobile1003		if (!this.DetectMobileQuick())1004			return false;1005				1006		//If it's a mobile webkit browser on any other device, it's probably OK.1007		if (this.DetectWebkit())1008			return true;1009		1010		//The following devices are also explicitly ok.1011		if (this.DetectS60OssBrowser() ||1012			this.DetectBlackBerryHigh() ||1013			this.DetectWindowsMobile() ||1014			(this.uagent.search(this.engineTelecaQ) > -1))1015			return true;1016		1017		else1018			return false;1019	},1020	//**************************1021	// The quick way to detect for a tier of devices.1022	//   This method detects for all other types of phones,1023	//   but excludes the iPhone and RichCSS Tier devices.1024	// NOTE: This method probably won't work due to poor1025	//  support for JavaScript among other devices. 1026	DetectTierOtherPhones : function() {1027		if (this.initCompleted || this.isTierGenericMobile)1028			return this.isTierGenericMobile;1029		1030		//Exclude iPhone, Rich CSS and Tablet Tiers1031		if (this.DetectTierIphone() ||1032			this.DetectTierRichCss() ||1033			this.DetectTierTablet())1034			return false;1035		1036		//Otherwise, if it's mobile, it's OK1037		if (this.DetectMobileLong())1038			return true;1039		else1040			return false;1041	}1042};1043//Initialize the MobileEsp object...

Full Screen

Full Screen

bdc-script-include.js

Source:bdc-script-include.js Github

copy

Full Screen

1if (typeof(BotDetect) == "undefined") { // start single inclusion guard2  BotDetect = function(captchaId, instanceId, inputId, autoUppercaseInput, autoFocusInput, autoClearInput, autoReloadExpiredImage, autoReloadPeriod, autoReloadTimeout, soundStartDelay, limitSoundRegeneration) {3    this.Id = captchaId;4    this.InstanceId = instanceId;5    // Captcha image properties6    var imageId = captchaId + "_CaptchaImage";7    this.Image = document.getElementById(imageId);8    this.ImagePlaceholder = this.Image.parentNode;9    this.ControlsDisabled = false;10    // check for Captcha Reload icon presence11    var reloadLinkId = captchaId + "_ReloadLink";12    var reloadLink = document.getElementById(reloadLinkId);13    if (reloadLink) {14      // show Captcha Reload icon15      reloadLink.style.cssText = 'display: inline-block !important';16      // init reloading elements17      this.NewImage = null;18      this.ProgressIndicator = null;19      this.ReloadTimer = null;20      this.ReloadTimerTicks = 0;21      // Captcha image auto-reloading22      this.AutoReloadPeriod = Math.max((autoReloadPeriod - 10), 10) * 1000;23      this.AutoReloadTimeout = autoReloadTimeout * 1000;24      this.AutoReloadExpiredImage = autoReloadExpiredImage;25      this.AutoReloadPeriodSum = 0;26      this.AutoReloading = false;27      if (autoReloadExpiredImage) {28        if (this.AutoReloadTimer) { clearTimeout(this.AutoReloadTimer); }29        var self = this;30        this.AutoReloadTimer = setTimeout(31          function() {32            clearTimeout(self.AutoReloadTimer);33            if (self.AutoReloadPeriodSum >= self.AutoReloadTimeout) { self.DisableControls(); self.SessionExpired = true; return; }34            self.AutoReloading = true;35            self.ReloadImage();36            self.AutoReloading = false;37            self.AutoReloadPeriodSum += self.AutoReloadPeriod;38            self = null;39          },40          self.AutoReloadPeriod41        );42      }43    }44    // pre-load disabled reload icon45    var reloadIcon = document.getElementById(this.Id + "_ReloadIcon");46    if (reloadIcon) {47      this.ReloadIconSrc = document.getElementById(this.Id + "_ReloadIcon").src;48      this.DisabledReloadIconSrc = null;49      var preloadedReloadIcon = document.createElement('img');50      var self2 = this;51      preloadedReloadIcon.onload = function() {52        self2.DisabledReloadIconSrc = this.src;53        self2 = null;54      };55      preloadedReloadIcon.src = this.ReloadIconSrc.replace('icon', 'disabled-icon');56    }57    // Captcha sound properties58    this.SoundStartDelay = soundStartDelay;59    this.LimitSoundRegeneration = limitSoundRegeneration;60    this.SoundPlayed = false;61    this.SoundPlayDelayed = false;62    var soundLinkId = captchaId + "_SoundLink";63    var soundLink = document.getElementById(soundLinkId);64    if (soundLink) {65      this.SoundUrl = soundLink.href;66    }67    var soundPlaceholderId = captchaId + "_AudioPlaceholder";68    this.SoundPlaceholder = document.getElementById(soundPlaceholderId);69    // pre-load disabled sound icon70    var soundIcon = document.getElementById(this.Id + "_SoundIcon");71    if (soundIcon) {72      this.SoundIconSrc = document.getElementById(this.Id + "_SoundIcon").src;73      this.DisabledSoundIconSrc = null;74      var preloadedSoundIcon = document.createElement('img');75      var self3 = this;76      preloadedSoundIcon.onload = function() {77        self3.DisabledSoundIconSrc = this.src;78        self3 = null;79      };80      preloadedSoundIcon.src = this.SoundIconSrc.replace('icon', 'disabled-icon');81    }82    // Captcha input textbox properties83    this.ValidationUrl = this.Image.src.replace('get=image', 'get=validation-result');84    // Captcha help link properties85    this.FollowHelpLink = true;86    // Captcha code user input element registration, helpers & processing87    if (!inputId) return;88    this.InputId = inputId;89    var input = document.getElementById(inputId);90    if (!input) return;91    input.Captcha = this; // allow access to the BotDetect object via the input element92    // automatic input processing93    this.AutoFocusInput = autoFocusInput;94    this.AutoClearInput = autoClearInput;95    if (autoUppercaseInput) {96      input.style.textTransform = 'uppercase';97    }98  };99  BotDetect.Init = function(captchaId, instanceId, inputId, autoUppercaseInput, autoFocusInput, autoClearInput, autoReloadExpiredImage, autoReloadPeriod, autoReloadTimeout, soundStartDelay, limitSoundRegeneration) {100    var inputIdString = null;101    if (inputId) {102      inputIdString = "'" + inputId + "'";103    }104    var actualInitialization = new Function("if (document.getElementById('" + captchaId + "_CaptchaImage')) { window['" + captchaId + "'] = new BotDetect('" + captchaId + "', '" + instanceId + "', " + inputIdString + ", " + autoUppercaseInput + ", " + autoFocusInput + ", " + autoClearInput + ", " + autoReloadExpiredImage + ", " + autoReloadPeriod + ", " + autoReloadTimeout + ", " + soundStartDelay + ", " + limitSoundRegeneration + "); window['" + captchaId + "'].PostInit(); }");105    if (typeof(window.jQuery) != "undefined") {106      // jQuery initalization107      jQuery(actualInitialization);108    } else {109      // regular initialization110      BotDetect.RegisterHandler(window, 'domready', actualInitialization, false);111    }112    // back button image reload to avoid cache issues113    if (window.opera) {114      BotDetect.RegisterHandler(window, 'popstate', function (e) { window[captchaId].ReloadImage(); }, false);115    } else if (window.chrome) {116      BotDetect.RegisterHandler(window, 'domready', function (e) { var el = document.getElementById("BDC_BackWorkaround_" + captchaId); if (el.value == "0") { el.value = "1"; } else { el.value = "0"; window[captchaId].ReloadImage(); } }, false);117    } else { // firefox & safari118      BotDetect.RegisterHandler(window, 'pageshow', function (e) { var el = document.getElementById("BDC_BackWorkaround_" + captchaId); if (el.value == "0") { el.value = "1"; } else { window[captchaId].ReloadImage(); } }, false);119    }120  };121  // constants122  BotDetect.ReloadTimerMaxTicks = 100;123  BotDetect.ReloadTimerDelay = 250;124  BotDetect.MillisecondsInAMinute = 60000;125  BotDetect.AjaxTimeout = 10000;126  BotDetect.MinSoundCooldown = 2000;127  // CAPTCHA image reloading128  BotDetect.prototype.ReloadImage = function() {129    if (this.Image && !this.ReloadInProgress && !this.SessionExpired && (!this.ControlsDisabled || this.SoundPlayDelayed)) {130      this.ReloadInProgress = true;131      this.DisableControls();132      this.ProgressIndicator = document.createElement('span');133      this.ProgressIndicator.className = 'BDC_ProgressIndicator';134      this.ProgressIndicator.appendChild(document.createTextNode('.'));135      this.PreReloadImage();136      var imageUrl = BotDetect.UpdateTimestamp(this.Image.src);137      this.InitNewImage(imageUrl);138      this.ImagePlaceholder.innerHTML = '';139      this.ImagePlaceholder.appendChild(this.ProgressIndicator);140      this.ShowProgress();141    }142  };143  BotDetect.prototype.InitNewImage = function(imageUrl) {144    this.NewImage = document.createElement('img');145    var self = this;146    this.NewImage.onload = function() {147      if (self.NewImage && self.ImagePlaceholder && self.ProgressIndicator) {148        self.ImagePlaceholder.innerHTML = '';149        self.ImagePlaceholder.appendChild(self.NewImage);150        self.Image = self.NewImage;151        self.ProgressIndicator = null;152        self.PostReloadImage();153        self = null;154      }155    };156    this.NewImage.id = this.Image.id;157    this.NewImage.alt = this.Image.alt;158    this.NewImage.src = imageUrl;159  };160  BotDetect.prototype.ShowProgress = function() {161    if (this.ProgressIndicator && (this.ReloadTimerTicks < BotDetect.ReloadTimerMaxTicks)) {162      this.ReloadTimerTicks = this.ReloadTimerTicks + 1;163      this.UpdateProgressIndicator();164      var self = this;165      this.ReloadTimer = setTimeout(function() { self.ShowProgress(); self = null; }, BotDetect.ReloadTimerDelay);166    } else {167      clearTimeout(this.ReloadTimer);168      this.ReloadTimerTicks = 0;169      this.ReloadInProgress = false;170    }171  };172  BotDetect.prototype.UpdateProgressIndicator = function() {173    if (0 == this.ProgressIndicator.childNodes.length) {174      this.ProgressIndicator.appendChild(document.createTextNode('.'));175      return;176    }177    if (0 === this.ReloadTimerTicks % 5) {178      this.ProgressIndicator.firstChild.nodeValue = '.';179    } else {180      this.ProgressIndicator.firstChild.nodeValue = this.ProgressIndicator.firstChild.nodeValue + '.';181    }182  };183  // CAPTCHA sound playing184  BotDetect.prototype.PlaySound = function() {185    if (!document.getElementById || this.SoundPlayingInProgess || (this.ControlsDisabled && !this.SoundPlayDelayed)) { return; }186    this.DisableControls();187    188    if (this.LimitSoundRegeneration && !BotDetect.SoundReplaySupported()) {189      // reload the captcha image and play the new sound190      if (this.SoundPlayed) {191        this.SoundPlayDelayed = true;192        this.ReloadImage();193        return;194      }195    }196    this.SoundPlayingInProgess = true;197    if (BotDetect.UseHtml5Audio()) { // html5 audio198      var self = this;199      var sound = document.getElementById('BDC_CaptchaSoundAudio_' + this.Id);200      if (sound) { // replay existing audio, with the correct delay201        sound.currentTime = 0;202        this.SoundStartDelayTimer = setTimeout(203          function() {204            if (self) {205              clearTimeout(self.SoundStartDelayTimer);206              self.PrePlaySound();207              var sound = document.getElementById('BDC_CaptchaSoundAudio_' + self.Id);208              sound.play();209            }210          },211          this.SoundStartDelay212        );213      } else { // play new audio214        this.SoundPlaceholder.innerHTML = '';215        var soundUrl = this.SoundUrl;216        soundUrl = BotDetect.UpdateTimestamp(soundUrl);217        soundUrl = BotDetect.DetectSsl(soundUrl);218        sound = new Audio(soundUrl);219        sound.id = 'BDC_CaptchaSoundAudio_' + this.Id;220        sound.type = 'audio/wav';221        sound.autobuffer = false;222        sound.loop = false;223        sound.autoplay = false;224        sound.preload = 'auto';225        this.SoundPlaceholder.appendChild(sound);226        sound.load();227        BotDetect.RegisterHandler( // start counting the starting delay only when the sound is loaded228          sound,229          'canplay',230          function() {231            if (self) {232              self.SoundStartDelayTimer = setTimeout(233                function() {234                  clearTimeout(self.SoundStartDelayTimer);235                  self.PrePlaySound();236                  var sound = document.getElementById('BDC_CaptchaSoundAudio_' + self.Id);237                  sound.play();238                },239                self.SoundStartDelay240              );241            }242          },243          false244        );245      }246      // enable controls & other after-play cleanup247      BotDetect.RegisterHandler(248        sound,249        'ended',250        function() {251          if (self) {252            var sound = document.getElementById('BDC_CaptchaSoundAudio_' + self.Id);253            if (sound.duration == 1) { // Android 4.0.4 issue254              sound.play();255            } else {256              self.SoundPlayingInProgess = false;257              self.EnableControls();258              self = null;259            }260          }261        },262        false263      );264    } else { // xhtml embed + object265      this.SoundPlaceholder.innerHTML = '';266      var self = this;267      this.SoundStartDelayTimer = setTimeout(268        function() {269          clearTimeout(self.SoundStartDelayTimer);270          self.PrePlaySound();271          self.StartXhtmlSoundPlayback();272        },273        this.SoundStartDelay274      );275    }276    this.SoundPlayed = true;277  };278  BotDetect.prototype.StartXhtmlSoundPlayback = function() {279    var soundUrl = this.SoundUrl;280    soundUrl = BotDetect.UpdateTimestamp(soundUrl);281    soundUrl = BotDetect.DetectSsl(soundUrl);282    var objectSrc = "<object id='BDC_CaptchaSoundObject_" + this.Id + "' classid='clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95' height='0' width='0' style='width:0; height:0;'><param name='AutoStart' value='1' /><param name='Volume' value='0' /><param name='PlayCount' value='1' /><param name='FileName' value='" + soundUrl + "' /><embed id='BDC_CaptchaSoundEmbed' src='" + soundUrl + "' autoplay='true' hidden='true' volume='100' type='" + BotDetect.GetMimeType() + "' style='display:inline;' /></object>";283    this.SoundPlaceholder.innerHTML = objectSrc;284    var self = this;285    this.SoundCooldownTimer = setTimeout(286      function() {287        if (self) {288          clearTimeout(self.SoundCooldownTimer);289          self.SoundPlayingInProgess = false;290          self.EnableControls();291          self = null;292        }293      },294      BotDetect.MinSoundCooldown295    );296  };297  // input element access298  BotDetect.prototype.GetInputElement = function() {299    return document.getElementById(this.InputId);300  };301  // CAPTCHA Ajax validation302  BotDetect.prototype.StartAjaxValidation = function() {303    this.PreAjaxValidate();304    if (BotDetect.AjaxError) { return; }305    var input = this.GetInputElement();306    if (!input || !input.value || input.value.length < 0) {307      this.AjaxValidationFailed();308      return;309    }310    this.StartValidationRequest();311  };312  BotDetect.prototype.StartValidationRequest = function() {313    var input = this.GetInputElement();314    var url = this.ValidationUrl + '&i=' + input.value;315    var self = this;316    var callback = function(y) {317      clearTimeout(self.AjaxTimer);318      if (200 != y.status) { self.AjaxValidationError(); self = null; return; }319      var validationResult = false;320      var parsed = BotDetect.ParseJson(y.responseText);321      if (parsed) {322        validationResult = parsed;323      }324      self.EndValidationRequest(validationResult);325      self = null;326    }327    this.AjaxTimer = setTimeout(self.AjaxValidationError, BotDetect.AjaxTimeout);328    BotDetect.Get(url, callback);329  };330  BotDetect.prototype.EndValidationRequest = function(result) {331    if (result) {332      this.AjaxValidationPassed();333    } else {334      this.AjaxValidationFailed();335    }336  };337  BotDetect.ParseJson = function(jsonString) {338    var resultObj = null;339    if ("undefined" != typeof(JSON) && "function" == typeof(JSON.parse)) {340      resultObj = JSON.parse(jsonString);341    }342    if (!resultObj) {343      resultObj = eval('(' + jsonString + ')');344    }345    return resultObj;346  };347  // custom CAPTCHA events348  BotDetect.prototype.PostInit = function() {349  };350  BotDetect.prototype.PreReloadImage = function() {351    this.ClearInput();352    this.FocusInput();353  };354  BotDetect.prototype.PostReloadImage = function() {355    this.ValidationUrl = this.Image.src.replace('get=image', 'get=validation-result');356    if (this.AutoReloadExpiredImage) {357      if (this.AutoReloadTimer) { clearTimeout(this.AutoReloadTimer); }358      var self = this;359      this.AutoReloadTimer = setTimeout(360        function() {361          clearTimeout(self.AutoReloadTimer);362          if (self.AutoReloadPeriodSum >= self.AutoReloadTimeout) { self.DisableControls(); self.SessionExpired = true; return; }363          self.AutoReloading = true;364          self.ReloadImage();365          self.AutoReloading = false;366          self.AutoReloadPeriodSum += self.AutoReloadPeriod;367          self = null;368        },369        self.AutoReloadPeriod370      );371    }372    if (this.SoundIconSrc) {373      this.SoundPlaceholder.innerHTML = '';374      this.SoundPlayed = false;375      if (this.SoundPlayDelayed) {376        this.PlaySound();377        this.SoundPlayDelayed = false;378      } else {379        this.EnableControls();380      }381    } else {382      this.EnableControls();383    }384  };385  BotDetect.prototype.PrePlaySound = function() {386    this.FocusInput();387  };388  BotDetect.prototype.OnHelpLinkClick = function() {389  };390  BotDetect.prototype.PreAjaxValidate = function() {391  };392  BotDetect.prototype.AjaxValidationFailed = function() {393    this.ReloadImage();394  };395  BotDetect.prototype.AjaxValidationPassed = function() {396  };397  BotDetect.prototype.AjaxValidationError = function() {398    BotDetect.Xhr().abort();399    BotDetect.AjaxError = true;400  };401  BotDetect.RegisterCustomHandler = function(eventName, userHandler) {402    var oldHandler = BotDetect.prototype[eventName];403    BotDetect.prototype[eventName] = function() {404      userHandler.call(this);405      oldHandler.call(this);406    }407  };408  // input processing409  BotDetect.prototype.FocusInput = function() {410    var input = this.GetInputElement();411    if (!this.AutoFocusInput || !input) return;412    if (this.AutoReloading) return;413    input.focus();414  };415  BotDetect.prototype.ClearInput = function() {416    var input = this.GetInputElement();417    if (!this.AutoClearInput || !input) return;418    input.value = '';419  };420  // helpers421  BotDetect.UpdateTimestamp = function(url) {422    var i = url.indexOf('&d=');423    if (-1 !== i) {424      url = url.substring(0, i);425    }426    return url + '&d=' + BotDetect.GetTimestamp();427  };428  BotDetect.GetTimestamp = function() {429    var d = new Date();430    var t = d.getTime() + (d.getTimezoneOffset() * BotDetect.MillisecondsInAMinute);431    return t;432  };433  BotDetect.DetectSsl = function(url) {434    var i = url.indexOf('&e=');435    if(-1 !== i) {436      var len = url.length;437      url = url.substring(0, i) + url.substring(i+4, len);438    }439    if (document.location.protocol === "https:") {440      url = url + '&e=1';441    }442    return url;443  };444  BotDetect.GetMimeType = function() {445    var mimeType = "audio/x-wav";446    return mimeType;447  };448  BotDetect.UseHtml5Audio = function() {449    var html5SoundSupported = false;450    if (BotDetect.DetectAndroid() || BotDetect.DetectIOS()) {451      html5SoundSupported = true;  // Android says it can't play audio even when it can; assuming iOS uses Html5 simplifies further browser checks452    } else {453      var browserCompatibilityCheck = document.createElement('audio');454      html5SoundSupported = (455        !!(browserCompatibilityCheck.canPlayType) &&456        !!(browserCompatibilityCheck.canPlayType("audio/wav")) &&457        !BotDetect.DetectIncompatibleAudio() // some browsers say they support the audio even when they have issues playing it458      );459    }460    return html5SoundSupported;461  };462  BotDetect.DetectIncompatibleAudio = function() {463    return BotDetect.DetectFirefox3() || BotDetect.DetectSafariSsl();464  };465  BotDetect.DetectAndroid = function() {466    var detected = false;467    if (navigator && navigator.userAgent) {468      var matches = navigator.userAgent.match(/Linux; U; Android/);469      if (matches) {470        detected = true;471      }472    }473    return detected;474  };475  BotDetect.DetectIOS = function() {476    var detected = false;477    if (navigator && navigator.userAgent) {478      var matches = navigator.userAgent.match(/like Mac OS/);479      if (matches) {480        detected = true;481      }482    }483    return detected;484  };485  BotDetect.DetectFirefox3 = function() {486    var detected = false;487    if (navigator && navigator.userAgent) {488      var matches = navigator.userAgent.match(/(Firefox)\/(3\.6\.[^;\+,\/\s]+)/);489      if (matches) {490        detected = true;491      }492    }493    return detected;494  };495  BotDetect.DetectSafariSsl = function() {496    var detected = false;497    if (navigator && navigator.userAgent) {498      var matches = navigator.userAgent.match(/Safari/);499      if (matches) {500        matches = navigator.userAgent.match(/Chrome/);501        if (!matches && document.location.protocol === "https:") {502          detected = true;503        }504      }505    }506    return detected;507  };508  BotDetect.DetectAndroidBelow41 = function() {509    var detected = false;510    if (navigator && navigator.userAgent) {511      var i = navigator.userAgent.indexOf("Android");512      if (i >= 0) {513        var v = parseFloat(navigator.userAgent.slice(i+8));514        if (v < 4.1) {515         detected = true;516        }517      }518    }519    return detected;520  }521  BotDetect.SoundReplaySupported = function() {522    return (BotDetect.UseHtml5Audio() &&523                !BotDetect.DetectAndroidBelow41());524  };525  BotDetect.prototype.DisableControls = function() {526    this.ControlsDisabled = true;527    this.DisableReloadIcon();528    this.DisableSoundIcon();529  }530  BotDetect.prototype.EnableControls = function() {531    this.ControlsDisabled = false;532    this.EnableReloadIcon();533    this.EnableSoundIcon();534  }535  BotDetect.prototype.DisableReloadIcon = function() {536    if (this.ReloadIconSrc) {537       if (this.DisabledReloadIconSrc) {538        document.getElementById(this.Id + "_ReloadIcon").src = this.DisabledReloadIconSrc;539      }540    }541  };542  BotDetect.prototype.EnableReloadIcon = function() {543    if (this.ReloadIconSrc) {544      if (this.DisabledReloadIconSrc) {545        document.getElementById(this.Id + "_ReloadIcon").src = this.ReloadIconSrc;546      }547    }548  };549  BotDetect.prototype.DisableSoundIcon = function() {550    if (this.SoundIconSrc) {551       if (this.DisabledSoundIconSrc) {552        document.getElementById(this.Id + "_SoundIcon").src = this.DisabledSoundIconSrc;553      }554    }555  };556  BotDetect.prototype.EnableSoundIcon = function() {557    if (this.SoundIconSrc) {558      if (this.DisabledSoundIconSrc) {559        document.getElementById(this.Id + "_SoundIcon").src = this.SoundIconSrc;560      }561    }562  };563  // standard events & handlers564  BotDetect.RegisterHandler = function(target, eventType, functionRef, capture) {565    // special case566    if (eventType == "domready") {567      BotDetect.RegisterDomReadyHandler(functionRef);568      return;569    }570    // normal event registration571    if (typeof target.addEventListener != "undefined") {572      target.addEventListener(eventType, functionRef, capture);573    } else if (typeof target.attachEvent != "undefined") {574      var functionString = eventType + functionRef;575      target["e" + functionString] = functionRef;576      target[functionString] = function(event) {577        if (typeof event == "undefined") {578          event = window.event;579        }580        target["e" + functionString](event);581      };582      target.attachEvent("on" + eventType, target[functionString]);583    } else {584      eventType = "on" + eventType;585      if (typeof target[eventType] == "function") {586        var oldListener = target[eventType];587        target[eventType] = function() {588          oldListener();589          return functionRef();590        };591      } else {592        target[eventType] = functionRef;593      }594    }595  };596  // earlier than window.load, if possible597  BotDetect.RegisterDomReadyHandler = function(functionRef) {598    if (document.addEventListener) {599      document.addEventListener("DOMContentLoaded",600        function(){601          document.removeEventListener("DOMContentLoaded", arguments.callee, false);602          functionRef();603        },604        false605      );606      return;607    }608    else if (document.attachEvent) {609      var called = false;610      document.attachEvent("onreadystatechange",611        function(){612          if (document.readyState === "complete") {613            document.detachEvent("onreadystatechange", arguments.callee);614            functionRef();615            called = true;616          }617        }618      );619      if (document.documentElement.doScroll && window == window.top) {620        (function() {621          if (called) return;622          try {623            document.documentElement.doScroll("left");624          } catch (error) {625            setTimeout(arguments.callee, 1);626            return;627          }628          functionRef();629          called = true;630        })();631      }632      return;633    } else {634      BotDetect.RegisterHandler(window, 'load', functionRef, false);635    }636  };637  // Ajax helper638  BotDetect.Xhr = function() {639    var x = null;640    try { x = new XMLHttpRequest(); return x; } catch (e) {}641    try { x = new ActiveXObject('MSXML2.XMLHTTP.5.0'); return x; } catch (e) {}642    try { x = new ActiveXObject('MSXML2.XMLHTTP.4.0'); return x; } catch (e) {}643    try { x = new ActiveXObject('MSXML2.XMLHTTP.3.0'); return x; } catch (e) {}644    try { x = new ActiveXObject('MSXML2.XMLHTTP'); return x; } catch (e) {}645    try { x = new ActiveXObject('Microsoft.XMLHTTP'); return x; } catch (e) {}646    return x;647  };648  BotDetect.Get = function(url, callback) {649    BotDetect.AjaxError = false;650    var x = BotDetect.Xhr();651    if (x && 0 == x.readyState) {652      x.onreadystatechange = function() {653        if(4 == x.readyState) {654          callback(x);655        }656      }657      x.open('GET', url, true);658      x.send();659    }660  };...

Full Screen

Full Screen

addTest.js

Source:addTest.js Github

copy

Full Screen

1describe('addTest', function() {2  var ModernizrProto;3  var setClasses;4  var Modernizr;5  var addTest;6  var cleanup;7  var sinon;8  var req;9  before(function(done) {10    req = requirejs.config({11      context: Math.random().toString().slice(2),12      baseUrl: '../src',13      paths: {14        cleanup: '../test/cleanup',15        sinon: '../test/js/lib/sinon'16      }17    });18    req(['cleanup', 'sinon'], function(_cleanup, _sinon) {19      cleanup = _cleanup;20      sinon = _sinon;21      done();22    });23  });24  beforeEach(function(done) {25    ModernizrProto = {};26    Modernizr = {_q: [], _config:  {}};27    setClasses = sinon.spy();28    define('ModernizrProto', [], function() {return ModernizrProto;});29    define('Modernizr', [], function() {return Modernizr;});30    define('setClasses', [], function() {return setClasses;});31    define('package', [], function() {return {};});32    req(['addTest'], function(_addTest) {33      addTest = _addTest;34      done();35    });36  });37  afterEach(function() {38    req.undef('ModernizrProto');39    req.undef('setClasses');40    req.undef('Modernizr');41    req.undef('package');42    req.undef('addTest');43  });44  describe('setup', function() {45    it('adds an object for test listeners', function() {46      expect(ModernizrProto._l).to.be.an('object');47    });48    it('should define the `ModernizrProto._trigger` function', function() {49      expect(ModernizrProto._trigger).to.be.an('function');50    });51    it('should push the Modernizr.addTest definition to the `_q`', function() {52      expect(Modernizr._q).to.have.length(1);53      expect(Modernizr._q[0]).to.be.a('function');54    });55    it('should define Modernizr.addTest at the end of the _q', function() {56      Modernizr._q[0]();57      expect(ModernizrProto.addTest).to.be(addTest);58    });59  });60  describe('Modernizr.on', function() {61    var fakeDetect = function() {};62    it('keeps track of requests', function() {63        ModernizrProto.on('fakeDetect', fakeDetect);64        expect(ModernizrProto._l.fakeDetect).to.be.an('array');65        expect(ModernizrProto._l.fakeDetect[0]).to.be(fakeDetect);66    });67    it('does not recreate the queue with duplicate requests', function() {68        ModernizrProto.on('fakeDetect', fakeDetect);69        ModernizrProto.on('fakeDetect', fakeDetect);70        expect(ModernizrProto._l.fakeDetect.length).to.be(2);71    });72    it('triggers results if the detect already ran', function(done) {73        Modernizr.fakeDetect = 'fake';74        Modernizr._trigger = sinon.spy();75        ModernizrProto.on('fakeDetect', fakeDetect);76        setTimeout(function() {77          expect(Modernizr._trigger.calledOnce).to.be(true);78          expect(Modernizr._trigger.calledWith('fakeDetect', Modernizr.fakeDetect)).to.be(true);79          done();80        }, 0);81    });82  });83  describe('Modernizr._trigger', function() {84    it('skips the callback if it does not exist', function() {85      expect(function() {ModernizrProto._trigger('fakeDetect');}).to.not.throwError();86    });87    it('runs the listener calledback if it does exist', function(done) {88      var spy = sinon.spy();89      ModernizrProto.on('fakeDetect', spy);90      ModernizrProto._trigger('fakeDetect', 'fakeRes');91      setTimeout(function() {92        expect(spy.calledOnce).to.be(true);93        done();94      });95    });96    it('deletes the listener after it runs', function(done) {97      ModernizrProto.on('fakeDetect', function() {});98      expect(ModernizrProto._l.fakeDetect).to.be.an('array');99      ModernizrProto._trigger('fakeDetect', 'fakeRes');100      setTimeout(function() {101        expect(ModernizrProto._l.fakeDetect).to.be(undefined);102        done();103      });104    });105  });106  describe('Modernizr.addTest', function() {107    beforeEach(function() {108      Modernizr._trigger = sinon.spy();109      Modernizr._trigger = sinon.spy();110      expect(Modernizr.fakedetect).to.be(undefined);111      expect(Modernizr.fake).to.be(undefined);112      expect(Modernizr.detect).to.be(undefined);113    });114    it('sets the proper bool on the Modernizr object with a function', function() {115      addTest('fakedetect', function() {return true;});116      expect(Modernizr.fakedetect).to.be(true);117    });118    it('sets the proper bool on the Modernizr object with a bool', function() {119      addTest('fakedetect', false);120      expect(Modernizr.fakedetect).to.be(false);121    });122    it('does not cast to a bool on the Modernizr object with a truthy value', function() {123      addTest('fakedetect', function() {return 100;});124      expect(Modernizr.fakedetect).to.be(100);125    });126    it('sets a true class for a true value', function() {127      addTest('fakedetect', function() {return 100;});128      expect(setClasses.callCount).to.be(1);129      expect(setClasses.calledWith(['fakedetect'])).to.be(true);130    });131    it('sets a truthy class for a truthy value', function() {132      addTest('fakedetect', function() {return 100;});133      expect(setClasses.callCount).to.be(1);134      expect(setClasses.calledWith(['fakedetect'])).to.be(true);135    });136    it('sets a negative class for a false value', function() {137      addTest('fakedetect', function() {return false;});138      expect(setClasses.callCount).to.be(1);139      expect(setClasses.calledWith(['no-fakedetect'])).to.be(true);140    });141    it('sets a negative class for a falsey value', function() {142      addTest('fakedetect', function() {return undefined;});143      expect(setClasses.callCount).to.be(1);144      expect(setClasses.calledWith(['no-fakedetect'])).to.be(true);145    });146    it('does not cast to a bool on the Modernizr object with a falsy value', function() {147      addTest('fakedetect', function() {return undefined;});148      expect('fakedetect' in Modernizr).to.be(true);149      expect(Modernizr.fakedetect).to.be(undefined);150    });151    it('forces detect names are lowercase', function() {152      addTest('FaKeDeTeCt', true);153      expect(Modernizr.fakedetect).to.be(true);154    });155    it('supports nested properties with a bool base', function() {156      /* jshint -W053 */157      addTest('fake', new Boolean(true));158      /* jshint +W053 */159      addTest('fake.detect', true);160      expect(Modernizr.fake).to.be.an('object');161      expect(Modernizr.fake.detect).to.be(true);162    });163    it('supports nested properties', function() {164      addTest('fake', true);165      addTest('fake.detect', true);166      expect(Modernizr.fake).to.be.an('object');167      expect(Modernizr.fake.detect).to.be(true);168    });169    it('does not overwrite values once they are set', function() {170      addTest('fakeDetect', false);171      expect(Modernizr.fakedetect).to.be(false);172      expect(Modernizr._trigger.calledOnce).to.be(true);173      addTest('fakeDetect', true);174      expect(Modernizr.fakedetect).to.be(false);175      expect(Modernizr._trigger.calledOnce).to.be(true);176    });177    it('allows feature to be an object of features', function() {178      addTest({fake: true, detect: false});179      expect(Modernizr.fake).to.be(true);180      expect(Modernizr.detect).to.be(false);181      expect(setClasses.callCount).to.be(2);182      expect(setClasses.calledWith(['fake'])).to.be(true);183      expect(setClasses.calledWith(['no-detect'])).to.be(true);184    });185    it('properly filters out monkey patched object properties', function() {186      var noop = function() {};187      Object.prototype.MOD_FAKE_VALUE = noop;188      var config = {detect: false};189      expect(config.MOD_FAKE_VALUE).to.be(noop);190      addTest(config);191      delete Object.prototype.MOD_FAKE_VALUE;192      expect(Modernizr.MOD_FAKE_VALUE).to.be(undefined);193      expect(Modernizr.mod_fake_value).to.be(undefined);194      expect(Modernizr.detect).to.be(false);195      expect(setClasses.callCount).to.be(1);196    });197    it('returns an instance of Modernizr for chaining', function() {198      expect(addTest('fakeDetect', true)).to.be(Modernizr);199    });200  });201  after(function() {202    cleanup();203  });...

Full Screen

Full Screen

swfupload.proxy.js

Source:swfupload.proxy.js Github

copy

Full Screen

1/*2 Proxy Plug-in3 Features:4 Times an upload to see if it appear suspiciously fast which might indicate a proxy server or anti-virus suite intercepting the upload.5 If the upload seems too fast an uploadError event is fired with PROXY error code after the final uploadProgress event.6 Adds a SWFUpload setting allowing you to tweak the bytes/s for triggering the error:7 proxy_detect_threshold : 2560008 Adds an UPLOAD_ERROR entry called PROXY:9 function uploadError(file, errorCode, message) {10 if (errorCode === SWFUpload.UPLOAD_ERROR.PROXY) {11 alert("You might have a proxy!");12 }13 }14 */15var SWFUpload;16if (typeof(SWFUpload) === "function") {17    SWFUpload.proxyDetect = {};18    SWFUpload.UPLOAD_ERROR.PROXY = -30300;19    SWFUpload.prototype.initSettings = (function (oldInitSettings) {20        return function (userSettings) {21            if (typeof(oldInitSettings) === "function") {22                oldInitSettings.call(this, userSettings);23            }24            this.ensureDefault = function (settingName, defaultValue) {25                this.settings[settingName] = (userSettings[settingName] == undefined) ? defaultValue : userSettings[settingName];26            };27            // List used to keep the speed stats for the files we are tracking28            this.proxyDetectFileStartTimes = {};29            this.proxyDetectSettings = {};30            this.ensureDefault("proxy_detect_threshold", 256000); // Default is 250 KB per second31            this.proxyDetectSettings.user_upload_progress_handler = this.settings.upload_progress_handler;32            this.proxyDetectSettings.user_upload_complete_handler = this.settings.upload_complete_handler;33            this.settings.upload_progress_handler = SWFUpload.proxyDetect.uploadProgressHandler;34            this.settings.upload_complete_handler = SWFUpload.proxyDetect.uploadCompleteHandler;35            delete this.ensureDefault;36        };37    }(SWFUpload.prototype.initSettings));38    SWFUpload.proxyDetect.uploadProgressHandler = function (file, bytesComplete, bytesTotal) {39        var ex1 = null, time, differenceMS, bps;40        try {41            if (typeof this.proxyDetectSettings.user_upload_progress_handler === "function") {42                this.proxyDetectSettings.user_upload_progress_handler.call(this, file, bytesComplete, bytesTotal);43            }44        } catch (ex1) {45        }46        if (bytesComplete === 0) {47            this.proxyDetectFileStartTimes[file.ID] = new Date();48        } else if (bytesComplete === bytesTotal) {49            try {50                // Calculate the Bps and decide if we should trigger the error51                time = new Date();52                differenceMS = time.getTime() - this.proxyDetectFileStartTimes[file.ID].getTime();53                if (differenceMS === 0) {54                    differenceMS = 1;55                }56                bps = bytesTotal / (differenceMS * 1000);57                if (bps > parseInt(this.settings.proxy_detect_threshold, 10)) {58                    this.queueEvent("upload_error_handler", [file, SWFUpload.UPLOAD_ERROR.PROXY, bps]);59                }60            } catch (ex) {61            }62        }63        if (ex1 !== null) {64            throw(ex1);65        }66    };67    SWFUpload.proxyDetect.uploadCompleteHandler = function (file) {68        try {69            delete this.proxyDetectFileStartTimes[file.ID];70        } catch (ex) {71        }72        if (typeof this.proxyDetectSettings.user_upload_progress_handler === "function") {73            return this.proxyDetectSettings.user_upload_progress_handler.call(this, file);74        }75    };...

Full Screen

Full Screen

Stage2.jsx

Source:Stage2.jsx Github

copy

Full Screen

1import { Meteor } from 'meteor/meteor'2import React, { Component } from 'react'3import { createContainer } from 'meteor/react-meteor-data'4import { Table, Button, message } from 'antd'5import { Accounts, Jobs } from '/lib/collections.js'6const AccountsTable = createContainer(() => {7  const accountsHandle = Meteor.subscribe('accounts')8  return {9    ready: accountsHandle.ready(),10    accounts: Accounts.find({ for: 'RICHER', new: false }).fetch(),11    checkedCount: Accounts.find({ for: 'RICHER', new: false, checked: true }).count()12  }13}, class extends Component {14  render () {15    const { accounts, ready, checkedCount } = this.props16    return (17      <Table18        rowKey="_id"19        dataSource={accounts}20        loading={!ready}21        bordered22        title={() => `个数: ${accounts.length} 已签到:${checkedCount}`}23        style={{ backgroundColor: 'white', margin: '10px 0' }}24      >25        <Table.Column title="账号" dataIndex="username" />26        <Table.Column title="密码" dataIndex="password" />27        <Table.Column title="昵称" dataIndex="nickname" />28        <Table.Column title="已签到" dataIndex="checked" render={checked => checked ? '是' : '否'} />29      </Table>30    )31  }32})33export default createContainer(() => {34  const checkInJobHandle = Meteor.subscribe('jobs.richer.checkin')35  const detectJobHandle = Meteor.subscribe('jobs.richer.detect')36  return {37    ready: checkInJobHandle.ready() && detectJobHandle.ready(),38    checkInJob: Jobs.findOne({ name: 'richer.checkin' }),39    detectJob: Jobs.findOne({ name: 'richer.detect' }),40  }41}, class Stage2 extends Component {42  constructor (props) {43    super(props)44    this.handleStart = this.handleStart.bind(this)45    this.handleDetect = this.handleDetect.bind(this)46  }47  handleStart () {48    Meteor.call('richer.checkin', err => {49      if (err) {50        message.error('失败')51      }52    })53  }54  handleDetect () {55    Meteor.call('richer.detect', err => {56      if (err) {57        message.error('失败')58      }59    })60  }61  render () {62    const { ready, checkInJob, detectJob } = this.props63    const detectLoading = !ready || detectJob.running64    const checkInLoading = !ready || checkInJob.running65    const detectStatus = ready && detectJob.running ? `${detectJob.count}/${detectJob.total}` : ''66    const checkInStatus = ready && checkInJob.running ? `${checkInJob.count}/${checkInJob.total}` : ''67    return (68      <div>69        <Button70          type="primary"71          onClick={this.handleStart}72          loading={checkInLoading}73          style={{ marginRight: 20 }}74        >75          {`开始 ${checkInStatus}`}76        </Button>77        <Button78          type="primary"79          onClick={this.handleDetect}80          loading={detectLoading}81        >82          {`检测 ${detectStatus}`}83        </Button>84        <AccountsTable />85      </div>86    )87  }...

Full Screen

Full Screen

EdgeDetectEffectNormals.js

Source:EdgeDetectEffectNormals.js Github

copy

Full Screen

1#pragma strict2@script ExecuteInEditMode3@script RequireComponent (Camera)4@script AddComponentMenu ("Image Effects/Edge Detection/Edge Detection")5enum EdgeDetectMode {6	TriangleDepthNormals = 0,7	RobertsCrossDepthNormals = 1,8	SobelDepth = 2,9	SobelDepthThin = 3,10	TriangleLuminance = 4,11}12class EdgeDetectEffectNormals extends PostEffectsBase {	13	public var mode : EdgeDetectMode = EdgeDetectMode.SobelDepthThin;14	public var sensitivityDepth : float = 1.0f;15	public var sensitivityNormals : float = 1.0f;16	public var lumThreshhold : float = 0.2f;17	public var edgeExp : float = 1.0f;18	public var sampleDist : float = 1.0f;19	public var edgesOnly : float = 0.0f;20	public var edgesOnlyBgColor : Color = Color.white;21	public var edgeDetectShader : Shader;22	private var edgeDetectMaterial : Material = null;23	private var oldMode : EdgeDetectMode = EdgeDetectMode.SobelDepthThin;24	function CheckResources () : boolean {	25		CheckSupport (true);26	27		edgeDetectMaterial = CheckShaderAndCreateMaterial (edgeDetectShader,edgeDetectMaterial);28		if (mode != oldMode)29			SetCameraFlag ();30		oldMode = mode;31		if (!isSupported)32			ReportAutoDisable ();33		return isSupported;				34	}35	function Start () {36		oldMode	= mode;37	}38	function SetCameraFlag () {39		if (mode>1)40			camera.depthTextureMode |= DepthTextureMode.Depth;		41		else42			camera.depthTextureMode |= DepthTextureMode.DepthNormals;		43	}44	function OnEnable() {45		SetCameraFlag();46	}47	48	@ImageEffectOpaque49	function OnRenderImage (source : RenderTexture, destination : RenderTexture) {	50		if (CheckResources () == false) {51			Graphics.Blit (source, destination);52			return;53		}54				55		var sensitivity : Vector2 = Vector2 (sensitivityDepth, sensitivityNormals);		56		edgeDetectMaterial.SetVector ("_Sensitivity", Vector4 (sensitivity.x, sensitivity.y, 1.0, sensitivity.y));		57		edgeDetectMaterial.SetFloat ("_BgFade", edgesOnly);	58		edgeDetectMaterial.SetFloat ("_SampleDistance", sampleDist);		59		edgeDetectMaterial.SetVector ("_BgColor", edgesOnlyBgColor);	60		edgeDetectMaterial.SetFloat ("_Exponent", edgeExp);61		edgeDetectMaterial.SetFloat ("_Threshold", lumThreshhold);62		63		Graphics.Blit (source, destination, edgeDetectMaterial, mode);64	}...

Full Screen

Full Screen

detect.js

Source:detect.js Github

copy

Full Screen

1var Detect = {};2Detect.supportsWebSocket = function() {3    return window.WebSocket || window.MozWebSocket;4};5Detect.userAgentContains = function(string) {6    return navigator.userAgent.indexOf(string) != -1;7};8Detect.isTablet = function(screenWidth) {9    if(screenWidth > 720) {10        if(Detect.userAgentContains('Android')11        || Detect.userAgentContains('Mobile') || Detect.userAgentContains('iPad')) {12            return true;13        }14    }15    return false;16}17Detect.isMobile = function() {18	if(Detect.userAgentContains('Mobile') 19	    || Detect.userAgentContains('iPhone')) 20	{21	    return true;22	}23	return false;24}25Detect.isWindows = function() {26    return Detect.userAgentContains('Windows');27}28Detect.isChromeOnWindows = function() {29    return Detect.userAgentContains('Chrome') && Detect.userAgentContains('Windows');30};31Detect.isCanaryOnWindows = function() {32    return Detect.userAgentContains('Chrome/52') && Detect.userAgentContains('Windows');33};34Detect.isEdgeOnWindows = function() {35    return Detect.userAgentContains('Edge') && Detect.userAgentContains('Windows');36};37Detect.isFirefox = function() {38    //alert("useragent="+navigator.userAgent);39    return Detect.userAgentContains('Firefox');40};41Detect.canPlayMP3 = function() {42    return Modernizr.audio.mp3;43};44Detect.isSafari = function() {45    return Detect.userAgentContains('Safari') && !Detect.userAgentContains('Chrome');46};47Detect.isOpera = function() {48    return Detect.userAgentContains('Opera');49};50Detect.isFirefoxAndroid = function() {51    return Detect.userAgentContains('Android') && Detect.userAgentContains('Firefox');...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1describe('My First Test', function() {2  it('Does not do much!', function() {3    cy.contains('type').click()4    cy.url().should('include', '/commands/actions')5    cy.get('.action-email')6      .type('

Full Screen

Using AI Code Generation

copy

Full Screen

1describe('Cypress', () => {2    it('is working', () => {3        expect(true).to.equal(true)4    })5    it('visits the kitchen sink', () => {6    })7    it('finds the content "type"', () => {8        cy.contains('type')9    })10    it('clicks the link "type"', () => {11        cy.contains('type').click()12    })13    it('should display "type"', () => {14        cy.contains('type').click()15        cy.url().should('include', '/commands/actions')16        cy.get('.action-email')17            .type('fake@email')18            .should('have.value', 'fake@email')19    })20    it('should display "type"', () => {21        cy.contains('type').click()22        cy.url().should('include', '/commands/actions')23        cy.get('.action-email')24            .type('fakeemail')25            .should('have.value', 'fakeemail')26    })27})28describe('My First Test', () => {29    it('Does not do much!', () => {30        expect(true).to.equal(true)31    })32})33describe('My First Test', () => {34    it('Does not do much!', () => {35        expect(true).to.equal(true)36    })37    it('Visits the Kitchen Sink', () => {38    })39    it('Finds the content "type"', () => {40        cy.contains('type')41    })42})43describe('My First Test', () => {44    it('Does not do much!', () => {45        expect(true).to.equal(true)46    })47    it('Visits the Kitchen Sink', () => {48    })49    it('Finds the content "type"', () => {50        cy.contains('type')51    })52    it('Clicks the link "type"', () => {53        cy.visit('https

Full Screen

Using AI Code Generation

copy

Full Screen

1describe('My First Test', function() {2  it('Does not do much!', function() {3    expect(true).to.equal(true)4  })5})6describe('My First Test', function() {7  it('Visits the Kitchen Sink', function() {8  })9})10describe('My First Test', function() {11  it('clicks the link "type"', function() {12    cy.contains('type').click()13  })14})15describe('My First Test', function() {16  it('Gets, types and asserts', function() {17    cy.contains('type').click()18    cy.url().should('include', '/commands/actions')19    cy.get('.action-email')20      .type('

Full Screen

Using AI Code Generation

copy

Full Screen

1describe('My First Test', () => {2    it('Does not do much!', () => {3      expect(true).to.equal(true)4    })5  })6describe('My First Test', () => {7    it('Visits the Kitchen Sink', () => {8    })9  })10describe('My First Test', () => {11    it('Finds an element', () => {12      cy.contains('type').click()13      cy.url().should('include', '/commands/actions')14      cy.get('.action-email')15        .type('fake@email')16        .should('have.value', 'fake@email')17    })18  })19describe('My First Test', () => {20    it('clicks the link "type"', () => {21      cy.contains('type').click()22      cy.url().should('include', '/commands/actions')23    })24  })25describe('My First Test', () => {26    it('clicks the link "type" and assert url', () => {27      cy.contains('type').click()28      cy.url().should('include', '/commands/actions')29    })30  })31describe('My First Test', () => {32    it('clicks the link "type" and assert url', () => {33      cy.contains('type').click()34      cy.url().should('include', '/commands/actions')35    })36  })37describe('My First Test', () => {38    it('Gets, types and asserts', () => {

Full Screen

Using AI Code Generation

copy

Full Screen

1describe('My First Test', function() {2    it('Does not do much!', function() {3      expect(true).to.equal(true)4    })5  })6  describe('My First Test', function() {7    it('Finds an element', function() {8      cy.contains('type').click()9      cy.url().should('include', '/commands/actions')10      cy.get('.action-email')11        .type('

Full Screen

Using AI Code Generation

copy

Full Screen

1describe('My First Test', function() {2    it('Does not do much!', function() {3      cy.contains('type').click()4      cy.url().should('include', '/commands/actions')5      cy.get('.action-email')6        .type('

Full Screen

Using AI Code Generation

copy

Full Screen

1describe('My First Test', function() {2  it('Does not do much!', function() {3    cy.contains('type').click()4    cy.url().should('include', '/commands/actions')5    cy.get('.action-email')6      .type('

Full Screen

Cypress Tutorial

Cypress is a renowned Javascript-based open-source, easy-to-use end-to-end testing framework primarily used for testing web applications. Cypress is a relatively new player in the automation testing space and has been gaining much traction lately, as evidenced by the number of Forks (2.7K) and Stars (42.1K) for the project. LambdaTest’s Cypress Tutorial covers step-by-step guides that will help you learn from the basics till you run automation tests on LambdaTest.

Chapters:

  1. What is Cypress? -
  2. Why Cypress? - Learn why Cypress might be a good choice for testing your web applications.
  3. Features of Cypress Testing - Learn about features that make Cypress a powerful and flexible tool for testing web applications.
  4. Cypress Drawbacks - Although Cypress has many strengths, it has a few limitations that you should be aware of.
  5. Cypress Architecture - Learn more about Cypress architecture and how it is designed to be run directly in the browser, i.e., it does not have any additional servers.
  6. Browsers Supported by Cypress - Cypress is built on top of the Electron browser, supporting all modern web browsers. Learn browsers that support Cypress.
  7. Selenium vs Cypress: A Detailed Comparison - Compare and explore some key differences in terms of their design and features.
  8. Cypress Learning: Best Practices - Take a deep dive into some of the best practices you should use to avoid anti-patterns in your automation tests.
  9. How To Run Cypress Tests on LambdaTest? - Set up a LambdaTest account, and now you are all set to learn how to run Cypress tests.

Certification

You can elevate your expertise with end-to-end testing using the Cypress automation framework and stay one step ahead in your career by earning a Cypress certification. Check out our Cypress 101 Certification.

YouTube

Watch this 3 hours of complete tutorial to learn the basics of Cypress and various Cypress commands with the Cypress testing at LambdaTest.

Run Cypress automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful