var Scriptaculous={Version:"1.8.1",require:function(a){},REQUIRED_PROTOTYPE:"1.6.0",load:function(){function a(b){var c=b.split(".");return parseInt(c[0])*100000+parseInt(c[1])*1000+parseInt(c[2])}if((typeof Prototype=="undefined")||(typeof Element=="undefined")||(typeof Element.Methods=="undefined")||(a(Prototype.Version)<a(Scriptaculous.REQUIRED_PROTOTYPE))){throw ("script.aculo.us requires the Prototype JavaScript framework >= "+Scriptaculous.REQUIRED_PROTOTYPE)}$A(document.getElementsByTagName("script")).findAll(function(b){return(b.src&&b.src.match(/scriptaculous\.js(\?.*)?$/))}).each(function(c){var d=c.src.replace(/scriptaculous\.js(\?.*)?$/,"");var b=c.src.match(/\?.*load=([a-z,]*)/);(b?b[1]:"builder,effects,dragdrop,controls,slider,sound").split(",").each(function(e){Scriptaculous.require(d+e+".js")})})}};Scriptaculous.load();String.prototype.parseColor=function(){var b="#";if(this.slice(0,4)=="rgb("){var a=this.slice(4,this.length-1).split(",");var c=0;do{b+=parseInt(a[c]).toColorPart()}while(++c<3)}else{if(this.slice(0,1)=="#"){if(this.length==4){for(var c=1;c<4;c++){b+=(this.charAt(c)+this.charAt(c)).toLowerCase()}}if(this.length==7){b=this.toLowerCase()}}}return(b.length==7?b:(arguments[0]||this))};Element.collectTextNodes=function(a){return $A($(a).childNodes).collect(function(b){return(b.nodeType==3?b.nodeValue:(b.hasChildNodes()?Element.collectTextNodes(b):""))}).flatten().join("")};Element.collectTextNodesIgnoreClass=function(a,b){return $A($(a).childNodes).collect(function(c){return(c.nodeType==3?c.nodeValue:((c.hasChildNodes()&&!Element.hasClassName(c,b))?Element.collectTextNodesIgnoreClass(c,b):""))}).flatten().join("")};Element.setContentZoom=function(a,b){a=$(a);a.setStyle({fontSize:(b/100)+"em"});if(Prototype.Browser.WebKit){window.scrollBy(0,0)}return a};Element.getInlineOpacity=function(a){return $(a).style.opacity||""};Element.forceRerendering=function(b){try{b=$(b);var a=document.createTextNode(" ");b.appendChild(a);b.removeChild(a)}catch(c){}};var Effect={_elementDoesNotExistError:{name:"ElementDoesNotExistError",message:"The specified DOM element does not exist, but is required for this effect to operate"},Transitions:{linear:Prototype.K,sinoidal:function(a){return(-Math.cos(a*Math.PI)/2)+0.5},reverse:function(a){return 1-a},flicker:function(a){var a=((-Math.cos(a*Math.PI)/4)+0.75)+Math.random()/4;return a>1?1:a},wobble:function(a){return(-Math.cos(a*Math.PI*(9*a))/2)+0.5},pulse:function(b,a){a=a||5;return(((b%(1/a))*a).round()==0?((b*a*2)-(b*a*2).floor()):1-((b*a*2)-(b*a*2).floor()))},spring:function(a){return 1-(Math.cos(a*4.5*Math.PI)*Math.exp(-a*6))},none:function(a){return 0},full:function(a){return 1}},DefaultOptions:{duration:1,fps:100,sync:false,from:0,to:1,delay:0,queue:"parallel"},tagifyText:function(a){var b="position:relative";if(Prototype.Browser.IE){b+=";zoom:1"}a=$(a);$A(a.childNodes).each(function(c){if(c.nodeType==3){c.nodeValue.toArray().each(function(d){a.insertBefore(new Element("span",{style:b}).update(d==" "?String.fromCharCode(160):d),c)});Element.remove(c)}})},multiple:function(e,a){var c;if(((typeof e=="object")||Object.isFunction(e))&&(e.length)){c=e}else{c=$(e).childNodes}var d=Object.extend({speed:0.1,delay:0},arguments[2]||{});var b=d.delay;$A(c).each(function(g,f){new a(g,Object.extend(d,{delay:f*d.speed+b}))})},PAIRS:{slide:["SlideDown","SlideUp"],blind:["BlindDown","BlindUp"],appear:["Appear","Fade"]},toggle:function(c,a){c=$(c);a=(a||"appear").toLowerCase();var b=Object.extend({queue:{position:"end",scope:(c.id||"global"),limit:1}},arguments[2]||{});Effect[c.visible()?Effect.PAIRS[a][1]:Effect.PAIRS[a][0]](c,b)}};Effect.DefaultOptions.transition=Effect.Transitions.sinoidal;Effect.ScopedQueue=Class.create(Enumerable,{initialize:function(){this.effects=[];this.interval=null},_each:function(a){this.effects._each(a)},add:function(c){var a=new Date().getTime();var b=Object.isString(c.options.queue)?c.options.queue:c.options.queue.position;switch(b){case"front":this.effects.findAll(function(d){return d.state=="idle"}).each(function(d){d.startOn+=c.finishOn;d.finishOn+=c.finishOn});break;case"with-last":a=this.effects.pluck("startOn").max()||a;break;case"end":a=this.effects.pluck("finishOn").max()||a;break}c.startOn+=a;c.finishOn+=a;if(!c.options.queue.limit||(this.effects.length<c.options.queue.limit)){this.effects.push(c)}if(!this.interval){this.interval=setInterval(this.loop.bind(this),15)}},remove:function(a){this.effects=this.effects.reject(function(b){return b==a});if(this.effects.length==0){clearInterval(this.interval);this.interval=null}},loop:function(){var a=new Date().getTime();for(var c=0,b=this.effects.length;c<b;c++){this.effects[c]&&this.effects[c].loop(a)}}});Effect.Queues={instances:$H(),get:function(a){if(!Object.isString(a)){return a}return this.instances.get(a)||this.instances.set(a,new Effect.ScopedQueue())}};Effect.Queue=Effect.Queues.get("global");Effect.Base=Class.create({position:null,start:function(options){function codeForEvent(options,eventName){return((options[eventName+"Internal"]?"this.options."+eventName+"Internal(this);":"")+(options[eventName]?"this.options."+eventName+"(this);":""))}if(options&&options.transition===false){options.transition=Effect.Transitions.linear}this.options=Object.extend(Object.extend({},Effect.DefaultOptions),options||{});this.currentFrame=0;this.state="idle";this.startOn=this.options.delay*1000;this.finishOn=this.startOn+(this.options.duration*1000);this.fromToDelta=this.options.to-this.options.from;this.totalTime=this.finishOn-this.startOn;this.totalFrames=this.options.fps*this.options.duration;eval('this.render = function(pos){ if (this.state=="idle"){this.state="running";'+codeForEvent(this.options,"beforeSetup")+(this.setup?"this.setup();":"")+codeForEvent(this.options,"afterSetup")+'};if (this.state=="running"){pos=this.options.transition(pos)*'+this.fromToDelta+"+"+this.options.from+";this.position=pos;"+codeForEvent(this.options,"beforeUpdate")+(this.update?"this.update(pos);":"")+codeForEvent(this.options,"afterUpdate")+"}}");this.event("beforeStart");if(!this.options.sync){Effect.Queues.get(Object.isString(this.options.queue)?"global":this.options.queue.scope).add(this)}},loop:function(a){if(a>=this.startOn){if(a>=this.finishOn){this.render(1);this.cancel();this.event("beforeFinish");if(this.finish){this.finish()}this.event("afterFinish");return}var c=(a-this.startOn)/this.totalTime,b=(c*this.totalFrames).round();if(b>this.currentFrame){this.render(c);this.currentFrame=b}}},cancel:function(){if(!this.options.sync){Effect.Queues.get(Object.isString(this.options.queue)?"global":this.options.queue.scope).remove(this)}this.state="finished"},event:function(a){if(this.options[a+"Internal"]){this.options[a+"Internal"](this)}if(this.options[a]){this.options[a](this)}},inspect:function(){var a=$H();for(property in this){if(!Object.isFunction(this[property])){a.set(property,this[property])}}return"#<Effect:"+a.inspect()+",options:"+$H(this.options).inspect()+">"}});Effect.Parallel=Class.create(Effect.Base,{initialize:function(a){this.effects=a||[];this.start(arguments[1])},update:function(a){this.effects.invoke("render",a)},finish:function(a){this.effects.each(function(b){b.render(1);b.cancel();b.event("beforeFinish");if(b.finish){b.finish(a)}b.event("afterFinish")})}});Effect.Tween=Class.create(Effect.Base,{initialize:function(a,d,c){a=Object.isString(a)?$(a):a;var f=$A(arguments),b=f.last(),e=f.length==5?f[3]:null;this.method=Object.isFunction(b)?b.bind(a):Object.isFunction(a[b])?a[b].bind(a):function(g){a[b]=g};this.start(Object.extend({from:d,to:c},e||{}))},update:function(a){this.method(a)}});Effect.Event=Class.create(Effect.Base,{initialize:function(){this.start(Object.extend({duration:0},arguments[0]||{}))},update:Prototype.emptyFunction});Effect.Opacity=Class.create(Effect.Base,{initialize:function(b){this.element=$(b);if(!this.element){throw (Effect._elementDoesNotExistError)}if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout)){this.element.setStyle({zoom:1})}var a=Object.extend({from:this.element.getOpacity()||0,to:1},arguments[1]||{});this.start(a)},update:function(a){this.element.setOpacity(a)}});Effect.Move=Class.create(Effect.Base,{initialize:function(b){this.element=$(b);if(!this.element){throw (Effect._elementDoesNotExistError)}var a=Object.extend({x:0,y:0,mode:"relative"},arguments[1]||{});this.start(a)},setup:function(){this.element.makePositioned();this.originalLeft=parseFloat(this.element.getStyle("left")||"0");this.originalTop=parseFloat(this.element.getStyle("top")||"0");if(this.options.mode=="absolute"){this.options.x=this.options.x-this.originalLeft;this.options.y=this.options.y-this.originalTop}},update:function(a){this.element.setStyle({left:(this.options.x*a+this.originalLeft).round()+"px",top:(this.options.y*a+this.originalTop).round()+"px"})}});Effect.MoveBy=function(c,b,a){return new Effect.Move(c,Object.extend({x:a,y:b},arguments[3]||{}))};Effect.Scale=Class.create(Effect.Base,{initialize:function(c,a){this.element=$(c);if(!this.element){throw (Effect._elementDoesNotExistError)}var b=Object.extend({scaleX:true,scaleY:true,scaleContent:true,scaleFromCenter:false,scaleMode:"box",scaleFrom:100,scaleTo:a},arguments[2]||{});this.start(b)},setup:function(){this.restoreAfterFinish=this.options.restoreAfterFinish||false;this.elementPositioning=this.element.getStyle("position");this.originalStyle={};["top","left","width","height","fontSize"].each(function(b){this.originalStyle[b]=this.element.style[b]}.bind(this));this.originalTop=this.element.offsetTop;this.originalLeft=this.element.offsetLeft;var a=this.element.getStyle("font-size")||"100%";["em","px","%","pt"].each(function(b){if(a.indexOf(b)>0){this.fontSize=parseFloat(a);this.fontSizeType=b}}.bind(this));this.factor=(this.options.scaleTo-this.options.scaleFrom)/100;this.dims=null;if(this.options.scaleMode=="box"){this.dims=[this.element.offsetHeight,this.element.offsetWidth]}if(/^content/.test(this.options.scaleMode)){this.dims=[this.element.scrollHeight,this.element.scrollWidth]}if(!this.dims){this.dims=[this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth]}},update:function(a){var b=(this.options.scaleFrom/100)+(this.factor*a);if(this.options.scaleContent&&this.fontSize){this.element.setStyle({fontSize:this.fontSize*b+this.fontSizeType})}this.setDimensions(this.dims[0]*b,this.dims[1]*b)},finish:function(a){if(this.restoreAfterFinish){this.element.setStyle(this.originalStyle)}},setDimensions:function(e,b){var c={};if(this.options.scaleX){c.width=b.round()+"px"}if(this.options.scaleY){c.height=e.round()+"px"}if(this.options.scaleFromCenter){var a=(e-this.dims[0])/2;var f=(b-this.dims[1])/2;if(this.elementPositioning=="absolute"){if(this.options.scaleY){c.top=this.originalTop-a+"px"}if(this.options.scaleX){c.left=this.originalLeft-f+"px"}}else{if(this.options.scaleY){c.top=-a+"px"}if(this.options.scaleX){c.left=-f+"px"}}}this.element.setStyle(c)}});Effect.Highlight=Class.create(Effect.Base,{initialize:function(b){this.element=$(b);if(!this.element){throw (Effect._elementDoesNotExistError)}var a=Object.extend({startcolor:"#ffff99"},arguments[1]||{});this.start(a)},setup:function(){if(this.element.getStyle("display")=="none"){this.cancel();return}this.oldStyle={};if(!this.options.keepBackgroundImage){this.oldStyle.backgroundImage=this.element.getStyle("background-image");this.element.setStyle({backgroundImage:"none"})}if(!this.options.endcolor){this.options.endcolor=this.element.getStyle("background-color").parseColor("#ffffff")}if(!this.options.restorecolor){this.options.restorecolor=this.element.getStyle("background-color")}this._base=$R(0,2).map(function(a){return parseInt(this.options.startcolor.slice(a*2+1,a*2+3),16)}.bind(this));this._delta=$R(0,2).map(function(a){return parseInt(this.options.endcolor.slice(a*2+1,a*2+3),16)-this._base[a]}.bind(this))},update:function(a){this.element.setStyle({backgroundColor:$R(0,2).inject("#",function(b,c,d){return b+((this._base[d]+(this._delta[d]*a)).round().toColorPart())}.bind(this))})},finish:function(){this.element.setStyle(Object.extend(this.oldStyle,{backgroundColor:this.options.restorecolor}))}});Effect.ScrollTo=function(b){var a=arguments[1]||{},e=document.viewport.getScrollOffsets(),c=$(b).cumulativeOffset(),d=(window.height||document.body.scrollHeight)-document.viewport.getHeight();if(a.offset){c[1]+=a.offset}return new Effect.Tween(null,e.top,c[1]>d?d:c[1],a,function(f){scrollTo(e.left,f.round())})};Effect.Fade=function(a){a=$(a);var b=a.getInlineOpacity();var c=Object.extend({from:a.getOpacity()||1,to:0,afterFinishInternal:function(d){if(d.options.to!=0){return}d.element.hide().setStyle({opacity:b})}},arguments[1]||{});return new Effect.Opacity(a,c)};Effect.Appear=function(b){b=$(b);var a=Object.extend({from:(b.getStyle("display")=="none"?0:b.getOpacity()||0),to:1,afterFinishInternal:function(c){c.element.forceRerendering()},beforeSetup:function(c){c.element.setOpacity(c.options.from).show()}},arguments[1]||{});return new Effect.Opacity(b,a)};Effect.Puff=function(b){b=$(b);var a={opacity:b.getInlineOpacity(),position:b.getStyle("position"),top:b.style.top,left:b.style.left,width:b.style.width,height:b.style.height};return new Effect.Parallel([new Effect.Scale(b,200,{sync:true,scaleFromCenter:true,scaleContent:true,restoreAfterFinish:true}),new Effect.Opacity(b,{sync:true,to:0})],Object.extend({duration:1,beforeSetupInternal:function(c){Position.absolutize(c.effects[0].element)},afterFinishInternal:function(c){c.effects[0].element.hide().setStyle(a)}},arguments[1]||{}))};Effect.BlindUp=function(a){a=$(a);a.makeClipping();return new Effect.Scale(a,0,Object.extend({scaleContent:false,scaleX:false,restoreAfterFinish:true,afterFinishInternal:function(b){b.element.hide().undoClipping()}},arguments[1]||{}))};Effect.BlindDown=function(b){b=$(b);var a=b.getDimensions();return new Effect.Scale(b,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:a.height,originalWidth:a.width},restoreAfterFinish:true,afterSetup:function(c){c.element.makeClipping().setStyle({height:"0px"}).show()},afterFinishInternal:function(c){c.element.undoClipping()}},arguments[1]||{}))};Effect.SwitchOff=function(b){b=$(b);var a=b.getInlineOpacity();return new Effect.Appear(b,Object.extend({duration:0.4,from:0,transition:Effect.Transitions.flicker,afterFinishInternal:function(c){new Effect.Scale(c.element,1,{duration:0.3,scaleFromCenter:true,scaleX:false,scaleContent:false,restoreAfterFinish:true,beforeSetup:function(d){d.element.makePositioned().makeClipping()},afterFinishInternal:function(d){d.element.hide().undoClipping().undoPositioned().setStyle({opacity:a})}})}},arguments[1]||{}))};Effect.DropOut=function(b){b=$(b);var a={top:b.getStyle("top"),left:b.getStyle("left"),opacity:b.getInlineOpacity()};return new Effect.Parallel([new Effect.Move(b,{x:0,y:100,sync:true}),new Effect.Opacity(b,{sync:true,to:0})],Object.extend({duration:0.5,beforeSetup:function(c){c.effects[0].element.makePositioned()},afterFinishInternal:function(c){c.effects[0].element.hide().undoPositioned().setStyle(a)}},arguments[1]||{}))};Effect.Shake=function(b){b=$(b);var e=Object.extend({distance:20,duration:0.5},arguments[1]||{});var c=parseFloat(e.distance);var a=parseFloat(e.duration)/10;var d={top:b.getStyle("top"),left:b.getStyle("left")};return new Effect.Move(b,{x:c,y:0,duration:a,afterFinishInternal:function(f){new Effect.Move(f.element,{x:-c*2,y:0,duration:a*2,afterFinishInternal:function(g){new Effect.Move(g.element,{x:c*2,y:0,duration:a*2,afterFinishInternal:function(h){new Effect.Move(h.element,{x:-c*2,y:0,duration:a*2,afterFinishInternal:function(j){new Effect.Move(j.element,{x:c*2,y:0,duration:a*2,afterFinishInternal:function(k){new Effect.Move(k.element,{x:-c,y:0,duration:a,afterFinishInternal:function(m){m.element.undoPositioned().setStyle(d)}})}})}})}})}})}})};Effect.SlideDown=function(a){a=$(a).cleanWhitespace();var b=a.down().getStyle("bottom");var c=a.getDimensions();return new Effect.Scale(a,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:window.opera?0:1,scaleMode:{originalHeight:c.height,originalWidth:c.width},restoreAfterFinish:true,afterSetup:function(d){d.element.makePositioned();d.element.down().makePositioned();if(window.opera){d.element.setStyle({top:""})}d.element.makeClipping().setStyle({height:"0px"}).show()},afterUpdateInternal:function(d){d.element.down().setStyle({bottom:(d.dims[0]-d.element.clientHeight)+"px"})},afterFinishInternal:function(d){d.element.undoClipping().undoPositioned();d.element.down().undoPositioned().setStyle({bottom:b})}},arguments[1]||{}))};Effect.SlideUp=function(a){a=$(a).cleanWhitespace();var b=a.down().getStyle("bottom");var c=a.getDimensions();return new Effect.Scale(a,window.opera?0:1,Object.extend({scaleContent:false,scaleX:false,scaleMode:"box",scaleFrom:100,scaleMode:{originalHeight:c.height,originalWidth:c.width},restoreAfterFinish:true,afterSetup:function(d){d.element.makePositioned();d.element.down().makePositioned();if(window.opera){d.element.setStyle({top:""})}d.element.makeClipping().show()},afterUpdateInternal:function(d){d.element.down().setStyle({bottom:(d.dims[0]-d.element.clientHeight)+"px"})},afterFinishInternal:function(d){d.element.hide().undoClipping().undoPositioned();d.element.down().undoPositioned().setStyle({bottom:b})}},arguments[1]||{}))};Effect.Squish=function(a){return new Effect.Scale(a,window.opera?1:0,{restoreAfterFinish:true,beforeSetup:function(b){b.element.makeClipping()},afterFinishInternal:function(b){b.element.hide().undoClipping()}})};Effect.Grow=function(e){e=$(e);var d=Object.extend({direction:"center",moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.full},arguments[1]||{});var c={top:e.style.top,left:e.style.left,height:e.style.height,width:e.style.width,opacity:e.getInlineOpacity()};var a=e.getDimensions();var b,h;var g,f;switch(d.direction){case"top-left":b=h=g=f=0;break;case"top-right":b=a.width;h=f=0;g=-a.width;break;case"bottom-left":b=g=0;h=a.height;f=-a.height;break;case"bottom-right":b=a.width;h=a.height;g=-a.width;f=-a.height;break;case"center":b=a.width/2;h=a.height/2;g=-a.width/2;f=-a.height/2;break}return new Effect.Move(e,{x:b,y:h,duration:0.01,beforeSetup:function(j){j.element.hide().makeClipping().makePositioned()},afterFinishInternal:function(j){new Effect.Parallel([new Effect.Opacity(j.element,{sync:true,to:1,from:0,transition:d.opacityTransition}),new Effect.Move(j.element,{x:g,y:f,sync:true,transition:d.moveTransition}),new Effect.Scale(j.element,100,{scaleMode:{originalHeight:a.height,originalWidth:a.width},sync:true,scaleFrom:window.opera?1:0,transition:d.scaleTransition,restoreAfterFinish:true})],Object.extend({beforeSetup:function(k){k.effects[0].element.setStyle({height:"0px"}).show()},afterFinishInternal:function(k){k.effects[0].element.undoClipping().undoPositioned().setStyle(c)}},d))}})};Effect.Shrink=function(a){a=$(a);var f=Object.extend({direction:"center",moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.none},arguments[1]||{});var e={top:a.style.top,left:a.style.left,height:a.style.height,width:a.style.width,opacity:a.getInlineOpacity()};var d=a.getDimensions();var c,b;switch(f.direction){case"top-left":c=b=0;break;case"top-right":c=d.width;b=0;break;case"bottom-left":c=0;b=d.height;break;case"bottom-right":c=d.width;b=d.height;break;case"center":c=d.width/2;b=d.height/2;break}return new Effect.Parallel([new Effect.Opacity(a,{sync:true,to:0,from:1,transition:f.opacityTransition}),new Effect.Scale(a,window.opera?1:0,{sync:true,transition:f.scaleTransition,restoreAfterFinish:true}),new Effect.Move(a,{x:c,y:b,sync:true,transition:f.moveTransition})],Object.extend({beforeStartInternal:function(g){g.effects[0].element.makePositioned().makeClipping()},afterFinishInternal:function(g){g.effects[0].element.hide().undoClipping().undoPositioned().setStyle(e)}},f))};Effect.Pulsate=function(a){a=$(a);var e=arguments[1]||{};var d=a.getInlineOpacity();var c=e.transition||Effect.Transitions.sinoidal;var b=function(f){return c(1-Effect.Transitions.pulse(f,e.pulses))};b.bind(c);return new Effect.Opacity(a,Object.extend(Object.extend({duration:2,from:0,afterFinishInternal:function(f){f.element.setStyle({opacity:d})}},e),{transition:b}))};Effect.Fold=function(b){b=$(b);var a={top:b.style.top,left:b.style.left,width:b.style.width,height:b.style.height};b.makeClipping();return new Effect.Scale(b,5,Object.extend({scaleContent:false,scaleX:false,afterFinishInternal:function(c){new Effect.Scale(b,1,{scaleContent:false,scaleY:false,afterFinishInternal:function(d){d.element.hide().undoClipping().setStyle(a)}})}},arguments[1]||{}))};Effect.Morph=Class.create(Effect.Base,{initialize:function(a){this.element=$(a);if(!this.element){throw (Effect._elementDoesNotExistError)}var b=Object.extend({style:{}},arguments[1]||{});if(!Object.isString(b.style)){this.style=$H(b.style)}else{if(b.style.include(":")){this.style=b.style.parseStyle()}else{this.element.addClassName(b.style);this.style=$H(this.element.getStyles());this.element.removeClassName(b.style);var c=this.element.getStyles();this.style=this.style.reject(function(d){return d.value==c[d.key]});b.afterFinishInternal=function(d){d.element.addClassName(d.options.style);d.transforms.each(function(e){d.element.style[e.style]=""})}}}this.start(b)},setup:function(){function a(b){if(!b||["rgba(0, 0, 0, 0)","transparent"].include(b)){b="#ffffff"}b=b.parseColor();return $R(0,2).map(function(c){return parseInt(b.slice(c*2+1,c*2+3),16)})}this.transforms=this.style.map(function(g){var f=g[0],e=g[1],d=null;if(e.parseColor("#zzzzzz")!="#zzzzzz"){e=e.parseColor();d="color"}else{if(f=="opacity"){e=parseFloat(e);if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout)){this.element.setStyle({zoom:1})}}else{if(Element.CSS_LENGTH.test(e)){var b=e.match(/^([\+\-]?[0-9\.]+)(.*)$/);e=parseFloat(b[1]);d=(b.length==3)?b[2]:null}}}var c=this.element.getStyle(f);return{style:f.camelize(),originalValue:d=="color"?a(c):parseFloat(c||0),targetValue:d=="color"?a(e):e,unit:d}}.bind(this)).reject(function(b){return((b.originalValue==b.targetValue)||(b.unit!="color"&&(isNaN(b.originalValue)||isNaN(b.targetValue))))})},update:function(c){var b={},d,a=this.transforms.length;while(a--){b[(d=this.transforms[a]).style]=d.unit=="color"?"#"+(Math.round(d.originalValue[0]+(d.targetValue[0]-d.originalValue[0])*c)).toColorPart()+(Math.round(d.originalValue[1]+(d.targetValue[1]-d.originalValue[1])*c)).toColorPart()+(Math.round(d.originalValue[2]+(d.targetValue[2]-d.originalValue[2])*c)).toColorPart():(d.originalValue+(d.targetValue-d.originalValue)*c).toFixed(3)+(d.unit===null?"":d.unit)}this.element.setStyle(b,true)}});Effect.Transform=Class.create({initialize:function(a){this.tracks=[];this.options=arguments[1]||{};this.addTracks(a)},addTracks:function(a){a.each(function(b){b=$H(b);var c=b.values().first();this.tracks.push($H({ids:b.keys().first(),effect:Effect.Morph,options:{style:c}}))}.bind(this));return this},play:function(){return new Effect.Parallel(this.tracks.map(function(d){var b=d.get("ids"),a=d.get("effect"),e=d.get("options");var c=[$(b)||$$(b)].flatten();return c.map(function(f){return new a(f,Object.extend({sync:true},e))})}).flatten(),this.options)}});Element.CSS_PROPERTIES=$w("backgroundColor backgroundPosition borderBottomColor borderBottomStyle borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth borderRightColor borderRightStyle borderRightWidth borderSpacing borderTopColor borderTopStyle borderTopWidth bottom clip color fontSize fontWeight height left letterSpacing lineHeight marginBottom marginLeft marginRight marginTop markerOffset maxHeight maxWidth minHeight minWidth opacity outlineColor outlineOffset outlineWidth paddingBottom paddingLeft paddingRight paddingTop right textIndent top width wordSpacing zIndex");Element.CSS_LENGTH=/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;String.__parseStyleElement=document.createElement("div");String.prototype.parseStyle=function(){var b,a=$H();if(Prototype.Browser.WebKit){b=new Element("div",{style:this}).style}else{String.__parseStyleElement.innerHTML='<div style="'+this+'"></div>';b=String.__parseStyleElement.childNodes[0].style}Element.CSS_PROPERTIES.each(function(c){if(b[c]){a.set(c,b[c])}});if(Prototype.Browser.IE&&this.include("opacity")){a.set("opacity",this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1])}return a};if(document.defaultView&&document.defaultView.getComputedStyle){Element.getStyles=function(b){var a=document.defaultView.getComputedStyle($(b),null);return Element.CSS_PROPERTIES.inject({},function(c,d){c[d]=a[d];return c})}}else{Element.getStyles=function(c){c=$(c);var b=c.currentStyle,a;a=Element.CSS_PROPERTIES.inject({},function(d,e){d[e]=b[e];return d});if(!a.opacity){a.opacity=c.getOpacity()}return a}}Effect.Methods={morph:function(a,b){a=$(a);new Effect.Morph(a,Object.extend({style:b},arguments[2]||{}));return a},visualEffect:function(a,c,e){a=$(a);var b=c.dasherize().camelize(),d=b.charAt(0).toUpperCase()+b.substring(1);new Effect[d](a,e);return a},highlight:function(b,a){b=$(b);new Effect.Highlight(b,a);return b}};$w("fade appear grow shrink fold blindUp blindDown slideUp slideDown pulsate shake puff squish switchOff dropOut").each(function(a){Effect.Methods[a]=function(c,b){c=$(c);Effect[a.charAt(0).toUpperCase()+a.substring(1)](c,b);return c}});$w("getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles").each(function(a){Effect.Methods[a]=Element[a]});Element.addMethods(Effect.Methods);var Builder={NODEMAP:{AREA:"map",CAPTION:"table",COL:"table",COLGROUP:"table",LEGEND:"fieldset",OPTGROUP:"select",OPTION:"select",PARAM:"object",TBODY:"table",TD:"table",TFOOT:"table",TH:"table",THEAD:"table",TR:"table"},node:function(f){f=f.toUpperCase();var d=this.NODEMAP[f]||"div";var g=document.createElement(d);try{g.innerHTML="<"+f+"></"+f+">"}catch(c){}var b=g.firstChild||null;if(b&&(b.tagName.toUpperCase()!=f)){b=b.getElementsByTagName(f)[0]}if(!b){b=document.createElement(f)}if(!b){return}if(arguments[1]){if(this._isStringOrNumber(arguments[1])||(arguments[1] instanceof Array)||arguments[1].tagName){this._children(b,arguments[1])}else{var a=this._attributes(arguments[1]);if(a.length){try{g.innerHTML="<"+f+" "+a+"></"+f+">"}catch(c){}b=g.firstChild||null;if(!b){b=document.createElement(f);for(attr in arguments[1]){b[attr=="class"?"className":attr]=arguments[1][attr]}}if(b.tagName.toUpperCase()!=f){b=g.getElementsByTagName(f)[0]}}}}if(arguments[2]){this._children(b,arguments[2])}return b},_text:function(a){return document.createTextNode(a)},ATTR_MAP:{className:"class",htmlFor:"for"},_attributes:function(a){var b=[];for(attribute in a){b.push((attribute in this.ATTR_MAP?this.ATTR_MAP[attribute]:attribute)+'="'+a[attribute].toString().escapeHTML().gsub(/"/,"&quot;")+'"')}return b.join(" ")},_children:function(b,a){if(a.tagName){b.appendChild(a);return}if(typeof a=="object"){a.flatten().each(function(c){if(typeof c=="object"){b.appendChild(c)}else{if(Builder._isStringOrNumber(c)){b.appendChild(Builder._text(c))}}})}else{if(Builder._isStringOrNumber(a)){b.appendChild(Builder._text(a))}}},_isStringOrNumber:function(a){return(typeof a=="string"||typeof a=="number")},build:function(b){var a=this.node("div");$(a).update(b.strip());return a.down()},dump:function(b){if(typeof b!="object"&&typeof b!="function"){b=window}var a=("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);a.each(function(c){b[c]=function(){return Builder.node.apply(Builder,[c].concat($A(arguments)))}})}};if(typeof Effect=="undefined"){throw ("controls.js requires including script.aculo.us' effects.js library")}var Autocompleter={};Autocompleter.Base=Class.create({baseInitialize:function(c,a,b){c=$(c);this.element=c;this.update=$(a);this.hasFocus=false;this.changed=false;this.active=false;this.index=0;this.entryCount=0;this.oldElementValue=this.element.value;if(this.setOptions){this.setOptions(b)}else{this.options=b||{}}this.options.paramName=this.options.paramName||this.element.name;this.options.tokens=this.options.tokens||[];this.options.frequency=this.options.frequency||0.4;this.options.minChars=this.options.minChars||1;this.options.onShow=this.options.onShow||function(d,e){if(!e.style.position||e.style.position=="absolute"){e.style.position="absolute";Position.clone(d,e,{setHeight:false,offsetTop:d.offsetHeight})}Effect.Appear(e,{duration:0.15})};this.options.onHide=this.options.onHide||function(d,e){new Effect.Fade(e,{duration:0.15})};if(typeof(this.options.tokens)=="string"){this.options.tokens=new Array(this.options.tokens)}if(!this.options.tokens.include("\n")){this.options.tokens.push("\n")}this.observer=null;this.element.setAttribute("autocomplete","off");Element.hide(this.update);Event.observe(this.element,"blur",this.onBlur.bindAsEventListener(this));Event.observe(this.element,"keydown",this.onKeyPress.bindAsEventListener(this))},show:function(){if(Element.getStyle(this.update,"display")=="none"){this.options.onShow(this.element,this.update)}if(!this.iefix&&(Prototype.Browser.IE)&&(Element.getStyle(this.update,"position")=="absolute")){new Insertion.After(this.update,'<iframe id="'+this.update.id+'_iefix" style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" src="javascript:false;" frameborder="0" scrolling="no"></iframe>');this.iefix=$(this.update.id+"_iefix")}if(this.iefix){setTimeout(this.fixIEOverlapping.bind(this),50)}},fixIEOverlapping:function(){Position.clone(this.update,this.iefix,{setTop:(!this.update.style.height)});this.iefix.style.zIndex=1;this.update.style.zIndex=2;Element.show(this.iefix)},hide:function(){this.stopIndicator();if(Element.getStyle(this.update,"display")!="none"){this.options.onHide(this.element,this.update)}if(this.iefix){Element.hide(this.iefix)}},startIndicator:function(){if(this.options.indicator){Element.show(this.options.indicator)}},stopIndicator:function(){if(this.options.indicator){Element.hide(this.options.indicator)}},onKeyPress:function(a){if(this.active){switch(a.keyCode){case Event.KEY_TAB:case Event.KEY_RETURN:this.selectEntry();Event.stop(a);case Event.KEY_ESC:this.hide();this.active=false;Event.stop(a);return;case Event.KEY_LEFT:case Event.KEY_RIGHT:return;case Event.KEY_UP:this.markPrevious();this.render();Event.stop(a);return;case Event.KEY_DOWN:this.markNext();this.render();Event.stop(a);return}}else{if(a.keyCode==Event.KEY_TAB||a.keyCode==Event.KEY_RETURN||(Prototype.Browser.WebKit>0&&a.keyCode==0)){return}}this.changed=true;this.hasFocus=true;if(this.observer){clearTimeout(this.observer)}this.observer=setTimeout(this.onObserverEvent.bind(this),this.options.frequency*1000)},activate:function(){this.changed=false;this.hasFocus=true;this.getUpdatedChoices()},onHover:function(b){var a=Event.findElement(b,"LI");if(this.index!=a.autocompleteIndex){this.index=a.autocompleteIndex;this.render()}Event.stop(b)},onClick:function(b){var a=Event.findElement(b,"LI");this.index=a.autocompleteIndex;this.selectEntry();this.hide()},onBlur:function(a){setTimeout(this.hide.bind(this),250);this.hasFocus=false;this.active=false},render:function(){if(this.entryCount>0){for(var a=0;a<this.entryCount;a++){this.index==a?Element.addClassName(this.getEntry(a),"selected"):Element.removeClassName(this.getEntry(a),"selected")}if(this.hasFocus){this.show();this.active=true}}else{this.active=false;this.hide()}},markPrevious:function(){if(this.index>0){this.index--}else{this.index=this.entryCount-1}this.getEntry(this.index).scrollIntoView(true)},markNext:function(){if(this.index<this.entryCount-1){this.index++}else{this.index=0}this.getEntry(this.index).scrollIntoView(false)},getEntry:function(a){return this.update.firstChild.childNodes[a]},getCurrentEntry:function(){return this.getEntry(this.index)},selectEntry:function(){this.active=false;this.updateElement(this.getCurrentEntry())},updateElement:function(d){if(this.options.updateElement){this.options.updateElement(d);return}var b="";if(this.options.select){var e=$(d).select("."+this.options.select)||[];if(e.length>0){b=Element.collectTextNodes(e[0],this.options.select)}}else{b=Element.collectTextNodesIgnoreClass(d,"informal")}var a=this.getTokenBounds();if(a[0]!=-1){var c=this.element.value.substr(0,a[0]);var f=this.element.value.substr(a[0]).match(/^\s+/);if(f){c+=f[0]}this.element.value=c+b+this.element.value.substr(a[1])}else{this.element.value=b}this.oldElementValue=this.element.value;this.element.focus();if(this.options.afterUpdateElement){this.options.afterUpdateElement(this.element,d)}},updateChoices:function(a){if(!this.changed&&this.hasFocus){this.update.innerHTML=a;Element.cleanWhitespace(this.update);Element.cleanWhitespace(this.update.down());if(this.update.firstChild&&this.update.down().childNodes){this.entryCount=this.update.down().childNodes.length;for(var b=0;b<this.entryCount;b++){var c=this.getEntry(b);c.autocompleteIndex=b;this.addObservers(c)}}else{this.entryCount=0}this.stopIndicator();this.index=0;if(this.entryCount==1&&this.options.autoSelect){this.selectEntry();this.hide()}else{this.render()}}},addObservers:function(a){Event.observe(a,"mouseover",this.onHover.bindAsEventListener(this));Event.observe(a,"click",this.onClick.bindAsEventListener(this))},onObserverEvent:function(){this.changed=false;this.tokenBounds=null;if(this.getToken().length>=this.options.minChars){this.getUpdatedChoices()}else{this.active=false;this.hide()}this.oldElementValue=this.element.value},getToken:function(){var a=this.getTokenBounds();return this.element.value.substring(a[0],a[1]).strip()},getTokenBounds:function(){if(null!=this.tokenBounds){return this.tokenBounds}var g=this.element.value;if(g.strip().empty()){return[-1,0]}var h=arguments.callee.getFirstDifferencePos(g,this.oldElementValue);var b=(h==this.oldElementValue.length?1:0);var f=-1,e=g.length;var a;for(var d=0,c=this.options.tokens.length;d<c;++d){a=g.lastIndexOf(this.options.tokens[d],h+b-1);if(a>f){f=a}a=g.indexOf(this.options.tokens[d],h+b);if(-1!=a&&a<e){e=a}}return(this.tokenBounds=[f+1,e])}});Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos=function(a,c){var b=Math.min(a.length,c.length);for(var d=0;d<b;++d){if(a[d]!=c[d]){return d}}return b};Ajax.Autocompleter=Class.create(Autocompleter.Base,{initialize:function(a,b,d,c){this.baseInitialize(a,b,c);this.options.asynchronous=true;this.options.onComplete=this.onComplete.bind(this);this.options.defaultParams=this.options.parameters||null;this.url=d},getUpdatedChoices:function(){this.startIndicator();var a=encodeURIComponent(this.options.paramName)+"="+encodeURIComponent(this.getToken());this.options.parameters=this.options.callback?this.options.callback(this.element,a):a;if(this.options.defaultParams){this.options.parameters+="&"+this.options.defaultParams}new Ajax.Request(this.url,this.options)},onComplete:function(a){this.updateChoices(a.responseText)}});Autocompleter.Local=Class.create(Autocompleter.Base,{initialize:function(d,b,a,c){this.baseInitialize(d,b,c);this.options.array=a},getUpdatedChoices:function(){this.updateChoices(this.options.selector(this))},setOptions:function(a){this.options=Object.extend({choices:10,partialSearch:true,partialChars:2,ignoreCase:true,fullSearch:false,selector:function(d){var g=[];var f=[];var c=d.getToken();var b=0;for(var h=0;h<d.options.array.length&&g.length<d.options.choices;h++){var j=d.options.array[h];var e=d.options.ignoreCase?j.toLowerCase().indexOf(c.toLowerCase()):j.indexOf(c);while(e!=-1){if(e==0&&j.length!=c.length){g.push("<li><strong>"+j.substr(0,c.length)+"</strong>"+j.substr(c.length)+"</li>");break}else{if(c.length>=d.options.partialChars&&d.options.partialSearch&&e!=-1){if(d.options.fullSearch||/\s/.test(j.substr(e-1,1))){f.push("<li>"+j.substr(0,e)+"<strong>"+j.substr(e,c.length)+"</strong>"+j.substr(e+c.length)+"</li>");break}}}e=d.options.ignoreCase?j.toLowerCase().indexOf(c.toLowerCase(),e+1):j.indexOf(c,e+1)}}if(f.length){g=g.concat(f.slice(0,d.options.choices-g.length))}return"<ul>"+g.join("")+"</ul>"}},a||{})}});Field.scrollFreeActivate=function(a){setTimeout(function(){Field.activate(a)},1)};Ajax.InPlaceEditor=Class.create({initialize:function(a,c,b){this.url=c;this.element=a=$(a);this.prepareOptions();this._controls={};arguments.callee.dealWithDeprecatedOptions(b);Object.extend(this.options,b||{});if(!this.options.formId&&this.element.id){this.options.formId=this.element.id+"-inplaceeditor";if($(this.options.formId)){this.options.formId=""}}if(this.options.externalControl){this.options.externalControl=$(this.options.externalControl)}if(!this.options.externalControl){this.options.externalControlOnly=false}this._originalBackground=this.element.getStyle("background-color")||"transparent";this.element.title=this.options.clickToEditText;this._boundCancelHandler=this.handleFormCancellation.bind(this);this._boundComplete=(this.options.onComplete||Prototype.emptyFunction).bind(this);this._boundFailureHandler=this.handleAJAXFailure.bind(this);this._boundSubmitHandler=this.handleFormSubmission.bind(this);this._boundWrapperHandler=this.wrapUp.bind(this);this.registerListeners()},checkForEscapeOrReturn:function(a){if(!this._editing||a.ctrlKey||a.altKey||a.shiftKey){return}if(Event.KEY_ESC==a.keyCode){this.handleFormCancellation(a)}else{if(Event.KEY_RETURN==a.keyCode){this.handleFormSubmission(a)}}},createControl:function(c,f,e){var a=this.options[c+"Control"];var b=this.options[c+"Text"];if("button"==a){var d=document.createElement("input");d.type="submit";d.value=b;d.className="editor_"+c+"_button";if("cancel"==c){d.onclick=this._boundCancelHandler}this._form.appendChild(d);this._controls[c]=d}else{if("link"==a){var g=document.createElement("a");g.href="#";g.appendChild(document.createTextNode(b));g.onclick="cancel"==c?this._boundCancelHandler:this._boundSubmitHandler;g.className="editor_"+c+"_link";if(e){g.className+=" "+e}this._form.appendChild(g);this._controls[c]=g}}},createEditField:function(){var a=(this.options.loadTextURL?this.options.loadingText:this.getText());var c;if(1>=this.options.rows&&!/\r|\n/.test(this.getText())){c=document.createElement("input");c.type="text";var b=this.options.size||this.options.cols||0;if(0<b){c.size=b}}else{c=document.createElement("textarea");c.rows=(1>=this.options.rows?this.options.autoRows:this.options.rows);c.cols=this.options.cols||40}c.name=this.options.paramName;c.value=a;c.className="editor_field";if(this.options.submitOnBlur){c.onblur=this._boundSubmitHandler}this._controls.editor=c;if(this.options.loadTextURL){this.loadExternalText()}this._form.appendChild(this._controls.editor)},createForm:function(){var b=this;function a(c,d){var e=b.options["text"+c+"Controls"];if(!e||d===false){return}b._form.appendChild(document.createTextNode(e))}this._form=$(document.createElement("form"));this._form.id=this.options.formId;this._form.addClassName(this.options.formClassName);this._form.onsubmit=this._boundSubmitHandler;this.createEditField();if("textarea"==this._controls.editor.tagName.toLowerCase()){this._form.appendChild(document.createElement("br"))}if(this.options.onFormCustomization){this.options.onFormCustomization(this,this._form)}a("Before",this.options.okControl||this.options.cancelControl);this.createControl("ok",this._boundSubmitHandler);a("Between",this.options.okControl&&this.options.cancelControl);this.createControl("cancel",this._boundCancelHandler,"editor_cancel");a("After",this.options.okControl||this.options.cancelControl)},destroy:function(){if(this._oldInnerHTML){this.element.innerHTML=this._oldInnerHTML}this.leaveEditMode();this.unregisterListeners()},enterEditMode:function(a){if(this._saving||this._editing){return}this._editing=true;this.triggerCallback("onEnterEditMode");if(this.options.externalControl){this.options.externalControl.hide()}this.element.hide();this.createForm();this.element.parentNode.insertBefore(this._form,this.element);if(!this.options.loadTextURL){this.postProcessEditField()}if(a){Event.stop(a)}},enterHover:function(a){if(this.options.hoverClassName){this.element.addClassName(this.options.hoverClassName)}if(this._saving){return}this.triggerCallback("onEnterHover")},getText:function(){return this.element.innerHTML},handleAJAXFailure:function(a){this.triggerCallback("onFailure",a);if(this._oldInnerHTML){this.element.innerHTML=this._oldInnerHTML;this._oldInnerHTML=null}},handleFormCancellation:function(a){this.wrapUp();if(a){Event.stop(a)}},handleFormSubmission:function(b){var f=this._form;var a=$F(this._controls.editor);this.prepareSubmission();var c=this.options.callback(f,a)||"";if(Object.isString(c)){c=c.toQueryParams()}c.editorId=this.element.id;if(this.options.htmlResponse){var d=Object.extend({evalScripts:true},this.options.ajaxOptions);Object.extend(d,{parameters:c,onComplete:this._boundWrapperHandler,onFailure:this._boundFailureHandler});new Ajax.Updater({success:this.element},this.url,d)}else{var d=Object.extend({method:"get"},this.options.ajaxOptions);Object.extend(d,{parameters:c,onComplete:this._boundWrapperHandler,onFailure:this._boundFailureHandler});new Ajax.Request(this.url,d)}if(b){Event.stop(b)}},leaveEditMode:function(){this.element.removeClassName(this.options.savingClassName);this.removeForm();this.leaveHover();this.element.style.backgroundColor=this._originalBackground;this.element.show();if(this.options.externalControl){this.options.externalControl.show()}this._saving=false;this._editing=false;this._oldInnerHTML=null;this.triggerCallback("onLeaveEditMode")},leaveHover:function(a){if(this.options.hoverClassName){this.element.removeClassName(this.options.hoverClassName)}if(this._saving){return}this.triggerCallback("onLeaveHover")},loadExternalText:function(){this._form.addClassName(this.options.loadingClassName);this._controls.editor.disabled=true;var a=Object.extend({method:"get"},this.options.ajaxOptions);Object.extend(a,{parameters:"editorId="+encodeURIComponent(this.element.id),onComplete:Prototype.emptyFunction,onSuccess:function(c){this._form.removeClassName(this.options.loadingClassName);var b=c.responseText;if(this.options.stripLoadedTextTags){b=b.stripTags()}this._controls.editor.value=b;this._controls.editor.disabled=false;this.postProcessEditField()}.bind(this),onFailure:this._boundFailureHandler});new Ajax.Request(this.options.loadTextURL,a)},postProcessEditField:function(){var a=this.options.fieldPostCreation;if(a){$(this._controls.editor)["focus"==a?"focus":"activate"]()}},prepareOptions:function(){this.options=Object.clone(Ajax.InPlaceEditor.DefaultOptions);Object.extend(this.options,Ajax.InPlaceEditor.DefaultCallbacks);[this._extraDefaultOptions].flatten().compact().each(function(a){Object.extend(this.options,a)}.bind(this))},prepareSubmission:function(){this._saving=true;this.removeForm();this.leaveHover();this.showSaving()},registerListeners:function(){this._listeners={};var a;$H(Ajax.InPlaceEditor.Listeners).each(function(b){a=this[b.value].bind(this);this._listeners[b.key]=a;if(!this.options.externalControlOnly){this.element.observe(b.key,a)}if(this.options.externalControl){this.options.externalControl.observe(b.key,a)}}.bind(this))},removeForm:function(){if(!this._form){return}this._form.remove();this._form=null;this._controls={}},showSaving:function(){this._oldInnerHTML=this.element.innerHTML;this.element.innerHTML=this.options.savingText;this.element.addClassName(this.options.savingClassName);this.element.style.backgroundColor=this._originalBackground;this.element.show()},triggerCallback:function(b,a){if("function"==typeof this.options[b]){this.options[b](this,a)}},unregisterListeners:function(){$H(this._listeners).each(function(a){if(!this.options.externalControlOnly){this.element.stopObserving(a.key,a.value)}if(this.options.externalControl){this.options.externalControl.stopObserving(a.key,a.value)}}.bind(this))},wrapUp:function(a){this.leaveEditMode();this._boundComplete(a,this.element)}});Object.extend(Ajax.InPlaceEditor.prototype,{dispose:Ajax.InPlaceEditor.prototype.destroy});Ajax.InPlaceCollectionEditor=Class.create(Ajax.InPlaceEditor,{initialize:function($super,a,c,b){this._extraDefaultOptions=Ajax.InPlaceCollectionEditor.DefaultOptions;$super(a,c,b)},createEditField:function(){var a=document.createElement("select");a.name=this.options.paramName;a.size=1;this._controls.editor=a;this._collection=this.options.collection||[];if(this.options.loadCollectionURL){this.loadCollection()}else{this.checkForExternalText()}this._form.appendChild(this._controls.editor)},loadCollection:function(){this._form.addClassName(this.options.loadingClassName);this.showLoadingText(this.options.loadingCollectionText);var options=Object.extend({method:"get"},this.options.ajaxOptions);Object.extend(options,{parameters:"editorId="+encodeURIComponent(this.element.id),onComplete:Prototype.emptyFunction,onSuccess:function(transport){var js=transport.responseText.strip();if(!/^\[.*\]$/.test(js)){throw"Server returned an invalid collection representation."}this._collection=eval(js);this.checkForExternalText()}.bind(this),onFailure:this.onFailure});new Ajax.Request(this.options.loadCollectionURL,options)},showLoadingText:function(b){this._controls.editor.disabled=true;var a=this._controls.editor.firstChild;if(!a){a=document.createElement("option");a.value="";this._controls.editor.appendChild(a);a.selected=true}a.update((b||"").stripScripts().stripTags())},checkForExternalText:function(){this._text=this.getText();if(this.options.loadTextURL){this.loadExternalText()}else{this.buildOptionList()}},loadExternalText:function(){this.showLoadingText(this.options.loadingText);var a=Object.extend({method:"get"},this.options.ajaxOptions);Object.extend(a,{parameters:"editorId="+encodeURIComponent(this.element.id),onComplete:Prototype.emptyFunction,onSuccess:function(b){this._text=b.responseText.strip();this.buildOptionList()}.bind(this),onFailure:this.onFailure});new Ajax.Request(this.options.loadTextURL,a)},buildOptionList:function(){this._form.removeClassName(this.options.loadingClassName);this._collection=this._collection.map(function(d){return 2===d.length?d:[d,d].flatten()});var c=("value" in this.options)?this.options.value:this._text;var b=this._collection.any(function(d){return d[0]==c}.bind(this));this._controls.editor.update("");var a;this._collection.each(function(e,d){a=document.createElement("option");a.value=e[0];a.selected=b?e[0]==c:0==d;a.appendChild(document.createTextNode(e[1]));this._controls.editor.appendChild(a)}.bind(this));this._controls.editor.disabled=false;Field.scrollFreeActivate(this._controls.editor)}});Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions=function(a){if(!a){return}function b(c,d){if(c in a||d===undefined){return}a[c]=d}b("cancelControl",(a.cancelLink?"link":(a.cancelButton?"button":a.cancelLink==a.cancelButton==false?false:undefined)));b("okControl",(a.okLink?"link":(a.okButton?"button":a.okLink==a.okButton==false?false:undefined)));b("highlightColor",a.highlightcolor);b("highlightEndColor",a.highlightendcolor)};Object.extend(Ajax.InPlaceEditor,{DefaultOptions:{ajaxOptions:{},autoRows:3,cancelControl:"link",cancelText:"cancel",clickToEditText:"Click to edit",externalControl:null,externalControlOnly:false,fieldPostCreation:"activate",formClassName:"inplaceeditor-form",formId:null,highlightColor:"#ffff99",highlightEndColor:"#ffffff",hoverClassName:"",htmlResponse:true,loadingClassName:"inplaceeditor-loading",loadingText:"Loading...",okControl:"button",okText:"ok",paramName:"value",rows:1,savingClassName:"inplaceeditor-saving",savingText:"Saving...",size:0,stripLoadedTextTags:false,submitOnBlur:false,textAfterControls:"",textBeforeControls:"",textBetweenControls:""},DefaultCallbacks:{callback:function(a){return Form.serialize(a)},onComplete:function(b,a){new Effect.Highlight(a,{startcolor:this.options.highlightColor,keepBackgroundImage:true})},onEnterEditMode:null,onEnterHover:function(a){a.element.style.backgroundColor=a.options.highlightColor;if(a._effect){a._effect.cancel()}},onFailure:function(b,a){alert("Error communication with the server: "+b.responseText.stripTags())},onFormCustomization:null,onLeaveEditMode:null,onLeaveHover:function(a){a._effect=new Effect.Highlight(a.element,{startcolor:a.options.highlightColor,endcolor:a.options.highlightEndColor,restorecolor:a._originalBackground,keepBackgroundImage:true})}},Listeners:{click:"enterEditMode",keydown:"checkForEscapeOrReturn",mouseover:"enterHover",mouseout:"leaveHover"}});Ajax.InPlaceCollectionEditor.DefaultOptions={loadingCollectionText:"Loading options..."};Form.Element.DelayedObserver=Class.create({initialize:function(c,b,a){this.delay=b||0.5;this.element=$(c);this.callback=a;this.timer=null;this.lastValue=$F(this.element);Event.observe(this.element,"keyup",this.delayedListener.bindAsEventListener(this))},delayedListener:function(a){if(this.lastValue==$F(this.element)){return}if(this.timer){clearTimeout(this.timer)}this.timer=setTimeout(this.onTimerEvent.bind(this),this.delay*1000);this.lastValue=$F(this.element)},onTimerEvent:function(){this.timer=null;this.callback(this.element,$F(this.element))}});if(Object.isUndefined(Effect)){throw ("dragdrop.js requires including script.aculo.us' effects.js library")}var Droppables={drops:[],remove:function(a){this.drops=this.drops.reject(function(b){return b.element==$(a)})},add:function(c){c=$(c);var b=Object.extend({greedy:true,hoverclass:null,tree:false},arguments[1]||{});if(b.containment){b._containers=[];var a=b.containment;if(Object.isArray(a)){a.each(function(d){b._containers.push($(d))})}else{b._containers.push($(a))}}if(b.accept){b.accept=[b.accept].flatten()}Element.makePositioned(c);b.element=c;this.drops.push(b)},findDeepestChild:function(a){deepest=a[0];for(i=1;i<a.length;++i){if(Element.isParent(a[i].element,deepest.element)){deepest=a[i]}}return deepest},isContained:function(c,b){var a;if(b.tree){a=c.treeNode}else{a=c.parentNode}return b._containers.detect(function(d){return a==d})},isAffected:function(b,a,c){return((c.element!=a)&&((!c._containers)||this.isContained(a,c))&&((!c.accept)||(Element.classNames(a).detect(function(d){return c.accept.include(d)})))&&Position.within(c.element,b[0],b[1]))},deactivate:function(a){if(a.hoverclass){Element.removeClassName(a.element,a.hoverclass)}this.last_active=null},activate:function(a){if(a.hoverclass){Element.addClassName(a.element,a.hoverclass)}this.last_active=a},show:function(c,a){if(!this.drops.length){return}var d,b=[];this.drops.each(function(e){if(Droppables.isAffected(c,a,e)){b.push(e)}});if(b.length>0){d=Droppables.findDeepestChild(b)}if(this.last_active&&this.last_active!=d){this.deactivate(this.last_active)}if(d){Position.within(d.element,c[0],c[1]);if(d.onHover){d.onHover(a,d.element,Position.overlap(d.overlap,d.element))}if(d!=this.last_active){Droppables.activate(d)}}},fire:function(b,a){if(!this.last_active){return}Position.prepare();if(this.isAffected([Event.pointerX(b),Event.pointerY(b)],a,this.last_active)){if(this.last_active.onDrop){this.last_active.onDrop(a,this.last_active.element,b);return true}}},reset:function(){if(this.last_active){this.deactivate(this.last_active)}}};var Draggables={drags:[],observers:[],register:function(a){if(this.drags.length==0){this.eventMouseUp=this.endDrag.bindAsEventListener(this);this.eventMouseMove=this.updateDrag.bindAsEventListener(this);this.eventKeypress=this.keyPress.bindAsEventListener(this);Event.observe(document,"mouseup",this.eventMouseUp);Event.observe(document,"mousemove",this.eventMouseMove);Event.observe(document,"keypress",this.eventKeypress)}this.drags.push(a)},unregister:function(a){this.drags=this.drags.reject(function(b){return b==a});if(this.drags.length==0){Event.stopObserving(document,"mouseup",this.eventMouseUp);Event.stopObserving(document,"mousemove",this.eventMouseMove);Event.stopObserving(document,"keypress",this.eventKeypress)}},activate:function(a){if(a.options.delay){this._timeout=setTimeout(function(){Draggables._timeout=null;window.focus();Draggables.activeDraggable=a}.bind(this),a.options.delay)}else{window.focus();this.activeDraggable=a}},deactivate:function(){this.activeDraggable=null},updateDrag:function(a){if(!this.activeDraggable){return}var b=[Event.pointerX(a),Event.pointerY(a)];if(this._lastPointer&&(this._lastPointer.inspect()==b.inspect())){return}this._lastPointer=b;this.activeDraggable.updateDrag(a,b)},endDrag:function(a){if(this._timeout){clearTimeout(this._timeout);this._timeout=null}if(!this.activeDraggable){return}this._lastPointer=null;this.activeDraggable.endDrag(a);this.activeDraggable=null},keyPress:function(a){if(this.activeDraggable){this.activeDraggable.keyPress(a)}},addObserver:function(a){this.observers.push(a);this._cacheObserverCallbacks()},removeObserver:function(a){this.observers=this.observers.reject(function(b){return b.element==a});this._cacheObserverCallbacks()},notify:function(c,b,a){if(this[c+"Count"]>0){this.observers.each(function(d){if(d[c]){d[c](c,b,a)}})}if(b.options[c]){b.options[c](b,a)}},_cacheObserverCallbacks:function(){["onStart","onEnd","onDrag"].each(function(a){Draggables[a+"Count"]=Draggables.observers.select(function(b){return b[a]}).length})}};var Draggable=Class.create({initialize:function(c){var a={handle:false,reverteffect:function(d,g,f){var e=Math.sqrt(Math.abs(g^2)+Math.abs(f^2))*0.02;new Effect.Move(d,{x:-f,y:-g,duration:e,queue:{scope:"_draggable",position:"end"}})},endeffect:function(e){var d=Object.isNumber(e._opacity)?e._opacity:1;new Effect.Opacity(e,{duration:0.2,from:0.7,to:d,queue:{scope:"_draggable",position:"end"},afterFinish:function(){Draggable._dragging[e]=false}})},zindex:1000,revert:false,quiet:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,snap:false,delay:0};if(!arguments[1]||Object.isUndefined(arguments[1].endeffect)){Object.extend(a,{starteffect:function(d){d._opacity=Element.getOpacity(d);Draggable._dragging[d]=true;new Effect.Opacity(d,{duration:0.2,from:d._opacity,to:0.7})}})}var b=Object.extend(a,arguments[1]||{});this.element=$(c);if(b.handle&&Object.isString(b.handle)){this.handle=this.element.down("."+b.handle,0)}if(!this.handle){this.handle=$(b.handle)}if(!this.handle){this.handle=this.element}if(b.scroll&&!b.scroll.scrollTo&&!b.scroll.outerHTML){b.scroll=$(b.scroll);this._isScrollChild=Element.childOf(this.element,b.scroll)}Element.makePositioned(this.element);this.options=b;this.dragging=false;this.eventMouseDown=this.initDrag.bindAsEventListener(this);Event.observe(this.handle,"mousedown",this.eventMouseDown);Draggables.register(this)},destroy:function(){Event.stopObserving(this.handle,"mousedown",this.eventMouseDown);Draggables.unregister(this)},currentDelta:function(){return([parseInt(Element.getStyle(this.element,"left")||"0"),parseInt(Element.getStyle(this.element,"top")||"0")])},initDrag:function(c){if(!Object.isUndefined(Draggable._dragging[this.element])&&Draggable._dragging[this.element]){return}if(Event.isLeftClick(c)){var a=Event.element(c);if((tag_name=a.tagName.toUpperCase())&&(tag_name=="INPUT"||tag_name=="SELECT"||tag_name=="OPTION"||tag_name=="BUTTON"||tag_name=="TEXTAREA")){return}var d=[Event.pointerX(c),Event.pointerY(c)];var b=Position.cumulativeOffset(this.element);this.offset=[0,1].map(function(e){return(d[e]-b[e])});Draggables.activate(this);Event.stop(c)}},startDrag:function(b){this.dragging=true;if(!this.delta){this.delta=this.currentDelta()}if(this.options.zindex){this.originalZ=parseInt(Element.getStyle(this.element,"z-index")||0);this.element.style.zIndex=this.options.zindex}if(this.options.ghosting){this._clone=this.element.cloneNode(true);this.element._originallyAbsolute=(this.element.getStyle("position")=="absolute");if(!this.element._originallyAbsolute){Position.absolutize(this.element)}this.element.parentNode.insertBefore(this._clone,this.element)}if(this.options.scroll){if(this.options.scroll==window){var a=this._getWindowScroll(this.options.scroll);this.originalScrollLeft=a.left;this.originalScrollTop=a.top}else{this.originalScrollLeft=this.options.scroll.scrollLeft;this.originalScrollTop=this.options.scroll.scrollTop}}Draggables.notify("onStart",this,b);if(this.options.starteffect){this.options.starteffect(this.element)}},updateDrag:function(event,pointer){if(!this.dragging){this.startDrag(event)}if(!this.options.quiet){Position.prepare();Droppables.show(pointer,this.element)}Draggables.notify("onDrag",this,event);this.draw(pointer);if(this.options.change){this.options.change(this)}if(this.options.scroll){this.stopScrolling();var p;if(this.options.scroll==window){with(this._getWindowScroll(this.options.scroll)){p=[left,top,left+width,top+height]}}else{p=Position.page(this.options.scroll);p[0]+=this.options.scroll.scrollLeft+Position.deltaX;p[1]+=this.options.scroll.scrollTop+Position.deltaY;p.push(p[0]+this.options.scroll.offsetWidth);p.push(p[1]+this.options.scroll.offsetHeight)}var speed=[0,0];if(pointer[0]<(p[0]+this.options.scrollSensitivity)){speed[0]=pointer[0]-(p[0]+this.options.scrollSensitivity)}if(pointer[1]<(p[1]+this.options.scrollSensitivity)){speed[1]=pointer[1]-(p[1]+this.options.scrollSensitivity)}if(pointer[0]>(p[2]-this.options.scrollSensitivity)){speed[0]=pointer[0]-(p[2]-this.options.scrollSensitivity)}if(pointer[1]>(p[3]-this.options.scrollSensitivity)){speed[1]=pointer[1]-(p[3]-this.options.scrollSensitivity)}this.startScrolling(speed)}if(Prototype.Browser.WebKit){window.scrollBy(0,0)}Event.stop(event)},finishDrag:function(g,c){this.dragging=false;if(this.options.quiet){Position.prepare();var b=[Event.pointerX(g),Event.pointerY(g)];Droppables.show(b,this.element)}if(this.options.ghosting){if(!this.element._originallyAbsolute){Position.relativize(this.element)}delete this.element._originallyAbsolute;Element.remove(this._clone);this._clone=null}var e=false;if(c){e=Droppables.fire(g,this.element);if(!e){e=false}}if(e&&this.options.onDropped){this.options.onDropped(this.element)}Draggables.notify("onEnd",this,g);var f=this.options.revert;if(f&&Object.isFunction(f)){f=f(this.element)}var a=this.currentDelta();if(f&&this.options.reverteffect){if(e==0||f!="failure"){this.options.reverteffect(this.element,a[1]-this.delta[1],a[0]-this.delta[0])}}else{this.delta=a}if(this.options.zindex){this.element.style.zIndex=this.originalZ}if(this.options.endeffect){this.options.endeffect(this.element)}Draggables.deactivate(this);Droppables.reset()},keyPress:function(a){if(a.keyCode!=Event.KEY_ESC){return}this.finishDrag(a,false);Event.stop(a)},endDrag:function(a){if(!this.dragging){return}this.stopScrolling();this.finishDrag(a,true);Event.stop(a)},draw:function(f){var e=Position.cumulativeOffset(this.element);if(this.options.ghosting){var a=Position.realOffset(this.element);e[0]+=a[0]-Position.deltaX;e[1]+=a[1]-Position.deltaY}var c=this.currentDelta();e[0]-=c[0];e[1]-=c[1];if(this.options.scroll&&(this.options.scroll!=window&&this._isScrollChild)){e[0]-=this.options.scroll.scrollLeft-this.originalScrollLeft;e[1]-=this.options.scroll.scrollTop-this.originalScrollTop}var b=[0,1].map(function(d){return(f[d]-e[d]-this.offset[d])}.bind(this));if(this.options.snap){if(Object.isFunction(this.options.snap)){b=this.options.snap(b[0],b[1],this)}else{if(Object.isArray(this.options.snap)){b=b.map(function(d,h){return(d/this.options.snap[h]).round()*this.options.snap[h]}.bind(this))}else{b=b.map(function(d){return(d/this.options.snap).round()*this.options.snap}.bind(this))}}}var g=this.element.style;if((!this.options.constraint)||(this.options.constraint=="horizontal")){g.left=b[0]+"px"}if((!this.options.constraint)||(this.options.constraint=="vertical")){g.top=b[1]+"px"}if(g.visibility=="hidden"){g.visibility=""}},stopScrolling:function(){if(this.scrollInterval){clearInterval(this.scrollInterval);this.scrollInterval=null;Draggables._lastScrollPointer=null}},startScrolling:function(a){if(!(a[0]||a[1])){return}this.scrollSpeed=[a[0]*this.options.scrollSpeed,a[1]*this.options.scrollSpeed];this.lastScrolled=new Date();this.scrollInterval=setInterval(this.scroll.bind(this),10)},scroll:function(){var current=new Date();var delta=current-this.lastScrolled;this.lastScrolled=current;if(this.options.scroll==window){with(this._getWindowScroll(this.options.scroll)){if(this.scrollSpeed[0]||this.scrollSpeed[1]){var d=delta/1000;this.options.scroll.scrollTo(left+d*this.scrollSpeed[0],top+d*this.scrollSpeed[1])}}}else{this.options.scroll.scrollLeft+=this.scrollSpeed[0]*delta/1000;this.options.scroll.scrollTop+=this.scrollSpeed[1]*delta/1000}Position.prepare();Droppables.show(Draggables._lastPointer,this.element);Draggables.notify("onDrag",this);if(this._isScrollChild){Draggables._lastScrollPointer=Draggables._lastScrollPointer||$A(Draggables._lastPointer);Draggables._lastScrollPointer[0]+=this.scrollSpeed[0]*delta/1000;Draggables._lastScrollPointer[1]+=this.scrollSpeed[1]*delta/1000;if(Draggables._lastScrollPointer[0]<0){Draggables._lastScrollPointer[0]=0}if(Draggables._lastScrollPointer[1]<0){Draggables._lastScrollPointer[1]=0}this.draw(Draggables._lastScrollPointer)}if(this.options.change){this.options.change(this)}},_getWindowScroll:function(w){var T,L,W,H;with(w.document){if(w.document.documentElement&&documentElement.scrollTop){T=documentElement.scrollTop;L=documentElement.scrollLeft}else{if(w.document.body){T=body.scrollTop;L=body.scrollLeft}}if(w.innerWidth){W=w.innerWidth;H=w.innerHeight}else{if(w.document.documentElement&&documentElement.clientWidth){W=documentElement.clientWidth;H=documentElement.clientHeight}else{W=body.offsetWidth;H=body.offsetHeight}}}return{top:T,left:L,width:W,height:H}}});Draggable._dragging={};var SortableObserver=Class.create({initialize:function(b,a){this.element=$(b);this.observer=a;this.lastValue=Sortable.serialize(this.element)},onStart:function(){this.lastValue=Sortable.serialize(this.element)},onEnd:function(){Sortable.unmark();if(this.lastValue!=Sortable.serialize(this.element)){this.observer(this.element)}}});var Sortable={SERIALIZE_RULE:/^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,sortables:{},_findRootElement:function(a){while(a.tagName.toUpperCase()!="BODY"){if(a.id&&Sortable.sortables[a.id]){return a}a=a.parentNode}},options:function(a){a=Sortable._findRootElement($(a));if(!a){return}return Sortable.sortables[a.id]},destroy:function(a){var b=Sortable.options(a);if(b){Draggables.removeObserver(b.element);b.droppables.each(function(c){Droppables.remove(c)});b.draggables.invoke("destroy");delete Sortable.sortables[b.element.id]}},create:function(a){a=$(a);var e=Object.extend({element:a,tag:"li",dropOnEmpty:false,tree:false,treeTag:"ul",overlap:"vertical",constraint:"vertical",containment:a,handle:false,only:false,delay:0,hoverclass:null,ghosting:false,quiet:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,format:this.SERIALIZE_RULE,elements:false,handles:false,onChange:Prototype.emptyFunction,onUpdate:Prototype.emptyFunction},arguments[1]||{});this.destroy(a);var d={revert:true,quiet:e.quiet,scroll:e.scroll,scrollSpeed:e.scrollSpeed,scrollSensitivity:e.scrollSensitivity,delay:e.delay,ghosting:e.ghosting,constraint:e.constraint,handle:e.handle};if(e.starteffect){d.starteffect=e.starteffect}if(e.reverteffect){d.reverteffect=e.reverteffect}else{if(e.ghosting){d.reverteffect=function(f){f.style.top=0;f.style.left=0}}}if(e.endeffect){d.endeffect=e.endeffect}if(e.zindex){d.zindex=e.zindex}var b={overlap:e.overlap,containment:e.containment,tree:e.tree,hoverclass:e.hoverclass,onHover:Sortable.onHover};var c={onHover:Sortable.onEmptyHover,overlap:e.overlap,containment:e.containment,hoverclass:e.hoverclass};Element.cleanWhitespace(a);e.draggables=[];e.droppables=[];if(e.dropOnEmpty||e.tree){Droppables.add(a,c);e.droppables.push(a)}(e.elements||this.findElements(a,e)||[]).each(function(g,h){var f=e.handles?$(e.handles[h]):(e.handle?$(g).select("."+e.handle)[0]:g);e.draggables.push(new Draggable(g,Object.extend(d,{handle:f})));Droppables.add(g,b);if(e.tree){g.treeNode=a}e.droppables.push(g)});if(e.tree){(Sortable.findTreeElements(a,e)||[]).each(function(f){Droppables.add(f,c);f.treeNode=a;e.droppables.push(f)})}this.sortables[a.id]=e;Draggables.addObserver(new SortableObserver(a,e.onUpdate))},findElements:function(b,a){return Element.findChildren(b,a.only,a.tree?true:false,a.tag)},findTreeElements:function(b,a){return Element.findChildren(b,a.only,a.tree?true:false,a.treeTag)},onHover:function(c,b,d){if(Element.isParent(b,c)){return}if(d>0.33&&d<0.66&&Sortable.options(b).tree){return}else{if(d>0.5){Sortable.mark(b,"before");if(b.previousSibling!=c){var e=c.parentNode;c.style.visibility="hidden";b.parentNode.insertBefore(c,b);if(b.parentNode!=e){Sortable.options(e).onChange(c)}Sortable.options(b.parentNode).onChange(c)}}else{Sortable.mark(b,"after");var a=b.nextSibling||null;if(a!=c){var e=c.parentNode;c.style.visibility="hidden";b.parentNode.insertBefore(c,a);if(b.parentNode!=e){Sortable.options(e).onChange(c)}Sortable.options(b.parentNode).onChange(c)}}}},onEmptyHover:function(d,f,g){var h=d.parentNode;var j=Sortable.options(f);if(!Element.isParent(f,d)){var e;var b=Sortable.findElements(f,{tag:j.tag,only:j.only});var a=null;if(b){var c=Element.offsetSize(f,j.overlap)*(1-g);for(e=0;e<b.length;e+=1){if(c-Element.offsetSize(b[e],j.overlap)>=0){c-=Element.offsetSize(b[e],j.overlap)}else{if(c-(Element.offsetSize(b[e],j.overlap)/2)>=0){a=e+1<b.length?b[e+1]:null;break}else{a=b[e];break}}}}f.insertBefore(d,a);Sortable.options(h).onChange(d);j.onChange(d)}},unmark:function(){if(Sortable._marker){Sortable._marker.hide()}},mark:function(d,c){var b=Sortable.options(d.parentNode);if(b&&!b.ghosting){return}if(!Sortable._marker){Sortable._marker=($("dropmarker")||Element.extend(document.createElement("DIV"))).hide().addClassName("dropmarker").setStyle({position:"absolute"});document.getElementsByTagName("body").item(0).appendChild(Sortable._marker)}var a=Position.cumulativeOffset(d);Sortable._marker.setStyle({left:a[0]+"px",top:a[1]+"px"});if(c=="after"){if(b.overlap=="horizontal"){Sortable._marker.setStyle({left:(a[0]+d.clientWidth)+"px"})}else{Sortable._marker.setStyle({top:(a[1]+d.clientHeight)+"px"})}}Sortable._marker.show()},_tree:function(a,e,b){var g=Sortable.findElements(a,e)||[];for(var f=0;f<g.length;++f){var d=g[f].id.match(e.format);if(!d){continue}var c={id:encodeURIComponent(d?d[1]:null),element:a,parent:b,children:[],position:b.children.length,container:$(g[f]).down(e.treeTag)};if(c.container){this._tree(c.container,e,c)}b.children.push(c)}return b},tree:function(b){b=$(b);var a=this.options(b);var d=Object.extend({tag:a.tag,treeTag:a.treeTag,only:a.only,name:b.id,format:a.format},arguments[1]||{});var c={id:null,parent:null,children:[],container:b,position:0};return Sortable._tree(b,d,c)},_constructIndex:function(b){var a="";do{if(b.id){a="["+b.position+"]"+a}}while((b=b.parent)!=null);return a},sequence:function(b){b=$(b);var a=Object.extend(this.options(b),arguments[1]||{});return $(this.findElements(b,a)||[]).map(function(c){return c.id.match(a.format)?c.id.match(a.format)[1]:""})},setSequence:function(d,a){d=$(d);var c=Object.extend(this.options(d),arguments[2]||{});var b={};this.findElements(d,c).each(function(e){if(e.id.match(c.format)){b[e.id.match(c.format)[1]]=[e,e.parentNode]}e.parentNode.removeChild(e)});a.each(function(e){var f=b[e];if(f){f[1].appendChild(f[0]);delete b[e]}})},serialize:function(a){a=$(a);var c=Object.extend(Sortable.options(a),arguments[1]||{});var b=encodeURIComponent((arguments[1]&&arguments[1].name)?arguments[1].name:a.id);if(c.tree){return Sortable.tree(a,arguments[1]).children.map(function(d){return[b+Sortable._constructIndex(d)+"[id]="+encodeURIComponent(d.id)].concat(d.children.map(arguments.callee))}).flatten().join("&")}else{return Sortable.sequence(a,arguments[1]).map(function(d){return b+"[]="+encodeURIComponent(d)}).join("&")}}};Element.isParent=function(b,a){if(!b.parentNode||b==a){return false}if(b.parentNode==a){return true}return Element.isParent(b.parentNode,a)};Element.findChildren=function(b,e,d,a){if(!b.hasChildNodes()){return null}a=a.toUpperCase();if(e){e=[e].flatten()}var c=[];$A(b.childNodes).each(function(g){if(g.tagName&&g.tagName.toUpperCase()==a&&(!e||(Element.classNames(g).detect(function(h){return e.include(h)})))){c.push(g)}if(d){var f=Element.findChildren(g,e,d,a);if(f){c.push(f)}}});return(c.length>0?c.flatten():[])};Element.offsetSize=function(a,b){return a["offset"+((b=="vertical"||b=="height")?"Height":"Width")]};if(!Control){var Control={}}Control.Slider=Class.create({initialize:function(b,c,d){var a=this;if(Object.isArray(b)){this.handles=b.collect(function(e){return $(e)})}else{this.handles=[$(b)]}this.track=$(c);this.options=d||{};this.axis=this.options.axis||"horizontal";this.increment=this.options.increment||1;this.step=parseInt(this.options.step||"1");this.range=this.options.range||$R(0,1);this.value=0;this.values=this.handles.map(function(){return 0});this.spans=this.options.spans?this.options.spans.map(function(e){return $(e)}):false;this.options.startSpan=$(this.options.startSpan||null);this.options.endSpan=$(this.options.endSpan||null);this.restricted=this.options.restricted||false;this.maximum=this.options.maximum||this.range.end;this.minimum=this.options.minimum||this.range.start;this.alignX=parseInt(this.options.alignX||"0");this.alignY=parseInt(this.options.alignY||"0");this.trackLength=this.maximumOffset()-this.minimumOffset();this.handleLength=this.isVertical()?(this.handles[0].offsetHeight!=0?this.handles[0].offsetHeight:this.handles[0].style.height.replace(/px$/,"")):(this.handles[0].offsetWidth!=0?this.handles[0].offsetWidth:this.handles[0].style.width.replace(/px$/,""));this.active=false;this.dragging=false;this.disabled=false;if(this.options.disabled){this.setDisabled()}this.allowedValues=this.options.values?this.options.values.sortBy(Prototype.K):false;if(this.allowedValues){this.minimum=this.allowedValues.min();this.maximum=this.allowedValues.max()}this.eventMouseDown=this.startDrag.bindAsEventListener(this);this.eventMouseUp=this.endDrag.bindAsEventListener(this);this.eventMouseMove=this.update.bindAsEventListener(this);this.handles.each(function(f,e){e=a.handles.length-1-e;a.setValue(parseFloat((Object.isArray(a.options.sliderValue)?a.options.sliderValue[e]:a.options.sliderValue)||a.range.start),e);f.makePositioned().observe("mousedown",a.eventMouseDown)});this.track.observe("mousedown",this.eventMouseDown);document.observe("mouseup",this.eventMouseUp);document.observe("mousemove",this.eventMouseMove);this.initialized=true},dispose:function(){var a=this;Event.stopObserving(this.track,"mousedown",this.eventMouseDown);Event.stopObserving(document,"mouseup",this.eventMouseUp);Event.stopObserving(document,"mousemove",this.eventMouseMove);this.handles.each(function(b){Event.stopObserving(b,"mousedown",a.eventMouseDown)})},setDisabled:function(){this.disabled=true},setEnabled:function(){this.disabled=false},getNearestValue:function(b){if(this.allowedValues){if(b>=this.allowedValues.max()){return(this.allowedValues.max())}if(b<=this.allowedValues.min()){return(this.allowedValues.min())}var a=Math.abs(this.allowedValues[0]-b);var c=this.allowedValues[0];this.allowedValues.each(function(d){var e=Math.abs(d-b);if(e<=a){c=d;a=e}});return c}if(b>this.range.end){return this.range.end}if(b<this.range.start){return this.range.start}return b},setValue:function(b,a){if(!this.active){this.activeHandleIdx=a||0;this.activeHandle=this.handles[this.activeHandleIdx];this.updateStyles()}a=a||this.activeHandleIdx||0;if(this.initialized&&this.restricted){if((a>0)&&(b<this.values[a-1])){b=this.values[a-1]}if((a<(this.handles.length-1))&&(b>this.values[a+1])){b=this.values[a+1]}}b=this.getNearestValue(b);this.values[a]=b;this.value=this.values[0];this.handles[a].style[this.isVertical()?"top":"left"]=this.translateToPx(b);this.drawSpans();if(!this.dragging||!this.event){this.updateFinished()}},setValueBy:function(b,a){this.setValue(this.values[a||this.activeHandleIdx||0]+b,a||this.activeHandleIdx||0)},translateToPx:function(a){return Math.round(((this.trackLength-this.handleLength)/(this.range.end-this.range.start))*(a-this.range.start))+"px"},translateToValue:function(a){return((a/(this.trackLength-this.handleLength)*(this.range.end-this.range.start))+this.range.start)},getRange:function(b){var a=this.values.sortBy(Prototype.K);b=b||0;return $R(a[b],a[b+1])},minimumOffset:function(){return(this.isVertical()?this.alignY:this.alignX)},maximumOffset:function(){return(this.isVertical()?(this.track.offsetHeight!=0?this.track.offsetHeight:this.track.style.height.replace(/px$/,""))-this.alignY:(this.track.offsetWidth!=0?this.track.offsetWidth:this.track.style.width.replace(/px$/,""))-this.alignX)},isVertical:function(){return(this.axis=="vertical")},drawSpans:function(){var a=this;if(this.spans){$R(0,this.spans.length-1).each(function(b){a.setSpan(a.spans[b],a.getRange(b))})}if(this.options.startSpan){this.setSpan(this.options.startSpan,$R(0,this.values.length>1?this.getRange(0).min():this.value))}if(this.options.endSpan){this.setSpan(this.options.endSpan,$R(this.values.length>1?this.getRange(this.spans.length-1).max():this.value,this.maximum))}},setSpan:function(b,a){if(this.isVertical()){b.style.top=this.translateToPx(a.start);b.style.height=this.translateToPx(a.end-a.start+this.range.start)}else{b.style.left=this.translateToPx(a.start);b.style.width=this.translateToPx(a.end-a.start+this.range.start)}},updateStyles:function(){this.handles.each(function(a){Element.removeClassName(a,"selected")});Element.addClassName(this.activeHandle,"selected")},startDrag:function(a){if(Event.isLeftClick(a)){if(!this.disabled){this.active=true;var b=Event.element(a);var c=[Event.pointerX(a),Event.pointerY(a)];var d=b;if(d==this.track){var e=Position.cumulativeOffset(this.track);this.event=a;this.setValue(this.translateToValue((this.isVertical()?c[1]-e[1]:c[0]-e[0])-(this.handleLength/2)));var e=Position.cumulativeOffset(this.activeHandle);this.offsetX=(c[0]-e[0]);this.offsetY=(c[1]-e[1])}else{while((this.handles.indexOf(b)==-1)&&b.parentNode){b=b.parentNode}if(this.handles.indexOf(b)!=-1){this.activeHandle=b;this.activeHandleIdx=this.handles.indexOf(this.activeHandle);this.updateStyles();var e=Position.cumulativeOffset(this.activeHandle);this.offsetX=(c[0]-e[0]);this.offsetY=(c[1]-e[1])}}}Event.stop(a)}},update:function(a){if(this.active){if(!this.dragging){this.dragging=true}this.draw(a);if(Prototype.Browser.WebKit){window.scrollBy(0,0)}Event.stop(a)}},draw:function(c){var a=[Event.pointerX(c),Event.pointerY(c)];var b=Position.cumulativeOffset(this.track);a[0]-=this.offsetX+b[0];a[1]-=this.offsetY+b[1];this.event=c;this.setValue(this.translateToValue(this.isVertical()?a[1]:a[0]));if(this.initialized&&this.options.onSlide){this.options.onSlide(this.values.length>1?this.values:this.value,this)}},endDrag:function(a){if(this.active&&this.dragging){this.finishDrag(a,true);Event.stop(a)}this.active=false;this.dragging=false},finishDrag:function(a,b){this.active=false;this.dragging=false;this.updateFinished()},updateFinished:function(){if(this.initialized&&this.options.onChange){this.options.onChange(this.values.length>1?this.values:this.value,this)}this.event=null}});Sound={tracks:{},_enabled:true,template:new Template('<embed style="height:0" id="sound_#{track}_#{id}" src="#{url}" loop="false" autostart="true" hidden="true"/>'),enable:function(){Sound._enabled=true},disable:function(){Sound._enabled=false},play:function(b){if(!Sound._enabled){return}var a=Object.extend({track:"global",url:b,replace:false},arguments[1]||{});if(a.replace&&this.tracks[a.track]){$R(0,this.tracks[a.track].id).each(function(d){var c=$("sound_"+a.track+"_"+d);c.Stop&&c.Stop();c.remove()});this.tracks[a.track]=null}if(!this.tracks[a.track]){this.tracks[a.track]={id:0}}else{this.tracks[a.track].id++}a.id=this.tracks[a.track].id;$$("body")[0].insert(Prototype.Browser.IE?new Element("bgsound",{id:"sound_"+a.track+"_"+a.id,src:a.url,loop:1,autostart:true}):Sound.template.evaluate(a))}};if(Prototype.Browser.Gecko&&navigator.userAgent.indexOf("Win")>0){if(navigator.plugins&&$A(navigator.plugins).detect(function(a){return a.name.indexOf("QuickTime")!=-1})){Sound.template=new Template('<object id="sound_#{track}_#{id}" width="0" height="0" type="audio/mpeg" data="#{url}"/>')}else{Sound.play=function(){}}}Event.simulateMouse=function(b,d){var a=Object.extend({pointerX:0,pointerY:0,buttons:0,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false},arguments[2]||{});var c=document.createEvent("MouseEvents");c.initMouseEvent(d,true,true,document.defaultView,a.buttons,a.pointerX,a.pointerY,a.pointerX,a.pointerY,a.ctrlKey,a.altKey,a.shiftKey,a.metaKey,0,$(b));if(this.mark){Element.remove(this.mark)}this.mark=document.createElement("div");this.mark.appendChild(document.createTextNode(" "));document.body.appendChild(this.mark);this.mark.style.position="absolute";this.mark.style.top=a.pointerY+"px";this.mark.style.left=a.pointerX+"px";this.mark.style.width="5px";this.mark.style.height="5px;";this.mark.style.borderTop="1px solid red;";this.mark.style.borderLeft="1px solid red;";if(this.step){alert("["+new Date().getTime().toString()+"] "+d+"/"+Test.Unit.inspect(a))}$(b).dispatchEvent(c)};Event.simulateKey=function(b,d){var a=Object.extend({ctrlKey:false,altKey:false,shiftKey:false,metaKey:false,keyCode:0,charCode:0},arguments[2]||{});var c=document.createEvent("KeyEvents");c.initKeyEvent(d,true,true,window,a.ctrlKey,a.altKey,a.shiftKey,a.metaKey,a.keyCode,a.charCode);$(b).dispatchEvent(c)};Event.simulateKeys=function(c,a){for(var b=0;b<a.length;b++){Event.simulateKey(c,"keypress",{charCode:a.charCodeAt(b)})}};var Test={};Test.Unit={};Test.Unit.inspect=Object.inspect;Test.Unit.Logger=Class.create();Test.Unit.Logger.prototype={initialize:function(a){this.log=$(a);if(this.log){this._createLogTable()}},start:function(a){if(!this.log){return}this.testName=a;this.lastLogLine=document.createElement("tr");this.statusCell=document.createElement("td");this.nameCell=document.createElement("td");this.nameCell.className="nameCell";this.nameCell.appendChild(document.createTextNode(a));this.messageCell=document.createElement("td");this.lastLogLine.appendChild(this.statusCell);this.lastLogLine.appendChild(this.nameCell);this.lastLogLine.appendChild(this.messageCell);this.loglines.appendChild(this.lastLogLine)},finish:function(a,b){if(!this.log){return}this.lastLogLine.className=a;this.statusCell.innerHTML=a;this.messageCell.innerHTML=this._toHTML(b);this.addLinksToResults()},message:function(a){if(!this.log){return}this.messageCell.innerHTML=this._toHTML(a)},summary:function(a){if(!this.log){return}this.logsummary.innerHTML=this._toHTML(a)},_createLogTable:function(){this.log.innerHTML='<div id="logsummary"></div><table id="logtable"><thead><tr><th>Status</th><th>Test</th><th>Message</th></tr></thead><tbody id="loglines"></tbody></table>';this.logsummary=$("logsummary");this.loglines=$("loglines")},_toHTML:function(a){return a.escapeHTML().replace(/\n/g,"<br/>")},addLinksToResults:function(){$$("tr.failed .nameCell").each(function(a){a.title="Run only this test";Event.observe(a,"click",function(){window.location.search="?tests="+a.innerHTML})});$$("tr.passed .nameCell").each(function(a){a.title="Run all tests";Event.observe(a,"click",function(){window.location.search=""})})}};Test.Unit.Runner=Class.create();Test.Unit.Runner.prototype={initialize:function(b){this.options=Object.extend({testLog:"testlog"},arguments[1]||{});this.options.resultsURL=this.parseResultsURLQueryParameter();this.options.tests=this.parseTestsQueryParameter();if(this.options.testLog){this.options.testLog=$(this.options.testLog)||null}if(this.options.tests){this.tests=[];for(var a=0;a<this.options.tests.length;a++){if(/^test/.test(this.options.tests[a])){this.tests.push(new Test.Unit.Testcase(this.options.tests[a],b[this.options.tests[a]],b.setup,b.teardown))}}}else{if(this.options.test){this.tests=[new Test.Unit.Testcase(this.options.test,b[this.options.test],b.setup,b.teardown)]}else{this.tests=[];for(var c in b){if(/^test/.test(c)){this.tests.push(new Test.Unit.Testcase(this.options.context?" -> "+this.options.titles[c]:c,b[c],b.setup,b.teardown))}}}}this.currentTest=0;this.logger=new Test.Unit.Logger(this.options.testLog);setTimeout(this.runTests.bind(this),1000)},parseResultsURLQueryParameter:function(){return window.location.search.parseQuery()["resultsURL"]},parseTestsQueryParameter:function(){if(window.location.search.parseQuery()["tests"]){return window.location.search.parseQuery()["tests"].split(",")}},getResult:function(){var b=false;for(var a=0;a<this.tests.length;a++){if(this.tests[a].errors>0){return"ERROR"}if(this.tests[a].failures>0){b=true}}if(b){return"FAILURE"}else{return"SUCCESS"}},postResults:function(){if(this.options.resultsURL){new Ajax.Request(this.options.resultsURL,{method:"get",parameters:"result="+this.getResult(),asynchronous:false})}},runTests:function(){var a=this.tests[this.currentTest];if(!a){this.postResults();this.logger.summary(this.summary());return}if(!a.isWaiting){this.logger.start(a.name)}a.run();if(a.isWaiting){this.logger.message("Waiting for "+a.timeToWait+"ms");setTimeout(this.runTests.bind(this),a.timeToWait||1000)}else{this.logger.finish(a.status(),a.summary());this.currentTest++;this.runTests()}},summary:function(){var b=0;var e=0;var c=0;var a=[];for(var d=0;d<this.tests.length;d++){b+=this.tests[d].assertions;e+=this.tests[d].failures;c+=this.tests[d].errors}return((this.options.context?this.options.context+": ":"")+this.tests.length+" tests, "+b+" assertions, "+e+" failures, "+c+" errors")}};Test.Unit.Assertions=Class.create();Test.Unit.Assertions.prototype={initialize:function(){this.assertions=0;this.failures=0;this.errors=0;this.messages=[]},summary:function(){return(this.assertions+" assertions, "+this.failures+" failures, "+this.errors+" errors\n"+this.messages.join("\n"))},pass:function(){this.assertions++},fail:function(a){this.failures++;this.messages.push("Failure: "+a)},info:function(a){this.messages.push("Info: "+a)},error:function(a){this.errors++;this.messages.push(a.name+": "+a.message+"("+Test.Unit.inspect(a)+")")},status:function(){if(this.failures>0){return"failed"}if(this.errors>0){return"error"}return"passed"},assert:function(a){var b=arguments[1]||'assert: got "'+Test.Unit.inspect(a)+'"';try{a?this.pass():this.fail(b)}catch(c){this.error(c)}},assertEqual:function(d,b){var c=arguments[2]||"assertEqual";try{(d==b)?this.pass():this.fail(c+': expected "'+Test.Unit.inspect(d)+'", actual "'+Test.Unit.inspect(b)+'"')}catch(a){this.error(a)}},assertInspect:function(d,b){var c=arguments[2]||"assertInspect";try{(d==b.inspect())?this.pass():this.fail(c+': expected "'+Test.Unit.inspect(d)+'", actual "'+Test.Unit.inspect(b)+'"')}catch(a){this.error(a)}},assertEnumEqual:function(d,b){var c=arguments[2]||"assertEnumEqual";try{$A(d).length==$A(b).length&&d.zip(b).all(function(e){return e[0]==e[1]})?this.pass():this.fail(c+": expected "+Test.Unit.inspect(d)+", actual "+Test.Unit.inspect(b))}catch(a){this.error(a)}},assertNotEqual:function(d,b){var c=arguments[2]||"assertNotEqual";try{(d!=b)?this.pass():this.fail(c+': got "'+Test.Unit.inspect(b)+'"')}catch(a){this.error(a)}},assertIdentical:function(d,b){var c=arguments[2]||"assertIdentical";try{(d===b)?this.pass():this.fail(c+': expected "'+Test.Unit.inspect(d)+'", actual "'+Test.Unit.inspect(b)+'"')}catch(a){this.error(a)}},assertNotIdentical:function(d,b){var c=arguments[2]||"assertNotIdentical";try{!(d===b)?this.pass():this.fail(c+': expected "'+Test.Unit.inspect(d)+'", actual "'+Test.Unit.inspect(b)+'"')}catch(a){this.error(a)}},assertNull:function(a){var b=arguments[1]||"assertNull";try{(a==null)?this.pass():this.fail(b+': got "'+Test.Unit.inspect(a)+'"')}catch(c){this.error(c)}},assertMatch:function(a,c){var f=arguments[2]||"assertMatch";var d=new RegExp(a);try{(d.exec(c))?this.pass():this.fail(f+' : regex: "'+Test.Unit.inspect(a)+" did not match: "+Test.Unit.inspect(c)+'"')}catch(b){this.error(b)}},assertHidden:function(a){var b=arguments[1]||"assertHidden";this.assertEqual("none",a.style.display,b)},assertNotNull:function(a){var b=arguments[1]||"assertNotNull";this.assert(a!=null,b)},assertType:function(d,b){var c=arguments[2]||"assertType";try{(b.constructor==d)?this.pass():this.fail(c+': expected "'+Test.Unit.inspect(d)+'", actual "'+(b.constructor)+'"')}catch(a){this.error(a)}},assertNotOfType:function(d,b){var c=arguments[2]||"assertNotOfType";try{(b.constructor!=d)?this.pass():this.fail(c+': expected "'+Test.Unit.inspect(d)+'", actual "'+(b.constructor)+'"')}catch(a){this.error(a)}},assertInstanceOf:function(d,b){var c=arguments[2]||"assertInstanceOf";try{(b instanceof d)?this.pass():this.fail(c+": object was not an instance of the expected type")}catch(a){this.error(a)}},assertNotInstanceOf:function(d,b){var c=arguments[2]||"assertNotInstanceOf";try{!(b instanceof d)?this.pass():this.fail(c+": object was an instance of the not expected type")}catch(a){this.error(a)}},assertRespondsTo:function(b,a){var c=arguments[2]||"assertRespondsTo";try{(a[b]&&typeof a[b]=="function")?this.pass():this.fail(c+": object doesn't respond to ["+b+"]")}catch(d){this.error(d)}},assertReturnsTrue:function(c,b){var f=arguments[2]||"assertReturnsTrue";try{var d=b[c];if(!d){d=b["is"+c.charAt(0).toUpperCase()+c.slice(1)]}d()?this.pass():this.fail(f+": method returned false")}catch(a){this.error(a)}},assertReturnsFalse:function(c,b){var f=arguments[2]||"assertReturnsFalse";try{var d=b[c];if(!d){d=b["is"+c.charAt(0).toUpperCase()+c.slice(1)]}!d()?this.pass():this.fail(f+": method returned true")}catch(a){this.error(a)}},assertRaise:function(c,b){var d=arguments[2]||"assertRaise";try{b();this.fail(d+": exception expected but none was raised")}catch(a){((c==null)||(a.name==c))?this.pass():this.error(a)}},assertElementsMatch:function(){var a=$A(arguments),b=$A(a.shift());if(b.length!=a.length){this.fail("assertElementsMatch: size mismatch: "+b.length+" elements, "+a.length+" expressions");return false}b.zip(a).all(function(d,e){var f=$(d.first()),c=d.last();if(f.match(c)){return true}this.fail("assertElementsMatch: (in index "+e+") expected "+c.inspect()+" but got "+f.inspect())}.bind(this))&&this.pass()},assertElementMatches:function(a,b){this.assertElementsMatch([a],b)},benchmark:function(a,b){var d=new Date();(b||1).times(a);var c=((new Date())-d);this.info((arguments[2]||"Operation")+" finished "+b+" iterations in "+(c/1000)+"s");return c},_isVisible:function(a){a=$(a);if(!a.parentNode){return true}this.assertNotNull(a);if(a.style&&Element.getStyle(a,"display")=="none"){return false}return this._isVisible(a.parentNode)},assertNotVisible:function(a){this.assert(!this._isVisible(a),Test.Unit.inspect(a)+" was not hidden and didn't have a hidden parent either. "+(""||arguments[1]))},assertVisible:function(a){this.assert(this._isVisible(a),Test.Unit.inspect(a)+" was not visible. "+(""||arguments[1]))},benchmark:function(a,b){var d=new Date();(b||1).times(a);var c=((new Date())-d);this.info((arguments[2]||"Operation")+" finished "+b+" iterations in "+(c/1000)+"s");return c}};Test.Unit.Testcase=Class.create();Object.extend(Object.extend(Test.Unit.Testcase.prototype,Test.Unit.Assertions.prototype),{initialize:function(name,test,setup,teardown){Test.Unit.Assertions.prototype.initialize.bind(this)();this.name=name;if(typeof test=="string"){test=test.gsub(/(\.should[^\(]+\()/,"#{0}this,");test=test.gsub(/(\.should[^\(]+)\(this,\)/,"#{1}(this)");this.test=function(){eval("with(this){"+test+"}")}}else{this.test=test||function(){}}this.setup=setup||function(){};this.teardown=teardown||function(){};this.isWaiting=false;this.timeToWait=1000},wait:function(b,a){this.isWaiting=true;this.test=a;this.timeToWait=b},run:function(){try{try{if(!this.isWaiting){this.setup.bind(this)()}this.isWaiting=false;this.test.bind(this)()}finally{if(!this.isWaiting){this.teardown.bind(this)()}}}catch(a){this.error(a)}}});Test.setupBDDExtensionMethods=function(){var b={shouldEqual:"assertEqual",shouldNotEqual:"assertNotEqual",shouldEqualEnum:"assertEnumEqual",shouldBeA:"assertType",shouldNotBeA:"assertNotOfType",shouldBeAn:"assertType",shouldNotBeAn:"assertNotOfType",shouldBeNull:"assertNull",shouldNotBeNull:"assertNotNull",shouldBe:"assertReturnsTrue",shouldNotBe:"assertReturnsFalse",shouldRespondTo:"assertRespondsTo"};var a=function(e,d,c){this[e].apply(this,(d||[]).concat([c]))};Test.BDDMethods={};$H(b).each(function(c){Test.BDDMethods[c.key]=function(){var e=$A(arguments);var d=e.shift();a.apply(d,[c.value,e,this])}});[Array.prototype,String.prototype,Number.prototype,Boolean.prototype].each(function(c){Object.extend(c,Test.BDDMethods)})};Test.context=function(g,f,b){Test.setupBDDExtensionMethods();var a={};var c={};for(specName in f){switch(specName){case"setup":case"teardown":a[specName]=f[specName];break;default:var e="test"+specName.gsub(/\s+/,"-").camelize();var d=f[specName].toString().split("\n").slice(1);if(/^\{/.test(d[0])){d=d.slice(1)}d.pop();d=d.map(function(h){return h.strip()});a[e]=d.join("\n");c[e]=specName}}new Test.Unit.Runner(a,{titles:c,testLog:b||"testlog",context:g})};