// Enumeración de tipos de contenido de campos de texto.
var TC_ALFABETICO = 0;
var TC_ALFANUMERICO = 1;
var TC_SINTILDE = 2;
var TC_LOGIN = 3;
var TC_PRECIO = 4;
var TC_NUMERICO = 5;
var TC_EMAIL = 6;
var TC_TELEFONO = 7;
var TC_CODPOSTAL = 8;
var TC_FECHA = 9;

////////////////////////////////////////////////////////////////////////////////
// ----- Variables globales -----
////////////////////////////////////////////////////////////////////////////////

// Cada elemento de estos arrays corresponde a un tipo de contenido, así que se debe llenar siguiendo el mismo orden que en la definición de constantes.

// Conjuntos de caracteres válidos. A partir del índice 2 (TC_NUMERICO), los elementos son expresiones regulares.
var caractValidos = new Array( "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzƒŠŒšœŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþ'Çç-ºª. \t\r\n\f",
										 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzƒŠŒšœŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþ'Çç-ºª. \t\r\n\f",
										 "ABCDEFGHIJKLMNÑOPQRSTUVWXYZÇabcdefghijklmnñopqrstuvwxyzç.- \t\r\n\f",
										 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_.- \t\r\n\f",
										 "[+-]?[0-9]+(\.[0-9]+)?",
										 "^\\d+$",
										 "^\\w(\\.|-|\\w)*@\\w+((\\.|-)\\w+)*\\.\\w{2,3}$",
										 "^(((\\+34)?[69]\\d{8})|(\\+[0124-9]\\d{2,})|(\\+3[0-35-9]\\d+))$",
										 "^\\d{5}$",
										 "^(\\d{1,2})(/|-)(\\d{1,2})(/|-)(\\d{4})$" );

// Mensajes indicativos de contenido válido.
var contValido = new Array( "sólo letras, otros caracteres especiales y espacios en blanco",
									 "sólo letras, otros caracteres especiales, dígitos y espacios en blanco",
									 "sólo letras, sin tilde",
									 "sólo dígitos y comas, sin espacios",
									 "sólo dígitos, sin espacios",
									 "una dirección de e-mail válida, sin espacios",
									 "una cadena de entre 2 y 25 caracteres, formada por letras minúsculas, dígitos, guiones ( - ), caracteres de subrayado ( _ ) o puntos ( . ), y cuyo primer carácter debe ser una letra minúscula o un dígito",
									 "un prefijo internacional comenzando con '+' (opcional para España) seguido de dígitos (sin espacios; en España, 9 dígitos, el primero de los cuales es un 6 o un 9)",
									 "cinco dígitos (00000 a 99999), sin espacios",
									 "datos del tipo día-mes-año, en dígitos (1 o 2 el día y el mes, 4 el año), separados por '/' o por '-' y sin espacios; por ejemplo, 1/5/2000 o 07-10-1998" );


////////////////////////////////////////////////////////////////////////////////
// ----- Funciones auxiliares -----
////////////////////////////////////////////////////////////////////////////////

														// (Boolean) Indica si la cadena pasada como parámetro es válida según el tipo de contenido especificado.
function cadenaValida(cadena,tipoCont )	// Usa la variable global "caractValidos".
{
	if ( tipoCont <= TC_LOGIN ) {
		for ( var i = 0; i < cadena.length; ++i )
			if ( caractValidos[ tipoCont ].indexOf( cadena.charAt( i ) ) == -1 )
				return false;
		return true;
	} else if ( tipoCont == TC_FECHA ) {
		if ( ( new RegExp( caractValidos[ tipoCont ] ) ).exec( cadena ) != null ) {
			var diasDelMes = new Array( 31, bisiesto( RegExp.$5 ) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
			return RegExp.$2 == RegExp.$4 && RegExp.$3 >= 1 && RegExp.$3 <= 12 && RegExp.$1 >= 1 && RegExp.$1 <= diasDelMes[ RegExp.$3 - 1 ];
		} else
			return false;
	} else
		return ( new RegExp( caractValidos[ tipoCont ] ) ).test( cadena );
}


function sinContenido(cadena) 				// (Boolean) Indica si la cadena pasada como parámetro es vacía o sólo contiene espacios en blanco (tabuladores, etc.).
{
	return !( new RegExp( "\\S" ) ).test( cadena );
}


function bisiesto(a) 							// (Boolean) Indica si el año pasado como parámetro es bisiesto.
{
	return ( a % 4 == 0 ) && ( ( a % 100 != 0 ) || ( a % 400 == 0 ) );
}

////////////////////////////////////////////////////////////////////////////////
// ----- Métodos auxiliares -----
////////////////////////////////////////////////////////////////////////////////

function err_msg(msg)							// (Boolean) Muestra un cuadro de diálogo con un mensaje de error y devuelve el enfoque al elemento de formulario que ha invocado el método. Devuelve siempre "false". Debe asignarse a cada elemento del formulario.
{
	sw = 1;
	alert(msg);
	this.focus();
	return false;
}



