Best Python code snippet using avocado_python
plugindetect.js
Source:plugindetect.js
...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:" ",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";...
mdetect.js
Source:mdetect.js
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...
bdc-script-include.js
Source:bdc-script-include.js
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 };...
addTest.js
Source:addTest.js
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 });...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!