
//-------------------------------------------------------------
/*
File: Configurator.js
Author: Steve Goeckler
Abstract: Configuration logic for the Chic Shelves product
		options
*/
//-------------------------------------------------------------

	//---------------------------------------------------------
	//const - do not modify
	
	var _INT = 0; var _FLT = 1;
	var _ROLL = 0; var _SHEET = 1; _SWATCH = 2;
	var _LBL_METRIC = "Centimeters";	// cm
	var _SQIN_TO_SQCM = 6.4516;
	var _CM_TO_IN = 2.54;

	var gDescClick = 0;
	//---------------------------------------------------------
	//const - can modify
	
	MIN_DEPTH = 4;
	MAX_DEPTH = 24;
	MIN_WIDTH = 4;
	MAX_WIDTH = 96;
	MIN_DEPTH_METRIC = 10;
	MAX_DEPTH_METRIC = 60;
	MIN_WIDTH_METRIC = 10;
	MAX_WIDTH_METRIC = 244;
	
	var gMaxQuantity = 99;
	
	//these are now dynamic via ajax calls to db
	// Eric, you need to edit the variables below to match the current pricing
	var gfBasePrice = 0.00;
	var gfPriceOptPaper = 2.50;				// Matt Paper
	var gfPriceOptWeave = 4.00;				// Fine Weave Fabric
	var gfPriceOptVinyl = 3.25;				// Laminated Vinyl
	var gfPriceOptCanvas = 5.75;			// Satin Canvas
	var gfPriceOptPaperAdhesive = 1.25;		// Adhesive Backing
	var gfPriceOptPaperProtection = 0.75;	// Protective Covering
	var gfPriceOptCanvasAdhesive = 0.50;	// Edge Adhesive
	var gfPriceOptSheet = 0.25;
	
	//---------------------------------------------------------
	//globals
	
	var gRollSheetState, gbMetric;
	var giDepth, gfDepthFrac, giWidth, gfWidthFrac, gfArea;
	var gfDepth, gfWidth;		//units delivered in decimal inches (e.g. 3.875)
	var giRollSize;
	var gfPrice, gbOptPaperAdhesive, gbOptPaperProtection, gbOptCanvasAdhesive;
	var giQuantity;	
	
	//options/control IDs
	
	//Material Options
	gCtrlMaterials = "OPTidOption1";		//radMaterial
	gOptMaterials =  ["3", "15", "1", "2"];	
	//!sg gOptMaterialsPrices//array 
	
	gOptMaterialDefault = "#OPTidOption11";	//#radVinyl
	
	//Paper Options
	gCtrlPaperOpts = "OPTidOption7";		//radPaperOpts
	gOptPaper  =  ["", "16", "18"];	
	gOptPaperDefault = "#OPTidOption7";		//#radPaperNone
	
	//Canvas Options
	gCtrlCanvasOpts = "OPTidOption8";		//radCanvasOpts
	gOptCanvas =  ["", "17"];	
	gOptCanvasDefault = "#OPTidOption8";	//#radCanvasNone
	
	//Cut Options (these are btn ctrls
	gOptCutRoll= "#OPTidOption612";			//btnRoll
	gOptCutSheet= "#OPTidOption613";		//btnSheet
	gOptCutSwatch= "#OPTidOption624";		//btnSwatch
	
	//these are btn ctrls for the above options
	gBtnCutRoll= "btnRoll";					//btnRoll
	gBtnCutSheet= "btnSheet";				//btnSheet
	gBtnCutSwatch= "btnSample";				//btnSwatch

		//Roll Size options
	gCtrlRollSize = "OPTidOption4";
	gOptRollSize=  ["6", "7", "8", "9"];	
	gOptRollDefault = "#OPTidOption46";		//#radPaperNone
	
	//dimensions	
	gCtrlDepth = "#TXTidOption2";
	gCtrlWidth = "#TXTidOption3";
	
	gCtrlProdDesc = "#TXTidOption12";
	gTxtUserDescription = "#TXTidOption13";
	gBtnAddToCart = "#btnAddToCart";
	//---------------------------------------------------------
	$(document).ready(function(){
		init();
	});
	
	//---------------------------------------------------------
	function init()
	{
		//alert("init()");
		giDepth= giWidth= 1; gfDepth= gfWidth= gfDepthFrac= gfWidthFrac= 0.0; gfArea = 1.0;
		giRollSize = 10;
		gbOptPaperAdhesive = gbOptPaperProtection = gbOptCanvasAdhesive = false;
		gfPrice = 0.0;
		giQuantity = 1;
		gRollSheetState = -1
		gbMetric = 0;
	
		//--------------------------------------
		//page/div setup
		
		//*$("#dvMaterial").hide();
		//$("#dvPaperOpts,#dvCanvasOpts").hide();
		//*$("#dvBtns").hide();
		//*$("#dvDimensions,#dvRollDimensions,#dvSheetDimensions").hide();
		//*$("#dvPriceQuantity").hide();
		//*$("#dvMaterial").fadeIn("slow");
		//*$("#dvPaperOpts").show();
		//*$("#dvDescription").hide();
		//$("#showAdd").hide();
		
		//--------------------------------------
		//get current option prices from Candypress db
		$.get("/Scripts/_getPrices.asp?idproduct="+gidProduct+"&option=material", _parseXML);
		$.get("/Scripts/_getPrices.asp?idproduct="+gidProduct+"&option=cut", _parseXML);
		$.get("/Scripts/_getPrices.asp?idproduct="+gidProduct+"&option=canvas", _parseXML);
		$.get("/Scripts/_getPrices.asp?idproduct="+gidProduct+"&option=paper", _parseXML);
		//--------------------------------------
		//materials & options
		$("input[name='" + gCtrlMaterials + "']").click(function () { getSelectedMaterial(); });
		$(gOptMaterialDefault).attr("checked", "checked");

		$("input[name='" + gCtrlPaperOpts + "']").click(function () { getPaperOpts(); });
		$("input[name='" + gCtrlCanvasOpts + "']").click(function () { getCanvasOpts(); });
		$(gOptPaperDefault).attr("checked", "checked");
		$(gOptCanvasDefault).attr("checked", "checked");
		 getSelectedMaterial();

		//--------------------------------------
		//button handlers
		//$(gOptCutRoll + ", " + gOptCutSheet + ", " + gOptCutSwatch).click(function () { //radio btns
		//$("input#"+gBtnCutRoll + ", " + "input#"+gBtnCutSheet + ", " + "input#"+gBtnCutSwatch).click(function () { //button btns
		$("#"+gBtnCutRoll + ", #" + gBtnCutSheet + ", #" + gBtnCutSwatch).click(function () { //img buttons
			getCut($(this).attr("id"));
		});
		
		$(gTxtUserDescription).click(function() { gDescClick = 1; if (!gDescClick) $(gTxtUserDescription).val(""); });
		$(gBtnAddToCart).click(function() { if (!gDescClick) $(gTxtUserDescription).val(""); });
		//--------------------------------------
		//sheet options

			// units, depth, width, depthFrac, widthFrac event handlers
		$("#selUnits").change(function () { initMeasurementCtrls(); });
		$("#selDepth").change(function () { getSheetDepth($(this).attr("id")); });
		$("#selWidth").change(function () { getSheetWidth($(this).attr("id")); });
		$("#selDepthFrac").change(function () { getSheetFracDepth($(this).attr("id")); });
		$("#selWidthFrac").change(function () { getSheetFracWidth($(this).attr("id")); });

		initUnitsCtrls();
		initMeasurementCtrls();
		
		//--------------------------------------
		//roll options
		$(gOptRollDefault).attr("checked", "checked");
		
		//--------------------------------------
		//sheet options

		$("input[name='" + gCtrlRollSize + "']").click(function () { getRollSize(); });
		$("#radRoll1").attr("checked", "checked");
		$("#radRoll2, #radRoll3, #radRoll4").removeAttr("checked");
		$(gOptMaterialDefault).attr("checked", "checked");
		
		//--------------------------------------
		//quantity

			// quantity event handler
		$("#quantity").change(function () { getQuantity($(this).attr("id")); });
			//init quantity list
		for (i= 1; i<= gMaxQuantity; i++) 
			_addSelOption("quantity", i, i); 
	
	}
	
	//---------------------------------------------------------
	function getSelectedMaterial()
	{
		var selOpt = $("input[name='" + gCtrlMaterials + "']:checked").val(); //radMaterial
		//alert("Option: " + selOpt);
		switch (selOpt) {
			case gOptMaterials[0]:			//Paper
				$("#dvCanvasOpts").hide();
				$(gOptCanvasDefault).attr("checked", "checked");
				$(gOptPaperDefault).attr("checked", "checked");
				gbOptPaperAdhesive = gbOptPaperProtection = false;
				$("#dvPaperOpts").show("slow");
				gbOptCanvasAdhesive = false;
				break;
			case gOptMaterials[1]:			//Weave 
			case gOptMaterials[2]:			//Vinyl
				$("#dvPaperOpts").hide("slow");
				$(gOptPaperDefault).attr("checked", "checked");
				gbOptPaperAdhesive = gbOptPaperProtection = false;
				$("#dvCanvasOpts").hide("slow");
				$(gOptCanvasDefault).attr("checked", "checked");
				gbOptCanvasAdhesive = false;
				break;
			case gOptMaterials[3]:			//Canvas
				$("#dvPaperOpts").hide();
				$(gOptPaperDefault).attr("checked", "checked");
				$(gOptCanvasDefault).attr("checked", "checked");
				gbOptPaperAdhesive = gbOptPaperProtection = false;
				$("#dvCanvasOpts").show("slow");
				gbOptCanvasAdhesive = false;
				break;
		}

		switch(selOpt) {
			case gOptMaterials[0]:  gfBasePrice = gfPriceOptPaper; break;
			case gOptMaterials[1]:  gfBasePrice = gfPriceOptWeave; break;
			case gOptMaterials[2]:  gfBasePrice = gfPriceOptVinyl; break;
			case gOptMaterials[3]:  gfBasePrice = gfPriceOptCanvas; break;
		}
		if(gRollSheetState == _SHEET)
			updateSheetSize();
		updatePrice();
	}
	
	//---------------------------------------------------------
	function getPaperOpts(id) 
	{
		gbOptPaperAdhesive = gbOptPaperProtection = gbOptCanvasAdhesive = false;

		var val = $("input[name='" + gCtrlPaperOpts + "']:checked").val(); 
		//alert("Paper Option: " + val);
		switch (val) {
			case gOptPaper[0]:
				break;
			case gOptPaper[1]:
				gbOptPaperAdhesive = true;
				break;
			case gOptPaper[2]:
				gbOptPaperProtection = true;
				break;
		}
		updatePrice();
	}
	
	//---------------------------------------------------------
	function getCanvasOpts(id) 
	{
		gbOptPaperAdhesive = gbOptPaperProtection = gbOptCanvasAdhesive = false;

		var val = $("input[name='" + gCtrlCanvasOpts + "']:checked").val(); 
		//alert("Canvas Option: " + val);
		switch (val) {
			case gOptCanvas[0]:
				break;
			case gOptCanvas[1]:
				gbOptCanvasAdhesive = true;
				break;
		}
		updatePrice();
	}
	
	//---------------------------------------------------------
	function getCut(id) 
	{
		switch(id) {
			case gBtnCutSwatch: 
				//alert("Order Swatch");
				if (gRollSheetState != _SWATCH) {
					gRollSheetState = _SWATCH;
					$("#dvDimensions").hide();
					$("#dvPriceQuantity,#dvStatus").hide();
					$("#"+gCtrlRollSize).attr("checked", "checked");	//assign roll size to none
					$(gOptCutSwatch).attr("checked", "checked");		//assign roll size to none
					$("#idProduct").val("1");							//force product id of free swatch - not a pattern
					$(gCtrlProdDesc).val(gsProdDesc);					//set product description for swatch
					//alert(gsProdDesc);
					$(gTxtUserDescription).val("");
					$(gCtrlWidth).val("");	$(gCtrlDepth).val("");
					$(gCtrlWidth + "," + gCtrlDepth).val("");
					$("#additem").submit();
				}
				break;
			case gBtnCutRoll: 
				//alert("Order Roll");
				if (gRollSheetState != _ROLL) {
					gRollSheetState = _ROLL;
					$(gOptRollDefault).attr("checked", "checked");	//assign roll size to default
					$(gCtrlProdDesc).val("");						//clear product description for swatch
					$("#dvDimensions").show();
					$("#dvSheetDimensions").fadeOut("slow", function() {$("#dvRollDimensions").fadeIn("slow"); });
					$("#dvPriceQuantity,#dvStatus").show();
					getRollSize();
					updatePrice();
					//$("#dvDescription").show();
					$("#dvDescription").hide();						//?? why - we may want to restore this
					gbMetric = 0;
					$("#metricUnits").val(gbMetric);
					initUnitsCtrls();
					$(gOptCutRoll).attr("checked", "checked");		//assign option roll 
					$("#idProduct").val(gidProduct);				//force product id to id in CP
					$("#showAdd").show();
				}
				break;
			case gBtnCutSheet: 
				//alert("Order Sheet");
				if (gRollSheetState != _SHEET) {
					gRollSheetState = _SHEET;
					$(gCtrlProdDesc).val("");							//clear product description for swatch
					$("#"+gCtrlRollSize).attr("checked", "checked");	//assign roll size to none
					$(gOptCutSheet).attr("checked", "checked");			//assign option to cut sheet
					initMeasurementCtrls();
					$("#dvDimensions").show();
					$("#dvRollDimensions").fadeOut("slow", function() {$("#dvSheetDimensions").fadeIn("slow"); });
					$("#dvPriceQuantity,#dvStatus").show();
					getSheetDepth("selDepth"); getSheetWidth("selWidth");
					updateSheetSize();
					updatePrice();
					$("#dvDescription").show();
					$("#idProduct").val(gidProduct);					//force product id to id in CP
					$("#showAdd").show();
				}
				break;
		}	

	}
	
	//---------------------------------------------------------
	function getRollSize()
	{
		var val = $("input[name='" + gCtrlRollSize + "']:checked").val(); 
		giRollSize = val;
		switch (val) {
			case gOptRollSize[0]:
				giRollSize = 10; gfDepth = 12; gfWidth = 120; break;
			case gOptRollSize[1]:
				giRollSize = 20; gfDepth = 12; gfWidth = 240; break;
			case gOptRollSize[2]:
				giRollSize = 20; gfDepth = 24; gfWidth = 120; break;
			case gOptRollSize[3]:
				giRollSize = 40; gfDepth = 24; gfWidth = 240; break;
		}
		updatePrice();

		$("#txt_fDepth").val(gfDepth.toFixed(3));
		$(gCtrlDepth).val(gfDepth.toFixed(3));
		
		$("#txt_fWidth").val(gfWidth.toFixed(3));
		$(gCtrlWidth).val(gfWidth.toFixed(3));
}
	
	//---------------------------------------------------------
	function initUnitsCtrls()
	{
		_removeSelOptions("selUnits");
		_addSelOption("selUnits", "Inches", 0); 
		_addSelOption("selUnits", _LBL_METRIC, 1); 

	}
	
	//---------------------------------------------------------
	function initMeasurementCtrls()
	{
		_removeSelOptions("selDepth");
		_removeSelOptions("selWidth");
		gbMetric = _getCtrlListValue("selUnits", _INT);
		$("#metricUnits").val(gbMetric);
		
		if (gbMetric) {
			for (var i= MIN_DEPTH_METRIC; i<= MAX_DEPTH_METRIC; i++)
			_addSelOption("selDepth", i, i); 
			for (var i= MIN_WIDTH_METRIC; i<= MAX_WIDTH_METRIC; i++)
				_addSelOption("selWidth", i, i); 

			_removeSelOptions("selDepthFrac"); _removeSelOptions("selWidthFrac");
			var arrDec = ["0", ".1",".2",".3",".4",".5",".6",".7",".8",".9"];
			for (i= 0; i< arrDec.length; i++) {
				_addSelOption("selDepthFrac", arrDec[i], arrDec[i]); 
				_addSelOption("selWidthFrac", arrDec[i], arrDec[i]); 
			}
			$("#selDepthFrac,#selWidthFrac").val("0");
			gfDepthFrac= gfWidthFrac = 0;
		}	
		else {
			for (var i= MIN_DEPTH; i<= MAX_DEPTH; i++)
			_addSelOption("selDepth", i, i); 
			for (var i= MIN_WIDTH; i<= MAX_WIDTH; i++)
				_addSelOption("selWidth", i, i); 

			if (giDepth < MAX_DEPTH)
				$("#selDepthFrac").removeAttr("disabled");
			if (giWidth < MAX_WIDTH)
				$("#selWidthFrac").removeAttr("disabled");

			_removeSelOptions("selDepthFrac"); _removeSelOptions("selWidthFrac");
			var arrFrac = ["0", "1/16","1/8","3/16","1/4","5/16","3/8","7/16","1/2", "9/16","5/8","11/16","3/4","13/16","7/8","15/16"];
			for (i= 0; i< arrFrac.length; i++) {
				_addSelOption("selDepthFrac", arrFrac[i], arrFrac[i]); 
				_addSelOption("selWidthFrac", arrFrac[i], arrFrac[i]); 
			}
		}
		getSheetDepth("selDepth"); getSheetWidth("selWidth");
		updateSheetSize();
		updatePrice();
	}
	
	//---------------------------------------------------------
	function getSheetDepth(selList)
	{
		giDepth = _getCtrlListValue(selList, _INT);
		if (gbMetric) {
			if (giDepth >= MAX_DEPTH_METRIC) {
				$("#selDepthFrac").attr("disabled","disabled");
				$("#selDepthFrac").val("0");
				gfDepthFrac = 0;
			}
			else	
				$("#selDepthFrac").removeAttr("disabled");
		}
		else {
			if (giDepth >= MAX_DEPTH) {
				$("#selDepthFrac").attr("disabled","disabled");
				$("#selDepthFrac").val("0");
				gfDepthFrac = 0;
			}
			else	
				$("#selDepthFrac").removeAttr("disabled");
		}
		updateSheetSize();
		updatePrice();
	}
	
	//---------------------------------------------------------
	function getSheetFracDepth(selList)
	{
		gfDepthFrac = _getCtrlListValue(selList, _FLT);
		updateSheetSize();
		updatePrice();
	}
	
	//---------------------------------------------------------
	function getSheetWidth(selList)
	{
		giWidth = _getCtrlListValue(selList, _INT);
		if (gbMetric) {
			if (giWidth >= MAX_WIDTH_METRIC) {
				$("#selWidthFrac").attr("disabled","disabled");
				$("#selWidthFrac").val("0");
				gfWidthFrac = 0;
			}
			else			
				$("#selWidthFrac").removeAttr("disabled");
		}
		else {
			if (giWidth >= MAX_WIDTH) {
				$("#selWidthFrac").attr("disabled","disabled");
				$("#selWidthFrac").val("0");
				gfWidthFrac = 0;
			}
			else			
				$("#selWidthFrac").removeAttr("disabled");
		}
		updateSheetSize();
		updatePrice();
	}
	
	//---------------------------------------------------------
	function getSheetFracWidth(selList)
	{
		gfWidthFrac = _getCtrlListValue(selList, _FLT);
		updateSheetSize();
		updatePrice();
	}
	
	//---------------------------------------------------------
	function updateSheetSize()
	{
		if (gbMetric) {
			gfArea = (giDepth + gfDepthFrac) * (giWidth + gfWidthFrac) / _SQIN_TO_SQCM;
			gfDepth= (giDepth + gfDepthFrac) / _CM_TO_IN; gfWidth= (giWidth + gfWidthFrac) / _CM_TO_IN;
		}
		else {
			gfArea = (giDepth + gfDepthFrac) * (giWidth + gfWidthFrac);
			gfDepth= giDepth + gfDepthFrac; gfWidth= giWidth + gfWidthFrac;
		}
		//alert ("width: [" + gfWidth.toFixed(3) + "] depth: [" + gfDepth.toFixed(3) + "]");
		(gbMetric) ? $("#txtUnits").val(1) : $("#txtUnits").val(0);
		
		$("#txt_fDepth").val(gfDepth.toFixed(3));
		$("#txt_fWidth").val(gfWidth.toFixed(3));
		
		$(gCtrlDepth).val(gfDepth.toFixed(3));
		$(gCtrlWidth).val(gfWidth.toFixed(3));

	}
	
	//---------------------------------------------------------
	function getQuantity(selList)
	{
		giQuantity = _getCtrlListValue(selList, _INT);
		updatePrice();
	}
	
	//---------------------------------------------------------
	function updatePrice()
	{
		var fOptions = 0;
		
		if (gbOptPaperAdhesive)
			fOptions += gfPriceOptPaperAdhesive;
		if (gbOptPaperProtection)
			fOptions += gfPriceOptPaperProtection;
		if (gbOptCanvasAdhesive)
			fOptions += gfPriceOptCanvasAdhesive;
	
		if (gRollSheetState == _SHEET) {
			fOptions += gfPriceOptSheet;
			gfPrice = (gfArea/144) * (gfBasePrice + fOptions) * giQuantity;
			
			//!sg - uncomment to implement minimum pricing based on material
			//if (gfPrice < gfBasePrice + fOptions)	//chk if min price is met
			//	gfPrice = gfBasePrice + fOptions;
		}	
		else if (gRollSheetState == _ROLL)
			gfPrice = giRollSize * (gfBasePrice  + fOptions) * giQuantity;
		
		$("#txtPrice").val(gfPrice.toFixed(2));
	}
	
	//---------------------------------------------------------
	function _addSelOption(selList, text, value)
	{
		var opt = document.createElement("option");
		opt.text = text;
		opt.value = value;
		document.getElementById(selList).options.add(opt);
	}
	
	//---------------------------------------------------------
	function _removeSelOptions(selList)
	{
		var elSel = document.getElementById(selList);
		for (var i = elSel.length - 1; i>= 0; i--)
			elSel.remove(i);
	}
	
	//---------------------------------------------------------
	function _getCtrlListValue(selList, opt)
	{
		var selCtrl = document.getElementById(selList);
		for (var i= 0; i< selCtrl.length; i++) {
			if (selCtrl[i].selected) {
				if (opt == _INT)
					return parseInt(selCtrl[i].value);
				else
					return eval(selCtrl[i].value);
			}
		}
	}

	//---------------------------------------------------------
 	function _parseXML(xml)
	{
		//alert("Data Loaded: ");
		$('opt',xml).each(function(i) {
			var m_i = $(this).find("id").text();
			var m_d = $(this).find("desc").text();
			var m_p = $(this).find("price").text();
			//alert("id: " + m_i + "\nDescription: " + m_d + "\nPrice: " + m_p);
			switch(m_i) {
				case 1: gfPriceOptVinyl = m_d; break;
				case 2: gfPriceOptCanvas = m_d; break;
				case 3: gfPriceOptPaper = m_p; break;
				case 15: gfPriceOptWeave = m_d; break;
				
				//case 12: gfPriceOptRoll = m_d; break;
				case 13: gfPriceOptSheet = m_d; break;
				//case 24: gfPriceOptSwatch = m_d; break;
				
				case 17: gfPriceOptCanvasAdhesive = m_d; break;

				case 16: gfPriceOptPaperAdhesive = m_d; break;
				case 18: gfPriceOptPaperProtection = m_d; break;
			}
			//alert('xml : '+gfPriceOptPaper+' : '+m_i+' : '+m_d);
		});
	};
	//---------------------------------------------------------
	// UNUSED CODE
	//---------------------------------------------------------
		/*
		$("#lblAdhesive").css("color", "black");
		$("#lblAdhesive").css("color", "grey");
		$("#chkAdhesive").attr("disabled", "disabled");
		$("#chkAdhesive").removeAttr("checked");
		$("#radVinyl").attr("checked", "checked");
		*/

