Difference between revisions of "MediaWiki:Common.js"

From Team Fortress Wiki
Jump to: navigation, search
m
m (Enable custom CSS for User:Payn)
 
(153 intermediate revisions by 9 users not shown)
Line 1: Line 1:
// Note: This is a compressed version of the JavaScript code, for faster loading.
+
// This is the non-compressed version of MediaWiki:Common.js
// See http://wiki.teamfortress.com/wiki/MediaWiki:Common.js/Code.js for full readable code and licensing
 
  
function talkpageplus(){var a=document.getElementById("ca-talk");if(a&&a.className=="new"){a.firstChild.href+="&section=new"}}function langClass(){var a=["ar","cs","da","de","es","fi","fr","hu","it","ja","ko","nl","no","pl","pt","pt-br","ro","ru","sv","zh-hans","zh-hant"];var b="en";try{var c=document.getElementsByTagName("body")[0]}catch(d){return}var e=b;for(var f in a){if(wgPageName.substr(wgPageName.length-1-a[f].length).toLowerCase()=="/"+a[f].toLowerCase()){e=a[f];break}}if(c.getAttribute("class")){c.setAttribute("class",c.getAttribute("class")+" lang-"+e)}else{c.setAttribute("class","lang-"+e)}}function createNavigationBarToggleButton(){var a=0;var b=document.getElementsByTagName("div");for(var c=0;NavFrame=b[c];c++){if(hasClass(NavFrame,"NavFrame")){a++;var d=document.createElement("a");d.className="NavToggle";d.setAttribute("id","NavToggle"+a);d.setAttribute("href","javascript:toggleNavigationBar("+a+");");var e=hasClass(NavFrame,"collapsed");for(var f=NavFrame.firstChild;f!=null&&!e;f=f.nextSibling){if(hasClass(f,"NavPic")||hasClass(f,"NavContent")){if(f.style.display=="none"){e=true}}}if(e){for(var f=NavFrame.firstChild;f!=null;f=f.nextSibling){if(hasClass(f,"NavPic")||hasClass(f,"NavContent")){f.style.display="none"}}}var g=document.createTextNode(e?NavigationBarShow:NavigationBarHide);d.appendChild(g);for(var h=0;h<NavFrame.childNodes.length;h++){if(hasClass(NavFrame.childNodes[h],"NavHead")){d.style.color=NavFrame.childNodes[h].style.color;NavFrame.childNodes[h].appendChild(d)}}NavFrame.setAttribute("id","NavFrame"+a)}}}function toggleNavigationBar(a){var b=document.getElementById("NavToggle"+a);var c=document.getElementById("NavFrame"+a);if(!c||!b){return false}if(b.firstChild.data==NavigationBarHide){for(var d=c.firstChild;d!=null;d=d.nextSibling){if(hasClass(d,"NavContent")||hasClass(d,"NavPic")){d.style.display="none"}}b.firstChild.data=NavigationBarShow}else if(b.firstChild.data==NavigationBarShow){for(var d=c.firstChild;d!=null;d=d.nextSibling){if(hasClass(d,"NavContent")||hasClass(d,"NavPic")){d.style.display="block"}}b.firstChild.data=NavigationBarHide}}function createCollapseButtons(){var a=0;var b=new Object;var c=document.getElementsByTagName("table");for(var d=0;d<c.length;d++){if(hasClass(c[d],"collapsible")){var e=c[d].getElementsByTagName("tr")[0];if(!e)continue;var f=e.getElementsByTagName("th")[0];if(!f)continue;b[a]=c[d];c[d].setAttribute("id","collapsibleTable"+a);var g=document.createElement("span");var h=document.createElement("a");var i=document.createTextNode(collapseCaption);g.style.styleFloat="right";g.style.cssFloat="right";g.style.fontWeight="normal";g.style.textAlign="right";g.style.width="6em";h.style.color=f.style.color;h.setAttribute("id","collapseButton"+a);h.setAttribute("href","javascript:collapseTable("+a+");");h.appendChild(i);g.appendChild(document.createTextNode("["));g.appendChild(h);g.appendChild(document.createTextNode("]"));f.insertBefore(g,f.childNodes[0]);a++}}for(var d=0;d<a;d++){if(hasClass(b[d],"collapsed")||a>=autoCollapse&&hasClass(b[d],"autocollapse")){collapseTable(d)}}}function collapseTable(a){var b=document.getElementById("collapseButton"+a);var c=document.getElementById("collapsibleTable"+a);if(!c||!b){return false}var d=c.rows;if(b.firstChild.data==collapseCaption){for(var e=1;e<d.length;e++){d[e].style.display="none"}b.firstChild.data=expandCaption}else{for(var e=1;e<d.length;e++){d[e].style.display=d[0].style.display}b.firstChild.data=collapseCaption}}(function(a,b){function p(a){return r.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}function o(a){if(!bD[a]){var b=r("<"+a+">").appendTo("body"),c=b.css("display");b.remove();if(c==="none"||c==="")c="block";bD[a]=c}return bD[a]}function n(a,b){var c={};r.each(bH.concat.apply([],bH.slice(0,b)),function(){c[this]=a});return c}function m(a,b,c,d){if(r.isArray(b)&&b.length)r.each(b,function(b,e){c||bv.test(a)?d(a,e):m(a+"["+(typeof e==="object"||r.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b==="object")r.isEmptyObject(b)?d(a,""):r.each(b,function(b,e){m(a+"["+b+"]",e,c,d)});else d(a,b)}function l(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight;if(c==="border")return d;r.each(b==="width"?bk:bl,function(){c||(d-=parseFloat(r.css(a,"padding"+this))||0);if(c==="margin")d+=parseFloat(r.css(a,"margin"+this))||0;else d-=parseFloat(r.css(a,"border"+this+"Width"))||0});return d}function k(a,b){b.src?r.ajax({url:b.src,async:false,dataType:"script"}):r.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function j(a,b){var c=0;b.each(function(){if(this.nodeName===(a[c]&&a[c].nodeName)){var b=r.data(a[c++]),d=r.data(this,b);if(b=b&&b.events){delete d.handle;d.events={};for(var e in b)for(var f in b[e])r.event.add(this,e,b[e][f],b[e][f].data)}}})}function i(a,b,c){if(r.isFunction(b))return r.grep(a,function(a,d){return!!b.call(a,d,a)===c});else if(b.nodeType)return r.grep(a,function(a){return a===b===c});else if(typeof b==="string"){var d=r.grep(a,function(a){return a.nodeType===1});if(S.test(b))return r.filter(b,d,!c);else b=r.filter(b,d)}return r.grep(a,function(a){return r.inArray(a,b)>=0===c})}function h(a,b){return(a&&a!=="*"?a+".":"")+b.replace(E,"`").replace(F,"&")}function g(a){var b,c,d,e,f,g,h,i,j,k,l,m=[];e=[];f=r.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;if(!(a.liveFired===this||!f||!f.live||a.button&&a.type==="click")){if(a.namespace)l=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var n=f.live.slice(0);for(h=0;h<n.length;h++){f=n[h];f.origType.replace(C,"")===a.type?e.push(f.selector):n.splice(h--,1)}e=r(a.target).closest(e,a.currentTarget);i=0;for(j=e.length;i<j;i++){k=e[i];for(h=0;h<n.length;h++){f=n[h];if(k.selector===f.selector&&(!l||l.test(f.namespace))){g=k.elem;d=null;if(f.preType==="mouseenter"||f.preType==="mouseleave"){a.type=f.preType;d=r(a.relatedTarget).closest(f.selector)[0]}if(!d||d!==g)m.push({elem:g,handleObj:f,level:k.level})}}}i=0;for(j=m.length;i<j;i++){e=m[i];if(c&&e.level>c)break;a.currentTarget=e.elem;a.data=e.handleObj.data;a.handleObj=e.handleObj;l=e.handleObj.origHandler.apply(e.elem,arguments);if(l===false||a.isPropagationStopped()){c=e.level;if(l===false)b=false;if(a.isImmediatePropagationStopped())break}}return b}}function f(a,b,c){c[0].type=a;return r.event.handle.apply(b,c)}function e(){return true}function d(){return false}function c(a,c,d){if(d===b&&a.nodeType===1){d=a.getAttribute("data-"+c);if(typeof d==="string"){try{d=d==="true"?true:d==="false"?false:d==="null"?null:!r.isNaN(d)?parseFloat(d):t.test(d)?r.parseJSON(d):d}catch(e){}r.data(a,c,d)}else d=b}return d}var q=a.document,r=function(){function c(){if(!d.isReady){try{q.documentElement.doScroll("left")}catch(a){setTimeout(c,1);return}d.ready()}}var d=function(a,b){return new d.fn.init(a,b)},e=a.jQuery,f=a.$,g,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,i=/\S/,j=/^\s+/,k=/\s+$/,l=/\W/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,r=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,s=/(?:^|:|,)(?:\s*\[)+/g,t=/(webkit)[ \/]([\w.]+)/,u=/(opera)(?:.*version)?[ \/]([\w.]+)/,v=/(msie) ([\w.]+)/,w=/(mozilla)(?:.*? rv:([\w.]+))?/,x=navigator.userAgent,y=false,z=[],A,B=Object.prototype.toString,C=Object.prototype.hasOwnProperty,D=Array.prototype.push,E=Array.prototype.slice,F=String.prototype.trim,G=Array.prototype.indexOf,H={};d.fn=d.prototype={init:function(a,c){var e,f,i;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!c&&q.body){this.context=q;this[0]=q.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((e=h.exec(a))&&(e[1]||!c))if(e[1]){i=c?c.ownerDocument||c:q;if(f=n.exec(a))if(d.isPlainObject(c)){a=[q.createElement(f[1])];d.fn.attr.call(a,c,true)}else a=[i.createElement(f[1])];else{f=d.buildFragment([e[1]],[i]);a=(f.cacheable?f.fragment.cloneNode(true):f.fragment).childNodes}return d.merge(this,a)}else{if((f=q.getElementById(e[2]))&&f.parentNode){if(f.id!==e[2])return g.find(a);this.length=1;this[0]=f}this.context=q;this.selector=a;return this}else if(!c&&!l.test(a)){this.selector=a;this.context=q;a=q.getElementsByTagName(a);return d.merge(this,a)}else return!c||c.jquery?(c||g).find(a):d(c).find(a);else if(d.isFunction(a))return g.ready(a);if(a.selector!==b){this.selector=a.selector;this.context=a.context}return d.makeArray(a,this)},selector:"",jquery:"1.4.4",length:0,size:function(){return this.length},toArray:function(){return E.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,c){var e=d();d.isArray(a)?D.apply(e,a):d.merge(e,a);e.prevObject=this;e.context=this.context;if(b==="find")e.selector=this.selector+(this.selector?" ":"")+c;else if(b)e.selector=this.selector+"."+b+"("+c+")";return e},each:function(a,b){return d.each(this,a,b)},ready:function(a){d.bindReady();if(d.isReady)a.call(q,d);else z&&z.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(E.apply(this,arguments),"slice",E.call(arguments).join(","))},map:function(a){return this.pushStack(d.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||d(null)},push:D,sort:[].sort,splice:[].splice};d.fn.init.prototype=d.fn;d.extend=d.fn.extend=function(){var a,c,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=false;if(typeof h==="boolean"){k=h;h=arguments[1]||{};i=2}if(typeof h!=="object"&&!d.isFunction(h))h={};if(j===i){h=this;--i}for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){e=h[c];f=a[c];if(h!==f)if(k&&f&&(d.isPlainObject(f)||(g=d.isArray(f)))){if(g){g=false;e=e&&d.isArray(e)?e:[]}else e=e&&d.isPlainObject(e)?e:{};h[c]=d.extend(k,e,f)}else if(f!==b)h[c]=f}return h};d.extend({noConflict:function(b){a.$=f;if(b)a.jQuery=e;return d},isReady:false,readyWait:1,ready:function(a){a===true&&d.readyWait--;if(!d.readyWait||a!==true&&!d.isReady){if(!q.body)return setTimeout(d.ready,1);d.isReady=true;if(!(a!==true&&--d.readyWait>0))if(z){var b=0,c=z;for(z=null;a=c[b++];)a.call(q,d);d.fn.trigger&&d(q).trigger("ready").unbind("ready")}}},bindReady:function(){if(!y){y=true;if(q.readyState==="complete")return setTimeout(d.ready,1);if(q.addEventListener){q.addEventListener("DOMContentLoaded",A,false);a.addEventListener("load",d.ready,false)}else if(q.attachEvent){q.attachEvent("onreadystatechange",A);a.attachEvent("onload",d.ready);var b=false;try{b=a.frameElement==null}catch(e){}q.documentElement.doScroll&&b&&c()}}},isFunction:function(a){return d.type(a)==="function"},isArray:Array.isArray||function(a){return d.type(a)==="array"},isWindow:function(a){return a&&typeof a==="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):H[B.call(a)]||"object"},isPlainObject:function(a){if(!a||d.type(a)!=="object"||a.nodeType||d.isWindow(a))return false;if(a.constructor&&!C.call(a,"constructor")&&!C.call(a.constructor.prototype,"isPrototypeOf"))return false;for(var c in a);return c===b||C.call(a,c)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a},parseJSON:function(b){if(typeof b!=="string"||!b)return null;b=d.trim(b);if(o.test(b.replace(p,"@").replace(r,"]").replace(s,"")))return a.JSON&&a.JSON.parse?a.JSON.parse(b):(new Function("return "+b))();else d.error("Invalid JSON: "+b)},noop:function(){},globalEval:function(a){if(a&&i.test(a)){var b=q.getElementsByTagName("head")[0]||q.documentElement,c=q.createElement("script");c.type="text/javascript";if(d.support.scriptEval)c.appendChild(q.createTextNode(a));else c.text=a;b.insertBefore(c,b.firstChild);b.removeChild(c)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,e){var f,g=0,h=a.length,i=h===b||d.isFunction(a);if(e)if(i)for(f in a){if(c.apply(a[f],e)===false)break}else for(;g<h;){if(c.apply(a[g++],e)===false)break}else if(i)for(f in a){if(c.call(a[f],f,a[f])===false)break}else for(e=a[0];g<h&&c.call(e,g,e)!==false;e=a[++g]);return a},trim:F?function(a){return a==null?"":F.call(a)}:function(a){return a==null?"":a.toString().replace(j,"").replace(k,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var e=d.type(a);a.length==null||e==="string"||e==="function"||e==="regexp"||d.isWindow(a)?D.call(c,a):d.merge(c,a)}return c},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length==="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else for(;c[e]!==b;)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++){e=!!b(a[f],f);c!==e&&d.push(a[f])}return d},map:function(a,b,c){for(var d=[],e,f=0,g=a.length;f<g;f++){e=b(a[f],f,c);if(e!=null)d[d.length]=e}return d.concat.apply([],d)},guid:1,proxy:function(a,c,e){if(arguments.length===2)if(typeof c==="string"){e=a;a=e[c];c=b}else if(c&&!d.isFunction(c)){e=c;c=b}if(!c&&a)c=function(){return a.apply(e||this,arguments)};if(a)c.guid=a.guid=a.guid||c.guid||d.guid++;return c},access:function(a,c,e,f,g,h){var i=a.length;if(typeof c==="object"){for(var j in c)d.access(a,j,c[j],f,g,e);return a}if(e!==b){f=!h&&f&&d.isFunction(e);for(j=0;j<i;j++)g(a[j],c,f?e.call(a[j],j,g(a[j],c)):e,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();a=t.exec(a)||u.exec(a)||v.exec(a)||a.indexOf("compatible")<0&&w.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});d.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){H["[object "+b+"]"]=b.toLowerCase()});x=d.uaMatch(x);if(x.browser){d.browser[x.browser]=true;d.browser.version=x.version}if(d.browser.webkit)d.browser.safari=true;if(G)d.inArray=function(a,b){return G.call(b,a)};if(!/\s/.test(" ")){j=/^[\s\xA0]+/;k=/[\s\xA0]+$/}g=d(q);if(q.addEventListener)A=function(){q.removeEventListener("DOMContentLoaded",A,false);d.ready()};else if(q.attachEvent)A=function(){if(q.readyState==="complete"){q.detachEvent("onreadystatechange",A);d.ready()}};return a.jQuery=a.$=d}();(function(){r.support={};var b=q.documentElement,c=q.createElement("script"),d=q.createElement("div"),e="script"+r.now();d.style.display="none";d.innerHTML="  <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var f=d.getElementsByTagName("*"),g=d.getElementsByTagName("a")[0],h=q.createElement("select"),i=h.appendChild(q.createElement("option"));if(!(!f||!f.length||!g)){r.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(g.getAttribute("style")),hrefNormalized:g.getAttribute("href")==="/a",opacity:/^0.55$/.test(g.style.opacity),cssFloat:!!g.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:i.selected,deleteExpando:true,optDisabled:false,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};h.disabled=true;r.support.optDisabled=!i.disabled;c.type="text/javascript";try{c.appendChild(q.createTextNode("window."+e+"=1;"))}catch(j){}b.insertBefore(c,b.firstChild);if(a[e]){r.support.scriptEval=true;delete a[e]}try{delete c.test}catch(k){r.support.deleteExpando=false}b.removeChild(c);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function l(){r.support.noCloneEvent=false;d.detachEvent("onclick",l)});d.cloneNode(true).fireEvent("onclick")}d=q.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";b=q.createDocumentFragment();b.appendChild(d.firstChild);r.support.checkClone=b.cloneNode(true).cloneNode(true).lastChild.checked;r(function(){var a=q.createElement("div");a.style.width=a.style.paddingLeft="1px";q.body.appendChild(a);r.boxModel=r.support.boxModel=a.offsetWidth===2;if("zoom"in a.style){a.style.display="inline";a.style.zoom=1;r.support.inlineBlockNeedsLayout=a.offsetWidth===2;a.style.display="";a.innerHTML="<div style='width:4px;'></div>";r.support.shrinkWrapBlocks=a.offsetWidth!==2}a.innerHTML="<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";var b=a.getElementsByTagName("td");r.support.reliableHiddenOffsets=b[0].offsetHeight===0;b[0].style.display="";b[1].style.display="none";r.support.reliableHiddenOffsets=r.support.reliableHiddenOffsets&&b[0].offsetHeight===0;a.innerHTML="";q.body.removeChild(a).style.display="none"});b=function(a){var b=q.createElement("div");a="on"+a;var c=a in b;if(!c){b.setAttribute(a,"return;");c=typeof b[a]==="function"}return c};r.support.submitBubbles=b("submit");r.support.changeBubbles=b("change");b=c=d=f=g=null}})();var s={},t=/^(?:\{.*\}|\[.*\])$/;r.extend({cache:{},uuid:0,expando:"jQuery"+r.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(c,d,e){if(r.acceptData(c)){c=c==a?s:c;var f=c.nodeType,g=f?c[r.expando]:null,h=r.cache;if(!(f&&!g&&typeof d==="string"&&e===b)){if(f)g||(c[r.expando]=g=++r.uuid);else h=c;if(typeof d==="object")if(f)h[g]=r.extend(h[g],d);else r.extend(h,d);else if(f&&!h[g])h[g]={};c=f?h[g]:h;if(e!==b)c[d]=e;return typeof d==="string"?c[d]:c}}},removeData:function(b,c){if(r.acceptData(b)){b=b==a?s:b;var d=b.nodeType,e=d?b[r.expando]:b,f=r.cache,g=d?f[e]:e;if(c){if(g){delete g[c];d&&r.isEmptyObject(g)&&r.removeData(b)}}else if(d&&r.support.deleteExpando)delete b[r.expando];else if(b.removeAttribute)b.removeAttribute(r.expando);else if(d)delete f[e];else for(var h in b)delete b[h]}},acceptData:function(a){if(a.nodeName){var b=r.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});r.fn.extend({data:function(a,d){var e=null;if(typeof a==="undefined"){if(this.length){var f=this[0].attributes,g;e=r.data(this[0]);for(var h=0,i=f.length;h<i;h++){g=f[h].name;if(g.indexOf("data-")===0){g=g.substr(5);c(this[0],g,e[g])}}}return e}else if(typeof a==="object")return this.each(function(){r.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(d===b){e=this.triggerHandler("getData"+j[1]+"!",[j[0]]);if(e===b&&this.length){e=r.data(this[0],a);e=c(this[0],a,e)}return e===b&&j[1]?this.data(j[0]):e}else return this.each(function(){var b=r(this),c=[j[0],d];b.triggerHandler("setData"+j[1]+"!",c);r.data(this,a,d);b.triggerHandler("changeData"+j[1]+"!",c)})},removeData:function(a){return this.each(function(){r.removeData(this,a)})}});r.extend({queue:function(a,b,c){if(a){b=(b||"fx")+"queue";var d=r.data(a,b);if(!c)return d||[];if(!d||r.isArray(c))d=r.data(a,b,r.makeArray(c));else d.push(c);return d}},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.shift();if(d==="inprogress")d=c.shift();if(d){b==="fx"&&c.unshift("inprogress");d.call(a,function(){r.dequeue(a,b)})}}});r.fn.extend({queue:function(a,c){if(typeof a!=="string"){c=a;a="fx"}if(c===b)return r.queue(this[0],a);return this.each(function(){var b=r.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},delay:function(a,b){a=r.fx?r.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){r.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var u=/[\n\t]/g,v=/\s+/,w=/\r/g,x=/^(?:href|src|style)$/,y=/^(?:button|input)$/i,z=/^(?:button|input|object|select|textarea)$/i,A=/^a(?:rea)?$/i,B=/^(?:radio|checkbox)$/i;r.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};r.fn.extend({attr:function(a,b){return r.access(this,a,b,true,r.attr)},removeAttr:function(a){return this.each(function(){r.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(r.isFunction(a))return this.each(function(b){var c=r(this);c.addClass(a.call(this,b,c.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(v),c=0,d=this.length;c<d;c++){var e=this[c];if(e.nodeType===1)if(e.className){for(var f=" "+e.className+" ",g=e.className,h=0,i=b.length;h<i;h++)if(f.indexOf(" "+b[h]+" ")<0)g+=" "+b[h];e.className=r.trim(g)}else e.className=a}return this},removeClass:function(a){if(r.isFunction(a))return this.each(function(b){var c=r(this);c.removeClass(a.call(this,b,c.attr("class")))});if(a&&typeof a==="string"||a===b)for(var c=(a||"").split(v),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===1&&f.className)if(a){for(var g=(" "+f.className+" ").replace(u," "),h=0,i=c.length;h<i;h++)g=g.replace(" "+c[h]+" "," ");f.className=r.trim(g)}else f.className=""}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b==="boolean";if(r.isFunction(a))return this.each(function(c){var d=r(this);d.toggleClass(a.call(this,c,d.attr("class"),b),b)});return this.each(function(){if(c==="string")for(var e,f=0,g=r(this),h=b,i=a.split(v);e=i[f++];){h=d?h:!g.hasClass(e);g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean"){this.className&&r.data(this,"__className__",this.className);this.className=this.className||a===false?"":r.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,c=this.length;b<c;b++)if((" "+this[b].className+" ").replace(u," ").indexOf(a)>-1)return true;return false},val:function(a){if(!arguments.length){var c=this[0];if(c){if(r.nodeName(c,"option")){var d=c.attributes.value;return!d||d.specified?c.value:c.text}if(r.nodeName(c,"select")){var e=c.selectedIndex;d=[];var f=c.options;c=c.type==="select-one";if(e<0)return null;var g=c?e:0;for(e=c?e+1:f.length;g<e;g++){var h=f[g];if(h.selected&&(r.support.optDisabled?!h.disabled:h.getAttribute("disabled")===null)&&(!h.parentNode.disabled||!r.nodeName(h.parentNode,"optgroup"))){a=r(h).val();if(c)return a;d.push(a)}}return d}if(B.test(c.type)&&!r.support.checkOn)return c.getAttribute("value")===null?"on":c.value;return(c.value||"").replace(w,"")}return b}var i=r.isFunction(a);return this.each(function(b){var c=r(this),d=a;if(this.nodeType===1){if(i)d=a.call(this,b,c.val());if(d==null)d="";else if(typeof d==="number")d+="";else if(r.isArray(d))d=r.map(d,function(a){return a==null?"":a+""});if(r.isArray(d)&&B.test(this.type))this.checked=r.inArray(c.val(),d)>=0;else if(r.nodeName(this,"select")){var e=r.makeArray(d);r("option",this).each(function(){this.selected=r.inArray(r(this).val(),e)>=0});if(!e.length)this.selectedIndex=-1}else this.value=d}})}});r.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8)return b;if(e&&c in r.attrFn)return r(a)[c](d);e=a.nodeType!==1||!r.isXMLDoc(a);var f=d!==b;c=e&&r.props[c]||c;var g=x.test(c);if((c in a||a[c]!==b)&&e&&!g){if(f){c==="type"&&y.test(a.nodeName)&&a.parentNode&&r.error("type property can't be changed");if(d===null)a.nodeType===1&&a.removeAttribute(c);else a[c]=d}if(r.nodeName(a,"form")&&a.getAttributeNode(c))return a.getAttributeNode(c).nodeValue;if(c==="tabIndex")return(c=a.getAttributeNode("tabIndex"))&&c.specified?c.value:z.test(a.nodeName)||A.test(a.nodeName)&&a.href?0:b;return a[c]}if(!r.support.style&&e&&c==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(c,""+d);if(!a.attributes[c]&&a.hasAttribute&&!a.hasAttribute(c))return b;a=!r.support.hrefNormalized&&e&&g?a.getAttribute(c,2):a.getAttribute(c);return a===null?b:a}});var C=/\.(.*)$/,D=/^(?:textarea|input|select)$/i,E=/\./g,F=/ /g,G=/[^\w\s.|`]/g,H=function(a){return a.replace(G,"\\$&")},I={focusin:0,focusout:0};r.event={add:function(c,e,f,g){if(!(c.nodeType===3||c.nodeType===8)){if(r.isWindow(c)&&c!==a&&!c.frameElement)c=a;if(f===false)f=d;else if(!f)return;var h,i;if(f.handler){h=f;f=h.handler}if(!f.guid)f.guid=r.guid++;if(i=r.data(c)){var j=c.nodeType?"events":"__events__",k=i[j],l=i.handle;if(typeof k==="function"){l=k.handle;k=k.events}else if(!k){c.nodeType||(i[j]=i=function(){});i.events=k={}}if(!l)i.handle=l=function(){return typeof r!=="undefined"&&!r.event.triggered?r.event.handle.apply(l.elem,arguments):b};l.elem=c;e=e.split(" ");for(var m=0,n;j=e[m++];){i=h?r.extend({},h):{handler:f,data:g};if(j.indexOf(".")>-1){n=j.split(".");j=n.shift();i.namespace=n.slice(0).sort().join(".")}else{n=[];i.namespace=""}i.type=j;if(!i.guid)i.guid=f.guid;var o=k[j],p=r.event.special[j]||{};if(!o){o=k[j]=[];if(!p.setup||p.setup.call(c,g,n,l)===false)if(c.addEventListener)c.addEventListener(j,l,false);else c.attachEvent&&c.attachEvent("on"+j,l)}if(p.add){p.add.call(c,i);if(!i.handler.guid)i.handler.guid=f.guid}o.push(i);r.event.global[j]=true}c=null}}},global:{},remove:function(a,b,c,e){if(!(a.nodeType===3||a.nodeType===8)){if(c===false)c=d;var f,g,h=0,i,j,k,l,m,n,o=a.nodeType?"events":"__events__",p=r.data(a),q=p&&p[o];if(p&&q){if(typeof q==="function"){p=q;q=q.events}if(b&&b.type){c=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in q)r.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[h++];){l=f;i=f.indexOf(".")<0;j=[];if(!i){j=f.split(".");f=j.shift();k=RegExp("(^|\\.)"+r.map(j.slice(0).sort(),H).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(m=q[f])if(c){l=r.event.special[f]||{};for(g=e||0;g<m.length;g++){n=m[g];if(c.guid===n.guid){if(i||k.test(n.namespace)){e==null&&m.splice(g--,1);l.remove&&l.remove.call(a,n)}if(e!=null)break}}if(m.length===0||e!=null&&m.length===1){if(!l.teardown||l.teardown.call(a,j)===false)r.removeEvent(a,f,p.handle);delete q[f]}}else for(g=0;g<m.length;g++){n=m[g];if(i||k.test(n.namespace)){r.event.remove(a,l,n.handler,g);m.splice(g--,1)}}}if(r.isEmptyObject(q)){if(b=p.handle)b.elem=null;delete p.events;delete p.handle;if(typeof p==="function")r.removeData(a,o);else r.isEmptyObject(p)&&r.removeData(a)}}}}},trigger:function(a,c,d,e){var f=a.type||a;if(!e){a=typeof a==="object"?a[r.expando]?a:r.extend(r.Event(f),a):r.Event(f);if(f.indexOf("!")>=0){a.type=f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();r.event.global[f]&&r.each(r.cache,function(){this.events&&this.events[f]&&r.event.trigger(a,c,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return b;a.result=b;a.target=d;c=r.makeArray(c);c.unshift(a)}a.currentTarget=d;(e=d.nodeType?r.data(d,"handle"):(r.data(d,"__events__")||{}).handle)&&e.apply(d,c);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&r.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,c)===false){a.result=false;a.preventDefault()}}catch(g){}if(!a.isPropagationStopped()&&e)r.event.trigger(a,c,e,true);else if(!a.isDefaultPrevented()){var h;e=a.target;var i=f.replace(C,""),j=r.nodeName(e,"a")&&i==="click",k=r.event.special[i]||{};if((!k._default||k._default.call(d,a)===false)&&!j&&!(e&&e.nodeName&&r.noData[e.nodeName.toLowerCase()])){try{if(e[i]){if(h=e["on"+i])e["on"+i]=null;r.event.triggered=true;e[i]()}}catch(l){}if(h)e["on"+i]=h;r.event.triggered=false}}},handle:function(c){var d,e,f,g;e=[];var h=r.makeArray(arguments);c=h[0]=r.event.fix(c||a.event);c.currentTarget=this;d=c.type.indexOf(".")<0&&!c.exclusive;if(!d){f=c.type.split(".");c.type=f.shift();e=f.slice(0).sort();f=RegExp("(^|\\.)"+e.join("\\.(?:.*\\.)?")+"(\\.|$)")}c.namespace=c.namespace||e.join(".");g=r.data(this,this.nodeType?"events":"__events__");if(typeof g==="function")g=g.events;e=(g||{})[c.type];if(g&&e){e=e.slice(0);g=0;for(var i=e.length;g<i;g++){var j=e[g];if(d||f.test(j.namespace)){c.handler=j.handler;c.data=j.data;c.handleObj=j;j=j.handler.apply(this,h);if(j!==b){c.result=j;if(j===false){c.preventDefault();c.stopPropagation()}}if(c.isImmediatePropagationStopped())break}}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[r.expando])return a;var c=a;a=r.Event(c);for(var d=this.props.length,e;d;){e=this.props[--d];a[e]=c[e]}if(!a.target)a.target=a.srcElement||q;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){c=q.documentElement;d=q.body;a.pageX=a.clientX+(c&&c.scrollLeft||d&&d.scrollLeft||0)-(c&&c.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(c&&c.scrollTop||d&&d.scrollTop||0)-(c&&c.clientTop||d&&d.clientTop||0)}if(a.which==null&&(a.charCode!=null||a.keyCode!=null))a.which=a.charCode!=null?a.charCode:a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==b)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1e8,proxy:r.proxy,special:{ready:{setup:r.bindReady,teardown:r.noop},live:{add:function(a){r.event.add(this,h(a.origType,a.selector),r.extend({},a,{handler:g,guid:a.handler.guid}))},remove:function(a){r.event.remove(this,h(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){if(r.isWindow(this))this.onbeforeunload=c},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};r.removeEvent=q.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,false)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)};r.Event=function(a){if(!this.preventDefault)return new r.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=r.now();this[r.expando]=true};r.Event.prototype={preventDefault:function(){this.isDefaultPrevented=e;var a=this.originalEvent;if(a)if(a.preventDefault)a.preventDefault();else a.returnValue=false},stopPropagation:function(){this.isPropagationStopped=e;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=e;this.stopPropagation()},isDefaultPrevented:d,isPropagationStopped:d,isImmediatePropagationStopped:d};var J=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;r.event.handle.apply(this,arguments)}}catch(c){}},K=function(a){a.type=a.data;r.event.handle.apply(this,arguments)};r.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){r.event.special[a]={setup:function(c){r.event.add(this,b,c&&c.selector?K:J,a)},teardown:function(a){r.event.remove(this,b,a&&a.selector?K:J)}}});if(!r.support.submitBubbles)r.event.special.submit={setup:function(){if(this.nodeName.toLowerCase()!=="form"){r.event.add(this,"click.specialSubmit",function(a){var c=a.target,d=c.type;if((d==="submit"||d==="image")&&r(c).closest("form").length){a.liveFired=b;return f("submit",this,arguments)}});r.event.add(this,"keypress.specialSubmit",function(a){var c=a.target,d=c.type;if((d==="text"||d==="password")&&r(c).closest("form").length&&a.keyCode===13){a.liveFired=b;return f("submit",this,arguments)}})}else return false},teardown:function(){r.event.remove(this,".specialSubmit")}};if(!r.support.changeBubbles){var L,M=function(a){var b=a.type,c=a.value;if(b==="radio"||b==="checkbox")c=a.checked;else if(b==="select-multiple")c=a.selectedIndex>-1?r.map(a.options,function(a){return a.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")c=a.selectedIndex;return c},N=function(a,c){var d=a.target,e,f;if(!(!D.test(d.nodeName)||d.readOnly)){e=r.data(d,"_change_data");f=M(d);if(a.type!=="focusout"||d.type!=="radio")r.data(d,"_change_data",f);if(!(e===b||f===e))if(e!=null||f){a.type="change";a.liveFired=b;return r.event.trigger(a,c,d)}}};r.event.special.change={filters:{focusout:N,beforedeactivate:N,click:function(a){var b=a.target,c=b.type;if(c==="radio"||c==="checkbox"||b.nodeName.toLowerCase()==="select")return N.call(this,a)},keydown:function(a){var b=a.target,c=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")return N.call(this,a)},beforeactivate:function(a){a=a.target;r.data(a,"_change_data",M(a))}},setup:function(){if(this.type==="file")return false;for(var a in L)r.event.add(this,a+".specialChange",L[a]);return D.test(this.nodeName)},teardown:function(){r.event.remove(this,".specialChange");return D.test(this.nodeName)}};L=r.event.special.change.filters;L.focus=L.beforeactivate}q.addEventListener&&r.each({focus:"focusin",blur:"focusout"},function(a,b){function c(a){a=r.event.fix(a);a.type=b;return r.event.trigger(a,null,a.target)}r.event.special[b]={setup:function(){I[b]++===0&&q.addEventListener(a,c,true)},teardown:function(){--I[b]===0&&q.removeEventListener(a,c,true)}}});r.each(["bind","one"],function(a,c){r.fn[c]=function(a,d,e){if(typeof a==="object"){for(var f in a)this[c](f,d,a[f],e);return this}if(r.isFunction(d)||d===false){e=d;d=b}var g=c==="one"?r.proxy(e,function(a){r(this).unbind(a,g);return e.apply(this,arguments)}):e;if(a==="unload"&&c!=="one")this.one(a,d,e);else{f=0;for(var h=this.length;f<h;f++)r.event.add(this[f],a,g,d)}return this}});r.fn.extend({unbind:function(a,b){if(typeof a==="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else{c=0;for(var d=this.length;c<d;c++)r.event.remove(this[c],a,b)}return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){var c=r.Event(a);c.preventDefault();c.stopPropagation();r.event.trigger(c,b,this[0]);return c.result}},toggle:function(a){for(var b=arguments,c=1;c<b.length;)r.proxy(a,b[c++]);return this.click(r.proxy(a,function(d){var e=(r.data(this,"lastToggle"+a.guid)||0)%c;r.data(this,"lastToggle"+a.guid,e+1);d.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var O={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};r.each(["live","die"],function(a,c){r.fn[c]=function(a,d,e,f){var g,i=0,j,k,l=f||this.selector;f=f?this:r(this.context);if(typeof a==="object"&&!a.preventDefault){for(g in a)f[c](g,d,a[g],l);return this}if(r.isFunction(d)){e=d;d=b}for(a=(a||"").split(" ");(g=a[i++])!=null;){j=C.exec(g);k="";if(j){k=j[0];g=g.replace(C,"")}if(g==="hover")a.push("mouseenter"+k,"mouseleave"+k);else{j=g;if(g==="focus"||g==="blur"){a.push(O[g]+k);g+=k}else g=(O[g]||g)+k;if(c==="live"){k=0;for(var m=f.length;k<m;k++)r.event.add(f[k],"live."+h(g,l),{data:d,selector:l,handler:e,origType:g,origHandler:e,preType:j})}else f.unbind("live."+h(g,l),e)}}return this}});r.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){r.fn[b]=function(a,c){if(c==null){c=a;a=null}return arguments.length>0?this.bind(b,a,c):this.trigger(b)};if(r.attrFn)r.attrFn[b]=true});a.attachEvent&&!a.addEventListener&&r(a).bind("unload",function(){for(var a in r.cache)if(r.cache[a].handle)try{r.event.remove(r.cache[a].handle.elem)}catch(b){}});(function(){function c(a,b,c,d,e,f){e=0;for(var g=d.length;e<g;e++){var h=d[e];if(h){var j=false;for(h=h[a];h;){if(h.sizcache===c){j=d[h.sizset];break}if(h.nodeType===1){if(!f){h.sizcache=c;h.sizset=e}if(typeof b!=="string"){if(h===b){j=true;break}}else if(i.filter(b,[h]).length>0){j=h;break}}h=h[a]}d[e]=j}}}function a(a,b,c,d,e,f){e=0;for(var g=d.length;e<g;e++){var h=d[e];if(h){var i=false;for(h=h[a];h;){if(h.sizcache===c){i=d[h.sizset];break}if(h.nodeType===1&&!f){h.sizcache=c;h.sizset=e}if(h.nodeName.toLowerCase()===b){i=h;break}h=h[a]}d[e]=i}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,g=false,h=true;[0,0].sort(function(){h=false;return 0});var i=function(a,b,c,e){c=c||[];var g=b=b||q;if(b.nodeType!==1&&b.nodeType!==9)return[];if(!a||typeof a!=="string")return c;var h,l,m,o,p,r=true,s=i.isXML(b),u=[],v=a;do{d.exec("");if(h=d.exec(v)){v=h[3];u.push(h[1]);if(h[2]){o=h[3];break}}}while(h);if(u.length>1&&k.exec(a))if(u.length===2&&j.relative[u[0]])l=t(u[0]+u[1],b);else for(l=j.relative[u[0]]?[b]:i(u.shift(),b);u.length;){a=u.shift();if(j.relative[a])a+=u.shift();l=t(a,l)}else{if(!e&&u.length>1&&b.nodeType===9&&!s&&j.match.ID.test(u[0])&&!j.match.ID.test(u[u.length-1])){h=i.find(u.shift(),b,s);b=h.expr?i.filter(h.expr,h.set)[0]:h.set[0]}if(b){h=e?{expr:u.pop(),set:n(e)}:i.find(u.pop(),u.length===1&&(u[0]==="~"||u[0]==="+")&&b.parentNode?b.parentNode:b,s);l=h.expr?i.filter(h.expr,h.set):h.set;if(u.length>0)m=n(l);else r=false;for(;u.length;){h=p=u.pop();if(j.relative[p])h=u.pop();else p="";if(h==null)h=b;j.relative[p](m,h,s)}}else m=[]}m||(m=l);m||i.error(p||a);if(f.call(m)==="[object Array]")if(r)if(b&&b.nodeType===1)for(a=0;m[a]!=null;a++){if(m[a]&&(m[a]===true||m[a].nodeType===1&&i.contains(b,m[a])))c.push(l[a])}else for(a=0;m[a]!=null;a++)m[a]&&m[a].nodeType===1&&c.push(l[a]);else c.push.apply(c,m);else n(m,c);if(o){i(o,g,c,e);i.uniqueSort(c)}return c};i.uniqueSort=function(a){if(p){g=h;a.sort(p);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a};i.matches=function(a,b){return i(a,null,null,b)};i.matchesSelector=function(a,b){return i(b,null,null,[a]).length>0};i.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=j.order.length;e<f;e++){var g,h=j.order[e];if(g=j.leftMatch[h].exec(a)){var i=g[1];g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(/\\/g,"");d=j.find[h](g,b,c);if(d!=null){a=a.replace(j.match[h],"");break}}}}d||(d=b.getElementsByTagName("*"));return{set:d,expr:a}};i.filter=function(a,c,d,e){for(var f,g,h=a,k=[],l=c,m=c&&c[0]&&i.isXML(c[0]);a&&c.length;){for(var n in j.filter)if((f=j.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=j.filter[n];p=f[1];g=false;f.splice(1,1);if(p.substr(p.length-1)!=="\\"){if(l===k)k=[];if(j.preFilter[n])if(f=j.preFilter[n](f,l,d,k,e,m)){if(f===true)continue}else g=o=true;if(f)for(var r=0;(p=l[r])!=null;r++)if(p){o=q(p,f,r,l);var s=e^!!o;if(d&&o!=null)if(s)g=true;else l[r]=false;else if(s){k.push(p);g=true}}if(o!==b){d||(l=k);a=a.replace(j.match[n],"");if(!g)return[];break}}}if(a===h)if(g==null)i.error(a);else break;h=a}return l};i.error=function(a){throw"Syntax error, unrecognized expression: "+a};var j=i.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")}},relative:{"+":function(a,b){var c=typeof b==="string",d=c&&!/\W/.test(b);c=c&&!d;if(d)b=b.toLowerCase();d=0;for(var e=a.length,f;d<e;d++)if(f=a[d]){for(;(f=f.previousSibling)&&f.nodeType!==1;);a[d]=c||f&&f.nodeName.toLowerCase()===b?f||false:f===b}c&&i.filter(b,a,true)},">":function(a,b){var c,d=typeof b==="string",e=0,f=a.length;if(d&&!/\W/.test(b))for(b=b.toLowerCase();e<f;e++){if(c=a[e]){c=c.parentNode;a[e]=c.nodeName.toLowerCase()===b?c:false}}else{for(;e<f;e++)if(c=a[e])a[e]=d?c.parentNode:c.parentNode===b;d&&i.filter(b,a,true)}},"":function(b,d,f){var g,h=e++,i=c;if(typeof d==="string"&&!/\W/.test(d)){g=d=d.toLowerCase();i=a}i("parentNode",d,h,b,g,f)},"~":function(b,d,f){var g,h=e++,i=c;if(typeof d==="string"&&!/\W/.test(d)){g=d=d.toLowerCase();i=a}i("previousSibling",d,h,b,g,f)}},find:{ID:function(a,b,c){if(typeof b.getElementById!=="undefined"&&!c)return(a=b.getElementById(a[1]))&&a.parentNode?[a]:[]},NAME:function(a,b){if(typeof b.getElementsByName!=="undefined"){for(var c=[],d=b.getElementsByName(a[1]),e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(/\\/g,"")+" ";if(f)return a;f=0;for(var g;(g=b[f])!=null;f++)if(g)if(e^(g.className&&(" "+g.className+" ").replace(/[\t\n]/g," ").indexOf(a)>=0))c||d.push(g);else if(c)b[f]=false;return false},ID:function(a){return a[1].replace(/\\/g,"")},TAG:function(a){return a[1].toLowerCase()},CHILD:function(a){if(a[1]==="nth"){var b=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0;a[3]=b[3]-0}a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){b=a[1].replace(/\\/g,"");if(!f&&j.attrMap[b])a[1]=j.attrMap[b];if(a[2]==="~=")a[4]=" "+a[4]+" ";return a},PSEUDO:function(a,b,c,e,f){if(a[1]==="not")if((d.exec(a[3])||"").length>1||/^\w/.test(a[3]))a[3]=i(a[3],null,null,b);else{a=i.filter(a[3],b,c,true^f);c||e.push.apply(e,a);return false}else if(j.match.POS.test(a[0])||j.match.CHILD.test(a[0]))return true;return a},POS:function(a){a.unshift(true);return a}},filters:{enabled:function(a){return a.disabled===false&&a.type!=="hidden"},disabled:function(a){return a.disabled===true},checked:function(a){return a.checked===true},selected:function(a){return a.selected===true},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!i(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){return"text"===a.type},radio:function(a){return"radio"===a.type},checkbox:function(a){return"checkbox"===a.type},file:function(a){return"file"===a.type},password:function(a){return"password"===a.type},submit:function(a){return"submit"===a.type},image:function(a){return"image"===a.type},reset:function(a){return"reset"===a.type},button:function(a){return"button"===a.type||a.nodeName.toLowerCase()==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=j.filters[e];if(f)return f(a,c,b,d);else if(e==="contains")return(a.textContent||a.innerText||i.getText([a])||"").indexOf(b[3])>=0;else if(e==="not"){b=b[3];c=0;for(d=b.length;c<d;c++)if(b[c]===a)return false;return true}else i.error("Syntax error, unrecognized expression: "+e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":for(;d=d.previousSibling;)if(d.nodeType===1)return false;if(c==="first")return true;d=a;case"last":for(;d=d.nextSibling;)if(d.nodeType===1)return false;return true;case"nth":c=b[2];var e=b[3];if(c===1&&e===0)return true;var f=b[0],g=a.parentNode;if(g&&(g.sizcache!==f||!a.nodeIndex)){var h=0;for(d=g.firstChild;d;d=d.nextSibling)if(d.nodeType===1)d.nodeIndex=++h;g.sizcache=f}d=a.nodeIndex-e;return c===0?d===0:d%c===0&&d/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1];c=j.attrHandle[c]?j.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c);var d=c+"",e=b[2],f=b[4];return c==null?e==="!=":e==="="?d===f:e==="*="?d.indexOf(f)>=0:e==="~="?(" "+d+" ").indexOf(f)>=0:!f?d&&c!==false:e==="!="?d!==f:e==="^="?d.indexOf(f)===0:e==="$="?d.substr(d.length-f.length)===f:e==="|="?d===f||d.substr(0,f.length+1)===f+"-":false},POS:function(a,b,c,d){var e=j.setFilters[b[2]];if(e)return e(a,c,b,d)}}},k=j.match.POS,l=function(a,b){return"\\"+(b-0+1)},m;for(m in j.match){j.match[m]=RegExp(j.match[m].source+/(?![^\[]*\])(?![^\(]*\))/.source);j.leftMatch[m]=RegExp(/(^(?:.|\r|\n)*?)/.source+j.match[m].source.replace(/\\(\d+)/g,l))}var n=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(q.documentElement.childNodes,0)}catch(o){n=function(a,b){var c=0,d=b||[];if(f.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length==="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var p,s;if(q.documentElement.compareDocumentPosition)p=function(a,b){if(a===b){g=true;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1};else{p=function(a,b){var c,d,e=[],f=[];c=a.parentNode;d=b.parentNode;var h=c;if(a===b){g=true;return 0}else if(c===d)return s(a,b);else if(c){if(!d)return 1}else return-1;for(;h;){e.unshift(h);h=h.parentNode}for(h=d;h;){f.unshift(h);h=h.parentNode}c=e.length;d=f.length;for(h=0;h<c&&h<d;h++)if(e[h]!==f[h])return s(e[h],f[h]);return h===c?s(a,f[h],-1):s(e[h],b,1)};s=function(a,b,c){if(a===b)return c;for(a=a.nextSibling;a;){if(a===b)return-1;a=a.nextSibling}return 1}}i.getText=function(a){for(var b="",c,d=0;a[d];d++){c=a[d];if(c.nodeType===3||c.nodeType===4)b+=c.nodeValue;else if(c.nodeType!==8)b+=i.getText(c.childNodes)}return b};(function(){var a=q.createElement("div"),c="script"+(new Date).getTime(),d=q.documentElement;a.innerHTML="<a name='"+c+"'/>";d.insertBefore(a,d.firstChild);if(q.getElementById(c)){j.find.ID=function(a,c,d){if(typeof c.getElementById!=="undefined"&&!d)return(c=c.getElementById(a[1]))?c.id===a[1]||typeof c.getAttributeNode!=="undefined"&&c.getAttributeNode("id").nodeValue===a[1]?[c]:b:[]};j.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}}d.removeChild(a);d=a=null})();(function(){var a=q.createElement("div");a.appendChild(q.createComment(""));if(a.getElementsByTagName("*").length>0)j.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){for(var d=[],e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c};a.innerHTML="<a href='#'></a>";if(a.firstChild&&typeof a.firstChild.getAttribute!=="undefined"&&a.firstChild.getAttribute("href")!=="#")j.attrHandle.href=function(a){return a.getAttribute("href",2)};a=null})();q.querySelectorAll&&function(){var a=i,b=q.createElement("div");b.innerHTML="<p class='TEST'></p>";if(!(b.querySelectorAll&&b.querySelectorAll(".TEST").length===0)){i=function(b,c,d,e){c=c||q;b=b.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!e&&!i.isXML(c))if(c.nodeType===9)try{return n(c.querySelectorAll(b),d)}catch(f){}else if(c.nodeType===1&&c.nodeName.toLowerCase()!=="object"){var g=c.getAttribute("id"),h=g||"__sizzle__";g||c.setAttribute("id",h);try{return n(c.querySelectorAll("#"+h+" "+b),d)}catch(j){}finally{g||c.removeAttribute("id")}}return a(b,c,d,e)};for(var c in a)i[c]=a[c];b=null}}();(function(){var a=q.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector,c=false;try{b.call(q.documentElement,"[test!='']:sizzle")}catch(d){c=true}if(b)i.matchesSelector=function(a,d){d=d.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!i.isXML(a))try{if(c||!j.match.PSEUDO.test(d)&&!/!=/.test(d))return b.call(a,d)}catch(e){}return i(d,null,null,[a]).length>0}})();(function(){var a=q.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!a.getElementsByClassName||a.getElementsByClassName("e").length===0)){a.lastChild.className="e";if(a.getElementsByClassName("e").length!==1){j.order.splice(1,0,"CLASS");j.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=="undefined"&&!c)return b.getElementsByClassName(a[1])};a=null}}})();i.contains=q.documentElement.contains?function(a,b){return a!==b&&(a.contains?a.contains(b):true)}:q.documentElement.compareDocumentPosition?function(a,b){return!!(a.compareDocumentPosition(b)&16)}:function(){return false};i.isXML=function(a){return(a=(a?a.ownerDocument||a:0).documentElement)?a.nodeName!=="HTML":false};var t=function(a,b){for(var c,d=[],e="",f=b.nodeType?[b]:b;c=j.match.PSEUDO.exec(a);){e+=c[0];a=a.replace(j.match.PSEUDO,"")}a=j.relative[a]?a+"*":a;c=0;for(var g=f.length;c<g;c++)i(a,f[c],d);return i.filter(e,d)};r.find=i;r.expr=i.selectors;r.expr[":"]=r.expr.filters;r.unique=i.uniqueSort;r.text=i.getText;r.isXMLDoc=i.isXML;r.contains=i.contains})();var P=/Until$/,Q=/^(?:parents|prevUntil|prevAll)/,R=/,/,S=/^.[^:#\[\.,]*$/,T=Array.prototype.slice,U=r.expr.match.POS;r.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),c=0,d=0,e=this.length;d<e;d++){c=b.length;r.find(a,this[d],b);if(d>0)for(var f=c;f<b.length;f++)for(var g=0;g<c;g++)if(b[g]===b[f]){b.splice(f--,1);break}}return b},has:function(a){var b=r(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(r.contains(this,b[a]))return true})},not:function(a){return this.pushStack(i(this,a,false),"not",a)},filter:function(a){return this.pushStack(i(this,a,true),"filter",a)},is:function(a){return!!a&&r.filter(a,this).length>0},closest:function(a,b){var c=[],d,e,f=this[0];if(r.isArray(a)){var g,h={},i=1;if(f&&a.length){d=0;for(e=a.length;d<e;d++){g=a[d];h[g]||(h[g]=r.expr.match.POS.test(g)?r(g,b||this.context):g)}for(;f&&f.ownerDocument&&f!==b;){for(g in h){d=h[g];if(d.jquery?d.index(f)>-1:r(f).is(d))c.push({selector:g,elem:f,level:i})}f=f.parentNode;i++}}return c}g=U.test(a)?r(a,b||this.context):null;d=0;for(e=this.length;d<e;d++)for(f=this[d];f;)if(g?g.index(f)>-1:r.find.matchesSelector(f,a)){c.push(f);break}else{f=f.parentNode;if(!f||!f.ownerDocument||f===b)break}c=c.length>1?r.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a==="string")return r.inArray(this[0],a?r(a):this.parent().children());return r.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==="string"?r(a,b||this.context):r.makeArray(a),d=r.merge(this.get(),c);return this.pushStack(!c[0]||!c[0].parentNode||c[0].parentNode.nodeType===11||!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11?d:r.unique(d))},andSelf:function(){return this.add(this.prevObject)}});r.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return r.dir(a,"parentNode")},parentsUntil:function(a,b,c){return r.dir(a,"parentNode",c)},next:function(a){return r.nth(a,2,"nextSibling")},prev:function(a){return r.nth(a,2,"previousSibling")},nextAll:function(a){return r.dir(a,"nextSibling")},prevAll:function(a){return r.dir(a,"previousSibling")},nextUntil:function(a,b,c){return r.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return r.dir(a,"previousSibling",c)},siblings:function(a){return r.sibling(a.parentNode.firstChild,a)},children:function(a){return r.sibling(a.firstChild)},contents:function(a){return r.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:r.makeArray(a.childNodes)}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);P.test(a)||(d=c);if(d&&typeof d==="string")e=r.filter(d,e);e=this.length>1?r.unique(e):e;if((this.length>1||R.test(d))&&Q.test(a))e=e.reverse();return this.pushStack(e,a,T.call(arguments).join(","))}});r.extend({filter:function(a,b,c){if(c)a=":not("+a+")";return b.length===1?r.find.matchesSelector(b[0],a)?[b[0]]:[]:r.find.matches(a,b)},dir:function(a,c,d){var e=[];for(a=a[c];a&&a.nodeType!==9&&(d===b||a.nodeType!==1||!r(a).is(d));){a.nodeType===1&&e.push(a);a=a[c]}return e},nth:function(a,b,c){b=b||1;for(var d=0;a;a=a[c])if(a.nodeType===1&&++d===b)break;return a},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V=/ jQuery\d+="(?:\d+|null)"/g,W=/^\s+/,X=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Y=/<([\w:]+)/,Z=/<tbody/i,$=/<|&#?\w+;/,_=/<(?:script|object|embed|option|style)/i,ba=/checked\s*(?:[^=]|=\s*.checked.)/i,bb=/\=([^="'>\s]+\/)>/g,bc={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};bc.optgroup=bc.option;bc.tbody=bc.tfoot=bc.colgroup=bc.caption=bc.thead;bc.th=bc.td;if(!r.support.htmlSerialize)bc._default=[1,"div<div>","</div>"];r.fn.extend({text:function(a){if(r.isFunction(a))return this.each(function(b){var c=r(this);c.text(a.call(this,b,c.text()))});if(typeof a!=="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||q).createTextNode(a));return r.text(this)},wrapAll:function(a){if(r.isFunction(a))return this.each(function(b){r(this).wrapAll(a.call(this,b))});if(this[0]){var b=r(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var a=this;a.firstChild&&a.firstChild.nodeType===1;)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(r.isFunction(a))return this.each(function(b){r(this).wrapInner(a.call(this,b))});return this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){r(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){r.nodeName(this,"body")||r(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(a){this.parentNode.insertBefore(a,this)});else if(arguments.length){var a=r(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(a){this.parentNode.insertBefore(a,this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,r(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||r.filter(a,[d]).length){if(!b&&d.nodeType===1){r.cleanData(d.getElementsByTagName("*"));r.cleanData([d])}d.parentNode&&d.parentNode.removeChild(d)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&r.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);return this},clone:function(a){var b=this.map(function(){if(!r.support.noCloneEvent&&!r.isXMLDoc(this)){var a=this.outerHTML,b=this.ownerDocument;if(!a){a=b.createElement("div");a.appendChild(this.cloneNode(true));a=a.innerHTML}return r.clean([a.replace(V,"").replace(bb,'="$1">').replace(W,"")],b)[0]}else return this.cloneNode(true)});if(a===true){j(this,b);j(this.find("*"),b.find("*"))}return b},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(V,""):null;else if(typeof a==="string"&&!_.test(a)&&(r.support.leadingWhitespace||!W.test(a))&&!bc[(Y.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(X,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)if(this[c].nodeType===1){r.cleanData(this[c].getElementsByTagName("*"));this[c].innerHTML=a}}catch(e){this.empty().append(a)}}else r.isFunction(a)?this.each(function(b){var c=r(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(r.isFunction(a))return this.each(function(b){var c=r(this),d=c.html();c.replaceWith(a.call(this,b,d))});if(typeof a!=="string")a=r(a).detach();return this.each(function(){var b=this.nextSibling,c=this.parentNode;r(this).remove();b?r(b).before(a):r(c).append(a)})}else return this.pushStack(r(r.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,c,d){var e,f,g,h=a[0],i=[];if(!r.support.checkClone&&arguments.length===3&&typeof h==="string"&&ba.test(h))return this.each(function(){r(this).domManip(a,c,d,true)});if(r.isFunction(h))return this.each(function(e){var f=r(this);a[0]=h.call(this,e,c?f.html():b);f.domManip(a,c,d)});if(this[0]){e=h&&h.parentNode;e=r.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:r.buildFragment(a,this,i);g=e.fragment;if(f=g.childNodes.length===1?g=g.firstChild:g.firstChild){c=c&&r.nodeName(f,"tr");f=0;for(var j=this.length;f<j;f++)d.call(c?r.nodeName(this[f],"table")?this[f].getElementsByTagName("tbody")[0]||this[f].appendChild(this[f].ownerDocument.createElement("tbody")):this[f]:this[f],f>0||e.cacheable||this.length>1?g.cloneNode(true):g)}i.length&&r.each(i,k)}return this}});r.buildFragment=function(a,b,c){var d,e,f;b=b&&b[0]?b[0].ownerDocument||b[0]:q;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===q&&!_.test(a[0])&&(r.support.checkClone||!ba.test(a[0]))){e=true;if(f=r.fragments[a[0]])if(f!==1)d=f}if(!d){d=b.createDocumentFragment();r.clean(a,b,d,c)}if(e)r.fragments[a[0]]=f?d:1;return{fragment:d,cacheable:e}};r.fragments={};r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(c){var d=[];c=r(c);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&c.length===1){c[b](this[0]);return this}else{e=0;for(var f=c.length;e<f;e++){var g=(e>0?this.clone(true):this).get();r(c[e])[b](g);d=d.concat(g)}return this.pushStack(d,a,c.selector)}}});r.extend({clean:function(a,b,c,d){b=b||q;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||q;for(var e=[],f=0,g;(g=a[f])!=null;f++){if(typeof g==="number")g+="";if(g){if(typeof g==="string"&&!$.test(g))g=b.createTextNode(g);else if(typeof g==="string"){g=g.replace(X,"<$1></$2>");var h=(Y.exec(g)||["",""])[1].toLowerCase(),i=bc[h]||bc._default,j=i[0],k=b.createElement("div");for(k.innerHTML=i[1]+g+i[2];j--;)k=k.lastChild;if(!r.support.tbody){j=Z.test(g);h=h==="table"&&!j?k.firstChild&&k.firstChild.childNodes:i[1]==="<table>"&&!j?k.childNodes:[];for(i=h.length-1;i>=0;--i)r.nodeName(h[i],"tbody")&&!h[i].childNodes.length&&h[i].parentNode.removeChild(h[i])}!r.support.leadingWhitespace&&W.test(g)&&k.insertBefore(b.createTextNode(W.exec(g)[0]),k.firstChild);g=k.childNodes}if(g.nodeType)e.push(g);else e=r.merge(e,g)}}if(c)for(f=0;e[f];f++)if(d&&r.nodeName(e[f],"script")&&(!e[f].type||e[f].type.toLowerCase()==="text/javascript"))d.push(e[f].parentNode?e[f].parentNode.removeChild(e[f]):e[f]);else{e[f].nodeType===1&&e.splice.apply(e,[f+1,0].concat(r.makeArray(e[f].getElementsByTagName("script"))));c.appendChild(e[f])}return e},cleanData:function(a){for(var b,c,d=r.cache,e=r.event.special,f=r.support.deleteExpando,g=0,h;(h=a[g])!=null;g++)if(!(h.nodeName&&r.noData[h.nodeName.toLowerCase()]))if(c=h[r.expando]){if((b=d[c])&&b.events)for(var i in b.events)e[i]?r.event.remove(h,i):r.removeEvent(h,i,b.handle);if(f)delete h[r.expando];else h.removeAttribute&&h.removeAttribute(r.expando);delete d[c]}}});var bd=/alpha\([^)]*\)/i,be=/opacity=([^)]*)/,bf=/-([a-z])/ig,bg=/([A-Z])/g,bh=/^-?\d+(?:px)?$/i,bi=/^-?\d/,bj={position:"absolute",visibility:"hidden",display:"block"},bk=["Left","Right"],bl=["Top","Bottom"],bm,bn,bo,bp=function(a,b){return b.toUpperCase()};r.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return r.access(this,a,c,true,function(a,c,d){return d!==b?r.style(a,c,d):r.css(a,c)})};r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bm(a,"opacity","opacity");return c===""?"1":c}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true,zoom:true,lineHeight:true},cssProps:{"float":r.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,g=r.camelCase(c),h=a.style,i=r.cssHooks[g];c=r.cssProps[g]||g;if(d!==b){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!r.cssNumber[g])d+="px";if(!i||!("set"in i)||(d=i.set(a,d))!==b)try{h[c]=d}catch(j){}}}else{if(i&&"get"in i&&(f=i.get(a,false,e))!==b)return f;return h[c]}}},css:function(a,c,d){var e,f=r.camelCase(c),g=r.cssHooks[f];c=r.cssProps[f]||f;if(g&&"get"in g&&(e=g.get(a,true,d))!==b)return e;else if(bm)return bm(a,c,f)},swap:function(a,b,c){var d={},e;for(e in b){d[e]=a.style[e];a.style[e]=b[e]}c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bf,bp)}});r.curCSS=r.css;r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)e=l(a,b,d);else r.swap(a,bj,function(){e=l(a,b,d)});if(e<=0){e=bm(a,b,b);if(e==="0px"&&bo)e=bo(a,b,b);if(e!=null)return e===""||e==="auto"?"0px":e}if(e<0||e==null){e=a.style[b];return e===""||e==="auto"?"0px":e}return typeof e==="string"?e:e+"px"}},set:function(a,b){if(bh.test(b)){b=parseFloat(b);if(b>=0)return b+"px"}else return b}}});if(!r.support.opacity)r.cssHooks.opacity={get:function(a,b){return be.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style;c.zoom=1;var d=r.isNaN(b)?"":"alpha(opacity="+b*100+")",e=c.filter||"";c.filter=bd.test(e)?e.replace(bd,d):c.filter+" "+d}};if(q.defaultView&&q.defaultView.getComputedStyle)bn=function(a,c,d){var e;d=d.replace(bg,"-$1").toLowerCase();if(!(c=a.ownerDocument.defaultView))return b;if(c=c.getComputedStyle(a,null)){e=c.getPropertyValue(d);if(e===""&&!r.contains(a.ownerDocument.documentElement,a))e=r.style(a,d)}return e};if(q.documentElement.currentStyle)bo=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;if(!bh.test(e)&&bi.test(e)){c=f.left;d=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;f.left=b==="fontSize"?"1em":e||0;e=f.pixelLeft+"px";f.left=c;a.runtimeStyle.left=d}return e===""?"auto":e};bm=bn||bo;if(r.expr&&r.expr.filters){r.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!r.support.reliableHiddenOffsets&&(a.style.display||r.css(a,"display"))==="none"};r.expr.filters.visible=function(a){return!r.expr.filters.hidden(a)}}var bq=r.now(),br=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bs=/^(?:select|textarea)/i,bt=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bu=/^(?:GET|HEAD)$/,bv=/\[\]$/,bw=/\=\?(&|$)/,bx=/\?/,by=/([?&])_=[^&]*/,bz=/^(\w+:)?\/\/([^\/?#]+)/,bA=/%20/g,bB=/#.*$/,bC=r.fn.load;r.fn.extend({load:function(a,b,c){if(typeof a!=="string"&&bC)return bC.apply(this,arguments);else if(!this.length)return this;var d=a.indexOf(" ");if(d>=0){var e=a.slice(d,a.length);a=a.slice(0,d)}d="GET";if(b)if(r.isFunction(b)){c=b;b=null}else if(typeof b==="object"){b=r.param(b,r.ajaxSettings.traditional);d="POST"}var f=this;r.ajax({url:a,type:d,dataType:"html",data:b,complete:function(a,b){if(b==="success"||b==="notmodified")f.html(e?r("<div>").append(a.responseText.replace(br,"")).find(e):a.responseText);c&&f.each(c,[a.responseText,b,a])}});return this},serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?r.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bs.test(this.nodeName)||bt.test(this.type))}).map(function(a,b){var c=r(this).val();return c==null?null:r.isArray(c)?r.map(c,function(a){return{name:b.name,value:a}}):{name:b.name,value:c}}).get()}});r.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){r.fn[b]=function(a){return this.bind(b,a)}});r.extend({get:function(a,b,c,d){if(r.isFunction(b)){d=d||c;c=b;b=null}return r.ajax({type:"GET",url:a,data:b,success:c,dataType:d})},getScript:function(a,b){return r.get(a,null,b,"script")},getJSON:function(a,b,c){return r.get(a,b,c,"json")},post:function(a,b,c,d){if(r.isFunction(b)){d=d||c;c=b;b={}}return r.ajax({type:"POST",url:a,data:b,success:c,dataType:d})},ajaxSetup:function(a){r.extend(r.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new a.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(c){var d=r.extend(true,{},r.ajaxSettings,c),e,f,g,h=d.type.toUpperCase(),i=bu.test(h);d.url=d.url.replace(bB,"");d.context=c&&c.context!=null?c.context:d;if(d.data&&d.processData&&typeof d.data!=="string")d.data=r.param(d.data,d.traditional);if(d.dataType==="jsonp"){if(h==="GET")bw.test(d.url)||(d.url+=(bx.test(d.url)?"&":"?")+(d.jsonp||"callback")+"=?");else if(!d.data||!bw.test(d.data))d.data=(d.data?d.data+"&":"")+(d.jsonp||"callback")+"=?";d.dataType="json"}if(d.dataType==="json"&&(d.data&&bw.test(d.data)||bw.test(d.url))){e=d.jsonpCallback||"jsonp"+bq++;if(d.data)d.data=(d.data+"").replace(bw,"="+e+"$1");d.url=d.url.replace(bw,"="+e+"$1");d.dataType="script";var j=a[e];a[e]=function(c){if(r.isFunction(j))j(c);else{a[e]=b;try{delete a[e]}catch(h){}}g=c;r.handleSuccess(d,s,f,g);r.handleComplete(d,s,f,g);m&&m.removeChild(n)}}if(d.dataType==="script"&&d.cache===null)d.cache=false;if(d.cache===false&&i){var k=r.now(),l=d.url.replace(by,"$1_="+k);d.url=l+(l===d.url?(bx.test(d.url)?"&":"?")+"_="+k:"")}if(d.data&&i)d.url+=(bx.test(d.url)?"&":"?")+d.data;d.global&&r.active++===0&&r.event.trigger("ajaxStart");k=(k=bz.exec(d.url))&&(k[1]&&k[1].toLowerCase()!==location.protocol||k[2].toLowerCase()!==location.host);if(d.dataType==="script"&&h==="GET"&&k){var m=q.getElementsByTagName("head")[0]||q.documentElement,n=q.createElement("script");if(d.scriptCharset)n.charset=d.scriptCharset;n.src=d.url;if(!e){var o=false;n.onload=n.onreadystatechange=function(){if(!o&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){o=true;r.handleSuccess(d,s,f,g);r.handleComplete(d,s,f,g);n.onload=n.onreadystatechange=null;m&&n.parentNode&&m.removeChild(n)}}}m.insertBefore(n,m.firstChild);return b}var p=false,s=d.xhr();if(s){d.username?s.open(h,d.url,d.async,d.username,d.password):s.open(h,d.url,d.async);try{if(d.data!=null&&!i||c&&c.contentType)s.setRequestHeader("Content-Type",d.contentType);if(d.ifModified){r.lastModified[d.url]&&s.setRequestHeader("If-Modified-Since",r.lastModified[d.url]);r.etag[d.url]&&s.setRequestHeader("If-None-Match",r.etag[d.url])}k||s.setRequestHeader("X-Requested-With","XMLHttpRequest");s.setRequestHeader("Accept",d.dataType&&d.accepts[d.dataType]?d.accepts[d.dataType]+", */*; q=0.01":d.accepts._default)}catch(t){}if(d.beforeSend&&d.beforeSend.call(d.context,s,d)===false){d.global&&r.active--===1&&r.event.trigger("ajaxStop");s.abort();return false}d.global&&r.triggerGlobal(d,"ajaxSend",[s,d]);var u=s.onreadystatechange=function(a){if(!s||s.readyState===0||a==="abort"){p||r.handleComplete(d,s,f,g);p=true;if(s)s.onreadystatechange=r.noop}else if(!p&&s&&(s.readyState===4||a==="timeout")){p=true;s.onreadystatechange=r.noop;f=a==="timeout"?"timeout":!r.httpSuccess(s)?"error":d.ifModified&&r.httpNotModified(s,d.url)?"notmodified":"success";var b;if(f==="success")try{g=r.httpData(s,d.dataType,d)}catch(c){f="parsererror";b=c}if(f==="success"||f==="notmodified")e||r.handleSuccess(d,s,f,g);else r.handleError(d,s,f,b);e||r.handleComplete(d,s,f,g);a==="timeout"&&s.abort();if(d.async)s=null}};try{var v=s.abort;s.abort=function(){s&&Function.prototype.call.call(v,s);u("abort")}}catch(w){}d.async&&d.timeout>0&&setTimeout(function(){s&&!p&&u("timeout")},d.timeout);try{s.send(i||d.data==null?null:d.data)}catch(x){r.handleError(d,s,null,x);r.handleComplete(d,s,f,g)}d.async||u();return s}},param:function(a,c){var d=[],e=function(a,b){b=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(c===b)c=r.ajaxSettings.traditional;if(r.isArray(a)||a.jquery)r.each(a,function(){e(this.name,this.value)});else for(var f in a)m(f,a[f],c,e);return d.join("&").replace(bA,"+")}});r.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,c,d){a.error&&a.error.call(a.context,b,c,d);a.global&&r.triggerGlobal(a,"ajaxError",[b,a,d])},handleSuccess:function(a,b,c,d){a.success&&a.success.call(a.context,d,c,b);a.global&&r.triggerGlobal(a,"ajaxSuccess",[b,a])},handleComplete:function(a,b,c){a.complete&&a.complete.call(a.context,b,c);a.global&&r.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&r.active--===1&&r.event.trigger("ajaxStop")},triggerGlobal:function(a,b,c){(a.context&&a.context.url==null?r(a.context):r.event).trigger(b,c)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var c=a.getResponseHeader("Last-Modified"),d=a.getResponseHeader("Etag");if(c)r.lastModified[b]=c;if(d)r.etag[b]=d;return a.status===304},httpData:function(a,b,c){var d=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&d.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&r.error("parsererror");if(c&&c.dataFilter)a=c.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&d.indexOf("json")>=0)a=r.parseJSON(a);else if(b==="script"||!b&&d.indexOf("javascript")>=0)r.globalEval(a);return a}});if(a.ActiveXObject)r.ajaxSettings.xhr=function(){if(a.location.protocol!=="file:")try{return new a.XMLHttpRequest}catch(b){}try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(c){}};r.support.ajax=!!r.ajaxSettings.xhr();var bD={},bE=/^(?:toggle|show|hide)$/,bF=/^([+\-]=)?([\d+.\-]+)(.*)$/,bG,bH=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];r.fn.extend({show:function(a,b,c){if(a||a===0)return this.animate(n("show",3),a,b,c);else{c=0;for(var d=this.length;c<d;c++){a=this[c];b=a.style.display;if(!r.data(a,"olddisplay")&&b==="none")b=a.style.display="";b===""&&r.css(a,"display")==="none"&&r.data(a,"olddisplay",o(a.nodeName))}for(c=0;c<d;c++){a=this[c];b=a.style.display;if(b===""||b==="none")a.style.display=r.data(a,"olddisplay")||""}return this}},hide:function(a,b,c){if(a||a===0)return this.animate(n("hide",3),a,b,c);else{a=0;for(b=this.length;a<b;a++){c=r.css(this[a],"display");c!=="none"&&r.data(this[a],"olddisplay",c)}for(a=0;a<b;a++)this[a].style.display="none";return this}},_toggle:r.fn.toggle,toggle:function(a,b,c){var d=typeof a==="boolean";if(r.isFunction(a)&&r.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var b=d?a:r(this).is(":hidden");r(this)[b?"show":"hide"]()}):this.animate(n("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.speed(b,c,d);if(r.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var b=r.extend({},e),c,d=this.nodeType===1,f=d&&r(this).is(":hidden"),g=this;for(c in a){var h=r.camelCase(c);if(c!==h){a[h]=a[c];delete a[c];c=h}if(a[c]==="hide"&&f||a[c]==="show"&&!f)return b.complete.call(this);if(d&&(c==="height"||c==="width")){b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(r.css(this,"display")==="inline"&&r.css(this,"float")==="none")if(r.support.inlineBlockNeedsLayout)if(o(this.nodeName)==="inline")this.style.display="inline-block";else{this.style.display="inline";this.style.zoom=1}else this.style.display="inline-block"}if(r.isArray(a[c])){(b.specialEasing=b.specialEasing||{})[c]=a[c][1];a[c]=a[c][0]}}if(b.overflow!=null)this.style.overflow="hidden";b.curAnim=r.extend({},a);r.each(a,function(c,d){var e=new r.fx(g,b,c);if(bE.test(d))e[d==="toggle"?f?"show":"hide":d](a);else{var h=bF.exec(d),i=e.cur()||0;if(h){var j=parseFloat(h[2]),k=h[3]||"px";if(k!=="px"){r.style(g,c,(j||1)+k);i=(j||1)/e.cur()*i;r.style(g,c,i+k)}if(h[1])j=(h[1]==="-="?-1:1)*j+i;e.custom(i,j,k)}else e.custom(i,d,"")}});return true})},stop:function(a,b){var c=r.timers;a&&this.queue([]);this.each(function(){for(var a=c.length-1;a>=0;a--)if(c[a].elem===this){b&&c[a](true);c.splice(a,1)}});b||this.dequeue();return this}});r.each({slideDown:n("show",1),slideUp:n("hide",1),slideToggle:n("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}});r.extend({speed:function(a,b,c){var d=a&&typeof a==="object"?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};d.duration=r.fx.off?0:typeof d.duration==="number"?d.duration:d.duration in r.fx.speeds?r.fx.speeds[d.duration]:r.fx.speeds._default;d.old=d.complete;d.complete=function(){d.queue!==false&&r(this).dequeue();r.isFunction(d.old)&&d.old.call(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b;this.elem=a;this.prop=c;if(!b.orig)b.orig={}}});r.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(r.fx.step[this.prop]||r.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(r.css(this.elem,this.prop));return a&&a>-1e4?a:0},custom:function(a,b,c){function d(a){return e.step(a)}var e=this,f=r.fx;this.startTime=r.now();this.start=a;this.end=b;this.unit=c||this.unit||"px";this.now=this.start;this.pos=this.state=0;d.elem=this.elem;if(d()&&r.timers.push(d)&&!bG)bG=setInterval(f.tick,f.interval)},show:function(){this.options.orig[this.prop]=r.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());r(this.elem).show()},hide:function(){this.options.orig[this.prop]=r.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=r.now(),c=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var d in this.options.curAnim)if(this.options.curAnim[d]!==true)c=false;if(c){if(this.options.overflow!=null&&!r.support.shrinkWrapBlocks){var e=this.elem,f=this.options;r.each(["","X","Y"],function(a,b){e.style["overflow"+b]=f.overflow[a]})}this.options.hide&&r(this.elem).hide();if(this.options.hide||this.options.show)for(var g in this.options.curAnim)r.style(this.elem,g,this.options.orig[g]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(r.easing.swing?"swing":"linear");this.pos=r.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};r.extend(r.fx,{tick:function(){for(var a=r.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||r.fx.stop()},interval:13,stop:function(){clearInterval(bG);bG=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){r.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(r.expr&&r.expr.filters)r.expr.filters.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length};var bI=/^t(?:able|d|h)$/i,bJ=/^(?:body|html)$/i;r.fn.offset="getBoundingClientRect"in q.documentElement?function(a){var b=this[0],c;if(a)return this.each(function(b){r.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return r.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,f=e.documentElement;if(!c||!r.contains(f,b))return c||{top:0,left:0};b=e.body;e=p(e);return{top:c.top+(e.pageYOffset||r.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:c.left+(e.pageXOffset||r.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(b){r.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return r.offset.bodyOffset(b);r.offset.initialize();var c,d=b.offsetParent,e=b.ownerDocument,f=e.documentElement,g=e.body;c=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var h=b.offsetTop,i=b.offsetLeft;(b=b.parentNode)&&b!==g&&b!==f;){if(r.offset.supportsFixedPosition&&c.position==="fixed")break;c=e?e.getComputedStyle(b,null):b.currentStyle;h-=b.scrollTop;i-=b.scrollLeft;if(b===d){h+=b.offsetTop;i+=b.offsetLeft;if(r.offset.doesNotAddBorder&&!(r.offset.doesAddBorderForTableAndCells&&bI.test(b.nodeName))){h+=parseFloat(c.borderTopWidth)||0;i+=parseFloat(c.borderLeftWidth)||0}d=b.offsetParent}if(r.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"){h+=parseFloat(c.borderTopWidth)||0;i+=parseFloat(c.borderLeftWidth)||0}c=c}if(c.position==="relative"||c.position==="static"){h+=g.offsetTop;i+=g.offsetLeft}if(r.offset.supportsFixedPosition&&c.position==="fixed"){h+=Math.max(f.scrollTop,g.scrollTop);i+=Math.max(f.scrollLeft,g.scrollLeft)}return{top:h,left:i}};r.offset={initialize:function(){var a=q.body,b=q.createElement("div"),c,d,e,f=parseFloat(r.css(a,"marginTop"))||0;r.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";a.insertBefore(b,a.firstChild);c=b.firstChild;d=c.firstChild;e=c.nextSibling.firstChild.firstChild;this.doesNotAddBorder=d.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;d.style.position="fixed";d.style.top="20px";this.supportsFixedPosition=d.offsetTop===20||d.offsetTop===15;d.style.position=d.style.top="";c.style.overflow="hidden";c.style.position="relative";this.subtractsBorderForOverflowNotVisible=d.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==f;a.removeChild(b);r.offset.initialize=r.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;r.offset.initialize();if(r.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(r.css(a,"marginTop"))||0;c+=parseFloat(r.css(a,"marginLeft"))||0}return{top:b,left:c}},setOffset:function(a,b,c){var d=r.css(a,"position");if(d==="static")a.style.position="relative";var e=r(a),f=e.offset(),g=r.css(a,"top"),h=r.css(a,"left"),i=d==="absolute"&&r.inArray("auto",[g,h])>-1;d={};var j={};if(i)j=e.position();g=i?j.top:parseInt(g,10)||0;h=i?j.left:parseInt(h,10)||0;if(r.isFunction(b))b=b.call(a,c,f);if(b.top!=null)d.top=b.top-f.top+g;if(b.left!=null)d.left=b.left-f.left+h;"using"in b?b.using.call(a,d):e.css(d)}};r.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=bJ.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(r.css(a,"marginTop"))||0;c.left-=parseFloat(r.css(a,"marginLeft"))||0;d.top+=parseFloat(r.css(b[0],"borderTopWidth"))||0;d.left+=parseFloat(r.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||q.body;a&&!bJ.test(a.nodeName)&&r.css(a,"position")==="static";)a=a.offsetParent;return a})}});r.each(["Left","Top"],function(a,c){var d="scroll"+c;r.fn[d]=function(c){var e=this[0],f;if(!e)return null;if(c!==b)return this.each(function(){if(f=p(this))f.scrollTo(!a?c:r(f).scrollLeft(),a?c:r(f).scrollTop());else this[d]=c});else return(f=p(e))?"pageXOffset"in f?f[a?"pageYOffset":"pageXOffset"]:r.support.boxModel&&f.document.documentElement[d]||f.document.body[d]:e[d]}});r.each(["Height","Width"],function(a,c){var d=c.toLowerCase();r.fn["inner"+c]=function(){return this[0]?parseFloat(r.css(this[0],d,"padding")):null};r.fn["outer"+c]=function(a){return this[0]?parseFloat(r.css(this[0],d,a?"margin":"border")):null};r.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(r.isFunction(a))return this.each(function(b){var c=r(this);c[d](a.call(this,b,c[d]()))});if(r.isWindow(e))return e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+c]||e.document.body["client"+c];else if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);else if(a===b){e=r.css(e,d);var f=parseFloat(e);return r.isNaN(f)?e:f}else return this.css(d,typeof a==="string"?a:a+"px")}})})(window);(function(a){function c(c,d){var e;do{e=a.curCSS(c,d);if(e!=""&&e!="transparent"||a.nodeName(c,"body"))break;d="backgroundColor"}while(c=c.parentNode);return b(e)}function b(b){var c;if(b&&b.constructor==Array&&b.length==3)return b;if(c=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(b))return[parseInt(c[1]),parseInt(c[2]),parseInt(c[3])];if(c=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(b))return[parseFloat(c[1])*2.55,parseFloat(c[2])*2.55,parseFloat(c[3])*2.55];if(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(b))return[parseInt(c[1],16),parseInt(c[2],16),parseInt(c[3],16)];if(c=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(b))return[parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16),parseInt(c[3]+c[3],16)];return d[a.trim(b).toLowerCase()]}a.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(d,e){a.fx.step[e]=function(a){if(a.state==0){a.start=c(a.elem,e);a.end=b(a.end)}a.elem.style[e]="rgb("+[Math.max(Math.min(parseInt(a.pos*(a.end[0]-a.start[0])+a.start[0]),255),0),Math.max(Math.min(parseInt(a.pos*(a.end[1]-a.start[1])+a.start[1]),255),0),Math.max(Math.min(parseInt(a.pos*(a.end[2]-a.start[2])+a.start[2]),255),0)].join(",")+")"}});var d={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);$("a.external").attr("target","_blank");var hasClass=function(){var a={};return function(b,c){return(a[c]?a[c]:a[c]=new RegExp("(?:\\s|^)"+c+"(?:\\s|$)")).test(b.className)}}();var autoCollapse=2;var collapseCaption="hide";var expandCaption="show";addOnloadHook(createCollapseButtons);var NavigationBarHide="["+collapseCaption+"]";var NavigationBarShow="["+expandCaption+"]";addOnloadHook(createNavigationBarToggleButton);var pootTabsHere={animationsEnabled:$.support.opacity,getTab:function(a,b){return $(a.children(".poot-tabs").children("ul").children("li")[parseInt(b)])},changeTab:function(a,b,c,d){if(b==parseInt(a.attr("pootSelected"))&&!d&&c)return;if(!pootTabsHere.animationsEnabled){c=0}a.attr("pootSelected",b.toString());var e=a.children(".poot-tabs-content").children();e.each(function(){$(this).fadeOut(c,function(){$(this).removeClass("poot-tabs-selected")})});$(e[b]).each(function(){$(this).fadeIn(c,function(){$(this).addClass("poot-tabs-selected")})});var f=a.children(".poot-tabs").children("ul").children("li");f.removeClass("poot-tabs-selected");$(f[b]).addClass("poot-tabs-selected");pootTabsHere.updatePoot(a,$(e[b]).height())},updatePoot:function(a,b){if(a.hasClass("poot-tabs-notitle")){a.find(".poot-tabs-titletext").html(pootTabsHere.getTab(a,a.attr("pootSelected")).html())}else{a.find(".poot-tabs-titletext").html(a.attr("originalTitle")+" — "+pootTabsHere.getTab(a,a.attr("pootSelected")).html())}if(a.has(".poot-tabs-edittabs")&&a.has(".poot-tabs-navbar")){try{a.find(".poot-tabs-navbar").html($(a.children(".poot-tabs-edittabs").children("span")[parseInt(a.attr("pootSelected"))]).html())}catch(c){}}var d=Math.max(a.children(".poot-tabs-content").height(),Math.max(a.children(".poot-tabs").height(),b)).toString()+"px";a.children(".poot-tabs-content").css("height",d);if(a.attr("vertical")){a.children(".poot-tabs").css("height",d)}},toggleCollapse:function(a){var b=a.children(".poot-tabs-showhide").text().split(";");var c=pootTabsHere.animationsEnabled?parseInt(a.attr("pootslideduration")):0;if(a.attr("pootcollapse")!="true"){a.attr("pootcollapse","true");a.find(".poot-tabs-hidelink a").text(b[0]);a.children(".poot-tabs, .poot-tabs-content").slideUp(c)}else{a.attr("pootcollapse","");a.find(".poot-tabs-hidelink a").text(b[1]);a.children(".poot-tabs, .poot-tabs-content").slideDown(c)}},delayHeight:function(a,b){setTimeout(function(){a.attr("pootselected",b.toString());pootTabsHere.changeTab(a,b,0,true);if(a.hasClass("poot-tabs-collapsed")){pootTabsHere.toggleCollapse(a)}},100)},poot:function(){var a=$(this);a.removeClass("poot-tabs-nojs");var b=0;a.attr("originalTitle",a.find(".poot-tabs-titletext").html());var c=/poot-tabs-selected-(\d+)/i.exec(a.attr("class"));if(c){pootTabsHere.delayHeight(a,parseInt(c[1])-1)}else{pootTabsHere.delayHeight(a,0)}var d=a.hasClass("poot-tabs-noanimations")?0:200;a.attr("pootslideduration",a.hasClass("poot-tabs-noanimations")?"0":"75");a.children(".poot-tabs").children("ul").children("li").each(function(){var c=b;$(this).click(function(){pootTabsHere.changeTab(a,c,d,false);$(this).blur();$(this).find("*").blur();return false});b++});var e=a.hasClass("poot-tabs-vertical");a.attr("pootvertical",e?"true":"");if(e){var f=a.children(".poot-tabs").width().toString()+"px";a.children(".poot-tabs-content").css("margin-left",f)}a.attr("pootcollapse","");a.find(".poot-tabs-hidelink a").click(function(){pootTabsHere.toggleCollapse(a);return false})},init:function(){$(".poot-tabs-container").each(pootTabsHere.poot)}};addOnloadHook(pootTabsHere.init);addOnloadHook(langClass);var youtubeHelper={chromeSize:25,maxWidth:.85,infoboxes:[".infobox",".testchamber"],ratioR:/ratio-(\d+)x(\d+)/i,widthsR:/widths((?:\D+\d+)+)/i,setSize:function(){var a=youtubeHelper.widthsR.exec($(this).attr("class"));if(a!=null){a=a[1].substr(1).split(/\D+/g);var b=$("#bodyContent").width();for(var c in youtubeHelper.infoboxes){if($(youtubeHelper.infoboxes[c]).length){b-=$(youtubeHelper.infoboxes[c]).width()}}b*=youtubeHelper.maxWidth;var d=[];for(var e=0;e<a.length;e++){d[e]=parseInt(a[e])}d.sort(function(a,b){return b-a});for(var e=0;e<d.length;e++){if(d[e]<=b||e==d.length-1){youtubeHelper.setWidth(this,d[e]);break}}}else{youtubeHelper.setWidth(this,parseFloat(obj.attr("width")))}},setUrl:function(){var a=$(this).children("object");if(!a)return;var b=a.children('param[name="movie"]').attr("value")+"&theme=light&color=white"+($(this).hasClass("hd-on")?"&hd=1":"");a.children('param[name="movie"]').attr("value",b);a.children("embed").attr("src",b);var c=$(this).html();$(this).html("").html(c)},setWidth:function(a,b){var c=$(a).children("object");if(!c)return;if($(a).hasClass("youtube-audio")){c.attr("width",b).attr("height",youtubeHelper.chromeSize);c.children("embed").attr("width",b).attr("height",youtubeHelper.chromeSize)}else{var d=youtubeHelper.ratioR.exec($(a).attr("class"));if(d!=null){d=parseFloat(d[1])/parseFloat(d[2]);var e=Math.round(b/d+youtubeHelper.chromeSize).toString();c.attr("width",b).attr("height",e);c.children("embed").attr("width",b).attr("height",e)}}},resizeTimer:null,resize:function(){if(youtubeHelper.resizeTimer!=null){clearTimeout(youtubeHelper.resizeTimer)}youtubeHelper.resizeTimer=setTimeout(youtubeHelper.onResize,100)},onResize:function(){$(".youtubebox").each(youtubeHelper.setSize)},init:function(){$(".youtubebox").each(youtubeHelper.setUrl);$(window).resize(youtubeHelper.resize);youtubeHelper.onResize()}};addOnloadHook(youtubeHelper.init);if(wgAction=="edit"||wgAction=="submit"||wgPageName=="Special:Upload"){appendCSS("div.edittools-text { display:none; }");addOnloadHook(function(){var a=document.getElementById("editpage-specialchars");if(!a||window.noDefaultEdittools){appendCSS("div.edittools-text { display:block; }");return}var b=/(?:^| )edittools-version-(\d+)(?: |$)/.exec(a.className);if(!b&&window.testJsEdittools)b=/(?:^| )edittools-version-(test\d+)(?: |$)/.exec(a.className);if(!b)return;var c=wgScript+"?title=MediaWiki:Edittools.js&action=raw&ctype=text/javascript&nocache="+b[1];importScriptURI(c)})}addOnloadHook(talkpageplus);var spaiConstants={};spaiConstants.spaiImage="http://wiki.teamfortress.com/w/images/7/73/Team_Fortress_Wiki_Egg_Spy.png";spaiConstants.spaiHeight=196;spaiConstants.sappedLogo="http://wiki.teamfortress.com/w/images/8/8f/Team_Fortress_Wiki_Egg_Logo_Sap.png";spaiConstants.spaiSappingMahWikiWav="http://wiki.teamfortress.com/w/images/4/4a/Team_Fortress_Wiki_Egg.wav";spaiConstants.timeStep=40;spaiConstants.anim_spaiFallDown=2e3;spaiConstants.anim_spaiWait=900;spaiConstants.anim_spaiBackUp=2e3;spaiConstants.anim_sapperDestroyed=2250;spaiConstants.theBody=function(){return document.getElementById("content")};spaiConstants.preloadedImages=[];spaiConstants.preloadingImages=[];spaiConstants.preloadingRefs={};spaiConstants.toPreloadImages=[spaiConstants.spaiImage,spaiConstants.sappedLogo];spaiConstants.self=null;spaiConstants.loadedSound=false;spaiConstants.loadedImages=false;spaiConstants.fired=false;if(!Array.prototype.indexOf){Array.prototype.indexOf=function(a,b){if(b==null){b=0}else if(b<0){b=Math.max(0,this.length+b)}for(var c=b,d=this.length;c<d;c++){if(this[c]===a)return c}return-1}}var spaiSappinMahWiki={constants:spaiConstants,createImgDiv:function(a){var b=spaiConstants.self;var c=document.createElement("div");var d=document.createElement("img");d.src=a;c.appendChild(d);setTimeout(function(){spaiConstants.theBody().appendChild(c)},1);return{div:c,img:d}},imagesLoaded:function(){spaiConstants.loadedImages=true;if(spaiConstants.loadedSound){spaiConstants.self.spySappingMahWiki()}},soundLoaded:function(){spaiConstants.loadedSound=true;if(spaiConstants.loadedImages){spaiConstants.self.spySappingMahWiki()}},preloadSound:function(a,b){var c=spaiConstants.self;try{var d=document.createElement("audio");d.setAttribute("src",a);d.setAttribute("style","display: none;");d.setAttribute("preload","true");spaiConstants.theBody().appendChild(d);d.addEventListener("canplaythrough",b,false)}catch(e){}setTimeout(b,1e3)},preloadImage:function(a){var b=spaiConstants.self;if(spaiConstants.preloadingImages.indexOf(a)==-1){spaiConstants.preloadingImages[spaiConstants.preloadingImages.length]=a;var c=b.createImgDiv(a);spaiConstants.preloadingRefs[a]=c["img"];c["div"].setAttribute("style","visibility: hidden; height: 0px; width: 0px; overflow: hidden; z-index: -10000;")}if(spaiConstants.preloadingRefs[a].width){spaiConstants.preloadedImages[spaiConstants.preloadedImages.length]=a}else{setTimeout(function(){b.preloadImage(a)},spaiConstants.timeStep)}},preloadImages:function(a){var b=spaiConstants.self;var c=true;for(var d in spaiConstants.toPreloadImages){if(spaiConstants.preloadedImages.indexOf(spaiConstants.toPreloadImages[d])==-1){c=false}if(spaiConstants.preloadingImages.indexOf(spaiConstants.toPreloadImages[d])==-1){b.preloadImage(spaiConstants.toPreloadImages[d])}}if(c){a()}else{setTimeout(function(){b.preloadImages(a)},spaiConstants.timeStep)}},destroyNode:function(a){try{a.parentNode.removeChild(a)}catch(b){}},smoothInOut:function(a){return(Math.sin((a-.5)*Math.PI)+1)/2},inAnimation:function(a,b,c,d,e){var f=spaiConstants.self;a(e(b/c));if(b>=c){d()}else{setTimeout(function(){f.inAnimation(a,b+spaiConstants.timeStep,c,d,e)},spaiConstants.timeStep)}},animate:function(a,b,c,d){var e=spaiConstants.self;return e.inAnimation(a,0,b,c,d)},playSound:function(a){var b=spaiConstants.self;try{var c=document.createElement("audio");c.setAttribute("src",a);c.setAttribute("style","display: none;");c.setAttribute("autoplay","true");spaiConstants.theBody().appendChild(c)}catch(d){}},spyAnimationFinished:function(a){var b=spaiConstants.self;for(var c in a){b.destroyNode(a[c])}spaiConstants.fired=false},spySappingMahWiki:function(){var a=spaiConstants.self;if(spaiConstants.fired)return;spaiConstants.fired=true;var b=document.createElement("a");b.setAttribute("href","/");b.setAttribute("style","display:block; position: absolute; top: 0px; left: 0px; width: 160px; height: 200px; border: 0px; background: url("+spaiConstants.spaiImage+") no-repeat 0px -50000px; z-index: 10000;");spaiConstants.theBody().appendChild(b);var c=document.getElementById("p-logo");var d=$(c).position().top;c.style.backgroundPosition="center bottom";var e=document.getElementById("p-navigation");var f=document.createElement("div");f.setAttribute("class","portlet");f.setAttribute("style","float: left; margin:0px; padding:0px; height: 0px;");c.parentNode.insertBefore(f,c);var g=function(a){a=parseInt(a*spaiConstants.spaiHeight);b.style.backgroundPosition="0px "+(-spaiConstants.spaiHeight+a).toString()+"px";c.style.top=(a+d).toString()+"px";e.style.marginTop=a+"px";f.style.height=a.toString()+"px"};a.animate(g,spaiConstants.anim_spaiFallDown,function(){a.playSound(spaiConstants.spaiSappingMahWikiWav);setTimeout(function(){var d=c.getElementsByTagName("a")[0].style.backgroundImage;c.getElementsByTagName("a")[0].style.backgroundImage="url("+spaiConstants.sappedLogo+")";a.animate(function(a){g(1-a)},spaiConstants.anim_spaiBackUp,function(){setTimeout(function(){c.getElementsByTagName("a")[0].style.backgroundImage=d;a.spyAnimationFinished([b,f])},spaiConstants.anim_sapperDestroyed)},a.smoothInOut)},spaiConstants.anim_spaiWait)},a.smoothInOut)},hitItDoc:function(){var a=spaiConstants.self;a.preloadImages(a.imagesLoaded);a.preloadSound(spaiConstants.spaiSappingMahWikiWav,a.soundLoaded)},initKonami:function(){var a=spaiConstants.self;var b=function(){var a={addEvent:function(a,b,c,d){if(a.addEventListener)a.addEventListener(b,c,false);else if(a.attachEvent){a["e"+b+c]=c;a[b+c]=function(){a["e"+b+c](window.event,d)};a.attachEvent("on"+b,a[b+c])}},input:"",pattern:"3838404037393739666513",load:function(b){this.addEvent(document,"keydown",function(b,c){if(c)a=c;a.input+=b?b.keyCode:event.keyCode;if(a.input.length>a.pattern.length)a.input=a.input.substr(a.input.length-a.pattern.length);if(a.input==a.pattern){a.code();a.input="";return}},this);this.iphone.load(b)},code:function(a){window.location=a},iphone:{start_x:0,start_y:0,stop_x:0,stop_y:0,tap:false,capture:false,orig_keys:"",keys:["UP","UP","DOWN","DOWN","LEFT","RIGHT","LEFT","RIGHT","TAP","TAP","TAP"],code:function(b){a.code(b)},load:function(b){orig_keys=this.keys;a.addEvent(document,"touchmove",function(b){if(b.touches.length==1&&a.iphone.capture==true){var c=b.touches[0];a.iphone.stop_x=c.pageX;a.iphone.stop_y=c.pageY;a.iphone.tap=false;a.iphone.capture=false;a.iphone.check_direction()}});a.addEvent(document,"touchend",function(c){if(a.iphone.tap==true)a.iphone.check_direction(b)},false);a.addEvent(document,"touchstart",function(b){a.iphone.start_x=b.changedTouches[0].pageX;a.iphone.start_y=b.changedTouches[0].pageY;a.iphone.tap=true;a.iphone.capture=true})},check_direction:function(a){x_magnitude=Math.abs(this.start_x-this.stop_x);y_magnitude=Math.abs(this.start_y-this.stop_y);x=this.start_x-this.stop_x<0?"RIGHT":"LEFT";y=this.start_y-this.stop_y<0?"DOWN":"UP";result=x_magnitude>y_magnitude?x:y;result=this.tap==true?"TAP":result;if(result==this.keys[0])this.keys=this.keys.slice(1,this.keys.length);if(this.keys.length==0){this.keys=this.orig_keys;this.code(a)}}}};return a};var c=new b;c.code=function(){a.hitItDoc.apply(a)};c.load()}};spaiConstants.self=spaiSappinMahWiki;addOnloadHook(spaiSappinMahWiki.initKonami);var dynamicBg={categories:{Scout:"http://wiki.teamfortress.com/w/images/e/ea/Background_Scout_vector.png",Soldier:"http://wiki.teamfortress.com/w/images/5/54/Background_Soldier_vector.png",Pyro:"http://wiki.teamfortress.com/w/images/e/ed/Background_Pyro_vector.png",Demoman:"http://wiki.teamfortress.com/w/images/5/59/Background_Demoman_vector.png",Engineer:"http://wiki.teamfortress.com/w/images/f/f7/Background_Engineer_vector.png",Heavy:"http://wiki.teamfortress.com/w/images/0/03/Background_Heavy_vector.png",Medic:"http://wiki.teamfortress.com/w/images/2/24/Background_Medic_vector.png",Sniper:"http://wiki.teamfortress.com/w/images/e/ed/Background_Sniper_vector.png",Spy:"http://wiki.teamfortress.com/w/images/b/b9/Background_Spy_vector.png"},getCategories:function(){var a=document.getElementById("catlinks");if(!a)return[];var b=document.getElementById("catlinks").getElementsByTagName("a");var c=[];var d;for(var e=0;e<b.length;e++){d=b[e].getAttribute("title");if(d.match(/^Category:/i,"")){c[c.length]=d.substr(9).replace(/\/[^/]+$/,"")}}return c},inArray:function(a,b){for(var c=0;c<a.length;c++){if(a[c]==b){return c}}return-1},init:function(){if(typeof wPrefs!="undefined"){if(dynamicBg.inArray(wPrefs,"noDynamicBackground")!=-1){return}}try{var a=dynamicBg.getCategories();var b=document.getElementsByTagName("body")[0]}catch(c){return}var d=[];if(typeof dynamicBg.categories["title-"+wgTitle]!="undefined"){d[0]=dynamicBg.categories["title-"+wgTitle]}else{for(var e in dynamicBg.categories){if(dynamicBg.inArray(a,e)!=-1){d[d.length]=dynamicBg.categories[e]}}}if(!d.length)return;var f=d[Math.floor(Math.random()*d.length)];b.style.backgroundImage="url("+f+")"}};addOnloadHook(dynamicBg.init);var pageScripts={pagesJS:["User:WindPower"],pagesCSS:["User:WindPower","User:Pilk/armory","User:Pilk","User:Esquilax","User:Lagg","User:MogDog66","User:MogDog66/userpagev2","User:404_User_Not_Found","User:404_User_Not_Found_Sandbox","User:NVis","User:NVis/Sandbox","User:Lexar"],suffixJS:"/Page.js",suffixCSS:"/Page.css",init:function(){for(var a in pageScripts.pagesJS){if(wgPageName==pageScripts.pagesJS[a]){$.getScript(wgScript+"?title="+encodeURIComponent(wgPageName+pageScripts.suffixJS)+"&ctype=text/javascript&action=raw")}}for(var a in pageScripts.pagesCSS){if(wgPageName==pageScripts.pagesCSS[a]){$("head").append($('<link rel="stylesheet" type="text/css" media="screen" />').attr("href",wgScript+"?title="+encodeURIComponent(wgPageName+pageScripts.suffixCSS)+"&ctype=text/css&action=raw"))}}}};addOnloadHook(pageScripts.init);addOnloadHook(function(){$(".diff-name-text").click(function(){$(this).parent().children(".diff-contents").toggle()})})
+
// External links open in new windows/tabs:
 +
$('a.external').attr('target', '_blank');
  
/* Google Analytics - Uncompressed */
+
/** Collapsible tables *********************************************************
 +
  *
 +
  *  Description: Allows tables to be collapsed, showing only the header. See
 +
  *              [[Wikipedia:NavFrame]].
 +
  *  Maintainers: [[User:R. Koot]]
 +
  */
 +
var hasClass = (function () {
 +
    var reCache = {};
 +
    return function (element, className) {
 +
        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
 +
    };
 +
})();
 +
 
 +
var autoCollapse = 2;
 +
var collapseCaptionLang = {'ar': 'أخف', 'cs': 'sbalit', 'da': 'fold sammen', 'de': 'einklappen', 'es': 'contraer', 'fi': 'supista', 'fr': 'masquer', 'hu': 'becsuk', 'it': 'comprimi', 'ja': '折り畳む', 'ko': '접기', 'nl': 'samenvouwen', 'pl': 'zwiń', 'pt': 'ocultar', 'pt-br': 'ocultar', 'ro': 'restrânge', 'ru': 'свернуть', 'sv': 'dölj', 'tr': 'daralt', 'zh-hans': '折叠', 'zh-hant': '合併'};
 +
var expandCaptionLang = {'ar': 'أظهر', 'cs': 'rozbalit', 'da': 'fold ud', 'de': 'ausklappen', 'es': 'expandir', 'fi': 'Laajenna', 'fr': 'afficher', 'hu': 'kinyit', 'it': 'espandi', 'ja': '展開する', 'ko': '펼치기', 'nl': 'uitvouwen', 'pl': 'rozwiń', 'pt': 'expandir', 'pt-br': 'expandir', 'ro': 'extinde', 'ru': 'развернуть', 'sv': 'visa', 'tr': 'genişlet', 'zh-hans': '展开', 'zh-hant': '展開'};
 +
var collapseCaption = collapseCaptionLang[mw.config.get("wgPageName").split("/").pop()] || 'collapse';
 +
var expandCaption = expandCaptionLang[mw.config.get("wgPageName").split("/").pop()] || 'expand';
 +
 +
window.collapseTable = function ( tableIndex ) {
 +
    var Button = document.getElementById( 'collapseButton' + tableIndex );
 +
    var Table = document.getElementById( 'collapsibleTable' + tableIndex );
 +
 +
    if ( !Table || !Button ) {
 +
        return false;
 +
    }
 +
 +
    var Rows = Table.rows;
 +
    var i;
 +
 +
    if ( Button.firstChild.data === collapseCaption ) {
 +
        for ( i = 1; i < Rows.length; i++ ) {
 +
            Rows[i].style.display = 'none';
 +
        }
 +
        Button.firstChild.data = expandCaption;
 +
    } else {
 +
        for ( i = 1; i < Rows.length; i++ ) {
 +
            Rows[i].style.display = Rows[0].style.display;
 +
        }
 +
        Button.firstChild.data = collapseCaption;
 +
    }
 +
};
 +
 +
function createCollapseButtons() {
 +
    var tableIndex = 0;
 +
    var NavigationBoxes = {};
 +
    var Tables = document.getElementsByTagName( 'table' );
 +
    var i;
 +
 +
    function handleButtonLink( index, e ) {
 +
        window.collapseTable( index );
 +
        e.preventDefault();
 +
    }
 +
 +
    for ( i = 0; i < Tables.length; i++ ) {
 +
        if ( $( Tables[i] ).hasClass( 'collapsible' ) ) {
 +
 +
            /* only add button and increment count if there is a header row to work with */
 +
            var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];
 +
            if ( !HeaderRow ) continue;
 +
            var Header = HeaderRow.getElementsByTagName( 'th' )[0];
 +
            if ( !Header ) continue;
 +
 +
            NavigationBoxes[ tableIndex ] = Tables[i];
 +
            Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex );
 +
 +
            var Button    = document.createElement( 'span' );
 +
            var ButtonLink = document.createElement( 'a' );
 +
            var ButtonText = document.createTextNode( collapseCaption );
 +
 +
            Button.className = 'collapseButton';  /* Styles are declared in Common.css */
 +
 +
            ButtonLink.style.color = Header.style.color;
 +
            ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );
 +
            ButtonLink.setAttribute( 'href', '#' );
 +
            $( ButtonLink ).on( 'click', $.proxy( handleButtonLink, ButtonLink, tableIndex ) );
 +
            ButtonLink.appendChild( ButtonText );
 +
 +
            Button.appendChild( document.createTextNode( '[' ) );
 +
            Button.appendChild( ButtonLink );
 +
            Button.appendChild( document.createTextNode( ']' ) );
 +
 +
            Header.insertBefore( Button, Header.firstChild );
 +
            tableIndex++;
 +
        }
 +
    }
 +
 +
    for ( i = 0;  i < tableIndex; i++ ) {
 +
        if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) || ( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) ) ) {
 +
            window.collapseTable( i );
 +
        }
 +
        else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {
 +
            var element = NavigationBoxes[i];
 +
            while ((element = element.parentNode)) {
 +
                if ( $( element ).hasClass( 'outercollapse' ) ) {
 +
                    window.collapseTable ( i );
 +
                    break;
 +
                }
 +
            }
 +
        }
 +
    }
 +
}
 +
 +
$( createCollapseButtons );
 +
 
 +
/** Dynamic Navigation Bars (experimental) *************************************
 +
*
 +
*  Description: See [[Wikipedia:NavFrame]].
 +
*  Maintainers: UNMAINTAINED
 +
*/
 +
 
 +
// set up the words in your language
 +
var NavigationBarHide = '[' + collapseCaption + ']';
 +
var NavigationBarShow = '[' + expandCaption + ']';
 +
 
 +
// shows and hides content and picture (if available) of navigation bars
 +
// Parameters:
 +
//    indexNavigationBar: the index of navigation bar to be toggled
 +
function toggleNavigationBar(indexNavigationBar){
 +
    var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
 +
    var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
 +
 
 +
    if (!NavFrame || !NavToggle) {
 +
        return false;
 +
    }
 +
 
 +
    // if shown now
 +
    if (NavToggle.firstChild.data == NavigationBarHide) {
 +
        for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
 +
            if (hasClass(NavChild, 'NavContent') || hasClass(NavChild, 'NavPic')) {
 +
                NavChild.style.display = 'none';
 +
            }
 +
        }
 +
    NavToggle.firstChild.data = NavigationBarShow;
 +
 
 +
    // if hidden now
 +
    } else if (NavToggle.firstChild.data == NavigationBarShow) {
 +
        for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
 +
            if (hasClass(NavChild, 'NavContent') || hasClass(NavChild, 'NavPic')) {
 +
                NavChild.style.display = 'block';
 +
            }
 +
        }
 +
        NavToggle.firstChild.data = NavigationBarHide;
 +
    }
 +
}
 +
 
 +
// adds show/hide-button to navigation bars
 +
function createNavigationBarToggleButton(){
 +
    var indexNavigationBar = 0;
 +
    // iterate over all < div >-elements
 +
    var divs = document.getElementsByTagName("div");
 +
    for (var i = 0; NavFrame = divs[i]; i++) {
 +
        // if found a navigation bar
 +
        if (hasClass(NavFrame, "NavFrame")) {
 +
 
 +
            indexNavigationBar++;
 +
            var NavToggle = document.createElement("a");
 +
            NavToggle.className = 'NavToggle';
 +
            NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
 +
            NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
 +
 
 +
            var isCollapsed = hasClass( NavFrame, "collapsed" );
 +
            /*
 +
            * Check if any children are already hidden.  This loop is here for backwards compatibility:
 +
            * the old way of making NavFrames start out collapsed was to manually add style="display:none"
 +
            * to all the NavPic/NavContent elements.  Since this was bad for accessibility (no way to make
 +
            * the content visible without JavaScript support), the new recommended way is to add the class
 +
            * "collapsed" to the NavFrame itself, just like with collapsible tables.
 +
            */
 +
            for (var NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling) {
 +
                if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
 +
                    if ( NavChild.style.display == 'none' ) {
 +
                        isCollapsed = true;
 +
                    }
 +
                }
 +
            }
 +
            if (isCollapsed) {
 +
                for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
 +
                    if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
 +
                        NavChild.style.display = 'none';
 +
                    }
 +
                }
 +
            }
 +
            var NavToggleText = document.createTextNode(isCollapsed ? NavigationBarShow : NavigationBarHide);
 +
            NavToggle.appendChild(NavToggleText);
 +
 
 +
            // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
 +
            for(var j=0; j < NavFrame.childNodes.length; j++) {
 +
                if (hasClass(NavFrame.childNodes[j], "NavHead")) {
 +
                    NavToggle.style.color = NavFrame.childNodes[j].style.color;
 +
                    NavFrame.childNodes[j].appendChild(NavToggle);
 +
                }
 +
            }
 +
            NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
 +
        }
 +
    }
 +
}
 +
 
 +
$( createNavigationBarToggleButton );
 +
 
 +
//END Collapsible tables *********************************************************
 +
 
 +
// PootTabs by User:WindPower~
 +
// It puts tabs on pages.
 +
var pootTabsHere = {
 +
    animationsEnabled: $.support.opacity,
 +
getTab:function(poot, index) {
 +
return $(poot.children('.poot-tabs').children('ul').children('li')[parseInt(index)]);
 +
},
 +
changeTab:function(poot, index, duration, force) {
 +
if(index == parseInt(poot.attr('pootSelected')) && !force && duration) return;
 +
if(!pootTabsHere.animationsEnabled) {
 +
duration = 0;
 +
}
 +
poot.attr('pootSelected', index.toString());
 +
var babies = poot.children('.poot-tabs-content').children();
 +
babies.each(function() {
 +
$(this).fadeOut(duration, function(){
 +
$(this).removeClass('poot-tabs-selected');
 +
});
 +
});
 +
$(babies[index]).each(function() {
 +
$(this).fadeIn(duration, function(){
 +
$(this).addClass('poot-tabs-selected');
 +
});
 +
});
 +
var cowtabs = poot.children('.poot-tabs').children('ul').children('li');
 +
cowtabs.removeClass('poot-tabs-selected');
 +
$(cowtabs[index]).addClass('poot-tabs-selected');
 +
pootTabsHere.updatePoot(poot, $(babies[index]).height());
 +
},
 +
updatePoot:function(poot, babysize) {
 +
if(poot.hasClass('poot-tabs-notitle')) {
 +
poot.find('.poot-tabs-titletext').html(pootTabsHere.getTab(poot, poot.attr('pootSelected')).html());
 +
} else {
 +
poot.find('.poot-tabs-titletext').html(poot.attr('originalTitle') + ' &mdash; ' + pootTabsHere.getTab(poot, poot.attr('pootSelected')).html());
 +
}
 +
if(poot.has('.poot-tabs-edittabs') && poot.has('.poot-tabs-navbar')) {
 +
try {
 +
poot.find('.poot-tabs-navbar').html($(poot.children('.poot-tabs-edittabs').children('span')[parseInt(poot.attr('pootSelected'))]).html());
 +
} catch(e) {}
 +
}
 +
var bestHeight = Math.max(poot.children('.poot-tabs-content').height(), Math.max(poot.children('.poot-tabs').height(), babysize)).toString() + 'px';
 +
poot.children('.poot-tabs-content').css('height', bestHeight);
 +
if(poot.attr('vertical')) {
 +
poot.children('.poot-tabs').css('height', bestHeight);
 +
}
 +
},
 +
toggleCollapse:function(poot) {
 +
var pootLinkText = poot.children('.poot-tabs-showhide').text().split(';');
 +
var duration = pootTabsHere.animationsEnabled ? parseInt(poot.attr('pootslideduration')) : 0;
 +
if(poot.attr('pootcollapse') != 'true') {
 +
poot.attr('pootcollapse', 'true');
 +
poot.find('.poot-tabs-hidelink a').text(pootLinkText[0]);
 +
poot.children('.poot-tabs, .poot-tabs-content').slideUp(duration);
 +
}
 +
else {
 +
poot.attr('pootcollapse', '');
 +
poot.find('.poot-tabs-hidelink a').text(pootLinkText[1]);
 +
poot.children('.poot-tabs, .poot-tabs-content').slideDown(duration);
 +
}
 +
},
 +
delayHeight:function(poot, selected) {
 +
setTimeout(function() {
 +
poot.attr('pootselected', selected.toString());
 +
pootTabsHere.changeTab(poot, selected, 0, true);
 +
if(poot.hasClass('poot-tabs-collapsed')) {
 +
pootTabsHere.toggleCollapse(poot);
 +
}
 +
}, 100);
 +
},
 +
poot:function() {
 +
var dis = $(this);
 +
dis.removeClass('poot-tabs-nojs'); // If this thing runs, JS is on
 +
var ind = 0;
 +
dis.attr('originalTitle', dis.find('.poot-tabs-titletext').html());
 +
var selected = /poot-tabs-selected-(\d+)/i.exec(dis.attr('class'));
 +
if(selected) {
 +
pootTabsHere.delayHeight(dis, parseInt(selected[1])-1);
 +
}
 +
else {
 +
pootTabsHere.delayHeight(dis, 0);
 +
}
 +
var duration = dis.hasClass('poot-tabs-noanimations') ? 0 : 200;
 +
dis.attr('pootslideduration', dis.hasClass('poot-tabs-noanimations') ? '0' : '75');
 +
dis.children('.poot-tabs').children('ul').children('li').each(function(){
 +
var thisInd = ind;
 +
$(this).click(function(){
 +
pootTabsHere.changeTab(dis, thisInd, duration, false);
 +
$(this).blur();
 +
$(this).find('*').blur();
 +
return false;
 +
});
 +
ind++;
 +
});
 +
var isVertical = dis.hasClass('poot-tabs-vertical');
 +
dis.attr('pootvertical', isVertical ? 'true' : '');
 +
if(isVertical) {
 +
var teenie = dis.children('.poot-tabs').width().toString() + 'px';
 +
dis.children('.poot-tabs-content').css('margin-left', teenie);
 +
}
 +
dis.attr('pootcollapse', ''); // False
 +
dis.find('.poot-tabs-hidelink a').click(function(){
 +
pootTabsHere.toggleCollapse(dis);
 +
return false;
 +
});
 +
},
 +
init:function() {
 +
$('.poot-tabs-container').each(pootTabsHere.poot);
 +
}
 +
};
 +
$(pootTabsHere.init);
 +
 
 +
// Language support fixes
 +
var langFixes = {
 +
init: function() {
 +
// Supported list of languages (not including the default one):
 +
var langList = ['ar', 'cs', 'da', 'de', 'es', 'fi', 'fr', 'hu', 'it', 'ja', 'ko', 'nl', 'no', 'pl', 'pt', 'pt-br', 'ro', 'ru', 'sv', 'tr', 'zh-hans', 'zh-hant'];
 +
// Assumed language if the page is in none of the languages above:
 +
var defaultLang = 'en';
 +
var lang = defaultLang;
 +
for(var i in langList) {
 +
if(mw.config.get('wgPageName').substr(mw.config.get('wgPageName').length - 1 - langList[i].length).toLowerCase() == '/' + langList[i].toLowerCase()) {
 +
lang = langList[i];
 +
break;
 +
}
 +
}
 +
$('body').addClass('lang-' + lang);
 +
}
 +
};
 +
$(langFixes.init);
 +
 
 +
// Custom tooltip component. See Template:Tooltip
 +
var wikiTooltip = {
 +
    init: function() {
 +
        var $tooltips = $('.wiki-tooltip .wiki-tooltip-content');
 +
        if ($tooltips[0]) {
 +
            $tooltips.each(function() {
 +
                var $this = $(this);
 +
                function handler() {
 +
                    // Check for links and handle them on handheld devices
 +
                    if (!!$this.closest('a').attr('href')) {
 +
                        $this.closest('a').removeAttr('title');
 +
 
 +
                        widthRect <= 1000 ? wikiTooltip.hasLink($this) : wikiTooltip.removeAnchor($this);
 +
                    }
 +
                   
 +
                    // Prevent tooltips from overflowing the viewport
 +
                    var bounding = $this[0].getBoundingClientRect();
 +
                    edgeRect = {
 +
                        left: Math.floor(($this.width() + bounding.left + 10)),
 +
                        right: Math.floor(($this.width() + bounding.right + 10))
 +
                    };
 +
 
 +
                    widthRect = $(window).innerWidth();
 +
                    if (edgeRect.left >= (widthRect || document.documentElement.clientWidth)) {
 +
                        $this.css('left', '');
 +
                        $this.css('right', '50%');
 +
                    } else if (edgeRect.right <= (widthRect || document.documentElement.clientWidth)) {
 +
                        $this.css('right', '');
 +
                        $this.css('left', '50%');
 +
                    }
 +
                }
 +
                $(handler);
 +
                setTimeout(function() {
 +
                    $(window).on('resize', handler);
 +
                }, 250);
 +
            });
 +
        }
 +
    },
 +
    hasLink: function(tooltip) {
 +
        if (tooltip.find('a').length < 1) {
 +
            var $a = $('<a>');
 +
            var url = tooltip.closest('a');
 +
            var href = url.attr('href');
 +
 
 +
            $a.attr('href', href);
 +
            url.attr('href', 'javascript:void(0);');
 +
            tooltip.append($a);
 +
        }
 +
    },
 +
    removeAnchor: function(tooltip) {
 +
        var url = tooltip.closest('a');
 +
        var href = url.attr('href');
 +
 
 +
        innerLink = tooltip.find('a').attr('href');
 +
        if (innerLink) {
 +
            href = innerLink;
 +
            url.attr('href', href);
 +
            tooltip.find('a').remove();
 +
        } else {
 +
            return;
 +
        }
 +
    }
 +
};
 +
$(wikiTooltip.init);
 +
 
 +
// Logged-in body class injection
 +
var loggedinBodyClass = {
 +
init: function() {
 +
$('body').addClass(mw.config.get('wgUserName') == null ? 'not-logged-in' : 'logged-in');
 +
}
 +
};
 +
$(loggedinBodyClass.init);
 +
 
 +
// Resize YouTube embed, turn HD on, etc, by User:WindPower
 +
var youtubeHelper = {
 +
chromeSize: 25, // This is the height (in pixels) of the chrome of YouTube's embedded video player. Update this whenever they release a new embedded video player
 +
maxWidth: 0.85, // Maximum fraction of the available width that the video may take
 +
infoboxes: ['.infobox', '.testchamber'], // Selectors of infobox-style boxes that should be deducted from the page's available width
 +
ratioR: /ratio-(\d+)x(\d+)/i,
 +
widthsR: /widths((?:\D+\d+)+)/i,
 +
setSize:function() {
 +
var widths = youtubeHelper.widthsR.exec($(this).attr('class'));
 +
if(widths != null) {
 +
widths = widths[1].substr(1).split(/\D+/g);
 +
var availableWidth = $('#bodyContent').width();
 +
for(var i in youtubeHelper.infoboxes) {
 +
if($(youtubeHelper.infoboxes[i]).length) {
 +
availableWidth -= $(youtubeHelper.infoboxes[i]).width();
 +
}
 +
}
 +
availableWidth *= youtubeHelper.maxWidth;
 +
var intWidths = [];
 +
for(var w = 0; w < widths.length; w++) {
 +
intWidths[w] = parseInt(widths[w]);
 +
}
 +
intWidths.sort(function(a, b){return b - a;});
 +
for(var w = 0; w < intWidths.length; w++) {
 +
if(intWidths[w] <= availableWidth || w == intWidths.length-1) {
 +
youtubeHelper.setWidth(this, intWidths[w]);
 +
break;
 +
}
 +
}
 +
}
 +
else {
 +
youtubeHelper.setWidth(this, parseFloat(obj.attr('width')));
 +
}
 +
},
 +
setUrl:function() {
 +
var obj = $(this).children('object');
 +
if(!obj.length) return;
 +
obj.append($('<param name="allowscriptaccess" value="true"></param>'));
 +
obj.append($('<param name="allowfullscreen" value="true"></param>'));
 +
var titleParts = mw.config.get('wgPageName').split(/\//g);
 +
var lang = 'en';
 +
if(titleParts.length == 2 && !mw.config.get('wgCanonicalSpecialPageName')) {
 +
lang = titleParts[titleParts.length-1];
 +
}
 +
var playerUrl = obj.children('param[name="movie"]').attr('value') + '&version=2&fs=1&theme=dark&color=white' + ($(this).hasClass('hd-on') ? '&hd=1' : '') + '&cc_load_policy=1&modestbranding=1&hl=' + lang + '&cc_lang_pref=' + lang;
 +
obj.children('param[name="movie"]').attr('value', playerUrl);
 +
obj.children('embed').attr('src', playerUrl).attr('allowscriptaccess', 'always').attr('allowfullscreen', 'true');
 +
var resultHtml = $(this).html();
 +
$(this).html('').html(resultHtml);
 +
},
 +
setWidth:function(youtube, width) {
 +
var obj = $(youtube).children('object');
 +
if(!obj) return;
 +
if($(youtube).hasClass('youtube-audio')) {
 +
obj.attr('width', width).attr('height', youtubeHelper.chromeSize); // Set <object> height
 +
obj.children('embed').attr('width', width).attr('height', youtubeHelper.chromeSize); // Set <embed> height
 +
}
 +
else {
 +
var ratio = youtubeHelper.ratioR.exec($(youtube).attr('class'));
 +
if(ratio != null) {
 +
ratio = parseFloat(ratio[1])/parseFloat(ratio[2]);
 +
var newHeight = Math.round(width / ratio + youtubeHelper.chromeSize).toString();
 +
obj.attr('width', width).attr('height', newHeight); // Set <object> height
 +
obj.children('embed').attr('width', width).attr('height', newHeight); // Set <embed> height
 +
}
 +
}
 +
},
 +
resizeTimer:null,
 +
resize:function() {
 +
if(youtubeHelper.resizeTimer != null) {
 +
clearTimeout(youtubeHelper.resizeTimer);
 +
}
 +
youtubeHelper.resizeTimer = setTimeout(youtubeHelper.onResize, 100);
 +
},
 +
onResize:function() {
 +
$('.youtubebox').each(youtubeHelper.setSize);
 +
},
 +
init:function() {
 +
$('.youtubebox').each(youtubeHelper.setUrl);
 +
$(window).resize(youtubeHelper.resize);
 +
youtubeHelper.onResize();
 +
}
 +
};
 +
$(youtubeHelper.init);
 +
 
 +
// Edittools loader copied from http://en.wikipedia.org/wiki/MediaWiki:Common.js/edit.js?oldid=407371785
 +
// Only slightly modified by seb26
 +
 
 +
/**
 +
*  Edittools javascript loader ************************************************
 +
*
 +
*  Description: Pulls in [[MediaWiki:Edittools.js]]. Includes a cache-bypassing
 +
*  version number in the URL in order to allow any changes to the edittools to
 +
*  be rapidly deployed to users.
 +
*
 +
*  Note that, by default, this function does nothing unless the element with
 +
*  the ID "editpage-specialchars" (which contains the old edittools code in
 +
*  [[MediaWiki:Edittools]], and will be retained as a placeholder in the new
 +
*  implementation) has a class named "edittools-version-NNN", where NNN is a
 +
*  number.  If the class name has "test" before the number, the code will only
 +
*  run for users who have set "window.testJsEdittools = true" in their user JS.
 +
*  The "test" should be retained in the class name until the new edittools
 +
*  implementation is ready and fully tested, and until at least 30 days have
 +
*  passed since this loader stub was added (which will be in 27 June 2008).
 +
*
 +
*  For compatibility with Alex Smotrov's original implementation, on which this
 +
*  code is loosely based (see [[mw:User talk:Alex Smotrov/edittools.js]]), this
 +
*  loader can also be disabled by setting "window.noDefaultEdittools = true".
 +
*
 +
*  Maintainers: [[User:Ilmari Karonen]]
 +
*/
 +
 
 +
if (['edit', 'submit'].indexOf(mw.config.get('wgAction')) !== -1 || mw.config.get('wgPageName') == "Special:Upload") //scripts specific to editing pages
 +
{
 +
 +
  // Prevent the static edittools from flashing before the compact edittools below is loaded.
 +
  mw.util.addCSS('div.edittools-text { display:none; }');
 +
 +
  $(function () {
 +
    // needs to be deferred until the DOM has fully loaded
 +
    var placeholder = document.getElementById("editpage-specialchars");
 +
    if (!placeholder || window.noDefaultEdittools) {
 +
      //Show the static edittools again for users with "window.noDefaultEdittools=true".
 +
      mw.util.addCSS('div.edittools-text { display:block; }');
 +
      return;
 +
    }
 +
    var match = /(?:^| )edittools-version-(\d+)(?: |$)/.exec(placeholder.className);
 +
 +
    // set window.testJsEdittools = true to enable testing before full deployment
 +
    if (!match && window.testJsEdittools)
 +
        match = /(?:^| )edittools-version-(test\d+)(?: |$)/.exec(placeholder.className);
 +
 +
    if (!match) return;
 +
    var url = mw.config.get('wgScript') + '?title=MediaWiki:Edittools.js&action=raw&ctype=text/javascript&nocache=' + match[1];
 +
    mw.loader.load(url);
 +
  });
 +
}
 +
 
 +
/********* MediaWiki:Valve.js *********/
 +
function talkpageplus()
 +
{
 +
    var talkpagelink = document.getElementById('ca-talk');
 +
    if (talkpagelink && talkpagelink.className == 'new')
 +
    {
 +
        talkpagelink.firstChild.href += '&section=new';
 +
    }
 +
}
 +
$(talkpageplus);
 +
 
 +
// Konami code easter egg by WindPower, modified by Wookipan
 +
// Constants:
 +
var spaiConstants = {};
 +
// Editable constants:
 +
// General info:
 +
spaiConstants.spaiEnabled = true;
 +
spaiConstants.spaiImage = '/w/images/7/73/Team_Fortress_Wiki_Egg_Spy.png';
 +
spaiConstants.spaiHeight = 196;
 +
spaiConstants.sapperClass = '--sapped';
 +
spaiConstants.spaiSappingMahWikiWav = '/w/images/4/4a/Team_Fortress_Wiki_Egg.wav';
 +
spaiConstants.timeStep = 40; // In milliseconds; 40 ms => 25 fps
 +
// Animation timing (all times in milliseconds):
 +
spaiConstants.anim_spaiFallDown = 2000; // Time for Spy to fall down
 +
spaiConstants.anim_spaiWait = 900; // Time Spy waits before going back up
 +
spaiConstants.anim_spaiBackUp = 2000; // Time for Spy to go back up
 +
spaiConstants.anim_sapperDestroyed = 2250; // Time until Sapper gets destroyed
 +
// End editable constants
 +
spaiConstants.theBody = function(){return document.getElementById('content');};
 +
spaiConstants.preloadedImages = [];
 +
spaiConstants.preloadingImages = [];
 +
spaiConstants.preloadingRefs = {};
 +
spaiConstants.toPreloadImage = spaiConstants.spaiImage;
 +
spaiConstants.self = null;
 +
spaiConstants.loadedSound = false;
 +
spaiConstants.loadedImages = false;
 +
spaiConstants.fired = false;
 +
// End constants
 +
 
 +
if (!Array.prototype.indexOf) {
 +
  Array.prototype.indexOf = function (obj, fromIndex) {
 +
    if (fromIndex == null) {
 +
        fromIndex = 0;
 +
    } else if (fromIndex < 0) {
 +
        fromIndex = Math.max(0, this.length + fromIndex);
 +
    }
 +
    for (var i = fromIndex, j = this.length; i < j; i++) {
 +
        if (this[i] === obj)
 +
            return i;
 +
    }
 +
    return -1;
 +
  };
 +
}
 +
 
 +
var spaiSappinMahWiki = {
 +
constants: spaiConstants,
 +
createImgDiv:function(image) {
 +
var self = spaiConstants.self;
 +
var div = document.createElement('div');
 +
var img = document.createElement('img');
 +
img.src = image;
 +
div.appendChild(img);
 +
setTimeout(function(){spaiConstants.theBody().appendChild(div);}, 1);
 +
return {
 +
'div': div,
 +
'img': img
 +
};
 +
},
 +
imagesLoaded:function() {
 +
spaiConstants.loadedImages = true;
 +
if(spaiConstants.loadedSound) {
 +
spaiConstants.self.spySappingMahWiki();
 +
}
 +
},
 +
soundLoaded:function() {
 +
spaiConstants.loadedSound = true;
 +
if(spaiConstants.loadedImages) {
 +
spaiConstants.self.spySappingMahWiki();
 +
}
 +
},
 +
preloadSound:function(sound, callback) {
 +
var self = spaiConstants.self;
 +
try {
 +
var audio = document.createElement('audio');
 +
audio.setAttribute('src', sound);
 +
audio.setAttribute('style', 'display: none;');
 +
audio.setAttribute('preload', 'true');
 +
spaiConstants.theBody().appendChild(audio);
 +
audio.addEventListener('canplaythrough', callback, false);
 +
}
 +
catch(e) {}
 +
setTimeout(callback, 1000); // Fallback
 +
},
 +
preloadImage:function(image) {
 +
var self = spaiConstants.self;
 +
if(spaiConstants.preloadingImages.indexOf(image) == -1) {
 +
spaiConstants.preloadingImages[spaiConstants.preloadingImages.length] = image;
 +
var nodes = self.createImgDiv(image);
 +
spaiConstants.preloadingRefs[image] = nodes['img'];
 +
nodes['div'].setAttribute('style', 'visibility: hidden; height: 0px; width: 0px; overflow: hidden; z-index: -10000;');
 +
}
 +
if(spaiConstants.preloadingRefs[image].width) {
 +
spaiConstants.preloadedImages[spaiConstants.preloadedImages.length] = image;
 +
}
 +
else
 +
{
 +
setTimeout(function(){self.preloadImage(image);}, spaiConstants.timeStep);
 +
}
 +
},
 +
preloadImages:function(callback) {
 +
var self = spaiConstants.self;
 +
var allPreloaded = true;
 +
for(var i in spaiConstants.toPreloadImages) {
 +
if(spaiConstants.preloadedImages.indexOf(spaiConstants.toPreloadImages[i]) == -1) {
 +
allPreloaded = false;
 +
}
 +
if(spaiConstants.preloadingImages.indexOf(spaiConstants.toPreloadImages[i]) == -1) {
 +
self.preloadImage(spaiConstants.toPreloadImages[i]);
 +
}
 +
}
 +
if(allPreloaded) {
 +
callback();
 +
} else {
 +
setTimeout(function(){self.preloadImages(callback);}, spaiConstants.timeStep);
 +
}
 +
},
 +
destroyNode:function(node) {
 +
try {
 +
node.parentNode.removeChild(node);
 +
} catch(e) {
 +
// Ze goggles, zey do nothin
 +
}
 +
},
 +
smoothInOut:function(progress) {
 +
return (Math.sin((progress-.5)*Math.PI)+1)/2;
 +
},
 +
inAnimation:function(func, progressTime, totalTime, callback, easing) {
 +
var self = spaiConstants.self;
 +
func(easing(progressTime / totalTime));
 +
if(progressTime >= totalTime) {
 +
callback();
 +
} else {
 +
setTimeout(function(){self.inAnimation(func, progressTime + spaiConstants.timeStep, totalTime, callback, easing);}, spaiConstants.timeStep);
 +
}
 +
},
 +
animate:function(func, totalTime, callback, easing) {
 +
var self = spaiConstants.self;
 +
return self.inAnimation(func, 0.0, totalTime, callback, easing);
 +
},
 +
playSound:function(sound) {
 +
var self = spaiConstants.self;
 +
try {
 +
var audio = document.createElement('audio');
 +
audio.setAttribute('src', sound);
 +
audio.setAttribute('style', 'display: none;');
 +
audio.setAttribute('autoplay', 'true');
 +
spaiConstants.theBody().appendChild(audio);
 +
}
 +
catch(e) {}
 +
},
 +
spyAnimationFinished:function(nodes) {
 +
var self = spaiConstants.self;
 +
for(var node in nodes) {
 +
self.destroyNode(nodes[node]);
 +
}
 +
spaiConstants.fired = false;
 +
},
 +
spySappingMahWiki:function() {
 +
var self = spaiConstants.self;
 +
if(spaiConstants.fired) return;
 +
spaiConstants.fired = true;
 +
var spai = document.createElement('a');
 +
spai.setAttribute('href', '/');
 +
spai.setAttribute('style', 'display:block; position: absolute; top: 0px; left: 0px; width: 160px; height: 200px; border: 0px; background: url('+spaiConstants.spaiImage+') no-repeat 0px -50000px; z-index: 10000;');
 +
spaiConstants.theBody().appendChild(spai);
 +
var logoPortlet = document.getElementById('p-logo');
 +
var changeHeight = function(progress) {
 +
progress = parseInt(progress * spaiConstants.spaiHeight);
 +
spai.style.backgroundPosition = '0px ' + (-spaiConstants.spaiHeight + progress).toString() + 'px';
 +
};
 +
self.animate(changeHeight, spaiConstants.anim_spaiFallDown, function(){
 +
self.playSound(spaiConstants.spaiSappingMahWikiWav);
 +
setTimeout(function(){
 +
logoPortlet.classList.add('wiki-logo' + spaiConstants.sapperClass);
 +
self.animate(function(progress){changeHeight(1.0-progress);}, spaiConstants.anim_spaiBackUp, function(){
 +
setTimeout(function(){
 +
logoPortlet.removeAttribute('class');
 +
self.spyAnimationFinished([spai]);
 +
}, spaiConstants.anim_sapperDestroyed);
 +
}, self.smoothInOut);
 +
}, spaiConstants.anim_spaiWait);
 +
}, self.smoothInOut);
 +
},
 +
hitItDoc:function() {
 +
var self = spaiConstants.self;
 +
self.preloadImages(self.imagesLoaded);
 +
self.preloadSound(spaiConstants.spaiSappingMahWikiWav, self.soundLoaded);
 +
},
 +
initKonami: function () {
 +
var self = spaiConstants.self;
 +
/*
 +
* Konami-JS ~
 +
* :: Now with support for touch events and multiple instances for
 +
* :: those situations that call for multiple easter eggs!
 +
* Code: https://github.com/georgemandis/konami-js
 +
* Copyright (c) 2009 George Mandis (https://george.mand.is)
 +
* Version: 1.6.3 (11/11/2021)
 +
* Licensed under the MIT License (http://opensource.org/licenses/MIT)
 +
* Tested in: Safari 4+, Google Chrome 4+, Firefox 3+, IE7+, Mobile Safari 2.2.1+ and Android
 +
*/
 +
var Konami = function (callback) {
 +
var konami = {
 +
addEvent: function (obj, type, fn, ref_obj) {
 +
if (obj.addEventListener)
 +
obj.addEventListener(type, fn, false);
 +
else if (obj.attachEvent) {
 +
// IE
 +
obj["e" + type + fn] = fn;
 +
obj[type + fn] = function () {
 +
obj["e" + type + fn](window.event, ref_obj);
 +
}
 +
obj.attachEvent("on" + type, obj[type + fn]);
 +
}
 +
},
 +
removeEvent: function (obj, eventName, eventCallback) {
 +
if (obj.removeEventListener) {
 +
obj.removeEventListener(eventName, eventCallback);
 +
} else if (obj.attachEvent) {
 +
obj.detachEvent(eventName);
 +
}
 +
},
 +
input: "",
 +
pattern: "38384040373937396665",
 +
keydownHandler: function (e, ref_obj) {
 +
if (ref_obj) {
 +
konami = ref_obj;
 +
} // IE
 +
konami.input += e ? e.keyCode : event.keyCode;
 +
if (konami.input.length > konami.pattern.length) {
 +
konami.input = konami.input.substr((konami.input.length - konami.pattern.length));
 +
}
 +
if (konami.input === konami.pattern) {
 +
konami.code(konami._currentLink);
 +
konami.input = '';
 +
e.preventDefault();
 +
return false;
 +
}
 +
},
 +
load: function (link) {
 +
this._currentLink = link;
 +
this.addEvent(document, "keydown", this.keydownHandler, this);
 +
this.iphone.load(link);
 +
},
 +
unload: function () {
 +
this.removeEvent(document, 'keydown', this.keydownHandler);
 +
this.iphone.unload();
 +
},
 +
code: function (link) {
 +
window.location = link
 +
},
 +
iphone: {
 +
start_x: 0,
 +
start_y: 0,
 +
stop_x: 0,
 +
stop_y: 0,
 +
tap: false,
 +
capture: false,
 +
orig_keys: "",
 +
keys: ["UP", "UP", "DOWN", "DOWN", "LEFT", "RIGHT", "LEFT", "RIGHT", "TAP", "TAP"],
 +
input: [],
 +
code: function (link) {
 +
konami.code(link);
 +
},
 +
touchmoveHandler: function (e) {
 +
if (e.touches.length === 1 && konami.iphone.capture === true) {
 +
var touch = e.touches[0];
 +
konami.iphone.stop_x = touch.pageX;
 +
konami.iphone.stop_y = touch.pageY;
 +
konami.iphone.tap = false;
 +
konami.iphone.capture = false;
 +
konami.iphone.check_direction();
 +
}
 +
},
 +
touchendHandler: function () {
 +
konami.iphone.input.push(konami.iphone.check_direction());
 +
 
 +
if (konami.iphone.input.length > konami.iphone.keys.length) konami.iphone.input.shift();
 +
 
 +
if (konami.iphone.input.length === konami.iphone.keys.length) {
 +
var match = true;
 +
for (var i = 0; i < konami.iphone.keys.length; i++) {
 +
if (konami.iphone.input[i] !== konami.iphone.keys[i]) {
 +
match = false;
 +
}
 +
}
 +
if (match) {
 +
konami.iphone.code(konami._currentLink);
 +
}
 +
}
 +
},
 +
touchstartHandler: function (e) {
 +
konami.iphone.start_x = e.changedTouches[0].pageX;
 +
konami.iphone.start_y = e.changedTouches[0].pageY;
 +
konami.iphone.tap = true;
 +
konami.iphone.capture = true;
 +
},
 +
load: function (link) {
 +
this.orig_keys = this.keys;
 +
konami.addEvent(document, "touchmove", this.touchmoveHandler);
 +
konami.addEvent(document, "touchend", this.touchendHandler, false);
 +
konami.addEvent(document, "touchstart", this.touchstartHandler);
 +
},
 +
unload: function () {
 +
konami.removeEvent(document, 'touchmove', this.touchmoveHandler);
 +
konami.removeEvent(document, 'touchend', this.touchendHandler);
 +
konami.removeEvent(document, 'touchstart', this.touchstartHandler);
 +
},
 +
check_direction: function () {
 +
x_magnitude = Math.abs(this.start_x - this.stop_x);
 +
y_magnitude = Math.abs(this.start_y - this.stop_y);
 +
x = ((this.start_x - this.stop_x) < 0) ? "RIGHT" : "LEFT";
 +
y = ((this.start_y - this.stop_y) < 0) ? "DOWN" : "UP";
 +
result = (x_magnitude > y_magnitude) ? x : y;
 +
result = (this.tap === true) ? "TAP" : result;
 +
return result;
 +
}
 +
}
 +
}
 +
 
 +
typeof callback === "string" && konami.load(callback);
 +
if (typeof callback === "function") {
 +
konami.code = callback;
 +
konami.load();
 +
}
 +
 
 +
return konami;
 +
};
 +
// End of Konami-JS
 +
var konami = new Konami();
 +
konami.code = function() {
 +
if (spaiConstants.spaiEnabled) {
 +
self.hitItDoc.apply(self);
 +
}
 +
 +
document.dispatchEvent(new CustomEvent('konami:fire'));
 +
};
 +
konami.load();
 +
}
 +
};
 +
spaiConstants.self = spaiSappinMahWiki;
 +
$(spaiSappinMahWiki.initKonami);
 +
 
 +
// Dynamic background by WindPower
 +
// WindPower is secksy and makes this wiki awesome with his very breath. (- Smashman)
 +
var dynamicBg = {
 +
categories: {
 +
// Format:
 +
// 'CategoryName': 'URL of background image',  ---OR--- 'title-PageTitle': 'URL of background image',
 +
// Categories don't have to be class names, they can be things like "Weapons", "Featured articles", "Maps", "Help", etc.
 +
'Scout': '/w/images/e/ea/Background_Scout_vector.png',
 +
'Soldier': '/w/images/5/54/Background_Soldier_vector.png',
 +
'Pyro': '/w/images/e/ed/Background_Pyro_vector.png',
 +
                'Demoman': '/w/images/5/59/Background_Demoman_vector.png',
 +
                'Engineer': '/w/images/f/f7/Background_Engineer_vector.png',
 +
                'Heavy': '/w/images/0/03/Background_Heavy_vector.png',
 +
                'Medic': '/w/images/2/24/Background_Medic_vector.png',
 +
                'Sniper': '/w/images/e/ed/Background_Sniper_vector.png',
 +
                'Spy': '/w/images/b/b9/Background_Spy_vector.png'
 +
// (No comma at the end of the last line)
 +
},
 +
getCategories:function() {
 +
var catlinksnode = document.getElementById('catlinks');
 +
if(!catlinksnode) return [];
 +
var catlinks = document.getElementById('catlinks').getElementsByTagName('a');
 +
var cats = [];
 +
var l;
 +
for(var i = 0; i < catlinks.length; i++) {
 +
l = catlinks[i].getAttribute('title');
 +
if(l.match(/^Category:/i, '')) {
 +
cats[cats.length] = l.substr(9).replace(/\/[^/]+$/, '');
 +
}
 +
}
 +
return cats;
 +
},
 +
inArray:function(haystack, needle) {
 +
for(var i = 0; i < haystack.length; i++) {
 +
if(haystack[i] == needle) {
 +
return i;
 +
}
 +
}
 +
return -1;
 +
},
 +
init:function() {
 +
if(typeof(wPrefs) != 'undefined') {
 +
if(dynamicBg.inArray(wPrefs, 'noDynamicBackground') != -1) {
 +
return; // Script disabled
 +
}
 +
}
 +
try {
 +
var cats = dynamicBg.getCategories();
 +
var body = document.getElementsByTagName('body')[0];
 +
} catch(e) {
 +
return;
 +
}
 +
var selectedCats = [];
 +
if(typeof(dynamicBg.categories['title-' + mw.config.get('wgTitle')]) != 'undefined') {
 +
selectedCats[0] = dynamicBg.categories['title-' + mw.config.get('wgTitle')];
 +
}
 +
else {
 +
for(var i in dynamicBg.categories) {
 +
if(dynamicBg.inArray(cats, i) != -1) {
 +
selectedCats[selectedCats.length] = dynamicBg.categories[i];
 +
}
 +
}
 +
}
 +
if(!selectedCats.length) return; // No match, keep default style
 +
var selectedCat = selectedCats[Math.floor(Math.random()*selectedCats.length)];
 +
body.style.backgroundImage='url('+selectedCat+')';
 +
}
 +
};
 +
$(dynamicBg.init);
 +
 
 +
// Page-specific JavaScript/CSS
 +
var pageScripts = {
 +
pagesJS: ['Main_Page', 'User:WindPower', 'User:MogDog66', 'User:WindPower/Main_Page', 'User:Lexar/Main_Page/Template:Benjas', 'User:Lexar/RandomPage', 'User:Lexar/responsive_infobox', 'User:Lexar/sandbox', 'User:Tark', 'User:Tark/Sandbox', 'Team_Fortress_Wiki:April_Fools\'_Day/2021/Main_Page', 'User:PhoneWave', 'User:Wookipan/Sandbox'],
 +
pagesCSS: ['Main_Page', 'User:WindPower', 'User:Pilk/armory', 'User:Pilk', 'User:Esky', 'User:Lagg', 'User:MogDog66', 'User:CrushBOT', 'User:MogDog66/userpagev2', 'User:NVis', 'User:NVis/Sandbox', 'User:Lexar', 'User:MogDog66/MPR', 'User:WindPower/Main_Page', 'User:Moussekateer/3DViewer', 'User:T-Wayne', 'User:FreeXMan', 'User:Nixshadow', 'User:Ath', 'User:Carez', 'User:Lexar/Main_Page/Template:Benjas', 'User:Lexar/RandomPage', 'User:MogDog66/Sandbox', 'User:Obilisk', 'User:Lexar/itembox_tooltip', 'User:Lexar/sandbox', 'User:Lexar/responsive_infobox', 'User:Hagbard Celine', 'User:Wookipan', 'User:Wookipan/Sandbox', 'User:GrampaSwood', 'Team_Fortress_Wiki:April_Fools\'_Day/2019/Main_Page', 'User:Tark', 'User:Tark/Sandbox', 'User:Boba', 'User:Boba/Projects', 'User:FanCyy', 'User:Dan_greene', 'User:Boba/Sandbox', 'User:Ashe', 'Team_Fortress_Wiki:April_Fools\'_Day/2021/Main_Page', 'User:PhoneWave', 'User:Foxbite', 'User:Mediarch', 'User:Payn'],
 +
suffixJS: '/Page.js',
 +
suffixCSS: '/Page.css',
 +
init: function() {
 +
for(var i in pageScripts.pagesJS) {
 +
if(mw.config.get('wgPageName') == pageScripts.pagesJS[i]) {
 +
mw.loader.load(mw.config.get('wgScript') + '?title=' + encodeURIComponent(mw.config.get('wgPageName') + pageScripts.suffixJS) + '&ctype=text/javascript&action=raw');
 +
}
 +
}
 +
for(var i in pageScripts.pagesCSS) {
 +
if(mw.config.get('wgPageName') == pageScripts.pagesCSS[i]) {
 +
mw.loader.load(mw.config.get('wgScript') + '?title=' + encodeURIComponent(mw.config.get('wgPageName') + pageScripts.suffixCSS) + '&ctype=text/css&action=raw', 'text/css');
 +
}
 +
}
 +
}
 +
};
 +
$(pageScripts.init);
 +
 
 +
// Fancy diffs
 +
var fancyDiffs = {
 +
isBigDiff: false,
 +
isBigDiffThreshold: 72,
 +
toggle: function(element) {
 +
var expanded = element.hasClass('diff-expanded');
 +
var contents = element.parent().children('.diff-contents');
 +
if(expanded) { // Just collapse then
 +
element.removeClass('diff-expanded');
 +
if(fancyDiffs.isBigDiff) {
 +
contents.hide();
 +
} else {
 +
contents.slideUp('fast');
 +
}
 +
} else if(element.hasClass('diff-data-loaded')) { // Stuff is already loaded, expand
 +
element.addClass('diff-expanded');
 +
contents.slideDown('fast');
 +
} else if(!element.hasClass('diff-data-requested')) { // Stuff is not loaded
 +
element.addClass('diff-data-requested');
 +
var fileName = element.find('span').text().replace(/^\s+|\s+$/g);
 +
var patchName = element.closest('.diffname');
 +
var diffName = mw.config.get('wgPageName');
 +
if(patchName && patchName.length && patchName.attr('class')) {
 +
diffName = patchName.attr('class').substr(9);
 +
}
 +
$.get('/w/?title=Template:PatchDiff/' + encodeURIComponent(diffName.replace(/^Template:PatchDiff\//, '')) + '/' + encodeURIComponent(fileName) + '&action=raw', function(data) {
 +
contents.html(data);
 +
if(fancyDiffs.isBigDiff) {
 +
contents.show();
 +
} else {
 +
contents.slideDown('fast');
 +
}
 +
element.removeClass('diff-data-requested').addClass('diff-data-loaded').addClass('diff-expanded');
 +
});
 +
}
 +
 +
},
 +
init: function() {
 +
var diffText = $('.diff-name-text');
 +
if(diffText.length) {
 +
// Preload leetle gif
 +
$('body').append($('<img/>').attr('src', '/w/images/4/43/Patch_diff_loading.gif').css('display', 'none'));
 +
diffText.find('span').each(function() {
 +
$(this).text($(this).find('a').text().replace(/^\s+|\s+$/g));
 +
});
 +
diffText.click(function() {
 +
fancyDiffs.toggle($(this));
 +
return false;
 +
});
 +
fancyDiffs.isBigDiff = $('.diff-file').length > fancyDiffs.isBigDiffThreshold;
 +
}
 +
}
 +
};
 +
$(fancyDiffs.init);
 +
 
 +
// 3D/2D viewer
 +
$('#switch-to-3d').click(function() {
 +
$('.container-2d').hide();
 +
$('.viewer-3d, .viewer-3d-multi, .buttons-container-3d').show();
 +
});
 +
 
 +
$('#switch-to-2d').click(function() {
 +
$('.viewer-3d, .viewer-3d-multi, .buttons-container-3d').hide();
 +
$('.container-2d').show();
 +
});
 +
 
 +
// 3D model viewer
 +
var viewer3d = {
 +
dragging: null,
 +
draggingFrameX: 0,
 +
draggingFrameY: 0,
 +
viewers: [],
 +
frameThresholdX: 10,
 +
frameThresholdY: 128,
 +
realMod: function(x, y) {
 +
return ((x % y) + y) % y;
 +
},
 +
init: function() {
 +
$('.viewer-3d').each(viewer3d.bind);
 +
$(document).mouseup(viewer3d.release);
 +
$(document).mousemove(viewer3d.move);
 +
},
 +
bind: function() {
 +
var v = $(this);
 +
var num = viewer3d.viewers.length;
 +
var allModels = [];
 +
var modelID = 0;
 +
var viewerSize = 0;
 +
while(true) {
 +
var modelMap = v.find('.viewer-3d-map-' + modelID);
 +
var urlNode = v.find('.viewer-3d-url-' + modelID);
 +
if(!modelMap.length || !urlNode.length) break;
 +
var url = $('<div/>').html(urlNode.text()).text();
 +
var framesS = $('<div/>').html(modelMap.text()).text().replace(/^\s+|\s+$/g).split(/,/g);
 +
var frameMap = [];
 +
var heightMap = [];
 +
var leftCropMap = [];
 +
var totalW = parseInt(framesS[0]);
 +
var maxFrameW = parseInt(framesS[1]);
 +
var totalH = parseInt(framesS[2]);
 +
var verticalSteps = parseInt(framesS[3]);
 +
var midVertical = Math.floor(verticalSteps / 2);
 +
for(var f = 4; f < framesS.length; f += 3) {
 +
frameMap.push(parseInt(framesS[f]));
 +
heightMap.push(parseInt(framesS[f + 1]));
 +
leftCropMap.push(parseInt(framesS[f + 2]));
 +
}
 +
allModels.push({
 +
imageURL: url,
 +
map: frameMap,
 +
cropMap: leftCropMap,
 +
totalWidth: totalW,
 +
totalHeight: totalH,
 +
maxFrameWidth: maxFrameW,
 +
xStep: verticalSteps
 +
});
 +
viewerSize = Math.max(viewerSize, totalH, maxFrameW);
 +
modelID++;
 +
}
 +
if(!modelID) return;
 +
var overlayNode = $('<div class="viewer-3d-overlay"></div>');
 +
var frameN = v.find('.viewer-3d-frame');
 +
v.find('img').detach();
 +
var klasses = v.attr('class').split(/ /g);
 +
var startFrame = 0;
 +
for(var k in klasses) {
 +
if(klasses[k].substr(0, 11) == 'startframe-') {
 +
startFrame = Math.max(0, parseInt(klasses[k].substr(11)));
 +
}
 +
}
 +
var viewer = {
 +
node: v,
 +
frameX: startFrame,
 +
frameY: midVertical,
 +
models: allModels,
 +
currentModel: -1,
 +
frameNode: frameN,
 +
width: viewerSize,
 +
height: viewerSize,
 +
mouseX: 0,
 +
mouseY: 0,
 +
overlay: overlayNode
 +
};
 +
viewer3d.viewers.push(viewer);
 +
v.hover(viewer3d.hover, viewer3d.unhover).mousedown(viewer3d.drag).append(overlayNode).attr('data-id', num).css({
 +
width: viewer.width + 'px',
 +
height: viewer.height + 'px'
 +
});
 +
frameN.mousedown(viewer3d.drag).attr('data-id', num).css('height', viewer.height + 'px');
 +
viewer3d.changeVersion(viewer, 0);
 +
},
 +
getCurrentModel: function(v) {
 +
return v.models[v.currentModel];
 +
},
 +
changeVersion: function(v, version) {
 +
version = Math.max(0, Math.min(v.models.length - 1, version));
 +
if(v.currentModel == version) return;
 +
v.currentModel = version;
 +
v.frameNode.css('background', 'url(' + viewer3d.getCurrentModel(v).imageURL + ') top left no-repeat');
 +
viewer3d.display(v, v.frameX, v.frameY);
 +
},
 +
hover: function(e) {
 +
var v = viewer3d.getViewer(this);
 +
if(viewer3d.dragging != v) {
 +
v.overlay.animate({'opacity': '1'}, 'fast');
 +
}
 +
},
 +
unhover: function(e) {
 +
var v = viewer3d.getViewer(this);
 +
if(viewer3d.dragging != v) {
 +
v.overlay.animate({'opacity': '0.5'}, 'fast');
 +
}
 +
},
 +
drag: function(e) {
 +
var v = viewer3d.getViewer(this);
 +
v.mouseX = e.pageX;
 +
v.mouseY = e.pageY;
 +
viewer3d.dragging = v;
 +
draggingFrameX = v.frameX;
 +
draggingFrameY = v.frameY;
 +
return false;
 +
},
 +
release: function() {
 +
var v = viewer3d.dragging;
 +
viewer3d.dragging = null;
 +
if(v != null) {
 +
v.frameX = viewer3d.draggingFrameX;
 +
v.frameY = viewer3d.draggingFrameY;
 +
v.overlay.animate({'opacity': '0.5'}, 'fast');
 +
}
 +
viewer3d.draggingFrameX = 0;
 +
viewer3d.draggingFrameY = 0;
 +
},
 +
getViewer: function(node) {
 +
return viewer3d.viewers[parseInt($(node).attr('data-id'))];
 +
},
 +
display: function(v, frameX, frameY) {
 +
var model = viewer3d.getCurrentModel(v);
 +
var frameID = viewer3d.realMod(frameX * model.xStep + frameY, model.map.length);
 +
var frameOffset = model.map[frameID];
 +
var frameWidth = 0;
 +
if(frameID == model.map.length - 1) {
 +
frameWidth = model.totalWidth - frameOffset;
 +
} else {
 +
frameWidth = model.map[frameID + 1] - frameOffset;
 +
}
 +
v.frameNode.css({
 +
backgroundPosition: (-frameOffset - frameID) + 'px 0px',
 +
left: Math.round((v.width - model.maxFrameWidth) / 2.0 + model.cropMap[frameID]) + 'px',
 +
top: Math.round((v.height - model.totalHeight) / 2) + 'px',
 +
width: frameWidth + 'px',
 +
height: model.totalHeight + 'px'
 +
});
 +
},
 +
move: function(e) {
 +
if(viewer3d.dragging == null) {
 +
return;
 +
}
 +
var v = viewer3d.dragging;
 +
var model = viewer3d.getCurrentModel(v);
 +
var mouseDeltaX = e.pageX - v.mouseX;
 +
var mouseDeltaY = e.pageY - v.mouseY;
 +
var frameDeltaX = Math.round(mouseDeltaX / viewer3d.frameThresholdX);
 +
var frameDeltaY = -Math.round(mouseDeltaY / viewer3d.frameThresholdY);
 +
viewer3d.draggingFrameX = v.frameX + frameDeltaX;
 +
viewer3d.draggingFrameY = Math.max(0, Math.min(model.xStep - 1, v.frameY + frameDeltaY));
 +
viewer3d.display(v, viewer3d.draggingFrameX, viewer3d.draggingFrameY);
 +
}
 +
};
 +
$(viewer3d.init);
 +
var selector3d = {
 +
bind: function() {
 +
var viewer = viewer3d.getViewer($(this).find('.viewer-3d'));
 +
var keepGoing = true;
 +
var modelVariant = 0;
 +
var selector;
 +
while(keepGoing) {
 +
selector = $(this).find('.selector-' + modelVariant);
 +
if(selector.length) {
 +
selector.attr('data-variant', modelVariant).click(function() {
 +
viewer3d.changeVersion(viewer, parseInt($(this).attr('data-variant')));
 +
return false;
 +
});
 +
}
 +
modelVariant++;
 +
keepGoing = selector.length;
 +
}
 +
},
 +
init: function() {
 +
$('.viewer-3d-multi, .viewer-3d-container').each(selector3d.bind);
 +
}
 +
};
 +
$(selector3d.init);
 +
 
 +
// Code to get 3D viewer drag working on touch devices
 +
// Source: http://www.jquery4u.com/mobile/jquery-add-dragtouch-support-ipad/
 +
$.fn.addTouch = function(){
 +
    this.each(function(i,el){
 +
      $(el).bind('touchstart touchmove touchend touchcancel',function(){
 +
        //we pass the original event object because the jQuery event
 +
        //object is normalized to w3c specs and does not provide the TouchList
 +
        handleTouch(event);
 +
      });
 +
    });
 +
 
 +
    var handleTouch = function(event)
 +
    {
 +
      var touches = event.changedTouches,
 +
              first = touches[0],
 +
              type = '';
 +
 
 +
      switch(event.type)
 +
      {
 +
        case 'touchstart':
 +
          type = 'mousedown';
 +
          break;
 +
 
 +
        case 'touchmove':
 +
          type = 'mousemove';
 +
          event.preventDefault();
 +
          break;
 +
 
 +
        case 'touchend':
 +
          type = 'mouseup';
 +
          break;
 +
 
 +
        default:
 +
          return;
 +
      }
 +
 
 +
      var simulatedEvent = document.createEvent('MouseEvent');
 +
      simulatedEvent.initMouseEvent(type, true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY, false, false, false, false, 0/*left*/, null);
 +
      first.target.dispatchEvent(simulatedEvent);
 +
    };
 +
  };
 +
 
 +
$('.viewer-3d').addTouch();
 +
 
 +
// End 3D viewer touch device code
 +
 
 +
// Start weapon wear table tabs -----
 +
var WeaponWearTable = {
 +
tabSwitch: function($this,tab,weapons,weapon) {
 +
if (!$this.hasClass('current')) {
 +
var tabIndex = $this.index();
 +
$this.parent().find('.current').removeClass('current');
 +
$this.addClass('current');
 +
weapons.find('.current').removeClass('current');
 +
weapon.eq(tabIndex).addClass('current');
 +
}
 +
},
 +
init: function() {
 +
$('.weapon-wear-table').each(function(){
 +
var $this = $(this),
 +
tabs = $this.children('.tabs'),
 +
tab = tabs.children('li'),
 +
weapons = $this.children('.weapons'),
 +
weapon = weapons.children('li');
 +
tab.click(function(){
 +
WeaponWearTable.tabSwitch($(this),tab,weapons,weapon);
 +
});
 +
});
 +
}
 +
};
 +
$(WeaponWearTable.init);
 +
// End weapon wear table tabs -----
 +
 
 +
// Start Bilibili iframe support -----
 +
var Bilibili = {
 +
  init: function() {
 +
    var $videos = $('.bilibili-video');
 +
    $videos.each(function() {
 +
      var $this = $(this);
 +
      var aid = parseInt($this.data('vaid'));
 +
      var danmaku = parseInt($this.data('vdanmaku'));
 +
      var page = parseInt($this.data('vpage'));
 +
      var width = $this.data('vwidth');
 +
      var height = $this.data('vheight');
 +
      var iframeSrc = 'https://www.bilibili.com/blackboard/html5mobileplayer.html?aid=' + aid + '&high_quality=1&danmaku=' + danmaku + '&page=' + page + '&hideCoverInfo=1&hideDanmakuButton=1';
 +
      var iframe = '<iframe src="' + iframeSrc + '" width="' + width + '" height="' + height + '" frameborder="0" allowfullscreen="true"></iframe>';
 +
      $this.append(iframe);
 +
    });
 +
  }
 +
};
 +
$(Bilibili.init);
 +
// End Bilibili iframe support -----
 +
 
 +
// Start custom username highlighting -----
 +
var uGroupHighlight = {
 +
  init: function() {
 +
    if ($('.mw-userlink')[0]) {
 +
      var params = {
 +
        action: 'query',
 +
        list: 'allusers',
 +
        augroup: ['sysop', 'moderator', 'bot'],
 +
        auprop: 'groups',
 +
        aulimit: 100,
 +
        format: 'json'
 +
      };
 +
 
 +
      var api = new mw.Api();
 +
 
 +
      api.get(params).done(function(data) {
 +
        var uGroups = data.query.allusers, user;
 +
        for (user in uGroups) {
 +
          var name = uGroups[user].name;
 +
          var group = uGroups[user].groups;
 +
 
 +
          $('bdi').each(function() {
 +
            if ($(this).text().match('\\b' + name + '\\b')) {
 +
              $(this).closest('.mw-userlink').addClass(group.includes('bot') ? 'bot' : 'staff');
 +
            }
 +
          });
 +
        }
 +
      });
 +
    }
 +
  },
 +
};
 +
$(uGroupHighlight.init);
 +
// End custom username highlighting -----
 +
 
 +
// Start login icon randomizer -----
 +
var iconRandomizer = {
 +
    init: function() {
 +
        var classes = [
 +
            '/w/images/3/33/Login_Scout.png',
 +
            '/w/images/d/d8/Login_Soldier.png',
 +
            '/w/images/7/71/Login_Pyro.png',
 +
            '/w/images/5/53/Login_Demoman.png',
 +
            '/w/images/3/35/Login_Heavy.png',
 +
            '/w/images/a/ab/Login_Engineer.png',
 +
            '/w/images/d/d4/Login_Medic.png',
 +
            '/w/images/e/e4/Login_Sniper.png',
 +
            '/w/images/2/27/Login_Spy.png'
 +
        ];
 +
 
 +
        // pick a random class image out of nine choices
 +
        pickClass = classes[Math.floor(Math.random() * classes.length)];
 +
 
 +
        // ensure all relative elements are hit
 +
        var nodes = $('#pt-userpage, #pt-anonuserpage, #pt-login');
 +
        if (nodes.length) {
 +
            for (var i = 0; i < nodes.length; i++) {
 +
                nodes.css('background-image', 'url(' + pickClass + ')');
 +
            }
 +
        }
 +
    }
 +
};
 +
 
 +
$(iconRandomizer.init);
 +
// End login icon randomizer -----
 +
 
 +
// Start 'Audio player'
 +
var audioPlayer = {
 +
    currentAudio: null,
 +
 
 +
    init: function () {
 +
        var audioPauseImg = new Image();
 +
        var audioPlayImg = new Image();
 +
        audioPauseImg.src = '/w/images/d/d2/Pause_icon.png';
 +
        audioPlayImg.src = '/w/images/6/67/Play_icon.png';
 +
 
 +
        $('.tfwiki-audio-player').each(function () {
 +
            var audioPlayerElement = $(this);
 +
            var audioLink = audioPlayerElement.children('a');
 +
            var audioURL = audioLink.attr('href');
 +
            var audio = null;
 +
            var audioStatus = audioPlayerElement.find('.tfwiki-audio-player-action');
 +
 +
audioStatus.removeClass('inactive');
 +
 
 +
            audioPlayerElement.on('click', function (e) {
 +
                if (e.target !== audioStatus[0]) {
 +
                    return;
 +
                }
 +
 
 +
                e.preventDefault();
 +
 +
                if (!audio) {
 +
                    audio = new Audio(audioURL);
 +
                    audio.volume = 0.5;
 +
                    audio.addEventListener('ended', function () {
 +
                        audioStatus.text(audioStatus.data('text-play'));
 +
                        audioStatus.removeClass('playing');
 +
                    });
 +
                }
 +
 
 +
                if (audioPlayer.currentAudio && audioPlayer.currentAudio !== audio) {
 +
                    audioPlayer.currentAudio.pause();
 +
                    audioPlayer.currentAudio.currentTime = 0;
 +
                    audioPlayer.currentAudioStatus.text(audioPlayer.currentAudioStatus.data('text-play'));
 +
                    audioPlayer.currentAudioStatus.removeClass('playing');
 +
                }
 +
 
 +
                if (audio.paused) {
 +
                    audio.play();
 +
                    audioStatus.text(audioStatus.data('text-pause'));
 +
                    audioPlayer.currentAudio = audio;
 +
                    audioPlayer.currentAudioStatus = audioStatus;
 +
                    audioStatus.addClass('playing');
 +
                } else {
 +
                    audio.pause();
 +
                    audioStatus.text(audioStatus.data('text-resume'));
 +
                    audioPlayer.currentAudio = null;
 +
                    audioPlayer.currentAudioStatus = null;
 +
                    audioStatus.removeClass('playing');
 +
                }
 +
            });
 +
 
 +
            audioLink.on('click', function (e) {
 +
                e.preventDefault();
 +
                window.open(audioURL, '_blank');
 +
            });
 +
        });
 +
    }
 +
};
 +
 
 +
$(audioPlayer.init);
 +
// End 'Audio player'
 +
 
 +
/* Google Analytics */
 
   var _gaq = _gaq || [];
 
   var _gaq = _gaq || [];
 
   _gaq.push(['_setAccount', 'UA-18260470-1']);
 
   _gaq.push(['_setAccount', 'UA-18260470-1']);
Line 15: Line 1,481:
 
     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
 
     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
 
   })();
 
   })();
 +
/* GoSquared analytics */
 +
  var GoSquared = {};
 +
  GoSquared.acct = "GSN-106863-S";
 +
  (function(w){
 +
    function gs(){
 +
      w._gstc_lt = +new Date;
 +
      var d = document, g = d.createElement("script");
 +
      g.type = "text/javascript";
 +
      g.src = "//d1l6p2sc9645hc.cloudfront.net/tracker.js";
 +
      var s = d.getElementsByTagName("script")[0];
 +
      s.parentNode.insertBefore(g, s);
 +
    }
 +
    w.addEventListener ?
 +
      w.addEventListener("load", gs, false) :
 +
      w.attachEvent("onload", gs);
 +
  })(window);

Latest revision as of 03:59, 10 May 2024

// This is the non-compressed version of MediaWiki:Common.js

// External links open in new windows/tabs:
$('a.external').attr('target', '_blank');

 /** Collapsible tables *********************************************************
  *
  *  Description: Allows tables to be collapsed, showing only the header. See
  *               [[Wikipedia:NavFrame]].
  *  Maintainers: [[User:R. Koot]]
  */
 var hasClass = (function () {
    var reCache = {};
    return function (element, className) {
        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
    };
 })(); 

var autoCollapse = 2;
var collapseCaptionLang = {'ar': 'أخف', 'cs': 'sbalit', 'da': 'fold sammen', 'de': 'einklappen', 'es': 'contraer', 'fi': 'supista', 'fr': 'masquer', 'hu': 'becsuk', 'it': 'comprimi', 'ja': '折り畳む', 'ko': '접기', 'nl': 'samenvouwen', 'pl': 'zwiń', 'pt': 'ocultar', 'pt-br': 'ocultar', 'ro': 'restrânge', 'ru': 'свернуть', 'sv': 'dölj', 'tr': 'daralt', 'zh-hans': '折叠', 'zh-hant': '合併'};
var expandCaptionLang = {'ar': 'أظهر', 'cs': 'rozbalit', 'da': 'fold ud', 'de': 'ausklappen', 'es': 'expandir', 'fi': 'Laajenna', 'fr': 'afficher', 'hu': 'kinyit', 'it': 'espandi', 'ja': '展開する', 'ko': '펼치기', 'nl': 'uitvouwen', 'pl': 'rozwiń', 'pt': 'expandir', 'pt-br': 'expandir', 'ro': 'extinde', 'ru': 'развернуть', 'sv': 'visa', 'tr': 'genişlet', 'zh-hans': '展开', 'zh-hant': '展開'};
var collapseCaption = collapseCaptionLang[mw.config.get("wgPageName").split("/").pop()] || 'collapse';
var expandCaption = expandCaptionLang[mw.config.get("wgPageName").split("/").pop()] || 'expand';
 
window.collapseTable = function ( tableIndex ) {
    var Button = document.getElementById( 'collapseButton' + tableIndex );
    var Table = document.getElementById( 'collapsibleTable' + tableIndex );
 
    if ( !Table || !Button ) {
        return false;
    }
 
    var Rows = Table.rows;
    var i;
 
    if ( Button.firstChild.data === collapseCaption ) {
        for ( i = 1; i < Rows.length; i++ ) {
            Rows[i].style.display = 'none';
        }
        Button.firstChild.data = expandCaption;
    } else {
        for ( i = 1; i < Rows.length; i++ ) {
            Rows[i].style.display = Rows[0].style.display;
        }
        Button.firstChild.data = collapseCaption;
    }
};
 
function createCollapseButtons() {
    var tableIndex = 0;
    var NavigationBoxes = {};
    var Tables = document.getElementsByTagName( 'table' );
    var i;
 
    function handleButtonLink( index, e ) {
        window.collapseTable( index );
        e.preventDefault();
    }
 
    for ( i = 0; i < Tables.length; i++ ) {
        if ( $( Tables[i] ).hasClass( 'collapsible' ) ) {
 
            /* only add button and increment count if there is a header row to work with */
            var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];
            if ( !HeaderRow ) continue;
            var Header = HeaderRow.getElementsByTagName( 'th' )[0];
            if ( !Header ) continue;
 
            NavigationBoxes[ tableIndex ] = Tables[i];
            Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex );
 
            var Button     = document.createElement( 'span' );
            var ButtonLink = document.createElement( 'a' );
            var ButtonText = document.createTextNode( collapseCaption );
 
            Button.className = 'collapseButton';  /* Styles are declared in Common.css */
 
            ButtonLink.style.color = Header.style.color;
            ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );
            ButtonLink.setAttribute( 'href', '#' );
            $( ButtonLink ).on( 'click', $.proxy( handleButtonLink, ButtonLink, tableIndex ) );
            ButtonLink.appendChild( ButtonText );
 
            Button.appendChild( document.createTextNode( '[' ) );
            Button.appendChild( ButtonLink );
            Button.appendChild( document.createTextNode( ']' ) );
 
            Header.insertBefore( Button, Header.firstChild );
            tableIndex++;
        }
    }
 
    for ( i = 0;  i < tableIndex; i++ ) {
        if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) || ( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) ) ) {
            window.collapseTable( i );
        } 
        else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {
            var element = NavigationBoxes[i];
            while ((element = element.parentNode)) {
                if ( $( element ).hasClass( 'outercollapse' ) ) {
                    window.collapseTable ( i );
                    break;
                }
            }
        }
    }
}
 
$( createCollapseButtons );

/** Dynamic Navigation Bars (experimental) *************************************
 *
 *  Description: See [[Wikipedia:NavFrame]].
 *  Maintainers: UNMAINTAINED
 */

// set up the words in your language
var NavigationBarHide = '[' + collapseCaption + ']';
var NavigationBarShow = '[' + expandCaption + ']';

// shows and hides content and picture (if available) of navigation bars
// Parameters:
//     indexNavigationBar: the index of navigation bar to be toggled
function toggleNavigationBar(indexNavigationBar){
    var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
    var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);

    if (!NavFrame || !NavToggle) {
        return false;
    }

    // if shown now
    if (NavToggle.firstChild.data == NavigationBarHide) {
        for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
            if (hasClass(NavChild, 'NavContent') || hasClass(NavChild, 'NavPic')) {
                NavChild.style.display = 'none';
            }
        }
    NavToggle.firstChild.data = NavigationBarShow;

    // if hidden now
    } else if (NavToggle.firstChild.data == NavigationBarShow) {
        for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
            if (hasClass(NavChild, 'NavContent') || hasClass(NavChild, 'NavPic')) {
                NavChild.style.display = 'block';
            }
        }
        NavToggle.firstChild.data = NavigationBarHide;
    }
}

// adds show/hide-button to navigation bars
function createNavigationBarToggleButton(){
    var indexNavigationBar = 0;
    // iterate over all < div >-elements 
    var divs = document.getElementsByTagName("div");
    for (var i = 0; NavFrame = divs[i]; i++) {
        // if found a navigation bar
        if (hasClass(NavFrame, "NavFrame")) {

            indexNavigationBar++;
            var NavToggle = document.createElement("a");
            NavToggle.className = 'NavToggle';
            NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
            NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');

            var isCollapsed = hasClass( NavFrame, "collapsed" );
            /*
             * Check if any children are already hidden.  This loop is here for backwards compatibility:
             * the old way of making NavFrames start out collapsed was to manually add style="display:none"
             * to all the NavPic/NavContent elements.  Since this was bad for accessibility (no way to make
             * the content visible without JavaScript support), the new recommended way is to add the class
             * "collapsed" to the NavFrame itself, just like with collapsible tables.
             */
            for (var NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling) {
                if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
                    if ( NavChild.style.display == 'none' ) {
                        isCollapsed = true;
                    }
                }
            }
            if (isCollapsed) {
                for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
                    if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
                        NavChild.style.display = 'none';
                    }
                }
            }
            var NavToggleText = document.createTextNode(isCollapsed ? NavigationBarShow : NavigationBarHide);
            NavToggle.appendChild(NavToggleText);

            // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
            for(var j=0; j < NavFrame.childNodes.length; j++) {
                if (hasClass(NavFrame.childNodes[j], "NavHead")) {
                    NavToggle.style.color = NavFrame.childNodes[j].style.color;
                    NavFrame.childNodes[j].appendChild(NavToggle);
                }
            }
            NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
        }
    }
}

 $( createNavigationBarToggleButton );

//END Collapsible tables *********************************************************

// PootTabs by User:WindPower~
// It puts tabs on pages.
var pootTabsHere = {
    animationsEnabled: $.support.opacity,
	getTab:function(poot, index) {
		return $(poot.children('.poot-tabs').children('ul').children('li')[parseInt(index)]);
	},
	changeTab:function(poot, index, duration, force) {
		if(index == parseInt(poot.attr('pootSelected')) && !force && duration) return;
		if(!pootTabsHere.animationsEnabled) {
			duration = 0;
		}
		poot.attr('pootSelected', index.toString());
		var babies = poot.children('.poot-tabs-content').children();
		babies.each(function() {
			$(this).fadeOut(duration, function(){
				$(this).removeClass('poot-tabs-selected');
			});
		});
		$(babies[index]).each(function() {
			$(this).fadeIn(duration, function(){
				$(this).addClass('poot-tabs-selected');
			});
		});
		var cowtabs = poot.children('.poot-tabs').children('ul').children('li');
		cowtabs.removeClass('poot-tabs-selected');
		$(cowtabs[index]).addClass('poot-tabs-selected');
		pootTabsHere.updatePoot(poot, $(babies[index]).height());
	},
	updatePoot:function(poot, babysize) {
		if(poot.hasClass('poot-tabs-notitle')) {
			poot.find('.poot-tabs-titletext').html(pootTabsHere.getTab(poot, poot.attr('pootSelected')).html());
		} else {
			poot.find('.poot-tabs-titletext').html(poot.attr('originalTitle') + ' &mdash; ' + pootTabsHere.getTab(poot, poot.attr('pootSelected')).html());
		}
		if(poot.has('.poot-tabs-edittabs') && poot.has('.poot-tabs-navbar')) {
			try {
				poot.find('.poot-tabs-navbar').html($(poot.children('.poot-tabs-edittabs').children('span')[parseInt(poot.attr('pootSelected'))]).html());
			} catch(e) {}
		}
		var bestHeight = Math.max(poot.children('.poot-tabs-content').height(), Math.max(poot.children('.poot-tabs').height(), babysize)).toString() + 'px';
		poot.children('.poot-tabs-content').css('height', bestHeight);
		if(poot.attr('vertical')) {
			poot.children('.poot-tabs').css('height', bestHeight);
		}
	},
	toggleCollapse:function(poot) {
		var pootLinkText = poot.children('.poot-tabs-showhide').text().split(';');
		var duration = pootTabsHere.animationsEnabled ? parseInt(poot.attr('pootslideduration')) : 0;
		if(poot.attr('pootcollapse') != 'true') {
			poot.attr('pootcollapse', 'true');
			poot.find('.poot-tabs-hidelink a').text(pootLinkText[0]);
			poot.children('.poot-tabs, .poot-tabs-content').slideUp(duration);
		}
		else {
			poot.attr('pootcollapse', '');
			poot.find('.poot-tabs-hidelink a').text(pootLinkText[1]);
			poot.children('.poot-tabs, .poot-tabs-content').slideDown(duration);
		}
	},
	delayHeight:function(poot, selected) {
		setTimeout(function() {
			poot.attr('pootselected', selected.toString());
			pootTabsHere.changeTab(poot, selected, 0, true);
			if(poot.hasClass('poot-tabs-collapsed')) {
				pootTabsHere.toggleCollapse(poot);
			}
		}, 100);
	},
	poot:function() {
		var dis = $(this);
		dis.removeClass('poot-tabs-nojs'); // If this thing runs, JS is on
		var ind = 0;
		dis.attr('originalTitle', dis.find('.poot-tabs-titletext').html());
		var selected = /poot-tabs-selected-(\d+)/i.exec(dis.attr('class'));
		if(selected) {
			pootTabsHere.delayHeight(dis, parseInt(selected[1])-1);
		}
		else {
			pootTabsHere.delayHeight(dis, 0);
		}
		var duration = dis.hasClass('poot-tabs-noanimations') ? 0 : 200;
		dis.attr('pootslideduration', dis.hasClass('poot-tabs-noanimations') ? '0' : '75');
		dis.children('.poot-tabs').children('ul').children('li').each(function(){
			var thisInd = ind;
			$(this).click(function(){
				pootTabsHere.changeTab(dis, thisInd, duration, false);
				$(this).blur();
				$(this).find('*').blur();
				return false;
			});
			ind++;
		});
		var isVertical = dis.hasClass('poot-tabs-vertical');
		dis.attr('pootvertical', isVertical ? 'true' : '');
		if(isVertical) {
			var teenie = dis.children('.poot-tabs').width().toString() + 'px';
			dis.children('.poot-tabs-content').css('margin-left', teenie);
		}
		dis.attr('pootcollapse', ''); // False
		dis.find('.poot-tabs-hidelink a').click(function(){
			pootTabsHere.toggleCollapse(dis);
			return false;
		});
	},
	init:function() {
		$('.poot-tabs-container').each(pootTabsHere.poot);
	}
};
$(pootTabsHere.init);

// Language support fixes
var langFixes = {
	init: function() {
		// Supported list of languages (not including the default one):
		var langList = ['ar', 'cs', 'da', 'de', 'es', 'fi', 'fr', 'hu', 'it', 'ja', 'ko', 'nl', 'no', 'pl', 'pt', 'pt-br', 'ro', 'ru', 'sv', 'tr', 'zh-hans', 'zh-hant'];
		// Assumed language if the page is in none of the languages above:
		var defaultLang = 'en';
		var lang = defaultLang;
		for(var i in langList) {
			if(mw.config.get('wgPageName').substr(mw.config.get('wgPageName').length - 1 - langList[i].length).toLowerCase() == '/' + langList[i].toLowerCase()) {
				lang = langList[i];
				break;
			}
		}
		$('body').addClass('lang-' + lang);
	}
};
$(langFixes.init);

// Custom tooltip component. See Template:Tooltip
var wikiTooltip = {
    init: function() {
        var $tooltips = $('.wiki-tooltip .wiki-tooltip-content');
        if ($tooltips[0]) {
            $tooltips.each(function() {
                var $this = $(this);
                function handler() {
                    // Check for links and handle them on handheld devices
                    if (!!$this.closest('a').attr('href')) {
                        $this.closest('a').removeAttr('title');

                        widthRect <= 1000 ? wikiTooltip.hasLink($this) : wikiTooltip.removeAnchor($this);
                    }
                    
                    // Prevent tooltips from overflowing the viewport
                    var bounding = $this[0].getBoundingClientRect();
                    edgeRect = {
                        left: Math.floor(($this.width() + bounding.left + 10)),
                        right: Math.floor(($this.width() + bounding.right + 10))
                    };

                    widthRect = $(window).innerWidth();
                    if (edgeRect.left >= (widthRect || document.documentElement.clientWidth)) {
                        $this.css('left', '');
                        $this.css('right', '50%');
                    } else if (edgeRect.right <= (widthRect || document.documentElement.clientWidth)) {
                        $this.css('right', '');
                        $this.css('left', '50%');
                    }
                }
                $(handler);
                setTimeout(function() {
                    $(window).on('resize', handler);
                }, 250);
            });
        }
    },
    hasLink: function(tooltip) {
        if (tooltip.find('a').length < 1) {
            var $a = $('<a>');
            var url = tooltip.closest('a');
            var href = url.attr('href');

            $a.attr('href', href);
            url.attr('href', 'javascript:void(0);');
            tooltip.append($a);
        }
    },
    removeAnchor: function(tooltip) {
        var url = tooltip.closest('a');
        var href = url.attr('href');

        innerLink = tooltip.find('a').attr('href');
        if (innerLink) {
            href = innerLink;
            url.attr('href', href);
            tooltip.find('a').remove();
        } else {
            return;
        }
    }
};
$(wikiTooltip.init);

// Logged-in body class injection
var loggedinBodyClass = {
	init: function() {
		$('body').addClass(mw.config.get('wgUserName') == null ? 'not-logged-in' : 'logged-in');
	}
};
$(loggedinBodyClass.init);

// Resize YouTube embed, turn HD on, etc, by User:WindPower
var youtubeHelper = {
	chromeSize: 25, // This is the height (in pixels) of the chrome of YouTube's embedded video player. Update this whenever they release a new embedded video player
	maxWidth: 0.85, // Maximum fraction of the available width that the video may take
	infoboxes: ['.infobox', '.testchamber'], // Selectors of infobox-style boxes that should be deducted from the page's available width
	ratioR: /ratio-(\d+)x(\d+)/i,
	widthsR: /widths((?:\D+\d+)+)/i,
	setSize:function() {
		var widths = youtubeHelper.widthsR.exec($(this).attr('class'));
		if(widths != null) {
			widths = widths[1].substr(1).split(/\D+/g);
			var availableWidth = $('#bodyContent').width();
			for(var i in youtubeHelper.infoboxes) {
				if($(youtubeHelper.infoboxes[i]).length) {
					availableWidth -= $(youtubeHelper.infoboxes[i]).width();
				}
			}
			availableWidth *= youtubeHelper.maxWidth;
			var intWidths = [];
			for(var w = 0; w < widths.length; w++) {
				intWidths[w] = parseInt(widths[w]);
			}
			intWidths.sort(function(a, b){return b - a;});
			for(var w = 0; w < intWidths.length; w++) {
				if(intWidths[w] <= availableWidth || w == intWidths.length-1) {
					youtubeHelper.setWidth(this, intWidths[w]);
					break;
				}
			}
		}
		else {
			youtubeHelper.setWidth(this, parseFloat(obj.attr('width')));
		}
	},
	setUrl:function() {
		var obj = $(this).children('object');
		if(!obj.length) return;
		obj.append($('<param name="allowscriptaccess" value="true"></param>'));
		obj.append($('<param name="allowfullscreen" value="true"></param>'));
		var titleParts = mw.config.get('wgPageName').split(/\//g);
		var lang = 'en';
		if(titleParts.length == 2 && !mw.config.get('wgCanonicalSpecialPageName')) {
			lang = titleParts[titleParts.length-1];
		}
		var playerUrl = obj.children('param[name="movie"]').attr('value') + '&version=2&fs=1&theme=dark&color=white' + ($(this).hasClass('hd-on') ? '&hd=1' : '') + '&cc_load_policy=1&modestbranding=1&hl=' + lang + '&cc_lang_pref=' + lang;
		obj.children('param[name="movie"]').attr('value', playerUrl);
		obj.children('embed').attr('src', playerUrl).attr('allowscriptaccess', 'always').attr('allowfullscreen', 'true');
		var resultHtml = $(this).html();
		$(this).html('').html(resultHtml);
	},
	setWidth:function(youtube, width) {
		var obj = $(youtube).children('object');
		if(!obj) return;
		if($(youtube).hasClass('youtube-audio')) {
			obj.attr('width', width).attr('height', youtubeHelper.chromeSize); // Set <object> height
			obj.children('embed').attr('width', width).attr('height', youtubeHelper.chromeSize); // Set <embed> height
		}
		else {
			var ratio = youtubeHelper.ratioR.exec($(youtube).attr('class'));
			if(ratio != null) {
				ratio = parseFloat(ratio[1])/parseFloat(ratio[2]);
				var newHeight = Math.round(width / ratio + youtubeHelper.chromeSize).toString();
				obj.attr('width', width).attr('height', newHeight); // Set <object> height
				obj.children('embed').attr('width', width).attr('height', newHeight); // Set <embed> height
			}
		}
	},
	resizeTimer:null,
	resize:function() {
		if(youtubeHelper.resizeTimer != null) {
			clearTimeout(youtubeHelper.resizeTimer);
		}
		youtubeHelper.resizeTimer = setTimeout(youtubeHelper.onResize, 100);
	},
	onResize:function() {
		$('.youtubebox').each(youtubeHelper.setSize);
	},
	init:function() {
		$('.youtubebox').each(youtubeHelper.setUrl);
		$(window).resize(youtubeHelper.resize);
		youtubeHelper.onResize();
	}
};
$(youtubeHelper.init);

// Edittools loader copied from http://en.wikipedia.org/wiki/MediaWiki:Common.js/edit.js?oldid=407371785
// Only slightly modified by seb26

/** 
 *  Edittools javascript loader ************************************************
 *
 *  Description: Pulls in [[MediaWiki:Edittools.js]]. Includes a cache-bypassing
 *  version number in the URL in order to allow any changes to the edittools to
 *  be rapidly deployed to users.
 *
 *  Note that, by default, this function does nothing unless the element with
 *  the ID "editpage-specialchars" (which contains the old edittools code in
 *  [[MediaWiki:Edittools]], and will be retained as a placeholder in the new
 *  implementation) has a class named "edittools-version-NNN", where NNN is a
 *  number.  If the class name has "test" before the number, the code will only
 *  run for users who have set "window.testJsEdittools = true" in their user JS.
 *  The "test" should be retained in the class name until the new edittools
 *  implementation is ready and fully tested, and until at least 30 days have
 *  passed since this loader stub was added (which will be in 27 June 2008).
 *
 *  For compatibility with Alex Smotrov's original implementation, on which this
 *  code is loosely based (see [[mw:User talk:Alex Smotrov/edittools.js]]), this
 *  loader can also be disabled by setting "window.noDefaultEdittools = true".
 *
 *  Maintainers: [[User:Ilmari Karonen]]
 */

if (['edit', 'submit'].indexOf(mw.config.get('wgAction')) !== -1 || mw.config.get('wgPageName') == "Special:Upload") //scripts specific to editing pages
{
 
  // Prevent the static edittools from flashing before the compact edittools below is loaded.
  mw.util.addCSS('div.edittools-text { display:none; }');
 
  $(function () {
    // needs to be deferred until the DOM has fully loaded
    var placeholder = document.getElementById("editpage-specialchars");
    if (!placeholder || window.noDefaultEdittools) {
      //Show the static edittools again for users with "window.noDefaultEdittools=true".
      mw.util.addCSS('div.edittools-text { display:block; }');
      return;
    }
    var match = /(?:^| )edittools-version-(\d+)(?: |$)/.exec(placeholder.className);
 
    // set window.testJsEdittools = true to enable testing before full deployment
    if (!match && window.testJsEdittools)
        match = /(?:^| )edittools-version-(test\d+)(?: |$)/.exec(placeholder.className);
 
    if (!match) return;
    var url = mw.config.get('wgScript') + '?title=MediaWiki:Edittools.js&action=raw&ctype=text/javascript&nocache=' + match[1];
    mw.loader.load(url);
  });
}

/********* MediaWiki:Valve.js *********/
function talkpageplus()
{
    var talkpagelink = document.getElementById('ca-talk');
    if (talkpagelink && talkpagelink.className == 'new')
    {
        talkpagelink.firstChild.href += '&section=new';
    }
}
$(talkpageplus);

// Konami code easter egg by WindPower, modified by Wookipan
// Constants:
	var spaiConstants = {};
	// Editable constants:
		// General info:
			spaiConstants.spaiEnabled = true;
			spaiConstants.spaiImage = '/w/images/7/73/Team_Fortress_Wiki_Egg_Spy.png';
			spaiConstants.spaiHeight = 196;
			spaiConstants.sapperClass = '--sapped';
			spaiConstants.spaiSappingMahWikiWav = '/w/images/4/4a/Team_Fortress_Wiki_Egg.wav';
			spaiConstants.timeStep = 40; // In milliseconds; 40 ms => 25 fps
		// Animation timing (all times in milliseconds):
			spaiConstants.anim_spaiFallDown = 2000; // Time for Spy to fall down
			spaiConstants.anim_spaiWait = 900; // Time Spy waits before going back up
			spaiConstants.anim_spaiBackUp = 2000; // Time for Spy to go back up
			spaiConstants.anim_sapperDestroyed = 2250; // Time until Sapper gets destroyed
	// End editable constants
	spaiConstants.theBody = function(){return document.getElementById('content');};
	spaiConstants.preloadedImages = [];
	spaiConstants.preloadingImages = [];
	spaiConstants.preloadingRefs = {};
	spaiConstants.toPreloadImage = spaiConstants.spaiImage;
	spaiConstants.self = null;
	spaiConstants.loadedSound = false;
	spaiConstants.loadedImages = false;
	spaiConstants.fired = false;
// End constants

if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function (obj, fromIndex) {
    if (fromIndex == null) {
        fromIndex = 0;
    } else if (fromIndex < 0) {
        fromIndex = Math.max(0, this.length + fromIndex);
    }
    for (var i = fromIndex, j = this.length; i < j; i++) {
        if (this[i] === obj)
            return i;
    }
    return -1;
  };
}

var spaiSappinMahWiki = {
	constants: spaiConstants,
	createImgDiv:function(image) {
		var self = spaiConstants.self;
		var div = document.createElement('div');
		var img = document.createElement('img');
		img.src = image;
		div.appendChild(img);
		setTimeout(function(){spaiConstants.theBody().appendChild(div);}, 1);
		return {
			'div': div,
			'img': img
		};
	},
	imagesLoaded:function() {
		spaiConstants.loadedImages = true;
		if(spaiConstants.loadedSound) {
			spaiConstants.self.spySappingMahWiki();
		}
	},
	soundLoaded:function() {
		spaiConstants.loadedSound = true;
		if(spaiConstants.loadedImages) {
			spaiConstants.self.spySappingMahWiki();
		}
	},
	preloadSound:function(sound, callback) {
		var self = spaiConstants.self;
		try {
			var audio = document.createElement('audio');
			audio.setAttribute('src', sound);
			audio.setAttribute('style', 'display: none;');
			audio.setAttribute('preload', 'true');
			spaiConstants.theBody().appendChild(audio);
			audio.addEventListener('canplaythrough', callback, false);
		}
		catch(e) {}
		setTimeout(callback, 1000); // Fallback
	},
	preloadImage:function(image) {
		var self = spaiConstants.self;
		if(spaiConstants.preloadingImages.indexOf(image) == -1) {
			spaiConstants.preloadingImages[spaiConstants.preloadingImages.length] = image;
			var nodes = self.createImgDiv(image);
			spaiConstants.preloadingRefs[image] = nodes['img'];
			nodes['div'].setAttribute('style', 'visibility: hidden; height: 0px; width: 0px; overflow: hidden; z-index: -10000;');
		}
		if(spaiConstants.preloadingRefs[image].width) {
			spaiConstants.preloadedImages[spaiConstants.preloadedImages.length] = image;
		}
		else
		{
			setTimeout(function(){self.preloadImage(image);}, spaiConstants.timeStep);
		}
	},
	preloadImages:function(callback) {
		var self = spaiConstants.self;
		var allPreloaded = true;
		for(var i in spaiConstants.toPreloadImages) {
			if(spaiConstants.preloadedImages.indexOf(spaiConstants.toPreloadImages[i]) == -1) {
				allPreloaded = false;
			}
			if(spaiConstants.preloadingImages.indexOf(spaiConstants.toPreloadImages[i]) == -1) {
				self.preloadImage(spaiConstants.toPreloadImages[i]);
			}
		}
		if(allPreloaded) {
			callback();
		} else {
			setTimeout(function(){self.preloadImages(callback);}, spaiConstants.timeStep);
		}
	},
	destroyNode:function(node) {
		try {
			node.parentNode.removeChild(node);
		} catch(e) {
			// Ze goggles, zey do nothin
		}
	},
	smoothInOut:function(progress) {
		return (Math.sin((progress-.5)*Math.PI)+1)/2;
	},
	inAnimation:function(func, progressTime, totalTime, callback, easing) {
		var self = spaiConstants.self;
		func(easing(progressTime / totalTime));
		if(progressTime >= totalTime) {
			callback();
		} else {
			setTimeout(function(){self.inAnimation(func, progressTime + spaiConstants.timeStep, totalTime, callback, easing);}, spaiConstants.timeStep);
		}
	},
	animate:function(func, totalTime, callback, easing) {
		var self = spaiConstants.self;
		return self.inAnimation(func, 0.0, totalTime, callback, easing);
	},
	playSound:function(sound) {
		var self = spaiConstants.self;
		try {
			var audio = document.createElement('audio');
			audio.setAttribute('src', sound);
			audio.setAttribute('style', 'display: none;');
			audio.setAttribute('autoplay', 'true');
			spaiConstants.theBody().appendChild(audio);
		}
		catch(e) {}
	},
	spyAnimationFinished:function(nodes) {
		var self = spaiConstants.self;
		for(var node in nodes) {
			self.destroyNode(nodes[node]);
		}
		spaiConstants.fired = false;
	},
	spySappingMahWiki:function() {
		var self = spaiConstants.self;
		if(spaiConstants.fired) return;
		spaiConstants.fired = true;
		var spai = document.createElement('a');
		spai.setAttribute('href', '/');
		spai.setAttribute('style', 'display:block; position: absolute; top: 0px; left: 0px; width: 160px; height: 200px; border: 0px; background: url('+spaiConstants.spaiImage+') no-repeat 0px -50000px; z-index: 10000;');
		spaiConstants.theBody().appendChild(spai);
		var logoPortlet = document.getElementById('p-logo');
		var changeHeight = function(progress) {
			progress = parseInt(progress * spaiConstants.spaiHeight);
			spai.style.backgroundPosition = '0px ' + (-spaiConstants.spaiHeight + progress).toString() + 'px';
		};
		self.animate(changeHeight, spaiConstants.anim_spaiFallDown, function(){
			self.playSound(spaiConstants.spaiSappingMahWikiWav);
			setTimeout(function(){
				logoPortlet.classList.add('wiki-logo' + spaiConstants.sapperClass);
				self.animate(function(progress){changeHeight(1.0-progress);}, spaiConstants.anim_spaiBackUp, function(){
					setTimeout(function(){
						logoPortlet.removeAttribute('class');
						self.spyAnimationFinished([spai]);
					}, spaiConstants.anim_sapperDestroyed);
				}, self.smoothInOut);
			}, spaiConstants.anim_spaiWait);
		}, self.smoothInOut);
	},
	hitItDoc:function() {
		var self = spaiConstants.self;
		self.preloadImages(self.imagesLoaded);
		self.preloadSound(spaiConstants.spaiSappingMahWikiWav, self.soundLoaded);
	},
	initKonami: function () {
		var self = spaiConstants.self;
		/*
			 * Konami-JS ~
			 * :: Now with support for touch events and multiple instances for
			 * :: those situations that call for multiple easter eggs!
			 * Code: https://github.com/georgemandis/konami-js
			 * Copyright (c) 2009 George Mandis (https://george.mand.is)
			 * Version: 1.6.3 (11/11/2021)
			 * Licensed under the MIT License (http://opensource.org/licenses/MIT)
			 * Tested in: Safari 4+, Google Chrome 4+, Firefox 3+, IE7+, Mobile Safari 2.2.1+ and Android
		*/
		var Konami = function (callback) {
			var konami = {
				addEvent: function (obj, type, fn, ref_obj) {
					if (obj.addEventListener)
						obj.addEventListener(type, fn, false);
					else if (obj.attachEvent) {
						// IE
						obj["e" + type + fn] = fn;
						obj[type + fn] = function () {
							obj["e" + type + fn](window.event, ref_obj);
						}
						obj.attachEvent("on" + type, obj[type + fn]);
					}
				},
				removeEvent: function (obj, eventName, eventCallback) {
					if (obj.removeEventListener) {
						obj.removeEventListener(eventName, eventCallback);
					} else if (obj.attachEvent) {
						obj.detachEvent(eventName);
					}
				},
				input: "",
				pattern: "38384040373937396665",
				keydownHandler: function (e, ref_obj) {
					if (ref_obj) {
						konami = ref_obj;
					} // IE
					konami.input += e ? e.keyCode : event.keyCode;
					if (konami.input.length > konami.pattern.length) {
						konami.input = konami.input.substr((konami.input.length - konami.pattern.length));
					}
					if (konami.input === konami.pattern) {
						konami.code(konami._currentLink);
						konami.input = '';
						e.preventDefault();
						return false;
					}
				},
				load: function (link) {
					this._currentLink = link;
					this.addEvent(document, "keydown", this.keydownHandler, this);
					this.iphone.load(link);
				},
				unload: function () {
					this.removeEvent(document, 'keydown', this.keydownHandler);
					this.iphone.unload();
				},
				code: function (link) {
					window.location = link
				},
				iphone: {
					start_x: 0,
					start_y: 0,
					stop_x: 0,
					stop_y: 0,
					tap: false,
					capture: false,
					orig_keys: "",
					keys: ["UP", "UP", "DOWN", "DOWN", "LEFT", "RIGHT", "LEFT", "RIGHT", "TAP", "TAP"],
					input: [],
					code: function (link) {
						konami.code(link);
					},
					touchmoveHandler: function (e) {
						if (e.touches.length === 1 && konami.iphone.capture === true) {
							var touch = e.touches[0];
							konami.iphone.stop_x = touch.pageX;
							konami.iphone.stop_y = touch.pageY;
							konami.iphone.tap = false;
							konami.iphone.capture = false;
							konami.iphone.check_direction();
						}
					},
					touchendHandler: function () {
						konami.iphone.input.push(konami.iphone.check_direction());

						if (konami.iphone.input.length > konami.iphone.keys.length) konami.iphone.input.shift();

						if (konami.iphone.input.length === konami.iphone.keys.length) {
							var match = true;
							for (var i = 0; i < konami.iphone.keys.length; i++) {
								if (konami.iphone.input[i] !== konami.iphone.keys[i]) {
									match = false;
								}
							}
							if (match) {
								konami.iphone.code(konami._currentLink);
							}
						}
					},
					touchstartHandler: function (e) {
						konami.iphone.start_x = e.changedTouches[0].pageX;
						konami.iphone.start_y = e.changedTouches[0].pageY;
						konami.iphone.tap = true;
						konami.iphone.capture = true;
					},
					load: function (link) {
						this.orig_keys = this.keys;
						konami.addEvent(document, "touchmove", this.touchmoveHandler);
						konami.addEvent(document, "touchend", this.touchendHandler, false);
						konami.addEvent(document, "touchstart", this.touchstartHandler);
					},
					unload: function () {
						konami.removeEvent(document, 'touchmove', this.touchmoveHandler);
						konami.removeEvent(document, 'touchend', this.touchendHandler);
						konami.removeEvent(document, 'touchstart', this.touchstartHandler);
					},
					check_direction: function () {
						x_magnitude = Math.abs(this.start_x - this.stop_x);
						y_magnitude = Math.abs(this.start_y - this.stop_y);
						x = ((this.start_x - this.stop_x) < 0) ? "RIGHT" : "LEFT";
						y = ((this.start_y - this.stop_y) < 0) ? "DOWN" : "UP";
						result = (x_magnitude > y_magnitude) ? x : y;
						result = (this.tap === true) ? "TAP" : result;
						return result;
					}
				}
			}

			typeof callback === "string" && konami.load(callback);
			if (typeof callback === "function") {
				konami.code = callback;
				konami.load();
			}

			return konami;
		};
		// End of Konami-JS
		var konami = new Konami();
		konami.code = function() {
			if (spaiConstants.spaiEnabled) {
				self.hitItDoc.apply(self);
			}
			
			document.dispatchEvent(new CustomEvent('konami:fire'));
		};
		konami.load();
	}
};
spaiConstants.self = spaiSappinMahWiki;
$(spaiSappinMahWiki.initKonami);

// Dynamic background by WindPower
// WindPower is secksy and makes this wiki awesome with his very breath. (- Smashman)
var dynamicBg = {
	categories: {
		// Format:
		// 'CategoryName': 'URL of background image',  ---OR--- 'title-PageTitle': 'URL of background image',
		// Categories don't have to be class names, they can be things like "Weapons", "Featured articles", "Maps", "Help", etc.
		'Scout': '/w/images/e/ea/Background_Scout_vector.png',
		'Soldier': '/w/images/5/54/Background_Soldier_vector.png',
		'Pyro': '/w/images/e/ed/Background_Pyro_vector.png',
                'Demoman': '/w/images/5/59/Background_Demoman_vector.png',
                'Engineer': '/w/images/f/f7/Background_Engineer_vector.png',
                'Heavy': '/w/images/0/03/Background_Heavy_vector.png',
                'Medic': '/w/images/2/24/Background_Medic_vector.png',
                'Sniper': '/w/images/e/ed/Background_Sniper_vector.png',
                'Spy': '/w/images/b/b9/Background_Spy_vector.png'
		// (No comma at the end of the last line)
	},
	getCategories:function() {
		var catlinksnode = document.getElementById('catlinks');
		if(!catlinksnode) return [];
		var catlinks = document.getElementById('catlinks').getElementsByTagName('a');
		var cats = [];
		var l;
		for(var i = 0; i < catlinks.length; i++) {
			l = catlinks[i].getAttribute('title');
			if(l.match(/^Category:/i, '')) {
				cats[cats.length] = l.substr(9).replace(/\/[^/]+$/, '');
			}
		}
		return cats;
	},
	inArray:function(haystack, needle) {
		for(var i = 0; i < haystack.length; i++) {
			if(haystack[i] == needle) {
				return i;
			}
		}
		return -1;
	},
	init:function() {
		if(typeof(wPrefs) != 'undefined') {
			if(dynamicBg.inArray(wPrefs, 'noDynamicBackground') != -1) {
				return; // Script disabled
			}
		}
		try {
			var cats = dynamicBg.getCategories();
			var body = document.getElementsByTagName('body')[0];
		} catch(e) {
			return;
		}
		var selectedCats = [];
		if(typeof(dynamicBg.categories['title-' + mw.config.get('wgTitle')]) != 'undefined') {
			selectedCats[0] = dynamicBg.categories['title-' + mw.config.get('wgTitle')];
		}
		else {
			for(var i in dynamicBg.categories) {
				if(dynamicBg.inArray(cats, i) != -1) {
					selectedCats[selectedCats.length] = dynamicBg.categories[i];
				}
			}
		}
		if(!selectedCats.length) return; // No match, keep default style
		var selectedCat = selectedCats[Math.floor(Math.random()*selectedCats.length)];
		body.style.backgroundImage='url('+selectedCat+')';
	}
};
$(dynamicBg.init);

// Page-specific JavaScript/CSS
var pageScripts = {
	pagesJS: ['Main_Page', 'User:WindPower', 'User:MogDog66', 'User:WindPower/Main_Page', 'User:Lexar/Main_Page/Template:Benjas', 'User:Lexar/RandomPage', 'User:Lexar/responsive_infobox', 'User:Lexar/sandbox', 'User:Tark', 'User:Tark/Sandbox', 'Team_Fortress_Wiki:April_Fools\'_Day/2021/Main_Page', 'User:PhoneWave', 'User:Wookipan/Sandbox'],
	pagesCSS: ['Main_Page', 'User:WindPower', 'User:Pilk/armory', 'User:Pilk', 'User:Esky', 'User:Lagg', 'User:MogDog66', 'User:CrushBOT', 'User:MogDog66/userpagev2', 'User:NVis', 'User:NVis/Sandbox', 'User:Lexar', 'User:MogDog66/MPR', 'User:WindPower/Main_Page', 'User:Moussekateer/3DViewer', 'User:T-Wayne', 'User:FreeXMan', 'User:Nixshadow', 'User:Ath', 'User:Carez', 'User:Lexar/Main_Page/Template:Benjas', 'User:Lexar/RandomPage', 'User:MogDog66/Sandbox', 'User:Obilisk', 'User:Lexar/itembox_tooltip', 'User:Lexar/sandbox', 'User:Lexar/responsive_infobox', 'User:Hagbard Celine', 'User:Wookipan', 'User:Wookipan/Sandbox', 'User:GrampaSwood', 'Team_Fortress_Wiki:April_Fools\'_Day/2019/Main_Page', 'User:Tark', 'User:Tark/Sandbox', 'User:Boba', 'User:Boba/Projects', 'User:FanCyy', 'User:Dan_greene', 'User:Boba/Sandbox', 'User:Ashe', 'Team_Fortress_Wiki:April_Fools\'_Day/2021/Main_Page', 'User:PhoneWave', 'User:Foxbite', 'User:Mediarch', 'User:Payn'],
	suffixJS: '/Page.js',
	suffixCSS: '/Page.css',
	init: function() {
		for(var i in pageScripts.pagesJS) {
			if(mw.config.get('wgPageName') == pageScripts.pagesJS[i]) {
				mw.loader.load(mw.config.get('wgScript') + '?title=' + encodeURIComponent(mw.config.get('wgPageName') + pageScripts.suffixJS) + '&ctype=text/javascript&action=raw');
			}
		}
		for(var i in pageScripts.pagesCSS) {
			if(mw.config.get('wgPageName') == pageScripts.pagesCSS[i]) {
				mw.loader.load(mw.config.get('wgScript') + '?title=' + encodeURIComponent(mw.config.get('wgPageName') + pageScripts.suffixCSS) + '&ctype=text/css&action=raw', 'text/css');
			}
		}
	}
};
$(pageScripts.init);

// Fancy diffs
var fancyDiffs = {
	isBigDiff: false,
	isBigDiffThreshold: 72,
	toggle: function(element) {
		var expanded = element.hasClass('diff-expanded');
		var contents = element.parent().children('.diff-contents');
		if(expanded) { // Just collapse then
			element.removeClass('diff-expanded');
			if(fancyDiffs.isBigDiff) {
				contents.hide();
			} else {
				contents.slideUp('fast');
			}
		} else if(element.hasClass('diff-data-loaded')) { // Stuff is already loaded, expand
			element.addClass('diff-expanded');
			contents.slideDown('fast');
		} else if(!element.hasClass('diff-data-requested')) { // Stuff is not loaded
			element.addClass('diff-data-requested');
			var fileName = element.find('span').text().replace(/^\s+|\s+$/g);
			var patchName = element.closest('.diffname');
			var diffName = mw.config.get('wgPageName');
			if(patchName && patchName.length && patchName.attr('class')) {
				diffName = patchName.attr('class').substr(9);
			}
			$.get('/w/?title=Template:PatchDiff/' + encodeURIComponent(diffName.replace(/^Template:PatchDiff\//, '')) + '/' + encodeURIComponent(fileName) + '&action=raw', function(data) {
				contents.html(data);
				if(fancyDiffs.isBigDiff) {
					contents.show();
				} else {
					contents.slideDown('fast');
				}
				element.removeClass('diff-data-requested').addClass('diff-data-loaded').addClass('diff-expanded');
			});
		}
		
	},
	init: function() {
		var diffText = $('.diff-name-text');
		if(diffText.length) {
			// Preload leetle gif
			$('body').append($('<img/>').attr('src', '/w/images/4/43/Patch_diff_loading.gif').css('display', 'none'));
			diffText.find('span').each(function() {
				$(this).text($(this).find('a').text().replace(/^\s+|\s+$/g));
			});
			diffText.click(function() {
				fancyDiffs.toggle($(this));
				return false;
			});
			fancyDiffs.isBigDiff = $('.diff-file').length > fancyDiffs.isBigDiffThreshold;
		}
	}
};
$(fancyDiffs.init);

// 3D/2D viewer
$('#switch-to-3d').click(function() {
	$('.container-2d').hide();
	$('.viewer-3d, .viewer-3d-multi, .buttons-container-3d').show();
});

$('#switch-to-2d').click(function() {
	$('.viewer-3d, .viewer-3d-multi, .buttons-container-3d').hide();
	$('.container-2d').show();
});

// 3D model viewer
var viewer3d = {
	dragging: null,
	draggingFrameX: 0,
	draggingFrameY: 0,
	viewers: [],
	frameThresholdX: 10,
	frameThresholdY: 128,
	realMod: function(x, y) {
		return ((x % y) + y) % y;
	},
	init: function() {
		$('.viewer-3d').each(viewer3d.bind);
		$(document).mouseup(viewer3d.release);
		$(document).mousemove(viewer3d.move);
	},
	bind: function() {
		var v = $(this);
		var num = viewer3d.viewers.length;
		var allModels = [];
		var modelID = 0;
		var viewerSize = 0;
		while(true) {
			var modelMap = v.find('.viewer-3d-map-' + modelID);
			var urlNode = v.find('.viewer-3d-url-' + modelID);
			if(!modelMap.length || !urlNode.length) break;
			var url = $('<div/>').html(urlNode.text()).text();
			var framesS = $('<div/>').html(modelMap.text()).text().replace(/^\s+|\s+$/g).split(/,/g);
			var frameMap = [];
			var heightMap = [];
			var leftCropMap = [];
			var totalW = parseInt(framesS[0]);
			var maxFrameW = parseInt(framesS[1]);
			var totalH = parseInt(framesS[2]);
			var verticalSteps = parseInt(framesS[3]);
			var midVertical = Math.floor(verticalSteps / 2);
			for(var f = 4; f < framesS.length; f += 3) {
				frameMap.push(parseInt(framesS[f]));
				heightMap.push(parseInt(framesS[f + 1]));
				leftCropMap.push(parseInt(framesS[f + 2]));
			}
			allModels.push({
				imageURL: url,
				map: frameMap,
				cropMap: leftCropMap,
				totalWidth: totalW,
				totalHeight: totalH,
				maxFrameWidth: maxFrameW,
				xStep: verticalSteps
			});
			viewerSize = Math.max(viewerSize, totalH, maxFrameW);
			modelID++;
		}
		if(!modelID) return;
		var overlayNode = $('<div class="viewer-3d-overlay"></div>');
		var frameN = v.find('.viewer-3d-frame');
		v.find('img').detach();
		var klasses = v.attr('class').split(/ /g);
		var startFrame = 0;
		for(var k in klasses) {
			if(klasses[k].substr(0, 11) == 'startframe-') {
				startFrame = Math.max(0, parseInt(klasses[k].substr(11)));
			}
		}
		var viewer = {
			node: v,
			frameX: startFrame,
			frameY: midVertical,
			models: allModels,
			currentModel: -1,
			frameNode: frameN,
			width: viewerSize,
			height: viewerSize,
			mouseX: 0,
			mouseY: 0,
			overlay: overlayNode
		};
		viewer3d.viewers.push(viewer);
		v.hover(viewer3d.hover, viewer3d.unhover).mousedown(viewer3d.drag).append(overlayNode).attr('data-id', num).css({
			width: viewer.width + 'px',
			height: viewer.height + 'px'
		});
		frameN.mousedown(viewer3d.drag).attr('data-id', num).css('height', viewer.height + 'px');
		viewer3d.changeVersion(viewer, 0);
	},
	getCurrentModel: function(v) {
		return v.models[v.currentModel];
	},
	changeVersion: function(v, version) {
		version = Math.max(0, Math.min(v.models.length - 1, version));
		if(v.currentModel == version) return;
		v.currentModel = version;
		v.frameNode.css('background', 'url(' + viewer3d.getCurrentModel(v).imageURL + ') top left no-repeat');
		viewer3d.display(v, v.frameX, v.frameY);
	},
	hover: function(e) {
		var v = viewer3d.getViewer(this);
		if(viewer3d.dragging != v) {
			v.overlay.animate({'opacity': '1'}, 'fast');
		}
	},
	unhover: function(e) {
		var v = viewer3d.getViewer(this);
		if(viewer3d.dragging != v) {
			v.overlay.animate({'opacity': '0.5'}, 'fast');
		}
	},
	drag: function(e) {
		var v = viewer3d.getViewer(this);
		v.mouseX = e.pageX;
		v.mouseY = e.pageY;
		viewer3d.dragging = v;
		draggingFrameX = v.frameX;
		draggingFrameY = v.frameY;
		return false;
	},
	release: function() {
		var v = viewer3d.dragging;
		viewer3d.dragging = null;
		if(v != null) {
			v.frameX = viewer3d.draggingFrameX;
			v.frameY = viewer3d.draggingFrameY;
			v.overlay.animate({'opacity': '0.5'}, 'fast');
		}
		viewer3d.draggingFrameX = 0;
		viewer3d.draggingFrameY = 0;
	},
	getViewer: function(node) {
		return viewer3d.viewers[parseInt($(node).attr('data-id'))];
	},
	display: function(v, frameX, frameY) {
		var model = viewer3d.getCurrentModel(v);
		var frameID = viewer3d.realMod(frameX * model.xStep + frameY, model.map.length);
		var frameOffset = model.map[frameID];
		var frameWidth = 0;
		if(frameID == model.map.length - 1) {
			frameWidth = model.totalWidth - frameOffset;
		} else {
			frameWidth = model.map[frameID + 1] - frameOffset;
		}
		v.frameNode.css({
			backgroundPosition: (-frameOffset - frameID) + 'px 0px',
			left: Math.round((v.width - model.maxFrameWidth) / 2.0 + model.cropMap[frameID]) + 'px',
			top: Math.round((v.height - model.totalHeight) / 2) + 'px',
			width: frameWidth + 'px',
			height: model.totalHeight + 'px'
		});
	},
	move: function(e) {
		if(viewer3d.dragging == null) {
			return;
		}
		var v = viewer3d.dragging;
		var model = viewer3d.getCurrentModel(v);
		var mouseDeltaX = e.pageX - v.mouseX;
		var mouseDeltaY = e.pageY - v.mouseY;
		var frameDeltaX = Math.round(mouseDeltaX / viewer3d.frameThresholdX);
		var frameDeltaY = -Math.round(mouseDeltaY / viewer3d.frameThresholdY);
		viewer3d.draggingFrameX = v.frameX + frameDeltaX;
		viewer3d.draggingFrameY = Math.max(0, Math.min(model.xStep - 1, v.frameY + frameDeltaY));
		viewer3d.display(v, viewer3d.draggingFrameX, viewer3d.draggingFrameY);
	}
};
$(viewer3d.init);
var selector3d = {
	bind: function() {
		var viewer = viewer3d.getViewer($(this).find('.viewer-3d'));
		var keepGoing = true;
		var modelVariant = 0;
		var selector;
		while(keepGoing) {
			selector = $(this).find('.selector-' + modelVariant);
			if(selector.length) {
				selector.attr('data-variant', modelVariant).click(function() {
					viewer3d.changeVersion(viewer, parseInt($(this).attr('data-variant')));
					return false;
				});
			}
			modelVariant++;
			keepGoing = selector.length;
		}
	},
	init: function() {
		$('.viewer-3d-multi, .viewer-3d-container').each(selector3d.bind);
	}
};
$(selector3d.init);

// Code to get 3D viewer drag working on touch devices
// Source: http://www.jquery4u.com/mobile/jquery-add-dragtouch-support-ipad/
$.fn.addTouch = function(){
    this.each(function(i,el){
      $(el).bind('touchstart touchmove touchend touchcancel',function(){
        //we pass the original event object because the jQuery event
        //object is normalized to w3c specs and does not provide the TouchList
        handleTouch(event);
      });
    });

    var handleTouch = function(event)
    {
      var touches = event.changedTouches,
              first = touches[0],
              type = '';

      switch(event.type)
      {
        case 'touchstart':
          type = 'mousedown';
          break;

        case 'touchmove':
          type = 'mousemove';
          event.preventDefault();
          break;

        case 'touchend':
          type = 'mouseup';
          break;

        default:
          return;
      }

      var simulatedEvent = document.createEvent('MouseEvent');
      simulatedEvent.initMouseEvent(type, true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY, false, false, false, false, 0/*left*/, null);
      first.target.dispatchEvent(simulatedEvent);
    };
  };

$('.viewer-3d').addTouch();

// End 3D viewer touch device code

// Start weapon wear table tabs -----
var WeaponWearTable = {
	tabSwitch: function($this,tab,weapons,weapon) {
		if (!$this.hasClass('current')) {
			var tabIndex = $this.index();
			$this.parent().find('.current').removeClass('current');
			$this.addClass('current');
			weapons.find('.current').removeClass('current');
			weapon.eq(tabIndex).addClass('current');
		}
	},
	init: function() {
		$('.weapon-wear-table').each(function(){
			var $this = $(this),
			tabs = $this.children('.tabs'),
			tab = tabs.children('li'),
			weapons = $this.children('.weapons'),
			weapon = weapons.children('li');
			tab.click(function(){
				WeaponWearTable.tabSwitch($(this),tab,weapons,weapon);
			});
		});
	}
};
$(WeaponWearTable.init);
// End weapon wear table tabs -----

// Start Bilibili iframe support -----
var Bilibili = {
  init: function() {
    var $videos = $('.bilibili-video');
    $videos.each(function() {
      var $this = $(this);
      var aid = parseInt($this.data('vaid'));
      var danmaku = parseInt($this.data('vdanmaku'));
      var page = parseInt($this.data('vpage'));
      var width = $this.data('vwidth');
      var height = $this.data('vheight');
      var iframeSrc = 'https://www.bilibili.com/blackboard/html5mobileplayer.html?aid=' + aid + '&high_quality=1&danmaku=' + danmaku + '&page=' + page + '&hideCoverInfo=1&hideDanmakuButton=1';
      var iframe = '<iframe src="' + iframeSrc + '" width="' + width + '" height="' + height + '" frameborder="0" allowfullscreen="true"></iframe>';
      $this.append(iframe);
    });
  }
};
$(Bilibili.init);
// End Bilibili iframe support -----

// Start custom username highlighting -----
var uGroupHighlight = {
  init: function() {
    if ($('.mw-userlink')[0]) {
      var params = {
        action: 'query',
        list: 'allusers',
        augroup: ['sysop', 'moderator', 'bot'],
        auprop: 'groups',
        aulimit: 100,
        format: 'json'
      };

      var api = new mw.Api();

      api.get(params).done(function(data) {
        var uGroups = data.query.allusers, user;
        for (user in uGroups) {
          var name = uGroups[user].name;
          var group = uGroups[user].groups;

          $('bdi').each(function() {
            if ($(this).text().match('\\b' + name + '\\b')) {
              $(this).closest('.mw-userlink').addClass(group.includes('bot') ? 'bot' : 'staff');
            }
          });
        }
      });
    }
  },
};
$(uGroupHighlight.init);
// End custom username highlighting -----

// Start login icon randomizer -----
var iconRandomizer = {
    init: function() {
        var classes = [
            '/w/images/3/33/Login_Scout.png',
            '/w/images/d/d8/Login_Soldier.png',
            '/w/images/7/71/Login_Pyro.png',
            '/w/images/5/53/Login_Demoman.png',
            '/w/images/3/35/Login_Heavy.png',
            '/w/images/a/ab/Login_Engineer.png',
            '/w/images/d/d4/Login_Medic.png',
            '/w/images/e/e4/Login_Sniper.png',
            '/w/images/2/27/Login_Spy.png'
        ];

        // pick a random class image out of nine choices
        pickClass = classes[Math.floor(Math.random() * classes.length)];

        // ensure all relative elements are hit
        var nodes = $('#pt-userpage, #pt-anonuserpage, #pt-login');
        if (nodes.length) {
            for (var i = 0; i < nodes.length; i++) {
                nodes.css('background-image', 'url(' + pickClass + ')');
            }
        }
    }
};

$(iconRandomizer.init);
// End login icon randomizer -----

// Start 'Audio player'
var audioPlayer = {
    currentAudio: null,

    init: function () {
        var audioPauseImg = new Image();
        var audioPlayImg = new Image();
        audioPauseImg.src = '/w/images/d/d2/Pause_icon.png';
        audioPlayImg.src = '/w/images/6/67/Play_icon.png';

        $('.tfwiki-audio-player').each(function () {
            var audioPlayerElement = $(this);
            var audioLink = audioPlayerElement.children('a');
            var audioURL = audioLink.attr('href');
            var audio = null;
            var audioStatus = audioPlayerElement.find('.tfwiki-audio-player-action');
		
			audioStatus.removeClass('inactive');

            audioPlayerElement.on('click', function (e) {
                if (e.target !== audioStatus[0]) {
                    return;
                }

                e.preventDefault();
				
                if (!audio) {
                    audio = new Audio(audioURL);
                    audio.volume = 0.5;
                    audio.addEventListener('ended', function () {
                        audioStatus.text(audioStatus.data('text-play'));
                        audioStatus.removeClass('playing');
                    });
                }

                if (audioPlayer.currentAudio && audioPlayer.currentAudio !== audio) {
                    audioPlayer.currentAudio.pause();
                    audioPlayer.currentAudio.currentTime = 0;
                    audioPlayer.currentAudioStatus.text(audioPlayer.currentAudioStatus.data('text-play'));
                    audioPlayer.currentAudioStatus.removeClass('playing');
                }

                if (audio.paused) {
                    audio.play();
                    audioStatus.text(audioStatus.data('text-pause'));
                    audioPlayer.currentAudio = audio;
                    audioPlayer.currentAudioStatus = audioStatus;
                    audioStatus.addClass('playing');
                } else {
                    audio.pause();
                    audioStatus.text(audioStatus.data('text-resume'));
                    audioPlayer.currentAudio = null;
                    audioPlayer.currentAudioStatus = null;
                    audioStatus.removeClass('playing');
                }
            });

            audioLink.on('click', function (e) {
                e.preventDefault();
                window.open(audioURL, '_blank');
            });
        });
    }
};

$(audioPlayer.init);
// End 'Audio player'

/* Google Analytics */
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-18260470-1']);
  _gaq.push(['_setDomainName', '.teamfortress.com']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
/* GoSquared analytics */
  var GoSquared = {};
  GoSquared.acct = "GSN-106863-S";
  (function(w){
    function gs(){
      w._gstc_lt = +new Date;
      var d = document, g = d.createElement("script");
      g.type = "text/javascript";
      g.src = "//d1l6p2sc9645hc.cloudfront.net/tracker.js";
      var s = d.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(g, s);
    }
    w.addEventListener ?
      w.addEventListener("load", gs, false) :
      w.attachEvent("onload", gs);
  })(window);