//----------------------------------------------------------------------------------------------------------------------
// Archivo: formularios.js
// Version: 1.0
// Fecha: Octubre 2009
// Autor: elRevoltijo-Network.com
// Descripcion: funciones javascript para formularios
//----------------------------------------------------------------------------------------------------------------------

// Codigos de error
var codigosError = [];
codigosError[-1] = "Error #1: Conexion con el servidor.";
codigosError[2] = "Error #2: Datos de entrada incorrectos.";
codigosError[3] = "Error #3: Entrada duplicada en la BD.";
codigosError[4] = "Error #4: Operacion no permitida.";
codigosError[5] = "Error #5: Registro no encontrado en la BD.";

var codigosErrorSimples = [];
codigosErrorSimples[-1] = "Error #1";
codigosErrorSimples[2] = "Error #2";
codigosErrorSimples[3] = "Error #3";
codigosErrorSimples[4] = "Error #4";
codigosErrorSimples[5] = "Error #5";

//----------------------------------------------------------------------------------------------------------------------
// FUNCION formularios_contarCaracteres. Funcion para contar los caracteres de un campo de texto y mostrarlo en otro
//----------------------------------------------------------------------------------------------------------------------
// Parametros: $origen, id del campo de texto del que se cuentan los caracteres
//             $destino, id del campo de texto en el que se indica el numero de caracteres
//----------------------------------------------------------------------------------------------------------------------
function formularios_contarCaracteres(origen, destino) {
	document.getElementById(destino).value = document.getElementById(origen).value.length;
}



//----------------------------------------------------------------------------------------------------------------------
// Funcion formularios_vaciarCampo. Funcion para vaciar un campo de un formulario.
//----------------------------------------------------------------------------------------------------------------------
// Parametros: campo, campo del formulario que se va a vaciar
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: false
//----------------------------------------------------------------------------------------------------------------------
function formularios_vaciarCampo(campo) {
	campo.value = "";
	return false;
}

//----------------------------------------------------------------------------------------------------------------------
// Funcion Campo. Funcion para seleccionar todo el texto de un campo de un formulario.
//----------------------------------------------------------------------------------------------------------------------
// Parametros: campo, campo del formulario que se va a seleccionar
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: false
//----------------------------------------------------------------------------------------------------------------------
function formularios_seleccionarCampo(input) {
	document.getElementById(input).select();
}



//----------------------------------------------------------------------------------------------------------------------
// Funcion formularios_habilitarCampo. Funcion para habilitar un campo de un formulario.
//----------------------------------------------------------------------------------------------------------------------
// Parametros: campo, campo del formulario que se va a habilitar
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: false
//----------------------------------------------------------------------------------------------------------------------
function formularios_habilitarCampo(campo) {
	document.getElementById(campo).disabled = false;
	document.getElementById(campo).className = "input_enabled";
	return false;
}

//----------------------------------------------------------------------------------------------------------------------
// Funcion formularios_inhabilitarCampo. Funcion para inhabilitar un campo de un formulario.
//----------------------------------------------------------------------------------------------------------------------
// Parametros: campo, campo del formulario que se va a inhabilitar
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: false
//----------------------------------------------------------------------------------------------------------------------
function formularios_inhabilitarCampo(campo) {
	document.getElementById(campo).disabled = true;
	document.getElementById(campo).className = "input_disabled";
	return false;
}

//----------------------------------------------------------------------------------------------------------------------
// Funcion formularios_habilitarBoton. Funcion para habilitar un boton de un formulario.
//----------------------------------------------------------------------------------------------------------------------
// Parametros: campo, boton del formulario que se va a habilitar
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: false
//----------------------------------------------------------------------------------------------------------------------
function formularios_habilitarBoton(boton) {
	document.getElementById(boton).disabled = false;
	return false;
}

//----------------------------------------------------------------------------------------------------------------------
// Funcion formularios_inhabilitarBoton. Funcion para inhabilitar un boton de un formulario.
//----------------------------------------------------------------------------------------------------------------------
// Parametros: campo, boton del formulario que se va a inhabilitar
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: false
//----------------------------------------------------------------------------------------------------------------------
function formularios_inhabilitarBoton(boton) {
	document.getElementById(boton).disabled = true;
	return false;
}



//----------------------------------------------------------------------------------------------------------------------
// Funcion formularios_validarURL. Funcion para compobar la validez de una URL.
//----------------------------------------------------------------------------------------------------------------------
// Parametros: url, url que se va a validar
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: true si es valido
//           false si no es valido
//----------------------------------------------------------------------------------------------------------------------
function formularios_validarURL(url) {
   // Expresiones regulares anteriores:
   //	 . var re=/^(http:|https:|ftp:)\/\/[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*(\-[a-zA-Z0-9_]+)?\.[a-zA-Z0-9_]{2,6}(\:[0-9]{2,6})?(\/{1,2}(\:|\-|[a-zA-Z0-9_]\|\.|\?|\/|\=|\&|\%|\@|\\|\,)*)?$/;
   //	 . var re=/((\s+(http[s]?:\/\/)|(www\.))?(([a-z][-a-z0-9]+\.)?[a-z][-a-z0-9]+\.(([a-zA-Z]{2}|aero|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel)(\.[a-z]{2,2})?))\/?[a-z0-9._\/~#&=;%+?-]+[a-z0-9\/#=?]{1,1})/;
   //  . var re=/^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)( [a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$/;
   // Detalle de la expresion regular
   //  . "(http|https|ftp|)\:\/\/" -> protocolo: http://, https:// o ftp://
   //  . "[a-zA-Z0-9]([-.]?[0-9a-zA-Z])*\.[a-zA-Z0-9]{2,6}" -> nombre de dominio
   //  . "(\:[0-9]{2,6})?" -> puerto
   //  . "([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?" -> directorios y ficheros
	var re=/^(http|https|ftp|)\:\/\/[a-zA-Z0-9]([-.]?[0-9a-zA-Z])*\.[a-zA-Z0-9]{2,6}(\:[0-9]{2,6})?(\/[a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$/;
	return re.test(url);
}

//----------------------------------------------------------------------------------------------------------------------
// Funcion formularios_validarEmail. Funcion para compobar la validez de un email.
//----------------------------------------------------------------------------------------------------------------------
// Parametros: email, email que se va a validar
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: true si es valido
//           false si no es valido
//----------------------------------------------------------------------------------------------------------------------
function formularios_validarEmail(email) {
	var re=/^[a-zA-Z0-9_]+([\.-]?[a-zA-Z0-9_]+)*@[a-zA-Z0-9_]+([\.-]?[a-zA-Z0-9_]+)*(\.[a-zA-Z0-9_]{2,4})+$/;
	return re.test(email);
}

//----------------------------------------------------------------------------------------------------------------------
// Funcion formularios_validarNombreUsuario. Funcion para compobar la validez de un nombre de usuario.
//----------------------------------------------------------------------------------------------------------------------
// Parametros: nombreUsuario, nombre de usuario que se va a validar
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: true si es valido
//           false si no es valido
//----------------------------------------------------------------------------------------------------------------------
function formularios_validarNombreUsuario(nombreUsuario) {
	var re=/^[a-zA-Z]([a-zA-Z0-9_.])*$/;
	return re.test(nombreUsuario);
}

//----------------------------------------------------------------------------------------------------------------------
// Funcion formularios_validarClave. Funcion para compobar la validez de una clave unica.
//----------------------------------------------------------------------------------------------------------------------
// Parametros: clave, clave unica que se va a validar
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: true si es valida
//           false si no es valida
//----------------------------------------------------------------------------------------------------------------------
function formularios_validarClave(clave) {
	var re=/^[a-z]([a-z0-9-])*$/;
	return re.test(clave);
}

//----------------------------------------------------------------------------------------------------------------------
// Funcion formularios_validarColaborador. Funcion para compobar la validez de un colaborador
//----------------------------------------------------------------------------------------------------------------------
// Parametros: colaborador, colaborador que se va a validar
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: true si es valido
//           false si no es valido
//----------------------------------------------------------------------------------------------------------------------
function formularios_validarColaborador(colaborador) {
	var re=/^[a-z]([a-z0-9-])*$/;
	return (re.test(colaborador)) || (colaborador == "");
}

//----------------------------------------------------------------------------------------------------------------------
// formularios_crearClave(). Funcion que crea una clave unica a partir de una cadena de texto
//----------------------------------------------------------------------------------------------------------------------
// Parametros: $cadena, cadena de texto inicial
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: la clave unica
//----------------------------------------------------------------------------------------------------------------------
function formularios_crearClave(cadena) {
	// Pasamos a minusculas
	var clave = cadena.toLowerCase();
	var nuevo = "";
	
	
	// Construimos la clave
	for(i=0; i<clave.length; i++) {
		letra = clave.substring(i, i+1);

		// Sustituimos algunos caracteres especiales
		letra = letra.replace("á", "a").replace("â", "a").replace("ä", "a").replace("à", "a").replace("ª", "a");
		letra = letra.replace("é", "e").replace("ê", "e").replace("ë", "e").replace("è", "e");
		letra = letra.replace("í", "i").replace("î", "i").replace("ï", "i").replace("ì", "i");
		letra = letra.replace("ó", "o").replace("ô", "o").replace("ö", "o").replace("ò", "o").replace("º", "o");
		letra = letra.replace("ú", "u").replace("û", "u").replace("ü", "u").replace("ù", "u");
		letra = letra.replace(" ", "-").replace("_", "-");
		letra = letra.replace("ñ", "n");

		// Solo los caracteres que nos interesan
		if((letra >= 'a' && letra <= 'z') || (letra >= '0' && letra <= '9') || (letra == '-')) {
			nuevo = nuevo + letra;
		}
	}
	
	// Devolvemos la clave
	return nuevo;
}





//----------------------------------------------------------------------------------------------------------------------
// formularios_comprobarLongitudMaxima(). Funcion que comprueba la longitud maxima de un campo de texto
//----------------------------------------------------------------------------------------------------------------------
// Parametros: $campo, campo de texto sobre el que realizar la comprobacion
//             $span, identificador del span sobre el que mostrar el mensaje de error
//             $foco, campo sobre el que colocar el foco
//             $maximo, longitud maxima permitida
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: $error, booleano que indica si el text supera o no la longitud maxima permitida
//----------------------------------------------------------------------------------------------------------------------
function formularios_comprobarLongitudMaxima(campo, span, foco, maximo) {
	// Inicialmente no se ha superado la longitud maxima
	var error = false;
	
	// Comprobacion pertinente
	if (document.getElementById(campo).value.length > maximo) {
		document.getElementById(span).innerHTML = "Error: longitud maxima sobrepasada.";
		document.getElementById(foco).focus();
		error = true;
	}
	
	// Devolucion del error
	return error;
}

//----------------------------------------------------------------------------------------------------------------------
// formularios_comprobarValorInicial(). Funcion que comprueba si un campo de etiquetas esta vacio
//----------------------------------------------------------------------------------------------------------------------
// Parametros: $campo, campo de texto sobre el que realizar la comprobacion
//             $span, identificador del span sobre el que mostrar el mensaje de error
//             $foco, campo sobre el que colocar el foco
//             $valorInicial, valor inicial del campo de texto
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: $error, booleano que indica si el text supera o no la longitud maxima permitida
//----------------------------------------------------------------------------------------------------------------------
function formularios_comprobarValorInicial(campo, span, foco, valorInicial) {
	// Inicialmente no esta vacio
	var error = false;
	
	// Comprobacion pertinente
	if (document.getElementById(campo).value == valorInicial) {
		document.getElementById(span).innerHTML = "Error: no se puede dejar vac&iacute;o.";
		document.getElementById(foco).focus();
		error = true;
	}
	
	// Devolucion del error
	return error;
}

//----------------------------------------------------------------------------------------------------------------------
// formularios_comprobarClaveVacia(). Funcion que comprueba si un campo de clave unica esta vacio. En caso de estarlo,
//                                    habilita el campo de texto y modifica el boton de "habilitar"
//----------------------------------------------------------------------------------------------------------------------
// Parametros: $campo, campo de texto sobre el que realizar la comprobacion
//             $span, identificador del span sobre el que mostrar el mensaje de error
//             $foco, campo sobre el que colocar el foco
//             $boton, boton de "habilitar"
//             $valorInicial, valor inicial del campo de texto
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: $error, booleano que indica si el text supera o no la longitud maxima permitida
//----------------------------------------------------------------------------------------------------------------------
function formularios_comprobarClaveVacia(campo, span, foco, boton, valorInicial) {
	// Inicialmente no esta vacia
	var error = false;
	
	// Comprobacion pertinente
	if (document.getElementById(campo).value == valorInicial) {
		document.getElementById(span).innerHTML = "Error: no se puede dejar vacio.";
		document.getElementById(boton).value = "Deshabilitar";
		document.getElementById(campo).disabled = false;
		document.getElementById(campo).className = "input_enabled";
		document.getElementById(foco).focus();
		error = true;
	}
	
	// Devolucion del error
	return error;
}

//----------------------------------------------------------------------------------------------------------------------
// formularios_comprobarClaveValida(). Funcion que comprueba si un campo de clave unica es valido. En caso de no serlo,
//                                     habilita el campo de texto y modifica el boton de "habilitar"
//----------------------------------------------------------------------------------------------------------------------
// Parametros: $campo, campo de texto sobre el que realizar la comprobacion
//             $span, identificador del span sobre el que mostrar el mensaje de error
//             $boton, boton de "habilitar"
//             $foco, campo sobre el que colocar el foco
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: $error, booleano que indica si el text supera o no la longitud maxima permitida
//----------------------------------------------------------------------------------------------------------------------
function formularios_comprobarClaveValida(campo, span, foco, boton) {
	// Inicialmente es valido
	var error = false;
	
	// Comprobacion pertinente
	if(formularios_validarClave(document.getElementById(campo).value) == false) {
		document.getElementById(span).innerHTML = "Error: no v&aacute;lido.";
		document.getElementById(boton).value = "Deshabilitar";
		document.getElementById(campo).disabled = false;
		document.getElementById(campo).className = "input_enabled";
		document.getElementById(foco).focus();
		error = true;
	}
	
	// Devolucion del error
	return error;
}


//----------------------------------------------------------------------------------------------------------------------
// formularios_comprobarColaboradorValido(). Funcion que comprueba si un campo de colaborador es valido.
//----------------------------------------------------------------------------------------------------------------------
// Parametros: $campo, campo de texto sobre el que realizar la comprobacion
//             $span, identificador del span sobre el que mostrar el mensaje de error
//             $foco, campo sobre el que colocar el foco
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: $error, booleano que indica si el text supera o no la longitud maxima permitida
//----------------------------------------------------------------------------------------------------------------------
function formularios_comprobarColaboradorValido(campo, span, foco) {
	// Inicialmente es valido
	var error = false;
	
	// Comprobacion pertinente
	if(formularios_validarColaborador(document.getElementById(campo).value) == false) {
		document.getElementById(span).innerHTML = "Error: no v&aacute;lido.";
		document.getElementById(foco).focus();
		error = true;
	}
	
	// Devolucion del error
	return error;
}


//----------------------------------------------------------------------------------------------------------------------
// formularios_comprobarCamposDistintos(). Funcion que comprueba si dos campos de texto son distintos
//----------------------------------------------------------------------------------------------------------------------
// Parametros: $campo1, primer campo de texto sobre el que realizar la comprobacion
//             $campo2, segundo campo de texto sobre el que realizar la comprobacion
//             $span, identificador del span sobre el que mostrar el mensaje de error
//             $foco, campo sobre el que colocar el foco
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: $error, booleano que indica si dos campos de texto son distintos
//----------------------------------------------------------------------------------------------------------------------
function formularios_comprobarCamposDistintos(campo1, campo2, span, foco) {
	// Inicialmente es valido
	var error = false;
	
	// Comprobacion pertinente
	if ((document.getElementById(campo1).value) != (document.getElementById(campo2).value)) {
		document.getElementById(span).innerHTML = "Error: los datos no coinciden.";
		document.getElementById(foco).focus();
		error = true;
	}
	
	// Devolucion del error
	return error;
}

//----------------------------------------------------------------------------------------------------------------------
// formularios_comprobarValores2(). Funcion que comprueba si un campo de seleccion tiene una de las dos opciones
//----------------------------------------------------------------------------------------------------------------------
// Parametros: $campo, campo de texto sobre el que realizar la comprobacion
//             $span, identificador del span sobre el que mostrar el mensaje de error
//             $foco, campo sobre el que colocar el foco
//             $valor1, primer valor aceptado
//             $valor2, segundo valor aceptado
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: $error
//----------------------------------------------------------------------------------------------------------------------
function formularios_comprobarValores2(campo, span, foco, valor1, valor2) {
	// Inicialmente es valido
	var error = false;
	
	// Comprobacion pertinente
	if ((document.getElementById(campo).value != valor1) &&
			(document.getElementById(campo).value != valor2)) {
		document.getElementById(span).innerHTML = "Error: opci&oacute;n incorrecta.";
		document.getElementById(foco).focus();
		error = true;
	}
	
	// Devolucion del error
	return error;
}

//----------------------------------------------------------------------------------------------------------------------
// formularios_comprobarEmailValido(). Funcion que comprueba si un campo de email es valido.
//----------------------------------------------------------------------------------------------------------------------
// Parametros: $campo, campo de texto sobre el que realizar la comprobacion
//             $span, identificador del span sobre el que mostrar el mensaje de error
//             $foco, campo sobre el que colocar el foco
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: $error, booleano que indica si el email es valido
//----------------------------------------------------------------------------------------------------------------------
function formularios_comprobarEmailValido(campo, span, foco) {
	// Inicialmente es valido
	var error = false;
	
	// Comprobacion pertinente
	if(formularios_validarEmail(document.getElementById(campo).value) == false) {
		document.getElementById(span).innerHTML = "Error: no v&aacute;lido.";
		document.getElementById(foco).focus();
		error = true;
	}
	
	// Devolucion del error
	return error;
}

//----------------------------------------------------------------------------------------------------------------------
// formularios_comprobarURLValida(). Funcion que comprueba si un campo de URL es valido.
//----------------------------------------------------------------------------------------------------------------------
// Parametros: $campo, campo de texto sobre el que realizar la comprobacion
//             $span, identificador del span sobre el que mostrar el mensaje de error
//             $foco, campo sobre el que colocar el foco
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: $error, booleano que indica si el URL es valido
//----------------------------------------------------------------------------------------------------------------------
function formularios_comprobarURLValida(campo, span, foco) {
	// Inicialmente es valido
	var error = false;
	
	// Comprobacion pertinente
	if(formularios_validarURL(document.getElementById(campo).value) == false) {
		document.getElementById(span).innerHTML = "Error: no v&aacute;lido.";
		document.getElementById(foco).focus();
		error = true;
	}
	
	// Devolucion del error
	return error;
}

//----------------------------------------------------------------------------------------------------------------------
// formularios_comprobarUsuarioValido(). Funcion que comprueba si un campo de usuario es valido.
//----------------------------------------------------------------------------------------------------------------------
// Parametros: $campo, campo de texto sobre el que realizar la comprobacion
//             $span, identificador del span sobre el que mostrar el mensaje de error
//             $foco, campo sobre el que colocar el foco
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: $error, booleano que indica si el usuario es valido
//----------------------------------------------------------------------------------------------------------------------
function formularios_comprobarUsuarioValido(campo, span, foco) {
	// Inicialmente es valido
	var error = false;
	
	// Comprobacion pertinente
	if(formularios_validarNombreUsuario(document.getElementById(campo).value) == false) {
		document.getElementById(span).innerHTML = "Error: no v&aacute;lido.";
		document.getElementById(foco).focus();
		error = true;
	}
	
	// Devolucion del error
	return error;
}

//----------------------------------------------------------------------------------------------------------------------
// formularios_comprobarCamposIguales(). Funcion que comprueba si dos campos de texto son iguales
//----------------------------------------------------------------------------------------------------------------------
// Parametros: $campo1, primer campo de texto sobre el que realizar la comprobacion
//             $campo2, segundo campo de texto sobre el que realizar la comprobacion
//             $span, identificador del span sobre el que mostrar el mensaje de error
//             $foco, campo sobre el que colocar el foco
//----------------------------------------------------------------------------------------------------------------------
// Devuelve: $error, booleano que indica si dos campos de texto son iguales
//----------------------------------------------------------------------------------------------------------------------
function formularios_comprobarCamposIguales(campo1, campo2, span, foco) {
	// Inicialmente es valido
	var error = false;
	
	// Comprobacion pertinente
	if ((document.getElementById(campo1).value) == (document.getElementById(campo2).value)) {
		document.getElementById(span).innerHTML = "Error: los datos son iguales.";
		document.getElementById(foco).focus();
		error = true;
	}
	
	// Devolucion del error
	return error;
}

