$(document).ready(function() {

	products.hideAllValidationErrors();
	products.initStoreBasketSelect();
	products.initPersonalisedEmbroidery();
	products.initBlockUI();
});



var products = {
/*
	Public methods are: 
		products.initStoreBasketSelect()
		products.initPersonalisedEmbroidery()
		products.initBlockUI()
		products.getPersonalisedEmbroideryOptions()
		products.validatePersonalisedEmbroidery()
		products.validateSizeAndColour()
		products.hideAllValidationErrors()
*/


	hideAllValidationErrors: function() {
		$("em.validationError").hide();
	},


	_areEmbroideryOptionsBeingUsed: function() {
		var $PersonalisedEmbroideryHeading = $("div.StoreBasketSelect div.SelectHeadingLink a");
		return ($PersonalisedEmbroideryHeading.hasClass("Minus"));
	},

	//initStoreBasketSelect:
    
	initStoreBasketSelect: function() {

		var $SizeInputs = $(".StoreBasketSelect input[name=ItemSize]");
		var $ColourFieldsets = $(".StoreBasketSelect fieldset");
		
		$SizeInputs.click(function() {
			$ColourFieldsets.hide();
			var sSizeId = $(this).attr("id");
			$ColourFieldsets.filter("#ColoursFor_" + sSizeId).show();
		});
		
		$SizeInputs.eq(0).click();
    },
	
	//getPersonalisedEmbroideryOptions:
	
	getPersonalisedEmbroideryOptions: function() {
		
		if(!products._areEmbroideryOptionsBeingUsed()){
			return "";
		}
		
		var sReturn = "";
		
		var $PersonaliseDetails = $("div#PersonaliseDetails");
		
		$PersonaliseDetails.find("select").each(function(){
			var $Select = $(this);
			if(products._hasAnOptionBeenSelected($Select)){
				var $SelectedOption = $Select.find("option:selected");
				sReturn += products._toEmbroideryQueryString($Select.attr("name"), $SelectedOption.val(), $SelectedOption.text().split(": +")[0]);
			}
		});
		
		$PersonaliseDetails.find("input,textarea").each(function(){
			var $Field = $(this);
			if(($Field.val() + "").length > 0) {
				sReturn += products._toEmbroideryQueryString($Field.attr("name"), 0, $Field.val());
			}
		});
		
		return sReturn;
	},

	_toEmbroideryQueryString: function(fieldName, price, description){
	
		description = description.replace(/[\n\r\t]/g, " "); 
		description = escape(description);
		
		return "|FieldName_" + fieldName +
			"_Price_" + price +
			"_Description_" + description;
	},


	// initPersonalisedEmbroidery:

	initPersonalisedEmbroidery: function() {
	
		var $PersonalisedEmbroideryHeading = $("div.StoreBasketSelect div.SelectHeadingLink a");
		var $PersonaliseDetails = $("div#PersonaliseDetailsShowHide");
		var $Price = $("div.DetailDescription p#price0");
		var sBasePrice = $Price.html();
		var fBasePrice = products._convertPriceStringToFloat($Price.html());
		var $SelectFields = $PersonaliseDetails.find("select");
		
		$PersonalisedEmbroideryHeading.click(function(){
		
			if($PersonalisedEmbroideryHeading.hasClass("Minus")){
				
				//HIDE:
				$PersonalisedEmbroideryHeading.removeClass("Minus").find("span").text("Add");
				$PersonaliseDetails.slideUp('slow');
				$Price.html(sBasePrice);
			}else{
				
				//SHOW:
				$PersonalisedEmbroideryHeading.addClass("Minus").find("span").text("Remove");
				$PersonaliseDetails.slideDown('slow');
				$Price.html(products._convertFloatToPriceString(fBasePrice + products._calculatePersonalisedEmbroideryCost()));
			}
		});
		
		
		$SelectFields.change(function () {
			
			$Price.html(products._convertFloatToPriceString(fBasePrice + products._calculatePersonalisedEmbroideryCost()));
		});
	},

	_convertPriceStringToFloat: function(sPrice) {
		
		sPrice = sPrice + "";
		
		if (sPrice.indexOf(".") < 0) {
			sPrice = sPrice + ".00";
		}

		sPrice = sPrice.match(/(\d*\.\d*)/)[0];
		
		return parseFloat(sPrice);
	},

	_convertFloatToPriceString: function(fPrice) {
		return "&pound;" + formatNumber(fPrice);
	},

	_calculatePersonalisedEmbroideryCost: function() {
	
		var dPersonalisedEmbroideryCost = 0.0;
		
		$("div#PersonaliseDetails select option:selected").each(function(){
		
			var $SelectedOption = $(this);
			var fPrice = parseFloat($SelectedOption.val());
			dPersonalisedEmbroideryCost = dPersonalisedEmbroideryCost + fPrice;
		});
		
		
		return dPersonalisedEmbroideryCost;
	},





	//Personalised Embroidery Validation:

	validatePersonalisedEmbroidery: function() {
	
		var bValidates = true;

		var $PersonalisedEmbroideryHeading = $("div.StoreBasketSelect div.SelectHeadingLink a");
		
		if($PersonalisedEmbroideryHeading.hasClass("Minus")) {
			
			var $PersonaliseDetails = $("div#PersonaliseDetails");
			
			var $Select_StockDesign = $PersonaliseDetails.find("select[name=Stock Design]");
			var $Select_StockDesignColour = $PersonaliseDetails.find("select[name=Stock Design Colour]");
			var $Input_Text = $PersonaliseDetails.find("input[name=Text]");
			var $Select_FontColour = $PersonaliseDetails.find("select[name=Font Colour]");
			var $Select_FontStyle = $PersonaliseDetails.find("select[name=Font Style]");
			var $Select_TextPosition = $PersonaliseDetails.find("select[name=Text Position]");
			var $Select_SidePosition = $PersonaliseDetails.find("select[name=Side/Position]");
			var $Textarea_Comments = $PersonaliseDetails.find("textarea[name=Comments]");
			
			
			//Check Stock Design field:
			if(products._hasAnOptionBeenSelected($Select_StockDesign)){
			
				if(!products._hasAnOptionBeenSelected($Select_StockDesignColour)){
					$Select_StockDesignColour.next("em.validationError").show();
					bValidates = false;
				}
			
				if(!products._hasAnOptionBeenSelected($Select_SidePosition)){
					$Select_SidePosition.next("em.validationError").show();
					bValidates = false;
				}
			}
			
			//Check Text field:
			if($Input_Text.val().length > 0) {
				
				//Check normal fields:
				
				if(!products._hasAnOptionBeenSelected($Select_FontColour)){
					$Select_FontColour.next("em.validationError").show();
					bValidates = false;
				}
				
				if(!products._hasAnOptionBeenSelected($Select_FontStyle)){
					$Select_FontStyle.next("em.validationError").show();
					bValidates = false;
				}
				
				if(!products._hasAnOptionBeenSelected($Select_TextPosition)){
					$Select_TextPosition.next("em.validationError").show();
					bValidates = false;
				}
			
				if(!products._hasAnOptionBeenSelected($Select_SidePosition)){
					$Select_SidePosition.next("em.validationError").show();
					bValidates = false;
				}

			}
		}
		
		return bValidates;
	},

	_hasAnOptionBeenSelected: function($SelectElement){
	
		if($SelectElement.length == 0){
			return true;
		}else{
		
			var s1 = $SelectElement.find("option:selected").text();
			var s2 = $SelectElement.find("option").eq(0).text();
			return (s1 != s2);
		}
	},
	
	validateSizeAndColour: function() {
	
		var bValidates = true;
		
		var $ItemSizeElements = $(".StoreBasketSelect input[name=ItemSize]");
		var $ItemColourElements = $(".StoreBasketSelect fieldset:visible input[name=ItemColour]");
		
		if($ItemSizeElements.length > 0){
			if($ItemSizeElements.filter(":checked").length < 1 ){
				$ItemSizeElements.eq(0).next("em.validationError").show();
				bValidates = false;
			}
		}
		
		if($ItemColourElements.length > 0){
			if($ItemColourElements.filter(":checked").length < 1 ){
				$(".StoreBasketSelect #Colours em.validationError").show();
				bValidates = false;
			}
		}
		
		return bValidates;
	},
	
	initBlockUI: function() {
	
		var $Trigger = $(".StyleSamples img");
		
		$Trigger.click(function() { 
			
			var sImgSrc = $(".StyleSamples img").eq(0).attr("src").replace("/StyleSamples/", "/StyleSamples/Lightbox_");
			var sMessage = "<img src='" + sImgSrc + "' alt='Tylers' />";
            
			
			$.blockUI({ 
				message:sMessage,
				css: { cursor:'auto', left:'10%', top:'10%', width:'auto', 'z-index':'10000001' },
				overlayCSS: { cursor:'auto', 'z-index':'10000000' }
			});
			
			$(".blockUI").unbind('click').click(function() { 
				$.unblockUI();
			});
        });
		
	}
}

