/*
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('mensajevalidacion');
		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');
			}else{
				this.messageBox.setStyle('display','none');
			}
			return(valid);
		}
	}

});


window.addEvent('domready', function(){
	
	$$('.MGroupContent').setStyle('display', 'block');
	
	var selected = $('MSelected');
	
	var current = (selected) ? selected.getParent() : false;

	$$('div.MGroup').each(function(div){
		var link = div.getElement('a');
		var block = link.getNext();
		
		var fx = new Fx.Slide(block);
		
		if (block != current) fx.hide();

		link.addEvent('click', function(){
			fx.toggle();
		});
		
	});
	
	$$('.CTitle').each(function(heading){
		new Element('a', {
			'href': '#MainTopic',
			'class': 'toTop'
		}).setHTML('top').injectBefore(heading.getFirst());
	});
	
	new SmoothScroll();
	
});

document.write('<style type="text/css" media="screen">div.MGroupContent{display: none}</style>');
