



//<!--
/* <![CDATA[ */

/*
 * ID:EXTERNAL_WIDGET_FITANALYTICS_CORE
 */

/**
 * @namespace FitAnalyticsHandler
 */

var FitAnalyticsHandler = typeof(window.FitAnalyticsHandler) != 'undefined' ? window.FitAnalyticsHandler : {};

FitAnalyticsHandler.rootElement = null;
FitAnalyticsHandler.productID = null;
FitAnalyticsHandler.userID = null;
FitAnalyticsHandler.widget = null;
FitAnalyticsHandler.recommendSize = null;
FitAnalyticsHandler.convertedSize = null;
FitAnalyticsHandler.availableSizes = [];
FitAnalyticsHandler.thumbnailURL = null;
FitAnalyticsHandler.regEx = /[\/\|x\-\:\+/]/g;
FitAnalyticsHandler.triggerAddToCart = false;
FitAnalyticsHandler.consoleLogEnabled = false;
FitAnalyticsHandler.autoSelect = false;

FitAnalyticsHandler.init = function(rawRoot) {
	this.consoleLog("FitAnalyticsHandler.init");

	if (rawRoot != undefined) {
		// get spv root element
		FitAnalyticsHandler.rootElement = FitAnalyticsHandler.getRootItem(rawRoot);

		// set productID
		FitAnalyticsHandler.productID = PageContext.get('global.constants.brand.name') + "-" + PageContext.getFirst().product.masterId;

		// init add to cart wrapper
		FitAnalyticsHandler.updateAddToCartWrapper('notused');

		// get country and language from pagecontext
		FitAnalyticsHandler.shopCountry = (PageContext.get('global.constants.locale.country') == "")?"DE":PageContext.get('global.constants.locale.country');
		FitAnalyticsHandler.language = (PageContext.get('global.constants.locale.language') == "")?"de":PageContext.get('global.constants.locale.language');

		// get user id
		if(PageContext.get('customer.level') == "customer") {
			FitAnalyticsHandler.userID = PageContext.get('customer.customerNoMD5');
		}

		// init available sizes
		FitAnalyticsHandler.initAvailableSizes();

		// add template to spv
		FitAnalyticsHandler.addTemplate();

		// init thumbnail url
		FitAnalyticsHandler.initThumbnailURL();

		// init Widget
		FitAnalyticsHandler.initWidget();

		// react on size change
		jQuery(document)
						.off('spvcontrollersizechange')
						.on('spvcontrollersizechange', function(event){
			// add template to spv
			FitAnalyticsHandler.addAlertTemplate();
		});
	}

};

FitAnalyticsHandler.reinit = function(rawRoot) {
	this.consoleLog("FitAnalyticsHandler.reinit");

	if (rawRoot != undefined) {

		// get spv root element
		FitAnalyticsHandler.rootElement = FitAnalyticsHandler.getRootItem(rawRoot);

		// add template to spv
		FitAnalyticsHandler.addTemplate();

		// init thumbnail url
		FitAnalyticsHandler.initThumbnailURL();

		// get recommend product
		FitAnalyticsHandler.onRecommend();

		// get available sizes
		FitAnalyticsHandler.initAvailableSizes();

		// disable autoselect after first reinit -> recommended size spv switch
		if (FitAnalyticsHandler.autoSelect) {
			FitAnalyticsHandler.autoSelect = false;
		}

		if (FitAnalyticsHandler.triggerAddToCart) {
			FitAnalyticsHandler.triggerAddToCart = false;
			this.consoleLog("FitAnalyticsHandler.reinit:triggerAddToCart");
			window.setTimeout("FitAnalyticsHandler.rootElement.find('.jsAddToCartButton').click()", 500);
		}
	}
};

/**
 * init thumbnail url
 */
FitAnalyticsHandler.initThumbnailURL = function() {
	FitAnalyticsHandler.thumbnailURL = FitAnalyticsHandler.rootElement.find('.jsFitguideThumb').data('imageurl');
};

/**
 * get spv root element
 */
FitAnalyticsHandler.getRootItem = function(rawRoot) {
    var root;
    return root = jQuery(0 === arguments.length || "undefined" == typeof rawRoot || null === rawRoot ? document.body : rawRoot);
};

/**
 * init FitAnalyticsHandler
 */
FitAnalyticsHandler.initWidget = function() {
	this.consoleLog("FitAnalyticsHandler.initWidget");

	var widget = new FitAnalyticsWidget({
		productId	: FitAnalyticsHandler.productID,
		thumb		: FitAnalyticsHandler.thumbnailURL,
		sizes		: FitAnalyticsHandler.availableSizes,
		shopCountry	: FitAnalyticsHandler.shopCountry,
		language	: FitAnalyticsHandler.language,
		userId		: FitAnalyticsHandler.userID,
		load: function(pid) {
			FitAnalyticsHandler.widget = widget;
			FitAnalyticsHandler.autoSelect = false;
			widget.getRecommendation();
		},
		recommend: function(pid, size) {
			FitAnalyticsHandler.widget = widget;
			FitAnalyticsHandler.setRecommendedSize(size);
			FitAnalyticsHandler.autoSelect = true;
			FitAnalyticsHandler.onRecommend();
		},
		cart: function(pid, size) {
			FitAnalyticsHandler.widget = widget;
			FitAnalyticsHandler.setRecommendedSize(size);
			FitAnalyticsHandler.autoSelect = true;
			FitAnalyticsHandler.onCart();
		},
		close: function(pid,size) {
			FitAnalyticsHandler.setRecommendedSize(size);
			FitAnalyticsHandler.onClose();
			widget.getRecommendation();
		},
		error: function(pid) {
			FitAnalyticsHandler.onError();
			FitAnalyticsHandler.recommendSize = "error";
		}
	});
}

/**
 * set recommended size
 */
FitAnalyticsHandler.setRecommendedSize = function(size) {
	this.consoleLog("FitAnalyticsHandler.setRecommendedSize");

	if (size != undefined) {
		FitAnalyticsHandler.recommendSize = size;
		FitAnalyticsHandler.convertedSize = FitAnalyticsHandler.recommendSize.replace(FitAnalyticsHandler.regEx, ".");
	}
}

/**
 * on error
 */
FitAnalyticsHandler.onError = function() {
	this.consoleLog("FitAnalyticsHandler.onError");

	FitAnalyticsHandler.updateAddToCartWrapper('notused');
}

/**
 * on recommend
 */
FitAnalyticsHandler.onRecommend = function() {
	this.consoleLog("FitAnalyticsHandler.onRecommend");

	// disable size advice tooltip on recommend
	if (FitAnalyticsHandler.recommendSize != undefined && FitAnalyticsHandler.recommendSize != "new user" && FitAnalyticsHandler.recommendSize != "error") {
		FitAnalyticsHandler.rootElement.trigger('switchofsizeadvicehover');
	}

	// hide size advice hover on recommend
	FitAnalyticsHandler.rootElement.find('.jsSizeAdvice').hide();

	// if autoselect
	if(FitAnalyticsHandler.autoSelect) {
		// is size is recommend
		if (FitAnalyticsHandler.recommendSize != undefined && FitAnalyticsHandler.recommendSize != "new user" && FitAnalyticsHandler.recommendSize != "error") {
			if (!FitAnalyticsHandler.recommendedVariationIsSelected() && FitAnalyticsHandler.recommendedVariationIsAvailable()) {
				FitAnalyticsHandler.selectRecommendedVariation();
			}
			if (FitAnalyticsHandler.recommendedVariationIsAvailable()) {
				FitAnalyticsHandler.updateSPV("used");
			} else {
				FitAnalyticsHandler.updateSPV("notused");
			}
		} else {
			// there is no recommendation
			// bind dialog open handler
			FitAnalyticsHandler.rootElement.find('.jsSizeGuideDialogFitAnalyticsButton, .jsSizeGuideAlertTemplate').off('click.openDialog');
			FitAnalyticsHandler.rootElement.find('.jsSizeGuideDialogFitAnalyticsButton, .jsSizeGuideAlertTemplate').on('click.openDialog', function(event) {
				event.preventDefault();
				FitAnalyticsHandler.openDialog();
			});
			// show dialog button and hide former recommendation result
			FitAnalyticsHandler.rootElement.find('.jsSizeGuideDialogFitAnalyticsButton, .jsSizeGuideAlertTemplate').show();
			FitAnalyticsHandler.rootElement.find('.jsSizeGuide .jsSizeGuideDialogFitAnalyticsRecommend').hide();
			FitAnalyticsHandler.updateAddToCartWrapper('notused');
		}
	} else {
		if (FitAnalyticsHandler.recommendSize == "error") {
			FitAnalyticsHandler.updateAddToCartWrapper('error');
		} else if (FitAnalyticsHandler.recommendSize == undefined || FitAnalyticsHandler.recommendSize == "new user") {
			// there is no recommendation
			// bind dialog open handler
			FitAnalyticsHandler.rootElement.find('.jsSizeGuideDialogFitAnalyticsButton').off('click.openDialog');
			FitAnalyticsHandler.rootElement.find('.jsSizeGuideDialogFitAnalyticsButton').on('click.openDialog', function(event) {
				event.preventDefault();
				FitAnalyticsHandler.openDialog();
			});
			// show dialog button and hide former recommendation result
			FitAnalyticsHandler.rootElement.find('.jsSizeGuideDialogFitAnalyticsButton, .jsSizeGuideAlertTemplate').show();
			FitAnalyticsHandler.rootElement.find('.jsSizeGuide .jsSizeGuideDialogFitAnalyticsRecommend').hide();
			FitAnalyticsHandler.updateAddToCartWrapper('notused');
		} else {
			FitAnalyticsHandler.updateSPV("notused");
		}
	}
}

/**
 * on cart
 */
FitAnalyticsHandler.onCart = function() {
	this.consoleLog("FitAnalyticsHandler.onCart");

	// trigger click tracking
	var clickTrackingObjectFitguideCompleted = { econda: { ref: "spv_fittingguide_fit_analytics_completed" } };
	jQuery(document).trigger({
		type: 'page:clicktrack',
		eventData : clickTrackingObjectFitguideCompleted
	});

	// is recommended size available
	if (FitAnalyticsHandler.recommendedVariationIsAvailable()) {
		// is recommended size selected
		if (FitAnalyticsHandler.recommendedVariationIsSelected()) {
			this.consoleLog("FitAnalyticsHandler.onCart -> Add2Cart:click");
			FitAnalyticsHandler.updateSPV("used");
			FitAnalyticsHandler.rootElement.find('.jsAddToCartButton').click();
		} else {
			FitAnalyticsHandler.selectRecommendedVariation();
			this.consoleLog("FitAnalyticsHandler.onCart -> Add2Cart:trigger");
			FitAnalyticsHandler.triggerAddToCart = true;
		}
	}
};



/**
 * on close
 */
FitAnalyticsHandler.onClose = function() {
	this.consoleLog("FitAnalyticsHandler.onClose");

	// click tracking completed if configuration finished
	if(FitAnalyticsHandler.recommendSize != undefined) {
		// trigger click tracking
		var clickTrackingObjectFitguideCompleted = { econda: { ref: "spv_fittingguide_fit_analytics_completed" } };
		jQuery(document).trigger({
			type: 'page:clicktrack',
			eventData : clickTrackingObjectFitguideCompleted
		});
	}
};


/**
 * openDialog
 */
FitAnalyticsHandler.openDialog = function(widget) {
	this.consoleLog("FitAnalyticsHandler.openDialog");

	FitAnalyticsHandler.widget.open({
		thumb		: FitAnalyticsHandler.thumbnailURL,
		sizes		: FitAnalyticsHandler.availableSizes
	});
}

/**
 * update spv
 */
FitAnalyticsHandler.updateSPV = function(state) {
	this.consoleLog("FitAnalyticsHandler.updateSPV");

	FitAnalyticsHandler.updateRecommendation();
	FitAnalyticsHandler.updateAddToCartWrapper(state);
};

/**
 * update spv recommendation
 */
FitAnalyticsHandler.updateRecommendation = function() {
	this.consoleLog("FitAnalyticsHandler.updateRecommendation");

	// hide FitAnalyticsButton
	FitAnalyticsHandler.rootElement.find('.jsSizeGuide .jsSizeGuideDialogFitAnalyticsButton, .jsSizeGuideAlertTemplate').hide();

	// update and show recommend text with size
	var recommendationText = FitAnalyticsHandler.rootElement.find('.jsSizeGuide .jsSizeGuideDialogFitAnalyticsRecommend').data('recommendation-text-template');
	recommendationText = recommendationText.replace("{0}",FitAnalyticsHandler.recommendSize);
	FitAnalyticsHandler.rootElement.find('.jsSizeGuide .jsSizeGuideDialogFitAnalyticsRecommend .jsRecommentationText').html(recommendationText);
	FitAnalyticsHandler.rootElement.find('.jsSizeGuide .jsSizeGuideDialogFitAnalyticsRecommend').show();

	// init dialog open on more link
	FitAnalyticsHandler.rootElement.find('.jsSizeGuide .jsSizeGuideDialogFitAnalyticsMore').off('click.openDialog');
	FitAnalyticsHandler.rootElement.find('.jsSizeGuide .jsSizeGuideDialogFitAnalyticsMore').on('click.openDialog', function(event) {
		event.preventDefault();
		FitAnalyticsHandler.openDialog();
	});
};

/**
 * update addtocart wrapper
 */
FitAnalyticsHandler.updateAddToCartWrapper = function(use) {
	this.consoleLog("FitAnalyticsHandler.updateAddToCartWrapper");

	// set addtocart-wrapper hidden fields
	FitAnalyticsHandler.rootElement.find('.jsFitguideName').val('fitanalytics');
	if (FitAnalyticsHandler.rootElement.find('.jsFitguideUse').val() != 'error') {
		FitAnalyticsHandler.rootElement.find('.jsFitguideUse').val(use);
	}
};

/**
 * add template
 */
FitAnalyticsHandler.addTemplate = function() {

	var jsRenderTemplate = jQuery.templates(jQuery('.jsRenderTemplate[data-jsrender-tpl="JSRENDERTPL_FITANALYTICS"]').html());
	var renderParams =
		{ 	thumbnailURL: PageContext.get('product.custom.fitGuide.thumbnailURL'),
			recommendText: PageContext.get('global.constants.fitGuide.recommendText'),
			moreText: PageContext.get('global.constants.fitGuide.moreText'),
			buttonText: PageContext.get('global.constants.fitGuide.buttonText'),
		};
	var fitGuideHTML = jsRenderTemplate.render(renderParams);
	jQuery('.jsSizeGuideTemplate').replaceWith(fitGuideHTML);
};

/**
 * add alert template
 */
FitAnalyticsHandler.addAlertTemplate = function() {
	// check if current product with that color  is already in basket - could be in different size
	var productColorIsInBasket = false;
	var currentProductMasterColor = PageContext.get('product.masterId') + '-' + PageContext.get('product.colorCode');
	var lineItems = PageContext.find('basket.allProductLineItems'); // get current line items from basket
	var lineItemFoundInBasket = null;
	
	if(lineItems != null) {
		jQuery.each(lineItems,function(key,lineItem) {
			var lineItemMasterColor = lineItem.masterId + '-' + lineItem.colorCode;
			if(lineItemMasterColor == currentProductMasterColor){
				productColorIsInBasket = true;
				lineItemFoundInBasket = lineItem;
				return;
			}
		});
	}

	// add template only if product with current color is already in basket
	if(productColorIsInBasket && FitAnalyticsHandler.rootElement.find('.jsFitguideUse').val() == 'notused'){
		var jsRenderTemplate = jQuery.templates(jQuery('.jsRenderTemplate[data-jsrender-tpl="JSRENDERTPL_FITANALYTICS_ALERT"]').html());
		var renderParams =
			{ 	alertText1: PageContext.get('global.constants.fitGuide.alertText1'),
				alertText2: PageContext.get('global.constants.fitGuide.alertText2'),
				buttonText: PageContext.get('global.constants.fitGuide.alertButtonText'),
			};
		var fitGuideHTML = jsRenderTemplate.render(renderParams);
		jQuery('.jsSizeGuideAlertTemplate').append(fitGuideHTML);
		jQuery('.jsSizeAlertVariationSize').append(lineItemFoundInBasket.size);
		jQuery('.jsSizeGuideAlert').on( "clickoutside", function(event){
			jQuery(this).remove();
		});
		// bind dialog open handler
		FitAnalyticsHandler.rootElement.find('.jsSizeGuideDialogFitAnalyticsAlertButton').off('click.openDialog');
		FitAnalyticsHandler.rootElement.find('.jsSizeGuideDialogFitAnalyticsAlertButton').on('click.openDialog', function(event) {
			event.preventDefault();
			FitAnalyticsHandler.openDialog();
		});
	}
};

/**
 * init available sizes
 */
FitAnalyticsHandler.initAvailableSizes = function() {
	//get available sizes
	FitAnalyticsHandler.availableSizes = [];
	FitAnalyticsHandler.rootElement.find('.jsAllDetails').find('.jsProductVariations li.fitanalytics_available .fitanalytics_sizeText').each(function () {
		FitAnalyticsHandler.availableSizes.push(jQuery(this).text().trim());
	});
};

/**
 * recommendedVariationIsSelected
 */
FitAnalyticsHandler.recommendedVariationIsSelected = function() {
	if(FitAnalyticsHandler.rootElement.find('li.jsSizeVariant.fitanalytics_active[data-sizeid="' + FitAnalyticsHandler.convertedSize + '"]').size() == 0) {
		return false;
	} else {
		return true;
	}
};

/**
 * recommendedVariationIsAvailable
 */
FitAnalyticsHandler.recommendedVariationIsAvailable = function() {
	if(FitAnalyticsHandler.rootElement.find('li.jsSizeVariant.fitanalytics_available[data-sizeid="' + FitAnalyticsHandler.convertedSize + '"]').size() != 0) {
		return true;
	} else {
		return false;
	}
};

/**
 * selectRecommendedVariation
 */
FitAnalyticsHandler.selectRecommendedVariation = function() {
	FitAnalyticsHandler.rootElement.find('li.jsSizeVariant.fitanalytics_available[data-sizeid="' + FitAnalyticsHandler.convertedSize + '"] .jsSizeInput').click();
};

/**
 * console log
 */
FitAnalyticsHandler.consoleLog = function(msg) {
	if (FitAnalyticsHandler.consoleLogEnabled) {
		console.log(msg);
	}
};

jQuery(document).bind("track:onview", function(event) {

	var widgetURL = "//widget.fitanalytics.com/widget.js";
	var reportPurchaseURL = "//collector.fitanalytics.com/report_purchase.js";

	// spv page handling
	var initFitanalyticsSPV = function() {
		FitAnalyticsHandler.init(jQuery(event.target).find('.jsSPVBase'));
		jQuery(document).one('spvcontroller:reinitiated', function(event) {
			jQuery(document).bind("track:onview", function(event) {
				FitAnalyticsHandler.reinit(jQuery(event.target).find('.jsSPVBase'));
			});
		});
	}

	if (PageContext.get('global.pageType') == PageContext.get('global.availablePages.productdetails')) {
		jQuery(document).one('spvcontroller:initiated',function(event) {
			CoreUtils.loadExternalScript(widgetURL, function(){return true;}, initFitanalyticsSPV);
		});

	}


	// report confirmation page
	var reportPurchase = function() {
		// get country and language from pagecontext
		var shopCountry = (PageContext.get('global.constants.locale.country') == "")?"DE":PageContext.get('global.constants.locale.country');
		var language = (PageContext.get('global.constants.locale.language') == "")?"de":PageContext.get('global.constants.locale.language');

		jQuery.each(PageContext.get('order.allProductLineItems'),function(key,pli) {
			var jsonProduct = new Object();
			jsonProduct.productId = PageContext.get('global.constants.brand.name') + "-" + pli.masterId;
			jsonProduct.orderId = PageContext.get('order.orderNo');
			jsonProduct.userId = PageContext.get('customer.id');
			jsonProduct.purchasedSize = pli.size;
			jsonProduct.price = pli.price.value;
			jsonProduct.currency = pli.price.currencyCode;
			jsonProduct.shopCountry = shopCountry;
			jsonProduct.language = language;
			_sendPurchaseInformation(jsonProduct);
		});
	}

	if (PageContext.get('global.pageType') == PageContext.get('global.availablePages.coconfirmation')) {
		CoreUtils.loadExternalScript(reportPurchaseURL, function(){return true;}, reportPurchase);
	}

});

/* ]]> */
// -->


//<!--
/* <![CDATA[ */

jQuery(document).bind("page:ready", function(event) {

	// check if login modal is enabled
	let loginModalEnabled = PageContext.get('global.constants.loginmodalenabled');
	if (!loginModalEnabled) {
		return;
	}

	// check if current page type is allowed for login modal
	let currentPageType = PageContext.get('global.pageType');
	let avPages = PageContext.get('global.availablePages');
	let notAllowedPages = new Array();

	// add all checkout and myaccount pages to the non allowed pages array
	for (let p in avPages) {
		if (  (p.indexOf('co') == 0 && p.indexOf('contact') == -1)
			|| p.indexOf('myaccount') != -1 ) {
			notAllowedPages.push(avPages[p]);
		}
	}

	if (jQuery.inArray(currentPageType, notAllowedPages) >= 0) {
		return;
	}

	// check if customer is returning
	let customerAuthenticated = PageContext.get('customer.authenticated');
	let customerReturning = PageContext.get('customer.returning');
	if (customerAuthenticated || !customerReturning) {
		return;
	}

	// check if we are in the right a/b test segment
	let abTestSegment = PageContext.get('customer.abTestSegment');
	if (!empty(abTestSegment.abTestId) && !empty(abTestSegment.segmentId)) {

		let abTestId = abTestSegment.abTestId;
		let segmentId = abTestSegment.segmentId;
		if (abTestId == 'DW-Login-01-ShowLoginModal' && segmentId != 'ShowLoginModal') {
			return;
		}
	}

	// check if modal was already shown in this session
	let loginModalShown = (CookieUtils.readCookie('loginModalShown') == 1);
	if (loginModalShown) {
		return;
	}
	// create the cookie to control if login modal was already shown
	CookieUtils.createCookie('loginModalShown',1);

	// launch the modal dialog
	let loginModalUrl = PageContext.get('global.constants.url.loginmodal');
	let loginModalOptions = PageContext.get('global.constants.layer.loginmodal');
	ContentUtils.loadDialog(loginModalUrl, loginModalOptions);

});

/* ]]> */
// -->



