/* combine : /javascript/common/celebrus/celebrusHelper.js*/
/*
 * The following functions aid in the creation of Celebrus data tags.
 *
 */
//Function to set up object and pass it to the CSA
function reportAddToBasket(addedProductID, addedValue, addedCurrency,
                        displayName, skuNum, addedQuantity, valueIsPerItem)
{
    var eventObj = new Object();
    eventObj.action = "add";
    eventObj.productID = addedProductID;
    eventObj.value = addedValue;
    eventObj.currency = addedCurrency;
    eventObj.productDisplayName = displayName;
    eventObj.skuNumber = skuNum;
    eventObj.quantity = addedQuantity;
    eventObj.valuePerItem = valueIsPerItem;
    if(window.JDWevent)
        window.JDWevent(eventObj);
}

//Failed to add to basket.
function reportFailedToAddToBasket(addedProductID)
{
    var eventObj = new Object();
    eventObj.action = "failedAdd";
    eventObj.productID = addedProductID;
    if(window.JDWevent)
        window.JDWevent(eventObj);
}

//Amend basket entry.
function reportAmendBasket(amendedProductID, updatedQuantity)
{
    var eventObj = new Object();
    eventObj.action = "amend";
    eventObj.productID = amendedProductID;
    eventObj.newQuantity = updatedQuantity;
    if(window.JDWevent)
        window.JDWevent(eventObj);
}

//Remove basket entry.
function reportRemoveBasketItem(removedProductID)
{
    var eventObj = new Object();
    eventObj.action = "remove";
    eventObj.productID = removedProductID;
    if(window.JDWevent)
        window.JDWevent(eventObj);
}

//Basket total.
function reportBasketTotal(basketTotalVal, basketCurrency)
{
    var eventObj = new Object();
    eventObj.action = "basketTotal";
    eventObj.totalValue = basketTotalVal;
    eventObj.currency = basketCurrency;
    if(window.JDWevent)
        window.JDWevent(eventObj);
}

//Basket Purchased.
function reportPurchase(orderNum, basketTotalVal, basketCurrency)
{
    var eventObj = new Object();
    eventObj.action = "purchase";
    eventObj.orderNumber = orderNum;
    eventObj.totalValue = basketTotalVal;
    eventObj.currency = basketCurrency;
    if(window.JDWevent)
        window.JDWevent(eventObj);
}

//Report 'To Follow' message displayed.
function reportToFollowMessage(productID, toFollowPeriod, value, currency)
{
    var targetObj = new Object();
    targetObj.name = "toFollowMessage";
    targetObj.id = productID + '_' + toFollowPeriod;
    targetObj.value = value + '|' + currency;
    targetObj.tagName = 'DIV';
    if(window.JDWclick)
        window.JDWclick(targetObj);
}

//Report substitute product suggested.
function reportSubstituteProductSuggested(originalProductID, value, currency, substituteProductID)
{
    var targetObj = new Object();
    targetObj.name = "substituteProductSuggested";
    targetObj.id = originalProductID + '_' + substituteProductID;
    targetObj.value = value + '|' + currency;
    targetObj.tagName = 'DIV';
    if(window.JDWclick)
        window.JDWclick(targetObj);
}

//Report that one of the alternative images on the product details page has been clicked.
function reportAltImageClick(productID, alternateImageID)
{
    var targetObj = new Object();
    targetObj.name = "alternativeProductDetailsImageClicked";
    targetObj.id = productID;
    targetObj.value = alternateImageID;
    targetObj.tagName = 'DIV';
    if(window.JDWclick)
        window.JDWclick(targetObj);
}

//Report that the main images have been swapped between.
function reportAltImageDisplayed(productID, alternateImageID)
{
    var targetObj = new Object();
    targetObj.name = "alternativeProductDetailsImageChanged";
    targetObj.id = productID;
    targetObj.value = alternateImageID;
    targetObj.tagName = 'DIV';
    if(window.JDWclick)
        window.JDWclick(targetObj);
}

//Report that a product has been added to the wish-list.
function reportAddToWishlistClick(productID)
{
    var targetObj = new Object();
    targetObj.name = "addedToWishlist";
    targetObj.id = productID;
    if(window.JDWclick)
        window.JDWclick(targetObj);
}


//Report that a product has been added to the wish-list.
function reportRemoveFromWishlistClick(productID)
{
  var targetObj = new Object();
  targetObj.name = "removedFromWishlist";
  targetObj.id = productID;
  if(window.JDWclick)
      window.JDWclick(targetObj);
}

//Report personal account protection page click.
function reportPAPPageClick(pageName)
{
    var targetObj = new Object();
    targetObj.id = "stid_paptrans_" + pageName;
    targetObj.name = "stid_paptrans";
    targetObj.value = pageName;
    targetObj.tagName = 'DIV';
    if(window.JDWclick)
        window.JDWclick(targetObj);
}

//Report a click on Amplience Functionality. Captured using the Amplience invokeTenCMSEvent JS
//function in Amplience.html.
function reportAmplienceClick(amplienceEventObject) {
    var targetObj = new Object();
    url = $.trim(amplienceEventObject.url);
    
    targetObj.name = url;
    targetObj.href = url;
    targetObj.value = url;
    targetObj.id = "amplienceClick";
    
    //using ^ as a separator in Celebrus, don't change without also changing Celebrus.
    targetObj.id += "^" + ($.trim(amplienceEventObject.SSID) == "" ? "undefined" : $.trim(amplienceEventObject.SSID));
    targetObj.id += "^" + ($.trim(amplienceEventObject.element) == "" ? "undefined" : $.trim(amplienceEventObject.element));
    targetObj.id += "^" + ($.trim(amplienceEventObject.eventName) == "" ? "undefined" : $.trim(amplienceEventObject.eventName));
    targetObj.id += "^" + ($.trim(amplienceEventObject.moduleID) == "" ? "undefined" : $.trim(amplienceEventObject.moduleID));
    targetObj.id += "^" + ($.trim(amplienceEventObject.parent) == "" ? "undefined" : $.trim(amplienceEventObject.parent));
    targetObj.id += "^" + ($.trim(amplienceEventObject.value) == "" ? "undefined" : $.trim(amplienceEventObject.value));

    if (window.JDWclick)
        window.JDWclick(targetObj);
}

//Reports slider product displayed.
function reportSliderProduct(url, productId, productIndex, prefix) {
    var targetObj = new Object();
    
    targetObj.name = url;
    targetObj.href = url;
    targetObj.value = url;
    targetObj.id = prefix + "SliderProduct_" + productId + "_" + productIndex;
    
    if (window.JDWclick)
        window.JDWclick(targetObj);
}

//Create a Celebrus target object
function createTargetObj(type, category, selection, remainder, state, href) {
    var targetObj = {};
    targetObj.tagName = "DIV";
    var args = Array.prototype.slice.call(arguments);
    var length = args.length;
    targetObj.id = "celid";
    for (var i=0; i<length-1; i++){
            var val = args[i];
            if (val != null) targetObj.id = targetObj.id + "_" + $.trim(val.toLowerCase());
    }
    targetObj.name    = $.trim(href);
    targetObj.href    = $.trim(href);
    targetObj.value    = $.trim(href);
    return targetObj;
}

//Report that a single select refinement group category has been clicked
function reportSingleSelectRefinementGroupCategoryClicked(link) {
    if(window.JDWclick) {    
        var $link = $(link);
        var selection = $.trim($link.clone().children().remove(".count").end().text()).replace(/[\n\r]+\-/g, "");
        var href = document.getElementById($link.attr('id')).href;    // non jQuery so that the absolute path is retrieved consistently
        if (selection != "clear") {
            var remainder = $link.clone().children(".count").text().replace(new RegExp("[()]","gi"), "");
            var category = $link.closest(".availableFiltersContainer").prev(".refinementHeader").children("span:first").text();
            if($link.closest("ul").hasClass("checkList"))
                var state = $link.hasClass("checked") ? "off" : "on";
            else
                var state = "on";
            window.JDWclick(createTargetObj('cmslhnr', category, selection, remainder, state, href));
        }
        else {
            if($link.parent().hasClass("refinementHeader"))
                reportRefinementGroupClearClicked(link);
            else
                reportSelectedFilterClearClicked(link);
        }
    }
}

//Report that a value has been selected from the product window Sort By list
function reportSortBySelected(selected) {
    if(window.JDWclick)
        var href = window.location.protocol + '//' + window.location.host + $(selected).attr('value');    // need to construct the url because the relative path is from a value attribute rather than href
        window.JDWclick(createTargetObj("cmssb", null, $(selected).find("option:selected").text(), null, "on", href));
}

//Report that a value has been selected from the product window custom drop down Sort By list
function reportCustomDropDownSortBySelected(selected) {
    if(window.JDWclick)
        var href = window.location.protocol + '//' + window.location.host + $(selected).attr('data-jdw-link');	// need to construct the url because the relative path is from a data attribute rather than href
        window.JDWclick(createTargetObj("cmssb", null, $(selected).text(), null, "on", href));
}

//Report that a value has been selected from the product window Products Per Page list
function reportProductsPerPageSelected(selected) {
    if(window.JDWclick) {
        var href = window.location.protocol + '//' + window.location.host + $(selected).attr('value');
        var option = $(selected).find("option:selected").text().replace(" products", "");        
        window.JDWclick(createTargetObj("cmsppp", null, option, null, "on", href));
    }
}

//Report that a filtering group concertina has been clicked
function reportFilteringGroupConcertinaClicked(filterGroup) {
    if(window.JDWclick) {
        var $fg = $(filterGroup);
        window.JDWclick(createTargetObj("cmslhcon", $fg.text(), null, null, (!$fg.hasClass("active") ? "on" : "off"), null));
    }
}

//Report that a filtering group browse categories concertina has been clicked
function reportFilteringGroupBrowseCategoriesConcertinaClicked(filterGroup) {
    if(window.JDWclick) {
        var $fg = $(filterGroup);
        window.JDWclick(createTargetObj("cmsbccon", $fg.text(), null, null, (!$fg.hasClass("active") ? "on" : "off"), null));
    }
}

//Report that a navigation page link has been clicked
function reportNavPageLinkClicked(link) {
    if(window.JDWclick) {
        var $link = $(link);
        var method = link.id.substring(link.id.indexOf("-") + 1);
        var pageno;
        var href = document.getElementById($link.attr('id')).href;
        
        if (!href) href=document.getElementById($link.parent().attr('id')).href; // mobile
        
        if(method === "Next" || method === "next") {
            method = "next";
            pageno = $link.parent().siblings('span.current').next().children('a:first').text();
            (pageno=="" ? pageno="na" : false);    // mobile does not identify page numbers
        } else if(method === "Prev" || method === "prev") {
            method = "prev";
            pageno = $link.parent().siblings('span.current').prev().children('a:first').text();
            (pageno=="" ? pageno="na" : false);
        } else {
            pageno = method;
            method = "direct";
        }
        window.JDWclick(createTargetObj("cmspn", method, pageno, null, "on", href));
    }
}

//Report that products are displayed in the shop window
function reportProductsDisplayed(productListTotal) {
    if(window.JDWclick) {
        window.JDWclick(createTargetObj("cmspl", productListTotal.toString(), null, null, "on", null));
    }
}

//Report that a price slide change has been made
function reportPriceSliderChanged(values) {
    if(window.JDWclick)
        window.JDWclick(createTargetObj("cmslhnps", "priceslider", (values[0] + "-" + values[1]), "na", "on", null));
}

//Report that the clear all link has been clicked
function reportClearAllClicked(link) {
    if(window.JDWclick){
        var $link = $(link);
        var href = document.getElementById($link.attr('id')).href;
        window.JDWclick(createTargetObj("cmslhnca", "all", "clear", "na", "off", href));
    }
}

//Report that the clear link for a refinement group has been clicked
function reportRefinementGroupClearClicked(link) {
    if(window.JDWclick){
        var $link = $(link);
        var href = document.getElementById($link.attr('id')).href;
        window.JDWclick(createTargetObj("cmslhncg", $link.prev().text(), "clear", "na", "off", href));
    }
}

//Report that the clear link for a selected filter has been clicked
function reportSelectedFilterClearClicked(link) {
    if(window.JDWclick){
        var $link = $(link);
        var href = document.getElementById($link.attr('id')).href;
        window.JDWclick(createTargetObj("cmslhncp", 
                $(link).closest("li").text().replace(new RegExp("(clear)", "gi"), ""),
                "clear", "na", "off", href));
    }
}

//Report that the clear link for a selected filter has been clicked
function reportOffCanvasSelectedFilterClearClicked(link) {
    if(window.JDWclick){
        var href = document.getElementById($(link).attr('id')).href;
        window.JDWclick(createTargetObj("cmslhncp", 
                $.trim($(link).text().replace(new RegExp(" \\(.*\\)", "gi"), "")),
                "clear", "na", "off", href));
    }
}

//Report that refine search has been clicked
function reportRefineSearchClicked(selected) {
    if(window.JDWclick) {
        var href = window.location.protocol + '//' + window.location.host + $(selected).attr('value');
        window.JDWclick(createTargetObj("cmslhnsr", $(selected).find("option:first").text(), 
                $(selected).find("option:selected").text(), "na", "on", href));
    }
}

//Report that refine search has been clicked
function reportOffCanvasRefineSearchClicked(selected) {
	if(window.JDWclick) {
		var href = window.location.protocol + '//' + window.location.host + $(selected).attr('href');
		window.JDWclick(createTargetObj("cmslhnsr", $(selected).closest("ul").attr('id').replace(new RegExp("-refinement", "gi"), ""), 
				$(selected).text().replace(new RegExp(" \\(.*\\)", "gi"), ""), "na", "on", href));
	}
}

//Report that an autocomplete text box option has been selected
function reportTextChanged(text, id, name)
{
    var targetObj = new Object();
    targetObj.name = name;
    targetObj.id = id;
    targetObj.value = text;
    targetObj.tagName = 'input';
    targetObj.type = 'text';
    if(window.JDWtextchange)
        window.JDWtextchange(targetObj);
}/* complete : /javascript/common/celebrus/celebrusHelper.js*/


