// FUNCIONES DE FECHAS DE CRUCEROS
var indMeses = 0;
//var meses = new Array('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre');
var meses = new Array();
var fechasCrucerosArr = new Array();
// ANTILLAS Y CARIBE SUR
fechasCrucerosArr[0] = new Array('PANTL-ALL-',new Array('Octubre','Noviembre','Diciembre'),new Array('Enero','Febrero','Marzo','Abril','Mayo','Junio'));
fechasCrucerosArr[1] = new Array('PANTL-CTG-',new Array('Octubre','Noviembre','Diciembre'),new Array('Enero','Febrero'));
fechasCrucerosArr[2] = new Array('PANTL-LAG-',new Array('Octubre','Noviembre','Diciembre'),new Array('Enero','Febrero'));
fechasCrucerosArr[3] = new Array('PANTL-ONX-',new Array('Octubre'),new Array('Sin Salidas'));
fechasCrucerosArr[4] = new Array('PANTL-AUA-',new Array('Octubre','Diciembre'),new Array('Enero'));
fechasCrucerosArr[5] = new Array('PMAYA-CZM-',new Array('Sin Salidas'),new Array('Abril','Mayo','Junio'));
fechasCrucerosArr[6] = new Array('PMAYA-PRO-',new Array('Sin Salidas'),new Array('Marzo','Abril','Mayo','Junio'));

//CARIBE MAYA
fechasCrucerosArr[7] = new Array('PMAYA-CZM-HR',new Array('Marzo','Abril','Mayo','Junio'));

//RONDÓ VENECIAN
fechasCrucerosArr[8] = new Array('PMEVS-ALL-',new Array('Julio','Agosto','Septiembre','Octubre'),new Array('Abril','Mayo','Junio','Julio','Agosto','Septiembre'));
fechasCrucerosArr[9] = new Array('PMEVS-RAN-',new Array('Julio','Agosto','Septiembre','Octubre'), new Array('Abril','Mayo','Junio','Julio','Agosto','Septiembre'));
fechasCrucerosArr[10] = new Array('PMEVS-ATH-',new Array('Agosto','Septiembre','Octubre'),new Array('Abril','Mayo','Junio','Julio','Agosto','Septiembre'));

//ISLAS GRIEGAS Y TURQUÍA
//fechasCrucerosArr[8] = new Array('PMEGS-ALL','Julio','Agosto','Septiembre');
//fechasCrucerosArr[8] = new Array('PMEGS-ATH-HR',new Array('Julio','Agosto','Septiembre'),new Array('Febrero'));
fechasCrucerosArr[11] = new Array('PMEGS-ATH-',new Array('Julio','Agosto','Septiembre'),new Array('Abril','Mayo','Junio','Julio','Agosto','Septiembre'));

//fechasCrucerosArr[10] = new Array('PMEGS-IST','Julio','Agosto','Septiembre');

//EGIPTO Y TIERRA SANTA
fechasCrucerosArr[12] = new Array('PTIER-ATH-',new Array('Sin Salidas'),new Array('Septiembre','Octubre','Noviembre'));

//BRISAS DEL MEDITERRANEO
//fechasCrucerosArr[12] = new Array('PMEBS-ALL','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre');
fechasCrucerosArr[13] = new Array('PMEBS-BCN-',new Array('Julio','Agosto','Septiembre','Octubre','Noviembre'),new Array('Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre'));
//fechasCrucerosArr[14] = new Array('PMEBS-ROM','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre');

//ENCANTOS DE CANARIAS
fechasCrucerosArr[14] = new Array('PCANA-ALL-',new Array('Abril','Octubre','Noviembre'));
fechasCrucerosArr[15] = new Array('PCANA-FNC-HR',new Array('Abril','Octubre','Noviembre'));
fechasCrucerosArr[16] = new Array('PCANA-TCI-HR',new Array('Abril','Octubre','Noviembre'));
fechasCrucerosArr[17] = new Array('PCANA-PLC-HR',new Array('Abril','Octubre','Noviembre'));
fechasCrucerosArr[18] = new Array('PCANA-ACE-HR',new Array('Abril','Octubre','Noviembre'));

//ESCAPADAS AL ATLÁNTICO
fechasCrucerosArr[19] = new Array('PESCA-ALL-',new Array('Octubre','Noviembre'),new Array('Sin Salidas'));
fechasCrucerosArr[20] = new Array('PESCA-LIS-',new Array('Octubre','Noviembre'),new Array('Sin Salidas'));
fechasCrucerosArr[21] = new Array('PESCA-AGP-',new Array('Octubre','Noviembre'),new Array('Sin Salidas'));

//CAPITALES BÁLTICAS
fechasCrucerosArr[22] = new Array('PBLCS-ALL-',new Array('Julio','Agosto','Septiembre'),new Array('Junio','Julio','Agosto','Septiembre'));
fechasCrucerosArr[23] = new Array('PBLCS-CPH-',new Array('Julio','Agosto','Septiembre'),new Array('Junio','Julio','Agosto','Septiembre'));
fechasCrucerosArr[24] = new Array('PBLCS-TLL-',new Array(),new Array('Junio','Julio','Agosto','Septiembre'));
fechasCrucerosArr[25] = new Array('PBLCS-HEL-',new Array('Julio','Agosto'),new Array('Sin Salidas'));


//POSICIONALES
fechasCrucerosArr[26] = new Array('POSIC-ALL-',new Array('Marzo','Abril','Mayo','Septiembre','Noviembre'));

//PACÍFICO MEXICANO
fechasCrucerosArr[27] = new Array('PMEXI-ALL-',new Array('Julio','Agosto','Septiembre'),new Array('Sin Salidas'));
fechasCrucerosArr[28] = new Array('PMEXI-ACA-',new Array('Julio','Agosto','Septiembre'),new Array('Sin Salidas'));
fechasCrucerosArr[29] = new Array('PMEXI-PVR-',new Array('Julio','Agosto','Septiembre'),new Array('Sin Salidas'));

//LEYENDAS DEL MEDITERRÁNEO
fechasCrucerosArr[30] = new Array('PLEYE-ALL-',new Array('Sin Salidas'),new Array('Septiembre','Octubre'));
fechasCrucerosArr[31] = new Array('PLEYE-PMI-',new Array('Sin Salidas'),new Array('Octubre'));
fechasCrucerosArr[32] = new Array('PLEYE-VLC-',new Array('Sin Salidas'),new Array('Septiembre','Octubre'));

//FIORDOS NORUEGOS
fechasCrucerosArr[33] = new Array('PFIOR-ALL-',new Array('Sin Salidas'),new Array('Mayo','Junio'));
fechasCrucerosArr[34] = new Array('PFIOR-CPH-',new Array('Sin Salidas'),new Array('Mayo','Junio'));
fechasCrucerosArr[35] = new Array('PFIOR-TRD-',new Array('Sin Salidas'),new Array('Mayo','Junio'));



// VERSIÓN ELIMINAR
//BRISAS DEL MEDITERRANEO
fechasCrucerosArr[36] = new Array('PMEBS-BCN-SO',new Array('Julio','Agosto','Septiembre','Octubre','Noviembre'),new Array('Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre'));

//ISLAS GRIEGAS Y TURQUÍA
fechasCrucerosArr[37] = new Array('PMEGS-ATH-HR',new Array('Julio','Agosto','Septiembre'),new Array('Abril','Mayo','Junio','Julio','Agosto','Septiembre'));

//RONDÓ VENECIAN
fechasCrucerosArr[38] = new Array('PMEVS-ALL-',new Array('Julio','Agosto','Septiembre','Octubre'),new Array('Abril','Mayo','Junio','Julio','Agosto','Septiembre'));
fechasCrucerosArr[39] = new Array('PMEVS-RAN-ZE',new Array('Julio','Agosto','Septiembre','Octubre'), new Array('Abril','Mayo','Junio','Julio','Agosto','Septiembre'));
fechasCrucerosArr[40] = new Array('PMEVS-ATH-ZE',new Array('Agosto','Septiembre','Octubre'),new Array('Abril','Mayo','Junio','Julio','Agosto','Septiembre'));

//CAPITALES BÁLTICAS
fechasCrucerosArr[41] = new Array('PBLCS-ALL-',new Array('Julio','Agosto','Septiembre'),new Array('Junio','Julio','Agosto','Septiembre'));
fechasCrucerosArr[42] = new Array('PBLCS-CPH-EP',new Array('Julio','Agosto','Septiembre'),new Array('Junio','Julio','Agosto','Septiembre'));
fechasCrucerosArr[43] = new Array('PBLCS-HEL-EP',new Array('Julio','Agosto'),new Array('Sin Salidas'));

//ESCAPADAS AL ATLÁNTICO
fechasCrucerosArr[44] = new Array('PESCA-ALL-',new Array('Octubre','Noviembre'),new Array('Sin Salidas'));
fechasCrucerosArr[45] = new Array('PESCA-LIS-EP',new Array('Octubre','Noviembre'),new Array('Sin Salidas'));
fechasCrucerosArr[46] = new Array('PESCA-AGP-EP',new Array('Octubre','Noviembre'),new Array('Sin Salidas'));

// ANTILLAS Y CARIBE SUR
fechasCrucerosArr[47] = new Array('PANTL-ALL-',new Array('Octubre','Noviembre','Diciembre'),new Array('Enero','Febrero','Marzo','Abril','Mayo','Junio'));
fechasCrucerosArr[48] = new Array('PANTL-CTG-OD',new Array('Octubre','Noviembre','Diciembre'),new Array('Enero','Febrero'));
fechasCrucerosArr[49] = new Array('PANTL-LAG-OD',new Array('Octubre','Noviembre','Diciembre'),new Array('Enero','Febrero'));
fechasCrucerosArr[50] = new Array('PANTL-ONX-OD',new Array('Octubre'),new Array('Sin Salidas'));

//PACÍFICO MEXICANO
fechasCrucerosArr[51] = new Array('PMEXI-ALL-',new Array('Julio','Agosto','Septiembre'),new Array('Sin Salidas'));
fechasCrucerosArr[52] = new Array('PMEXI-ACA-OD',new Array('Julio','Agosto','Septiembre'),new Array('Sin Salidas'));
fechasCrucerosArr[53] = new Array('PMEXI-PVR-OD',new Array('Julio','Agosto','Septiembre'),new Array('Sin Salidas'));

//TODOS
fechasCrucerosArr[54] = new Array('0');


function createOnchange(itm, selItm){
	itm.onchange = function(){createFechaCruise(selItm);}
}

function createFechaCruise(cruisesSelect){
	var dateSelect = document.getElementById('salida');
	var fin = fechasCrucerosArr.length-1;
	var anio = document.getElementById('anio');
	var anioSel = anio.options.selectedIndex;
	var anioSelArr;
	var indAnio;
	if(indMeses==0){
		//alert(indMeses);
		for(u=1;u<dateSelect.options.length;u++){
			meses.push(dateSelect.options[u].text);
			eval("fechasCrucerosArr["+fin+"].push(dateSelect.options["+u+"].text)");
		}
		indMeses = 1;
	}
	
	var cruiseFormSelected = cruisesSelect.options.selectedIndex;
	var cruiseFormValue = cruisesSelect[cruiseFormSelected].value;
	var mesesArr = new Array();
	
	if(anio.options.length == 3){
		if(anioSel==0){return false}
		indAnio = 0;
	}
	
	else if(anio.options.length == 2){
		indAnio = 1;	
	}
	
	//if(anioSel!=0)
	for(d=0;d<fechasCrucerosArr.length;d++){		
		if(fechasCrucerosArr[d][0] == cruiseFormValue){			
			dateSelect.options.length = 1;
			//if(anioSel == 0){anioSel = 1}
			anioSelArr = fechasCrucerosArr[d][(anioSel+indAnio)];
			
			for(v=0;v<anioSelArr.length;v++){
				dateSelect.options.length++;
				dateSelect.options[v+1].text = anioSelArr[v];
				for(t=0;t<meses.length;t++){					
					if(anioSelArr[v] == meses[t]){dateSelect.options[v+1].value = (t+1);}	
				}
			}
		}
	}
}
// FIN FUNCIONES DE FECHAS DE CRUCEROS


var messageVal = '';
var checkInArr = new Array();
var cashArr = new Array();

var esperaH;
var espera;
var esperaB;
var esperaInt;
var esperaImage;
var esperaSpan;

function getDocHeight() {var D = document;return Math.max(Math.max(D.body.scrollHeight, D.documentElement.scrollHeight),Math.max(D.body.offsetHeight, D.documentElement.offsetHeight),Math.max(D.body.clientHeight, D.documentElement.clientHeight));}
function formulario(){
	ifAbajo = document.createElement('IFRAME');
	ifAbajo.className = 'ifAbajo';
	esperaH = getDocHeight()+'px';	
	espera = document.createElement('DIV');
	espera.style.height = esperaH;
	espera.id='contentEspera';
	esperaB = document.createElement('DIV');
	esperaB.id = 'esperaB';
	esperaSpan = document.createElement('SPAN');
	esperaSpan.id = 'spanContentEspera';
	esperaInt = document.createElement('DIV');
	esperaInt.className = "esperaInt";
	esperaImage = document.createElement('IMG');
	esperaImage.src = '/media/images/espera.gif';
	ifAbajo.style.height = esperaImage.height+'px';
	ifAbajo.style.width = esperaImage.width+'px';
	esperaSpan.appendChild(esperaImage);
	esperaSpan.appendChild(ifAbajo);
	esperaInt.appendChild(esperaSpan);
	esperaB.appendChild(esperaInt);
	espera.appendChild(esperaB);
	var esperaH = getDocHeight()+'px';
	espera.style.height = esperaH;
	espera.style.display = 'none';
	document.body.appendChild(espera);
	
	var formularios = document.getElementsByTagName('form');
					
	for(d=0;d<formularios.length;d++){
		var actForm = formularios[d];
		var campForm = new Array();
		var myForm = new Validate();
		
		initValidations(formularios[d],actForm,campForm,myForm)
	}
			
	function initValidations(formularios,actForm,campForm,myForm){
		
		createValidations(actForm,campForm,myForm)
		
		
		formularios.onsubmit = function(){
			
			if(actForm.className == 'formularioFecha'){
				var seleccionado = false;
				for(d=0;d<actForm.elements.length;d++){if(actForm.elements[d].checked){seleccionado = true}}
				if(!seleccionado){if(actForm.title)alert(actForm.title);else alert('debe seleccionar una opción de la tabla superior');return false}				
			}			
			
			if(actForm.id == 'cruiseSearchForm'){
				var adultos;
				var ninos;
				var bebes;
				if(actForm.numberOfAdults) adultos = parseInt(actForm.numberOfAdults.options[actForm.numberOfAdults.options.selectedIndex].text);
				else adultos = 0;
				if(actForm.numberOfChildren) ninos = parseInt(actForm.numberOfChildren.options[actForm.numberOfChildren.options.selectedIndex].text);
				else ninos = 0;
				if(actForm.numberOfBabys) bebes = parseInt(actForm.numberOfBabys.options[actForm.numberOfBabys.options.selectedIndex].text);
				else bebes = 0;
				var total = adultos+ninos+bebes;
				
				if(total>4){alert('El número máximo de pasajeros es 4');return false}
				
				/*var marInd = document.getElementById('destino').options.selectedIndex;
				var mar = document.getElementById('destino').options[marInd].value;
				
				var cruceroInd = document.getElementById('crucero').options.selectedIndex;
				var cruceroTxt = document.getElementById('crucero').options[cruceroInd].text;
				var cruceroPosition = cruceroTxt.indexOf('(');
				var cruceroLongitud = cruceroTxt.length;
				var crucero = cruceroTxt.substr(0,cruceroPosition);
				crucero = crucero.replace(/ /gi,'-');
				crucero = crucero.substr(0, crucero.lastIndexOf('-'));
				
				var origen = cruceroTxt.index
				
				alert('crucero = '+crucero);*/
			}
			
			// CAMBIAMOS EL ACTION DEL FORMULARIO DE EXCURSIONES DEPENDIENDO DEL VALUE DE LA EXCURSIÓN SELECCIONADA
			if(actForm.id == 'excursionSearchForm'){
				var excursionSel = actForm.cruise.selectedIndex
				actForm.action = actForm.cruise[excursionSel].value;
			}
			
			// EN LA PÁGINA DE SELECCIÓN DE CATEGORÍA DE CRUCEROS VALIDAMOS QUE SE HAYA SELECCIONADO ALGÚNA CATEGORÍA
			if(actForm.id == 'formularioEdades' && document.getElementById('pasoInitSelFecha') && document.getElementById('catFecha')){
				if(document.getElementsByClassName('seleccionado').length == 0){alert('debe seleccionar una de las cabinas de la tabla de arriba');return false}
				
				if(document.getElementById('selectEdades')){
					if(document.getElementById('selectPasajeros')){
						var indPasajeros = document.getElementById('pasajeros').selectedIndex+1;
						var selects = document.getElementById('selectEdades');
						var selectsTag = selects.getElementsByTagName('SELECT');
						var corte = false;
						for(s=0;s<indPasajeros;s++){
							var corteIndex = selectsTag[s].options.selectedIndex;
							if(selectsTag[s].options[corteIndex].value > 17){corte = true}
						}
						if(!corte){alert('Entre los pasajeros debe de haber al menos un mayor de edad. Por favor, compruebe las edades de los pasajeros');return false}
					}
				}
			}
			
			// EN LA PÁGINA DE SELECCIÓN DE CAMAROTES VALIDAMOS QUE SE HAYA SELECCIONADO ALGÚN CAMAROTE
			if(actForm.id == 'formularioEdades' && document.getElementById('pasoInitCamarote') && document.getElementById('tablaCamarote')){
				//alert(document.getElementsByClassName('').length);
				if(document.getElementsByClassName('TDseleccionado').length == 0){alert('debe seleccionar una de los camarotes de la tabla de arriba');return false}		
				
			}
			
			// EN LA PÁGINA DE RESULTADOS DE CIRCUITOS VALIDAMOS QUE NO SE HAYAN SELECCIONADO MAS DE 9 PASAJEROS Y QUE NO PUEDE HABER MAS DE UN NIÑO POR CADA DOS ADULTOS
			if(actForm.id == 'formularioEdades' && document.getElementById('datosIntermediosCircuitos') && document.getElementById('numAdults')){
				
				var selAdultos = document.getElementById('numAdults').options.selectedIndex;
				var selNinos = document.getElementById('numChildren').options.selectedIndex;
				var selBebes = document.getElementById('numBabies').options.selectedIndex;
				
				var adultos = parseInt(document.getElementById('numAdults').options[selAdultos].value);
				var ninos =  parseInt(document.getElementById('numChildren').options[selNinos].value);
				var bebes =  parseInt(document.getElementById('numBabies').options[selBebes].value);
				
				var total = adultos+ninos+bebes;
				var totalMenores = ninos+bebes;
				if(total>9){alert('No puede elegir más de 9 pasajeros para este circuito. Por favor, modifique la selección');return false}
				if(totalMenores>(adultos/2)){alert('No puede haber más de un menor por cada dos adultos. Por favor, modifique la selección');return false}
			}
			
			// EN LA PÁGINA DE SELECCIÓN DE VUELOS VALIDAMOS QUE SE HAYA SELECCIONADO ALGUNA CATEGORIA DEL VUELO SELECCIONADO
			
			if(actForm.id == 'formularioSeleccionVuelos'){
				
				var vuelos = document.getElementsByName('selVuelo');
				var vuelosTuristas = document.getElementsByName('claseVuelo');
				var contentClase = document.getElementsByClassName('radiosClase');
				var active = false;
				var activeCheck = false;
				for(d=0;d<vuelos.length;d++){
					if(vuelos[d].parentNode.className == 'vueloActivo')	{
						//alert('0= '+contentClase[d].getElementsByTagName('INPUT').length);
						active = true;						
						var numInputs = contentClase[d].getElementsByTagName('INPUT');						
						for(d=0;d<numInputs.length;d++){
							if(numInputs[d].checked){activeCheck = true}
						}
					}
				}
				
				if(!active){alert('debe seleccionar un vuelo');return false}
				else if(!activeCheck){alert('debe seleccionar una categoría para el vuelo seleccionado');return false}
			}
			
			return myForm.Apply();			
		}
	}
			
	function createValidations(actForm,campForm,myForm){
		
		for(n=0;n<actForm.elements.length;n++){
			var auxForm = new Array();
			auxForm.push(actForm.elements[n].tagName)
			auxForm.push(actForm.elements[n].id)
			auxForm.push(actForm.elements[n].name)
			auxForm.push(actForm.elements[n].type)
			auxForm.push(actForm.elements[n].value)
			auxForm.push(actForm.elements[n].title)
			auxForm.push(actForm.elements[n])
			auxForm.push(actForm.elements[n].alt)
			campForm.push(auxForm)
		}
		
		for(r=0;r<campForm.length;r++){
			
			if(campForm[r][3] == 'text'){
				//alert('entra');
				addFocus(campForm[r][6],campForm[r][4])
			}
			
			if(campForm[r][5]!=''){	
				switch(campForm[r][5]){
					case'obligatorio': messageVal = ' es obligatorio'; break;
					case'email': messageVal = ' no es un email correcto'; break;
					case'date': messageVal = ' no es una fecha correcta'; break;
					case'texto': messageVal = ' no es un campo alfabético correcto'; break;
					case'Number': messageVal = ' no es un campo numérico correcto'; break;
					case'DNI': messageVal = ' no es un DNI correcto'; break;
				}
				myForm.addRules({elemento:campForm[r][6],id:campForm[r][1],option:campForm[r][5],tag:campForm[r][0],tipo:campForm[r][3],error:campForm[r][7]});				
			}
		}		
	}
}

function addFocus(itm, val){
	itm.onfocus = function(){
		if(itm.value == val){itm.value = ''}	
	}
}

var Class = {
	create: function() {
		return function() {
			this.initialize.apply(this, arguments);
		}
	}
}



function getValue(s){return document.getElementById(s).value}



var Validate = Class.create();
Validate.prototype = {
	/*--------------------------------------------------------------------------*/
	initialize:function(){
		this.error_array = []
		this.rules_array = [];
		this.e = true;
	},
	/*--------------------------------------------------------------------------*/
	isDNI:function (dni) {
	  numero = dni.substr(0,dni.length-1);
	  let = dni.substr(dni.length-1,1);
	  numero = numero % 23;
	  letra='TRWAGMYFPDXBNJZSQVHLCKET';
	  letra=letra.substring(numero,numero+1);
	  
	  if(letra.toUpperCase() == let.toUpperCase()){return true}
	  else {return false;}
		
	},
	
	/*--------------------------------------------------------------------------*/
	isEqual:function(string1, string2){
		if(string1 == string2) return true;
		else return false;
	},
	/*--------------------------------------------------------------------------*/
	hasValidChars:function(s, characters, caseSensitive){
		function escapeSpecials(s){
			return s.replace(new RegExp("([\\\\-])", "g"), "\\$1");
		}
		return new RegExp("^[" + escapeSpecials(characters) + "]+$",(!caseSensitive ? "i" : "")).test(s);
	},
	/*--------------------------------------------------------------------------*/
	isSimpleIP:function(ip){
		ipRegExp = /^(([0-2]*[0-9]+[0-9]+)\.([0-2]*[0-9]+[0-9]+)\.([0-2]*[0-9]+[0-9]+)\.([0-2]*[0-9]+[0-9]+))$/
		return ipRegExp.test(ip);
	},
	/*--------------------------------------------------------------------------*/
	isAlphaLatin:function(string){
		alphaRegExp = /^[a-zñ' 'áéíóúç]+$/i
		return alphaRegExp.test(string);
	},
	/*--------------------------------------------------------------------------*/
	isNotEmpty:function (string){
		return /\S/.test(string);
	},
	/*--------------------------------------------------------------------------*/
	isEmpty:function(s){		
		return !/\S/.test(s);
	},
	/*--------------------------------------------------------------------------*/
	isIntegerInRange:function(n,Nmin,Nmax){
		var num = Number(n);
		if(isNaN(num)){
			return false;
		}
		if(num != Math.round(num)){
			return false;
		}
		return (num >= Nmin && num <= Nmax);
	},
	/*--------------------------------------------------------------------------*/
	isNum:function(number){
		numRegExp = /^[0-9]+$/
		return numRegExp.test(number);
	},
	/*--------------------------------------------------------------------------*/
	isBank:function(number){
		if(!this.isNum(number)){return false}
		else if(number.length!=16){return false}
		else return true;
	},
	/*--------------------------------------------------------------------------*/
	isEMailAddr:function(string){
		emailRegExp = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.([a-z]){2,4})$/
		return emailRegExp.test(string);
	},
	/*--------------------------------------------------------------------------*/
	isZipCode:function(zipcode,country){
		if(!zipcode) return false;
		if(!country) format = 'US';
		switch(country){
			case'US': zpcRegExp = /^\d{5}$|^\d{5}-\d{4}$/; break;
			case'MA': zpcRegExp = /^\d{5}$/; break;
			case'CA': zpcRegExp = /^[A-Z]\d[A-Z] \d[A-Z]\d$/; break;
			case'DU': zpcRegExp = /^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/; break;
			case'FR': zpcRegExp = /^\d{5}$/; break;
			case'Monaco':zpcRegExp = /^(MC-)\d{5}$/; break;
		}
		return zpcRegExp.test(zipcode);
	},
	/*--------------------------------------------------------------------------*/
	isDate:function(date,format){
		if(!date) return false;
		if(!format) format = 'FR';
		
		switch(format){
			case'FR': RegExpformat = /^(([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/([2][0]|[1][9])\d{2})$/; break;
			case'US': RegExpformat = /^([2][0]|[1][9])\d{2}\-([0]\d|[1][0-2])\-([0-2]\d|[3][0-1])$/; break;
			case'SHORTFR': RegExpformat = /^([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/\d{2}$/; break;
			case'SHORTUS': RegExpformat = /^\d{2}\-([0]\d|[1][0-2])\-([0-2]\d|[3][0-1])$/; break;
			case'dd MMM yyyy':RegExpformat = /^([0-2]\d|[3][0-1])\s(Jan(vier)?|F√©v(rier)?|Mars|Avr(il)?|Mai|Juin|Juil(let)?|Aout|Sep(tembre)?|Oct(obre)?|Nov(ember)?|Dec(embre)?)\s([2][0]|[1][19])\d{2}$/; break;
			case'MMM dd, yyyy':RegExpformat = /^(J(anuary|u(ne|ly))|February|Ma(rch|y)|A(pril|ugust)|(((Sept|Nov|Dec)em)|Octo)ber)\s([0-2]\d|[3][0-1])\,\s([2][0]|[1][9])\d{2}$/; break;
		}
		return RegExpformat.test(date);
	},
	/*--------------------------------------------------------------------------*/
	isMD5:function(string){
		if(!string) return false;
		md5RegExp = /^[a-f0-9]{32}$/;
		return md5RegExp.test(string);
	},
	/*--------------------------------------------------------------------------*/
	isURL:function(string){
		if(!string) return false;
		string = string.toLowerCase();
		urlRegExp = /^(((ht|f)tp(s?))\:\/\/)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/
		return urlRegExp.test(string);
	},
	/*--------------------------------------------------------------------------*/
	isGuid:function(guid){//guid format : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx or xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
		if(!guid) return false;
		GuidRegExp = /^[{|\(]?[0-9a-fA-F]{8}[-]?([0-9a-fA-F]{4}[-]?){3}[0-9a-fA-F]{12}[\)|}]?$/
		return GuidRegExp.test(guid);
	},
	/*--------------------------------------------------------------------------*/
	isISBN:function(number){
		if(!number) return false;
		ISBNRegExp = /ISBN\x20(?=.{13}$)\d{1,5}([- ])\d{1,7}\1\d{1,6}\1(\d|X)$/
		return ISBNRegExp.test(number);
	},
	/*--------------------------------------------------------------------------*/
	isSSN:function(number){//Social Security Number format : NNN-NN-NNNN
		if(!number) return false;
		ssnRegExp = /^\d{3}-\d{2}-\d{4}$/
		return ssnRegExp.test(number);
	},
	/*--------------------------------------------------------------------------*/
	isDecimal:function(number){// positive or negative decimal
		if(!number) return false;
		decimalRegExp = /^-?(0|[1-9]{1}\d{0,})(\.(\d{1}\d{0,}))?$/
		return decimalRegExp.test(number);
	},
	/*--------------------------------------------------------------------------*/
	isplatform:function(platform){
		//win, mac, nix
		if(!platform) return false;
		var os;
		winRegExp = /\win/i
		if(winRegExp.test(window.navigator.platform)) os = 'win';
		
		macRegExp = /\mac/i
		if(macRegExp.test(window.navigator.platform)) os = 'mac';
		
		nixRegExp = /\unix|\linux|\sun/i
		if(nixRegExp.test(window.navigator.platform)) os = 'nix';
		
		if(platform == os) return true;
		else return false;
	},
	/*--------------------------------------------------------------------------*/
	getValue:function(id){
		document.getElementById(id).value;
	},
	/*--------------------------------------------------------------------------*/
	addRules:function(rules){
		this.rules_array.push(rules);
	},
	/*--------------------------------------------------------------------------*/
	isCheckIn:function(id){
		var patronCheckIn = /cardPassengers[0-9].passengersCardUse[0-9].card[0-9]/;
		//alert('test = '+patronCheckIn.test(id));
		return patronCheckIn.test(id);
	},
	
	isCheckInCash:function(id){
		var patronCheckInCash = /cashPassengers[0-9].cash[0-9]/;
		//alert('test = '+patronCheckIn.test(id));
		return patronCheckInCash.test(id);
	},
	
	isTarget:function(id){
		if(document.getElementById('radioTarjeta') && document.getElementById('radioTransferencia')){
			if(document.getElementById('radioTransferencia').checked == true){
				if(id == 'titularTarjeta' || id == 'numTarjeta' || id == 'cvv'){
					return true;
				}
			}
		}
	},

	check:function(){
		this.error_array = [];
		this.campoError_array = []
		this.e = true;
		
		for(var i=0;i<this.rules_array.length;i++){
			
			switch(this.rules_array[i].option){	
				/*--------------------------------------------------------------------------*/
				case'ValidChars':
					if(!this.hasValidChars(getValue(this.rules_array[i].id),this.rules_array[i].chars,false)){
						this.error_array.push(this.rules_array[i].error);
						this.campoError_array.push(this.rules_array[i].elemento);
						this.e = false;
						this.rules_array[i].elemento.style.border = '1px solid red';
					}
					else this.rules_array[i].elemento.style.border = '1px solid #ccc';
				break;
				/*--------------------------------------------------------------------------*/
				case'texto':
					if (!this.isAlphaLatin(getValue(this.rules_array[i].id))){
						this.error_array.push(this.rules_array[i].error);
						this.campoError_array.push(this.rules_array[i].elemento);
						this.e = false;
						this.rules_array[i].elemento.style.border = '1px solid red';
					}
					else this.rules_array[i].elemento.style.border = '1px solid #ccc';
				break;
				/*--------------------------------------------------------------------------*/
				case'DNI':
					if (!this.isDNI(getValue(this.rules_array[i].id))){
						this.error_array.push(this.rules_array[i].error);
						this.campoError_array.push(this.rules_array[i].elemento);
						this.e = false;
						this.rules_array[i].elemento.style.border = '1px solid red';
					}
					else this.rules_array[i].elemento.style.border = '1px solid #ccc';
				break;
				/*--------------------------------------------------------------------------*/
				/*case'checkin':				
				if (this.isCheckIn(this.rules_array[i].id) || this.isCheckInCash(this.rules_array[i].id)){
					var user = this.rules_array[i].id.split('.')[1];
					for(u=0;u<checkInArr.length;u++){
						if(checkInArr[u].id.split('.')[1] == user){
							if(checkInArr[u].elemento.checked == true && this.rules_array[i].elemento.checked == true){
								this.error_array.push(this.rules_array[i].error);
								this.campoError_array.push(this.rules_array[i].elemento);
								this.e = false;
								checkInArr[u].elemento.style.border = '1px solid red';
								checkInArr.length = 0;
								cashArr.length = 0;
								return false;								
							}
							
							else checkInArr[u].elemento.style.border = '1px solid #ccc';
						}		
						
					}
					
					if(this.isCheckIn(this.rules_array[i].id)) checkInArr.push(this.rules_array[i]);					
					if(this.isCheckInCash(this.rules_array[i].id)) cashArr.push(this.rules_array[i]);
				}
				break;*/
				/*--------------------------------------------------------------------------*/
				case'checkin':
				
				if(this.isCheckInCash(this.rules_array[i].id)){
					cashArr.push(this.rules_array[i]);
				}
				
				else if (this.isCheckIn(this.rules_array[i].id)){
					var user = this.rules_array[i].id.split('.')[1];
					for(j=0;j<cashArr.length;j++){
						var cash = cashArr[j].id.split('.')[0];
						var tarj = this.rules_array[i].id.split('.')[1];
						var cashInd = cash.substr(cash.length-1, cash.length);
						var tarjInd = tarj.substr(tarj.length-1, tarj.length) ;
						if(cashInd == tarjInd){
							if(cashArr[j].elemento.checked == true && this.rules_array[i].elemento.checked == true){
								this.error_array.push(cashArr[j].error);
								this.campoError_array.push(cashArr[j].elemento);
								this.e = false;
								return false;	
							}	
						}
					}
					
					for(u=0;u<checkInArr.length;u++){
						if(checkInArr[u].id.split('.')[1] == user){
							if(checkInArr[u].elemento.checked == true && this.rules_array[i].elemento.checked == true){
								
								this.error_array.push(this.rules_array[i].error);
								this.campoError_array.push(this.rules_array[i].elemento);
								this.e = false;
								checkInArr[u].elemento.style.border = '1px solid red';
								checkInArr.length = 0;
								cashArr.length = 0;
								return false;								
							}
							
							else checkInArr[u].elemento.style.border = '1px solid #ccc';
						}		
						
					}
					checkInArr.push(this.rules_array[i]);
					
					/*if(this.isCheckIn(this.rules_array[i].id)) checkInArr.push(this.rules_array[i]);					
					if(this.isCheckInCash(this.rules_array[i].id)) cashArr.push(this.rules_array[i]);*/
				}
				break;
				/*--------------------------------------------------------------------------*/
				case'obligatorio':
					if(!this.isTarget(this.rules_array[i].id))
					switch(this.rules_array[i].tipo){
						case'checkbox':
							if(!this.rules_array[i].elemento.checked){
								this.error_array.push(this.rules_array[i].error);
								this.campoError_array.push(this.rules_array[i].elemento);
								this.e = false;
								this.rules_array[i].elemento.style.border = '1px solid red';
							}
							else this.rules_array[i].elemento.style.border = '0px';
							break;
						case'text':
							if (this.isEmpty(getValue(this.rules_array[i].id))){
							this.error_array.push(this.rules_array[i].error);
							this.campoError_array.push(this.rules_array[i].elemento);
							this.e = false;
							this.rules_array[i].elemento.style.border = '1px solid red';
						}
						else this.rules_array[i].elemento.style.border = '1px solid #ccc';
						break;
					}
				break;
				/*--------------------------------------------------------------------------*/
				case'integerRange':
					if (!this.isIntegerInRange(getValue(this.rules_array[i].id),this.rules_array[i].Min,this.rules_array[i].Max)){
						this.error_array.push(this.rules_array[i].error);
						this.campoError_array.push(this.rules_array[i].elemento);
						this.e = false;
						this.rules_array[i].elemento.style.border = '1px solid red';
					}
					else this.rules_array[i].elemento.style.border = '1px solid #ccc';
				break;
				/*--------------------------------------------------------------------------*/
				case'Number':
					if (!this.isNum(getValue(this.rules_array[i].id))){
						this.error_array.push(this.rules_array[i].error);
						this.campoError_array.push(this.rules_array[i].elemento);
						this.e = false;
						this.rules_array[i].elemento.style.border = '1px solid red';
					}
					else this.rules_array[i].elemento.style.border = '1px solid #ccc';
				break;
				/*--------------------------------------------------------------------------*/
				case'banco':
					if (!this.isBank(getValue(this.rules_array[i].id))){
						
						this.error_array.push(this.rules_array[i].error);
						this.campoError_array.push(this.rules_array[i].elemento);
						this.e = false;
						this.rules_array[i].elemento.style.border = '1px solid red';
					}
					else this.rules_array[i].elemento.style.border = '1px solid #ccc';
				break;
				/*--------------------------------------------------------------------------*/
				case'email':
					
					if (!this.isEMailAddr(getValue(this.rules_array[i].id))){
						this.error_array.push(this.rules_array[i].error);
						this.campoError_array.push(this.rules_array[i].elemento);
						this.e = false;
						this.rules_array[i].elemento.style.border = '1px solid red';
					}
					else this.rules_array[i].elemento.style.border = '1px solid #ccc';
				break;
				/*--------------------------------------------------------------------------*/
				case'zipCode':
					
					if (!this.isZipCode(getValue(this.rules_array[i].id),this.rules_array[i].country)){
						this.error_array.push(this.rules_array[i].error);
						this.campoError_array.push(this.rules_array[i].elemento);
						this.e = false;
						this.rules_array[i].elemento.style.border = '1px solid red';
					}
					else this.rules_array[i].elemento.style.border = '1px solid #ccc';
				break;
				/*--------------------------------------------------------------------------*/
				case'date':
					
					if(!this.isDate(getValue(this.rules_array[i].id),this.rules_array[i].format)){
						this.error_array.push(this.rules_array[i].error);
						this.campoError_array.push(this.rules_array[i].elemento);
						this.e = false;
						this.rules_array[i].elemento.style.border = '1px solid red';
						this.rules_array[i].elemento.value = 'dd/mm/aaaa';
					}
					else this.rules_array[i].elemento.style.border = '1px solid #ccc';
				break;
				
				/*--------------------------------------------------------------------------*/
				case'url':
					
					if(!this.isURL(getValue(this.rules_array[i].id))){
						this.error_array.push(this.rules_array[i].error);
						this.campoError_array.push(this.rules_array[i].elemento);
						this.e = false;
						this.rules_array[i].elemento.style.border = '1px solid red';
					}
					else this.rules_array[i].elemento.style.border = '1px solid #ccc';
				break;
				/*--------------------------------------------------------------------------*/
				case'Decimal':
					if(!this.isDecimal(getValue(this.rules_array[i].id))){
						this.error_array.push(this.rules_array[i].error);
						this.campoError_array.push(this.rules_array[i].elemento);
						this.e = false;
						this.rules_array[i].elemento.style.border = '1px solid red';
					}
					else this.rules_array[i].elemento.style.border = '1px solid #ccc';
				break;
				/*--------------------------------------------------------------------------*/
				case'isEqual':
					if(!this.isEqual(getValue(this.rules_array[i].id),getValue(this.rules_array[i].to))){
						this.error_array.push(this.rules_array[i].error);
						this.campoError_array.push(this.rules_array[i].elemento);
						this.e = false;
						this.rules_array[i].elemento.style.border = '1px solid red';
					}
					else this.rules_array[i].elemento.style.border = '1px solid #ccc';
				break;
				/*--------------------------------------------------------------------------*/
			}
		}
	},
	/*--------------------------------------------------------------------------*/
	Apply:function(el){
		;
		this.check();
		if(this.e){
			/*var esperaH = getDocHeight()+'px';
			var espera = document.createElement('DIV');
			espera.style.height = esperaH;
			espera.id='contentEspera';
			var esperaB = document.createElement('DIV');
			esperaB.id = 'esperaB';
			var esperaInt = document.createElement('DIV');
			esperaInt.className = "esperaInt";
			var esperaImage = document.createElement('IMG');
			esperaImage.src = '../media/images/espera.jpg';
			esperaInt.appendChild(esperaImage);
			esperaB.appendChild(esperaInt);
			espera.appendChild(esperaB);*/
						
			espera.style.display = 'block';
			if (document.all) document.documentElement.scrollTop = '0px';
			else document.body.scrollTop = '0px';
			return true;
		}else{
			
			var endMsg = this.error_array;
			
			if(!el){
				;this.campoError_array[0].focus();alert(this.error_array.toString().replace(/\,/gi,"\n"))
			}else{
				document.getElementById(el).innerHTML = this.error_array.toString().replace(/\,/gi,"<br/>");
			}
			return false;
		}
	}
	/*--------------------------------------------------------------------------*/
}

