/* combine : /javascript/common/jdw_commonHeaderFunctions.js*/
(function() {
	if ((typeof(jDisplayChangeTitleOverlay) != "undefined")
		&& (jDisplayChangeTitleOverlay == true)) {
		$.get('/content/changetitle/changeTitle.html', function(data) {
			displayChangeTitleOverlay(data)
		});
	}
})();

$(document).ready(function () {
	var googleAnalyticsContent = $('#googleAnalyticsContent');
	if (googleAnalyticsContent.length > 0) {
		googleAnalyticsContent.load("/shop/3rdparty/get-google-analytics.action");
	}
  
});

/* ----------------------------------------------------------------------------*/
/* Global location for methods required when adding warranties to products.
 * Moved here to avoid duplication and a new javascript file.
 */
function updateBagItems( numberOfBasketItems ) {
	//To set the contents of a div...below
	if(top != self) {
		top.$('#numItemsInBag').html(numberOfBasketItems);
	} else {
		$('#numItemsInBag').html(numberOfBasketItems);
	}
}

/* -------------------------------- Minibag Functions -------------------------*/

$(document).ready(function () {	
	var guiMinibag = (function () {
	    "use strict";
	    
	    if(typeof(activateMinibag) != "undefined" && !activateMinibag) {
			var m=document.querySelector("button.gui-minibag-toggle"); if (m) {m.type="submit"}; // for new headers
	    	return;
	    }
	    
	    // #gotoCheckOutContainerLink standard header, .gui-minibag-toggle wpi header
		$('#gotoCheckOutContainerLink,.gui-minibag-toggle').click(function() {
			var m=document.querySelector("button.gui-minibag-toggle"); if (m) {m.type="button"}; // for new headers
			showMinibag();
			return false;
		});
		document.querySelector('body').insertAdjacentHTML('beforeend', '<div id="minibag"><div class="gui-wrapper"><div id="minibagContent" class="gui-minibag"></div></div></div>');

	    // Show Minibag Overlay and remove Transition End event listener from minibag
	    function showMinibagOverlay() {
	    	var minibag = document.querySelector(".gui-minibag"),
	        minibagOverlay = document.querySelector(".gui-minibag-overlay"),
	        minibagClose = document.querySelector(".gui-minibag-close");
	    	
	    	minibagOverlay.style.opacity = 0.75;
	    	minibagOverlay.addEventListener("click", hideMinibagOverlay);
	    	minibag.removeEventListener("transitionend", showMinibagOverlay);
	    	minibagClose.addEventListener("click", hideMinibagOverlay);
	    }

	    //Show Minibag and add event listener to overlay
	    function showMinibag() {
	    	var request = new XMLHttpRequest();
	    	request.onreadystatechange = function() {
	    		if(request.readyState==4){  
	    			if(request.status != 200) {
	    	        	// if we got a bad response from the server then just go to viewbag
	    	        	window.location = "/shop/viewbag/ViewBag.action";
	    	        }
	    			document.getElementById('minibagContent').innerHTML = request.responseText;
	    			var body = document.querySelector("body"),
	    			minibag = document.querySelector(".gui-minibag"),
	    	        wrapper = document.querySelector(".gui-wrapper");

	    	        window.scrolled = window.scrollY;
	    	        body.classList.add("gui-lock-canvas");
	    	        minibag.classList.add("gui-minibag-open");
	    	        minibag.addEventListener("transitionend", showMinibagOverlay);
	    	        wrapper.scrollTo(0, window.scrolled);
	    	        
	    	        if(document.querySelector(".gui-continue-to-checkout") == null) {
	    	        	// if we got a bad response from the server then just go to viewbag
	    	        	window.location = "/shop/viewbag/ViewBag.action";
	    	        }
	    	    }
	    	};  
	    	request.open("GET", '/shop/minibag/show.action', true);  
	    	request.send();
	    }

	    //Hide Minibag and remove event listener from Minibag Overlay
	    function hideMinibag() {
	    	var body = document.querySelector("body"),
	    	minibag = document.querySelector(".gui-minibag"),
	        minibagOverlay = document.querySelector(".gui-minibag-overlay");
	    	
	        body.classList.remove("gui-lock-canvas");
	        minibag.classList.remove("gui-minibag-open");
	        minibagOverlay.removeEventListener("transitionend", hideMinibag);
	        window.scrollTo(0, window.scrolled);
	    }

	    // Hide Minibag Overlay and add Transition End event listener
	    function hideMinibagOverlay() {
	    	var minibagOverlay = document.querySelector(".gui-minibag-overlay");
	        minibagOverlay.style.opacity = 0;
	        minibagOverlay.addEventListener("transitionend", hideMinibag);
	    }
	    if (minibagShow) {
	    	var minibagShow = document.querySelector(".gui-minibag-show");
	        minibagShow.addEventListener("click", showMinibag);
	    }
	    if (minibagClose) {
	    	var minibagClose = document.querySelector(".gui-minibag-close");
	        minibagClose.addEventListener("click", hideMinibagOverlay);
	    }

	}());

});

function calculateXaxis(){
	return 195;
}

function calculateWidth() {
  return 531;
}

function miniBagCMEvent(e, name) {
	MANUAL_LINK_CLICK_EX(e.target.href, titleUID + ' - MINBAG - ' + name, titleUID + ' - MINIBAG');
}

(function() {
	/* View minibag item */
	$("a[name='minibagView']").on('click', function(e) {		
		miniBagCMEvent(e, 'VIEW BAG ITEM');
	});
	
	/* Remove minibag item */
	$("a[name='minibagRemove']").on('click', function(e) {
		miniBagCMEvent(e, 'REMOVE BAG ITEM');
	});
	
	/* View recently viewed item */
	$("a[name='recentView']").on('click', function(e) {
		miniBagCMEvent(e, 'VIEW RECENT ITEM');
	});

	/* Continue to checkout */
	$("a[name='minibagCheckout']").on('click', function(e) {
		miniBagCMEvent(e, 'CHECKOUT');
	});	
})();

var itemRemoved;
var numberItemsInBasket;
var deleteOptions;
var refreshOptions;

function ajaxMinibagDelete(lineitem, lpUid, removedElement) {
	deleteOptions = {
		url : '/shop/minibag/json/minibagRemoveItem.action?lineitem='+lineitem+'&pdLpUid='+lpUid,
		handler: handleAjaxMinibagDelete
	};
	submitMinibagAjax(deleteOptions);
	handleAjaxMinibagRefresh(removedElement);
}

function handleAjaxMinibagDelete(returnObj) {
	var dataLayerEvent = jQuery.parseJSON(returnObj.gapDataLayer);
	window.dataLayer.push(dataLayerEvent);
	itemRemoved = returnObj.itemRemoved;
	numberItemsInBasket = returnObj.numberItemsInBasket;
        if (itemRemoved) {
                $('#numItemsInBag').html(numberItemsInBasket);
                $('#shoppingBagSize').html(numberItemsInBasket);
                eval(returnObj.celebrusData); // for mini bag remove
                
                refreshOptions = {
                        url: '/shop/minibag/show.action',
                        dataType: 'html',
                        handler: function(returnObj) {
                        	$('.gui-minibag-totals').replaceWith($(returnObj).find('.gui-minibag-totals'));
                        	$(returnObj).find('.gui-minibag-item-price').each(function() {
                        		var id = $(this).attr('id');
                        		$('#' + id).html($(this).html());
                        	});
                        	$('.minibag-btns').replaceWith($(returnObj).find('.minibag-btns'));
                        	$('.gui-minibag-empty').replaceWith($(returnObj).find('.gui-minibag-empty'));
                        }
                };
                submitMinibagAjax(refreshOptions);
        }
}

function handleAjaxMinibagRefresh(removedElement) {
	function checkForProductCard(){
		if ($('.gui-minibag-items').children().length > 0 ) {
			$('.gui-minibag-empty').hide();
		} else {
			$('.gui-minibag-empty').fadeIn();
		}
	}
	$(removedElement).closest('.gui-minibag-item').fadeTo( 300, 0.00, function(){ //fade
		$(this).slideUp( 300, function() { //slide up
			$(this).remove(); //then remove from the DOM
			checkForProductCard();
		});
	});
}

/**
 * Utility function for submitting AJAX requests. 
 *
 * options = { url : url of AJAX request, 
 *	 handler: function to handle AJAX callback, 
 *	 formId: optiiona, used to sumbit form data along with AJAX request, 
 *	 dataType: data type for expected data, defualts to JSON
 * }
*/
function submitMinibagAjax(options) {
	var defaults = {dataType: 'json'};
	var options = $.extend({}, defaults, options);
	
	var beforeLoading = function() { };
    beforeLoading.hideUpdatingOverlay = true;
	
	performAjaxRequest(options.url,beforeLoading,null,options.dataType,null,
		options.handler,null,'POST',null);
}

/* -------------------------------- Top-nav Search Functions -------------------------*/

/**
 * Generate a search page Url
 * 
 * @param categoryUrl: The generic url for the category
 * @param searchKeywords: Search keywords
 * @return: The url of the search page
 */
function generateSearchPageUrl(searchKeywords) {		
	var productAction = "/products/show.action";	
	
	// WebSphere cannot deal with URLs that have a ; in the base part - so strip these
	var escapedSearchKeywords = encodeURIComponent(searchKeywords.replace(/;|\//g,"")).replace(/%20/g, "+");
	// Append Ntt parameter into URL - immediately before product action component
	var replacement = "/Ntt-" + escapedSearchKeywords + productAction;
	var searchAction = globalCategoryUrl.replace(productAction, replacement);

	return searchAction;
}


/* -------------------------------- Utility Functions -------------------------*/

function updateAvailableToSpend(availableToSpend) {
	if (top != self) {
		top.$('#logInTitleCreditValue').html(availableToSpend);
	} else {
		$('#logInTitleCreditValue').html(availableToSpend);
	}
}

function convertCurrencySymbols(amount) {
	var ret = '';
	if (amount) {
		ret = amount.replace(/&euro;/g, '\u20AC');
		ret = amount.replace(/&pound;/g, '\u00A3');
	}
	return ret;
}

/**
 * Apply a click event to an object when enter is pressed on a trigger area
 * @param clickableTarget: The object to apply the click event to
 * @param triggerArea: The area on which to detect events
 * @return
 */
function applyEventOnEnterKey(clickableTarget, triggerArea) {	
	// Trigger target when enter is pressed
	triggerArea.keyup( function(e) {
        var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
        if(key == 13) {
        	clickableTarget.click();
        }
    });	
}
/* complete : /javascript/common/jdw_commonHeaderFunctions.js*/


