/**
 * @author marceluda - vosorio
 */

/*
 * Documentacion:
 * 
 * Este archivo contiene la definicion de la clase de intercambio ajax bautizada "Mu".
 * La clase Mu cuenta con las siguientes funciones y propiedades:
 * 
 * La funcion principal de mu es la funcion traer()
 * Sintaxis:
 * traer(pagina_web, [variables|formulario], [string_pto_de_anclaje|funciones])
 * 
 * variables es un string de la forma:
 * "varaible1=valor1&variable2&valor2"
 * se pueden incluir en valores los caracteres & y = con \& y \= respectivamente
 * 
 * el formulario debe ser un objeto de un formulario existente
 * 
 * el punto de anclaje debe ser el Id de un div u otro objeto contenedor existente.
 * 
 * las funciones recibirán como primer argumento un objeto cuyas propiedades son:
 * 
 * en EXITO
 * 
 * tId  	The unique, incremented id for the transaction.
 * status 	The HTTP status code of the resulting transaction.
 * statusText 	The message associated with the HTTP status.
 * getResponseHeader[label] 	Returns the string value of the specified header label.
 * getAllResponseHeaders 	All returned HTTP headers available as a string. Each label-value pair is delimited by "\n".
 * responseText 	The server's response as a string.
 * responseXML 	The server's response as a XML document.
 * argument
 * 
 * en ERROR
 * tId  	The transaction id
 * status 	0 error or -1 in abort
 * statusText 	"communication failure"
 * argument 	The user-defined argument or arguments as defined as the callback object.
 * 
 * 
 */

//********************************* ZONA DE PRUEBA ***************************
var lolo=1;



var debug=0;
/*debug*/if(debug >= 1) alert("Esta activado el debug");



function prueba(pagina){
	var handleSuccess = function(o){
		//var rta=xml2tabla(o.responseXML) ;
		//var tmp = document.getElementById("ancla");
		//tmp.appendChild(rta);
		lolo=o.responseXML ;
	}
	var handleFailure = function(o){
		alert("Error en lolo");
		lolo=o.responseXML ;
	}
	var callback =
	{
	  success:handleSuccess,
	  failure: handleFailure,
	  argument: ['foo','bar']
	};
	var request = YAHOO.util.Connect.asyncRequest('POST', pagina, callback);
}


//********************************* ZONA DE PRUEBA ***************************

function undeline(param){
	param.style.textDecoration="none";
	
}


function line(param){
	param.style.textDecoration="underline";
}



/****************************************************************************************
***********************************INCIO DE LA CLASE*************************************
*****************************************************************************************/

var debug=0;
/*debug*/if(debug >= 1) alert("Esta activado el debug");


var mu={
	//VARIABLES GLOBALES
	timeout: 50000,
	http_method: 'POST',
	show_loading_window:true,
	
	//Da el tamaño del broser. es utilizado para el msg de cargando.
	browser_size: function(){
		var bodyWidth = document.documentElement.clientWidth;
		var bodyHeight = document.documentElement.clientHeight;
	
	    var bodyWidth, bodyHeight;
	    if (self.innerHeight){ // all except Explorer
	       bodyWidth = self.innerWidth;
	       bodyHeight = self.innerHeight;
	    } else if (document.documentElement && document.documentElement.clientHeight) {
	       // Explorer 6 Strict Mode
	       bodyWidth = document.documentElement.clientWidth;
	       bodyHeight = document.documentElement.clientHeight;
	    } else if (document.body) {// other Explorers
	       bodyWidth = document.body.clientWidth;
	       bodyHeight = document.body.clientHeight;
	    }
	    return [bodyWidth,bodyHeight];
	},
	
	//variables que contienen objetos div del msg de cargando
	
	tapa: "vacio",
	tapa_msg: "vacio",
	
	//funciones que crean los div
	crear_tapa: function(){
		mu.tapa=document.createElement("DIV");
		document.body.appendChild(mu.tapa);
		mu.tapa.style.visibility="hidden";
		mu.tapa.style.position='absolute';
		mu.tapa.style.zIndex=1;
		mu.tapa.style.display='block';
		
	},
	crear_msg: function(){
		mu.tapa_msg=document.createElement("DIV");
		document.body.appendChild(mu.tapa_msg);
		mu.tapa_msg.style.visibility="hidden";
		mu.tapa_msg.style.border='3px solid #000';
		mu.tapa_msg.style.padding='2px';
		mu.tapa_msg.style.zIndex=100;
		mu.tapa_msg.style.position='absolute';
		mu.tapa_msg.innerHTML="<h2 align='center'><br>Aguarde, cargando . . .</h2>";
		
		mu.tapa_msg.style.width='400px';
		mu.tapa_msg.style.height='200px';
		mu.tapa_msg.style.backgroundColor='#fff';
		
	},

	
	loading_show: function(menzaje){
		//var div_tapa=document.getElementById("tapa");
		if (mu.tapa=="vacio") mu.crear_tapa();
		if (mu.tapa_msg=="vacio") mu.crear_msg();
		

		mu.tapa.style.top=Math.max(document.body.scrollTop,document.documentElement.scrollTop) + 'px';
		mu.tapa.style.left=Math.max(document.body.scrollLeft,document.documentElement.scrollLeft) + 'px';
		mu.tapa.style.visibility="visible";		
		var br_size = mu.browser_size();
	    mu.tapa.style.width = br_size[0] + 'px';
	    mu.tapa.style.height = br_size[1] + 'px';
		
		var tapa_msg_left=(br_size[0] - mu.tapa_msg.offsetWidth )/2 ;
		var tapa_msg_top=(br_size[1]-mu.tapa_msg.offsetHeight)/2 ;
		
		mu.tapa_msg.style.left= tapa_msg_left + 'px';
		mu.tapa_msg.style.top= tapa_msg_top + 'px';
		mu.tapa_msg.style.visibility="visible";
		
	},

	loading_close: function(){
		if (mu.tapa=="vacio") mu.crear_tapa();
		if (mu.tapa_msg=="vacio") mu.crear_msg();
		
		mu.tapa.style.visibility="hidden";		

		mu.tapa_msg.style.visibility="hidden";
	},


	//Función para limpiar los Nodos != 1 (nodos sin informacion y por ende inútiles)
	//del objeto xml que se le pase como argumento
	limpiar_nodos: function(x){
		var tmp=x.childNodes.length;
		for(i=0;i<tmp;i++){
			if(x.childNodes[i].nodeType!=1){
				x.removeChild(x.childNodes[i]);
				i++;
				i--;
				tmp--;
			}
		}
	},
	
	
	xml2texto: function(xml,atributos){
		var xml_texto=xml.getElementsByTagName('texto');
		var div=document.createElement('DIV');


		div.innerHTML="";
		for(i=0;i<xml_texto.length;i++){
			if(xml_texto[i].getAttribute('formato')=="html"){
				for(j=0;j<xml_texto[i].childNodes.length;j++){
					div.innerHTML+=xml_texto[i].childNodes[j].nodeValue;
				}
			}else{
				var tmp_txt="";
				for(j=0;j<xml_texto[i].childNodes.length;j++){
					tmp_txt+=xml_texto[i].childNodes[j].nodeValue;
				}
				var texto=document.createTextNode(tmp_txt);
				div.appendChild(texto);
			}
		}
		
		//Cierro la ventana de "Cargando"
		if (mu.show_loading_window) mu.loading_close();

		return div;
	},
	
	
	/*Funcion para convertir un "DOCUMENTO XML" que contenga un objeto de tabla
	//en un objeto tabla que pueda ser agregado a cualquier parte de la pagina con
	//la funcion appendChild()
	
	atributos puede ser:
	----------------------
		clase		   : Indica una clase para toda la tabla
		
		columnas:		 Indica solo las columnas a mostrar
				ej: nombre_tag#descripcion_a_mostrar_en_cabecera
				
		Ej de XML
			<datos tipo='tabla'>
				<tabla>
					<fila>
						<col_1></col_1>
						<col_2></col_2>
					</fila>
					<fila>
						<col_1></col_1>
						<col_2></col_2>
					</fila>
				</tabla>
			</datos>
	*/
	xml2tabla: function(xml,atributos){

		var xml_tabla= xml.getElementsByTagName('tabla');
		var tabla = document.createElement('TABLE');
		var tbody = document.createElement('TBODY');
		
		//Proceso los atributos -------------------------------------------------------------------
		tabla.appendChild(tbody);
		if(atributos && atributos!=""){
			var atr_array=atributos.split(';');
			for(i=0;i<atr_array.length;i++){
				atr_array[i]=atr_array[i].split(':');
			}
			for(i=0;i<atr_array.length;i++){
				switch (atr_array[i][0]) {
				   case "clase":
				      tabla.setAttribute('class',atr_array[i][1]);
				      break;
				   case "columnas":
					  //aca se seleccionan las columnas
					  var columnas_aux=atr_array[i][1].split(",");
					  break;
				   case "id":
				      //seteamos el id
					  tabla.setAttribute('id',atr_array[i][1]);
					  break;
				   default:
				      alert("El atributo no existe en la funcion xml2tabla");
				}
			
			}
		}
		//-----------------------------------------------------------------------------------------

		//si las columnas no estaban determiandas tomamos todas las que haya
		if( ! columnas_aux ){
			var cabeceras=xml_tabla[0].getElementsByTagName('fila')[0];
			var columnas_aux = new Array;
			var cont=0;
			for(i=0;i<cabeceras.childNodes.length;i++){
				if(cabeceras.childNodes[i].nodeType!=1) continue;
				columnas_aux[cont]=cabeceras.childNodes[i].nodeName;
				cont++;
			}
		}
		
		lolo=columnas_aux;
		
		var fila = document.createElement('TR');

		var columnas = new Array;
		var titulo="";
		
		//Procesa la fila de cabecera ---------------------------------------------------------
		for(i=0;i<columnas_aux.length;i++){
			
			//Desarmo el objeto "Columna" (nombre_tag#descripcion a mostrar)
			var columna_obj = columnas_aux[i].split("#");
			columnas[i]=columna_obj[0];
			
			titulo=columnas[i];

			if (columna_obj.length >1) titulo=columna_obj[1];				
			var th=document.createElement('TH');
			
			//var th_data=document.createTextNode(titulo);
			th.innerHTML=titulo;

			//th.appendChild(th_data);
			fila.appendChild(th);
		}



		tbody.appendChild(fila);
		
		//el for para cada fila ---------------------------------------------------------------
		for(i=0;i<xml_tabla[0].childNodes.length;i++){

			if(xml_tabla[0].childNodes[i].nodeType!=1) continue;
			if(xml_tabla[0].childNodes[i].tagName=='fila'){
				var fila=document.createElement('TR');
				//for para cada columna
				for(j=0;j<columnas.length;j++){
					var tmp_data="";
					if (columnas[j] != '') tmp_data=xml_tabla[0].childNodes[i].getElementsByTagName(columnas[j]);
					if ((tmp_data != null) && (tmp_data != undefined) ){
						var td=document.createElement('TD');
						
						if(columnas[j]== "ordenanza"){
							if(tmp_data[0].childNodes.length==1){
								
								var ordenanza=tmp_data[0].firstChild.nodeValue.split('#');								
								
								td.innerHTML="<b>"+ordenanza[0]+"</b><br><a href='"+ordenanza[1]+"' onMouseOut='javascript:undeline(this);' onMouseOver='javascript:line(this);' class='a' target='_blank'>[.pdf]</a>&nbsp;&nbsp;<a href='"+ordenanza[2]+"'  class='a' onMouseOut='javascript:undeline(this);' onMouseOver='javascript:line(this);'  target='_blank'>[.gif]</a>";								
							}
							
						}else{
							if(tmp_data[0].childNodes.length==1) td.innerHTML=tmp_data[0].firstChild.nodeValue;			
						}						
						fila.appendChild(td);
					}
				}
				tbody.appendChild(fila);
			}
		}
		//-------------------------------------------------------------------------------------
	
		//Cierro la ventana de "Cargando"
		if (mu.show_loading_window) mu.loading_close();

		return tabla;
		
	},
	





	
	//Funcion para convertir un "DOCUMENTO XML" que contenga un objeto combos
	/*
		Parametros:
		xml:			el xml en el ojeto DOM
		combo_name:		En caso de que el combo existiese, se pasa el nombre para que se use este combo
		atributos:		Si se desea agregar al combo inexistente los atributos
	
		Estrucutura del Xml requerido:
			<datos>
				<item>
					<option_value></option_value>
					<option_text></option_text>
				</item>
			</datos>	
	
	*/	
	xml2combo: function(xml,combo_name,atributos){
		var xml_tabla= xml.getElementsByTagName('item');
		
		if (combo_name == '') {
				var combo = document.createElement('select');
				
				if(atributos && atributos!=""){
					var atr_array=atributos.split(';');
					for(i=0;i<atr_array.length;i++){
						atr_array[i]=atr_array[i].split(':');
					}
					for(i=0;i<atr_array.length;i++){
						switch (atr_array[i][0]) {
						   case "clase":
							  combo.setAttribute('class',atr_array[i][1])
							  break;
		
						   case "nombre":
							  combo.setAttribute('name',atr_array[i][1])
							  combo.setAttribute('id',atr_array[i][1])
							  break;
		
						   default:
							  alert("El atributo no existe en la funcion xml2combo");
						}
					
					}
				}
		}else{
			var combo=document.getElementById(combo_name);
		}	


		
				for (i=0;i<xml_tabla.length;i++) { //Recorro de cada "Item"
						  var option= document.createElement('option');
							
						for (var j=0;j<xml_tabla[i].childNodes.length;j++)	{ //Recorro de cada "Hijo"
							if (xml_tabla[i].childNodes[j].nodeType != 1) continue;

							//alert("vero: leyendo "+xml_tabla[i].childNodes[j].nodeName + " valor:"+xml_tabla[i].childNodes[j].firstChild.nodeValue);
							
							//Controlo en donde guarda lo que tomo
							if (xml_tabla[i].childNodes[j].nodeName == "option_value") {
								option.value= xml_tabla[i].childNodes[j].firstChild.nodeValue ;
							}else if (xml_tabla[i].childNodes[j].nodeName == "option_text") {
								option.innerText= xml_tabla[i].childNodes[j].firstChild.nodeValue ;
								option.text= xml_tabla[i].childNodes[j].firstChild.nodeValue ;
							}											
						}
						
						if (debug == 1) alert("Value:"+option.value+" texto:"+option.innerText + " xml_:"+xml_tabla.length);
						//Se agrega el option al combo				
						combo.appendChild(option);
		
				}

		
		//Cierro la ventana de "Cargando"
		if (mu.show_loading_window) mu.loading_close();

		return combo;
		
	},
	


	
	//Funcion para convertir un "DOCUMENTO XML" que contenga varios objetos combos
	/*
		Parametros:
		xml:			el xml en el ojeto DOM
		combos_names:	el nombre de los combos separados por ,   porque  no me anda la fcion de getAtribute
	
		Estrucutura del Xml requerido:
			<datos tipo='multicombo'>
				<combo nombre='nombre_del_combo_existente'>
						<item>
							<option_value></option_value>
							<option_text></option_text>
						</item>
				</combo>
			</datos>	
	
	*/

	ok: function(xml){					
		var lavel = document.getElementById("datosReg");
		var lavelpie = document.getElementById("datosRegpie");
		var tag;

		tag= xml.getElementsByTagName('total');
		lavel.innerHTML=tag[0].firstChild.nodeValue;
		lavelpie.innerHTML=tag[0].firstChild.nodeValue;
		
	},
	
	
	

	xml2multicombo: function(xml,combos_nombres){
		var xml_combos= xml.getElementsByTagName('combo');
		
		var combos_nombres_vec=	combos_nombres.split(",");
		
		for (k=0;k<xml_combos.length;k++) { //Recorro de cada "Combo"
	
			//Armo el combo segun el atributo  del nombre
			//var combo_nombre=xml.getAttribute("nombre");
			var combo_nombre=combos_nombres_vec[k];
			var combo=document.getElementById(combo_nombre);
			
			
			//Leo el Item
			if (combo_nombre != undefined ) {
				var xml_tabla= xml.getElementsByTagName('combo')[k]; 
				xml_tabla=xml_tabla.getElementsByTagName('item');
				
				
				for (i=0;i<xml_tabla.length;i++) { //Recorro de cada "Item"
	
					var option= document.createElement('option');
	
			 
					for (var j=0;j<xml_tabla[i].childNodes.length;j++)	{ //Recorro de cada "Hijo"
						if (xml_tabla[i].childNodes[j].nodeType != 1) continue;
	
	
	
							//Controlo en donde guarda lo que tomo
							if (xml_tabla[i].childNodes[j].nodeName == "option_value") {
								option.value= xml_tabla[i].childNodes[j].firstChild.nodeValue ;
							}else if (xml_tabla[i].childNodes[j].nodeName == "option_text") {
								option.innerText= xml_tabla[i].childNodes[j].firstChild.nodeValue ;
								option.text= xml_tabla[i].childNodes[j].firstChild.nodeValue ;
							}											
	
					}//for de los nodos
					combo.appendChild(option);
				}//for de los nodos
			}
		}//for de los combos
	
		
		//Cierro la ventana de "Cargando"
		if (mu.show_loading_window) mu.loading_close();

		
	},
	







	//Funcion para formatear el string de variables que se va a enviar al servidor de aplicaciones
	formatear_uri: function(o){
		var arg=o.replace("\\&",encodeURIComponent("&"));
		var arg=arg.replace("\\=",encodeURIComponent("="));
		var arg_array=arg.split("&");
		for(i=0;i<arg_array.length;i++){
			arg_array[i]=arg_array[i].split("=");
		}
	
		var arg_array2 = Array();
	
		for(i=0;i<arg_array.length;i++){
	
			var tmpvar1=arg_array[i][0].replace(/^\s+|\s+$/g,"");
			var tmpvar2=arg_array[i][1].replace(/^\s+|\s+$/g,"");
			tmpvar2 = encodeURIComponent(tmpvar2);
			var tmpvar= tmpvar1 + "=" + tmpvar2;
			arg_array2.push(tmpvar);
		}
		var variables=arg_array2.join("&");
		return variables ;
	},
	
	/* Funcion que envia datos al servidor de aplicaciones. Sus argumentos son:
	   --------------------------------------------------------------------------
		donde: pagina: string : Nombre de una pagina
		
		punto_de_anclaje: string : Nombre de un objeto contenedor donde se mostraran los resultados. Esto implica que la funcion traer() hara un procesamiento automatico de los datos obtenidos
		
		funciones: array : un array de dos funciones [funcion_exito,funcion_error] que procesarán los resultados obtenidos. Para hacerlo se le pasará como único argumento una clase con las siguientes propiedades:
		
			en caso de exito
		
				* tId The unique, incremented id for the transaction.
				* status The HTTP status code of the resulting transaction.
				* statusText The message associated with the HTTP status.
				* getResponseHeader[label] Returns the string value of the specified header label.
				* getAllResponseHeaders All returned HTTP headers available as a string. Each label-value pair is delimited by "\n".
				* responseText The server's response as a string.
				* responseXML The server's response as a XML document.
				* argument 
		
			En caso de error
		
				* tId The transaction id
				* status 0 error or -1 in abort
				* statusText "communication failure"
				* argument The user-defined argument or arguments as defined as the callback object. 
		
		lista_de_variebles: string : es una lista de variables de la forma "variable1=valor1&variable2=valor2". Si se requiere usar algun caracter especial se puede pasar por medio del caracter de escape \ (ej: "var1=AT\\&T")
		formulario: object : es un objeto que hace referencia a un formulario existente desde donde se tomaran los datos para enviar a la pagina.
		parametros: string : es una lista de parametros de la forma "parama1:valor;param2:valor;param3:val1,val2,val3". Estos parametros serán pasados a la funcion de formateo en caso de que traer() funcione en modo de procesamiento automatico. En ese caso, los posibles parametros dependeran de la funcion de formateo en si. 
		
	    mu.traer(pagina,[punto_de_anclaje|funciones],[lista_de_variables|formulario],parametros); */
	
	traer: function(){
		//Revisamos que los argumentos sean correctos
		if(arguments.length < 2){alert("Las variables de la funcion son menos de 2");return -1 ;}
		if(typeof arguments[0] == "string"){
			var pagina=arguments[0];
		}else{
			alert("El primer argumento debe ser el nombre de una pagina y ud no paso un string"); return ;
		}
		if(typeof arguments[1]=="string"){
			if( ! document.getElementById(arguments[1])){
				if (mu.show_loading_window) mu.loading_close();	
				alert("El elemento pasado como argumento no existe");
				return -1;
			}
			var ancla=arguments[1];
		}else if(arguments[1].length==2){
			if(typeof arguments[1][0]=="function" && typeof arguments[1][1]=="function"){
				var funciones=arguments[1];
			}else{
				if (mu.show_loading_window) mu.loading_close();	
				alert("Alguno de los argumentos ingresados no es una funcion"); return;
			}
		}else{
			if (mu.show_loading_window) mu.loading_close();	
			alert("El segundo argumento debe ser un Id de anclaje o un array de 2 funciones"); return;
		}
		if(arguments[2]){
			if(typeof arguments[2]=="string"){
				var variables=arguments[2];
			}else if(typeof arguments[2]=="object"){
				if(arguments[2].tagName=="form" || arguments[2].tagName=="FORM"){
					var formulario=arguments[2];
				}else{
					if (mu.show_loading_window) mu.loading_close();	
					alert("El tercer argumento debe ser formulario");return;
				}
			}else{
				if (mu.show_loading_window) mu.loading_close();	
				alert("El tercer argumento debe ser un objeto formulario o una lista de variables");return;
			}
		}
		if(arguments[3]){
			if(typeof arguments[3]=="string"){
				var argumentos=arguments[3];
			}else{
				if (mu.show_loading_window) mu.loading_close();	
				alert("El cuarto argumento debe ser un string");return;
			}
		}

		if(arguments[4]){
			if(typeof arguments[4]=="string"){
				var functiontotal=arguments[4];
			}else{
				if (mu.show_loading_window) mu.loading_close();	
				alert("El cuarto argumento debe ser un string");return;
			}
		}
		
		
		
		
		// inicializo el Loading de que esta cargandomarce
		if (mu.show_loading_window) mu.loading_show();	

				
		//Si le pasan un PUNTO DE ANCLAJE
	
		if (ancla){
			var arg_proc;
			if(argumentos) var arg_proc=argumentos;
			var tmp_timeout=this.timeout;

			
			
			
			//CLASE DE RESPUESTA ********************************************************
			var callback = {
				
				//FUNCION EXITO *********************************************************
				 success: function(o){


					//var xml=o.responseXML.getElementsByTagName('datos')[0];
					var xml=o.responseXML;					
					xml= xml.getElementsByTagName('datos')[0];
					
					lolo=xml;
					
					
					var tipo=xml.getAttribute("tipo");
					
					switch (tipo) {
						case "tabla":
							var tabla=mu.xml2tabla(xml,o.argument.arg);
							var ancla=document.getElementById(o.argument.ancla);
							ancla.appendChild(tabla);
							if (mu.show_loading_window) mu.loading_close();	
						break;

						case "multicombo":
							var tabla=mu.xml2multicombo(xml,o.argument.arg);
							var ancla=document.getElementById(o.argument.ancla);
							ancla.appendChild(tabla);
							if (mu.show_loading_window) mu.loading_close();	
						break;
						
						case "texto":
							var texto=mu.xml2texto(xml,o.argument.arg);
							var ancla=document.getElementById(o.argument.ancla);
							ancla.appendChild(texto);
							if (mu.show_loading_window) mu.loading_close();	
						break;
						
						default:
							if (mu.show_loading_window) mu.loading_close();	
							alert("procesar_exito: No se pueden procesar los datos debido a que falta el tag TIPO en el XML de respuesta");
					}
					
					if (functiontotal){
						var array;
						array=functiontotal.split(":");
						
						if ((array[0]=="ok") && (array[1]=="true")){
							mu.ok(xml);	
						}	
					}
		
					
				 },
				 
				 //FUNCION FALLA ********************************************************
				 failure: function(o){
				 	//alert("ERROR");
					if (mu.show_loading_window) mu.loading_close();	
					var div=document.getElementById(o.argument.ancla);
					div.innerHTML = "<p>ERROR<\/p>";
				 },
				 argument: { ancla: ancla, arg: arg_proc },
				 timeout: tmp_timeout
			}
		}
		//Si le pasan FUNCIONES
		else if(funciones){
			var arg_proc;
			if(argumentos) var arg_proc=argumentos;
			var tmp_timeout=this.timeout;
			
			
			//CLASE DE RESPUESTA ********************************************************
			
			var callback = {
				success: funciones[0],
				failure: funciones[1],
				argument: arg_proc,
				timeout: tmp_timeout
			}
			
			

		}else {
			if (mu.show_loading_window) mu.loading_close();	
			alert("Hubo un error al procesar el segundo argumento.");
			return -1;
		}

		
		

		//Si le pasan VARIABLES
		if (variables){
			if(variables==""){
				var control = YAHOO.util.Connect.asyncRequest(this.http_method, pagina, callback);
			}else{
				var variables=this.formatear_uri(variables);
				var control = YAHOO.util.Connect.asyncRequest(this.http_method, pagina, callback, variables);
			}
		}else if (formulario){
			YAHOO.util.Connect.setForm(formulario);
			var control = YAHOO.util.Connect.asyncRequest(this.http_method, pagina, callback);
		}else{
			alert("Hubo un error al procesar el trecer argumento.");
			return -1;
		}

		return control;
		
	}
	
	
	

}



						
