/**
  * Autor: Luis Dillon
  * Fecha: 13 de Marzo 2009
  * Libreria de funciones que facilitan el codigo final para los clientes
  * urchin. Contiene llamadas al webservice de tickets.
**/

function FuniUrchin(idAnalytics, idPiwik){
	this.idAnalytics = idAnalytics;
	this.idPiwik = idPiwik;
	this.guardarUrchin = guardarUrchin;
	this.modificarHashGuardarUrchin = modificarHashGuardarUrchin;
	this.guardarUrchinAnalytics = guardarUrchinAnalytics;
	this.guardarPiwik = guardarPiwik;
}

/** Funcion que llama los urchin de los sistemas de rastreo que se hayan
  * configurado.  urchin de analytics por defecto. Modifica las eti
  * quetas que espera analytics por defecto*/
function guardarUrchin()
{
  this.guardarPiwik();
  this.guardarUrchinAnalytics();
}

/** Funcion que intenta capturar los datos de camapaña del ticket recibido
  * a partir del sevicio web. Si se logra recuperar los datos entonces se
  * modifica el hash del URL y se llama guardarUrchin. Si falla porque el
  * ticket no existe o el servicio web esta caido entonces no modifica el
  * hash pero si llama guardarUrchin*/
function modificarHashGuardarUrchin(ticketId)
{
        var url = '/webticket/?accion=ticketInfo&ticket='+ticketId+'&f=json';
	//url = '/readme.txt';
	var AJAX = null;
	if (window.XMLHttpRequest) {
              AJAX = new XMLHttpRequest();
	}else{
	      AJAX = new ActiveXObject('MSXML2.XMLHTTP.3.0');
	}
	funiUrchin = this;
	AJAX.onreadystatechange= function() { 
		if (AJAX.readyState==4){
			if(AJAX.status == 200){
				try{
				    parametrosCmp = eval('('+AJAX.responseText+')');
				    /*evalJSON disponible a partir de la version 1.5.1 de prototype*/
				    /*parametrosCmp = transport.responseText.evalJSON();*/
				    newhash = 'utm_source='+encodeURI(parametrosCmp[0])+'&utm_medium='+encodeURI(parametrosCmp[1])+'&utm_campaign='+encodeURI(parametrosCmp[2]);
				    window.location.hash = encodeURI(newhash);
				}catch(err){
					/*no se modifica el hash y se continua con la ejecucion como si no hubiera pasado nada*/
					console.log("Exception "+err);
				}
			}
			funiUrchin.guardarUrchin();
		}
	}
	AJAX.open('GET', url, true);
	AJAX.send(null);
}

/** Funcion que llama el urchin de analytics por defecto. Modifica las eti
  * quetas que espera analytics por defecto*/
function guardarUrchinAnalytics(){
	try {
	     _uacct  = 'UA-757568-1';
	     if(this.idAnalytics != null){
		_uacct = this.idAnalytics;
	     }
	     //_uacct = analytics;
	     _uanchor= 1;
	     _udn    = 'none';
	     _ulink  = 1;
	     //_uccn = "cmp";
	     //_ucmd = "mdm";
	     //_ucsr = "src";
	     _udlh = window.location.hash;
	     //console.log("registrando analytics "+_uacct);
	     urchinTracker();
	}catch(err){
		/*do nothing*/
	}
}

/** Funcion que llama el urchin de piwik */
function guardarPiwik(){
	var pkBaseURL = (("https:" == document.location.protocol) ? "https://ct.funiber.org/piwik/" : "http://ct.funiber.org/piwik/");
	//document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
	//console.log("registrando piwik "+this.idPiwik);
	try {
		var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", this.idPiwik);
		piwikTracker.trackPageView();
		piwikTracker.enableLinkTracking();
	} catch( err ) {}
}

/** Funcion tomada de http://www.netlobo.com/url_query_string_javascript.html
  * Busca el parametro despues de ?,&,#. Si el parametro no existe entonces
  * devuelve una cadena vacia*/

function valorParametroURL(name)
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&#]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return null;
  else
    return results[1];
}


