/*Script: validate.js	basic form validation script.Authors:	Sam BirchLicense:	MIT-style license.*/var Validate = new Class({	initialize: function(myForm,options){		options = Object.extend({			custom: false,			messageBox: false,			dateFormat: false,			fieldClass: false,			showList:  true		}, options || {});				this.form = $(myForm);		this.myElements = $$('#'+this.form.id+' .required');		this.form.myElements = this.myElements;		options.messageBox = $(options.messageBox);		this.form.messageBox = options.messageBox;				this.formAnchor = new Element('a').setProperties({name: this.form.id+'Anchor'}).injectInside('validationMessage');		this.form.formAnchor = this.formAnchor;				options.list = new Element('ul').setProperty('id', 'errorList')		if(options.showList){			options.list.injectInside(options.messageBox);		}				this.myElements.each(function(el,i){						el.validate = function(){				//TEXTBOX				if(el.type == 'text'){					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)){								if($('errorListItem'+el.id)){$('errorListItem'+el.id).remove();}								el.removeClass(options.fieldClass);								el.getPrevious().removeClass(options.fieldClass);								return(true);							}else{								if(!$('errorListItem'+el.id)){									new Element('li').setProperty('id','errorListItem'+el.id).injectInside(options.list).setHTML(el.title);								}								el.addClass(options.fieldClass);								el.getPrevious().addClass(options.fieldClass);								return(false);							}													}else if(el.hasClass('number')){							var regNum = /[-+]?[0-9]*\.?[0-9]+/;							if(el.value.match(regNum)){								if($('errorListItem'+el.id)){$('errorListItem'+el.id).remove();}								el.removeClass(options.fieldClass);								el.getPrevious().removeClass(options.fieldClass);								return(true);							}else{								if(!$('errorListItem'+el.id)){									new Element('li').setProperty('id','errorListItem'+el.id).injectInside(options.list).setHTML(el.title);								}								el.addClass(options.fieldClass);								el.getPrevious().addClass(options.fieldClass);								return(false);							}						}else 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)){								if($('errorListItem'+el.id)){$('errorListItem'+el.id).remove();}								el.removeClass(options.fieldClass);								el.getPrevious().removeClass(options.fieldClass);								return(true);							}else{								if(!$('errorListItem'+el.id)){									new Element('li').setProperty('id','errorListItem'+el.id).injectInside(options.list).setHTML(el.title);								}								el.addClass(options.fieldClass);								el.getPrevious().addClass(options.fieldClass);								return(false);							}													}else if(el.hasClass('date')){							if(Date.isValid(el.value, options.dateFormat)){								if($('errorListItem'+el.id)){$('errorListItem'+el.id).remove();}								el.removeClass(options.fieldClass);								el.getPrevious().removeClass(options.fieldClass);								return(true);							}else{								if(!$('errorListItem'+el.id)){									new Element('li').setProperty('id','errorListItem'+el.id).injectInside(options.list).setHTML(el.title);								}								el.addClass(options.fieldClass);								el.getPrevious().addClass(options.fieldClass);								return(false);							}													}else{							if($('errorListItem'+el.id)){$('errorListItem'+el.id).remove();}							el.removeClass(options.fieldClass);							el.getPrevious().removeClass(options.fieldClass);							return(true);						}					}else{						if(!$('errorListItem'+el.id)){							new Element('li').setProperty('id','errorListItem'+el.id).injectInside(options.list).setHTML(el.title);						}						el.addClass(options.fieldClass);						el.getPrevious().addClass(options.fieldClass);						return(false);						}				}				//TEXTAREA				if(el.type == 'textarea'){					if(el.value == ''){						if(!$('errorListItem'+el.id)){							new Element('li').setProperty('id','errorListItem'+el.id).injectInside(options.list).setHTML(el.title);						}						el.addClass(options.fieldClass);						el.getPrevious().addClass(options.fieldClass);						return(false);					}else{						if($('errorListItem'+el.id)){$('errorListItem'+el.id).remove();}						el.removeClass(options.fieldClass);						el.getPrevious().removeClass(options.fieldClass);						return(true);					}				}				//CHECKBOX				if(el.type == 'checkbox'){					if(!el.checked){						if(!$('errorListItem'+el.id)){							new Element('li').setProperty('id','errorListItem'+el.id).injectInside(options.list).setHTML(el.title);						}						el.addClass(options.fieldClass);						el.getPrevious().addClass(options.fieldClass);						return(false);					}else{						if($('errorListItem'+el.id)){$('errorListItem'+el.id).remove();}						el.removeClass(options.fieldClass);						el.getPrevious().removeClass(options.fieldClass);						return(true);					}				}				//DROPDOWN				if(el.type == 'select-one'){					if(el.value == ''){						if(!$('errorListItem'+el.id)){							new Element('li').setProperty('id','errorListItem'+el.id).injectInside(options.list).setHTML(el.title);						}						el.addClass(options.fieldClass);						el.getPrevious().addClass(options.fieldClass);						return(false);					}else{						if($('errorListItem'+el.id)){$('errorListItem'+el.id).remove();}						el.removeClass(options.fieldClass);						el.getPrevious().removeClass(options.fieldClass);						return(true);					}				}				//RADIO				if(el.type == 'radio'){					var rad = $A(this.form[el.name]);					var ok = false;					rad.each(function(e,j){						if(e.checked){							ok = true;						}					});					if(!ok){						if(options.list.getLast().innerHTML != rad[0].title){							if(!$('errorListItem'+el.id)){								new Element('li').setProperty('id','errorListItem'+el.id).injectInside(options.list).setHTML(rad[0].title);							}						}												rad.each(function(e,j){							e.addClass(options.fieldClass);							if(el.getPrevious()){								el.getPrevious().addClass(options.fieldClass);							}						});						return(false);					}else{						if($('errorListItem'+el.id)){$('errorListItem'+el.id).remove();}						rad.each(function(e,j){							e.removeClass(options.fieldClass);							if(el.getPrevious()){								el.getPrevious().removeClass(options.fieldClass);							}						});						return(true);					}				}			}		});				this.form.onsubmit = function(){			var valid = true;			this.myElements.each(function(el,i){				if(!el.validate()){valid=false};			});			if(options.custom != false){				validC = options.custom(options.list);				if(valid && !validC){valid = false};			}						if(!valid){				this.messageBox.setStyle('display','block');				document.location = '#'+this.formAnchor.name;			}else{				this.messageBox.setStyle('display','none');			}						return(valid);		}	}});
