r97374 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r97373‎ | r97374 | r97375 >
Date:10:16, 17 September 2011
Author:ashley
Status:deferred (Comments)
Tags:
Comment:
AdManager: version 0.2:
*remove unused jquery-1.4.2.min.js file
*define new globals $wgAdManagerService and $wgAdManagerCode in the setup file
*some i18n tweaks
*removed usage of $wgDBprefix from the code, Database class can automatically add it when needed
*simplified ResourceLoader existence checks
*added __METHOD__ to all Database calls
*trimmed trailing whitespace for all files
*coding style tweaks
*removed ancient cruft (wfLoadExtensionMessages etc.)
*added read-only/block checks to special pages
Modified paths:
  • /trunk/extensions/AdManager/AdManager.hooks.php (modified) (history)
  • /trunk/extensions/AdManager/AdManager.i18n.php (modified) (history)
  • /trunk/extensions/AdManager/AdManager.php (modified) (history)
  • /trunk/extensions/AdManager/AdManager.sql (modified) (history)
  • /trunk/extensions/AdManager/AdManager.utils.php (modified) (history)
  • /trunk/extensions/AdManager/SpecialAdManager.php (modified) (history)
  • /trunk/extensions/AdManager/SpecialAdManagerZones.php (modified) (history)
  • /trunk/extensions/AdManager/jquery-1.4.2.min.js (deleted) (history)

Diff [purge]

Index: trunk/extensions/AdManager/jquery-1.4.2.min.js
@@ -1,471 +0,0 @@
2 -
3 -(function(window,undefined){var jQuery=function(selector,context){return new jQuery.fn.init(selector,context);},_jQuery=window.jQuery,_$=window.$,document=window.document,rootjQuery,quickExpr=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,isSimple=/^.[^:#\[\.,]*$/,rnotwhite=/\S/,rtrim=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,rsingleTag=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,userAgent=navigator.userAgent,browserMatch,readyBound=false,readyList=[],DOMContentLoaded,toString=Object.prototype.toString,hasOwnProperty=Object.prototype.hasOwnProperty,push=Array.prototype.push,slice=Array.prototype.slice,indexOf=Array.prototype.indexOf;jQuery.fn=jQuery.prototype={init:function(selector,context){var match,elem,ret,doc;if(!selector){return this;}
4 -if(selector.nodeType){this.context=this[0]=selector;this.length=1;return this;}
5 -if(selector==="body"&&!context){this.context=document;this[0]=document.body;this.selector="body";this.length=1;return this;}
6 -if(typeof selector==="string"){match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1]){doc=(context?context.ownerDocument||context:document);ret=rsingleTag.exec(selector);if(ret){if(jQuery.isPlainObject(context)){selector=[document.createElement(ret[1])];jQuery.fn.attr.call(selector,context,true);}else{selector=[doc.createElement(ret[1])];}}else{ret=buildFragment([match[1]],[doc]);selector=(ret.cacheable?ret.fragment.cloneNode(true):ret.fragment).childNodes;}
7 -return jQuery.merge(this,selector);}else{elem=document.getElementById(match[2]);if(elem){if(elem.id!==match[2]){return rootjQuery.find(selector);}
8 -this.length=1;this[0]=elem;}
9 -this.context=document;this.selector=selector;return this;}}else if(!context&&/^\w+$/.test(selector)){this.selector=selector;this.context=document;selector=document.getElementsByTagName(selector);return jQuery.merge(this,selector);}else if(!context||context.jquery){return(context||rootjQuery).find(selector);}else{return jQuery(context).find(selector);}}else if(jQuery.isFunction(selector)){return rootjQuery.ready(selector);}
10 -if(selector.selector!==undefined){this.selector=selector.selector;this.context=selector.context;}
11 -return jQuery.makeArray(selector,this);},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length;},toArray:function(){return slice.call(this,0);},get:function(num){return num==null?this.toArray():(num<0?this.slice(num)[0]:this[num]);},pushStack:function(elems,name,selector){var ret=jQuery();if(jQuery.isArray(elems)){push.apply(ret,elems);}else{jQuery.merge(ret,elems);}
12 -ret.prevObject=this;ret.context=this.context;if(name==="find"){ret.selector=this.selector+(this.selector?" ":"")+selector;}else if(name){ret.selector=this.selector+"."+name+"("+selector+")";}
13 -return ret;},each:function(callback,args){return jQuery.each(this,callback,args);},ready:function(fn){jQuery.bindReady();if(jQuery.isReady){fn.call(document,jQuery);}else if(readyList){readyList.push(fn);}
14 -return this;},eq:function(i){return i===-1?this.slice(i):this.slice(i,+i+1);},first:function(){return this.eq(0);},last:function(){return this.eq(-1);},slice:function(){return this.pushStack(slice.apply(this,arguments),"slice",slice.call(arguments).join(","));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},end:function(){return this.prevObject||jQuery(null);},push:push,sort:[].sort,splice:[].splice};jQuery.fn.init.prototype=jQuery.fn;jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options,name,src,copy;if(typeof target==="boolean"){deep=target;target=arguments[1]||{};i=2;}
15 -if(typeof target!=="object"&&!jQuery.isFunction(target)){target={};}
16 -if(length===i){target=this;--i;}
17 -for(;i<length;i++){if((options=arguments[i])!=null){for(name in options){src=target[name];copy=options[name];if(target===copy){continue;}
18 -if(deep&&copy&&(jQuery.isPlainObject(copy)||jQuery.isArray(copy))){var clone=src&&(jQuery.isPlainObject(src)||jQuery.isArray(src))?src:jQuery.isArray(copy)?[]:{};target[name]=jQuery.extend(deep,clone,copy);}else if(copy!==undefined){target[name]=copy;}}}}
19 -return target;};jQuery.extend({noConflict:function(deep){window.$=_$;if(deep){window.jQuery=_jQuery;}
20 -return jQuery;},isReady:false,ready:function(){if(!jQuery.isReady){if(!document.body){return setTimeout(jQuery.ready,13);}
21 -jQuery.isReady=true;if(readyList){var fn,i=0;while((fn=readyList[i++])){fn.call(document,jQuery);}
22 -readyList=null;}
23 -if(jQuery.fn.triggerHandler){jQuery(document).triggerHandler("ready");}}},bindReady:function(){if(readyBound){return;}
24 -readyBound=true;if(document.readyState==="complete"){return jQuery.ready();}
25 -if(document.addEventListener){document.addEventListener("DOMContentLoaded",DOMContentLoaded,false);window.addEventListener("load",jQuery.ready,false);}else if(document.attachEvent){document.attachEvent("onreadystatechange",DOMContentLoaded);window.attachEvent("onload",jQuery.ready);var toplevel=false;try{toplevel=window.frameElement==null;}catch(e){}
26 -if(document.documentElement.doScroll&&toplevel){doScrollCheck();}}},isFunction:function(obj){return toString.call(obj)==="[object Function]";},isArray:function(obj){return toString.call(obj)==="[object Array]";},isPlainObject:function(obj){if(!obj||toString.call(obj)!=="[object Object]"||obj.nodeType||obj.setInterval){return false;}
27 -if(obj.constructor&&!hasOwnProperty.call(obj,"constructor")&&!hasOwnProperty.call(obj.constructor.prototype,"isPrototypeOf")){return false;}
28 -var key;for(key in obj){}
29 -return key===undefined||hasOwnProperty.call(obj,key);},isEmptyObject:function(obj){for(var name in obj){return false;}
30 -return true;},error:function(msg){throw msg;},parseJSON:function(data){if(typeof data!=="string"||!data){return null;}
31 -data=jQuery.trim(data);if(/^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){return window.JSON&&window.JSON.parse?window.JSON.parse(data):(new Function("return "+data))();}else{jQuery.error("Invalid JSON: "+data);}},noop:function(){},globalEval:function(data){if(data&&rnotwhite.test(data)){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");script.type="text/javascript";if(jQuery.support.scriptEval){script.appendChild(document.createTextNode(data));}else{script.text=data;}
32 -head.insertBefore(script,head.firstChild);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()===name.toUpperCase();},each:function(object,callback,args){var name,i=0,length=object.length,isObj=length===undefined||jQuery.isFunction(object);if(args){if(isObj){for(name in object){if(callback.apply(object[name],args)===false){break;}}}else{for(;i<length;){if(callback.apply(object[i++],args)===false){break;}}}}else{if(isObj){for(name in object){if(callback.call(object[name],name,object[name])===false){break;}}}else{for(var value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}}
33 -return object;},trim:function(text){return(text||"").replace(rtrim,"");},makeArray:function(array,results){var ret=results||[];if(array!=null){if(array.length==null||typeof array==="string"||jQuery.isFunction(array)||(typeof array!=="function"&&array.setInterval)){push.call(ret,array);}else{jQuery.merge(ret,array);}}
34 -return ret;},inArray:function(elem,array){if(array.indexOf){return array.indexOf(elem);}
35 -for(var i=0,length=array.length;i<length;i++){if(array[i]===elem){return i;}}
36 -return-1;},merge:function(first,second){var i=first.length,j=0;if(typeof second.length==="number"){for(var l=second.length;j<l;j++){first[i++]=second[j];}}else{while(second[j]!==undefined){first[i++]=second[j++];}}
37 -first.length=i;return first;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++){if(!inv!==!callback(elems[i],i)){ret.push(elems[i]);}}
38 -return ret;},map:function(elems,callback,arg){var ret=[],value;for(var i=0,length=elems.length;i<length;i++){value=callback(elems[i],i,arg);if(value!=null){ret[ret.length]=value;}}
39 -return ret.concat.apply([],ret);},guid:1,proxy:function(fn,proxy,thisObject){if(arguments.length===2){if(typeof proxy==="string"){thisObject=fn;fn=thisObject[proxy];proxy=undefined;}else if(proxy&&!jQuery.isFunction(proxy)){thisObject=proxy;proxy=undefined;}}
40 -if(!proxy&&fn){proxy=function(){return fn.apply(thisObject||this,arguments);};}
41 -if(fn){proxy.guid=fn.guid=fn.guid||proxy.guid||jQuery.guid++;}
42 -return proxy;},uaMatch:function(ua){ua=ua.toLowerCase();var match=/(webkit)[ \/]([\w.]+)/.exec(ua)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(ua)||/(msie) ([\w.]+)/.exec(ua)||!/compatible/.test(ua)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(ua)||[];return{browser:match[1]||"",version:match[2]||"0"};},browser:{}});browserMatch=jQuery.uaMatch(userAgent);if(browserMatch.browser){jQuery.browser[browserMatch.browser]=true;jQuery.browser.version=browserMatch.version;}
43 -if(jQuery.browser.webkit){jQuery.browser.safari=true;}
44 -if(indexOf){jQuery.inArray=function(elem,array){return indexOf.call(array,elem);};}
45 -rootjQuery=jQuery(document);if(document.addEventListener){DOMContentLoaded=function(){document.removeEventListener("DOMContentLoaded",DOMContentLoaded,false);jQuery.ready();};}else if(document.attachEvent){DOMContentLoaded=function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",DOMContentLoaded);jQuery.ready();}};}
46 -function doScrollCheck(){if(jQuery.isReady){return;}
47 -try{document.documentElement.doScroll("left");}catch(error){setTimeout(doScrollCheck,1);return;}
48 -jQuery.ready();}
49 -function evalScript(i,elem){if(elem.src){jQuery.ajax({url:elem.src,async:false,dataType:"script"});}else{jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");}
50 -if(elem.parentNode){elem.parentNode.removeChild(elem);}}
51 -function access(elems,key,value,exec,fn,pass){var length=elems.length;if(typeof key==="object"){for(var k in key){access(elems,k,key[k],exec,fn,value);}
52 -return elems;}
53 -if(value!==undefined){exec=!pass&&exec&&jQuery.isFunction(value);for(var i=0;i<length;i++){fn(elems[i],key,exec?value.call(elems[i],i,fn(elems[i],key)):value,pass);}
54 -return elems;}
55 -return length?fn(elems[0],key):undefined;}
56 -function now(){return(new Date).getTime();}
57 -(function(){jQuery.support={};var root=document.documentElement,script=document.createElement("script"),div=document.createElement("div"),id="script"+now();div.style.display="none";div.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var all=div.getElementsByTagName("*"),a=div.getElementsByTagName("a")[0];if(!all||!all.length||!a){return;}
58 -jQuery.support={leadingWhitespace:div.firstChild.nodeType===3,tbody:!div.getElementsByTagName("tbody").length,htmlSerialize:!!div.getElementsByTagName("link").length,style:/red/.test(a.getAttribute("style")),hrefNormalized:a.getAttribute("href")==="/a",opacity:/^0.55$/.test(a.style.opacity),cssFloat:!!a.style.cssFloat,checkOn:div.getElementsByTagName("input")[0].value==="on",optSelected:document.createElement("select").appendChild(document.createElement("option")).selected,parentNode:div.removeChild(div.appendChild(document.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};script.type="text/javascript";try{script.appendChild(document.createTextNode("window."+id+"=1;"));}catch(e){}
59 -root.insertBefore(script,root.firstChild);if(window[id]){jQuery.support.scriptEval=true;delete window[id];}
60 -try{delete script.test;}catch(e){jQuery.support.deleteExpando=false;}
61 -root.removeChild(script);if(div.attachEvent&&div.fireEvent){div.attachEvent("onclick",function click(){jQuery.support.noCloneEvent=false;div.detachEvent("onclick",click);});div.cloneNode(true).fireEvent("onclick");}
62 -div=document.createElement("div");div.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";var fragment=document.createDocumentFragment();fragment.appendChild(div.firstChild);jQuery.support.checkClone=fragment.cloneNode(true).cloneNode(true).lastChild.checked;jQuery(function(){var div=document.createElement("div");div.style.width=div.style.paddingLeft="1px";document.body.appendChild(div);jQuery.boxModel=jQuery.support.boxModel=div.offsetWidth===2;document.body.removeChild(div).style.display='none';div=null;});var eventSupported=function(eventName){var el=document.createElement("div");eventName="on"+eventName;var isSupported=(eventName in el);if(!isSupported){el.setAttribute(eventName,"return;");isSupported=typeof el[eventName]==="function";}
63 -el=null;return isSupported;};jQuery.support.submitBubbles=eventSupported("submit");jQuery.support.changeBubbles=eventSupported("change");root=script=div=all=a=null;})();jQuery.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var expando="jQuery"+now(),uuid=0,windowData={};jQuery.extend({cache:{},expando:expando,noData:{"embed":true,"object":true,"applet":true},data:function(elem,name,data){if(elem.nodeName&&jQuery.noData[elem.nodeName.toLowerCase()]){return;}
64 -elem=elem==window?windowData:elem;var id=elem[expando],cache=jQuery.cache,thisCache;if(!id&&typeof name==="string"&&data===undefined){return null;}
65 -if(!id){id=++uuid;}
66 -if(typeof name==="object"){elem[expando]=id;thisCache=cache[id]=jQuery.extend(true,{},name);}else if(!cache[id]){elem[expando]=id;cache[id]={};}
67 -thisCache=cache[id];if(data!==undefined){thisCache[name]=data;}
68 -return typeof name==="string"?thisCache[name]:thisCache;},removeData:function(elem,name){if(elem.nodeName&&jQuery.noData[elem.nodeName.toLowerCase()]){return;}
69 -elem=elem==window?windowData:elem;var id=elem[expando],cache=jQuery.cache,thisCache=cache[id];if(name){if(thisCache){delete thisCache[name];if(jQuery.isEmptyObject(thisCache)){jQuery.removeData(elem);}}}else{if(jQuery.support.deleteExpando){delete elem[jQuery.expando];}else if(elem.removeAttribute){elem.removeAttribute(jQuery.expando);}
70 -delete cache[id];}}});jQuery.fn.extend({data:function(key,value){if(typeof key==="undefined"&&this.length){return jQuery.data(this[0]);}else if(typeof key==="object"){return this.each(function(){jQuery.data(this,key);});}
71 -var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length){data=jQuery.data(this[0],key);}
72 -return data===undefined&&parts[1]?this.data(parts[0]):data;}else{return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});}},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});}});jQuery.extend({queue:function(elem,type,data){if(!elem){return;}
73 -type=(type||"fx")+"queue";var q=jQuery.data(elem,type);if(!data){return q||[];}
74 -if(!q||jQuery.isArray(data)){q=jQuery.data(elem,type,jQuery.makeArray(data));}else{q.push(data);}
75 -return q;},dequeue:function(elem,type){type=type||"fx";var queue=jQuery.queue(elem,type),fn=queue.shift();if(fn==="inprogress"){fn=queue.shift();}
76 -if(fn){if(type==="fx"){queue.unshift("inprogress");}
77 -fn.call(elem,function(){jQuery.dequeue(elem,type);});}}});jQuery.fn.extend({queue:function(type,data){if(typeof type!=="string"){data=type;type="fx";}
78 -if(data===undefined){return jQuery.queue(this[0],type);}
79 -return this.each(function(i,elem){var queue=jQuery.queue(this,type,data);if(type==="fx"&&queue[0]!=="inprogress"){jQuery.dequeue(this,type);}});},dequeue:function(type){return this.each(function(){jQuery.dequeue(this,type);});},delay:function(time,type){time=jQuery.fx?jQuery.fx.speeds[time]||time:time;type=type||"fx";return this.queue(type,function(){var elem=this;setTimeout(function(){jQuery.dequeue(elem,type);},time);});},clearQueue:function(type){return this.queue(type||"fx",[]);}});var rclass=/[\n\t]/g,rspace=/\s+/,rreturn=/\r/g,rspecialurl=/href|src|style/,rtype=/(button|input)/i,rfocusable=/(button|input|object|select|textarea)/i,rclickable=/^(a|area)$/i,rradiocheck=/radio|checkbox/;jQuery.fn.extend({attr:function(name,value){return access(this,name,value,true,jQuery.attr);},removeAttr:function(name,fn){return this.each(function(){jQuery.attr(this,name,"");if(this.nodeType===1){this.removeAttribute(name);}});},addClass:function(value){if(jQuery.isFunction(value)){return this.each(function(i){var self=jQuery(this);self.addClass(value.call(this,i,self.attr("class")));});}
80 -if(value&&typeof value==="string"){var classNames=(value||"").split(rspace);for(var i=0,l=this.length;i<l;i++){var elem=this[i];if(elem.nodeType===1){if(!elem.className){elem.className=value;}else{var className=" "+elem.className+" ",setClass=elem.className;for(var c=0,cl=classNames.length;c<cl;c++){if(className.indexOf(" "+classNames[c]+" ")<0){setClass+=" "+classNames[c];}}
81 -elem.className=jQuery.trim(setClass);}}}}
82 -return this;},removeClass:function(value){if(jQuery.isFunction(value)){return this.each(function(i){var self=jQuery(this);self.removeClass(value.call(this,i,self.attr("class")));});}
83 -if((value&&typeof value==="string")||value===undefined){var classNames=(value||"").split(rspace);for(var i=0,l=this.length;i<l;i++){var elem=this[i];if(elem.nodeType===1&&elem.className){if(value){var className=(" "+elem.className+" ").replace(rclass," ");for(var c=0,cl=classNames.length;c<cl;c++){className=className.replace(" "+classNames[c]+" "," ");}
84 -elem.className=jQuery.trim(className);}else{elem.className="";}}}}
85 -return this;},toggleClass:function(value,stateVal){var type=typeof value,isBool=typeof stateVal==="boolean";if(jQuery.isFunction(value)){return this.each(function(i){var self=jQuery(this);self.toggleClass(value.call(this,i,self.attr("class"),stateVal),stateVal);});}
86 -return this.each(function(){if(type==="string"){var className,i=0,self=jQuery(this),state=stateVal,classNames=value.split(rspace);while((className=classNames[i++])){state=isBool?state:!self.hasClass(className);self[state?"addClass":"removeClass"](className);}}else if(type==="undefined"||type==="boolean"){if(this.className){jQuery.data(this,"__className__",this.className);}
87 -this.className=this.className||value===false?"":jQuery.data(this,"__className__")||"";}});},hasClass:function(selector){var className=" "+selector+" ";for(var i=0,l=this.length;i<l;i++){if((" "+this[i].className+" ").replace(rclass," ").indexOf(className)>-1){return true;}}
88 -return false;},val:function(value){if(value===undefined){var elem=this[0];if(elem){if(jQuery.nodeName(elem,"option")){return(elem.attributes.value||{}).specified?elem.value:elem.text;}
89 -if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type==="select-one";if(index<0){return null;}
90 -for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){value=jQuery(option).val();if(one){return value;}
91 -values.push(value);}}
92 -return values;}
93 -if(rradiocheck.test(elem.type)&&!jQuery.support.checkOn){return elem.getAttribute("value")===null?"on":elem.value;}
94 -return(elem.value||"").replace(rreturn,"");}
95 -return undefined;}
96 -var isFunction=jQuery.isFunction(value);return this.each(function(i){var self=jQuery(this),val=value;if(this.nodeType!==1){return;}
97 -if(isFunction){val=value.call(this,i,self.val());}
98 -if(typeof val==="number"){val+="";}
99 -if(jQuery.isArray(val)&&rradiocheck.test(this.type)){this.checked=jQuery.inArray(self.val(),val)>=0;}else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(val);jQuery("option",this).each(function(){this.selected=jQuery.inArray(jQuery(this).val(),values)>=0;});if(!values.length){this.selectedIndex=-1;}}else{this.value=val;}});}});jQuery.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(elem,name,value,pass){if(!elem||elem.nodeType===3||elem.nodeType===8){return undefined;}
100 -if(pass&&name in jQuery.attrFn){return jQuery(elem)[name](value);}
101 -var notxml=elem.nodeType!==1||!jQuery.isXMLDoc(elem),set=value!==undefined;name=notxml&&jQuery.props[name]||name;if(elem.nodeType===1){var special=rspecialurl.test(name);if(name==="selected"&&!jQuery.support.optSelected){var parent=elem.parentNode;if(parent){parent.selectedIndex;if(parent.parentNode){parent.parentNode.selectedIndex;}}}
102 -if(name in elem&&notxml&&!special){if(set){if(name==="type"&&rtype.test(elem.nodeName)&&elem.parentNode){jQuery.error("type property can't be changed");}
103 -elem[name]=value;}
104 -if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name)){return elem.getAttributeNode(name).nodeValue;}
105 -if(name==="tabIndex"){var attributeNode=elem.getAttributeNode("tabIndex");return attributeNode&&attributeNode.specified?attributeNode.value:rfocusable.test(elem.nodeName)||rclickable.test(elem.nodeName)&&elem.href?0:undefined;}
106 -return elem[name];}
107 -if(!jQuery.support.style&&notxml&&name==="style"){if(set){elem.style.cssText=""+value;}
108 -return elem.style.cssText;}
109 -if(set){elem.setAttribute(name,""+value);}
110 -var attr=!jQuery.support.hrefNormalized&&notxml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}
111 -return jQuery.style(elem,name,value);}});var rnamespaces=/\.(.*)$/,fcleanup=function(nm){return nm.replace(/[^\w\s\.\|`]/g,function(ch){return"\\"+ch;});};jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType===3||elem.nodeType===8){return;}
112 -if(elem.setInterval&&(elem!==window&&!elem.frameElement)){elem=window;}
113 -var handleObjIn,handleObj;if(handler.handler){handleObjIn=handler;handler=handleObjIn.handler;}
114 -if(!handler.guid){handler.guid=jQuery.guid++;}
115 -var elemData=jQuery.data(elem);if(!elemData){return;}
116 -var events=elemData.events=elemData.events||{},eventHandle=elemData.handle,eventHandle;if(!eventHandle){elemData.handle=eventHandle=function(){return typeof jQuery!=="undefined"&&!jQuery.event.triggered?jQuery.event.handle.apply(eventHandle.elem,arguments):undefined;};}
117 -eventHandle.elem=elem;types=types.split(" ");var type,i=0,namespaces;while((type=types[i++])){handleObj=handleObjIn?jQuery.extend({},handleObjIn):{handler:handler,data:data};if(type.indexOf(".")>-1){namespaces=type.split(".");type=namespaces.shift();handleObj.namespace=namespaces.slice(0).sort().join(".");}else{namespaces=[];handleObj.namespace="";}
118 -handleObj.type=type;handleObj.guid=handler.guid;var handlers=events[type],special=jQuery.event.special[type]||{};if(!handlers){handlers=events[type]=[];if(!special.setup||special.setup.call(elem,data,namespaces,eventHandle)===false){if(elem.addEventListener){elem.addEventListener(type,eventHandle,false);}else if(elem.attachEvent){elem.attachEvent("on"+type,eventHandle);}}}
119 -if(special.add){special.add.call(elem,handleObj);if(!handleObj.handler.guid){handleObj.handler.guid=handler.guid;}}
120 -handlers.push(handleObj);jQuery.event.global[type]=true;}
121 -elem=null;},global:{},remove:function(elem,types,handler,pos){if(elem.nodeType===3||elem.nodeType===8){return;}
122 -var ret,type,fn,i=0,all,namespaces,namespace,special,eventType,handleObj,origType,elemData=jQuery.data(elem),events=elemData&&elemData.events;if(!elemData||!events){return;}
123 -if(types&&types.type){handler=types.handler;types=types.type;}
124 -if(!types||typeof types==="string"&&types.charAt(0)==="."){types=types||"";for(type in events){jQuery.event.remove(elem,type+types);}
125 -return;}
126 -types=types.split(" ");while((type=types[i++])){origType=type;handleObj=null;all=type.indexOf(".")<0;namespaces=[];if(!all){namespaces=type.split(".");type=namespaces.shift();namespace=new RegExp("(^|\\.)"+
127 -jQuery.map(namespaces.slice(0).sort(),fcleanup).join("\\.(?:.*\\.)?")+"(\\.|$)")}
128 -eventType=events[type];if(!eventType){continue;}
129 -if(!handler){for(var j=0;j<eventType.length;j++){handleObj=eventType[j];if(all||namespace.test(handleObj.namespace)){jQuery.event.remove(elem,origType,handleObj.handler,j);eventType.splice(j--,1);}}
130 -continue;}
131 -special=jQuery.event.special[type]||{};for(var j=pos||0;j<eventType.length;j++){handleObj=eventType[j];if(handler.guid===handleObj.guid){if(all||namespace.test(handleObj.namespace)){if(pos==null){eventType.splice(j--,1);}
132 -if(special.remove){special.remove.call(elem,handleObj);}}
133 -if(pos!=null){break;}}}
134 -if(eventType.length===0||pos!=null&&eventType.length===1){if(!special.teardown||special.teardown.call(elem,namespaces)===false){removeEvent(elem,type,elemData.handle);}
135 -ret=null;delete events[type];}}
136 -if(jQuery.isEmptyObject(events)){var handle=elemData.handle;if(handle){handle.elem=null;}
137 -delete elemData.events;delete elemData.handle;if(jQuery.isEmptyObject(elemData)){jQuery.removeData(elem);}}},trigger:function(event,data,elem){var type=event.type||event,bubbling=arguments[3];if(!bubbling){event=typeof event==="object"?event[expando]?event:jQuery.extend(jQuery.Event(type),event):jQuery.Event(type);if(type.indexOf("!")>=0){event.type=type=type.slice(0,-1);event.exclusive=true;}
138 -if(!elem){event.stopPropagation();if(jQuery.event.global[type]){jQuery.each(jQuery.cache,function(){if(this.events&&this.events[type]){jQuery.event.trigger(event,data,this.handle.elem);}});}}
139 -if(!elem||elem.nodeType===3||elem.nodeType===8){return undefined;}
140 -event.result=undefined;event.target=elem;data=jQuery.makeArray(data);data.unshift(event);}
141 -event.currentTarget=elem;var handle=jQuery.data(elem,"handle");if(handle){handle.apply(elem,data);}
142 -var parent=elem.parentNode||elem.ownerDocument;try{if(!(elem&&elem.nodeName&&jQuery.noData[elem.nodeName.toLowerCase()])){if(elem["on"+type]&&elem["on"+type].apply(elem,data)===false){event.result=false;}}}catch(e){}
143 -if(!event.isPropagationStopped()&&parent){jQuery.event.trigger(event,data,parent,true);}else if(!event.isDefaultPrevented()){var target=event.target,old,isClick=jQuery.nodeName(target,"a")&&type==="click",special=jQuery.event.special[type]||{};if((!special._default||special._default.call(elem,event)===false)&&!isClick&&!(target&&target.nodeName&&jQuery.noData[target.nodeName.toLowerCase()])){try{if(target[type]){old=target["on"+type];if(old){target["on"+type]=null;}
144 -jQuery.event.triggered=true;target[type]();}}catch(e){}
145 -if(old){target["on"+type]=old;}
146 -jQuery.event.triggered=false;}}},handle:function(event){var all,handlers,namespaces,namespace,events;event=arguments[0]=jQuery.event.fix(event||window.event);event.currentTarget=this;all=event.type.indexOf(".")<0&&!event.exclusive;if(!all){namespaces=event.type.split(".");event.type=namespaces.shift();namespace=new RegExp("(^|\\.)"+namespaces.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)");}
147 -var events=jQuery.data(this,"events"),handlers=events[event.type];if(events&&handlers){handlers=handlers.slice(0);for(var j=0,l=handlers.length;j<l;j++){var handleObj=handlers[j];if(all||namespace.test(handleObj.namespace)){event.handler=handleObj.handler;event.data=handleObj.data;event.handleObj=handleObj;var ret=handleObj.handler.apply(this,arguments);if(ret!==undefined){event.result=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}
148 -if(event.isImmediatePropagationStopped()){break;}}}}
149 -return event.result;},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(event){if(event[expando]){return event;}
150 -var originalEvent=event;event=jQuery.Event(originalEvent);for(var i=this.props.length,prop;i;){prop=this.props[--i];event[prop]=originalEvent[prop];}
151 -if(!event.target){event.target=event.srcElement||document;}
152 -if(event.target.nodeType===3){event.target=event.target.parentNode;}
153 -if(!event.relatedTarget&&event.fromElement){event.relatedTarget=event.fromElement===event.target?event.toElement:event.fromElement;}
154 -if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc&&doc.clientLeft||body&&body.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc&&doc.clientTop||body&&body.clientTop||0);}
155 -if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode)){event.which=event.charCode||event.keyCode;}
156 -if(!event.metaKey&&event.ctrlKey){event.metaKey=event.ctrlKey;}
157 -if(!event.which&&event.button!==undefined){event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));}
158 -return event;},guid:1E8,proxy:jQuery.proxy,special:{ready:{setup:jQuery.bindReady,teardown:jQuery.noop},live:{add:function(handleObj){jQuery.event.add(this,handleObj.origType,jQuery.extend({},handleObj,{handler:liveHandler}));},remove:function(handleObj){var remove=true,type=handleObj.origType.replace(rnamespaces,"");jQuery.each(jQuery.data(this,"events").live||[],function(){if(type===this.origType.replace(rnamespaces,"")){remove=false;return false;}});if(remove){jQuery.event.remove(this,handleObj.origType,liveHandler);}}},beforeunload:{setup:function(data,namespaces,eventHandle){if(this.setInterval){this.onbeforeunload=eventHandle;}
159 -return false;},teardown:function(namespaces,eventHandle){if(this.onbeforeunload===eventHandle){this.onbeforeunload=null;}}}}};var removeEvent=document.removeEventListener?function(elem,type,handle){elem.removeEventListener(type,handle,false);}:function(elem,type,handle){elem.detachEvent("on"+type,handle);};jQuery.Event=function(src){if(!this.preventDefault){return new jQuery.Event(src);}
160 -if(src&&src.type){this.originalEvent=src;this.type=src.type;}else{this.type=src;}
161 -this.timeStamp=now();this[expando]=true;};function returnFalse(){return false;}
162 -function returnTrue(){return true;}
163 -jQuery.Event.prototype={preventDefault:function(){this.isDefaultPrevented=returnTrue;var e=this.originalEvent;if(!e){return;}
164 -if(e.preventDefault){e.preventDefault();}
165 -e.returnValue=false;},stopPropagation:function(){this.isPropagationStopped=returnTrue;var e=this.originalEvent;if(!e){return;}
166 -if(e.stopPropagation){e.stopPropagation();}
167 -e.cancelBubble=true;},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=returnTrue;this.stopPropagation();},isDefaultPrevented:returnFalse,isPropagationStopped:returnFalse,isImmediatePropagationStopped:returnFalse};var withinElement=function(event){var parent=event.relatedTarget;try{while(parent&&parent!==this){parent=parent.parentNode;}
168 -if(parent!==this){event.type=event.data;jQuery.event.handle.apply(this,arguments);}}catch(e){}},delegate=function(event){event.type=event.data;jQuery.event.handle.apply(this,arguments);};jQuery.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(orig,fix){jQuery.event.special[orig]={setup:function(data){jQuery.event.add(this,fix,data&&data.selector?delegate:withinElement,orig);},teardown:function(data){jQuery.event.remove(this,fix,data&&data.selector?delegate:withinElement);}};});if(!jQuery.support.submitBubbles){jQuery.event.special.submit={setup:function(data,namespaces){if(this.nodeName.toLowerCase()!=="form"){jQuery.event.add(this,"click.specialSubmit",function(e){var elem=e.target,type=elem.type;if((type==="submit"||type==="image")&&jQuery(elem).closest("form").length){return trigger("submit",this,arguments);}});jQuery.event.add(this,"keypress.specialSubmit",function(e){var elem=e.target,type=elem.type;if((type==="text"||type==="password")&&jQuery(elem).closest("form").length&&e.keyCode===13){return trigger("submit",this,arguments);}});}else{return false;}},teardown:function(namespaces){jQuery.event.remove(this,".specialSubmit");}};}
169 -if(!jQuery.support.changeBubbles){var formElems=/textarea|input|select/i,changeFilters,getVal=function(elem){var type=elem.type,val=elem.value;if(type==="radio"||type==="checkbox"){val=elem.checked;}else if(type==="select-multiple"){val=elem.selectedIndex>-1?jQuery.map(elem.options,function(elem){return elem.selected;}).join("-"):"";}else if(elem.nodeName.toLowerCase()==="select"){val=elem.selectedIndex;}
170 -return val;},testChange=function testChange(e){var elem=e.target,data,val;if(!formElems.test(elem.nodeName)||elem.readOnly){return;}
171 -data=jQuery.data(elem,"_change_data");val=getVal(elem);if(e.type!=="focusout"||elem.type!=="radio"){jQuery.data(elem,"_change_data",val);}
172 -if(data===undefined||val===data){return;}
173 -if(data!=null||val){e.type="change";return jQuery.event.trigger(e,arguments[1],elem);}};jQuery.event.special.change={filters:{focusout:testChange,click:function(e){var elem=e.target,type=elem.type;if(type==="radio"||type==="checkbox"||elem.nodeName.toLowerCase()==="select"){return testChange.call(this,e);}},keydown:function(e){var elem=e.target,type=elem.type;if((e.keyCode===13&&elem.nodeName.toLowerCase()!=="textarea")||(e.keyCode===32&&(type==="checkbox"||type==="radio"))||type==="select-multiple"){return testChange.call(this,e);}},beforeactivate:function(e){var elem=e.target;jQuery.data(elem,"_change_data",getVal(elem));}},setup:function(data,namespaces){if(this.type==="file"){return false;}
174 -for(var type in changeFilters){jQuery.event.add(this,type+".specialChange",changeFilters[type]);}
175 -return formElems.test(this.nodeName);},teardown:function(namespaces){jQuery.event.remove(this,".specialChange");return formElems.test(this.nodeName);}};changeFilters=jQuery.event.special.change.filters;}
176 -function trigger(type,elem,args){args[0].type=type;return jQuery.event.handle.apply(elem,args);}
177 -if(document.addEventListener){jQuery.each({focus:"focusin",blur:"focusout"},function(orig,fix){jQuery.event.special[fix]={setup:function(){this.addEventListener(orig,handler,true);},teardown:function(){this.removeEventListener(orig,handler,true);}};function handler(e){e=jQuery.event.fix(e);e.type=fix;return jQuery.event.handle.call(this,e);}});}
178 -jQuery.each(["bind","one"],function(i,name){jQuery.fn[name]=function(type,data,fn){if(typeof type==="object"){for(var key in type){this[name](key,data,type[key],fn);}
179 -return this;}
180 -if(jQuery.isFunction(data)){fn=data;data=undefined;}
181 -var handler=name==="one"?jQuery.proxy(fn,function(event){jQuery(this).unbind(event,handler);return fn.apply(this,arguments);}):fn;if(type==="unload"&&name!=="one"){this.one(type,data,fn);}else{for(var i=0,l=this.length;i<l;i++){jQuery.event.add(this[i],type,handler,data);}}
182 -return this;};});jQuery.fn.extend({unbind:function(type,fn){if(typeof type==="object"&&!type.preventDefault){for(var key in type){this.unbind(key,type[key]);}}else{for(var i=0,l=this.length;i<l;i++){jQuery.event.remove(this[i],type,fn);}}
183 -return this;},delegate:function(selector,types,data,fn){return this.live(types,data,fn,selector);},undelegate:function(selector,types,fn){if(arguments.length===0){return this.unbind("live");}else{return this.die(types,null,fn,selector);}},trigger:function(type,data){return this.each(function(){jQuery.event.trigger(type,data,this);});},triggerHandler:function(type,data){if(this[0]){var event=jQuery.Event(type);event.preventDefault();event.stopPropagation();jQuery.event.trigger(event,data,this[0]);return event.result;}},toggle:function(fn){var args=arguments,i=1;while(i<args.length){jQuery.proxy(fn,args[i++]);}
184 -return this.click(jQuery.proxy(fn,function(event){var lastToggle=(jQuery.data(this,"lastToggle"+fn.guid)||0)%i;jQuery.data(this,"lastToggle"+fn.guid,lastToggle+1);event.preventDefault();return args[lastToggle].apply(this,arguments)||false;}));},hover:function(fnOver,fnOut){return this.mouseenter(fnOver).mouseleave(fnOut||fnOver);}});var liveMap={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};jQuery.each(["live","die"],function(i,name){jQuery.fn[name]=function(types,data,fn,origSelector){var type,i=0,match,namespaces,preType,selector=origSelector||this.selector,context=origSelector?this:jQuery(this.context);if(jQuery.isFunction(data)){fn=data;data=undefined;}
185 -types=(types||"").split(" ");while((type=types[i++])!=null){match=rnamespaces.exec(type);namespaces="";if(match){namespaces=match[0];type=type.replace(rnamespaces,"");}
186 -if(type==="hover"){types.push("mouseenter"+namespaces,"mouseleave"+namespaces);continue;}
187 -preType=type;if(type==="focus"||type==="blur"){types.push(liveMap[type]+namespaces);type=type+namespaces;}else{type=(liveMap[type]||type)+namespaces;}
188 -if(name==="live"){context.each(function(){jQuery.event.add(this,liveConvert(type,selector),{data:data,selector:selector,handler:fn,origType:type,origHandler:fn,preType:preType});});}else{context.unbind(liveConvert(type,selector),fn);}}
189 -return this;}});function liveHandler(event){var stop,elems=[],selectors=[],args=arguments,related,match,handleObj,elem,j,i,l,data,events=jQuery.data(this,"events");if(event.liveFired===this||!events||!events.live||event.button&&event.type==="click"){return;}
190 -event.liveFired=this;var live=events.live.slice(0);for(j=0;j<live.length;j++){handleObj=live[j];if(handleObj.origType.replace(rnamespaces,"")===event.type){selectors.push(handleObj.selector);}else{live.splice(j--,1);}}
191 -match=jQuery(event.target).closest(selectors,event.currentTarget);for(i=0,l=match.length;i<l;i++){for(j=0;j<live.length;j++){handleObj=live[j];if(match[i].selector===handleObj.selector){elem=match[i].elem;related=null;if(handleObj.preType==="mouseenter"||handleObj.preType==="mouseleave"){related=jQuery(event.relatedTarget).closest(handleObj.selector)[0];}
192 -if(!related||related!==elem){elems.push({elem:elem,handleObj:handleObj});}}}}
193 -for(i=0,l=elems.length;i<l;i++){match=elems[i];event.currentTarget=match.elem;event.data=match.handleObj.data;event.handleObj=match.handleObj;if(match.handleObj.origHandler.apply(match.elem,args)===false){stop=false;break;}}
194 -return stop;}
195 -function liveConvert(type,selector){return"live."+(type&&type!=="*"?type+".":"")+selector.replace(/\./g,"`").replace(/ /g,"&");}
196 -jQuery.each(("blur focus focusin focusout load resize scroll unload click dblclick "+"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave "+"change select submit keydown keypress keyup error").split(" "),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);};if(jQuery.attrFn){jQuery.attrFn[name]=true;}});if(window.attachEvent&&!window.addEventListener){window.attachEvent("onunload",function(){for(var id in jQuery.cache){if(jQuery.cache[id].handle){try{jQuery.event.remove(jQuery.cache[id].handle.elem);}catch(e){}}}});}
197 -(function(){var chunker=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,done=0,toString=Object.prototype.toString,hasDuplicate=false,baseHasDuplicate=true;[0,0].sort(function(){baseHasDuplicate=false;return 0;});var Sizzle=function(selector,context,results,seed){results=results||[];var origContext=context=context||document;if(context.nodeType!==1&&context.nodeType!==9){return[];}
198 -if(!selector||typeof selector!=="string"){return results;}
199 -var parts=[],m,set,checkSet,extra,prune=true,contextXML=isXML(context),soFar=selector;while((chunker.exec(""),m=chunker.exec(soFar))!==null){soFar=m[3];parts.push(m[1]);if(m[2]){extra=m[3];break;}}
200 -if(parts.length>1&&origPOS.exec(selector)){if(parts.length===2&&Expr.relative[parts[0]]){set=posProcess(parts[0]+parts[1],context);}else{set=Expr.relative[parts[0]]?[context]:Sizzle(parts.shift(),context);while(parts.length){selector=parts.shift();if(Expr.relative[selector]){selector+=parts.shift();}
201 -set=posProcess(selector,set);}}}else{if(!seed&&parts.length>1&&context.nodeType===9&&!contextXML&&Expr.match.ID.test(parts[0])&&!Expr.match.ID.test(parts[parts.length-1])){var ret=Sizzle.find(parts.shift(),context,contextXML);context=ret.expr?Sizzle.filter(ret.expr,ret.set)[0]:ret.set[0];}
202 -if(context){var ret=seed?{expr:parts.pop(),set:makeArray(seed)}:Sizzle.find(parts.pop(),parts.length===1&&(parts[0]==="~"||parts[0]==="+")&&context.parentNode?context.parentNode:context,contextXML);set=ret.expr?Sizzle.filter(ret.expr,ret.set):ret.set;if(parts.length>0){checkSet=makeArray(set);}else{prune=false;}
203 -while(parts.length){var cur=parts.pop(),pop=cur;if(!Expr.relative[cur]){cur="";}else{pop=parts.pop();}
204 -if(pop==null){pop=context;}
205 -Expr.relative[cur](checkSet,pop,contextXML);}}else{checkSet=parts=[];}}
206 -if(!checkSet){checkSet=set;}
207 -if(!checkSet){Sizzle.error(cur||selector);}
208 -if(toString.call(checkSet)==="[object Array]"){if(!prune){results.push.apply(results,checkSet);}else if(context&&context.nodeType===1){for(var i=0;checkSet[i]!=null;i++){if(checkSet[i]&&(checkSet[i]===true||checkSet[i].nodeType===1&&contains(context,checkSet[i]))){results.push(set[i]);}}}else{for(var i=0;checkSet[i]!=null;i++){if(checkSet[i]&&checkSet[i].nodeType===1){results.push(set[i]);}}}}else{makeArray(checkSet,results);}
209 -if(extra){Sizzle(extra,origContext,results,seed);Sizzle.uniqueSort(results);}
210 -return results;};Sizzle.uniqueSort=function(results){if(sortOrder){hasDuplicate=baseHasDuplicate;results.sort(sortOrder);if(hasDuplicate){for(var i=1;i<results.length;i++){if(results[i]===results[i-1]){results.splice(i--,1);}}}}
211 -return results;};Sizzle.matches=function(expr,set){return Sizzle(expr,null,null,set);};Sizzle.find=function(expr,context,isXML){var set,match;if(!expr){return[];}
212 -for(var i=0,l=Expr.order.length;i<l;i++){var type=Expr.order[i],match;if((match=Expr.leftMatch[type].exec(expr))){var left=match[1];match.splice(1,1);if(left.substr(left.length-1)!=="\\"){match[1]=(match[1]||"").replace(/\\/g,"");set=Expr.find[type](match,context,isXML);if(set!=null){expr=expr.replace(Expr.match[type],"");break;}}}}
213 -if(!set){set=context.getElementsByTagName("*");}
214 -return{set:set,expr:expr};};Sizzle.filter=function(expr,set,inplace,not){var old=expr,result=[],curLoop=set,match,anyFound,isXMLFilter=set&&set[0]&&isXML(set[0]);while(expr&&set.length){for(var type in Expr.filter){if((match=Expr.leftMatch[type].exec(expr))!=null&&match[2]){var filter=Expr.filter[type],found,item,left=match[1];anyFound=false;match.splice(1,1);if(left.substr(left.length-1)==="\\"){continue;}
215 -if(curLoop===result){result=[];}
216 -if(Expr.preFilter[type]){match=Expr.preFilter[type](match,curLoop,inplace,result,not,isXMLFilter);if(!match){anyFound=found=true;}else if(match===true){continue;}}
217 -if(match){for(var i=0;(item=curLoop[i])!=null;i++){if(item){found=filter(item,match,i,curLoop);var pass=not^!!found;if(inplace&&found!=null){if(pass){anyFound=true;}else{curLoop[i]=false;}}else if(pass){result.push(item);anyFound=true;}}}}
218 -if(found!==undefined){if(!inplace){curLoop=result;}
219 -expr=expr.replace(Expr.match[type],"");if(!anyFound){return[];}
220 -break;}}}
221 -if(expr===old){if(anyFound==null){Sizzle.error(expr);}else{break;}}
222 -old=expr;}
223 -return curLoop;};Sizzle.error=function(msg){throw"Syntax error, unrecognized expression: "+msg;};var Expr=Sizzle.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(elem){return elem.getAttribute("href");}},relative:{"+":function(checkSet,part){var isPartStr=typeof part==="string",isTag=isPartStr&&!/\W/.test(part),isPartStrNotTag=isPartStr&&!isTag;if(isTag){part=part.toLowerCase();}
224 -for(var i=0,l=checkSet.length,elem;i<l;i++){if((elem=checkSet[i])){while((elem=elem.previousSibling)&&elem.nodeType!==1){}
225 -checkSet[i]=isPartStrNotTag||elem&&elem.nodeName.toLowerCase()===part?elem||false:elem===part;}}
226 -if(isPartStrNotTag){Sizzle.filter(part,checkSet,true);}},">":function(checkSet,part){var isPartStr=typeof part==="string";if(isPartStr&&!/\W/.test(part)){part=part.toLowerCase();for(var i=0,l=checkSet.length;i<l;i++){var elem=checkSet[i];if(elem){var parent=elem.parentNode;checkSet[i]=parent.nodeName.toLowerCase()===part?parent:false;}}}else{for(var i=0,l=checkSet.length;i<l;i++){var elem=checkSet[i];if(elem){checkSet[i]=isPartStr?elem.parentNode:elem.parentNode===part;}}
227 -if(isPartStr){Sizzle.filter(part,checkSet,true);}}},"":function(checkSet,part,isXML){var doneName=done++,checkFn=dirCheck;if(typeof part==="string"&&!/\W/.test(part)){var nodeCheck=part=part.toLowerCase();checkFn=dirNodeCheck;}
228 -checkFn("parentNode",part,doneName,checkSet,nodeCheck,isXML);},"~":function(checkSet,part,isXML){var doneName=done++,checkFn=dirCheck;if(typeof part==="string"&&!/\W/.test(part)){var nodeCheck=part=part.toLowerCase();checkFn=dirNodeCheck;}
229 -checkFn("previousSibling",part,doneName,checkSet,nodeCheck,isXML);}},find:{ID:function(match,context,isXML){if(typeof context.getElementById!=="undefined"&&!isXML){var m=context.getElementById(match[1]);return m?[m]:[];}},NAME:function(match,context){if(typeof context.getElementsByName!=="undefined"){var ret=[],results=context.getElementsByName(match[1]);for(var i=0,l=results.length;i<l;i++){if(results[i].getAttribute("name")===match[1]){ret.push(results[i]);}}
230 -return ret.length===0?null:ret;}},TAG:function(match,context){return context.getElementsByTagName(match[1]);}},preFilter:{CLASS:function(match,curLoop,inplace,result,not,isXML){match=" "+match[1].replace(/\\/g,"")+" ";if(isXML){return match;}
231 -for(var i=0,elem;(elem=curLoop[i])!=null;i++){if(elem){if(not^(elem.className&&(" "+elem.className+" ").replace(/[\t\n]/g," ").indexOf(match)>=0)){if(!inplace){result.push(elem);}}else if(inplace){curLoop[i]=false;}}}
232 -return false;},ID:function(match){return match[1].replace(/\\/g,"");},TAG:function(match,curLoop){return match[1].toLowerCase();},CHILD:function(match){if(match[1]==="nth"){var test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(match[2]==="even"&&"2n"||match[2]==="odd"&&"2n+1"||!/\D/.test(match[2])&&"0n+"+match[2]||match[2]);match[2]=(test[1]+(test[2]||1))-0;match[3]=test[3]-0;}
233 -match[0]=done++;return match;},ATTR:function(match,curLoop,inplace,result,not,isXML){var name=match[1].replace(/\\/g,"");if(!isXML&&Expr.attrMap[name]){match[1]=Expr.attrMap[name];}
234 -if(match[2]==="~="){match[4]=" "+match[4]+" ";}
235 -return match;},PSEUDO:function(match,curLoop,inplace,result,not){if(match[1]==="not"){if((chunker.exec(match[3])||"").length>1||/^\w/.test(match[3])){match[3]=Sizzle(match[3],null,null,curLoop);}else{var ret=Sizzle.filter(match[3],curLoop,inplace,true^not);if(!inplace){result.push.apply(result,ret);}
236 -return false;}}else if(Expr.match.POS.test(match[0])||Expr.match.CHILD.test(match[0])){return true;}
237 -return match;},POS:function(match){match.unshift(true);return match;}},filters:{enabled:function(elem){return elem.disabled===false&&elem.type!=="hidden";},disabled:function(elem){return elem.disabled===true;},checked:function(elem){return elem.checked===true;},selected:function(elem){elem.parentNode.selectedIndex;return elem.selected===true;},parent:function(elem){return!!elem.firstChild;},empty:function(elem){return!elem.firstChild;},has:function(elem,i,match){return!!Sizzle(match[3],elem).length;},header:function(elem){return/h\d/i.test(elem.nodeName);},text:function(elem){return"text"===elem.type;},radio:function(elem){return"radio"===elem.type;},checkbox:function(elem){return"checkbox"===elem.type;},file:function(elem){return"file"===elem.type;},password:function(elem){return"password"===elem.type;},submit:function(elem){return"submit"===elem.type;},image:function(elem){return"image"===elem.type;},reset:function(elem){return"reset"===elem.type;},button:function(elem){return"button"===elem.type||elem.nodeName.toLowerCase()==="button";},input:function(elem){return/input|select|textarea|button/i.test(elem.nodeName);}},setFilters:{first:function(elem,i){return i===0;},last:function(elem,i,match,array){return i===array.length-1;},even:function(elem,i){return i%2===0;},odd:function(elem,i){return i%2===1;},lt:function(elem,i,match){return i<match[3]-0;},gt:function(elem,i,match){return i>match[3]-0;},nth:function(elem,i,match){return match[3]-0===i;},eq:function(elem,i,match){return match[3]-0===i;}},filter:{PSEUDO:function(elem,match,i,array){var name=match[1],filter=Expr.filters[name];if(filter){return filter(elem,i,match,array);}else if(name==="contains"){return(elem.textContent||elem.innerText||getText([elem])||"").indexOf(match[3])>=0;}else if(name==="not"){var not=match[3];for(var i=0,l=not.length;i<l;i++){if(not[i]===elem){return false;}}
238 -return true;}else{Sizzle.error("Syntax error, unrecognized expression: "+name);}},CHILD:function(elem,match){var type=match[1],node=elem;switch(type){case'only':case'first':while((node=node.previousSibling)){if(node.nodeType===1){return false;}}
239 -if(type==="first"){return true;}
240 -node=elem;case'last':while((node=node.nextSibling)){if(node.nodeType===1){return false;}}
241 -return true;case'nth':var first=match[2],last=match[3];if(first===1&&last===0){return true;}
242 -var doneName=match[0],parent=elem.parentNode;if(parent&&(parent.sizcache!==doneName||!elem.nodeIndex)){var count=0;for(node=parent.firstChild;node;node=node.nextSibling){if(node.nodeType===1){node.nodeIndex=++count;}}
243 -parent.sizcache=doneName;}
244 -var diff=elem.nodeIndex-last;if(first===0){return diff===0;}else{return(diff%first===0&&diff/first>=0);}}},ID:function(elem,match){return elem.nodeType===1&&elem.getAttribute("id")===match;},TAG:function(elem,match){return(match==="*"&&elem.nodeType===1)||elem.nodeName.toLowerCase()===match;},CLASS:function(elem,match){return(" "+(elem.className||elem.getAttribute("class"))+" ").indexOf(match)>-1;},ATTR:function(elem,match){var name=match[1],result=Expr.attrHandle[name]?Expr.attrHandle[name](elem):elem[name]!=null?elem[name]:elem.getAttribute(name),value=result+"",type=match[2],check=match[4];return result==null?type==="!=":type==="="?value===check:type==="*="?value.indexOf(check)>=0:type==="~="?(" "+value+" ").indexOf(check)>=0:!check?value&&result!==false:type==="!="?value!==check:type==="^="?value.indexOf(check)===0:type==="$="?value.substr(value.length-check.length)===check:type==="|="?value===check||value.substr(0,check.length+1)===check+"-":false;},POS:function(elem,match,i,array){var name=match[2],filter=Expr.setFilters[name];if(filter){return filter(elem,i,match,array);}}}};var origPOS=Expr.match.POS;for(var type in Expr.match){Expr.match[type]=new RegExp(Expr.match[type].source+/(?![^\[]*\])(?![^\(]*\))/.source);Expr.leftMatch[type]=new RegExp(/(^(?:.|\r|\n)*?)/.source+Expr.match[type].source.replace(/\\(\d+)/g,function(all,num){return"\\"+(num-0+1);}));}
245 -var makeArray=function(array,results){array=Array.prototype.slice.call(array,0);if(results){results.push.apply(results,array);return results;}
246 -return array;};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType;}catch(e){makeArray=function(array,results){var ret=results||[];if(toString.call(array)==="[object Array]"){Array.prototype.push.apply(ret,array);}else{if(typeof array.length==="number"){for(var i=0,l=array.length;i<l;i++){ret.push(array[i]);}}else{for(var i=0;array[i];i++){ret.push(array[i]);}}}
247 -return ret;};}
248 -var sortOrder;if(document.documentElement.compareDocumentPosition){sortOrder=function(a,b){if(!a.compareDocumentPosition||!b.compareDocumentPosition){if(a==b){hasDuplicate=true;}
249 -return a.compareDocumentPosition?-1:1;}
250 -var ret=a.compareDocumentPosition(b)&4?-1:a===b?0:1;if(ret===0){hasDuplicate=true;}
251 -return ret;};}else if("sourceIndex"in document.documentElement){sortOrder=function(a,b){if(!a.sourceIndex||!b.sourceIndex){if(a==b){hasDuplicate=true;}
252 -return a.sourceIndex?-1:1;}
253 -var ret=a.sourceIndex-b.sourceIndex;if(ret===0){hasDuplicate=true;}
254 -return ret;};}else if(document.createRange){sortOrder=function(a,b){if(!a.ownerDocument||!b.ownerDocument){if(a==b){hasDuplicate=true;}
255 -return a.ownerDocument?-1:1;}
256 -var aRange=a.ownerDocument.createRange(),bRange=b.ownerDocument.createRange();aRange.setStart(a,0);aRange.setEnd(a,0);bRange.setStart(b,0);bRange.setEnd(b,0);var ret=aRange.compareBoundaryPoints(Range.START_TO_END,bRange);if(ret===0){hasDuplicate=true;}
257 -return ret;};}
258 -function getText(elems){var ret="",elem;for(var i=0;elems[i];i++){elem=elems[i];if(elem.nodeType===3||elem.nodeType===4){ret+=elem.nodeValue;}else if(elem.nodeType!==8){ret+=getText(elem.childNodes);}}
259 -return ret;}
260 -(function(){var form=document.createElement("div"),id="script"+(new Date).getTime();form.innerHTML="<a name='"+id+"'/>";var root=document.documentElement;root.insertBefore(form,root.firstChild);if(document.getElementById(id)){Expr.find.ID=function(match,context,isXML){if(typeof context.getElementById!=="undefined"&&!isXML){var m=context.getElementById(match[1]);return m?m.id===match[1]||typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id").nodeValue===match[1]?[m]:undefined:[];}};Expr.filter.ID=function(elem,match){var node=typeof elem.getAttributeNode!=="undefined"&&elem.getAttributeNode("id");return elem.nodeType===1&&node&&node.nodeValue===match;};}
261 -root.removeChild(form);root=form=null;})();(function(){var div=document.createElement("div");div.appendChild(document.createComment(""));if(div.getElementsByTagName("*").length>0){Expr.find.TAG=function(match,context){var results=context.getElementsByTagName(match[1]);if(match[1]==="*"){var tmp=[];for(var i=0;results[i];i++){if(results[i].nodeType===1){tmp.push(results[i]);}}
262 -results=tmp;}
263 -return results;};}
264 -div.innerHTML="<a href='#'></a>";if(div.firstChild&&typeof div.firstChild.getAttribute!=="undefined"&&div.firstChild.getAttribute("href")!=="#"){Expr.attrHandle.href=function(elem){return elem.getAttribute("href",2);};}
265 -div=null;})();if(document.querySelectorAll){(function(){var oldSizzle=Sizzle,div=document.createElement("div");div.innerHTML="<p class='TEST'></p>";if(div.querySelectorAll&&div.querySelectorAll(".TEST").length===0){return;}
266 -Sizzle=function(query,context,extra,seed){context=context||document;if(!seed&&context.nodeType===9&&!isXML(context)){try{return makeArray(context.querySelectorAll(query),extra);}catch(e){}}
267 -return oldSizzle(query,context,extra,seed);};for(var prop in oldSizzle){Sizzle[prop]=oldSizzle[prop];}
268 -div=null;})();}
269 -(function(){var div=document.createElement("div");div.innerHTML="<div class='test e'></div><div class='test'></div>";if(!div.getElementsByClassName||div.getElementsByClassName("e").length===0){return;}
270 -div.lastChild.className="e";if(div.getElementsByClassName("e").length===1){return;}
271 -Expr.order.splice(1,0,"CLASS");Expr.find.CLASS=function(match,context,isXML){if(typeof context.getElementsByClassName!=="undefined"&&!isXML){return context.getElementsByClassName(match[1]);}};div=null;})();function dirNodeCheck(dir,cur,doneName,checkSet,nodeCheck,isXML){for(var i=0,l=checkSet.length;i<l;i++){var elem=checkSet[i];if(elem){elem=elem[dir];var match=false;while(elem){if(elem.sizcache===doneName){match=checkSet[elem.sizset];break;}
272 -if(elem.nodeType===1&&!isXML){elem.sizcache=doneName;elem.sizset=i;}
273 -if(elem.nodeName.toLowerCase()===cur){match=elem;break;}
274 -elem=elem[dir];}
275 -checkSet[i]=match;}}}
276 -function dirCheck(dir,cur,doneName,checkSet,nodeCheck,isXML){for(var i=0,l=checkSet.length;i<l;i++){var elem=checkSet[i];if(elem){elem=elem[dir];var match=false;while(elem){if(elem.sizcache===doneName){match=checkSet[elem.sizset];break;}
277 -if(elem.nodeType===1){if(!isXML){elem.sizcache=doneName;elem.sizset=i;}
278 -if(typeof cur!=="string"){if(elem===cur){match=true;break;}}else if(Sizzle.filter(cur,[elem]).length>0){match=elem;break;}}
279 -elem=elem[dir];}
280 -checkSet[i]=match;}}}
281 -var contains=document.compareDocumentPosition?function(a,b){return!!(a.compareDocumentPosition(b)&16);}:function(a,b){return a!==b&&(a.contains?a.contains(b):true);};var isXML=function(elem){var documentElement=(elem?elem.ownerDocument||elem:0).documentElement;return documentElement?documentElement.nodeName!=="HTML":false;};var posProcess=function(selector,context){var tmpSet=[],later="",match,root=context.nodeType?[context]:context;while((match=Expr.match.PSEUDO.exec(selector))){later+=match[0];selector=selector.replace(Expr.match.PSEUDO,"");}
282 -selector=Expr.relative[selector]?selector+"*":selector;for(var i=0,l=root.length;i<l;i++){Sizzle(selector,root[i],tmpSet);}
283 -return Sizzle.filter(later,tmpSet);};jQuery.find=Sizzle;jQuery.expr=Sizzle.selectors;jQuery.expr[":"]=jQuery.expr.filters;jQuery.unique=Sizzle.uniqueSort;jQuery.text=getText;jQuery.isXMLDoc=isXML;jQuery.contains=contains;return;window.Sizzle=Sizzle;})();var runtil=/Until$/,rparentsprev=/^(?:parents|prevUntil|prevAll)/,rmultiselector=/,/,slice=Array.prototype.slice;var winnow=function(elements,qualifier,keep){if(jQuery.isFunction(qualifier)){return jQuery.grep(elements,function(elem,i){return!!qualifier.call(elem,i,elem)===keep;});}else if(qualifier.nodeType){return jQuery.grep(elements,function(elem,i){return(elem===qualifier)===keep;});}else if(typeof qualifier==="string"){var filtered=jQuery.grep(elements,function(elem){return elem.nodeType===1;});if(isSimple.test(qualifier)){return jQuery.filter(qualifier,filtered,!keep);}else{qualifier=jQuery.filter(qualifier,filtered);}}
284 -return jQuery.grep(elements,function(elem,i){return(jQuery.inArray(elem,qualifier)>=0)===keep;});};jQuery.fn.extend({find:function(selector){var ret=this.pushStack("","find",selector),length=0;for(var i=0,l=this.length;i<l;i++){length=ret.length;jQuery.find(selector,this[i],ret);if(i>0){for(var n=length;n<ret.length;n++){for(var r=0;r<length;r++){if(ret[r]===ret[n]){ret.splice(n--,1);break;}}}}}
285 -return ret;},has:function(target){var targets=jQuery(target);return this.filter(function(){for(var i=0,l=targets.length;i<l;i++){if(jQuery.contains(this,targets[i])){return true;}}});},not:function(selector){return this.pushStack(winnow(this,selector,false),"not",selector);},filter:function(selector){return this.pushStack(winnow(this,selector,true),"filter",selector);},is:function(selector){return!!selector&&jQuery.filter(selector,this).length>0;},closest:function(selectors,context){if(jQuery.isArray(selectors)){var ret=[],cur=this[0],match,matches={},selector;if(cur&&selectors.length){for(var i=0,l=selectors.length;i<l;i++){selector=selectors[i];if(!matches[selector]){matches[selector]=jQuery.expr.match.POS.test(selector)?jQuery(selector,context||this.context):selector;}}
286 -while(cur&&cur.ownerDocument&&cur!==context){for(selector in matches){match=matches[selector];if(match.jquery?match.index(cur)>-1:jQuery(cur).is(match)){ret.push({selector:selector,elem:cur});delete matches[selector];}}
287 -cur=cur.parentNode;}}
288 -return ret;}
289 -var pos=jQuery.expr.match.POS.test(selectors)?jQuery(selectors,context||this.context):null;return this.map(function(i,cur){while(cur&&cur.ownerDocument&&cur!==context){if(pos?pos.index(cur)>-1:jQuery(cur).is(selectors)){return cur;}
290 -cur=cur.parentNode;}
291 -return null;});},index:function(elem){if(!elem||typeof elem==="string"){return jQuery.inArray(this[0],elem?jQuery(elem):this.parent().children());}
292 -return jQuery.inArray(elem.jquery?elem[0]:elem,this);},add:function(selector,context){var set=typeof selector==="string"?jQuery(selector,context||this.context):jQuery.makeArray(selector),all=jQuery.merge(this.get(),set);return this.pushStack(isDisconnected(set[0])||isDisconnected(all[0])?all:jQuery.unique(all));},andSelf:function(){return this.add(this.prevObject);}});function isDisconnected(node){return!node||!node.parentNode||node.parentNode.nodeType===11;}
293 -jQuery.each({parent:function(elem){var parent=elem.parentNode;return parent&&parent.nodeType!==11?parent:null;},parents:function(elem){return jQuery.dir(elem,"parentNode");},parentsUntil:function(elem,i,until){return jQuery.dir(elem,"parentNode",until);},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},nextUntil:function(elem,i,until){return jQuery.dir(elem,"nextSibling",until);},prevUntil:function(elem,i,until){return jQuery.dir(elem,"previousSibling",until);},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(until,selector){var ret=jQuery.map(this,fn,until);if(!runtil.test(name)){selector=until;}
294 -if(selector&&typeof selector==="string"){ret=jQuery.filter(selector,ret);}
295 -ret=this.length>1?jQuery.unique(ret):ret;if((this.length>1||rmultiselector.test(selector))&&rparentsprev.test(name)){ret=ret.reverse();}
296 -return this.pushStack(ret,name,slice.call(arguments).join(","));};});jQuery.extend({filter:function(expr,elems,not){if(not){expr=":not("+expr+")";}
297 -return jQuery.find.matches(expr,elems);},dir:function(elem,dir,until){var matched=[],cur=elem[dir];while(cur&&cur.nodeType!==9&&(until===undefined||cur.nodeType!==1||!jQuery(cur).is(until))){if(cur.nodeType===1){matched.push(cur);}
298 -cur=cur[dir];}
299 -return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir]){if(cur.nodeType===1&&++num===result){break;}}
300 -return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType===1&&n!==elem){r.push(n);}}
301 -return r;}});var rinlinejQuery=/ jQuery\d+="(?:\d+|null)"/g,rleadingWhitespace=/^\s+/,rxhtmlTag=/(<([\w:]+)[^>]*?)\/>/g,rselfClosing=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,rtagName=/<([\w:]+)/,rtbody=/<tbody/i,rhtml=/<|&#?\w+;/,rnocache=/<script|<object|<embed|<option|<style/i,rchecked=/checked\s*(?:[^=]|=\s*.checked.)/i,fcloseTag=function(all,front,tag){return rselfClosing.test(tag)?all:front+"></"+tag+">";},wrapMap={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};wrapMap.optgroup=wrapMap.option;wrapMap.tbody=wrapMap.tfoot=wrapMap.colgroup=wrapMap.caption=wrapMap.thead;wrapMap.th=wrapMap.td;if(!jQuery.support.htmlSerialize){wrapMap._default=[1,"div<div>","</div>"];}
302 -jQuery.fn.extend({text:function(text){if(jQuery.isFunction(text)){return this.each(function(i){var self=jQuery(this);self.text(text.call(this,i,self.text()));});}
303 -if(typeof text!=="object"&&text!==undefined){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));}
304 -return jQuery.text(this);},wrapAll:function(html){if(jQuery.isFunction(html)){return this.each(function(i){jQuery(this).wrapAll(html.call(this,i));});}
305 -if(this[0]){var wrap=jQuery(html,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){wrap.insertBefore(this[0]);}
306 -wrap.map(function(){var elem=this;while(elem.firstChild&&elem.firstChild.nodeType===1){elem=elem.firstChild;}
307 -return elem;}).append(this);}
308 -return this;},wrapInner:function(html){if(jQuery.isFunction(html)){return this.each(function(i){jQuery(this).wrapInner(html.call(this,i));});}
309 -return this.each(function(){var self=jQuery(this),contents=self.contents();if(contents.length){contents.wrapAll(html);}else{self.append(html);}});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},unwrap:function(){return this.parent().each(function(){if(!jQuery.nodeName(this,"body")){jQuery(this).replaceWith(this.childNodes);}}).end();},append:function(){return this.domManip(arguments,true,function(elem){if(this.nodeType===1){this.appendChild(elem);}});},prepend:function(){return this.domManip(arguments,true,function(elem){if(this.nodeType===1){this.insertBefore(elem,this.firstChild);}});},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(elem){this.parentNode.insertBefore(elem,this);});}else if(arguments.length){var set=jQuery(arguments[0]);set.push.apply(set,this.toArray());return this.pushStack(set,"before",arguments);}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});}else if(arguments.length){var set=this.pushStack(this,"after",arguments);set.push.apply(set,jQuery(arguments[0]).toArray());return set;}},remove:function(selector,keepData){for(var i=0,elem;(elem=this[i])!=null;i++){if(!selector||jQuery.filter(selector,[elem]).length){if(!keepData&&elem.nodeType===1){jQuery.cleanData(elem.getElementsByTagName("*"));jQuery.cleanData([elem]);}
310 -if(elem.parentNode){elem.parentNode.removeChild(elem);}}}
311 -return this;},empty:function(){for(var i=0,elem;(elem=this[i])!=null;i++){if(elem.nodeType===1){jQuery.cleanData(elem.getElementsByTagName("*"));}
312 -while(elem.firstChild){elem.removeChild(elem.firstChild);}}
313 -return this;},clone:function(events){var ret=this.map(function(){if(!jQuery.support.noCloneEvent&&!jQuery.isXMLDoc(this)){var html=this.outerHTML,ownerDocument=this.ownerDocument;if(!html){var div=ownerDocument.createElement("div");div.appendChild(this.cloneNode(true));html=div.innerHTML;}
314 -return jQuery.clean([html.replace(rinlinejQuery,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(rleadingWhitespace,"")],ownerDocument)[0];}else{return this.cloneNode(true);}});if(events===true){cloneCopyEvent(this,ret);cloneCopyEvent(this.find("*"),ret.find("*"));}
315 -return ret;},html:function(value){if(value===undefined){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(rinlinejQuery,""):null;}else if(typeof value==="string"&&!rnocache.test(value)&&(jQuery.support.leadingWhitespace||!rleadingWhitespace.test(value))&&!wrapMap[(rtagName.exec(value)||["",""])[1].toLowerCase()]){value=value.replace(rxhtmlTag,fcloseTag);try{for(var i=0,l=this.length;i<l;i++){if(this[i].nodeType===1){jQuery.cleanData(this[i].getElementsByTagName("*"));this[i].innerHTML=value;}}}catch(e){this.empty().append(value);}}else if(jQuery.isFunction(value)){this.each(function(i){var self=jQuery(this),old=self.html();self.empty().append(function(){return value.call(this,i,old);});});}else{this.empty().append(value);}
316 -return this;},replaceWith:function(value){if(this[0]&&this[0].parentNode){if(jQuery.isFunction(value)){return this.each(function(i){var self=jQuery(this),old=self.html();self.replaceWith(value.call(this,i,old));});}
317 -if(typeof value!=="string"){value=jQuery(value).detach();}
318 -return this.each(function(){var next=this.nextSibling,parent=this.parentNode;jQuery(this).remove();if(next){jQuery(next).before(value);}else{jQuery(parent).append(value);}});}else{return this.pushStack(jQuery(jQuery.isFunction(value)?value():value),"replaceWith",value);}},detach:function(selector){return this.remove(selector,true);},domManip:function(args,table,callback){var results,first,value=args[0],scripts=[],fragment,parent;if(!jQuery.support.checkClone&&arguments.length===3&&typeof value==="string"&&rchecked.test(value)){return this.each(function(){jQuery(this).domManip(args,table,callback,true);});}
319 -if(jQuery.isFunction(value)){return this.each(function(i){var self=jQuery(this);args[0]=value.call(this,i,table?self.html():undefined);self.domManip(args,table,callback);});}
320 -if(this[0]){parent=value&&value.parentNode;if(jQuery.support.parentNode&&parent&&parent.nodeType===11&&parent.childNodes.length===this.length){results={fragment:parent};}else{results=buildFragment(args,this,scripts);}
321 -fragment=results.fragment;if(fragment.childNodes.length===1){first=fragment=fragment.firstChild;}else{first=fragment.firstChild;}
322 -if(first){table=table&&jQuery.nodeName(first,"tr");for(var i=0,l=this.length;i<l;i++){callback.call(table?root(this[i],first):this[i],i>0||results.cacheable||this.length>1?fragment.cloneNode(true):fragment);}}
323 -if(scripts.length){jQuery.each(scripts,evalScript);}}
324 -return this;function root(elem,cur){return jQuery.nodeName(elem,"table")?(elem.getElementsByTagName("tbody")[0]||elem.appendChild(elem.ownerDocument.createElement("tbody"))):elem;}}});function cloneCopyEvent(orig,ret){var i=0;ret.each(function(){if(this.nodeName!==(orig[i]&&orig[i].nodeName)){return;}
325 -var oldData=jQuery.data(orig[i++]),curData=jQuery.data(this,oldData),events=oldData&&oldData.events;if(events){delete curData.handle;curData.events={};for(var type in events){for(var handler in events[type]){jQuery.event.add(this,type,events[type][handler],events[type][handler].data);}}}});}
326 -function buildFragment(args,nodes,scripts){var fragment,cacheable,cacheresults,doc=(nodes&&nodes[0]?nodes[0].ownerDocument||nodes[0]:document);if(args.length===1&&typeof args[0]==="string"&&args[0].length<512&&doc===document&&!rnocache.test(args[0])&&(jQuery.support.checkClone||!rchecked.test(args[0]))){cacheable=true;cacheresults=jQuery.fragments[args[0]];if(cacheresults){if(cacheresults!==1){fragment=cacheresults;}}}
327 -if(!fragment){fragment=doc.createDocumentFragment();jQuery.clean(args,doc,fragment,scripts);}
328 -if(cacheable){jQuery.fragments[args[0]]=cacheresults?fragment:1;}
329 -return{fragment:fragment,cacheable:cacheable};}
330 -jQuery.fragments={};jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(selector){var ret=[],insert=jQuery(selector),parent=this.length===1&&this[0].parentNode;if(parent&&parent.nodeType===11&&parent.childNodes.length===1&&insert.length===1){insert[original](this[0]);return this;}else{for(var i=0,l=insert.length;i<l;i++){var elems=(i>0?this.clone(true):this).get();jQuery.fn[original].apply(jQuery(insert[i]),elems);ret=ret.concat(elems);}
331 -return this.pushStack(ret,name,insert.selector);}};});jQuery.extend({clean:function(elems,context,fragment,scripts){context=context||document;if(typeof context.createElement==="undefined"){context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;}
332 -var ret=[];for(var i=0,elem;(elem=elems[i])!=null;i++){if(typeof elem==="number"){elem+="";}
333 -if(!elem){continue;}
334 -if(typeof elem==="string"&&!rhtml.test(elem)){elem=context.createTextNode(elem);}else if(typeof elem==="string"){elem=elem.replace(rxhtmlTag,fcloseTag);var tag=(rtagName.exec(elem)||["",""])[1].toLowerCase(),wrap=wrapMap[tag]||wrapMap._default,depth=wrap[0],div=context.createElement("div");div.innerHTML=wrap[1]+elem+wrap[2];while(depth--){div=div.lastChild;}
335 -if(!jQuery.support.tbody){var hasBody=rtbody.test(elem),tbody=tag==="table"&&!hasBody?div.firstChild&&div.firstChild.childNodes:wrap[1]==="<table>"&&!hasBody?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j){if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length){tbody[j].parentNode.removeChild(tbody[j]);}}}
336 -if(!jQuery.support.leadingWhitespace&&rleadingWhitespace.test(elem)){div.insertBefore(context.createTextNode(rleadingWhitespace.exec(elem)[0]),div.firstChild);}
337 -elem=div.childNodes;}
338 -if(elem.nodeType){ret.push(elem);}else{ret=jQuery.merge(ret,elem);}}
339 -if(fragment){for(var i=0;ret[i];i++){if(scripts&&jQuery.nodeName(ret[i],"script")&&(!ret[i].type||ret[i].type.toLowerCase()==="text/javascript")){scripts.push(ret[i].parentNode?ret[i].parentNode.removeChild(ret[i]):ret[i]);}else{if(ret[i].nodeType===1){ret.splice.apply(ret,[i+1,0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))));}
340 -fragment.appendChild(ret[i]);}}}
341 -return ret;},cleanData:function(elems){var data,id,cache=jQuery.cache,special=jQuery.event.special,deleteExpando=jQuery.support.deleteExpando;for(var i=0,elem;(elem=elems[i])!=null;i++){id=elem[jQuery.expando];if(id){data=cache[id];if(data.events){for(var type in data.events){if(special[type]){jQuery.event.remove(elem,type);}else{removeEvent(elem,type,data.handle);}}}
342 -if(deleteExpando){delete elem[jQuery.expando];}else if(elem.removeAttribute){elem.removeAttribute(jQuery.expando);}
343 -delete cache[id];}}}});var rexclude=/z-?index|font-?weight|opacity|zoom|line-?height/i,ralpha=/alpha\([^)]*\)/,ropacity=/opacity=([^)]*)/,rfloat=/float/i,rdashAlpha=/-([a-z])/ig,rupper=/([A-Z])/g,rnumpx=/^-?\d+(?:px)?$/i,rnum=/^-?\d/,cssShow={position:"absolute",visibility:"hidden",display:"block"},cssWidth=["Left","Right"],cssHeight=["Top","Bottom"],getComputedStyle=document.defaultView&&document.defaultView.getComputedStyle,styleFloat=jQuery.support.cssFloat?"cssFloat":"styleFloat",fcamelCase=function(all,letter){return letter.toUpperCase();};jQuery.fn.css=function(name,value){return access(this,name,value,true,function(elem,name,value){if(value===undefined){return jQuery.curCSS(elem,name);}
344 -if(typeof value==="number"&&!rexclude.test(name)){value+="px";}
345 -jQuery.style(elem,name,value);});};jQuery.extend({style:function(elem,name,value){if(!elem||elem.nodeType===3||elem.nodeType===8){return undefined;}
346 -if((name==="width"||name==="height")&&parseFloat(value)<0){value=undefined;}
347 -var style=elem.style||elem,set=value!==undefined;if(!jQuery.support.opacity&&name==="opacity"){if(set){style.zoom=1;var opacity=parseInt(value,10)+""==="NaN"?"":"alpha(opacity="+value*100+")";var filter=style.filter||jQuery.curCSS(elem,"filter")||"";style.filter=ralpha.test(filter)?filter.replace(ralpha,opacity):opacity;}
348 -return style.filter&&style.filter.indexOf("opacity=")>=0?(parseFloat(ropacity.exec(style.filter)[1])/100)+"":"";}
349 -if(rfloat.test(name)){name=styleFloat;}
350 -name=name.replace(rdashAlpha,fcamelCase);if(set&&value!=='NaNpx'&&value!=='nullpx'){style[name]=value;}
351 -return style[name];},css:function(elem,name,force,extra){if(name==="width"||name==="height"){var val,props=cssShow,which=name==="width"?cssWidth:cssHeight;function getWH(){val=name==="width"?elem.offsetWidth:elem.offsetHeight;if(extra==="border"){return;}
352 -jQuery.each(which,function(){if(!extra){val-=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;}
353 -if(extra==="margin"){val+=parseFloat(jQuery.curCSS(elem,"margin"+this,true))||0;}else{val-=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;}});}
354 -if(elem.offsetWidth!==0){getWH();}else{jQuery.swap(elem,props,getWH);}
355 -return Math.max(0,Math.round(val));}
356 -return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style,filter;if(!jQuery.support.opacity&&name==="opacity"&&elem.currentStyle){ret=ropacity.test(elem.currentStyle.filter||"")?(parseFloat(RegExp.$1)/100)+"":"";return ret===""?"1":ret;}
357 -if(rfloat.test(name)){name=styleFloat;}
358 -if(!force&&style&&style[name]){ret=style[name];}else if(getComputedStyle){if(rfloat.test(name)){name="float";}
359 -name=name.replace(rupper,"-$1").toLowerCase();var defaultView=elem.ownerDocument.defaultView;if(!defaultView){return null;}
360 -var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle){ret=computedStyle.getPropertyValue(name);}
361 -if(name==="opacity"&&ret===""){ret="1";}}else if(elem.currentStyle){var camelCase=name.replace(rdashAlpha,fcamelCase);ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!rnumpx.test(ret)&&rnum.test(ret)){var left=style.left,rsLeft=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;style.left=camelCase==="fontSize"?"1em":(ret||0);ret=style.pixelLeft+"px";style.left=left;elem.runtimeStyle.left=rsLeft;}}
362 -return ret;},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}
363 -callback.call(elem);for(var name in options){elem.style[name]=old[name];}}});if(jQuery.expr&&jQuery.expr.filters){jQuery.expr.filters.hidden=function(elem){var width=elem.offsetWidth,height=elem.offsetHeight,skip=elem.nodeName.toLowerCase()==="tr";return width===0&&height===0&&!skip?true:width>0&&height>0&&!skip?false:jQuery.curCSS(elem,"display")==="none";};jQuery.expr.filters.visible=function(elem){return!jQuery.expr.filters.hidden(elem);};}
364 -var jsc=now(),rscript=/<script(.|\s)*?\/script>/gi,rselectTextarea=/select|textarea/i,rinput=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,jsre=/=\?(&|$)/,rquery=/\?/,rts=/(\?|&)_=.*?(&|$)/,rurl=/^(\w+:)?\/\/([^\/?#]+)/,r20=/%20/g,_load=jQuery.fn.load;jQuery.fn.extend({load:function(url,params,callback){if(typeof url!=="string"){return _load.call(this,url);}else if(!this.length){return this;}
365 -var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}
366 -var type="GET";if(params){if(jQuery.isFunction(params)){callback=params;params=null;}else if(typeof params==="object"){params=jQuery.param(params,jQuery.ajaxSettings.traditional);type="POST";}}
367 -var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status==="success"||status==="notmodified"){self.html(selector?jQuery("<div />").append(res.responseText.replace(rscript,"")).find(selector):res.responseText);}
368 -if(callback){self.each(callback,[res.responseText,status,res]);}}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return this.elements?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||rselectTextarea.test(this.nodeName)||rinput.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:jQuery.isArray(val)?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){type=type||callback;callback=data;data=null;}
369 -return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){type=type||callback;callback=data;data={};}
370 -return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:window.XMLHttpRequest&&(window.location.protocol!=="file:"||!window.ActiveXObject)?function(){return new window.XMLHttpRequest();}:function(){try{return new window.ActiveXObject("Microsoft.XMLHTTP");}catch(e){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(origSettings){var s=jQuery.extend(true,{},jQuery.ajaxSettings,origSettings);var jsonp,status,data,callbackContext=origSettings&&origSettings.context||s,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!=="string"){s.data=jQuery.param(s.data,s.traditional);}
371 -if(s.dataType==="jsonp"){if(type==="GET"){if(!jsre.test(s.url)){s.url+=(rquery.test(s.url)?"&":"?")+(s.jsonp||"callback")+"=?";}}else if(!s.data||!jsre.test(s.data)){s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";}
372 -s.dataType="json";}
373 -if(s.dataType==="json"&&(s.data&&jsre.test(s.data)||jsre.test(s.url))){jsonp=s.jsonpCallback||("jsonp"+jsc++);if(s.data){s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");}
374 -s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=window[jsonp]||function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}
375 -if(head){head.removeChild(script);}};}
376 -if(s.dataType==="script"&&s.cache===null){s.cache=false;}
377 -if(s.cache===false&&type==="GET"){var ts=now();var ret=s.url.replace(rts,"$1_="+ts+"$2");s.url=ret+((ret===s.url)?(rquery.test(s.url)?"&":"?")+"_="+ts:"");}
378 -if(s.data&&type==="GET"){s.url+=(rquery.test(s.url)?"&":"?")+s.data;}
379 -if(s.global&&!jQuery.active++){jQuery.event.trigger("ajaxStart");}
380 -var parts=rurl.exec(s.url),remote=parts&&(parts[1]&&parts[1]!==location.protocol||parts[2]!==location.host);if(s.dataType==="script"&&type==="GET"&&remote){var head=document.getElementsByTagName("head")[0]||document.documentElement;var script=document.createElement("script");script.src=s.url;if(s.scriptCharset){script.charset=s.scriptCharset;}
381 -if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){done=true;success();complete();script.onload=script.onreadystatechange=null;if(head&&script.parentNode){head.removeChild(script);}}};}
382 -head.insertBefore(script,head.firstChild);return undefined;}
383 -var requestDone=false;var xhr=s.xhr();if(!xhr){return;}
384 -if(s.username){xhr.open(type,s.url,s.async,s.username,s.password);}else{xhr.open(type,s.url,s.async);}
385 -try{if(s.data||origSettings&&origSettings.contentType){xhr.setRequestHeader("Content-Type",s.contentType);}
386 -if(s.ifModified){if(jQuery.lastModified[s.url]){xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]);}
387 -if(jQuery.etag[s.url]){xhr.setRequestHeader("If-None-Match",jQuery.etag[s.url]);}}
388 -if(!remote){xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");}
389 -xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}
390 -if(s.beforeSend&&s.beforeSend.call(callbackContext,xhr,s)===false){if(s.global&&!--jQuery.active){jQuery.event.trigger("ajaxStop");}
391 -xhr.abort();return false;}
392 -if(s.global){trigger("ajaxSend",[xhr,s]);}
393 -var onreadystatechange=xhr.onreadystatechange=function(isTimeout){if(!xhr||xhr.readyState===0||isTimeout==="abort"){if(!requestDone){complete();}
394 -requestDone=true;if(xhr){xhr.onreadystatechange=jQuery.noop;}}else if(!requestDone&&xhr&&(xhr.readyState===4||isTimeout==="timeout")){requestDone=true;xhr.onreadystatechange=jQuery.noop;status=isTimeout==="timeout"?"timeout":!jQuery.httpSuccess(xhr)?"error":s.ifModified&&jQuery.httpNotModified(xhr,s.url)?"notmodified":"success";var errMsg;if(status==="success"){try{data=jQuery.httpData(xhr,s.dataType,s);}catch(err){status="parsererror";errMsg=err;}}
395 -if(status==="success"||status==="notmodified"){if(!jsonp){success();}}else{jQuery.handleError(s,xhr,status,errMsg);}
396 -complete();if(isTimeout==="timeout"){xhr.abort();}
397 -if(s.async){xhr=null;}}};try{var oldAbort=xhr.abort;xhr.abort=function(){if(xhr){oldAbort.call(xhr);}
398 -onreadystatechange("abort");};}catch(e){}
399 -if(s.async&&s.timeout>0){setTimeout(function(){if(xhr&&!requestDone){onreadystatechange("timeout");}},s.timeout);}
400 -try{xhr.send(type==="POST"||type==="PUT"||type==="DELETE"?s.data:null);}catch(e){jQuery.handleError(s,xhr,null,e);complete();}
401 -if(!s.async){onreadystatechange();}
402 -function success(){if(s.success){s.success.call(callbackContext,data,status,xhr);}
403 -if(s.global){trigger("ajaxSuccess",[xhr,s]);}}
404 -function complete(){if(s.complete){s.complete.call(callbackContext,xhr,status);}
405 -if(s.global){trigger("ajaxComplete",[xhr,s]);}
406 -if(s.global&&!--jQuery.active){jQuery.event.trigger("ajaxStop");}}
407 -function trigger(type,args){(s.context?jQuery(s.context):jQuery.event).trigger(type,args);}
408 -return xhr;},handleError:function(s,xhr,status,e){if(s.error){s.error.call(s.context||s,xhr,status,e);}
409 -if(s.global){(s.context?jQuery(s.context):jQuery.event).trigger("ajaxError",[xhr,s,e]);}},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol==="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status===304||xhr.status===1223||xhr.status===0;}catch(e){}
410 -return false;},httpNotModified:function(xhr,url){var lastModified=xhr.getResponseHeader("Last-Modified"),etag=xhr.getResponseHeader("Etag");if(lastModified){jQuery.lastModified[url]=lastModified;}
411 -if(etag){jQuery.etag[url]=etag;}
412 -return xhr.status===304||xhr.status===0;},httpData:function(xhr,type,s){var ct=xhr.getResponseHeader("content-type")||"",xml=type==="xml"||!type&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.nodeName==="parsererror"){jQuery.error("parsererror");}
413 -if(s&&s.dataFilter){data=s.dataFilter(data,type);}
414 -if(typeof data==="string"){if(type==="json"||!type&&ct.indexOf("json")>=0){data=jQuery.parseJSON(data);}else if(type==="script"||!type&&ct.indexOf("javascript")>=0){jQuery.globalEval(data);}}
415 -return data;},param:function(a,traditional){var s=[];if(traditional===undefined){traditional=jQuery.ajaxSettings.traditional;}
416 -if(jQuery.isArray(a)||a.jquery){jQuery.each(a,function(){add(this.name,this.value);});}else{for(var prefix in a){buildParams(prefix,a[prefix]);}}
417 -return s.join("&").replace(r20,"+");function buildParams(prefix,obj){if(jQuery.isArray(obj)){jQuery.each(obj,function(i,v){if(traditional||/\[\]$/.test(prefix)){add(prefix,v);}else{buildParams(prefix+"["+(typeof v==="object"||jQuery.isArray(v)?i:"")+"]",v);}});}else if(!traditional&&obj!=null&&typeof obj==="object"){jQuery.each(obj,function(k,v){buildParams(prefix+"["+k+"]",v);});}else{add(prefix,obj);}}
418 -function add(key,value){value=jQuery.isFunction(value)?value():value;s[s.length]=encodeURIComponent(key)+"="+encodeURIComponent(value);}}});var elemdisplay={},rfxtypes=/toggle|show|hide/,rfxnum=/^([+-]=)?([\d+-.]+)(.*)$/,timerId,fxAttrs=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];jQuery.fn.extend({show:function(speed,callback){if(speed||speed===0){return this.animate(genFx("show",3),speed,callback);}else{for(var i=0,l=this.length;i<l;i++){var old=jQuery.data(this[i],"olddisplay");this[i].style.display=old||"";if(jQuery.css(this[i],"display")==="none"){var nodeName=this[i].nodeName,display;if(elemdisplay[nodeName]){display=elemdisplay[nodeName];}else{var elem=jQuery("<"+nodeName+" />").appendTo("body");display=elem.css("display");if(display==="none"){display="block";}
419 -elem.remove();elemdisplay[nodeName]=display;}
420 -jQuery.data(this[i],"olddisplay",display);}}
421 -for(var j=0,k=this.length;j<k;j++){this[j].style.display=jQuery.data(this[j],"olddisplay")||"";}
422 -return this;}},hide:function(speed,callback){if(speed||speed===0){return this.animate(genFx("hide",3),speed,callback);}else{for(var i=0,l=this.length;i<l;i++){var old=jQuery.data(this[i],"olddisplay");if(!old&&old!=="none"){jQuery.data(this[i],"olddisplay",jQuery.css(this[i],"display"));}}
423 -for(var j=0,k=this.length;j<k;j++){this[j].style.display="none";}
424 -return this;}},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){var bool=typeof fn==="boolean";if(jQuery.isFunction(fn)&&jQuery.isFunction(fn2)){this._toggle.apply(this,arguments);}else if(fn==null||bool){this.each(function(){var state=bool?fn:jQuery(this).is(":hidden");jQuery(this)[state?"show":"hide"]();});}else{this.animate(genFx("toggle",3),fn,fn2);}
425 -return this;},fadeTo:function(speed,to,callback){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);if(jQuery.isEmptyObject(prop)){return this.each(optall.complete);}
426 -return this[optall.queue===false?"each":"queue"](function(){var opt=jQuery.extend({},optall),p,hidden=this.nodeType===1&&jQuery(this).is(":hidden"),self=this;for(p in prop){var name=p.replace(rdashAlpha,fcamelCase);if(p!==name){prop[name]=prop[p];delete prop[p];p=name;}
427 -if(prop[p]==="hide"&&hidden||prop[p]==="show"&&!hidden){return opt.complete.call(this);}
428 -if((p==="height"||p==="width")&&this.style){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}
429 -if(jQuery.isArray(prop[p])){(opt.specialEasing=opt.specialEasing||{})[p]=prop[p][1];prop[p]=prop[p][0];}}
430 -if(opt.overflow!=null){this.style.overflow="hidden";}
431 -opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(rfxtypes.test(val)){e[val==="toggle"?hidden?"show":"hide":val](prop);}else{var parts=rfxnum.exec(val),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!=="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}
432 -if(parts[1]){end=((parts[1]==="-="?-1:1)*end)+start;}
433 -e.custom(start,end,unit);}else{e.custom(start,val,"");}}});return true;});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue){this.queue([]);}
434 -this.each(function(){for(var i=timers.length-1;i>=0;i--){if(timers[i].elem===this){if(gotoEnd){timers[i](true);}
435 -timers.splice(i,1);}}});if(!gotoEnd){this.dequeue();}
436 -return this;}});jQuery.each({slideDown:genFx("show",1),slideUp:genFx("hide",1),slideToggle:genFx("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(name,props){jQuery.fn[name]=function(speed,callback){return this.animate(props,speed,callback);};});jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&typeof speed==="object"?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&!jQuery.isFunction(easing)&&easing};opt.duration=jQuery.fx.off?0:typeof opt.duration==="number"?opt.duration:jQuery.fx.speeds[opt.duration]||jQuery.fx.speeds._default;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false){jQuery(this).dequeue();}
437 -if(jQuery.isFunction(opt.old)){opt.old.call(this);}};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig){options.orig={};}}});jQuery.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this);}
438 -(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style){this.elem.style.display="block";}},cur:function(force){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop];}
439 -var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;var self=this;function t(gotoEnd){return self.step(gotoEnd);}
440 -t.elem=this.elem;if(t()&&jQuery.timers.push(t)&&!timerId){timerId=setInterval(jQuery.fx.tick,13);}},show:function(){this.options.orig[this.prop]=jQuery.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=now(),done=true;if(gotoEnd||t>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var i in this.options.curAnim){if(this.options.curAnim[i]!==true){done=false;}}
441 -if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;var old=jQuery.data(this.elem,"olddisplay");this.elem.style.display=old?old:this.options.display;if(jQuery.css(this.elem,"display")==="none"){this.elem.style.display="block";}}
442 -if(this.options.hide){jQuery(this.elem).hide();}
443 -if(this.options.hide||this.options.show){for(var p in this.options.curAnim){jQuery.style(this.elem,p,this.options.orig[p]);}}
444 -this.options.complete.call(this.elem);}
445 -return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;var specialEasing=this.options.specialEasing&&this.options.specialEasing[this.prop];var defaultEasing=this.options.easing||(jQuery.easing.swing?"swing":"linear");this.pos=jQuery.easing[specialEasing||defaultEasing](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}
446 -return true;}};jQuery.extend(jQuery.fx,{tick:function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++){if(!timers[i]()){timers.splice(i--,1);}}
447 -if(!timers.length){jQuery.fx.stop();}},stop:function(){clearInterval(timerId);timerId=null;},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(fx){jQuery.style(fx.elem,"opacity",fx.now);},_default:function(fx){if(fx.elem.style&&fx.elem.style[fx.prop]!=null){fx.elem.style[fx.prop]=(fx.prop==="width"||fx.prop==="height"?Math.max(0,fx.now):fx.now)+fx.unit;}else{fx.elem[fx.prop]=fx.now;}}}});if(jQuery.expr&&jQuery.expr.filters){jQuery.expr.filters.animated=function(elem){return jQuery.grep(jQuery.timers,function(fn){return elem===fn.elem;}).length;};}
448 -function genFx(type,num){var obj={};jQuery.each(fxAttrs.concat.apply([],fxAttrs.slice(0,num)),function(){obj[this]=type;});return obj;}
449 -if("getBoundingClientRect"in document.documentElement){jQuery.fn.offset=function(options){var elem=this[0];if(options){return this.each(function(i){jQuery.offset.setOffset(this,options,i);});}
450 -if(!elem||!elem.ownerDocument){return null;}
451 -if(elem===elem.ownerDocument.body){return jQuery.offset.bodyOffset(elem);}
452 -var box=elem.getBoundingClientRect(),doc=elem.ownerDocument,body=doc.body,docElem=doc.documentElement,clientTop=docElem.clientTop||body.clientTop||0,clientLeft=docElem.clientLeft||body.clientLeft||0,top=box.top+(self.pageYOffset||jQuery.support.boxModel&&docElem.scrollTop||body.scrollTop)-clientTop,left=box.left+(self.pageXOffset||jQuery.support.boxModel&&docElem.scrollLeft||body.scrollLeft)-clientLeft;return{top:top,left:left};};}else{jQuery.fn.offset=function(options){var elem=this[0];if(options){return this.each(function(i){jQuery.offset.setOffset(this,options,i);});}
453 -if(!elem||!elem.ownerDocument){return null;}
454 -if(elem===elem.ownerDocument.body){return jQuery.offset.bodyOffset(elem);}
455 -jQuery.offset.initialize();var offsetParent=elem.offsetParent,prevOffsetParent=elem,doc=elem.ownerDocument,computedStyle,docElem=doc.documentElement,body=doc.body,defaultView=doc.defaultView,prevComputedStyle=defaultView?defaultView.getComputedStyle(elem,null):elem.currentStyle,top=elem.offsetTop,left=elem.offsetLeft;while((elem=elem.parentNode)&&elem!==body&&elem!==docElem){if(jQuery.offset.supportsFixedPosition&&prevComputedStyle.position==="fixed"){break;}
456 -computedStyle=defaultView?defaultView.getComputedStyle(elem,null):elem.currentStyle;top-=elem.scrollTop;left-=elem.scrollLeft;if(elem===offsetParent){top+=elem.offsetTop;left+=elem.offsetLeft;if(jQuery.offset.doesNotAddBorder&&!(jQuery.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(elem.nodeName))){top+=parseFloat(computedStyle.borderTopWidth)||0;left+=parseFloat(computedStyle.borderLeftWidth)||0;}
457 -prevOffsetParent=offsetParent,offsetParent=elem.offsetParent;}
458 -if(jQuery.offset.subtractsBorderForOverflowNotVisible&&computedStyle.overflow!=="visible"){top+=parseFloat(computedStyle.borderTopWidth)||0;left+=parseFloat(computedStyle.borderLeftWidth)||0;}
459 -prevComputedStyle=computedStyle;}
460 -if(prevComputedStyle.position==="relative"||prevComputedStyle.position==="static"){top+=body.offsetTop;left+=body.offsetLeft;}
461 -if(jQuery.offset.supportsFixedPosition&&prevComputedStyle.position==="fixed"){top+=Math.max(docElem.scrollTop,body.scrollTop);left+=Math.max(docElem.scrollLeft,body.scrollLeft);}
462 -return{top:top,left:left};};}
463 -jQuery.offset={initialize:function(){var body=document.body,container=document.createElement("div"),innerDiv,checkDiv,table,td,bodyMarginTop=parseFloat(jQuery.curCSS(body,"marginTop",true))||0,html="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";jQuery.extend(container.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});container.innerHTML=html;body.insertBefore(container,body.firstChild);innerDiv=container.firstChild;checkDiv=innerDiv.firstChild;td=innerDiv.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(checkDiv.offsetTop!==5);this.doesAddBorderForTableAndCells=(td.offsetTop===5);checkDiv.style.position="fixed",checkDiv.style.top="20px";this.supportsFixedPosition=(checkDiv.offsetTop===20||checkDiv.offsetTop===15);checkDiv.style.position=checkDiv.style.top="";innerDiv.style.overflow="hidden",innerDiv.style.position="relative";this.subtractsBorderForOverflowNotVisible=(checkDiv.offsetTop===-5);this.doesNotIncludeMarginInBodyOffset=(body.offsetTop!==bodyMarginTop);body.removeChild(container);body=container=innerDiv=checkDiv=table=td=null;jQuery.offset.initialize=jQuery.noop;},bodyOffset:function(body){var top=body.offsetTop,left=body.offsetLeft;jQuery.offset.initialize();if(jQuery.offset.doesNotIncludeMarginInBodyOffset){top+=parseFloat(jQuery.curCSS(body,"marginTop",true))||0;left+=parseFloat(jQuery.curCSS(body,"marginLeft",true))||0;}
464 -return{top:top,left:left};},setOffset:function(elem,options,i){if(/static/.test(jQuery.curCSS(elem,"position"))){elem.style.position="relative";}
465 -var curElem=jQuery(elem),curOffset=curElem.offset(),curTop=parseInt(jQuery.curCSS(elem,"top",true),10)||0,curLeft=parseInt(jQuery.curCSS(elem,"left",true),10)||0;if(jQuery.isFunction(options)){options=options.call(elem,i,curOffset);}
466 -var props={top:(options.top-curOffset.top)+curTop,left:(options.left-curOffset.left)+curLeft};if("using"in options){options.using.call(elem,props);}else{curElem.css(props);}}};jQuery.fn.extend({position:function(){if(!this[0]){return null;}
467 -var elem=this[0],offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].nodeName)?{top:0,left:0}:offsetParent.offset();offset.top-=parseFloat(jQuery.curCSS(elem,"marginTop",true))||0;offset.left-=parseFloat(jQuery.curCSS(elem,"marginLeft",true))||0;parentOffset.top+=parseFloat(jQuery.curCSS(offsetParent[0],"borderTopWidth",true))||0;parentOffset.left+=parseFloat(jQuery.curCSS(offsetParent[0],"borderLeftWidth",true))||0;return{top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};},offsetParent:function(){return this.map(function(){var offsetParent=this.offsetParent||document.body;while(offsetParent&&(!/^body|html$/i.test(offsetParent.nodeName)&&jQuery.css(offsetParent,"position")==="static")){offsetParent=offsetParent.offsetParent;}
468 -return offsetParent;});}});jQuery.each(["Left","Top"],function(i,name){var method="scroll"+name;jQuery.fn[method]=function(val){var elem=this[0],win;if(!elem){return null;}
469 -if(val!==undefined){return this.each(function(){win=getWindow(this);if(win){win.scrollTo(!i?val:jQuery(win).scrollLeft(),i?val:jQuery(win).scrollTop());}else{this[method]=val;}});}else{win=getWindow(elem);return win?("pageXOffset"in win)?win[i?"pageYOffset":"pageXOffset"]:jQuery.support.boxModel&&win.document.documentElement[method]||win.document.body[method]:elem[method];}};});function getWindow(elem){return("scrollTo"in elem&&elem.document)?elem:elem.nodeType===9?elem.defaultView||elem.parentWindow:false;}
470 -jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn["inner"+name]=function(){return this[0]?jQuery.css(this[0],type,false,"padding"):null;};jQuery.fn["outer"+name]=function(margin){return this[0]?jQuery.css(this[0],type,false,margin?"margin":"border"):null;};jQuery.fn[type]=function(size){var elem=this[0];if(!elem){return size==null?null:this;}
471 -if(jQuery.isFunction(size)){return this.each(function(i){var self=jQuery(this);self[type](size.call(this,i,self[type]()));});}
472 -return("scrollTo"in elem&&elem.document)?elem.document.compatMode==="CSS1Compat"&&elem.document.documentElement["client"+name]||elem.document.body["client"+name]:(elem.nodeType===9)?Math.max(elem.documentElement["client"+name],elem.body["scroll"+name],elem.documentElement["scroll"+name],elem.body["offset"+name],elem.documentElement["offset"+name]):size===undefined?jQuery.css(elem,type):this.css(type,typeof size==="string"?size:size+"px");};});window.jQuery=window.$=jQuery;})(window);$j=jQuery.noConflict();
\ No newline at end of file
Index: trunk/extensions/AdManager/AdManager.i18n.php
@@ -1,15 +1,24 @@
22 <?php
 3+/**
 4+ * Internationalization file for the AdManager extension.
 5+ *
 6+ * @file
 7+ * @ingroup Extensions
 8+ */
39 $messages = array();
4 -
 10+
 11+/** English
 12+ * @author Ike Hecht
 13+ */
514 $messages['en'] = array(
6 - 'admanager' => 'Ad Manager',
7 - 'admanagerzones' => 'Ad Manager Zones',
 15+ 'admanager' => 'Ad Manager',
 16+ 'admanagerzones' => 'Ad Manager Zones',
817 'admanager-desc' => 'Provides a [[Special:AdManager|special page]] which allows sysops to set the zone for pages or categories',
918 'admanager_docu' => 'To add or remove the ad zone of a page or entire category, add or remove its title below.',
1019 'admanagerzones_docu' => 'Enter each ad zone number on its own line.',
1120 'admanager_invalidtargetpage' => 'No page found with title "$1".',
1221 'admanager_invalidtargetcategory' => 'No category found with title "$1".',
13 - 'admanager_notable' => 'Error! A required database table was not found! Run update.php first.',
 22+ 'admanager_notable' => 'Error! A required database table was not found! Run update.php first.',
1423 'admanager_noAdManagerZones' => 'Error! You must add some ad zones. Enter them at [[Special:AdManagerZones]].',
1524 'admanager_labelPage' => 'Page titles',
1625 'admanager_labelCategory' => 'Category names',
@@ -20,10 +29,10 @@
2130 'admanager_added' => 'Your changes have been saved',
2231 'admanager_noadsset' => '$1 has been set to show no ads',
2332 'admanager_addedzone' => 'Added zone',
24 - 'admanager_zonenum' => 'Zone #:',
 33+ 'admanager_zonenum' => 'Zone #: $1',
2534 'admanager_zonenotnumber' => 'Error! $1 is not a number.',
2635 'admanager_return' => 'Return to [[Special:AdManager]]',
2736 'admanager_gotoads' => '[[Special:AdManager|Edit ad placement]]',
28 - 'admanager_gotozones' => '[[Special:AdManagerZones|Edit ad zones]]'
29 -
30 -);
 37+ 'admanager_gotozones' => '[[Special:AdManagerZones|Edit ad zones]]',
 38+ 'right-admanager' => '[[Special:AdManager|Manage advertising configuration]]',
 39+);
\ No newline at end of file
Index: trunk/extensions/AdManager/AdManager.utils.php
@@ -5,19 +5,25 @@
66
77 class AdManagerUtils {
88
9 - #Displays an error box message. Returns true if error found
10 - public static function checkForAndDisplayError( $condition, $wikiMsg = 'admanager_error') {
 9+ /**
 10+ * Displays an error box message.
 11+ *
 12+ * @param $condition Boolean
 13+ * @param $wikiMsg String: name of a system message to output as wikitext
 14+ * @return Boolean: true if error found
 15+ */
 16+ public static function checkForAndDisplayError( $condition, $wikiMsg = 'admanager_error' ) {
1117 global $wgOut;
12 -
13 - if (!$condition) {
14 - $wgOut->addHtml('<div class="errorbox">');
 18+
 19+ if ( !$condition ) {
 20+ $wgOut->addHTML( '<div class="errorbox">' );
1521 $wgOut->addWikiMsg( $wikiMsg );
16 - $wgOut->addHtml('</div>');
 22+ $wgOut->addHTML( '</div>' );
1723 return true;
1824 }
1925 return false;
2026 }
21 -
 27+
2228 /**
2329 * Helper function to display a hidden field for different versions
2430 * of MediaWiki.
Index: trunk/extensions/AdManager/AdManager.php
@@ -1,26 +1,43 @@
22 <?php
33 /**
4 - * AdManager - a Mediawiki extension that allows setting an ad zone for indiviual pages or categories
 4+ * AdManager - a MediaWiki extension that allows setting an ad zone for
 5+ * individual pages or categories
56 *
6 - * The special page created is 'Special:AdManager', which allows sysops to set the zone for the
7 - * pages or categories. The correct ad code for adding the zone is automatically added to the correct page.
 7+ * The special page created is 'Special:AdManager', which allows sysops to set
 8+ * the zone for the pages or categories.
 9+ * The correct ad code for adding the zone is automatically added to the
 10+ * correct page.
 11+ *
 12+ * @file
 13+ * @ingroup Extensions
 14+ * @version 0.2
 15+ * @author Ike Hecht
 16+ * @link http://www.mediawiki.org/wiki/Extension:AdManager Documentation
817 */
918
10 -if ( !defined( 'MEDIAWIKI' ) ) die( 'Not an entry point.' );
 19+if ( !defined( 'MEDIAWIKI' ) ) {
 20+ die( 'Not an entry point.' );
 21+}
1122
1223 define( 'AD_TABLE', 'ad' );
1324 define( 'AD_ZONES_TABLE', 'adzones' );
1425
15 -// credits
 26+// Extension credits that will show up on Special:Version
1627 $wgExtensionCredits['specialpage'][] = array(
1728 'path' => __FILE__,
1829 'name' => 'AdManager',
19 - 'version' => '0.1',
 30+ 'version' => '0.2',
2031 'author' => 'Ike Hecht for WikiWorks',
2132 'url' => 'http://www.mediawiki.org/wiki/Extension:AdManager',
22 - 'descriptionmsg' => 'admanager-desc',
 33+ 'descriptionmsg' => 'admanager-desc',
2334 );
2435
 36+// Lowercase name of the advertising service. Currently supported values are:
 37+// openx and banman
 38+$wgAdManagerService = null;
 39+
 40+$wgAdManagerCode = null;
 41+
2542 $dir = dirname( __FILE__ ) . '/';
2643 $wgExtensionMessagesFiles['AdManager'] = $dir . 'AdManager.i18n.php';
2744
@@ -30,13 +47,11 @@
3148
3249 $wgSpecialPages['AdManagerZones'] = 'SpecialAdManagerZones';
3350 $wgSpecialPages['AdManager'] = 'SpecialAdManager';
34 -$wgSpecialPageGroups['AdManagerZones'] = 'other';
35 -$wgSpecialPageGroups['AdManager'] = 'other';
3651 $wgAutoloadClasses['SpecialAdManagerZones'] = $dir . 'SpecialAdManagerZones.php';
3752 $wgAutoloadClasses['SpecialAdManager'] = $dir . 'SpecialAdManager.php';
3853
39 -$wgAutoloadClasses['AdManagerHooks'] = $dir . '/AdManager.hooks.php';
 54+$wgAutoloadClasses['AdManagerHooks'] = $dir . 'AdManager.hooks.php';
4055 $wgHooks['LoadExtensionSchemaUpdates'][] = 'AdManagerHooks::onSchemaUpdate';
4156 $wgHooks['SkinBuildSidebar'][] = 'AdManagerHooks::SkinBuildSidebar';
4257
43 -$wgAutoloadClasses['AdManagerUtils'] = $dir . '/AdManager.utils.php';
\ No newline at end of file
 58+$wgAutoloadClasses['AdManagerUtils'] = $dir . 'AdManager.utils.php';
\ No newline at end of file
Index: trunk/extensions/AdManager/SpecialAdManagerZones.php
@@ -1,43 +1,65 @@
22 <?php
 3+
34 class SpecialAdManagerZones extends SpecialPage {
4 -
5 - function __construct() {
6 - global $wgVersion;
7 - parent::__construct( 'AdManagerZones' );
8 - if ( version_compare( $wgVersion, '1.16', '<' ) ) {
9 - wfLoadExtensionMessages( 'AdManager' );
10 - }
 5+
 6+ /**
 7+ * Constructor -- set up the new special page
 8+ */
 9+ public function __construct() {
 10+ parent::__construct( 'AdManagerZones', 'admanager' );
1111 }
1212
13 - function execute( $query ) {
14 - global $wgUser, $wgOut, $wgDBprefix;
15 - if ( ! $wgUser->isAllowed( 'admanager' ) ) {
 13+ /**
 14+ * Show the special page
 15+ *
 16+ * @param $query Mixed: parameter passed to the special page or null
 17+ */
 18+ public function execute( $query ) {
 19+ global $wgUser, $wgOut;
 20+
 21+ // Check that the user is allowed to access this special page
 22+ if ( !$wgUser->isAllowed( 'admanager' ) ) {
1623 $wgOut->permissionRequired( 'admanager' );
1724 return;
18 - }
 25+ }
1926
 27+ // Show a message if the database is in read-only mode
 28+ if ( wfReadOnly() ) {
 29+ $wgOut->readOnlyPage();
 30+ return;
 31+ }
 32+
 33+ // If user is blocked, s/he doesn't need to access this page
 34+ if( $wgUser->isBlocked() ) {
 35+ $wgOut->blockedPage( false );
 36+ return false;
 37+ }
 38+
 39+ // Set the page title, robot policies, etc.
2040 $this->setHeaders();
21 - if ( method_exists( $wgOut, 'addModuleStyles' ) &&
22 - !is_null( $wgOut->getResourceLoader()->getModule( 'mediawiki.special' ) ) ) {
 41+
 42+ // Add CSS via ResourceLoader
 43+ if ( defined( 'MW_SUPPORTS_RESOURCE_MODULES' ) ) {
2344 $wgOut->addModuleStyles( 'mediawiki.special' );
2445 }
25 -
26 - $fullTableName = $wgDBprefix . AD_ZONES_TABLE;
 46+
 47+ $fullTableName = AD_ZONES_TABLE;
2748 $dbr = wfGetDB( DB_SLAVE );
2849 if ( AdManagerUtils::checkForAndDisplayError( $dbr->tableExists( $fullTableName ), 'admanager_notable' ) ) {
2950 return;
3051 }
31 -
 52+
3253 $this->doSpecialAdManagerZones();
3354 }
34 -
 55+
3556 function doSpecialAdManagerZones() {
3657 global $wgRequest;
 58+
3759 $errors = array();
38 -
 60+
3961 if ( $wgRequest->getCheck( 'submitted' ) ) {
4062 $this->zones = explode( "\n", trim( $wgRequest->getVal( 'zones' ) ) );
41 - foreach ($this->zones as $zone) {
 63+ foreach ( $this->zones as $zone ) {
4264 $zone = trim( $zone );
4365 if ( !is_numeric( $zone ) ) {
4466 $errors['admanager_zonenotnumber'][] = $zone;
@@ -47,76 +69,81 @@
4870 $this->addZones();
4971 }
5072 }
51 -
52 - $this->showForm( $errors );
 73+
 74+ $this->showForm( $errors );
5375 }
 76+
5477 function addZones() {
55 - global $wgOut, $wgRequest, $wgDBprefix;
56 -
 78+ global $wgOut;
 79+
5780 $zones = $this->zones;
5881
59 - $dbw = wfGetDB( DB_MASTER );
60 - $fullTableName = $wgDBprefix . AD_ZONES_TABLE;
61 -
62 - $dbw->delete( $fullTableName, '*');
 82+ $dbw = wfGetDB( DB_MASTER );
 83+ $fullTableName = AD_ZONES_TABLE;
 84+
 85+ $dbw->delete( $fullTableName, '*', __METHOD__ );
6386 $text = "<div class=\"successbox\">\n";
6487 foreach ( $zones as $zone ) {
6588 if ( $zone ) {
66 - $dbw->insert(
67 - $fullTableName, array( 'ad_zone_id' => $zone )
 89+ $dbw->insert(
 90+ $fullTableName,
 91+ array( 'ad_zone_id' => $zone ),
 92+ __METHOD__
6893 );
69 - $text .= "* " . wfmsg('admanager_addedzone') . " $zone";
 94+ $text .= '* ' . wfMsg( 'admanager_addedzone' ) . " $zone";
7095 }
7196 }
7297 $text .= "</div><br clear=\"both\" />";
7398 $wgOut->addWikiText( $text );
7499 }
75 -
 100+
76101 function showForm( array $errors ) {
77 - global $wgOut, $wgDBprefix;
 102+ global $wgOut;
78103
79104 if ( empty( $errors ) ) {
80105 $wgOut->addWikiMsg( 'admanagerzones_docu' );
81106 } else {
82107 $text = "<div class=\"errorbox\">\n";
83108 foreach ( $errors as $message => $pageTitles ) {
84 - foreach ( $pageTitles as $pageTitle) {
85 - $text .= wfMsg( $message, $pageTitle ) . "<br />";
 109+ foreach ( $pageTitles as $pageTitle ) {
 110+ $text .= wfMsg( $message, $pageTitle ) . '<br />';
86111 }
87112 }
88113 $text .= "</div><br clear=\"both\" />";
89114 $wgOut->addWikiText( $text );
90115 }
91 -
92 - $fullTableName = $wgDBprefix . AD_ZONES_TABLE;
 116+
 117+ $fullTableName = AD_ZONES_TABLE;
93118 $dbr = wfGetDB( DB_SLAVE );
94119 $current = $dbr->select(
95 - $fullTableName,
96 - array( '*' )
 120+ $fullTableName,
 121+ array( '*' ),
 122+ array(),
 123+ __METHOD__
97124 );
98 -
99 - //Fetch current table into array
100 - $currentArray = Array();
 125+
 126+ // Fetch current table into array
 127+ $currentArray = array();
101128 while ( $currentRow = $current->fetchObject() ) {
102129 $currentArray[] = $currentRow->ad_zone_id;
103130 }
104 -
105 - $display = '';
106 - foreach ($currentArray as $zone) {
 131+
 132+ $display = '';
 133+ foreach ( $currentArray as $zone ) {
107134 $display .= "$zone\n";
108135 }
109 -
110 - $text = Xml::openElement( 'form', array( 'id' => 'admanagerzones', 'action' => $this->getTitle()->getFullUrl(), 'method' => 'post' ) ) . "\n" .
 136+
 137+ $text = Xml::openElement( 'form', array( 'id' => 'admanagerzones', 'action' => $this->getTitle()->getFullURL(), 'method' => 'post' ) ) . "\n" .
111138 AdManagerUtils::hiddenField( 'title', $this->getTitle()->getPrefixedText() ) .
112139 AdManagerUtils::hiddenField( 'submitted', 1 );
113140 $text .= Xml::textarea( 'zones' , $display, 25, 20, array( 'style' => 'width: auto; margin-bottom: 1em;' ) );
114 - $text .= Xml::element('br');
 141+ $text .= Xml::element( 'br' );
115142 $text .= Xml::submitButton( wfMsg( 'admanager_submit' ) );
116143 $text .= Xml::closeElement( 'form' );
117 - $text .= Xml::element('br');
118 -
 144+ $text .= Xml::element( 'br' );
 145+
119146 $wgOut->addHTML( $text );
120 -
 147+
121148 $wgOut->addWikiMsg( 'admanager_gotoads' );
122149 }
123150 }
\ No newline at end of file
Index: trunk/extensions/AdManager/SpecialAdManager.php
@@ -1,133 +1,177 @@
22 <?php
 3+
34 class SpecialAdManager extends SpecialPage {
45 const NUM_BLANK_ROWS = 5;
56 const BLANK = '----';
6 -
7 - function __construct() {
8 - global $wgVersion;
9 - parent::__construct( 'AdManager' );
10 - if ( version_compare( $wgVersion, '1.16', '<' ) ) {
11 - wfLoadExtensionMessages( 'AdManager' );
12 - }
 7+
 8+ /**
 9+ * Constructor -- set up the new special page
 10+ */
 11+ public function __construct() {
 12+ parent::__construct( 'AdManager', 'admanager' );
1313 }
1414
15 - function execute( $query ) {
16 - global $wgUser, $wgOut, $wgDBprefix;
17 -
18 - if ( ! $wgUser->isAllowed( 'admanager' ) ) {
 15+ /**
 16+ * Show the special page
 17+ *
 18+ * @param $query Mixed: parameter passed to the special page or null
 19+ */
 20+ public function execute( $query ) {
 21+ global $wgUser, $wgOut;
 22+
 23+ // Check that the user is allowed to access this special page
 24+ if ( !$wgUser->isAllowed( 'admanager' ) ) {
1925 $wgOut->permissionRequired( 'admanager' );
2026 return;
21 - }
 27+ }
2228
 29+ // Show a message if the database is in read-only mode
 30+ if ( wfReadOnly() ) {
 31+ $wgOut->readOnlyPage();
 32+ return;
 33+ }
 34+
 35+ // If user is blocked, s/he doesn't need to access this page
 36+ if( $wgUser->isBlocked() ) {
 37+ $wgOut->blockedPage( false );
 38+ return false;
 39+ }
 40+
 41+ // Set the page title, robot policies, etc.
2342 $this->setHeaders();
24 - if ( method_exists( $wgOut, 'addModuleStyles' ) &&
25 - !is_null( $wgOut->getResourceLoader()->getModule( 'mediawiki.special' ) ) ) {
 43+
 44+ // Add CSS via ResourceLoader
 45+ if ( defined( 'MW_SUPPORTS_RESOURCE_MODULES' ) ) {
2646 $wgOut->addModuleStyles( 'mediawiki.special' );
2747 }
28 -
 48+
2949 $dbr = wfGetDB( DB_SLAVE );
30 - $fullTableName = $wgDBprefix . AD_TABLE;
31 - $fullTableNameZones = $wgDBprefix . AD_ZONES_TABLE;
32 - if ( AdManagerUtils::checkForAndDisplayError( $dbr->tableExists( $fullTableName ) && $dbr->tableExists( $fullTableNameZones ), 'admanager_notable' ) ) {
 50+ $fullTableName = AD_TABLE;
 51+ $fullTableNameZones = AD_ZONES_TABLE;
 52+ if (
 53+ AdManagerUtils::checkForAndDisplayError(
 54+ $dbr->tableExists( $fullTableName ) &&
 55+ $dbr->tableExists( $fullTableNameZones ),
 56+ 'admanager_notable'
 57+ )
 58+ )
 59+ {
3360 return;
3461 }
35 -
36 -
 62+
3763 $currentZones = $dbr->select(
38 - $fullTableNameZones,
39 - array( '*' )
 64+ $fullTableNameZones,
 65+ array( '*' ),
 66+ array(),
 67+ __METHOD__
4068 );
41 - if ( AdManagerUtils::checkForAndDisplayError( $currentZones->numRows() > 0 , 'admanager_noAdManagerZones' ) ) {
 69+ if ( AdManagerUtils::checkForAndDisplayError( $currentZones->numRows() > 0, 'admanager_noAdManagerZones' ) ) {
4270 return;
4371 }
44 - //Fetch current zones table into array
45 - $this->adManagerZones = Array();
 72+
 73+ // Fetch current zones table into array
 74+ $this->adManagerZones = array();
4675 while ( $currentRow = $currentZones->fetchObject() ) {
4776 $this->adManagerZones[] = $currentRow->ad_zone_id;
4877 }
49 -
50 - $this->adManagerZones[] = wfmsg('admanager_noads');
51 -
 78+
 79+ $this->adManagerZones[] = wfMsg( 'admanager_noads' );
 80+
5281 $this->doSpecialAdManager();
5382 }
54 -
 83+
5584 function doSpecialAdManager() {
5685 global $wgRequest;
 86+
5787 $errors = array();
58 -
 88+
5989 $this->target['Page'] = array();
6090 $this->target['Category'] = array();
 91+
6192 if ( $wgRequest->getCheck( 'submitted' ) ) {
62 - //Load user input and do error checking
63 - $tableTypes = array ('Page', 'Category');
 93+ // Load user input and do error checking
 94+ $tableTypes = array( 'Page', 'Category' );
6495 foreach ( $this->adManagerZones as $zone ) {
6596 foreach ( $tableTypes as $tableType ) {
6697 $titles = explode( "\n", trim( $wgRequest->getVal( "textarea_{$zone}_{$tableType}" ) ) );
67 -
68 - foreach ($titles as $title) {
 98+
 99+ foreach ( $titles as $title ) {
69100 $title = trim( $title );
70 - if ( !$title ) continue;
71 -
72 - /*if ( $zone == wfmsg('admanager_noads') ) {
73 - continue;
 101+ if ( !$title ) {
 102+ continue;
 103+ }
 104+
 105+ /*if ( $zone == wfMsg( 'admanager_noads' ) ) {
 106+ continue;
74107 }*/
75 -
 108+
76109 if ( $tableType == 'Page' ) {
77 - $pageObject = Title::newFromText( trim($title) );
 110+ $pageObject = Title::newFromText( trim( $title ) );
78111 if ( !$pageObject->exists() ) {
79112 $errors['admanager_invalidtargetpage'][] = $title;
80 - }
81 - else {
 113+ } else {
82114 $this->target['Page'][$zone][] = $title;
83115 }
84 - }
85 - else {
 116+ } else {
86117 $categoryObject = Category::newFromName( $title );
87118 if ( !$categoryObject->getID() ) {
88119 $errors['admanager_invalidtargetcategory'][] = $title;
89 - }
90 - else {
 120+ } else {
91121 $this->target['Category'][$zone][] = $title;
92122 }
93123 }
94124 }
95125 }
96126 }
 127+
97128 if ( empty( $errors ) ) {
98129 $this->addZoneToTitle();
99130 return;
100 - }
 131+ }
101132 }
102 - $this->showForm( $errors );
 133+
 134+ $this->showForm( $errors );
103135 }
104 -
 136+
105137 function addZoneToTitle() {
106 - global $wgOut, $wgDBprefix;
107 -
108 - $dbw = wfGetDB( DB_MASTER );
109 - $fullTableName = $wgDBprefix . AD_TABLE;
110 -
111 - $dbw->delete( $fullTableName, '*');
112 -
113 - $tableTypes = array ('Page', 'Category');
 138+ global $wgOut;
 139+
 140+ $dbw = wfGetDB( DB_MASTER );
 141+ $fullTableName = AD_TABLE;
 142+
 143+ $dbw->delete( $fullTableName, '*', __METHOD__ );
 144+
 145+ $tableTypes = array( 'Page', 'Category' );
114146 foreach ( $tableTypes as $tableType ) {
115147 foreach ( $this->target[$tableType] as $targetZoneID => $titlesArray ) {
116 - if ( $targetZoneID == wfmsg('admanager_noads') ) {
117 - $targetZoneID = "NULL";
 148+ if ( $targetZoneID == wfMsg( 'admanager_noads' ) ) {
 149+ $targetZoneID = 'NULL';
118150 }
119151 foreach ( $titlesArray as $title ) {
120 - //Depending on fields being processed, lookup either the text's Page ID or Category ID
121 - $targetPageID = ( $tableType == 'Page' ? Title::newFromText( $title )->getArticleID() : Category::newFromName( $title )->getID() );
122 - $dbw->insert(
123 - $fullTableName, array( 'ad_page_id' => $targetPageID, 'ad_zone' => $targetZoneID, 'ad_page_is_category' => ( $tableType == 'Category' ? TRUE : FALSE ) )
 152+ // Depending on fields being processed, lookup either the
 153+ // text's Page ID or Category ID
 154+ if ( $tableType == 'Page' ) {
 155+ $targetPageID = Title::newFromText( $title )->getArticleID();
 156+ } else {
 157+ $targetPageID = Category::newFromName( $title )->getID();
 158+ }
 159+ $dbw->insert(
 160+ $fullTableName,
 161+ array(
 162+ 'ad_page_id' => $targetPageID,
 163+ 'ad_zone' => $targetZoneID,
 164+ 'ad_page_is_category' => ( $tableType == 'Category' ? true : false )
 165+ ),
 166+ __METHOD__
124167 );
125168 }
126 - }
 169+ }
127170 }
 171+
128172 $wgOut->wrapWikiMsg( "<div class=\"successbox\" style=\"margin-right:3em;\">$1</div>", 'admanager_added' );
129 - $wgOut->addWikiText( "<br clear=\"both\" />" . wfmsg('admanager_return') );
 173+ $wgOut->addWikiText( '<br clear="both" />' . wfMsg( 'admanager_return' ) );
130174 }
131 -
 175+
132176 function showForm( array $errors ) {
133177 global $wgOut, $wgRequest;
134178
@@ -144,60 +188,61 @@
145189 $wgOut->addWikiText( $text );
146190 }
147191
148 - $text = Xml::openElement( 'form', array( 'id' => 'admanager', 'action' => $this->getTitle()->getFullUrl(), 'method' => 'post' ) ) . "\n" .
 192+ $text = Xml::openElement( 'form', array( 'id' => 'admanager', 'action' => $this->getTitle()->getFullURL(), 'method' => 'post' ) ) . "\n" .
149193 AdManagerUtils::hiddenField( 'title', $this->getTitle()->getPrefixedText() ) .
150194 AdManagerUtils::hiddenField( 'submitted', 1 );
151 -
152 - $this->currentData['Page'] = $this->getCurrentData('Page');
153 - $this->currentData['Category'] = $this->getCurrentData('Category');
154 -
 195+
 196+ $this->currentData['Page'] = $this->getCurrentData( 'Page' );
 197+ $this->currentData['Category'] = $this->getCurrentData( 'Category' );
 198+
155199 foreach ( $this->adManagerZones as $zone ) {
156 - $text .= '<h2> ' . wfMsg( 'admanager_zonenum' ) . " $zone" . " </h2>";
157 - $text .= '<div style = "float:left; margin-right: 6em;">';
158 - $text .= $this->drawTable('Page', $zone);
159 - $text .= '</div><div style="float: left;">';
160 - $text .= $this->drawTable('Category', $zone);
 200+ $text .= '<h2> ' . wfMsg( 'admanager_zonenum', $zone ) . ' </h2>';
 201+ $text .= '<div style="float:left; margin-right: 6em;">';
 202+ $text .= $this->drawTable( 'Page', $zone );
 203+ $text .= '</div><div style="float: left;">';
 204+ $text .= $this->drawTable( 'Category', $zone );
161205 $text .= '</div> <br clear="all">';
162206 }
163 - $text .= Xml::element('br');
 207+ $text .= Xml::element( 'br' );
164208 $text .= Xml::submitButton( wfMsg( 'admanager_submit' ) );
165209 $text .= Xml::closeElement( 'form' );
166 - $text .= Xml::element('br');
 210+ $text .= Xml::element( 'br' );
167211 $wgOut->addHTML( $text );
168 -
169 -
 212+
 213+
170214 $wgOut->addWikiMsg( 'admanager_gotozones' );
171215 }
172 -
173 - function getCurrentData ( $tableType ) {
174 - global $wgDBprefix;
175216
176 - $fullTableName = $wgDBprefix . AD_TABLE;
 217+ function getCurrentData( $tableType ) {
 218+ $fullTableName = AD_TABLE;
177219 $dbr = wfGetDB( DB_SLAVE );
178220 $current = $dbr->select(
179 - $fullTableName,
180 - array( 'ad_id', 'ad_page_id', 'ad_zone', 'ad_page_is_category' ),
181 - 'ad_page_is_category IS '. ( $tableType == 'Page' ? 'NOT ' : '' ) . 'TRUE'
 221+ $fullTableName,
 222+ array(
 223+ 'ad_id', 'ad_page_id', 'ad_zone', 'ad_page_is_category'
 224+ ),
 225+ 'ad_page_is_category IS '. ( $tableType == 'Page' ? 'NOT ' : '' ) . 'TRUE',
 226+ __METHOD__
182227 );
183 -
184 - //Fetch current table into array
185 - $currentArray = Array();
 228+
 229+ // Fetch current table into array
 230+ $currentArray = array();
186231 while ( $currentRow = $current->fetchObject() ) {
187 - $currentArray[] = array(
188 - //Depending on if we're fetching pages or categories, match the ID to the appropriate Title
189 - 'ad_page_name' => ( $tableType == 'Page' ? Title::newFromID($currentRow->ad_page_id)->getFullText() : Category::newFromID( $currentRow->ad_page_id )->getName() ),
 232+ $currentArray[] = array(
 233+ // Depending on if we're fetching pages or categories, match the ID to the appropriate Title
 234+ 'ad_page_name' => ( $tableType == 'Page' ? Title::newFromID( $currentRow->ad_page_id )->getFullText() : Category::newFromID( $currentRow->ad_page_id )->getName() ),
190235 'ad_zone' => $currentRow->ad_zone
191236 );
192237 }
193 -
 238+
194239 return $currentArray;
195240 }
196 -
197 - function drawTable ($tableType, $currentZone) {
 241+
 242+ function drawTable( $tableType, $currentZone ) {
198243 global $wgRequest;
199 -
 244+
200245 $page_label = wfMsg( "admanager_label$tableType" );
201 -
 246+
202247 $text = <<<END
203248 <table id="table$tableType">
204249 <tr>
@@ -206,11 +251,10 @@
207252
208253 END;
209254
210 - $display = '';
 255+ $display = '';
211256 if ( $wgRequest->getCheck( 'submitted' ) ) {
212257 $display = $wgRequest->getVal( "textarea_{$currentZone}_{$tableType}" );
213 - }
214 - else {
 258+ } else {
215259 foreach ( $this->currentData[$tableType] as $entry ) {
216260 if ( $entry['ad_zone'] == $currentZone ) {
217261 $display .= $entry['ad_page_name']. "\n";
@@ -218,9 +262,9 @@
219263 }
220264 }
221265
222 - $text .= '<tr><td>' . Xml::textarea( "textarea_{$currentZone}_{$tableType}" , $display, 30, 12, array( 'style' => 'width: auto;' ) );
 266+ $text .= '<tr><td>' . Xml::textarea( "textarea_{$currentZone}_{$tableType}" , $display, 30, 12, array( 'style' => 'width: auto;' ) );
223267 $text .= '</td></tr></table>';
224 -
 268+
225269 return $text;
226270 }
227271 }
\ No newline at end of file
Index: trunk/extensions/AdManager/AdManager.hooks.php
@@ -1,138 +1,153 @@
22 <?php
33
44 final class AdManagerHooks {
5 -
6 - static $catList = Array();
7 -
 5+
 6+ static $catList = array();
 7+
88 /**
99 * Schema update to set up the needed database tables.
10 - */
 10+ */
1111 public static function onSchemaUpdate( /* DatabaseUpdater */ $updater = null ) {
1212 global $wgDBtype;
13 -
 13+
1414 if ( $wgDBtype == 'mysql' ) {
1515 // Set up the current schema.
1616 if ( $updater === null ) {
1717 // <= 1.16 support
1818 global $wgExtNewTables, $wgExtNewIndexes;
19 -
 19+
2020 $wgExtNewTables[] = array(
2121 AD_TABLE,
2222 dirname( __FILE__ ) . '/AdManager.sql',
2323 true
2424 );
25 -
 25+
2626 $wgExtNewTables[] = array(
2727 AD_ZONE_TABLE,
2828 dirname( __FILE__ ) . '/AdManager.sql',
2929 true
3030 );
3131
32 - /*TODO: Do we need an index?*/
33 - }
34 - else {
 32+ /* TODO: Do we need an index? */
 33+ } else {
3534 // >= 1.17 support
36 - $updater->addExtensionUpdate( array(
 35+ $updater->addExtensionUpdate( array(
3736 'addTable',
3837 AD_TABLE,
3938 dirname( __FILE__ ) . '/AdManager.sql',
4039 true
4140 ) );
42 - $updater->addExtensionUpdate( array(
 41+ $updater->addExtensionUpdate( array(
4342 'addTable',
4443 AD_ZONE_TABLE,
4544 dirname( __FILE__ ) . '/AdManager.sql',
4645 true
4746 ) );
4847 }
49 -
 48+
5049 }
51 -
 50+
5251 return true;
5352 }
54 -
55 - //Recursively walks through tree array. Creates array containing each input's level. (array_walk_recursive doesn't like when the value is an array)
56 - //A lower count indicates a closer ancestor to the page, that is supercategories are assigned higher numbers than subcategories
57 - private static function assignLevel($value, $catName, $count = 0) {
 53+
 54+ /**
 55+ * Recursively walks through tree array.
 56+ * Creates array containing each input's level.
 57+ * (array_walk_recursive doesn't like when the value is an array)
 58+ * A lower count indicates a closer ancestor to the page, that is
 59+ * supercategories are assigned higher numbers than subcategories
 60+ */
 61+ private static function assignLevel( $value, $catName, $count = 0 ) {
5862 $count++;
59 -
60 - if(!empty($value)) {
61 - array_walk ( $value , 'self::assignLevel', $count);
62 -
 63+
 64+ if( !empty( $value ) ) {
 65+ array_walk( $value, 'self::assignLevel', $count );
6366 }
64 - self::$catList[$catName] = $count;
 67+
 68+ self::$catList[$catName] = $count;
6569 }
66 -
67 - //Pop some ads at the bottom of the sidebar
 70+
 71+ // Pop some ads at the bottom of the sidebar
6872 public static function SkinBuildSidebar( $skin, &$sidebar ) {
69 - global $wgOut, $wgDBprefix, $wgTitle, $wgAdManagerService, $wgAdManagerCode;
70 -
71 - $fullTableName = $wgDBprefix . AD_TABLE;
72 - $dbr = wfGetDB( DB_SLAVE );
 73+ global $wgOut, $wgTitle, $wgAdManagerService, $wgAdManagerCode;
 74+
 75+ $fullTableName = AD_TABLE;
 76+ $dbr = wfGetDB( DB_SLAVE );
7377 if ( !$dbr->tableExists( $fullTableName ) ) {
7478 return $sidebar;
7579 }
76 -
77 - //check if an ad zone was set for this page.
 80+
 81+ // check if an ad zone was set for this page.
7882 $thisPageID = $wgTitle->getArticleID();
 83+ if ( $thisPageID <= 0 ) {
 84+ return $sidebar;
 85+ }
 86+
7987 $thisPageAdZonesDB = $dbr->select(
80 - $fullTableName,
81 - array( 'ad_zone' ),
82 - "ad_page_id = $thisPageID AND ad_page_is_category IS NOT TRUE"
 88+ $fullTableName,
 89+ array( 'ad_zone' ),
 90+ "ad_page_id = $thisPageID AND ad_page_is_category IS NOT TRUE",
 91+ __METHOD__
8392 );
84 -
 93+
8594 $thisPageAdZones = array();
86 - if ( $thisPageAdZonesDB->numRows() !== 0 ) { //If there's a page zone set, it gets precedence.
 95+ if ( $thisPageAdZonesDB->numRows() !== 0 ) { // If there's a page zone set, it gets precedence.
8796 while ( $row = $thisPageAdZonesDB->fetchObject() ) {
8897 $thisPageAdZones[] = $row->ad_zone;
8998 }
90 - }
91 - else {
92 - //check if an ad zone was set for any of this page's categories
 99+ } else {
 100+ // check if an ad zone was set for any of this page's categories
93101 $allCategories = $dbr->select(
94 - $fullTableName,
95 - array( 'ad_page_id', 'ad_zone' ),
96 - "ad_page_is_category IS TRUE"
 102+ $fullTableName,
 103+ array( 'ad_page_id', 'ad_zone' ),
 104+ 'ad_page_is_category IS TRUE',
 105+ __METHOD__
97106 );
98 -
 107+
99108 $thisCategoryIDS = $wgTitle->getParentCategoryTree();
100 - array_walk ( $thisCategoryIDS , 'self::assignLevel' );
101 - asort ( self::$catList ); //give precedence to the closest ancestors
102 -
103 - if ( !empty(self::$catList) ) {
104 - //find first match in this page's catlist that exists in the database
105 - foreach (self::$catList as $catName => $level) {
106 - $catName = substr($catName, 9); //strips Category: prefix
107 - $catID = Category::newFromName($catName)->getID();
 109+ array_walk( $thisCategoryIDS , 'self::assignLevel' );
 110+ asort( self::$catList ); // give precedence to the closest ancestors
 111+
 112+ if ( !empty( self::$catList ) ) {
 113+ // find first match in this page's catlist that exists in the database
 114+ foreach ( self::$catList as $catName => $level ) {
 115+ // @todo FIXME: this is awfully hacky and specfic to
 116+ // English; the correct way of doing this would be
 117+ // constructing a Title object and calling getText() on it
 118+ // or something like that to get the name of the category
 119+ // without the namespace
 120+ $catName = substr( $catName, 9 ); // strips Category: prefix
 121+ $catID = Category::newFromName( $catName )->getID();
108122 $firstMatch = $dbr->select(
109 - $fullTableName,
110 - array( 'ad_zone' ),
111 - "ad_page_id = $catID AND ad_page_is_category IS TRUE"
112 - );
113 - if ($firstMatch->numRows() !== 0) {
 123+ $fullTableName,
 124+ array( 'ad_zone' ),
 125+ "ad_page_id = $catID AND ad_page_is_category IS TRUE",
 126+ __METHOD__
 127+ );
 128+ if ( $firstMatch->numRows() !== 0 ) {
114129 break;
115130 }
116131 }
117 -
 132+
118133 while ( $row = $firstMatch->fetchObject() ) {
119134 $thisPageAdZones[] = $row->ad_zone;
120135 }
121136 }
122137 }
123 -
124 - //And finally, pop those ads in
125 - if ( empty( $thisPageAdZones ) ) { //No zone set for this page or its categories
 138+
 139+ // And finally, pop those ads in
 140+ if ( empty( $thisPageAdZones ) ) { // No zone set for this page or its categories
126141 return true;
127142 }
128 -
129 - if ( in_array( null, $thisPageAdZones ) ) { //An entry in this array was set to "None" so show no ads
 143+
 144+ if ( in_array( null, $thisPageAdZones ) ) { // An entry in this array was set to "None" so show no ads
130145 return true;
131146 }
132 -
 147+
133148 if ( $wgAdManagerService == 'openx' ) {
134149 $wgAdManagerCode = "<a href='http://d1.openx.org/ck.php?cb=91238047' target='_blank'><img src='http://d1.openx.org/avw.php?zoneid=$1&amp;cb=1378957897235' border='0' alt='' /></a>";
135150 }
136 -
 151+
137152 if ( $wgAdManagerService == 'banman' ) {
138153 $wgAdManagerCode = <<<END
139154 <!-- Begin - Site: AAO Zone: /eyewiki -->
@@ -142,15 +157,13 @@
143158 var SiteID = 1;
144159 var ZoneID = $1;
145160 var browDateTime = (new Date()).getTime();
146 - if (browName=='Netscape')
147 - {
148 - document.write('<s'+'cript lang' + 'uage="jav' + 'ascript" src="http://aaoads.enforme.com/a.aspx?ZoneID=' + ZoneID + '&amp;Task=Get&amp;IFR=False&amp;Browser=NETSCAPE4&amp;SiteID=' + SiteID + '&amp;Random=' + browDateTime + '">'); document.write('</'+'scr'+'ipt>');
 161+ if ( browName=='Netscape' ) {
 162+ document.write('<s'+'cript lang' + 'uage="jav' + 'ascript" src="http://aaoads.enforme.com/a.aspx?ZoneID=' + ZoneID + '&amp;Task=Get&amp;IFR=False&amp;Browser=NETSCAPE4&amp;SiteID=' + SiteID + '&amp;Random=' + browDateTime + '">'); document.write('</'+'scr'+'ipt>');
149163 }
150 - if (browName!='Netscape')
151 - {
152 - document.write('<s'+'cript lang' + 'uage="jav' + 'ascript" src="http://aaoads.enforme.com/a.aspx?ZoneID=' + ZoneID + '&amp;Task=Get&amp;IFR=False&amp;SiteID=' + SiteID + '&amp;Random=' + browDateTime + '">'); document.write('</'+'scr'+'ipt>');
 164+ if ( browName != 'Netscape' ) {
 165+ document.write('<s'+'cript lang' + 'uage="jav' + 'ascript" src="http://aaoads.enforme.com/a.aspx?ZoneID=' + ZoneID + '&amp;Task=Get&amp;IFR=False&amp;SiteID=' + SiteID + '&amp;Random=' + browDateTime + '">'); document.write('</'+'scr'+'ipt>');
153166 }
154 - // -->
 167+ // -->
155168 </script>
156169 <noscript>
157170 <a href="http://aaoads.enforme.com/a.aspx?ZoneID=$1&amp;Task=Click&amp;Mode=HTML&amp;SiteID=1" target="_blank">
@@ -159,14 +172,14 @@
160173 <!-- End - Site: AAO Zone: /eyewiki_0 -->
161174 END;
162175 }
163 -
164 - //Other ad services can be added here, with the same format as above
165 -
166 - if ( !isSet( $wgAdManagerCode ) ) {
167 - return true; //TODO: show error
 176+
 177+ // Other ad services can be added here, with the same format as above
 178+
 179+ if ( !isset( $wgAdManagerCode ) ) {
 180+ return true; // TODO: show error
168181 }
169 -
170 - //Adds some CSS, but puts it in <body>
 182+
 183+ // Adds some CSS, but puts it in <body>
171184 $wgOut->addHTML( <<<EOT
172185 <style type="text/css">
173186 div[id*='AdManager'] h5 {
@@ -179,15 +192,16 @@
180193 </style>
181194 EOT
182195 );
183 -
 196+
184197 $adNumber = 0;
185 - foreach ( $thisPageAdZones as $thisPageAdZone ) {
 198+ foreach ( $thisPageAdZones as $thisPageAdZone ) {
186199 $adNumber++;
187 - //Allows admins to use any ad service or inclusion code they desire by inserting in LocalSettings
 200+ // Allows admins to use any ad service or inclusion code they
 201+ // desire by inserting in LocalSettings.php
188202 $out = str_replace( '$1', $thisPageAdZone, $wgAdManagerCode );
189203 $sidebar["AdManager$adNumber"] = $out;
190204 }
191 -
 205+
192206 return true;
193207 }
194208 }
Index: trunk/extensions/AdManager/AdManager.sql
@@ -1,11 +1,11 @@
22 -- MySQL version of the database schema for the AdManager extension.
3 -CREATE TABLE IF NOT EXISTS /*$wgDBprefix*/ad (
 3+CREATE TABLE IF NOT EXISTS /*_*/ad (
44 ad_id INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
55 ad_page_id INT(10) unsigned NOT NULL,
66 ad_zone INT(4) unsigned,
77 ad_page_is_category BOOLEAN
88 ) /*$wgDBTableOptions*/;
99
10 -CREATE TABLE IF NOT EXISTS /*$wgDBprefix*/adzones (
 10+CREATE TABLE IF NOT EXISTS /*_*/adzones (
1111 ad_zone_id INT(4) unsigned NOT NULL PRIMARY KEY
1212 ) /*$wgDBTableOptions*/;
\ No newline at end of file

Follow-up revisions

RevisionCommit summaryAuthorDate
r97388Some message tweaks,...raymond21:13, 17 September 2011

Comments

#Comment by Raymond (talk | contribs)   21:13, 17 September 2011

alias file for special pages is missing. Intentionally?

#Comment by Jack Phoenix (talk | contribs)   19:38, 20 September 2011

I wouldn't know, as it's not my extension. :) Ideally it'd be nice to have everything and anything i18n in one file, just like how we have for core: magic words, special page aliases and interface messages, all in one MessagesXx.php file.

#Comment by Nikerabbit (talk | contribs)   12:12, 21 September 2011

Those i18n files get not so fun to work with when they are in multimegabyte size category.

Status & tagging log