// Fichero con funciones necesarias para el calculo de moxqum mediante javascript

//Ruta del servidor de moxqum

// URL_MOXQUM - Desarrollo
//var serMoxqum =	"http://moxqum.yelldes.intrayell.com/paol/images/logo.gif?"
//var serMoxqum =	"http://moxqum.yelldes.intrayell.com/paol/images/logo.gif?"
// URL_MOXQUM - Aceptación
//var serMoxqum = "http://10.30.0.198/paol/images/logo.gif?"
// URL_MOXQUM - Producción
var serMoxqum = "http://wwv.paginasamarillas.es/paol/images/logo.gif?"


//Variable que indica si está activa la insercción de moscas.
// 1 activado
// 0 desactivado
var estadoMoxqum="1";

// Estado y parametros de mosca OJD
// 1 activado
// 0 desactivado
var estadoMoscaOJD="0";
var siteMoscaOJD="pamarillas";

// Estado y parametros de mosca Nielsen
var estadoMoscaNielsen = "1";
var _rsCI="es-yell";
var _rsCG="0";
var _rsDN="//secure-uk.imrworldwide.com/";
var _rsCC=0;

if ( (document.location.pathname == '/default.asp') || 
     (document.location.pathname == '/') )
{
	var sectionnameMoscaOJD="www.paginasamarillas.es/home";
}
else
{
	var sectionnameMoscaOJD="www.paginasamarillas.es";
}

var optionalsectiondescriptionMoscaOJD="";

//
var estadoMoscaDis = "1";


function pintaMosca(document)
{                    
	//Comprobamos si está activa la inserccion de moscas
	document.write("<div style='display:none;'>");
	if (estadoMoxqum == "1")
	{

		//var param = document.location.search;
		//param = param.replace("?","");
		//var queryMoxqum="id_maq=" + document.location.hostname;
		//queryMoxqum+="&referer=" + document.referrer;
		//queryMoxqum+="&urlv=" + escape(param);
		//queryMoxqum+="&urlf=" + document.location.hostname + document.location.pathname; //document.location.href;
		//queryMoxqum+="&serv=" + document.location.hostname;

		var queryMoxqum = getQueryMoxcum();
		document.write("<iframe id='pilotoMoxqum' name='pilotoMoxqum' src='" + serMoxqum + queryMoxqum + "' style='display:none'></iframe>");
	}
	if (estadoMoscaOJD == "1")
	{
		//var IVW ="http://" + siteMoscaOJD + ".ojdinteractiva.com/cgi-bin/ivw/CP/" + sectionnameMoscaOJD + ";" + optionalsectiondescriptionMoscaOJD;
		//document.write("<IMG id='mojd' name='mojd' SRC=\""+IVW+"?p="+Math.random()+"&r="+escape(document.referrer)+"\" WIDTH=\"1\" HEIGHT=\"1\" >");

		var queryOJD = getQueryOJD();
		document.write("<IMG id='mojd' name='mojd' SRC=\""+ queryOJD +"\" WIDTH=\"1\" HEIGHT=\"1\" />");
	}
	
	if (estadoMoscaNielsen == "1")
		document.write("<script type='text/javascript' src='//secure-uk.imrworldwide.com/v53.js'></script>");
	document.write("</div>");
}


// Función que pinta un mosca desde un evento (por ejemplo al pulsar un boton->onClick='pintaMoscaEnEvento(window.document)')
// El parámetro filtro, indica que mosca pintar:
//	- MOXQUM: para pintar solamente la mosca de Moxqum.
//	- OJD: para pintar solamente la mosca de OJD.
//	- "": para pintar todas las moscas.
//	- Si no se especifica se toma por defecto "", indicando que se pintaran todas las moscas.
function pintaMoscaEnEvento(document, filtro)
{
	var idMoxqum = "MOXQUM";
	var idOJD = "OJD";
	var idNielsen = "NIELSEN";
	var id = "";

	if (filtro != null)
	{
		id = filtro.toUpperCase();
	}

	//Comprobamos si está activa la inserccion de moscas
	if ( (estadoMoxqum == "1") && ((id == "") || (id == idMoxqum)) )
	{
		var queryMoxqum = getQueryMoxcum();

		var docfrag = document.createDocumentFragment();
		var mydiv = document.createElement("div");
		var myiframe = document.createElement("iframe");

		myiframe.src = serMoxqum + queryMoxqum;
		myiframe.style.display = "none";

		mydiv.appendChild(myiframe);
		docfrag.appendChild(mydiv);

		// Añadimos el fragmento al body de la página
		var objBody = document.getElementsByTagName("body");
		objBody[objBody.length-1].appendChild(docfrag);
	}

	if ( (estadoMoscaOJD == "1") && (((id == "") || (id == idOJD))) )
	{
		var queryOJD = getQueryOJD();

		var docfrag = document.createDocumentFragment();
		var myImage = document.createElement("img");

		docfrag.appendChild(myImage);

		// Añadimos el fragmento al body de la página
		var objBody = document.getElementsByTagName("body");	
		
		objBody[objBody.length-1].appendChild(docfrag);				

		myImage.src = queryOJD;
		myImage.width = 1;
		myImage.height = 1;
	}
	
	if ( (estadoMoscaNielsen == "1") && (((id == "") || (id == idNielsen))) )
	{
		var queryNielsen = getQueryNielsen();

		var docfrag = document.createDocumentFragment();
		var myScript = document.createElement("script");
		
		myScript.type = 'text/javascript'
		myScript.src = queryNielsen;
		docfrag.appendChild(myScript);

		// Añadimos el fragmento al body de la página
		var objBody = document.getElementsByTagName("body");	
		objBody[objBody.length-1].appendChild(docfrag);				
		
	}
}


// Devuelve la ruta para la mosca MOXCUM
function getQueryMoxcum()
{

		var param = document.location.search;
		param = param.replace("?","");
		var queryMoxqum="id_maq=" + document.location.hostname;
		queryMoxqum+="&referer=" + document.referrer;
		queryMoxqum+="&urlv=" + escape(param);
		queryMoxqum+="&urlf=" + document.location.hostname + document.location.pathname; //document.location.href;
		queryMoxqum+="&serv=" + document.location.hostname;

	return queryMoxqum;
}


// Devuelve la ruta para la mosca OJD
function getQueryOJD()
	{
		var IVW ="http://" + siteMoscaOJD + ".ojdinteractiva.com/cgi-bin/ivw/CP/" + sectionnameMoscaOJD + ";" + optionalsectiondescriptionMoscaOJD;
	var SRC = IVW+"?p="+Math.random()+"&r="+escape(document.referrer);

	return SRC;
}

//Devuelve la ruta para la mosca NIELSEN
function getQueryNielsen()
{
	var SRCN = "//secure-uk.imrworldwide.com/v53.js'"
	return SRCN;
}

/**
 * Objeto de tipo "Singleton" para manejar la mosca de diseño.
 */
var _moscaDis = new function() {
	var DELAY_MILLISECONDS = 1000;
	var SITE = "PAOL";
	this.delayFinished = false;
	this.anchor = null;
	this.url = "";
	this.clickNum = -1;
	this.timeOutId = -1;
	
	/**
	 * Crea la mosca
	 *
	 * @param oAnchor Es el objeto <a> que lanza el evento.
	 * @param lClick Es el número de que identifica el objeto.
	 * @return boolean
	 * Se devuelve true si el enlace está dentro de la propia página (href="#...)
	 * Se devuelve false si el enlace es a otras páginas.
	 * Para enlaces a otras páginas hay que aplicar un retardo en el salto
	 * para que de tiempo a cargar la mosca.
	 * Para ello es imprescindible que el evento esté declarado
	 * de esta manera en el enlace:
	 * <a href="dest_url" onclick="return _moscaDis.click( this, num_click );">....</a>
	 */
	this.click = function( oAnchor, lClick ) {
		var isDelayed = false;
		if( this.clickNum == -1 ) {
				
			// Si el enlace es a otra página, hay que aplicar un retardo.
			var sHref = new String(oAnchor.href);
			if( sHref.length > 0 ) {
				isDelayed = sHref.indexOf("#") == -1 && 
				            sHref.indexOf("javascript:") != 1 &&
				            ( 
				              oAnchor.target == 'undefined' || 
				              oAnchor.target == ''
				            );

				if( isDelayed ) {
					this.anchor = oAnchor;
					this.url = sHref;
					this.clickNum = lClick;
				}
			}

			// Insertamos Moxqum
			if ( estadoMoxqum == "1" )
			{	
					
						var oImg = document.createElement("img");
						if( isDelayed ) {
							oImg.onload = function() {_moscaDis.fireEvent();};
						}
						//oImg.setAttribute( "src", serMoxqum + _moscaDis.getQueryMoxqum( lClick ) );
						//oImg.setAttribute("id", "moxq");
						var oDiv = document.createElement("div");
						//alert('primer div');
						oDiv.style.display = "none";
						oDiv.style.visibility = "hidden";				
						oDiv.appendChild(oImg);
						//alert('appendchild 1');
						var oDocFrag = document.createDocumentFragment();
						oDocFrag.appendChild(oDiv);
						//alert('appendchild 2');
						// Añadimos el fragmento al body de la página
						//var oBody = document.getElementsByTagName("body")[0];
						//oBody[oBody.length-1].appendChild(oDocFrag);
						//oBody.appendChild(oDocFrag);
						//alert('oDocFrag' + oDocFrag.innerHTML);
						document.body.appendChild(oDocFrag);	
						//document.getElementById("moxq").setAttribute("src",);
						oImg.setAttribute( "src", serMoxqum + _moscaDis.getQueryMoxqum( lClick ) );
					
			} 

			if( isDelayed ) {
				this.delayEvent();
			}
		}
		else {
			alert( "click != -1 " );
		}
		
		if( this.delayFinished ) {
			isDelayed = false;
		}
		
		// Si hay retardo devolvemos false para detener el evento.
		return !isDelayed;
	}
	
	/** 
	 * Devuelve la querystring de la mosca de diseño.  
	 *
	 * @param lClick Es el número de que identifica el objeto.
	 * @return Cadena con la querystring
	 */
	this.getQueryMoxqum = function( lClick ) {
		var param = document.location.search;
		param = param.replace("?","");
		var queryMoxqum = "id_maq=" + escape( document.location.hostname );
		queryMoxqum+="&referer=" + escape( document.location.href );
		//queryMoxqum+="&urlv=" + escape( SITE + lClick + ";" + document.location.href );
		queryMoxqum+="&urlv=" + escape( SITE + lClick + ";" + this.anchor.href );
		queryMoxqum+="&urlf=click%2Epaginasamarillas%2Ees";
		queryMoxqum+="&serv=client";
		queryMoxqum+="&rnd=" + this.getMilliseconds() + "" + this.getRnd();

		return queryMoxqum;
	}

	/** 
	 * Establece un timeout para ejecutar ejecutar el enlace.
	 *
	 * @return void
	 */
	this.delayEvent = function() {
		this.timeOutId = setTimeout( "_moscaDis.fireEvent()", DELAY_MILLISECONDS );
	}
	
	/** 
	 * Ejecuta el enlace.
	 *
	 * v3: Simula el evento onclick creando un formulario y enviandolo por GET.
	 * Si la url del enlace lleva parámetros, es necesario añadirlos al formulario.
	 * Crea la siguiente estructura:
	 *  + Document Fragment
	 *  |---+ DIV
	 *      |---+ FORM (method GET)
	 *          |--- INPUT TYPE HIDDEN
	 *          |--- INPUT TYPE HIDDEN
	 *          |--- [...]
	 * 
	 * @return void
	 */
	this.fireEvent = function() {
		// Hasta aquí se puede haber llegado por el evento onload de la imagen o porque ha 
		// transcurrido el tiempo del timeout.
		// En cualquier caso borramos el timeout para evitar una doble llamada al método.
		if( this.timeOutId != -1 ) {
			clearTimeout( this.timeOutId );
		}

		// Se trocea la url en los elementos que nos interesan
		var aHref = this.anchor.href.split("?");
		var sHost = aHref[0];
		var sQS   = "clk=" + SITE + this.clickNum;
		var lDt   = this.getMilliseconds();
		//sQS += "&dt=" + lDt;
		if( aHref.length > 1 ) {
			sQS += "&" + aHref[1];
			// Una url puede trear varios caracteres ?
			for( var i=2; i<aHref.length; i++ ) {
				sQS += "?" + aHref[i];
			}
		}

		var oForm = document.createElement( "form" );
		oForm.setAttribute( "name", lDt );
		oForm.setAttribute( "id", lDt );
		oForm.setAttribute( "method", "GET" );
		oForm.setAttribute( "action", sHost );

		// Se añaden los parámetros de la url como campos ocultos del formulario
		var aQS = sQS.split("&");
		var aParam, sParamName, sParamValue;
		var oInput;
		for( var i=0; i<aQS.length; i++ ) {
			aParam = aQS[i].split("=");
			sParamName = aParam[0];
			aParam.length > 0 ? sParamValue = aParam[1] : sParamValue = "";
			
			oInput = document.createElement( "input" );
			oInput.setAttribute( "type", "hidden" );
			oInput.setAttribute( "name", sParamName );
			oInput.setAttribute( "value", sParamValue );
			oForm.appendChild( oInput );
		}

		var oDiv = document.createElement("div");
		oDiv.style.display = "none";
		oDiv.style.visibility = "hidden";
		oDiv.appendChild(oForm);

		var oDocFrag = document.createDocumentFragment();
		oDocFrag.appendChild(oDiv);

		var oBody = document.getElementsByTagName("body");
		oBody[oBody.length-1].appendChild(oDocFrag);

		// Se inicializa el objeto _moscaDis antes de enviar el formulario.
		// Esto es necesario porque el usuario puede pulsar el botón "atrás" y los enlaces con mosca
		// de diseño no funcionarían.
		this.delayFinished = false;
		this.anchor = null;
		this.url = "";
		this.clickNum = -1;
		oForm.submit();
	}
	
	/**
	 * Devuelve la fecha actual en milisegundos.
	 *
	 * @return Nº de milisegundos (entero largo)
	 */
	this.getMilliseconds = function() {
		var d = new Date();
		return d.getTime();
	}
	
	/**
	 * Devuelve un número aleatorio de hasta 9 cifras.
	 *
	 * @return Nº aleatorio (entero largo)
	 */
	this.getRnd = function() {
		return Math.round(Math.random()*1000000000);
	}
}
