/**************************************************************
Script		: Validate
Version		: 2.1
Authors		: Samuel Birch
Desc		: Form validation
Licence		: Open Source MIT Licence
**************************************************************/
var Validate = new Class({
	
	getOptions: function(){
		return {
			validateOnBlur: true,
			errorClass: 'error',
			errorMsgClass: 'errorMessage',
			dateFormat: 'dd/mm/aaaa',
			onFail: Class.empty,
			onSuccess: false,
			showErrorsInline: true,
			label: 'Por favor espere...'
		};
	},

	initialize: function(form, options){
		var Llegada;
		var Salida;
		this.setOptions(this.getOptions(), options);
		
		this.form = $(form);
		this.elements = this.form.getElements('.required');
		
		this.list = [];
		
		this.elements.each(function(el,i){
			if(this.options.validateOnBlur){
				el.addEvent('blur', this.validate.bind(this, el));
			}
		}.bind(this));
		
		this.form.addEvent('submit', function(e){
			var event = new Event(e);
			var doSubmit = true;
			this.elements.each(function(el,i){
				if(! this.validate(el)){
					event.stop();
					doSubmit = false
					this.list.include(el);
				}else{
					this.list.remove(el);
				}
			}.bind(this));
			
			if(doSubmit){
				if(this.options.onSuccess){
					event.stop();
					this.options.onSuccess(this.form);
				}else{
					this.form.getElement('input[type=submit]').setProperty('value',this.options.label);
					enviarReservacion();
				}
			}else{
				this.options.onFail(this.getList());
			}
			
		}.bind(this));
		
	},
	
	getList: function(){
		var list = new Element('ul');
		this.list.each(function(el,i){
			if(el.title != ''){
			var li = new Element('li').injectInside(list);
			new Element('label').setProperty('for', el.id).setText(el.title).injectInside(li);
			}
		});
		return list;
	},
	
	validate: function(el){
		var valid = true;
		this.clearMsg(el);
		
		switch(el.type){
			case 'text':
			case 'textarea':
			case 'select-one':
				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)){
							valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'Por favor escriba el correo-e');
						}
					}
					
					if(el.hasClass('number')){
						var regNum = /[-+]?[0-9]*\.?[0-9]+/;
						if(el.value.match(regNum)){
							valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'Por favor escriba el n&uacute;mero');
						}
					}
					if(el.hasClass('date')){
						var d = this.ValidarDT(el.value,el.id);
						if(d != false){
							valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'La fecha debe ser dia/mes/a'+String.fromCharCode(241)+'o: '+this.options.dateFormat.toLowerCase());
						}
					}
				}else{
					valid = false;
					this.setMsg(el);
				}
				break;
				
			case 'checkbox':
				if(!el.checked){
					valid = false;
					this.setMsg(el);
				}else{
					valid = true;
				}
				break;
				
			case 'radio':
				var rad = $A(this.form[el.name]);
				var ok = false;
				rad.each(function(e,i){
					if(e.checked){
						ok = true;
					}
				});
				if(!ok){
					valid = false;
					this.setMsg(rad.getLast(), 'Por favor seleccione una opci&oacuten');
				}else{
					valid = true;
					this.clearMsg(rad.getLast());
				}
				break;
				
		}
		return valid;
	},

	ValidarDT: function(Cadena,ID){
		if(ID=='fllegada') {
			Llegada = Cadena.split("/");
			Llegada = Llegada[2]+Llegada[1]+Llegada[0];
		} else if(ID=='fsalida') {
			Salida = Cadena.split("/");
			Salida = Salida[2]+Salida[1]+Salida[0];
		}
		/*Llegada = document.myForm.fllegada.value;
		Salida = document.myForm.fsalida.value;
		if((Llegada!='' && Salida!='') && Llegada>Salida) {
			alert('La Fecha de Salida es menor a la de Llegada.');
			return false
		}
		//alert(Llegada + ' -> ' + Salida); llega:'+Llegada+' - salida'+Salida
	*/
		if(window.Llegada!='undefined' && window.Salida!='undefined') {
			//alert(Llegada + ' Llego - Salgo ' + Salida);
			//alert(Cadena + ' - ' + ID);
			if(ID=='fsalida' && Llegada>Salida) {
				alert('Disculpe, la fecha de Salida es menor a la de Llegada.');
				return false
			}
		} /*else {
			alert('Falta');
		}*/
		var Fecha= new String(Cadena)	// Crea un string
		var RealFecha= new Date()	// Para sacar la fecha de hoy
		// Cadena Año
		var Ano= new String(Fecha.substring(Fecha.lastIndexOf("/")+1,Fecha.length))
		// Cadena Mes
		var Mes= new String(Fecha.substring(Fecha.indexOf("/")+1,Fecha.lastIndexOf("/")))
		// Cadena Día
		var Dia= new String(Fecha.substring(0,Fecha.indexOf("/")))

		// Valido el año
		if (isNaN(Ano) || Ano.length<4 || parseFloat(Ano)<2008){
			//alert('Año inválido')
			return false
		}
		// Valido el Mes
		if (isNaN(Mes) || Mes.length<2 || parseFloat(Mes)<1 || parseFloat(Mes)>12){
			//alert('Mes inválido')
			return false
		}
		// Valido el Dia
		if (isNaN(Dia) || Dia.length<2 || parseInt(Dia, 10)<1 || parseInt(Dia, 10)>31){
			//alert('Día inválido')
			return false
		}
		if (Mes==4 || Mes==6 || Mes==9 || Mes==11 || Mes==2) {
			if (Mes==2 && Dia > 28 || Dia>30) {
				//alert('Día inválido')
				return false
			}
		}
	
	  //para que envie los datos, quitar las  2 lineas siguientes
	  //alert("Fecha correcta.")
	  return true
	},

	setMsg: function(el, msg){
		if(msg == undefined){
			msg = el.title;
		}
		if(this.options.showErrorsInline){
			if(el.error == undefined){
				el.error = new Element('span').addClass(this.options.errorMsgClass).setText(msg).injectAfter(el);
			}else{
				el.error.setText(msg);
			}
			el.addClass(this.options.errorClass);
		}
		c = document.getElementById('Resulta2');
		c.innerHTML = "<b>Por favor complete todos los campos del formulario</b>";
	},
	
	clearMsg: function(el){
		el.removeClass(this.options.errorClass);
		if(el.error != undefined){
			el.error.remove();
			el.error = undefined;
		}
		//c = document.getElementById('Resulta2');
		//c.innerHTML = "";
	}
	
});

Validate.implement(new Options);
Validate.implement(new Events);
/**************************************************************/

