/*
shanshan added functions - 2011/02/24
if any attribute is unique, this attribute would be pre-selected and user can't de-select it.
if color attribute is not part of current product attribute, use "ConfigurableProductViewHelperSizeOnly" object instead 
*/
jQuery.noConflict();
jQuery(document).ready(function() {
			//check if color exist ssy
		jQuery.fn.exists = function(){
			return jQuery(this).length > 0;
		}
	
	if(!jQuery(".configurable-product-selector-size-option").exists()){
	jQuery("#product-addtocart-button").click(function(){
		jQuery("#product_addtocart_form").submit();	
		});
	}
		
		
		
		
	if (jQuery(".configurable-product-selector-color-option").exists()) {   //colr,size as super attributes ssy
	//create a string of the unique color_id ssy
	var uniqueColors = new Array();
	var uniqueSizes = new Array();
		for (simpleProductIndex = 0; simpleProductIndex < superAttributeInfo.length; simpleProductIndex++) {
			simpleProductInfo = superAttributeInfo[simpleProductIndex];
			uniqueColors.push(simpleProductInfo.color_id); 
			uniqueSizes.push(simpleProductInfo.size_id);
		}
	//find if the color_id is unique or not ssy
		//alert(jQuery.unique(uniqueColors).length);
	//	alert(jQuery.unique(uniqueSizes).length);
		//alert(uniqueColors[0]);
		//pre-select the unique attribute ssy
		if(jQuery.unique(uniqueColors).length==1){
			jQuery('.configurable-product-selector-color-option[color_id="'+uniqueColors[0]+'"]').addClass("configurable-attribute-option-selected"); //always selected ssy
		}
		if(jQuery.unique(uniqueSizes).length==1){
			jQuery('.configurable-product-selector-size-option[size_id="'+uniqueSizes[0]+'"]').addClass("configurable-attribute-option-selected"); //always selected ssy
		}
		
		jQuery(".configurable-product-selector-size-option").unbind('click').click(function(){
			if (jQuery(this).hasClass("configurable-attribute-option-disabled")) { //keep as not avaialbe
				return;
			}
			
			if (jQuery(this).hasClass("configurable-attribute-option-selected")) {
				if (jQuery.unique(uniqueSizes).length == 1) { 	//remove de-select from the only size. 
					return;
				}
				//de-select
				jQuery('#configurable-attribute-size-message').html("");
				ConfigurableProductViewHelper.status.size_id = '';
				jQuery(this).removeClass("configurable-attribute-option-selected");
			}
			else {
				
				//select
				jQuery('#configurable-attribute-size-message').html(jQuery(this).attr("size_label"));
				ConfigurableProductViewHelper.status.size_id = jQuery(this).attr("size_id");
				jQuery(this).addClass("configurable-attribute-option-selected");
				jQuery(this).siblings().removeClass("configurable-attribute-option-selected");
			}
			ConfigurableProductViewHelper.updateOptionStatus();
			ConfigurableProductViewHelper.validateOption();
		});
		
		jQuery(".configurable-product-selector-color-option").unbind('click').click(function(){
			if (jQuery(this).hasClass("configurable-attribute-option-disabled")) {
				return;
			}
			
			if (jQuery(this).hasClass("configurable-attribute-option-selected")) {
				if (jQuery.unique(uniqueColors).length == 1) { 	//remove de-select from the only size. ssy
					return;
				}
				//de-select
				jQuery('#configurable-attribute-color-message').html("");
				ConfigurableProductViewHelper.status.color_id = '';
				jQuery(this).removeClass("configurable-attribute-option-selected");
			}
			else {
				jQuery('#configurable-attribute-color-message').html(jQuery(this).attr("color_label"));
				ConfigurableProductViewHelper.status.color_id = jQuery(this).attr("color_id");
				jQuery(this).addClass("configurable-attribute-option-selected");
				jQuery(this).siblings().removeClass("configurable-attribute-option-selected");
			}
			ConfigurableProductViewHelper.updateOptionStatus();
			ConfigurableProductViewHelper.validateOption();
		});
		
		jQuery("#product-addtocart-button").click(function(){
			ConfigurableProductViewHelper.addToCartSubmit();
		});
	}
	else{
		jQuery(".configurable-product-selector-size-option").click(function(){
			if (jQuery(this).hasClass("configurable-attribute-option-disabled")) {
				return;
			}
			
			if (jQuery(this).hasClass("configurable-attribute-option-selected")) {
				//de-select
				jQuery('#configurable-attribute-size-message').html("");
				ConfigurableProductViewHelperSizeOnly.status.size_id = '';
				jQuery(this).removeClass("configurable-attribute-option-selected");
			}
			else {
				//select
				jQuery('#configurable-attribute-size-message').html(jQuery(this).attr("size_label"));
				ConfigurableProductViewHelperSizeOnly.status.size_id = jQuery(this).attr("size_id");
				jQuery(this).addClass("configurable-attribute-option-selected");
				jQuery(this).siblings().removeClass("configurable-attribute-option-selected");
			}
		});
		jQuery("#product-addtocart-button").click(function(){
			ConfigurableProductViewHelperSizeOnly.addToCartSubmit();
		});
	}
});

var ConfigurableProductViewHelperSizeOnly = {
	status: {
		simple_product_id: '',
		size_id: ''
	},
	addToCartSubmit: function(){
		if(!ConfigurableProductViewHelperSizeOnly.status.size_id){
			jQuery('#configurable-attribute-size-message').html("Please select...");
		}
		//get values and validate!
		ConfigurableProductViewHelperSizeOnly.validateOption();
		
		if(!!ConfigurableProductViewHelperSizeOnly.status.simple_product_id){
			jQuery("#configurable-attribute-size-input").attr('value', ConfigurableProductViewHelperSizeOnly.status.size_id);
			jQuery("#product_addtocart_form").submit();
		}
	},
	validateOption: function(){
		//reset
		ConfigurableProductViewHelperSizeOnly.status.simple_product_id = ''; // unknown selection
		selectedProductPrice = productDefaultPrice; // default price
		
		for (simpleProductIndex = 0; simpleProductIndex < superAttributeInfo.length; simpleProductIndex++){
			simpleProductInfo = superAttributeInfo[simpleProductIndex];
			if(simpleProductInfo.size_id == ConfigurableProductViewHelperSizeOnly.status.size_id){
				ConfigurableProductViewHelperSizeOnly.status.simple_product_id = simpleProductInfo.simple_product_id;
				selectedProductPrice = simpleProductInfo.formatted_price;
				break;
			}
		}
		
		//also adjust price!
		jQuery("#product-final-price").html(selectedProductPrice);
	}
}

var ConfigurableProductViewHelper = {
	status: {
		simple_product_id: '',
		size_id: '',
		color_id: ''
	},
	
	addToCartSubmit: function(){
		if(!ConfigurableProductViewHelper.status.size_id){
			jQuery('#configurable-attribute-size-message').html("Please select...");
		}
		if(!ConfigurableProductViewHelper.status.color_id){
			jQuery('#configurable-attribute-color-message').html("Please select...");
		}
		
		//Do a final validation!
		ConfigurableProductViewHelper.validateOption();
		if(!!ConfigurableProductViewHelper.status.simple_product_id){
			jQuery("#configurable-attribute-size-input").attr('value', ConfigurableProductViewHelper.status.size_id);
			jQuery("#configurable-attribute-color-input").attr('value', ConfigurableProductViewHelper.status.color_id);
			jQuery("#product_addtocart_form").submit();
		}
	},
	
	validateOption: function(){
		//reset
		ConfigurableProductViewHelper.status.simple_product_id = ''; // unknown selection
		selectedProductPrice = productDefaultPrice; // default price
		var uniqueColors = new Array();
		var uniqueSizes = new Array();
		for (simpleProductIndex = 0; simpleProductIndex < superAttributeInfo.length; simpleProductIndex++){
			simpleProductInfo = superAttributeInfo[simpleProductIndex]; //simpleProductInfo is object 
			uniqueColors.push(simpleProductInfo.color_id); 
			uniqueSizes.push(simpleProductInfo.size_id);
			if(simpleProductInfo.size_id == ConfigurableProductViewHelper.status.size_id
					&& simpleProductInfo.color_id == ConfigurableProductViewHelper.status.color_id){
				ConfigurableProductViewHelper.status.simple_product_id = simpleProductInfo.simple_product_id;
				selectedProductPrice = simpleProductInfo.formatted_price;
				break;
			}
		}
		
		//alert(jQuery.unique(uniqueColors));
		//check if the color or size is unique, assign message before validation. ssy 
		if(jQuery.unique(uniqueColors).length==1){ 
			ConfigurableProductViewHelper.status.color_id = uniqueColors[0];
			jQuery('#configurable-attribute-color-message').html(jQuery('.configurable-attribute-option-selected','#configurable-product-color-selector').attr("color_label"));
		}
		if(jQuery.unique(uniqueSizes).length==1){
			ConfigurableProductViewHelper.status.size_id = uniqueSizes[0];
			jQuery('#configurable-attribute-size-message').html(jQuery('.configurable-attribute-option-selected','#configurable-product-size-selector').attr("size_label"));
		}
		
		//also adjust price!
		jQuery("#product-final-price").html(selectedProductPrice);
	},
	
	updateOptionStatus: function(){
		//reset is important!, in case the customer uncheck all options
		jQuery(".configurable-product-selector-size-option").removeClass("configurable-attribute-option-disabled");
		jQuery(".configurable-product-selector-color-option").removeClass("configurable-attribute-option-disabled");
		
		if(!!ConfigurableProductViewHelper.status.size_id){
			//size-selected, try disabling color
			jQuery(".configurable-product-selector-color-option").addClass("configurable-attribute-option-disabled");
			for (simpleProductIndex = 0; simpleProductIndex < superAttributeInfo.length; simpleProductIndex++){
				simpleProductInfo = superAttributeInfo[simpleProductIndex];
				
				if(simpleProductInfo.size_id == ConfigurableProductViewHelper.status.size_id){
					jQuery('.configurable-product-selector-color-option[color_id="'+simpleProductInfo.color_id+'"]').removeClass("configurable-attribute-option-disabled");
				}
			}
			
			
		}
		if(!!ConfigurableProductViewHelper.status.color_id ){
			//color-selected, try disabling size
			jQuery(".configurable-product-selector-size-option").addClass("configurable-attribute-option-disabled");
			for (simpleProductIndex = 0; simpleProductIndex < superAttributeInfo.length; simpleProductIndex++){
				simpleProductInfo = superAttributeInfo[simpleProductIndex];
				if(simpleProductInfo.color_id == ConfigurableProductViewHelper.status.color_id){
					jQuery('.configurable-product-selector-size-option[size_id="'+simpleProductInfo.size_id+'"]').removeClass("configurable-attribute-option-disabled");
				}
			}
		}
	}
}
