﻿var entiteID = -1;
var typeEntiteID = -1;
var uuID = '';
var sessionID = '';
var defaultCanalID = -1;
var defaultPartenaireID = -1;
var clickHeader;
var expoData = '';


/**
* Called when the page is loaded, sets the function trackClick as event 
* handler for all the "A" tags that contain the attribute CooRess.
* And track the exposition of the objects containing the attribute CooRess.
*/
jQuery(document).ready(function() {
    // Set click event handler for all links that should be tracked
    //jQuery('a[CooRess]').bind('mousedown', trackClick);
    var bodyElement = jQuery('head')[0];
    if (bodyElement) {
        entiteID = getAttribute(bodyElement, 'CooEntite', entiteID);
        typeEntiteID = getAttribute(bodyElement, 'CooTypeEntite', typeEntiteID);
        uuID = bodyElement.getAttribute('CooUUID');
        sessionID = bodyElement.getAttribute('CooSession');
        defaultCanalID = getAttribute(bodyElement, 'CooCanal', defaultCanalID);
        defaultPartenaireID = getAttribute(bodyElement, 'CooPartenaire', defaultPartenaireID);
    }

    clickHeader = 'm=' + escape(moduleClic) + '&mu=' + escape(moduleUser) + '&ec=' + escape(executionContext);

    // Track all trakable elements displayed
    // Find all elements containing the attribute CooRess
    trackableElements = jQuery('a');
    var element, ressourceID, zoneID, url;
    var params = new Array(); // Stores all trackable elements for insert
    var zoneOnElement;
    var partenaireID = defaultPartenaireID;
    var canalID = defaultCanalID;
    for (var i = 0; i < trackableElements.length; i++) {
        // get the element
        element = trackableElements[i];
        // find all parent objects containing the tag CooZone (all cascading
        // zones where the object is displayed
        zoneElements = jQuery(element).parents('[CooZone]');
        // check if the element contains the cooZone and attach it to the parent zones
        zoneOnElement = element.getAttribute('CooZone');
        if (zoneOnElement) {
            zoneElements.push(element);
        }
        // get the objects ressourceID, value of the CooRess attribute
        ressourceID = eval(element.getAttribute('CooRess'));
        if (!ressourceID) {
            ressourceID = -1
        }
        url = (element.tagName.toUpperCase() == 'A') ? element.href : '';
        // get closest partenaire ID
        var partenaireElement = jQuery(element).closest('[CooPartenaire]');
        if (partenaireElement && partenaireElement.length > 0) {
            partenaireID = partenaireElement[0].getAttribute('CooPartenaire')
        } else {
            partenaireID = defaultPartenaireID
        }

        // get closest canal ID
        var canalElement = jQuery(element).closest('[CooCanal]');
        if (canalElement && canalElement.length > 0) {
            canalID = canalElement[0].getAttribute('CooCanal')
        } else {
            canalID = defaultCanalID
        }

        if (zoneElements.length > 0) {
            var clickParams = '&count=' + zoneElements.length;
            for (var j = 0; j < zoneElements.length; j++) {
                // get a zone from the list of zones
                zoneID = eval(zoneElements[j].getAttribute('CooZone'));

                // add the exposition to the array that will be sent to the web service
                params.push({ ZoneID: zoneID, PartenaireID: partenaireID, CanalID: canalID, RessourceID: ressourceID, Url: url, Position: i });
                clickParams += '&z0' + j + '=' + escape(zoneID) + '&p' + j + '=' + escape(partenaireID) + '&c' + j + '=' + escape(canalID) + '&r' + j + '=' + escape(ressourceID) + '&u' + j + '=' + escape(url) + '&te' + j + '=' + escape(typeEntiteID) + '&e' + j + '=' + escape(entiteID);
            }
        } else {
            var clickParams = '&count=1';
            // get a zone from the list of zones
            zoneID = 0;
            // add the exposition to the array that will be sent to the web service
            params.push({ ZoneID: zoneID, PartenaireID: partenaireID, CanalID: canalID, RessourceID: ressourceID, Url: url, Position: i });
            clickParams += '&z0=' + escape(zoneID) + '&p0=' + escape(partenaireID) + '&c0=' + escape(canalID) + '&r0=' + escape(ressourceID) + '&u0=' + escape(url) + '&te0=' + escape(typeEntiteID) + '&e0=' + escape(entiteID);
        }
        // if the element is a link, get the url it links too
        if (element.tagName.toUpperCase() == 'A') {
            jQuery(element).bind('mousedown', { msg: clickParams }, trackClick);
        }
    }

    // Insert tracking information in the database by calling the webservice (async)
    var headerExpo = 'm=' + escape(moduleExpo) + '&mu=' + escape(moduleUser) + '&ce=' + escape(executionContext);

    var parameters = '&s=' + escape(defaultSiteID) +
                        '&d=' + escape(defaultDomaineReferentID) +
                        '&te=' + escape(typeEntiteID) +
                        '&e=' + escape(entiteID) +
                        '&pu=' + escape(document.URL) +
                        '&ua=' + escape(navigator.userAgent) +
                        '&ur=' + escape(document.referrer);
    var j = 0;
    for (var i = 0; i < params.length; i++) {
        if (params[i].RessourceID > 0) {
            sendData(wsUrl, headerExpo + '&data=' + escape(parameters +
                            '&z' + j + '=' + escape(params[i].ZoneID) +
                            '&p' + j + '=' + escape(params[i].PartenaireID) +
                            '&c' + j + '=' + escape(params[i].CanalID) +
                            '&r' + j + '=' + escape(params[i].RessourceID) +
                            '&u' + j + '=' + escape(params[i].Url) +
                            '&pos' + j + '=' + escape(params[i].Position) + '&count=1'));
        }
    }
    //    parameters += '&count=' + params.length;

    //    alert(params.length);

    //    var data = headerExpo + '&data=' + escape(parameters);

    //    expoData = data;

    //    sendData(wsUrl, expoData);

});

function getAttribute(element, attribute, defaultValue) {
	var attValue;
	if (element.getAttribute(attribute)) {
		attValue = element.getAttribute(attribute);
		if (eval(attValue) > 0) {
			return attValue;
		}
		return defaultValue;
	} else {
		return defaultValue;
	}
}

function sendData(url, data) {
	var request = document.createElement('img');
	request.src = url + "?r=" + Math.random() + "&" + data;
	request.onload = function() { };
}

/**
*  Even handler for click event on tracked element.
*/
function trackClick(eventElement) {
    var element = eventElement.target;

    /*
	if (!element.href) {
	    while ((!element.href) && element.parentNode) {
	        element = element.parentNode;
	    }
	}
	*/
    element = $(element).closest("a")[0];

    if (element) {
    	//if (element.href.indexOf('javascript:__doPostBack') == -1) {
    		if (eventElement.data) {

    			var eventParams = '&u=' + escape(document.URL) +
                          '&s=' + escape(defaultSiteID) +
                          '&d=' + escape(defaultDomaineReferentID) +
                          '&px=' + escape(eventElement.clientX) +
                          '&py=' + escape(eventElement.clientY) +
                          '&ua=' + escape(navigator.userAgent) +
                          '&ur=' + escape(document.referrer) +
                          '&sid=' + escape(sessionID) +
                          '&uid=' + escape(uuID);

    			var data = clickHeader + '&data=' + escape(eventElement.data.msg + eventParams);


    			sendData(wsUrl, data);

    		}
    	//}
    }
}
