﻿var QueryStringHelpers = {

	tokenizeQs: function(q) {
		var r = {};
		q = q.replace(/^\?/, ''); // remove the leading ?
		q = q.replace(/\&$/, ''); // remove the trailing &
		jQuery.each(q.split('&'), function() {
			var key = this.split('=')[0];
			var val = this.split('=')[1];

			// convert floats
			if (/^[0-9.]+$/.test(val)) {
				val = parseFloat(val);
			} // ingnore empty values
			if (val || val === 0) {
				r[key] = val;
			}
		});
		return r;
	},

	getQsParamValue: function(qs, param) {
		var params = QueryStringHelpers.tokenizeQs(qs);

		for (var p in params) {
			if (p.toLowerCase() === param.toLowerCase()) {
				return params[p];
			} else {
				continue;
			}
		}
		return "";
	},

	appendQsParam: function(qs, param, value) {
		var delimiter = qs.length <= 0 ? '?' : '&';
		return qs + delimiter + param + '=' + value;
	},

	replaceQsParam: function(qs, param, oldValue, newValue) {
		var params = QueryStringHelpers.tokenizeQs(qs);
		var newQs = '';

		for (var p in params) {
			var v = params[p];

			//compare string p to string param but allow v and oldValue to be different types (string vs int)
			if (p.toLowerCase() === param.toLowerCase() && v == oldValue) {
				v = newValue
			}
			newQs = QueryStringHelpers.appendQsParam(newQs, p, v);
		}
		return newQs;

	},

	removeQsParams: function(qs, removeItems) {
		var params = QueryStringHelpers.tokenizeQs(qs);
		var newQs = '';

		for (var param in params) {
			var value = params[param];

			if ($.inArray(param, removeItems) > 0) {
				continue;
			} else {
				newQs = QueryStringHelpers.appendQsParam(newQs, param, value);
			}
		}
		return newQs;
	}
};

var EndecaProfiledBanners = {

	initialize: function() {
		EndecaProfiledBanners.updateMerchZone();
	},

	getCampaign: function() {
		return new CookieManager().getValueIgnoreCase('s_campaign');
	},

	updateMerchZone: function() {

		var n = QueryStringHelpers.getQsParamValue(location.search, 'N');
		if (n === null || n === '') {
			return;
		}

		var campaign = EndecaProfiledBanners.getCampaign();
		if (campaign == null || campaign.length <= 0) {
			return;
		}

		var newQs = QueryStringHelpers.removeQsParams(location.search, ['control', 's_campaign']);
		newQs = QueryStringHelpers.replaceQsParam(newQs, 'N', '0', '6336'); //replace N=0 with N=6336 (Genderless)
		newQs = QueryStringHelpers.appendQsParam(newQs, 'control', 'EndecaProfiledBanner');
		newQs = QueryStringHelpers.appendQsParam(newQs, 's_campaign', campaign);
		newQs = QueryStringHelpers.appendQsParam(newQs, 'shopid', $('#merchZoneShopId').html());
		
		jQuery.ajax({
			type: 'GET',
			url: '/WebServices/GetData.ashx' + newQs,
			dataType: 'application/json',
			success: function(data) {
				json = $.parseJSON(data);

				if (json && json.EndecaProfiledBanner
						&& json.EndecaProfiledBanner.Html
						&& json.EndecaProfiledBanner.Html != ''
						&& json.EndecaProfiledBanner.Html != 'undefined') {

					html = unescape(json.EndecaProfiledBanner.Html);

					if (json.EndecaProfiledBanner.Profile.length > 0) {
						EndecaProfiledBanners.logBannerView(json.EndecaProfiledBanner.Profile);

						if (json.EndecaProfiledBanner.IsAboveAllContent === 'True') {
							$('#content-wideShop').html(html);
							$('#ResultZone4_wrapper').html("");
						} else {
							$('#content-wideShop').html("");
							$('#ResultZone4_wrapper').html(html);
						}
					}
				}
			}
		});
	},

	logBannerView: function(profile) {
		$.ajax({
			type: 'GET',
			url: '/WebServices/RenderControls.aspx?control=EndecaProfiledBannerTracker&profile=' + profile,
			dataType: 'html',
			success: function(data) {
				if (typeof (CleanAjaxResponse) !== 'undefined') {
					data = CleanAjaxResponse(data);
				}
				if ($('#endecaProfiledBannerTrackerDiv').length === 0) {
					$('body').append("<div id='endecaProfiledBannerTrackerDiv' style='display:none'></div>");
				}
				$('#endecaProfiledBannerTrackerDiv').html(data);
			}
		});
	}
};
$(document).ready(EndecaProfiledBanners.initialize);
