var ResultsPageSizeDimensionListener = {
	initialize : function() {
		if(window.location.pathname.match(/Results.aspx/i)) {
			ResultsPageSizeDimensionListener.clearSizeWidthCookie();

			var sizeSelectorArray = $('#sortbar-size select');
			var widthSelectorArray = $('#sortbar-width select');
			var departmentLabelArray = $('div.nav-department div.nav-selected div');

			// if this is the search results page and the size dropdown exists
			if(sizeSelectorArray.length) {
				var sizeSelector = sizeSelectorArray;
				var widthSelector = widthSelectorArray;
				var departmentLabel = departmentLabelArray[0];

				var size;
				// if size has already been selected
				if(sizeSelector.length && (sizeSelector.children().length === 2) && (!sizeSelector.children()[0].value.match(/^Choose one$/))) {
					size = sizeSelector.children()[0].value;
				}

				var width;
				// if width has already been selected
				if(widthSelector.length && (widthSelector.children().length === 2) && (!widthSelector.children()[0].value.match(/^Choose one$/))) {
					width = widthSelector.children()[0].value;
				}

				var department;
				if(departmentLabel) {
					department = departmentLabel.innerHTML.replace(/^\s+|\s+$/g,'');
				}

				ResultsPageSizeDimensionListener.dropSizeWidthCookie(size, width, department);
			}
		}
	},

	clearSizeWidthCookie : function() {
		if(document.cookie.indexOf('sizeWidth=') != -1) {
			document.cookie = 'sizeWidth=';
		}
	},

	dropSizeWidthCookie : function(size, width, department) {
		if(!size) return;
		document.cookie = 'sizeWidth=' + ((size) ? size : '') + '|' + ((width) ? width : '') + '|' + ((department) ? department : '');
	}
};

var ProductDetailsPageSizePreSelector = {
	initialize : function() {
		ProductDetailsPageSizePreSelector.sizeValue = null;
		ProductDetailsPageSizePreSelector.widthValue = null;
		ProductDetailsPageSizePreSelector.departmentValue = null;

		ProductDetailsPageSizePreSelector.loadGenderSizeCookie();

		//if(window.location.pathname.match(/ProductDetails.aspx/i) && document.referrer.match(/Results.aspx/i) && ProductDetailsPageSizePreSelector.sizeValue) {
		if(window.location.pathname.match(/ProductDetails.aspx/i) && ProductDetailsPageSizePreSelector.sizeValue) {
			ProductDetailsPageSizePreSelector.setProductDetailsSize();
		}
	},

	abbreviateWidth : function() {
		var pattern;

		// is ugly because our application is so poorly cobbled together
		if(ProductDetailsPageSizePreSelector.departmentValue.match(/^Womens$/i)) {
			if(ProductDetailsPageSizePreSelector.widthValue.match(/^Extra Narrow/i)) {
				pattern = '\\b(4A|2S|Quad)\\b';
			}
			else if(ProductDetailsPageSizePreSelector.widthValue.match(/^Narrow/i)) {
				pattern = '\\b(3A|2A|N|Slim)\\b';
			}
			else if(ProductDetailsPageSizePreSelector.widthValue.match(/^Wide/i)) {
				pattern = '\\b(C|W)\\b';
			}
			else if(ProductDetailsPageSizePreSelector.widthValue.match(/^Extra Wide/i)) {
				pattern = '\\b(D|2W|W)\\b';
			}
			else if(ProductDetailsPageSizePreSelector.widthValue.match(/^Extra Extra Wide/i)) {
				pattern = '\\b(E|2E|3E|4E|3W)\\b';
			}
			else { //if(ProductDetailsPageSizePreSelector.widthValue.match(/^Medium/i)) {
				pattern = '\\b(B|M)\\b';
			}
		}
		else if(ProductDetailsPageSizePreSelector.departmentValue.match(/^Mens$/i)) {
			if(ProductDetailsPageSizePreSelector.widthValue.match(/^Extra Narrow/i)) {
				pattern = '\\b(2A|A)\\b';
			}
			else if(ProductDetailsPageSizePreSelector.widthValue.match(/^Narrow/i)) {
				pattern = '\\b(B|N)\\b';
			}
			else if(ProductDetailsPageSizePreSelector.widthValue.match(/^Wide/i)) {
				pattern = '\\b(E|2E|W)\\b';
			}
			else if(ProductDetailsPageSizePreSelector.widthValue.match(/^Extra Wide/i)) {
				pattern = '\\b(3E|4E|2W)\\b';
			}
			else if(ProductDetailsPageSizePreSelector.widthValue.match(/^Extra Extra Wide/i)) {
				pattern = '\\b(5E|6E|3W)\\b';
			}
			else { //if(ProductDetailsPageSizePreSelector.widthValue.match(/^Medium/i)) {
				pattern = '\\b(D|M)\\b';
			}
		}
		else if(ProductDetailsPageSizePreSelector.departmentValue.match(/^Boys$/i) || ProductDetailsPageSizePreSelector.departmentValue.match(/^Girls$/i)) {
			if(ProductDetailsPageSizePreSelector.widthValue.match(/^Extra Narrow/i)) {
				pattern = '\\b()\\b';
			}
			else if(ProductDetailsPageSizePreSelector.widthValue.match(/^Narrow/i)) {
				pattern = '\\b(N)\\b';
			}
			else if(ProductDetailsPageSizePreSelector.widthValue.match(/^Wide/i)) {
				pattern = '\\b(D|E|W)\\b';
			}
			else if(ProductDetailsPageSizePreSelector.widthValue.match(/^Extra Wide/i)) {
				pattern = '\\b()\\b';
			}
			else if(ProductDetailsPageSizePreSelector.widthValue.match(/^Extra Extra Wide/i)) {
				pattern = '\\b(3E|XXW|2W)\\b';
			}
			else { //if(ProductDetailsPageSizePreSelector.widthValue.match(/^Medium/i)) {
				pattern = '\\b(M)\\b';
			}
		}

		return new RegExp(pattern);
	},

	loadGenderSizeCookie : function() {
		var start = document.cookie.indexOf('sizeWidth=');

		if(start != -1) {
			var end = document.cookie.indexOf(';', start);
			var cookiedValue = document.cookie.substring(start, end);
			var cookiedValues = cookiedValue.replace('sizeWidth=','').split('|');

			ProductDetailsPageSizePreSelector.sizeValue = cookiedValues[0];
			ProductDetailsPageSizePreSelector.widthValue = cookiedValues[1];
			ProductDetailsPageSizePreSelector.departmentValue = cookiedValues[2];
		}
	},

	setProductDetailsSize : function() {
		var detailsSize = $('div.chooseBox select.SizeWidth');
		if( detailsSize.length ) {
			var sizeRegex = (ProductDetailsPageSizePreSelector.sizeValue) ? new RegExp('\\b' + ProductDetailsPageSizePreSelector.sizeValue + '\\b') : null;
			var widthRegex = ProductDetailsPageSizePreSelector.abbreviateWidth();

			var desiredSize = detailsSize[0].children().map(
				function(index, item) {
					return ProductDetailsPageSizePreSelector.findDesiredSize(sizeRegex, widthRegex, item);
				}
			);

			if(desiredSize) {
				detailsSize[0].selectedIndex = detailsSize[0].children().indexOf(desiredSize);
			}
		}
	},

	findDesiredSize : function(sizeRegex, widthRegex, elt) {
		var found = false;

		if(ProductDetailsPageSizePreSelector.widthValue) {
			found = Boolean(elt.text.match(sizeRegex));
			found = found && Boolean(elt.text.match(widthRegex));
		} else {
			found = Boolean(elt.text.match(sizeRegex));
		}

		if(found) return found;
		else return null;
	}
};

$(document).ready(ResultsPageSizeDimensionListener.initialize);
$(document).ready(ProductDetailsPageSizePreSelector.initialize);


