


///////////////////////// check.js  ////////////////////////////

/* Creado por Pablo Gutiérrez (es) - Febrero 2003 – Agosto 2005 */
/* La Comunidad de Programación en Castellano */

/**********************************************/
/* Validación de campos numéricos        */
/**********************************************/

//La función \"IsInteger(YourNumber)\" chequea si \"YourNumber\" es un numero entero con o sin signo valido
//La variable \"YourNumber\" es una cadena de caracteres
function IsInteger(YourNumber)
{
	var Template = /^[+|-]?d+$/ //Formato de numero entero
	return (Template.test(YourNumber)) ? 1 : 0 //Compara \"YourNumber\" con el formato \"Template\" si coincide devuelve verdadero si no devuelve falso
}

//La función \"IsSignedInteger(YourNumber)\" chequea si \"YourNumber\" es un numero entero con signo valido
//La variable \"YourNumber\" es una cadena de caracteres
function IsSignedInteger(YourNumber)
{
	var Template = /^[+|-]d+$/ //Formato de numero entero con signo
	return (Template.test(YourNumber)) ? 1 : 0 //Compara \"YourNumber\" con el formato \"Template\" si coincide devuelve verdadero, si no devuelve falso
}

//La función \"IsUnsignedInteger(YourNumber)\" chequea si \"YourNumber\" es un numero entero sin signo valido
//La variable \"YourNumber\" es una cadena de caracteres
function IsUnsignedInteger(YourNumber)
{
	var Template = /^\d+$/ //Formato de numero entero sin signo

	return (Template.test(YourNumber)) ? 1 : 0 //Compara \"YourNumber\" con el formato \"Template\" si coincide devuelve verdadero si no devuelve falso
}

//La función \"IsReal(YourNumber)\" chequea si \"YourNumber\" es un numero real con o sin signo valido
//La variable \"YourNumber\" es una cadena de caracteres
function IsReal(YourNumber)
{
	var Template = /^(([+|-]?d+(.d*)?)|([+|-]?(d*.)?d+))$/ //Formato de numero real con signo
	return (Template.test(YourNumber)) ? 1 : 0 //Compara \"YourNumber\" con el formato \"Template\" si coincide devuelve verdadero si no devuelve falso
}

//La función \"IsSignedReal(YourNumber)\" chequea si \"YourNumber\" es un numero real con signo valido
//La variable \"YourNumber\" es una cadena de caracteres
function IsSignedReal(YourNumber)
{
	var Template = /^(([+|-]d+(.d*)?)|([+|-](d*.)?d+))$/ //Formato de numero real con signo
	return (Template.test(YourNumber)) ? 1 : 0 //Compara \"YourNumber\" con el formato \"Template\" y si coincide devuelve verdadero si no devuelve falso
}

//La función \"IsUnsignedReal(YourNumber)\" chequea si \"YourNumber\" es un numero real sin signo valido
//La variable \"YourNumber\" es una cadena de caracteres
function IsUnsignedReal(YourNumber)
{
	var Template = /^((d+(.d*)?)|((d*.)?d+))$/ //Formato de numero real sin signo
	return (Template.test(YourNumber)) ? 1 : 0 //Compara \"YourNumber\" con el formato \"Template\" y si coincide devuelve verdadero si no devuelve falso
}




/**********************************************************/
/* Validación de campos cadena de caracteres       */
/**********************************************************/

//La función \"IsChar(YourChar)\" chequea si \"YourChar\" es una letra valida
//La variable \"YourChar\" es una cadena de caracteres
function IsChar(YourChar)
{
	var Template = /^[a-z]$/i //Formato de letra
	return (Template.test(YourChar)) ? 1 : 0 //Compara \"YourChar\" con el formato \"Template\" si coincide devuelve verdadero si no devuelve falso
}

//La función \"IsAlphaNumeric(YourAlphaNumeric)\" chequea si \"YourAlphaNumeric\" es una letra valida
//La variable \"YourAlphaNumeric\" es una cadena de caracteres
function IsAlphaNumeric(YourAlphaNumeric)
{
	var Template = /^[a-z0-9]+$/i //Formato de alfanumérico
	return (Template.test(YourAlphaNumeric)) ? 1 : 0 //Compara \"YourAlphaNumeric\" con el formato \"Template\" si coincide devuelve verdadero si no devuelve falso
}

//La función \"IsMail(YourMail)\" chequea si \"YourMail\" es una dirección de correo electrónico valida
//La variable \"YourMail\" es una cadena de caracteres
function IsMail(YourMail)
{
	var Template = /^[a-z][a-z-_0-9.]+@[a-z-_=>0-9.]+.[a-z]{2,3}$/i //Formato de dirección de correo electrónico
	return (Template.test(YourMail)) ? 1 : 0 //Compara \"YourMail\" con el formato \"Template\" y si coincide devuelve verdadero si no devuelve falso
}

//La función \"IsNIF(YourNIF)\" chequea si \"YourNIF\" es un DNI valido
//La variable \"YourNIF\" es una cadena de caracteres
function IsNIF(YourNIF)
{
	if (YourNIF.length != 9) return 0 //Si la longitud de \"YourNIF\" es menor que 9 devuelve falso
	else if (!IsUnsignedInteger(YourNIF.substring(0, 8))) return 0 //Si los ocho primeros dígitos no forman un numero entero sin signo valido devuelve falso
	else if (!IsChar(YourNIF.substring(8, 9))) return 0 //Si el ultimo digito no es una letra valida devuelve falso
	else
	{
		var ControlValue = 0 //Control de cálculos según el criterio de corrección
		var NIFCharIndex = 0 //Almacenara la posición de la letra correspondiente a la parte numérica del DNI con respecto al array \"NIFChars\"
		//El siguiente array \"NIFChars\" contiene las letras de DNI ordenadas según el criterio de corrección
		var NIFChars = 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')
		var NIFNumber = YourNIF.substring(0, 8) //Almacenamos la parte numérica del DNI en \"NIFNumber\"
		var NIFChar = YourNIF.substring(8, 9) //Almacenamos la letra del DNI en \"NIFChar\"
		NIFChar = NIFChar.toUpperCase() //Pasamos la letra del DNI a mayúsculas por si acaso estaba en minúsculas
		//Los siguientes 4 cálculos sirven para calcular la posición de la letra correspondiente al la parte numérica del DNI \"NIFNumber\" en array \"NIFChars\"
		ControlValue = NIFNumber / NIFChars.length
		ControlValue = Math.floor(ControlValue);
		ControlValue = ControlValue * NIFChars.length
		NIFCharIndex = NIFNumber - ControlValue
		return (NIFChar == NIFChars[NIFCharIndex]) ? 1 : 0 //Si la letra coincide con la letra dada devuelve verdadero si no devuelve falso
	}
}

/****************************************/
/* Validación de campos fecha       */
/****************************************/

//El array \"DaysInMonth\" contiene los días que tiene cada mes
var DaysInMonth = new Array()
DaysInMonth[0] = 31  //Los días que tiene Enero
DaysInMonth[1] = 29  //Los días que tiene Febrero se calculan mas adelante por si el año es bisiesto
DaysInMonth[2] = 31  //Los días que tiene Marzo
DaysInMonth[3] = 30  //Los días que tiene Abril
DaysInMonth[4] = 31  //Los días que tiene Mayo
DaysInMonth[5] = 30  //Los días que tiene Junio
DaysInMonth[6] = 31  //Los días que tiene Julio
DaysInMonth[7] = 31  //Los días que tiene Agosto
DaysInMonth[8] = 30  //Los días que tiene Septiembre
DaysInMonth[9] = 31  //Los días que tiene Octubre
DaysInMonth[10] = 30 //Los días que tiene Noviembre
DaysInMonth[11] = 31 //Los días que tiene Diciembre

//La función \"IsDay(YourDay, YourMonth)\" chequea si \"YourDay\" es un numero de día valido para el mes \"YourMonth\"
//Las variables \"YourDay\" y \"YourMonth\" son cadenas de caracteres
function IsDay(YourDay, YourMonth)
{
	if (IsUnsignedInteger(YourDay) && IsMonth(YourMonth)) //Si \"YourDay\" es un numero entero sin signo valido y \"YourMonth\" es un numero de mes valido
	{
		return (parseInt(YourDay) > 0 && parseInt(YourDay) <= DaysInMonth[YourMonth - 1]) ? 1 : 0 //Si \"YourDay\" esta entre 1 y los días que tiene el mes \"YourMonth\" devuelve verdadero si no devuelve falso
	}
	else return 0 //Si \"YourDay\" no es un numero entero sin signo valido o \"YourMonth\" no es un numero de mes valido devuelve falso
} 

//La función \"IsMonth(YourMonth)\" chequea si \"YourMonth\" es un numero de mes valido
//La variable \"YourMonth\" es una cadena de caracteres
function IsMonth(YourMonth)
{
	if (IsUnsignedInteger(YourMonth)) //Si \"YourMonth\" es un número entero sin signo valido
	{
		return (parseInt(YourMonth) > 0 && parseInt(YourMonth) <= 12) ? 1 : 0 //Si \"YourMonth\" esta entre 1 y 12 devuelve verdadero si no devuelve falso
	}
	else return 0 //Si \"YourMonth\" no es un numero entero sin signo valido devuelve falso
}

//La función \"IsYear(YourYear)\" chequea si \"YourYear\" es un numero de año valido
//La variable \"YourYear\" es una cadena de caracteres
function IsYear(YourYear)
{
	if (IsUnsignedInteger(YourYear)) //Si \"YourYear\" es un numero entero sin signo valido
	{
		return (parseInt(YourYear) > 1900 && parseInt(YourYear) < 3000) ? 1 : 0 //Si \"YourYear\" es mayor que 1900 y menor que 3000 devuelve verdadero si no devuelve falso
	}
	else return 0 //Si \"YourYear\" no es un numero entero sin signo valido devuelve falso
}

//La función \"IsLeapYear(YourYear)\" chequea si \"YourYear\" es un año es bisiesto
//La variable \"YourYear\" es una cadena de caracteres
function IsLeapYear(YourYear)
{
	if (IsUnsignedInteger(YourYear)) //Si \"YourYear\" es un numero entero sin signo valido
	{
		return ((YourYear % 4 == 0 && YourYear % 100 != 0) || (YourYear % 400 == 0)) ? 1 : 0// Si \"YourYear\" es un año es bisiesto devuelve verdadero si no devuelve falso
	}
	else return 0 //Si \"YourYear\" no es un numero entero sin signo valido devuelve falso
}

//La función \"IsDate(YourDate, YourDateSeparator)\" chequea si \"YourDate\" es una fecha valida con el separador de fecha \"YourDateSeparator\"
//Las variables \"YourDate\" y \"YourDateSeparator\" son cadenas de caracteres
function IsDate(YourDate, YourDateSeparator)
{
	var IsAllOK = 1 //Variable iniciada como verdadera para saber si todas las validaciones fueron correctas
	var YourDateParts = new Array() //Variable donde se almacenaran las partes de la fecha (dia, mes y año) tras haber eliminado el separador de la fecha
	YourDateParts = YourDate.split(YourDateSeparator) //Se crean las partes de la fecha (día, mes y año) eliminando el separador de la fecha
	var Day = YourDateParts[0] //El día corresponde al primer elemento del array
	var Month = YourDateParts[1] //El mes corresponde al segundo elemento del array
	var Year = YourDateParts[2] //El año corresponde al tercer elemento del array
	if (IsYear(Year) && !IsLeapYear(Year)) //Si \"Year\" es un numero de año valido y no es bisiesto
	{
		DaysInMonth[1] = 28 //Como \"Year\" no es bisiesto Febrero tiene entonces 28 días
	}
	else if (IsYear(Year) && IsLeapYear(Year)) //Si \"Year\" es un numero de año valido y es bisiesto
	{
		DaysInMonth[1] = 29 //Como \"Year\" es bisiesto Febrero tiene entonces 29 días
	}
	else IsAllOK = 0 //Si \"Year\" no es un numero de año valido la variable pasa a ser falsa
	IsAllOK = (IsMonth(Month)) ? IsAllOK : 0 //Si \"Month\" es un numero de mes valido la variable se queda como esta si no pasa a ser falsa
	IsAllOK = (IsDay(Day, Month)) ? IsAllOK : 0 //Si \"Day\" es un numero de día valido para el mes \"Month\" la variable se queda como esta si no pasa a ser falsa
	return IsAllOK //Finalmente se devuelve el valor de la variable como verdadero o falso
}

/**********************************************************************************/
/* Validación de campos código postal y teléfono según provincia           */
/**********************************************************************************/

//El array \"PostalCodeInitInit\" contiene los primeros dígitos del código postal de una provincia
var PostalCodeInit = new Array()
PostalCodeInit[0] = '01'  //Primeros dígitos del código postal de Álava
PostalCodeInit[1] = '02'  //Primeros dígitos del código postal de Albacete
PostalCodeInit[2] = '03'  //Primeros dígitos del código postal de Alicante
PostalCodeInit[3] = '04'  //Primeros dígitos del código postal de Almería
PostalCodeInit[4] = '33'  //Primeros dígitos del código postal de Asturias
PostalCodeInit[5] = '05'  //Primeros dígitos del código postal de Ávila
PostalCodeInit[6] = '06'  //Primeros dígitos del código postal de Badajoz
PostalCodeInit[7] = '08'  //Primeros dígitos del código postal de Barcelona
PostalCodeInit[8] = '09'  //Primeros dígitos del código postal de Burgos
PostalCodeInit[9] = '10'  //Primeros dígitos del código postal de Cáceres
PostalCodeInit[10] = '11' //Primeros dígitos del código postal de Cádiz
PostalCodeInit[11] = '39' //Primeros dígitos del código postal de Cantabria
PostalCodeInit[12] = '12' //Primeros dígitos del código postal de Castellón de la Plana
PostalCodeInit[13] = '51' //Primeros dígitos del código postal de Ceuta
PostalCodeInit[14] = '13' //Primeros dígitos del código postal de Ciudad Real
PostalCodeInit[15] = '14' //Primeros dígitos del código postal de Córdoba
PostalCodeInit[16] = '15' //Primeros dígitos del código postal de Coruña, A
PostalCodeInit[17] = '16' //Primeros dígitos del código postal de Cuenca
PostalCodeInit[18] = '17' //Primeros dígitos del código postal de Girona
PostalCodeInit[19] = '18' //Primeros dígitos del código postal de Granada
PostalCodeInit[20] = '19' //Primeros dígitos del código postal de Guadalajara
PostalCodeInit[21] = '20' //Primeros dígitos del código postal de Guipúzcoa
PostalCodeInit[22] = '21' //Primeros dígitos del código postal de Huelva
PostalCodeInit[23] = '22' //Primeros dígitos del código postal de Huesca
PostalCodeInit[24] = '07' //Primeros dígitos del código postal de Illes Balears
PostalCodeInit[25] = '23' //Primeros dígitos del código postal de Jaén
PostalCodeInit[26] = '24' //Primeros dígitos del código postal de León
PostalCodeInit[27] = '25' //Primeros dígitos del código postal de Lleida
PostalCodeInit[28] = '27' //Primeros dígitos del código postal de Lugo
PostalCodeInit[29] = '28' //Primeros dígitos del código postal de Madrid
PostalCodeInit[30] = '29' //Primeros dígitos del código postal de Málaga
PostalCodeInit[31] = '52' //Primeros dígitos del código postal de Melilla
PostalCodeInit[32] = '30' //Primeros dígitos del código postal de Murcia
PostalCodeInit[33] = '31' //Primeros dígitos del código postal de Navarra
PostalCodeInit[34] = '32' //Primeros dígitos del código postal de Ourense
PostalCodeInit[35] = '34' //Primeros dígitos del código postal de Palencia
PostalCodeInit[36] = '35' //Primeros dígitos del código postal de Palmas, Las
PostalCodeInit[37] = '36' //Primeros dígitos del código postal de Pontevedra
PostalCodeInit[38] = '26' //Primeros dígitos del código postal de Rioja, La
PostalCodeInit[39] = '37' //Primeros dígitos del código postal de Salamanca
PostalCodeInit[40] = '38' //Primeros dígitos del código postal de Santa Cruz de Tenerife
PostalCodeInit[41] = '40' //Primeros dígitos del código postal de Segovia
PostalCodeInit[42] = '41' //Primeros dígitos del código postal de Sevilla
PostalCodeInit[43] = '42' //Primeros dígitos del código postal de Soria
PostalCodeInit[44] = '43' //Primeros dígitos del código postal de Tarragona
PostalCodeInit[45] = '44' //Primeros dígitos del código postal de Teruel
PostalCodeInit[46] = '45' //Primeros dígitos del código postal de Toledo
PostalCodeInit[47] = '46' //Primeros dígitos del código postal de Valencia
PostalCodeInit[48] = '47' //Primeros dígitos del código postal de Valladolid
PostalCodeInit[49] = '48' //Primeros dígitos del código postal de Vizcaya
PostalCodeInit[50] = '49' //Primeros dígitos del código postal de Zamora
PostalCodeInit[51] = '50' //Primeros dígitos del código postal de Zaragoza

//El array \"Prefix\" contiene el prefijo telefónico de una provincia
var Prefix = new Array()
Prefix[0] = '945'  //Prefijo telefónico de Álava
Prefix[1] = '967'  //Prefijo telefónica de Albacete
Prefix[2] = '96'   //Prefijo telefónica de Alicante
Prefix[3] = '950'  //Prefijo telefónica de Almería
Prefix[4] = '98'   //Prefijo telefónica de Asturias
Prefix[5] = '920'  //Prefijo telefónica de Ávila
Prefix[6] = '924'  //Prefijo telefónica de Badajoz
Prefix[7] = '93'   //Prefijo telefónica de Barcelona
Prefix[8] = '947'  //Prefijo telefónica de Burgos
Prefix[9] = '927'  //Prefijo telefónica de Cáceres
Prefix[10] = '956' //Prefijo telefónica de Cádiz
Prefix[11] = '942' //Prefijo telefónica de Cantabria
Prefix[12] = '964' //Prefijo telefónica de Castellón de la Plana
Prefix[13] = '956' //Prefijo telefónica de Ceuta
Prefix[14] = '926' //Prefijo telefónica de Ciudad Real
Prefix[15] = '957' //Prefijo telefónica de Córdoba
Prefix[16] = '981' //Prefijo telefónica de Coruña, A
Prefix[17] = '969' //Prefijo telefónica de Cuenca
Prefix[18] = '972' //Prefijo telefónica de Girona
Prefix[19] = '957' //Prefijo telefónica de Granada
Prefix[20] = '949' //Prefijo telefónica de Guadalajara
Prefix[21] = '943' //Prefijo telefónica de Guipúzcoa
Prefix[22] = '959' //Prefijo telefónica de Huelva
Prefix[23] = '974' //Prefijo telefónica de Huesca
Prefix[24] = '971' //Prefijo telefónica de Illes Balears
Prefix[25] = '953' //Prefijo telefónica de Jaén
Prefix[26] = '987' //Prefijo telefónica de León
Prefix[27] = '973' //Prefijo telefónica de Lleida
Prefix[28] = '982' //Prefijo telefónica de Lugo
Prefix[29] = '91'  //Prefijo telefónica de Madrid
Prefix[30] = '95'  //Prefijo telefónica de Málaga
Prefix[31] = '95'  //Prefijo telefónica de Melilla
Prefix[32] = '968' //Prefijo telefónica de Murcia
Prefix[33] = '948' //Prefijo telefónica de Navarra
Prefix[34] = '988' //Prefijo telefónica de Ourense
Prefix[35] = '979' //Prefijo telefónica de Palencia
Prefix[36] = '928' //Prefijo telefónica de Palmas, Las
Prefix[37] = '986' //Prefijo telefónica de Pontevedra
Prefix[38] = '941' //Prefijo telefónica de Rioja, La
Prefix[39] = '923' //Prefijo telefónica de Salamanca
Prefix[40] = '922' //Prefijo telefónica de Santa Cruz de Tenerife
Prefix[41] = '921' //Prefijo telefónica de Segovia
Prefix[42] = '95'  //Prefijo telefónica de Sevilla
Prefix[43] = '975' //Prefijo telefónica de Soria
Prefix[44] = '977' //Prefijo telefónica de Tarragona
Prefix[45] = '978' //Prefijo telefónica de Teruel
Prefix[46] = '925' //Prefijo telefónica de Toledo
Prefix[47] = '96'  //Prefijo telefónica de Valencia
Prefix[48] = '983' //Prefijo telefónica de Valladolid
Prefix[49] = '94'  //Prefijo telefónica de Vizcaya
Prefix[50] = '980' //Prefijo telefónica de Zamora
Prefix[51] = '976' //Prefijo telefónica de Zaragoza

//La función \"IsPostalCode(YourPostalCode, YourProvinceIndex)\" chequea si \"YourPostalCode\" es el código postal de la provincia \"YourProvinceIndex\"
//Las variables \"YourPostalCode\" y \"YourProvinceIndex\" son cadenas de caracteres
function IsPostalCode(YourPostalCode, YourProvinceIndex)
{
	if (YourPostalCode.length != 5) return 0 //Si la longitud de \"YourPostalCode\" es diferente de 5 devuelve falso
	else if (!IsUnsignedInteger(YourPostalCode) || !IsUnsignedInteger(YourProvinceIndex)) return 0 //Si \"YourPostalCode\" o \"YourProvinceIndex\" no son números enteros sin signo validos devuelve falso
	else return (YourPostalCode.substring(0, 2) == PostalCodeInit[YourProvinceIndex]) ? 1 : 0 //Si los 2 primeros dígitos de \"YourPostalCode\" coinciden con el valor de \"PostalCodeInit[YourProvinceIndex]\" devuelve verdadero si no devuelve falso
}

//La función \"IsPhoneNumber(YourPhoneNumber, YourProvinceIndex)\" chequea si \"YourPhoneNumber\" es un teléfono valido de la provincia \"YourProvinceIndex\"
//Las variables \"YourPhoneNumber\" y \"YourProvinceIndex\" son cadenas de caracteres
function IsPhoneNumber(YourPhoneNumber, YourProvinceIndex)
{
	if (YourPhoneNumber.length != 9) return 0 //Si la longitud de \"YourPhoneNumber\" es diferente de 9 devuelve falso
	else if (!IsUnsignedInteger(YourPhoneNumber) || !IsUnsignedInteger(YourProvinceIndex)) return 0 //Si \"YourPhoneNumber\" o \"YourProvinceIndex\" no son números enteros sin signo validos devuelve falso
	else return (YourPhoneNumber.substring(0, Prefix[YourProvinceIndex].length) == Prefix[YourProvinceIndex]) ? 1: 0 //Si el prefijo de \"YourPhoneNumber\" coincide con el de \"Prefix[YourProvinceIndex]\" devuelve verdadero si no devuelve falso
}


