// JavaScript Document

// Crea el objeto http Request para poder utilizar con ajax
function nuevo_ajax(){
	try {
		req = new XMLHttpRequest(); /* e.g. Firefox */
	} catch(e) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");  /* some versions IE */
		} catch (e) {
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");  /* some versions IE */
			} catch (E) {
	            alert('Su navegador no soporta AJAX');
				req = false;
			}
		}
	}
}

// Función ajax que carga una URL mediante POST o GET en un elemento de la página HTML
// Muestra un mensaje de carga mientras se carga la url y un mensaje de error si se da el caso
function ajax_carga_url(metodo, url, parametros, objDestino, msgCarga, msgError) {

		// Si hay un mensaje de carga
		if(msgCarga!=null){
			msgCarga='<div align="center"><img src="/_img/ajax_cargando_01.gif" border="0" align="absmiddle" /> ' + msgCarga + '</div>';
		// Sino, establece el mensaje por defecto
		}else{
			msgCarga='<div align="center"><img src="/_img/ajax_cargando_01.gif" border="0" align="absmiddle" /> Cargando... </div>';
		} // Fin if

		// Mensaje de error por defecto
		if(msgError==null){
			msgError='Error';
		} // Fin if

		// Nuevo obj ajax
		$.ajax({
       		url: url, // Url de la que se van a cargar los datos
	        type: metodo, // Indica el método que se va a usar
			data: parametros, // Parámetros que se pasan por el método indicado
	        async: true, // Determina que la carga del obj ajax sea síncrona o asíncrona
	        timeout: 3000, // Permite definir un tiempo de espera antes de ejecutar un obj ajax
	        //contentType: "application/x-www-form-urlencoded", // Establece el encabezado de página
	        //dataType: "script", // Tipo de documento que se carga
	        global: true, // Permite que el obj ajax obedezca/desobedezca las reglas de obj ajax que el usuario pone
	        ifModified: false, // Permite que el obj ajax se active solo si la pagina a cargar se ha modificado
	        processData: true, // Convierte el obj ajax a texto

			// Antes de empezar la carga
			// muestra el mensaje de carga
			beforeSend: function(objeto){
				$("#"+objDestino).html(msgCarga);
	        },
			
			// Si hubo un error en la carga
			// muestra el mensaje de error
	        error: function(objeto, quepaso, otroobj){
				$("#"+objDestino).html(msgError+': '+quepaso);
	        },
			
			// Si la carga ha tenido exito
	        success: function(datos){
				$("#"+objDestino).html(datos);
				//alert(datos);
	        }
		}); // Fin obj ajax

}

function mandar_formulario(tipo_envio, url, idformulario, objDestino, msgCarga, msgError){
	// Recoge todos los elementos seleccionados del formulario en una cadena de texto
	var obj = document.getElementById(idformulario);
	var long_form = obj.elements.length;
	var parametros = "";
	var separador = "";
	for (var i=0; i<long_form; i++) {

		// Los campos de seleccion que no esten seleccionados no los pases
		if( (obj.elements[i].type!="radio") && (obj.elements[i].type!="checkbox") ){
			//parametros += separador+obj.elements[i].name+'='+encodeURI(obj.elements[i].value);
			parametros += separador+obj.elements[i].name+'='+obj.elements[i].value;
			separador = "&";
		}else
		if( (obj.elements[i].type=="radio") && (obj.elements[i].checked==true) ){
			parametros += separador+obj.elements[i].name+'='+obj.elements[i].value;
			separador = "&";
		
		}else
		if( (obj.elements[i].type=="checkbox") && (obj.elements[i].checked==true) ){
			parametros += separador+obj.elements[i].name+'='+obj.elements[i].value;
			separador = "&";
		}
		
	}
	
	// Manda el formulario mediante ajax
	// Nuevo objeto ajax (Esto hay que hacerlo cada vez, y concretamente, por IE)
	nuevo_ajax();
	// Si se pudo crear el objeto http request de ajax
	if(req){
		// Si hay un mensaje de carga muestralo
		if(msgCarga!=null){
			output = '<div class="cab_clara" align="center"><img src="/__img/ajax_cargando_01.gif" border="0" align="absmiddle" /> ' + msgCarga + '</div>';
			document.getElementById(objDestino).innerHTML = output;
		}
		// Si es por GET añade los parametros a la url
		if(tipo_envio=='GET'){
			url = url+'?'+parametros;
			parametros = null; // Para que el send no mande nada, porq el send es para el POST
		}
		// Abre el objeto ajax
		req.open(tipo_envio,url,true);
		// Comprueba su estado
		req.onreadystatechange = function() {
			var output = '';
			// Si se ha cargado
			if(req.readyState == 4) {
				if(req.status == 200) {
					output = req.responseText;
					document.getElementById(objDestino).innerHTML = output;
				} else {
					document.getElementById(objDestino).innerHTML = msgError+"\n"+output;
				}
			}
		}

		// Define el tipo de codificacion de la pagina
		req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;');
		//req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=ISO-8859-1');

		// Envia los parametros (null si es por get, parametros si es por post)
		req.send(parametros);
	}

}





// Función ajax que carga una URL mediante POST o GET en un elemento de la página HTML
// Muestra un mensaje de carga mientras se carga la url y un mensaje de error si se da el caso
function ajax_carga_url2(metodo, url, parametros) {

		// Nuevo obj ajax
		$.ajax({
       		url: url, // Url de la que se van a cargar los datos
	        type: metodo, // Indica el método que se va a usar
			data: parametros, // Parámetros que se pasan por el método indicado
	        async: true, // Determina que la carga del obj ajax sea síncrona o asíncrona
	        timeout: 3000, // Permite definir un tiempo de espera antes de ejecutar un obj ajax
	        //contentType: "application/x-www-form-urlencoded", // Establece el encabezado de página
	        //dataType: "script", // Tipo de documento que se carga
	        global: true, // Permite que el obj ajax obedezca/desobedezca las reglas de obj ajax que el usuario pone
	        ifModified: false, // Permite que el obj ajax se active solo si la pagina a cargar se ha modificado
	        processData: true, // Convierte el obj ajax a texto

			// Antes de empezar la carga
			// muestra el mensaje de carga
			//beforeSend: function(objeto){
			//	$("#"+objDestino).html(msgCarga);
	        //},
			
			// Si hubo un error en la carga
			// muestra el mensaje de error
	        error: function(objeto, quepaso, otroobj){
				return false;
	        },
			
			// Si la carga ha tenido exito
	        success: function(datos){
				return true;
				//alert(datos);
	        }
		}); // Fin obj ajax

}



