
// han de venir definidas: ID_SITE, URL_PROXY_TRACKING

// FIN DE CONFIGURACION


// Para anotas los pasos por los puntos de control, podemos llamar al script PHP de tracking directamente.
var URL_TRACKING = "http://217.116.2.35/apps/tracking/control_tracking.php";

// Comenzamos el control de tracking de usuario

// Variables globales
var se = ""
var us = ""

// Objeto para realizar la llamada XMLRequest
var requests = new Array();

// Comprobamos si existe ya la cookie de sesión
se = readCookie("ID_SESSION")

// Recuperamos la cookie de usuario(PERMANENTE), por si la hubiera
us = readCookie("C_USER")

// Leemos los parámetros extra
paramsSes = readCookie("TCK_PARAMS_SES")

if ( se.length == 0 ) {
    // No hay sesión creada
    // Hacemos una llamada ajax para crear la sesión

    // También añadimos los parámetros que nos lleguen, ya que puede venir info del origen (or), campaña (cp), creatividad (ct) o pieza (pz)
    var dond = location.href.indexOf("?")
    var extraparams = (dond>0) ? "&" + location.href.substring(dond+1) : ""

    // Nosotros enviamos la cookie de usuario, si fuera vacía, el php de creación de sesión nos devolverá el código de usuario
    loadXMLDoc(URL_PROXY_TRACKING + "?st=" + ID_SITE + "&ac=ini&us=" + us + extraparams , handle_retornoSesion)
}

// handle de estado para el objeto httpRequest
function handle_retornoSesion(req) {
	
    // comprobamos que el estado sea finalizado
    if (req.readyState == 4) {
    	
        // Y que la página se haya cargado correctamente
        if (req.status == 200) {
            
        	// Capturamos del objeto Texto de respuesta.
			var respuesta = req.responseXML.getElementsByTagName('respuesta').item(0);
			
			if ( respuesta != null ) {
    			// Recuperamos la sesión creada
    			se = respuesta.getAttribute('se')
    			
    			// y guadamos la cookie de sesión
    			saveCookie("ID_SESSION",se)
    
                // Si no teníamos usuario
    			if ( us.length == 0 ) {
    		       // Recuperamos el usuario y lo guardamos en cookie
    			   us = respuesta.getAttribute('us')
    			   
    			   saveCookie("C_USER",us,365) // para un año
    			}
    
                // Finalmente, recuperamos los parámetros de la info de sesión, necesarios para saltos a formularios
    			paramsSes = respuesta.firstChild.data
                saveCookie("TCK_PARAMS_SES",paramsSes)
            }
		}
	}
}

// Función para anotar el paso por un punto del site 
function nuevo_paso(pc,slr) {

    var salir = slr||0

    // Sólo anotaremos el paso si hay sesión creada
    if ( se.length > 0 ) {
          
        var img = new Image()
        
        // Ponemos un parámetro de tiempo "time" para temas de cache
        var date=new Date()
        img.src = URL_TRACKING + "?st=" + ID_SITE + "&ac=pc&se=" + se + "&pc=" + pc + "&time=" + date.getTime()
    } else if ( !salir ) {
        // Si no está creada, intentaremos lanzarlo de nuevo
        // 1 segundo más tardé por si no hubiera habido tiempo de crear la sessión
        setTimeout('nuevo_paso(' + pc + ',1)',1000);
    } 
}

// FUNCIONS PER A COOKIES
function saveCookie(name,value,days) {
	if (days) {
		var date=new Date()
		date.setTime(date.getTime()+(days*24*60*60*1000))
		var expires="; expires="+date.toGMTString()
	} 
	else expires = ""
	document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
	var nameEQ=name+"="
	var ca=document.cookie.split(';')
	for(var i=0;i<ca.length;i++) {
		var c=ca[i]
		while (c.charAt(0)==' ') c=c.substring(1,c.length)
		if (c.indexOf(nameEQ)==0) return c.substring(nameEQ.length,c.length)
	}
	return "";
}
function deleteCookie(name) {	saveCookie(name,"",-1) }

// código común a varias áreas que utilizan arquitectura AJAX

/**
 *	carga un documento disponible en la url especificada utilizando tecnología AJAX
 *	@param   url                     url del doc
 *	@param   handleCambioEstado      nombre del handle (funcion) o código al que debe llamar en los cambios de estado de la petición AJAX
 */
function loadXMLDoc(url_xml,handleCambioEstado) {

	// Miramos en que posición toca crear el nuevo objeto request (la última)
	var ind = requests.length

	requests[ind] = false;
	
    // Comprobamos si existe el objeto XMLHttpRequest nativo (Mozilla, Firefox, Opera, Safari ...)
    if(window.XMLHttpRequest) {
		try {
			requests[ind] = new XMLHttpRequest();
		} catch(e) {
			requests[ind] = false;
		}
    }
    // si no existe en principio es un IE en Win (en IE MAC no funciona nada, investigaremos...)
    else if(window.ActiveXObject) {
       	try {
        	requests[ind] = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		requests[ind] = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		requests[ind] = false;
        	}
		}
    }
    // Otros
    else if(window.createRequest) {
    	try {
    		requests[ind] = window.createRequest();
    	} catch (e) {
    		requests[ind] = false;
    	}
    }
    
	if(requests[ind]) {
		
		// Definimos la función que se llamará en cada cambio de estado
		requests[ind].onreadystatechange = function () {
            handleCambioEstado(requests[ind]);
        }
		
		// Y realizamos la llamada
		requests[ind].open("GET", url_xml, true);
		requests[ind].send("");
	}
}
