﻿
if (!Ultimize) {
	var Ultimize = function() { };
}
if (!Ultimize.Shop) {
	Ultimize.Shop = function() { };
}

Ultimize.Shop.VariantModule = function () {

	// event handler placeholders
	this.onSelectVariant = null; //

	this.aSelectionFields = new Array();
	this.aVariantCombos = new Array();
	this.sPriceFieldID = "";
	this.sBuyButtonID = "";
	this.sVariantIDInputID = "";
	this.sPartNumberID = "";
	this.sStockAmountID = "";
	this.lblStockText = "";
	this.sDefaultPrice = "";

	this.Init = function () {
	}
	this.Init();


	this.AddVariantDropDown = function (o) {
		var obj = RLdesign.Utils.DefineObject(o);
		RLdesign.Events.SetEventHandler(obj, "change", window["UltimizeShopVariantModule"]._handlevariantselectionchanged);
		this.aSelectionFields[this.aSelectionFields.length] = obj;
		obj = null;
	}

	this.AddVariantCombos = function (arr) {
		if (RLdesign.Utils.IsArray(arr)) {
			this.aVariantCombos[this.aVariantCombos.length] = arr;
		}
		else {
			alert("not array");
		}
	}


	// internal eventhandler
	this._handlevariantselectionchanged = function (oEvent) {
		var returned = true;
		if (typeof (window["UltimizeShopVariantModule"].onSelectVariant) == "function") {
			var obj = RLdesign.Utils.DefineEventTarget(oEvent);
			var oE = new Object(); // eventargs object
			oE.SelectedVariant = "";
			oE.EventTarget = obj;

			returned = window["UltimizeShopVariantModule"].onSelectVariant(oE); // calls userdefined eventhandler
		}
		if (returned === null || returned === true) {
			window["UltimizeShopVariantModule"].VariantSelectionChanged();
		}

		return RLdesign.Utils.DefineReturnCode(oEvent, false);
	}

	this.VariantSelectionChanged = function () {
		var oThis = this;
		if (oThis.aSelectionFields.length > 0) {
			var newcombo = new Array();
			for (var i = 0; i < oThis.aSelectionFields.length; i++) {
				var selectedindex = (oThis.aSelectionFields[i].selectedIndex == -1) ? 0 : oThis.aSelectionFields[i].selectedIndex;
				var selectedvalue = oThis.aSelectionFields[i].options[selectedindex].value;
				if (selectedvalue != "null") {
					newcombo[newcombo.length] = parseInt(selectedvalue);
				}
			}

			var selectedid = "";
			var price = oThis.sDefaultPrice;
			var partnumber = "";
			var stockamount = "";
			var imageurl = "";
			var stock = true;
			var usestock = false;

			for (var i = 0; i < oThis.aVariantCombos.length; i++) {
				if (oThis._comparearrays(oThis.aVariantCombos[i][1], newcombo)) {
					selectedid = oThis.aVariantCombos[i][0];
					price = oThis.aVariantCombos[i][2];
					partnumber = oThis.aVariantCombos[i][3];
					if (oThis.aVariantCombos[i].length > 4) {
						stockamount = oThis.aVariantCombos[i][4];
					}
					if (oThis.aVariantCombos[i].length > 5) {
						stock = oThis.aVariantCombos[i][5];
					}
					if (oThis.aVariantCombos[i].length > 6) {
						usestock = oThis.aVariantCombos[i][6];
					}
					if (oThis.aVariantCombos[i].length > 7) {
						imageurl = oThis.aVariantCombos[i][7];
					}
					break;
				}
			}

			if (oThis.sVariantIDInputID != "") {
				var oHidVarID = RLdesign.Utils.DefineObject(oThis.sVariantIDInputID);
				oHidVarID.value = selectedid;
				oHidVarID = null;
			}

			if (oThis.sBuyButtonID != "") {
				var oBuyButton = RLdesign.Utils.DefineObject(oThis.sBuyButtonID);
				if (selectedid == "" || !stock) {
					RLdesign.Utils.ToggleVisibility(oBuyButton, "hidden");
					oBuyButton.disabled = true;
				}
				else {
					RLdesign.Utils.ToggleVisibility(oBuyButton, "visible");
					oBuyButton.disabled = false;
				}
				oBuyButton = null;
			}

			if (oThis.sPriceFieldID != "") {
				var oPriceField = RLdesign.Utils.DefineObject(oThis.sPriceFieldID);

				if (selectedid == "") {
					RLdesign.Utils.ToggleVisibility(oPriceField, "hidden");
				}
				else {
					oPriceField.innerHTML = price;
					RLdesign.Utils.ToggleVisibility(oPriceField, "visible");
				}
				oPriceField = null;
			}

			if (oThis.sPartNumberID != "") {
				var oPartNumber = RLdesign.Utils.DefineObject(oThis.sPartNumberID);

				//if (partnumber == "") {
				//	RLdesign.Utils.ToggleVisibility(oPriceField, "hidden");
				//}
				//else {
				oPartNumber.innerHTML = partnumber;
				//	RLdesign.Utils.ToggleVisibility(oPriceField, "visible");
				//}
				oPriceField = null;
			}

			if (oThis.sStockAmountID != "" && usestock) {
				var oStockAmount = RLdesign.Utils.DefineObject(oThis.sStockAmountID);
				if (selectedid == "") {
					RLdesign.Utils.ToggleVisibility(oStockAmount, "hidden");
				}
				else {
					oStockAmount.innerHTML = stockamount;
					RLdesign.Utils.ToggleVisibility(oStockAmount, "visible");
				}
				oStockAmount = null;
			}


			var oImage = RLdesign.Utils.DefineObject("product_bigimage");
			if (oImage != null) {
				oImage = oImage.getElementsByTagName("img")[0];
			}
			if (oImage != null) {
				if (selectedid == "" || imageurl == "") {
					if (oImage.defaultSrc != null && oImage.defaultSrc != "") {
						oImage.src = oImage.defaultSrc;
					}
				}
				else {
					SubstituteImage(imageurl);
				}
				oImage = null;
			}

		}
	}

	this._comparearrays = function (a, b) {
		if (RLdesign.Arrays.IsArray(a) && RLdesign.Arrays.IsArray(b)) {
			if (a.length != b.length) return false;

			for (var i = 0; i < a.length; i++) {
				if (a[i] != b[i]) return false;
			}

			return true;
		}
		else {
			return false;
		}
	}
}

var UltimizeShopVariantModule = new Ultimize.Shop.VariantModule();

RLdesign.Events.SetEventHandler(window, "load", function () { UltimizeShopVariantModule.VariantSelectionChanged(); });
