// ajax.js
/*************************************Segundo Ejercicio*****************************************/
var xhr2;

function link(url){
  window.open(url,"ventana");
}

function select(formu,elemento){
   var formulario = document.forms[formu]; //formulario
   var campo= formulario[elemento]; //para acceder a los valores del text area campo.value  
   campo.focus();
   campo.select();
   //poner en el jsp  onclick="select('ConsultaForm','guia');"
}

function valida(formu,elemento){
   var formulario = document.forms[formu]; //formulario
   var campo= formulario[elemento]; //para acceder a los valores del text area campo.value
  
   
   if(validando(formu,elemento)){    
      //validar(); //descomentar para hablilitar la funcion ajax
      return true;
   }
   
   else{
      campo.focus();
      campo.select();
      return false;
   }
}


/*******************************************************************************
* Function    : valida()
* Language    : JavaScript
* Description : Realiza las siguientes valuidaciones:
*			- Guia no sea vacia
*			- Lista de Guias <= 20
*			- Lista de guias no tenga guias repetidas
* parametro entrada  : thisForm la forma actual	y valor de guia 
*******************************************************************************/
function validando(formu, elemento) {
   var formulario = document.forms[formu]; //formulario
   var campo= formulario[elemento]; //para acceder a los valores del text area campo.value
   var listaGuias = new Array();
   var i;
   
   // Si es la guia estafeta convierte a mayusculas
   campo.value = campo.value.toUpperCase();   
   
   // Verifica q se capture al menos 1 guia
   if (campo.value.length == 0) {
   		alert("Por favor, ingrese número de guía.");
		campo.focus();
        return false;
   }
   
   //realiza el parceo de las guias y las guarda en la matriz  
   listaGuias = campo.value.split(/\s+/);
  
   // Controla q se capturen hasta 20 guias
   if (listaGuias.length >= 21) {
   		// Si la guia 21 no esta vacia entonces despliega msg de error Nota: Si la lista tiene un enter al final, al hacer split se agrega
		// un elemento vacio en el arreglo, el cual se ignora
		if (listaGuias[20].length > 0) {
			alert("El número máximo de guías a consultar es 20. Por favor, verifique.");
			campo.focus();
			return false;
		}
		
		// Si la lista tiene mas de 20 guias despliega msg de error
		if (listaGuias.length > 20) {
			alert("El número máximo de guías a consultar es 20. Por favor, verifique.");
			campo.focus();
			return false;
		}
   }
   
   // Verfica q no hayan guias repetidas en la lista
   if (guiaRepetida(listaGuias, campo) == false){
   	   return false;
   }
      
   return true;
}

/*******************************************************************************
* Function    : guiaRepetida()
* Language    : JavaScript
* Description : Barre el arreglo de guias para que no hya guias repetidas n la consulta
* parametro entrada  : thisForm la forma actual	y valor de guia 
*******************************************************************************/
function guiaRepetida(idsGuias, campo){
   var iContador = 0;
   //Convierte la cadena a un arreglo con el separador " "
   cadena = "";
		
   for (iContador = 0 ; iContador<idsGuias.length; iContador ++){
     cadena = idsGuias[iContador];
     if ((cadena.length > 0) && (cadena.length != 12)) {
          alert("El número de guía " + cadena + " debe tener 12 dígitos. Por favor, verifique.");
          campo.focus();
          return false;
     }
           
	  //Ciclo que verifica si existen guias repetidas
      iElemento = 0;
      var repetida = 0;
      for (iElemento = 0 ; iElemento<idsGuias.length; iElemento ++){
           if ( cadena == idsGuias[iElemento]){
               repetida++;
               if ( repetida >=2){
                   alert("El código de rastreo " + cadena + " está repetido en la lista. Por favor, verifique.");
    	    	   campo.focus();
                   return false;
               }
            }
      }
   } 
   return true;
}

/********************************************funciones de ajax*************************************************/
function validar(){
 try{
   if(window.ActiveXObject){
     xhr2=new ActiveXObject("Microsoft.XMLHttp");
   }else if((window.XMLHttpRequest)||(typeof XMLHttpRequest)!=undefined){
      xhr2=new XMLHttpRequest();
   }else{
     alert("Su navegador no tiene soporte Ajax");
     return;
   }
   enviaValidacion();
  }catch(ex){
    alert("Error generado al construir el objeto Ajax");
  }
}

function enviaValidacion(){
 try{
  xhr2.open("POST",document.forms[0].action,true);
  xhr2.onreadystatechange=procesaValidacion;
  xhr2.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  var datos=obtenerDatos();
  xhr2.send(datos);
 }catch(ex){
    alert("Error en enviaValidacion");
  }
}

function obtenerDatos(){
 var cad="";
 try{
  var controles=document.forms[0].elements;
  var datos=new Array();
  for(var i=0;i<controles.length;i++){
      cad=encodeURIComponent(controles[i].name)+"=";
      cad+=encodeURIComponent(controles[i].value);
      datos.push(cad);
  }
  
  cad=datos.join("&");
 }catch(ex){
    alert("Error en obtenerDatos");
 }
 return cad;
}

function procesaValidacion(){
  try{
   if(xhr2.readyState==4){
     document.getElementById("resultados").innerHTML=xhr2.responseText;
   }
  }catch(ex){
    alert("Error en procesaValidacion");
  }
}