var Validate=new Class({getOptions:function(){return{validateOnBlur:true,errorClass:"error",errorMsgClass:"errorMessage",dateFormat:"dd-MM-yyyy",onFail:Class.empty,onSuccess:false,showErrorsInline:true,label:"Espere por Favor..."};},initialize:function(form,options){this.setOptions(this.getOptions(),options);this.form=$(form);this.elements=this.form.getElements(".required");this.list=[];this.elements.each(function(el,i){if(this.options.validateOnBlur){el.addEvent("blur",this.validate.bind(this,el));}}.bind(this));this.form.addEvent("submit",function(e){var event=new Event(e);var doSubmit=true;this.elements.each(function(el,i){if(!this.validate(el)){event.stop();doSubmit=false;this.list.include(el);}else{this.list.remove(el);}}.bind(this));}.bind(this));},getList:function(){var list=new Element("ul");this.list.each(function(el,i){if(el.title!=""){var li=new Element("li").injectInside(list);new Element("label").setProperty("for",el.id).setText(el.title).injectInside(li);}});return list;},validate:function(el){var valid=true;this.clearMsg(el);switch(el.type){case"text":case"password":case"textarea":case"select-one":if(el.value!=""){if(el.hasClass("email")){var regEmail=/^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/;if(el.value.toUpperCase().match(regEmail)){valid=true;}else{valid=false;this.setMsg(el,"Correo inválido");}}if(el.hasClass("number")){var regNum=/[-+]?[0-9]*\.?[0-9]+/;if(el.value.match(regNum)){valid=true;}else{valid=false;this.setMsg(el,"Please enter a valid number");}}if(el.hasClass("postcode")){var regPC=/^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$/;if(el.value.match(regPC)){valid=true;}else{valid=false;this.setMsg(el,"Please enter a valid postcode");}}if(el.hasClass("date")){var d=Date.parseExact(el.value,this.options.dateFormat);if(d!=null){valid=true;var Fecha=new String(el.value);var RealFecha=new Date();var Ano=new String(Fecha.substring(Fecha.lastIndexOf("-")+1,Fecha.length));var Mes=new String(Fecha.substring(Fecha.indexOf("-")+1,Fecha.lastIndexOf("-")));var Dia=new String(Fecha.substring(0,Fecha.indexOf("-")));if(isNaN(Ano)||Ano.length<4||parseFloat(Ano)<1900){this.setMsg(el,"Año inválido ");valid=false;}if(isNaN(Mes)||parseFloat(Mes)<1||parseFloat(Mes)>12){this.setMsg(el,"Mes inválido ");valid=false;}if(isNaN(Dia)||parseInt(Dia,10)<1||parseInt(Dia,10)>31){this.setMsg(el,"Día inválido ");valid=false;}if(Mes==4||Mes==6||Mes==9||Mes==11||Mes==2){if(Mes!=2&&Dia>30){valid=false;this.setMsg(el,"Día inválido ");}if(Mes==2&&Dia==29){if((Ano%4==0)&&((Ano%100!=0)||(Ano%400==0))){aux="";}else{valid=false;this.setMsg(el,"Día inválido ");}}else{if(Mes==2&&Dia>29){valid=false;this.setMsg(el,"Día inválido ");}}}}else{valid=false;this.setMsg(el,"Formato Invalido: "+this.options.dateFormat.toLowerCase());}}if(el.hasClass("legajo")){var regNum=/^([0-9])*$/;if(el.value.match(regNum)){valid=true;}else{valid=false;this.setMsg(el,"Legajo inválido");}}if(el.hasClass("cuil")){var regNum=/[-+]?[0-9]*\.?[0-9]+/;if(el.value.match(regNum)){valid=true;cuit=el.value.replace(/[-_]/g,"");if(cuit.length!=11){valid=false;this.setMsg(el,"Verifique el formato (00-00000000-0)");}}else{valid=false;this.setMsg(el,"Cuil inválido");}}}else{valid=false;this.setMsg(el);}break;case"checkbox":if(!el.checked){valid=false;this.setMsg(el);}else{valid=true;}break;case"radio":var rad=$A(this.form[el.name]);var ok=false;rad.each(function(e,i){if(e.checked){ok=true;}});if(!ok){valid=false;this.setMsg(rad.getLast(),"Please select an option");}else{valid=true;this.clearMsg(rad.getLast());}break;}return valid;},setMsg:function(el,msg){if(msg==undefined){msg=el.title;}if(this.options.showErrorsInline){if(el.error==undefined){el.error=new Element("span").addClass(this.options.errorMsgClass).setText(msg).injectAfter(el);}else{el.error.setText(msg);}el.addClass(this.options.errorClass);}},clearMsg:function(el){el.removeClass(this.options.errorClass);if(el.error!=undefined){el.error.remove();el.error=undefined;}}});Validate.implement(new Options);Validate.implement(new Events);
