
///////\\\\\/////////////\\\\\//////  CODIGO DE ENTRADA    ///////\\\\\/////////////\\\\\/////////////\\\\\//////
//variable que cuando esta en true solo muestra mensajes pero no redirige
var dbgVar = false;

var archCiudadesXML     ;
var archRegionesXML     ;

//El archivo .dat se debe encontrar en el directorio del WEB Service
var fileDB              = "GeoIPCity.dat";
var fileDBLite          = "GeoLiteCity.dat";   
var rutaWSDB            = "http://ws.gruporeforma.com/GRCiudad/service1.asmx";
//var rutaWSDB          = "http://grcdevsql02/WSGeoLiteCity/service1.asmx";
var pagASPexecWS        = "http://prueba.fototienda.com/GetCityRegion.asp";
//var pagASPexecWS      = "http://grcdevsql02/GeoLiteCity/GetCityRegion.asp";

//inicializacion de variables
var region              = "";
var city                = "";
var ipcookie            = "";
var PlazaRedirect       = "";
var grcipcte            = "";
var contMaxSleep        = 1500; //1.5 segundos max. espera por los resultados

////\\\\\////////\\\\\\////////\\\\\////////\\\\\\////////\\\\\ Manejo de cookies \\\\\\////////\\\\\\////////////////\\\\\\////////\\\\\////////\\\\\\////////\\\\\
function getCookie(c_name)
{
    if (document.cookie.length>0)
      {
      c_start=document.cookie.indexOf(c_name + "=");
      if (c_start!=-1)
        {
        c_start=c_start + c_name.length+1;
        c_end=document.cookie.indexOf(";",c_start);
        if (c_end==-1) c_end=document.cookie.length;
        return unescape(document.cookie.substring(c_start,c_end));
        }
      }
    return "";
}

function setCookie(c_name,value,expiredays)
{
    var exdate=new Date();
    exdate.setDate(exdate.getDate()+expiredays);
    document.cookie=c_name+ "=" +escape(value)+
    ((expiredays==null) ? "" : ";expires="+exdate.toUTCString());
}

////////\\\\\\////////\\\\\////////\\\\\\//////// Para hacer el redirect a la plaza correspondiente \\\\\\////////\\\\\\////////////////\\\\\\////////\\\\\////////\\\\\\
function fn_redirect()
{       
    //En caso de haber encontrado la plaza procede a redirigir al usuario
    if (PlazaRedirect != "NotFound")
    {
            if(dbgVar == true)
            {
                alert("Haciendo el redirect hacia la plaza:" + PlazaRedirect )
            }
            else  //dbgVar == false
                if (PlazaRedirect == "Norte")
                {
                  document.location.href = lnkRedirectNorte;
                }
                else
                    if (PlazaRedirect == "Reforma")
                    {
                       document.location.href = lnkRedirectReforma;
                    }
                    else
                        if (PlazaRedirect == "Mural")
                        {
                           document.location.href = lnkRedirectMural;
                        }
                        else
                            if (dbgVar == false)
                            {
                               document.location.href = lnkRedirectDefault;
                            }
          
    }        
    else
    {
            if(dbgVar == true)
            {
                if (city == "NotFound")
                {
                    alert("No se encontro la ciudad");
                }
                if (region == "NotFound")
                {
                    alert("No se encontro la region");
                }
                alert("No se encontro la plaza hacia la que se hará redirect, por lo cual se hace un redirect default hacia " + lnkRedirectDefault);
            }
            //si no se encontró por default se redirecciona a avisos de ocasion del norte.
            if (dbgVar == false)
            {
                document.location.href = lnkRedirectDefault;
            }
    }
}


function fn_obtenfuente(PlazaRedirect)
{
    if (PlazaRedirect == "Norte")
        glPlazaRedirect = "101";
    else
        if (PlazaRedirect == "Reforma")
            glPlazaRedirect = "102";
        else
            if (PlazaRedirect == "Mural")
                glPlazaRedirect = "103";
            else
                glPlazaRedirect = "102"; //por default se regresa esta plaza.
}                   

////////\\\\\\////////\\\\\ FUNCION PARA BUSCAR la plaza correspondiente a la ciudad y region en los XML correspondientes \\\\\\////////\\\\\\////////
///////\\\\\/////////////\\\\\//////   y Para cargar el xml de CIUDADES o de REGIONES ///////\\\\\/////////////\\\\\/////////////\\\\\//////
function  fn_buscarPlaza(city, region, doRedirect)
{
    PlazaRedirect = "";
    var contsleep = 0;
    function timesleep() {
        if(dbgVar == true){
           alert(" Buscando la plaza en el xml.. esperando " + contsleep);
        }
        if( PlazaRedirect != "" || contsleep >= contMaxSleep) { // Ya regreso de la llamada al asp
            if(PlazaRedirect == "")//si transcurrio mas de contMaxSleep tiempo y no se obtuvo respuesta entonces se sale y la pone como no encontrada.
            {
                PlazaRedirect = "NotFound";
            }
            if(dbgVar == true)
            {
                if (PlazaRedirect == "NotFound")
                {
                    alert("No se encontro la plaza en el XML correspondiente");
                }
                else
                {
		            alert("Se encontro la plaza:" + PlazaRedirect + " En el XML correspondiente");
		        }
		    }
		    if (doRedirect == "1")
		    {
		        fn_redirect();
		    }
	        else
            {
                fn_obtenfuente(PlazaRedirect);
            }
		     
	    }else {
		    setTimeout(timesleep,100);
		    contsleep += 100;
	    }
    }
    
    (function() { 
        var ga = document.createElement('script'); 
        ga.type = 'text/javascript'; ga.async = true;
        ga.src = pagASPexecWS + "?funcionRun=fn_loadXML" + "&city=" + city +  "&region=" + region+ "&archCiudadesXML="  + archCiudadesXML + "&archRegionesXML=" + archRegionesXML ;
        var s = document.getElementById('scriptGeoLite1'); ///para obtener el primer tag <script> del html.
        s.parentNode.insertBefore(ga, s);                   //inserta "ga" después de "s"(que es el tag <script> del html)

    })();
    setTimeout(timesleep,100);
}




///\\\\\\////////\\\\\ FUNCION  que manda llamar el WebService PARA BUSCAR EN LA BASE DE DATOS LA CIUDAD Y REGION DE UNA IP \\\\\\////////\\\\\\///////
function EjecutaWS(ipaddress, doRedirect)
{
    var contsleep = 0;
    function timesleep() {
        if(dbgVar == true){
           alert(" Buscando la ciudad y region mediante el WS ....  esperando " + contsleep);
        }
	    if( (city != "" && region != "") || contsleep >= contMaxSleep ) { // Ya regreso de la llamada al asp
	        if(city == "" || region == "")//si transcurrio mas de contMaxSleep tiempo y no se obtuvo respuesta entonces se sale y la pone como no encontrada.
            {
                city = "NotFound";
                region = "NotFound";
            }
	    
	        if (city != "NotFound" && region != "NotFound")
            {
                //si se encontro la ciudad y region y se procede a buscar la plaza que les corresponde.
                if(dbgVar == true){
                    alert("Se encontro la ciudad " + city + " y region " + region + " al correr el WS, y se guardaran en cookies");
                }
                //se guardan los valores encontrados en la cookie
                setCookie("fototienda_city",city,30);       //expira la cookie en 30 dias
                setCookie("fototienda_region",region,30);   //expira la cookie en 30 dias
                setCookie("fototienda_ip",ipaddress,30);    //expira la cookie en 30 dias
                
                fn_buscarPlaza(city,region,doRedirect);
            }
            else
            {
                //no se encontraron ni la ciudad ni la region en ninguna de las bases de datos
                if(dbgVar == true){
                    alert("NO se encontraron la ciudad ni region al correr el WS");
                }
                PlazaRedirect = "NotFound";
                if (doRedirect == "1")
		        {
                    fn_redirect();
                }
                else
                {
                     fn_obtenfuente(PlazaRedirect);
                }
            }
            
	    } else {
		    setTimeout(timesleep,100);
		    contsleep += 100;
	    }
    }
    
    (function() { 
        var ga = document.createElement('script'); 
        ga.type = 'text/javascript'; ga.async = true; ga.id="scriptGeoLite3";
        ga.src =  pagASPexecWS + "?funcionRun=fn_buscarDB" + "&rutaWSDB=" + rutaWSDB+ "&ipuser="  + ipaddress + "&fileDB=" + fileDB + "&fileDBLite=" + fileDBLite ;
        var s = document.getElementById('scriptGeoLite1'); ///para obtener el primer tag <script> del html.
        s.parentNode.insertBefore(ga, s);                   //inserta "ga" después de "s"(que es el tag <script> del html)
    })();
    setTimeout(timesleep,100);
}



//Busca de acuerdo a la IP la ciudad y region que le corresponde y hace un redirect en caso que corresponda.
function fnBuscaPlazaRedirect(ipaddress,com_Origen, doRedirect)
{
    var IdPlazaRedirect = "";
    
 
    //---------------------------  VARIABLES DE INICIALIZACION QUE SE TIENEN QUE CONFIGURAR ------------------------
    //Los archivos de ciudades.xml y regiones.xml tienen que encontrarse en el servidor web de la página default.asp
    //estos archivos son distintos para cada tipo de com
    
    archCiudadesXML     = "ciudades_" + com_Origen + ".xml";
    archRegionesXML     = "regiones_" + com_Origen  + ".xml";
    
    /////////////////\\\\\\////////\\\\\////////\\\\\\////////\\\\\  CODIGO DE ENTRADA ////////\\\\\\////////\\\\\////////\\\\\\////////\\\\\\\\\\\////////\\\\\
    //PASO1: Se buscan las cookie de la ciudad y region en la máquina desde la cual se está accesando
    if(dbgVar == true)
    {
        alert("Se buscan las cookie de la ciudad y region en la máquina desde la cual se está accesando")
    }
    city = getCookie("fototienda_city")
    region = getCookie("fototienda_region")
    ipcookie = getCookie("fototienda_ip")

    if ((city != "") && (region != "") && (ipcookie == ipaddress))
    {
        //si se cuenta con la ciudad y region se procede a buscar la plaza que les corresponde y ademas corresponde a la misma ip
        if(dbgVar == true)
        {
            alert("Se encontro la ciudad " + city + " y region " + region + " en la cookie")
        }
        //PASO2: Si se encuentran la ciudad y region en las cookies se procede a buscar la plaza en los xml correspondientes.
        // En caso de que no encuentre la plaza tiene que ir a buscar nuevamente la ciudad y la region porque quizas los datos guardados en las cookies ya no son validos.
        fn_buscarPlaza(city,region,doRedirect);   //va a buscar en el archivo ciudades.xml y/o regiones.xml la plaza hacia la que hará el redirect.
    }
    else
    {
         //PASO3: Si no se cuenta con la ciudad, region o plaza hace la busqueda nuevamente la la ciudad y region en la BASE DE DATOS COMPRADA y/o en la LITE
        //se ponen en vacio city y region para que se vuelva a hacer la busqueda de la nueva ciudad y region de acuerdo a la ip.
        city = ""   
        region = ""

        if(dbgVar == true)
        {
            alert("No se tiene la ciudad, region o plaza en las cookies por lo que se hace la busqueda nuevamente la la ciudad y region en laS BASE DE DATOS mediante el WS ")
        }
        EjecutaWS(ipaddress, doRedirect);   //Para buscar la ciudad y la region de una IP en la base de datos y luego mandará llamar a 
                                 //la funcion fn_buscarPlaza(city,region) para buscar en el archivo ciudades.xml y/o regiones.xml 
                                 //la plaza hacia la que hará el redirect.
    }
}


////////\\\\\\////////\\\\\ FUNCION PARA OBTENER LA IPADDRESS CORRESPONDIENTE \\\\\\////////\\\\\\////////
function  fn_getIPaddress(com_Origen, doRedirect)
{
    ipaddress = "";
    var contsleep = 0;
    function timesleep() {
        if(dbgVar == true){
           alert(" Obteniendo la IPaddress.. esperando " + contsleep);
        }
        if( ipaddress != "" || contsleep >= contMaxSleep) { // Ya regreso de la llamada al asp
            if(ipaddress == "")//si transcurrio mas de contMaxSleep tiempo y no se obtuvo respuesta entonces se sale y la pone como no encontrada.
            {
                ipaddress = "NotFound";
            }
            
            if(ipaddress != "NotFound")
            {
                if(dbgVar == true)
                {
		           alert("Si se obtuvo la IPaddress:" + ipaddress);
		        }
		        //se pudo obtener la ipaddress ahora se buscará la plaza a la que corresponde esa IP
                fnBuscaPlazaRedirect(ipaddress,com_Origen,doRedirect);
            }
            else
            {
                if(dbgVar == true)
                {
                    alert("No se pudo obtener la IPaddress");
                }
                
                PlazaRedirect = "NotFound";
                if (doRedirect == "1")
		        {
                    fn_redirect();
                }
                else
                {
                     fn_obtenfuente(PlazaRedirect);
                }
            }
	    }else {
		    setTimeout(timesleep,100);
		    contsleep += 100;
	    }
    }
    (function() { 
        var ga = document.createElement('script'); 
        ga.type = 'text/javascript'; ga.async = true;
        ga.src = pagASPexecWS + "?funcionRun=fn_getIPAddress";
        var s = document.getElementById('scriptGeoLite1'); ///para obtener el primer tag <script> del html.
        s.parentNode.insertBefore(ga, s);                   //inserta "ga" después de "s"(que es el tag <script> del html)

    })();
    setTimeout(timesleep,100);
}


//solo obtiene la plaza hacia la que se hará el redirect
function procesaGetPlazaRedirect(com_Origen, doRedirect)
{
    //primero se hace una búsqueda de la IP en la cookie "grcipcte", esta cookie la pone el router de opint y tiene el valor de la
    //IP local de los usuarios internos del grupo. con esto sabemos cual es la IP original de los usuarios internos.

    grcipcte = getCookie("grcipcte");
    if (grcipcte != "")
    {
        if(dbgVar == true){
           alert("Se obtuvo la IP " + grcipcte  + " desde la cookie grcipcte.. determinando la plaza ");
        }

        if (grcipcte.substr(0,5) == "10.1."){ //Norte
            if(dbgVar == true){
                alert("plaza Norte");
            }
            glPlazaRedirect = "101";
        }else
            if (grcipcte.substr(0,5) == "10.2."){ //Reforma
                if(dbgVar == true){
                    alert("plaza Reforma");
                }
                glPlazaRedirect = "102";
            }else
                if (grcipcte.substr(0,5) == "10.3."){//Mural
                    if(dbgVar == true){
                        alert("plaza Mural");
                    }
                    glPlazaRedirect = "103";
                }else{
                    if(dbgVar == true){
                        alert('El valor de la IP grcipcte no es valido... se buscara la IP por el flujo normal...');
                    }
                    fn_getIPaddress(com_Origen, doRedirect);    //La IP no está dentro de las IP del rango, por lo que hay que seguir el flujo normal
                                                       //Para obtener la IPaddress
                }
    }
    else{
        fn_getIPaddress(com_Origen, doRedirect); //Para obtener la IPaddress y en caso de obtnerla seguir el flujo
    }
}

//solo obtiene la plaza hacia la que se hará el redirect
function getPlazaRedirect(com_Origen)
{
    procesaGetPlazaRedirect(com_Origen, 0) ;
}


//Hace el redirect
function doPlazaRedirect(com_Origen)
{
    procesaGetPlazaRedirect(com_Origen, 1) ;
}

