/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.7.0
*/
if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=(""+A[C]).split(".");E=YAHOO;for(B=(D[0]=="YAHOO")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};YAHOO.log=function(D,A,C){var B=YAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};YAHOO.register=function(A,E,D){var I=YAHOO.env.modules,B,H,G,F,C;if(!I[A]){I[A]={versions:[],builds:[]};}B=I[A];H=D.version;G=D.build;F=YAHOO.env.listeners;B.name=A;B.version=H;B.build=G;B.versions.push(H);B.builds.push(G);B.mainClass=E;for(C=0;C<F.length;C=C+1){F[C](B);}if(E){E.VERSION=H;E.BUILD=G;}else{YAHOO.log("mainClass is undefined for module "+A,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(A){return YAHOO.env.modules[A]||null;};YAHOO.env.ua=function(){var C={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0,caja:0},B=navigator.userAgent,A;if((/KHTML/).test(B)){C.webkit=1;}A=B.match(/AppleWebKit\/([^\s]*)/);if(A&&A[1]){C.webkit=parseFloat(A[1]);if(/ Mobile\//.test(B)){C.mobile="Apple";}else{A=B.match(/NokiaN[^\/]*/);if(A){C.mobile=A[0];}}A=B.match(/AdobeAIR\/([^\s]*)/);if(A){C.air=A[0];}}if(!C.webkit){A=B.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){C.opera=parseFloat(A[1]);A=B.match(/Opera Mini[^;]*/);if(A){C.mobile=A[0];}}else{A=B.match(/MSIE\s([^;]*)/);if(A&&A[1]){C.ie=parseFloat(A[1]);}else{A=B.match(/Gecko\/([^\s]*)/);if(A){C.gecko=1;A=B.match(/rv:([^\s\)]*)/);if(A&&A[1]){C.gecko=parseFloat(A[1]);}}}}}A=B.match(/Caja\/([^\s]*)/);if(A&&A[1]){C.caja=parseFloat(A[1]);}return C;}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var B=YAHOO_config.listener,A=YAHOO.env.listeners,D=true,C;if(B){for(C=0;C<A.length;C=C+1){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();YAHOO.lang=YAHOO.lang||{};(function(){var B=YAHOO.lang,F="[object Array]",C="[object Function]",A=Object.prototype,E=["toString","valueOf"],D={isArray:function(G){return A.toString.apply(G)===F;},isBoolean:function(G){return typeof G==="boolean";},isFunction:function(G){return A.toString.apply(G)===C;},isNull:function(G){return G===null;},isNumber:function(G){return typeof G==="number"&&isFinite(G);},isObject:function(G){return(G&&(typeof G==="object"||B.isFunction(G)))||false;},isString:function(G){return typeof G==="string";},isUndefined:function(G){return typeof G==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(I,H){var G,K,J;for(G=0;G<E.length;G=G+1){K=E[G];J=H[K];if(B.isFunction(J)&&J!=A[K]){I[K]=J;}}}:function(){},extend:function(J,K,I){if(!K||!J){throw new Error("extend failed, please check that "+"all dependencies are included.");}var H=function(){},G;H.prototype=K.prototype;J.prototype=new H();J.prototype.constructor=J;J.superclass=K.prototype;if(K.prototype.constructor==A.constructor){K.prototype.constructor=K;}if(I){for(G in I){if(B.hasOwnProperty(I,G)){J.prototype[G]=I[G];}}B._IEEnumFix(J.prototype,I);}},augmentObject:function(K,J){if(!J||!K){throw new Error("Absorb failed, verify dependencies.");}var G=arguments,I,L,H=G[2];if(H&&H!==true){for(I=2;I<G.length;I=I+1){K[G[I]]=J[G[I]];}}else{for(L in J){if(H||!(L in K)){K[L]=J[L];}}B._IEEnumFix(K,J);}},augmentProto:function(J,I){if(!I||!J){throw new Error("Augment failed, verify dependencies.");}var G=[J.prototype,I.prototype],H;for(H=2;H<arguments.length;H=H+1){G.push(arguments[H]);}B.augmentObject.apply(this,G);},dump:function(G,L){var I,K,N=[],O="{...}",H="f(){...}",M=", ",J=" => ";if(!B.isObject(G)){return G+"";}else{if(G instanceof Date||("nodeType" in G&&"tagName" in G)){return G;}else{if(B.isFunction(G)){return H;}}}L=(B.isNumber(L))?L:3;if(B.isArray(G)){N.push("[");for(I=0,K=G.length;I<K;I=I+1){if(B.isObject(G[I])){N.push((L>0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}if(N.length>1){N.pop();}N.push("]");}else{N.push("{");for(I in G){if(B.hasOwnProperty(G,I)){N.push(I+J);if(B.isObject(G[I])){N.push((L>0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}}if(N.length>1){N.pop();}N.push("}");}return N.join("");},substitute:function(V,H,O){var L,K,J,R,S,U,Q=[],I,M="dump",P=" ",G="{",T="}",N;for(;;){L=V.lastIndexOf(G);if(L<0){break;}K=V.indexOf(T,L);if(L+1>=K){break;}I=V.substring(L+1,K);R=I;U=null;J=R.indexOf(P);if(J>-1){U=R.substring(J+1);R=R.substring(0,J);}S=H[R];if(O){S=O(R,S,U);}if(B.isObject(S)){if(B.isArray(S)){S=B.dump(S,parseInt(U,10));}else{U=U||"";N=U.indexOf(M);if(N>-1){U=U.substring(4);}if(S.toString===A.toString||N>-1){S=B.dump(S,parseInt(U,10));}else{S=S.toString();}}}else{if(!B.isString(S)&&!B.isNumber(S)){S="~-"+Q.length+"-~";Q[Q.length]=I;}}V=V.substring(0,L)+S+V.substring(K+1);}for(L=Q.length-1;L>=0;L=L-1){V=V.replace(new RegExp("~-"+L+"-~"),"{"+Q[L]+"}","g");}return V;},trim:function(G){try{return G.replace(/^\s+|\s+$/g,"");}catch(H){return G;}},merge:function(){var J={},H=arguments,G=H.length,I;for(I=0;I<G;I=I+1){B.augmentObject(J,H[I],true);}return J;},later:function(N,H,O,J,K){N=N||0;H=H||{};var I=O,M=J,L,G;if(B.isString(O)){I=H[O];}if(!I){throw new TypeError("method undefined");}if(!B.isArray(M)){M=[J];}L=function(){I.apply(H,M);};G=(K)?setInterval(L,N):setTimeout(L,N);return{interval:K,cancel:function(){if(this.interval){clearInterval(G);}else{clearTimeout(G);}}};},isValue:function(G){return(B.isObject(G)||B.isString(G)||B.isNumber(G)||B.isBoolean(G));}};B.hasOwnProperty=(A.hasOwnProperty)?function(G,H){return G&&G.hasOwnProperty(H);}:function(G,H){return !B.isUndefined(G[H])&&G.constructor.prototype[H]!==G[H];};D.augmentObject(B,D,true);YAHOO.util.Lang=B;B.augment=B.augmentProto;YAHOO.augment=B.augmentProto;YAHOO.extend=B.extend;})();YAHOO.register("yahoo",YAHOO,{version:"2.7.0",build:"1796"});YAHOO.util.Get=function(){var M={},L=0,R=0,E=false,N=YAHOO.env.ua,S=YAHOO.lang;var J=function(W,T,X){var U=X||window,Y=U.document,Z=Y.createElement(W);for(var V in T){if(T[V]&&YAHOO.lang.hasOwnProperty(T,V)){Z.setAttribute(V,T[V]);}}return Z;};var I=function(T,U,W){var V=W||"utf-8";return J("link",{"id":"yui__dyn_"+(R++),"type":"text/css","charset":V,"rel":"stylesheet","href":T},U);
};var P=function(T,U,W){var V=W||"utf-8";return J("script",{"id":"yui__dyn_"+(R++),"type":"text/javascript","charset":V,"src":T},U);};var A=function(T,U){return{tId:T.tId,win:T.win,data:T.data,nodes:T.nodes,msg:U,purge:function(){D(this.tId);}};};var B=function(T,W){var U=M[W],V=(S.isString(T))?U.win.document.getElementById(T):T;if(!V){Q(W,"target node not found: "+T);}return V;};var Q=function(W,V){var T=M[W];if(T.onFailure){var U=T.scope||T.win;T.onFailure.call(U,A(T,V));}};var C=function(W){var T=M[W];T.finished=true;if(T.aborted){var V="transaction "+W+" was aborted";Q(W,V);return;}if(T.onSuccess){var U=T.scope||T.win;T.onSuccess.call(U,A(T));}};var O=function(V){var T=M[V];if(T.onTimeout){var U=T.scope||T;T.onTimeout.call(U,A(T));}};var G=function(V,Z){var U=M[V];if(U.timer){U.timer.cancel();}if(U.aborted){var X="transaction "+V+" was aborted";Q(V,X);return;}if(Z){U.url.shift();if(U.varName){U.varName.shift();}}else{U.url=(S.isString(U.url))?[U.url]:U.url;if(U.varName){U.varName=(S.isString(U.varName))?[U.varName]:U.varName;}}var c=U.win,b=c.document,a=b.getElementsByTagName("head")[0],W;if(U.url.length===0){if(U.type==="script"&&N.webkit&&N.webkit<420&&!U.finalpass&&!U.varName){var Y=P(null,U.win,U.charset);Y.innerHTML='YAHOO.util.Get._finalize("'+V+'");';U.nodes.push(Y);a.appendChild(Y);}else{C(V);}return;}var T=U.url[0];if(!T){U.url.shift();return G(V);}if(U.timeout){U.timer=S.later(U.timeout,U,O,V);}if(U.type==="script"){W=P(T,c,U.charset);}else{W=I(T,c,U.charset);}F(U.type,W,V,T,c,U.url.length);U.nodes.push(W);if(U.insertBefore){var e=B(U.insertBefore,V);if(e){e.parentNode.insertBefore(W,e);}}else{a.appendChild(W);}if((N.webkit||N.gecko)&&U.type==="css"){G(V,T);}};var K=function(){if(E){return;}E=true;for(var T in M){var U=M[T];if(U.autopurge&&U.finished){D(U.tId);delete M[T];}}E=false;};var D=function(a){var X=M[a];if(X){var Z=X.nodes,T=Z.length,Y=X.win.document,W=Y.getElementsByTagName("head")[0];if(X.insertBefore){var V=B(X.insertBefore,a);if(V){W=V.parentNode;}}for(var U=0;U<T;U=U+1){W.removeChild(Z[U]);}X.nodes=[];}};var H=function(U,T,V){var X="q"+(L++);V=V||{};if(L%YAHOO.util.Get.PURGE_THRESH===0){K();}M[X]=S.merge(V,{tId:X,type:U,url:T,finished:false,aborted:false,nodes:[]});var W=M[X];W.win=W.win||window;W.scope=W.scope||W.win;W.autopurge=("autopurge" in W)?W.autopurge:(U==="script")?true:false;S.later(0,W,G,X);return{tId:X};};var F=function(c,X,W,U,Y,Z,b){var a=b||G;if(N.ie){X.onreadystatechange=function(){var d=this.readyState;if("loaded"===d||"complete"===d){X.onreadystatechange=null;a(W,U);}};}else{if(N.webkit){if(c==="script"){if(N.webkit>=420){X.addEventListener("load",function(){a(W,U);});}else{var T=M[W];if(T.varName){var V=YAHOO.util.Get.POLL_FREQ;T.maxattempts=YAHOO.util.Get.TIMEOUT/V;T.attempts=0;T._cache=T.varName[0].split(".");T.timer=S.later(V,T,function(j){var f=this._cache,e=f.length,d=this.win,g;for(g=0;g<e;g=g+1){d=d[f[g]];if(!d){this.attempts++;if(this.attempts++>this.maxattempts){var h="Over retry limit, giving up";T.timer.cancel();Q(W,h);}else{}return;}}T.timer.cancel();a(W,U);},null,true);}else{S.later(YAHOO.util.Get.POLL_FREQ,null,a,[W,U]);}}}}else{X.onload=function(){a(W,U);};}}};return{POLL_FREQ:10,PURGE_THRESH:20,TIMEOUT:2000,_finalize:function(T){S.later(0,null,C,T);},abort:function(U){var V=(S.isString(U))?U:U.tId;var T=M[V];if(T){T.aborted=true;}},script:function(T,U){return H("script",T,U);},css:function(T,U){return H("css",T,U);}};}();YAHOO.register("get",YAHOO.util.Get,{version:"2.7.0",build:"1796"});(function(){var Y=YAHOO,util=Y.util,lang=Y.lang,env=Y.env,PROV="_provides",SUPER="_supersedes",REQ="expanded",AFTER="_after";var YUI={dupsAllowed:{"yahoo":true,"get":true},info:{"root":"2.7.0/build/","base":"http://yui.yahooapis.com/2.7.0/build/","comboBase":"http://yui.yahooapis.com/combo?","skin":{"defaultSkin":"sam","base":"assets/skins/","path":"skin.css","after":["reset","fonts","grids","base"],"rollup":3},dupsAllowed:["yahoo","get"],"moduleInfo":{"animation":{"type":"js","path":"animation/animation-min.js","requires":["dom","event"]},"autocomplete":{"type":"js","path":"autocomplete/autocomplete-min.js","requires":["dom","event","datasource"],"optional":["connection","animation"],"skinnable":true},"base":{"type":"css","path":"base/base-min.css","after":["reset","fonts","grids"]},"button":{"type":"js","path":"button/button-min.js","requires":["element"],"optional":["menu"],"skinnable":true},"calendar":{"type":"js","path":"calendar/calendar-min.js","requires":["event","dom"],"skinnable":true},"carousel":{"type":"js","path":"carousel/carousel-min.js","requires":["element"],"optional":["animation"],"skinnable":true},"charts":{"type":"js","path":"charts/charts-min.js","requires":["element","json","datasource"]},"colorpicker":{"type":"js","path":"colorpicker/colorpicker-min.js","requires":["slider","element"],"optional":["animation"],"skinnable":true},"connection":{"type":"js","path":"connection/connection-min.js","requires":["event"]},"container":{"type":"js","path":"container/container-min.js","requires":["dom","event"],"optional":["dragdrop","animation","connection"],"supersedes":["containercore"],"skinnable":true},"containercore":{"type":"js","path":"container/container_core-min.js","requires":["dom","event"],"pkg":"container"},"cookie":{"type":"js","path":"cookie/cookie-min.js","requires":["yahoo"]},"datasource":{"type":"js","path":"datasource/datasource-min.js","requires":["event"],"optional":["connection"]},"datatable":{"type":"js","path":"datatable/datatable-min.js","requires":["element","datasource"],"optional":["calendar","dragdrop","paginator"],"skinnable":true},"dom":{"type":"js","path":"dom/dom-min.js","requires":["yahoo"]},"dragdrop":{"type":"js","path":"dragdrop/dragdrop-min.js","requires":["dom","event"]},"editor":{"type":"js","path":"editor/editor-min.js","requires":["menu","element","button"],"optional":["animation","dragdrop"],"supersedes":["simpleeditor"],"skinnable":true},"element":{"type":"js","path":"element/element-min.js","requires":["dom","event"]},"event":{"type":"js","path":"event/event-min.js","requires":["yahoo"]},"fonts":{"type":"css","path":"fonts/fonts-min.css"},"get":{"type":"js","path":"get/get-min.js","requires":["yahoo"]},"grids":{"type":"css","path":"grids/grids-min.css","requires":["fonts"],"optional":["reset"]},"history":{"type":"js","path":"history/history-min.js","requires":["event"]},"imagecropper":{"type":"js","path":"imagecropper/imagecropper-min.js","requires":["dom","event","dragdrop","element","resize"],"skinnable":true},"imageloader":{"type":"js","path":"imageloader/imageloader-min.js","requires":["event","dom"]},"json":{"type":"js","path":"json/json-min.js","requires":["yahoo"]},"layout":{"type":"js","path":"layout/layout-min.js","requires":["dom","event","element"],"optional":["animation","dragdrop","resize","selector"],"skinnable":true},"logger":{"type":"js","path":"logger/logger-min.js","requires":["event","dom"],"optional":["dragdrop"],"skinnable":true},"menu":{"type":"js","path":"menu/menu-min.js","requires":["containercore"],"skinnable":true},"paginator":{"type":"js","path":"paginator/paginator-min.js","requires":["element"],"skinnable":true},"profiler":{"type":"js","path":"profiler/profiler-min.js","requires":["yahoo"]},"profilerviewer":{"type":"js","path":"profilerviewer/profilerviewer-min.js","requires":["profiler","yuiloader","element"],"skinnable":true},"reset":{"type":"css","path":"reset/reset-min.css"},"reset-fonts-grids":{"type":"css","path":"reset-fonts-grids/reset-fonts-grids.css","supersedes":["reset","fonts","grids","reset-fonts"],"rollup":4},"reset-fonts":{"type":"css","path":"reset-fonts/reset-fonts.css","supersedes":["reset","fonts"],"rollup":2},"resize":{"type":"js","path":"resize/resize-min.js","requires":["dom","event","dragdrop","element"],"optional":["animation"],"skinnable":true},"selector":{"type":"js","path":"selector/selector-min.js","requires":["yahoo","dom"]},"simpleeditor":{"type":"js","path":"editor/simpleeditor-min.js","requires":["element"],"optional":["containercore","menu","button","animation","dragdrop"],"skinnable":true,"pkg":"editor"},"slider":{"type":"js","path":"slider/slider-min.js","requires":["dragdrop"],"optional":["animation"],"skinnable":true},"stylesheet":{"type":"js","path":"stylesheet/stylesheet-min.js","requires":["yahoo"]},"tabview":{"type":"js","path":"tabview/tabview-min.js","requires":["element"],"optional":["connection"],"skinnable":true},"treeview":{"type":"js","path":"treeview/treeview-min.js","requires":["event","dom"],"optional":["json"],"skinnable":true},"uploader":{"type":"js","path":"uploader/uploader.js","requires":["element"]},"utilities":{"type":"js","path":"utilities/utilities.js","supersedes":["yahoo","event","dragdrop","animation","dom","connection","element","yahoo-dom-event","get","yuiloader","yuiloader-dom-event"],"rollup":8},"yahoo":{"type":"js","path":"yahoo/yahoo-min.js"},"yahoo-dom-event":{"type":"js","path":"yahoo-dom-event/yahoo-dom-event.js","supersedes":["yahoo","event","dom"],"rollup":3},"yuiloader":{"type":"js","path":"yuiloader/yuiloader-min.js","supersedes":["yahoo","get"]},"yuiloader-dom-event":{"type":"js","path":"yuiloader-dom-event/yuiloader-dom-event.js","supersedes":["yahoo","dom","event","get","yuiloader","yahoo-dom-event"],"rollup":5},"yuitest":{"type":"js","path":"yuitest/yuitest-min.js","requires":["logger"],"skinnable":true}}},ObjectUtil:{appendArray:function(o,a){if(a){for(var i=0;
i<a.length;i=i+1){o[a[i]]=true;}}},keys:function(o,ordered){var a=[],i;for(i in o){if(lang.hasOwnProperty(o,i)){a.push(i);}}return a;}},ArrayUtil:{appendArray:function(a1,a2){Array.prototype.push.apply(a1,a2);},indexOf:function(a,val){for(var i=0;i<a.length;i=i+1){if(a[i]===val){return i;}}return -1;},toObject:function(a){var o={};for(var i=0;i<a.length;i=i+1){o[a[i]]=true;}return o;},uniq:function(a){return YUI.ObjectUtil.keys(YUI.ArrayUtil.toObject(a));}}};YAHOO.util.YUILoader=function(o){this._internalCallback=null;this._useYahooListener=false;this.onSuccess=null;this.onFailure=Y.log;this.onProgress=null;this.onTimeout=null;this.scope=this;this.data=null;this.insertBefore=null;this.charset=null;this.varName=null;this.base=YUI.info.base;this.comboBase=YUI.info.comboBase;this.combine=false;this.root=YUI.info.root;this.timeout=0;this.ignore=null;this.force=null;this.allowRollup=true;this.filter=null;this.required={};this.moduleInfo=lang.merge(YUI.info.moduleInfo);this.rollups=null;this.loadOptional=false;this.sorted=[];this.loaded={};this.dirty=true;this.inserted={};var self=this;env.listeners.push(function(m){if(self._useYahooListener){self.loadNext(m.name);}});this.skin=lang.merge(YUI.info.skin);this._config(o);};Y.util.YUILoader.prototype={FILTERS:{RAW:{"searchExp":"-min\\.js","replaceStr":".js"},DEBUG:{"searchExp":"-min\\.js","replaceStr":"-debug.js"}},SKIN_PREFIX:"skin-",_config:function(o){if(o){for(var i in o){if(lang.hasOwnProperty(o,i)){if(i=="require"){this.require(o[i]);}else{this[i]=o[i];}}}}var f=this.filter;if(lang.isString(f)){f=f.toUpperCase();if(f==="DEBUG"){this.require("logger");}if(!Y.widget.LogWriter){Y.widget.LogWriter=function(){return Y;};}this.filter=this.FILTERS[f];}},addModule:function(o){if(!o||!o.name||!o.type||(!o.path&&!o.fullpath)){return false;}o.ext=("ext" in o)?o.ext:true;o.requires=o.requires||[];this.moduleInfo[o.name]=o;this.dirty=true;return true;},require:function(what){var a=(typeof what==="string")?arguments:what;this.dirty=true;YUI.ObjectUtil.appendArray(this.required,a);},_addSkin:function(skin,mod){var name=this.formatSkin(skin),info=this.moduleInfo,sinf=this.skin,ext=info[mod]&&info[mod].ext;if(!info[name]){this.addModule({"name":name,"type":"css","path":sinf.base+skin+"/"+sinf.path,"after":sinf.after,"rollup":sinf.rollup,"ext":ext});}if(mod){name=this.formatSkin(skin,mod);if(!info[name]){var mdef=info[mod],pkg=mdef.pkg||mod;this.addModule({"name":name,"type":"css","after":sinf.after,"path":pkg+"/"+sinf.base+skin+"/"+mod+".css","ext":ext});}}return name;},getRequires:function(mod){if(!mod){return[];}if(!this.dirty&&mod.expanded){return mod.expanded;}mod.requires=mod.requires||[];var i,d=[],r=mod.requires,o=mod.optional,info=this.moduleInfo,m;for(i=0;i<r.length;i=i+1){d.push(r[i]);m=info[r[i]];YUI.ArrayUtil.appendArray(d,this.getRequires(m));}if(o&&this.loadOptional){for(i=0;i<o.length;i=i+1){d.push(o[i]);YUI.ArrayUtil.appendArray(d,this.getRequires(info[o[i]]));}}mod.expanded=YUI.ArrayUtil.uniq(d);return mod.expanded;},getProvides:function(name,notMe){var addMe=!(notMe),ckey=(addMe)?PROV:SUPER,m=this.moduleInfo[name],o={};if(!m){return o;}if(m[ckey]){return m[ckey];}var s=m.supersedes,done={},me=this;var add=function(mm){if(!done[mm]){done[mm]=true;lang.augmentObject(o,me.getProvides(mm));}};if(s){for(var i=0;i<s.length;i=i+1){add(s[i]);}}m[SUPER]=o;m[PROV]=lang.merge(o);m[PROV][name]=true;return m[ckey];},calculate:function(o){if(o||this.dirty){this._config(o);this._setup();this._explode();if(this.allowRollup){this._rollup();}this._reduce();this._sort();this.dirty=false;}},_setup:function(){var info=this.moduleInfo,name,i,j;for(name in info){if(lang.hasOwnProperty(info,name)){var m=info[name];if(m&&m.skinnable){var o=this.skin.overrides,smod;if(o&&o[name]){for(i=0;i<o[name].length;i=i+1){smod=this._addSkin(o[name][i],name);}}else{smod=this._addSkin(this.skin.defaultSkin,name);}m.requires.push(smod);}}}var l=lang.merge(this.inserted);if(!this._sandbox){l=lang.merge(l,env.modules);}if(this.ignore){YUI.ObjectUtil.appendArray(l,this.ignore);}if(this.force){for(i=0;i<this.force.length;i=i+1){if(this.force[i] in l){delete l[this.force[i]];}}}for(j in l){if(lang.hasOwnProperty(l,j)){lang.augmentObject(l,this.getProvides(j));}}this.loaded=l;},_explode:function(){var r=this.required,i,mod;for(i in r){if(lang.hasOwnProperty(r,i)){mod=this.moduleInfo[i];if(mod){var req=this.getRequires(mod);if(req){YUI.ObjectUtil.appendArray(r,req);}}}}},_skin:function(){},formatSkin:function(skin,mod){var s=this.SKIN_PREFIX+skin;if(mod){s=s+"-"+mod;}return s;},parseSkin:function(mod){if(mod.indexOf(this.SKIN_PREFIX)===0){var a=mod.split("-");return{skin:a[1],module:a[2]};}return null;},_rollup:function(){var i,j,m,s,rollups={},r=this.required,roll,info=this.moduleInfo;if(this.dirty||!this.rollups){for(i in info){if(lang.hasOwnProperty(info,i)){m=info[i];if(m&&m.rollup){rollups[i]=m;}}}this.rollups=rollups;}for(;;){var rolled=false;for(i in rollups){if(!r[i]&&!this.loaded[i]){m=info[i];s=m.supersedes;roll=false;if(!m.rollup){continue;}var skin=(m.ext)?false:this.parseSkin(i),c=0;if(skin){for(j in r){if(lang.hasOwnProperty(r,j)){if(i!==j&&this.parseSkin(j)){c++;roll=(c>=m.rollup);if(roll){break;}}}}}else{for(j=0;j<s.length;j=j+1){if(this.loaded[s[j]]&&(!YUI.dupsAllowed[s[j]])){roll=false;break;}else{if(r[s[j]]){c++;roll=(c>=m.rollup);if(roll){break;}}}}}if(roll){r[i]=true;rolled=true;this.getRequires(m);}}}if(!rolled){break;}}},_reduce:function(){var i,j,s,m,r=this.required;for(i in r){if(i in this.loaded){delete r[i];}else{var skinDef=this.parseSkin(i);if(skinDef){if(!skinDef.module){var skin_pre=this.SKIN_PREFIX+skinDef.skin;for(j in r){if(lang.hasOwnProperty(r,j)){m=this.moduleInfo[j];var ext=m&&m.ext;if(!ext&&j!==i&&j.indexOf(skin_pre)>-1){delete r[j];}}}}}else{m=this.moduleInfo[i];s=m&&m.supersedes;if(s){for(j=0;j<s.length;j=j+1){if(s[j] in r){delete r[s[j]];}}}}}}},_onFailure:function(msg){YAHOO.log("Failure","info","loader");var f=this.onFailure;if(f){f.call(this.scope,{msg:"failure: "+msg,data:this.data,success:false});
}},_onTimeout:function(){YAHOO.log("Timeout","info","loader");var f=this.onTimeout;if(f){f.call(this.scope,{msg:"timeout",data:this.data,success:false});}},_sort:function(){var s=[],info=this.moduleInfo,loaded=this.loaded,checkOptional=!this.loadOptional,me=this;var requires=function(aa,bb){var mm=info[aa];if(loaded[bb]||!mm){return false;}var ii,rr=mm.expanded,after=mm.after,other=info[bb],optional=mm.optional;if(rr&&YUI.ArrayUtil.indexOf(rr,bb)>-1){return true;}if(after&&YUI.ArrayUtil.indexOf(after,bb)>-1){return true;}if(checkOptional&&optional&&YUI.ArrayUtil.indexOf(optional,bb)>-1){return true;}var ss=info[bb]&&info[bb].supersedes;if(ss){for(ii=0;ii<ss.length;ii=ii+1){if(requires(aa,ss[ii])){return true;}}}if(mm.ext&&mm.type=="css"&&!other.ext&&other.type=="css"){return true;}return false;};for(var i in this.required){if(lang.hasOwnProperty(this.required,i)){s.push(i);}}var p=0;for(;;){var l=s.length,a,b,j,k,moved=false;for(j=p;j<l;j=j+1){a=s[j];for(k=j+1;k<l;k=k+1){if(requires(a,s[k])){b=s.splice(k,1);s.splice(j,0,b[0]);moved=true;break;}}if(moved){break;}else{p=p+1;}}if(!moved){break;}}this.sorted=s;},toString:function(){var o={type:"YUILoader",base:this.base,filter:this.filter,required:this.required,loaded:this.loaded,inserted:this.inserted};lang.dump(o,1);},_combine:function(){this._combining=[];var self=this,s=this.sorted,len=s.length,js=this.comboBase,css=this.comboBase,target,startLen=js.length,i,m,type=this.loadType;YAHOO.log("type "+type);for(i=0;i<len;i=i+1){m=this.moduleInfo[s[i]];if(m&&!m.ext&&(!type||type===m.type)){target=this.root+m.path;target+="&";if(m.type=="js"){js+=target;}else{css+=target;}this._combining.push(s[i]);}}if(this._combining.length){YAHOO.log("Attempting to combine: "+this._combining,"info","loader");var callback=function(o){var c=this._combining,len=c.length,i,m;for(i=0;i<len;i=i+1){this.inserted[c[i]]=true;}this.loadNext(o.data);},loadScript=function(){if(js.length>startLen){YAHOO.util.Get.script(self._filter(js),{data:self._loading,onSuccess:callback,onFailure:self._onFailure,onTimeout:self._onTimeout,insertBefore:self.insertBefore,charset:self.charset,timeout:self.timeout,scope:self});}};if(css.length>startLen){YAHOO.util.Get.css(this._filter(css),{data:this._loading,onSuccess:loadScript,onFailure:this._onFailure,onTimeout:this._onTimeout,insertBefore:this.insertBefore,charset:this.charset,timeout:this.timeout,scope:self});}else{loadScript();}return;}else{this.loadNext(this._loading);}},insert:function(o,type){this.calculate(o);this._loading=true;this.loadType=type;if(this.combine){return this._combine();}if(!type){var self=this;this._internalCallback=function(){self._internalCallback=null;self.insert(null,"js");};this.insert(null,"css");return;}this.loadNext();},sandbox:function(o,type){this._config(o);if(!this.onSuccess){throw new Error("You must supply an onSuccess handler for your sandbox");}this._sandbox=true;var self=this;if(!type||type!=="js"){this._internalCallback=function(){self._internalCallback=null;self.sandbox(null,"js");};this.insert(null,"css");return;}if(!util.Connect){var ld=new YAHOO.util.YUILoader();ld.insert({base:this.base,filter:this.filter,require:"connection",insertBefore:this.insertBefore,charset:this.charset,onSuccess:function(){this.sandbox(null,"js");},scope:this},"js");return;}this._scriptText=[];this._loadCount=0;this._stopCount=this.sorted.length;this._xhr=[];this.calculate();var s=this.sorted,l=s.length,i,m,url;for(i=0;i<l;i=i+1){m=this.moduleInfo[s[i]];if(!m){this._onFailure("undefined module "+m);for(var j=0;j<this._xhr.length;j=j+1){this._xhr[j].abort();}return;}if(m.type!=="js"){this._loadCount++;continue;}url=m.fullpath;url=(url)?this._filter(url):this._url(m.path);var xhrData={success:function(o){var idx=o.argument[0],name=o.argument[2];this._scriptText[idx]=o.responseText;if(this.onProgress){this.onProgress.call(this.scope,{name:name,scriptText:o.responseText,xhrResponse:o,data:this.data});}this._loadCount++;if(this._loadCount>=this._stopCount){var v=this.varName||"YAHOO";var t="(function() {\n";var b="\nreturn "+v+";\n})();";var ref=eval(t+this._scriptText.join("\n")+b);this._pushEvents(ref);if(ref){this.onSuccess.call(this.scope,{reference:ref,data:this.data});}else{this._onFailure.call(this.varName+" reference failure");}}},failure:function(o){this.onFailure.call(this.scope,{msg:"XHR failure",xhrResponse:o,data:this.data});},scope:this,argument:[i,url,s[i]]};this._xhr.push(util.Connect.asyncRequest("GET",url,xhrData));}},loadNext:function(mname){if(!this._loading){return;}if(mname){if(mname!==this._loading){return;}this.inserted[mname]=true;if(this.onProgress){this.onProgress.call(this.scope,{name:mname,data:this.data});}}var s=this.sorted,len=s.length,i,m;for(i=0;i<len;i=i+1){if(s[i] in this.inserted){continue;}if(s[i]===this._loading){return;}m=this.moduleInfo[s[i]];if(!m){this.onFailure.call(this.scope,{msg:"undefined module "+m,data:this.data});return;}if(!this.loadType||this.loadType===m.type){this._loading=s[i];var fn=(m.type==="css")?util.Get.css:util.Get.script,url=m.fullpath,self=this,c=function(o){self.loadNext(o.data);};url=(url)?this._filter(url):this._url(m.path);if(env.ua.webkit&&env.ua.webkit<420&&m.type==="js"&&!m.varName){c=null;this._useYahooListener=true;}fn(url,{data:s[i],onSuccess:c,onFailure:this._onFailure,onTimeout:this._onTimeout,insertBefore:this.insertBefore,charset:this.charset,timeout:this.timeout,varName:m.varName,scope:self});return;}}this._loading=null;if(this._internalCallback){var f=this._internalCallback;this._internalCallback=null;f.call(this);}else{if(this.onSuccess){this._pushEvents();this.onSuccess.call(this.scope,{data:this.data});}}},_pushEvents:function(ref){var r=ref||YAHOO;if(r.util&&r.util.Event){r.util.Event._load();}},_filter:function(str){var f=this.filter;return(f)?str.replace(new RegExp(f.searchExp,"g"),f.replaceStr):str;},_url:function(path){return this._filter((this.base||"")+path);}};})();YAHOO.register("yuiloader",YAHOO.util.YUILoader,{version:"2.7.0",build:"1796"});
(function(){YAHOO.env._id_counter=YAHOO.env._id_counter||0;var E=YAHOO.util,L=YAHOO.lang,m=YAHOO.env.ua,A=YAHOO.lang.trim,d={},h={},N=/^t(?:able|d|h)$/i,X=/color$/i,K=window.document,W=K.documentElement,e="ownerDocument",n="defaultView",v="documentElement",t="compatMode",b="offsetLeft",P="offsetTop",u="offsetParent",Z="parentNode",l="nodeType",C="tagName",O="scrollLeft",i="scrollTop",Q="getBoundingClientRect",w="getComputedStyle",a="currentStyle",M="CSS1Compat",c="BackCompat",g="class",F="className",J="",B=" ",s="(?:^|\\s)",k="(?= |$)",U="g",p="position",f="fixed",V="relative",j="left",o="top",r="medium",q="borderLeftWidth",R="borderTopWidth",D=m.opera,I=m.webkit,H=m.gecko,T=m.ie;E.Dom={CUSTOM_ATTRIBUTES:(!W.hasAttribute)?{"for":"htmlFor","class":F}:{"htmlFor":"for","className":g},get:function(y){var AA,Y,z,x,G;if(y){if(y[l]||y.item){return y;}if(typeof y==="string"){AA=y;y=K.getElementById(y);if(y&&y.id===AA){return y;}else{if(y&&K.all){y=null;Y=K.all[AA];for(x=0,G=Y.length;x<G;++x){if(Y[x].id===AA){return Y[x];}}}}return y;}if(y.DOM_EVENTS){y=y.get("element");}if("length" in y){z=[];for(x=0,G=y.length;x<G;++x){z[z.length]=E.Dom.get(y[x]);}return z;}return y;}return null;},getComputedStyle:function(G,Y){if(window[w]){return G[e][n][w](G,null)[Y];}else{if(G[a]){return E.Dom.IE_ComputedStyle.get(G,Y);}}},getStyle:function(G,Y){return E.Dom.batch(G,E.Dom._getStyle,Y);},_getStyle:function(){if(window[w]){return function(G,y){y=(y==="float")?y="cssFloat":E.Dom._toCamel(y);var x=G.style[y],Y;if(!x){Y=G[e][n][w](G,null);if(Y){x=Y[y];}}return x;};}else{if(W[a]){return function(G,y){var x;switch(y){case"opacity":x=100;try{x=G.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(z){try{x=G.filters("alpha").opacity;}catch(Y){}}return x/100;case"float":y="styleFloat";default:y=E.Dom._toCamel(y);x=G[a]?G[a][y]:null;return(G.style[y]||x);}};}}}(),setStyle:function(G,Y,x){E.Dom.batch(G,E.Dom._setStyle,{prop:Y,val:x});},_setStyle:function(){if(T){return function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){switch(x){case"opacity":if(L.isString(Y.style.filter)){Y.style.filter="alpha(opacity="+y*100+")";if(!Y[a]||!Y[a].hasLayout){Y.style.zoom=1;}}break;case"float":x="styleFloat";default:Y.style[x]=y;}}else{}};}else{return function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){if(x=="float"){x="cssFloat";}Y.style[x]=y;}else{}};}}(),getXY:function(G){return E.Dom.batch(G,E.Dom._getXY);},_canPosition:function(G){return(E.Dom._getStyle(G,"display")!=="none"&&E.Dom._inDoc(G));},_getXY:function(){if(K[v][Q]){return function(y){var z,Y,AA,AF,AE,AD,AC,G,x,AB=Math.floor,AG=false;if(E.Dom._canPosition(y)){AA=y[Q]();AF=y[e];z=E.Dom.getDocumentScrollLeft(AF);Y=E.Dom.getDocumentScrollTop(AF);AG=[AB(AA[j]),AB(AA[o])];if(T&&m.ie<8){AE=2;AD=2;AC=AF[t];G=S(AF[v],q);x=S(AF[v],R);if(m.ie===6){if(AC!==c){AE=0;AD=0;}}if((AC==c)){if(G!==r){AE=parseInt(G,10);}if(x!==r){AD=parseInt(x,10);}}AG[0]-=AE;AG[1]-=AD;}if((Y||z)){AG[0]+=z;AG[1]+=Y;}AG[0]=AB(AG[0]);AG[1]=AB(AG[1]);}else{}return AG;};}else{return function(y){var x,Y,AA,AB,AC,z=false,G=y;if(E.Dom._canPosition(y)){z=[y[b],y[P]];x=E.Dom.getDocumentScrollLeft(y[e]);Y=E.Dom.getDocumentScrollTop(y[e]);AC=((H||m.webkit>519)?true:false);while((G=G[u])){z[0]+=G[b];z[1]+=G[P];if(AC){z=E.Dom._calcBorders(G,z);}}if(E.Dom._getStyle(y,p)!==f){G=y;while((G=G[Z])&&G[C]){AA=G[i];AB=G[O];if(H&&(E.Dom._getStyle(G,"overflow")!=="visible")){z=E.Dom._calcBorders(G,z);}if(AA||AB){z[0]-=AB;z[1]-=AA;}}z[0]+=x;z[1]+=Y;}else{if(D){z[0]-=x;z[1]-=Y;}else{if(I||H){z[0]+=x;z[1]+=Y;}}}z[0]=Math.floor(z[0]);z[1]=Math.floor(z[1]);}else{}return z;};}}(),getX:function(G){var Y=function(x){return E.Dom.getXY(x)[0];};return E.Dom.batch(G,Y,E.Dom,true);},getY:function(G){var Y=function(x){return E.Dom.getXY(x)[1];};return E.Dom.batch(G,Y,E.Dom,true);},setXY:function(G,x,Y){E.Dom.batch(G,E.Dom._setXY,{pos:x,noRetry:Y});},_setXY:function(G,z){var AA=E.Dom._getStyle(G,p),y=E.Dom.setStyle,AD=z.pos,Y=z.noRetry,AB=[parseInt(E.Dom.getComputedStyle(G,j),10),parseInt(E.Dom.getComputedStyle(G,o),10)],AC,x;if(AA=="static"){AA=V;y(G,p,AA);}AC=E.Dom._getXY(G);if(!AD||AC===false){return false;}if(isNaN(AB[0])){AB[0]=(AA==V)?0:G[b];}if(isNaN(AB[1])){AB[1]=(AA==V)?0:G[P];}if(AD[0]!==null){y(G,j,AD[0]-AC[0]+AB[0]+"px");}if(AD[1]!==null){y(G,o,AD[1]-AC[1]+AB[1]+"px");}if(!Y){x=E.Dom._getXY(G);if((AD[0]!==null&&x[0]!=AD[0])||(AD[1]!==null&&x[1]!=AD[1])){E.Dom._setXY(G,{pos:AD,noRetry:true});}}},setX:function(Y,G){E.Dom.setXY(Y,[G,null]);},setY:function(G,Y){E.Dom.setXY(G,[null,Y]);},getRegion:function(G){var Y=function(x){var y=false;if(E.Dom._canPosition(x)){y=E.Region.getRegion(x);}else{}return y;};return E.Dom.batch(G,Y,E.Dom,true);},getClientWidth:function(){return E.Dom.getViewportWidth();},getClientHeight:function(){return E.Dom.getViewportHeight();},getElementsByClassName:function(AB,AF,AC,AE,x,AD){AB=L.trim(AB);AF=AF||"*";AC=(AC)?E.Dom.get(AC):null||K;if(!AC){return[];}var Y=[],G=AC.getElementsByTagName(AF),z=E.Dom.hasClass;for(var y=0,AA=G.length;y<AA;++y){if(z(G[y],AB)){Y[Y.length]=G[y];}}if(AE){E.Dom.batch(Y,AE,x,AD);}return Y;},hasClass:function(Y,G){return E.Dom.batch(Y,E.Dom._hasClass,G);},_hasClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom.getAttribute(x,F)||J;if(Y.exec){G=Y.test(y);}else{G=Y&&(B+y+B).indexOf(B+Y+B)>-1;}}else{}return G;},addClass:function(Y,G){return E.Dom.batch(Y,E.Dom._addClass,G);},_addClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom.getAttribute(x,F)||J;if(!E.Dom._hasClass(x,Y)){E.Dom.setAttribute(x,F,A(y+B+Y));G=true;}}else{}return G;},removeClass:function(Y,G){return E.Dom.batch(Y,E.Dom._removeClass,G);},_removeClass:function(y,x){var Y=false,AA,z,G;if(y&&x){AA=E.Dom.getAttribute(y,F)||J;E.Dom.setAttribute(y,F,AA.replace(E.Dom._getClassRegex(x),J));z=E.Dom.getAttribute(y,F);if(AA!==z){E.Dom.setAttribute(y,F,A(z));Y=true;if(E.Dom.getAttribute(y,F)===""){G=(y.hasAttribute&&y.hasAttribute(g))?g:F;y.removeAttribute(G);}}}else{}return Y;},replaceClass:function(x,Y,G){return E.Dom.batch(x,E.Dom._replaceClass,{from:Y,to:G});
},_replaceClass:function(y,x){var Y,AB,AA,G=false,z;if(y&&x){AB=x.from;AA=x.to;if(!AA){G=false;}else{if(!AB){G=E.Dom._addClass(y,x.to);}else{if(AB!==AA){z=E.Dom.getAttribute(y,F)||J;Y=(B+z.replace(E.Dom._getClassRegex(AB),B+AA)).split(E.Dom._getClassRegex(AA));Y.splice(1,0,B+AA);E.Dom.setAttribute(y,F,A(Y.join(J)));G=true;}}}}else{}return G;},generateId:function(G,x){x=x||"yui-gen";var Y=function(y){if(y&&y.id){return y.id;}var z=x+YAHOO.env._id_counter++;if(y){if(y[e].getElementById(z)){return E.Dom.generateId(y,z+x);}y.id=z;}return z;};return E.Dom.batch(G,Y,E.Dom,true)||Y.apply(E.Dom,arguments);},isAncestor:function(Y,x){Y=E.Dom.get(Y);x=E.Dom.get(x);var G=false;if((Y&&x)&&(Y[l]&&x[l])){if(Y.contains&&Y!==x){G=Y.contains(x);}else{if(Y.compareDocumentPosition){G=!!(Y.compareDocumentPosition(x)&16);}}}else{}return G;},inDocument:function(G,Y){return E.Dom._inDoc(E.Dom.get(G),Y);},_inDoc:function(Y,x){var G=false;if(Y&&Y[C]){x=x||Y[e];G=E.Dom.isAncestor(x[v],Y);}else{}return G;},getElementsBy:function(Y,AF,AB,AD,y,AC,AE){AF=AF||"*";AB=(AB)?E.Dom.get(AB):null||K;if(!AB){return[];}var x=[],G=AB.getElementsByTagName(AF);for(var z=0,AA=G.length;z<AA;++z){if(Y(G[z])){if(AE){x=G[z];break;}else{x[x.length]=G[z];}}}if(AD){E.Dom.batch(x,AD,y,AC);}return x;},getElementBy:function(x,G,Y){return E.Dom.getElementsBy(x,G,Y,null,null,null,true);},batch:function(x,AB,AA,z){var y=[],Y=(z)?AA:window;x=(x&&(x[C]||x.item))?x:E.Dom.get(x);if(x&&AB){if(x[C]||x.length===undefined){return AB.call(Y,x,AA);}for(var G=0;G<x.length;++G){y[y.length]=AB.call(Y,x[G],AA);}}else{return false;}return y;},getDocumentHeight:function(){var Y=(K[t]!=M||I)?K.body.scrollHeight:W.scrollHeight,G=Math.max(Y,E.Dom.getViewportHeight());return G;},getDocumentWidth:function(){var Y=(K[t]!=M||I)?K.body.scrollWidth:W.scrollWidth,G=Math.max(Y,E.Dom.getViewportWidth());return G;},getViewportHeight:function(){var G=self.innerHeight,Y=K[t];if((Y||T)&&!D){G=(Y==M)?W.clientHeight:K.body.clientHeight;}return G;},getViewportWidth:function(){var G=self.innerWidth,Y=K[t];if(Y||T){G=(Y==M)?W.clientWidth:K.body.clientWidth;}return G;},getAncestorBy:function(G,Y){while((G=G[Z])){if(E.Dom._testElement(G,Y)){return G;}}return null;},getAncestorByClassName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return E.Dom.hasClass(y,G);};return E.Dom.getAncestorBy(Y,x);},getAncestorByTagName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return y[C]&&y[C].toUpperCase()==G.toUpperCase();};return E.Dom.getAncestorBy(Y,x);},getPreviousSiblingBy:function(G,Y){while(G){G=G.previousSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getPreviousSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getPreviousSiblingBy(G);},getNextSiblingBy:function(G,Y){while(G){G=G.nextSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getNextSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getNextSiblingBy(G);},getFirstChildBy:function(G,x){var Y=(E.Dom._testElement(G.firstChild,x))?G.firstChild:null;return Y||E.Dom.getNextSiblingBy(G.firstChild,x);},getFirstChild:function(G,Y){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getFirstChildBy(G);},getLastChildBy:function(G,x){if(!G){return null;}var Y=(E.Dom._testElement(G.lastChild,x))?G.lastChild:null;return Y||E.Dom.getPreviousSiblingBy(G.lastChild,x);},getLastChild:function(G){G=E.Dom.get(G);return E.Dom.getLastChildBy(G);},getChildrenBy:function(Y,y){var x=E.Dom.getFirstChildBy(Y,y),G=x?[x]:[];E.Dom.getNextSiblingBy(x,function(z){if(!y||y(z)){G[G.length]=z;}return false;});return G;},getChildren:function(G){G=E.Dom.get(G);if(!G){}return E.Dom.getChildrenBy(G);},getDocumentScrollLeft:function(G){G=G||K;return Math.max(G[v].scrollLeft,G.body.scrollLeft);},getDocumentScrollTop:function(G){G=G||K;return Math.max(G[v].scrollTop,G.body.scrollTop);},insertBefore:function(Y,G){Y=E.Dom.get(Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}return G[Z].insertBefore(Y,G);},insertAfter:function(Y,G){Y=E.Dom.get(Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}if(G.nextSibling){return G[Z].insertBefore(Y,G.nextSibling);}else{return G[Z].appendChild(Y);}},getClientRegion:function(){var x=E.Dom.getDocumentScrollTop(),Y=E.Dom.getDocumentScrollLeft(),y=E.Dom.getViewportWidth()+Y,G=E.Dom.getViewportHeight()+x;return new E.Region(x,y,G,Y);},setAttribute:function(Y,G,x){G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;Y.setAttribute(G,x);},getAttribute:function(Y,G){G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;return Y.getAttribute(G);},_toCamel:function(Y){var x=d;function G(y,z){return z.toUpperCase();}return x[Y]||(x[Y]=Y.indexOf("-")===-1?Y:Y.replace(/-([a-z])/gi,G));},_getClassRegex:function(Y){var G;if(Y!==undefined){if(Y.exec){G=Y;}else{G=h[Y];if(!G){Y=Y.replace(E.Dom._patterns.CLASS_RE_TOKENS,"\\$1");G=h[Y]=new RegExp(s+Y+k,U);}}}return G;},_patterns:{ROOT_TAG:/^body|html$/i,CLASS_RE_TOKENS:/([\.\(\)\^\$\*\+\?\|\[\]\{\}])/g},_testElement:function(G,Y){return G&&G[l]==1&&(!Y||Y(G));},_calcBorders:function(x,y){var Y=parseInt(E.Dom[w](x,R),10)||0,G=parseInt(E.Dom[w](x,q),10)||0;if(H){if(N.test(x[C])){Y=0;G=0;}}y[0]+=G;y[1]+=Y;return y;}};var S=E.Dom[w];if(m.opera){E.Dom[w]=function(Y,G){var x=S(Y,G);if(X.test(G)){x=E.Dom.Color.toRGB(x);}return x;};}if(m.webkit){E.Dom[w]=function(Y,G){var x=S(Y,G);if(x==="rgba(0, 0, 0, 0)"){x="transparent";}return x;};}})();YAHOO.util.Region=function(C,D,A,B){this.top=C;this.y=C;this[1]=C;this.right=D;this.bottom=A;this.left=B;this.x=B;this[0]=B;this.width=this.right-this.left;this.height=this.bottom-this.top;};YAHOO.util.Region.prototype.contains=function(A){return(A.left>=this.left&&A.right<=this.right&&A.top>=this.top&&A.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(E){var C=Math.max(this.top,E.top),D=Math.min(this.right,E.right),A=Math.min(this.bottom,E.bottom),B=Math.max(this.left,E.left);if(A>=C&&D>=B){return new YAHOO.util.Region(C,D,A,B);
}else{return null;}};YAHOO.util.Region.prototype.union=function(E){var C=Math.min(this.top,E.top),D=Math.max(this.right,E.right),A=Math.max(this.bottom,E.bottom),B=Math.min(this.left,E.left);return new YAHOO.util.Region(C,D,A,B);};YAHOO.util.Region.prototype.toString=function(){return("Region {"+"top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+", height: "+this.height+", width: "+this.width+"}");};YAHOO.util.Region.getRegion=function(D){var F=YAHOO.util.Dom.getXY(D),C=F[1],E=F[0]+D.offsetWidth,A=F[1]+D.offsetHeight,B=F[0];return new YAHOO.util.Region(C,E,A,B);};YAHOO.util.Point=function(A,B){if(YAHOO.lang.isArray(A)){B=A[1];A=A[0];}YAHOO.util.Point.superclass.constructor.call(this,B,A,B,A);};YAHOO.extend(YAHOO.util.Point,YAHOO.util.Region);(function(){var B=YAHOO.util,A="clientTop",F="clientLeft",J="parentNode",K="right",W="hasLayout",I="px",U="opacity",L="auto",D="borderLeftWidth",G="borderTopWidth",P="borderRightWidth",V="borderBottomWidth",S="visible",Q="transparent",N="height",E="width",H="style",T="currentStyle",R=/^width|height$/,O=/^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,M={get:function(X,Z){var Y="",a=X[T][Z];if(Z===U){Y=B.Dom.getStyle(X,U);}else{if(!a||(a.indexOf&&a.indexOf(I)>-1)){Y=a;}else{if(B.Dom.IE_COMPUTED[Z]){Y=B.Dom.IE_COMPUTED[Z](X,Z);}else{if(O.test(a)){Y=B.Dom.IE.ComputedStyle.getPixel(X,Z);}else{Y=a;}}}}return Y;},getOffset:function(Z,e){var b=Z[T][e],X=e.charAt(0).toUpperCase()+e.substr(1),c="offset"+X,Y="pixel"+X,a="",d;if(b==L){d=Z[c];if(d===undefined){a=0;}a=d;if(R.test(e)){Z[H][e]=d;if(Z[c]>d){a=d-(Z[c]-d);}Z[H][e]=L;}}else{if(!Z[H][Y]&&!Z[H][e]){Z[H][e]=b;}a=Z[H][Y];}return a+I;},getBorderWidth:function(X,Z){var Y=null;if(!X[T][W]){X[H].zoom=1;}switch(Z){case G:Y=X[A];break;case V:Y=X.offsetHeight-X.clientHeight-X[A];break;case D:Y=X[F];break;case P:Y=X.offsetWidth-X.clientWidth-X[F];break;}return Y+I;},getPixel:function(Y,X){var a=null,b=Y[T][K],Z=Y[T][X];Y[H][K]=Z;a=Y[H].pixelRight;Y[H][K]=b;return a+I;},getMargin:function(Y,X){var Z;if(Y[T][X]==L){Z=0+I;}else{Z=B.Dom.IE.ComputedStyle.getPixel(Y,X);}return Z;},getVisibility:function(Y,X){var Z;while((Z=Y[T])&&Z[X]=="inherit"){Y=Y[J];}return(Z)?Z[X]:S;},getColor:function(Y,X){return B.Dom.Color.toRGB(Y[T][X])||Q;},getBorderColor:function(Y,X){var Z=Y[T],a=Z[X]||Z.color;return B.Dom.Color.toRGB(B.Dom.Color.toHex(a));}},C={};C.top=C.right=C.bottom=C.left=C[E]=C[N]=M.getOffset;C.color=M.getColor;C[G]=C[P]=C[V]=C[D]=M.getBorderWidth;C.marginTop=C.marginRight=C.marginBottom=C.marginLeft=M.getMargin;C.visibility=M.getVisibility;C.borderColor=C.borderTopColor=C.borderRightColor=C.borderBottomColor=C.borderLeftColor=M.getBorderColor;B.Dom.IE_COMPUTED=C;B.Dom.IE_ComputedStyle=M;})();(function(){var C="toString",A=parseInt,B=RegExp,D=YAHOO.util;D.Dom.Color={KEYWORDS:{black:"000",silver:"c0c0c0",gray:"808080",white:"fff",maroon:"800000",red:"f00",purple:"800080",fuchsia:"f0f",green:"008000",lime:"0f0",olive:"808000",yellow:"ff0",navy:"000080",blue:"00f",teal:"008080",aqua:"0ff"},re_RGB:/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,re_hex:/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,re_hex3:/([0-9A-F])/gi,toRGB:function(E){if(!D.Dom.Color.re_RGB.test(E)){E=D.Dom.Color.toHex(E);}if(D.Dom.Color.re_hex.exec(E)){E="rgb("+[A(B.$1,16),A(B.$2,16),A(B.$3,16)].join(", ")+")";}return E;},toHex:function(H){H=D.Dom.Color.KEYWORDS[H]||H;if(D.Dom.Color.re_RGB.exec(H)){var G=(B.$1.length===1)?"0"+B.$1:Number(B.$1),F=(B.$2.length===1)?"0"+B.$2:Number(B.$2),E=(B.$3.length===1)?"0"+B.$3:Number(B.$3);H=[G[C](16),F[C](16),E[C](16)].join("");}if(H.length<6){H=H.replace(D.Dom.Color.re_hex3,"$1$1");}if(H!=="transparent"&&H.indexOf("#")<0){H="#"+H;}return H.toLowerCase();}};}());YAHOO.register("dom",YAHOO.util.Dom,{version:"2.7.0",build:"1796"});YAHOO.util.CustomEvent=function(D,C,B,A){this.type=D;this.scope=C||window;this.silent=B;this.signature=A||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var E="_YUICEOnSubscribe";if(D!==E){this.subscribeEvent=new YAHOO.util.CustomEvent(E,this,true);}this.lastError=null;};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(A,B,C){if(!A){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(A,B,C);}this.subscribers.push(new YAHOO.util.Subscriber(A,B,C));},unsubscribe:function(D,F){if(!D){return this.unsubscribeAll();}var E=false;for(var B=0,A=this.subscribers.length;B<A;++B){var C=this.subscribers[B];if(C&&C.contains(D,F)){this._delete(B);E=true;}}return E;},fire:function(){this.lastError=null;var K=[],E=this.subscribers.length;if(!E&&this.silent){return true;}var I=[].slice.call(arguments,0),G=true,D,J=false;if(!this.silent){}var C=this.subscribers.slice(),A=YAHOO.util.Event.throwErrors;for(D=0;D<E;++D){var M=C[D];if(!M){J=true;}else{if(!this.silent){}var L=M.getScope(this.scope);if(this.signature==YAHOO.util.CustomEvent.FLAT){var B=null;if(I.length>0){B=I[0];}try{G=M.fn.call(L,B,M.obj);}catch(F){this.lastError=F;if(A){throw F;}}}else{try{G=M.fn.call(L,this.type,I,M.obj);}catch(H){this.lastError=H;if(A){throw H;}}}if(false===G){if(!this.silent){}break;}}}return(G!==false);},unsubscribeAll:function(){var A=this.subscribers.length,B;for(B=A-1;B>-1;B--){this._delete(B);}this.subscribers=[];return A;},_delete:function(A){var B=this.subscribers[A];if(B){delete B.fn;delete B.obj;}this.subscribers.splice(A,1);},toString:function(){return"CustomEvent: "+"'"+this.type+"', "+"context: "+this.scope;}};YAHOO.util.Subscriber=function(A,B,C){this.fn=A;this.obj=YAHOO.lang.isUndefined(B)?null:B;this.overrideContext=C;};YAHOO.util.Subscriber.prototype.getScope=function(A){if(this.overrideContext){if(this.overrideContext===true){return this.obj;}else{return this.overrideContext;}}return A;};YAHOO.util.Subscriber.prototype.contains=function(A,B){if(B){return(this.fn==A&&this.obj==B);}else{return(this.fn==A);}};YAHOO.util.Subscriber.prototype.toString=function(){return"Subscriber { obj: "+this.obj+", overrideContext: "+(this.overrideContext||"no")+" }";};if(!YAHOO.util.Event){YAHOO.util.Event=function(){var H=false;var I=[];var J=[];var G=[];var E=[];var C=0;var F=[];var B=[];var A=0;var D={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9};var K=YAHOO.env.ua.ie?"focusin":"focus";var L=YAHOO.env.ua.ie?"focusout":"blur";return{POLL_RETRYS:2000,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:YAHOO.env.ua.ie,_interval:null,_dri:null,DOMReady:false,throwErrors:false,startInterval:function(){if(!this._interval){var M=this;var N=function(){M._tryPreloadAttach();};this._interval=setInterval(N,this.POLL_INTERVAL);}},onAvailable:function(S,O,Q,R,P){var M=(YAHOO.lang.isString(S))?[S]:S;for(var N=0;N<M.length;N=N+1){F.push({id:M[N],fn:O,obj:Q,overrideContext:R,checkReady:P});}C=this.POLL_RETRYS;this.startInterval();},onContentReady:function(P,M,N,O){this.onAvailable(P,M,N,O,true);},onDOMReady:function(M,N,O){if(this.DOMReady){setTimeout(function(){var P=window;if(O){if(O===true){P=N;}else{P=O;}}M.call(P,"DOMReady",[],N);},0);}else{this.DOMReadyEvent.subscribe(M,N,O);}},_addListener:function(O,M,Y,S,W,b){if(!Y||!Y.call){return false;}if(this._isValidCollection(O)){var Z=true;for(var T=0,V=O.length;T<V;++T){Z=this.on(O[T],M,Y,S,W)&&Z;}return Z;}else{if(YAHOO.lang.isString(O)){var R=this.getEl(O);if(R){O=R;}else{this.onAvailable(O,function(){YAHOO.util.Event.on(O,M,Y,S,W);});return true;}}}if(!O){return false;}if("unload"==M&&S!==this){J[J.length]=[O,M,Y,S,W];return true;}var N=O;if(W){if(W===true){N=S;}else{N=W;}}var P=function(c){return Y.call(N,YAHOO.util.Event.getEvent(c,O),S);};var a=[O,M,Y,P,N,S,W];var U=I.length;I[U]=a;if(this.useLegacyEvent(O,M)){var Q=this.getLegacyIndex(O,M);if(Q==-1||O!=G[Q][0]){Q=G.length;B[O.id+M]=Q;G[Q]=[O,M,O["on"+M]];E[Q]=[];O["on"+M]=function(c){YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(c),Q);};}E[Q].push(a);}else{try{this._simpleAdd(O,M,P,b);}catch(X){this.lastError=X;this.removeListener(O,M,Y);return false;}}return true;},addListener:function(N,Q,M,O,P){return this._addListener(N,Q,M,O,P,false);},addFocusListener:function(N,M,O,P){return this._addListener(N,K,M,O,P,true);},removeFocusListener:function(N,M){return this.removeListener(N,K,M);},addBlurListener:function(N,M,O,P){return this._addListener(N,L,M,O,P,true);},removeBlurListener:function(N,M){return this.removeListener(N,L,M);},fireLegacyEvent:function(R,P){var T=true,M,V,U,N,S;V=E[P].slice();for(var O=0,Q=V.length;O<Q;++O){U=V[O];if(U&&U[this.WFN]){N=U[this.ADJ_SCOPE];S=U[this.WFN].call(N,R);T=(T&&S);}}M=G[P];if(M&&M[2]){M[2](R);}return T;},getLegacyIndex:function(N,O){var M=this.generateId(N)+O;if(typeof B[M]=="undefined"){return -1;}else{return B[M];}},useLegacyEvent:function(M,N){return(this.webkit&&this.webkit<419&&("click"==N||"dblclick"==N));},removeListener:function(N,M,V){var Q,T,X;if(typeof N=="string"){N=this.getEl(N);}else{if(this._isValidCollection(N)){var W=true;for(Q=N.length-1;Q>-1;Q--){W=(this.removeListener(N[Q],M,V)&&W);}return W;}}if(!V||!V.call){return this.purgeElement(N,false,M);}if("unload"==M){for(Q=J.length-1;Q>-1;Q--){X=J[Q];if(X&&X[0]==N&&X[1]==M&&X[2]==V){J.splice(Q,1);return true;}}return false;}var R=null;var S=arguments[3];if("undefined"===typeof S){S=this._getCacheIndex(N,M,V);}if(S>=0){R=I[S];}if(!N||!R){return false;}if(this.useLegacyEvent(N,M)){var P=this.getLegacyIndex(N,M);var O=E[P];if(O){for(Q=0,T=O.length;Q<T;++Q){X=O[Q];if(X&&X[this.EL]==N&&X[this.TYPE]==M&&X[this.FN]==V){O.splice(Q,1);break;}}}}else{try{this._simpleRemove(N,M,R[this.WFN],false);}catch(U){this.lastError=U;return false;}}delete I[S][this.WFN];delete I[S][this.FN];
I.splice(S,1);return true;},getTarget:function(O,N){var M=O.target||O.srcElement;return this.resolveTextNode(M);},resolveTextNode:function(N){try{if(N&&3==N.nodeType){return N.parentNode;}}catch(M){}return N;},getPageX:function(N){var M=N.pageX;if(!M&&0!==M){M=N.clientX||0;if(this.isIE){M+=this._getScrollLeft();}}return M;},getPageY:function(M){var N=M.pageY;if(!N&&0!==N){N=M.clientY||0;if(this.isIE){N+=this._getScrollTop();}}return N;},getXY:function(M){return[this.getPageX(M),this.getPageY(M)];},getRelatedTarget:function(N){var M=N.relatedTarget;if(!M){if(N.type=="mouseout"){M=N.toElement;}else{if(N.type=="mouseover"){M=N.fromElement;}}}return this.resolveTextNode(M);},getTime:function(O){if(!O.time){var N=new Date().getTime();try{O.time=N;}catch(M){this.lastError=M;return N;}}return O.time;},stopEvent:function(M){this.stopPropagation(M);this.preventDefault(M);},stopPropagation:function(M){if(M.stopPropagation){M.stopPropagation();}else{M.cancelBubble=true;}},preventDefault:function(M){if(M.preventDefault){M.preventDefault();}else{M.returnValue=false;}},getEvent:function(O,M){var N=O||window.event;if(!N){var P=this.getEvent.caller;while(P){N=P.arguments[0];if(N&&Event==N.constructor){break;}P=P.caller;}}return N;},getCharCode:function(N){var M=N.keyCode||N.charCode||0;if(YAHOO.env.ua.webkit&&(M in D)){M=D[M];}return M;},_getCacheIndex:function(Q,R,P){for(var O=0,N=I.length;O<N;O=O+1){var M=I[O];if(M&&M[this.FN]==P&&M[this.EL]==Q&&M[this.TYPE]==R){return O;}}return -1;},generateId:function(M){var N=M.id;if(!N){N="yuievtautoid-"+A;++A;M.id=N;}return N;},_isValidCollection:function(N){try{return(N&&typeof N!=="string"&&N.length&&!N.tagName&&!N.alert&&typeof N[0]!=="undefined");}catch(M){return false;}},elCache:{},getEl:function(M){return(typeof M==="string")?document.getElementById(M):M;},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady",this),_load:function(N){if(!H){H=true;var M=YAHOO.util.Event;M._ready();M._tryPreloadAttach();}},_ready:function(N){var M=YAHOO.util.Event;if(!M.DOMReady){M.DOMReady=true;M.DOMReadyEvent.fire();M._simpleRemove(document,"DOMContentLoaded",M._ready);}},_tryPreloadAttach:function(){if(F.length===0){C=0;if(this._interval){clearInterval(this._interval);this._interval=null;}return;}if(this.locked){return;}if(this.isIE){if(!this.DOMReady){this.startInterval();return;}}this.locked=true;var S=!H;if(!S){S=(C>0&&F.length>0);}var R=[];var T=function(V,W){var U=V;if(W.overrideContext){if(W.overrideContext===true){U=W.obj;}else{U=W.overrideContext;}}W.fn.call(U,W.obj);};var N,M,Q,P,O=[];for(N=0,M=F.length;N<M;N=N+1){Q=F[N];if(Q){P=this.getEl(Q.id);if(P){if(Q.checkReady){if(H||P.nextSibling||!S){O.push(Q);F[N]=null;}}else{T(P,Q);F[N]=null;}}else{R.push(Q);}}}for(N=0,M=O.length;N<M;N=N+1){Q=O[N];T(this.getEl(Q.id),Q);}C--;if(S){for(N=F.length-1;N>-1;N--){Q=F[N];if(!Q||!Q.id){F.splice(N,1);}}this.startInterval();}else{if(this._interval){clearInterval(this._interval);this._interval=null;}}this.locked=false;},purgeElement:function(Q,R,T){var O=(YAHOO.lang.isString(Q))?this.getEl(Q):Q;var S=this.getListeners(O,T),P,M;if(S){for(P=S.length-1;P>-1;P--){var N=S[P];this.removeListener(O,N.type,N.fn);}}if(R&&O&&O.childNodes){for(P=0,M=O.childNodes.length;P<M;++P){this.purgeElement(O.childNodes[P],R,T);}}},getListeners:function(O,M){var R=[],N;if(!M){N=[I,J];}else{if(M==="unload"){N=[J];}else{N=[I];}}var T=(YAHOO.lang.isString(O))?this.getEl(O):O;for(var Q=0;Q<N.length;Q=Q+1){var V=N[Q];if(V){for(var S=0,U=V.length;S<U;++S){var P=V[S];if(P&&P[this.EL]===T&&(!M||M===P[this.TYPE])){R.push({type:P[this.TYPE],fn:P[this.FN],obj:P[this.OBJ],adjust:P[this.OVERRIDE],scope:P[this.ADJ_SCOPE],index:S});}}}}return(R.length)?R:null;},_unload:function(T){var N=YAHOO.util.Event,Q,P,O,S,R,U=J.slice(),M;for(Q=0,S=J.length;Q<S;++Q){O=U[Q];if(O){M=window;if(O[N.ADJ_SCOPE]){if(O[N.ADJ_SCOPE]===true){M=O[N.UNLOAD_OBJ];}else{M=O[N.ADJ_SCOPE];}}O[N.FN].call(M,N.getEvent(T,O[N.EL]),O[N.UNLOAD_OBJ]);U[Q]=null;}}O=null;M=null;J=null;if(I){for(P=I.length-1;P>-1;P--){O=I[P];if(O){N.removeListener(O[N.EL],O[N.TYPE],O[N.FN],P);}}O=null;}G=null;N._simpleRemove(window,"unload",N._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var M=document.documentElement,N=document.body;if(M&&(M.scrollTop||M.scrollLeft)){return[M.scrollTop,M.scrollLeft];}else{if(N){return[N.scrollTop,N.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(O,P,N,M){O.addEventListener(P,N,(M));};}else{if(window.attachEvent){return function(O,P,N,M){O.attachEvent("on"+P,N);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(O,P,N,M){O.removeEventListener(P,N,(M));};}else{if(window.detachEvent){return function(N,O,M){N.detachEvent("on"+O,M);};}else{return function(){};}}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;EU.onFocus=EU.addFocusListener;EU.onBlur=EU.addBlurListener;
/* DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller */
if(EU.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var n=document.createElement("p");EU._dri=setInterval(function(){try{n.doScroll("left");clearInterval(EU._dri);EU._dri=null;EU._ready();n=null;}catch(ex){}},EU.POLL_INTERVAL);}else{if(EU.webkit&&EU.webkit<525){EU._dri=setInterval(function(){var rs=document.readyState;if("loaded"==rs||"complete"==rs){clearInterval(EU._dri);EU._dri=null;EU._ready();}},EU.POLL_INTERVAL);}else{EU._simpleAdd(document,"DOMContentLoaded",EU._ready);}}EU._simpleAdd(window,"load",EU._load);EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[A];if(D){D.subscribe(C,F,E);
}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,overrideContext:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=this.__yui_events||{};var A=D||{};var I=this.__yui_events;if(I[G]){}else{var H=A.scope||this;var E=(A.silent);var B=new YAHOO.util.CustomEvent(G,H,E,YAHOO.util.CustomEvent.FLAT);I[G]=B;if(A.onSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var F=this.__yui_subscribers[G];if(F){for(var C=0;C<F.length;++C){B.subscribe(F[C].fn,F[C].obj,F[C].overrideContext);}}}return I[G];},fireEvent:function(E,D,A,C){this.__yui_events=this.__yui_events||{};var G=this.__yui_events[E];if(!G){return null;}var B=[];for(var F=1;F<arguments.length;++F){B.push(arguments[F]);}return G.fire.apply(G,B);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};(function(){var A=YAHOO.util.Event,C=YAHOO.lang;YAHOO.util.KeyListener=function(D,I,E,F){if(!D){}else{if(!I){}else{if(!E){}}}if(!F){F=YAHOO.util.KeyListener.KEYDOWN;}var G=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(C.isString(D)){D=document.getElementById(D);}if(C.isFunction(E)){G.subscribe(E);}else{G.subscribe(E.fn,E.scope,E.correctScope);}function H(O,N){if(!I.shift){I.shift=false;}if(!I.alt){I.alt=false;}if(!I.ctrl){I.ctrl=false;}if(O.shiftKey==I.shift&&O.altKey==I.alt&&O.ctrlKey==I.ctrl){var J,M=I.keys,L;if(YAHOO.lang.isArray(M)){for(var K=0;K<M.length;K++){J=M[K];L=A.getCharCode(O);if(J==L){G.fire(L,O);break;}}}else{L=A.getCharCode(O);if(M==L){G.fire(L,O);}}}}this.enable=function(){if(!this.enabled){A.on(D,F,H);this.enabledEvent.fire(I);}this.enabled=true;};this.disable=function(){if(this.enabled){A.removeListener(D,F,H);this.disabledEvent.fire(I);}this.enabled=false;};this.toString=function(){return"KeyListener ["+I.keys+"] "+D.tagName+(D.id?"["+D.id+"]":"");};};var B=YAHOO.util.KeyListener;B.KEYDOWN="keydown";B.KEYUP="keyup";B.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};})();YAHOO.register("event",YAHOO.util.Event,{version:"2.7.0",build:"1796"});YAHOO.register("yuiloader-dom-event", YAHOO, {version: "2.7.0", build: "1796"});

;/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.7.0
*/
YAHOO.util.Connect={_msxml_progid:["Microsoft.XMLHTTP","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP"],_http_headers:{},_has_http_headers:false,_use_default_post_header:true,_default_post_header:"application/x-www-form-urlencoded; charset=UTF-8",_default_form_header:"application/x-www-form-urlencoded",_use_default_xhr_header:true,_default_xhr_header:"XMLHttpRequest",_has_default_headers:true,_default_headers:{},_isFormSubmit:false,_isFileUpload:false,_formNode:null,_sFormData:null,_poll:{},_timeOut:{},_polling_interval:50,_transaction_id:0,_submitElementValue:null,_hasSubmitListener:(function(){if(YAHOO.util.Event){YAHOO.util.Event.addListener(document,"click",function(C){var B=YAHOO.util.Event.getTarget(C),A=B.nodeName.toLowerCase();if((A==="input"||A==="button")&&(B.type&&B.type.toLowerCase()=="submit")){YAHOO.util.Connect._submitElementValue=encodeURIComponent(B.name)+"="+encodeURIComponent(B.value);}});return true;}return false;})(),startEvent:new YAHOO.util.CustomEvent("start"),completeEvent:new YAHOO.util.CustomEvent("complete"),successEvent:new YAHOO.util.CustomEvent("success"),failureEvent:new YAHOO.util.CustomEvent("failure"),uploadEvent:new YAHOO.util.CustomEvent("upload"),abortEvent:new YAHOO.util.CustomEvent("abort"),_customEvents:{onStart:["startEvent","start"],onComplete:["completeEvent","complete"],onSuccess:["successEvent","success"],onFailure:["failureEvent","failure"],onUpload:["uploadEvent","upload"],onAbort:["abortEvent","abort"]},setProgId:function(A){this._msxml_progid.unshift(A);},setDefaultPostHeader:function(A){if(typeof A=="string"){this._default_post_header=A;}else{if(typeof A=="boolean"){this._use_default_post_header=A;}}},setDefaultXhrHeader:function(A){if(typeof A=="string"){this._default_xhr_header=A;}else{this._use_default_xhr_header=A;}},setPollingInterval:function(A){if(typeof A=="number"&&isFinite(A)){this._polling_interval=A;}},createXhrObject:function(F){var E,A;try{A=new XMLHttpRequest();E={conn:A,tId:F};}catch(D){for(var B=0;B<this._msxml_progid.length;++B){try{A=new ActiveXObject(this._msxml_progid[B]);E={conn:A,tId:F};break;}catch(C){}}}finally{return E;}},getConnectionObject:function(A){var C;var D=this._transaction_id;try{if(!A){C=this.createXhrObject(D);}else{C={};C.tId=D;C.isUpload=true;}if(C){this._transaction_id++;}}catch(B){}finally{return C;}},asyncRequest:function(F,C,E,A){var D=(this._isFileUpload)?this.getConnectionObject(true):this.getConnectionObject();var B=(E&&E.argument)?E.argument:null;if(!D){return null;}else{if(E&&E.customevents){this.initCustomEvents(D,E);}if(this._isFormSubmit){if(this._isFileUpload){this.uploadFile(D,E,C,A);return D;}if(F.toUpperCase()=="GET"){if(this._sFormData.length!==0){C+=((C.indexOf("?")==-1)?"?":"&")+this._sFormData;}}else{if(F.toUpperCase()=="POST"){A=A?this._sFormData+"&"+A:this._sFormData;}}}if(F.toUpperCase()=="GET"&&(E&&E.cache===false)){C+=((C.indexOf("?")==-1)?"?":"&")+"rnd="+new Date().valueOf().toString();}D.conn.open(F,C,true);if(this._use_default_xhr_header){if(!this._default_headers["X-Requested-With"]){this.initHeader("X-Requested-With",this._default_xhr_header,true);}}if((F.toUpperCase()==="POST"&&this._use_default_post_header)&&this._isFormSubmit===false){this.initHeader("Content-Type",this._default_post_header);}if(this._has_default_headers||this._has_http_headers){this.setHeader(D);}this.handleReadyState(D,E);D.conn.send(A||"");if(this._isFormSubmit===true){this.resetFormState();}this.startEvent.fire(D,B);if(D.startEvent){D.startEvent.fire(D,B);}return D;}},initCustomEvents:function(A,C){var B;for(B in C.customevents){if(this._customEvents[B][0]){A[this._customEvents[B][0]]=new YAHOO.util.CustomEvent(this._customEvents[B][1],(C.scope)?C.scope:null);A[this._customEvents[B][0]].subscribe(C.customevents[B]);}}},handleReadyState:function(C,D){var B=this;var A=(D&&D.argument)?D.argument:null;if(D&&D.timeout){this._timeOut[C.tId]=window.setTimeout(function(){B.abort(C,D,true);},D.timeout);}this._poll[C.tId]=window.setInterval(function(){if(C.conn&&C.conn.readyState===4){window.clearInterval(B._poll[C.tId]);delete B._poll[C.tId];if(D&&D.timeout){window.clearTimeout(B._timeOut[C.tId]);delete B._timeOut[C.tId];}B.completeEvent.fire(C,A);if(C.completeEvent){C.completeEvent.fire(C,A);}B.handleTransactionResponse(C,D);}},this._polling_interval);},handleTransactionResponse:function(F,G,A){var D,C;var B=(G&&G.argument)?G.argument:null;try{if(F.conn.status!==undefined&&F.conn.status!==0){D=F.conn.status;}else{D=13030;}}catch(E){D=13030;}if(D>=200&&D<300||D===1223){C=this.createResponseObject(F,B);if(G&&G.success){if(!G.scope){G.success(C);}else{G.success.apply(G.scope,[C]);}}this.successEvent.fire(C);if(F.successEvent){F.successEvent.fire(C);}}else{switch(D){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:C=this.createExceptionObject(F.tId,B,(A?A:false));if(G&&G.failure){if(!G.scope){G.failure(C);}else{G.failure.apply(G.scope,[C]);}}break;default:C=this.createResponseObject(F,B);if(G&&G.failure){if(!G.scope){G.failure(C);}else{G.failure.apply(G.scope,[C]);}}}this.failureEvent.fire(C);if(F.failureEvent){F.failureEvent.fire(C);}}this.releaseObject(F);C=null;},createResponseObject:function(A,G){var D={};var I={};try{var C=A.conn.getAllResponseHeaders();var F=C.split("\n");for(var E=0;E<F.length;E++){var B=F[E].indexOf(":");if(B!=-1){I[F[E].substring(0,B)]=F[E].substring(B+2);}}}catch(H){}D.tId=A.tId;D.status=(A.conn.status==1223)?204:A.conn.status;D.statusText=(A.conn.status==1223)?"No Content":A.conn.statusText;D.getResponseHeader=I;D.getAllResponseHeaders=C;D.responseText=A.conn.responseText;D.responseXML=A.conn.responseXML;if(G){D.argument=G;}return D;},createExceptionObject:function(H,D,A){var F=0;var G="communication failure";var C=-1;var B="transaction aborted";var E={};E.tId=H;if(A){E.status=C;E.statusText=B;}else{E.status=F;E.statusText=G;}if(D){E.argument=D;}return E;},initHeader:function(A,D,C){var B=(C)?this._default_headers:this._http_headers;B[A]=D;if(C){this._has_default_headers=true;
}else{this._has_http_headers=true;}},setHeader:function(A){var B;if(this._has_default_headers){for(B in this._default_headers){if(YAHOO.lang.hasOwnProperty(this._default_headers,B)){A.conn.setRequestHeader(B,this._default_headers[B]);}}}if(this._has_http_headers){for(B in this._http_headers){if(YAHOO.lang.hasOwnProperty(this._http_headers,B)){A.conn.setRequestHeader(B,this._http_headers[B]);}}delete this._http_headers;this._http_headers={};this._has_http_headers=false;}},resetDefaultHeaders:function(){delete this._default_headers;this._default_headers={};this._has_default_headers=false;},setForm:function(M,H,C){var L,B,K,I,P,J=false,F=[],O=0,E,G,D,N,A;this.resetFormState();if(typeof M=="string"){L=(document.getElementById(M)||document.forms[M]);}else{if(typeof M=="object"){L=M;}else{return;}}if(H){this.createFrame(C?C:null);this._isFormSubmit=true;this._isFileUpload=true;this._formNode=L;return;}for(E=0,G=L.elements.length;E<G;++E){B=L.elements[E];P=B.disabled;K=B.name;if(!P&&K){K=encodeURIComponent(K)+"=";I=encodeURIComponent(B.value);switch(B.type){case"select-one":if(B.selectedIndex>-1){A=B.options[B.selectedIndex];F[O++]=K+encodeURIComponent((A.attributes.value&&A.attributes.value.specified)?A.value:A.text);}break;case"select-multiple":if(B.selectedIndex>-1){for(D=B.selectedIndex,N=B.options.length;D<N;++D){A=B.options[D];if(A.selected){F[O++]=K+encodeURIComponent((A.attributes.value&&A.attributes.value.specified)?A.value:A.text);}}}break;case"radio":case"checkbox":if(B.checked){F[O++]=K+I;}break;case"file":case undefined:case"reset":case"button":break;case"submit":if(J===false){if(this._hasSubmitListener&&this._submitElementValue){F[O++]=this._submitElementValue;}J=true;}break;default:F[O++]=K+I;}}}this._isFormSubmit=true;this._sFormData=F.join("&");this.initHeader("Content-Type",this._default_form_header);return this._sFormData;},resetFormState:function(){this._isFormSubmit=false;this._isFileUpload=false;this._formNode=null;this._sFormData="";},createFrame:function(A){var B="yuiIO"+this._transaction_id;var C;if(YAHOO.env.ua.ie){C=document.createElement('<iframe id="'+B+'" name="'+B+'" />');if(typeof A=="boolean"){C.src="javascript:false";}}else{C=document.createElement("iframe");C.id=B;C.name=B;}C.style.position="absolute";C.style.top="-1000px";C.style.left="-1000px";document.body.appendChild(C);},appendPostData:function(A){var D=[],B=A.split("&"),C,E;for(C=0;C<B.length;C++){E=B[C].indexOf("=");if(E!=-1){D[C]=document.createElement("input");D[C].type="hidden";D[C].name=decodeURIComponent(B[C].substring(0,E));D[C].value=decodeURIComponent(B[C].substring(E+1));this._formNode.appendChild(D[C]);}}return D;},uploadFile:function(D,N,E,C){var I="yuiIO"+D.tId,J="multipart/form-data",L=document.getElementById(I),O=this,K=(N&&N.argument)?N.argument:null,M,H,B,G;var A={action:this._formNode.getAttribute("action"),method:this._formNode.getAttribute("method"),target:this._formNode.getAttribute("target")};this._formNode.setAttribute("action",E);this._formNode.setAttribute("method","POST");this._formNode.setAttribute("target",I);if(YAHOO.env.ua.ie){this._formNode.setAttribute("encoding",J);}else{this._formNode.setAttribute("enctype",J);}if(C){M=this.appendPostData(C);}this._formNode.submit();this.startEvent.fire(D,K);if(D.startEvent){D.startEvent.fire(D,K);}if(N&&N.timeout){this._timeOut[D.tId]=window.setTimeout(function(){O.abort(D,N,true);},N.timeout);}if(M&&M.length>0){for(H=0;H<M.length;H++){this._formNode.removeChild(M[H]);}}for(B in A){if(YAHOO.lang.hasOwnProperty(A,B)){if(A[B]){this._formNode.setAttribute(B,A[B]);}else{this._formNode.removeAttribute(B);}}}this.resetFormState();var F=function(){if(N&&N.timeout){window.clearTimeout(O._timeOut[D.tId]);delete O._timeOut[D.tId];}O.completeEvent.fire(D,K);if(D.completeEvent){D.completeEvent.fire(D,K);}G={tId:D.tId,argument:N.argument};try{G.responseText=L.contentWindow.document.body?L.contentWindow.document.body.innerHTML:L.contentWindow.document.documentElement.textContent;G.responseXML=L.contentWindow.document.XMLDocument?L.contentWindow.document.XMLDocument:L.contentWindow.document;}catch(P){}if(N&&N.upload){if(!N.scope){N.upload(G);}else{N.upload.apply(N.scope,[G]);}}O.uploadEvent.fire(G);if(D.uploadEvent){D.uploadEvent.fire(G);}YAHOO.util.Event.removeListener(L,"load",F);setTimeout(function(){document.body.removeChild(L);O.releaseObject(D);},100);};YAHOO.util.Event.addListener(L,"load",F);},abort:function(E,G,A){var D;var B=(G&&G.argument)?G.argument:null;if(E&&E.conn){if(this.isCallInProgress(E)){E.conn.abort();window.clearInterval(this._poll[E.tId]);delete this._poll[E.tId];if(A){window.clearTimeout(this._timeOut[E.tId]);delete this._timeOut[E.tId];}D=true;}}else{if(E&&E.isUpload===true){var C="yuiIO"+E.tId;var F=document.getElementById(C);if(F){YAHOO.util.Event.removeListener(F,"load");document.body.removeChild(F);if(A){window.clearTimeout(this._timeOut[E.tId]);delete this._timeOut[E.tId];}D=true;}}else{D=false;}}if(D===true){this.abortEvent.fire(E,B);if(E.abortEvent){E.abortEvent.fire(E,B);}this.handleTransactionResponse(E,G,true);}return D;},isCallInProgress:function(B){if(B&&B.conn){return B.conn.readyState!==4&&B.conn.readyState!==0;}else{if(B&&B.isUpload===true){var A="yuiIO"+B.tId;return document.getElementById(A)?true:false;}else{return false;}}},releaseObject:function(A){if(A&&A.conn){A.conn=null;A=null;}}};YAHOO.register("connection",YAHOO.util.Connect,{version:"2.7.0",build:"1796"});
;/*======================================================================*\
|| #################################################################### ||
|| # vBulletin 4.0.2
|| # ---------------------------------------------------------------- # ||
|| # Copyright Â©2000-2010 vBulletin Solutions Inc. All Rights Reserved. ||
|| # This file may not be redistributed in whole or significant part. # ||
|| # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # ||
|| # http://www.vbulletin.com | http://www.vbulletin.com/license.html # ||
|| #################################################################### ||
\*======================================================================*/
if(!window.console||!console.firebug){window.console={};var names=["log","debug","info","warn","error","assert","dir","dirxml","group","groupEnd","time","timeEnd","count","trace","profile","profileEnd"];for(var i=0;i<names.length;++i){window.console[names[i]]=function(){}}}var BBURL=(typeof (BBURL)=="undefined"?"":BBURL);var SESSIONURL=(typeof (SESSIONURL)=="undefined"?"":SESSIONURL);var SECURITYTOKEN=(typeof (SECURITYTOKEN)=="undefined"?"":SECURITYTOKEN);var vbphrase=(typeof (vbphrase)=="undefined"?new Array():vbphrase);var vB_Editor=new Array();var ignorequotechars=false;var pagenavcounter=0;var is_regexp=(window.RegExp)?true:false;var AJAX_Compatible=false;var viewport_info=null;var vB_Default_Timeout=15000;var userAgent=navigator.userAgent.toLowerCase();var is_opera=(YAHOO.env.ua.opera>0);var is_saf=(YAHOO.env.ua.webkit>0);var is_webtv=(userAgent.indexOf("webtv")!=-1);var is_ie=((YAHOO.env.ua.ie>0)&&(!is_opera)&&(!is_saf)&&(!is_webtv));var is_ie4=(YAHOO.env.ua.ie==4);var is_ie7=(YAHOO.env.ua.ie>=7);var is_ie6=(YAHOO.env.ua.ie==6);var is_ps3=(userAgent.indexOf("playstation 3")!=-1);var is_moz=(YAHOO.env.ua.gecko>0);var is_kon=(userAgent.indexOf("konqueror")!=-1);var is_ns=((userAgent.indexOf("compatible")==-1)&&(userAgent.indexOf("mozilla")!=-1)&&(!is_opera)&&(!is_webtv)&&(!is_saf));var is_ns4=((is_ns)&&(parseInt(navigator.appVersion)==4));var is_mac=(userAgent.indexOf("mac")!=-1);var pointer_cursor=(is_ie?"hand":"pointer");String.prototype.vBlength=function(){return(is_ie&&this.indexOf("\n")!=-1)?this.replace(/\r?\n/g,"_").length:this.length};if("1234".substr(-2,2)=="12"){String.prototype.substr_orig=String.prototype.substr;String.prototype.substr=function(B,A){if(typeof (A)=="undefined"){return this.substr_orig((B<0?this.length+B:B))}else{return this.substr_orig((B<0?this.length+B:B),A)}}}if(typeof Array.prototype.shift==="undefined"){Array.prototype.shift=function(){for(var C=0,A=this[0],B=this.length-1;C<B;C++){this[C]=this[C+1]}this.length--;return A}}function fetch_object(A){if(document.getElementById){return document.getElementById(A)}else{if(document.all){return document.all[A]}else{if(document.layers){return document.layers[A]}else{return null}}}}function fetch_tags(B,A){if(B==null){return new Array()}else{if(typeof B.getElementsByTagName!="undefined"){return B.getElementsByTagName(A)}else{if(B.all&&B.all.tags){return B.all.tags(A)}else{return new Array()}}}}function fetch_tag_count(B,A){return fetch_tags(B,A).length}function do_an_e(A){if(!A||is_ie){window.event.returnValue=false;window.event.cancelBubble=true;return window.event}else{A.stopPropagation();A.preventDefault();return A}}function e_by_gum(A){if(!A||is_ie){window.event.cancelBubble=true;return window.event}else{if(A.target.type=="submit"){A.target.form.submit()}A.stopPropagation();return A}}function validatemessage(B,D,A){if(is_kon||is_saf||is_webtv){return true}else{if(D.length<1){alert(vbphrase.must_enter_subject);return false}else{var C=PHP.trim(stripcode(B,false,ignorequotechars));if(C.length<A){alert(construct_phrase(vbphrase.message_too_short,A));return false}else{if(typeof (document.forms.vbform)!="undefined"&&typeof (document.forms.vbform.imagestamp)!="undefined"){document.forms.vbform.imagestamp.failed=false;if(document.forms.vbform.imagestamp.value.length!=6){alert(vbphrase.complete_image_verification);document.forms.vbform.imagestamp.failed=true;document.forms.vbform.imagestamp.focus();return false}else{return true}}else{return true}}}}}function stripcode(F,G,B){if(!is_regexp){return F}if(B){var C=new Date().getTime();while((startindex=PHP.stripos(F,"[quote"))!==false){if(new Date().getTime()-C>2000){break}if((stopindex=PHP.stripos(F,"[/quote]"))!==false){fragment=F.substr(startindex,stopindex-startindex+8);F=F.replace(fragment,"")}else{break}F=PHP.trim(F)}}if(G){F=F.replace(/<img[^>]+src="([^"]+)"[^>]*>/gi,"$1");var H=new RegExp("<(\\w+)[^>]*>","gi");var E=new RegExp("<\\/\\w+>","gi");F=F.replace(H,"");F=F.replace(E,"");var D=new RegExp("(&nbsp;)","gi");F=F.replace(D," ")}else{var A=new RegExp("\\[(\\w+)(=[^\\]]*)?\\]","gi");var I=new RegExp("\\[\\/(\\w+)\\]","gi");F=F.replace(A,"");F=F.replace(I,"")}return F}function vB_PHP_Emulator(){}vB_PHP_Emulator.prototype.stripos=function(A,B,C){if(typeof C=="undefined"){C=0}index=A.toLowerCase().indexOf(B.toLowerCase(),C);return(index==-1?false:index)};vB_PHP_Emulator.prototype.ltrim=function(A){return A.replace(/^\s+/g,"")};vB_PHP_Emulator.prototype.rtrim=function(A){return A.replace(/(\s+)$/g,"")};vB_PHP_Emulator.prototype.trim=function(A){return this.ltrim(this.rtrim(A))};vB_PHP_Emulator.prototype.preg_quote=function(A){return A.replace(/(\+|\{|\}|\(|\)|\[|\]|\||\/|\?|\^|\$|\\|\.|\=|\!|\<|\>|\:|\*)/g,"\\$1")};vB_PHP_Emulator.prototype.match_all=function(C,E){var A=C.match(RegExp(E,"gim"));if(A){var F=new Array();var B=new RegExp(E,"im");for(var D=0;D<A.length;D++){F[F.length]=A[D].match(B)}return F}else{return false}};vB_PHP_Emulator.prototype.unhtmlspecialchars=function(D){var C=new Array(/&lt;/g,/&gt;/g,/&quot;/g,/&amp;/g);var B=new Array("<",">",'"',"&");for(var A in C){if(YAHOO.lang.hasOwnProperty(C,A)){D=D.replace(C[A],B[A])}}return D};vB_PHP_Emulator.prototype.unescape_cdata=function(C){var B=/<\=\!\=\[\=C\=D\=A\=T\=A\=\[/g;var A=/\]\=\]\=>/g;return C.replace(B,"<![CDATA[").replace(A,"]]>")};vB_PHP_Emulator.prototype.htmlspecialchars=function(D){var C=new Array((is_mac&&is_ie?new RegExp("&","g"):new RegExp("&(?!#[0-9]+;)","g")),new RegExp("<","g"),new RegExp(">","g"),new RegExp('"',"g"));var B=new Array("&amp;","&lt;","&gt;","&quot;");for(var A=0;A<C.length;A++){D=D.replace(C[A],B[A])}return D};vB_PHP_Emulator.prototype.in_array=function(D,C,B){var E=new String(D);var A;if(B){E=E.toLowerCase();for(A in C){if(YAHOO.lang.hasOwnProperty(C,A)){if(C[A].toLowerCase()==E){return A}}}}else{for(A in C){if(YAHOO.lang.hasOwnProperty(C,A)){if(C[A]==E){return A}}}}return -1};vB_PHP_Emulator.prototype.str_pad=function(C,A,B){C=new String(C);B=new String(B);if(C.length<A){padtext=new String(B);while(padtext.length<(A-C.length)){padtext+=B}C=padtext.substr(0,(A-C.length))+C}return C};vB_PHP_Emulator.prototype.urlencode=function(D){D=escape(D.toString()).replace(/\+/g,"%2B");var B=D.match(/(%([0-9A-F]{2}))/gi);if(B){for(var C=0;C<B.length;C++){var A=B[C].substring(1,3);if(parseInt(A,16)>=128){D=D.replace(B[C],"%u00"+A)}}}D=D.replace("%25","%u0025");return D};vB_PHP_Emulator.prototype.ucfirst=function(D,A){if(typeof A!="undefined"){var B=D.indexOf(A);if(B>0){D=D.substr(0,B)}}D=D.split(" ");for(var C=0;C<D.length;C++){D[C]=D[C].substr(0,1).toUpperCase()+D[C].substr(1)}return D.join(" ")};function vB_AJAX_Handler(A){this.async=A?true:false;this.conn=null}vB_AJAX_Handler.prototype.init=function(){return AJAX_Compatible};vB_AJAX_Handler.is_compatible=function(){return AJAX_Compatible};vB_AJAX_Handler.prototype.onreadystatechange=function(A){this.callback=A};vB_AJAX_Handler.prototype.fetch_data=function(A){console.warn('vB_AJAX_Handler.prototype.fetch_data() is deprecated.\nUse responseXML.getElementsByTagName("x")[i].firstChild.nodeValue instead.');if(A&&A.firstChild&&A.firstChild.nodeValue){return PHP.unescape_cdata(A.firstChild.nodeValue)}else{return""}};vB_AJAX_Handler.prototype.send=function(A,B){this.conn=YAHOO.util.Connect.asyncRequest("POST",A,{success:this.callback},B+"&securitytoken="+SECURITYTOKEN+"&s="+fetch_sessionhash());this.handler=this.conn.conn};function is_ajax_compatible(){if(typeof vb_disable_ajax!="undefined"&&vb_disable_ajax==2){return false}else{if(is_ie&&!is_ie4){return true}else{if(window.XMLHttpRequest){try{var A=new XMLHttpRequest();return A.setRequestHeader?true:false}catch(B){return false}}else{return false}}}}AJAX_Compatible=is_ajax_compatible();console.info("This browser is%s AJAX compatible",AJAX_Compatible?"":" NOT");function vBulletin_AJAX_Error_Handler(A){console.warn("AJAX Error: Status = %s: %s",A.status,A.statusText)}function vB_Hidden_Form(A){this.action=A;this.variables=new Array()}vB_Hidden_Form.prototype.add_variable=function(A,B){this.variables[this.variables.length]=new Array(A,B);console.log("vB_Hidden_Form :: add_variable(%s)",A)};vB_Hidden_Form.prototype.add_variables_from_object=function(F){if(!F){return }console.info("vB_Hidden_Form :: add_variables_from_object(%s)",F.id);var B=fetch_tags(F,"input");var E;for(E=0;E<B.length;E++){if(B[E].disabled){continue}switch(B[E].type){case"checkbox":case"radio":if(B[E].checked){this.add_variable(B[E].name,B[E].value)}break;case"text":case"hidden":case"password":this.add_variable(B[E].name,B[E].value);break;default:continue}}var A=fetch_tags(F,"textarea");for(E=0;E<A.length;E++){if(A[E].disabled){continue}this.add_variable(A[E].name,A[E].value)}var D=fetch_tags(F,"select");for(E=0;E<D.length;E++){if(D[E].disabled){continue}if(D[E].multiple){for(var C=0;C<D[E].options.length;C++){if(D[E].options[C].selected){this.add_variable(D[E].name,D[E].options[C].value)}}}else{if(D[E].selectedIndex>-1){this.add_variable(D[E].name,D[E].options[D[E].selectedIndex].value)}}}};vB_Hidden_Form.prototype.fetch_variable=function(A){for(var B=0;B<this.variables.length;B++){if(this.variables[B][0]==A){return this.variables[B][1]}}return null};vB_Hidden_Form.prototype.submit_form=function(){this.form=document.createElement("form");this.form.method="post";this.form.action=this.action;for(var A=0;A<this.variables.length;A++){var B=document.createElement("input");B.type="hidden";B.name=this.variables[A][0];B.value=this.variables[A][1];this.form.appendChild(B)}console.info("vB_Hidden_Form :: submit_form() -> %s",this.action);document.body.appendChild(this.form).submit()};vB_Hidden_Form.prototype.build_query_string=function(){var B="";for(var A=0;A<this.variables.length;A++){B+=this.variables[A][0]+"="+PHP.urlencode(this.variables[A][1])+"&"}console.info("vB_Hidden_Form :: Query String = %s",B);return B};vB_Hidden_Form.prototype.add_input=vB_Hidden_Form.prototype.add_variable;vB_Hidden_Form.prototype.add_inputs_from_object=vB_Hidden_Form.prototype.add_variables_from_object;function vB_Select_Overlay_Handler(A){this.browser_affected=(is_ie&&YAHOO.env.ua.ie<7);if(this.browser_affected){this.overlay=YAHOO.util.Dom.get(A);this.hidden_selects=new Array();console.log("Initializing <select> overlay handler for '%s'.",this.overlay.id)}}vB_Select_Overlay_Handler.prototype.hide=function(){if(this.browser_affected){var C=YAHOO.util.Dom.getRegion(this.overlay);var B=document.getElementsByTagName("select");for(var A=0;A<B.length;A++){if(region_intersects(B[A],C)){if(YAHOO.util.Dom.isAncestor(this.overlay,B[A])){continue}else{YAHOO.util.Dom.setStyle(B[A],"visibility","hidden");this.hidden_selects.push(YAHOO.util.Dom.generateId(B[A]))}}}}};vB_Select_Overlay_Handler.prototype.show=function(){if(this.browser_affected){var A;while(A=this.hidden_selects.pop()){YAHOO.util.Dom.setStyle(A,"visibility","visible")}}};function openWindow(C,D,B,A){return window.open(getBaseUrl()+C,(typeof A=="undefined"?"vBPopup":A),"statusbar=no,menubar=no,toolbar=no,scrollbars=yes,resizable=yes"+(typeof D!="undefined"?(",width="+D):"")+(typeof B!="undefined"?(",height="+B):""))}function getBaseUrl(){try{var A=document.getElementsByTagName("base");if(A.length==0){return""}A=A[A.length-1].href;if(!A){return""}return A.match(/.*[\/\\]/)}catch(B){return""}}function js_open_help(B,C,A){return openWindow("help.php?s="+SESSIONHASH+"&do=answer&page="+B+"&pageaction="+C+"&option="+A,600,450,"helpwindow")}function attachments(A){return openWindow("misc.php?"+SESSIONURL+"do=showattachments&t="+A,480,300)}function who(A){return openWindow("misc.php?"+SESSIONURL+"do=whoposted&t="+A,600,300)}function imwindow(D,B,C,A){return openWindow("sendmessage.php?"+SESSIONURL+"do=im&type="+D+"&u="+B,C,A)}function SendMSNMessage(A){if(!is_ie){alert(vbphrase.msn_functions_only_work_in_ie)}else{try{MsgrObj.InstantMessage(A)}catch(B){alert(vbphrase.msn_functions_only_work_in_ie)}}return false}function AddMSNContact(A){if(!is_ie){alert(vbphrase.msn_functions_only_work_in_ie)}else{try{MsgrObj.AddContact(0,A)}catch(B){alert(vbphrase.msn_functions_only_work_in_ie)}}return false}function detect_caps_lock(D){D=(D?D:window.event);var A=(D.which?D.which:(D.keyCode?D.keyCode:(D.charCode?D.charCode:0)));var C=(D.shiftKey||(D.modifiers&&(D.modifiers&4)));var B=(D.ctrlKey||(D.modifiers&&(D.modifiers&2)));return(A>=65&&A<=90&&!C&&!B)||(A>=97&&A<=122&&C)}function log_out(B){var A=document.getElementsByTagName("html")[0];A.style.filter="progid:DXImageTransform.Microsoft.BasicImage(grayscale=1)";if(confirm(B)){return true}else{A.style.filter="";return false}}function set_cookie(B,C,A){console.log("Set Cookie :: %s = '%s'",B,C);document.cookie=B+"="+escape(C)+"; path=/"+(typeof A!="undefined"?"; expires="+A.toGMTString():"")}function delete_cookie(A){console.log("Delete Cookie :: %s",A);document.cookie=A+"=; expires=Thu, 01-Jan-70 00:00:01 GMT; path=/"}function fetch_cookie(A){cookie_name=A+"=";cookie_length=document.cookie.length;cookie_begin=0;while(cookie_begin<cookie_length){value_begin=cookie_begin+cookie_name.length;if(document.cookie.substring(cookie_begin,value_begin)==cookie_name){var C=document.cookie.indexOf(";",value_begin);if(C==-1){C=cookie_length}var B=unescape(document.cookie.substring(value_begin,C));console.log("Fetch Cookie :: %s = '%s'",A,B);return B}cookie_begin=document.cookie.indexOf(" ",cookie_begin)+1;if(cookie_begin==0){break}}console.log("Fetch Cookie :: %s (null)",A);return null}function js_toggle_all(D,E,C,A,G){for(var B=0;B<D.elements.length;B++){var F=D.elements[B];if(F.type==E&&PHP.in_array(F.name,A,false)==-1){switch(E){case"radio":if(F.value==C){F.checked=G}break;case"select-one":F.selectedIndex=G;break;default:F.checked=G;break}}}}function js_select_all(A){exclude=new Array();exclude[0]="selectall";js_toggle_all(A,"select-one","",exclude,A.selectall.selectedIndex)}function js_check_all(A){exclude=new Array();exclude[0]="keepattachments";exclude[1]="allbox";exclude[2]="removeall";js_toggle_all(A,"checkbox","",exclude,A.allbox.checked)}function js_check_all_option(B,A){exclude=new Array();exclude[0]="useusergroup";js_toggle_all(B,"radio",A,exclude,true)}function checkall(A){js_check_all(A)}function checkall_option(B,A){js_check_all_option(B,A)}function resize_textarea(C,B){var A=fetch_object(B);A.style.width=parseInt(A.offsetWidth)+(C<0?-100:100)+"px";A.style.height=parseInt(A.offsetHeight)+(C<0?-100:100)+"px";return false}function region_intersects(B,A){B=typeof (B.left)=="undefined"?YAHOO.util.Dom.getRegion(B):B;A=typeof (A.left)=="undefined"?YAHOO.util.Dom.getRegion(A):A;return(B.left>A.right||B.right<A.left||B.top>A.bottom||B.bottom<A.top)?false:true}function fetch_viewport_info(A){if(viewport_info==null||A){viewport_info={x:YAHOO.util.Dom.getDocumentScrollLeft(),y:YAHOO.util.Dom.getDocumentScrollTop(),w:YAHOO.util.Dom.getViewportWidth(),h:YAHOO.util.Dom.getViewportHeight()};console.info("Viewport Info: Size = %dx%d, Position = %d,%d",viewport_info.w,viewport_info.h,viewport_info.x,viewport_info.y)}return viewport_info}function clear_viewport_info(){viewport_info=null}function center_element(A,B){viewport_info=fetch_viewport_info(B);YAHOO.util.Dom.setXY(A,[viewport_info.w/2+viewport_info.x-A.clientWidth/2,viewport_info.h/2+viewport_info.y-A.clientHeight/2])}function fetch_all_stylesheets(D){var G=new Array(),B=0,A=null,E=0,F=0;for(B=0;B<document.styleSheets.length;B++){A=document.styleSheets[B];G.push(A);try{if(A.cssRules){for(E=0;E<A.cssRules.length;E++){if(A.cssRules[E].styleSheet){G.push(A.cssRules[E].styleSheet)}}}else{if(A.imports){for(F=0;F<A.imports.length;F++){G.push(A.imports[F])}}}}catch(C){G.pop();continue}}return G}function highlight_login_box(){var E=fetch_object("navbar_username");var A="inlinemod";var B,C=1600,D=200;if(E){E.focus();E.select();for(B=0;B<C;B+=2*D){window.setTimeout(function(){YAHOO.util.Dom.addClass(E,A)},B);window.setTimeout(function(){YAHOO.util.Dom.removeClass(E,A)},B+D)}}return false}function toggle_collapse(A,B){return false}function vBpagenav(){}vBpagenav.prototype.controlobj_onclick=function(C){this._onclick(C);var A=fetch_tags(this.menu.menuobj,"input");for(var B=0;B<A.length;B++){if(A[B].type=="text"){A[B].focus();break}}};vBpagenav.prototype.form_gotopage=function(A){if((pagenum=parseInt(fetch_object("pagenav_itxt").value,10))>0){window.location=vBmenu.menus[vBmenu.activemenu].addr+"&page="+pagenum}return false};vBpagenav.prototype.ibtn_onclick=function(A){return this.form.gotopage()};vBpagenav.prototype.itxt_onkeypress=function(A){return((A?A:window.event).keyCode==13?this.form.gotopage():true)};function vbmenu_register(B,A,C){if(typeof (vBmenu)=="object"){return vBmenu.register(B,A)}else{return false}}function string_to_node(B){var A=document.createElement("div");A.innerHTML=B;var C=A.firstChild;while(C&&C.nodeType!=1){C=C.nextSibling}if(!C){return A.firstChild.cloneNode(true)}else{return C.cloneNode(true)}}function set_unselectable(B){B=YAHOO.util.Dom.get(B);if(!is_ie4&&typeof B.tagName!="undefined"){if(B.hasChildNodes()){for(var A=0;A<B.childNodes.length;A++){set_unselectable(B.childNodes[A])}}B.unselectable="on"}}function fetch_sessionhash(){return(SESSIONURL==""?"":SESSIONURL.substr(2,32))}function previousSibling(A){do{p=A.previousSibling}while(p&&p.nodeType!=1);return p}function nextSibling(A){do{p=A.nextSibling}while(p&&p.nodeType!=1);return p}function construct_phrase(){if(!arguments||arguments.length<1||!is_regexp){return false}var A=arguments;var D=A[0];var C;for(var B=1;B<A.length;B++){C=new RegExp("%"+B+"\\$s","gi");D=D.replace(C,A[B])}return D}function switch_id(C,E){var F=C.options[C.selectedIndex].value;if(F==""){return }var B=new String(window.location);var A=new String("");B=B.split("#");if(B[1]){A="#"+B[1]}B=B[0];if(B.indexOf(E+"id=")!=-1&&is_regexp){var D=new RegExp(E+"id=\\d+&?");B=B.replace(D,"")}if(B.indexOf("?")==-1){B+="?"}else{lastchar=B.substr(B.length-1);if(lastchar!="&"&&lastchar!="?"){B+="&"}}window.location=B+E+"id="+F+A}function child_img_alt_2_title(A){var C=A.getElementsByTagName("img");for(var B=0;B<C.length;B++){img_alt_2_title(C[B])}}function img_alt_2_title(A){if(!A.title&&A.alt!=""){A.title=A.alt}}function do_securitytoken_replacement(B){if(B==""){return }for(var A=0;A<document.forms.length;A++){if(document.forms[A].elements.securitytoken&&document.forms[A].elements.securitytoken.value==SECURITYTOKEN){document.forms[A].elements.securitytoken.value=B}}SECURITYTOKEN=B;console.log("Securitytoken updated")}function handle_securitytoken_response(A){console.log("Processing securitytoken update");if(A.responseXML&&A.responseXML.getElementsByTagName("securitytoken").length){var B=A.responseXML.getElementsByTagName("securitytoken")[0].firstChild.nodeValue;do_securitytoken_replacement(B);securitytoken_errors=0}else{handle_securitytoken_error(A)}}function handle_securitytoken_error(A){console.log("Securitytoken Error");if(++securitytoken_errors==3){do_securitytoken_replacement("guest")}}var securitytoken_timeout=window.setTimeout("replace_securitytoken()",3600000);var securitytoken_errors=0;function replace_securitytoken(){window.clearTimeout(securitytoken_timeout);if(AJAX_Compatible&&SECURITYTOKEN!=""&&SECURITYTOKEN!="guest"){securitytoken_timeout=window.setTimeout("replace_securitytoken()",3600000);YAHOO.util.Connect.asyncRequest("POST","ajax.php",{success:handle_securitytoken_response,failure:handle_securitytoken_error,timeout:vB_Default_Timeout},SESSIONURL+"securitytoken="+SECURITYTOKEN+"&do=securitytoken")}}function Comment_Init(B){if(typeof B.id=="undefined"){return }var C=B.id;if(isNaN(C)){var A=null;if(A=C.match(/(\d+)/)){C=A[0]}}if(typeof inlineMod_comment!="undefined"){im_init(B,inlineMod_comment)}if(typeof vB_QuickEditor_Factory!="undefined"){if(typeof vB_QuickEditor_Factory.controls[C]=="undefined"){vB_QuickEditor_Factory.controls[C]=new vB_QuickEditor(C,vB_QuickEditor_Factory)}else{vB_QuickEditor_Factory.controls[C].init()}}if(typeof vB_QuickLoader_Factory!="undefined"){vB_QuickLoader_Factory.controls[C]=new vB_QuickLoader(C,vB_QuickLoader_Factory)}child_img_alt_2_title(B);if(typeof YAHOO.vBulletin.vBRestrain!="undefined"){YAHOO.vBulletin.vBRestrain.addcontainer(B);YAHOO.vBulletin.vBRestrain.resize(B)}}function vBulletin_init(){if(is_webtv){return false}child_img_alt_2_title(document);if(typeof vBmenu=="object"){if(typeof (YAHOO)!="undefined"){YAHOO.util.Event.on(document,"click",vbmenu_hide);YAHOO.util.Event.on(window,"resize",vbmenu_hide)}else{if(window.attachEvent&&!is_saf){document.attachEvent("onclick",vbmenu_hide);window.attachEvent("onresize",vbmenu_hide)}else{if(document.addEventListener&&!is_saf){document.addEventListener("click",vbmenu_hide,false);window.addEventListener("resize",vbmenu_hide,false)}else{window.onclick=vbmenu_hide;window.onresize=vbmenu_hide}}}var B=fetch_tags(document,"td");for(var D=0;D<B.length;D++){if(B[D].hasChildNodes()&&B[D].firstChild.name&&B[D].firstChild.name.indexOf("PageNav")!=-1){var C=B[D].title;B[D].title="";B[D].innerHTML="";B[D].id="pagenav."+D;var A=vBmenu.register(B[D].id);A.addr=C;if(is_saf){A.controlobj._onclick=A.controlobj.onclick;A.controlobj.onclick=vBpagenav.prototype.controlobj_onclick}}}if(typeof C!="undefined"){fetch_object("pagenav_form").gotopage=vBpagenav.prototype.form_gotopage;fetch_object("pagenav_ibtn").onclick=vBpagenav.prototype.ibtn_onclick;fetch_object("pagenav_itxt").onkeypress=vBpagenav.prototype.itxt_onkeypress}vBmenu.activate(true)}vBulletin.init();return true}function vBulletin_Framework(){this.elements=new Array();this.ajaxurls=new Array();this.events=new Array();this.time=new Date();this.add_event("systemInit")}vBulletin_Framework.prototype.init=function(){console.info("Firing System Init");this.events.systemInit.fire()};vBulletin_Framework.prototype.extend=function(C,A){function B(){}B.prototype=A.prototype;C.prototype=new B();C.prototype.constructor=C;C.baseConstructor=A;C.superClass=A.prototype};vBulletin_Framework.prototype.register_control=function(B,E){var C=new Array();for(var D=1;D<arguments.length;D++){C.push(arguments[D])}if(!this.elements[B]){console.info('Creating array vBulletin.elements["%s"]',B);this.elements[B]=new Array()}var A=this.elements[B].push(C);console.log('vBulletin.elements["%s"][%d] = %s',B,A-1,C.join(", "))};vBulletin_Framework.prototype.register_ajax_urls=function(B,C,D){B=B.split("?");B[1]=SESSIONURL+"securitytoken="+SECURITYTOKEN+"&ajax=1&"+B[1].replace(/\{(\d+)(:\w+)?\}/gi,"%$1$s");C=C.split("?");C[1]=SESSIONURL+"securitytoken="+SECURITYTOKEN+"&ajax=1&"+C[1].replace(/\{(\d+)(:\w+)?\}/gi,"%$1$s");console.log("Register AJAX URLs for %s",D);for(var A=0;A<D.length;A++){this.ajaxurls[D[A]]=new Array(B,C)}};vBulletin_Framework.prototype.add_event=function(A){this.events[A]=new YAHOO.util.CustomEvent(A)};vBulletin_Framework.prototype.console=function(){if(window.console||console.firebug){var args=new Array();for(var i=0;i<arguments.length;i++){args[args.length]=arguments[i]}try{eval("console.log('"+args.join("','")+"');")}catch(e){}}};var PHP=new vB_PHP_Emulator();var vBulletin=new vBulletin_Framework();vBulletin.events.systemInit.subscribe(function(){YAHOO.util.Event.on(window,"resize",clear_viewport_info);YAHOO.util.Event.on(window,"scroll",clear_viewport_info)});function handle_dismiss_notice_error(C){if(C.argument){var B=YAHOO.util.Dom.get("dismiss_notice_hidden");B.value=C.argument;var A=YAHOO.util.Dom.get("notices");A.submit()}}function handle_dismiss_notice_ajax(G){if(G.responseXML&&G.responseXML.getElementsByTagName("dismissed").length){var D=G.responseXML.getElementsByTagName("dismissed")[0].firstChild.nodeValue;var B=YAHOO.util.Dom.get("navbar_notice_"+D);if(B!=null){YAHOO.util.Dom.setStyle(B,"display","none");var F=YAHOO.util.Dom.get("notices");var A=F.getElementsByTagName("li");var E=0;if(A.length){for(var C=0;C<A.length;C++){if(YAHOO.util.Dom.getStyle(A[C],"display")!="none"){E++}}if(E==0){YAHOO.util.Dom.setStyle("notices","display","none")}}}}else{handle_dismiss_notice_error(G)}}function dismiss_notice(B){if(AJAX_Compatible){var A=YAHOO.util.Connect.asyncRequest("POST","ajax.php?do=dismissnotice",{success:handle_dismiss_notice_ajax,failure:handle_dismiss_notice_error,timeout:vB_Default_Timeout,argument:B},SESSIONURL+"securitytoken="+SECURITYTOKEN+"&do=dismissnotice&noticeid="+PHP.urlencode(B));return false}return true}function page_jump(A){window.location=A.options[A.selectedIndex].value}function loadVbCss(C,E){if(!window.LESS_THAN_IE7){var D=fetch_object("e_vb_meta_bburl");if(D){var B=(!E&&(C.indexOf(D.content)==-1))?(D.content+"/"+C):C;var A=document.createElement("link");A.setAttribute("rel","stylesheet");A.setAttribute("href",B);A.setAttribute("media","screen");A.setAttribute("type","text/css");A.setAttribute("charset","utf-8");var F=document.getElementsByTagName("head");F=F[0]?F[0]:null;if(F){F.appendChild(A)}}}}if(!window.console||!console.firebug){window.console={};var names=["log","debug","info","warn","error","assert","dir","dirxml","group","groupEnd","time","timeEnd","count","trace","profile","profileEnd"];for(var i=0;i<names.length;++i){window.console[names[i]]=function(){}}}YAHOO.namespace("vBulletin");YAHOO.vBulletin.vB_XHTML_Ready=false;var vB_XHTML_Ready=new YAHOO.util.CustomEvent();YAHOO.util.Event.onAvailable("footer",function(){console.log("Fire vB_XHTML_Ready");vB_XHTML_Ready.fire();YAHOO.vBulletin.vB_XHTML_Ready=true});vB_XHTML_Ready.subscribe(init_breadcrumb);function init_breadcrumb(D){var C=YAHOO.util.Dom.get("breadcrumb");var B=C.getElementsByTagName("li");for(var A=0;A<B.length;A++){}}function register_inlinemod(D,F,C,B,E,A){YAHOO.namespace("vBulletin.imodcollection."+B);YAHOO.vBulletin.imodcollection[B]=new InlineModCollection(B,B+"_imodsel",A);YAHOO.vBulletin.imodcollection[B].add_controls(YAHOO.util.Dom.getElementsByClassName(C,F,D),E)}function register_inlinemod_checkboxes(E,H,D,A,C,G,B){var F=new InlineModCollection(C,null,B);F.add_controls(YAHOO.util.Dom.getElementsByClassName(D,H,E),G);F.add_checkboxes(A)}YAHOO.namespace("vBulletin.imodcollections");function InlineModCollection(B,A,C){this.type=B;this.collection=new Array();if(typeof C=="undefined"){C="vbulletin_inline"}this.cookiename=C+this.type;this.selecteditems=this.fetch_ids();this.set_display_count(this.selecteditems.length);this.init_selector(A);YAHOO.vBulletin.imodcollections[B]=this}InlineModCollection.get=function(A){return YAHOO.vBulletin.imodcollections[A]};InlineModCollection.prototype.add_controls=function(D,E){if(typeof E=="undefined"){E=this.type+"_"}for(var B=0;B<D.length;B++){var A=D[B];var C=A.id.substr(E.length);this.add_control(new InlineModControl(A,C,this))}};InlineModCollection.prototype.add_checkboxes=function(B){var A=YAHOO.util.Dom.getElementsByClassName(this.type+"_checkall","input",B);for(var D=0;D<A.length;D++){var C=A[D];if(C.type=="checkbox"){YAHOO.util.Event.on(C,"click",this.set_from_checkbox,this,true)}}};InlineModCollection.prototype.add_control=function(A){if(PHP.in_array(A.itemid,this.selecteditems)!=-1){A.checkbox.checked=true;A.set_inlinemod_highlight()}this.collection.push(A)};InlineModCollection.prototype.init_selector=function(A){var D=YAHOO.util.Dom.get(A);if(D!=null){var B=D.getElementsByTagName("a");for(var C=0;C<B.length;C++){if(B[C].id&&B[C].id.substr(0,D.id.length)==D.id){YAHOO.util.Event.on(B[C],"click",this.set_all_selections,this,true)}}}};InlineModCollection.prototype.set_from_checkbox=function(C){var B=YAHOO.util.Event.getTarget(C);for(var A=0;A<this.collection.length;A++){this.collection[A].set_selection_from_checkbox(B)}this.update_collection_state()};InlineModCollection.prototype.set_all_selections=function(D){var B=YAHOO.util.Event.getTarget(D);if("a"!=B.tagName.toLowerCase()){B=YAHOO.util.Dom.getAncestorByTagName(B,"A")}console.log("Do:%s, ID:%s",B.innerHTML,B.id);var C=B.id.split(":");for(var A=0;A<this.collection.length;A++){this.collection[A].set_selection(C)}this.update_collection_state();YAHOO.util.Event.stopEvent(D);YAHOO.vBulletin.vBPopupMenu.close_all()};InlineModCollection.prototype.update_collection_state=function(){var B=new Array();for(var A=0;A<this.collection.length;A++){B.push(this.collection[A].itemid)}if(B.length){this.selecteditems=this.remove_items(this.selecteditems,B)}for(var A=0;A<this.collection.length;A++){if(this.collection[A].checkbox.checked){this.selecteditems.push(this.collection[A].itemid)}}this.set_cookie(this.selecteditems);this.set_display_count(this.selecteditems.length)};InlineModCollection.prototype.update_state=function(B,A){this.selecteditems=this.remove_items(this.selecteditems,new Array(B));if(A){this.selecteditems.push(B)}this.set_cookie(this.selecteditems);this.set_display_count(this.selecteditems.length)};InlineModCollection.prototype.remove_items=function(D,C){var B=new Array();for(var A=0;A<D.length;A++){if(D[A]!=""&&PHP.in_array(D[A],C)==-1){B.push(D[A])}}return B};InlineModCollection.prototype.set_cookie=function(B){var A=new Date();A.setTime(A.getTime()+3600000);set_cookie(this.cookiename,B.join("-"),A)};InlineModCollection.prototype.fetch_ids=function(){var A=fetch_cookie(this.cookiename);if(A!=null&&A!=""){A=A.split("-");if(A.length>0){return A}}return new Array()};InlineModCollection.prototype.set_display_count=function(A){var B=YAHOO.util.Dom.get(this.type+"_inlinemod_count");if(B){B.innerHTML=A}};function InlineModControl(A,B,D){var C=D.type+"_imod_checkbox_"+B;this.container=YAHOO.util.Dom.get(A);this.checkbox=YAHOO.util.Dom.get(C);this.itemid=B;this.collection=D;if(this.checkbox){this.set_inlinemod_state();YAHOO.util.Event.on(this.checkbox,"click",this.set_inlinemod_state,this,true)}else{console.warn("No inlinemod selection checkbox found for "+C)}}InlineModControl.prototype.init_collection=function(A){if(typeof YAHOO.vBulletin.imodcollection=="undefined"){YAHOO.vBulletin.imodcollection=new InlineModCollection(A)}return YAHOO.vBulletin.imodcollection};InlineModControl.prototype.set_selection_from_checkbox=function(A){if(A.value!="all"){if(A.value!=this.checkbox.value){return }}this.checkbox.checked=A.checked;this.set_inlinemod_highlight()};InlineModControl.prototype.set_selection=function(A){switch(A[1]){case"invert":this.checkbox.checked=!this.checkbox.checked;break;case"none":this.checkbox.checked=false;break;case"class":this.checkbox.checked=YAHOO.util.Dom.hasClass(this.container,A[2]);break;case"flag":if(typeof A[2]!=undefined&&!isNaN(A[2])){this.checkbox.checked=this.checkbox.value&A[2]}else{this.checkbox.checked=true}break;default:case"all":this.checkbox.checked=true;break}this.set_inlinemod_highlight()};InlineModControl.prototype.set_inlinemod_state=function(){this.collection.update_state(this.itemid,this.checkbox.checked);this.set_inlinemod_highlight()};InlineModControl.prototype.set_inlinemod_highlight=function(){var A=(this.checkbox.checked?"addClass":"removeClass");YAHOO.util.Dom[A](this.container,"imod_highlight");console.log("Set Inlinemod State for %s - %s",this.itemid,A)};vB_XHTML_Ready.subscribe(init_searchboxes);function init_searchboxes(){var B=YAHOO.util.Dom.getElementsByClassName("searchbox","input");for(var A=0;A<B.length;A++){new YAHOO.vBulletin.SearchBox(B[A])}}YAHOO.vBulletin.LoadScript=function(B,C){var A=document.createElement("script");YAHOO.util.Dom.setAttribute(A,"type","text/javascript");if(typeof (C)!="undefined"){if(A.readyState){A.onreadystatechange=function(){if(A.readyState=="loaded"||A.readyState=="complete"){A.onreadystatechange=null;C()}}}else{A.onload=function(){C()}}}YAHOO.util.Dom.setAttribute(A,"src",B+"?"+Math.floor(Math.random()*100000));document.getElementsByTagName("head")[0].appendChild(A)};YAHOO.vBulletin.LoadCss=function(A){var B=document.createElement("link");YAHOO.util.Dom.setAttribute(B,"type","text/css");YAHOO.util.Dom.setAttribute(B,"rel","stylesheet");YAHOO.util.Dom.setAttribute(B,"href",A);document.getElementsByTagName("head")[0].appendChild(B)};YAHOO.vBulletin.SearchBox=function(A){this.element=A;this.default_value=this.element.value;YAHOO.util.Event.on(this.element,"focus",this.focus_handler,this,true);YAHOO.util.Event.on(this.element,"blur",this.blur_handler,this,true)};YAHOO.vBulletin.SearchBox.prototype.focus_handler=function(A){if(this.element.value==this.default_value){this.element.value=""}this.element.select()};YAHOO.vBulletin.SearchBox.prototype.blur_handler=function(A){if(this.element.value==""){this.element.value=this.default_value}};vB_XHTML_Ready.subscribe(init_popupmenus);function init_popupmenus(A){YAHOO.vBulletin.vBPopupMenu=new PopupFactory(A)}function PopupFactory(A){this.menu_open=false;this.timeout=null;this.menuclose_timeout=null;this.popups=new Object();this.instrument(A);YAHOO.util.Event.on(document,"click",this.close_all,this,true)}PopupFactory.prototype.instrument=function(C){var B=YAHOO.util.Dom.getElementsByClassName("popupmenu",undefined,C);for(var A=0;A<B.length;A++){if(!YAHOO.util.Dom.hasClass(B[A],"popupcustom")){this.register(B[A])}}};PopupFactory.prototype.register=function(A){var B=YAHOO.util.Dom.generateId(A);this.popups[B]=new PopupMenu(A,this)};PopupFactory.prototype.register_menuobj=function(A){var B=YAHOO.util.Dom.generateId(A.container);this.popups[B]=A};PopupFactory.prototype.close_all=function(B){if(this.menu_open){for(var A in this.popups){this.popups[A].close_menu()}this.menu_open=false}};function PopupMenu(A,B){this.init(A,B)}PopupMenu.prototype.init=function(A,B){this.container=A;this.factory=B;this.display=false;this.menu=null;this.activate_menu();this.control=null;this.activate_control();this.locator=null;this.form=null;this.popup_form_elements=new Array()};PopupMenu.prototype.activate_menu=function(){var A=YAHOO.util.Dom.getElementsByClassName("popupbody","*",this.container);if(A.length){this.menu=A[0];YAHOO.util.Dom.generateId(this.menu);if(YAHOO.util.Dom.hasClass(this.container,"hovermenu")){YAHOO.util.Event.on(this.menu,"mouseover",this.cancel_menutimer,this,true);YAHOO.util.Event.on(this.menu,"mouseout",this.start_menutimer,this,true)}}else{}YAHOO.util.Dom.removeClass(A[0],"popuphover");YAHOO.util.Event.on(A[0],"click",this.cancel_close,this,true)};PopupMenu.prototype.activate_control=function(){var A=YAHOO.util.Dom.getElementsByClassName("popupctrl","",this.container);if(A.length){this.control=A[0];YAHOO.util.Dom.generateId(this.control);if(!YAHOO.util.Dom.hasClass(this.container,"noclick")){YAHOO.util.Event.on(this.control,"click",this.toggle_menu,this,true)}if(YAHOO.util.Dom.hasClass(this.container,"hovermenu")){YAHOO.util.Event.on(this.control,"mouseover",this.open_hovermenu,this,true);YAHOO.util.Event.on(this.control,"mouseout",this.start_menutimer,this,true)}else{if(!YAHOO.util.Dom.hasClass(this.container,"nomouseover")){YAHOO.util.Event.on(this.control,"mouseover",this.mouseover,this,true);YAHOO.util.Event.on(this.control,"mouseout",this.mouseout,this,true)}}}};PopupMenu.prototype.cancel_close=function(A){YAHOO.util.Event.stopPropagation(A)};PopupMenu.prototype.mouseover=function(A){if(this.factory.menu_open){this.open_menu(A)}};PopupMenu.prototype.mouseout=function(A){if(this.factory.timeout!=null){this.factory.timeout.cancel()}};PopupMenu.prototype.open_hovermenu=function(A){this.cancel_menutimer(A);this.open_menu(A)};PopupMenu.prototype.start_menutimer=function(A){this.factory.menuclose_timeout=YAHOO.lang.later(300,this,"close_menu",[{e:A}])};PopupMenu.prototype.cancel_menutimer=function(A){if(this.factory.menuclose_timeout!=null){this.factory.menuclose_timeout.cancel()}};PopupMenu.prototype.toggle_menu=function(A){if(this.display){this.close_menu()}else{this.open_menu(A)}YAHOO.util.Event.stopEvent(A)};PopupMenu.prototype.load_menu=function(B){var C={};for(var A in B){C[A]=B[A]}YAHOO.util.Connect.asyncRequest("POST","load-popup.php?id="+this.container.id,{success:this.handle_menu_load,failure:null,timeout:null,scope:this,argument:{e:C}},"id="+this.container.id)};PopupMenu.prototype.handle_menu_load=function(A){alert("Load menu!")};PopupMenu.prototype.open_menu=function(B){if(YAHOO.lang.isNull(this.menu)){this.load_menu(B);return }if(this.factory.timeout!=null){this.factory.timeout.cancel()}this.factory.close_all();if(typeof (B)=="object"){var A=YAHOO.util.Event.getTarget(B)}else{var A=YAHOO.util.Dom.get(B)}if(A!=null){A=(YAHOO.util.Dom.hasClass(A,"popupctrl")?A:YAHOO.util.Dom.getAncestorByClassName(A,"popupctrl"))}this.set_display(true,A);this.factory.menu_open=true};PopupMenu.prototype.close_menu=function(){this.set_display(false);this.factory.menu_open=false};PopupMenu.prototype.set_display=function(D,B){if(YAHOO.lang.isNull(this.menu)){return }var C=(typeof (B)!="undefined"&&YAHOO.util.Dom.hasClass(B.parentNode,"editormenu"));this.display=D;if(!C&&D&&YAHOO.env.ua.ie>0&&YAHOO.env.ua.ie<8){if(YAHOO.lang.isNull(this.locator)){var A=this.contains_form_elements(this.menu);if(A){console.log("Popup '%s' contains form elements",this.control.innerHTML);this.form=A.form}this.locator=this.menu.parentNode.insertBefore(document.createElement("div"),this.menu);YAHOO.util.Dom.addClass(this.locator,"popupbody");YAHOO.util.Dom.setStyle(this.locator,"visibility","hidden");YAHOO.util.Dom.setStyle(this.locator,"display","block");YAHOO.util.Dom.setStyle(this.locator,"margin","0");YAHOO.util.Dom.setStyle(this.locator,"padding","0");YAHOO.util.Dom.setStyle(this.locator,"border","none");YAHOO.util.Dom.setStyle(this.menu,"display","block");YAHOO.util.Dom.setStyle(this.locator,"width",this.menu.offsetWidth+"px");YAHOO.util.Dom.setStyle(this.locator,"height",this.menu.offsetHeight+"px");YAHOO.util.Dom.setStyle(this.menu,"display","none");this.menu.form=document.body.appendChild(document.createElement("form"));this.menu.form.appendChild(this.menu);if(this.form){YAHOO.util.Event.on(this.menu.form,"submit",this.handle_popup_form_submit,this,true);YAHOO.util.Event.on(this.menu.form,"reset",this.handle_popup_form_reset,this,true)}}if(this.check_menu(this.menu)){YAHOO.util.Dom.setStyle(this.menu,"display","block");YAHOO.util.Dom.setXY(this.menu,this.get_menu_position(B));this.set_control_style()}}else{if(D){if(this.check_menu(this.menu)){YAHOO.util.Dom.setStyle(this.menu,"display","block");this.set_offset(this.menu,B);this.set_control_style()}}else{YAHOO.util.Dom.setStyle(this.menu,"display","none");this.set_control_style()}}};PopupMenu.prototype.check_menu=function(C){if(!YAHOO.util.Dom.hasClass(C,"noempty")){return true}var A=this.menu.getElementsByTagName("li");if(A.length){for(var B=0;B<A.length;B++){if(!YAHOO.util.Dom.hasClass(A[B],"noempty")){return true}}}return false};PopupMenu.prototype.register_popup_form=function(A){var B=this.contains_form_elements(A);if(B){this.form=B.form}};PopupMenu.prototype.contains_form_elements=function(A){var B=null;B=A.getElementsByTagName("input");if(B.length){return B[0]}else{B=A.getElementsByTagName("textarea");if(B.length){return B[0]}else{B=A.getElementsByTagName("select");if(B.length){return B[0]}}}return false};PopupMenu.prototype.handle_popup_form_submit=function(D){YAHOO.util.Event.stopEvent(D);var C=YAHOO.util.Event.getTarget(D);for(var B=0;B<C.elements.length;B++){var A=C.elements[B];if(A.name){switch(A.tagName){case"textarea":case"select":this.replicate_form_value(A);break;case"input":default:switch(A.type){case"hidden":case"text":case"password":this.replicate_form_value(A);break;case"checkbox":case"radio":if(A.checked){this.replicate_form_value(A)}break}}}}this.form.submit()};PopupMenu.prototype.replicate_form_value=function(B){if(!this.form.elements[B.name]){var A=document.createElement("input");A.name=B.name;A.type="hidden";A.value=B.value;this.form.appendChild(A)}else{this.form.elements[B.name].value=B.value}};PopupMenu.prototype.handle_popup_form_reset=function(A){YAHOO.util.Event.getTarget(A).reset();this.form.reset()};PopupMenu.prototype.get_menu_position=function(B){YAHOO.util.Dom.setStyle(this.locator,"display","block");this.set_offset(this.locator,B);var A=YAHOO.util.Dom.getXY(this.locator);YAHOO.util.Dom.setStyle(this.locator,"display","none");return A};PopupMenu.prototype.set_offset=function(D,B){if(!B){return }var E=B.offsetHeight+"px";if(YAHOO.lang.isUndefined(D.oLeft)){D.oLeft=YAHOO.util.Dom.getStyle(D,"left");D.oRight=YAHOO.util.Dom.getStyle(D,"right")}YAHOO.util.Dom.setStyle(D,"top",E);YAHOO.util.Dom.setStyle(D,"left",D.oLeft);YAHOO.util.Dom.setStyle(D,"right",D.oRight);var A=YAHOO.util.Dom.getClientRegion();var C=YAHOO.util.Dom.getRegion(D);if(C.right>A.right){YAHOO.util.Dom.setStyle(D,"right","0px");YAHOO.util.Dom.setStyle(D,"left","auto");C=YAHOO.util.Dom.getRegion(D)}if(C.left<A.left){YAHOO.util.Dom.setStyle(D,"right","auto");YAHOO.util.Dom.setStyle(D,"left","0px");C=YAHOO.util.Dom.getRegion(D)}if(C.bottom>A.bottom){YAHOO.util.Dom.setStyle(D,"top",(C.bottom-C.top)*-1+"px");C=YAHOO.util.Dom.getRegion(D)}if(C.top<A.top){YAHOO.util.Dom.setStyle(D,"top",E)}};PopupMenu.prototype.set_control_style=function(){var A=(this.display?"addClass":"removeClass");YAHOO.util.Dom[A](this.control,"active")};vB_XHTML_Ready.subscribe(init_collapsers);function init_collapsers(){new vBCollapseFactory()}function vBCollapseFactory(){var A=YAHOO.util.Dom.getElementsByClassName("collapse","a");for(var B=0;B<A.length;B++){new vBCollapse(A[B],this)}apply_collapses()}function vBCollapse(B,A){this.init(B,A)}vBCollapse.prototype.init=function(B,A){this.link=B;this.factory=A;this.targetid=null;this.target=null;this.image=null;var D=this.link.id.match(/^collapse_(.*)$/);this.targetid=D[1];this.target=YAHOO.util.Dom.get(this.targetid);this.target.vBCollapseInstance=this;var C=this.link.getElementsByTagName("img");this.image=C[0];if(this.target){YAHOO.util.Event.on(this.link,"click",this.toggle_collapse,this,true)}else{YAHOO.util.Dom.setStyle(this.link,"display","hidden")}};vBCollapse.prototype.collapse=function(){YAHOO.util.Dom.setStyle(this.target,"display","none");this.save_collapsed(true);if(this.image){var A=new RegExp("\\.png$");this.image.src=this.image.src.replace(A,"_collapsed.png")}};vBCollapse.prototype.expand=function(){YAHOO.util.Dom.setStyle(this.target,"display","");this.save_collapsed(false);if(this.image){var A=new RegExp("_collapsed\\.png$");this.image.src=this.image.src.replace(A,".png")}};vBCollapse.prototype.toggle_collapse=function(A){YAHOO.util.Event.stopEvent(A);if(!is_regexp){return false}if(YAHOO.util.Dom.getStyle(this.target,"display")=="none"){this.expand()}else{this.collapse()}return false};vBCollapse.prototype.save_collapsed=function(D){var C=fetch_cookie("vbulletin_collapse");var B=new Array();if(C!=null){C=C.split("\n");for(var A in C){if(YAHOO.lang.hasOwnProperty(C,A)&&C[A]!=this.targetid&&C[A]!=""){B[B.length]=C[A]}}}if(D){B[B.length]=this.targetid}expires=new Date();expires.setTime(expires.getTime()+(1000*86400*365));set_cookie("vbulletin_collapse",B.join("\n"),expires)};function apply_collapses(){var B=fetch_cookie("vbulletin_collapse");if(B!=null){B=B.split("\n");for(var C in B){var A=YAHOO.util.Dom.get(B[C]);if(A){A.vBCollapseInstance.collapse()}}}}function PostBit_Init(A,C){console.log("PostBit Init: %d",C);YAHOO.vBulletin.vBPopupMenu.instrument(A);if(typeof vB_QuickEditor!="undefined"){vB_AJAX_QuickEdit_Init(A)}if(typeof vB_QuickReply!="undefined"){qr_init_buttons(A)}if(typeof YAHOO.vBulletin.imodcollection!="undefined"&&typeof YAHOO.vBulletin.imodcollection.post!="undefined"){var B=YAHOO.vBulletin.imodcollection.post;B.add_control(new InlineModControl(A,C,B))}if(typeof mq_init!="undefined"){mq_init(A)}if(typeof init_reputation_popupmenus!="undefined"){init_reputation_popupmenus(A)}if(typeof vB_Lightbox!="undefined"){init_postbit_lightbox(A,false,true)}child_img_alt_2_title(A);if(typeof YAHOO.vBulletin.vBRestrain!="undefined"){YAHOO.vBulletin.vBRestrain.addcontainer(A);YAHOO.vBulletin.vBRestrain.resize(A)}}YAHOO.util.Event.onDOMReady(init_restrain);function init_restrain(){YAHOO.vBulletin.vBRestrain=new vBRestrain()}function vBRestrain(){this.containers={};this.length=0;var B=YAHOO.util.Dom.getElementsByClassName("postcontainer","div");for(var A=0;A<B.length;A++){this.addcontainer(B[A]);this.length++}var B=YAHOO.util.Dom.getElementsByClassName("postcontainer","li");for(var A=0;A<B.length;A++){this.addcontainer(B[A]);this.length++}var B=YAHOO.util.Dom.getElementsByClassName("postcontainer","p");for(var A=0;A<B.length;A++){this.addcontainer(B[A]);this.length++}var B=YAHOO.util.Dom.getElementsByClassName("postcontainer","blockquote");for(var A=0;A<B.length;A++){this.addcontainer(B[A]);this.length++}if(this.length>0){this.resizeall();YAHOO.util.Event.on(window,"resize",this.resizeall,this,true)}}vBRestrain.prototype.addcontainer=function(A){if(YAHOO.util.Dom.hasClass(A,"postcontainer")||YAHOO.util.Dom.hasClass(A,"bbcode_container")){if(!A.id){YAHOO.util.Dom.generateId(A)}var F=A.id;this.containers[F]={};this.containers[F].object=A;this.containers[F].objects={};var E=YAHOO.util.Dom.getElementsByClassName("restrain","object",A);for(var D=0;D<E.length;D++){if(YAHOO.util.Dom.hasClass(A,"postcontainer")){var C=YAHOO.util.Dom.getAncestorByClassName(E[D],"bbcode_container");if(C){this.addcontainer(C);continue}}if(!E[D].id){YAHOO.util.Dom.generateId(E[D])}var B=E[D].id;this.containers[F].objects[B]=E[D]}}else{var C=YAHOO.util.Dom.getAncestorByClassName(A,"postcontainer");if(C){this.addcontainer(C)}}};vBRestrain.prototype.resize=function(E){if(E.id&&this.containers[E.id]){var B=this.containers[E.id];var F=document.getElementsByTagName("html")[0].getAttribute("dir").toLowerCase();if(!B.object){return }B.paddingLeft=parseFloat(YAHOO.util.Dom.getStyle(B.object,"paddingLeft"));B.paddingRight=parseFloat(YAHOO.util.Dom.getStyle(B.object,"paddingRight"));B.borderLeftWidth=parseFloat(YAHOO.util.Dom.getStyle(B.object,"borderLeftWidth"));B.borderRightWidth=parseFloat(YAHOO.util.Dom.getStyle(B.object,"borderRightWidth"));var D=YAHOO.util.Dom.getRegion(B.object);B.width=D.width-(isNaN(B.paddingLeft)?0:B.paddingLeft)-(isNaN(B.paddingRight)?0:B.paddingRight)-(isNaN(B.borderLeftWidth)?0:B.borderLeftWidth)-(isNaN(B.borderRightWidth)?0:B.borderRightWidth);if(F=="ltr"){if(isNaN(B.paddingRight)||B.paddingRight<5){B.paddingRight=5}B.right=D.right-(isNaN(B.paddingRight)?0:B.paddingRight)-(isNaN(B.borderRightWidth)?0:B.borderRightWidth)}else{if(isNaN(B.paddingLeft)||B.paddingLeft<5){B.paddingLeft=5}B.left=D.left+(isNaN(B.paddingLeft)?0:B.paddingLeft)+(isNaN(B.borderLeftWidth)?0:B.borderLeftWidth)}if(B.width<=0){return }for(var H in B.objects){if(!B.objects[H]){continue}var C=B.objects[H];var D=YAHOO.util.Dom.getRegion(C);if(D.width==0){D.width=parseInt(YAHOO.util.Dom.getStyle(C,"width"),10);D.height=parseInt(YAHOO.util.Dom.getStyle(C,"height"),10);if(D.width==0){return }if(F=="ltr"){D.right+=D.width}else{D.left-=D.width}}if(!C.origwidth){C.origwidth=D.width;C.origheight=D.height;C.aspect=D.width/D.height}if(F=="ltr"){if(D.right>B.right){var A=D.width-(D.right-B.right)-10;if(A<=0){return }YAHOO.util.Dom.setStyle(C,"width",A+"px");YAHOO.util.Dom.setStyle(C,"height",Math.round(A/C.aspect)+"px")}else{if(D.width<C.origwidth){var G=(B.right-D.right)-10;if(D.width+G>=C.origwidth){YAHOO.util.Dom.setStyle(C,"width",C.origwidth+"px");YAHOO.util.Dom.setStyle(C,"height",C.origheight+"px")}else{var A=D.width+G;if(A<=0){return }YAHOO.util.Dom.setStyle(C,"width",A+"px");YAHOO.util.Dom.setStyle(C,"height",Math.round(A/C.aspect)+"px")}}}}else{if(D.left<B.left){var A=D.width-(B.left-D.left)-10;if(A<=0){return }YAHOO.util.Dom.setStyle(C,"width",A+"px");YAHOO.util.Dom.setStyle(C,"height",Math.round(A/C.aspect)+"px")}else{if(D.width<C.origwidth){var G=(D.left-B.left)-10;if(D.width+G>=C.origwidth){YAHOO.util.Dom.setStyle(C,"width",C.origwidth+"px");YAHOO.util.Dom.setStyle(C,"height",C.origheight+"px")}else{var A=D.width+G;if(A<=0){return }YAHOO.util.Dom.setStyle(C,"width",A+"px");YAHOO.util.Dom.setStyle(C,"height",Math.round(A/C.aspect)+"px")}}}}}}};vBRestrain.prototype.resizeall=function(B){for(var A in this.containers){this.resize(this.containers[A].object)}};
;function MakeArray(n)
{
	this.length = n;

	for (var i = 1; i <= n; i++)
	{
		this[i] = i - 1;
	}

	return this;
}

function ToHex(x)
{
	var hex2 = new MakeArray(16);
	hex2[11] = "A"; 
	hex2[12] = "B"; 
	hex2[13] = "C"; 
	hex2[14] = "D";
	hex2[15] = "E"; 
	hex2[16] = "F";

	// Changes a int to hex (in the range 0 to 255)
	var high = x / 16;
	var s = high + "";				//1
	s = s.substring(0, 2);			//2 the combination of these = trunc funct.
	high = parseInt(s, 10);			//3

	var left = hex2[high + 1];		// left part of the hex-value
	var low = x - high * 16;		// calculate the rest of the values

	s = low + "";					//1
	s = s.substring(0, 2);			//2 the combination of these = trunc funct.
	low = parseInt(s, 10);			//3

	var right = hex2[low + 1];		// right part of the hex-value
	var string = left + "" + right;	// add the high and low together

	return string;
}

function fadeout(el)
{
	if (el)
	{
		el = YAHOO.util.Dom.get(el);
		el = el.childNodes[0];

		var textSpan = [el];
	}
	else
	{
		var textSpan = YAHOO.util.Dom.getElementsByClassName("rainbow");
	}

	if (!textSpan.length)
	{
		return;
	}

	var color_d1, color_h1, color_d2, color_h2, color_d3, color_h3, mul, j, newSpan, q, newSpan1, text;

	for (var p = 0; p < textSpan.length; p++)
	{
		text = textSpan[p].lastChild.nodeValue;
		textSpan[p].lastChild.nodeValue = "";
		color_d1 = 255;
		mul = color_d1 / text.length;

		if (!newSpan)
		{
			newSpan = document.createElement("span");
		}

		for (i = 0; i < text.length; i++)
		{
			color_d1 = 255 * Math.sin(i / (text.length / 3));
			color_h1 = ToHex(color_d1);
			color_d2 = mul * i;
			color_h2 = ToHex(color_d2);
			color_d3 = mul * (text.length - i);
			color_h3 = ToHex(color_d3);

			j = i;

			if (text.substring(i, i + 1) == '&')
			{
				for (j = i + 1; j < text.length; j++)
				{
					if (text.substring(j, j + 1) == ';')
					{
						break;
					}
				}

				if (j == text.length)
				{
					j = i;
				}
			}

			if (text.substring(i, i + 1) == '<')
			{
				for (j = i + 1; j < text.length; j++)
				{
					if (text.substring(j, j + 1) == '>')
					{
						break;
					}
				}

				if (j == text.length)
				{
					j = i;
				}
			}

			newSpan1 = document.createElement("span");
			newSpan1.setAttribute("style", "color: #" + color_h3 + color_h1 + color_h2);
			newSpan1.innerHTML = text.substring(i, j + 1);

			newSpan.appendChild(newSpan1);
			i = j;
		}

		textSpan[p].lastChild.parentNode.innerHTML = newSpan.innerHTML;
		newSpan.innerHTML = "";
	}
}
;/*======================================================================*\
|| #################################################################### ||
|| # vBulletin 4.0.2
|| # ---------------------------------------------------------------- # ||
|| # Copyright ©2000-2010 vBulletin Solutions Inc. All Rights Reserved. ||
|| # This file may not be redistributed in whole or significant part. # ||
|| # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # ||
|| # http://www.vbulletin.com | http://www.vbulletin.com/license.html # ||
|| #################################################################### ||
\*======================================================================*/
function display_post(A){if(AJAX_Compatible){vB_PostLoader[A]=new vB_AJAX_PostLoader(A);vB_PostLoader[A].init()}else{pc_obj=fetch_object("postcount"+this.postid);openWindow("showthread.php?"+(SESSIONURL?"s="+SESSIONURL:"")+(pc_obj!=null?"&postcount="+PHP.urlencode(pc_obj.name):"")+"&p="+A+"#post"+A)}return false}var vB_PostLoader=new Array();function vB_AJAX_PostLoader(A){this.postid=A;this.post=YAHOO.util.Dom.get("post_"+this.postid)}vB_AJAX_PostLoader.prototype.init=function(){if(this.post){postid=this.postid;pc_obj=fetch_object("postcount"+this.postid);YAHOO.util.Connect.asyncRequest("POST","showpost.php?p="+this.postid,{success:this.display,failure:this.handle_ajax_error,timeout:vB_Default_Timeout,scope:this},SESSIONURL+"securitytoken="+SECURITYTOKEN+"&ajax=1&postid="+this.postid+(pc_obj!=null?"&postcount="+PHP.urlencode(pc_obj.name):""))}};vB_AJAX_PostLoader.prototype.handle_ajax_error=function(A){vBulletin_AJAX_Error_Handler(A)};vB_AJAX_PostLoader.prototype.display=function(A){if(A.responseXML){var B=A.responseXML.getElementsByTagName("postbit");if(B.length){this.post.parentNode.replaceChild(string_to_node(B[0].firstChild.nodeValue),this.post);PostBit_Init(this.post,this.postid)}else{openWindow("showthread.php?"+(SESSIONURL?"s="+SESSIONURL:"")+(pc_obj!=null?"&postcount="+PHP.urlencode(pc_obj.name):"")+"&p="+this.postid+"#post"+this.postid)}}};
;/*======================================================================*\
|| #################################################################### ||
|| # vBulletin 4.0.2
|| # ---------------------------------------------------------------- # ||
|| # Copyright ©2000-2010 vBulletin Solutions Inc. All Rights Reserved. ||
|| # This file may not be redistributed in whole or significant part. # ||
|| # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # ||
|| # http://www.vbulletin.com | http://www.vbulletin.com/license.html # ||
|| #################################################################### ||
\*======================================================================*/
vB_XHTML_Ready.subscribe(init_posticons);function init_posticons(){var C=YAHOO.util.Dom.get("posticons");var A=YAHOO.util.Dom.get("posticon_preview");var B=new Array();if(C&&A){containers=YAHOO.util.Dom.get("posticons").getElementsByTagName("li");for(i=0;i<containers.length;i++){B[i]=new PostIconPreview(containers[i],A);if(B[i].control.checked){B[i].choose()}}}}function PostIconPreview(B,A){this.posticon_preview=A;this.control=B.getElementsByTagName("input")[0];this.icon=B.getElementsByTagName("img")[0];YAHOO.util.Event.on(this.control,"click",this.choose,this,true)}PostIconPreview.prototype.choose=function(A){this.clear_preview();this.set_preview()};PostIconPreview.prototype.clear_preview=function(A){this.posticon_preview.src="images/clear.gif"};PostIconPreview.prototype.set_preview=function(A){if(this.control.value!=0){this.posticon_preview.src="images/icons/icon"+this.control.value+".gif"}};vB_XHTML_Ready.subscribe(function(A){return handle_dep(document.body)});var DepCtrls=new Object();function handle_dep(B){var A=YAHOO.util.Dom.getElementsByClassName("dep_ctrl","input",B);var D=null;for(var C=0;C<A.length;C++){D=new DepCtrl(A[C]);if(!D.fail){console.log("Dep Ctrl: %s",A[C].id);DepCtrls[A[C].id]=D}}}function DepCtrl(C){this.ctrl=YAHOO.util.Dom.get(C);if(!this.ctrl){console.log("Dep Ctrl (ctrl) FAIL: %s",C.id);this.fail=true;return false}this.deps=YAHOO.util.Dom.get(C.id+"_deps");if(!this.deps){console.log("Dep Ctrl (deps_x) FAIL: %s",C.id);this.fail=true;return false}this.set_disabled_state(this.deps,true);if(this.ctrl.type=="checkbox"){console.log("Checkbox %s",this.ctrl.id);this.add_click_event(this.ctrl)}else{if(this.ctrl.type=="radio"){console.log("Radio %s (%s)",this.ctrl.id,this.ctrl.name);var A=document.getElementsByName(this.ctrl.name);for(var B=0;B<A.length;B++){this.add_click_event(A[B])}}}}DepCtrl.prototype.add_click_event=function(A){YAHOO.util.Event.on(A,"click",this.check_state,this,true)};DepCtrl.prototype.check_state=function(A){this.set_disabled_state(this.deps,true);this.set_focus()};DepCtrl.prototype.set_disabled_state=function(B,C){if(B.tagName&&(B.tagName!="DD"||C)){B.disabled=!this.ctrl.checked||this.ctrl.disabled;if(B.tagName=="INPUT"&&YAHOO.util.Dom.hasClass(B,"dep_ctrl")&&DepCtrls[B.id]){DepCtrls[B.id].set_disabled_state(DepCtrls[B.id].deps,true)}if(B.hasChildNodes()){for(var A=0;A<B.childNodes.length;A++){this.set_disabled_state(B.childNodes[A])}}}};DepCtrl.prototype.is_form_element=function(A){switch(A.tagName){case"INPUT":case"SELECT":case"TEXTAREA":return true;default:return false}};DepCtrl.prototype.set_focus=function(B){var A=YAHOO.util.Dom.getElementsBy(this.is_form_element,"*",this.deps);try{try{A[0].focus()}catch(B){A[0].focus()}}catch(B){}};
;/*======================================================================*\
|| #################################################################### ||
|| # vBulletin 4.0.2
|| # ---------------------------------------------------------------- # ||
|| # Copyright ©2000-2010 vBulletin Solutions Inc. All Rights Reserved. ||
|| # This file may not be redistributed in whole or significant part. # ||
|| # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # ||
|| # http://www.vbulletin.com | http://www.vbulletin.com/license.html # ||
|| #################################################################### ||
\*======================================================================*/
function vB_AJAX_QuickEdit_Init(C){if(AJAX_Compatible){if(typeof C=="string"){C=fetch_object(C)}var B=fetch_tags(C,"a");for(var A=0;A<B.length;A++){if(B[A].name&&B[A].name.indexOf("vB::QuickEdit::")!=-1){B[A].onclick=vB_AJAX_QuickEditor_Events.prototype.editbutton_click}}}}function vB_AJAX_QuickEditor(){this.editimgsrc=null;this.postid=null;this.messageobj=null;this.container=null;this.originalhtml=null;this.editstate=false;this.editorcounter=0;this.ajax_req=null;this.show_advanced=true;vBulletin.attachinfo={posthash:"",poststarttime:""}}vB_AJAX_QuickEditor.prototype.ready=function(){if(this.editstate||YAHOO.util.Connect.isCallInProgress(this.ajax_req)){return false}else{return true}};vB_AJAX_QuickEditor.prototype.edit=function(A){if(typeof vb_disable_ajax!="undefined"&&vb_disable_ajax>0){return true}var B=A.substr(A.lastIndexOf("::")+2);if(YAHOO.util.Connect.isCallInProgress(this.ajax_req)){return false}else{if(!this.ready()){if(this.postid==B){this.full_edit();return false}this.abort()}}this.editorcounter++;this.editorid="vB_Editor_QE_"+this.editorcounter;this.postid=B;this.messageobj=fetch_object("post_message_"+this.postid);this.originalhtml=this.messageobj.innerHTML;this.unchanged=null;this.unchanged_reason=null;this.fetch_editor();this.editstate=true;return false};vB_AJAX_QuickEditor.prototype.fetch_editor=function(){if(YAHOO.util.Dom.get("progress_"+this.postid)){this.editimgsrc=YAHOO.util.Dom.get("editimg_"+this.postid).getAttribute("src");YAHOO.util.Dom.get("editimg_"+this.postid).setAttribute("src",YAHOO.util.Dom.get("progress_"+this.postid).getAttribute("src"))}document.body.style.cursor="wait";YAHOO.util.Connect.asyncRequest("POST","ajax.php?do=quickedit&p="+this.postid,{success:this.display_editor,failure:this.error_opening_editor,timeout:vB_Default_Timeout,scope:this},SESSIONURL+"securitytoken="+SECURITYTOKEN+"&do=quickedit&p="+this.postid+"&editorid="+PHP.urlencode(this.editorid))};vB_AJAX_QuickEditor.prototype.error_opening_editor=function(A){vBulletin_AJAX_Error_Handler(A);window.location="editpost.php?"+SESSIONURL+"do=editpost&postid="+this.postid};vB_AJAX_QuickEditor.prototype.handle_save_error=function(A){vBulletin_AJAX_Error_Handler(A);this.show_advanced=false;this.full_edit()};vB_AJAX_QuickEditor.prototype.display_editor=function(F){if(F.responseXML){if(YAHOO.util.Dom.get("progress_"+vB_QuickEditor.postid)){YAHOO.util.Dom.get("editimg_"+this.postid).setAttribute("src",vB_QuickEditor.editimgsrc)}document.body.style.cursor="auto";if(fetch_tag_count(F.responseXML,"disabled")){window.location="editpost.php?"+SESSIONURL+"do=editpost&postid="+this.postid}else{if(fetch_tag_count(F.responseXML,"error")){}else{if(F.responseXML.getElementsByTagName("contenttypeid").length>0){vBulletin.attachinfo={contenttypeid:F.responseXML.getElementsByTagName("contenttypeid")[0].firstChild.nodeValue,userid:F.responseXML.getElementsByTagName("userid")[0].firstChild.nodeValue,attachlimit:F.responseXML.getElementsByTagName("attachlimit")[0].firstChild.nodeValue,max_file_size:F.responseXML.getElementsByTagName("max_file_size")[0].firstChild.nodeValue,auth_type:F.responseXML.getElementsByTagName("auth_type")[0].firstChild.nodeValue,posthash:F.responseXML.getElementsByTagName("posthash")[0].firstChild.nodeValue,poststarttime:F.responseXML.getElementsByTagName("poststarttime")[0].firstChild.nodeValue};var B=F.responseXML.getElementsByTagName("values");if(B.length>0&&B[0].childNodes.length){vBulletin.attachinfo.values={};for(var D=0;D<B[0].childNodes.length;D++){if(B[0].childNodes[D].nodeName!="#text"&&typeof (B[0].childNodes[D].childNodes[0])!="undefined"){vBulletin.attachinfo.values[B[0].childNodes[D].nodeName]=B[0].childNodes[D].childNodes[0].nodeValue}}}var A=F.responseXML.getElementsByTagName("phrases");if(A.length>0&&A[0].childNodes.length){for(var D=0;D<A[0].childNodes.length;D++){if(A[0].childNodes[D].nodeName!="#text"&&typeof (A[0].childNodes[D].childNodes[0])!="undefined"){vbphrase[A[0].childNodes[D].nodeName]=A[0].childNodes[D].childNodes[0].nodeValue}}}}var E=fetch_tags(F.responseXML,"editor")[0];if(typeof E=="undefined"){window.location="editpost.php?"+SESSIONURL+"do=editpost&postid="+this.postid;return false}var G=E.getAttribute("reason");this.messageobj.innerHTML=E.firstChild.nodeValue;if(fetch_object(this.editorid+"_edit_reason")){this.unchanged_reason=PHP.unhtmlspecialchars(G);fetch_object(this.editorid+"_edit_reason").value=this.unchanged_reason;fetch_object(this.editorid+"_edit_reason").onkeypress=vB_AJAX_QuickEditor_Events.prototype.reason_key_trap}vB_Editor[this.editorid]=new vB_Text_Editor(this.editorid,E.getAttribute("mode"),E.getAttribute("parsetype"),E.getAttribute("parsesmilies"));if(fetch_object(this.editorid+"_editor")&&fetch_object(this.editorid+"_editor").scrollIntoView){fetch_object(this.editorid+"_editor").scrollIntoView(true)}vB_Editor[this.editorid].set_editor_width("100%",true);vB_Editor[this.editorid].check_focus();this.unchanged=vB_Editor[this.editorid].get_editor_contents();YAHOO.util.Event.on(YAHOO.util.Dom.get(this.editorid+"_save"),"click",this.save,this,true);YAHOO.util.Event.on(YAHOO.util.Dom.get(this.editorid+"_abort"),"click",this.abort,this,true);YAHOO.util.Event.on(YAHOO.util.Dom.get(this.editorid+"_adv"),"click",this.full_edit,this,true);YAHOO.util.Event.on("quick_edit_errors_hide","click",this.hide_errors,this,true);YAHOO.util.Event.on("quick_edit_errors_cancel","click",this.abort,this,true);var C=YAHOO.util.Dom.get(this.editorid+"_delete");if(C){YAHOO.util.Event.on(this.editorid+"_delete","click",this.show_delete,this,true)}}}handle_dep(this.editorid)}};vB_AJAX_QuickEditor.prototype.restore=function(C,A){this.hide_errors(true);if(this.editorid&&vB_Editor[this.editorid]&&vB_Editor[this.editorid].initialized){vB_Editor[this.editorid].destroy()}if(A=="tableobj"){var B=YAHOO.util.Dom.get("post_"+this.postid);B.parentNode.replaceChild(string_to_node(C),B)}else{this.messageobj.innerHTML=C}this.editstate=false};vB_AJAX_QuickEditor.prototype.abort=function(A){if(A){YAHOO.util.Event.stopEvent(A)}if(YAHOO.util.Dom.get("progress_"+vB_QuickEditor.postid)&&vB_QuickEditor.editimgsrc){YAHOO.util.Dom.get("editimg_"+vB_QuickEditor.postid).setAttribute("src",vB_QuickEditor.editimgsrc)}document.body.style.cursor="auto";vB_QuickEditor.restore(vB_QuickEditor.originalhtml,"messageobj");PostBit_Init(fetch_object("post_"+vB_QuickEditor.postid),vB_QuickEditor.postid)};vB_AJAX_QuickEditor.prototype.full_edit=function(B){var A=new vB_Hidden_Form("editpost.php?do=updatepost&postid="+vB_QuickEditor.postid);A.add_variable("do","updatepost");A.add_variable("s",fetch_sessionhash());A.add_variable("securitytoken",SECURITYTOKEN);if(vB_QuickEditor.show_advanced){A.add_variable("advanced",1)}else{A.add_variable("quickeditnoajax",1)}A.add_variable("postid",vB_QuickEditor.postid);A.add_variable("wysiwyg",vB_Editor[vB_QuickEditor.editorid].wysiwyg_mode);A.add_variable("message",vB_Editor[vB_QuickEditor.editorid].get_editor_contents());A.add_variable("reason",fetch_object(vB_QuickEditor.editorid+"_edit_reason").value);A.add_variable("posthash",vBulletin.attachinfo.posthash);A.add_variable("poststarttime",vBulletin.attachinfo.poststarttime);A.submit_form()};vB_AJAX_QuickEditor.prototype.save=function(B){var C=vB_Editor[vB_QuickEditor.editorid].get_editor_contents();var A=vB_Editor[vB_QuickEditor.editorid];if(C==vB_QuickEditor.unchanged&&A==vB_QuickEditor.unchanged_reason){vB_QuickEditor.abort(B)}else{fetch_object(vB_QuickEditor.editorid+"_posting_msg").style.display="";document.body.style.cursor="wait";pc_obj=fetch_object("postcount"+vB_QuickEditor.postid);this.ajax_req=YAHOO.util.Connect.asyncRequest("POST","editpost.php?do=updatepost&postid="+this.postid,{success:vB_QuickEditor.update,failure:vB_QuickEditor.handle_save_error,timeout:vB_Default_Timeout,scope:vB_QuickEditor},SESSIONURL+"securitytoken="+SECURITYTOKEN+"&do=updatepost&ajax=1&postid="+vB_QuickEditor.postid+"&posthash="+vBulletin.attachinfo.posthash+"&poststarttime="+vBulletin.attachinfo.poststarttime+"&wysiwyg="+vB_Editor[vB_QuickEditor.editorid].wysiwyg_mode+"&message="+PHP.urlencode(C)+"&reason="+PHP.urlencode(fetch_object(vB_QuickEditor.editorid+"_edit_reason").value)+(pc_obj!=null?"&postcount="+PHP.urlencode(pc_obj.name):""));vB_QuickEditor.pending=true}};vB_AJAX_QuickEditor.prototype.show_delete=function(){vB_QuickEditor.deletedialog=fetch_object("quickedit_delete");if(vB_QuickEditor.deletedialog&&vB_QuickEditor.deletedialog.style.display!=""){vB_QuickEditor.deletedialog.style.display="";vB_QuickEditor.deletebutton=fetch_object("quickedit_dodelete");vB_QuickEditor.deletebutton.onclick=vB_QuickEditor.delete_post;if(fetch_object("del_reason")){fetch_object("del_reason").onkeypress=vB_AJAX_QuickEditor_Events.prototype.delete_items_key_trap}}};vB_AJAX_QuickEditor.prototype.delete_post=function(){var A=fetch_object("rb_del_leave");if(A&&A.checked){vB_QuickEditor.abort();return }var B=new vB_Hidden_Form("editpost.php");B.add_variable("do","deletepost");B.add_variable("s",fetch_sessionhash());B.add_variable("securitytoken",SECURITYTOKEN);B.add_variable("postid",vB_QuickEditor.postid);B.add_variables_from_object(vB_QuickEditor.deletedialog);B.submit_form()};vB_AJAX_QuickEditor.prototype.update=function(C){if(C.responseXML){vB_QuickEditor.pending=false;document.body.style.cursor="auto";fetch_object(vB_QuickEditor.editorid+"_posting_msg").style.display="none";if(fetch_tag_count(C.responseXML,"error")){var D=fetch_tags(C.responseXML,"error");var A="<ol>";for(var B=0;B<D.length;B++){A+="<li>"+D[B].firstChild.nodeValue+"</li>"}A+="</ol>";vB_QuickEditor.show_errors(A)}else{vB_QuickEditor.restore(C.responseXML.getElementsByTagName("postbit")[0].firstChild.nodeValue,"tableobj");PostBit_Init(fetch_object("post_"+vB_QuickEditor.postid),vB_QuickEditor.postid)}}return false};vB_AJAX_QuickEditor.prototype.show_errors=function(A){set_unselectable("quick_edit_errors_hide");YAHOO.util.Dom.get("ajax_post_errors_message").innerHTML=A;var B=YAHOO.util.Dom.get("ajax_post_errors");var C=(is_saf?"body":"documentElement");B.style.left=(is_ie?document.documentElement.clientWidth:self.innerWidth)/2-200+document[C].scrollLeft+"px";B.style.top=(is_ie?document.documentElement.clientHeight:self.innerHeight)/2-150+document[C].scrollTop+"px";YAHOO.util.Dom.removeClass(B,"hidden")};vB_AJAX_QuickEditor.prototype.hide_errors=function(A){this.errors=false;YAHOO.util.Dom.addClass("ajax_post_errors","hidden");if(A!=true){vB_Editor[this.editorid].check_focus()}};function vB_AJAX_QuickEditor_Events(){}vB_AJAX_QuickEditor_Events.prototype.editbutton_click=function(A){return vB_QuickEditor.edit(this.name)};vB_AJAX_QuickEditor_Events.prototype.delete_button_handler=function(A){if(this.id=="rb_del_leave"&&this.checked){vB_QuickEditor.deletebutton.disabled=true}else{vB_QuickEditor.deletebutton.disabled=false}};vB_AJAX_QuickEditor_Events.prototype.reason_key_trap=function(A){A=A?A:window.event;switch(A.keyCode){case 9:fetch_object(vB_QuickEditor.editorid+"_save").focus();return false;break;case 13:vB_QuickEditor.save();return false;break;default:return true}};vB_AJAX_QuickEditor_Events.prototype.delete_items_key_trap=function(A){A=A?A:window.event;if(A.keyCode==13){if(vB_QuickEditor.deletebutton.disabled==false){vB_QuickEditor.delete_post()}return false}return true};var vB_QuickEditor=new vB_AJAX_QuickEditor();
;/************************************************************************\
 *
 * CES Vault Wiki
 * Version CES_VERSION
 *
 * CES_VAULT_COPYRIGHT
 *
\************************************************************************/

// #############################################################################
// vB_WikiTabs
// #############################################################################

var vB_WikiTabs = new Array();

// #############################################################################
// vB_WikiTab
// call using:
// vBulletin.register_control("vB_WikiTabs", tab_container, initial_tab_id, overflow_tab_label)
// #############################################################################

vBulletin.events.systemInit.subscribe(function()
{
	if (vBulletin.elements["vB_WikiTabs"])
	{
		var i,
			element;

		for (i = 0; i < vBulletin.elements["vB_WikiTabs"].length; i++)
		{
			element = vBulletin.elements["vB_WikiTabs"][i];
			vB_WikiTabs[element[0]] = new vB_WikiTab(element[0], element[1], element[2]);
		}
		vBulletin.elements["vB_WikiTabs"] = null;
	}
});

// =============================================================================

/**
* VaultWiki tabbed content
*
* @param	string	HTML element containing tab divs - each tab must be a div.content_block with a child of h4... etc.
* @param	string	Identifier of initially-selected tab
* @param	string	Text to place onto the overflow tab - recommend &raquo;
* @param	string	URL from which to request new tab content via AJAX
*/
function vB_WikiTab(tab_object, initial_tab_id, overflow_tab_string)
{
	var i,
		content_blocks,
		li,
		tab_id,
		selected_index,
		collapseobj,
		jsfail;

	console.log("Init vB_WikiTab for %s with initial tab id = %s", tab_container, initial_tab_id);
	this.tab_container = YAHOO.util.Dom.get(tab_object).parentNode;
	this.selected_tab_id = initial_tab_id;

	this.splitter = ajax_load_url[tab_object].indexOf("?") != -1 ? "?" : "&";
	this.ajax_load_url = ajax_load_url[tab_object].split(this.splitter);
	this.ajax_load_url[1] = this.ajax_load_url[1].replace(/\{(\d+)(:\w+)?\}/gi, '%$1$s');

	this.tab_count = 0;
	content_blocks = YAHOO.util.Dom.getElementsByClassName("content_block", "div", tab_container);

	if (content_blocks.length)
	{
		console.log("vB_WikiTab :: Found %d tab content blocks", content_blocks.length);

		this.tab_element = YAHOO.util.Dom.getElementsByClassName("p-cactions", "ul", tab_container)[0];
		selected_index = -1;

		for (i = 0; i < content_blocks.length; i++)
		{
			this.tab_count++;
			tab_id = content_blocks[i].getAttribute("id");

			// hide collapser
			collapseobj = YAHOO.util.Dom.get("collapseobj_" + tab_id);
			if (collapseobj)
			{
				YAHOO.util.Dom.setStyle(collapseobj, "display", "block");
			}

			if (nojs_tabs.indexOf(tab_id.split("-")[1]) == "-1")
			{
				jsfail = YAHOO.util.Dom.get(tab_id + "-link");
				if (jsfail)
				{
					jsfail.parentNode.innerHTML = jsfail.innerHTML;
				}
			}

			if (tab_id == this.selected_tab_id)
			{
				selected_index = i;
			}
		}
	}

	// set a default tab
	if (selected_index == -1)
	{
		selected_index = 0;
		this.selected_tab_id = content_blocks[0].getAttribute("id");
	}

	// we can get duplicate tabs, so do a recount
	this.tabs = this.tab_element.getElementsByTagName("li");

	// prevent wrapped tabs from showing by setting the height of the overflow-hidden tab container
	// we have to add the class early or the height is wrong after AJAX edit
	YAHOO.util.Dom.addClass(this.tabs[selected_index], "selected");

	if (VAULT_40X_COMPAT)
	{
		var tab_height = parseInt(this.tabs[selected_index].offsetHeight - 3);
	}
	else
	{
		var tab_height = parseInt(this.tabs[selected_index].offsetHeight + 1);
	}

	YAHOO.util.Dom.setStyle(this.tab_element, "height", tab_height + "px");

	for (i = 0; i < this.tab_count; i++)
	{
		if (
			selected_index == i ||
			nojs_tabs.indexOf(this.tabs[i].id.split("-")[1].split("_")[0]) == "-1"
		)
		{
			this.init_tab(this.tabs[i]);
		}

		this.tabs[i].setAttribute("fixed_width", this.tabs[i].offsetWidth);
		YAHOO.util.Dom.setStyle(this.tabs[i], "display", "none");

		// we need this part of init_tab
		if (selected_index != i)
		{
			YAHOO.util.Dom.setStyle(content_blocks[i], "display", "none");
		}
	}

	// create the overflow tab
	this.overflow_tab = YAHOO.util.Dom.getElementsByClassName("overflow_tab", "li", this.tab_element)[0];
	if (typeof(this.overflow_tab) == "undefined")
	{
		this.overflow_tab = this.tab_element.appendChild(document.createElement("li"));
		this.overflow_tab.setAttribute("dir", "ltr");
		YAHOO.util.Dom.addClass(this.overflow_tab, "overflow_tab");
		YAHOO.util.Event.on(this.overflow_tab, "click", this.show_menu, this, true);

		if (overflow_tab_string)
		{
			this.overflow_tab.innerHTML = overflow_tab_string;
		}
		else
		{
			this.overflow_tab.appendChild(document.createTextNode("&raquo;"));
		}
	}

	this.switch_tab(this.selected_tab_id, true);

	YAHOO.util.Event.on(window, "resize", this.resize, this, true);
	YAHOO.util.Event.on(document, "click", this.hide_menu, this, true);
};

/**
* Handles a click on a tab
*
* @return	boolean
*/
vB_WikiTab.prototype.click_tab = function(e)
{
	if (!YAHOO)
	{
		// occurs when changing window.location
		return false;
	}

	YAHOO.util.Event.stopEvent(e);

	var targetTab = YAHOO.util.Event.getTarget(e);

	if (this.menu_open && targetTab.tagName == "A")
	{
		targetTab = YAHOO.util.Dom.get(targetTab.getAttribute("id").split("-link")[0] + "_tab");
	}

	if (targetTab.tagName == "SPAN")
	{
		while (targetTab.tagName != "LI" && targetTab.parentNode)
		{
			targetTab = targetTab.parentNode;
		}
	}

	return this.switch_tab(targetTab.getAttribute("id").split("_tab")[0]);
};

/**
* Switch to a different tab
*
* @param	string	ID of tab to be selected
* @param	boolean	Force tab switch
*
* @return	boolean	false
*/
vB_WikiTab.prototype.switch_tab = function(selected_tab_id, force)
{
	if (!selected_tab_id)
	{
		return false;
	}

	if (this.selected_tab_id != selected_tab_id || force)
	{
		var i,
			tab_id,
			content_element,
			poll_show = false;

		this.hide_menu();

		this.selected_tab_id = selected_tab_id;
		this.selected_tab = YAHOO.util.Dom.get(this.selected_tab_id + "_tab");

		if (
			this.selected_tab_id == "ca-poll" ||
			(
				(
					this.selected_tab_id == "ca-article" ||
					this.selected_tab_id == "ca-talk"
				) &&
				YAHOO.util.Dom.get("collapseobj_ca-poll").innerHTML != ""
			)
		)
		{
			poll_show = true;
		}
				
		YAHOO.util.Dom.setStyle(YAHOO.util.Dom.get("collapseobj_ca-poll"), "display", (poll_show ? "block" : "none"));

		for (i = 0; i < this.tab_count; i++)
		{
			tab_id = this.tabs[i].getAttribute("id").split("_tab")[0];

			if (tab_id == this.selected_tab_id)
			{
				if (!YAHOO.util.Dom.hasClass(this.tabs[i], "selected"))
				{
					YAHOO.util.Dom.addClass(this.tabs[i], "selected");
				}
			}
			else
			{
				YAHOO.util.Dom.removeClass(this.tabs[i], "selected");
			}

			content_element = YAHOO.util.Dom.get(tab_id);
			YAHOO.util.Dom.setStyle(content_element, "display", (tab_id == this.selected_tab_id ? "block" : "none"));

			if (tab_id == this.selected_tab_id && YAHOO.util.Dom.get("collapseobj_" + tab_id).innerHTML == "")
			{
				this.load_tab_content(this.selected_tab_id);
			}
		}

		if (!this.exiter)
		{
			console.log("vB_WikiTab :: Switched to '%s' tab", this.selected_tab_id);

			this.resize();
		}
	}

	return false;
};

/**
* Load an empty tab via POST
*
* @param	string	ID of tab to be selected
*/
vB_WikiTab.prototype.load_tab_content = function(tab_id)
{
	var load_id = tab_id.split("ca-")[1];
	var load_img = YAHOO.util.Dom.get("tab_loading_msg");
	var load_node = YAHOO.util.Dom.get("collapseobj_" + tab_id);

	if (load_node.innerHTML != "")
	{
		// this only happens if we explicitly call a refresh
		load_node.innerHTML = "";
	}

	// creating the img prevents recurrent calls
	var load_img_tab = document.createElement("div");

	load_img_tab.setAttribute("id", "tab_loading_msg_" + load_id);
	YAHOO.util.Dom.setStyle(load_img_tab, "margin", "50px");
	YAHOO.util.Dom.setStyle(load_img_tab, "textAlign", "center");
	YAHOO.util.Dom.setStyle(load_img_tab, "display", "block");
	load_img_tab.innerHTML = load_img.innerHTML;

	if (VAULT_40X_COMPAT)
	{
		var node_class = "postbit";
	}
	else
	{
		var node_class = "vw-content tborder";
	}

	if (!YAHOO.util.Dom.hasClass(load_node, node_class))
	{
		if (YAHOO.util.Dom.hasClass(load_node, "vw-broken"))
		{
			this.broken_class = true;
			YAHOO.util.Dom.removeClass(load_node, "vw-broken");
		}
		else
		{
			this.broken_class = false;
		}

		YAHOO.util.Dom.addClass(load_node, node_class);
	}

	load_node.appendChild(load_img_tab);
	this.constructed_load_url = construct_phrase(this.ajax_load_url[1], PHP.urlencode(load_id));

	YAHOO.util.Connect.asyncRequest("POST", this.ajax_load_url[0] + this.splitter + this.constructed_load_url,
	{
		success: this.ajax_complete,
		failure: this.ajax_failure,
		timeout: 15000,
		scope: this
	}, this.constructed_load_url + "&ajax=1&securitytoken=" + PHP.urlencode(SECURITYTOKEN));
};

/**
* Recalculates which tabs should be displayed after a page resize
*/
vB_WikiTab.prototype.resize = function(e)
{
	this.hide_menu();

	var total_width,
		i,
		j,
		display_tab_count,
		content_element_id,
		selected_tab,
		replace_tab,
		new_selected_tab,
		menu_element_names;

	YAHOO.util.Dom.setStyle(this.overflow_tab, "display", "block");
	var flow_width = this.overflow_tab.offsetWidth - this.tab_element.offsetLeft + 10;
	YAHOO.util.Dom.setStyle(this.overflow_tab, "display", "none");

	var of_width = 0;
	total_width = this.tab_element.offsetWidth;
	display_tab_count = 0;

	for (i = 0; i < this.tab_count; i++)
	{
		YAHOO.util.Dom.setStyle(this.tabs[i], "display", "block");
		of_width = this.tabs[i].offsetLeft + Math.max(parseInt(this.tabs[i].getAttribute("fixed_width")), this.tabs[i].offsetWidth) + flow_width;

		if (of_width < total_width)
		{
			display_tab_count++;
		}
		else
		{
			YAHOO.util.Dom.setStyle(this.tabs[i], "display", "none");
		}

		content_element_id = this.tabs[i].getAttribute("id").split("_tab")[0];
		if (content_element_id == this.selected_tab_id && YAHOO.util.Dom.getStyle(this.tabs[i], "display") == "none")
		{
			console.info("vB_WikiTab :: Moving selected tab... Found the selected tab: %d, %s", i, content_element_id);
			selected_tab = this.tabs[i];

			for (j = i; j >= 0; j--)
			{
				if (YAHOO.util.Dom.getStyle(this.tabs[j], "display") != "none")
				{
					console.log("vB_WikiTab :: Replace tab %d (%s) with %d (%s)", j, this.tabs[j].getAttribute("tab_id"), i, content_element_id);

					// placeholder for new tab
					replace_tab = this.tabs[j];
					new_selected_tab = this.tab_element.insertBefore(selected_tab.cloneNode(true), replace_tab);

					// remove the selected tab
					YAHOO.util.Event.removeListener(selected_tab, "click", this.click_tab, this, true);
					YAHOO.util.Event.removeListener(selected_tab.firstChild, "click", this.click_tab, this, true);
					selected_tab.parentNode.removeChild(selected_tab);

					YAHOO.util.Dom.setStyle(new_selected_tab, "display", "block");
					this.init_tab(new_selected_tab);

					return this.resize();
				}
			}
		}
	}

	this.display_tab_count = display_tab_count;

	// show the overflow tab and set its title
	menu_element_names = new Array();
	for (i = this.display_tab_count; i < this.tabs.length; i++)
	{
		if (this.tabs[i] != this.overflow_tab)
		{
			menu_element_names.push(this.tabs[i].innerHTML);
		}
	}

	this.overflow_tab.setAttribute("title", menu_element_names.join(",\n"));
	YAHOO.util.Dom.setStyle(this.overflow_tab, "display", (this.tab_count > display_tab_count ? "block" : "none"));

	// update the background position
	for (i = 0; i < this.tab_count; i++)
	{
		YAHOO.util.Dom.setStyle(this.tabs[i], "backgroundPosition", (this.tabs[i].getAttribute("id").split("_tab")[0] == this.selected_tab_id ? (this.tabs[i].offsetLeft * -1) + "px 0px" : "0px 0px"));
	}
};

/**
* Shows the popup menu containing overflowed tabs
*
* @return	boolean	false
*/
vB_WikiTab.prototype.show_menu = function(e)
{
	YAHOO.util.Event.stopEvent(e);

	if (this.menu_open)
	{
		this.hide_menu();

		return false;
	}

	var i,
		counter,
		current_menu_element,
		menupos,
		menupos_x;

	this.menu = document.createElement("ul");
	this.menu.setAttribute("id", this.tab_element.id + "menu");

	if (VAULT_40X_COMPAT)
	{
		YAHOO.util.Dom.addClass(this.menu, "popupbody vw-menu");
		YAHOO.util.Dom.setStyle(this.menu, "display", "block");
	}
	else
	{
		YAHOO.util.Dom.addClass(this.menu, "vbmenu_popup");
		YAHOO.util.Dom.addClass(this.menu, "tab_popup");
	}

	menu_element_names = new Array();
	var linkid, newlink, ptext;
	counter = 0;

	for (i = this.display_tab_count; i < this.tab_count; i++)
	{
		current_menu_element = this.menu.appendChild(this.tabs[i].cloneNode(true));
		YAHOO.util.Dom.setStyle(current_menu_element, "display", "block");
		YAHOO.util.Dom.setStyle(current_menu_element, "width", "auto");

		if (VAULT_40X_COMPAT)
		{
			linkid = this.tabs[i].id.split("_")[0];
			if (!YAHOO.util.Dom.get(linkid + "-link", current_menu_element))
			{
				newlink = document.createElement("a");
				newlink.id = linkid + "-link";
				newlink.href = "javascript://";

				ptext = YAHOO.util.Dom.getElementsByClassName("p-text", "span", current_menu_element)[0];
				current_menu_element.removeChild(ptext);

				newlink.appendChild(ptext);
				current_menu_element.appendChild(newlink);
			}
		}
		else
		{
			YAHOO.util.Dom.addClass(current_menu_element, "vbmenu_option");
		}

		if (counter++ < 1)
		{
			YAHOO.util.Dom.addClass(current_menu_element, "first");
		}

		if (
			this.selected_tab_id != this.tabs[i].id.split("_")[0] &&
			nojs_tabs.indexOf(this.tabs[i].id.split("-")[1].split("_")[0]) == "-1"
		)
		{
			this.init_tab(current_menu_element);
		}
	}

	this.tab_container.appendChild(this.menu);
	menupos = YAHOO.util.Dom.getXY(this.overflow_tab);

	// check that the menu has not opened hanging off the screen
	menupos_x = menupos[0] - current_menu_element.offsetWidth + this.overflow_tab.offsetWidth;
	menupos_x  = (menupos_x < fetch_viewport_info()["x"]) ? menupos[0] : menupos_x;

	YAHOO.util.Dom.setX(this.menu, menupos_x);
	YAHOO.util.Dom.setY(this.menu, menupos[1] + this.overflow_tab.offsetHeight - 1);

	this.menu_open = true;

	return false;
};

/**
* Hides the popup menu containing overflowed tabs
*/
vB_WikiTab.prototype.hide_menu = function()
{
	if (this.menu && this.menu_open)
	{
		this.menu.parentNode.removeChild(this.menu);
	}

	this.menu_open = false;
};

/**
* Initializes a tab with event listeners etc.
*
* @param	object	HTML tab (LI) element
* @param	boolean	Extract full title for tab
*/
vB_WikiTab.prototype.init_tab = function(tab_element)
{
	YAHOO.util.Event.on(tab_element, "click", this.click_tab, this, true);
};

/**
* Process the POST response.
*
* @param	object	YUI AJAX
*
* @param	boolean	false
*/
vB_WikiTab.prototype.ajax_complete = function(ajax)
{
	if (ajax.responseXML)
	{
		if (VAULT_40X_COMPAT)
		{
			var node_class = "postbit";
		}
		else
		{
			var node_class = "vw-content tborder";
		}

		if (fetch_tag_count(ajax.responseXML, "error"))
		{
			// do nothing
			var articleResponse = fetch_tags(ajax.responseXML, "error")[0];
			var tabId = articleResponse.getAttribute("tab_id");

			if (!tabId)
			{
				return false;
			}

			var collapseobj = YAHOO.util.Dom.get("collapseobj_" + tabId);
			if (!collapseobj)
			{
				return false;
			}

			collapseobj.innerHTML = "";

			if (!YAHOO.util.Dom.hasClass(collapseobj, node_class))
			{
				YAHOO.util.Dom.addClass(collapseobj, node_class);
			}

			var error_box = document.createElement("table");

			if (VAULT_40X_COMPAT)
			{
				YAHOO.util.Dom.addClass(error_box, "postbody");
			}

			YAHOO.util.Dom.setStyle(error_box, "margin", "50px");
			YAHOO.util.Dom.setStyle(error_box, "display", "block");

			var error_img = document.createElement("img");
			YAHOO.util.Dom.setStyle(error_img, "margin-right", "20px");

			if (is_ie && !is_ie7)
			{
				error_img.src = VAULT_IMGDIR + "/vault_error.gif";
			}
			else
			{
				error_img.src = VAULT_IMGDIR + "/vault_error.png";
			}

			error_img.alt = "";
			error_img.border = 0;

			var error_ibox = document.createElement("td");
			YAHOO.util.Dom.setStyle(error_ibox, "vertical-align", "middle");
			error_ibox.appendChild(error_img);

			var error_msg = document.createElement("td");
			YAHOO.util.Dom.setStyle(error_msg, "vertical-align", "middle");
			error_msg.innerHTML = articleResponse.firstChild.nodeValue;

			var error_row = document.createElement("tr");
			error_row.appendChild(error_ibox);
			error_row.appendChild(error_msg);
			error_box.appendChild(error_row);

			collapseobj.appendChild(error_box);
		}
		else
		{
			var tab_id;
			var articleResponse = fetch_tags(ajax.responseXML, "article")[0];
			var articleId = fetch_tags(ajax.responseXML, "url")[0];

			if (!articleResponse || !articleId)
			{
				return false;
			}

			var tabId = articleResponse.getAttribute("tab_id");
			if (!tabId)
			{
				return false;
			}

			var collapseobj = YAHOO.util.Dom.get("collapseobj_" + tabId);
			if (!collapseobj)
			{
				return false;
			}

			var threadurl = articleId.firstChild.nodeValue.replace(/\{(\d+)(:\w+)?\}/gi, '%$1$s');
			if (this.ajax_load_url[0] + this.splitter + this.ajax_load_url[1] != threadurl)
			{
				if (vB_ResetHandle.parseRedirect(ajax.responseXML, threadurl))
				{
					this.exiter = true;

					return false;
				}
			}
			else
			{
				if (tabId == "ca-article" || tabId == "ca-talk")
				{
					vB_ResetHandle.insertPoll(ajax.responseXML);
				}

				collapseobj.innerHTML = articleResponse.firstChild.nodeValue;
			}

			if (YAHOO.util.Dom.hasClass(collapseobj, node_class))
			{
				if (this.broken_class)
				{
					YAHOO.util.Dom.addClass(collapseobj, "vw-broken");
					this.broken_class = false;
				}

				// this was dynamically set to look nice with the loading img
				YAHOO.util.Dom.removeClass(collapseobj, node_class);
			}

			// re-init auto-links
			if (
				(tabId == "ca-article" || tabId == "ca-talk") &&
				YAHOO.util.Dom.getElementsByClassName("autolink", "a", collapseobj) &&
				typeof SpecialAutoLink == "object"
			)
			{
				SpecialAutoLink = new Special_AutoLink();
			}

			// init dropdown, quick-edit, etc.
			vB_ResetHandle.parseScript(collapseobj, fetch_tags(ajax.responseXML, "popups")[0]);
		}
	}

	return false;
};

/**
* Redirect to the URL on failure
*
* @param	object	YUI AJAX
*/
vB_WikiTab.prototype.ajax_failure = function(ajax)
{
	vBulletin_AJAX_Error_Handler(ajax);

	window.location = this.ajax_load_url[0] + this.splitter + this.constructed_load_url;
};

/**
* Handles AJAX errors
*
* @param	object	YUI AJAX
*/
vB_WikiTab.prototype.handle_ajax_error = function(ajax)
{
	vBulletin_AJAX_Error_Handler(ajax);
};

/* License Box */
;/************************************************************************\
 *
 * CES Vault Wiki
 * Version CES_VERSION
 *
 * CES_VAULT_COPYRIGHT
 *
\************************************************************************/

/**
* Class to handle show/hide of headline sections
*/
function WikiPost_ShowSection()
{
	this.show = null;
	this.hide = null;
	this.closer = [];
}

/**
* Finds all headlines in the post object
*
* @param	int		Unique ID for the containing post
* @param	string	RegEx search string
* @param	string	Tag name for the containing object
*
* @return	object	Object of div objects
*/
WikiPost_ShowSection.prototype.fetch_sections = function(parentobj, indexMatch, indexType)
{
	var postobj = fetch_object(parentobj);
	var divs = fetch_tags(postobj, indexType);

	var sections = [];

	for (var i = 0; i < divs.length; i++)
	{
		if (divs[i].id && divs[i].id.indexOf(indexMatch) != -1)
		{
			sections[sections.length] = divs[i];
		}
	}

	return sections;
};

/**
* Initializes all show/hide links so that they appear
*
* @return	boolean	false
*/
WikiPost_ShowSection.prototype.link_init = function(root)
{
	if (!root)
	{
		root = document;
	}

	var link_spans = YAHOO.util.Dom.getElementsByClassName("top_link", "span", root);
	var ij, j, inner_link, existing, dash_node;
	var imgmatch = new RegExp(/^collapseimg_/);

	for (var i = 0; i < link_spans.length; i++)
	{
		existing = fetch_tags(link_spans[i], "span");

		if (existing.length)
		{
			for (ij = 0; ij < existing.length; ij++)
			{
				link_spans[i].removeChild(existing[ij]);
			}
		}

		for (j = 0; j < link_spans[i].childNodes.length; j++)
		{
			inner_link = link_spans[i].childNodes[j];

			if (inner_link.id && inner_link.id.match(imgmatch))
			{
				dash_node = document.createElement("span");
				dash_node.id = 'colspan' + i + j;
				dash_node.innerHTML = " - ";

				YAHOO.util.Dom.insertAfter(dash_node, inner_link);
				YAHOO.util.Dom.setStyle(inner_link, "display", "inline");
			}
		}
	}

	if (VAULT_40X_COMPAT)
	{
		var collapseEQ = fetch_cookie('vbulletin_collapse');
	}
	else
	{
		var collapseEQ = document.cookie.split("vbulletin_collapse=");
	}

	if ((!collapseEQ || !collapseEQ[1]) && !this.closer.length)
	{
		return false;
	}

	var collapses;

	if (collapseEQ && collapseEQ[1])
	{
		if (VAULT_40X_COMPAT)
		{
			collapses = collapseEQ.split('\n');
		}
		else
		{
			var collapseFind = collapseEQ[1].split(";");
			collapses = collapseFind[0].split("%0A");
		}
	}

	if (this.closer.length)
	{
		var item;

		for (var cl = 0; cl < this.closer.length; cl++)
		{
			item = this.closer[cl][0] + "_" + this.closer[cl][1];

			if (!collapses || collapses.indexOf(item) == "-1")
			{
				this.close(item);
			}
		}
	}

	if (collapses && collapses.length)
	{
		for (var i = 0; i < collapses.length; i++)
		{
			this.close(collapses[i], true);
		}
	}

	return false;
};

/**
* Closes sections on initialization.
*
* @param	array	list of objects to be collapsed
*
* @return	boolean false
*/
WikiPost_ShowSection.prototype.close = function(item, oninit)
{
	var finder;

	if (!(VAULT_40X_COMPAT && oninit) && (finder = YAHOO.util.Dom.get("collapseobj_" + item)))
	{
		YAHOO.util.Dom.setStyle(finder, "display", "none");
	}

	if (finder = YAHOO.util.Dom.get("collapseimg_" + item))
	{
		if (!VAULT_40X_COMPAT && finder.src)
		{
			var findReg = new RegExp("(thead|tcat)\\.gif$");
			finder.src = finder.src.replace(findReg, '$1_collapsed.gif');
		}
		else if (finder.innerHTML == this.hide)
		{
			finder.innerHTML = this.show;
		}
	}

	if (!VAULT_40X_COMPAT && (finder = YAHOO.util.Dom.get("collapsecel_" + item)))
	{
		YAHOO.util.Dom.replaceClass(finder, "thead", "thead_collapsed");
		YAHOO.util.Dom.replaceClass(finder, "tcat", "tcat_collapsed");
	}

	return false;
};

/**
* Toggles the display states of options in the title popup object
*
* @param	int		Unique ID for the containing post
*
* @return	boolean	false
*/
WikiPost_ShowSection.prototype.Popup_Init = function(postid, in_article)
{
	var imgprefix = 'collapseimg_';
	var showall = fetch_object(imgprefix + postid + '_show');
	var hideall = fetch_object(imgprefix + postid + '_hide');

	if (!showall && !hideall)
	{
		return false;
	}

	var parentid = this.fetch_id(postid, in_article);
	var tocids = this.fetch_sections(parentid, 'toc_', 'table');
	var toccol = this.fetch_sections(parentid, 'collapseobj_toc_', 'tbody');
	var sectionids = this.fetch_sections(parentid, 'collapseobj_' + postid + '_', 'div');

	if (tocids.length > 0)
	{
		var colsave = '';

		for (var k = 0; k < tocids.length; k++)
		{
			// tricky way to preserve toc width
			colsave = toccol[k].style.display;
			toccol[k].style.display = '';
			tocids[k].style.width = tocids[k].offsetWidth + 'px';
			toccol[k].style.display = colsave;
		}
	}

	if (sectionids.length == 0)
	{
		return false;
	}

	for (var i = 0; i < sectionids.length; i++)
	{
		if (sectionids[i].style.display == 'none')
		{
			var hidden = true;
		}
		else
		{
			var shown = true;
		}

		if (hidden && shown)
		{
			break;
		}	
	}

	if (showall != null && !hidden)
	{
		showall.style.display = 'none';
	}

	if (hideall != null && !shown)
	{
		hideall.style.display = 'none';
	}

	return false;
};

/**
* Gets the ID of the parent object.
*
* @param	integer	Type of parent object
*
* @return	string	Unique HTML ID attribute
*/
WikiPost_ShowSection.prototype.fetch_id = function(postid, in_article)
{
	if (in_article == 2)
	{
		return parentid = 'forum_header';
	}
	else if (in_article == 1)
	{
		return parentid = 'collapseobj_ca-article';
	}
	else
	{
		return parentid = 'post_message_' + postid;
	}
};

/**
* Updates vbulletin_collapse cookie with collapse preferences
*
* @param	string	Collapseable object ID
* @param	boolean	Add a cookie
*/
WikiPost_ShowSection.prototype.save_collapsed = function(targetid, addcollapsed)
{
	if (VAULT_40X_COMPAT)
	{
		var collapsed = fetch_cookie('vbulletin_collapse');
		var tmp = new Array();

		if (collapsed != null)
		{
			collapsed = collapsed.split('\n');

			for (var i in collapsed)
			{
				if (YAHOO.lang.hasOwnProperty(collapsed, i) && collapsed[i] != targetid && collapsed[i] != '')
				{
					tmp[tmp.length] = collapsed[i];
				}
			}
		}

		if (addcollapsed)
		{
			tmp[tmp.length] = targetid;
		}

		expires = new Date();
		expires.setTime(expires.getTime() + (1000 * 86400 * 365));
		set_cookie('vbulletin_collapse', tmp.join('\n'), expires);
	}
	else
	{
		save_collapsed(targetid, addcollapsed);
	}
};
	
/**
* Toggles the collapse state of an object, and saves state to 'vbulletin_collapse' cookie
*
* @param	string	Unique ID for the collapse group
*
* @return	boolean	false
*/
WikiPost_ShowSection.prototype.toggle = function(postid, sectionid)
{
	var imgprefix = 'collapseimg_';
	var sectionids = [];
	var img = null;
	var obj = null;
	var imgid = '';

	if (sectionid == 'showall' || sectionid == 'hideall')
	{
		// this only happens if in_article would be 1
		var parentid = this.fetch_id(postid, 1);

		// get all the objids and put them in the var
		sectionids = this.fetch_sections(parentid, 'collapseobj_' + postid + '_', 'div');
	}
	else
	{
		sectionids[0] = fetch_object('collapseobj_' + postid + '_' + sectionid);
	}

	for (var i = 0; i < sectionids.length; i++)
	{
		obj = sectionids[i];

		if (!obj)
		{
			return false;
		}

		imgid = obj.id.replace('obj', 'img');

		if (sectionid == 'showall' || sectionid == 'hideall')
		{
			img = fetch_object(imgid);
		}
		else
		{
			img = fetch_object(imgprefix + postid + '_' + sectionid);
		}

		if (obj.style.display == 'none' && sectionid != 'hideall')
		{
			obj.style.display = '';

			if (sectionid == 'showall')
			{
				var idstr = obj.id.replace('collapseobj_', '');
			}
			else
			{
				var idstr = postid + '_' + sectionid;
			}

			this.save_collapsed(idstr, false);

			if (img)
			{
				img.innerHTML = this.hide;
			}
		}
		else if (sectionid != 'showall')
		{
			obj.style.display = 'none';

			if (sectionid == 'hideall')
			{
				var idstr = obj.id.replace('collapseobj_', '');
			}
			else
			{
				var idstr = postid + '_' + sectionid;
			}

			this.save_collapsed(idstr, true);

			if (img)
			{
				img.innerHTML = this.show;
			}
		}
	}

	var showall = null;
	var hideall = null;

	if (
		(showall = fetch_object(imgprefix + postid + '_show')) != null &&
		(hideall = fetch_object(imgprefix + postid + '_hide')) != null
	)
	{
		if (sectionid == 'showall')
		{
			showall.style.display = 'none';
		}
		else
		{
			showall.style.display = '';
		}

		if (sectionid == 'hideall')
		{
			hideall.style.display = 'none';
		}
		else
		{
			hideall.style.display = '';
		}
	}

	if (sectionid != 'showall' && sectionid != 'hideall')
	{
		this.Popup_Init(postid);
	}

	return false;
};

// #############################################################################
// other frequently used functions

/**
* Fix for anchor URLs
*
* @param	string	name
*
* @return	boolean false
*/
Toc_Jump = function(ancname)
{
	if (ancname.indexOf('footnote_') != -1 || ancname.indexOf('ref') != -1)
	{
		var anchor = document.getElementById(ancname);
		anchor.setAttribute("footnote", 1);
	}
	else
	{
		var anchor = document.getElementsByName(ancname)[0];
	}

	if (anchor)
	{
		if (anchor.getAttribute("footnote") == 1)
		{
			var select_anc = YAHOO.util.Dom.getElementsByClassName("ref_select", "a");
			if (select_anc && select_anc.length)
			{
				for (var q = 0; q < select_anc.length; q++)
				{
					if (YAHOO.util.Dom.hasClass(select_anc[q], "ref_select"))
					{
						YAHOO.util.Dom.removeClass(select_anc[q], "ref_select");
					}
				}
			}

			YAHOO.util.Dom.addClass(anchor, "ref_select");
		}

		if (anchor.scrollIntoView)
		{
			anchor.scrollIntoView(true);
		}
	}

	return false;
};

/**
* Fix for anchor URLs on edit preview
*
* @param	string	name
*
* @return	boolean false
*/
Toc_Create_URLs = function(parentid)
{
	var toc = YAHOO.util.Dom.get(parentid);
	var links = YAHOO.util.Dom.getElementsByClassName("toc_gen_url", "span", toc);
	var anchor = null;

	if (!links.length)
	{
		return false;
	}

	for (i = 0; i < links.length; i++)
	{
		anchor[i] = document.createElement("a");
		anchor[i].href = links[i].name;
		anchor[i].innerHTML = links[i].innerHTML;

		links[i].parentNode.appendChild(anchor[i]);
		links[i].parentNode.removeChild(links[i]);
	}
};

/**
* Rewrite of PostBit_Init
*
* @param	object	postbit
* @param	integer	post id
*/
PostBit_Init = function(obj, postid)
{
	console.log("PostBit Init: %d", postid);

	if (typeof vBmenu != 'undefined')
	{
		// init profile menu(s)
		var divs = fetch_tags(obj, 'div');
		for (var i = 0; i < divs.length; i++)
		{
			if (divs[i].id && divs[i].id.substr(0, 9) == 'postmenu_')
			{
				vBmenu.register(divs[i].id, true);
			}
		}
	}

	if (typeof SpecialAutoLink != 'undefined')
	{
		SpecialAutoLink = new Special_AutoLink();
	}

	if (typeof vB_Section != 'undefined')
	{
		// reset show/hide links
		vB_Section.link_init();
	}

	if (typeof vB_QuickEditor != 'undefined')
	{
		// init quick edit controls
		vB_AJAX_QuickEdit_Init(obj);
	}

	if (typeof vB_QuickReply != 'undefined')
	{
		// init quick reply button
		qr_init_buttons(obj);
	}

	if (typeof mq_init != 'undefined')
	{
		// init quick reply button
		mq_init(obj);
	}

	if (typeof vBrep != 'undefined')
	{
		if (typeof postid != 'undefined' && typeof postid != 'null')
		{
			vbrep_register(postid);
		}
	}

	if (typeof inlineMod != 'undefined')
	{
		im_init(obj);
	}

	if (typeof vB_Lightbox != 'undefined')
	{
		init_postbit_lightbox(obj);
	}

	child_img_alt_2_title(obj);
};

// #############################################################################
// initialize the section class

var vB_Section = new WikiPost_ShowSection();
var ajax_load_url = [];

/* License Box */
;/*!======================================================================*\
|| #################################################################### ||
|| # vBulletin 4.0.2
|| # ---------------------------------------------------------------- # ||
|| # Copyright ©2000-2010 vBulletin Solutions Inc. All Rights Reserved. ||
|| # This file may not be redistributed in whole or significant part. # ||
|| # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # ||
|| # http://www.vbulletin.com | http://www.vbulletin.com/license.html # ||
|| #################################################################### ||
\*======================================================================*/

custom_editor_events = {
	'editor_switch' : new YAHOO.util.CustomEvent('editor_switch'),
	'editor_resize' : new YAHOO.util.CustomEvent('editor_resize')
};

// #############################################################################
// vB_Text_Editor

/**
* vBulletin Editor Class
*
* Activates any HTML controls for an editor
*
* @package	vBulletin
* @version	$Revision: 35418 $
* @date		$Date: 2010-02-14 13:12:24 -0600 (Sun, 14 Feb 2010) $
* @author	Kier Darby, Scott MacVicar, Mike Sullivan, Freddie Bingham vBulletin Development Team
*
* @param	string	Unique key for this editor
* @param	boolean	Initialise to WYSIWYG mode?
* @param	string	Forumid / Calendar etc.
* @param	boolean	Parse smilies?
* @param	string	(Optional) Initial text for the editor
* @param	string	(Optional) Extra arguments to pass when switching editor modes
*/
function vB_Text_Editor(editorid, mode, parsetype, parsesmilies, initial_text, ajax_extra)
{
	this._construct(editorid, mode, parsetype, parsesmilies, initial_text, ajax_extra);
	this.init(initial_text);
}

/**
* Primarily the constructor, setting up the object for use.
* Abstracted out of the real constructor as that initializes the editor as well.
*
* @param	string	Unique key for this editor
* @param	boolean	Initialise to WYSIWYG mode?
* @param	string	Forumid / Calendar etc.
* @param	boolean	Parse smilies?
* @param	string	(Optional) Initial text for the editor
* @param	string	(Optional) Extra arguments to pass when switching editor modes
*/
vB_Text_Editor.prototype._construct = function(editorid, mode, parsetype, parsesmilies, initial_text, ajax_extra)
{
	/**
	* Miscellaneous variables
	*
	* @var	string	Unique Editor ID
	* @var	boolean	WYSIWYG mode
	* @var	boolean	Have we initialized the editor?
	* @var	mixed	Passed parsetype (corresponds to bbcodeparse forumid)
	* @var	boolean	Passed parsesmilies option
	* @var	boolean	Can we use vBmenu popups?
	* @var	object	The element containing controls
	* @var	object	The textarea object containing the initial text
	* @var	array	Array containing all button objects
	* @var	array	Array containing all popup objects
	* @var	object	Current prompt() emulation popup
	* @var	string	State of the font context control
	* @var	string	State of the size context control
	* @var	string	State of the color context control
	* @var	string	String to contain the fake 'clipboard'
	* @var	boolean	Is the editor 'disabled'? (quick reply use)
	* @var	vB_History	History manager for undo/redo systems
	* @var  integer Is the editor mode trying to be changed?
	* @var	boolean	Are we allowed to use basic (B/I/U) BB code? - Set up with allowbasicbbcode in editor_clientscript template
	*/
	this.editorid = editorid;
	this.wysiwyg_mode = parseInt(mode, 10) ? 1 : 0;
	this.initialized = false;
	this.parsetype = (typeof parsetype == 'undefined' ? 'nonforum' : parsetype);
	this.ajax_extra = (typeof ajax_extra == 'undefined' ? '' : ajax_extra);
	this.parsesmilies = (typeof parsesmilies == 'undefined' ? 1 : parsesmilies);
	this.popupmode = (true);
	this.controlbar = fetch_object(this.editorid + '_controls');
	this.textobj = fetch_object(this.editorid + '_textarea');
	this.buttons = new Array();
	this.popups = new Array();
	this.prompt_popup = null;
	this.fontstate = null;
	this.sizestate = null;
	this.colorstate = null;
	this.clipboard = '';
	this.disabled = false;
	this.history = new vB_History();
	this.influx = 0;
	this.allowbasicbbcode = ((typeof allowbasicbbcode != "undefined" && allowbasicbbcode) ? true : false);
	this.ltr = ((typeof ltr != "undefined" && ltr == "right") ? 'right' : 'left');
	this.activeimg = null;
}

/**
* Add Range (Mozilla)
*/
vB_Text_Editor.prototype.add_range = function(node)
{
	this.check_focus();
	var sel = this.editwin.getSelection();
	var range = this.editdoc.createRange();
	range.selectNodeContents(node);
	sel.removeAllRanges();
	sel.addRange(range);
};

/**
* Apply formatting
*/
vB_Text_Editor.prototype.apply_format = function(cmd, dialog, argument)
{
	if (this.wysiwyg_mode)
	{
		if (is_moz)
		{
			this.editdoc.execCommand('useCSS', false, true);
		}

		this.editdoc.execCommand(cmd, (typeof dialog == 'undefined' ? false : dialog), (typeof argument == 'undefined' ? true : argument));

		return false;
	}
	else
	{
		// undo & redo array pops
		switch (cmd)
		{
			case 'bold':
			case 'italic':
			case 'underline':
			{
				this.wrap_tags(cmd.substr(0, 1), false);
				return;
			}

			case 'justifyleft':
			case 'justifycenter':
			case 'justifyright':
			{
				this.wrap_tags(cmd.substr(7), false);
				return;
			}

			case 'indent':
			{
				this.wrap_tags(cmd, false);
				return;
			}

			case 'fontname':
			{
				this.wrap_tags('font', argument);
				return;
			}

			case 'fontsize':
			{
				this.wrap_tags('size', argument);
				return;
			}

			case 'forecolor':
			{
				this.wrap_tags('color', argument);
				return;
			}

			case 'createlink':
			{
				var sel = this.get_selection();
				if (sel)
				{
					this.wrap_tags('url', argument);
				}
				else
				{
					this.wrap_tags('url', argument, argument);
				}
				return;
			}

			case 'insertimage':
			{
				this.wrap_tags('img', false, argument);
				return;
			}

			case 'removeformat':
			return;
		}

		//alert('cmd :: ' + cmd + '\ndialog :: ' + dialog + '\nargument :: ' + argument);
	}
};

/**
* Build Attachments Popup
*
* @param	object	The menu container object
*/
vB_Text_Editor.prototype.build_attachments_popup = function(obj)
{
	var id, div, attach_count = 0;

	var listobj = YAHOO.util.Dom.get(vB_Attachments.listobjid);
	if (listobj)
	{
		var li = listobj.getElementsByTagName("li");
		var sibling = li[1].nextSibling;
		while (sibling)
		{
			sibling.editorid = this.editorid;
			if (!YAHOO.util.Event.getListeners(sibling, "mouseover"))
			{
				YAHOO.util.Event.on(sibling, "mouseover", vB_Text_Editor_Events.prototype.menuoption_onmouseevent);
				YAHOO.util.Event.on(sibling, "mouseout", vB_Text_Editor_Events.prototype.menuoption_onmouseevent);
				YAHOO.util.Event.on(sibling, "mouseup", vB_Text_Editor_Events.prototype.menuoption_onmouseevent);
				YAHOO.util.Event.on(sibling, "mousedown", vB_Text_Editor_Events.prototype.menuoption_onmouseevent);
				YAHOO.util.Event.on(sibling, "click", vB_Text_Editor_Events.prototype.attachoption_onclick);
			}
			sibling = sibling.nextSibling;
			attach_count++;
		}
	}
	else
	{
		return;
	}

	if (attach_count > 1)
	{
		div = document.createElement('div');
		div.editorid = this.editorid
		div.controlkey = obj.id;
		div.className = 'osmilie';
		div.style.fontWeight = 'bold';
		div.style.paddingLeft = '25px';
		div.style.whiteSpace = 'nowrap';
		div.innerHTML = vbphrase['insert_all'];
		div.onmouseover = div.onmouseout = div.onmousedown = div.onmouseup = vB_Text_Editor_Events.prototype.menuoption_onmouseevent;
		div.onclick = vB_Text_Editor_Events.prototype.attachinsertall_onclick;
	}

}

/**
* Build Font Name Popup Contents
*
* @param	object	The control object for the menu
*/
vB_Text_Editor.prototype.build_fontname_popup = function(obj)
{
	if (YAHOO.util.Dom.get(this.editorid + "_fontfield"))
	{
		this.fontoptions = {'' : YAHOO.util.Dom.get(this.editorid + "_fontfield").innerHTML};
	}

	if (!YAHOO.util.Event.getListeners(obj, "mouseover"))
	{
		YAHOO.util.Event.on(obj, "mouseover", vB_Text_Editor.prototype.menu_context, obj, this);
		YAHOO.util.Event.on(obj, "mouseout", vB_Text_Editor.prototype.menu_context, obj, this);
		YAHOO.util.Event.on(obj, "mouseup", vB_Text_Editor.prototype.menu_context, obj, this);
		YAHOO.util.Event.on(obj, "mousedown", vB_Text_Editor.prototype.menu_context, obj, this);
		var fonts = YAHOO.util.Dom.getElementsByClassName('fontname', '', obj);
		for (i = 0; i < fonts.length; i++)
		{
			fonts[i].cmd = obj.cmd;
			fonts[i].controlkey = obj.id;
			fonts[i].editorid = this.editorid;
			YAHOO.util.Event.on(fonts[i], "mouseover", vB_Text_Editor_Events.prototype.menuoption_onmouseevent);
			YAHOO.util.Event.on(fonts[i], "mouseout", vB_Text_Editor_Events.prototype.menuoption_onmouseevent);
			YAHOO.util.Event.on(fonts[i], "mouseup", vB_Text_Editor_Events.prototype.menuoption_onmouseevent);
			YAHOO.util.Event.on(fonts[i], "mousedown", vB_Text_Editor_Events.prototype.menuoption_onmouseevent);
			YAHOO.util.Event.on(fonts[i], "click", vB_Text_Editor_Events.prototype.formatting_option_onclick_font);
			var fontoption = fonts[i].firstChild.innerHTML;
			this.fontoptions[fontoption] = fontoption;
		}
	}
}

/**
* Build Font Size Popup Contents
*
* @param	object	The control object for the menu
*/
vB_Text_Editor.prototype.build_fontsize_popup = function(obj)
{
	if (YAHOO.util.Dom.get(this.editorid + "_sizefield"))
	{
		this.sizeoptions = {"" : YAHOO.util.Dom.get(this.editorid + "_sizefield").innerHTML};
	}

	if (!YAHOO.util.Event.getListeners(obj, "mouseover"))
	{
		YAHOO.util.Event.on(obj, "mouseover", vB_Text_Editor.prototype.menu_context, obj, this);
		YAHOO.util.Event.on(obj, "mouseout", vB_Text_Editor.prototype.menu_context, obj, this);
		YAHOO.util.Event.on(obj, "mouseup", vB_Text_Editor.prototype.menu_context, obj, this);
		YAHOO.util.Event.on(obj, "mousedown", vB_Text_Editor.prototype.menu_context, obj, this);
		var fonts = YAHOO.util.Dom.getElementsByClassName('fontsize', '', obj);
		for (i = 0; i < fonts.length; i++)
		{
			fonts[i].cmd = obj.cmd;
			fonts[i].controlkey = obj.id;
			fonts[i].editorid = this.editorid;
			YAHOO.util.Event.on(fonts[i], "mouseover", vB_Text_Editor_Events.prototype.menuoption_onmouseevent);
			YAHOO.util.Event.on(fonts[i], "mouseout", vB_Text_Editor_Events.prototype.menuoption_onmouseevent);
			YAHOO.util.Event.on(fonts[i], "mouseup", vB_Text_Editor_Events.prototype.menuoption_onmouseevent);
			YAHOO.util.Event.on(fonts[i], "mousedown", vB_Text_Editor_Events.prototype.menuoption_onmouseevent);
			YAHOO.util.Event.on(fonts[i], "click", vB_Text_Editor_Events.prototype.formatting_option_onclick_size);
			var sizeoption = fonts[i].firstChild.firstChild.innerHTML;
			this.sizeoptions[sizeoption] = sizeoption;
		}
	}
}

/**
* Build ForeColor Popup Contents
*
* @param	object	The control object for the menu
*/
vB_Text_Editor.prototype.build_forecolor_popup = function(obj)
{
	if (!YAHOO.util.Event.getListeners(obj, "mouseover"))
	{
		YAHOO.util.Event.on(obj, "mouseover", vB_Text_Editor.prototype.menu_context, obj, this);
		YAHOO.util.Event.on(obj, "mouseout", vB_Text_Editor.prototype.menu_context, obj, this);
		YAHOO.util.Event.on(obj, "mouseup", vB_Text_Editor.prototype.menu_context, obj, this);
		YAHOO.util.Event.on(obj, "mousedown", vB_Text_Editor.prototype.menu_context, obj, this);
		//YAHOO.util.Event.on(obj, "click", vB_Text_Editor_Events.prototype.colorout_onclick);
		var colors = YAHOO.util.Dom.getElementsByClassName('colorbutton', '', obj);
		if (colors.length)
		{
			for (var x = 0; x < colors.length; x++)
			{
				colors[x].cmd = obj.cmd;
				colors[x].editorid = this.editorid;
				colors[x].controlkey = obj.id;
				colors[x].colorname = YAHOO.util.Dom.getStyle(colors[x].firstChild, "background-color");
				colors[x].id = this.editorid + '_color_' + this.translate_color_commandvalue(colors[x].colorname);
				YAHOO.util.Event.on(colors[x], "mouseover", vB_Text_Editor_Events.prototype.menuoption_onmouseevent);
				YAHOO.util.Event.on(colors[x], "mouseout", vB_Text_Editor_Events.prototype.menuoption_onmouseevent);
				YAHOO.util.Event.on(colors[x], "mouseup", vB_Text_Editor_Events.prototype.menuoption_onmouseevent);
				YAHOO.util.Event.on(colors[x], "mousedown", vB_Text_Editor_Events.prototype.menuoption_onmouseevent);
				YAHOO.util.Event.on(colors[x], "click", vB_Text_Editor_Events.prototype.coloroption_onclick);
			}
		}
	}
}

/**
* Build Smilie Popup Contents
*
* @param	object	The control object for the menu
*/
vB_Text_Editor.prototype.build_smilie_popup = function(obj)
{
	if (!YAHOO.util.Event.getListeners(obj, "mouseover"))
	{
		YAHOO.util.Event.on(obj, "mouseover", vB_Text_Editor.prototype.menu_context, obj, this);
		YAHOO.util.Event.on(obj, "mouseout", vB_Text_Editor.prototype.menu_context, obj, this);
		YAHOO.util.Event.on(obj, "mouseup", vB_Text_Editor.prototype.menu_context, obj, this);
		YAHOO.util.Event.on(obj, "mousedown", vB_Text_Editor.prototype.menu_context, obj, this);
		var smilies = YAHOO.util.Dom.getElementsByClassName('smilie', '', obj);
		if (smilies.length)
		{
			for (var x = 0; x < smilies.length; x++)
			{
					var moresmilies = YAHOO.util.Dom.get("moresmilies");
					if (moresmilies)
					{
						YAHOO.util.Dom.setStyle(moresmilies, "cursor", pointer_cursor);
						moresmilies.editorid = this.editorid;
						moresmilies.controlkey = obj.id;
						YAHOO.util.Event.on(moresmilies, "click", vB_Text_Editor_Events.prototype.smiliemore_onclick);
					}

					smilies[x].editorid = this.editorid;
					smilies[x].controlkey = obj.id;
					smilies[x].smilietext = smilies[x].firstChild.firstChild.alt;
					var match = smilies[x].id.match(/^smilie_dropdown_([0-9]+)$/);
					smilies[x].smilieid = match[1];

					YAHOO.util.Event.on(smilies[x], "mouseover", vB_Text_Editor_Events.prototype.menuoption_onmouseevent);
					YAHOO.util.Event.on(smilies[x], "mouseout", vB_Text_Editor_Events.prototype.menuoption_onmouseevent);
					YAHOO.util.Event.on(smilies[x], "mouseup", vB_Text_Editor_Events.prototype.menuoption_onmouseevent);
					YAHOO.util.Event.on(smilies[x], "mousedown", vB_Text_Editor_Events.prototype.menuoption_onmouseevent);
					YAHOO.util.Event.on(smilies[x], "click", vB_Text_Editor_Events.prototype.smilieoption_onclick);
			}
		}
	}
}

/**
* Replace the popup controls with <select> menus for rubbish browsers
*
* @param	object	The popup control element
*/
vB_Text_Editor.prototype.build_select = function(obj)
{
	var sel = document.createElement('select');
	sel.id = this.editorid + '_select_' + obj.cmd;
	sel.editorid = this.editorid;
	sel.cmd = obj.cmd;

	var opt = document.createElement('option');
	opt.value = '';
	opt.text = obj.title;
	sel.add(opt, is_ie ? sel.options.length : null);

	opt = document.createElement('option');
	opt.value = '';
	opt.text = ' ';
	sel.add(opt, is_ie ? sel.options.length : null);

	var i;

	switch (obj.cmd)
	{
		case 'fontname':
		{
			for (i = 0; i < fontoptions.length; i++)
			{
				opt = document.createElement('option');
				opt.value = fontoptions[i];
				opt.text = (fontoptions[i].length > 10 ? (fontoptions[i].substr(0, 10) + '...') : fontoptions[i]);
				sel.add(opt, is_ie ? sel.options.length : null);
			}

			sel.onchange = vB_Text_Editor_Events.prototype.formatting_select_onchange;
			break;
		}

		case 'fontsize':
		{
			for (i = 0; i < sizeoptions.length; i++)
			{
				opt = document.createElement('option');
				opt.value = sizeoptions[i];
				opt.text = sizeoptions[i];
				sel.add(opt, is_ie ? sel.options.length : null);
			}

			sel.onchange = vB_Text_Editor_Events.prototype.formatting_select_onchange;
			break;
		}

		case 'forecolor':
		{
			for (i in coloroptions)
			{
				if (YAHOO.lang.hasOwnProperty(coloroptions, i))
				{
					opt = document.createElement('option');
					opt.value = coloroptions[i];
					opt.text = PHP.trim((coloroptions[i].length > 5 ? (coloroptions[i].substr(0, 5) + '...') : coloroptions[i]).replace(new RegExp('([A-Z])', 'g'), ' $1'));
					opt.style.backgroundColor = i;
					sel.add(opt, is_ie ? sel.options.length : null);
				}
			}

			sel.onchange = vB_Text_Editor_Events.prototype.formatting_select_onchange;
			break;
		}

		case 'smilie':
		{
			for (var cat in smilieoptions)
			{
				if (!YAHOO.lang.hasOwnProperty(smilieoptions, cat))
				{
					continue;
				}

				for (var smilieid in smilieoptions[cat])
				{
					if (!YAHOO.lang.hasOwnProperty(smilieoptions[cat], smilieid))
					{
						continue;
					}

					if (smilieid != 'more')
					{
						opt = document.createElement('option');
						opt.value = smilieoptions[cat][smilieid][1];
						opt.text = smilieoptions[cat][smilieid][1];
						opt.smilieid = smilieid;
						opt.smiliepath = smilieoptions[cat][smilieid][0];
						opt.smilietitle = smilieoptions[cat][smilieid][2];
						sel.add(opt, is_ie ? sel.options.length : null);
					}
				}
			}

			sel.onchange = vB_Text_Editor_Events.prototype.smilieselect_onchange;
			break;
		}

		case 'attach':
		{
			sel.onmouseover = vB_Text_Editor_Events.prototype.attachselect_onmouseover;
			sel.onchange = vB_Text_Editor_Events.prototype.attachselect_onchange;
			break;
		}
	}

	while (obj.hasChildNodes())
	{
		obj.removeChild(obj.firstChild);
	}

	this.buttons[obj.cmd] = obj.appendChild(sel);
}

/**
* Button Context
*
* @param	object	The button object
* @param	string	Incoming event type
* @param	string	Control type - 'button' or 'menu'
*/
vB_Text_Editor.prototype.button_context = function(obj, state, controltype)
{
	if (this.disabled)
	{
		return;
	}

	if (typeof controltype == 'undefined')
	{
		controltype = 'button';
	}

	if (YAHOO.util.Dom.hasClass(obj, "imagebutton_disabled"))
	{
		return;
	}

	switch (obj.state)
	{
		case true: // selected button
		{
			switch (state)
			{
				case 'mouseover':
				case 'mousedown':
				case 'mouseup':
				{
					this.set_control_style(obj, controltype, 'down');
					break;
				}
				case 'mouseout':
				{
					this.set_control_style(obj, controltype, 'selected');
					break;
				}
			}
			break;
		}

		default: // not selected
		{
			switch (state)
			{
				case 'mouseover':
				case 'mouseup':
				{
					this.set_control_style(obj, controltype, 'hover');
					break;
				}
				case 'mousedown':
				{
					this.set_control_style(obj, controltype, 'down');
					break;
				}
				case 'mouseout':
				{
					this.set_control_style(obj, controltype, 'normal');
					break;
				}
			}
			break;
		}
	}
};

/* The set and restore code below is not perfect. One could hope that it does as advertised but the restore point isn't always the same as was set. */

vB_Text_Editor.prototype.setbookmark = function()
{
	var selection = this.wysiwyg_mode ? this.editdoc.selection : document.selection;
	if (is_ie && (selection.type == "Text" || selection.type == "None"))
	{
		var range = selection.createRange();
		//alert(range.offsetTop + " " + range.parentElement().nodeName + " " + range.parentElement().innerHTML);
		this.bookmark = range.getBookmark();
	}
}

vB_Text_Editor.prototype.restorebookmark = function()
{
	if (is_ie && this.bookmark)
	{
		var doc = this.wysiwyg_mode ? this.editdoc : document;
		var range = doc.body.createTextRange();
		range.moveToBookmark(this.bookmark);
		if (!this.wysiwyg_mode && range.parentElement().id != this.editorid + "_textarea")
		{
			// Move cursor to end!
			var range2 = document.selection.createRange();
			var range3 = range2.duplicate();
			range3.moveToElementText(this.editdoc);
			if (range3.text.length > 0)
			{
				var length = range3.text.length;
				var match = range3.text.match(/\r/g);
				if (match)
				{
					length = length - match.length;
				}
				range3.moveStart("character", length);
				range3.collapse();
				range3.select()
			}
		}
		else
		{
			range.select();
		}
		//alert(range.offsetTop + " " + range.parentElement().nodeName + " " + range.parentElement().innerHTML);
		this.bookmark = null;
	}
}

/**
* Check if we need to refocus the editor window
*/
vB_Text_Editor.prototype.check_focus = function()
{
	if (!this.editwin.hasfocus || (is_moz && is_mac)) // TODO: Firefox 3 Beta 5 Mac seems to miss a focus or blur event - this is a quick and dirty fix that will need further attention.
	{
		this.editwin.focus();
		this.restorebookmark();
		if (is_opera)
		{
			// see http://www.vbulletin.com/forum/bugs35.php?do=view&bugid=687
			this.editwin.focus();
		}
	}
};

/**
* Collapse the current selection and place the cursor where the end of the
* selection was.
*/
vB_Text_Editor.prototype.collapse_selection_end = function()
{
	var range;
	if (this.editdoc.selection)
	{
		range = this.editdoc.selection.createRange();
		// fix for horribly confusing IE bug where it randomly makes text white for funsies
		// see 3.6 bug #279 about the eval stuff
		eval("range." + "move" + "('character', -1);");
		range.collapse(false);
		range.select();
	}
	else if (document.selection && document.selection.createRange)
	{
		range = document.selection.createRange();
		range.collapse(false);
		range.select();
	}
	else if (typeof(this.editdoc.selectionStart) != 'undefined')
	{
		var sel_text = this.editdoc.value.substr(this.editdoc.selectionStart, this.editdoc.selectionEnd - this.editdoc.selectionStart);

		this.editdoc.selectionStart = this.editdoc.selectionStart + sel_text.vBlength();
	}
	else if (window.getSelection)
	{
		// don't think I can do anything for this
	}
}

/**
* Insert Link (base for WYSIWYG)
*/
vB_Text_Editor.prototype.createlink_wysiwyg = function(e, url)
{
	return this.apply_format('createlink', is_ie, (typeof url == 'undefined' ? true : url));
}

/**
* Insert Link
*/
vB_Text_Editor.prototype.createlink = function(e, url)
{
	if (this.wysiwyg_mode)
	{
		if (is_moz || is_opera)
		{
			if (typeof url == 'undefined')
			{
				url = this.show_prompt(vbphrase['enter_link_url'], 'http://', true);
			}
			if ((url = this.verify_prompt(url)) !== false)
			{
				if (this.get_selection())
				{
					this.apply_format('unlink');
					this.createlink_wysiwyg(e, url);
				}
				else
				{
					this.insert_text('<a href="' + url + '">' + url + '</a>');
				}
			}
			return true;
		}
		else
		{
			return this.createlink_wysiwyg(e, url);
		}
	}
	else
	{
		this.prompt_link('url', url, vbphrase['enter_link_url'], 'http://');
	}
};

/**
* Destroy Editor
*/
vB_Text_Editor.prototype.destroy = function()
{
	var i;
	// reset all buttons to default state
	for (i in this.buttons)
	{
		if (YAHOO.lang.hasOwnProperty(this.buttons, i))
		{
			this.set_control_style(this.buttons[i], 'button', 'normal');
		}
	}

	YAHOO.util.Event.removeListener(this.editdoc, "mousemove", vB_Text_Editor_Events.prototype.editdoc_onmousemove);
	YAHOO.util.Event.removeListener(this.editdoc, "click", vB_Text_Editor_Events.prototype.editdoc_onclick);
	YAHOO.util.Event.removeListener(this.editdoc, "mousedown", vB_Text_Editor_Events.prototype.editdoc_onmousedown);
	YAHOO.vBulletin.vBPopupMenu.close_all();
	this.remove_editor_dialog();
};

/**
* Disables the editor
*
* @param	string	Initial text for the editor
*/
vB_Text_Editor.prototype.disable_editor = function(text)
{
	if (this.wysiwyg_mode)
	{
		if (!this.disabled)
		{
			this.disabled = true;

			var hider = fetch_object(this.editorid + '_hider');
			if (hider)
			{
				hider.parentNode.removeChild(hider);
			}

			var div = document.createElement('div');
			div.id = this.editorid + '_hider';
			div.className = 'wysiwyg textbox hider';
			div.style.width = this.editbox.style.width;
			div.style.height = this.editbox.style.height;
			var childdiv = document.createElement('div');
			childdiv.style.padding = '8px';
			childdiv.innerHTML = text;
			div.appendChild(childdiv);
			this.editbox.parentNode.appendChild(div);

			// and hide the real editor
			this.editbox.style.display = 'none';
		}
	}
	else
	{
		if (!this.disabled)
		{
			this.disabled = true;

			if (typeof text != 'undefined')
			{
				this.editbox.value = text;
			}
			this.editbox.disabled = true;
		}
	}
};

/**
* Insert Email Link
*/
vB_Text_Editor.prototype.email = function(e, email)
{
	if (this.wysiwyg_mode)
	{
		if (typeof email == 'undefined')
		{
			email = this.show_prompt(vbphrase['enter_email_link'], '', true);
		}

		email = this.verify_prompt(email);

		if (email === false)
		{
			return this.apply_format('unlink');
		}
		else
		{
			var selection = this.get_selection();
			return this.insert_text('<a href="mailto:' + email + '">' + (selection ? selection : email) + '</a>', (selection ? true : false));
		}
	}
	else
	{
		this.prompt_link('email', email, vbphrase['enter_email_link'], '');
	}
};

/**
* Enables the editor
*
* @param	string	Initial text for the editor
*/
vB_Text_Editor.prototype.enable_editor = function(text)
{
	if (this.wysiwyg_mode)
	{
		if (typeof text != 'undefined')
		{
			this.set_editor_contents(text);
		}

		this.editbox.style.display = '';

		var hider = fetch_object(this.editorid + '_hider');
		if (hider)
		{
			hider.parentNode.removeChild(hider);
		}

		this.disabled = false;
	}
	else
	{
		if (typeof text != 'undefined')
		{
			this.editbox.value = text;
		}
		this.editbox.disabled = false;

		this.disabled = false;
	}
};

/**
* Format text
*
* @param	event	Event object
* @param	string	Formatting command
* @param	string	Optional argument to the formatting command
*
* @return	boolean
*/
vB_Text_Editor.prototype.format = function(e, cmd, arg)
{
	e = do_an_e(e);

	if (this.disabled)
	{
		return false;
	}

	if (cmd != 'redo')
	{
		this.history.add_snapshot(this.get_editor_contents());
	}

	if (cmd == 'switchmode')
	{
		switch_editor_mode(this.editorid);
		return;
	}
	else if (cmd.substr(0, 6) == 'resize')
	{
		// command format is resize_<direction>_<change> like resize_0_99 and resize_1_99
		var size_change = parseInt(cmd.substr(9), 10);
		var change_direction = parseInt(cmd.substr(7, 1), 10) == '1' ? 1 : -1;
		this.resize_editor(size_change * change_direction);
		return;
	}

	this.check_focus();
	var ret;
	if (cmd.substr(0, 4) == 'wrap')
	{
		ret = this.wrap_tags(cmd.substr(6), (cmd.substr(4, 1) == '1' ? true : false));
	}
	else if (this[cmd])
	{
		if (arg === false)
		{
			ret = this[cmd](e);
		}
		else
		{
			ret = this[cmd](e, arg);
		}
	}
	else
	{
		try
		{
			ret = this.apply_format(cmd, false, (typeof arg == 'undefined' ? true : arg));
		}
		catch(e)
		{
			this.handle_error(cmd, e);
			ret = false;
		}
	}

	if (cmd != 'undo')
	{
		this.history.add_snapshot(this.get_editor_contents());
	}

	this.set_context(cmd);

	this.check_focus();

	return ret;
};

/**
* Get Editor Contents
*/
vB_Text_Editor.prototype.get_editor_contents = function()
{
	if (this.wysiwyg_mode)
	{
		return this.editdoc.body.innerHTML;
	}
	else
	{
		return this.editdoc.value;
	}
};

/**
* Get Selected Text
*/
vB_Text_Editor.prototype.get_selection = function()
{
	if (this.wysiwyg_mode)
	{
		if (is_moz)
		{
			selection = this.editwin.getSelection();
			this.check_focus();
			var range = selection ? selection.getRangeAt(0) : this.editdoc.createRange();
			return this.read_nodes(range.cloneContents(), false);
		}
		else if (is_opera)
		{
			selection = this.editwin.getSelection();
			this.check_focus();
			range = selection ? selection.getRangeAt(0) : this.editdoc.createRange();
			var lsserializer = document.implementation.createLSSerializer();
			return lsserializer.writeToString(range.cloneContents());
		}
		else
		{
			var range = this.editdoc.selection.createRange();
			if (range.htmlText && range.text)
			{
				return range.htmlText;
			}
			else
			{
				var do_not_steal_this_code_html = '';
				for (var i = 0; i < range.length; i++)
				{
					do_not_steal_this_code_html += range.item(i).outerHTML;
				}
				return do_not_steal_this_code_html;
			}
		}
	}
	else
	{
		if (typeof(this.editdoc.selectionStart) != 'undefined')
		{
			return this.editdoc.value.substr(this.editdoc.selectionStart, this.editdoc.selectionEnd - this.editdoc.selectionStart);
		}
		else if (document.selection && document.selection.createRange)
		{
			return document.selection.createRange().text;
		}
		else if (window.getSelection)
		{
			return window.getSelection() + '';
		}
		else
		{
			return false;
		}
	}
};

/**
* Handle Error
*
* @param	string	Command name
* @param	event	Event object
*/
vB_Text_Editor.prototype.handle_error = function(cmd, e)
{
};

/**
* Editor initialization wrapper
*
* @param	string	Initial text to populate with
*/
vB_Text_Editor.prototype.init = function(initial_text)
{
	if (this.initialized)
	{
		return;
	}

	this.textobj.disabled = false;

	if (this.tempiframe)
	{
		this.tempiframe.parentNode.removeChild(this.tempiframe);
	}

	this.set_editor_contents(initial_text);

	this.set_editor_functions();

	this.init_controls();

	this.init_smilies(fetch_object(this.editorid + '_smiliebox'));

	if (typeof smilie_window != 'undefined' && !smilie_window.closed)
	{
		this.init_smilies(smilie_window.document.getElementById('smilietable'));
	}

	this.captcha = document.getElementById("imagestamp");
	if (this.captcha != null)
	{
		this.captcha.setAttribute("tabIndex", 1);
	}

	this.initialized = true;
};

/**
* Init command button (b, i, u etc.)
*
* @param	object	Current HTML button node
*/
vB_Text_Editor.prototype.init_command_button = function(obj)
{
	obj.cmd = obj.id.substr(obj.id.indexOf('_cmd_') + 5);
	obj.editorid = this.editorid;
	this.buttons[obj.cmd] = obj;

	if (obj.cmd == 'switchmode')
	{
		if (AJAX_Compatible)
		{
			obj.state = this.wysiwyg_mode ? true : false;
			this.set_control_style(obj, 'button', this.wysiwyg_mode ? 'selected' : 'normal');
		}
		else
		{
			obj.parentNode.removeChild(obj);
		}
	}
	else
	{
		obj.state = false;
		obj.mode = 'normal';
		if (obj.cmd == 'bold' || obj.cmd == 'italic' || obj.cmd == 'underline')
		{
			this.allowbasicbbcode = true;
		}
	}

	// event handlers
	obj.onclick = obj.onmousedown = obj.onmouseover = obj.onmouseout = vB_Text_Editor_Events.prototype.command_button_onmouseevent;
};

/**
* Init button controls for the editor
*/
vB_Text_Editor.prototype.init_controls = function()
{
	var controls = new Array();
	var i, j, buttons, imgs, control;

	if (this.controlbar == null)
	{
		return;
	}

	var buttons = YAHOO.util.Dom.getElementsByClassName('imagebutton', '', this.controlbar);
	for (i = 0; i < buttons.length; i++)
	{
		if (YAHOO.util.Dom.hasClass(buttons[i], "imagebutton") && buttons[i].id)
		{
			controls[controls.length] = buttons[i].id;

			// take 'title' from button image and apply to child images (IE only)
			if (is_ie)
			{
				imgs = buttons[i].getElementsByTagName("img");
				for (j = 0; j < imgs.length; j++)
				{
					if (imgs[j].alt == "")
					{
						imgs[j].title = buttons[i].title;
					}
				}
			}
		}
	}
	var menus = YAHOO.util.Dom.getElementsByClassName("menubutton", "", this.controlbar);
	for (i = 0; i < menus.length; i++)
	{
		if (YAHOO.util.Dom.hasClass(menus[i], "menubutton") && menus[i].id)
		{
			controls[controls.length] = menus[i].id;

			// take 'title' from button image and apply to child images (IE only)
			if (is_ie)
			{
				imgs = buttons[i].getElementsByTagName("img");
				for (j = 0; j < imgs.length; j++)
				{
					if (imgs[j].alt == "")
					{
						imgs[j].title = buttons[i].title;
					}
				}
			}
		}
	}

	for (i = 0; i < controls.length; i++)
	{
		control = fetch_object(controls[i]);

		if (control.id.indexOf(this.editorid + '_cmd_') != -1)
		{
			this.init_command_button(control);
		}
		else if (control.id.indexOf(this.editorid + '_popup_') != -1)
		{
			this.init_popup_menu(control);
		}
	}

	set_unselectable(this.controlbar);
};

// todo : delete this block
/**
* Init Menu Container DIV
*
* @param	string	Command string (forecolor, fontname etc.)
* @param	string	CSS width for the menu
* @param	string	CSS height for the menu
* @param	string	CSS overflow for the menu
*
* @return	object	Newly created menu element
*/
vB_Text_Editor.prototype.init_menu_container = function(cmd, width, height, overflow)
{
	var menu = document.createElement('div');

	menu.id = this.editorid + '_popup_' + cmd + '_menu';
	menu.className = 'vbmenu_popup';
	menu.style.display = 'none';
	menu.style.cursor = 'default';
	menu.style.padding = '3px';
	menu.style.width = width;
	menu.style.height = height;
	menu.style.overflow = overflow;

	return menu;
}


/**
* Init menu controls for the editor
*
* @param	object	HTML node
*
* @return	boolean	Whether to continue opening the popup (see popup_button_show)
*/
vB_Text_Editor.prototype.init_popup_menu = function(obj)
{
	if (this.disabled)
	{
		return false;
	}

	obj.cmd = obj.id.substr(obj.id.indexOf('_popup_') + 7);
	obj.editorid = this.editorid;
	this.buttons[obj.cmd] = obj;

	switch (obj.cmd)
	{
		case 'fontname':
		{
			this.build_fontname_popup(obj);
			break;
		}
		case 'fontsize':
		{
			this.build_fontsize_popup(obj);
			break;
		}
		case 'forecolor':
		{
			this.build_forecolor_popup(obj);
			break;
		}
		case 'smilie':
		{
			this.build_smilie_popup(obj);
			break;
		}
		case 'attach':
		{
			var children = YAHOO.util.Dom.getElementsByClassName('popupctrl', 'div', obj);
			if (!YAHOO.util.Event.getListeners(obj, "mouseover"))
			{
				YAHOO.util.Event.on(obj, "mouseover", vB_Text_Editor.prototype.menu_context, obj, this);
				YAHOO.util.Event.on(obj, "mouseout", vB_Text_Editor.prototype.menu_context, obj, this);
				YAHOO.util.Event.on(obj, "mouseup", vB_Text_Editor.prototype.menu_context, obj, this);
				YAHOO.util.Event.on(obj, "mousedown", vB_Text_Editor.prototype.menu_context, obj, this);
				YAHOO.util.Event.on(children[0], "click", vB_Text_Editor.prototype.attachpopup);
				YAHOO.util.Event.on("manageattach", "click", vB_Text_Editor_Events.prototype.attachmanage_onclick);

				this.popups['attach'] = true;
				if (typeof vB_Attachments != 'undefined' && vB_Attachments.has_attachments())
				{
					this.build_attachments_popup(obj);
				}
				else
				{
					// no popup to display
					if (typeof(vB_Attachments) != "undefined")
					{
						// this is causing problems but is needed
						//vB_Attachments.attachmanage();
					}
					return false;
				}
			}
		}
	}

	return true;
};

vB_Text_Editor.prototype.attachpopup = function(e, obj)
{
	if (typeof(vB_Attachments) != "undefined" && !vB_Attachments.has_attachments())
	{
		vB_Attachments.attachmanage();
	}
}

/**
* Init Smilies
*/
vB_Text_Editor.prototype.init_smilies = function(smilie_container)
{
	if (smilie_container != null)
	{
		var smilies = fetch_tags(smilie_container, 'img');
		for (var i = 0; i < smilies.length; i++)
		{
			if (smilies[i].id && smilies[i].id.indexOf('_smilie_') != false)
			{
				smilies[i].style.cursor = pointer_cursor;
				smilies[i].editorid = this.editorid;
				smilies[i].onclick = vB_Text_Editor_Events.prototype.smilie_onclick;
				smilies[i].unselectable = 'on';
			}
		}
	}
};

/**
* Insert Node at Selection (Mozilla)
*/
vB_Text_Editor.prototype.insert_node_at_selection = function(text)
{
	this.check_focus();

	var sel = this.editwin.getSelection();
	var range = sel ? sel.getRangeAt(0) : this.editdoc.createRange();
	sel.removeAllRanges();
	range.deleteContents();

	var node = range.startContainer;
	var pos = range.startOffset;

	switch (node.nodeType)
	{
		case Node.ELEMENT_NODE:
		{
			if (text.nodeType == Node.DOCUMENT_FRAGMENT_NODE)
			{
				selNode = text.firstChild;
			}
			else
			{
				selNode = text;
			}
			node.insertBefore(text, node.childNodes[pos]);
			this.add_range(selNode);
		}
		break;

		case Node.TEXT_NODE:
		{
			if (text.nodeType == Node.TEXT_NODE)
			{
				var text_length = pos + text.length;
				node.insertData(pos, text.data);
				range = this.editdoc.createRange();
				range.setEnd(node, text_length);
				range.setStart(node, text_length);
				sel.addRange(range);
			}
			else
			{
				node = node.splitText(pos);
				var selNode;
				if (text.nodeType == Node.DOCUMENT_FRAGMENT_NODE)
				{
					selNode = text.firstChild;
				}
				else
				{
					selNode = text;
				}
				node.parentNode.insertBefore(text, node);
				this.add_range(selNode);
			}
		}
		break;
	}
};


/**
* Insert Smilie
*/
vB_Text_Editor.prototype.insert_smilie = function(e, smilietext, smiliepath, smilieid)
{
	if (this.wysiwyg_mode)
	{
		if (is_moz || is_opera)
		{
			this.check_focus();

			try
			{
				this.apply_format('InsertImage', false, smiliepath);
				var smilies = fetch_tags(this.editdoc.body, 'img');
				for (var i = 0; i < smilies.length; i++)
				{
					if (smilies[i].src == smiliepath)
					{
						smilies[i].className = "inlineimg";

						if (smilies[i].getAttribute('smilieid') < 1)
						{
							smilies[i].setAttribute('smilieid', smilieid);
							smilies[i].setAttribute('border', "0");
						}
					}
				}
			}
			catch(e)
			{
				// failed... probably due to inserting a smilie over a smilie in mozilla
			}
		}
		else
		{
			this.check_focus();

			return this.insert_text('<img src="' + smiliepath + '" border="0" class="inlineimg" alt="0" smilieid="' + smilieid + '" />', false);
		}
	}
	else
	{
		this.check_focus();

		return this.insert_text(smilietext, smilietext.length, 0);
	}
};

/**
* Paste HTML
*/
vB_Text_Editor.prototype.insert_text = function(text, movestart, moveend)
{
	if (this.wysiwyg_mode)
	{
		if (is_moz || is_opera)
		{
			this.editdoc.execCommand('insertHTML', false, text);
		}
		else
		{
			this.check_focus();

			if (typeof(this.editdoc.selection) != 'undefined' && this.editdoc.selection.type != 'Text' && this.editdoc.selection.type != 'None')
			{
				movestart = false;
				this.editdoc.selection.clear();
			}

			var sel = this.editdoc.selection.createRange();
			sel.pasteHTML(text);

			if (text.indexOf('\n') == -1)
			{
				if (movestart === false)
				{
					// do nothing
				}
				else if (typeof movestart != 'undefined')
				{
					sel.moveStart('character', -text.vBlength() +movestart);
					sel.moveEnd('character', -moveend);
				}
				else
				{
					sel.moveStart('character', -text.vBlength());
				}
				sel.select();
			}
		}
	}
	else
	{
		var selection_changed = false;

		this.check_focus();

		if (typeof(this.editdoc.selectionStart) != 'undefined')
		{
			var opn = this.editdoc.selectionStart + 0;
			var scrollpos = this.editdoc.scrollTop;

			this.editdoc.value = this.editdoc.value.substr(0, this.editdoc.selectionStart) + text + this.editdoc.value.substr(this.editdoc.selectionEnd);

			if (movestart === false)
			{
				// do nothing
			}
			else if (typeof movestart != 'undefined')
			{
				this.editdoc.selectionStart = opn + movestart;
				this.editdoc.selectionEnd = opn + text.vBlength() - moveend;
			}
			else
			{
				this.editdoc.selectionStart = opn;
				this.editdoc.selectionEnd = opn + text.vBlength();
			}
			this.editdoc.scrollTop = scrollpos;
		}
		else if (document.selection && document.selection.createRange)
		{
			var sel = document.selection.createRange();
			sel.text = text.replace(/\r?\n/g, '\r\n');

			if (movestart === false)
			{
				// do nothing
			}
			else if (typeof movestart != 'undefined')
			{
				if ((movestart - text.vBlength()) != 0)
				{
					sel.moveStart('character', movestart - text.vBlength());
					selection_changed = true;
				}
				if (moveend != 0)
				{
					sel.moveEnd('character', -moveend);
					selection_changed = true;
				}
			}
			else
			{
				sel.moveStart('character', -text.vBlength());
				selection_changed = true;
			}

			if (selection_changed)
			{
				sel.select();
			}
		}
		else
		{
			// failed - just stuff it at the end of the message
			this.editdoc.value += text;
		}
	}
};

/**
* Insert Video
*
* @param	event	Event object
*
* @return	boolean
*/
vB_Text_Editor.prototype.insertvideo = function(e)
{
	this.create_editor_dialog('<img src="' + IMGDIR_MISC + '/lightbox_progress.gif" alt="" />', this.insertvideo_confirm);

	YAHOO.util.Connect.asyncRequest("POST", "ajax.php?do=fetchhtml", {
		success: this.insertvideo_ajax,
		failure: this.remove_editor_dialog,
		timeout: vB_Default_Timeout,
		argument: [this.editorid],
		scope: this
	}, SESSIONURL
		+ "&securitytoken="
		+ SECURITYTOKEN
		+ "&ajax=1"
		+ "&do=fetchhtml"
		+ "&template=editor_video_overlay"
	);
}

vB_Text_Editor.prototype.insertvideo_ajax = function(ajax)
{
	if (ajax.responseXML)
	{
		var html = ajax.responseXML.getElementsByTagName("html");

		if (html.length)
		{
			this.create_editor_dialog(html[0].firstChild.nodeValue, this.insertvideo_confirm, true);
			YAHOO.util.Dom.get("videourl").focus();
			YAHOO.util.Event.on("videourl", "keypress", this.dialog_submit_event, this, true);
			return;
		}
	}

	this.remove_editor_dialog();
}

vB_Text_Editor.prototype.insertvideo_confirm = function()
{
	var result = this.dialog.elements['videourl'].value;
	var doinsert = false;

	if (result = this.verify_prompt(result))
	{
		this.insert_text("[video]" + result + "[/video]");
	}

	this.remove_editor_dialog();
}

vB_Text_Editor.prototype.insertimagesettings_ajax = function(ajax)
{
	if (ajax.responseXML)
	{
		var html = ajax.responseXML.getElementsByTagName("html");

		if (html.length)
		{
			this.create_editor_dialog(html[0].firstChild.nodeValue, this.insertimagesettings_confirm, true);
			YAHOO.util.Dom.get("imageconfigtarget").src = this.activeimg.src;
			YAHOO.util.Event.on("vb_alignment_none", "click", vB_Text_Editor.prototype.insertimagesettings_alignment, this);
			YAHOO.util.Event.on("vb_alignment_right", "click", vB_Text_Editor.prototype.insertimagesettings_alignment, this);
			YAHOO.util.Event.on("vb_alignment_left", "click", vB_Text_Editor.prototype.insertimagesettings_alignment, this);
			YAHOO.util.Event.on("vb_alignment_center", "click", vB_Text_Editor.prototype.insertimagesettings_alignment, this);
			YAHOO.util.Event.on("vb_link_none", "click", vB_Text_Editor.prototype.insertimagesettings_link, this);
			YAHOO.util.Event.on("vb_link_content", "click", vB_Text_Editor.prototype.insertimagesettings_link, this);
			YAHOO.util.Event.on("vb_link_image", "click", vB_Text_Editor.prototype.insertimagesettings_link, this);
			this.remove_activeimg();
			return;
		}
	}

	this.remove_activeimg();
	this.remove_editor_dialog();
}

vB_Text_Editor.prototype.insertimagesettings_confirm = function()
{
	var targetimage = YAHOO.util.Dom.get("imageconfigtarget");
	var match = targetimage.src.match(/attachmentid=(\d+)/i);
	if (match)
	{
		var hidden_form = new vB_Hidden_Form(null);
		hidden_form.add_variables_from_object(YAHOO.util.Dom.get(this.editorid + "_dialog"));
		hidden_form.add_variable("attachmentid", match[1]);

		YAHOO.util.Dom.setStyle("imageoverlay_progress", "display", "inline");
		YAHOO.util.Connect.asyncRequest("POST", "ajax.php?do=saveimageconfig",
		{
			success: this.remove_editor_dialog,
			failure: this.insertimagesettings_failure,
			timeout: vB_Default_Timeout,
			scope: this
		}, SESSIONURL + 'securitytoken=' + SECURITYTOKEN + "&do=saveimageconfig&ajax=1&" + hidden_form.build_query_string());

	}
	else
	{
		alert(this.phrase["unable_to_parse_attachmentid_from_image"]);
		this.remove_editor_dialog();

	}
}

vB_Text_Editor.prototype.insertimagesettings_failure = function()
{
	YAHOO.util.Dom.setStyle("imageoverlay_progress", "display", "none");
	alert(vbphrase['saving_of_settings_failed']);
}

vB_Text_Editor.prototype.insertimagesettings_link = function(e)
{
	var target = YAHOO.util.Event.getTarget(e);
	var linkurl = YAHOO.util.Dom.get("linkurl");
	switch(target.id)
	{
		case "vb_link_none":
			linkurl.setAttribute("value", "");
			break;
		case "vb_link_content":
			linkurl.setAttribute("value", "What goes here?");
			break;
		case "vb_link_image":
			linkurl.setAttribute("value", "[image]");
			break;
	}
}

vB_Text_Editor.prototype.insertimagesettings_alignment = function(e)
{
	var target = YAHOO.util.Event.getTarget(e);
	YAHOO.util.Dom.removeClass("imageconfigtarget", "left");
	YAHOO.util.Dom.removeClass("imageconfigtarget", "right");
	YAHOO.util.Dom.removeClass("imageconfigtarget", "center");
	switch(target.id)
	{
		case "vb_alignment_left":
			YAHOO.util.Dom.addClass("imageconfigtarget", "left");
			break;
		case "vb_alignment_right":
			YAHOO.util.Dom.addClass("imageconfigtarget", "right");
			break;
		case "vb_alignment_center":
			YAHOO.util.Dom.addClass("imageconfigtarget", "center");
			break;
	}
}

vB_Text_Editor.prototype.insertimagesettings_failure = function(ajax)
{
	this.remove_activeimg();
	this.remove_editor_dialog();
}

/**
* Insert Image
*
* @param	event	Event object
*
* @return	boolean
*/
vB_Text_Editor.prototype.insertimage = function(e, forceoldway)
{
	if (this.wysiwyg_mode && typeof(vBulletin.attachinfo) != "undefined" && typeof(vBulletin.attachinfo.contenttypeid) != "undefined" && vBulletin.attachinfo.contenttypeid != 0 && typeof(forceoldway) == "undefined")
	{
		this.show_editor_progress();

		YAHOO.util.Connect.asyncRequest("POST", "ajax.php?do=fetchhtml", {
			success: this.insertimage_ajax,
			failure: this.remove_editor_dialog,
			timeout: vB_Default_Timeout,
			argument: [this.editorid],
			scope: this
		}, SESSIONURL
			+ "&securitytoken="
			+ SECURITYTOKEN
			+ "&ajax=1"
			+ "&do=fetchhtml"
			+ "&template=editor_upload_overlay"
		);
	}
	else
	{
		img = this.show_prompt(vbphrase['enter_image_url'], 'http://', true);
		if (img = this.verify_prompt(img))
		{
			return this.apply_format('insertimage', false, img);
		}
		else
		{
			return false;
		}
	}
};

vB_Text_Editor.prototype.insertimage_ajax = function(ajax)
{
	if (ajax.responseXML)
	{
		var html = ajax.responseXML.getElementsByTagName("html");
		if (html.length)
		{
			this.create_editor_dialog(html[0].firstChild.nodeValue, this.insertimage_confirm, true);
			if (typeof(TabsLightJS) == "undefined")
			{
				var me = this;
				YAHOO.vBulletin.LoadCss("css.php?sheet=yuiupload.css");
				YAHOO.vBulletin.LoadScript("clientscript/vbulletin-tabslight.js?v=" + SIMPLEVERSION, function() { init_tabslight() });
				YAHOO.vBulletin.LoadScript("clientscript/yui/combo/imageupload.js?v=" + SIMPLEVERSION, function() {
					YAHOO.vBulletin.LoadScript("clientscript/vbulletin_yuiupload.js?v=" + SIMPLEVERSION, function() {
						YAHOO.vBulletin.LoadScript("clientscript/vbulletin_imageup.js?v=" + SIMPLEVERSION, function() { me.insertimage_ready(); });
					});
				});
			}
			else
			{
				init_tabslight();
				this.insertimage_ready();
			}
			return;
		}
	}

	this.remove_editor_dialog();
}

vB_Text_Editor.prototype.insertimage_ready = function(e)
{
	this.hide_editor_progress();
	YAHOO.util.Dom.removeClass("editor_upload_overlay", "hidden");
	this.position_dialog(this.dialog);
	var imageuploadobj = new vB_ImageUpload(this.editorid + "_dialog");
//	if (imageuploadobj.ready)
//	{
		imageuploadobj.events.complete.subscribe(this.insertimage_complete, this);
		imageuploadobj.events.uploaddone.subscribe(this.insertimage_uploaddone, this);
//	}
//	else
//	{
//		this.remove_editor_dialog();
//		this.insertimage(null, true)
//	}
}

vB_Text_Editor.prototype.insertimage_confirm = function(e)
{
	YAHOO.util.Event.stopEvent(e);

	if (!YAHOO.util.Dom.get("urlretrieve").checked)
	{
		if (img = this.verify_prompt(YAHOO.util.Dom.get("urlupload").value))
		{
			this.check_focus();
			this.apply_format('insertimage', false, img);
		}
		this.remove_editor_dialog();
		return;
	}

	var url = YAHOO.util.Dom.get("urlupload").value;
	if (!url)
	{
		this.remove_editor_dialog();
	}
	else
	{
		this.show_editor_progress();
		var callback =
		{
			upload  : this.insertimage_uploadurl,
			failure : function(ajax)
			{
				vBulletin_AJAX_Error_Handler(ajax)
				this.hide_editor_progress();
			},
			scope   : this
		};

		var formel = YAHOO.util.Dom.get(this.editorid + "_dialog");

		formel.action = "newattachment.php";
		formel.posthash.value =  vBulletin.attachinfo.posthash;
		formel.poststarttime.value =  vBulletin.attachinfo.poststarttime;
		formel.contenttypeid.value =  vBulletin.attachinfo.contenttypeid;

		for (var i in vBulletin.attachinfo.values)
		{
			var input = document.createElement("input");
			input.name = "values[" + i + "]";
			input.value = vBulletin.attachinfo.values[i];
			input.type = "hidden";
			formel.appendChild(input);
		}

		YAHOO.util.Connect.setForm(formel, true, true);
		YAHOO.util.Connect.asyncRequest("POST", "newattachment.php", callback, "ajax=1");

		// this is for Safari
		return false;
	}
}

vB_Text_Editor.prototype.insertimage_uploadurl = function(ajax)
{
	var attachmatch = ajax.responseText.match(/^ok - ([\d]+) - ([01])/);
	if (attachmatch)
	{
		this.insert_attachment(attachmatch[1], vBulletin.attachinfo.contenttypeid, attachmatch[2]);
	}
	else
	{
		var match = ajax.responseText.match(/^error: (.*)$/);
		alert(match ? match[1] : vbphrase['upload_failed']);
	}
	this.remove_editor_dialog();
}

vB_Text_Editor.prototype.insertimage_uploaddone = function(event, args, me)
{
	me.insert_attachment(args[0], args[1], args[2]);
}

vB_Text_Editor.prototype.insertimage_complete = function(event, args, me)
{
	me.remove_editor_dialog();
}

/**
* Insert Attachment
*/
vB_Text_Editor.prototype.insert_attachment = function(attachmentid, contenttypeid, thumbnail)
{
	if (thumbnail != 0 && this.wysiwyg_mode)
	{
		if (is_moz)
		{
			this.insert_text('<img src="' + 'attachment.php?' + (SESSIONURL != "" ? SESSIONURL + "amp;" : "") + 'attachmentid=' + attachmentid + '&amp;cid=' + contenttypeid + '&amp;stc=1" alt="" class="previewthumb" />');
		}
		else
		{
			this.insert_text('<img src="' + BBURL + '/attachment.php?' + (SESSIONURL != "" ? SESSIONURL + "amp;" : "") + 'attachmentid=' + attachmentid + '&amp;cid=' + contenttypeid + '&amp;stc=1" alt="" class="previewthumb" />');
		}
	}
	else
	{
		this.insert_text("[ATTACH]" + attachmentid + "[/ATTACH]");
	}
	this.collapse_selection_end();
}

/**
* Insert List
*/
vB_Text_Editor.prototype.insertlist = function(phrase, listtype)
{
	var opentag = '[LIST' + (listtype ? ('=' + listtype) : '') + ']\n';
	var closetag = '[/LIST]';
	var txt;

	if (txt = this.get_selection())
	{
		var regex = new RegExp('([\r\n]+|^[\r\n]*)(?!\\[\\*\\]|\\[\\/?list)(?=[^\r\n])', 'gi');
		txt = opentag + PHP.trim(txt).replace(regex, '$1[*]') + '\n' + closetag;
		this.insert_text(txt, txt.vBlength(), 0);
	}
	else
	{
		this.insert_text(opentag + closetag, opentag.length, closetag.length);

		if (YAHOO.env.ua.ie >= 7)
		{
			// respect a <base> tag (see #23097)
			var base_tag = fetch_tags(document, 'base');
			var modal_prefix;
			if (base_tag && base_tag[0] && base_tag[0].href)
			{
				modal_prefix = base_tag[0].href;
			}
			else
			{
				modal_prefix = '';
			}
			var listvalue = window.showModalDialog(modal_prefix + "clientscript/ieprompt.html?", { 'value': '', 'label': vbphrase['enter_list_item'], 'dir': document.dir, 'title': document.title, 'listtype': listtype }, "dialogWidth:320px; dialogHeight:232px; dialogTop:" + (parseInt(window.screenTop) + parseInt(window.event.clientY) + parseInt(document.body.scrollTop) - 100) + "px; dialogLeft:" + (parseInt(window.screenLeft) + parseInt(window.event.clientX) + parseInt(document.body.scrollLeft) - 160) + "px; resizable: No;");
			if (this.verify_prompt(listvalue))
			{
				this.insert_text(listvalue, listvalue.vBlength(), 0);
			}
		}
		else
		{
			while (listvalue = this.show_prompt(vbphrase['enter_list_item'], '', false))
			{
				listvalue = '[*]' + listvalue + '\n';
				this.insert_text(listvalue, listvalue.vBlength(), 0);
			}
		}
	}
}

/**
* Insert Ordered List
*/
vB_Text_Editor.prototype.insertorderedlist = function(e)
{
	if (this.wysiwyg_mode)
	{
		return this.apply_format('insertorderedlist', false, true);
	}
	else
	{
		this.insertlist(vbphrase['insert_ordered_list'], '1');
	}
};

/**
* Insert Unordered List
*/
vB_Text_Editor.prototype.insertunorderedlist = function(e)
{
	if (this.wysiwyg_mode)
	{
		return this.apply_format('insertunorderedlist', false, true);
	}
	else
	{
		this.insertlist(vbphrase['insert_unordered_list'], '');
	}
};

/**
* Menu Context
*
* @param	object	The menu container object
* @param	string	The state of the control
*/
vB_Text_Editor.prototype.menu_context = function(e, obj)
{
	if (this.disabled)
	{
		return;
	}

//		YAHOO.util.Dom.removeClass(obj, "imagebutton_selected");
//		YAHOO.util.Dom.removeClass(obj, "imagebutton_hover");
//		YAHOO.util.Dom.removeClass(obj, "imagebutton_down");

	var children = YAHOO.util.Dom.getElementsByClassName('popupctrl', 'div', obj);

	switch (e.type)
	{
		case 'mouseout':
		{
			if (!YAHOO.util.Dom.hasClass(children[0], "imagebutton_down"))
			{
				this.set_control_style(children[0], 'button', 'normal');
			}
			break;
		}
		case 'mousedown':
		{
			if (YAHOO.util.Dom.hasClass(children[0], "imagebutton_down"))
			{
				this.set_control_style(children[0], 'button', 'hover');
			}
			else
			{
				this.set_control_style(children[0], 'popup', 'down');
			}
			break;
		}
		case 'mouseup':
		case 'mouseover':
		{
			this.set_control_style(children[0], 'button', 'hover');
			break;
		}
	}
};

/**
* Open Smilie Window
*
* @param	integer	Window width
* @param	integer	Window height
*/
vB_Text_Editor.prototype.open_smilie_window = function(width, height)
{
	smilie_window = openWindow('misc.php?' + SESSIONURL + 'do=getsmilies&editorid=' + this.editorid, width, height, 'smilie_window');

	window.onunload = vB_Text_Editor_Events.prototype.smiliewindow_onunload;
}

/**
* Outdent
*/
vB_Text_Editor.prototype.outdent = function(e)
{
	if (this.wysiwyg_mode)
	{
		return this.apply_format('outdent', false, true);
	}
	else
	{
		var sel = this.get_selection();
		sel = this.strip_simple('indent', sel, 1);
		this.insert_text(sel);
	}
};

/**
* Prepare Form For Submit
*/
vB_Text_Editor.prototype.prepare_submit = function(subjecttext, minchars)
{
	var returnValue;

	if (this.wysiwyg_mode)
	{
		this.textobj.value = this.get_editor_contents();
		returnvalue = validatemessage(stripcode(this.textobj.value, true), subjecttext, minchars);
	}
	else
	{
		returnvalue = validatemessage(this.textobj.value, subjecttext, minchars);
	}

	if (returnvalue)
	{
		return returnvalue;
	}
	else if (this.captcha != null && this.captcha.failed)
	{
		return returnvalue;
	}
	else
	{
		this.check_focus();
		return false;
	}
}

/**
* Wrapper for Link / Email Link insert
*/
vB_Text_Editor.prototype.prompt_link = function(tagname, value, phrase, iprompt)
{
	if (typeof value == 'undefined')
	{
		value = this.show_prompt(phrase, iprompt, true);
	}
	if ((value = this.verify_prompt(value)) !== false)
	{
		if (this.get_selection())
		{
			this.apply_format('unlink');
			this.wrap_tags(tagname, value);
		}
		else
		{
			this.wrap_tags(tagname, value, value);
		}
	}
	return true;
};

/**
* Read Nodes (Mozilla)
*/
vB_Text_Editor.prototype.read_nodes = function(root, toptag)
{
	var html = "";
	var moz_check = /_moz/i;

	switch (root.nodeType)
	{
		case Node.ELEMENT_NODE:
		case Node.DOCUMENT_FRAGMENT_NODE:
		{
			var closed;
			var i;
			if (toptag)
			{
				closed = !root.hasChildNodes();
				html = '<' + root.tagName.toLowerCase();
				var attr = root.attributes;
				for (i = 0; i < attr.length; ++i)
				{
					var a = attr.item(i);
					if (!a.specified || a.name.match(moz_check) || a.value.match(moz_check))
					{
						continue;
					}

					html += " " + a.name.toLowerCase() + '="' + a.value + '"';
				}
				html += closed ? " />" : ">";
			}
			for (i = root.firstChild; i; i = i.nextSibling)
			{
				html += this.read_nodes(i, true);
			}
			if (toptag && !closed)
			{
				html += "</" + root.tagName.toLowerCase() + ">";
			}
		}
		break;

		case Node.TEXT_NODE:
		{
			//html = htmlspecialchars(root.data);
			html = PHP.htmlspecialchars(root.data);
		}
		break;
	}

	return html;
};

/**
* Creates a new text editor object of the same type as the current one.
* Arguments are passed to the object constructor.
*/
vB_Text_Editor.prototype.recreate_editor = function(editorid, mode, parsetype, parsesmilies, initial_text, ajax_extra)
{
	return new vB_Text_Editor(editorid, mode, parsetype, parsesmilies, initial_text, ajax_extra);
}

/**
* Redo using vB's history system
*/
vB_Text_Editor.prototype.redo = function()
{
	if (this.wysiwyg_mode)
	{
		return this.apply_format('redo', false, true);
	}
	else
	{
		this.history.move_cursor(1);
		var str;
		if ((str = this.history.get_snapshot()) !== false)
		{
			this.editdoc.value = str;
		}
	}
};

/**
* Remove Formatting
*/
vB_Text_Editor.prototype.removeformat = function(e)
{
	if (this.wysiwyg_mode)
	{
		return this.apply_format('removeformat', false, true);
	}
	else
	{
		var simplestrip = new Array('b', 'i', 'u');
		var complexstrip = new Array('font', 'color', 'size');

		var str = this.get_selection();
		if (str === false)
		{
			return;
		}

		var tag;
		// simple stripper
		for (tag in simplestrip)
		{
			if (YAHOO.lang.hasOwnProperty(simplestrip, tag))
			{
				str = this.strip_simple(simplestrip[tag], str);
			}
		}

		// complex stripper
		for (tag in complexstrip)
		{
			if (YAHOO.lang.hasOwnProperty(complexstrip, tag))
			{
				str = this.strip_complex(complexstrip[tag], str);
			}
		}

		this.insert_text(str);
	}
};

/**
* Resize Editor
*
* @param	integer	Number of pixels by which to resize the editor
*/
vB_Text_Editor.prototype.resize_editor = function(change)
{
	var newheight = parseInt(YAHOO.util.Dom.getStyle(this.editbox, "height"), 10) + change;

	if (newheight >= 60)
	{
		YAHOO.util.Dom.setStyle(this.editbox, "height", newheight + "px");
		if (is_ie)
		{
			YAHOO.util.Dom.setStyle(this.editdoc.body, "height", newheight - 6 + "px");
		}
		// remember the change if we're not shifting by a multiple of 99.
		// 99 is used with small editors (like QR) where we don't want the height to be saved.
		if (change % 99 != 0)
		{
			set_cookie('editor_height', newheight);
		}

		custom_editor_events['editor_switch'].fire(this);
	}

};

/**
* Set Color Context
*/
vB_Text_Editor.prototype.set_color_context = function(colorstate)
{
	if (this.buttons['forecolor'])
	{
		if (typeof colorstate == 'undefined')
		{
			colorstate = this.editdoc.queryCommandValue('forecolor');
		}
		if (colorstate != this.colorstate)
		{
			if (this.popupmode)
			{
				var obj = fetch_object(this.editorid + '_color_' + this.translate_color_commandvalue(this.colorstate));
				if (obj != null)
				{
					obj.state = false;
					this.button_context(obj, 'mouseout', 'menu');
				}

				this.colorstate = colorstate;

				elmid = this.editorid + '_color_' + this.translate_color_commandvalue(colorstate);
				obj = fetch_object(elmid);
				if (obj != null)
				{
					obj.state = true;
					this.button_context(obj, 'mouseout', 'menu');
				}
			}
			else
			{
				this.colorstate = colorstate;

				colorstate = this.translate_color_commandvalue(this.colorstate);

				for (var i = 0; i < this.buttons['forecolor'].options.length; i++)
				{
					if (this.buttons['forecolor'].options[i].value == colorstate)
					{
						this.buttons['forecolor'].selectedIndex = i;
						break;
					}
				}
			}
		}
	}
};

/**
* Set Context
*/
vB_Text_Editor.prototype.set_context = function(cmd)
{
	if (!this.wysiwyg_mode)
	{
		return;
	}

	for (var i in contextcontrols)
	{
		if (!YAHOO.lang.hasOwnProperty(contextcontrols, i))
		{
			continue;
		}

		var obj = fetch_object(this.editorid + '_cmd_' + contextcontrols[i]);
		if (obj != null)
		{
			var state = this.editdoc.queryCommandState(contextcontrols[i]);
			//alert (contextcontrols[i] + ' ' + state + ' ' + obj.state);
			if (obj.state != state)
			{
				obj.state = state;
				this.button_context(obj, (obj.cmd == cmd ? 'mouseover' : 'mouseout'));
			}
		}
	}

	this.set_font_context();
	this.set_size_context();
	this.set_color_context();
};

/**
* Set Control Style
*
* @param	object	The object to be styled
* @param	string	Control type - 'button' or 'menu'
* @param	string	The mode to use, corresponding to the istyles array
*/
vB_Text_Editor.prototype.set_control_style = function(obj, controltype, mode)
{
	if (obj.mode != mode)
	{
		obj.mode = mode;

		YAHOO.util.Dom.removeClass(obj, "imagebutton_selected");
		YAHOO.util.Dom.removeClass(obj, "imagebutton_hover");
		YAHOO.util.Dom.removeClass(obj, "imagebutton_down");

		switch(obj.mode)
		{
			case "down":
				YAHOO.util.Dom.addClass(obj, "imagebutton_down");
				break;
			case "selected":
				YAHOO.util.Dom.addClass(obj, "imagebutton_selected");
				break;
			case "hover":
				YAHOO.util.Dom.addClass(obj, "imagebutton_hover");
				break;
			case "normal":
				break;
		}

		return;
	}
};

/**
* Sets the text direction for the editor
*/
vB_Text_Editor.prototype.set_direction = function()
{
	this.editdoc.dir = this.textobj.dir;
};

/**
* Put the text into the editor
*/
vB_Text_Editor.prototype.set_editor_contents = function(initial_text)
{
	if (this.wysiwyg_mode)
	{
		if (fetch_object(this.editorid + '_iframe'))
		{
			this.editbox = fetch_object(this.editorid + '_iframe');
			YAHOO.util.Dom.setStyle(this.editbox, "display", "");
		}
		else
		{
			var iframe = document.createElement('iframe');
			if (is_ie && window.location.protocol == 'https:')
			{
				// workaround for IE throwing insecure page warnings
				iframe.src = 'clientscript/index.html';
			}
			if (is_ie)
			{
				YAHOO.util.Dom.setAttribute(iframe, "frameBorder", "0");	// camelCase Required!
			}
			this.editbox = this.textobj.parentNode.appendChild(iframe);
			this.editbox.id = this.editorid + '_iframe';
			this.editbox.tabIndex = 1;
			YAHOO.util.Dom.addClass(this.editbox, "textbox");
		}

		this.textobj.style.display = 'none';

		this.editwin = this.editbox.contentWindow;
		this.editdoc = this.editwin.document;

		this.write_editor_contents((typeof initial_text == 'undefined' ?  this.textobj.value : initial_text), true);

		if (this.editdoc.dir == 'rtl')
		{
		//	this.editdoc.execCommand('justifyright', false, null);
		}
		this.spellobj = this.editdoc.body;

		this.editdoc.editorid = this.editorid;
		this.editwin.editorid = this.editorid;

		if (is_moz)
		{
			this.editdoc.addEventListener('keypress', vB_Text_Editor_Events.prototype.editdoc_onkeypress, true);
		}
		else
		{
			YAHOO.util.Dom.setStyle(this.editdoc.body, "height", parseInt(YAHOO.util.Dom.getStyle(this.editbox, "height"), 10) - 6 + "px");
			YAHOO.util.Event.on(this.editwin, "scroll", vB_Text_Editor.prototype.resize_ie_body, this, true);
		}
	}
	else
	{
		var iframe = this.textobj.parentNode.getElementsByTagName('iframe')[0];
		if (iframe)
		{
			this.textobj.style.display = '';
			this.textobj.style.width = iframe.style.width;
			this.textobj.style.height = iframe.style.height;

			YAHOO.util.Dom.setStyle(iframe, "display", "none");
		}

		this.editwin = this.textobj;
		this.editdoc = this.textobj;
		this.editbox = this.textobj;
		this.spellobj = this.textobj;

		this.set_editor_width(this.textobj.style.width);

		if (typeof initial_text != 'undefined')
		{
			this.write_editor_contents(initial_text);
		}

		this.editdoc.editorid = this.editorid;
		this.editwin.editorid = this.editorid;

		this.history.add_snapshot(this.get_editor_contents());
	}

	if (typeof(vB_Attachments) != "undefined")
	{
		vB_Attachments.editor = this;
	}
};

/**
* Init Editor Functions
*/
vB_Text_Editor.prototype.set_editor_functions = function()
{
	if (this.wysiwyg_mode)
	{
		if (!YAHOO.util.Event.getListeners(this.editdoc, "mousemove"))
		{
			YAHOO.util.Event.on(this.editdoc, "mousemove", vB_Text_Editor_Events.prototype.editdoc_onmousemove, this, true);
			YAHOO.util.Event.on(this.editdoc, "click", vB_Text_Editor_Events.prototype.editdoc_onclick, this, true);
			YAHOO.util.Event.on(this.editdoc, "mousedown", vB_Text_Editor_Events.prototype.editdoc_onmousedown, this, true);
			if (is_moz)
			{
				YAHOO.util.Event.on(this.editdoc, "dragend", vB_Text_Editor_Events.prototype.editdoc_ondragend, this, true);
				this.editdoc.addEventListener('mouseup', vB_Text_Editor_Events.prototype.editdoc_onmouseup, true);
				this.editdoc.addEventListener('keyup', vB_Text_Editor_Events.prototype.editdoc_onkeyup, true);
				this.editwin.addEventListener('focus', vB_Text_Editor_Events.prototype.editwin_onfocus, true);
				this.editwin.addEventListener('blur', vB_Text_Editor_Events.prototype.editwin_onblur, true);
			}
			else
			{
				this.editdoc.onmouseup = vB_Text_Editor_Events.prototype.editdoc_onmouseup;
				this.editdoc.onkeyup = vB_Text_Editor_Events.prototype.editdoc_onkeyup;

				if (this.editdoc.attachEvent)
				{
					this.editdoc.body.attachEvent("onresizestart", vB_Text_Editor_Events.prototype.editdoc_onresizestart);
				}

				this.editwin.onfocus = vB_Text_Editor_Events.prototype.editwin_onfocus;
				this.editwin.onblur = vB_Text_Editor_Events.prototype.editwin_onblur;
			}
		}
	}
	else
	{
		if (this.editdoc.addEventListener)
		{
			if (!YAHOO.util.Event.getListeners(this.editdoc, "keypress"))
			{
				YAHOO.util.Event.on(this.editdoc, "keypress", vB_Text_Editor_Events.prototype.editdoc_onkeypress, this, true);
			}
		}
		else if (is_ie)
		{
			this.editdoc.onkeydown = vB_Text_Editor_Events.prototype.editdoc_onkeypress;
		}
		this.editwin.onfocus = vB_Text_Editor_Events.prototype.editwin_onfocus;
		this.editwin.onblur = vB_Text_Editor_Events.prototype.editwin_onblur;
	}
};

/**
* Set the CSS style of the editor
*/
vB_Text_Editor.prototype.set_editor_style = function()
{
	if (!this.wysiwyg_mode)
	{
		return;
	}

	var wysiwyg_csstext = '';
	var have_usercss = false;

	var all_stylesheets = fetch_all_stylesheets(document.styleSheets);

	for (var ss = 0; ss < all_stylesheets.length; ss++)
	{
		try
		{
			var rules = (all_stylesheets[ss].cssRules ? all_stylesheets[ss].cssRules : all_stylesheets[ss].rules);
			if (rules.length <= 0)
			{
				continue;
			}
		}
		catch(e)
		{
			// trying to access a stylesheet outside the allowed domain
			continue;
		}

		for (var i = 0; i < rules.length; i++)
		{
			if (!rules[i].selectorText)
			{
				continue;
			}

			var process = false;
			var selectors = new Array();

			if (rules[i].selectorText.indexOf('.wysiwyg') >= 0)
			{
				// contains wysiwyg redefinitions - pull out the wysiwyg-related selectors only
				var split_selectors = rules[i].selectorText.split(',');
				for (var selid = 0; selid < split_selectors.length; selid++)
				{
					if (split_selectors[selid].indexOf('.wysiwyg') >= 0)
					{
						// need to remove
						selectors.push(split_selectors[selid]);
					}

					if (split_selectors[selid].indexOf('#usercss') >= 0)
					{
						have_usercss = true;
					}
				}

				process = true;
			}

			if (process)
			{
				var css_rules = '{ ' + rules[i].style.cssText + ' }';

				// Moz only: make all rules important to override
				if (is_moz)
				{
					css_rules = css_rules.replace(/; /g, ' !important; ');
				}

				wysiwyg_csstext += selectors.join(', ') + ' ' + css_rules + '\n';
			}
		}
	}



	if (is_ie)
	{
		this.editdoc.createStyleSheet().cssText = wysiwyg_csstext;
	}
	else
	{
		var newss = this.editdoc.createElement('style');
		newss.type = 'text/css';
		newss.innerHTML = wysiwyg_csstext;
		this.editdoc.documentElement.childNodes[0].appendChild(newss);
	}

	if (have_usercss)
	{
		this.editdoc.body.parentNode.id = 'usercss';
	}

	this.editdoc.body.className = 'wysiwyg';
};

/**
* Sets the width of the editor. Works around an IE issue if necessary.
*
* @param	string	Width to set
* @param	bool	Whether to overwrite the "original" width setting
*/
vB_Text_Editor.prototype.set_editor_width = function(width, overwrite_original)
{
	if (this.wysiwyg_mode)
	{
		this.editbox.style.width = width;
	}
	else
	{
		if (typeof(this.textobj.style.oWidth) == 'undefined' || overwrite_original)
		{
			this.textobj.style.oWidth = width;
		}

		if (is_ie)
		{
			// IE has problems when a textarea has a percentage width (see bug 22816)
			this.textobj.style.width = this.textobj.style.oWidth;

			var orig_offset = this.textobj.offsetWidth;
			if (orig_offset > 0)
			{
				// this ensures that the effective width of the textarea is actually what we request!
				this.textobj.style.width = orig_offset + "px";
				this.textobj.style.width = (orig_offset + orig_offset - this.textobj.offsetWidth) + "px";
			}
		}
		else
		{
			this.textobj.style.width = width;
		}
	}
}

/**
* Set Font Context
*/
vB_Text_Editor.prototype.set_font_context = function(fontstate)
{
	if (this.buttons['fontname'])
	{
		if (typeof fontstate == 'undefined')
		{
			fontstate = this.editdoc.queryCommandValue('fontname');
		}
		switch (fontstate)
		{
			case '':
			{
				if (!is_ie && window.getComputedStyle)
				{
					fontstate = this.editdoc.body.style.fontFamily;
				}
			}
			break;

			case null:
			{
				fontstate = '';
			}
			break;
		}

		if (fontstate != this.fontstate)
		{
			this.fontstate = fontstate;
			var i;

			if (this.popupmode)
			{
				if (YAHOO.lang.hasOwnProperty(this.fontoptions, this.fontstate))
				{
					YAHOO.util.Dom.get(this.editorid + "_fontfield").innerHTML = this.fontoptions[this.fontstate];
				}
				else
				{
					YAHOO.util.Dom.get(this.editorid + "_fontfield").innerHTML = this.fontoptions[""];
				}
			}
			else
			{
				for (i = 0; i < this.buttons['fontname'].options.length; i++)
				{
					if (this.buttons['fontname'].options[i].value == thingy)
					{
						this.buttons['fontname'].selectedIndex = i;
						break;
					}
				}
			}
		}
	}
};

/**
* Set Size Context
*/
vB_Text_Editor.prototype.set_size_context = function(sizestate)
{
	if (this.buttons['fontsize'])
	{
		if (typeof sizestate == 'undefined')
		{
			sizestate = this.editdoc.queryCommandValue('fontsize');
		}
		switch (sizestate)
		{
			case null:
			case '':
			{
				if (is_moz)
				{
					sizestate = this.translate_fontsize(this.editdoc.body.style.fontSize);
				}
			}
			break;
		}
		if (sizestate != this.sizestate)
		{
			this.sizestate = sizestate;
			var i;

			if (this.popupmode)
			{
				if (YAHOO.lang.hasOwnProperty(this.sizeoptions, this.sizestate))
				{
					YAHOO.util.Dom.get(this.editorid + "_sizefield").innerHTML = this.sizeoptions[this.sizestate];
				}
				else
				{
					YAHOO.util.Dom.get(this.editorid + "_sizefield").innerHTML = this.sizeoptions[""];
				}
			}
			else
			{
				for (i = 0; i < this.buttons['fontsize'].options.length; i++)
				{
					if (this.buttons['fontsize'].options[i].value == this.sizestate)
					{
						this.buttons['fontsize'].selectedIndex = i;
						break;
					}
				}
			}
		}
	}
};

/**
* Show JS Prompt and filter result
*
* @param	string	Text for the dialog
* @param	string	Default value for the dialog
* @param	string	Whether to force LTR (for URLs, etc)
*
* @return	string
*/
vB_Text_Editor.prototype.show_prompt = function(dialogtxt, defaultval, forceltr)
{
	var returnvalue;
	if (YAHOO.env.ua.ie >= 7)
	{
		// respect a <base> tag (see #23097)
		var base_tag = fetch_tags(document, 'base');
		var modal_prefix;
		if (base_tag && base_tag[0] && base_tag[0].href)
		{
			modal_prefix = base_tag[0].href;
		}
		else
		{
			modal_prefix = '';
		}
		returnvalue = window.showModalDialog(modal_prefix + "clientscript/ieprompt.html?", { value: defaultval, label: dialogtxt, dir: document.dir, title: document.title, forceltr: (typeof(forceltr) != "undefined" ? forceltr : false) }, "dialogWidth:320px; dialogHeight:150px; dialogTop:" + (parseInt(window.screenTop) + parseInt(window.event.clientY) + parseInt(document.body.scrollTop) - 100) + "px; dialogLeft:" + (parseInt(window.screenLeft) + parseInt(window.event.clientX) + parseInt(document.body.scrollLeft) - 160) + "px; resizable: No;");
	}
	else
	{
		returnvalue = prompt(dialogtxt, defaultval);
	}

	// deal with unexpected return value
	if (typeof(returnvalue) == "undefined")
	{
		return false;
	}
	else if (returnvalue == false || returnvalue == null)
	{
		return returnvalue;
	}
	else
	{
		return PHP.trim(new String(returnvalue));
	}
};

/**
* Check Spelling (uses ieSpell from www.iespell.com)
*
* Eventually we hope to integrate SpellBound (http://spellbound.sourceforge.net) for Gecko.
*/
vB_Text_Editor.prototype.spelling = function()
{
	if (is_ie)
	{
		try
		{
			// attempt to instantiate ieSpell
			eval("new A" + "ctiv" + "eX" + "Ob" + "ject('ieSpell." + "ieSpellExt" + "ension').CheckD" + "ocumentNode(this.spellobj);");
		}
		catch(e)
		{
			// ask if user wants to download ieSpell
			if (e.number == -2146827859 && confirm(vbphrase['iespell_not_installed']))
			{
				// ooh they do...
				window.open('http://www.iespell.com/download.ph' + 'p');
			}
		}
	}
	else if (is_moz)
	{
		// attempt to instantiate SpellBound... when it supports this behaviour
	}
};

/**
* Strip a tag with an option
*/
vB_Text_Editor.prototype.strip_complex = function(tag, str, iterations)
{
	var opentag = '[' + tag + '=';
	var closetag = '[/' + tag + ']';

	if (typeof iterations == 'undefined')
	{
		iterations = -1;
	}

	while ((startindex = PHP.stripos(str, opentag)) !== false && iterations != 0)
	{
		iterations --;
		if ((stopindex = PHP.stripos(str, closetag)) !== false)
		{
			var openend = PHP.stripos(str, ']', startindex);
			if (openend !== false && openend > startindex && openend < stopindex)
			{
				var text = str.substr(openend + 1, stopindex - openend - 1);
				str = str.substr(0, startindex) + text + str.substr(stopindex + closetag.length);
			}
			else
			{
				break;
			}
		}
		else
		{
			break;
		}
	}

	return str;
};

/**
* Strip a simple tag...
*/
vB_Text_Editor.prototype.strip_simple = function(tag, str, iterations)
{
	var opentag = '[' + tag + ']';
	var closetag = '[/' + tag + ']';

	if (typeof iterations == 'undefined')
	{
		iterations = -1;
	}

	while ((startindex = PHP.stripos(str, opentag)) !== false && iterations != 0)
	{
		iterations --;
		if ((stopindex = PHP.stripos(str, closetag)) !== false)
		{
			var text = str.substr(startindex + opentag.length, stopindex - startindex - opentag.length);
			str = str.substr(0, startindex) + text + str.substr(stopindex + closetag.length);
		}
		else
		{
			break;
		}
	}

	return str;
};

/**
* Generates (and fires) Ajax call to switch the editor between the WYSIWYG and non-WYSIWYG modes.
*
*/
vB_Text_Editor.prototype.switch_editor_ajax = function()
{
	var mode = (this.wysiwyg_mode ? 0 : 1);

	YAHOO.util.Connect.asyncRequest("POST", 'ajax.php?do=editorswitch', {
		success: do_switch_editor_mode,
		timeout: vB_Default_Timeout,
		argument: [this.editorid, mode]
	//	scope: this
	}, SESSIONURL
		+ 'securitytoken=' + SECURITYTOKEN
		+ '&do=editorswitch'
		+ '&towysiwyg='	+ mode
		+ '&parsetype=' + this.parsetype
		+ '&allowsmilie=' + this.parsesmilies
		+ '&message=' + PHP.urlencode(this.get_editor_contents())
		+ (this.ajax_extra ? ('&' + this.ajax_extra) : '')
		+ (typeof this.textobj.form['options[allowbbcode]']  != 'undefined' ? '&allowbbcode=' + this.textobj.form['options[allowbbcode]'].checked : '')
	);
}

/**
* Function to translate the output from queryCommandState('forecolor') into something useful
*
* @param	string	Output from queryCommandState('forecolor')
*
* @return	string
*/
vB_Text_Editor.prototype.translate_color_commandvalue = function(forecolor)
{
	if (is_moz)
	{
		if (forecolor == '' || forecolor == null)
		{
			forecolor = window.getComputedStyle(this.editdoc.body, null).getPropertyValue('color');
		}

		if (forecolor.toLowerCase().indexOf('rgb') == 0)
		{
			var matches = forecolor.match(/^rgb\s*\(([0-9]+),\s*([0-9]+),\s*([0-9]+)\)$/);
			if (matches)
			{
				return this.translate_silly_hex((matches[1] & 0xFF).toString(16), (matches[2] & 0xFF).toString(16), (matches[3] & 0xFF).toString(16));
			}
			else
			{
				return this.translate_color_commandvalue(null);
			}
		}
		else
		{
			return forecolor;
		}
	}
	else
	{
		return this.translate_silly_hex((forecolor & 0xFF).toString(16), ((forecolor >> 8) & 0xFF).toString(16), ((forecolor >> 16) & 0xFF).toString(16));
	}
};

/**
* Translate CSS fontSize to HTML Font Size
*/
vB_Text_Editor.prototype.translate_fontsize = function(csssize)
{
	switch (csssize)
	{
		case '7.5pt':
		case '10px': return 1;
		case '10pt': return 2;
		case '12pt': return 3;
		case '14pt': return 4;
		case '18pt': return 5;
		case '24pt': return 6;
		case '36pt': return 7;
		default:     return '';
	}
}

/**
* Function to translate a hex like F AB 9 to #0FAB09 and then to coloroptions['#0FAB09']
*
* @param	string	Red value
* @param	string	Green value
* @param	string	Blue value
*
* @return	string	Option from coloroptions array
*/
vB_Text_Editor.prototype.translate_silly_hex = function(r, g, b)
{
	return "#" + (PHP.str_pad(r, 2, 0) + PHP.str_pad(g, 2, 0) + PHP.str_pad(b, 2, 0));
};

vB_Text_Editor.prototype.undo = function()
{
	if (this.wysiwyg_mode)
	{
		return this.apply_format('undo', false, true);
	}
	else
	{
		this.history.add_snapshot(this.get_editor_contents());
		this.history.move_cursor(-1);
		var str;
		if ((str = this.history.get_snapshot()) !== false)
		{
			this.editdoc.value = str;
		}
	}
};

/**
* Remove Link
*/
vB_Text_Editor.prototype.unlink = function(e)
{
	if (this.wysiwyg_mode)
	{
		return this.apply_format('unlink', false, true);
	}
	else
	{
		var sel = this.get_selection();
		sel = this.strip_simple('url', sel);
		sel = this.strip_complex('url', sel);
		this.insert_text(sel);
	}
};

/**
* Verify the return value of a javascript prompt
*
* @param	string	String to be checked
*
* @return	mixed	False on fail, string on success
*/
vB_Text_Editor.prototype.verify_prompt = function(str)
{
	switch(str)
	{
		case 'http://':
		case 'null':
		case 'undefined':
		case 'false':
		case '':
		case null:
		case false:
			return false;

		default:
			return str;
	}
};

/**
* Wrap Tags
*
* @param	string	Tag to wrap
* @param	boolean	Use option?
* @param	string	(Optional) selected text
*
* @return	boolean
*/
vB_Text_Editor.prototype.wrap_tags = function(tagname, useoption, selection)
{
	tagname = tagname.toUpperCase();

	switch (tagname)
	{
		case 'CODE':
		case 'HTML':
		case 'PHP':
		{
			this.apply_format('removeformat');
		}
		break;
	}

	if (typeof selection == 'undefined')
	{
		selection = this.get_selection();
		if (selection === false)
		{
			selection = '';
		}
		else
		{
			selection = new String(selection);
		}
	}

	var opentag;
	if (useoption === true)
	{
		var option = this.show_prompt(construct_phrase(vbphrase['enter_tag_option'], ('[' + tagname + ']')), '', false);
		if (option = this.verify_prompt(option))
		{
			opentag = '[' + tagname + '="' + option + '"' + ']';
		}
		else
		{
			return false;
		}
	}
	else if (useoption !== false)
	{
		opentag = '[' + tagname + '="' + useoption + '"' + ']';
	}
	else
	{
		opentag = '[' + tagname + ']';
	}

	var closetag = '[/' + tagname + ']';
	var text = opentag + selection + closetag;

	this.insert_text(text, opentag.vBlength(), closetag.vBlength());

	return false;
};

/**
* Writes contents to the editor
*
* @param	object	<textarea>
*/
vB_Text_Editor.prototype.write_editor_contents = function(text, doinit)
{
	if (this.wysiwyg_mode)
	{
		if (text == '')
		{
			if (is_ie)
			{
				text = '<p></p>';
			}
			else if (is_moz)
			{
				text = '<br />';
			}
		}
		if (this.editdoc && this.editdoc.initialized)
		{
			this.editdoc.body.innerHTML = text;
		}
		else
		{
			var doctype = "";
			var doct = document.childNodes[0];
			if (typeof(doct.text) != "undefined" && doct.nodeType == 8) // IE
			{
				doctype = doct.text;
			}
			else if (doct.nodeType == 10)
			{
				doctype = "<!DOCTYPE " + doct.name + " PUBLIC \"" + doct.publicId + "\"" + (doct.systemId ? "\"" + doct.systemId + "\"" : "") + ">";
			}
			doctype = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">';

			// force ie7 mode for the iframe due to a bug with ie8 and imgs inserted at the end of a line
			var head = is_ie ? '<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">' : '';
			text = doctype + "<html><head>" + head + "</head><body>" + text + "</body></html>";
			this.editdoc = this.editwin.document; // See: http://msdn.microsoft.com/workshop/author/dhtml/overview/XpSp2Compat.asp#caching
			this.editdoc.open('text/html', 'replace');
			this.editdoc.write(text);
			this.editdoc.close();

			if (doinit)
			{
				if (is_moz)
				{
					this.editdoc.designMode = 'on';
				}
				else
				{
					this.editdoc.body.contentEditable = true;
				}
			}
			this.editdoc.body.spellcheck = true;

			this.editdoc.initialized = true;

			this.set_editor_style();
		}
		this.resize_ie_body();
		this.set_direction();
	}
	else
	{
		this.textobj.value = text;
	}
}

/* Dialog management */

vB_Text_Editor.prototype.show_editor_progress = function()
{
	var progress = this.progress;

	if (!progress)
	{
		progress = document.createElement('div');
		document.body.appendChild(progress);

		progress.id = this.editorid + "_progress";
		YAHOO.util.Dom.setStyle(progress, "position", "absolute");
		YAHOO.util.Dom.setStyle(progress, "z-index", 1000);
		YAHOO.util.Dom.setStyle(progress, "border", "1px solid black");
		YAHOO.util.Dom.setStyle(progress, "background-color", "white");
	}

	progress.innerHTML = '<img src="' + IMGDIR_MISC + '/lightbox_progress.gif" alt="" />';
	this.position_dialog(progress, 300, 200);
	this.progress = progress;

	this.create_dialog_overlay();

	return progress;
}

vB_Text_Editor.prototype.hide_editor_progress = function()
{
	if (this.progress)
	{
		this.progress.parentNode.removeChild(this.progress);
		this.progress = null;
	}

	if (!this.dialog && this.dialog_overlay)
	{
		this.dialog_overlay.parentNode.removeChild(this.dialog_overlay);
		this.dialog_overlay = null;
	}
}

vB_Text_Editor.prototype.create_editor_dialog = function(html, confirm_callback, bookmark)
{
	var dialog = this.dialog;

	if (!dialog)
	{
		dialog = document.createElement('form');
		document.body.appendChild(dialog);

		dialog.encoding = "multipart/form-data";
		dialog.id = this.editorid + '_dialog';
		dialog.style.position = 'absolute';
		dialog.style.zIndex = 1000;
		dialog.style.border = '1px solid black';
		dialog.style.backgroundColor = 'white';

		YAHOO.util.Event.on(dialog, "submit", this.dialog_submit_event, this, true);
	}

	dialog.innerHTML = html;

	this.position_dialog(dialog);
	this.set_dialog_events(dialog);
	this.run_scripts_in_element(dialog);
	this.move_css_in_element(dialog);

	this.dialog = dialog;
	this.create_dialog_overlay();

	this.dialog_confirm_callback = confirm_callback;

	if (typeof(bookmark) != "undefined")
	{
		this.setbookmark();
	}

	return dialog;
}

vB_Text_Editor.prototype.position_dialog = function(dialog, width, height)
{
	var editor_region = YAHOO.util.Dom.getRegion(this.editorid);
	var dialog_region = YAHOO.util.Dom.getRegion(dialog);

	if (typeof(width) != "undefined")
	{
		dialog_region.height = height;
		dialog_region.width = width;
	}

	dialog.style.top =
		Math.max(
			parseInt(editor_region.top + (editor_region.height - dialog_region.height) / 2, 10),
			editor_region.top
		) + "px";

	dialog.style.left =
		Math.max(
			parseInt(editor_region.left + (editor_region.width - dialog_region.width) / 2, 10),
			editor_region.left
		) + "px";
}

vB_Text_Editor.prototype.set_dialog_events = function(dialog)
{
	var inputs = dialog.getElementsByTagName('input');
	for (var i = 0; i < inputs.length; i++)
	{
		var submit = inputs[i];
		if (submit.type == 'submit')
		{
			YAHOO.util.Event.on(submit, 'click', this.dialog_button_click_event, this, true);
		}
	}
}

vB_Text_Editor.prototype.create_dialog_overlay = function()
{
	if (this.dialog_overlay)
	{
		return this.dialog_overlay;
	}

	var editor_region = YAHOO.util.Dom.getRegion(this.editorid);

	var overlay = document.createElement('div');
	document.body.appendChild(overlay);
	overlay.style.position = 'absolute';
	overlay.style.zIndex = 10;
	overlay.style.width = editor_region.width + "px";
	overlay.style.height = editor_region.height + "px";
	overlay.style.top = editor_region.top + "px";
	overlay.style.left = editor_region.left + "px";
	overlay.style.backgroundColor = "#000000";
	YAHOO.util.Dom.setStyle(overlay, 'opacity', .5);

	this.dialog_overlay = overlay;

	return overlay;
}

vB_Text_Editor.prototype.dialog_button_click_event = function(e)
{
	var submit = YAHOO.util.Event.getTarget(e);
	this.dialog_submitted = (submit && YAHOO.util.Dom.hasClass(submit, 'dialog_submit_button'));
}

vB_Text_Editor.prototype.dialog_submit_event = function(e)
{
	var char = e.charCode ? e.charCode : e.keyCode;
	if (typeof(char) != "undefined" && char != 0)
	{
		if (char == 13)
		{
			this.dialog_submitted = true;
		}
		else if (char == 27)
		{
			this.remove_editor_dialog();
		}
		else
		{
			return;
		}
	}

	var do_submit = this.dialog_submitted;
	this.dialog_submitted = false;

	YAHOO.util.Event.stopEvent(e);

	if (do_submit && this.dialog_confirm_callback)
	{
		this.dialog_confirm_callback.call(this, e);
	}
	else
	{
		this.remove_editor_dialog();
	}
}

vB_Text_Editor.prototype.remove_editor_dialog = function()
{
	if (this.dialog)
	{
		this.dialog.parentNode.removeChild(this.dialog);
		this.dialog = null;
	}

	if (this.dialog_overlay)
	{
		this.dialog_overlay.parentNode.removeChild(this.dialog_overlay);
		this.dialog_overlay = null;
	}

	if (this.progress)
	{
		this.progress.parentNode.removeChild(this.progress);
		this.progress = null;
	}

	this.dialog_props = {};
}

vB_Text_Editor.prototype.run_scripts_in_element = function(el)
{
	var script, i, script_tag;
	var scripts = el.getElementsByTagName('script'), head_tag = document.getElementsByTagName('head')[0];
	var length = scripts.length;

	for (i = 0; i < length; i++)
	{
		script = scripts[i];

		script_tag = document.createElement('script');
		if (script.type)
		{
			script_tag.type = script.type;
		}
		if (script.text)
		{
			script_tag.text = script.text;
		}
		if (script.src)
		{
			script_tag.src = script.src;
		}
		if (script.id)
		{
			script_tag.id = script.id;
		}
		head_tag.appendChild(script_tag);
	}

}

vB_Text_Editor.prototype.move_css_in_element = function(el)
{
	var links = el.getElementsByTagName("link");
	var head_tag = document.getElementsByTagName('head')[0];
	var length = links.length;

	for (i = 0; i < length; i++)
	{
		var link = links[i];

		link_tag = document.createElement("link");
		if (link.rel)
		{
			link_tag.rel = link.rel;
		}
		if (link.type)
		{
			link_tag.type = link.type;
		}
		if (link.href)
		{
			link_tag.href = link.href;
		}

		head_tag.appendChild(link_tag);
		link.parentNode.removeChild(link);
	}
}

vB_Text_Editor.prototype.remove_activeimg = function()
{
	if (this.activeimg)
	{
		YAHOO.util.Dom.removeClass(this.activeimg, "previewthumbactive");
		this.activeimg = null;
		var pencils = YAHOO.util.Dom.getElementsByClassName("previewthumbedit", "img", this.editdoc.body);
		var length = pencils.length;
		for (var x = 0; x < length; x++)
		{
			pencils[x].parentNode.removeChild(pencils[x]);
		}
	}
}

/**
* Resize iframe body for IE
*/
vB_Text_Editor.prototype.resize_ie_body = function()
{
	if (is_ie && this.wysiwyg_mode)
	{
		var scrollheight = this.editdoc.body.scrollHeight;
		var bodyheight = parseInt(YAHOO.util.Dom.getStyle(this.editdoc.body, "height"), 10);
		var boxheight = parseInt(YAHOO.util.Dom.getStyle(this.editbox, "height"), 10);
		if (scrollheight < boxheight)
		{
			YAHOO.util.Dom.setStyle(this.editdoc.body, "height", boxheight - 6 + "px");
		}
		else
		{
			YAHOO.util.Dom.setStyle(this.editdoc.body, "height", scrollheight - 7 + "px");
		}
		//alert(scrollheight + " " + bodyheight + " " + boxheight);
	}
};

// =============================================================================
// Editor event handler functions

/**
* Class containing editor event handlers
*/
function vB_Text_Editor_Events()
{
}

/**
* Handles a click on a smilie in the smiliebox
*/
vB_Text_Editor_Events.prototype.smilie_onclick = function(e)
{
	vB_Editor[this.editorid].insert_smilie(e,
		this.alt,
		this.src,
		this.id.substr(this.id.lastIndexOf('_') + 1)
	);

	if (typeof smilie_window != 'undefined' && !smilie_window.closed)
	{
		smilie_window.focus();
	}

	return false;
};

/**
* Handles a mouse event on a command button
*/
vB_Text_Editor_Events.prototype.command_button_onmouseevent = function(e)
{
	e = do_an_e(e);

	if (e.type == 'click' && !YAHOO.util.Dom.hasClass(this.editorid + "_cmd_" + this.cmd, "imagebutton_disabled"))
	{
		vB_Editor[this.editorid].format(e, this.cmd, false, true);
	}

	vB_Editor[this.editorid].button_context(this, e.type);
};


/**
* Handles a selection from a formatting <select> menu
*/
vB_Text_Editor_Events.prototype.formatting_select_onchange = function(e)
{
	var arg = this.options[this.selectedIndex].value;
	if (arg != '')
	{
		vB_Editor[this.editorid].format(e, this.cmd, arg);
	}
	this.selectedIndex = 0;
};

/**
* Handles a selection from the smilies <select> menu
*/
vB_Text_Editor_Events.prototype.smilieselect_onchange = function(e)
{
	if (this.options[this.selectedIndex].value != '')
	{
		vB_Editor[this.editorid].insert_smilie(e,
			this.options[this.selectedIndex].value,
			this.options[this.selectedIndex].smiliepath,
			this.options[this.selectedIndex].smilieid
		);
	}
	this.selectedIndex = 0;
};

/**
* Handles a selection from the attachment <select> menu
*/
vB_Text_Editor_Events.prototype.attachselect_onchange = function(e)
{
	var arg = this.options[this.selectedIndex].value;
	if (arg != '')
	{
		vB_Editor[this.editorid].wrap_tags('attach', false, arg);
	}
	this.selectedIndex = 0;
};

/**
* Handles a mouse over event for the attachment <select> menu
*/
vB_Text_Editor_Events.prototype.attachselect_onmouseover = function(e)
{
	if (this.options.length <= 2)
	{
		vB_Editor[this.editorid].build_attachments_popup(this);
		return true;
	}
};

/**
* Handles a mouse event on a menu option
*/
vB_Text_Editor_Events.prototype.menuoption_onmouseevent = function(e)
{
	e = do_an_e(e);
	vB_Editor[this.editorid].button_context(this, e.type, 'menu');
};

/**
* Handles a click on a formatting option in the font/size menus
*/
vB_Text_Editor_Events.prototype.formatting_option_onclick_font = function(e)
{
	vB_Editor[this.editorid].format(e, this.cmd, this.firstChild.innerHTML);
	YAHOO.vBulletin.vBPopupMenu.close_all();
};

/**
* Handles a click on a formatting option in the font/size menus
*/
vB_Text_Editor_Events.prototype.formatting_option_onclick_size = function(e)
{
	vB_Editor[this.editorid].format(e, this.cmd, this.firstChild.firstChild.innerHTML);
	YAHOO.vBulletin.vBPopupMenu.close_all();
};

/**
* Handles a click on a color option in the color menu
*/
vB_Text_Editor_Events.prototype.coloroption_onclick = function(e)
{
	fetch_object(this.editorid + '_color_bar').style.backgroundColor = this.colorname;
	vB_Editor[this.editorid].format(e, this.cmd, this.colorname);
	YAHOO.vBulletin.vBPopupMenu.close_all();
};

/**
* Handles a click on the color instant-select button
*/
vB_Text_Editor_Events.prototype.colorout_onclick = function(e)
{
	e = do_an_e(e);
	vB_Editor[this.editorid].format(e, 'forecolor', fetch_object(this.editorid + '_color_bar').style.backgroundColor);
	return false;
};

/**
* Handles a click on a smilie option in the smilie menu
*/
vB_Text_Editor_Events.prototype.smilieoption_onclick = function(e)
{
	vB_Editor[this.editorid].button_context(this, 'mouseout', 'menu');
	vB_Editor[this.editorid].insert_smilie(e, this.smilietext, fetch_tags(this, 'img')[0].src, this.smilieid);
	YAHOO.vBulletin.vBPopupMenu.close_all();
};

/**
* Handles a click on the 'More' link in the smilie menu
*/
vB_Text_Editor_Events.prototype.smiliemore_onclick = function(e)
{
	vB_Editor[this.editorid].open_smilie_window(smiliewindow_x, smiliewindow_y);
	YAHOO.vBulletin.vBPopupMenu.close_all();
};

/**
* Handles a click on the 'Manage' link in the attachments menu
*/
vB_Text_Editor_Events.prototype.attachmanage_onclick = function(e)
{
	YAHOO.vBulletin.vBPopupMenu.close_all();
	if (typeof(vB_Attachments) != "undefined")
	{
		vB_Attachments.attachmanage();
	}
};

/**
* Handles a click on an attachment option in the attachments menu
*/
vB_Text_Editor_Events.prototype.attachoption_onclick = function(e)
{
	vB_Editor[this.editorid].button_context(this, 'mouseout', 'menu');
	vB_Editor[this.editorid].wrap_tags('attach', false, this.attachmentid);
	YAHOO.vBulletin.vBPopupMenu.close_all();
};

vB_Text_Editor_Events.prototype.attachinsertall_onclick = function(e)
{
	var insert = '';
	var breakchar = (vB_Editor[this.editorid].wysiwyg_mode ? '<br /><br />' : '\r\n\r\n');

	for (var id in vB_Attachments.attachments)
	{
		if (YAHOO.lang.hasOwnProperty(vB_Attachments.attachments, id))
		{
			insert += insert != '' ? breakchar : '';
			insert += '[ATTACH]' + id + '[/ATTACH]';
		}
	}
	vB_Editor[this.editorid].insert_text(insert);
	YAHOO.vBulletin.vBPopupMenu.close_all();
}

/**
* Closes the smilie window when the main page exits
*/
vB_Text_Editor_Events.prototype.smiliewindow_onunload = function(e)
{
	if (typeof smilie_window != 'undefined' && !smilie_window.closed)
	{
		smilie_window.close();
	}
};

/**
* Sets editwin.hasfocus = true on focus
*
* this.editwin.hasFocus() does not appear to work reliably, so we have to set hasfocus manually
*/
vB_Text_Editor_Events.prototype.editwin_onfocus = function(e)
{
	this.hasfocus = true;
};

/**
* Sets editwin.hasfocus = false on blur
*
* this.editwin.hasFocus() does not appear to work reliably, so we have to set hasfocus manually
*/
vB_Text_Editor_Events.prototype.editwin_onblur = function(e)
{
	this.hasfocus = false;
};

/**
* Displays an image attachment as editable
*
*/
vB_Text_Editor_Events.prototype.editdoc_onmousemove = function(e)
{
	var targetentered = YAHOO.util.Event.getTarget(e);
	var targetleft = YAHOO.util.Event.getRelatedTarget(e);

	try
	{
		// this seems to throw an error when mousing over the scrollbars in IE due to targetentered being an object
		if (YAHOO.util.Dom.hasClass(targetentered, "previewthumbedit") || this.activeimg == targetentered)
		{
			if (YAHOO.util.Dom.hasClass(targetentered, "previewthumbedit"))
			{
				YAHOO.util.Dom.addClass(targetentered, "previewthumbedithover");
			}
			return;
		}
	}
	catch(e)
	{
		this.remove_activeimg();
		return;
	}

	this.remove_activeimg();

	if (YAHOO.util.Dom.hasClass(targetentered, "previewthumb"))
	{
		YAHOO.util.Dom.addClass(targetentered, "previewthumbactive");
		var editimg = this.editdoc.body.appendChild(this.editdoc.createElement("img"));
		YAHOO.util.Dom.addClass(editimg, "previewthumbedit");
		editimg.src = BBURL + "/" + IMGDIR_MISC + "/pencil.png";

		YAHOO.util.Dom.setStyle(editimg, 'cursor', 'pointer');
		// Prevent resize handles in IE
		editimg.unselectable = "on";
		editimg.contentEditable = "false";
		YAHOO.util.Dom.setStyle(editimg, '-moz-user-select', 'none');

		/* setXY has bug under IE rtl so we need to use other way to set (See bug #36110) */
		var xy = YAHOO.util.Dom.getXY(targetentered);
		if (is_ie && this.editdoc.dir == 'rtl')
		{
			YAHOO.util.Dom.setY(editimg, xy[1]);
			// Set editimg left style manually
			var editorwidth = this.editdoc.body.clientWidth;
			YAHOO.util.Dom.setStyle(editimg, 'left', (0 - (editorwidth - targetentered.offsetLeft - targetentered.width)) + 'px');
		}
		else
		{
			if (this.editdoc.dir == 'rtl')
			{
				xy[0] += targetentered.width - editimg.width;
			}
		YAHOO.util.Dom.setXY(editimg, xy);
		}
		this.activeimg = targetentered;
	}
}

/**
*	Fix an obscene bug with firefox? Probably not a bug but annoying nontheless
*
*/
vB_Text_Editor_Events.prototype.editdoc_ondragend = function(e)
{
	// Just go through all attachments and strip out junk
	var images = YAHOO.util.Dom.getElementsByClassName('previewthumb', 'img', this.editdoc);
	var pos = false;
	for (i = 0; i < images.length; i++)
	{
		if (pos = PHP.stripos(images[i].src, "attachment.php"))
		{
			images[i].src = images[i].src.substr(pos);
		}
	}
}

/**
* Stop the "edit" icon on an editable image from being manipulated (FF)
*
*/
vB_Text_Editor_Events.prototype.editdoc_onmousedown = function(e)
{
	var target = YAHOO.util.Event.getTarget(e);

	try
	{
		// this seems to throw an error when clicking on the scrollbar in IE8/XP
		if (YAHOO.util.Dom.hasClass(target, "previewthumbedit"))
		{
			YAHOO.util.Event.stopEvent(e);
		}
	}
	catch(e)
	{
		return;
	}
}

/**
* Edit an image
*
*/
vB_Text_Editor_Events.prototype.editdoc_onclick = function(e)
{
	this.check_focus();
	var target = YAHOO.util.Event.getTarget(e);
	if (YAHOO.util.Dom.hasClass(target, "previewthumbedit"))
	{
		this.create_editor_dialog('<img src="' + IMGDIR_MISC + '/lightbox_progress.gif" alt="" />', this.insertimagesettings_confirm);

		var match = this.activeimg.src.match(/attachmentid=(\d+)/i);
		var attachmentid = parseInt(match[1]);

		YAHOO.util.Connect.asyncRequest("POST", "ajax.php?do=fetchhtml_imagesettings", {
			success: this.insertimagesettings_ajax,
			failure: this.insertimagesettings_failure,
			timeout: vB_Default_Timeout,
			argument: [this.editorid],
			scope: this
		}, SESSIONURL
			+ "&securitytoken="
			+ SECURITYTOKEN
			+ "&ajax=1"
			+ "&do=fetchhtml_imagesettings"
			+ "&attachmentid=" + attachmentid
		);
	}
}

/**
* Sets context and hides menus on mouse clicks in the editor
*/
vB_Text_Editor_Events.prototype.editdoc_onmouseup = function(e)
{
	vB_Editor[this.editorid].set_context();
	YAHOO.vBulletin.vBPopupMenu.close_all();
	vB_Editor[this.editorid].resize_ie_body();
};

/**
* Sets context on key presses in the editor
*/
vB_Text_Editor_Events.prototype.editdoc_onkeyup = function(e)
{
	vB_Editor[this.editorid].set_context();
	vB_Editor[this.editorid].resize_ie_body();
};

/**
* Handle a keypress event in the editor window
*/
vB_Text_Editor_Events.prototype.editdoc_onkeypress = function(e)
{
	if (!e)
	{
		e = window.event;
	}

	if (e.ctrlKey && !e.altKey)
	{
		if (vB_Editor[this.editorid].allowbasicbbcode == false)
		{
			return;
		}
		var code = e.charCode ? e.charCode : e.keyCode;
		var cmd;
		switch (String.fromCharCode(code).toLowerCase())
		{
			case 'b': cmd = 'bold'; break;
			case 'i': cmd = 'italic'; break;
			case 'u': cmd = 'underline'; break;
			default: return;
		}

		e = do_an_e(e);
		vB_Editor[this.editorid].apply_format(cmd, false, null);
		return false;
	}
	else if (e.keyCode == 9)
	{
		if (e.shiftKey || (e.modifiers && (e.modifiers & 4)))
		{
			// shift-tab, let the browser handle
			return;
		}

		if (is_opera)
		{
			// can't supress tab events in Opera
			return;
		}

		// first lets try tag, then post icon, then submit, then just let it proceed the browser doing the tab
		if (fetch_object('tag_add_input') != null)
		{
			fetch_object('tag_add_input').focus();
		}
		else if (fetch_object('rb_iconid_0') != null)
		{
			fetch_object('rb_iconid_0').focus();
		}
		else if (fetch_object(this.editorid + '_save') != null)
		{
			fetch_object(this.editorid + '_save').focus();
		}
		else if (fetch_object('qr_submit') != null)
		{
			fetch_object('qr_submit').focus();
		}
		else
		{
			return;
		}
		e = do_an_e(e);
		return;
	}
};

/**
* Stop resizing of images in IE
*/
vB_Text_Editor_Events.prototype.editdoc_onresizestart = function(e)
{
	if (e.srcElement.tagName == 'IMG')
	{
		return false;
	}
};

/**
* Save editor contents to textarea so if we hit back / forward its not lost
* Only appears to work with Firefox at the moment
*/
function save_iframe_to_textarea()
{
	for (var editorid in vB_Editor)
	{
		if (!YAHOO.lang.hasOwnProperty(vB_Editor, editorid))
		{
			continue;
		}

		if (vB_Editor[editorid].wysiwyg_mode && vB_Editor[editorid].initialized)
		{
			vB_Editor[editorid].textobj.value = vB_Editor[editorid].get_editor_contents();
		}
	}
}

if (window.attachEvent)
{
	window.attachEvent('onbeforeunload', save_iframe_to_textarea);
}
else if(window.addEventListener)
{
	window.addEventListener('unload', save_iframe_to_textarea, true);
}

// #############################################################################
// Editor mode switcher system

/**
* Switch editor between standard and wysiwyg modes
*
* @param	string	EditorID (vB_Editor[x])
*/
function switch_editor_mode(editorid)
{
	if (AJAX_Compatible)
	{
		if (vB_Editor[editorid].influx == 1)
		{
			// already clicked, go away!
			return;
		}
		else
		{
			vB_Editor[editorid].influx = 1;
		}

		YAHOO.vBulletin.vBPopupMenu.close_all();

		vB_Editor[editorid].switch_editor_ajax();
	}
}

function do_switch_editor_mode(ajax)
{
	if (ajax.responseXML)
	{
		var editorid = ajax.argument[0];

		// destroyer
		var parsetype = vB_Editor[editorid].parsetype;
		var parsesmilies = vB_Editor[editorid].parsesmilies;
		var ajax_extra = vB_Editor[editorid].ajax_extra;

		vB_Editor[editorid].destroy();

		var message_node = ajax.responseXML.getElementsByTagName('message')[0];
		if (typeof message_node != 'undefined')
		{
			message_node = message_node.firstChild;
		}
		var parsed_text = (message_node ? message_node.nodeValue : '');

		var matches = parsed_text.match(/&#([0-9]+);/g);
		if (matches)
		{
			for (var i = 0; typeof matches[i] != 'undefined'; i++)
			{
				if (submatch = matches[i].match(/^&#([0-9]+);$/))
				{
					parsed_text = parsed_text.replace(submatch[0], String.fromCharCode(submatch[1]));
				}
			}
		}

		// removing this line because of IE7 focus issues - on second activation of IE7 WYWIWYG, focus is lost
		//vB_Editor[ajax.argument[0]] = null; // collect the garbage

		vB_Editor[editorid] = vB_Editor[editorid].recreate_editor(editorid, ajax.argument[1], parsetype, parsesmilies, parsed_text, ajax_extra);
		vB_Editor[editorid].check_focus();
		fetch_object(editorid + '_mode').value = ajax.argument[1];

		custom_editor_events['editor_switch'].fire(vB_Editor[editorid]);
	}
}


// #############################################################################
// Generic global editor variables

/**
* Define which buttons are context-controlled
*
* @var	array	Context controls
*/
var contextcontrols = new Array(
	'bold',
	'italic',
	'underline',
	'justifyleft',
	'justifycenter',
	'justifyright',
	'insertorderedlist',
	'insertunorderedlist'
);

// #############################################################################
// vB_History
// #############################################################################

function vB_History()
{
	this.cursor = -1;
	this.stack = new Array();
}

// =============================================================================
// vB_History methods

vB_History.prototype.move_cursor = function(increment)
{
	var test = this.cursor + increment;
	if (test >= 0 && this.stack[test] != null && typeof this.stack[test] != 'undefined')
	{
		this.cursor += increment;
	}
};

vB_History.prototype.add_snapshot = function(str)
{
	if (this.stack[this.cursor] == str)
	{
		return;
	}
	else
	{
		this.cursor++;
		this.stack[this.cursor] = str;

		if (typeof this.stack[this.cursor + 1] != 'undefined')
		{
			this.stack[this.cursor + 1] = null;
		}
	}
};

vB_History.prototype.get_snapshot = function()
{
	if (typeof this.stack[this.cursor] != 'undefined' && this.stack[this.cursor] != null)
	{
		return this.stack[this.cursor];
	}
	else
	{
		return false;
	}
};

/*======================================================================*\
|| ####################################################################
|| # Downloaded: 23:08, Tue Feb 16th 2010
|| # CVS: $RCSfile$ - $Revision: 35418 $
|| ####################################################################
\*======================================================================*/

;/************************************************************************\
 *
 * CES Vault Wiki
 * Version CES_VERSION
 *
 * CES_VAULT_COPYRIGHT
 *
\************************************************************************/

/**
* Initialize AJAX post editing
*
* @param	mixed	ID of element (or actual element) containing postbits
*/
function vB_AJAX_QuickSection_Init(postobj)
{
	if (AJAX_Compatible)
	{
		if (typeof postobj == 'string')
		{
			vB_QuickSection.qe_obj = postobj;
			postobj = fetch_object(postobj);
		}

		var anchors = fetch_tags(postobj, 'a');
		vB_QuickSection.postanchors = anchors;

		for (var i = 0; i < anchors.length; i++)
		{
			if (anchors[i].name && anchors[i].name.indexOf('vB::QuickSection::') != -1)
			{
				anchors[i].onclick = vB_AJAX_QuickSection_Events.prototype.editbutton_click;
			}
		}
	}
}

// #############################################################################
// vB_AJAX_QuickSection
// #############################################################################

/**
* Class to allow quick editing of posts within postbit via AJAX
*/
function vB_AJAX_QuickSection()
{
	this.ajax_load_url = null;
	this.postid = null;
	this.sectid = null;
	this.objid = null;
	this.messageobj = null;
	this.container = null;
	this.originalhtml = null;
	this.editstate = false;
	this.editorcounter = 0;
	this.ajax_req = null;
	this.show_advanced = true;
	this.postanchors = null;
	this.qe_obj = '';
}

// =============================================================================
// vB_AJAX_QuickSection methods

/**
* Check if the AJAX system is ready for us to proceed
*
* @return	boolean
*/
vB_AJAX_QuickSection.prototype.ready = function()
{
	if (this.editstate || YAHOO.util.Connect.isCallInProgress(this.ajax_req))
	{
		return false;
	}
	else
	{
		return true;
	}
};

/**
* Prepare to edit a single post
*
* @param	string	Name attribute of clicked link - takes the form of 'vB::QuickSection::$postid:$sectionid'
*
* @return	boolean
*/
vB_AJAX_QuickSection.prototype.edit = function(anchor_name)
{
	if (typeof vb_disable_ajax != 'undefined' && vb_disable_ajax > 0)
	{
		// couldn't initialize, return true to allow click to go through
		return true;
	}

	this.qe_obj = '';
	var q;

	for (var i in section_holders)
	{
		var holder = YAHOO.util.Dom.get(section_holders[i]);
		if (!holder)
		{
			continue;
		}

		var holden = holder.getElementsByTagName("a");
		if (!holden)
		{
			continue;
		}

		for (q = 0; q < holden.length; q++)
		{
			if (holden[q].name == anchor_name)
			{
				this.qe_obj = holder.id;
				break;
			}
		}

		if (this.qe_obj != '')
		{
			break;
		}
	}
	
	if (this.qe_obj == '')
	{
		return true;
	}

	if (
		this.qe_obj == "forum_header" ||
		typeof vB_WikiTabs != "object" ||
		typeof vB_WikiTabs[tab_container] != "object"
	)
	{
		// ajax url not set
		this.splitter = ajax_load_url[this.qe_obj].indexOf("?") != -1 ? "?" : "&";
		this.ajax_load_url = ajax_load_url[this.qe_obj].split(this.splitter);
		this.ajax_load_url[1] = this.ajax_load_url[1].replace(/\{(\d+)(:\w+)?\}/gi, '%$1$s');
	}
	else
	{
		this.splitter = vB_WikiTabs[tab_container].splitter;
		this.ajax_load_url = vB_WikiTabs[tab_container].ajax_load_url;
	}

	for (var i = 0; i < this.postanchors.length; i++)
	{
		if (this.postanchors[i].name && this.postanchors[i].name.indexOf('vB::QuickSection::') != -1)
		{
			this.postanchors[i].onclick = '';
		}
	}

	var tmppostid = anchor_name.substr(anchor_name.lastIndexOf('::') + 2);
	var tmpsectid = tmppostid;

	tmpsectid = tmpsectid.substr(tmppostid.lastIndexOf(':') + 1);
	tmppostid = tmppostid.substring(0, tmppostid.lastIndexOf(':'));

	if (YAHOO.util.Connect.isCallInProgress(this.ajax_req))
	{
		// something is waiting to complete
		return false;
	}
	else if (!this.ready())
	{
		if (this.postid == tmppostid)
		{
			this.full_edit();
			return false;
		}
		this.abort();
	}

	this.editorcounter++;
	this.editorid = 'vB_Editor_QE_' + this.editorcounter;

	this.postid = tmppostid;
	this.sectid = tmpsectid;

	this.objid = 'collapseobj_' + this.postid + '_' + this.sectid;
	this.messageobj = fetch_object(this.objid);
	this.originalhtml = this.messageobj.innerHTML;

	this.unchanged = null;
	this.unchanged_reason = null;

	this.fetch_editor();
	this.editstate = true;

	return false;
};

/**
* Send an AJAX request to fetch the editor HTML
*/
vB_AJAX_QuickSection.prototype.fetch_editor = function()
{
	document.body.style.cursor = 'wait';

	YAHOO.util.Connect.asyncRequest("POST", "ajax.php?do=quickedit&p=" + this.postid + "&section=" + this.sectid,
	{
		success: this.display_editor,
		failure: this.error_opening_editor,
		timeout: 15000,
		scope: this
	}, SESSIONURL
		+ 'do=quickedit&p=' + this.postid
		+ '&section=' + this.sectid
		+ '&securitytoken=' + PHP.urlencode(SECURITYTOKEN)
		+ '&editorid=' + PHP.urlencode(this.editorid)
		+ '&fromheader=' + (this.qe_obj == "forum_header" ? 1 : 0));
};

/**
* Handle unspecified AJAX server error when opening editor - opens full editor
*
* @param	object	YUI AJAX
*/
vB_AJAX_QuickSection.prototype.error_opening_editor = function(ajax)
{
	vBulletin_AJAX_Error_Handler(ajax);

	window.location = this.ajax_load_url[0] + this.splitter + construct_phrase(this.ajax_load_url[1], "edit") + "&section=" + this.sectid;
}

/**
* Handle unspecified AJAX server error when saving
*
* @param	object	YUI AJAX
*/
vB_AJAX_QuickSection.prototype.handle_save_error = function(ajax)
{
	vBulletin_AJAX_Error_Handler(ajax);
	
	this.show_advanced = false;
	this.full_edit();
}

/**
* Display the editor HTML when AJAX says fetch_editor() is ready
*
* @param	object	YUI AJAX
*
* @return	boolean
*/
vB_AJAX_QuickSection.prototype.display_editor = function(ajax)
{
	if (ajax.responseXML)
	{
		document.body.style.cursor = 'auto';

		var failUrl = this.ajax_load_url[0] + this.splitter + construct_phrase(this.ajax_load_url[1], "edit") + "&section=" + this.sectid;
		if (fetch_tag_count(ajax.responseXML, 'disabled'))
		{
			// this will fire if quick edit has been disabled after the showthread page is loaded
			window.location = failUrl;
		}
		else if (fetch_tag_count(ajax.responseXML, 'error'))
		{
			// do nothing
		}
		else
		{
			var editor = fetch_tags(ajax.responseXML, 'editor')[0];

			if (typeof editor == 'undefined')
			{
				window.location = failUrl;
			}

			var reason = editor.getAttribute('reason');

			// display the editor
			this.messageobj.innerHTML = editor.firstChild.nodeValue;

			// display the reason
			if (fetch_object(this.editorid + '_edit_reason'))
			{
				this.unchanged_reason = PHP.unhtmlspecialchars(reason);
				fetch_object(this.editorid + '_edit_reason').value = this.unchanged_reason;
				fetch_object(this.editorid + '_edit_reason').onkeypress = vB_AJAX_QuickSection_Events.prototype.reason_key_trap;
			}

			// initialize the editor
			vB_Editor[this.editorid] = new vB_Text_Editor(
				this.editorid,
				editor.getAttribute('mode'),
				editor.getAttribute('parsetype'),
				editor.getAttribute('parsesmilies')
			);

			if (!VAULT_40X_COMPAT)
			{
				vB_Editor[this.editorid].set_editor_width('99%', true);
			}

			var cureditor = fetch_object(this.editorid + '_editor');
			var curmsg = fetch_object(this.editorid + '_textarea');

			if (cureditor)
			{
				if (!VAULT_40X_COMPAT && !is_ie)
				{
					YAHOO.util.Dom.addClass(cureditor, "QuickSection");
				}

				YAHOO.util.Dom.setStyle(curmsg, "width", (VAULT_40X_COMPAT ? "100%" : "99%"));

				var edithead = YAHOO.util.Dom.getElementsBy(function(e)
				{
					if (e && e.name && e.name == "vB::QuickSection::" + vB_QuickSection.postid + ":" + vB_QuickSection.sectid)
					{
						return true;
					}

					return false;
				}, "a")[0];

				if (edithead)
				{
					// link.span.hX
					edithead = edithead.parentNode.parentNode;
					if (edithead.scrollIntoView)
					{
						edithead.scrollIntoView(true);
					}

					if (
						vB_Section &&
						YAHOO.util.Dom.getStyle("collapseobj_" + vB_QuickSection.postid + "_" + vB_QuickSection.sectid, "display") == "none"
					)
					{
						vB_Section.toggle(vB_QuickSection.postid, vB_QuickSection.sectid);
					}
				}
			}

			vB_Editor[this.editorid].check_focus();
			this.unchanged = vB_Editor[this.editorid].get_editor_contents();

			fetch_object(this.editorid + '_save').onclick = this.save;
			fetch_object(this.editorid + '_abort').onclick = this.abort;
			fetch_object(this.editorid + '_adv').onclick = this.full_edit;
		}
	}

	return false;
};

/**
* Destroy the editor, and use the specified text as the post contents
*
* @param	ajax	Quick edit response
* @param	string	Type of restore
*/
vB_AJAX_QuickSection.prototype.restore = function(ajax_response, type)
{
	this.hide_errors(true);
	if (this.editorid && vB_Editor[this.editorid] && vB_Editor[this.editorid].initialized)
	{
		vB_Editor[this.editorid].destroy();
	}

	if (type == 'tableobj')
	{
		// usually called when message is saved
		var failUrl = vB_QuickSection.ajax_load_url[0] + this.splitter + vB_QuickSection.ajax_load_url[1].split("&do")[0];
		if (!ajax_response)
		{
			window.location = failUrl;
		}

		var tab_id;
		var articleResponse = fetch_tags(ajax_response, "article")[0];
		var articleId = fetch_tags(ajax_response, "url")[0];

		if (!articleResponse || !articleId)
		{
			window.location = failUrl;
		}

		var tabId = articleResponse.getAttribute("tab_id");
		if (!tabId)
		{
			window.location = failUrl;
		}

		if (tabId == "forum_header")
		{
			var collapseobj = YAHOO.util.Dom.get(tabId);
		}
		else
		{
			var collapseobj = YAHOO.util.Dom.get("collapseobj_" + tabId);
		}

		if (!collapseobj)
		{
			window.location = failUrl;
		}

		var threadurl = articleId.firstChild.nodeValue.replace(/\{(\d+)(:\w+)?\}/gi, '%$1$s');
		if (!threadurl)
		{
			window.location = failUrl;
		}

		if (tabId == "forum_header")
		{
			collapseobj.parentNode.innerHTML = articleResponse.firstChild.nodeValue;
			collapseobj = YAHOO.util.Dom.get(tabId).parentNode;
		}
		else
		{
			vB_ResetHandle.parseRedirect(ajax_response, threadurl);
			collapseobj = YAHOO.util.Dom.get("collapseobj_" + tabId);
		}

		vB_ResetHandle.parseScript(collapseobj, fetch_tags(ajax_response, "popups")[0]);
	}
	else
	{
		// usually called when message edit is cancelled
		this.messageobj.innerHTML = ajax_response;
	}

	vB_QuickSection.Section_Init(fetch_object(vB_QuickSection.qe_obj));

	this.editstate = false;
};

/**
* Cancel the post edit and restore everything to how it started
*
* @param	event	Event object
*/
vB_AJAX_QuickSection.prototype.abort = function(e)
{
	document.body.style.cursor = 'auto';
	vB_QuickSection.restore(vB_QuickSection.originalhtml, 'messageobj');
};

/**
* Pass the edits along to the full editpost.php interface
*
* @param	event	Event object
*/
vB_AJAX_QuickSection.prototype.full_edit = function(e)
{
	var form = new vB_Hidden_Form(vB_QuickSection.ajax_load_url[0] + vB_QuickSection.splitter + construct_phrase(vB_QuickSection.ajax_load_url[1], "edit") + "&section=" + vB_QuickSection.sectid);

	form.add_variable('action', 'updatepost');
	form.add_variable('s', fetch_sessionhash());

	if (vB_QuickSection.show_advanced)
	{
		form.add_variable('advanced', 1);
	}
	else
	{
		// a quick edit, but not an ajax quick edit
		form.add_variable('quickeditnoajax', 1);
	}

	form.add_variable('section', vB_QuickSection.sectid);
	form.add_variable('securitytoken', SECURITYTOKEN);
	form.add_variable('wysiwyg', vB_Editor[vB_QuickSection.editorid].wysiwyg_mode);
	form.add_variable('message', vB_Editor[vB_QuickSection.editorid].get_editor_contents());
	form.add_variable('minor', (fetch_object(vB_QuickSection.editorid + '_minor').checked ? 1 : 0));
	form.add_variable('reason', fetch_object(vB_QuickSection.editorid + '_edit_reason').value);
	form.add_variable('poststarttime', fetch_object(vB_QuickSection.editorid + '_starttime').value);

	form.submit_form();
};

/**
* Save the edited post via AJAX
*
* @param	event	Event object
*/
vB_AJAX_QuickSection.prototype.save = function(e)
{
	var newtext = vB_Editor[vB_QuickSection.editorid].get_editor_contents();
	var newreason = vB_Editor[vB_QuickSection.editorid];

	if (newtext == vB_QuickSection.unchanged && newreason == vB_QuickSection.unchanged_reason)
	{
		vB_QuickSection.abort(e);
	}
	else
	{
		fetch_object(vB_QuickSection.editorid + '_posting_msg').style.display = '';
		document.body.style.cursor = 'wait';

		pc_obj = fetch_object('postcount' + vB_QuickSection.postid);

		this.ajax_req = YAHOO.util.Connect.asyncRequest("POST", vB_QuickSection.ajax_load_url[0] + vB_QuickSection.splitter + construct_phrase(vB_QuickSection.ajax_load_url[1], "edit"), {
			success: vB_QuickSection.update,
			failure: vB_QuickSection.handle_save_error,
			timeout: 15000,
			scope: vB_QuickSection
		}, construct_phrase(vB_QuickSection.ajax_load_url[1], "edit")
			+ "&action=updatepost&ajax=1"
			+ '&section=' + vB_QuickSection.sectid
			+ '&wysiwyg=' + vB_Editor[vB_QuickSection.editorid].wysiwyg_mode
			+ '&message=' + PHP.urlencode(newtext)
			+ '&securitytoken=' + PHP.urlencode(SECURITYTOKEN)
			+ '&minor=' + (fetch_object(vB_QuickSection.editorid + '_minor').checked ? 1 : 0)
			+ '&reason=' + PHP.urlencode(fetch_object(vB_QuickSection.editorid + '_edit_reason').value)
			+ '&poststarttime=' + PHP.urlencode(fetch_object(vB_QuickSection.editorid + '_starttime').value)
			+ (pc_obj != null ? '&postcount=' + PHP.urlencode(pc_obj.name) : '')
			+ '&fromheader=' + (vB_QuickSection.qe_obj == "forum_header" ? 1 : 0)
		);

		vB_QuickSection.pending = true;
	}
};

/**
* Check for errors etc. and initialize restore when AJAX says save() is complete
*
* @param	object	YUI AJAX
*
* @return	boolean	false
*/
vB_AJAX_QuickSection.prototype.update = function(ajax)
{
	if (ajax.responseXML)
	{
		vB_QuickSection.pending = false;
		document.body.style.cursor = 'auto';
		fetch_object(vB_QuickSection.editorid + '_posting_msg').style.display = 'none';

		// this is the nice error handler, of which Safari makes a mess
		if (fetch_tag_count(ajax.responseXML, 'error'))
		{
			var errors = fetch_tags(ajax.responseXML, 'error');

			var error_html = '<ol>';
			for (var i = 0; i < errors.length; i++)
			{
				error_html += '<li>' + errors[i].firstChild.nodeValue + '</li>';
			}
			error_html += '</ol>';

			vB_QuickSection.show_errors('<ol>' + error_html + '</ol>');
		}
		else
		{
			if (vB_ResetHandle)
			{
				vB_QuickSection.restore(ajax.responseXML, 'tableobj');
			}
			else
			{
				window.location = vB_QuickSection.ajax_load_url[0] + vB_QuickSection.splitter + vB_QuickSection.ajax_load_url[1].split("&do")[0];
			}
		}
	}

	return false;
};

/**
* Pop up a window showing errors
*
* @param	string	Error HTML
*/
vB_AJAX_QuickSection.prototype.show_errors = function(errortext)
{
	// add the 'unselectable' attribute to the ajax errors close button
	set_unselectable('ajax_wiki_errors_closebtn');

	fetch_object('ajax_wiki_errors_message').innerHTML = errortext;
	var errortable = fetch_object('ajax_wiki_errors');
	errortable.style.width = '400px';
	errortable.style.zIndex = 500;
	var measurer = (is_saf ? 'body' : 'documentElement');
	errortable.style.left = (is_ie ? document.documentElement.clientWidth : self.innerWidth) / 2 - 200 + document[measurer].scrollLeft + 'px';
	errortable.style.top = (is_ie ? document.documentElement.clientHeight : self.innerHeight) / 2 - 150 + document[measurer].scrollTop + 'px';
	errortable.style.display = '';
};

/**
* Hide the error window
*/
vB_AJAX_QuickSection.prototype.hide_errors = function(skip_focus_check)
{
	this.errors = false;
	fetch_object('ajax_wiki_errors').style.display = 'none';
	if (skip_focus_check != true)
	{
		vB_Editor[this.editorid].check_focus();
	}
};

// =============================================================================
// vB_AJAX_QuickSection Event Handlers

/**
* Class to handle quick editor events
*/
function vB_AJAX_QuickSection_Events()
{
}

/**
* Handles clicks on edit buttons of postbits
*/
vB_AJAX_QuickSection_Events.prototype.editbutton_click = function(e)
{
	return vB_QuickSection.edit(this.name);
};

/**
* Key trapper for reason box
*/
vB_AJAX_QuickSection_Events.prototype.reason_key_trap = function(e)
{
	e = e ? e : window.event;

	switch (e.keyCode)
	{
		case 9: // tab
		{
			fetch_object(vB_QuickSection.editorid + '_save').focus();
			return false;
		}
		break;

		case 13: // enter
		{
			vB_QuickSection.save();
			return false;
		}
		break;

		default:
		{
			return true;
		}
	}
}

/**
* This function runs all the necessary Javascript code on a PostBit
* after it has been loaded via AJAX. Don't use this method before a
* complete page load or you'll have problems.
*
* @param	object	Object containing postbits
*/
vB_AJAX_QuickSection.prototype.Section_Init = function(obj)
{
	console.log("Section Init: %d", this.postid + '-' + this.sectid);

	if (typeof vB_QuickSection != 'undefined')
	{
		// init quick edit controls
		vB_AJAX_QuickSection_Init(obj);
	}

	if (typeof vB_QuickReply != 'undefined')
	{
		// init quick reply button
		qr_init_buttons(obj);
	}

	if (typeof mq_init != 'undefined')
	{
		// init quick reply button
		mq_init(obj);
	}

	if (typeof inlineMod != 'undefined')
	{
		im_init(obj);
	}

	if (typeof vB_Lightbox != 'undefined')
	{
		init_postbit_lightbox(obj);
	}
};

// #############################################################################
// initialize the editor class

var vB_QuickSection = new vB_AJAX_QuickSection();
var section_holders = [];

/* License Box */
;/************************************************************************\
 *
 * CES Vault Wiki
 * Version CES_VERSION
 *
 * CES_VAULT_COPYRIGHT
 *
\************************************************************************/

// #############################################################################
// vB_ResetHandler
// #############################################################################
function vB_ResetHandler()
{
	// handles adding of JS and CSS
};

/**
* Process HTML after a redirect
*
* @param	ajax	response
* @param	string	article URL
*
* @return	boolean	false
*/
vB_ResetHandler.prototype.parseRedirect = function(ajax_response, thread_url)
{
	var splitter = thread_url.indexOf('?') != -1 ? '?' : '&';
	var tabResponse = fetch_tags(ajax_response, "tabs")[0];

	if (!tabResponse || !tabResponse.firstChild)
	{
		return false;
	}

	this.insertPoll(ajax_response);

	// we had an article redirect, destroy all tabs
	YAHOO.util.Dom.get(tab_container).innerHTML = tabResponse.firstChild.nodeValue;

	var articleResponse = fetch_tags(ajax_response, "article")[0];

	if (!articleResponse || !articleResponse.firstChild)
	{
		return false;
	}

	var tabId = articleResponse.getAttribute("tab_id");
	YAHOO.util.Dom.get("collapseobj_" + tabId).innerHTML = articleResponse.firstChild.nodeValue;

	// re-init tabs in case permissions or article status changed
	ajax_load_url[tab_container] = thread_url;

	if (vB_WikiTabs)
	{
		if (vB_WikiTabs[tab_container] && vB_WikiTabs[tab_container].overflow_tab)
		{
			var overflow_html = vB_WikiTabs[tab_container].overflow_tab.innerHTML;
		}
		else
		{
			var overflow_html = "&raquo;";
		}

		vB_WikiTabs[tab_container] = new vB_WikiTab(tab_container, tabId, overflow_html);
	}

	return false;
};

/**
* Dynamically parses Javascript
*
* @param	object	tab
* @param	object	popups
*
* @return	boolean	false
*/
vB_ResetHandler.prototype.parseScript = function(cobj, popups)
{
	var dropdowns = cobj.getElementsByTagName("script");

	var tabId = cobj.getAttribute("id");
	if (tabId != "forum_header")
	{
		tabId = tabId.split("collapseobj_")[1];
	}

	if (popups)
	{
		var existpop = YAHOO.util.Dom.get("popups_" + tabId);
		if (existpop)
		{
			existpop.parentNode.removeChild(existpop);
		}

		if (popups.firstChild)
		{
			var popdiv = document.createElement("div");
			popdiv.setAttribute("id", "popups_" + tabId);
			popdiv.innerHTML = popups.firstChild.nodeValue;
			document.body.appendChild(popdiv);

			// dropdowns.concat doesn't work?!
			var drop2 = popdiv.getElementsByTagName("script");
			if (drop2.length)
			{
				for (var p = 0; p < drop2.length; p++)
				{
					dropdowns[dropdowns.length] = drop2[p];
				}
			}
		}
	}

	if (dropdowns.length)
	{
		var i, dropHTML;
		for (var i = 0; i < dropdowns.length; i++)
		{
			if (dropdowns[i].getAttribute("type") != "text/javascript")
			{
				continue;
			}

			if (dropdowns[i].getAttribute("src"))
			{
				this.include(dropdowns[i].getAttribute("src"));
			}
			else if (dropdowns[i].innerHTML)
			{
				if (typeof PHP != "object")
				{
					return false;
				}

				dropHTML = PHP.trim(dropdowns[i].innerHTML);

				if (dropHTML.substring(0, 4) == "<!--")
				{
					dropHTML = dropHTML.substring(4);
				}
				
				if (window.execScript)
				{
					window.execScript(dropHTML);
				}
				else
				{
					window.eval(dropHTML);
				}
			}
		}
	}

	return false;
};

/**
* Dynamically includes a Javascript file
*
* @param	string	javascript HTTP-path
*
* @return	boolean	false
*/
vB_ResetHandler.prototype.include = function(scriptpath)
{
	var oXML = this.getXMLHttpObj();

	if (!oXML || !scriptpath)
	{
		return false;
	}

	oXML.open("GET", scriptpath, false);
	oXML.send("");

	if (window.execScript)
	{
		window.execScript(oXML.responseText);
	}
	else
	{
		window.eval(oXML.responseText);	
	}

	return false;
};

/**
* Fetch the request object for a JS include.
*
* @return	object	XMLHttpRequest || ActiveXObject
*/
vB_ResetHandler.prototype.getXMLHttpObj = function()
{
	if (typeof XMLHttpRequest != "undefined")
	{
		return new XMLHttpRequest();
	}

	var i,
		axO = [
			'Msxml2.XMLHTTP.6.0',
			'Msxml2.XMLHTTP.3.0',
			'Msxml2.XMLHTTP',
			'Microsoft.XMLHTTP'
		];

	for (i = 0; i < axO.length; i++)
	{
		try
		{
			return new ActiveXObject(axO[i]);
		}

		catch (e)
		{
		}
	}

	return null;
};

/**
* Add stylesheets for new tabs.
* IMPORTANT: Only use absolute URLs in @imports!
*
* @param	string	CSS Text
*/
vB_ResetHandler.prototype.appendCSS = function(insertStyle)
{
	if (!YAHOO.util.Dom.get("vw-custom"))
	{
		var style2 = document.createElement("style");
		style2.id = "vw-custom";
		style2.type = "text/css";

		if (style2.styleSheet && is_ie)
		{
			var importPaths;

			while (importPaths = insertStyle.match(/@import url\(\"(.*)\"\);/))
			{
				document.styleSheets[document.styleSheets.length - 1].addImport(importPaths[1]);
				insertStyle = insertStyle.replace(importPaths[0], '');
			}

			style2.styleSheet.cssText = insertStyle;
		}
		else
		{
			style2.appendChild(document.createTextNode(insertStyle));
		}

		document.getElementsByTagName("head")[0].appendChild(style2);
	}
};

/*
* Insert the HTML for a poll.
*
* @param	ajax	response
*/
vB_ResetHandler.prototype.insertPoll = function(ajax_response)
{
	var pollResponse = fetch_tags(ajax_response, "poll")[0];
	if (pollResponse)
	{
		var pollobj = YAHOO.util.Dom.get("collapseobj_ca-poll");
		if (pollobj)
		{
			pollobj.innerHTML = (pollResponse.firstChild ? pollResponse.firstChild.nodeValue : "");
		}
	}
};

// #############################################################################
// initialize the resetter

var vB_ResetHandle = new vB_ResetHandler();

/* License Box */