var selects;
var colorSelect;
var selectedPropValues = {};
var formattedSkuPropValues = {};

$(function() {
	$('form.frm-add-product').submit(function() {
		if ($('select@[value=null]', this).size() > 0) {
			alert('Prosím vyberte všechny parametry');
			return false;
		}
	});

	initSkuStockInfo();
});

function initSkuStockInfo() {
	selects = $('select[id^=productParam-]');

	$('input:check[id^=productParam-]').each(function() {
		list = $(this).attr('id').split('-');
		goodId = list[1];
		skuPropId = list[2];
		value = $(this).val();
		frmId = '#formatted-' + goodId + '-' + skuPropId;

		formattedValue = $(frmId).text();

		if (formattedSkuPropValues[goodId] == null) {
			formattedSkuPropValues[goodId] = {};
		}

		formattedSkuPropValues[goodId][skuPropId] = {};
		formattedSkuPropValues[goodId][skuPropId][value] = {
			value : value,
			formattedValue : formattedValue
		};

		if (selectedPropValues[goodId] == null) {
			selectedPropValues[goodId] = {};
		}

		selectedPropValues[goodId][skuPropId] = value;
	});

	if ($(selects).size() > 0) {
		selects.each(function() {
			list = $(this).attr('id').split('-');
			skuPropId = list[2];
			goodId = list[1];

			if (formattedSkuPropValues[goodId] == null) {
				formattedSkuPropValues[goodId] = {};
			}
			formattedSkuPropValues[goodId][skuPropId] = {};

			$('option', this).each(function(i) {
				value = $(this).val();
				if (value != "null") {
					formattedValue = $(this).text();
					formattedSkuPropValues[goodId][skuPropId][i] = {
						value : value,
						formattedValue : formattedValue
					};
				}
			});

			value = $(this).val();

			if (selectedPropValues[goodId] == null) {
				selectedPropValues[goodId] = {};
			}
			selectedPropValues[goodId][skuPropId] = value;
		});

		$('select[id^=productParam-]').change(function() {
			list = $(this).attr('id').split('-');
			goodId = list[1];
			skuPropId = list[2];
			changedParamId = $(this).attr('id');

			if (skuStockInfo[goodId].stockLiveConnect) {
				onSkuPropValueChanged(changedParamId);
			}
		});
	}

	for (goodId in skuStockInfo) {
		updateStockInfo(goodId);
	}
}

function updateStockInfo(goodId) {

	if (skuStockInfo[goodId].stockLiveConnect) {
		found = false;
		key = "";
		info = STOCK_INFO_DEFAULT;

		propValues = {};

		for (i in skuStockInfo[goodId].skuPropIds) {
			skuPropId = skuStockInfo[goodId].skuPropIds[i];
			value = selectedPropValues[goodId][skuPropId];

			if (value == "null") {
				break;
			}

			propValues[skuPropId] = value;

			key += value + "#";
		}

		key = key.substr(0, key.length - 1);

		if (skuStockInfo[goodId].data[key] != null) {
			effectiveStockUnits = skuStockInfo[goodId].data[key];
			if (effectiveStockUnits > 0) {
				info = '';
				if (effectiveStockUnits <= 5) {
					info += effectiveStockUnits + ' ' + ON_STOCK2;
				} else {
					info += ON_STOCK_MORE_THAN5;
				}
				info += ' (' + OUR_STOCK + ')';
			} else {
				info = NOT_ON_STOCK + ' - ' + DELIVERY_PERIOD + ' '
						+ skuStockInfo[goodId].delivery;
			}
		}

	} else {
		info = DELIVERY_PERIOD + ' ' + skuStockInfo[goodId].delivery + '.';
	}

	$('[id^=stock-info-pd-' + goodId + "]").html(info);

}

function onSkuPropValueChanged(changedParamId) {
	list = $('#' + changedParamId).attr('id').split('-');
	changedSkuPropId = list[2];
	goodId = list[1];
	value = $('#' + changedParamId).val();

	selectedPropValues[goodId][changedSkuPropId] = value;

	// find available select options
	validSkuParams = {};
	for (key in skuStockInfo[goodId].data) {
		list2 = key.split('#');

		skuValues = {};

		for (i in skuStockInfo[goodId].skuPropIds) {
			skuPropId = skuStockInfo[goodId].skuPropIds[i];
			skuValues[skuPropId] = list2[i];
		}

		valid = true;
		for (skuPropId in selectedPropValues[goodId]) {
			if (selectedPropValues[goodId][skuPropId] == "null") {
				continue;
			}

			if (selectedPropValues[goodId][skuPropId] != skuValues[skuPropId]) {
				if (changedSkuPropId != skuPropId) {
					continue;
				}
				valid = false;
				break;
			}
		}

		if (valid) {
			for (skuPropId in skuValues) {
				if (changedSkuPropId == skuPropId) {
					continue;
				}
				value = skuValues[skuPropId];

				if (validSkuParams[skuPropId] == null) {
					validSkuParams[skuPropId] = {};
				}

				validSkuParams[skuPropId][value] = 1;
			}
		}
	}

	listChanged = changedParamId.split('-');
	chanchedGoodId = listChanged[1];

	// clean current selects options
	$(selects).each(function() {
		id = $(this).attr('id');
		if (changedParamId == id) {
			return;
		}

		list = id.split('-');
		skuPropId = list[2];
		goodId = list[1];

		if (goodId != chanchedGoodId) {
			return;
		}

		// clean all options (except null one)
			sel = $(this).get(0);

			for (i = sel.options.length - 1; i >= 0; i--) {
				if (sel.options[i].value != 'null')
					sel.options[i] = null;
			}
		});

	// add available options
	$(selects)
			.each(
					function() {
						id = $(this).attr('id');

						if (changedParamId == id) {
							return;
						}

						list = id.split('-');
						skuPropId = list[2];
						goodId = list[1];

						if (goodId != chanchedGoodId) {
							return;
						}

						sel = $(this).get(0);
						selIndex = 0;
						i = 0;
						for (j in formattedSkuPropValues[goodId][skuPropId]) {
							formattedValueObj = formattedSkuPropValues[goodId][skuPropId][j];

							formattedValue = formattedValueObj.formattedValue;
							value = formattedValueObj.value;

							if (validSkuParams[skuPropId][value] != null) {
								i++;
								newOption = new Option(formattedValue, value);
								try {
									sel.add(newOption,
											sel.options[sel.options.length]);
								} catch (ex) {
									sel.add(newOption);
								}

								if (selectedPropValues[goodId][skuPropId] == value) {
									selIndex = i;
								}
							}
						}

						if (sel.options.length == 2 && sel.selectedIndex != 1) {
							sel.selectedIndex = 1;
							selectedPropValues[goodId][skuPropId] = sel.options[sel.selectedIndex].value;
						} else {
							sel.selectedIndex = selIndex;
						}
					});

	updateStockInfo(chanchedGoodId);
}
