﻿var root = new Array(3);
root[0] = 'root';
root[1] = 'rootPrcid';
root[2] = new Array();
var cat = root[2];
// TODO: recreate
var enableRestoreProducts;

function c(name) {
	FilterAddCategoryToTree(arguments);
}

function FilterAddCategoryToTree(data) {
	var categoryName = data[0];
	var hasTags = data[1];
	var categoryPrcId = String(data[2]);

	if (showTaglessCategories == 0 && hasTags == 0) {
	    return;
	}

	var newElement = new Array();
	newElement[0] = categoryName;
	newElement[1] = categoryPrcId;
	newElement[2] = null;

	if (data.length == 3) {
		cat[categoryPrcId] = newElement;
	}
	else {
		var currentElement = root;
		for (var i = 3; i < data.length; i++) {
			var currentCatId = String(data[i]);
			currentElement = currentElement[2][currentCatId];
		}

		if (currentElement[2] == null) {
			currentElement[2] = new Array();
		}

		currentElement[2][categoryPrcId] = newElement;
	}
}

// вызывается при первой загрузке страницы
function SaveCategorySelectStart() {
	enableRestoreProducts = true;
	var category1Value = hdfCategory1.value;
	var category2Value = hdfCategory2.value;
	var category3Value = hdfCategory3.value;

	if (category1Value != '') {
		cmbCategory1_Changed();
		if (cmbCategory2.disabled == false && category2Value != '') {
			cmbCategory2.value = category2Value;
			cmbCategory2_Changed();
		}
		if (cmbCategory3.disabled == false && category3Value != '') {
			cmbCategory3.value = category3Value;
			cmbCategory3_Changed();
		}
	}

	SaveCategorySelect();
}

function SaveCategorySelect() {

	hdfCategory.value = '';

	var category1 = cmbCategory1.value;
	var category2 = cmbCategory2.value;
	var category3 = cmbCategory3.value;

	hdfCategory1.value = category1;
	hdfCategory2.value = category2;
	hdfCategory3.value = category3;

	if (cmbCategory3.selectedIndex != -1 &&
        category3 != '-1')
		hdfCategory.value = category3
	else if (cmbCategory2.selectedIndex != -1 &&
        category2 != '-1')
		hdfCategory.value = category2
	else if (cmbCategory1.selectedIndex != -1 &&
        category1 != '-1')
		hdfCategory.value = category1
}

function SaveProductSelect() {
    if (cmbProduct == null)
        return;
        
	hdfProductBak.value = cmbProduct.value;
	hdfProduct.value = '';

	if (cmbProduct.value != '-1') {
		hdfProduct.value = cmbProduct.value;
	}
}

function UpdateComboEnable() {
	cmbCategory1.disabled = cmbCategory1.length == 0;
	cmbCategory2.disabled = cmbCategory2.length == 0;
	cmbCategory3.disabled = cmbCategory3.length == 0;
	if (cmbProduct != null) {
	    cmbProduct.disabled = cmbProduct.length == 0;
	}

	// при использовании кнопки "Back" уже не происходит серверной подгрузки элементов
	// в комбики, и поэтому они оказываются в неверном положении
	// здесь происходит распознавание данной ситуации и вызов скрипта для обновления комбиков
	if (cmbCategory1.disabled == false &&
	cmbCategory1.value != null &&
	cmbCategory1.value != -1 &&
	cmbCategory1.value != "" &&
	cmbCategory2.disabled == true) {
	cmbCategory1_Changed();
	}

	if (cmbCategory2.disabled == false &&
	cmbCategory2.value != null &&
	cmbCategory2.value != -1 &&
	cmbCategory2.value != "" &&
	cmbCategory3.disabled == true) {
	cmbCategory2_Changed();
	}
}

function cmbCategory1_Changed() {
	ClearSelectOptions(cmbCategory2);
	ClearSelectOptions(cmbCategory3);
	if (cmbProduct != null) {
	    ClearSelectOptions(cmbProduct);
	}

	var category1 = cmbCategory1.value;
	if (category1 != null &&
        category1 != -1 &&
        cat[category1] != null &&
        cat[category1][2] != null) {
	    PopulateCombo(cmbCategory2, cat[category1][2]);
	    UpdateComboEnable();
	}

	SaveCategorySelect();
}

function cmbCategory2_Changed() {
	ClearSelectOptions(cmbCategory3);
	if (cmbProduct != null) {
	    ClearSelectOptions(cmbProduct);
	}

	var category1 = cmbCategory1.value;
	var category2 = cmbCategory2.value;

	if (category1 != null &&
        category1 != -1 &&
        cat[category1] != null &&
        cat[category1][2] != null &&
        category2 != null &&
        category2 != -1 &&
        cat[category1][2][category2] != null &&
        cat[category1][2][category2][2] != null) {
	    PopulateCombo(cmbCategory3, cat[category1][2][category2][2]);
	    UpdateComboEnable();
	}

	SaveCategorySelect();

	FilterRequestProducts();
}

function ClearSelectOptions(combo) {
	combo.options.length = 0;
}

function PopulateCombo(combo, arr) {
	ClearSelectOptions(combo);

	combo.options.add(new Option(ResourceAllString, -1));

	if (arr != null)
		for (index in arr)
		combo.options.add(new Option(arr[index][0], arr[index][1]));
}

function cmbCategory3_Changed() {
    if (cmbProduct != null) {
        ClearSelectOptions(cmbProduct);
    }

	SaveCategorySelect();

	FilterRequestProducts();

	UpdateComboEnable();
}

function cmbProduct_Changed() {
	SaveCategorySelect();
	SaveProductSelect();

	UpdateComboEnable();
}

var productRequest = createRequest();
function FilterRequestProducts() {
	if (productRequest == null)
		return;

	if (cmbCategory2.value == "-1")
		return;

    if (cmbProduct != null) {
        ClearSelectOptions(cmbProduct);
    }

	var url = ProductScriptBaseUrl + "?" +
        UrlParameterNamePrcId + "=" + hdfCategory.value + '&' +
        UrlParameterNameVersion + "=" + ProductScriptVersion;

	productRequest.abort();
	productRequest.onreadystatechange = productRequestReadyStateChanged;
	productRequest.open("GET", url, true);
	productRequest.send(null);
}

function productRequestReadyStateChanged() {
	if (productRequest.readyState == 4 &&
        productRequest.status == 200 &&
        productRequest.responseText != null &&
        productRequest.responseText != '') {
		var products = eval("(" + productRequest.responseText + ")");

		if (products != undefined && products != null && cmbProduct != null) {
			// Заполнение комбика с продуктами
			ClearSelectOptions(cmbProduct);

			cmbProduct.options.add(new Option(ResourceAllString, -1));

			for (var i = 0; i < products.length; i++) {
				cmbProduct.options.add(new Option(products[i].Name, products[i].PrdId));
			}

			// если открываем первый раз - восстанавливаем предыдущее зн. у продуктов
			if (hdfProductBak.value != '' && enableRestoreProducts) {
				cmbProduct.value = hdfProductBak.value;
				enableRestoreProducts = false;
			}

			UpdateComboEnable();
		}
	}
}

function btnGo_Click() {
	var query = '';

	if (hdfProduct.value != null && hdfProduct.value != '') {
		query = 'prdId=' + hdfProduct.value;
	}
	else
		if (hdfCategory.value != null && hdfCategory.value != '') {
		query = 'prcId=' + hdfCategory.value;
	}
	else if (hdfCategory.value != null && hdfCategory.value != '') {
		query = 'prcId=' + hdfCategory.value;
	}
	else if (hdfRootPrcId != null &&
             hdfRootPrcId.value != null &&
             hdfRootPrcId.value != '') {
		query = 'prcId=' + hdfRootPrcId.value;
	}
	else {
		return;
	}

	var location = defaultPageBaseUrl + '?' + query + '&view=1&page=1';
	window.location = location;
}


