﻿$(document).ready(RegisterTrackingEvent);

function RegisterTrackingEvent() {
    $("<div id=\"divTracking\" />")
        .hide()
        .appendTo("body")
        .bind("track", g_tracking);
}

function g_tracking() {		
	var trackingCode = createTracking();
	if (trackingCode != "") {
		$("a").each(function() {
			//Scan for accorhotels.com excluding accorhotels.com/xxxx whereas x is digit
			if (/https?:\/\/(?:[^\.]*)\.?accorhotels.com(?!\/\d{4}|\.)/i.test($(this).attr("href"))) {
			    var ori = $(this).attr("href");
			    $(this).attr("href", /\?/.test(ori) ? generateNewUrl(ori, trackingCode) : ori + "?" + trackingCode); 
			}
		});
	}
}

function generateNewUrl(ori, trackingCode) {
    var segments = /([^\?]+)\??(.*)/.exec(ori);
    if (segments != null) {
        var parameters = trackingCode.split("&");
        $.each(parameters, function() {
			if (this != "") {
				var key = this.split("=");
				var regex = new RegExp("\\&?" + key[0] + "=[^&]*", "i");
				segments[2] = segments[2].replace(regex, "");
			}
        });
        
        ori = segments[1] + "?" + segments[2] + "&" + trackingCode;
    }
    
    return ori;
}

function createTracking() {    
	var tracking = [];
	
    if ($.cookie("ExternalTracking")) {
        var match;
        var parameters = [];
        var regex = new RegExp("([^=&]+)=([^&]*)", "g");		
        while (match = regex.exec($.cookie("ExternalTracking"))) {
            parameters.push(match);
        }
        
	    $.each(parameters, function() {
		    if ($.trim(this[2]) != "") {
			    tracking.push(this[1] + "=" + this[2]);
		    }
	    });
	}
	
	return tracking.join("&");
}


