//variables globales
	var activeAjax = false;
 	var request = null;
	var queryString = null;
	var htmlElements = [];
	var propiedades = null;
	
  function requestAjax(url,secciones,opciones)
  {
	
	initOptions();
	setOptions(opciones);
  	
	if(!propiedades.activeAjax) {
		 //se inicializan las opciones correspondientes
		 //se asignan las opciones ingresadas a las propiedades generales
		queryString = propiedades.parameters;
		if(propiedades.forma!=null){
			queryString += getFormAsString(propiedades.forma);
		}		
	  	document.location.href = url + '?' + propiedades.parameters + '&' + queryString;
		return false;
	}
	else {
	    //Chequeando conexiones existentes
		if (request != null && request.readyState != 0 && request.readyState != 4){
			//hay una conexión activa
		}else{
	        //initOptions(); //se inicializan las opciones correspondientes
			//setOptions(opciones); //se asignan las opciones ingresadas a las propiedades generales
		    //se concatenan los valores del formulario enviados en la petición
		    queryString = "";
			if(propiedades.forma!=null){
				queryString = propiedades.parameters + getFormAsString(propiedades.forma);
			}else{
				queryString = propiedades.parameters;
				
			}	
		    if(window.XMLHttpRequest){ // No Internet Explorer
	        	request = new XMLHttpRequest();
	    	}else if (window.ActiveXObject){ // Internet Explorer
	        	request = new ActiveXObject("Msxml2.XMLHTTP");
	        	if (!request){
	            	request=new ActiveXObject("Microsoft.XMLHTTP");
	        	}
	     	}
	    	if(request){  // el objeto de peticion se creo correctamente
				htmlElements = secciones;
	            request.onreadystatechange = processStateChange; //se procesan los cambios de estado
		  		request.open(propiedades.method, url, propiedades.asynchronous); // se inicializa el objeto de la petición
				var tipoContenido = propiedades.contentType + "; charset=" + propiedades.encoding;
		  		request.setRequestHeader("Content-Type",tipoContenido);
		        request.send(queryString); //se envia la petición
	    	}else{
	    		alert('No se pudo realizar la petición');
	    	}
	    }
    }    	
  }

  function initOptions(){
  	propiedades = {
            method:			'post',
            asynchronous: 	true,
            contentType:  	'application/x-www-form-urlencoded',
            encoding:     	'UTF-8',
            parameters:   	'',
            popWait: 		true,
            indexForm:		0,
            evalScripts:	false,
	    forma:            null,
	    activeAjax: false
	}
  }
  function setOptions(opciones){
	propiedades.parameters= opciones.parameters;
	propiedades.popWait=opciones.popWait;
      propiedades.indexForm=opciones.indexForm;
      propiedades.evalScripts=opciones.evalScripts;
	propiedades.forma=opciones.forma;
	propiedades.activeAjax=opciones.activeAjax;
  }

  function processStateChange() 
  {
		
  		switch(request.readyState){
			case 1:
				if(propiedades.popWait){
                	popWait('div_wait');
				}break;
			case 2: break;
			case 3: break;
			case 4:	//completa	
				killWait('div_wait');
    			if (request.status == 200){ //respuesta OK
					//llamada a la función que actualiza la página
				
    				updateHTML(htmlElements, request.responseText);
	  			}
	    }
  }
 
 function getFormAsString(formulario)
 {
  	//se inicializa el string de retorno
 	returnString ="";
 	
  	//se obtienen los valores del formulario
 	formElements = formulario.elements;
 	
 	//se inicia un bucle atravez del arreglo de los elementos del formulario, y se va construyendo la url
 	//de la siguiente forma /strutsaction.do&name=value
	for ( var i=0; i<formElements.length; i++ ){
	 	if(encodeURIComponent(formElements[i].type)!="button" && encodeURIComponent(formElements[i].type)!="submit"){
 			//se codifica el valor de cada elemento, para que se interprete de forma correcta
 			if(encodeURIComponent(formElements[i].type)=="file") {
				//Aca no hace nada, para no caer en el problema del texto incompatible	
			}
			else if(encodeURIComponent(formElements[i].type)!="checkbox" && encodeURIComponent(formElements[i].type)!="radio")
				returnString=returnString+"&"+encodeURIComponent(formElements[i].name)+"="+encodeURIComponent(formElements[i].value);
			else if(encodeURIComponent(formElements[i].type)=="checkbox" && encodeURIComponent(formElements[i].checked)=="true")
				returnString=returnString+"&"+encodeURIComponent(formElements[i].name)+"="+encodeURIComponent(formElements[i].value);
			else if(encodeURIComponent(formElements[i].type)=="radio" && encodeURIComponent(formElements[i].checked)=="true")
				returnString=returnString+"&"+encodeURIComponent(formElements[i].name)+"="+encodeURIComponent(formElements[i].value);	
			
		}
 	}
 	
 	//retorno de los valores
 	return returnString; 
 }
 function getInnerHTMLById(id, responseText){
	var tagName = document.getElementById(id).nodeName.toLowerCase();
	var startTagName = "<" + tagName;
	var finishTagName = "</" + tagName;
	var startPos = responseText.indexOf('>', responseText.indexOf('id="' + id + '"'));
	var startPosTemp = startPos;
	var finishPos = startPos;
	
	do{
	    startPosTemp = responseText.indexOf(startTagName, startPosTemp + 1);
	    finishPos = responseText.indexOf(finishTagName, finishPos + 1);
	} while (startPosTemp != -1 && startPosTemp < finishPos);

	return responseText.substring(startPos + 1, finishPos);
 }
 
 function updateHTML(ids, responseText){
 	var newHTML = null;
 	
 	for(var i = 0; i < ids.length; i++){
 		if (document.getElementById(ids[i])) {
 			newHTML = getInnerHTMLById(ids[i], responseText);
 			document.getElementById(ids[i]).innerHTML = newHTML;
 			
 			/*Si se requieren actualizar los mensajes se debe cambiar el alto de
 			la sección que muestra el contenido principal de la página*/
 			/*if (ids[i] == 'mensajes') {
 				setHeightPage();
 			}*/
 			
 			//se evaluan los scripts dentro de la respuesta
 			if (propiedades.evalScripts) {
 				newHTML.evalScripts(); 
 			}
	 				
 		}	
 	}
 }
function popWait(id)
{
	procesando = document.getElementById(id);
	if(procesando == null ){
		var disabledZone = document.createElement('div');
      	disabledZone.setAttribute('id', 'disabledZone');
		disabledZone.id=id;
      	disabledZone.style.position = "absolute";
      	disabledZone.style.zIndex = "200";
      	disabledZone.style.right = "550px";
      	disabledZone.style.top = "150px";
     	disabledZone.style.width = "100%";
      	disabledZone.style.height = "100%";
		document.body.appendChild(disabledZone);
		var messageZone = document.createElement('div');
      	messageZone.setAttribute('id', 'messageZone');
      	messageZone.style.position = "absolute";
     	messageZone.style.top = "0px";
      	messageZone.style.right = "0px";
		messageZone.style.backgroundImage = "url(images/cargando.gif)";
		messageZone.style.backgroundRepeat = "no-repeat";
		messageZone.style.backgroundPosition = "center bottom";
		messageZone.style.margin = "0px";
		messageZone.style.padding = "92px";
      	disabledZone.appendChild(messageZone);
	}
}

function killWait(id){
	procesando = document.getElementById(id);
	if(procesando != null){
		document.body.removeChild(procesando); 
	}
}

function requestAjaxEnter(url,secciones,opciones)
{
	var keycode;
	if (window.event)
		keycode = window.event.keyCode;
	else return true;

	if (keycode == 13){
		requestAjax(url,secciones,opciones);
   		return false;
  	}else return true;
}

function getFormByFormName( formName ){
	var frm = null;
	if(window.XMLHttpRequest){ // No Internet Explorer
		for( index=0;index<document.forms.length;index++){
			var frmAux = document.forms[index];
			if(frmAux.name == formName ){
				frm = frmAux;
				break;
			}
		}        	
    }else if (window.ActiveXObject){ // Internet Explorer
		frm = document.forms( formName );
    }
    return frm;
}
function requestAjaxEnterCargarArbolPerfiles()
{
	var keycode;
	if (window.event)
		keycode = window.event.keyCode;
	else return true;

	if (keycode == 13){
		//requestAjax(url,secciones,opciones);
		requestAjax('contenidoByUsuario.ks',['div_pagina'],{parameters: 'btnVerUsuarios=1',evalScripts:true, forma:contenidoByUsuarioForm});
   		return false;
  	}else return true;
}
