
function mostrarResultado(result,lugar)
{
	var console=document.getElementById(lugar);
	if(!console)
	{
		alert("mostrarResultado(): Error, no se encuentra "+lugar);
		return;
	};
	console.innerHTML='';
	console.innerHTML=result;
}

function subirArchivo(parametros,idLugar)
{
	//'parametros es un vector que recibe la lista de los nombres de los elementos que contienen a los parametros
	return enviarPeticion('subir_archivo.php',parametros.idLugar,false,'POST');
}

function enviarPeticion(funcionPeticion,parametros,idLugar,asincrono,metodo)
{
	
// 	alert("enviarPeticion(): Hemos entrado en enviarPeticion con los parametros: "+parametros);
	//parametros es un vector que recibe la lista de los nombres de los elementos que contienen a los parametros
    	var peticion=null;
	var param=null;
	var sparam='';
	var correcto=true;
	var i;
	var enviar;

	//inicializamos valores
	if (!metodo)
	{
		metodo='GET'; //valor por defecto
	}
	if (metodo=='GET')
	{
		enviar=null;
	}
	else if (metodo=='POST')
	{
		enviar=parametros;
	}
	else
	{
		alert("enviarPeticion(): Error, metodo desconocido"+metodo);
		return;
	}


	//creamos el objeto XMLHttpRequest
    	try
	{
        	peticion=new XMLHttpRequest();
    	}
    	catch(e)
	{
        	try
		{
            		peticion=new ActiveXObject("Microsoft.XMLHTTP");
        	}
        	catch(e)
		{
            		alert('Su navegador no soporta Ajax, seria recomendable que lo actualizara');
            		return false;
        	}
   	}
   	peticion.onreadystatechange=function()
	{
		if(peticion.readyState==4)
		{
			if(peticion.status==200)
			{
				if (idLugar)
				{
					eval('mostrarResultado(peticion.responseText,idLugar)');		
				}		
			}
			else if (peticion.status==404)
			{
				alert("enviarPeticion(): Error, el fichero "+funcionPeticion+" no existe o no se puede leer");
			}
			else
			{
				alert("enviarPeticion(): Error en el servidor, El servicio se encuentra temporalmente fuera de servicio");
			}
		}	
	}
	
	funcionPeticion+='?';

	//cargamos los parametros

	if (parametros.length)
	{	
		for (i=0;i<parametros.length;i++)
		{
			//alert("parametros[i]= "+parametros[i])
			if ((parametros[i].indexOf('%'))==-1)
			{
				if ((parametros[i].indexOf('='))==-1) 	
				{
					param=document.getElementById(parametros[i]);
					if (!param)
					{
						alert("enviarPeticion(): Error, No se ha encontrado "+parametros[i]);
						correcto=false;
					}
					else
					{
						if (param.value)
						{
// 							alert ("Añadimos el parametro:"+param.value);
							sparam+=escapar(param.value)+':';
// 							alert("Hemos añadido:"+escapar(param.value));
						}
						else
						{
 							alert("enviarPeticion(): Debe introducir un valor para "+parametros[i]);
							correcto=false;
						}
					}
				}
				else
				{
// 					alert("Añadimos "+parametros[i]);
					funcionPeticion+=parametros[i]+"&";
				}
			}
			else
			{
// 				alert("Añadimos el parametro"+parametros[i].substr(0,parametros[i].length-1));
				sparam+=escapar (parametros[i].substr(0,parametros[i].length-1)) +':';
			}
		}
	}

	if (sparam!='')
	{
		funcionPeticion+="parametros="+sparam.substr(0,sparam.length-1);
	}
	else
	{
		//borramos el ultimo &
		
		funcionPeticion=funcionPeticion.substr(0,funcionPeticion.length-1);
	}
	
	//Realizamos la peticion si todo es correcto
	if (correcto)
	{
		//si el metodo es GET pasamos funcionPeticion tal cual
		//si es POST tenemos que sacar los parametros y meterlos en la variable enviar

		if (metodo=='POST')
		{
			enviar=funcionPeticion.substr(funcionPeticion.indexOf('?')+1,funcionPeticion.length);
			funcionPeticion=funcionPeticion.substr(0,funcionPeticion.indexOf('?'));
		}

		peticion.open(metodo,funcionPeticion,asincrono);
// 		alert("Realizamos la peticion con "+funcionPeticion+" y metodo="+metodo+" enviar="+enviar);
		
		peticion.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		peticion.send(enviar);	
	
		// Si la funcion es sincrona, la funcion onreadystatechange no se ejecuta, hay que hacerlo ahora.
		if (!asincrono)
		{
			if (idLugar)
			{
				eval('mostrarResultado(peticion.responseText,idLugar)');
			}
		}
	}
// 	alert(">"+peticion.responseText+"<");
	return peticion.responseText;
}

function insertar(parametros,idLugar,asincrono)
{
// 	alert("los parametros son: "+parametros);
	parametros[parametros.length]="class=Control";
	parametros[parametros.length]="op=insertar";
	
	return enviarPeticion("src/operacion.php",parametros,idLugar,asincrono);
}

function leer(Clase,parametros,idLugar,asincrono)
{
	//Leer tiene condiciones por lo que hay que escapar los parametros
	var i;
// 	alert("Igor, conjones");
// 	alert("Entrando en leer con Clase="+Clase+" parametros="+parametros+" idLugar="+idLugar+" asincrono="+asincrono);

	parametros[parametros.length]="class="+Clase;
	parametros[parametros.length]="op=leer";
	if (!window.asincriono)
	{
		asincrono=false;
	}

	return procesarResultado(enviarPeticion("src/operacion.php",parametros,idLugar,asincrono));
}

function borrar(Clase,condicion,idLugar,asincrono)
{
	parametros=Array('class='+Clase,'op=borrar',condicion);
	if (!window.asincriono)
	{
		asincrono=false;
	}
// 	alert (parametros);	
	return enviarPeticion("src/operacion.php",parametros,idLugar,asincrono);
}

function modificar(parametros,idLugar,asincrono)
{
// 	alert("toi en modificar");
	parametros[parametros.length]="class=Control";
	parametros[parametros.length]="op=modificar";
	if (!window.asincriono)
	{
		asincrono=false;
	}
	return enviarPeticion("src/operacion.php",parametros,idLugar,asincrono);
	


}

function procesarResultado(cadena)
{
	var resultado=cadena.split("#");	
	var i;

// 	for (i=0;i<resultado.length;i++)
// 	{
// 		
// 		resultado[i]=desescapar(resultado[i]);
// 	}
// 	alert("resultado escapado:"+resultado);

	return resultado;
}


function peticion(operacion,lugar,parametros)
{
// 	alert ("Peticion: op="+operacion+" lugar="+lugar+" parametros="+parametros);
	if (parametros)
	{
		parametros[parametros.length]='op='+operacion;
		parametros[parametros.length]='class=Control';

	}
	else
	{
		parametros=Array('op='+operacion,'class=Control');

	}

	return enviarPeticion('src/operacion.php',parametros,lugar,false,'POST');
}


function escapar(cadena)
{
// 	alert("estamos en escapar con la cadena "+cadena);
// 	cadena=cadena.replace(/[-]/g,"_-_resta_-_")
	cadena=cadena.replace(/\’/g,"_-_cosarara_-_");
	cadena=cadena.replace(/\*/g,"_-_asterisco_-_");
	cadena=cadena.replace(/\+/g,"_-_suma_-_");
	cadena=cadena.replace(/\=/g,"_-_igual_-_");
	cadena=cadena.replace(/\#/g,"_-_almohadilla_-_");
	cadena=cadena.replace(/\&/g,"_-_ampersan_-_");
	cadena=cadena.replace(/\!/g,"_-_cierradmiracion_-_");
	cadena=cadena.replace(/\¡/g,"_-_abreadmiracion_-_");
	cadena=cadena.replace(/\¿/g,"_-_abreinterrogacion_-_");
	cadena=cadena.replace(/\?/g,"_-_cierrainterrogacion_-_");
	cadena=cadena.replace(/\$/g,"_-_dolar_-_");
	cadena=cadena.replace(/\€/g,"_-_euro_-_");
	cadena=cadena.replace(/\%/g,"_-_porcentaje_-_");
	cadena=cadena.replace(/\|/g,"_-_tuberia_-_");
	cadena=cadena.replace(/\//g,"_-_barra_-_");
	cadena=cadena.replace(/\\/g,"_-_barrainvertida_-_");
	cadena=cadena.replace(/\:/g,"_-_dospuntos_-_");
	cadena=cadena.replace(/\;/g,"_-_puntoycoma_-_");
// 	cadena=cadena.replace(/\./g,"_-_punto_-_");
	cadena=cadena.replace(/\,/g,"_-_coma_-_");
	cadena=cadena.replace(/\</g,"_-_menor_-_");
	cadena=cadena.replace(/\>/g,"_-_mayor_-_");
	cadena=cadena.replace(/\^/g,"_-_circunflejo_-_");
	cadena=cadena.replace(/\'/g,"_-_comillasimple_-_");
	cadena=cadena.replace(/\"/g,"_-_doblecomilla_-_");
	cadena=cadena.replace(/\@/g,"_-_arroba_-_");
	cadena=cadena.replace(/\~/g,"_-_cirgulilla_-_");
	cadena=cadena.replace(/\·/g,"_-_puntodeltres_-_");
	cadena=cadena.replace(/\(/g,"_-_abreparentesis_-_");
	cadena=cadena.replace(/\)/g,"_-_cierraparentesis_-_");
	cadena=cadena.replace(/\´/g,"_-_apostrofe_-_");
	cadena=cadena.replace(/\{/g,"_-_abrellave_-_");
	cadena=cadena.replace(/\}/g,"_-_cierrallave_-_");
	cadena=cadena.replace(/\[/g,"_-_abrecorchete_-_");
	cadena=cadena.replace(/\]/g,"_-_cierracorchete_-_");
	cadena=cadena.replace(/\¬/g,"_-_negacion_-_");
	cadena=cadena.replace(/\n/g,"_-_barraene_-_");
// 	alert("estamos saliendo de escapar con la cadena "+cadena);
	return cadena;

}

function desescapar(cadena)
{
	cadena=cadena.replace(/_-_cosarara_-_/g,'\’');
	cadena=cadena.replace(/_-_barraene_-_/g,"\n");
	cadena=cadena.replace(/_-_resta_-_/g,"-");
	cadena=cadena.replace(/_-_asterisco_-_/g,"*");
	cadena=cadena.replace(/_-_suma_-_/g,"+");
	cadena=cadena.replace(/_-_igual_-_/g,"=");
	cadena=cadena.replace(/_-_almohadilla_-_/g,"#");
	cadena=cadena.replace(/_-_ampersan_-_/g,"&");
	cadena=cadena.replace(/_-_cierradmiracion_-_/g,"!");
	cadena=cadena.replace(/_-_abreadmiracion_-_/g,"¡");
	cadena=cadena.replace(/_-_abreinterrogacion_-_/g,"¿");
	cadena=cadena.replace(/_-_cierrainterrogacion_-_/g,"?");
	cadena=cadena.replace(/_-_dolar_-_/g,"$");
	cadena=cadena.replace(/_-_euro_-_/g,"€");
	cadena=cadena.replace(/_-_porcentaje_-_/g,"%");
	cadena=cadena.replace(/_-_tuberia_-_/g,"|");
	cadena=cadena.replace(/_-_barra_-_/g,"/");
	cadena=cadena.replace(/_-_barrainvertida_-_/g,"\\");
	cadena=cadena.replace(/_-_dospuntos_-_/g,":");
	cadena=cadena.replace(/_-_puntoycoma_-_/g,";");
// 	cadena=cadena.replace(/_-_punto_-_/g,".");
	cadena=cadena.replace(/_-_coma_-_/g,",");
	cadena=cadena.replace(/_-_menor_-_/g,"<");
	cadena=cadena.replace(/_-_mayor_-_/g,">");
	cadena=cadena.replace(/_-_circunflejo_-_/g,"^");
	cadena=cadena.replace(/_-_comillasimple_-_/g,"'");
	cadena=cadena.replace(/_-_doblecomilla_-_/g,"\"");
	cadena=cadena.replace(/_-_arroba_-_/g,"@");
	cadena=cadena.replace(/_-_cirgulilla_-_/g,"~");
	cadena=cadena.replace(/_-_puntodeltres_-_/g,"·");
	cadena=cadena.replace(/_-_abreparentesis_-_/g,"(");
	cadena=cadena.replace(/_-_cierraparentesis_-_/g,")");
	cadena=cadena.replace(/_-_apostrofe_-_/g,"´");
	cadena=cadena.replace(/_-_abrellave_-_/g,"{");
	cadena=cadena.replace(/_-_cierrallave_-_/g,"}");
	cadena=cadena.replace(/_-_abrecorchete_-_/g,"[");
	cadena=cadena.replace(/_-_cierracorchete_-_/g,"]");
	cadena=cadena.replace(/_-_negacion_-_/g,"¬");

	return cadena;
}