/*
Script: validate.js
	basic form validation script.

Authors:
	Sam Birch

License:
	MIT-style license.

*/
var Borrado;
var contrasena;
var Valores = new Array("Introduzca su nombre", "Introduzca sus apellidos", "xxxxxxxx-A", "xx/xx/xxxx", "Introduzca su correo electrónico", "Introduzca el nombre de su empresa", "Introduzca la dirección de envío", "xxxxx", "Introduzca la población de envío", "Introduzca la provincia de envío", "xxx xxx xxx", "xxx", "Introduzca el mensaje que quiere enviar a Isabel Gan", "Introduzca el tipo de error que ha detectado en Isabel Gan");

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({id: this.form.id+'Anchor'}).injectInside(this.form.messageBox);
		this.form.formAnchor = this.formAnchor;
		
		options.list = new Element('ol', {'class':'Lista_Contacto'}).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' || el.type == 'password'){
					//Controlamos que el valor de los campos sea distinto del valor por defecto
					Borrado = true;
					for (i = 0; i < Valores.length; i++)
					{
						if (el.value == Valores[i]) Borrado = false;
					}
					
					//Control de las contraseñas
					if (el.name == "Contrasena_Pedido")
					{
						contrasena = el.value;
					}
					else if (el.name == "Contrasena_2_Pedido")
					{
						if (el.value != contrasena)
						{
							if(!$('errorListItemContrasena')){
								new Element('li').setProperty('id','errorListItemContrasena').injectInside(options.list).setHTML("Las contrase&ntilde;as no coinciden.");
							}
							el.addClass(options.fieldClass);
							el.getPrevious().addClass(options.fieldClass);
							return(false);
						}
						else
						{
							if($('errorListItemContrasena')){$('errorListItemContrasena').remove();}
							el.removeClass(options.fieldClass);
							el.getPrevious().removeClass(options.fieldClass);
							return(true);
						}
					}

					if(Borrado == true && el.value != '' && el.value.length > 2){
						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.alt + ".");
								}
								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.alt + ".");
								}
								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.alt + ".");
								}
								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.alt + ".");
								}
								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.alt + ".");
						}
						el.addClass(options.fieldClass);
						el.getPrevious().addClass(options.fieldClass);
						return(false);	
					}
				}
				//TEXTAREA
				if(el.type == 'textarea'){
					Borrado = false;
					for (i = 0; i < Valores.length; i++)
					{
						if (el.value == Valores[i]) Borrado = true;
					}
					if(Borrado == true || el.value == ''){
						if(!$('errorListItem'+el.id)){
							new Element('li').setProperty('id','errorListItem'+el.id).injectInside(options.list).setHTML(el.id + ".");
						}
						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.id + ".");
						}
						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(Borrado == false){
						if(!$('errorListItem'+el.id)){
							new Element('li').setProperty('id','errorListItem'+el.id).injectInside(options.list).setHTML(el.id + ".");
						}
						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.id]);
					var ok = false;
					rad.each(function(e,j){
						if(e.checked){
							ok = true;
						}
					});
					if(!ok){
						if(options.list.getLast().innerHTML != rad[0].id){
							if(!$('errorListItem'+el.id)){
								new Element('li').setProperty('id','errorListItem'+el.id).injectInside(options.list).setHTML(rad[0].id);
							}
						}
						
						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');
			}
			
			initScrollLayer();
			return(valid);
		}
	}

});

