//-- Funciones de la pagina administracion --


// ******* PETICION DE AYUDA DE USUARIOS
/**
 * Peticion ajax para la precarga de la ayuda de usuarios.
 */
function cargar_ayuda() {
	if (window.XMLHttpRequest) {
		peticion_http = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		peticion_http = new ActiveXObject("Microsoft.XMLHTTP");
	}
	// PREPARAMOS LA FUNCION DE RESPUESTA
	peticion_http.onreadystatechange = respuesta_ayudausuario;
	// ABRIMOS LA PETICION INDICANDO TIPO Y URL
	peticion_http.open('GET', crear_URL(1), true);
	// MANDAMOS PETICION
	peticion_http.send(null);
}
/**
 * Proceso de la respuesta por parte delservidor.
 */
function respuesta_ayudausuario() {
	if (peticion_http.readyState == 4) {
		if (peticion_http.status == 200) {
			crear_ayudausuarios(peticion_http.responseText);
		} else {
			// TRATAMIENTO DE PETICIONES ERRONEAS
			tratar_Respuesta(peticion_http.status);
		}
	}
}
/**
 * Proceso de creacion del contenido de la ayuda de clientes.
 * 
 * @param texto_json
 */
function crear_ayudausuarios(texto_json) {
	var objeto_ayudaclientes = eval('({"lista_usuarios":' + texto_json + '})');
	var tabla = document.getElementById("cuerpo_ayuda");
	var ayuda_usuario = document.getElementById("tabla_ayuda");
	// PROCESO DE VACIADO DE LA TABLA PARA NO REPETIR LOS DATOS
	if (ayuda_usuario.rows.length > 1) {
		for (var i = ayuda_usuario.rows.length; i > 1; i--) {
			// alert(i);
			ayuda_usuario.deleteRow(i - 1);
		}
	}
	// TRATAMOS TODOS LOS CLIENTES DE LA TABLA
	for (var i = 0; i < objeto_ayudaclientes.lista_usuarios.length; i++) {
		// CREO UNA FILA NUEVA
		var fila = tabla.insertRow(i);
		// INSERTAMOS UNA CELDA EN LA FILA
		var celda_nueva = fila.insertCell(0);
		celda_nueva.width = 60;
		var elemento_nuevo = document.createElement('input');
		elemento_nuevo.id = "cli" + (i + 1);
		elemento_nuevo.name = "checkito";
		elemento_nuevo.type = "checkbox";
		elemento_nuevo.onclick = new Function('comprobar_seleccion(this)');
		celda_nueva.appendChild(elemento_nuevo);
		// INSERTAMOS LA SEGUNDA CELDA
		celda_nueva = fila.insertCell(1);
		celda_nueva.width = 130;
		elemento_nuevo = document.createElement('input');
		elemento_nuevo.id = "nom" + (i + 1);
		elemento_nuevo.type = "text";
		elemento_nuevo.size = 12;
		elemento_nuevo.readonly = "readonly";
		elemento_nuevo.value = objeto_ayudaclientes.lista_usuarios[i].nombreUsuario;
		celda_nueva.appendChild(elemento_nuevo);
	}
}
// ******* FIN PETICION DE AYUDA DE USUARIOS

// ********** PETICION DE DATOS UNA VEZ SELECCIONADO POR EL USUARIO EN LA AYUDA
/**
 * Peticion ajax para la precarga de la ayuda de usuarios.
 */
function peticion_seleccion_usuario() {
	if (window.XMLHttpRequest) {
		peticion_http = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		peticion_http = new ActiveXObject("Microsoft.XMLHTTP");
	}
	// PREPARAMOS LA FUNCION DE RESPUESTA
	peticion_http.onreadystatechange = respuesta_datosusuario;
	// ABRIMOS LA PETICION INDICANDO TIPO Y URL
	peticion_http.open('GET', crear_URL(2), true);
	// MANDAMOS PETICION
	peticion_http.send(null);
}

/**
 * Proceso de la respuesta por parte delservidor.
 */
function respuesta_datosusuario() {
	if (peticion_http.readyState == 4) {
		if (peticion_http.status == 200) {
			cargar_usuarioJson(peticion_http.responseText);
		} else {
			// TRATAMIENTO DE PETICIONES ERRONEAS
			tratar_Respuesta(peticion_http.status);
		}
	}
}

/**
 * Cargamos la respuesta del servidor que vendra en texto, pero en este caso, en
 * formato JSON.
 * 
 * @param {Object}
 *            respuesta
 */
function cargar_usuarioJson(respuesta) {
	var objeto_json = eval('(' + respuesta + ')');
	document.getElementById("nombreUsuario").value = objeto_json.nombreUsuario;
	document.getElementById("password").value = objeto_json.password;
	// LA CONVERSION POR PARTE DEL EVAL DE LAS FECHAS NO PERMITE ACCEDER AL
	// OBJETO
	if (objeto_json.fechaAlta != null) {
		document.getElementById("fechaAlta").value = convertir_fecha(objeto_json.fechaAlta);
	} else {
		document.getElementById("fechaAlta").value = "";
	}
	if (objeto_json.fechaBaja != null) {
		document.getElementById("fechaBaja").value = convertir_fecha(objeto_json.fechaBaja);
	} else {
		document.getElementById("fechaBaja").value = "";
	}
	var opciones = document.getElementById("rol").options;
	for (var i = 0; i < opciones.length; i++) {
		if (opciones[i].value == objeto_json.roles.codigoRol) {
			opciones[i].selected = "selected";
		} else {
			opciones[i].selected = "";
		}
	}
}

// ******* FIN PETICION DE DATOS DE USUARIO

// ********* FUNCIONES DE LA VENTANA DE AYUDA ********************

/**
 * Comprueba el usuario seleccionado y pasa los valores a los campos del
 * formulario de la parte superior del pedido falta implementar la peticion AJAX
 * para el resto de la informacion del cliente
 */
function tratar_seleccion_usuario() {
	mostrar_ayuda(false);
	var clientes = document.getElementsByName("checkito");
	for (var i = 1; i <= clientes.length; i++) {
		var nombre_cli = "cli" + i;
		var nom_cli = "nom" + i;
		var elemento = document.getElementById(nombre_cli);
		if (elemento.checked) {
			document.getElementById("nombreUsuario").value = document
					.getElementById(nom_cli).value;
			elemento.checked = false;
			peticion_seleccion_usuario(document.getElementById("nombreUsuario").value);
		}
	}
}

/**
 * Accion de salir de la ayuda sin seleccionar nada, por lo tanto anulamos la
 * posible seleccion echa por el usuario
 */
function anular_seleccion_cliente() {
	var clientes = document.getElementsByName("checkito");
	for (var i = 1; i <= clientes.length; i++) {
		nombre_cli = "cli" + i;
		document.getElementById(nombre_cli).checked = false;
	}
	mostrar_ayuda(false);
}

/**
 * Proceso de conversion de fechas.
 */
function convertir_fecha(fecha) {
	var texto_fecha = fecha.date + "/" + fecha.month + "/"
			+ (fecha.year + 1900);
	return texto_fecha;
}

/**
 * Controla la visibilidad de la capa de ayuda de usuarios.
 * 
 * @param {Object}
 *            visibilidad Si vale true se muestra la ventana de ayuda y si vale
 *            false se oculta.
 */
function mostrar_ayuda(visibilidad) {
	var capa_ayuda = document.getElementById("capa_ayudausuarios");
	var capa_botones = document.getElementById("capa_botones");
	if (visibilidad) {
		capa_ayuda.style.visibility = "visible";
		capa_botones.style.visibility = "visible";
	} else {
		capa_ayuda.style.visibility = "hidden";
		capa_botones.style.visibility = "hidden";
	}
}

/**
 * Comprueba si hay otro check seleccionado anteriormente y lo deselecciona para
 * que solo se puede tener seleccionado uno
 * 
 * @param {Object}
 *            check_seleccionado Checkbox seleccionado por el usuario.
 */
function comprobar_seleccion(check_seleccionado) {
	var clientes = document.getElementsByName("checkito");
	for (var i = 1; i <= clientes.length; i++) {
		var nombre_cli = "cli" + i;
		if (nombre_cli != check_seleccionado.id) {
			var elemento = document.getElementById(nombre_cli);
			if (elemento.checked) {
				elemento.checked = false;
			}
		}
	}
}

/**
 * CALCULAMOS DINAMICAMENTE LOS VALORES DE LA URL DE LA PETICION A REALIZAR.
 * <br/>1 CARGA DE AYUDA USUARIOS 2 DATOS DE USUARIO SELECCIONADO
 * 
 * @param {Object}
 *            tipo_peticion VALOR NUMERICO QUE INDICARA LA PETICION A REALIZAR
 * @return {TypeName} URL CREADA PARA LA PETICION A FALTA DE PARAMETROS
 */
function crear_URL(tipo_peticion) {
	// VALORES DE LA URL.
	var puerto_servidor = location.port;
	var servidor_web = location.hostname;
	var aplicacion = location.pathname;
	// AL NO SER LA PRIMERA PETICION ELIMINAMOS EL SERVLET ANTERIOR
	aplicacion = aplicacion.substring(0, aplicacion.indexOf("/", 1));
	// VALORES DEL TIPO PETICION
	if (tipo_peticion == 1) {
		com_cliente = "ayuda_usuarios";
	}
	if (tipo_peticion == 2) {
		com_cliente = "datos_usuarios&usuario="
				+ document.getElementById("nombreUsuario").value;
	}
	var url_pattern = "/Controlador_AJAX";
	var url_peticion = "http://" + servidor_web + ":" + puerto_servidor
			+ aplicacion + url_pattern + "?tipo_operacion=";
	url_peticion = url_peticion + com_cliente;
	return url_peticion;
}

/**
 * Proceso de tratamiento de las respuestas del protocolo HTTP. (sin
 * implementar.)
 * 
 * @param codigo_respuesta
 */
function tratar_Respuesta(codigo_respuesta) {
	if (codigo_respuesta == 200) {
		// OK
	}
	if (codigo_respuesta == 301) {
		// MOVIDO DEL SERVIDOR
	}
	if (codigo_respuesta == 304) {
		// EN PETICIONES GET CONDICIONALES NO SE MODIFICA EL RECURSO
	}
	if (codigo_respuesta == 307) {
		// EL RECURSO PEDIDO ESTA TEMPORALMENTE CAMBIADO DE URL
	}
	if (codigo_respuesta == 400) {
		// PETICION INCORRECTA POR ERROR DE SINTAXSIS
	}
	if (codigo_respuesta == 401) {
		// FALTA DE AUTENTICACION EN SERVIDOR (PROCESO PROPIO DEL SERVIDOR )
	}
	if (codigo_respuesta == 403) {
		// RECURSO DESCONOCIDO
	}
	if (codigo_respuesta == 404) {
		// RECURSO NO ENCONTRADO
	}
	if (codigo_respuesta == 405) {
		// METODO NO ACCESIBLE
	}
	if (codigo_respuesta == 408) {
		// TIME OUT
	}
	if (codigo_respuesta == 414) {
		// TAMAŅO DE PETICION DEMASIADO GRANDE
	}
	if (codigo_respuesta == 500) {
		// ERROR INTERNO DEL SERVIDOR
	}
	if (codigo_respuesta == 501) {
		// EL SERVIDOR NO SOPORTA EL TIPO DE PETICION REALIZADA
	}
	if (codigo_respuesta == 502) {
		// DATOS DE PETICION ERRONEOS
	}
	if (codigo_respuesta == 503) {
		// SERVICIO NO DISPONIBLE, HABITUALMENTE POR SOBRECARGA
	}
	if (codigo_respuesta == 504) {
		// TIEMPO DE ESPERA EN EL ENLACE SOBREPASADO
	}
	if (codigo_respuesta == 505) {
		// VERSION DE HTTP NO SOPORTADA
	}
}
