var isIE6 = detectIE6();

var magnifiedShirt = null;

var MAG_SPEED = 0.3;

var MOVING_INDEX = [
	[{},{top:26, left:130},{top:0, left:104},{top:13, left:52},{top:0, left:26},{top:13,left:-13},{top:26,left:13},{top:13,left:13}],
	[{top:0, left:-65},{},{top:0, left:78},{top:26, left:52},{top:0, left:26},{top:26,left:-65},{top:26,left:78},{top:13,left:13}],
	[{top:0, left:-52},{top:26, left:-104},{},{top:26, left:104},{top:0, left:52},{top:13,left:-26},{top:13,left:0},{top:13,left:26}],
	[{top:0, left:-26},{top:26, left:-52},{top:0, left:-78},{},{top:0, left:65},{top:13,left:-13},{top:26,left:-78},{top:13,left:65}],
	[{top:0, left:-26},{top:13, left:-52},{top:0, left:-104},{top:26, left:-130},{},{top:13,left:-13},{top:26,left:-13},{top:13,left:13}],
	[{top:0, left:-13},{top:-26, left:130},{top:0, left:52},{top:-13, left:52},{top:0,left:0},{},{top:13,left:78},{top:13,left:13}],
	[{top:0, left:-26},{top:-26, left:-104},{top:0, left:0},{top:-26, left:104},{top:0,left:13},{top:13,left:-52},{},{top:13,left:52}],
	[{top:0, left:-13},{top:-13, left:-52},{top:0, left:-52},{top:-13, left:-130},{top:0,left:13},{top:0,left:0},{top:13,left:-78},{}]
];

var tweens = new Array();

var shirtTween = Tween.backEaseOut;
//var shirtTween = null;

function magnify(myDiv, id) {
	var images = myDiv.getElementsByTagName("img");
	var shirtImage = null;
	for (var i = 0; !shirtImage && i < images.length; i++) {
		if (images[i].id == id) {
			shirtImage = images[i];
		}
	}
	if (magnifiedShirt) {
		unmagnify(magnifiedShirt);
	}
	var bigShirtWidth = 300;
	var bigShirtHeight = 370;
	var group = myDiv.parentNode;
	var siblings = group.getElementsByTagName("div");
	var myDivIndex = myDiv.getAttribute("shirtId");
	for (var i = 0; i < siblings.length; i++) {
		var div = siblings[i];
		if (div.className.indexOf("shirt") == -1) {
			continue;
		}
		shuffle(div, parseInt(div.getAttribute("shirtId"), 10), myDivIndex);
	}
	myDiv.setAttribute("oldClassName", myDiv.className);
	myDiv.setAttribute("oldZIndex", myDiv.style.zIndex);
	myDiv.className = "magnified " + myDiv.className;
	magnifiedShirt = shirtImage;
}

function unmagnify(shirtImage) {
	if (!shirtImage) {
		shirtImage = magnifiedShirt;
	}
	if (shirtImage) {
		stopAllTweens(tweens);
		var myDiv = shirtImage.parentNode.parentNode;
		var group = myDiv.parentNode;
		var siblings = group.getElementsByTagName("div");
		for (var i = 0; i < siblings.length; i++) {
			var div = siblings[i];
			if (div.className.indexOf("shirt") == -1) {
				continue;
			}
			div.style.top = div.getAttribute("oldTop") + "px";
			div.style.left = div.getAttribute("oldLeft") + "px";
		}
		var oldClassName = myDiv.getAttribute("oldClassName");
		var oldZIndex = myDiv.getAttribute("oldZIndex");
		myDiv.className = oldClassName;
		myDiv.style.zIndex = oldZIndex;
		magnifiedShirt = null;
	}
}

function shuffle(div, index, movingIndex) {
	var top = div.offsetTop;
	var left = div.offsetLeft;
	div.setAttribute("oldTop", top);
	div.setAttribute("oldLeft", left);
	var moves = MOVING_INDEX[movingIndex][index];
	var tweenLeft = null;
	var tweenTop = null;
	if (moves.left) {
		tweenLeft = new Tween(div.style, "left",shirtTween,left,left + moves.left,MAG_SPEED,"px");
		tweenLeft.start();
		tweens.push(tweenLeft);
	}
	if (moves.top) {
		tweenTop = new Tween(div.style, "top",shirtTween,top,top + moves.top,MAG_SPEED,"px");
		tweenTop.start();
		tweens.push(tweenTop);
	}
}

function stopAllTweens(whichTweens) {
	for (var i = 0; i < whichTweens.length; i++) {
		whichTweens[i].stop();
		whichTweens[i].rewind();
	}
	whichTweens = new Array();
}

/* Shirt detail page */

var thumbs = new Array();

var carouselTweens = new Array();

var HIDDEN_COORDS = {top:100,left:100,z:1};

var middleIndex = 2;

function rotateTo(id) {
	populateCarousel();
	if (document.getElementById(id)) {
		var found = (thumbs[middleIndex].id === id);
		while (!found) {
			rotate(thumbs[middleIndex - 1]);
			found = (thumbs[middleIndex].id === id);
		}
	}
}

function rotate(originator) {
	originator = getOriginatorIndex(originator);
	var slots = findSlots();
	var step = calculateStep(middleIndex, originator);
	if (step !== 0) {
		stopAllTweens(carouselTweens);
		var posStep = Math.abs(step);
		if (posStep < thumbs.length) {
			var coordChains = new Array();
			var coords = findCoordsForSlots(slots);
			var max = thumbs.length;
			if (slots.length > max) {
				max = slots.length;
			}
			for (var i = 0; i < thumbs.length; i++) {
				var thumb = thumbs[i];
				var sequenceTop = new Sequence();
				var sequenceLeft = new Sequence();
				var coordChain = new Array();
				var index = i;
				var fromCoords = coords[index];
				for (var j = 0; j < posStep; j++) {
					if (index === 0 && step > 0) {
						index = max - 1;
					} else if (index === max - 1 && step < 0) {
						index = 0;
					} else if (step < 0) {
						index += 1;
					} else if (step > 0) {
						index -= 1;
					}
					var toCoords = coords[index];
					var topTween = new Tween(thumb.style, "top", null, parseInt(fromCoords.top, 10), parseInt(toCoords.top, 10), 0.2, "px");
					var motionObject = {
						step: step,
						index: i,
						middleIndex: middleIndex,
						thumb: thumb,
						z: toCoords.z,
						onMotionStarted: function() {
							this.thumb.style.zIndex = this.z;
							if (this.index === this.middleIndex) {
								unmagnifyCarouselSlot(this.thumb);
							} else if ((this.index === this.middleIndex - Math.abs(this.step) && this.step < 0) || (this.index === this.middleIndex + Math.abs(this.step) && this.step > 0)) {
								magnifyCarouselCenter(this.thumb);
							}
						}
					};
					topTween.addListener(motionObject);
					var leftTween = new Tween(thumb.style, "left", null, parseInt(fromCoords.left, 10), parseInt(toCoords.left, 10), 0.2, "px");
					sequenceTop.addChild(topTween);
					sequenceLeft.addChild(leftTween);
					coordChain.push({from: fromCoords, to: toCoords});
					fromCoords = toCoords;
				}
				coordChains.push({top: sequenceTop, left: sequenceLeft});
			}

			for (var i = 0; i < thumbs.length; i++) {
				var coordChain = coordChains[i];
				var topSequence = coordChain.top;
				var leftSequence = coordChain.left;
				carouselTweens.push(topSequence);
				carouselTweens.push(leftSequence);
				topSequence.start();
				leftSequence.start();
			}

			for (var i = 0; i < posStep; i++) {
				if (step > 0) {
					var thumb = thumbs.shift();
					thumbs.push(thumb);
				} else {
					var thumb = thumbs.pop();
					thumbs.unshift(thumb);
				}
			}
		}
	}
}

function populateCarousel() {
	if (!thumbs) {
		thumbs = new Array();
	}
	if (thumbs.length === 0) {
		var carousel = document.getElementById("carousel");
		if (carousel) {
			var divs = carousel.getElementsByTagName("div");
			for (var i = 0; i < divs.length; i++) {
				var div = divs[i];
				if (div.className !== "thumb") {
					continue;
				}
				thumbs.push(div);
			}
		}
	}
}

function findSlots() {
	var slots = new Array();
	var carousel = document.getElementById("carousel");
	if (carousel) {
		var divs = carousel.getElementsByTagName("div");
		for (var i = 0; i < divs.length; i++) {
			var div = divs[i];
			if (div.className === "carouselSlot") {
				slots.push(div);
			}
		}
	}
	return slots;
}

function calculateStep(middleIndex, originator) {
	var step = 0 - middleIndex + originator;
	return step;
}

function findCoordChain(coordChains, thumb) {
	var coordChain = null;
	for (var i = 0; i < coordChains.length; i++) {
		coordChain = coordChains[i];
		if (coordChain.thumb === thumb) {
			break;
		}
	}
	return coordChain;
}

function findCoordsForSlots(slots) {
	var coords = new Array();
	var max = thumbs.length;
	if (slots.length > max) {
		max = slots.length;
	}
	for (var i = 0; i < max; i++) {
		var slotCoords = null;
		if (i < slots.length) {
			var slot = slots[i];
			slotCoords = {top: slot.style.top, left: slot.style.left, z: slot.style.zIndex};
		} else {
			slotCoords = HIDDEN_COORDS;
		}
		coords.push(slotCoords);
	}
	return coords;
}

function magnifyCarouselCenter(thumb) {
	var images = thumb.getElementsByTagName("img");
	for (var i = 0; i < images.length; i++) {
		var image = images[i];
		if (image.className === "thumbImage") {
			var src = image.src;
			var thumbIndex = src.lastIndexOf("_thumb");
			var dotIndex = src.lastIndexOf(".");
			src = src.substring(0, thumbIndex) + src.substring(dotIndex);
			document.getElementById("imageDisplayImage").src = src;
			image.style.display = "none";
		} else if (image.className === "thumbMatte") {
			image.style.display = "none";
		} else if (image.className === "thumbMatteMag" || image.className === "thumbImageMag") {
			image.style.display = "block";
		}
	}
}

function unmagnifyCarouselSlot(thumb) {
	var images = thumb.getElementsByTagName("img");
	for (var i = 0; i < images.length; i++) {
		var image = images[i];
		if (image.className === "thumbImageMag" || image.className === "thumbMatteMag") {
			image.style.display = "none";
		} else {
			image.style.display = "block";
		}
	}
}

function selectSex(selectedSex) {
	var sexes = document["sex"];
	document.getElementById("hiddenGender").value = selectedSex;
	for (var i = 0; i < sexes.length; i++) {
		var sex = sexes[i];
		var src = sex.src;
		var onIndex = src.lastIndexOf("_on");
		var dotIndex = src.lastIndexOf(".");
		if (sex.getAttribute("value") === selectedSex) {
			if (onIndex === -1) {
				src = src.substring(0, dotIndex) + "_on" + src.substring(dotIndex);
			}
		} else {
			if (onIndex !== -1) {
				src = src.substring(0, onIndex) + src.substring(dotIndex);
			}
		}
		sex.src = src;
	}
	rotateTo(selectedSex.toLowerCase());
	genderChange();
}

function getOriginatorIndex(originator) {
	populateCarousel();
	for (var i = 0; i < thumbs.length; i++) {
		if (thumbs[i] === originator) {
			originator = i;
			break;
		}
	}
	return originator;
}

function retotal() {
	var fields = ["styles", "sizes"];
	var newPrice = null;
	for (var i = 0; i < fields.length; i++) {
		var field = document.getElementById(fields[i]);
		if (field) {
			var text = field.options[field.selectedIndex].text;
			var dollarIndex = text.indexOf("$") - 1;
			if (newPrice == null) {
				newPrice = parseFloat(field.getAttribute("price"));
			}
			if (dollarIndex > 0) {
				var sign = text.substring(dollarIndex++, dollarIndex);
				var priceMod = parseFloat(text.substring(dollarIndex + 1, text.indexOf(")")));
				if (sign == "-") {
					priceMod *= -1;
				}
				newPrice += priceMod;
			}
		}
	}
	if (newPrice) {
		document.getElementById("totalPrice").innerHTML = "$" + newPrice.toFixed(2);
	}
}

function genderChange() {
	var form = document.getElementById("cartForm");
	optionChange(form, document["sex"], form.elements["o2"], 0);
	styleChange(form);
	retotal();
}

function styleChange(form) {
	optionChange(form, form.elements["o2"], form.elements["o3"], 1, document["sex"]);
	retotal();
}

var hiddenOptions = null;

function optionChange(form, parentOption, childOption, facetIndex, masterOption) {
	if (combos) {
		if (!hiddenOptions) {
			hiddenOptions = {};
		}
		var allSkus = combos.split("|");
		var selectedParentOption = getSelectedOption(parentOption);
		var validChildOptions = new Array();
		for (var i = 0; i < allSkus.length; i++) {
			var facets = allSkus[i].split(",");
			var facet = facets[facetIndex];
			if (facet == selectedParentOption.getAttribute("value") || facet == selectedParentOption.value) {
				if (masterOption) {
					var selectedMasterOption = getSelectedOption(masterOption);
					var masterFacet = facets[facetIndex - 1];
					if (masterFacet === selectedMasterOption.getAttribute("value")) {
						validChildOptions.push(facets[facetIndex + 1]);
					}
				} else {
					validChildOptions.push(facets[facetIndex + 1]);
				}
			}
		}
		var childOptionName = childOption.getAttribute("name");
		var selectedChildOption = getSelectedOption(childOption);
		if (hiddenOptions[childOptionName]) {
			var allVisibleOptions = new Array();
			for (var i = 0; childOption.options && i < childOption.options.length; i++) {
				var option = childOption.options[i];
				option.setAttribute("originalText", option.text); // IE erases the text. Save for later.
				allVisibleOptions.push(childOption.options[i]);
			}
			var expectedOptionCount = allVisibleOptions.length;
			var expectedOptionCountAdditional = 0;
			for (var hiddenOptionName in hiddenOptions[childOptionName]) {
				expectedOptionCountAdditional++;
			}
			if (expectedOptionCountAdditional > 0) {
				expectedOptionCount += expectedOptionCountAdditional;
				var allFinalOptions = new Array(expectedOptionCount);
				for (var hiddenOptionName in hiddenOptions[childOptionName]) {
					var hiddenOption = hiddenOptions[childOptionName][hiddenOptionName];
					var element = hiddenOption.element;
					var index = hiddenOption.index;
					allFinalOptions[index] = element;
					delete hiddenOptions[childOptionName][hiddenOptionName];
				}
				childOption.innerHTML = "";
				for (var i = 0; i < allFinalOptions.length; i++) {
					var finalOption = allFinalOptions[i];
					if (!finalOption) {
						finalOption = allVisibleOptions.shift();
					}
					finalOption.innerText = finalOption.getAttribute("originalText"); // IE erases the text. Need to restore it here.
					childOption.appendChild(finalOption);
				}
			}
		}
		for (var i = 0, index = 0; childOption.options && i < childOption.options.length; index++) {
			var option = childOption.options[i];
			var found = false;
			for (var j = 0; !found && j < validChildOptions.length; j++) {
				found = validChildOptions[j] == option.value;
			}
			if (!found) {
				option.setAttribute("originalText", option.text); // IE erases the text. Save for later.
				var removedOption = {
					element: childOption.removeChild(option),
					index: index
				};
				if (!hiddenOptions[childOptionName]) {
					hiddenOptions[childOptionName] = {};
				}
				hiddenOptions[childOptionName][removedOption.element.value] = removedOption;
			} else {
				i++;
			}
		}
		var found = false;
		for (var i = 0; childOption.options && !found && i < childOption.options.length; i++) {
			var option = childOption.options[i];
			if (option.value === selectedChildOption.value) {
				found = true;
			}
		}
		if (!found) {
			childOption.selectedIndex = 0;
		}
	}
}

function getSelectedOption(element) {
	var selectedOption = null;
	var type = null;
	var isArray = false;
	if (element[0]) {
		isArray = true;
		type = element[0].type;
		if (!type) {
			type = element[0].getAttribute("type");
		}
	} else {
		type = element.type;
		if (!type) {
			type = element.getAttribute("type");
		}
	}
	if (type) {
		type = type.toLowerCase();
	}
	if (type === "radio") {
		selectedOption = element;
		if (isArray) {
			for (var i = 0, radio = null; radio = element[i]; i++) {
				if (radio.src.indexOf("_on.") > -1) {
					selectedOption = radio;
					break;
				}
			}
		}
	} else if (type === "select") {
		selectedOption = element.options[element.selectedIndex];
	} else {
		selectedOption = element;
	}
	return selectedOption;
}

/* Util functions */

function hover(target) {
	target.setAttribute("oldClassName", target.className);
	target.className = target.className + "_hover";
}

function unhover(target) {
	target.className = target.getAttribute("oldClassName");
}

function detectIE6() {
	var result = false;
	if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
		var ieVersion = new Number(RegExp.$1); // capture x.x portion and store as a number
		result = ieVersion == 6;
	}
	return result;
}

function submitSubscribeForm(divUpdateId,formId) {
	if (!formId) {
		formId = "subscribeForm";
	}
	if (/[-.a-zA-Z0-9]+@[a-zA-Z0-9]+(\.[a-zA-Z]+)+/.test($(formId)["email"].value)) {
		$(formId).request({
			onSuccess: function(transport, json) {
				$(divUpdateId).innerHTML = "Check your email for a link to confirm your subscription status!";
			}
		});
	}
	return false;
}

function EJEJC_lc(th) {
	return false;
}