var Shift=new Class({Implements:[Events,Options],options:{transition:Fx.Transitions.Linear,orientation:'horizontal',duration:300},initialize:function(container,options){this.setOptions(options);this.container=container;this.index=null;switch(this.options.orientation){case'horizontal':this.mode={axe:'x',offset:'width',direction:'margin-left'};break;case'vertical':this.mode={axe:'y',offset:'height',direction:'margin-top'};break};this.scroller=this.container.getElement('div.scroller');this.step=this.scroller.getElements('div.step');var size=0;this.step.each((function(step){size+=step.getSize()[this.mode.axe]}).bind(this));this.scroller.setStyle(this.mode.offset,size);this.fx=new Fx.Tween(this.scroller,{transition:this.options.transition,duration:this.options.duration,link:'cancel'})},change:function(initialize){this.fireEvent('onChange',[this.index,initialize])},next:function(){this.to(this.index+1)},preview:function(){this.to(this.index-1)},to:function(index,initialize){if(index<0||index>this.step.length-1)return this;var margin=-this.step[index].getPosition()[this.mode.axe]+this.scroller.getPosition()[this.mode.axe];if(initialize){this.scroller.setStyle(this.mode.direction,margin);this.index=index;this.change(initialize)}else this.fx.start(this.mode.direction,margin).chain((function(){this.index=index;this.change(initialize)}).bind(this));return this}})
var Tips=new Class({Implements:[Options],options:{delay:2500,autohide:true,className:'tooltip',transition:{show:Fx.Transitions.Bounce.easeOut,hide:Fx.Transitions.linear},duration:{show:600,hide:300}},initialize:function(element,options){this.element=element;this.setOptions(options);this.container=new Element('a',{'class':this.options.className,opacity:0,events:{click:this.setHide.bind(this,1)}});['left','middle','right'].each(function(cn,i){new Element('span',{'class':cn}).inject(this)},this.container);this.run=false;this.fx=new Fx.Tween(this.container.inject(document.body),{transition:this.options.transition,link:'ignore'});return this},setValue:function(value){this.container.getElement('span.middle').set('html',value);return this},setShow:function(){if(this.run)return;this.run=true;var ic=this.element.getCoordinates(),tc=this.container.getCoordinates();this.container.setStyles({top:ic.top-(tc.height/2)+(ic.height/2),left:ic.left-tc.width-100,opacity:1});this.fx.options.duration=this.options.duration.show;this.fx.options.transition=this.options.transition.show;this.fx.start('left',ic.left-tc.width+5);if(this.options.autohide)this.setHide()},setHide:function(delay){(function(){if(!this.run)return;if(Browser.Engine.trident){this.container.set('opacity',0);this.run=false;return};this.fx.options.duration=this.options.duration.hide;this.fx.options.transition=this.options.transition.hide;this.fx.start('opacity',0).chain((function(){this.run=false}).bind(this))}).bind(this).delay(delay||this.options.delay)}})
var Validator=new Class({Implements:Events,initialize:function(form){this.form=form||null},get:function(form){this.form=form||this.form;this.elements=this.form.getElements('[name]');this.data={};this.elements.each(function(element){if((name=element.getProperty('name'))=='')return;var prop=(element.get('type'))?element.get('type')||element.type:element.get('class');this.data[name]=element.value},this);return this},check:function(method){if(!method||this.run)return;this.run=true;new Request.Custom(this.form.getProperty('action')+':'+method,{onError:(function(code,message,method){message.each(function(error){this.elements.each(function(element){if(element.getProperty('name')==error.name)this.error(element,error.message)},this)},this);this.run=false}).bind(this),onComplete:(function(response){this.fireEvent('onValidate',response);this.run=false}).bind(this)}).send(this.data)},error:function(element,message){if(element.focus)element.focus();if(!element.tooltip)element.tooltip=new Tips(element);element.tooltip.setValue(message).setShow()}})
window.addEvent('domready',function(){var step,form=$(document.body).getElement('form'),validator=new Validator().addEvent('onValidate',function(){step.to(1)});step=new Shift($('shift'),{onChange:function(index,initialize){},transition:Fx.Transitions.Expo.easeIn,orientation:'vertical',duration:500}).to(0,true)
function validate(){validator.get(form).check(form.getProperty('request'))};form.addEvent('keydown',function(event){event=new Event(event);if(event.type=='keydown'&&event.key!='enter')return;validate()});$('submit').addEvent('click',function(){validate()})})