function FormValidator(oForm,bAjax){this.bAjax=false;if(bAjax!=undefined){this.bAjax=true}this.aRegExp={email:new RegExp(/^([a-zA-Z0-9_\-])+(\.([a-zA-Z0-9_\-])+)*@((\[(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5]))\]))|((([a-zA-Z0-9])+(([\-])+([a-zA-Z0-9])+)*\.)+([a-zA-Z])+(([\-])+([a-zA-Z0-9])+)*))$/),login:new RegExp(/^[0-9a-zA-Z-]*$/),nickname:new RegExp(/^[0-9a-zA-Z-]*$/),postaladdress:new RegExp(/^[^@]*$/)};var self=this;this.oForm=YAHOO.util.Dom.get(oForm);this.aElements=null;this.aReturn=new Array();this.foreach=function(aArray,fFunction){for(var i in aArray){if(typeof(aArray[i])!="function"){var bReturn=fFunction(aArray[i],i);if(String(bReturn)!="undefined"){return bReturn;break}}}};this.Construct=function(){this.aElements=YAHOO.util.Dom.getElementsBy(function(oElement){return oElement.getAttribute("validator")?true:false},null,this.oForm);this.ActivateCheck()};this.ActivateCheck=function(){for(i in this.aElements){oElement=this.aElements[i];if(typeof(oElement)!="function"){var aElement=YAHOO.util.Dom.getElementsByClassName("control","span",oElement.parentNode);if(aElement.length>0){YAHOO.util.Event.removeListener(oElement,"blur");YAHOO.util.Event.addListener(oElement,"blur",function(e,oControl){var bControl=self.Control(this,false);if(bControl==true){oControl.className="control cok"}else{if(bControl==false){oControl.className="control cno"}else{oControl.className="control"}}},aElement[0]);if(self.Control(oElement,false)==true){aElement[0].className="control cok"}}}}};this.Validate=function(){this.aReturn=new Array();this.hGroupsControl={};for(i in this.aElements){oElement=this.aElements[i];if(typeof(oElement)!="function"){this.aReturn[oElement.id]=this.Control(oElement)}}if(this.bAjax){if(this.IsValidated()){if(this.oForm.onsubmit){if(!this.oForm.onsubmit()){return false}}var oAjax=new Ajax();oAjax.SetForm(this.oForm);var sUrl=this.oForm.action;oAjax.Get(sUrl,function(oReturn){if(typeof oReturn.error!="undefined"&&oReturn.error.aList.length>0){self.foreach(oReturn.error.aList,function(e){if(typeof e.aParam.field!="undefined"){var oElement=YAHOO.util.Dom.get(e.aParam.field);var aElement=YAHOO.util.Dom.getElementsByClassName("error","span",oElement.parentNode);if(aElement.length>0){aElement[0].innerHTML=e.sName;aElement[0].style.display="block"}}})}if(typeof oReturn.js!="undefined"){eval(oReturn.js)}})}return false}else{var bAllReturn=this.IsValidated();if(!bAllReturn){var iMin=999999;var bReturn=this.foreach(this.aReturn,function(bReturn,sId){if(bReturn==false){iMin=YAHOO.util.Dom.getY(sId)<iMin?YAHOO.util.Dom.getY(sId):iMin}})}var oAnim=new YAHOO.util.Anim(null,{scroll:{from:YAHOO.util.Dom.getDocumentScrollTop(),to:iMin}},0.5,YAHOO.util.Easing.easeBoth);oAnim.setAttribute=function(sType,iValue){if(sType=="scroll"){window.scroll(0,iValue)}};oAnim.animate();return bAllReturn}};this.Reset=function(){var aElement=YAHOO.util.Dom.getElementsByClassName("error","span",this.oForm);this.foreach(aElement,function(oElement){oElement.style.display="none"})};this.hGroupsControl={};this.Control=function(oElement,bShowError){if(typeof(bShowError)=="undefined"){bShowError=true}var sValidator=oElement.getAttribute("validator"),aConditions=sValidator.split(" "),bReturn=true,bManual=false;var sGroup=null;for(i in aConditions){sKey=aConditions[i];if(typeof(sKey)=="string"){if(sKey=="required"){bReturn=bReturn==false?false:this.ControlRequired(oElement)}else{if(sKey=="date"){bReturn=bReturn==false?false:this.ControlDate(oElement)}else{if(sKey=="password"){bReturn=bReturn==false?false:this.ControlPassword(oElement)}else{if(sKey=="manual"){bManual=true}else{if(sKey.indexOf("group")!=-1){var aReg=/^group\[([a-zA-Z0-9_\-]+)\]$/.exec(sKey);sGroup=aReg[1]}else{if(sKey=="false"){bReturn=bReturn==false?false:this.ControlFalse(oElement,sKey)}else{if(sKey.indexOf("max")!=-1){bReturn=bReturn==false?false:this.ControlMax(oElement,sKey)}else{if(sKey.indexOf("min")!=-1){bReturn=bReturn==false?false:this.ControlMin(oElement,sKey)}else{if(sKey.indexOf("equal_")!=-1){bReturn=bReturn==false?false:this.ControlEqual(oElement,sKey,true)}else{if(sKey.indexOf("different_")!=-1){bReturn=bReturn==false?false:this.ControlEqual(oElement,sKey,false)}else{bReturn=bReturn==false?false:this.ControlRegex(oElement,sKey)}}}}}}}}}}}}if(sGroup){var group=sGroup;if(!(group in this.hGroupsControl)){this.hGroupsControl[group]=bReturn}if(!bReturn&&group in this.hGroupsControl&&this.hGroupsControl[group]){this.hGroupsControl[group]=false}if(this.hGroupsControl[group]==false){bReturn=false}}if(!bManual||(bManual&&bReturn==false)||(sGroup&&!this.hGroupsControl[group])){this.ShowError(bReturn,oElement,bShowError);return bReturn}else{if(bManual&&bReturn){return null}}};this.ShowError=function(bReturn,oElement,bShowError){var aElement=YAHOO.util.Dom.getElementsByClassName("error","span",oElement.parentNode);if(aElement.length>0){aElement[0].style.display=bReturn?"none":(bShowError?"block":"none")}};this.IsFormElement=function(oElement){if(oElement.tagName=="SELECT"||oElement.tagName=="INPUT"||oElement.tagName=="TEXTAREA"){return true}else{return false}};this.CanBeControl=function(oElement){if(oElement.tagName=="SELECT"&&oElement.options.length==0){return false}else{return true}};this.GetFormElement=function(oDomRoot){var aElements=YAHOO.util.Dom.getElementsBy(function(oElement){return self.IsFormElement(oElement)},null,oDomRoot);return aElements};this.GetElementValue=function(oElement){if(oElement.tagName=="SELECT"||oElement.tagName=="TEXTAREA"||(oElement.tagName=="INPUT"&&(oElement.type=="text"||oElement.type=="password"))){return oElement.value}else{var sName=oElement.name;var aElements=YAHOO.util.Dom.getElementsBy(function(oElement){return sName==oElement.name?true:false},"input",this.oForm);sValue=this.foreach(aElements,function(oElement){if(oElement.checked==true){return oElement.value}});return typeof(sValue)!="undefined"?sValue:""}};this.ControlRequired=function(oElement){if(this.IsFormElement(oElement)){return this.CanBeControl(oElement)&&this.GetElementValue(oElement).trim()==""?false:true}else{var bValidate=true;this.foreach(this.GetFormElement(oElement),function(oInnerElement){bValidate=self.ControlRequired(oInnerElement)==false?false:bValidate});return bValidate}};this.ControlFalse=function(oElement,sKey){return false};this.ControlMax=function(oElement,sKey){var iMax=Number(sKey.replace(/max/g,""));if(this.IsFormElement(oElement)){return this.GetElementValue(oElement).length>iMax?false:true}else{var bValidate=true;this.foreach(this.GetFormElement(oElement),function(oInnerElement){bValidate=self.ControlMax(oInnerElement,sKey)==false?false:bValidate});return bValidate}};this.ControlMin=function(oElement,sKey){var iMin=Number(sKey.replace(/min/g,""));if(this.IsFormElement(oElement)){return this.GetElementValue(oElement).length<iMin?false:true}else{var bValidate=true;this.foreach(this.GetFormElement(oElement),function(oInnerElement){bValidate=self.ControlMin(oInnerElement,sKey)==false?false:bValidate});return bValidate}};this.ControlDate=function(oElement){var iYear,iDay,iMonth;this.foreach(this.GetFormElement(oElement),function(oInnerElement){if(oInnerElement.name.indexOf("_y")!=-1){iYear=self.GetElementValue(oInnerElement)}else{if(oInnerElement.name.indexOf("_m")!=-1){iMonth=self.GetElementValue(oInnerElement)}else{if(oInnerElement.name.indexOf("_d")!=-1){iDay=self.GetElementValue(oInnerElement)}}}});if(!(iYear>0&&iMonth>0&&iDay>0)){return false}var oDate=new Date(iYear,iMonth-1,iDay);return oDate.getDate()==iDay&&oDate.getMonth()+1==iMonth&&iYear==oDate.getFullYear()?true:false};this.ControlAddress=function(oElement){if(oElement.value.indexOf("@")>=0){return false}return true};this.ControlPassword=function(oElement){var sTemp="";for(var i=0;i<oElement.value.length;i++){var sCar=oElement.value.substring(i,i+1);iTest=0;iCount=0;while(iTest==0&&iCount<sTemp.length){var sCarTemp=sTemp.substring(iCount,iCount+1);if(sCarTemp==sCar){iTest=1}iCount++}if(iTest==0){sTemp=sTemp+sCar}}if(sTemp.length<3){return false}return true};this.ControlEqual=function(oElement,sKey,bEqual){var sId=sKey.substr(bEqual?6:10);if(this.IsFormElement(oElement)&&bEqual==true){return this.CanBeControl(oElement)&&this.GetElementValue(oElement)==this.GetElementValue(YAHOO.util.Dom.get(sId))?true:false}else{if(this.IsFormElement(oElement)&&bEqual==false){return this.CanBeControl(oElement)&&this.GetElementValue(oElement)!=this.GetElementValue(YAHOO.util.Dom.get(sId))?true:false}else{var bValidate=true;var sKey=sKey;this.foreach(this.GetFormElement(oElement),function(oInnerElement){bValidate=self.ControlEqual(oInnerElement,sKey,bEqual)==false?false:bValidate});return bValidate}}};this.ControlRegex=function(oElement,sKey){if(this.IsFormElement(oElement)){var oRe=this.aRegExp[sKey];if(oRe){return this.CanBeControl(oElement)&&oRe.test(this.GetElementValue(oElement))?true:false}else{return true}}else{var bValidate=true;var sKey=sKey;this.foreach(this.GetFormElement(oElement),function(oInnerElement){bValidate=self.ControlRegex(oInnerElement,sKey)==false?false:bValidate});return bValidate}};this.IsValidated=function(){var bReturn=this.foreach(this.aReturn,function(bReturn){if(bReturn==false){return false}});return bReturn==false?false:true};this.Construct()};
