//<![CDATA[


function getId(id) {
	return document.getElementById(id);
}

function getValue(id) {
	return document.getElementById(id).value;
}

function getIntValue(id) {
	return parseInt( document.getElementById(id).value );
}

/**
 * Funci??n para mostrar y ocultar las capas.
 * Cada pesta??a debe tener dos capas, una en la secci??n del selector de pesta??as, con
 * nombre tabN (donde N es el numero de la pesta??a), y otra capa con el contenido propio
 * de la pesta??a. Esta capa debe tener el nombre pageN.
 */
function showPage (num)
{
	var i = 1;
	
	while(document.getElementById("tab" + i)) {
		
    var tab = document.getElementById("tab" + i);
		var page = document.getElementById("page" + i);

    if(document.getElementById("lateral" + i))
      var lateral = document.getElementById("lateral" + i);
		
    if (i == num) 
    {
			tab.className = "azul";
			page.style.display = "block";
      
      if(lateral)
        lateral.style.display = "block";
		} 
    else 
    {
			tab.className = "blanca";
			page.style.display = "none";
      
      if(lateral)
        lateral.style.display = "none";
		}
		
    i++;
	}
}

function showPage2 (num)
{
  var bGrabado = false;
  
  if ( document.getElementById('mensajeOk') != null) bGrabado = true;
  
  if ( bGrabado && document.getElementById('mensajeOk').style.display == 'none' ) bGrabado = false;
  
  if ( !bGrabado )
  {
    
    if(confirm("Recuerde que debe grabar antes de cambiar de pestaña si no lo ha hecho. Pulse aceptar si ya ha grabado. Pulse cancelar si no  ha grabado y grabe los datos antes de cambiar de pestaña"))
    {
        showPage(num);
    }
  }
  else
     showPage(num);
}

var IE = (navigator.appName == "Microsoft Internet Explorer");

/**
 * Funci??n para desactivar los campos de un formulario. Si no se pasa un formulario
 * se desactivan todos los campos del documento actual.
 * En Internet Explorer se prefiere en los select desactivar los campos (disabled).
 */
function desactivarCampos (doc) {
	if (doc == null) doc = document;
	
	inputs  = doc.getElementsByTagName("input");
	for (i = 0; i < inputs.length; i++) {
		if (inputs[i].type == "text") inputs[i].readOnly = true;
		else inputs[i].disabled = true;
	}
	
	textareas = document.getElementsByTagName("textarea");
	for (i = 0; i < textareas.length; i++) {
		textareas[i].readOnly = true;
	}
	
	selects = document.getElementsByTagName("select");
	for (i = 0; i < selects.length; i++) {
    if (IE)
      selects[i].disabled = true;
    else {
      selects[i].options[0] = selects[i].options[selects[i].selectedIndex];
      selects[i].length = 1;
    }
	}
}

/**
 * Funci??n global de validaci??n. Realiza todas las comprobaciones de forma centralizada.
 * Se le debe pasar una matriz de tama??o nx3, donde se indica los campos a validar,
 * los cuales se comprueban si son obligatorios y siguen un formato correcto.
 *
 * La matriz contiene valores del tipo:
 *     ["nomre_del_campo", "funcion_que_valida", "Mensaje de obligatoriedad"]
 *
 * Si un campo NO es obligatorio el mensaje de obligatoriedad debe ser vacio.
 * Los mensajes de obligacion comienzan siempre con el texto "Debe indicar".
 * El segundo valor es el nombre de la funcion que valida el dato del campo.
 * Estas funciones pueden ser propias, para permitir validaciones de campos mas
 * complejas.
 * Para definir funciones personalizadas, el primer par??metro debe estar vacio,
 * el segundo debe indicar el nombre de nuestra funci??n y el tercero debe contener 
 * los par??metros que se le pasa a nuestra funci??n separados por comas.
 *
 * Funciones predeterminadas:
 *	noVacio: comprueba que se haya introducido algo. Entonces el campo sera obligatorio!
 *	esNIF
 *	esCIF
 *	esCIFNIF
 *	esCodigoPostal: comprueba que tenga 5 digitos
 *	esEntero:
 *	esCuantia: comprueba que tenga el formato XXXX,XX
 *	esFecha: comprueba que tenga el format DD/MM/AAAA
 *	estaSeleccionado: siempre devuelve verdadero, se usa para los checkboxs
 *  esTelefono
 *
 * Ejemplo. Aqui tenemos los campos de un formulario, donde el campo1 y campo4
 * son obligatorios. En el caso que se escriba una fecha o una cuant??a, se
 * validar?? el formato.
 *
 *    var campos = [
 *        ["campo1", "esNIF", "el NIF del usuario"],
 *        ["campo2", "", "selecciona una opcion del radio!"],
 *        ["campo3", "esCuantia", ""],
 *        ["campo4", "estaSeleccionado", "si acepta la advertencia"],
 *        ["", "funcionEspecial", "<par??metros separados por comas>"]
 *        ];
 *    if (validarGlobal(campos)) {
 *        document.formulario.submit();
 *    }
 *
 */
function validarGlobal (campos)
{
	//Comprobamos los campos
	for (var i = 0; i < campos.length; i++) {
		var mal = false;
    // Comprobamos si es funcion personalizada
    if (campos[i][0] == "")
      if (!eval(campos[i][1] + "(" + campos[i][2] + ")"))
        return false;
      else
        continue;
    
		var dato = document.getElementById (campos[i][0]);
		if (dato == null) {
			alert(campos[i][0] + " no definido.");
			continue;
		}
		if(dato.disabled) {
			continue;
		}
		
		// Vemos si el campo es obligatorio
		// En los caso de text y textarea, se comprueba adem�s que no tiene espacios en blanco
		// tanto al principio como al final.
		
		if (campos[i][2] != "") {
			switch (dato.type) {
			case "text": 
				mal = (dato.value == "");
				//if (tieneEspacios(dato)) return false;
				break;	
			case "textarea": 
				mal = (dato.value == "");						
				//if (tieneEspacios(dato)) return false;				
				break;	
			case "hidden": mal = (dato.value == ""); break;			
			case "radio": mal = (! radioSeleccionado(dato)); break;			
			case "checkbox": mal = (! dato.checked); break;
			case "select-one": mal = (dato.value == ""); break;
			}
			if (mal) {
				alert ("Debe indicar " + campos[i][2] );
        
        if (dato.type != "hidden" ) 
          dato.focus ();
				
        return false;
			}
		}
		// Comprobamos lo introducido
		if (dato.value != "") {
			if (! eval(campos[i][1] + "(dato.value)")) {
        dato.focus ();
				return false;
			}
		}
	}
	return true;
}

function tieneEspacios(dato){
	if(dato.value.substring(0,1).indexOf(" ") != -1 || dato.value.substring(dato.value.length-1).indexOf(" ") != -1){
		alert("No puede poner espacio en blanco al principio ni al final");
		dato.focus();
		return true;
	}return false;
}

function radioSeleccionado (radio) {
	var grupo = eval("document." + radio.form.name + "." + radio.name);
	for (var i = 0; i < grupo.length; i++)
		if (grupo[i].checked) return true;
	return false;
}

function noVacio (texto) {
	if(texto.substring(0,1).indexOf(" ") != -1 || texto.substring(texto.length-1).indexOf(" ") != -1)
	{
		alert("No puede poner espacio en blanco al principio ni al final");
		return false;
	}	
	return texto != "";
}

function esFecha (fecha) {
	var expreg = /^((?:0?[1-9])|(?:[12]\d)|(?:3[01]))\/((?:0?[1-9])|(?:1[0-2]))\/((?:19|20)\d\d)$/;
	var res = expreg.test(fecha);
	if (! res) {
		alert ("Debe introducir una fecha válida. DD/MM/AAAA");
	}
  else if ( Comparar_Fecha(fechaActual(), fecha) )
  {
    alert ("La fecha introducida es superior a la fecha actual");
    res = false;
  }
  
	return res;
}

function esCodigoPostal (codigo) {
	var expreg = /^\d{5}$/;
	var res = expreg.test(codigo);
	if (! res) {
		alert ("El Código Postal no es válido");
	}
	return res;
}

function esPorcentaje (porcentaje) {
	var expreg = /^((100(,00?)?)|(\d\d?(,\d\d?)?))$/
	var res = expreg.test(porcentaje);	
	if (! res) {
		alert ("El porcentaje no es válido.");
	}
	return res;	
}

function esNIF (nif) {
  return validar_nif (nif);
}

function esCIF (cif) {
  return validar_cif (cif);
}

function esNIE (nie) {
  return validar_nie(nie);
}

function esCIFNIF (cinfnif) {
	return validarNifCif (cinfnif);
}

function esCIFNIFNIE (cifnifnie) {
  return validarNifCifNie(cifnifnie);
}

function esNIFNIE (nifnie){
	return validarNifNie(nifnie);
}

function esEntero (numero) {
	var expreg = /^\d+$/;
	var res = expreg.test(numero);
	if (! res) {
		alert ("El número no es válido.");
	}
	return res;	
}

function esImporte (numero) {

      var expreg = /^\d{1,3}(\.\d{3})*(,\d+)?$/;
      
      var res = expreg.test(numero);	
      if (! res) {
        alert ("El importe introducido no es válido.");
      }
      return res;	
    }

function esReal (numero) {
  
  var expreg = /^\d{1,3}(\.\d{3})*(,\d+)?$/;

	var res = expreg.test(numero);	
	if (! res) {
		alert ("El formato del número no es válido. Formato correcto: 99.999,99 ó 99999,99");
	}
	return res;
}

function estaSeleccionado (checkbox_value) {
	return true;
}

function esEmail (email) {
	var expreg = /^[A-Za-z0-9\-_\.]+@[A-Za-z0-9\-_\.]+\.[A-Za-z]+$/;
	var res = expreg.test(email);	
	if (! res) {
		alert ("La direccion de correo electronico no es valida.");
	}
	return res;	
}

function esTelefono (telefono) {
	var expreg = /^(\+\d*)?\d{9}$/;
	var res = expreg.test(telefono);	
	if (! res) {
		alert ("El teléfono introducido no es válido.");
	}
	return res;	
}

function esFax (telefono) {
	var expreg = /^(\+\d*)?\d{9}$/;
	var res = expreg.test(telefono);	
	if (! res) {
		alert ("El fax introducido no es válido.");
	}
	return res;	
}

/**
* Valida la longitud del contenido de un input de tipo "text" o "textArea".
* La longitud ser?? medida en bytes y no en caracteres como devuelve la propiedad
* lenght de las cadenas de caracteres de Javascript. En caso de no pasar la 
* validaci??n, el foco se redireccionar?? al objeto.
*
* Los par??metros que recibe son la ID del objeto y la longitud m??xima en bytes.
* 
* Devuelve true si es menor o igual que la longitud m??xima y false en caso contrario.
*/function compruebaTam (idCampo, longitudMaxima, descripcion) {
  var campo = document.getElementById(idCampo);
  var size = campo.value.length;
  if (size <= longitudMaxima){
	  for (var n = 0; n < campo.value.length; n++) {
		var c = campo.value.charCodeAt(n);
		if (c > 127) size++;
		if (c > 2047) size++;
	  }
  }
  if (size <= longitudMaxima){
	return true;
  }else{
  	alert('El texto '+descripcion+" es demasiado largo ");
	campo.focus();
  	return false;
  }
}

/*
Si un campo(checkbox ?? radio) est?? seleccionado con un valor en concreto, entonces se obliga a rellenar otro campo
En el caso de que solo se quiera saber si el campo est?? seleccionad, no se le debe enviar el par??metro valorAct
campo1 - campo que debe estar seleccionado
valorAct - el valor que debe tener el campo1 para provocar la obligaci??n
campo2 - campo al que se obliga el relleno
descripcion - descripci??n del campo2
*/
function dependenciaObligatoriedad (campo1, valorAct, campo2, descripcion) {
	var inputs = document.getElementsByTagName("input");
	for (i = 0; i < inputs.length; i++) {
   if(inputs[i].type == "checkbox" || inputs[i].type == "radio")
    {    
      if( inputs[i].checked && ( (valorAct != "" && inputs[i].value == valorAct) || (valorAct == "" && inputs[i].name == campo1) ) )
       {
        if(!noVacio(document.getElementById(campo2).value))
         {
            if(descripcion != "")
              alert("Debe indicar "+descripcion); 
            return false;
         }
       }
    }
  }
  return true;
}

/*
Dado un conjunto de campo, valida que al menos uno de ellos est?? relleno.
El primer par??metro debe ser una descripci??n del conjunto de campos.
Los dem??s par??metros deben ser los identificadores de los campos.
*/
function alMenosUno () {
    var params = alMenosUno.arguments;
    var texto = params[0];
    for(i=1; i<params.length; i++)
      if(document.getElementById(params[i]).value != "")
        return true;
    alert("Debe indicar al menos "+texto);
    return false;
}

function alMenosUnoDistintoDeCero () {
    var params = alMenosUnoDistintoDeCero.arguments;
    var texto = params[0];
    for(i=1; i<params.length; i++)
      if(document.getElementById(params[i]).value != "0")
        return true;
    alert("Debe indicar al menos  "+texto);
    return false;
}

/*
Obliga que los tipos de proyectos que tengan observacion haya que rellenarla.
*/
function comprobarObservTiposProyectos () {
  var inputs = document.getElementsByTagName("input");
	for (i = 0; i < inputs.length; i++) {
   if(inputs[i].type == "checkbox" && inputs[i].name.indexOf("tiprXTipr") != -1 && inputs[i].checked)
    {
      id = inputs[i].name.replace("tiprXTipr","");
      if(document.getElementById("tObservSv"+id))
       {
          if(!dependenciaObligatoriedad('tiprXTipr'+id,'','tObservSv'+id,""))
           {
              alert("Si selecciona 'Otros' como tipo de proyecto, debe rellenar el campo de descripción correspondiente");
              document.getElementById("tObservSv"+id).focus();
              return false;
           }
       }
    }
  }
  return true;
}

function alMenosUnaTipologia () {
  var ok = false;
  var inputs = document.getElementsByTagName("input");
	for (i = 0 && ok == false; i < inputs.length; i++) {
   if(inputs[i].type == "checkbox" && inputs[i].name.indexOf("ttliXTtli") != -1 && inputs[i].checked)
    {
      ok=true;
    }
  }
  if(ok==false){
  	alert("Debe marcar al menos una tipologia");
  	return false;
  	}
  else
  	return true;
}

function alMenosUnaCategoria () {
  var ok = false;
  var inputs = document.getElementsByTagName("input");
	for (i = 0 && ok == false; i < inputs.length; i++) {
   if(inputs[i].type == "checkbox" && inputs[i].name.indexOf("tiprXTipr") != -1 && inputs[i].checked)
    {
      ok=true;
    }
  }
  if(ok==false){
  	alert("Debe marcar al menos una categoria");
  	return false;
  	}
  else
  	return true;
}


/*
Obliga que las tipologias que tengan observacion haya que rellenarla.
*/
function comprobarObsTipologias () {
  var inputs = document.getElementsByTagName("input");
	for (i = 0; i < inputs.length; i++) {
   if(inputs[i].type == "checkbox" && inputs[i].name.indexOf("ttliXTtli") != -1 && inputs[i].checked)
    {
      id = inputs[i].name.replace("ttliXTtli","");
      if(document.getElementById("tObservacionesTip"+id))
       {
          if(!dependenciaObligatoriedad('ttliXTtli'+id,'','tObservacionesTip'+id,""))
           {
              alert("Si selecciona 'Otras' como tipologia del proyecto, debe rellenar el campo de descripción correspondiente");
              document.getElementById("tObservacionesTip"+id).focus();
              return false;
           }
       }
    }
  }
  return true;
}

/*
Comprueba que la financiaci??n propia m??s el importe solicitado no puede ser mayor que el coste del proyecto
*/
function comprobarPropSoliCoste () {
  var finan = parseFloat(quitar_comas(document.getElementById("iFinancProp").value));
  var coste = parseFloat(quitar_comas(document.getElementById("iCosteProy").value));
  var soli = parseFloat(quitar_comas(document.getElementById("iIncentivoSoli").value));
  var suma = finan + soli;
  suma = Math.round(suma * 100) / 100;
  if(suma != coste)
   {
      alert("La Financiación Propia Total más el Incentivo Total Solicitado debe ser igual al Presupuesto Total del Proyecto");
      document.getElementById("iFinancProp").focus();
      return false;
   }
  return true;
}

 /*****************************************
  *Funciones auxiliares para validarGlobal* 
  *****************************************/
 
function validarNifCifNie (texto){
   var letra = texto.substr(0,1);
   
   if ( isNaN(letra) )
   {  if(letra == "X" || letra =="x") 
         return validar_nie(texto);
      else return validar_cif(texto);
   }
   else
    return validar_nif(texto);
}

function validarNifCif(texto)
{
  var letra = texto.substr(0,1);
  
  if ( isNaN(letra) )
    return validar_cif(texto);
  else
    return validar_nif(texto);
}

function validarNifNie(texto){
	var letra = texto.substr(0,1);
   
   	if ( isNaN(letra) )
         return validar_nie(texto);
   	else return validar_nif(texto);   
}

function validar_nif(value)
	{
		var letra= new Array("T", "R", "W", "A", "G", "M", "Y", "F", "P", "D", "X", "B", "N", "J", "Z", "S", "Q", "V", "H", "L", "C", "K", "E");
	
		if(value.length != 9)
		{
			alert("El NIF introducido no es válido");
			return false;
		}
		else
		{
			var numeros=value.substring(0,8);
			var letranif=value.substring(8,9).toUpperCase();
			if(isNaN(numeros) || !isNaN(letranif))
			{
				alert("El NIF introducido no es válido");
				return false;
			}
			else{
				var letra_2=(numeros%23);
				if(letra[letra_2]!=letranif)
				{
					alert("El NIF introducido no es válido");
					return false;
				}
			}
		}
		return true;
	}

function validar_nie(valor)
	{
		value=valor;
		letra= new Array();
		letra[0] = "T";
		letra[1] = "R";
		letra[2] = "W";
		letra[3] = "A";
		letra[4] = "G";
		letra[5] = "M";
		letra[6] = "Y";
		letra[7] = "F";
		letra[8] = "P";
		letra[9] = "D";
		letra[10] = "X";
		letra[11] = "B";
		letra[12] = "N";
		letra[13] = "J";
		letra[14] = "Z";
		letra[15] = "S";
		letra[16] = "Q";
		letra[17] = "V";
		letra[18] = "H";
		letra[19] = "L";
		letra[20] = "C";
		letra[21] = "K";
		letra[22] = "E";
	
		if(value.length<9)
		{
			alert("El NIE no es correcto. Debe tener 9 dígitos");
			//valor.focus();
			return false;
		}
		else
		{
			var letra1=value.substring(0,1);
			var numeros="0" + value.substring(1,8);
			var letra2=value.substring(8,9).toUpperCase();
			if(isNaN(numeros) || !isNaN(letra1) || !isNaN(letra2))
			{
				alert("El NIE no es correcto. Debe tener una letra al principio, siete números y una letra al final");
				//valor.focus();
				return false;
			}
			else{
				if(letra1!='X'){
					alert("El valor introducido no se corresponde con un NIE");
					return false;
				}
				var letra_2=(numeros%23);
				if(letra[letra_2]!=letra2)
				{
					alert("La letra final del NIE no es correcta");
					//valor.focus();
					return false;
				}
			}
		}
		return true;
	}

function validar_cif(valor){
		var cif=valor;
		if(!/^[A-Za-z0-9]{9}$/.test(cif)){
			alert("El CIF no es correcto. Debe tener 9 dígitos");
			//valor.focus();
			return false;
		}
		else if(!/^[ABCDEFGHKLMNPQS]/.test(cif)){
			alert("El CIF no es correcto. El primer dígito debe ser una letra de las siguientes: A,B,C,D,E,F,G,H,K,L,M,N,P,Q,S");
			//valor.focus();
			return false;
		}
		
		var uletra = new Array("J", "A", "B", "C", "D", "E", "F", "G", "H", "I");
    var letra=cif.substr(0,1);
		var numeros=cif.substr(1,7);
		var control=cif.substr(8,9);
		if(isNaN(numeros)){
			alert("El CIF no es correcto. Los 7 dígitos del medio del CIF deben ser números");
			//valor.focus();
			return false;
		}
		var v1 = new Array(0,2,4,6,8,1,3,5,7,9);
		var temp=0;
		var temp1;
		
		for(i=2;i<=6;i+=2){
			temp=temp + v1[parseInt(cif.substr(i-1,1))];
			temp=temp + parseInt(cif.substr(i,1));
		}
		temp=temp + v1[parseInt(cif.substr(7,1))];
		temp=(10-(temp%10));
		
    if(temp == 10) temp = 0;
    
   
    if((temp!=control) && (uletra[temp]!=control)  ){
      alert("El CIF indicado no es correcto.");
			//valor.focus();
			return false;
		}
		return true;
	}

function ventana(pagina,ancho,alto,nombre,redimensiona){
    var objeto = window.open(pagina,nombre,"menubar=no, status=no, location=no, resizable=yes, height="+alto+", width="+ancho+", scrollbars=yes ");
    if(redimensiona)
      objeto.resizeTo(screen.availWidth,screen.availHeight);
}

/*
Control de los iconitos de informaci??n adicional
*/
function tooltip (objeto) {
  alert(objeto.title);
}

function noLetras (objeto) {
  if (/[a-z]|[A-Z]/.test(objeto.value))
   {
      alert("No puede introducir letras en un campo numérico.");      
      objeto.focus();
      return false;
   }
  else
    return true;
}

function noSuperior (objeto, limite, descripcion) {
  if ( parseFloat(quitar_comas(objeto.value)) == 0.00 )
    {
      alert("Debe rellenar el campo "+descripcion);
      objeto.focus();
      return false;
    }
  else if(parseFloat(quitar_comas(objeto.value)) > parseFloat(quitar_comas(limite)))
   {
      alert("El campo "+descripcion+" no puede ser superior a "+limite);
      objeto.focus();
      return false;
   }
  else
    return true;
}

function noSuperiorOCero (objeto, limite, descripcion, cola) {
 if(parseFloat(quitar_comas(objeto.value)) > parseFloat(quitar_comas(limite)))
   {
   	  var mensaje = "El campo " + descripcion + " no puede ser superior a " + limite;
   	  if (cola) mensaje += cola;
      alert(mensaje);
      objeto.focus();
      return false;
   }
  else
    return true;
}

function noInferior (objeto, limite, descripcion, cola) {
  if (objeto.value == 0){
     alert("Debe rellenar el campo "+descripcion);
     objeto.focus();
     return false;
  }else {
  	if(limite > objeto.value)
   	{
   	  var mensaje = "El campo "+descripcion+" no puede ser inferior a "+limite;
   	  if (cola) mensaje += cola;
      alert(mensaje);
      objeto.focus();
      return false;
   	}else{
       return true;
    }
  }
}

function minimo (objeto, minimo, descripcion, cola) {
  if ( parseFloat(quitar_comas(objeto.value)) == 0.00 && minimo != '0,00')
    {
      alert("Debe rellenar el campo "+descripcion);
      objeto.focus();
      return false;
    }
  else if(parseFloat(quitar_comas(objeto.value)) < parseFloat(quitar_comas(minimo)))
   {
   	  var mensaje = "El campo "+descripcion+" no puede ser inferior a "+minimo;
   	  if (cola) mensaje += cola;
      alert(mensaje);
      objeto.focus();
      return false;
   }
  else
    return true;
}

function entreCeroYUno(objeto, descripcion){
	if(parseFloat(quitar_comas(objeto.value))<0.00 || parseFloat(quitar_comas(objeto.value))>1.00)
	{
		alert("Debe rellenar los campos M1 a M12 con un valor "+descripcion);
		objeto.focus;
		return false;
	}
	else
		return true;
}

function sumaMeses(objeto){
	var inputs = document.getElementsByTagName("input");
	var suma=0.00;
	for (i = 0; i < inputs.length; i++) {
   		if(inputs[i].type == "text" && inputs[i].name.indexOf("nM") != -1 )
    	{
    		suma += parseFloat(quitar_comas(inputs[i].value));
    	}
    }
    if(suma == parseFloat(quitar_comas(objeto.value)))
    	return true;
    else{
    	alert("La suma de los campos M1 a M12 debe ser igual a la duración total de la tarea");
    	return false;
    } 
}

function compruebaSuma(objeto, sobjeto, limite, descripcion){
	//alert("DENTRO");
	//var a=parseFloat(quitar_comas(objeto.value));
	//alert("a:"+a);
	//var b=parseFloat(quitar_comas(sobjeto.value));
	//alert("b:"+b);
	if(parseFloat(quitar_comas(objeto.value))+parseFloat(quitar_comas(sobjeto.value))>parseFloat(quitar_comas(limite))){
		alert("La suma del Periodo de Desarrollo y Puesta en Marcha y el Periodo de Garantía "+descripcion);
		return false;
	}
	else
	return true;
}

/**
* Comprueba que la provincia y el c??digo postal coincidan. Para ello compara
* los dos primeros d??gitos del c??digo postal con los de las provincias.
* Se asume que el c??digo ha sido validado con esCodigoPostal.
*/
function esCodigoPostalDeProvinciaCorrecta(codigoPostal, provincia){
	if(!provincia.disabled)
	{
		var codigoProvincia = "" + codigoPostal.value.substring(0,2);
	
		if (codigoProvincia == provincia.value){
			return true;
		}
		else{
			alert('No coincide el código postal con la provincia seleccionada');
			codigoPostal.focus();
			return false;
		}
	}
   else
   		return true;
}

/**
* Comprueba que la cadena no contenga caracteres especiales distintos al espacio y
* que tampoco contenga n??meros. Por tanto, s??lo puede contener letras, espacios y
* letras especiales como las t??ldes, ?? o ?? 
* Devuelve true si la cadena es correcta y false en caso contrario. 
*/
function letrasSinCaracteres(nombreCampo){
	var exp = /^[a-zA-ZñáéíóúäëïöüàèìòùâêîôûçÑÁÉÍÓÚÄËÏÖÜÀÈÌÒÙÂÊÎÔÛÇ&\-\. ]*$/;
	
	if(exp.test(document.getElementById(nombreCampo).value)){
		return true;
	}
	else{
		alert('El texto sólo puede incluir letras, espacios, puntos, guiones y "ampersand" (&)');
		document.getElementById(nombreCampo).focus();
		return false;
	}
}

function letrasSinCaracteres2(nombreCampo){
	var exp = /^[a-zA-ZñáéíóúäëïöüàèìòùâêîôûçÑÁÉÍÓÚÄËÏÖÜÀÈÌÒÙÂÊÎÔÛÇ\- ]*$/;
	
	if(exp.test(document.getElementById(nombreCampo).value)){
		return true;
	}
	else{
		alert('El texto sólo puede incluir letras, espacios y guiones');
		document.getElementById(nombreCampo).focus();
		return false;
	}
}
function contadorTiempo(tiempo){
	tiempo--;
	if (tiempo > 0){
		var min = parseInt(tiempo/60);
		var seg = tiempo%60;
		if (seg < 10 ){
			seg = "0"+seg;
		}
		document.getElementById('tiempoSesion1').value=min+":"+seg;
		document.getElementById('tiempoSesion2').value=min+":"+seg;
		compt2 = setTimeout("contadorTiempo("+tiempo+")",1000);
	}
	else{
		document.getElementById('tiempoSesion1').value="00:00";
		document.getElementById('tiempoSesion2').value="00:00";		
	}
}

function numeroRomano(arabigo){
	switch (arabigo){
		case 1:
			return "I";
		case 2:
			return "II";
		case 3:
			return "III";
		case 4:
			return "IV";
		case 5:
			return "V";
		case 6:
			return "VI";
		case 7:
			return "VII";
		case 8:
			return "VIII";
		case 9:
			return "IX";
		case 10:
			return "X";
		case 11:
			return "XI";
		case 12:
			return "XII";
		case 13:
			return "XIII";
		case 14:
			return "XIV";
		case 15:
			return "XV";
		case 16:
			return "XVI";
		case 17:
			return "XVII";
		case 18:
			return "XVIII";
		case 19:
			return "XIX";
		case 20:
			return "XX";
		case 21:
			return "XXI";
		case 22:
			return "XXII";
		case 23:
			return "XXIII";
		case 24:
			return "XXIV";
		case 25:
			return "XXV";
	}
}

/***********************************************/
// From Scott Andrew LePera.
function addEvent(obj, evType, fn, useCapture){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be attached");
  }
}

function removeEvent(obj, evType, fn, useCapture){
  if (obj.removeEventListener){
    obj.removeEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.detachEvent){
    var r = obj.detachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be removed");
  }
} 

// From prototype
function $() {
  var elements = new Array();

  for (var i = 0; i < arguments.length; i++) {
    var element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);

    if (arguments.length == 1)
      return element;

    elements.push(element);
  }

  return elements;
}

//]]>