// Fichero con funciones necesarias para el calculo de moxqum mediante javascript

//Ruta del servidor de moxqum

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 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>");
}

//----------------------------------------------------------------------
// 
//----------------------------------------------------------------------
function pintaMoscaDensa(ms_IdMaq, ms_CodErr, ms_IpServ, ms_IdCat, ms_IdAmb, ms_RequestQueryString){
	var ms_UrlMoxqum;		//Variable donde agrupamos la query para pintar la mosca
	var ms_QueryString;		//Variable donde recuperamos la querysrtring
	var ma_QueryString = new Array(); //Array que utilizamos para obtener el urlv y el urlf
	var ms_UrlV = ""; 		//Parte variable de la url
	var ms_UrlF = ""; 		//Parte fija de la url
	var ms_Referer;			//Variable donde se recupera el referer
	var ms_IdBusq;			//Variable donde se recupera el idbusq
	var ms_QueryUrlV;		//Variable donde agrupamos el url variable
	var ms_QueryIdBusq;		//Variable donde se recupera el idbusq
	var ms_UrlGeneraIdBusq;	//Url para pedir el idbusq por Ajax
	var ms_ParamUrlGeneraIdBus; //Parametros de la url para pedir el idbusq por Ajax
	var ahora = new Date();
	
	//Obtenemos el referer
	ms_Referer = document.referrer;
	
	//Recuperamos la query string para obtener la parte fija y variable de la url
	ms_QueryString = window.location.href;
		
	//UrlV y UrlF
	if (ms_QueryString != "") {
		ma_QueryString = ms_QueryString.split('?');
		ms_UrlF = ma_QueryString[0];
		if (ma_QueryString.length > 1) {
			ms_UrlV = ma_QueryString[1];
		}
	}
	
	if (estadoMoxqum == "1") {
	
		// Id Maquina
		if (ms_IdMaq == "" || !ms_IdMaq) {
			ms_UrlMoxqum = "id_maq=";
		}else{
			ms_UrlMoxqum = "id_maq=" + URLEncode(ms_IdMaq);			
		}

		//Referer
		if (ms_Referer == "" || !ms_Referer) {
			ms_UrlMoxqum = ms_UrlMoxqum + "&referer=";
		}else{
			ms_UrlMoxqum = ms_UrlMoxqum + "&referer=" + URLEncode(ms_Referer);
		}
				
		// +------------------------------------------------+
		// | URLV											|
		// +------------------------------------------------+
				
		// Generamos la llamada a amarillas para que nos devuelva el idbusq
		ms_UrlGeneraIdBusq = "http://" + document.location.host + "/ajax/idbusq.asp";
			
		// Generamos los parametros para la llamada a idbusq.asp
		// Añadimos el idCat si es de Seo
		//if (!(!ms_IdCat || ms_IdCat == "")) {
		if (ms_IdCat && ms_IdCat != "") {
			ms_ParamUrlGeneraIdBusq = "?idcat=" + ms_IdCat;	
		}
		
		// Añadimos el idAmb, si no viene nada le ponemos 0 para que el idbusq se genere correctamente
		if (ms_IdAmb == "" || !ms_IdAmb) {
			if (ms_ParamUrlGeneraIdBusq == "") {
				ms_ParamUrlGeneraIdBusq = "?idamb=0";
			} else {
				ms_ParamUrlGeneraIdBusq = ms_ParamUrlGeneraIdBusq + "&idamb=0";
			}
		}else{
			if (ms_ParamUrlGeneraIdBusq == "") {
				ms_ParamUrlGeneraIdBusq = "?idamb=" + ms_IdAmb;
			} else {
				ms_ParamUrlGeneraIdBusq = ms_ParamUrlGeneraIdBusq + "&idamb=" + ms_IdAmb;
			}		
		}
		 
		ms_UrlGeneraIdBusq = ms_UrlGeneraIdBusq + ms_ParamUrlGeneraIdBusq + "&rnd=" + ahora.getTime() + Math.round(Math.random()*100);
						
		// Llamamos por ajax con la url creada para obtener el idBusq
		$.ajax({
			url: ms_UrlGeneraIdBusq,
			type: 'get',
			dataType: 'html',
			async: false,
			success: function(objeto)
			{
				ms_IdBusq = objeto;
				//alert ("ms_IdBusq [1]= " + ms_IdBusq);				
			}//fin complete		
		});//fin ajax	
		
		// Id Busqueda
		if (ms_IdBusq == "" || !ms_IdBusq) {
			ms_QueryIdBusq = "&id_busq=";
		}else{
			ms_QueryIdBusq = "&id_busq=" + ms_IdBusq;			
		}
		
		// Unimos todosz los parametros del ulrf
		//  - parametros que vienen de la querystring de la pagina de resultados [ms_RequestQueryString]
		//		- pgpv	- mode	- site	- activ [P]
		//		- idcat	- dscat	- idamb	- tial [H]
		//		- dsamb	- prov	- pg	- tico [R]
		// 	- id_busq
		//	- cod_ret
		ms_QueryUrlV = ms_UrlV + ms_RequestQueryString + ms_QueryIdBusq + "&cod_ret=" + ms_CodErr;// + "&mode=" + ms_Mode
		ms_UrlMoxqum = ms_UrlMoxqum + "&urlv=" + URLEncode(ms_QueryUrlV);
		
		
		// +------------------------------------------------+
		// | URLF											|
		// +------------------------------------------------+

		ms_UrlMoxqum = ms_UrlMoxqum + "&urlf=" + URLEncode("http://" + document.location.host + "/resultados.asp");	
		
		// serv
		if (ms_IpServ == "" || !ms_IpServ) {
			ms_UrlMoxqum = ms_UrlMoxqum + "&serv=";
		}else{
			ms_UrlMoxqum = ms_UrlMoxqum + "&serv=" + ms_IpServ;	
		}	

		// +------------------------------------------------+
		// | LLAMAMOS A LA FUNCION QUE PINTA LA MOSCA		|
		// +------------------------------------------------+
		crearMosca(ms_UrlMoxqum);
					
	}	
}

function crearMosca(ms_UrlMoxqum)
{
	var idMoxqum = "MOXQUM";
	var idNielsen = "NIELSEN";
	var id = ""; 
	
	//Comprobamos si está activa la inserccion de moscas
	
	//Pintamos la mosca de Moxcum
	if (estadoMoxqum == "1"){
		
		//alert ("pinta moxqum");
			
		var docfrag = document.createDocumentFragment();
		var mydiv = document.createElement("div");
		var myiframe = document.createElement("iframe");

		myiframe.src = serMoxqum + ms_UrlMoxqum;
		
		//alert ("url moxqum: " + serMoxqum + ms_UrlMoxqum);
		
		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);
	}
	
	//Pintamos la mosca de Nielsen
	if (estadoMoscaNielsen == "1"){
				
		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);			
		
	}
}

// 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();
			}
		}
		
		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 traer 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);
	}
}

function URLEncode (clearString) {
   
  var output = ''; 
  
  if (clearString == "" || !clearString) {
  	output = "";
  }else{	

  	var x = 0;
  	clearString = clearString.toString();
  	var regex = /(^[a-zA-Z0-9_.]*)/;
  	while (x < clearString.length) {
  		var match = regex.exec(clearString.substr(x));
  		if (match != null && match.length > 1 && match[1] != '') {
  			output += match[1];
  			x += match[1].length;
  		}
  		else {
  			if (clearString[x] == ' ') 
  				output += '+';
  			else {
  				var charCode = clearString.charCodeAt(x);
  				var hexVal = charCode.toString(16);
  				output += '%' + (hexVal.length < 2 ? '0' : '') + hexVal.toUpperCase();
  			}
  			x++;
  		}
  	}
  }	  
    
  return output;
}


