var MooTools={'version':'1.2.3','build':'4980aa0fb74d2f6eb80bcd9f5b8e1fd6fbb8f607'};var Native=function(options){options=options||{};var name=options.name;var legacy=options.legacy;var protect=options.protect;var methods=options.implement;var generics=options.generics;var initialize=options.initialize;var afterImplement=options.afterImplement||function(){};var object=initialize||legacy;generics=generics!==false;object.constructor=Native;object.$family={name:'native'};if(legacy&&initialize)object.prototype=legacy.prototype;object.prototype.constructor=object;if(name){var family=name.toLowerCase();object.prototype.$family={name:family};Native.typize(object,family)}var add=function(obj,name,method,force){if(!protect||force||!obj.prototype[name])obj.prototype[name]=method;if(generics)Native.genericize(obj,name,protect);afterImplement.call(obj,name,method);return obj};object.alias=function(a1,a2,a3){if(typeof a1=='string'){var pa1=this.prototype[a1];if((a1=pa1))return add(this,a2,a1,a3)}for(var a in a1)this.alias(a,a1[a],a2);return this};object.implement=function(a1,a2,a3){if(typeof a1=='string')return add(this,a1,a2,a3);for(var p in a1)add(this,p,a1[p],a2);return this};if(methods)object.implement(methods);return object};Native.genericize=function(object,property,check){if((!check||!object[property])&&typeof object.prototype[property]=='function')object[property]=function(){var args=Array.prototype.slice.call(arguments);return object.prototype[property].apply(args.shift(),args)}};Native.implement=function(objects,properties){for(var i=0,l=objects.length;i<l;i++)objects[i].implement(properties)};Native.typize=function(object,family){if(!object.type)object.type=function(item){return($type(item)===family)}};(function(){var natives={'Array':Array,'Date':Date,'Function':Function,'Number':Number,'RegExp':RegExp,'String':String};for(var n in natives)new Native({name:n,initialize:natives[n],protect:true});var types={'boolean':Boolean,'native':Native,'object':Object};for(var t in types)Native.typize(types[t],t);var generics={'Array':["concat","indexOf","join","lastIndexOf","pop","push","reverse","shift","slice","sort","splice","toString","unshift","valueOf"],'String':["charAt","charCodeAt","concat","indexOf","lastIndexOf","match","replace","search","slice","split","substr","substring","toLowerCase","toUpperCase","valueOf"]};for(var g in generics){for(var i=generics[g].length;i--;)Native.genericize(natives[g],generics[g][i],true)}})();var Hash=new Native({name:'Hash',initialize:function(object){if($type(object)=='hash')object=$unlink(object.getClean());for(var key in object)this[key]=object[key];return this}});Hash.implement({forEach:function(fn,bind){for(var key in this){if(this.hasOwnProperty(key))fn.call(bind,this[key],key,this)}},getClean:function(){var clean={};for(var key in this){if(this.hasOwnProperty(key))clean[key]=this[key]}return clean},getLength:function(){var length=0;for(var key in this){if(this.hasOwnProperty(key))length++}return length}});Hash.alias('forEach','each');Array.implement({forEach:function(fn,bind){for(var i=0,l=this.length;i<l;i++)fn.call(bind,this[i],i,this)}});Array.alias('forEach','each');function $A(iterable){if(iterable.item){var l=iterable.length,array=new Array(l);while(l--)array[l]=iterable[l];return array}return Array.prototype.slice.call(iterable)};function $arguments(i){return function(){return arguments[i]}};function $chk(obj){return!!(obj||obj===0)};function $clear(timer){clearTimeout(timer);clearInterval(timer);return null};function $defined(obj){return(obj!=undefined)};function $each(iterable,fn,bind){var type=$type(iterable);((type=='arguments'||type=='collection'||type=='array')?Array:Hash).each(iterable,fn,bind)};function $empty(){};function $extend(original,extended){for(var key in(extended||{}))original[key]=extended[key];return original};function $H(object){return new Hash(object)};function $lambda(value){return($type(value)=='function')?value:function(){return value}};function $merge(){var args=Array.slice(arguments);args.unshift({});return $mixin.apply(null,args)};function $mixin(mix){for(var i=1,l=arguments.length;i<l;i++){var object=arguments[i];if($type(object)!='object')continue;for(var key in object){var op=object[key],mp=mix[key];mix[key]=(mp&&$type(op)=='object'&&$type(mp)=='object')?$mixin(mp,op):$unlink(op)}}return mix};function $pick(){for(var i=0,l=arguments.length;i<l;i++){if(arguments[i]!=undefined)return arguments[i]}return null};function $random(min,max){return Math.floor(Math.random()*(max-min+1)+min)};function $splat(obj){var type=$type(obj);return(type)?((type!='array'&&type!='arguments')?[obj]:obj):[]};var $time=Date.now||function(){return+new Date};function $try(){for(var i=0,l=arguments.length;i<l;i++){try{return arguments[i]()}catch(e){}}return null};function $type(obj){if(obj==undefined)return false;if(obj.$family)return(obj.$family.name=='number'&&!isFinite(obj))?false:obj.$family.name;if(obj.nodeName){switch(obj.nodeType){case 1:return'element';case 3:return(/\S/).test(obj.nodeValue)?'textnode':'whitespace'}}else if(typeof obj.length=='number'){if(obj.callee)return'arguments';else if(obj.item)return'collection'}return typeof obj};function $unlink(object){var unlinked;switch($type(object)){case'object':unlinked={};for(var p in object)unlinked[p]=$unlink(object[p]);break;case'hash':unlinked=new Hash(object);break;case'array':unlinked=[];for(var i=0,l=object.length;i<l;i++)unlinked[i]=$unlink(object[i]);break;default:return object}return unlinked};var Browser=$merge({Engine:{name:'unknown',version:0},Platform:{name:(window.orientation!=undefined)?'ipod':(navigator.platform.match(/mac|win|linux/i)||['other'])[0].toLowerCase()},Features:{xpath:!!(document.evaluate),air:!!(window.runtime),query:!!(document.querySelector)},Plugins:{},Engines:{presto:function(){return(!window.opera)?false:((arguments.callee.caller)?960:((document.getElementsByClassName)?950:925))},trident:function(){return(!window.ActiveXObject)?false:((window.XMLHttpRequest)?5:4)},webkit:function(){return(navigator.taintEnabled)?false:((Browser.Features.xpath)?((Browser.Features.query)?525:420):419)},gecko:function(){return(document.getBoxObjectFor==undefined)?false:((document.getElementsByClassName)?19:18)}}},Browser||{});Browser.Platform[Browser.Platform.name]=true;Browser.detect=function(){for(var engine in this.Engines){var version=this.Engines[engine]();if(version){this.Engine={name:engine,version:version};this.Engine[engine]=this.Engine[engine+version]=true;break}}return{name:engine,version:version}};Browser.detect();Browser.Request=function(){return $try(function(){return new XMLHttpRequest()},function(){return new ActiveXObject('MSXML2.XMLHTTP')})};Browser.Features.xhr=!!(Browser.Request());Browser.Plugins.Flash=(function(){var version=($try(function(){return navigator.plugins['Shockwave Flash'].description},function(){return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version')})||'0 r0').match(/\d+/g);return{version:parseInt(version[0]||0+'.'+version[1],10)||0,build:parseInt(version[2],10)||0}})();function $exec(text){if(!text)return text;if(window.execScript){window.execScript(text)}else{var script=document.createElement('script');script.setAttribute('type','text/javascript');script[(Browser.Engine.webkit&&Browser.Engine.version<420)?'innerText':'text']=text;document.head.appendChild(script);document.head.removeChild(script)}return text};Native.UID=1;var $uid=(Browser.Engine.trident)?function(item){return(item.uid||(item.uid=[Native.UID++]))[0]}:function(item){return item.uid||(item.uid=Native.UID++)};var Window=new Native({name:'Window',legacy:(Browser.Engine.trident)?null:window.Window,initialize:function(win){$uid(win);if(!win.Element){win.Element=$empty;if(Browser.Engine.webkit)win.document.createElement("iframe");win.Element.prototype=(Browser.Engine.webkit)?window["[[DOMElement.prototype]]"]:{}}win.document.window=win;return $extend(win,Window.Prototype)},afterImplement:function(property,value){window[property]=Window.Prototype[property]=value}});Window.Prototype={$family:{name:'window'}};new Window(window);var Document=new Native({name:'Document',legacy:(Browser.Engine.trident)?null:window.Document,initialize:function(doc){$uid(doc);doc.head=doc.getElementsByTagName('head')[0];doc.html=doc.getElementsByTagName('html')[0];if(Browser.Engine.trident&&Browser.Engine.version<=4)$try(function(){doc.execCommand("BackgroundImageCache",false,true)});if(Browser.Engine.trident)doc.window.attachEvent('onunload',function(){doc.window.detachEvent('onunload',arguments.callee);doc.head=doc.html=doc.window=null});return $extend(doc,Document.Prototype)},afterImplement:function(property,value){document[property]=Document.Prototype[property]=value}});Document.Prototype={$family:{name:'document'}};new Document(document);Array.implement({every:function(fn,bind){for(var i=0,l=this.length;i<l;i++){if(!fn.call(bind,this[i],i,this))return false}return true},filter:function(fn,bind){var results=[];for(var i=0,l=this.length;i<l;i++){if(fn.call(bind,this[i],i,this))results.push(this[i])}return results},clean:function(){return this.filter($defined)},indexOf:function(item,from){var len=this.length;for(var i=(from<0)?Math.max(0,len+from):from||0;i<len;i++){if(this[i]===item)return i}return-1},map:function(fn,bind){var results=[];for(var i=0,l=this.length;i<l;i++)results[i]=fn.call(bind,this[i],i,this);return results},some:function(fn,bind){for(var i=0,l=this.length;i<l;i++){if(fn.call(bind,this[i],i,this))return true}return false},associate:function(keys){var obj={},length=Math.min(this.length,keys.length);for(var i=0;i<length;i++)obj[keys[i]]=this[i];return obj},link:function(object){var result={};for(var i=0,l=this.length;i<l;i++){for(var key in object){if(object[key](this[i])){result[key]=this[i];delete object[key];break}}}return result},contains:function(item,from){return this.indexOf(item,from)!=-1},extend:function(array){for(var i=0,j=array.length;i<j;i++)this.push(array[i]);return this},getLast:function(){return(this.length)?this[this.length-1]:null},getRandom:function(){return(this.length)?this[$random(0,this.length-1)]:null},include:function(item){if(!this.contains(item))this.push(item);return this},combine:function(array){for(var i=0,l=array.length;i<l;i++)this.include(array[i]);return this},erase:function(item){for(var i=this.length;i--;i){if(this[i]===item)this.splice(i,1)}return this},empty:function(){this.length=0;return this},flatten:function(){var array=[];for(var i=0,l=this.length;i<l;i++){var type=$type(this[i]);if(!type)continue;array=array.concat((type=='array'||type=='collection'||type=='arguments')?Array.flatten(this[i]):this[i])}return array},hexToRgb:function(array){if(this.length!=3)return null;var rgb=this.map(function(value){if(value.length==1)value+=value;return value.toInt(16)});return(array)?rgb:'rgb('+rgb+')'},rgbToHex:function(array){if(this.length<3)return null;if(this.length==4&&this[3]==0&&!array)return'transparent';var hex=[];for(var i=0;i<3;i++){var bit=(this[i]-0).toString(16);hex.push((bit.length==1)?'0'+bit:bit)}return(array)?hex:'#'+hex.join('')}});Function.implement({extend:function(properties){for(var property in properties)this[property]=properties[property];return this},create:function(options){var self=this;options=options||{};return function(event){var args=options.arguments;args=(args!=undefined)?$splat(args):Array.slice(arguments,(options.event)?1:0);if(options.event)args=[event||window.event].extend(args);var returns=function(){return self.apply(options.bind||null,args)};if(options.delay)return setTimeout(returns,options.delay);if(options.periodical)return setInterval(returns,options.periodical);if(options.attempt)return $try(returns);return returns()}},run:function(args,bind){return this.apply(bind,$splat(args))},pass:function(args,bind){return this.create({bind:bind,arguments:args})},bind:function(bind,args){return this.create({bind:bind,arguments:args})},bindWithEvent:function(bind,args){return this.create({bind:bind,arguments:args,event:true})},attempt:function(args,bind){return this.create({bind:bind,arguments:args,attempt:true})()},delay:function(delay,bind,args){return this.create({bind:bind,arguments:args,delay:delay})()},periodical:function(periodical,bind,args){return this.create({bind:bind,arguments:args,periodical:periodical})()}});Number.implement({limit:function(min,max){return Math.min(max,Math.max(min,this))},round:function(precision){precision=Math.pow(10,precision||0);return Math.round(this*precision)/precision},times:function(fn,bind){for(var i=0;i<this;i++)fn.call(bind,i,this)},toFloat:function(){return parseFloat(this)},toInt:function(base){return parseInt(this,base||10)}});Number.alias('times','each');(function(math){var methods={};math.each(function(name){if(!Number[name])methods[name]=function(){return Math[name].apply(null,[this].concat($A(arguments)))}});Number.implement(methods)})(['abs','acos','asin','atan','atan2','ceil','cos','exp','floor','log','max','min','pow','sin','sqrt','tan']);String.implement({test:function(regex,params){return((typeof regex=='string')?new RegExp(regex,params):regex).test(this)},contains:function(string,separator){return(separator)?(separator+this+separator).indexOf(separator+string+separator)>-1:this.indexOf(string)>-1},trim:function(){return this.replace(/^\s+|\s+$/g,'')},clean:function(){return this.replace(/\s+/g,' ').trim()},camelCase:function(){return this.replace(/-\D/g,function(match){return match.charAt(1).toUpperCase()})},hyphenate:function(){return this.replace(/[A-Z]/g,function(match){return('-'+match.charAt(0).toLowerCase())})},capitalize:function(){return this.replace(/\b[a-z]/g,function(match){return match.toUpperCase()})},escapeRegExp:function(){return this.replace(/([-.*+?^${}()|[\]\/\\])/g,'\\$1')},toInt:function(base){return parseInt(this,base||10)},toFloat:function(){return parseFloat(this)},hexToRgb:function(array){var hex=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);return(hex)?hex.slice(1).hexToRgb(array):null},rgbToHex:function(array){var rgb=this.match(/\d{1,3}/g);return(rgb)?rgb.rgbToHex(array):null},stripScripts:function(option){var scripts='';var text=this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,function(){scripts+=arguments[1]+'\n';return''});if(option===true)$exec(scripts);else if($type(option)=='function')option(scripts,text);return text},substitute:function(object,regexp){return this.replace(regexp||(/\\?\{([^{}]+)\}/g),function(match,name){if(match.charAt(0)=='\\')return match.slice(1);return(object[name]!=undefined)?object[name]:''})}});Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function(value){for(var key in this){if(this.hasOwnProperty(key)&&this[key]===value)return key}return null},hasValue:function(value){return(Hash.keyOf(this,value)!==null)},extend:function(properties){Hash.each(properties||{},function(value,key){Hash.set(this,key,value)},this);return this},combine:function(properties){Hash.each(properties||{},function(value,key){Hash.include(this,key,value)},this);return this},erase:function(key){if(this.hasOwnProperty(key))delete this[key];return this},get:function(key){return(this.hasOwnProperty(key))?this[key]:null},set:function(key,value){if(!this[key]||this.hasOwnProperty(key))this[key]=value;return this},empty:function(){Hash.each(this,function(value,key){delete this[key]},this);return this},include:function(key,value){if(this[key]==undefined)this[key]=value;return this},map:function(fn,bind){var results=new Hash;Hash.each(this,function(value,key){results.set(key,fn.call(bind,value,key,this))},this);return results},filter:function(fn,bind){var results=new Hash;Hash.each(this,function(value,key){if(fn.call(bind,value,key,this))results.set(key,value)},this);return results},every:function(fn,bind){for(var key in this){if(this.hasOwnProperty(key)&&!fn.call(bind,this[key],key))return false}return true},some:function(fn,bind){for(var key in this){if(this.hasOwnProperty(key)&&fn.call(bind,this[key],key))return true}return false},getKeys:function(){var keys=[];Hash.each(this,function(value,key){keys.push(key)});return keys},getValues:function(){var values=[];Hash.each(this,function(value){values.push(value)});return values},toQueryString:function(base){var queryString=[];Hash.each(this,function(value,key){if(base)key=base+'['+key+']';var result;switch($type(value)){case'object':result=Hash.toQueryString(value,key);break;case'array':var qs={};value.each(function(val,i){qs[i]=val});result=Hash.toQueryString(qs,key);break;default:result=key+'='+encodeURIComponent(value)}if(value!=undefined)queryString.push(result)});return queryString.join('&')}});Hash.alias({keyOf:'indexOf',hasValue:'contains'});var Event=new Native({name:'Event',initialize:function(event,win){win=win||window;var doc=win.document;event=event||win.event;if(event.$extended)return event;this.$extended=true;var type=event.type;var target=event.target||event.srcElement;while(target&&target.nodeType==3)target=target.parentNode;if(type.test(/key/)){var code=event.which||event.keyCode;var key=Event.Keys.keyOf(code);if(type=='keydown'){var fKey=code-111;if(fKey>0&&fKey<13)key='f'+fKey}key=key||String.fromCharCode(code).toLowerCase()}else if(type.match(/(click|mouse|menu)/i)){doc=(!doc.compatMode||doc.compatMode=='CSS1Compat')?doc.html:doc.body;var page={x:event.pageX||event.clientX+doc.scrollLeft,y:event.pageY||event.clientY+doc.scrollTop};var client={x:(event.pageX)?event.pageX-win.pageXOffset:event.clientX,y:(event.pageY)?event.pageY-win.pageYOffset:event.clientY};if(type.match(/DOMMouseScroll|mousewheel/)){var wheel=(event.wheelDelta)?event.wheelDelta/120:-(event.detail||0)/3}var rightClick=(event.which==3)||(event.button==2);var related=null;if(type.match(/over|out/)){switch(type){case'mouseover':related=event.relatedTarget||event.fromElement;break;case'mouseout':related=event.relatedTarget||event.toElement}if(!(function(){while(related&&related.nodeType==3)related=related.parentNode;return true}).create({attempt:Browser.Engine.gecko})())related=false}}return $extend(this,{event:event,type:type,page:page,client:client,rightClick:rightClick,wheel:wheel,relatedTarget:related,target:target,code:code,key:key,shift:event.shiftKey,control:event.ctrlKey,alt:event.altKey,meta:event.metaKey})}});Event.Keys=new Hash({'enter':13,'up':38,'down':40,'left':37,'right':39,'esc':27,'space':32,'backspace':8,'tab':9,'delete':46});Event.implement({stop:function(){return this.stopPropagation().preventDefault()},stopPropagation:function(){if(this.event.stopPropagation)this.event.stopPropagation();else this.event.cancelBubble=true;return this},preventDefault:function(){if(this.event.preventDefault)this.event.preventDefault();else this.event.returnValue=false;return this}});function Class(params){if(params instanceof Function)params={initialize:params};var newClass=function(){Object.reset(this);if(newClass._prototyping)return this;this._current=$empty;var value=(this.initialize)?this.initialize.apply(this,arguments):this;delete this._current;delete this.caller;return value}.extend(this);newClass.implement(params);newClass.constructor=Class;newClass.prototype.constructor=newClass;return newClass};Function.prototype.protect=function(){this._protected=true;return this};Object.reset=function(object,key){if(key==null){for(var p in object)Object.reset(object,p);return object}delete object[key];switch($type(object[key])){case'object':var F=function(){};F.prototype=object[key];var i=new F;object[key]=Object.reset(i);break;case'array':object[key]=$unlink(object[key]);break}return object};new Native({name:'Class',initialize:Class}).extend({instantiate:function(F){F._prototyping=true;var proto=new F;delete F._prototyping;return proto},wrap:function(self,key,method){if(method._origin)method=method._origin;return function(){if(method._protected&&this._current==null)throw new Error('The method "'+key+'" cannot be called.');var caller=this.caller,current=this._current;this.caller=current;this._current=arguments.callee;var result=method.apply(this,arguments);this._current=current;this.caller=caller;return result}.extend({_owner:self,_origin:method,_name:key})}});Class.implement({implement:function(key,value){if($type(key)=='object'){for(var p in key)this.implement(p,key[p]);return this}var mutator=Class.Mutators[key];if(mutator){value=mutator.call(this,value);if(value==null)return this}var proto=this.prototype;switch($type(value)){case'function':if(value._hidden)return this;proto[key]=Class.wrap(this,key,value);break;case'object':var previous=proto[key];if($type(previous)=='object')$mixin(previous,value);else proto[key]=$unlink(value);break;case'array':proto[key]=$unlink(value);break;default:proto[key]=value}return this}});Class.Mutators={Extends:function(parent){this.parent=parent;this.prototype=Class.instantiate(parent);this.implement('parent',function(){var name=this.caller._name,previous=this.caller._owner.parent.prototype[name];if(!previous)throw new Error('The method "'+name+'" has no parent.');return previous.apply(this,arguments)}.protect())},Implements:function(items){$splat(items).each(function(item){if(item instanceof Function)item=Class.instantiate(item);this.implement(item)},this)}};var Chain=new Class({$chain:[],chain:function(){this.$chain.extend(Array.flatten(arguments));return this},callChain:function(){return(this.$chain.length)?this.$chain.shift().apply(this,arguments):false},clearChain:function(){this.$chain.empty();return this}});var Events=new Class({$events:{},addEvent:function(type,fn,internal){type=Events.removeOn(type);if(fn!=$empty){this.$events[type]=this.$events[type]||[];this.$events[type].include(fn);if(internal)fn.internal=true}return this},addEvents:function(events){for(var type in events)this.addEvent(type,events[type]);return this},fireEvent:function(type,args,delay){type=Events.removeOn(type);if(!this.$events||!this.$events[type])return this;this.$events[type].each(function(fn){fn.create({'bind':this,'delay':delay,'arguments':args})()},this);return this},removeEvent:function(type,fn){type=Events.removeOn(type);if(!this.$events[type])return this;if(!fn.internal)this.$events[type].erase(fn);return this},removeEvents:function(events){var type;if($type(events)=='object'){for(type in events)this.removeEvent(type,events[type]);return this}if(events)events=Events.removeOn(events);for(type in this.$events){if(events&&events!=type)continue;var fns=this.$events[type];for(var i=fns.length;i--;i)this.removeEvent(type,fns[i])}return this}});Events.removeOn=function(string){return string.replace(/^on([A-Z])/,function(full,first){return first.toLowerCase()})};var Options=new Class({setOptions:function(){this.options=$merge.run([this.options].extend(arguments));if(!this.addEvent)return this;for(var option in this.options){if($type(this.options[option])!='function'||!(/^on[A-Z]/).test(option))continue;this.addEvent(option,this.options[option]);delete this.options[option]}return this}});var Element=new Native({name:'Element',legacy:window.Element,initialize:function(tag,props){var konstructor=Element.Constructors.get(tag);if(konstructor)return konstructor(props);if(typeof tag=='string')return document.newElement(tag,props);return document.id(tag).set(props)},afterImplement:function(key,value){Element.Prototype[key]=value;if(Array[key])return;Elements.implement(key,function(){var items=[],elements=true;for(var i=0,j=this.length;i<j;i++){var returns=this[i][key].apply(this[i],arguments);items.push(returns);if(elements)elements=($type(returns)=='element')}return(elements)?new Elements(items):items})}});Element.Prototype={$family:{name:'element'}};Element.Constructors=new Hash;var IFrame=new Native({name:'IFrame',generics:false,initialize:function(){var params=Array.link(arguments,{properties:Object.type,iframe:$defined});var props=params.properties||{};var iframe=document.id(params.iframe);var onload=props.onload||$empty;delete props.onload;props.id=props.name=$pick(props.id,props.name,iframe?(iframe.id||iframe.name):'IFrame_'+$time());iframe=new Element(iframe||'iframe',props);var onFrameLoad=function(){var host=$try(function(){return iframe.contentWindow.location.host});if(!host||host==window.location.host){var win=new Window(iframe.contentWindow);new Document(iframe.contentWindow.document);$extend(win.Element.prototype,Element.Prototype)}onload.call(iframe.contentWindow,iframe.contentWindow.document)};var contentWindow=$try(function(){return iframe.contentWindow});((contentWindow&&contentWindow.document.body)||window.frames[props.id])?onFrameLoad():iframe.addListener('load',onFrameLoad);return iframe}});var Elements=new Native({initialize:function(elements,options){options=$extend({ddup:true,cash:true},options);elements=elements||[];if(options.ddup||options.cash){var uniques={},returned=[];for(var i=0,l=elements.length;i<l;i++){var el=document.id(elements[i],!options.cash);if(options.ddup){if(uniques[el.uid])continue;uniques[el.uid]=true}returned.push(el)}elements=returned}return(options.cash)?$extend(elements,this):elements}});Elements.implement({filter:function(filter,bind){if(!filter)return this;return new Elements(Array.filter(this,(typeof filter=='string')?function(item){return item.match(filter)}:filter,bind))}});Document.implement({newElement:function(tag,props){if(Browser.Engine.trident&&props){['name','type','checked'].each(function(attribute){if(!props[attribute])return;tag+=' '+attribute+'="'+props[attribute]+'"';if(attribute!='checked')delete props[attribute]});tag='<'+tag+'>'}return document.id(this.createElement(tag)).set(props)},newTextNode:function(text){return this.createTextNode(text)},getDocument:function(){return this},getWindow:function(){return this.window},id:(function(){var types={string:function(id,nocash,doc){id=doc.getElementById(id);return(id)?types.element(id,nocash):null},element:function(el,nocash){$uid(el);if(!nocash&&!el.$family&&!(/^object|embed$/i).test(el.tagName)){var proto=Element.Prototype;for(var p in proto)el[p]=proto[p]};return el},object:function(obj,nocash,doc){if(obj.toElement)return types.element(obj.toElement(doc),nocash);return null}};types.textnode=types.whitespace=types.window=types.document=$arguments(0);return function(el,nocash,doc){if(el&&el.$family&&el.uid)return el;var type=$type(el);return(types[type])?types[type](el,nocash,doc||document):null}})()});if(window.$==null)Window.implement({$:function(el,nc){return document.id(el,nc,this.document)}});Window.implement({$$:function(selector){if(arguments.length==1&&typeof selector=='string')return this.document.getElements(selector);var elements=[];var args=Array.flatten(arguments);for(var i=0,l=args.length;i<l;i++){var item=args[i];switch($type(item)){case'element':elements.push(item);break;case'string':elements.extend(this.document.getElements(item,true))}}return new Elements(elements)},getDocument:function(){return this.document},getWindow:function(){return this}});Native.implement([Element,Document],{getElement:function(selector,nocash){return document.id(this.getElements(selector,true)[0]||null,nocash)},getElements:function(tags,nocash){tags=tags.split(',');var elements=[];var ddup=(tags.length>1);tags.each(function(tag){var partial=this.getElementsByTagName(tag.trim());(ddup)?elements.extend(partial):elements=partial},this);return new Elements(elements,{ddup:ddup,cash:!nocash})}});(function(){var collected={},storage={};var props={input:'checked',option:'selected',textarea:(Browser.Engine.webkit&&Browser.Engine.version<420)?'innerHTML':'value'};var get=function(uid){return(storage[uid]||(storage[uid]={}))};var clean=function(item,retain){if(!item)return;var uid=item.uid;if(Browser.Engine.trident){if(item.clearAttributes){var clone=retain&&item.cloneNode(false);item.clearAttributes();if(clone)item.mergeAttributes(clone)}else if(item.removeEvents){item.removeEvents()}if((/object/i).test(item.tagName)){for(var p in item){if(typeof item[p]=='function')item[p]=$empty}Element.dispose(item)}}if(!uid)return;collected[uid]=storage[uid]=null};var purge=function(){Hash.each(collected,clean);if(Browser.Engine.trident)$A(document.getElementsByTagName('object')).each(clean);if(window.CollectGarbage)CollectGarbage();collected=storage=null};var walk=function(element,walk,start,match,all,nocash){var el=element[start||walk];var elements=[];while(el){if(el.nodeType==1&&(!match||Element.match(el,match))){if(!all)return document.id(el,nocash);elements.push(el)}el=el[walk]}return(all)?new Elements(elements,{ddup:false,cash:!nocash}):null};var attributes={'html':'innerHTML','class':'className','for':'htmlFor','defaultValue':'defaultValue','text':(Browser.Engine.trident||(Browser.Engine.webkit&&Browser.Engine.version<420))?'innerText':'textContent'};var bools=['compact','nowrap','ismap','declare','noshade','checked','disabled','readonly','multiple','selected','noresize','defer'];var camels=['value','type','defaultValue','accessKey','cellPadding','cellSpacing','colSpan','frameBorder','maxLength','readOnly','rowSpan','tabIndex','useMap'];bools=bools.associate(bools);Hash.extend(attributes,bools);Hash.extend(attributes,camels.associate(camels.map(String.toLowerCase)));var inserters={before:function(context,element){if(element.parentNode)element.parentNode.insertBefore(context,element)},after:function(context,element){if(!element.parentNode)return;var next=element.nextSibling;(next)?element.parentNode.insertBefore(context,next):element.parentNode.appendChild(context)},bottom:function(context,element){element.appendChild(context)},top:function(context,element){var first=element.firstChild;(first)?element.insertBefore(context,first):element.appendChild(context)}};inserters.inside=inserters.bottom;Hash.each(inserters,function(inserter,where){where=where.capitalize();Element.implement('inject'+where,function(el){inserter(this,document.id(el,true));return this});Element.implement('grab'+where,function(el){inserter(document.id(el,true),this);return this})});Element.implement({set:function(prop,value){switch($type(prop)){case'object':for(var p in prop)this.set(p,prop[p]);break;case'string':var property=Element.Properties.get(prop);(property&&property.set)?property.set.apply(this,Array.slice(arguments,1)):this.setProperty(prop,value)}return this},get:function(prop){var property=Element.Properties.get(prop);return(property&&property.get)?property.get.apply(this,Array.slice(arguments,1)):this.getProperty(prop)},erase:function(prop){var property=Element.Properties.get(prop);(property&&property.erase)?property.erase.apply(this):this.removeProperty(prop);return this},setProperty:function(attribute,value){var key=attributes[attribute];if(value==undefined)return this.removeProperty(attribute);if(key&&bools[attribute])value=!!value;(key)?this[key]=value:this.setAttribute(attribute,''+value);return this},setProperties:function(attributes){for(var attribute in attributes)this.setProperty(attribute,attributes[attribute]);return this},getProperty:function(attribute){var key=attributes[attribute];var value=(key)?this[key]:this.getAttribute(attribute,2);return(bools[attribute])?!!value:(key)?value:value||null},getProperties:function(){var args=$A(arguments);return args.map(this.getProperty,this).associate(args)},removeProperty:function(attribute){var key=attributes[attribute];(key)?this[key]=(key&&bools[attribute])?false:'':this.removeAttribute(attribute);return this},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this},hasClass:function(className){return this.className.contains(className,' ')},addClass:function(className){if(!this.hasClass(className))this.className=(this.className+' '+className).clean();return this},removeClass:function(className){this.className=this.className.replace(new RegExp('(^|\\s)'+className+'(?:\\s|$)'),'$1');return this},toggleClass:function(className){return this.hasClass(className)?this.removeClass(className):this.addClass(className)},adopt:function(){Array.flatten(arguments).each(function(element){element=document.id(element,true);if(element)this.appendChild(element)},this);return this},appendText:function(text,where){return this.grab(this.getDocument().newTextNode(text),where)},grab:function(el,where){inserters[where||'bottom'](document.id(el,true),this);return this},inject:function(el,where){inserters[where||'bottom'](this,document.id(el,true));return this},replaces:function(el){el=document.id(el,true);el.parentNode.replaceChild(this,el);return this},wraps:function(el,where){el=document.id(el,true);return this.replaces(el).grab(el,where)},getPrevious:function(match,nocash){return walk(this,'previousSibling',null,match,false,nocash)},getAllPrevious:function(match,nocash){return walk(this,'previousSibling',null,match,true,nocash)},getNext:function(match,nocash){return walk(this,'nextSibling',null,match,false,nocash)},getAllNext:function(match,nocash){return walk(this,'nextSibling',null,match,true,nocash)},getFirst:function(match,nocash){return walk(this,'nextSibling','firstChild',match,false,nocash)},getLast:function(match,nocash){return walk(this,'previousSibling','lastChild',match,false,nocash)},getParent:function(match,nocash){return walk(this,'parentNode',null,match,false,nocash)},getParents:function(match,nocash){return walk(this,'parentNode',null,match,true,nocash)},getSiblings:function(match,nocash){return this.getParent().getChildren(match,nocash).erase(this)},getChildren:function(match,nocash){return walk(this,'nextSibling','firstChild',match,true,nocash)},getWindow:function(){return this.ownerDocument.window},getDocument:function(){return this.ownerDocument},getElementById:function(id,nocash){var el=this.ownerDocument.getElementById(id);if(!el)return null;for(var parent=el.parentNode;parent!=this;parent=parent.parentNode){if(!parent)return null}return document.id(el,nocash)},getSelected:function(){return new Elements($A(this.options).filter(function(option){return option.selected}))},getComputedStyle:function(property){if(this.currentStyle)return this.currentStyle[property.camelCase()];var computed=this.getDocument().defaultView.getComputedStyle(this,null);return(computed)?computed.getPropertyValue([property.hyphenate()]):null},toQueryString:function(){var queryString=[];this.getElements('input, select, textarea',true).each(function(el){if(!el.name||el.disabled||el.type=='submit'||el.type=='reset'||el.type=='file')return;var value=(el.tagName.toLowerCase()=='select')?Element.getSelected(el).map(function(opt){return opt.value}):((el.type=='radio'||el.type=='checkbox')&&!el.checked)?null:el.value;$splat(value).each(function(val){if(typeof val!='undefined')queryString.push(el.name+'='+encodeURIComponent(val))})});return queryString.join('&')},clone:function(contents,keepid){contents=contents!==false;var clone=this.cloneNode(contents);var clean=function(node,element){if(!keepid)node.removeAttribute('id');if(Browser.Engine.trident){node.clearAttributes();node.mergeAttributes(element);node.removeAttribute('uid');if(node.options){var no=node.options,eo=element.options;for(var j=no.length;j--;)no[j].selected=eo[j].selected}}var prop=props[element.tagName.toLowerCase()];if(prop&&element[prop])node[prop]=element[prop]};if(contents){var ce=clone.getElementsByTagName('*'),te=this.getElementsByTagName('*');for(var i=ce.length;i--;)clean(ce[i],te[i])}clean(clone,this);return document.id(clone)},destroy:function(){Element.empty(this);Element.dispose(this);clean(this,true);return null},empty:function(){$A(this.childNodes).each(function(node){Element.destroy(node)});return this},dispose:function(){return(this.parentNode)?this.parentNode.removeChild(this):this},hasChild:function(el){el=document.id(el,true);if(!el)return false;if(Browser.Engine.webkit&&Browser.Engine.version<420)return $A(this.getElementsByTagName(el.tagName)).contains(el);return(this.contains)?(this!=el&&this.contains(el)):!!(this.compareDocumentPosition(el)&16)},match:function(tag){return(!tag||(tag==this)||(Element.get(this,'tag')==tag))}});Native.implement([Element,Window,Document],{addListener:function(type,fn){if(type=='unload'){var old=fn,self=this;fn=function(){self.removeListener('unload',fn);old()}}else{collected[this.uid]=this}if(this.addEventListener)this.addEventListener(type,fn,false);else this.attachEvent('on'+type,fn);return this},removeListener:function(type,fn){if(this.removeEventListener)this.removeEventListener(type,fn,false);else this.detachEvent('on'+type,fn);return this},retrieve:function(property,dflt){var storage=get(this.uid),prop=storage[property];if(dflt!=undefined&&prop==undefined)prop=storage[property]=dflt;return $pick(prop)},store:function(property,value){var storage=get(this.uid);storage[property]=value;return this},eliminate:function(property){var storage=get(this.uid);delete storage[property];return this}});window.addListener('unload',purge)})();Element.Properties=new Hash;Element.Properties.style={set:function(style){this.style.cssText=style},get:function(){return this.style.cssText},erase:function(){this.style.cssText=''}};Element.Properties.tag={get:function(){return this.tagName.toLowerCase()}};Element.Properties.html=(function(){var wrapper=document.createElement('div');var translations={table:[1,'<table>','</table>'],select:[1,'<select>','</select>'],tbody:[2,'<table><tbody>','</tbody></table>'],tr:[3,'<table><tbody><tr>','</tr></tbody></table>']};translations.thead=translations.tfoot=translations.tbody;var html={set:function(){var html=Array.flatten(arguments).join('');var wrap=Browser.Engine.trident&&translations[this.get('tag')];if(wrap){var first=wrapper;first.innerHTML=wrap[1]+html+wrap[2];for(var i=wrap[0];i--;)first=first.firstChild;this.empty().adopt(first.childNodes)}else{this.innerHTML=html}}};html.erase=html.set;return html})();if(Browser.Engine.webkit&&Browser.Engine.version<420)Element.Properties.text={get:function(){if(this.innerText)return this.innerText;var temp=this.ownerDocument.newElement('div',{html:this.innerHTML}).inject(this.ownerDocument.body);var text=temp.innerText;temp.destroy();return text}};Element.Properties.events={set:function(events){this.addEvents(events)}};Native.implement([Element,Window,Document],{addEvent:function(type,fn){var events=this.retrieve('events',{});events[type]=events[type]||{'keys':[],'values':[]};if(events[type].keys.contains(fn))return this;events[type].keys.push(fn);var realType=type,custom=Element.Events.get(type),condition=fn,self=this;if(custom){if(custom.onAdd)custom.onAdd.call(this,fn);if(custom.condition){condition=function(event){if(custom.condition.call(this,event))return fn.call(this,event);return true}}realType=custom.base||realType}var defn=function(){return fn.call(self)};var nativeEvent=Element.NativeEvents[realType];if(nativeEvent){if(nativeEvent==2){defn=function(event){event=new Event(event,self.getWindow());if(condition.call(self,event)===false)event.stop()}}this.addListener(realType,defn)}events[type].values.push(defn);return this},removeEvent:function(type,fn){var events=this.retrieve('events');if(!events||!events[type])return this;var pos=events[type].keys.indexOf(fn);if(pos==-1)return this;events[type].keys.splice(pos,1);var value=events[type].values.splice(pos,1)[0];var custom=Element.Events.get(type);if(custom){if(custom.onRemove)custom.onRemove.call(this,fn);type=custom.base||type}return(Element.NativeEvents[type])?this.removeListener(type,value):this},addEvents:function(events){for(var event in events)this.addEvent(event,events[event]);return this},removeEvents:function(events){var type;if($type(events)=='object'){for(type in events)this.removeEvent(type,events[type]);return this}var attached=this.retrieve('events');if(!attached)return this;if(!events){for(type in attached)this.removeEvents(type);this.eliminate('events')}else if(attached[events]){while(attached[events].keys[0])this.removeEvent(events,attached[events].keys[0]);attached[events]=null}return this},fireEvent:function(type,args,delay){var events=this.retrieve('events');if(!events||!events[type])return this;events[type].keys.each(function(fn){fn.create({'bind':this,'delay':delay,'arguments':args})()},this);return this},cloneEvents:function(from,type){from=document.id(from);var fevents=from.retrieve('events');if(!fevents)return this;if(!type){for(var evType in fevents)this.cloneEvents(from,evType)}else if(fevents[type]){fevents[type].keys.each(function(fn){this.addEvent(type,fn)},this)}return this}});Element.NativeEvents={click:2,dblclick:2,mouseup:2,mousedown:2,contextmenu:2,mousewheel:2,DOMMouseScroll:2,mouseover:2,mouseout:2,mousemove:2,selectstart:2,selectend:2,keydown:2,keypress:2,keyup:2,focus:2,blur:2,change:2,reset:2,select:2,submit:2,load:1,unload:1,beforeunload:2,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1};(function(){var $check=function(event){var related=event.relatedTarget;if(related==undefined)return true;if(related===false)return false;return($type(this)!='document'&&related!=this&&related.prefix!='xul'&&!this.hasChild(related))};Element.Events=new Hash({mouseenter:{base:'mouseover',condition:$check},mouseleave:{base:'mouseout',condition:$check},mousewheel:{base:(Browser.Engine.gecko)?'DOMMouseScroll':'mousewheel'}})})();Element.Properties.styles={set:function(styles){this.setStyles(styles)}};Element.Properties.opacity={set:function(opacity,novisibility){if(!novisibility){if(opacity==0){if(this.style.visibility!='hidden')this.style.visibility='hidden'}else{if(this.style.visibility!='visible')this.style.visibility='visible'}}if(!this.currentStyle||!this.currentStyle.hasLayout)this.style.zoom=1;if(Browser.Engine.trident)this.style.filter=(opacity==1)?'':'alpha(opacity='+opacity*100+')';this.style.opacity=opacity;this.store('opacity',opacity)},get:function(){return this.retrieve('opacity',1)}};Element.implement({setOpacity:function(value){return this.set('opacity',value,true)},getOpacity:function(){return this.get('opacity')},setStyle:function(property,value){switch(property){case'opacity':return this.set('opacity',parseFloat(value));case'float':property=(Browser.Engine.trident)?'styleFloat':'cssFloat'}property=property.camelCase();if($type(value)!='string'){var map=(Element.Styles.get(property)||'@').split(' ');value=$splat(value).map(function(val,i){if(!map[i])return'';return($type(val)=='number')?map[i].replace('@',Math.round(val)):val}).join(' ')}else if(value==String(Number(value))){value=Math.round(value)}this.style[property]=value;return this},getStyle:function(property){switch(property){case'opacity':return this.get('opacity');case'float':property=(Browser.Engine.trident)?'styleFloat':'cssFloat'}property=property.camelCase();var result=this.style[property];if(!$chk(result)){result=[];for(var style in Element.ShortStyles){if(property!=style)continue;for(var s in Element.ShortStyles[style])result.push(this.getStyle(s));return result.join(' ')}result=this.getComputedStyle(property)}if(result){result=String(result);var color=result.match(/rgba?\([\d\s,]+\)/);if(color)result=result.replace(color[0],color[0].rgbToHex())}if(Browser.Engine.presto||(Browser.Engine.trident&&!$chk(parseInt(result,10)))){if(property.test(/^(height|width)$/)){var values=(property=='width')?['left','right']:['top','bottom'],size=0;values.each(function(value){size+=this.getStyle('border-'+value+'-width').toInt()+this.getStyle('padding-'+value).toInt()},this);return this['offset'+property.capitalize()]-size+'px'}if((Browser.Engine.presto)&&String(result).test('px'))return result;if(property.test(/(border(.+)Width|margin|padding)/))return'0px'}return result},setStyles:function(styles){for(var style in styles)this.setStyle(style,styles[style]);return this},getStyles:function(){var result={};Array.flatten(arguments).each(function(key){result[key]=this.getStyle(key)},this);return result}});Element.Styles=new Hash({left:'@px',top:'@px',bottom:'@px',right:'@px',width:'@px',height:'@px',maxWidth:'@px',maxHeight:'@px',minWidth:'@px',minHeight:'@px',backgroundColor:'rgb(@, @, @)',backgroundPosition:'@px @px',color:'rgb(@, @, @)',fontSize:'@px',letterSpacing:'@px',lineHeight:'@px',clip:'rect(@px @px @px @px)',margin:'@px @px @px @px',padding:'@px @px @px @px',border:'@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)',borderWidth:'@px @px @px @px',borderStyle:'@ @ @ @',borderColor:'rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)',zIndex:'@','zoom':'@',fontWeight:'@',textIndent:'@px',opacity:'@'});Element.ShortStyles={margin:{},padding:{},border:{},borderWidth:{},borderStyle:{},borderColor:{}};['Top','Right','Bottom','Left'].each(function(direction){var Short=Element.ShortStyles;var All=Element.Styles;['margin','padding'].each(function(style){var sd=style+direction;Short[style][sd]=All[sd]='@px'});var bd='border'+direction;Short.border[bd]=All[bd]='@px @ rgb(@, @, @)';var bdw=bd+'Width',bds=bd+'Style',bdc=bd+'Color';Short[bd]={};Short.borderWidth[bdw]=Short[bd][bdw]=All[bdw]='@px';Short.borderStyle[bds]=Short[bd][bds]=All[bds]='@';Short.borderColor[bdc]=Short[bd][bdc]=All[bdc]='rgb(@, @, @)'});(function(){Element.implement({scrollTo:function(x,y){if(isBody(this)){this.getWindow().scrollTo(x,y)}else{this.scrollLeft=x;this.scrollTop=y}return this},getSize:function(){if(isBody(this))return this.getWindow().getSize();return{x:this.offsetWidth,y:this.offsetHeight}},getScrollSize:function(){if(isBody(this))return this.getWindow().getScrollSize();return{x:this.scrollWidth,y:this.scrollHeight}},getScroll:function(){if(isBody(this))return this.getWindow().getScroll();return{x:this.scrollLeft,y:this.scrollTop}},getScrolls:function(){var element=this,position={x:0,y:0};while(element&&!isBody(element)){position.x+=element.scrollLeft;position.y+=element.scrollTop;element=element.parentNode}return position},getOffsetParent:function(){var element=this;if(isBody(element))return null;if(!Browser.Engine.trident)return element.offsetParent;while((element=element.parentNode)&&!isBody(element)){if(styleString(element,'position')!='static')return element}return null},getOffsets:function(){if(this.getBoundingClientRect){var bound=this.getBoundingClientRect(),html=document.id(this.getDocument().documentElement),scroll=html.getScroll(),isFixed=(styleString(this,'position')=='fixed');return{x:parseInt(bound.left,10)+((isFixed)?0:scroll.x)-html.clientLeft,y:parseInt(bound.top,10)+((isFixed)?0:scroll.y)-html.clientTop}}var element=this,position={x:0,y:0};if(isBody(this))return position;while(element&&!isBody(element)){position.x+=element.offsetLeft;position.y+=element.offsetTop;if(Browser.Engine.gecko){if(!borderBox(element)){position.x+=leftBorder(element);position.y+=topBorder(element)}var parent=element.parentNode;if(parent&&styleString(parent,'overflow')!='visible'){position.x+=leftBorder(parent);position.y+=topBorder(parent)}}else if(element!=this&&Browser.Engine.webkit){position.x+=leftBorder(element);position.y+=topBorder(element)}element=element.offsetParent}if(Browser.Engine.gecko&&!borderBox(this)){position.x-=leftBorder(this);position.y-=topBorder(this)}return position},getPosition:function(relative){if(isBody(this))return{x:0,y:0};var offset=this.getOffsets(),scroll=this.getScrolls();var position={x:offset.x-scroll.x,y:offset.y-scroll.y};var relativePosition=(relative&&(relative=document.id(relative)))?relative.getPosition():{x:0,y:0};return{x:position.x-relativePosition.x,y:position.y-relativePosition.y}},getCoordinates:function(element){if(isBody(this))return this.getWindow().getCoordinates();var position=this.getPosition(element),size=this.getSize();var obj={left:position.x,top:position.y,width:size.x,height:size.y};obj.right=obj.left+obj.width;obj.bottom=obj.top+obj.height;return obj},computePosition:function(obj){return{left:obj.x-styleNumber(this,'margin-left'),top:obj.y-styleNumber(this,'margin-top')}},setPosition:function(obj){return this.setStyles(this.computePosition(obj))}});Native.implement([Document,Window],{getSize:function(){if(Browser.Engine.presto||Browser.Engine.webkit){var win=this.getWindow();return{x:win.innerWidth,y:win.innerHeight}}var doc=getCompatElement(this);return{x:doc.clientWidth,y:doc.clientHeight}},getScroll:function(){var win=this.getWindow(),doc=getCompatElement(this);return{x:win.pageXOffset||doc.scrollLeft,y:win.pageYOffset||doc.scrollTop}},getScrollSize:function(){var doc=getCompatElement(this),min=this.getSize();return{x:Math.max(doc.scrollWidth,min.x),y:Math.max(doc.scrollHeight,min.y)}},getPosition:function(){return{x:0,y:0}},getCoordinates:function(){var size=this.getSize();return{top:0,left:0,bottom:size.y,right:size.x,height:size.y,width:size.x}}});var styleString=Element.getComputedStyle;function styleNumber(element,style){return styleString(element,style).toInt()||0};function borderBox(element){return styleString(element,'-moz-box-sizing')=='border-box'};function topBorder(element){return styleNumber(element,'border-top-width')};function leftBorder(element){return styleNumber(element,'border-left-width')};function isBody(element){return(/^(?:body|html)$/i).test(element.tagName)};function getCompatElement(element){var doc=element.getDocument();return(!doc.compatMode||doc.compatMode=='CSS1Compat')?doc.html:doc.body}})();Element.alias('setPosition','position');Native.implement([Window,Document,Element],{getHeight:function(){return this.getSize().y},getWidth:function(){return this.getSize().x},getScrollTop:function(){return this.getScroll().y},getScrollLeft:function(){return this.getScroll().x},getScrollHeight:function(){return this.getScrollSize().y},getScrollWidth:function(){return this.getScrollSize().x},getTop:function(){return this.getPosition().y},getLeft:function(){return this.getPosition().x}});Native.implement([Document,Element],{getElements:function(expression,nocash){expression=expression.split(',');var items,local={};for(var i=0,l=expression.length;i<l;i++){var selector=expression[i],elements=Selectors.Utils.search(this,selector,local);if(i!=0&&elements.item)elements=$A(elements);items=(i==0)?elements:(items.item)?$A(items).concat(elements):items.concat(elements)}return new Elements(items,{ddup:(expression.length>1),cash:!nocash})}});Element.implement({match:function(selector){if(!selector||(selector==this))return true;var tagid=Selectors.Utils.parseTagAndID(selector);var tag=tagid[0],id=tagid[1];if(!Selectors.Filters.byID(this,id)||!Selectors.Filters.byTag(this,tag))return false;var parsed=Selectors.Utils.parseSelector(selector);return(parsed)?Selectors.Utils.filter(this,parsed,{}):true}});var Selectors={Cache:{nth:{},parsed:{}}};Selectors.RegExps={id:(/#([\w-]+)/),tag:(/^(\w+|\*)/),quick:(/^(\w+|\*)$/),splitter:(/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g),combined:(/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)(["']?)([^\4]*?)\4)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)};Selectors.Utils={chk:function(item,uniques){if(!uniques)return true;var uid=$uid(item);if(!uniques[uid])return uniques[uid]=true;return false},parseNthArgument:function(argument){if(Selectors.Cache.nth[argument])return Selectors.Cache.nth[argument];var parsed=argument.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);if(!parsed)return false;var inta=parseInt(parsed[1],10);var a=(inta||inta===0)?inta:1;var special=parsed[2]||false;var b=parseInt(parsed[3],10)||0;if(a!=0){b--;while(b<1)b+=a;while(b>=a)b-=a}else{a=b;special='index'}switch(special){case'n':parsed={a:a,b:b,special:'n'};break;case'odd':parsed={a:2,b:0,special:'n'};break;case'even':parsed={a:2,b:1,special:'n'};break;case'first':parsed={a:0,special:'index'};break;case'last':parsed={special:'last-child'};break;case'only':parsed={special:'only-child'};break;default:parsed={a:(a-1),special:'index'}}return Selectors.Cache.nth[argument]=parsed},parseSelector:function(selector){if(Selectors.Cache.parsed[selector])return Selectors.Cache.parsed[selector];var m,parsed={classes:[],pseudos:[],attributes:[]};while((m=Selectors.RegExps.combined.exec(selector))){var cn=m[1],an=m[2],ao=m[3],av=m[5],pn=m[6],pa=m[7];if(cn){parsed.classes.push(cn)}else if(pn){var parser=Selectors.Pseudo.get(pn);if(parser)parsed.pseudos.push({parser:parser,argument:pa});else parsed.attributes.push({name:pn,operator:'=',value:pa})}else if(an){parsed.attributes.push({name:an,operator:ao,value:av})}}if(!parsed.classes.length)delete parsed.classes;if(!parsed.attributes.length)delete parsed.attributes;if(!parsed.pseudos.length)delete parsed.pseudos;if(!parsed.classes&&!parsed.attributes&&!parsed.pseudos)parsed=null;return Selectors.Cache.parsed[selector]=parsed},parseTagAndID:function(selector){var tag=selector.match(Selectors.RegExps.tag);var id=selector.match(Selectors.RegExps.id);return[(tag)?tag[1]:'*',(id)?id[1]:false]},filter:function(item,parsed,local){var i;if(parsed.classes){for(i=parsed.classes.length;i--;i){var cn=parsed.classes[i];if(!Selectors.Filters.byClass(item,cn))return false}}if(parsed.attributes){for(i=parsed.attributes.length;i--;i){var att=parsed.attributes[i];if(!Selectors.Filters.byAttribute(item,att.name,att.operator,att.value))return false}}if(parsed.pseudos){for(i=parsed.pseudos.length;i--;i){var psd=parsed.pseudos[i];if(!Selectors.Filters.byPseudo(item,psd.parser,psd.argument,local))return false}}return true},getByTagAndID:function(ctx,tag,id){if(id){var item=(ctx.getElementById)?ctx.getElementById(id,true):Element.getElementById(ctx,id,true);return(item&&Selectors.Filters.byTag(item,tag))?[item]:[]}else{return ctx.getElementsByTagName(tag)}},search:function(self,expression,local){var splitters=[];var selectors=expression.trim().replace(Selectors.RegExps.splitter,function(m0,m1,m2){splitters.push(m1);return':)'+m2}).split(':)');var items,filtered,item;for(var i=0,l=selectors.length;i<l;i++){var selector=selectors[i];if(i==0&&Selectors.RegExps.quick.test(selector)){items=self.getElementsByTagName(selector);continue}var splitter=splitters[i-1];var tagid=Selectors.Utils.parseTagAndID(selector);var tag=tagid[0],id=tagid[1];if(i==0){items=Selectors.Utils.getByTagAndID(self,tag,id)}else{var uniques={},found=[];for(var j=0,k=items.length;j<k;j++)found=Selectors.Getters[splitter](found,items[j],tag,id,uniques);items=found}var parsed=Selectors.Utils.parseSelector(selector);if(parsed){filtered=[];for(var m=0,n=items.length;m<n;m++){item=items[m];if(Selectors.Utils.filter(item,parsed,local))filtered.push(item)}items=filtered}}return items}};Selectors.Getters={' ':function(found,self,tag,id,uniques){var items=Selectors.Utils.getByTagAndID(self,tag,id);for(var i=0,l=items.length;i<l;i++){var item=items[i];if(Selectors.Utils.chk(item,uniques))found.push(item)}return found},'>':function(found,self,tag,id,uniques){var children=Selectors.Utils.getByTagAndID(self,tag,id);for(var i=0,l=children.length;i<l;i++){var child=children[i];if(child.parentNode==self&&Selectors.Utils.chk(child,uniques))found.push(child)}return found},'+':function(found,self,tag,id,uniques){while((self=self.nextSibling)){if(self.nodeType==1){if(Selectors.Utils.chk(self,uniques)&&Selectors.Filters.byTag(self,tag)&&Selectors.Filters.byID(self,id))found.push(self);break}}return found},'~':function(found,self,tag,id,uniques){while((self=self.nextSibling)){if(self.nodeType==1){if(!Selectors.Utils.chk(self,uniques))break;if(Selectors.Filters.byTag(self,tag)&&Selectors.Filters.byID(self,id))found.push(self)}}return found}};Selectors.Filters={byTag:function(self,tag){return(tag=='*'||(self.tagName&&self.tagName.toLowerCase()==tag))},byID:function(self,id){return(!id||(self.id&&self.id==id))},byClass:function(self,klass){return(self.className&&self.className.contains(klass,' '))},byPseudo:function(self,parser,argument,local){return parser.call(self,argument,local)},byAttribute:function(self,name,operator,value){var result=Element.prototype.getProperty.call(self,name);if(!result)return(operator=='!=');if(!operator||value==undefined)return true;switch(operator){case'=':return(result==value);case'*=':return(result.contains(value));case'^=':return(result.substr(0,value.length)==value);case'$=':return(result.substr(result.length-value.length)==value);case'!=':return(result!=value);case'~=':return result.contains(value,' ');case'|=':return result.contains(value,'-')}return false}};Selectors.Pseudo=new Hash({checked:function(){return this.checked},empty:function(){return!(this.innerText||this.textContent||'').length},not:function(selector){return!Element.match(this,selector)},contains:function(text){return(this.innerText||this.textContent||'').contains(text)},'first-child':function(){return Selectors.Pseudo.index.call(this,0)},'last-child':function(){var element=this;while((element=element.nextSibling)){if(element.nodeType==1)return false}return true},'only-child':function(){var prev=this;while((prev=prev.previousSibling)){if(prev.nodeType==1)return false}var next=this;while((next=next.nextSibling)){if(next.nodeType==1)return false}return true},'nth-child':function(argument,local){argument=(argument==undefined)?'n':argument;var parsed=Selectors.Utils.parseNthArgument(argument);if(parsed.special!='n')return Selectors.Pseudo[parsed.special].call(this,parsed.a,local);var count=0;local.positions=local.positions||{};var uid=$uid(this);if(!local.positions[uid]){var self=this;while((self=self.previousSibling)){if(self.nodeType!=1)continue;count++;var position=local.positions[$uid(self)];if(position!=undefined){count=position+count;break}}local.positions[uid]=count}return(local.positions[uid]%parsed.a==parsed.b)},index:function(index){var element=this,count=0;while((element=element.previousSibling)){if(element.nodeType==1&&++count>index)return false}return(count==index)},even:function(argument,local){return Selectors.Pseudo['nth-child'].call(this,'2n+1',local)},odd:function(argument,local){return Selectors.Pseudo['nth-child'].call(this,'2n',local)},selected:function(){return this.selected},enabled:function(){return(this.disabled===false)}});Element.Events.domready={onAdd:function(fn){if(Browser.loaded)fn.call(this)}};(function(){var domready=function(){if(Browser.loaded)return;Browser.loaded=true;window.fireEvent('domready');document.fireEvent('domready')};if(Browser.Engine.trident){var temp=document.createElement('div');(function(){($try(function(){temp.doScroll();return document.id(temp).inject(document.body).set('html','temp').dispose()}))?domready():arguments.callee.delay(50)})()}else if(Browser.Engine.webkit&&Browser.Engine.version<525){(function(){(['loaded','complete'].contains(document.readyState))?domready():arguments.callee.delay(50)})()}else{window.addEvent('load',domready);document.addEvent('DOMContentLoaded',domready)}})();var JSON=new Hash({$specialChars:{'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},$replaceChars:function(chr){return JSON.$specialChars[chr]||'\\u00'+Math.floor(chr.charCodeAt()/16).toString(16)+(chr.charCodeAt()%16).toString(16)},encode:function(obj){switch($type(obj)){case'string':return'"'+obj.replace(/[\x00-\x1f\\"]/g,JSON.$replaceChars)+'"';case'array':return'['+String(obj.map(JSON.encode).clean())+']';case'object':case'hash':var string=[];Hash.each(obj,function(value,key){var json=JSON.encode(value);if(json)string.push(JSON.encode(key)+':'+json)});return'{'+string+'}';case'number':case'boolean':return String(obj);case false:return'null'}return null},decode:function(string,secure){if($type(string)!='string'||!string.length)return null;if(secure&&!(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g,'@').replace(/"[^"\\\n\r]*"/g,'')))return null;return eval('('+string+')')}});Native.implement([Hash,Array,String,Number],{toJSON:function(){return JSON.encode(this)}});var Fx=new Class({Implements:[Chain,Events,Options],options:{fps:50,unit:false,duration:500,link:'ignore'},initialize:function(options){this.subject=this.subject||this;this.setOptions(options);this.options.duration=Fx.Durations[this.options.duration]||this.options.duration.toInt();var wait=this.options.wait;if(wait===false)this.options.link='cancel'},getTransition:function(){return function(p){return-(Math.cos(Math.PI*p)-1)/2}},step:function(){var time=$time();if(time<this.time+this.options.duration){var delta=this.transition((time-this.time)/this.options.duration);this.set(this.compute(this.from,this.to,delta))}else{this.set(this.compute(this.from,this.to,1));this.complete()}},set:function(now){return now},compute:function(from,to,delta){return Fx.compute(from,to,delta)},check:function(){if(!this.timer)return true;switch(this.options.link){case'cancel':this.cancel();return true;case'chain':this.chain(this.caller.bind(this,arguments));return false}return false},start:function(from,to){if(!this.check(from,to))return this;this.from=from;this.to=to;this.time=0;this.transition=this.getTransition();this.startTimer();this.onStart();return this},complete:function(){if(this.stopTimer())this.onComplete();return this},cancel:function(){if(this.stopTimer())this.onCancel();return this},onStart:function(){this.fireEvent('start',this.subject)},onComplete:function(){this.fireEvent('complete',this.subject);if(!this.callChain())this.fireEvent('chainComplete',this.subject)},onCancel:function(){this.fireEvent('cancel',this.subject).clearChain()},pause:function(){this.stopTimer();return this},resume:function(){this.startTimer();return this},stopTimer:function(){if(!this.timer)return false;this.time=$time()-this.time;this.timer=$clear(this.timer);return true},startTimer:function(){if(this.timer)return false;this.time=$time()-this.time;this.timer=this.step.periodical(Math.round(1000/this.options.fps),this);return true}});Fx.compute=function(from,to,delta){return(to-from)*delta+from};Fx.Durations={'short':250,'normal':500,'long':1000};Fx.CSS=new Class({Extends:Fx,prepare:function(element,property,values){values=$splat(values);var values1=values[1];if(!$chk(values1)){values[1]=values[0];values[0]=element.getStyle(property)}var parsed=values.map(this.parse);return{from:parsed[0],to:parsed[1]}},parse:function(value){value=$lambda(value)();value=(typeof value=='string')?value.split(' '):$splat(value);return value.map(function(val){val=String(val);var found=false;Fx.CSS.Parsers.each(function(parser,key){if(found)return;var parsed=parser.parse(val);if($chk(parsed))found={value:parsed,parser:parser}});found=found||{value:val,parser:Fx.CSS.Parsers.String};return found})},compute:function(from,to,delta){var computed=[];(Math.min(from.length,to.length)).times(function(i){computed.push({value:from[i].parser.compute(from[i].value,to[i].value,delta),parser:from[i].parser})});computed.$family={name:'fx:css:value'};return computed},serve:function(value,unit){if($type(value)!='fx:css:value')value=this.parse(value);var returned=[];value.each(function(bit){returned=returned.concat(bit.parser.serve(bit.value,unit))});return returned},render:function(element,property,value,unit){element.setStyle(property,this.serve(value,unit))},search:function(selector){if(Fx.CSS.Cache[selector])return Fx.CSS.Cache[selector];var to={};Array.each(document.styleSheets,function(sheet,j){var href=sheet.href;if(href&&href.contains('://')&&!href.contains(document.domain))return;var rules=sheet.rules||sheet.cssRules;Array.each(rules,function(rule,i){if(!rule.style)return;var selectorText=(rule.selectorText)?rule.selectorText.replace(/^\w+/,function(m){return m.toLowerCase()}):null;if(!selectorText||!selectorText.test('^'+selector+'$'))return;Element.Styles.each(function(value,style){if(!rule.style[style]||Element.ShortStyles[style])return;value=String(rule.style[style]);to[style]=(value.test(/^rgb/))?value.rgbToHex():value})})});return Fx.CSS.Cache[selector]=to}});Fx.CSS.Cache={};Fx.CSS.Parsers=new Hash({Color:{parse:function(value){if(value.match(/^#[0-9a-f]{3,6}$/i))return value.hexToRgb(true);return((value=value.match(/(\d+),\s*(\d+),\s*(\d+)/)))?[value[1],value[2],value[3]]:false},compute:function(from,to,delta){return from.map(function(value,i){return Math.round(Fx.compute(from[i],to[i],delta))})},serve:function(value){return value.map(Number)}},Number:{parse:parseFloat,compute:Fx.compute,serve:function(value,unit){return(unit)?value+unit:value}},String:{parse:$lambda(false),compute:$arguments(1),serve:$arguments(0)}});Fx.Tween=new Class({Extends:Fx.CSS,initialize:function(element,options){this.element=this.subject=document.id(element);this.parent(options)},set:function(property,now){if(arguments.length==1){now=property;property=this.property||this.options.property}this.render(this.element,property,now,this.options.unit);return this},start:function(property,from,to){if(!this.check(property,from,to))return this;var args=Array.flatten(arguments);this.property=this.options.property||args.shift();var parsed=this.prepare(this.element,this.property,args);return this.parent(parsed.from,parsed.to)}});Element.Properties.tween={set:function(options){var tween=this.retrieve('tween');if(tween)tween.cancel();return this.eliminate('tween').store('tween:options',$extend({link:'cancel'},options))},get:function(options){if(options||!this.retrieve('tween')){if(options||!this.retrieve('tween:options'))this.set('tween',options);this.store('tween',new Fx.Tween(this,this.retrieve('tween:options')))}return this.retrieve('tween')}};Element.implement({tween:function(property,from,to){this.get('tween').start(arguments);return this},fade:function(how){var fade=this.get('tween'),o='opacity',toggle;how=$pick(how,'toggle');switch(how){case'in':fade.start(o,1);break;case'out':fade.start(o,0);break;case'show':fade.set(o,1);break;case'hide':fade.set(o,0);break;case'toggle':var flag=this.retrieve('fade:flag',this.get('opacity')==1);fade.start(o,(flag)?0:1);this.store('fade:flag',!flag);toggle=true;break;default:fade.start(o,arguments)}if(!toggle)this.eliminate('fade:flag');return this},highlight:function(start,end){if(!end){end=this.retrieve('highlight:original',this.getStyle('background-color'));end=(end=='transparent')?'#fff':end}var tween=this.get('tween');tween.start('background-color',start||'#ffff88',end).chain(function(){this.setStyle('background-color',this.retrieve('highlight:original'));tween.callChain()}.bind(this));return this}});Fx.Morph=new Class({Extends:Fx.CSS,initialize:function(element,options){this.element=this.subject=document.id(element);this.parent(options)},set:function(now){if(typeof now=='string')now=this.search(now);for(var p in now)this.render(this.element,p,now[p],this.options.unit);return this},compute:function(from,to,delta){var now={};for(var p in from)now[p]=this.parent(from[p],to[p],delta);return now},start:function(properties){if(!this.check(properties))return this;if(typeof properties=='string')properties=this.search(properties);var from={},to={};for(var p in properties){var parsed=this.prepare(this.element,p,properties[p]);from[p]=parsed.from;to[p]=parsed.to}return this.parent(from,to)}});Element.Properties.morph={set:function(options){var morph=this.retrieve('morph');if(morph)morph.cancel();return this.eliminate('morph').store('morph:options',$extend({link:'cancel'},options))},get:function(options){if(options||!this.retrieve('morph')){if(options||!this.retrieve('morph:options'))this.set('morph',options);this.store('morph',new Fx.Morph(this,this.retrieve('morph:options')))}return this.retrieve('morph')}};Element.implement({morph:function(props){this.get('morph').start(props);return this}});Fx.implement({getTransition:function(){var trans=this.options.transition||Fx.Transitions.Sine.easeInOut;if(typeof trans=='string'){var data=trans.split(':');trans=Fx.Transitions;trans=trans[data[0]]||trans[data[0].capitalize()];if(data[1])trans=trans['ease'+data[1].capitalize()+(data[2]?data[2].capitalize():'')]}return trans}});Fx.Transition=function(transition,params){params=$splat(params);return $extend(transition,{easeIn:function(pos){return transition(pos,params)},easeOut:function(pos){return 1-transition(1-pos,params)},easeInOut:function(pos){return(pos<=0.5)?transition(2*pos,params)/2:(2-transition(2*(1-pos),params))/2}})};Fx.Transitions=new Hash({linear:$arguments(0)});Fx.Transitions.extend=function(transitions){for(var transition in transitions)Fx.Transitions[transition]=new Fx.Transition(transitions[transition])};Fx.Transitions.extend({Pow:function(p,x){return Math.pow(p,x[0]||6)},Expo:function(p){return Math.pow(2,8*(p-1))},Circ:function(p){return 1-Math.sin(Math.acos(p))},Sine:function(p){return 1-Math.sin((1-p)*Math.PI/2)},Back:function(p,x){x=x[0]||1.618;return Math.pow(p,2)*((x+1)*p-x)},Bounce:function(p){var value;for(var a=0,b=1;1;a+=b,b/=2){if(p>=(7-4*a)/11){value=b*b-Math.pow((11-6*a-11*p)/4,2);break}}return value},Elastic:function(p,x){return Math.pow(2,10*--p)*Math.cos(20*p*Math.PI*(x[0]||1)/3)}});['Quad','Cubic','Quart','Quint'].each(function(transition,i){Fx.Transitions[transition]=new Fx.Transition(function(p){return Math.pow(p,[i+2])})});var Request=new Class({Implements:[Chain,Events,Options],options:{url:'',data:'',headers:{'X-Requested-With':'XMLHttpRequest','Accept':'text/javascript, text/html, application/xml, text/xml, */*'},async:true,format:false,method:'post',link:'ignore',isSuccess:null,emulation:true,urlEncoded:true,encoding:'utf-8',evalScripts:false,evalResponse:false,noCache:false},initialize:function(options){this.xhr=new Browser.Request();this.setOptions(options);this.options.isSuccess=this.options.isSuccess||this.isSuccess;this.headers=new Hash(this.options.headers)},onStateChange:function(){if(this.xhr.readyState!=4||!this.running)return;this.running=false;this.status=0;$try(function(){this.status=this.xhr.status}.bind(this));this.xhr.onreadystatechange=$empty;if(this.options.isSuccess.call(this,this.status)){this.response={text:this.xhr.responseText,xml:this.xhr.responseXML};this.success(this.response.text,this.response.xml)}else{this.response={text:null,xml:null};this.failure()}},isSuccess:function(){return((this.status>=200)&&(this.status<300))},processScripts:function(text){if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader('Content-type')))return $exec(text);return text.stripScripts(this.options.evalScripts)},success:function(text,xml){this.onSuccess(this.processScripts(text),xml)},onSuccess:function(){this.fireEvent('complete',arguments).fireEvent('success',arguments).callChain()},failure:function(){this.onFailure()},onFailure:function(){this.fireEvent('complete').fireEvent('failure',this.xhr)},setHeader:function(name,value){this.headers.set(name,value);return this},getHeader:function(name){return $try(function(){return this.xhr.getResponseHeader(name)}.bind(this))},check:function(){if(!this.running)return true;switch(this.options.link){case'cancel':this.cancel();return true;case'chain':this.chain(this.caller.bind(this,arguments));return false}return false},send:function(options){if(!this.check(options))return this;this.running=true;var type=$type(options);if(type=='string'||type=='element')options={data:options};var old=this.options;options=$extend({data:old.data,url:old.url,method:old.method},options);var data=options.data,url=options.url,method=options.method.toLowerCase();switch($type(data)){case'element':data=document.id(data).toQueryString();break;case'object':case'hash':data=Hash.toQueryString(data)}if(this.options.format){var format='format='+this.options.format;data=(data)?format+'&'+data:format}if(this.options.emulation&&!['get','post'].contains(method)){var _method='_method='+method;data=(data)?_method+'&'+data:_method;method='post'}if(this.options.urlEncoded&&method=='post'){var encoding=(this.options.encoding)?'; charset='+this.options.encoding:'';this.headers.set('Content-type','application/x-www-form-urlencoded'+encoding)}if(this.options.noCache){var noCache='noCache='+new Date().getTime();data=(data)?noCache+'&'+data:noCache}var trimPosition=url.lastIndexOf('/');if(trimPosition>-1&&(trimPosition=url.indexOf('#'))>-1)url=url.substr(0,trimPosition);if(data&&method=='get'){url=url+(url.contains('?')?'&':'?')+data;data=null}this.xhr.open(method.toUpperCase(),url,this.options.async);this.xhr.onreadystatechange=this.onStateChange.bind(this);this.headers.each(function(value,key){try{this.xhr.setRequestHeader(key,value)}catch(e){this.fireEvent('exception',[key,value])}},this);this.fireEvent('request');this.xhr.send(data);if(!this.options.async)this.onStateChange();return this},cancel:function(){if(!this.running)return this;this.running=false;this.xhr.abort();this.xhr.onreadystatechange=$empty;this.xhr=new Browser.Request();this.fireEvent('cancel');return this}});(function(){var methods={};['get','post','put','delete','GET','POST','PUT','DELETE'].each(function(method){methods[method]=function(){var params=Array.link(arguments,{url:String.type,data:$defined});return this.send($extend(params,{method:method}))}});Request.implement(methods)})();Element.Properties.send={set:function(options){var send=this.retrieve('send');if(send)send.cancel();return this.eliminate('send').store('send:options',$extend({data:this,link:'cancel',method:this.get('method')||'post',url:this.get('action')},options))},get:function(options){if(options||!this.retrieve('send')){if(options||!this.retrieve('send:options'))this.set('send',options);this.store('send',new Request(this.retrieve('send:options')))}return this.retrieve('send')}};Element.implement({send:function(url){var sender=this.get('send');sender.send({data:this,url:url||sender.options.url});return this}});Request.JSON=new Class({Extends:Request,options:{secure:true},initialize:function(options){this.parent(options);this.headers.extend({'Accept':'application/json','X-Request':'JSON'})},success:function(text){this.response.json=JSON.decode(text,this.options.secure);this.onSuccess(this.response.json,text)}});MooTools.More={'version':'1.2.3.1'};Class.Mutators.Binds=function(binds){return binds};Class.Mutators.initialize=function(initialize){return function(){$splat(this.Binds).each(function(name){var original=this[name];if(original)this[name]=original.bind(this)},this);return initialize.apply(this,arguments)}};Fx.Scroll=new Class({Extends:Fx,options:{offset:{x:0,y:0},wheelStops:true},initialize:function(element,options){this.element=this.subject=document.id(element);this.parent(options);var cancel=this.cancel.bind(this,false);if($type(this.element)!='element')this.element=document.id(this.element.getDocument().body);var stopper=this.element;if(this.options.wheelStops){this.addEvent('start',function(){stopper.addEvent('mousewheel',cancel)},true);this.addEvent('complete',function(){stopper.removeEvent('mousewheel',cancel)},true)}},set:function(){var now=Array.flatten(arguments);this.element.scrollTo(now[0],now[1])},compute:function(from,to,delta){return[0,1].map(function(i){return Fx.compute(from[i],to[i],delta)})},start:function(x,y){if(!this.check(x,y))return this;var offsetSize=this.element.getSize(),scrollSize=this.element.getScrollSize();var scroll=this.element.getScroll(),values={x:x,y:y};for(var z in values){var max=scrollSize[z]-offsetSize[z];if($chk(values[z]))values[z]=($type(values[z])=='number')?values[z].limit(0,max):max;else values[z]=scroll[z];values[z]+=this.options.offset[z]}return this.parent([scroll.x,scroll.y],[values.x,values.y])},toTop:function(){return this.start(false,0)},toLeft:function(){return this.start(0,false)},toRight:function(){return this.start('right',false)},toBottom:function(){return this.start(false,'bottom')},toElement:function(el){var position=document.id(el).getPosition(this.element);return this.start(position.x,position.y)},scrollIntoView:function(el,axes,offset){axes=axes?$splat(axes):['x','y'];var to={};el=document.id(el);var pos=el.getPosition(this.element);var size=el.getSize();var scroll=this.element.getScroll();var containerSize=this.element.getSize();var edge={x:pos.x+size.x,y:pos.y+size.y};['x','y'].each(function(axis){if(axes.contains(axis)){if(edge[axis]>scroll[axis]+containerSize[axis])to[axis]=edge[axis]-containerSize[axis];if(pos[axis]<scroll[axis])to[axis]=pos[axis]}if(to[axis]==null)to[axis]=scroll[axis];if(offset&&offset[axis])to[axis]=to[axis]+offset[axis]},this);if(to.x!=scroll.x||to.y!=scroll.y)this.start(to.x,to.y);return this}});Fx.Slide=new Class({Extends:Fx,options:{mode:'vertical'},initialize:function(element,options){this.addEvent('complete',function(){this.open=(this.wrapper['offset'+this.layout.capitalize()]!=0);if(this.open&&Browser.Engine.webkit419)this.element.dispose().inject(this.wrapper)},true);this.element=this.subject=document.id(element);this.parent(options);var wrapper=this.element.retrieve('wrapper');this.wrapper=wrapper||new Element('div',{styles:$extend(this.element.getStyles('margin','position'),{overflow:'hidden'})}).wraps(this.element);this.element.store('wrapper',this.wrapper).setStyle('margin',0);this.now=[];this.open=true},vertical:function(){this.margin='margin-top';this.layout='height';this.offset=this.element.offsetHeight},horizontal:function(){this.margin='margin-left';this.layout='width';this.offset=this.element.offsetWidth},set:function(now){this.element.setStyle(this.margin,now[0]);this.wrapper.setStyle(this.layout,now[1]);return this},compute:function(from,to,delta){return[0,1].map(function(i){return Fx.compute(from[i],to[i],delta)})},start:function(how,mode){if(!this.check(how,mode))return this;this[mode||this.options.mode]();var margin=this.element.getStyle(this.margin).toInt();var layout=this.wrapper.getStyle(this.layout).toInt();var caseIn=[[margin,layout],[0,this.offset]];var caseOut=[[margin,layout],[-this.offset,0]];var start;switch(how){case'in':start=caseIn;break;case'out':start=caseOut;break;case'toggle':start=(layout==0)?caseIn:caseOut}return this.parent(start[0],start[1])},slideIn:function(mode){return this.start('in',mode)},slideOut:function(mode){return this.start('out',mode)},hide:function(mode){this[mode||this.options.mode]();this.open=false;return this.set([-this.offset,0])},show:function(mode){this[mode||this.options.mode]();this.open=true;return this.set([0,this.offset])},toggle:function(mode){return this.start('toggle',mode)}});Element.Properties.slide={set:function(options){var slide=this.retrieve('slide');if(slide)slide.cancel();return this.eliminate('slide').store('slide:options',$extend({link:'cancel'},options))},get:function(options){if(options||!this.retrieve('slide')){if(options||!this.retrieve('slide:options'))this.set('slide',options);this.store('slide',new Fx.Slide(this,this.retrieve('slide:options')))}return this.retrieve('slide')}};Element.implement({slide:function(how,mode){how=how||'toggle';var slide=this.get('slide'),toggle;switch(how){case'hide':slide.hide(mode);break;case'show':slide.show(mode);break;case'toggle':var flag=this.retrieve('slide:flag',slide.open);slide[flag?'slideOut':'slideIn'](mode);this.store('slide:flag',!flag);toggle=true;break;default:slide.start(how,mode)}if(!toggle)this.eliminate('slide:flag');return this}});var Drag=new Class({Implements:[Events,Options],options:{snap:6,unit:'px',grid:false,style:true,limit:false,handle:false,invert:false,preventDefault:false,modifiers:{x:'left',y:'top'}},initialize:function(){var params=Array.link(arguments,{'options':Object.type,'element':$defined});this.element=document.id(params.element);this.document=this.element.getDocument();this.setOptions(params.options||{});var htype=$type(this.options.handle);this.handles=((htype=='array'||htype=='collection')?$$(this.options.handle):document.id(this.options.handle))||this.element;this.mouse={'now':{},'pos':{}};this.value={'start':{},'now':{}};this.selection=(Browser.Engine.trident)?'selectstart':'mousedown';this.bound={start:this.start.bind(this),check:this.check.bind(this),drag:this.drag.bind(this),stop:this.stop.bind(this),cancel:this.cancel.bind(this),eventStop:$lambda(false)};this.attach()},attach:function(){this.handles.addEvent('mousedown',this.bound.start);return this},detach:function(){this.handles.removeEvent('mousedown',this.bound.start);return this},start:function(event){if(this.options.preventDefault)event.preventDefault();this.mouse.start=event.page;this.fireEvent('beforeStart',this.element);var limit=this.options.limit;this.limit={x:[],y:[]};for(var z in this.options.modifiers){if(!this.options.modifiers[z])continue;if(this.options.style)this.value.now[z]=this.element.getStyle(this.options.modifiers[z]).toInt();else this.value.now[z]=this.element[this.options.modifiers[z]];if(this.options.invert)this.value.now[z]*=-1;this.mouse.pos[z]=event.page[z]-this.value.now[z];if(limit&&limit[z]){for(var i=2;i--;i){if($chk(limit[z][i]))this.limit[z][i]=$lambda(limit[z][i])()}}}if($type(this.options.grid)=='number')this.options.grid={x:this.options.grid,y:this.options.grid};this.document.addEvents({mousemove:this.bound.check,mouseup:this.bound.cancel});this.document.addEvent(this.selection,this.bound.eventStop)},check:function(event){if(this.options.preventDefault)event.preventDefault();var distance=Math.round(Math.sqrt(Math.pow(event.page.x-this.mouse.start.x,2)+Math.pow(event.page.y-this.mouse.start.y,2)));if(distance>this.options.snap){this.cancel();this.document.addEvents({mousemove:this.bound.drag,mouseup:this.bound.stop});this.fireEvent('start',[this.element,event]).fireEvent('snap',this.element)}},drag:function(event){if(this.options.preventDefault)event.preventDefault();this.mouse.now=event.page;for(var z in this.options.modifiers){if(!this.options.modifiers[z])continue;this.value.now[z]=this.mouse.now[z]-this.mouse.pos[z];if(this.options.invert)this.value.now[z]*=-1;if(this.options.limit&&this.limit[z]){if($chk(this.limit[z][1])&&(this.value.now[z]>this.limit[z][1])){this.value.now[z]=this.limit[z][1]}else if($chk(this.limit[z][0])&&(this.value.now[z]<this.limit[z][0])){this.value.now[z]=this.limit[z][0]}}if(this.options.grid[z])this.value.now[z]-=((this.value.now[z]-(this.limit[z][0]||0))%this.options.grid[z]);if(this.options.style)this.element.setStyle(this.options.modifiers[z],this.value.now[z]+this.options.unit);else this.element[this.options.modifiers[z]]=this.value.now[z]}this.fireEvent('drag',[this.element,event])},cancel:function(event){this.document.removeEvent('mousemove',this.bound.check);this.document.removeEvent('mouseup',this.bound.cancel);if(event){this.document.removeEvent(this.selection,this.bound.eventStop);this.fireEvent('cancel',this.element)}},stop:function(event){this.document.removeEvent(this.selection,this.bound.eventStop);this.document.removeEvent('mousemove',this.bound.drag);this.document.removeEvent('mouseup',this.bound.stop);if(event)this.fireEvent('complete',[this.element,event])}});Element.implement({makeResizable:function(options){var drag=new Drag(this,$merge({modifiers:{x:'width',y:'height'}},options));this.store('resizer',drag);return drag.addEvent('drag',function(){this.fireEvent('resize',drag)}.bind(this))}});var Slider=new Class({Implements:[Events,Options],Binds:['clickedElement','draggedKnob','scrolledElement'],options:{onTick:function(position){if(this.options.snap)position=this.toPosition(this.step);this.knob.setStyle(this.property,position)},snap:false,offset:0,range:false,wheel:false,steps:100,mode:'horizontal'},initialize:function(element,knob,options){this.setOptions(options);this.element=document.id(element);this.knob=document.id(knob);this.previousChange=this.previousEnd=this.step=-1;var offset,limit={},modifiers={'x':false,'y':false};switch(this.options.mode){case'vertical':this.axis='y';this.property='top';offset='offsetHeight';break;case'horizontal':this.axis='x';this.property='left';offset='offsetWidth'}this.half=this.knob[offset]/2;this.full=this.element[offset]-this.knob[offset]+(this.options.offset*2);this.min=$chk(this.options.range[0])?this.options.range[0]:0;this.max=$chk(this.options.range[1])?this.options.range[1]:this.options.steps;this.range=this.max-this.min;this.steps=this.options.steps||this.full;this.stepSize=Math.abs(this.range)/this.steps;this.stepWidth=this.stepSize*this.full/Math.abs(this.range);this.knob.setStyle('position','relative').setStyle(this.property,-this.options.offset);modifiers[this.axis]=this.property;limit[this.axis]=[-this.options.offset,this.full-this.options.offset];this.bound={clickedElement:this.clickedElement.bind(this),scrolledElement:this.scrolledElement.bindWithEvent(this),draggedKnob:this.draggedKnob.bind(this)};var dragOptions={snap:0,limit:limit,modifiers:modifiers,onDrag:this.bound.draggedKnob,onStart:this.bound.draggedKnob,onBeforeStart:(function(){this.isDragging=true}).bind(this),onComplete:function(){this.isDragging=false;this.draggedKnob();this.end()}.bind(this)};if(this.options.snap){dragOptions.grid=Math.ceil(this.stepWidth);dragOptions.limit[this.axis][1]=this.full}this.drag=new Drag(this.knob,dragOptions);this.attach()},attach:function(){this.element.addEvent('mousedown',this.bound.clickedElement);if(this.options.wheel)this.element.addEvent('mousewheel',this.bound.scrolledElement);this.drag.attach();return this},detach:function(){this.element.removeEvent('mousedown',this.bound.clickedElement);this.element.removeEvent('mousewheel',this.bound.scrolledElement);this.drag.detach();return this},set:function(step){if(!((this.range>0)^(step<this.min)))step=this.min;if(!((this.range>0)^(step>this.max)))step=this.max;this.step=Math.round(step);this.checkStep();this.fireEvent('tick',this.toPosition(this.step));this.end();return this},clickedElement:function(event){if(this.isDragging||event.target==this.knob)return;var dir=this.range<0?-1:1;var position=event.page[this.axis]-this.element.getPosition()[this.axis]-this.half;position=position.limit(-this.options.offset,this.full-this.options.offset);this.step=Math.round(this.min+dir*this.toStep(position));this.checkStep();this.fireEvent('tick',position);this.end()},scrolledElement:function(event){var mode=(this.options.mode=='horizontal')?(event.wheel<0):(event.wheel>0);this.set(mode?this.step-this.stepSize:this.step+this.stepSize);event.stop()},draggedKnob:function(){var dir=this.range<0?-1:1;var position=this.drag.value.now[this.axis];position=position.limit(-this.options.offset,this.full-this.options.offset);this.step=Math.round(this.min+dir*this.toStep(position));this.checkStep()},checkStep:function(){if(this.previousChange!=this.step){this.previousChange=this.step;this.fireEvent('change',this.step)}},end:function(){if(this.previousEnd!==this.step){this.previousEnd=this.step;this.fireEvent('complete',this.step+'')}},toStep:function(position){var step=(position+this.options.offset)*this.stepSize/this.full*this.steps;return this.options.steps?Math.round(step-=step%this.stepSize):step},toPosition:function(step){return(this.full*Math.abs(this.min-step))/(this.steps*this.stepSize)-this.options.offset}});var Asset={javascript:function(source,properties){properties=$extend({onload:$empty,document:document,check:$lambda(true)},properties);var script=new Element('script',{src:source,type:'text/javascript'});var load=properties.onload.bind(script),check=properties.check,doc=properties.document;delete properties.onload;delete properties.check;delete properties.document;script.addEvents({load:load,readystatechange:function(){if(['loaded','complete'].contains(this.readyState))load()}}).set(properties);if(Browser.Engine.webkit419)var checker=(function(){if(!$try(check))return;$clear(checker);load()}).periodical(50);return script.inject(doc.head)},css:function(source,properties){return new Element('link',$merge({rel:'stylesheet',media:'screen',type:'text/css',href:source},properties)).inject(document.head)},image:function(source,properties){properties=$merge({onload:$empty,onabort:$empty,onerror:$empty},properties);var image=new Image();var element=document.id(image)||new Element('img');['load','abort','error'].each(function(name){var type='on'+name;var event=properties[type];delete properties[type];image[type]=function(){if(!image)return;if(!element.parentNode){element.width=image.width;element.height=image.height}image=image.onload=image.onabort=image.onerror=null;event.delay(1,element,element);element.fireEvent(name,element,1)}});image.src=element.src=source;if(image&&image.complete)image.onload.delay(1);return element.set(properties)},images:function(sources,options){options=$merge({onComplete:$empty,onProgress:$empty,onError:$empty,properties:{}},options);sources=$splat(sources);var images=[];var counter=0;return new Elements(sources.map(function(source){return Asset.image(source,$extend(options.properties,{onload:function(){options.onProgress.call(this,counter,sources.indexOf(source));counter++;if(counter==sources.length)options.onComplete()},onerror:function(){options.onError.call(this,counter,sources.indexOf(source));counter++;if(counter==sources.length)options.onComplete()}}))}))}};(function(){var read=function(option,element){return(option)?($type(option)=='function'?option(element):element.get(option)):''};this.Tips=new Class({Implements:[Events,Options],options:{onShow:function(){this.tip.setStyle('display','block')},onHide:function(){this.tip.setStyle('display','none')},title:'title',text:function(element){return element.get('rel')||element.get('href')},showDelay:100,hideDelay:100,className:'tip-wrap',offset:{x:16,y:16},fixed:false},initialize:function(){var params=Array.link(arguments,{options:Object.type,elements:$defined});this.setOptions(params.options);document.id(this);if(params.elements)this.attach(params.elements)},toElement:function(){if(this.tip)return this.tip;this.container=new Element('div',{'class':'tip'});return this.tip=new Element('div',{'class':this.options.className,styles:{display:'none',position:'absolute',top:0,left:0}}).adopt(new Element('div',{'class':'tip-top'}),this.container,new Element('div',{'class':'tip-bottom'})).inject(document.body)},attach:function(elements){$$(elements).each(function(element){var title=read(this.options.title,element),text=read(this.options.text,element);element.erase('title').store('tip:native',title).retrieve('tip:title',title);element.retrieve('tip:text',text);this.fireEvent('attach',[element]);var events=['enter','leave'];if(!this.options.fixed)events.push('move');events.each(function(value){var event=element.retrieve('tip:'+value);if(!event)event=this['element'+value.capitalize()].bindWithEvent(this,element);element.store('tip:'+value,event).addEvent('mouse'+value,event)},this)},this);return this},detach:function(elements){$$(elements).each(function(element){['enter','leave','move'].each(function(value){element.removeEvent('mouse'+value,element.retrieve('tip:'+value)).eliminate('tip:'+value)});this.fireEvent('detach',[element]);if(this.options.title=='title'){var original=element.retrieve('tip:native');if(original)element.set('title',original)}},this);return this},elementEnter:function(event,element){this.container.empty();['title','text'].each(function(value){var content=element.retrieve('tip:'+value);if(content)this.fill(new Element('div',{'class':'tip-'+value}).inject(this.container),content)},this);$clear(this.timer);this.timer=this.show.delay(this.options.showDelay,this,element);this.position((this.options.fixed)?{page:element.getPosition()}:event)},elementLeave:function(event,element){$clear(this.timer);this.timer=this.hide.delay(this.options.hideDelay,this,element)},elementMove:function(event,element){this.position(event)},position:function(event){var size=window.getSize(),scroll=window.getScroll(),tip={x:this.tip.offsetWidth,y:this.tip.offsetHeight},props={x:'left',y:'top'},obj={};for(var z in props){obj[props[z]]=event.page[z]+this.options.offset[z];if((obj[props[z]]+tip[z]-scroll[z])>size[z])obj[props[z]]=event.page[z]-this.options.offset[z]-tip[z]}this.tip.setStyles(obj)},fill:function(element,contents){if(typeof contents=='string')element.set('html',contents);else element.adopt(contents)},show:function(element){this.fireEvent('show',[element])},hide:function(element){this.fireEvent('hide',[element])}})})();(function(){if(!this.console)this.console={log:function(){}};this.User={};this.Tips=new Class({Extends:this.Tips,options:{offsets:{x:15,y:0},text:null,showDelay:50,hideDelay:50,onShow:function(){this.tip.set('tween',{duration:250}).setStyle('display','block').fade(1)},onHide:function(){this.tip.fade(0).get('tween').chain(function(){this.element.setStyle('display','none')})}}});this.Site={defaultTipsOptions:{title:function(el){return el.getElement('span').get('html')}},paginate:function(){document.search('div.paginate').each(function(el){if(el.retrieve('paginate'))return;el.store('paginate',true);var link=el.getElement('a.link'),per=el.getElement('span.per').get('text').toInt(),page=el.getElement('span.slide').get('text').toInt()-1,knob=el.getElement('div.knob');new Tips(knob);new Slider(el.getElement('div.slider'),knob,{wheel:false,steps:link.get('text').toInt()-1,onChange:function(step){el.getElement('span.slide').set('text',step+1)},onComplete:function(step){if(step!=page){if(step==0&&el.getElement('span.first'))window.location.href=el.getElement('span.first').get('text');else window.location.href=link.get('href').substitute({start:step*per})}}}).set(page)})}};Document.implement({search:$$.bind(window),find:document.getElement.bind(document)});Element.implement({appearOn:function(el,opacity,options){opacity=$type(opacity)=='array'?[opacity[0]||1,opacity[1]||0]:[opacity||1,0];this.set({opacity:opacity[1],tween:options||{duration:200}});document.id(el).addEvents({mouseenter:this.fade.bind(this,opacity[0]),mouseleave:this.fade.bind(this,opacity[1])});return this}});window.addEvent('domready',function(){(function(){var i=0;document.search('a:not(.target)[href^=http]').each(function(el){var href=el.getProperty('href');if(href&&!href.test('^'+Config.path,'i')&&href.test('^https?://'))el.addClass('target').set('target','target_'+(i++))});document.search('a.atarget').removeClass('atarget').addClass('target').each(function(el){el.set('target','target_'+(i++))})})();document.search('pre').light({altLines:'hover',mode:'div'});var lower=document.id('lower'),logo=document.id('logo'),leave=function(){lower.fade(0).get('tween').chain(function(){this.element.setStyle('backgroundPosition','0 0')});logo.tween('top',21)};(function(){lower.tween('backgroundPosition','0 -20px');leave.delay(1000);logo.addEvents({mouseenter:function(){lower.fade(1);logo.tween('top',10)},mouseleave:leave})}).delay(2500);var els=document.search('div.articleicons'),fade=els.length>1?null:[1,0.4];els.each(function(el){if(!Browser.Engine.trident)el.appearOn(el.getParent('div.article'),fade);new Tips(el.getElements('a'),Site.defaultTipsOptions)});document.search('table tbody tr:odd').addClass('odd');new Tips(document.search('a.anchor'),Site.defaultTipsOptions);Site.paginate();document.search('a.apicture').slimbox(null,function(el){return[el.href,'']});document.search('.startSlider').addClass('link').each(function(el){var parent=el.getParent('div');var button=parent.getElement('button[name=bsave]').set('opacity',0);var height=button.getHeight();button.setStyle('height',0);var nameContainer=parent.getElement('div.nameContainer');if(nameContainer)new Element('input',{name:'name',type:'text',tabIndex:11}).inject(nameContainer);var slider=parent.getElement('div.contentSlider').slide('hide');var fn=function(e){e.stop();slider.slide('in');this.getElement('textarea').toggleClass('activated');button.morph({opacity:1,height:height});this.removeEvent('click',fn)};el.addEvent('click',fn)});if(Browser.Engine.trident4)document.search('hr').each(function(el){if(!el.hasClass('pagebreak'))new Element('div',{'class':'hr'}).replaces(el)})})})();(function(){window.gitfollow={text:'% followers',styles:['.gitfollow { background: #fafafa; background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#fbfbfb), to(#ccc)); font: 11px "Lucida Grande", Verdana; outline: 0px; -webkit-box-shadow: rgba(0, 0, 0, 0.6) 0px 1px 3px; -moz-box-shadow: rgba(0, 0, 0, 0.2) 0px 1px 3px; font-weight: bold; line-height: 1; cursor: pointer; position: relative; text-decoration: none; width: auto; border-bottom-color: rgba(0, 0, 0, 0.3); -moz-border-radius: 15px; -webkit-border-radius: 15px; padding: 4px 14px 6px; color: #4183C4; text-shadow: 0 1px 0 #fff; }','.gitfollow:active { top: 1px; }','.gitfollow:hover { background: #eee }','.gitfollow img { vertical-align: middle; padding-right: 5px; border: none }','.gitfollow.small { padding: 2px 14px 4px }'],logo:'data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%20%00%00%00%0F%08%06%00%00%00%85%80%CD%17%00%00%00%04sBIT%08%08%08%08%7C%08d%88%00%00%00%09pHYs%00%00%0B%12%00%00%0B%12%01%D2%DD~%FC%00%00%00%1CtEXtSoftware%00Adobe%20Fireworks%20CS4%06%B2%D3%A0%00%00%00%15tEXtCreation%20Time%0012%2F8%2F09%5E%88%A8%A3%00%00%048IDAT8%8D%BD%94%5DH%DBW%18%C6%7F%E7%FCc%3E%5C%14%17%B3%D8%A4Z%8Bq%A0%0E%D7X%E9%CA%3E%B2*tq%A3%DB%C5F%95%0E%0B%B6%17%A3%B0R%98%D0%0D3%D8%CD%3A%84%89%D8%CB%C9.%DC%06k%A1s%A30%9C%A3%A8utS%CAZ%91d%E9%8ARi%3B%1Bp%A1%BAL%B3%A6%89%F9%E7%DDEc)%B2%8E%5E%F5%B9%3B%BF%F7y%DF%F3%C0y9%F0p9%81%F3%C0%9B%FFQ%DB%02%9C%03%C2%FF%D3%BFY_%02_%3C%B2%BB%A2%A2%E2%00%20%5E%AF%F7%B7%CD%B5c%C7%8E5%01%D2%D4%D4%14%7D%D4y%1E%8Fg%B5%A2%A2bu3%D7%0Fk%18%1B%1B3zzz8y%F2%A4Y%40%1F%00%1D%00%E5%E5%E5Jk%8D%CB%E5*%7B%D4%00%0E%87%C3%EEt%3A%ED%9B%B9%E5%81%20%AF%01V%E0W%C0%D5%DF%DF%7F%A9%BD%BD%7D%A8%B4%B4%F4%1C%D0%02%7CZRR%F2%E7%DA%DA%DA%AD%A5%A5%A5%9C%C5b!%9B%CD*%E0%25%C0%06L%14f%B5%00Y%60%1A%F0%00%BB%81K6%9BML%D3%04%D8U%E0%E3%40%06%A0L)%F5%23%20%80(%A5RZ%EBtMMM7%20n%B7%BB%CF%E7%F3%FD%B2Q%B7Z%AD%B7%3B%3A%3A%DE%F0%F9%7Cy%A5%94lp%60%10%B0%19%86q%C7%E1p%C4%01%1A%1A%1A%0E%02R%5B%5B%FB%EE%9E%3D%7B%D6%B4%D6%F7%FD%86a%9C%07J%B4%CDf%FBJD%5E%1D%1E%1Efnn%0E%E0%89P(T%D4%D7%D7W%0C%10%0C%06w%8F%8F%8F%FFc%B5Z%09%06%83%CC%CF%CF%9B%AD%AD%AD%92L%26%A9%AD%ADedd%84%B6%B66%80%23.%97%EB%E5m%DB%B6%D9jjj%DC%00%A1P%C8%0F%B0w%EF%DE%FAT*%95u%3A%9D%0C%0F%0Fs%FC%F8qL%D3l-**%FAN777%EF%02%B8x%F1b%EF%F8%F8%F8%8B%00%1E%8F%E7%8FT*%F5%13%80R%CA%A8%AF%AF%7FGk%0D%B0R%5D%5D%DD%BC%BC%BC%9CH%A7%D3*%10%08%AC%EE%DB%B7%EF%F5C%87%0E%5D%06hnnn%B3X%2C9%20%07%90%CDfs%00%A6i%9A%D9l%D6%F0z%BD%F9%FD%FB%F7%B7wuu%0Dj%ADY__%7FE%9F9s%26%DA%D6%D6%C6%C0%C0%40%F8%E8%D1%A3S%5B%B7n%A5%BB%BB%7Blbb%22S%08%80Rj%C94MDd%5D)u%2B%9F%CFg%00%12%89%C4%8AR%EA%87%0B%17.%9C%05%A8%AA%AA%F2%88%88d2%19%05%E0v%BB%EF%3C%B0o%3A%97%CB%E5%94R%DF%9E8q%E2%9B%7C%3E%7F%0FVVV%1E%DC%BE%7D%FB%82%88%A8%A1%A1!%E6%E6%E6%E2%81%40%E0%13%8B%C5R%5EH%AF%26\'\'%B5%D5je~~%BE%14%E8%9C%9A%9Az%CAb%B1%20%22%06%40%3E%9F%B7%00%14%17%17%A7%FD~%7F%F6%DA%B5k%0E%E0%FD%C1%C1%C1%B7%00%B4%D6%D8%EDv%B9q%E3%86%15%F8htt%B4%1F%A0%B7%B7%17%AD%94%BA%9DL%26%E3%00%A7N%9D%1A%A9%AB%AB%7B%5B)%B5%E8%F3%F9%ACZkr%B9%5CQKKK%B6%B3%B33%97H%24%1C%C0%D7Z%EB%1DN%A7%13%A5%94%06%B8%7B%F7%AE%5D)%C5%CA%CA%0A%3D%3D%3D%97%5D.%17%40_%3A%9D~%CE0%0C2%99%8C6%0C%C3%B4%D9l%00%1F%A7R%A9%9D%DD%DD%DD%84%C3%E1%0F%01%5E%F0%FB%FD%D7%BD%5E%AF%B8%5C%AEdaK%CF%C6b%B1%1D%91H%C4%8C%C5b%9F%03%88%C8g%D3%D3%D32%3B%3B%2B%F1x%FC%40%24%12%F9%3B%16%8B%8D%02%C4b%B1%AE%99%99%99%FC%CC%CC%CC%7B%22%12%88%C7%E3%7F%CD%CE%CE%CA%EA%EA%EAr4%1A5%A3%D1%E8%91H%24%F2%F3%CD%9B7%EF%2C..%CA%95%2BWDD%066%DEF%00%B9z%F5jBD%AE%1F%3E%7CX%00ill%AC%13%91gE%C4w%DF(%F2%BC%88%04D%C4!%22%CF%88Hu%81%97%89%C8N%11%F1%14%CE%5B%0A%3E%A7%884%8A%88KD%FC%22R%25%22%95%22%D2p%7F3%C2%E1%B0%94%95%95%89%DDn%FF%1D%F8%DE%E1pdB%A1%90%2C%2C%2C%3C%CD%E3%90%88%F4%9E%3E%7D%3A%B5%F1I%04%83%C1%F5%A5%A5%A5%F3%22R%F4X%02%14B%B4%8B%88)%F74)%22O%3E%AE%BB%FF%05%F5a%F7%07%0C%EA%3Aj%00%00%00%00IEND%AEB%60%82',className:'gitfollow',run:function(){this.elements=getByClass(this.className);if(!this.elements.length){if(window.console)console.log('No elements found to use with gitfollow.');return false}var match=this.elements[0].href.match(/com\/([^\s\/]+)/);if(!match||!match[1]){if(window.console)console.log('Bad GitHub URL '+this.elements[0].href);return false}this.username=match[1];if(window.sessionStorage&&sessionStorage['_gitfollow.'+this.username]!=null){this.apply(sessionStorage['_gitfollow.'+this.username])}else{injectScript('http://github.com/api/v2/json/user/show/'+encodeURIComponent(this.username)+'?callback='+encodeURIComponent('gitfollow.callback'))}},callback:function(object){if(object&&object.user){if(window.sessionStorage)sessionStorage['_gitfollow.'+this.username]=object.user['followers_count'];this.apply(object.user['followers_count'])}},apply:function(count){applyCss(this.styles.join(''));var text='<img src="'+this.logo+'" /> '+this.text.replace(/%/,count);for(var i=0,l=this.elements.length;i<l;i++){this.elements[i].innerHTML=text}}};var injectScript=function(src){var script=document.createElement('script');script.src=src;document.body.appendChild(script)},applyCss=function(css){var style=document.createElement('style');style.type='text/css';try{style.appendChild(document.createTextNode(css))}catch(e){if(style.styleSheet)style.styleSheet.cssText=css}document.body.appendChild(style)},getByClass=function(){if(document.getElementsByClassName){return document.getElementsByClassName('gitfollow')}else{var links=document.getElementsByTagName('a'),found=[];for(var i=0,l=links.length;i<l;i++){if((' '+this+' ').indexOf(' '+links[i].className+' ')>-1)found.push(links[i])}return found}},run=function(){gitfollow.run()};if(document.addEventListener){document.addEventListener('DOMContentLoaded',run,false)}else if(window.attachEvent){window.attachEvent('onload',run)}})();var Slimbox;(function(){var state=0,options,images,activeImage,prevImage,nextImage,top,fx,preload,preloadPrev=new Image(),preloadNext=new Image(),overlay,center,image,prevLink,nextLink,bottomContainer,bottom,caption,number;window.addEvent("domready",function(){$(document.body).adopt($$([overlay=new Element("div",{id:"lbOverlay"}).addEvent("click",close),center=new Element("div",{id:"lbCenter"}),bottomContainer=new Element("div",{id:"lbBottomContainer"})]).setStyle("display","none"));image=new Element("div",{id:"lbImage"}).injectInside(center).adopt(prevLink=new Element("a",{id:"lbPrevLink",href:"#"}).addEvent("click",previous),nextLink=new Element("a",{id:"lbNextLink",href:"#"}).addEvent("click",next));bottom=new Element("div",{id:"lbBottom"}).injectInside(bottomContainer).adopt(new Element("a",{id:"lbCloseLink",href:"#"}).addEvent("click",close),caption=new Element("div",{id:"lbCaption"}),number=new Element("div",{id:"lbNumber"}),new Element("div",{styles:{clear:"both"}}));fx={overlay:new Fx.Tween(overlay,{property:"opacity",duration:500}).set(0),image:new Fx.Tween(image,{property:"opacity",duration:500,onComplete:nextEffect}),bottom:new Fx.Tween(bottom,{property:"margin-top",duration:400})}});Slimbox={open:function(_images,startImage,_options){options=$extend({loop:false,overlayOpacity:0.5,resizeDuration:400,resizeTransition:false,initialWidth:250,initialHeight:250,animateCaption:true,showCounter:true,counterText:"Image {x} of {y}",onClose:$empty},_options||{});if(typeof _images=="string"){_images=[[_images,startImage]];startImage=0}images=_images;options.loop=options.loop&&(images.length>1);position();setup(true);top=window.getScrollTop()+(window.getHeight()/15) +150;fx.resize=new Fx.Morph(center,$extend({duration:options.resizeDuration,onComplete:nextEffect},options.resizeTransition?{transition:options.resizeTransition}:{}));center.setStyles({top:top,width:options.initialWidth,height:options.initialHeight,marginLeft:-(options.initialWidth/2),display:""});fx.overlay.start(options.overlayOpacity);state=1;return changeImage(startImage)}};Element.implement({slimbox:function(_options,linkMapper){$$(this).slimbox(_options,linkMapper);return this}});Elements.implement({slimbox:function(_options,linkMapper,linksFilter){linkMapper=linkMapper||function(el){var img=el.getElement('img');return[el.href,img&&img.title?img.title:el.title]};linksFilter=linksFilter||function(){return true};var links=this;links.removeEvents("click").addEvent("click",function(){var filteredLinks=links.filter(linksFilter,this);return Slimbox.open(filteredLinks.map(linkMapper),filteredLinks.indexOf(this),_options)});return links}});function position(){overlay.setStyles({top:window.getScrollTop(),height:window.getHeight()})}function setup(open){["object",Browser.Engine.trident?"select":"embed"].each(function(tag){Array.forEach(document.getElementsByTagName(tag),function(el){if(open)el._slimbox=el.style.visibility;el.style.visibility=open?"hidden":el._slimbox})});overlay.style.display=open?"":"none";var fn=open?"addEvent":"removeEvent";window[fn]("scroll",position)[fn]("resize",position);document[fn]("keydown",keyDown)}function keyDown(event){switch(event.code){case 27:case 88:case 67:close();break;case 37:case 80:previous();break;case 39:case 78:next()}return false}function previous(){return changeImage(prevImage)}function next(){return changeImage(nextImage)}function changeImage(imageIndex){if((state==1)&&(imageIndex>=0)){state=2;activeImage=imageIndex;prevImage=((activeImage||!options.loop)?activeImage:images.length)-1;nextImage=activeImage+1;if(nextImage==images.length)nextImage=options.loop?0:-1;$$(prevLink,nextLink,image,bottomContainer).setStyle("display","none");fx.bottom.cancel().set(0);fx.image.set(0);center.className="lbLoading";preload=new Image();preload.onload=nextEffect;preload.src=images[imageIndex][0]}return false}function nextEffect(){switch(state++){case 2:center.className="";image.setStyles({backgroundImage:"url("+images[activeImage][0]+")",display:""});$$(image,bottom).setStyle("width",preload.width);$$(image,prevLink,nextLink).setStyle("height",preload.height);caption.set('html',images[activeImage][1]||"");number.set('html',(options.showCounter&&(images.length>1))?options.counterText.replace(/{x}/,activeImage+1).replace(/{y}/,images.length):"");if(prevImage>=0)preloadPrev.src=images[prevImage][0];if(nextImage>=0)preloadNext.src=images[nextImage][0];if(center.clientHeight!=image.offsetHeight){fx.resize.start({height:image.offsetHeight});break}state++;case 3:if(center.clientWidth!=image.offsetWidth){fx.resize.start({width:image.offsetWidth,marginLeft:-image.offsetWidth/2});break}state++;case 4:bottomContainer.setStyles({top:top+center.clientHeight,marginLeft:center.style.marginLeft,visibility:"hidden",display:""});fx.image.start(1);break;case 5:if(prevImage>=0)prevLink.style.display="";if(nextImage>=0)nextLink.style.display="";if(options.animateCaption){fx.bottom.set(-bottom.offsetHeight).start(0)}bottomContainer.style.visibility="";state=1}}function close(){if(state){state=0;preload.onload=$empty;for(var f in fx)fx[f].cancel();$$(center,bottomContainer).setStyle("display","none");fx.overlay.chain(setup).start(0)}if(options.onClose)options.onClose();return false}})();var Lighter=new Class({Implements:[Options],name:'Lighter',options:{altLines:'',container:null,editable:false,flame:'standard',fuel:'standard',id:null,indent:-1,jsStyles:true,matchType:"standard",mode:"pre",path:"./",strict:false},initialize:function(codeblock,options){this.setOptions(options);options=this.options;this.id=options.id||this.name+'_'+$time();this.codeblock=$(codeblock);this.code=codeblock.get('html').chop().replace(/&lt;/gim,'<').replace(/&gt;/gim,'>').replace(/&amp;/gim,'&');this.container=$(this.options.container);if(options.indent>-1)this.code=this.code.tabToSpaces(options.indent);this.builder=new Hash({'pre':this.createLighter.bind(this),'ol':this.createLighterWithLines.pass([['ol'],['li']],this),'div':this.createLighterWithLines.pass([['div'],['div','span'],true,'span'],this),'table':this.createLighterWithLines.pass([['table','tbody'],['tr','td'],true,'td'],this)});var ff=this.codeblock.get('class').split(':');if(!ff[0])ff[0]=this.options.fuel;if(!ff[1])ff[1]=this.options.flame;this.loadFlameSrc(ff)},loadFlameSrc:function(ff){if(!$chk(Flame[ff[1]])){var flameScript=new Element('script',{src:this.options.path+'Flames/Flame.'+ff[1]+'.js',type:'text/javascript'}).addEvents({load:function(){this.loadFlame(ff)}.bind(this),error:function(){ff[1]='standard';this.loadFlame(ff)}.bind(this)}).inject(document.head)}else{this.loadFlame(ff)}},loadFlame:function(ff){this.flame=new Flame[ff[1]](this);this.loadFuelSrc(ff)},loadFuelSrc:function(ff){if(!$chk(Fuel[ff[0]])){var fuelScript=new Element('script',{src:this.options.path+'Fuels/Fuel.'+ff[0]+'.js',type:'text/javascript'}).addEvents({load:function(){this.loadFuel(ff)}.bind(this),error:function(){ff[0]='standard';this.loadFuel(ff)}.bind(this)}).inject(document.head)}else{this.loadFuel(ff)}},loadFuel:function(ff){this.fuel=new Fuel[ff[0]](this,this.flame,{matchType:this.options.matchType,strict:this.options.strict});this.light()},light:function(){this.element=this.toElement();if(this.container){this.container.empty();this.element.inject(this.container)}else{this.codeblock.setStyle('display','none');this.element.inject(this.codeblock,'after')}},createLighter:function(){var lighter=new Element('pre',{'class':this.flame.shortName+this.name}),pointer=0;if(!$defined(this.fuel.wicks[0])){lighter.appendText(this.code)}else{this.fuel.wicks.each(function(match){lighter.appendText(this.code.substring(pointer,match.index));this.insertAndKeepEl(lighter,match.text,match.type);pointer=match.index+match.text.length},this);if(pointer<this.code.length){lighter.appendText(this.code.substring(pointer,this.code.length))}}return lighter},createLighterWithLines:function(parent,child,addLines,lineType){var lighter=new Element(parent[0],{'class':this.flame.shortName+this.name,'id':this.id}),newLine=new Element(child[0]),lineNum=1,pointer=0,text=null;if(parent[0]=="table")lighter.set("cellpadding",0).set("cellspacing",0).set("border",0);if(parent[1])lighter=new Element(parent[1]).inject(lighter);if(child[1])newLine=new Element(child[1]).inject(newLine);newLine.addClass(this.flame.shortName+'line');if(addLines)lineNum=this.insertLineNum(newLine,lineNum,lineType);this.fuel.wicks.each(function(match){if(pointer!=match.index){text=this.code.substring(pointer,match.index).split('\n');for(var i=0;i<text.length;i++){if(i<text.length-1){if(text[i]=='')text[i]=' ';newLine=this.insertAndMakeEl(newLine,lighter,text[i],child);if(addLines)lineNum=this.insertLineNum(newLine,lineNum,lineType)}else{this.insertAndKeepEl(newLine,text[i])}}}text=match.text.split('\n');for(i=0;i<text.length;i++){if(i<text.length-1){newLine=this.insertAndMakeEl(newLine,lighter,text[i],child,match.type);if(addLines)lineNum=this.insertLineNum(newLine,lineNum,lineType)}else{this.insertAndKeepEl(newLine,text[i],match.type)}}pointer=match.end},this);if(pointer<=this.code.length){text=this.code.substring(pointer,this.code.length).split('\n');for(var i=0;i<text.length;i++){newLine=this.insertAndMakeEl(newLine,lighter,text[i],child);if(addLines)lineNum=this.insertLineNum(newLine,lineNum,lineType)}}if(this.options.altLines!==''){if(this.options.altLines=='hover'){lighter.getElements('.'+this.flame.shortName+'line').addEvents({'mouseover':function(){this.toggleClass('alt')},'mouseout':function(){this.toggleClass('alt')}})}else{if(child[1]){lighter.getChildren(':'+this.options.altLines).getElement('.'+this.flame.shortName+'line').addClass('alt')}else{lighter.getChildren(':'+this.options.altLines).addClass('alt')}}}if(child[1]){lighter.getFirst().getChildren().addClass(this.flame.shortName+'first');lighter.getLast().getChildren().addClass(this.flame.shortName+'last')}else{lighter.getFirst().addClass(this.flame.shortName+'first');lighter.getLast().addClass(this.flame.shortName+'last')}if(parent[1])lighter=lighter.getParent();return lighter},insertAndKeepEl:function(el,text,alias){if(text.length>0){var span=new Element('span');span.set('text',text);if(alias){span.addClass(this.flame.aliases[alias])}span.inject(el)}},insertAndMakeEl:function(el,group,text,child,alias){this.insertAndKeepEl(el,text,alias);if(child[1])el=el.getParent();el.inject(group);var newLine=new Element(child[0]);if(child[1])newLine=new Element(child[1]).inject(newLine);newLine.addClass(this.flame.shortName+'line');return newLine},insertLineNum:function(el,lineNum,lineType){var newNum=new Element(lineType,{'text':lineNum++,'class':this.flame.shortName+'num'});newNum.inject(el.getParent(),'top');return lineNum},toElement:function(){if(!this.element){this.element=this.builder[this.options.mode]();if(this.options.editable){this.element.set('contenteditable','true')}}return this.element},replaces:function(element){element=$(element,true);element.parentNode.replaceChild(this.toElement(),element);return this}});Element.implement({light:function(options){return new Lighter(this,options)}});String.implement({chop:function(){return this.replace(/(^\s*\n|\n\s*$)/gi,'')},tabToSpaces:function(spaces){for(var i=0,indent='';i<spaces;i++){indent+=' '}return this.replace(/\t/g,indent)}});var Fuel=new Class({Implements:[Options],options:{matchType:"standard",strict:false},language:'',defaultFlame:'standard',patterns:new Hash(),keywords:new Hash(),rules:new Hash(),delimiters:new Hash({start:null,end:null}),common:{slashComments:/(?:^|[^\\])\/\/.*$/gm,poundComments:/#.*$/gm,multiComments:/\/\*[\s\S]*?\*\//gm,      		aposStrings:/'[^'\\]*(?:\\.[^'\\]*)*'/gm,quotedStrings:/"[^"\\]*(?:\\.[^"\\]*)*"/gm,strings:/'[^'\\]*(?:\\.[^'\\]*)*'|"[^"\\]*(?:\\.[^"\\]*)*"/gm,properties:/\.([\w]+)\s*/gi,methodCalls:/\.([\w]+)\s*\(/gm,  		functionCalls:/\b([\w]+)\s*\(/gm,    		brackets:/\{|\}|\(|\)|\[|\]/g,  		numbers:/\b((?:(\d+)?\.)?[0-9]+|0x[0-9A-F]+)\b/gi},initialize:function(lighter,flame,options,wicks){this.setOptions(options);this.wicks=wicks||[];this.lighter=lighter;this.flame=flame;this.builder=new Hash({'standard':this.findMatches,'lazy':this.findMatchesLazy});if(!options.strict){if(this.delimiters.start)this.addFuel('delimBeg',this.delimiters.start,'de1');if(this.delimiters.end)this.addFuel('delimEnd',this.delimiters.end,'de2')}this.keywords.each(function(keywordSet,ruleName){if(keywordSet.csv!=''){this.addFuel(ruleName,this.csvToRegExp(keywordSet.csv,"g"),keywordSet.alias)}},this);this.patterns.each(function(regex,ruleName){this.addFuel(ruleName,regex.pattern,regex.alias)},this);var codeBeg=0,codeEnd=lighter.code.length,codeSeg='',delim=this.delimiters,matches=[],match=null,endMatch=null;if(!options.strict){matches.extend(this.builder[options.matchType].pass(lighter.code,this)())}else if(delim.start&&delim.end){while((match=delim.start.exec(lighter.code))!=null){delim.end.lastIndex=delim.start.lastIndex;if((endMatch=delim.end.exec(lighter.code))!=null){matches.push(new Wick(match[0],'de1',match.index));codeBeg=delim.start.lastIndex;codeEnd=endMatch.index-1;codeSeg=lighter.code.substring(codeBeg,codeEnd);matches.extend(this.builder[options.matchType].pass([codeSeg,codeBeg],this)());matches.push(new Wick(endMatch[0],'de2',endMatch.index))}}}this.wicks=matches},addFuel:function(fuelName,RegEx,className){this.rules[fuelName]=RegEx;this.flame.addAlias(fuelName,className)},csvToRegExp:function(csv,mod){return new RegExp('\\b('+csv.replace(/,\s*/g,'|')+')\\b',mod)},delimitedRegex:function(beg,esc,end,mod,suffix){beg=beg.escapeRegExp();if(esc)esc=esc.escapeRegExp();end=(end)?end.escapeRegExp():beg;pat=(esc)?beg+"[^"+end+esc+'\\n]*(?:'+esc+'.[^'+end+esc+'\\n]*)*'+end:beg+"[^"+end+'\\n]*'+end;return new RegExp(pat+(suffix||''),mod||'')},strictRegex:function(){var regex='(';for(var i=0;i<arguments.length;i++){regex+=arguments[i].escapeRegExp();regex+=(i<arguments.length-1)?'|':''}regex+=')';return new RegExp(regex,"gim")},findMatches:function(code,offset){var wicks=[],startIndex=0,matchIndex=code.length,insertIndex=0,match=null,type=null,newWick=null,rule=null,rules={},currentMatch=null,futureMatch=null;offset=(offset)?offset:0;this.rules.each(function(regex,rule){rules[rule]={pattern:regex,enabled:true,lastIndex:0}},this);while(startIndex<code.length){matchIndex=code.length;match=null;for(rule in rules){rules[rule].pattern.lastIndex=startIndex;currentMatch=rules[rule].pattern.exec(code);if(currentMatch===null){delete rules[rule]}else{if(currentMatch.index<matchIndex){match=currentMatch;type=rule;matchIndex=currentMatch.index}else if(currentMatch.index==matchIndex&&match[0].length<currentMatch[0].length){match=currentMatch;type=rule;matchIndex=currentMatch.index}rules[rule].nextIndex=rules[rule].pattern.lastIndex-currentMatch[0].length}}if(match!=null){index=(match[1]&&match[0].contains(match[1]))?match.index+match[0].indexOf(match[1]):match.index;newWick=new Wick(match[1]||match[0],type,index+offset);wicks.push(newWick);futureMatch=rules[type].pattern.exec(code);if(!futureMatch){rules[type].nextIndex=code.length}else{rules[type].nextIndex=rules[type].pattern.lastIndex-futureMatch[0].length}var min=code.length;for(rule in rules){if(rules[rule].nextIndex<min){min=rules[rule].nextIndex}}startIndex=Math.max(min,newWick.end-offset)}else{break}}return wicks},findMatchesLazy:function(code,offset){var wicks=this.wicks,match=null,index=0;offset=(offset)?offset:0;this.rules.each(function(regex,rule){while((match=regex.exec(code))!=null){index=(match[1]&&match[0].contains(match[1]))?match.index+match[0].indexOf(match[1]):match.index;wicks.push(new Wick(match[1]||match[0],rule,index+offset))}},this);return this.purgeWicks(wicks)},purgeWicks:function(wicks){wicks=wicks.sort(this.compareWicks);for(var i=0,j=0;i<wicks.length;i++){if(wicks[i]==null)continue;for(j=i+1;j<wicks.length&&wicks[i]!=null;j++){if(wicks[j]==null){continue}else if(wicks[j].isBeyond(wicks[i])){break}else if(wicks[j].overlaps(wicks[i])){wicks[i]=null}else if(wicks[i].contains(wicks[j])){wicks[j]=null}}}return wicks.clean()},compareWicks:function(wick1,wick2){return wick1.index-wick2.index}});Fuel.standard=new Class({Extends:Fuel,initialize:function(lighter,flame,options,wicks){this.parent(lighter,flame,options,wicks)}});var Wick=new Class({initialize:function(match,type,index){this.text=match;this.type=type;this.index=index;this.length=this.text.length;this.end=this.index+this.length},contains:function(wick){return(wick.index>=this.index&&wick.index<this.end)},isBeyond:function(wick){return(this.index>=wick.end)},overlaps:function(wick){return(this.index==wick.index&&this.length>wick.length)},toString:function(){return this.index+' - '+this.text+' - '+this.end}});var Flame=new Class({shortName:'lt',aliases:new Hash(),containers:new Hash(),common:new Hash(),layout:new Hash(),styles:new Hash(),defaultStyles:new Hash({de1:new Hash({}),de2:new Hash({}),kw1:new Hash({'color':'#1b609a'}),kw2:new Hash({'color':'#9a6f1b'}),kw3:new Hash({'color':'#784e0c'}),co1:new Hash({'color':'#888888'}),co2:new Hash({'color':'#888888'}),st0:new Hash({'color':'#489a1b'}),st1:new Hash({'color':'#70483d'}),st2:new Hash({'color':'#70483d'}),nu0:new Hash({'color':'#70483d'}),me0:new Hash({'color':'#666666'}),br0:new Hash({'color':'#444444'}),sy0:new Hash({'color':'#444444'}),es0:new Hash({'color':'#444444'}),re0:new Hash({'color':'#784e0c'})}),defaultCommon:new Hash({'font-family':'Monaco, Courier, Monospace','font-size':'12px','overflow':'auto','white-space':'pre-wrap','word-wrap':'break-word'}),layout:new Hash({'numColor':new Hash({'background-color':'#f2f2f2'}),'lineColor':new Hash({'background-color':'#fff'}),'numStyles':new Hash({'color':'#939393','font-size':'10px','list-style':'decimal-leading-zero'}),'lineStyles':new Hash({'border-top':'1px solid #fff','border-bottom':'1px solid #fff','border-left':'1px solid #939393','padding':'0 3px 0 10px'}),'alt':new Hash({'border-top':'1px solid #eee','border-bottom':'1px solid #eee','background-color':'#F4F8FC'}),'top':new Hash({'padding-top':'5px'}),'right':new Hash({'padding-right':'5px'}),'bottom':new Hash({'padding-bottom':'5px'}),'left':new Hash({'padding-left':'15px'}),'codeStyles':new Hash({'color':'black','font-size':'12px'})}),fixes:new Hash({'div':new Hash({'div':new Hash({'clear':'left','overflow':'auto'}),'num':new Hash({'display':'block','float':'left','text-align':'center','width':'30px'}),'line':new Hash({'display':'block','margin-left':'30px'})}),'table':new Hash({'num':new Hash({'text-align':'center','width':'30px'})}),'ol':new Hash({'ol':new Hash({'margin-left':'0','padding-left':'0'}),'li':new Hash({'margin-left':'40px'})})}),initialize:function(lighter,fuel){this.lighter=lighter;this.fuel=fuel;this.common.combine(this.defaultCommon);this.styles.combine(this.defaultStyles);this.defaultStyles.each(function(style,key){this.addAlias(key)},this);if(this.lighter.options.jsStyles)this.injectTag()},addAlias:function(key,alias){this.aliases[key]=alias||key},injectTag:function(){this.styleTag=new Element("style").setProperty('type','text/css').inject(document.head);var type=this.lighter.options.mode,pfx=type+'.'+this.shortName+this.lighter.name,pfx2=pfx+' .'+this.shortName,numCSS=this.layout['numStyles'].extend(this.layout.numColor),lineCSS=this.layout['lineStyles'].extend(this.layout.lineColor),padCSS=this.layout.left.extend(this.layout.right);this.addCSS(pfx,this.common);this.addCSS(pfx,new Hash({'white-space':'-moz-pre-wrap'}));this.addCSS(pfx,new Hash({'white-space':'-pre-wrap'}));this.addCSS(pfx,new Hash({'white-space':'-o-pre-wrap'}));switch(type){case"pre":padCSS=padCSS.extend(this.layout.top).extend(this.layout.bottom);this.addCSS(pfx,this.layout.lineColor.extend(padCSS));this.addCSS(pfx+' span',this.layout['codeStyles']);break;case"ol":this.addCSS(pfx,numCSS.extend(this.fixes['ol']['ol']));this.addCSS(pfx+' li',lineCSS.extend(padCSS).extend(this.fixes['ol']['li']));this.addCSS(pfx2+'first',this.layout['top']);this.addCSS(pfx2+'last',this.layout['bottom']);this.addCSS(pfx+' .alt',this.layout['alt']);this.addCSS(pfx+' span',this.layout['codeStyles']);break;case"div":numCSS=numCSS.extend(this.fixes.div.num);lineCSS=lineCSS.extend(this.fixes.div.line);this.addCSS(pfx2+'num',numCSS);this.addCSS(pfx2+'line',lineCSS.extend(padCSS));this.addCSS(pfx+' div',this.fixes['div']['div'].extend(this.layout.numColor));this.addCSS(pfx2+'first',this.layout['top']);this.addCSS(pfx2+'last',this.layout['bottom']);this.addCSS(pfx+' .alt',this.layout['alt']);this.addCSS(pfx+' span',this.layout['codeStyles']);break;case"table":numCSS=numCSS.extend(this.fixes['table']['num']);this.addCSS(pfx2+'num',numCSS);this.addCSS(pfx2+'line',lineCSS.extend(padCSS));this.addCSS(pfx2+'first',this.layout['top']);this.addCSS(pfx2+'last',this.layout['bottom']);this.addCSS(pfx+' .alt',this.layout['alt']);this.addCSS(pfx+' span',this.layout['codeStyles']);break;default:}this.styles.each(function(stylesHash,styleName){this.addCSS(pfx+' .'+styleName,stylesHash)},this)},addCSS:function(styleName,stylesHash){var newStyle="\n"+styleName+" {\n";if(stylesHash){stylesHash.each(function(value,attribute){newStyle+="\t"+attribute+": "+value+";\n"})}newStyle+="}\n";if(Browser.Engine.trident){this.styleTag.styleSheet.cssText+=newStyle}else{this.styleTag.appendText(newStyle)}}});Flame.standard=new Class({Extends:Flame,initialize:function(lighter,fuel){this.parent(lighter,fuel)}});Fuel.css=new Class({Extends:Fuel,language:'css',initialize:function(lighter,flame,options){this.keywords=new Hash({css1:{csv:"background-attachment, background-color, background-image, background-position, background-repeat, background, border-bottom, border-bottom-width, border-color, border-left, border-left-width, border-right, border-right-width, border-style, border-top, border-top-width, border-width, border, clear, color, display, float, font-family, font-size, font-style, font-variant, font-weight, font, height, letter-spacing, line-height, list-style-image, list-style-position, list-style-type, list-style, margin-bottom, margin-left, margin-right, margin-top, margin, padding-bottom, padding-left, padding-right, padding-top, padding, text-align, text-decoration, text-indent, text-transform, vertical-align, white-space, width, word-spacing",alias:'kw1'},css2:{csv:"azimuth, border-bottom-color, border-bottom-style, border-collapse, border-left-color, border-left-style, border-right-color, border-right-style, border-spacing, border-top-color, border-top-style, bottom, caption-side, clip, content, counter-increment, counter-reset, cue, cue-after, cue-before, cursor, direction, elevation, empty-cells, left, max-height, max-width, min-height, min-width, orphans, outline, outline-color, outline-style, outline-width, overflow, page-break-after, page-break-before, page-break-inside, pause, pause-after, pause-before, pitch, pitch-range, play-during, position, quotes, richness, right, speak, speak-header, speak-numeral, speak-punctuation, speech-rate, stress, table-layout, top, unicode-bidi, visibility, voice-family, volume, widows, z-index",alias:'kw1'},css3:{csv:"alignment-adjust, alignment-baseline, appearance, background-break, background-clip, background-origin, background-size, baseline-shift, binding, bookmark-label, bookmark-level, bookmark-target, border-bottom-left-radius, border-bottom-right-radius, border-break, border-image, border-length, border-radius, border-top-left-radius, border-top-right-radius, box-align, box-direction, box-flex, box-flex-group, box-lines, box-orient, box-pack, box-shadow, box-sizing, color-profile, column-break-after, column-break-before, column-count, column-fill, column-gap, column-rule, column-rule-color, column-rule-style, column-rule-width, column-span, column-width, columns, crop, display-model, display-role, dominant-baseline, drop-initial-after-adjust, drop-initial-after-align, drop-initial-before-adjust, drop-initial-before-align, drop-initial-size, drop-initial-value, fit, fit-position, float-offset, font-effect, font-emphasize, font-emphasize-position, font-emphasize-style, font-size-adjust, font-smooth, font-stretch, grid-columns, grid-rows, hanging-punctuation, hyphenate-after, hyphenate-before, hyphenate-character, hyphenate-lines, hyphenate-resource, hyphens, icon, image-orientation, image-resolution, inline-box-align, line-stacking, line-stacking-ruby, line-stacking-shift, line-stacking-strategy, mark, mark-after, mark-before, marker-offset, marks, marquee-direction, marquee-play-count, marquee-speed, marquee-style, move-to, nav-down, nav-index, nav-left, nav-right, nav-up, opacity, outline-offset, overflow-style, overflow-x, overflow-y, page, page-policy, phonemes, presentation-level, punctuation-trim, rendering-intent, resize, rest, rest-after, rest-before, rotation, rotation-point, ruby-align, ruby-overhang, ruby-position, ruby-span, size, string-set, tab-side, target, target-name, target-new, target-position, text-align-last, text-emphasis, text-height, text-justify, text-outline, text-replace, text-shadow, text-wrap, voice-balance, voice-duration, voice-pitch, voice-pitch-range, voice-rate, voice-stress, voice-volume, white-space-collapse, word-break, word-wrap",alias:'kw2'},values:{csv:"100, 200, 300, 400, 500, 600, 700, 800, 900, above, absolute, always, aqua, armenian, auto, avoid, baseline, below, bidi-override, black, blink, block, blue, bold, bolder, both, bottom, break-all, break-strict, break-word, break, capitalize, caption, center, circle, cjk-ideographic, close-quote, collapse, compact, condensed, crop, cross, crosshair, dashed, decimal-leading-zero, decimal, default, disc, dotted, double, e-resize, embed, expanded, extra-condensed, extra-expanded, fixed, fuchsia, georgian, gray, green, groove, hand, hebrew, help, hidden, hide, higher, hiragana-iroha, hiragana, icon, inherit, inline-table, inline, inset, inside, invert, italic, justify, katakana-iroha, katakana, keep-all, konq-center, landscape, large, larger, left, level, light, lighter, lime, line-through, list-item, loose, loud, lower-alpha, lower-greek, lower-latin, lower-roman, lowercase, lower, ltr, marker, maroon, medium, menu, message-box, middle, mix, move, n-resize, narrower, navy, ne-resize, never, no-close-quote, no-open-quote, no-repeat, none, normal, nowrap, nw-resize, oblique, olive, open-quote, outset, outside, overline, pointer, portrait, pre-wrap, pre, purple, red, relative, repeat, repeat-x, repeat-y, ridge, right, rtl, run-in, s-resize, scroll, se-resize, semi-condensed, semi-expanded, separate, show, silver, small-caps, small-caption, smaller, small, solid, square, static-position, static, status-bar, sub, super, sw-resize, table-caption, table-cell, table-column-group, table-column, table-footer-group, table-header-group, table-row, table-row-group, table, teal, text-bottom, text-top, text, thick, thin, top, transparent, ultra-condensed, ultra-expanded, underline, upper-alpha, upper-latin, upper-roman, uppercase, visible, w-resize, wait, white, wider, x-large, x-small, xx-large, xx-small, yellow",alias:'kw3'}});this.patterns=new Hash({'multiComments':{pattern:this.common.multiComments,alias:'co1'},'strings':{pattern:this.common.strings,alias:'st0'},'selectors':{pattern:/([^\}\n]+)\{/gi,alias:'se0'},'uri':{pattern:/url\s*\([^\)]*\)/gi,alias:'kw4'},'units':{pattern:/\b(\d+[\.\d+]?\s*(px|pt|em|ex|cm|in|mm|pc|%)?)/gi,alias:'nu0'},'hexColors':{pattern:/(#[A-F0-9]{3}([A-F0-9]{3})?)\b/gi,alias:'kw3'},'rgbColors':{pattern:/(rgb\s*\(([1-2]?[0-9]{2}(\,\s*)?){3}\))/g,alias:'kw3'}});this.delimiters=new Hash({start:this.strictRegex('<style type="text/css">'),end:this.strictRegex('</style>')});this.parent(lighter,flame,options)}});Fuel.html=new Class({Extends:Fuel,language:'html',initialize:function(lighter,flame,options){options.matchType="lazy";this.patterns=new Hash({'comments':{pattern:/(?:\&lt;|<)!--[\s\S]*?--(?:\&gt;|>)/gim,alias:'co1'},'cdata':{pattern:/(?:\&lt;|<)!\[CDATA\[[\s\S]*?\]\](?:\&gt;|>)/gim,alias:'st1'},'closingTags':{pattern:/(?:\&lt;|<)\/[A-Z][A-Z0-9]*?(?:\&gt;|>)/gi,alias:'kw1'},'doctype':{pattern:/(?:\&lt;|<)!DOCTYPE[\s\S]+?(?:\&gt;|>)/gim,alias:'st2'}});var tagPattern=/((?:\&lt;|<)[A-Z][A-Z0-9]*)(.*?)(\/?(?:\&gt;|>))/gi,attPattern=/\b([\w-]+)([ \t]*)(=)([ \t]*)(['"][^'"]+['"]|[^'" \t]+)/gi,matches=[],match=null,attMatch=null,index=0;while((match=tagPattern.exec(lighter.code))!=null){matches.push(new Wick(match[1],'kw1',match.index));while((attMatch=attPattern.exec(match[2]))!=null){index=match.index+match[1].length+attMatch.index;matches.push(new Wick(attMatch[1],'kw2',index));index+=attMatch[1].length+attMatch[2].length;matches.push(new Wick(attMatch[3],'kw1',index));index+=attMatch[3].length+attMatch[4].length;matches.push(new Wick(attMatch[5],'kw3',index))}matches.push(new Wick(match[3],'kw1',match.index+match[1].length+match[2].length))}this.parent(lighter,flame,options,matches)}});Fuel.js=new Class({Extends:Fuel,language:'js',initialize:function(lighter,flame,options){this.keywords=new Hash({commonKeywords:{csv:"as, break, case, catch, continue, delete, do, else, eval, finally, for, if, in, is, item, instanceof, return, switch, this, throw, try, typeof, void, while, write, with",alias:'kw1'},langKeywords:{csv:"class, const, default, debugger, export, extends, false, function, import, namespace, new, null, package, private, protected, public, super, true, use, var",alias:'kw2'},windowKeywords:{csv:"alert, back, blur, close, confirm, focus, forward, home, navigate, onblur, onerror, onfocus, onload, onmove, onresize, onunload, open, print, prompt, scroll, status, stop",alias:'kw3'}});this.patterns=new Hash({'slashComments':{pattern:this.common.slashComments,alias:'co1'},'multiComments':{pattern:this.common.multiComments,alias:'co2'},'strings':{pattern:this.common.strings,alias:'st0'},'methodCalls':{pattern:this.common.properties,alias:'me0'},'brackets':{pattern:this.common.brackets,alias:'br0'},'numbers':{pattern:/\b((([0-9]+)?\.)?[0-9_]+([e][-+]?[0-9]+)?|0x[A-F0-9]+)\b/gi,alias:'nu0'},'regex':{pattern:this.delimitedRegex("/","\\","/","g","[gimy]*"),alias:'re0'},'symbols':{pattern:/\+|-|\*|\/|%|!|@|&|\||\^|\<|\>|=|,|\.|;|\?|:/g,alias:'sy0'}});this.delimiters=new Hash({start:this.strictRegex('<script type="text/javascript">','<script language="javascript">'),end:this.strictRegex('</script>')});this.parent(lighter,flame,options)}});Fuel.php=new Class({Extends:Fuel,language:'php',initialize:function(lighter,flame,options,wicks){this.keywords=new Hash({keywords:{csv:"abstract, and, as, break, case, catch, cfunction, class, clone, const, continue, declare, default, do, else, elseif, enddeclare, endfor, endforeach, endif, endswitch, endwhile, extends, final, for, foreach, function, global, goto, if, implements, interface, instanceof, namespace, new, old_function, or, private, protected, public, static, switch, throw, try, use, var, while, xor",alias:'kw1'},langConstants:{csv:"__CLASS__, __DIR__, __FILE__, __FUNCTION__, __METHOD__, __NAMESPACE__, DEFAULT_INCLUDE_PATH, E_ALL, E_COMPILE_ERROR, E_COMPILE_WARNING, E_CORE_ERROR, E_CORE_WARNING, E_ERROR, E_NOTICE, E_PARSE, E_STRICT, E_USER_ERROR, E_USER_NOTICE, E_USER_WARNING, E_WARNING, PEAR_EXTENSION_DIR, PEAR_INSTALL_DIR, PHP_BINDIR, PHP_CONFIG_FILE_PATH, PHP_DATADIR, PHP_EXTENSION_DIR, PHP_LIBDIR, PHP_LOCALSTATEDIR, PHP_OS, PHP_OUTPUT_HANDLER_CONT, PHP_OUTPUT_HANDLER_END, PHP_OUTPUT_HANDLER_START, PHP_SYSCONFDIR, PHP_VERSION",alias:'kw1'},constructs:{csv:"array, die, echo, empty, exit, eval, include, include_once, isset, list, require, require_once, return, print, unset",alias:'kw1'},commonFuncs:{csv:"abs, addcslashes, addslashes, aggregate, apache_child_terminate, apache_get_version, apache_lookup_uri, apache_note, apache_request_headers, apache_response_headers, apache_setenv, array_change_key_case, array_chunk, array_count_values, array_diff, array_diff_assoc, array_fill, array_filter, array_flip, array_intersect, array_intersect_assoc, array_key_exists, array_keys, array_map, array_merge, array_merge_recursive, array_multisort, array_pad, array_pop, array_push, array_rand, array_reduce, array_reverse, array_search, array_shift, array_slice, array_splice, array_sum, array_unique, array_unshift, array_values, array_walk, arsort, asort, assert, assert_options, base64_decode, base64_encode, base_convert, basename, bin2hex, bindec, ceil, chdir, checkdate, chop, chown, chunk_split, clearstatcache, closedir, compact, connection_aborted, connection_status, constant, copy, count, count_chars, crc32, crypt, ctype_alnum, ctype_alpha, ctype_cntrl, ctype_digit, ctype_graph, ctype_lower, ctype_print, ctype_punct, ctype_space, ctype_upper, ctype_xdigit, current, date, debug_backtrace, debug_zval_dump, decbin, dechex, decoct, define, defined, dir, dirname, dl, doubleval, each, end, ereg, ereg_replace, eregi, eregi_replace, error_log, error_reporting, escapeshellarg, escapeshellcmd, exec, explode, extension_loaded, extract, fclose, feof, fflush, fgetc, fgetcsv, fgets, fgetss, file, file_exists, file_get_contents, fileatime, filectime, filegroup, fileinode, filemtime, fileowner, fileperms, filesize, filetype, floatval, flock, floor, flush, fmod, fnmatch, fopen, fpassthru, fputs, fread, fscanf, fseek, fsockopen, fstat, ftell, ftok, ftruncate, func_get_arg, func_get_args, func_num_args, fwrite, get_browser, get_cfg_var, get_declared_classes, get_extension_funcs, get_include_path, get_loaded_extensions, get_magic_quotes_gpc, get_magic_quotes_runtime, get_meta_tags, getallheaders, getcwd, getdate, getenv, getimagesize, getopt, getrandmax, getrusage, gettimeofday, gettype, glob, global, gmdate, gmmktime, gmstrftime, header, headers_sent, hebrev, hebrevc, hexdec, highlight_file, highlight_string, html_entity_decode, htmlentities, htmlspecialchars, ignore_user_abort, image_type_to_mime_type, implode, import_request_variables, in_array, ini_alter, ini_get, ini_get_all, ini_restore, ini_set, intval, ip2long, is_array, is_bool, is_dir, is_double, is_executable, is_file, is_finite, is_float, is_infinite, is_int, is_integer, is_link, is_long, is_nan, is_null, is_numeric, is_object, is_readable, is_real, is_resource, is_scalar, is_string, is_uploaded_file, is_writable, is_writeable, join, key, key_exists, krsort, ksort, link, linkinfo, localeconv, localtime, long2ip, lstat, ltrim, magic_quotes_runtime, mail, max, md5, md5_file, memory_get_usage, microtime, min, mkdir, mktime, move_uploaded_file, mt_getrandmax, mt_rand, mt_srand, natcasesort, natsort, next, nl2br, number_format, ob_clean, ob_end_clean, ob_end_flush, ob_flush, ob_get_clean, ob_get_contents, ob_get_flush, ob_get_length, ob_get_level, ob_get_status, ob_implicit_flush, ob_list_handlers, ob_start, octdec, opendir, overload, pack, parse_ini_file, parse_str, parse_url, passthru, pathinfo, pclose, pfsockopen, pg_affected_rows, pg_cancel_query, pg_client_encoding, pg_close, pg_cmdtuples, pg_connect, pg_connection_busy, pg_connection_reset, pg_connection_status, pg_convert, pg_copy_from, pg_copy_to, pg_dbname, pg_delete, pg_end_copy, pg_errormessage, pg_escape_bytea, pg_escape_string, pg_exec, pg_fetch_all, pg_fetch_array, pg_fetch_assoc, pg_fetch_object, pg_fetch_result, pg_fetch_row, pg_field_is_null, pg_field_name, pg_field_num, pg_field_prtlen, pg_field_size, pg_field_type, pg_fieldisnull, pg_fieldname, pg_fieldnum, pg_fieldprtlen, pg_fieldsize, pg_fieldtype, pg_free_result, pg_freeresult, pg_get_notify, pg_get_pid, pg_get_result, pg_getlastoid, pg_host, pg_insert, pg_last_error, pg_last_notice, pg_last_oid, pg_lo_close, pg_lo_create, pg_lo_export, pg_lo_import, pg_lo_open, pg_lo_read, pg_lo_read_all, pg_lo_seek, pg_lo_tell, pg_lo_unlink, pg_lo_write, pg_loclose, pg_locreate, pg_loexport, pg_loimport, pg_loopen, pg_loread, pg_loreadall, pg_lounlink, pg_lowrite, pg_meta_data, pg_num_fields, pg_num_rows, pg_numfields, pg_numrows, pg_options, pg_pconnect, pg_ping, pg_port, pg_put_line, pg_query, pg_result, pg_result_error, pg_result_seek, pg_result_status, pg_select, pg_send_query, pg_set_client_encoding, pg_trace, pg_tty, pg_unescape_bytea, pg_untrace, pg_update, phpcredits, phpinfo, phpversion, popen, pos, preg_grep, preg_match, preg_match_all, preg_quote, preg_replace, preg_replace_callback, preg_split, prev, print_r, printf, proc_close, proc_open, putenv, quoted_printable_decode, quotemeta, rand, range, rawurldecode, rawurlencode, readdir, readfile, readlink, realpath, rename, reset, restore_error_handler, restore_include_path, rewind, rewinddir, rmdir, round, rsort, rtrim, serialize, session_cache_expire, session_cache_limiter, session_decode, session_destroy, session_encode, session_get_cookie_params, session_id, session_is_registered, session_module_name, session_name, session_regenerate_id, session_register, session_save_path, session_set_cookie_params, session_set_save_handler, session_start, session_unregister, session_unset, session_write_close, set_error_handler, set_file_buffer, set_include_path, set_magic_quotes_runtime, set_socket_blocking, set_time_limit, setcookie, setlocale, settype, shell_exec, show_source, shuffle, similar_text, sizeof, sleep, socket_get_status, socket_set_blocking, socket_set_timeout, sort, split, spliti, sprintf, sql_regcase, srand, sscanf, stat, static, str_pad, str_repeat, str_replace, str_rot13, str_shuffle, str_word_count, strcasecmp, strchr, strcmp, strcoll, strcspn, stream_context_create, stream_context_get_options, stream_context_set_option, stream_context_set_params, stream_filter_append, stream_filter_prepend, stream_get_meta_data, stream_register_wrapper, stream_select, stream_set_blocking, stream_set_timeout, stream_set_write_buffer, stream_wrapper_register, strftime, strip_tags, stripcslashes, stripslashes, stristr, strlen, strnatcasecmp, strnatcmp, strncasecmp, strncmp, strpos, strrchr, strrev, strrpos, strspn, strstr, strtok, strtolower, strtotime, strtoupper, strtr, strval, substr, substr_count, substr_replace, system, tempnam, time, tmpfile, touch, trigger_error, trim, uasort, ucfirst, ucwords, uksort, umask, uniqid, unlink, unpack, unserialize, urldecode, urlencode, user_error, usleep, usort, var_dump, var_export, version_compare, virtual, vprintf, vsprintf, wordwrap",alias:'kw2'},database:{csv:"mysql, mysql_affected_rows, mysql_client_encoding, mysql_close, mysql_connect, mysql_create_db, mysql_createdb, mysql_data_seek, mysql_db_name, mysql_db_query, mysql_dbname, mysql_drop_db, mysql_dropdb, mysql_errno, mysql_error, mysql_escape_string, mysql_fetch_array, mysql_fetch_assoc, mysql_fetch_field, mysql_fetch_lengths, mysql_fetch_object, mysql_fetch_row, mysql_field_flags, mysql_field_len, mysql_field_name, mysql_field_seek, mysql_field_table, mysql_field_type, mysql_fieldflags, mysql_fieldlen, mysql_fieldname, mysql_fieldtable, mysql_fieldtype, mysql_free_result, mysql_freeresult, mysql_get_client_info, mysql_get_host_info, mysql_get_proto_info, mysql_get_server_info, mysql_info, mysql_insert_id, mysql_list_dbs, mysql_list_fields, mysql_list_processes, mysql_list_tables, mysql_listdbs, mysql_listfields, mysql_listtables, mysql_num_fields, mysql_num_rows, mysql_numfields, mysql_numrows, mysql_pconnect, mysql_query, mysql_real_escape_string, mysql_result, mysql_select_db, mysql_selectdb, mysql_stat, mysql_table_name, mysql_tablename, mysql_thread_id, mysql_unbuffered_query, mysqli, mysqli_affected_rows, mysqli_autocommit, mysqli_bind_param, mysqli_bind_result, mysqli_change_user, mysqli_character_set_name, mysqli_client_encoding, mysqli_close, mysqli_commit, mysqli_connect, mysqli_data_seek, mysqli_debug, mysqli_disable_reads_from_master, mysqli_disable_rpl_parse, mysqli_dump_debug_info, mysqli_enable_reads_from_master, mysqli_enable_rpl_parse, mysqli_errno, mysqli_error, mysqli_escape_string, mysqli_execute, mysqli_fetch, mysqli_fetch_array, mysqli_fetch_assoc, mysqli_fetch_field, mysqli_fetch_field_direct, mysqli_fetch_fields, mysqli_fetch_lengths, mysqli_fetch_object, mysqli_fetch_row, mysqli_field_count, mysqli_field_seek, mysqli_field_tell, mysqli_free_result, mysqli_get_client_info, mysqli_get_host_info, mysqli_get_proto_info, mysqli_get_server_info, mysqli_get_server_version, mysqli_info, mysqli_init, mysqli_insert_id, mysqli_kill, mysqli_master_query, mysqli_num_fields, mysqli_num_rows, mysqli_options, mysqli_param_count, mysqli_ping, mysqli_prepare, mysqli_prepare_result, mysqli_profiler, mysqli_query, mysqli_read_query_result, mysqli_real_connect, mysqli_real_escape_string, mysqli_real_query, mysqli_reload, mysqli_rollback, mysqli_rpl_parse_enabled, mysqli_rpl_probe, mysqli_rpl_query_type, mysqli_select_db, mysqli_send_long_data, mysqli_send_query, mysqli_set_opt, mysqli_slave_query, mysqli_ssl_set, mysqli_stat, mysqli_stmt_affected_rows, mysqli_stmt_close, mysqli_stmt_errno, mysqli_stmt_error, mysqli_stmt_store_result, mysqli_store_result, mysqli_thread_id, mysqli_thread_safe, mysqli_use_result, mysqli_warning_count",alias:'kw2'}});this.patterns=new Hash({'slashComments':{pattern:this.common.slashComments,alias:'co1'},'multiComments':{pattern:this.common.multiComments,alias:'co2'},'strings':{pattern:this.common.strings,alias:'st0'},'heredocs':{pattern:/(<<<\s*?(\'?)([A-Z0-9]+)\2[^\n]*?\n[\s\S]*?\n\3(?![A-Z0-9\s]))/gim,alias:'st1'},'numbers':{pattern:/\b((([0-9]+)?\.)?[0-9_]+([e][-+]?[0-9]+)?|0x[A-F0-9]+)\b/gi,alias:'nu0'},'variables':{pattern:/[\$]{1,2}[A-Z_][\w]*/gim,alias:'kw3'},'functions':{pattern:this.common.functionCalls,alias:'me0'},'constants':{pattern:/\b[A-Za-z_][\w]*\b/g,alias:'kw4'},'methods':{pattern:/->([\w]+)/gim,alias:'kw3'},'brackets':{pattern:this.common.brackets,alias:'br0'}});this.delimiters=new Hash({start:this.strictRegex('<?php','<?=','<%','<script language="php">'),end:this.strictRegex('?>','%>','</script>')});this.parent(lighter,flame,options,wicks)}});