// ================================================================================================
// daVinci Functions
// Funciones que utilizaremos para determinar determinar de forma dinamica y en base a los
// patrones definidos en WTCGPatterns.js el grupo de contenido (WT.cg_n)de cada una de las paginas.
// Si la pagina en cuestion corresponde a una promocion, se determina tambien de forma automatica
// el subgrupo (WT.cg_s).
// ================================================================================================

// Constructor objeto WTCG (WebTrends Content Groups).
// Este objeto almacena en una estructura jerarquica (arbol) los identificadores, nombres
// y patrones para cada uno de los grupos de contenido.

function WTCG() {
    this.rootNode = null;
    this.add = WTCG_addNode;
}

// Constructor de nodos.
// Parametros: identificador del grupo, nombre del grupo, patron URI para el grupo,
// patron URI del subgrupo (opcional)

function WTCGNode(nodeId, description, gPattern, sgPattern) {
    // Identificador unico
    this.id = nodeId;
    // Descripcion (nombre del grupo)
    this.description = description;
    // Patron
    this.pattern = gPattern;
    // Patron del subgrupo (para promociones)
    if(sgPattern) { this.sgPattern = sgPattern; }
    // Nodos hijos de este
    this.subnodes = null;
}

// Busca un nodo dentro del arbol dado su id.
// Si lo encuentra lo devuelve (como objeto WTCGNode). Si no, devuelve null.

function WTCG_getNode(id, node) {
    if(node) {
        if(node.id == id) return node;
        if(node.subnodes != null) {
            for(var i=0; i<node.subnodes.length; i++) {
                var subnode = WTCG_getNode(id, node.subnodes[i]);
                if(subnode != null) return subnode;
            }
        }
        return null;
    }
    else if(WTCG.rootNode != null) {
        return WTCG_getNode(id, WTCG.rootNode);
    }
    return null;
}

// Parametros: identificador nodo, identificador nodo padre, patron,
// nombre del grupo, patron del subgrupo

function WTCG_addNode(nodeId, parentId, gPattern, gName, sgPattern) {
	var node = new WTCGNode(nodeId, gName, gPattern, sgPattern);
	node.subnodes = new Array();
	if(nodeId.length < 2) {
		this.rootNode = node;
	}
	else {
		var parentNode = WTCG_getNode(parentId);
		if(parentNode == null) {
			/*alert("No existe nodo padre para " + nodeId + " [" + gName + "].\n" +
			      "El id. del nodo padre buscado es " + parentId + ".\n" +
			      "Por favor, revise el fichero WTCGPatterns.js.");*/
		}
		else {
			parentNode.subnodes[parentNode.subnodes.length] = node;
		}
	}
}

function WTCG_setGroups(uri, node, patternPrefix) {
	if(!node) {
		for(var i = 0; i < WTCG.rootNode.subnodes.length; i++) {
			WTCG_setGroups(uri, WTCG.rootNode.subnodes[i], WTCG.rootNode.pattern);
		}
		return;
	}
	// var pattern = ((patternPrefix != null) ? (patternPrefix + '/' + node.pattern) : (node.pattern));
	var pattern = ((patternPrefix != null) ? (patternPrefix + node.pattern) : (node.pattern));
	if(uri.match(new RegExp(pattern, "i"))) {
		if(node.description != null) {
			// La URI pertenece al grupo representado por este nodo.
			// Veamos si dicho nodo especifica un patron para subgrupos.
			var subGroup = null;
			if(node.sgPattern) {
				//var sgPattern = pattern + '/' + node.sgPattern;
				var sgPattern = pattern + node.sgPattern;
				var myRegExp = new RegExp(sgPattern, "i");
				var matching = myRegExp.exec(uri);
				if((matching) && (matching.length) && (matching.length > 1)) {
					subGroup = matching[1];
				}
			}
			// Anyadir grupo y subgrupo a la pagina (el subgrupo puede estar en blanco).
			WTCG_addGroupToPage(node.description, subGroup)
		}
		// Buscar mas coincidencias en los subnodos del nodo que ha hecho matching.
		if(node.subnodes) {
			for(var i = 0; i < node.subnodes.length; i++) {
				WTCG_setGroups(uri, node.subnodes[i], pattern);
			}
		}
	}
}

function WTCG_addGroupToPage(group, subGroup) {
	if(WT['cg_n']) {
		WT['cg_n'] += ";" + group;
	}
	else {
		WT['cg_n'] = group;
	}

	if(subGroup != null) {
		WT['cg_s'] = subGroup;
	}
}

function WTCG_setGroupsFromURI() {
	if(WT['cg_n']) {
		// El valor del parametro 'content group' ya ha sido establecido mediante una meta tag.
		// En este caso respetamos el valor por esta especificado y no realizamos parseo alguno
		// de la URI.
		return;
	}
	// Establecer los grupos y subgrupos de la pagina a partir de la URI segun lo especificado
	// en WTCGPatterns.js.
	WTCG_setGroups(DCS.dcsuri);
}

// Crear arbol de patrones y llamar a la funcion de inicializacion definida en WTCGPatterns.js.

WTCG = new WTCG();
WTCG_loadPatterns();

// ================================================================================================
// End daVinci Functions 
// ================================================================================================

// ================================================================================================
// dcsMultiTrack Function
// Funcion a la que invocar cuando se descargue un fichero (PDF o del tipo que sea) para
// que dicha descarga quede reflejada en los logs de WebTrends
// ================================================================================================
function dcsMultiTrack() {
	for (var i=0;i<arguments.length;i++) {
		if (arguments[i].indexOf('WT.')==0){
			WT[arguments[i].substring(3)]=arguments[i+1];
			i++;
		}
		if (arguments[i].indexOf('DCS.')==0) {
			DCS[arguments[i].substring(4)]=arguments[i+1];
			i++;
		}
		if (arguments[i].indexOf('DCSext.')==0) {
			DCSext[arguments[i].substring(7)]=arguments[i+1];
			i++;
		}
	}
	var dCurrent=new Date();
	DCS.dcsdat=dCurrent.getTime();
	dcsTag();
}
// ================================================================================================
// End dcsMultiTrack Function
// ================================================================================================

// ================================================================================================
// SDC Advanced Tracking Code
// ================================================================================================

var gService = false;
var gTimeZone = 1;

// Code section for Enable First-Party Cookie Tracking
function dcsCookie(){
	if (typeof(dcsOther)=="function"){
		dcsOther();
	}
	else if (typeof(dcsPlugin)=="function"){
		dcsPlugin();
	}
	else if (typeof(dcsFPC)=="function"){
		dcsFPC(gTimeZone);
	}
}

function dcsGetCookie(name){
	var pos=document.cookie.indexOf(name+"=");
	if (pos!=-1){
		var start=pos+name.length+1;
		var end=document.cookie.indexOf(";",start);
		if (end==-1){
			end=document.cookie.length;
		}
		return unescape(document.cookie.substring(start,end));
	}
	return null;
}

function dcsGetCrumb(name,crumb){
	var aCookie=dcsGetCookie(name).split(":");
	for (var i=0;i<aCookie.length;i++){
		var aCrumb=aCookie[i].split("=");
		if (crumb==aCrumb[0]){
			return aCrumb[1];
		}
	}
	return null;
}

function dcsGetIdCrumb(name,crumb){
	var cookie=dcsGetCookie(name);
	var id=cookie.substring(0,cookie.indexOf(":lv="));
	var aCrumb=id.split("=");
	for (var i=0;i<aCrumb.length;i++){
		if (crumb==aCrumb[0]){
			return aCrumb[1];
		}
	}
	return null;
}

function dcsFPC(offset){
	if (typeof(offset)=="undefined"){
		return;
	}
	var name=gFpc;
	var dCur=new Date();
	dCur.setTime(dCur.getTime()+(dCur.getTimezoneOffset()*60000)+(offset*3600000));
	var dExp=new Date(dCur.getTime()+315360000000);
	var dSes=new Date(dCur.getTime());
	if (document.cookie.indexOf(name+"=")!=-1){
		var id=dcsGetIdCrumb(name,"id");
		var lv=parseInt(dcsGetCrumb(name,"lv"));
		var ss=parseInt(dcsGetCrumb(name,"ss"));
		if ((id==null)||(id=="null")||isNaN(lv)||isNaN(ss)){
			return;
		}
		WT.co_f=id;
		var dLst=new Date(lv);
		dSes.setTime(ss);
		if ((dCur.getTime()>(dLst.getTime()+1800000))||(dCur.getTime()>(dSes.getTime()+28800000))){
			dSes.setTime(dCur.getTime());
			WT.vt_f_s="1";
		}
		if ((dCur.getDay()!=dLst.getDay())||(dCur.getMonth()!=dLst.getMonth())||(dCur.getYear()!=dLst.getYear())){
			WT.vt_f_d="1";
		}
	}
	else{
		var tmpname=name+"_TMP=";
		document.cookie=tmpname+"1";
		if (document.cookie.indexOf(tmpname)!=-1){
			document.cookie=tmpname+"; expires=Thu, 01-Jan-1970 00:00:01 GMT";
			if ((typeof(gWtId)!="undefined")&&(gWtId!="")){
				WT.co_f=gWtId;
			}
			else if ((typeof(gTempWtId)!="undefined")&&(gTempWtId!="")){
				WT.co_f=gTempWtId;
				WT.vt_f="1";
			}
			else{
				WT.co_f="2";
				var cur=dCur.getTime().toString();
				for (var i=2;i<=(32-cur.length);i++){
					WT.co_f+=Math.floor(Math.random()*16.0).toString(16);
				}
				WT.co_f+=cur;
				WT.vt_f="1";
			}
			if (typeof(gWtAccountRollup)=="undefined"){
				WT.vt_f_a="1";
			}
			WT.vt_f_s="1";
			WT.vt_f_d="1";
		}
		else{
			WT.vt_f="2";
			WT.vt_f_a="2";
			return;
		}
	}
	WT.co_f=escape(WT.co_f);
	WT.vt_sid=WT.co_f+"."+dSes.getTime();
	var expiry="; expires="+dExp.toGMTString();
	document.cookie=name+"="+"id="+WT.co_f+":lv="+dCur.getTime().toString()+":ss="+dSes.getTime().toString()+expiry+"; path=/"+(((typeof(gFpcDom)!="undefined")&&(gFpcDom!=""))?("; domain="+gFpcDom):(""));
}

// Code section for Use the new first-party cookie generated with this tag.

var gFpc="WT_FPC";
var gWtId="";
var gTempWtId="";
var gConvert=true;

function dcsAdv(){
	dcsFunc("dcsET");
	dcsFunc("dcsCookie");
	dcsFunc("dcsAdSearch");
	dcsFunc("dcsTP");
}

// ================================================================================================
// END OF SDC Advanced Tracking Code
// ================================================================================================

// ================================================================================================
// START OF SmartSource Data Collector TAG
// ================================================================================================

// Enviaremos a WebTrends "1.0" como version de JavaScript. Si se quisiera extraer la version real
// del browser habria que insertar en el codigo HTML algo del estilo siguiente:
// <SCRIPT LANGUAGE="Javascript"><!--
// gVersion="1.0";
// -->
// </SCRIPT>
// <SCRIPT LANGUAGE="Javascript1.1"><!--
// gVersion="1.1";
// -->
// </SCRIPT>
// Se asume que la version real de Javascript soporta expresiones regulares.

gVersion="1.0";

var RE={"%09":/\t/g,"%20":/ /g,"%23":/\#/g,"%26":/\&/g,"%2B":/\+/g,"%3F":/\?/g,"%5C":/\\/g};

if (window.ActiveXObject){
	var gFV="";
	for (var gVer=2;gVer<=10;gVer++){
		try{
			var gFlash = eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash."+gVer+"');");
			if (gFlash){
				gFV=gVer+".0";
				break;
			}
		}
		catch(e){
		}
	}
}

var gImages=new Array;
var gIndex=0;
var DCS=new Object();
var WT=new Object();
var DCSext=new Object();
var gQP=new Array();

var gDomain="www1.tmb.net:8080";
var gDcsId="dcsqmxtoy00000slb95ma6bu4_4t3x";

if ((typeof(gConvert)!="undefined")&&gConvert&&(document.cookie.indexOf(gFpc+"=")==-1)) {
	document.write("<SCR"+"IPT Language='JavaScript' SRC='"+"http"+(window.location.protocol.indexOf('https:')==0?'s':'')+"://"+gDomain+"/"+gDcsId+"/wtid.js"+"'></SCR"+"IPT>");
}

// =================================================================================================
// Establece parametros como: hora, browser, version del browser, alto de la pantalla, 
// java habilitado, titulo del documento, js habilitado, version de js ...
// =================================================================================================

function dcsVar(){
	var dCurrent=new Date();
	WT.tz=dCurrent.getTimezoneOffset()/60*-1;
	if (WT.tz==0){
		WT.tz="0";
	}
	WT.bh=dCurrent.getHours();
	WT.ul=navigator.appName=="Netscape"?navigator.language:navigator.userLanguage;
	if (typeof(screen)=="object"){
		WT.cd=navigator.appName=="Netscape"?screen.pixelDepth:screen.colorDepth;
		WT.sr=screen.width+"x"+screen.height;
	}
	if (typeof(navigator.javaEnabled())=="boolean"){
		WT.jo=navigator.javaEnabled()?"Yes":"No";
	}
	if (document.title){
		WT.ti=document.title;
	}
	WT.js="Yes";
	if (typeof(gVersion)!="undefined"){
		WT.jv=gVersion;
	}
	if (document.body&&document.body.addBehavior){
		document.body.addBehavior("#default#clientCaps");
		if (document.body.connectionType){
			WT.ct=document.body.connectionType;
		}
		document.body.addBehavior("#default#homePage");
		WT.hp=document.body.isHomePage(location.href)?"1":"0";
	}
	if (parseInt(navigator.appVersion)>3){
		if ((navigator.appName=="Microsoft Internet Explorer")&&document.body){
			WT.bs=document.body.offsetWidth+"x"+document.body.offsetHeight;
		}
		else if (navigator.appName=="Netscape"){
			WT.bs=window.innerWidth+"x"+window.innerHeight;
		}
	}
	WT.fi="No";
	if (window.ActiveXObject){
		if ((typeof(gFV)!="undefined")&&(gFV.length>0)){
			WT.fi="Yes";
			WT.fv=gFV;
		}
	}
	else if (navigator.plugins&&navigator.plugins.length){
		for (var i=0;i<navigator.plugins.length;i++){
			if (navigator.plugins[i].name.indexOf('Shockwave Flash')!=-1){
				WT.fi="Yes";
				WT.fv=navigator.plugins[i].description.split(" ")[2];
				break;
			}
		}
	}
	WT.sp="@@SPLITVALUE@@";
	DCS.dcsdat=dCurrent.getTime();
	DCS.dcssip=window.location.hostname;
	DCS.dcsuri=window.location.pathname;
	if (window.location.search){
		DCS.dcsqry=window.location.search;
		if (gQP.length>0){
			for (var i=0;i<gQP.length;i++){
				var pos=DCS.dcsqry.indexOf(gQP[i]);
				if (pos!=-1){
					var front=DCS.dcsqry.substring(0,pos);
					var end=DCS.dcsqry.substring(pos+gQP[i].length,DCS.dcsqry.length);
					DCS.dcsqry=front+end;
				}
			}
		}
	}
	if ((window.document.referrer!="")&&(window.document.referrer!="-")){
		if (!(navigator.appName=="Microsoft Internet Explorer"&&parseInt(navigator.appVersion)<4)){
			DCS.dcsref=window.document.referrer;
		}
	}
}

function A(N,V){
	return "&"+N+"="+dcsEscape(V);
}

function dcsEscape(S){
	if (typeof(RE)!="undefined"){
		var retStr = new String(S);
		for (R in RE){
			retStr = retStr.replace(RE[R],R);
		}
		return retStr;
	}
	else{
		return escape(S);
	}
}

function dcsCreateImage(dcsSrc) {
	if(document.images) {
		gImages[gIndex]=new Image;
		if ((typeof(gHref)!="undefined")&&(gHref.length>0)){
			gImages[gIndex].onload=gImages[gIndex].onerror=dcsLoadHref;
		}
		gImages[gIndex].src=dcsSrc;
		gIndex++;
	}
	else {
		document.write('<IMG BORDER="0" NAME="DCSIMG" WIDTH="1" HEIGHT="1" SRC="'+dcsSrc+'">');
	}
}

function dcsMeta(){
	var elems;
	if (document.all){
		elems=document.all.tags("meta");
	}
	else if (document.documentElement){
		elems=document.getElementsByTagName("meta");
	}
	if (typeof(elems)!="undefined"){
		for (var i=1;i<=elems.length;i++){
			var meta=elems.item(i-1);
			if (meta.name){
				if (meta.name.indexOf('WT.')==0){
					WT[meta.name.substring(3)]=meta.content;
				}
				else if (meta.name.indexOf('DCSext.')==0){
					DCSext[meta.name.substring(7)]=meta.content;
				}
				else if (meta.name.indexOf('DCS.')==0){
					DCS[meta.name.substring(4)]=meta.content;
				}
			}
		}
	}
}

function dcsTag(){
	var P="http"+(window.location.protocol.indexOf('https:')==0?'s':'')+"://"+gDomain+(gDcsId==""?'':'/'+gDcsId)+"/dcs.gif?";
	for (N in DCS){
		if (DCS[N]) {
			P+=A(N,DCS[N]);
		}
	}
	for (N in WT){
		if (WT[N]) {
			P+=A("WT."+N,WT[N]);
		}
	}
	for (N in DCSext){
		if (DCSext[N]) {
			P+=A(N,DCSext[N]);
		}
	}
	if (P.length>2048&&navigator.userAgent.indexOf('MSIE')>=0){
		P=P.substring(0,2040)+"&WT.tu=1";
	}
	dcsCreateImage(P);
}

function dcsFunc(func){
	if (typeof(window[func])=="function"){
		window[func]();
	}
}

// Establecer parametros como 'hora', 'browser', 'version del browser', 'resolucion de pantalla',
// 'java habilitado', 'titulo del documento', 'flash instalado' ...
// En definitiva, informacion que el propio browser nos facilita.
// El resto de informacion que enviamos a WebTrends se extrae por otras vias.
dcsVar();

// Extraer informacion de los tags <META> que contenga la pagina para enviarla a WebTrends.
dcsMeta();

// Si en los tags <META> no se ha especificado el grupo (o grupos) de contenido de la pagina,
// la siguiente funcion tratara de determilarlo(s) a partir de la URI.
WTCG_setGroupsFromURI();

// Gestion de la cookie.
dcsFunc("dcsAdv");

// Crear imagen no visible cuyo SRC contendra los parametros que queremos que WebTrends recoja.
// La peticion (GET) de la imagen sera la que genere la entrada en el log de WebTrends.
dcsTag();

// ================================================================================================
// END OF SmartSource Data Collector TAG
// ================================================================================================
