var FormManager=new Class({initialize:function(a){this.submitHandlers=[];this.form=$(a);Form.getFields(this.form).each(function(b){this.initElement(b)}.bind(this));this.fieldStatusBox=new Element("p",{id:this.formName+"FieldStatus"}).setStyles({position:"absolute",maxWidth:"200px",border:"1px solid #f90",backgroundColor:"#fffbd6",padding:"3px",textAlign:"left",display:"none"});this.fieldStatusBox.inject(document.body);this.form.onsubmit=this.validate.bind(this)},initElement:function(a){a.fmHasError=false;a.fmErrorMessage="";a.fmHasFocus=false;a.fmValidate=function(){return};a.addEvent("focus",this.focused.bindWithEvent(this,a));a.addEvent("blur",this.blurred.bindWithEvent(this,a));if(["password","text","textarea"].contains(a.type)){a.addEvent("keypress",this.dismissFieldStatus.bind(this,a))}else{a.addEvent("click",this.dismissFieldStatus.bind(this,a))}},addHandler:function(c,b){var a=$(c);a.fmValidate=b},addSubmitHandler:function(a){this.submitHandlers.push(a)},focused:function(b,a){a.fmHasFocus=true;if(a.fmHasError){this.clearStyle(a);this.showFieldStatus(a)}},blurred:function(b,a){a.fmHasFocus=false;if(a.fmHasError){this.clear(a)}a.fmValidate()},showFieldStatus:function(b){var c=b.getCoordinates();var a=Math.min(c.height,21)-8;this.fieldStatusBox.update(b.fmErrorMessage).setStyles({top:c.top+a+"px",left:c.left+2+"px"}).show()},dismissFieldStatus:function(a){if(a.fmHasError){this.clear(a)}},showFormStatusMessage:function(){},hideFormStatusMessage:function(){},clear:function(a){this.clearStatusMessage();this.clearStyle(a);this.clearError(a)},clearStatusMessage:function(){this.fieldStatusBox.hide()},clearError:function(a){a.fmHasError=false;a.fmErrorMessage=""},clearStyle:function(a){a.style.backgroundColor=""},setValue:function(a,b){a=$(a);a.value=b;if(a.fmValidate){this.clearError(a);a.fmValidate();if(!a.fmHasError){this.clearStyle(a)}}},required:function(){var b=$A(arguments);var a=function(c){var d=["text","textarea","password"].contains(c.type);var e=c.type=="select-one";if((d&&c.value.trim()=="")||(e&&c.selectedIndex==0)){this.requiredError(c)}};b.each(function(c){c=$(c);this.addHandler(c,a.bind(this,c))}.bind(this))},error:function(a,b){a=$(a);a.fmHasError=true;a.fmErrorMessage=b;a.setStyle("backgroundColor","#ffd0d2");if(a.fmHasFocus){this.clearStyle(a);this.showFieldStatus(a)}},requiredError:function(a){this.error(a,"This field is required.")},validationError:function(a){a=$(a);a.activate();new Fx.Scroll(window).toElement(a);this.showFieldStatus(a);this.showFormStatusMessage()},validationErrors:function(a){a.each(function(b){this.error(b.first(),b.last())}.bind(this));this.validationError(a.first().first())},focus:function(){Form.focusFirst(this.form)},validate:function(){var b=null;var a=null;this.hideFormStatusMessage();Form.getFields(this.form).each(function(c){this.clear(c);c.fmValidate();if(!a&&c.fmHasError){a=c}}.bind(this));if(a){this.validationError(a);return false}return this.submitHandlers.every(function(c){return c(this.form)}.bind(this))},submit:function(){if(!this.form.onsubmit()){return false}else{this.form.submit()}}});