//Función que se encarga de sustituir los saltos de nueva linea, por el caracter 160 (A0 en hexadecimal)
function Quitar_Saltos_de_Linea(prmtrCadena)
	{
	var strCadenaAux=""
	var strCadenaAux1=""
	//'Quitamos los retorno de carro
	pat=/\r/g 
	strCadenaAux1=prmtrCadena.replace(pat,"")
	//'Quitamos los caracteres de nueva linea
	pat=/\n/g
	strCadenaAux=strCadenaAux1.replace(pat,String.fromCharCode(160))
	//alert("el retorno tine :=> " +strCadenaAux)
	return strCadenaAux
	}

//Función que recibe un string, cuyos saltos de linea ha sustituidos por el caracter 160 y cambia todas las ocurrencias
//de este caracter por el salto de linea.
function Poner_Saltos_de_Linea(prmtrCadena)
	{
	var strCadenaAux=""
	//pat es una expresión que nos dice que nos busque todos los caracteres que coincidan con el código
	// 160 (expresado en la funcion en hexadecimal). Esta expresión se utiliza junto la función replace
	//para sustituirlo con el salto de linea
	pat=/\xA0/g 
	strCadenaAux=prmtrCadena.replace(pat,"\n")
	return strCadenaAux
	}
	
//Función que recibe un string, cuyos saltos de linea ha sustituidos por el caracter 160 y cambia todas las ocurrencias
//de este caracter por el salto de linea.
function Poner_Saltos_de_Linea_Con_BR(prmtrCadena)
	{
	var strCadenaAux=""
	//pat es una expresión que nos dice que nos busque todos los caracteres que coincidan con el código
	// 160 (expresado en la funcion en hexadecimal). Esta expresión se utiliza junto la función replace
	//para sustituirlo con el salto de linea
	pat=/\xA0/g 
	strCadenaAux=prmtrCadena.replace(pat,"<br>")
	return strCadenaAux
	}

//Función que recibe un string, cuyos saltos de linea ha sustituidos por el caracter 160 y cambia todas las ocurrencias
//de este caracter por el salto de linea.
function Poner_Saltos_BR (prmtrCadena)
	{
	var strCadenaAux=""
	//pat es una expresión que nos dice que nos busque todos los caracteres que coincidan con el código
	// 160 (expresado en la funcion en hexadecimal). Esta expresión se utiliza junto la función replace
	//para sustituirlo con el salto de linea
	pat=/\xA0/g 
	strCadenaAux=prmtrCadena.replace(pat,"<br>")
	return strCadenaAux
	}

function Introducir_Solo_Numeros_IE(prmtrArrayKeyCodePermitidos)
	{
	//' Los numeros van desde el 48(0)..al 57(9) y en el keypad desde el 96(0)..al 105(9)
	//'Tab(8), <-(37), ->(39), Enter(13), Supr(46), Inicio(36), Fin(35), "," Coma (188)
	var arrayKeyCodePermitidos, i, blnPermitir = false
	arrayKeyCodePermitidos = new Array(8, 9, 13, 35, 36, 37, 39, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105) //, 188)
	if (prmtrArrayKeyCodePermitidos != null) {arrayKeyCodePermitidos = arrayKeyCodePermitidos.concat(prmtrArrayKeyCodePermitidos.split(","))}
	//alert(event.keyCode)
	for (i in arrayKeyCodePermitidos)
		{//alert(i + ": " + arrayKeyCodePermitidos[i])
		if (arrayKeyCodePermitidos[i] == event.keyCode) blnPermitir = true}
	
	if (!blnPermitir) event.returnValue = false
	}
	
function Introducir_No_Mas_de_N_Caracteres(prmtrTextArea,prmtrLongitudMax)
	{	
	var objTextArea = prmtrTextArea
	var numCaracteresIntroducidos = objTextArea.value.length
	var maxLength = prmtrLongitudMax
	var blnPermitir = false
	
	//'Tab(8), <-(37), ->(39), Enter(13), Supr(46), Inicio(36), Fin(35)
	var arrayKeyCodePermitidos, i, blnPermitir = false
	//Sólo permitimos estos caracteres
	arrayKeyCodePermitidos = new Array(8, 9, 13, 35, 36, 37, 39, 46, 48)
	 
	if (numCaracteresIntroducidos > maxLength)
		{
		//Si estamos en IE
		if (document.all){var cont=1}
		else {var cont=2}
		//Si hemos introducido más de un carácter en el textArea, es que hemos pegado el texto
		if (numCaracteresIntroducidos > maxLength+cont) 
			alert("Ha insertado más de "+maxLength+" carácteres. El texto será truncado.")
		objTextArea.value = objTextArea.value.substring(0,maxLength);
		return(0)
		}
	else
		return(1)
	}



//Esta función se encarga  de validarla una fecha, devolviendo TRUE si es correcta y FALSE si es incorrecta
//Se tiene encuenta la duración en dias de los meses pero con la excepción que no se comprueba si febrero es bisiesto o no
// El patron que debe tener la fecha es el siguiente _ _ / _ _ / _ _   o  _ _ / _ _ / _ _ _ _ 
function Es_Fecha_Correcta(prmtrFecha)
	{
	var strFecha=prmtrFecha   
	var blnRetorno=false
	var intTam=strFecha.length
	var pat1, pat2
	if (strFecha!="")
		{
		if (intTam ==8 || intTam == 10) // si el tamaño es el correcto conseguimos
			{
			//comprobamos formato en primer lugar. Recordar que el formato es _ _ / _ _ / _ _
			pat1=/\d{2}\/\d{2}\/\d{4}/    //Esta patron representa al formato fecha
			pat2=/\d{2}\/\d{2}\/\d{2}/    //Esta patron representa al formato fecha		  
			if (strFecha.search(pat1)==0 || strFecha.search(pat2)==0) //entonces el formato es correcto y continuamos verificando los intervalos de dia, mes y año
				{
				var strDia=strFecha.charAt(0)+strFecha.charAt(1)
				var strMes=strFecha.charAt(3)+strFecha.charAt(4)
				var strAnyo=strFecha.charAt(6)+strFecha.charAt(7)
				if ( (strMes>0)&& (strMes<13)) //comprobacion mes
					{
					if ( (strDia>0) && (strDia<32)) //comprobacion dia
						{
						if ( (strMes==4) || (strMes==6) || (strMes==9) || (strMes==11) )//meses de 30 dias
							{if (strDia<31) blnRetorno=true}//fin if meses de 30 dias
						else  if (strMes==2) //si es febrero
							{if (strDia<30) blnRetorno=true}// fin comprobacion mes de 29 como mucho
								else blnRetorno=true //si no es ninguno de los anterior entonces el mes es de 31 dias y lo hemos comprobado antes
						}//fin comprobacion dia
					}//fin comprobacion mes
				}  // fin if comprobar formato
			}// fin if comprobar tamaño	  
		}
	else//el no haber introducido nada en el input text es una formato valido porque de lo contrario estariamos obligando a introducir una fecha
		{blnRetorno = true}
	return blnRetorno
	}

//funcion que se encarga de validar a ños. La validación consiste en que el parametro que se le pasa debe
//contener solo 4 numeros
function Validar_Anio(prmtrAnio)
	{
   	var blnRetorno=false
    var pat=/\d{4}/
	if (prmtrAnio.search(pat)==0) blnRetorno=true
	return blnRetorno
	}
	

//función que se encarga de validar un dni. Se entiende que el DNI  esta compuesto por 8 numeros y seguido a estos
// una letra. => 99999999X
//La funcion recibe dos parametros uno con la parte numerica del DNI y otra  con la parte de la letra. En el caso
// que no se reciba el paramtro de la letra, se entiende que esta viene junto con la parte numerica.
function Validar_DNI(prmtrDNI,prmtrLetra)
	{
    var blnRetorno=false
	var strDNI=""
	if (typeof(prmtrLetra)=="undefined" ) //Como la letra no esta definida entonces entendemos la letra viene junto con la parteNumerica
		{
	     //Quitamos la opcion de exigirle al usuario de que nos meta la letra del DNI
		 //var pat=/\d{8}[a-zA-Z]{1}/   //patron que comprueba un DNI completo
		 var pat=/\d{8}/   //patron que comprueba un DNI completo
		 var strDNI=prmtrDNI
		 if(strDNI.search(pat)==0){ blnRetorno=true;}
		}
	 else //la parte numerica y la letra vienen de forma separada
	 	{
	    var patNumeros=/\d{8}/   //patron que comprueba la parte numerica del dni
	    var patLetra=/[a-zA-Z]{1}/   //patron que comprueba la parte de la letra del dni
		var strDNI=prmtrDNI
		var strLetra=prmtrLetra
		if (strDNI.search(patNumeros)==0) // si la parte numerica es correcta, entonces validamos la parte de la letra
			{blnRetorno=true}
	 	}
	return blnRetorno
	}

/*Función mediante la cual controlamos la anchura de los input text (se recibe como parametro), para que
sea parecida en ambos navegadores. Además esta fución acaba escribiendo la size */
function DefinirMismaAnchuraObjInputText (parmtrSizeInputText)
	{
	if (navigator.appName.toLowerCase() == "netscape")
		{parmtrSizeInputText =  ((parmtrSizeInputText) - (parmtrSizeInputText * 0.4)) * 1}
	document.write (" size = '" + parmtrSizeInputText + "'")
	}
	
	
	
/*Función mediante la cual controlamos la anchura de los input text (se recibe como parametro), para que
sea parecida en ambos navegadores. Además esta fución acaba escribiendo la size */
function DefinirMismaAnchuraObjTextArea (parmtrSizeInputText)
	{
	if (navigator.appName.toLowerCase() == "netscape")
		{parmtrSizeInputText =  ((parmtrSizeInputText) - (parmtrSizeInputText * 0.4)) * 1}
	document.write ("cols = '" + parmtrSizeInputText + "'")
	}

/*Función que se encarga de habilitar todos los check box y radio que halla en la pantalla*/
function Habilitar_CheckBox_Radio ()
	{
	i=0;j=0;
	while (j<document.forms.length)
		{
		while (i<document.forms[j].elements.length)
			{
			if (document.forms[j].elements[i].type != "button")
				{document.forms[j].elements[i].disabled = false;}
			i++;
			}
		j++;
		}
	}

/*Función que se encarga de inhabilitar todos los check box y radio que halla en la pantalla*/
function inHabilitar_CheckBox_Radio ()
	{
	i=0; j=0;
	while (j<document.forms.length)
		{
		while (i<document.forms[j].elements.length)
			{
			if (document.forms[j].elements[i].type != "button")
				{document.forms[j].elements[i].disabled = true;}
			i++;
			}
		i=0;
		j++;
		}
	}

//Funciona que elimina los espacios al principio y al final de un string
function trim(inputString) 
	{
	// Removes leading and trailing spaces from the passed string. Also removes
	// consecutive spaces and replaces it with one space. If something besides
	// a string is passed in (null, custom object, etc.) then return the input.
	if (typeof inputString != "string") 
		{return inputString;}
	var retValue = inputString;
	var ch = retValue.substring(0, 1);
	while (ch == " ") 
		{ // Check for spaces at the beginning of the string
		retValue = retValue.substring(1, retValue.length);
		ch = retValue.substring(0, 1);
		}
	ch = retValue.substring(retValue.length-1, retValue.length);
	while (ch == " ") 
		{ // Check for spaces at the end of the string
		retValue = retValue.substring(0, retValue.length-1);
		ch = retValue.substring(retValue.length-1, retValue.length);
		}
	while (retValue.indexOf("  ") != -1) 
		{ // Note that there are two spaces in the string - look for multiple spaces within the string
		retValue = retValue.substring(0, retValue.indexOf("  ")) + retValue.substring(retValue.indexOf("  ")+1, retValue.length); // Again, there are two spaces in each of the strings
		}
	return retValue; // Return the trimmed string back to the user
	} // Ends the "trim" function


function Validar_EMailFUNCIONA_MAL(prmtrEmail)
	{
    var blnRetorno=false
	var strEmail=""
	var patArroba=/[@]{1}/   
	//var strDNI=prmtrDNI
	var strEmail=prmtrEmail
	if (strEmail != "")
		{
		if (strEmail.search(patArroba)==0) // si encontramos una @
			{blnRetorno=true}
		}
	else
		blnRetorno=true
	return blnRetorno
	}

	
 function Validar_Mail (prmtrMail) 
 	{// /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/  es una expresion regular
	return (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(prmtrMail))
	}
	
function Averiguar_RadioButton_Seleccionado(prmtrObjRadio)
	{
	var intI; intRadioSeleccionado = -1
//	alert (prmtrObjRadio.length == null)
	// si el radio button no tiene length significa que estoy representando ese radiobutton con un hidd y por tanto se asigna directamente el value
		
	if (prmtrObjRadio.length == null) 
		{//alert("objeto simulado")
		intRadioSeleccionado = prmtrObjRadio.value}
	else
		{
		for (intI = 0; intI<prmtrObjRadio.length; ++intI)
			{if (prmtrObjRadio[intI].checked == true) intRadioSeleccionado = prmtrObjRadio[intI].value}
		}
	return intRadioSeleccionado
	}


function Comparar_FechasOLD (prmtrFecha1, prmtrFecha2)
	{
	var strAlert = ""
	var objFecha1 = new Date(prmtrFecha1)
	var objFecha2 = new Date(prmtrFecha2)
	strAlert += "prmtrFecha1: " + prmtrFecha1+ "\n"
	strAlert += "dia: " + objFecha1.getDate()+ "\n"
	strAlert += "mes: " + objFecha1.getMonth()+ "\n"
	strAlert += "año: " + objFecha1.getYear()+ "\n\n"
	strAlert += "prmtrFecha2: " + prmtrFecha2+ "\n"
	strAlert += "dia: " + objFecha2.getDate()+ "\n"
	strAlert += "mes: " + objFecha2.getMonth()+ "\n"
	strAlert += "año: " + objFecha2.getYear()+
	alert(strAlert)
	}	
	
function Comparar_Fechas (prmtrStringFecha1, prmtrStringFecha2)
	{
	arrayFecha1 = prmtrStringFecha1.split('/')
	arrayFecha2 = prmtrStringFecha2.split('/')
	
	prmtrStringFecha1 = arrayFecha1[2] + arrayFecha1[1] + arrayFecha1[0]
	prmtrStringFecha2 = arrayFecha2[2] + arrayFecha2[1] + arrayFecha2[0]
	prmtrStringFecha1 = parseInt(prmtrStringFecha1);
	prmtrStringFecha2 = parseInt(prmtrStringFecha2);
	
	if (prmtrStringFecha1 > prmtrStringFecha2) 
		{return true;}
	return false;
	}

function Validar_Formulario (prmtrFormulario, prmtrArrayInputRequeridos, prmtrArrayDescInputRequeridos)
	{
	// dialog message
	var alertMsg = "Rellene el campo/s: \n\n";
//	var strAlert = ""
//alert("prmtrFormulario: "  + prmtrFormulario)
//	Mostrar_Propiedades(prmtrFormulario)
//		Mostrar_Propiedades(prmtrFormulario.elements)
	var l_Msg = alertMsg.length;
	for (var i = 0; i < prmtrArrayInputRequeridos.length; i++)
		{
		strAlert = "prmtrArrayInputRequeridos[" + i + "]: " + prmtrArrayInputRequeridos[i] + "\n"
		//alert(strAlert)
		//var obj = prmtrFormulario.elements[prmtrArrayInputRequeridos[i]];
		//alert(prmtrFormulario)
		var obj = prmtrFormulario[prmtrArrayInputRequeridos[i]];
//		Mostrar_Propiedades(obj)
//		alert(obj.name)
		//Mostrar_Propiedades(obj)
		if (obj)
			{
			strAlert += "obj.name: " + obj.name + "\n"
			strAlert += "obj.type: " + obj.type + "\n"
			//alert(strAlert)
			switch(obj.type)
				{
				case "select-one":
					if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == "" || obj.options[obj.selectedIndex].value == -1)
						{alertMsg += " - " + prmtrArrayDescInputRequeridos[i] + "\n";}
					break;
				case "select-multiple":
					if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].value == -1)
						{alertMsg += " - " + prmtrArrayDescInputRequeridos[i] + "\n";}
					break;
				case "text":
				case "textarea":
					if (obj.value == "" || obj.value == null)
						{alertMsg += " - " + prmtrArrayDescInputRequeridos[i] + "\n";}
				break;
				default:
					if (obj.value == "" || obj.value == null)
						{alertMsg += " - " + prmtrArrayDescInputRequeridos[i] + "\n";}
				}
			}
		}

	if (alertMsg.length == l_Msg)
		{return true;}
	else
		{
		alert(alertMsg);
		return false;
		}
}
	
	
//Mejoras introducidas en cada una de las versiones
//-v2:
//	- Agrego la función w
//