var Waiter=new Class({options:{baseHref:'',img:{src:'waiter.gif',id:'waitingImg',styles:{position:'absolute',width:66,height:66,display:'none',opacity:0.4,zIndex:999}},imgPosition:{},layer:{id:'waitingDiv',background:'#747980',opacity:0.6},fxOptions:{}},initialize:function(target,options){this.target=$(target||document.body);this.setOptions(options);this.waiterImg=$(this.options.img.id)||new Element('img',$merge(this.options.img,{src:this.options.baseHref+this.options.img.src})).injectInside(document.body);this.waiterDiv=$(this.options.layer.id)||new Element('div',{id:this.options.layer.id,styles:{width:0,height:0,position:'absolute',zIndex:998,display:'none',opacity:0,backgroundColor:this.options.layer.background}}).injectInside(document.body);this.waiterFx=this.waiterFx||new Fx.Elements($$(this.waiterImg,this.waiterDiv),this.options.fxOptions);},toggle:function(element,show){if(this.inTransit){this.chain(this.toggle.bind(this,[element,show]));return this;}element=$(element)||$(this.active)||$(this.target);if(!$(element))return this;if(this.active&&element!=this.active)return this.stop().chain(this.start.bind(this,element));if((!this.active||show)&&show!==false)this.start(element);else if(this.active&&!show)this.stop();return this;},start:function(element){if(this.inTransit){this.chain(this.start.bind(this,element));return this;}this.inTransit=true;element=$(element)||$(this.target);var start=function(){var dim=element.getComputedSize();this.active=element;this.waiterImg.setPosition($merge(this.options.imgPosition,{relativeTo:element})).show();this.waiterDiv.setStyles({width:dim.totalWidth,height:dim.totalHeight,display:'block'}).setPosition({relativeTo:element,position:'upperLeft'});this.waiterFx.start({0:{opacity:[1]},1:{opacity:[this.options.layer.opacity]}}).chain(function(){this.inTransit=false;this.fireEvent('onShow',element);this.callChain();}.bind(this));}.bind(this);if(this.active&&this.active!=element)this.stop(start);else start();return this;},stop:function(callback){if(this.inTransit){this.chain(this.stop.bind(this,callback));return this;}if(!this.active)return this;this.inTransit=true;this.waiterFx.start({0:{opacity:[0]},1:{opacity:[0]}}).chain(function(){this.inTransit=false;this.active=null;this.waiterDiv.hide();this.waiterImg.hide();this.fireEvent('onHide',this.active);this.callChain();if($type(callback)=="function")callback.attempt();}.bind(this));return this;}});Waiter.implement(new Options,new Events,new Chain);if(typeof Ajax!="undefined"){var Ajax=Ajax.extend({options:{useWaiter:false,waiterOptions:{}},initialize:function(url,options){this.parent(url,options);if(this.options.useWaiter&&this.options.update){this.waiter=new Waiter(this.options.update,this.options.waiterOptions);this.addEvent('onComplete',this.waiter.stop.bind(this.waiter));this.addEvent('onFailure',this.waiter.stop.bind(this.waiter));}},request:function(data){if(this.waiter)this.waiter.start().chain(this.parent.bind(this,data));else this.parent(data);return this;}});}