/* $Id:pruebaVehiculo.js 77 2007-04-18 15:39:03Z svn $ */
/* $Date:2007-04-18 16:39:03 +0100 (Wed, 18 Apr 2007) $ */
/* $Rev:77 $ */

var totalTelefonos = 1;
var buscandoHorasDisponibles = false;
var buscandoConcesionariosIsla = false;
var idCapaHoras = null;
var stringTelefono = '';

/**
 * Asigna el valor de la variable stringTelefono
 * 
 * @param string cadena String con el codigo para asignar a la variable
 */
function setStringTelefono(cadena){
	stringTelefono = cadena;
}

/**
 * Construye el codigo html para el nuevo telefono
 * 
 * @return string String del nuevo telefono
 */
function pintaNuevoTelefono(etiquetaTlf, etiquetaTipo, etiquetaHoraC){
	var nuevoTelefono = '';
	//nuevoTelefono = nuevoTelefono+'									 <div id="telefono'+totalTelefonos+'">';
	nuevoTelefono = nuevoTelefono+'									 		<table width="100%" border="0" cellspacing="0" cellpadding="0">';
	nuevoTelefono = nuevoTelefono+'													<tr>';
	nuevoTelefono = nuevoTelefono+'												 		<td align="right" class="titulo-campoNormal">'+etiquetaTlf+': </td>';
	nuevoTelefono = nuevoTelefono+'												 		<td align="center"><input name="telefono[]" type="text" size="15" class="txt-campobligatorio" value=""></td>';
	nuevoTelefono = nuevoTelefono+'												 		<td align="right" class="titulo-campoNormal">'+etiquetaTipo+': </td>';
	nuevoTelefono = nuevoTelefono+'												 		<td align="center"><input name="tipoTelefono[]" type="text" size="15" class="txt-campobligatorio" value=""></td>';
	nuevoTelefono = nuevoTelefono+'													</tr>';
	nuevoTelefono = nuevoTelefono+'													<tr>';
	nuevoTelefono = nuevoTelefono+'												 		<td align="right" class="titulo-campoNormal">'+etiquetaHoraC+': </td>';
	nuevoTelefono = nuevoTelefono+'												    <td align="center"><input name="hcontacto[]" type="text" size="15" class="txt-campobligatorio" value=""></td>';
	nuevoTelefono = nuevoTelefono+'												    <td align="right" class="titulo-campoNormal">';
	nuevoTelefono = nuevoTelefono+'												    		<a href="" onclick="javascript: delTelefono('+totalTelefonos+');return false;">';
	nuevoTelefono = nuevoTelefono+'												    				<img src="imagenes/list-remove.png" border="0" alt="Tel&eacute;fonos" title="Eliminar tel&eacute;fono" style="border: 0px solid red; cursor: pointer;" onmouseover="this.style.background=\'red\';" onmouseout="this.style.background=\'\'">';
	nuevoTelefono = nuevoTelefono+'												    		</a>';
	nuevoTelefono = nuevoTelefono+'												    </td>';
	nuevoTelefono = nuevoTelefono+'												    <td align="center"></td>';
	nuevoTelefono = nuevoTelefono+'											   </tr>';
	nuevoTelefono = nuevoTelefono+'									    </table>';
	//nuevoTelefono = nuevoTelefono+'									 </div>';
	//nuevoTelefono = nuevoTelefono+'									 <br>';
	
	return nuevoTelefono;
}

function pintaNuevoTelefono2(etiquetaTlf, etiquetaTipo, etiquetaHoraC){
	var nuevoTelefono = '';
	//nuevoTelefono = nuevoTelefono+'									 <div id="telefono'+totalTelefonos+'">';
	nuevoTelefono = nuevoTelefono+'									 		<table width="100%" border="0" cellspacing="0" cellpadding="0">';
	nuevoTelefono = nuevoTelefono+'													<tr>';
	nuevoTelefono = nuevoTelefono+'												 		<td align="right" class="titulo-campoNormal">'+etiquetaTlf+': </td>';
	nuevoTelefono = nuevoTelefono+'												 		<td align="center"><input name="telefono[]" type="text" size="15" class="txt-campobligatorio" value=""></td>';
	nuevoTelefono = nuevoTelefono+'												 		<td align="right" class="titulo-campoNormal">'+etiquetaTipo+': </td>';
	nuevoTelefono = nuevoTelefono+'												 		<td align="center">'+stringTelefono+'</td>';
	nuevoTelefono = nuevoTelefono+'													</tr>';
	nuevoTelefono = nuevoTelefono+'													<tr>';
	nuevoTelefono = nuevoTelefono+'												 		<td align="right" class="titulo-campoNormal">'+etiquetaHoraC+': </td>';
	nuevoTelefono = nuevoTelefono+'												    <td align="center"><input name="hcontacto[]" type="text" size="15" class="txt-campobligatorio" value=""></td>';
	nuevoTelefono = nuevoTelefono+'												    <td align="right" class="titulo-campoNormal">';
	nuevoTelefono = nuevoTelefono+'												    		<a href="" onclick="javascript: delTelefono('+totalTelefonos+');return false;">';
	nuevoTelefono = nuevoTelefono+'												    				<img src="imagenes/list-remove.png" border="0" alt="Tel&eacute;fonos" title="Eliminar tel&eacute;fono" style="border: 0px solid red; cursor: pointer;" onmouseover="this.style.background=\'red\';" onmouseout="this.style.background=\'\'">';
	nuevoTelefono = nuevoTelefono+'												    		</a>';
	nuevoTelefono = nuevoTelefono+'												    </td>';
	nuevoTelefono = nuevoTelefono+'												    <td align="center"></td>';
	nuevoTelefono = nuevoTelefono+'											   </tr>';
	nuevoTelefono = nuevoTelefono+'									    </table>';
	//nuevoTelefono = nuevoTelefono+'									 </div>';
	nuevoTelefono = nuevoTelefono+'									 <br>';
	
	return nuevoTelefono;
}

/**
 * Metodo que agrega un nuevo telefono al formulario
 * 
 * @param string capa Nombre de la capa donde se encuentran los telefonos
 * @param string etiquetaTlf etiqueta para el campo del numero de telefono
 * @param string etiquetaTipo etiqueta para el campo tipo de telefono
 * @param string etiquetaHoraC etiqueta para el campo de la hora de contacto
 */
function addNuevoTelefono(capa, etiquetaTlf, etiquetaTipo, etiquetaHoraC){
	var padre = document.getElementById(capa);
	//var hijo = document.createTextNode(pintaNuevoTelefono(etiquetaTlf, etiquetaTipo, etiquetaHoraC));
	//padre.appendChild(hijo);
	//document.getElementById(capa).innerHTML = pintaNuevoTelefono(etiquetaTlf, etiquetaTipo, etiquetaHoraC) + document.getElementById(capa).innerHTML;
	
	var nombreNuevaCapa = 'telefono'+ totalTelefonos;
	var capaTelefono = document.createElement('div');
	capaTelefono.setAttribute('id', nombreNuevaCapa);
	//capaTelefono.innerHTML = pintaNuevoTelefono(etiquetaTlf, etiquetaTipo, etiquetaHoraC);
	capaTelefono.innerHTML = pintaNuevoTelefono2(etiquetaTlf, etiquetaTipo, etiquetaHoraC);
	padre.appendChild(capaTelefono);
	
	
	totalTelefonos++;
}

/**
 * Metodo que elimina el nodo de un telefono en particular
 * 
 * @param string nodoTelefono posicion del nodo de telefono a eliminar
 */
function delTelefono(nodoTelefono){
	var nombreCapa;
	nombreCapa = 'telefono'+nodoTelefono;
/*
	document.getElementById(nombreCapa) = null;
*/
	var ancla = document.getElementById(nombreCapa);
	var padre = ancla.parentNode;
	var hijoRemovido = padre.removeChild(ancla);
}

/**
 * Comprueba si tiene que buscar los datos de las horas
 */
function compruebaBuscarHoras(errorFormato, errorIncorrecta, errorAntelacion, capa, textoOcupado, textoBusqueda){
	var f = document.forms[0];

	if(f.familia.value.match(/^\d+\.{0,1}\d*$/)!=null && f.concesionario.value != '-1' && f.concesionario.value != '' 
			&& f.familia.value > 0	&& f.fechaPrueba.value != ''){
		SetUp('des');	
		// Comprobar que la fecha es correcta
		switch(compruebaFecha(f.fechaPrueba)){
			case 1:
				// TODO: Obtener las horas disponibles
				getHorasDisponibles(capa, textoBusqueda, textoOcupado)
				break;
			case 2:
				SetUp('act');	
				alert(errorFormato);
				return false;
				break;
			case 3:
				SetUp('act');	
				alert(errorIncorrecta);
				return false;
				break;
			case 4:
				SetUp('act');	
				alert(errorAntelacion)
				return false;
				break;
		}
	}
}


/**
 * Comprueba si los datos son correctos antes de enviar
 */
function compruebaDatosEnviar(errorNombre, errorApellido1, errorCorreo, errorFormato, errorIncorrecta, errorAntelacion, errorFamilia, errorConcesionario, errorHoraPrueba, errorTelefono){
	var f = document.forms[0];
	var stringError = '';
	var noError = true;
	
	// comprueba el nombre
	if(f.nombre.value == ''){
		stringError = stringError + errorNombre + "\n";
		noError = false;
	}

	// comprueba el apellido
	if(f.apellido1.value == ''){
		stringError = stringError + errorApellido1 + "\n";
		noError = false;
	}

//alert(validarEmail(f.email.value));
	// comprueba la direccion de correo
	if(!validarEmail(f.email.value)){
		stringError = stringError + errorCorreo + "\n";
		noError = false;
	}
	// comprueba la familia
	if(f.familia.value.match(/^\d+\.{0,1}\d*$/)==null || f.familia.value <= 0){
		stringError = stringError + errorFamilia + "\n";
		noError = false;		
	}
	
	// comprueba el concesionario
	if(f.concesionario.value == '' || f.concesionario.value == '-1'){
		stringError = stringError + errorConcesionario + "\n";
		noError = false;		
	}
	
	// comprueba la fecha
	if(f.fechaPrueba.value != ''){
		// Comprobar que la fecha es correcta
		switch(compruebaFecha(f.fechaPrueba)){
			case 2:
				stringError = stringError + errorFormato + "\n";
				noError = false;		
				break;
			case 3:
				stringError = stringError + errorIncorrecta + "\n";
				noError = false;		
				break;
			case 4:
				stringError = stringError + errorAntelacion + "\n";
				noError = false;		
				break;
		}
	}
	
	// comprueba la hora de la prueba
	if(f.horaPrueba.value == '' || f.horaPrueba.value == '-1'){
		stringError = stringError + errorHoraPrueba + "\n";
		noError = false;		
	}
	
	//comprueba los telefonos
		var totaltlf = 0;
		for(i=0; i<f.elements.length; i++){
    	if(f.elements[i].type == "text"
      	  && f.elements[i].name == "telefono[]"
        	&& f.elements[i].value != ""
        	&& isPhoneNumber(f.elements[i].value)){
        totaltlf++;
      }
		}

		if(totaltlf <= 0){
			noError = false;
			stringError = stringError + errorTelefono + "\n";
		}

	
	if(!noError){
		alert(stringError);
	}
	
	return noError;
}
	
/**
 * comprueba que la fecha es correcta
 * 
 * @param string fecha Fecha a comprobar en formato dd-mm-aaaa
 */
function compruebaFecha(fecha){
	/* Comprobamos el formato de la fecha */
	re=/^[0-9][0-9][-.\/][0-9][0-9][-.\/][0-9][0-9][0-9][0-9]$/;
	if(fecha.value.length==0 || !re.exec(fecha.value)){
		return 2;
	}
	 
	/* comprobamos que la fecha es válida */
	var bOk = true;
	if (fecha.value != ""){
		bOk = bOk && (valAno(fecha));
		bOk = bOk && (valMes(fecha));
		bOk = bOk && (valDia(fecha));
		bOk = bOk && (valSep(fecha));
		if (!bOk){
			return 3;
		}
	}
	
	// Comprobamos que son como minimo 48 horas de antelacion
	var fechaAux = fecha.value;
	var Hoy=new Date();
	var peticion = new Date(fechaAux.substring(6,10), fechaAux.substring(3,5)-1, fechaAux.substring(0,2));
	var mseg_dia=1000*60*60*24;
	var dias;
	dias = Math.ceil((peticion.getTime()-Hoy.getTime())/(mseg_dia));
	if(dias < 2){
		return 4;
	}
	
	return 1;
}

function habilitaControles(habilitar){
	var f = document.forms[0];
	f.familia.disabled = !habilitar;	
	f.concesionario.disabled = !habilitar;	
	//f.horaPrueba.disabled = !habilitar;	
	if(habilitar){
		if(ie5){
			document.getElementById('concesel').style.visibility = 'visible';
			document.getElementById('famsel').style.visibility = 'visible';
			document.getElementById('horasDisponibles').style.visibility = 'visible';
		}
		document.getElementById('f_trigger_prueba').style.visibility = 'visible';
		if(f.familia.value.match(/^\d+\.{0,1}\d*$/)!=null && f.horaPrueba.value != -1){
			f.btnEnviar.disabled = !habilitar;	
		}
	}else{
		if(ie5){
			document.getElementById('concesel').style.visibility = 'hidden';
			document.getElementById('famsel').style.visibility = 'hidden';
			document.getElementById('horasDisponibles').style.visibility = 'hidden';
		}
		
		document.getElementById('f_trigger_prueba').style.visibility = 'hidden';
		f.btnEnviar.disabled = !habilitar;	
	}
}

/******************************************************************************/
/************** Funciones para el AJAX de la busqueda de horas ****************/
/******************************************************************************/
function getHorasDisponibles(capa, textoBusqueda, textoOcupado){
	if(buscandoHorasDisponibles){
		alert(textoOcupado);
		return false
	}
	buscandoHorasDisponibles = true;

	xmlHttp=GetXmlHttpObject()
	if (xmlHttp==null){
	  alert ("Your browser does not support AJAX!");
	  return;
	}
	habilitaControles(false);
	idCapa = capa;
	var f = document.forms[0];
	var url="controlerAJAX.php";
	url=url+"?fid="+f.familia.value;
	url=url+"&cid="+f.concesionario.value;
	url=url+"&fec="+f.fechaPrueba.value;
	url=url+"&mod=PRUEBAV";
	xmlHttp.onreadystatechange=compruebaEstadoHora;
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);
}

function compruebaEstadoHora(){
	if (xmlHttp.readyState==4){ 
		document.getElementById(idCapa).innerHTML=xmlHttp.responseText;
		buscandoHorasDisponibles = false;
		idCapa = null;
		SetUp('act');
		habilitaControles(true);
	}
}

/******************************************************************************/
/************** Funciones para el AJAX de la de concesionarios ****************/
/******************************************************************************/
function recuperaConcesionariosIsla(capa, textoOcupado){
	if(buscandoHorasDisponibles){
		alert(textoOcupado);
		return false
	}
	buscandoConcesionariosIsla = true;

	xmlHttp=GetXmlHttpObject()
	if (xmlHttp==null){
	  alert ("Your browser does not support AJAX!");
	  return;
	}
	habilitaControles(false);
	SetUp('des');
	idCapa = capa;
	var f = document.forms[0];
	var url="controlerAJAX.php";
	url=url+"?iid="+f.islaBus.value;
	url=url+"&mod=PRUEBAVISLA";
	xmlHttp.onreadystatechange=compruebaEstadoIsla;
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);
}

function compruebaEstadoIsla(){
	if (xmlHttp.readyState==4){ 
		document.getElementById(idCapa).innerHTML=xmlHttp.responseText;
		buscandoHorasDisponibles = false;
		idCapa = null;
		SetUp('act');
		habilitaControles(true);
	}
}

/******************************************************************************/
/************** Funciones auxiliares para comprobar la fecha ******************/
/******************************************************************************/

function esDigito(sChr){
	var sCod = sChr.charCodeAt(0);
	return ((sCod > 47) && (sCod < 58));
}

function valSep(oTxt){
	var bOk = false;
	bOk = bOk || ((oTxt.value.charAt(2) == "-") && (oTxt.value.charAt(5) == "-"));
	bOk = bOk || ((oTxt.value.charAt(2) == "/") && (oTxt.value.charAt(5) == "/"));
	return bOk;
}

function finMes(oTxt){
	var nMes = parseInt(oTxt.value.substr(3, 2), 10);
	var nRes = 0;
	switch (nMes){
		case 1: nRes = 31; break;
		case 2: nRes = 29; break;
		case 3: nRes = 31; break;
		case 4: nRes = 30; break;
		case 5: nRes = 31; break;
		case 6: nRes = 30; break;
		case 7: nRes = 31; break;
		case 8: nRes = 31; break;
		case 9: nRes = 30; break;
		case 10: nRes = 31; break;
		case 11: nRes = 30; break;
		case 12: nRes = 31; break;
	}
	return nRes;
}

function valDia(oTxt){
	var bOk = false;
	var nDia = parseInt(oTxt.value.substr(0, 2), 10);
	bOk = bOk || ((nDia >= 1) && (nDia <= finMes(oTxt)));
	return bOk;
}

function valMes(oTxt){
	var bOk = false;
	var nMes = parseInt(oTxt.value.substr(3, 2), 10);
	bOk = bOk || ((nMes >= 1) && (nMes <= 12));
	return bOk;
}

function valAno(oTxt){
	var bOk = true;
	var nAno = oTxt.value.substr(6);
	bOk = bOk && ((nAno.length == 2) || (nAno.length == 4));
	if (bOk){
		for (var i = 0; i < nAno.length; i++){
			bOk = bOk && esDigito(nAno.charAt(i));
		}
	}
	return bOk;
}

