function addToComparator(link, init) {

    var params = null;
    var linkObject = $(link);
    var type = /markCT=([^&]+)/.exec(linkObject.attr("href"))[1];
    var elementType = /opety=([^&]+)/.exec(linkObject.attr("href"))[1];
    var elementId = /cmp_([\d]+)/.exec(linkObject.attr("id"))[1];

    if (type != null && elementType != null && elementId != null) {
        params = "pid#=#" + elementId;
        var comparison = $.cookies.get(type);
        var isToAdd = false;
        var message = "";
        var update = false;
        var length = 0;
        if (comparison && comparison != "undefined" && comparison != "") {
            if (comparison.indexOf(params) < 0) {
                var info = comparison.split("&&&");
                length = info.length;
                if (length < 5) {
                    isToAdd = true;
                } else {
                    message = "Vous pouvez comparez un maximum de 5 produits.<br/>Veuillez svp supprimer un des produits précédemment sélectionnés.";
                }
            } else {
               update = true;
            }
        } else {
            comparison = "";
            isToAdd = true;
        }

        if (!init) {
            if (isToAdd) {
                if (length > 0) {
                    comparison += "&&&";
                }
                params += "#=#" + linkObject.attr('href') + "#=#";
                params += linkObject.attr('name');
                comparison += params;
                $.cookies.set(type, comparison, {path : "/"});
                updateCounter(count());
            } else {
              if (message.length > 0) {
                jAlert(message, "Information");
              }
            }
        }
        if (init && update || !init && isToAdd) {
            if (linkObject.hasClass("comp")) {
                linkObject.toggleClass("compon");
            } else {
                linkObject.parent("li").toggleClass("compon");
            }
            linkObject.attr("title", "Retirer du comparateur");
            linkObject.html("Retirer du comparateur");
            linkObject.unbind().click(function(){removeFromComparator(type, elementType, elementId, link); return false;});
        } else if (init) {
          linkObject.html("Ajouter au comparateur");
        }
    }

    //Tool tip
    $(link).wTooltip({fadeIn: 350, offsetY: 15,offsetX: -15});

    //tracking
    linkObject.trackClick("Ajouter_au_comparateur");
}

function updateCounter(value) {
    var counter = $("#rm .rm-header .rm-breadcrumb .rm-comparateur, #fc .comparateur");
    if (counter.length > 0) {
        var cDisplay = counter.html();
        counter.html(cDisplay.replace(/\(.*\)/, "(" + value + ")"));
    }
}

function getComparatorCount(type) {
    var length = 0;
    var comparison = $.cookies.get(type);
    if (comparison && comparison != "undefined" && comparison != "") {
        var info = comparison.split("&&&");
        length = info.length;
    }
    return length;
}

function count() {
  var length = 0;
  $.map($.comparisons, function(comparison){
    length += getComparatorCount(comparison);
  });
  return length;
}

function removeFromComparator(type, elementType, elementId, link) {
    if (elementId && elementId != "undefined" && elementId != ""
        && type && type != "undefined" && type != ""
        && elementType && elementType != "undefined" && elementType != "") {
        var params = null;

        var linkObject = $(link);

        params = "pid#=#" + elementId;
        var comparison = $.cookies.get(type);
        if (comparison && comparison != "undefined" && comparison != "") {
            var regExp = new RegExp(params);
            var comparison = $.grep(comparison.split("&&&"), function(val){return !regExp.test(val)}).join("&&&");
            $.cookies.set(type, comparison, {path : "/"});
            linkObject.unbind().click(function(){addToComparator(link, false); return false;});
            updateCounter(count());
            if (linkObject.hasClass("comp")) {
                linkObject.toggleClass("compon");
            } else {
                linkObject.parent("li").toggleClass("compon");
            }
            linkObject.attr("title", "Ajouter au comparateur");
            linkObject.html("Ajouter au comparateur");
            //Tool tip
            $(link).wTooltip({fadeIn: 350, offsetY: 15,offsetX: -15});

            //tracking
            linkObject.trackClick("Retirer_du_comparateur");
        }
     }
}

$(function() {

  $.comparisons = ['SEJOURS', 'CIRCUIT', 'CROISIERE', 'LOCATION'];
  var counter = $("#rm .rm-header .rm-breadcrumb .rm-comparateur, #fc .comparateur");
  if (counter.length > 0) {
    var type = counter.attr('href').split('cType=')[1];
    updateCounter(count());
    counter.click(function(){if (count() < 1) {
      jAlert("Le comparateur est vide", "Information"); return false;}
    });
  }

  //Initialize lotta things
  $("a.cplus").click(function() {
    $("tr.cpmore").toggle();
    $("a.cplus").toggleClass("moins");
    return false;
  });
  $('tr.hoverable').hover(function() {$(this).addClass('hover');}, function() {$(this).removeClass('hover');});

  $("a.cpType").click(function(){
    if ($(this).attr("name") == 'Tous') {
      $("table.comp").css("display","block");
    } else {
      $("table.comp[id!=cp-" + ($(this).attr("name")) + "]").css("display", "none");
      $("table.comp[id=cp-" + ($(this).attr("name")) + "]").css("display", "block");
    }
    return false;
  });


  $("li.comp a, a.comp").live("click", function(){addToComparator(this, false); return false;});
  $("li.comp a, a.comp").each(function(){addToComparator(this, true)});
});

