﻿function WorkWithFilters(arRelation) {


    $('.shprResetBtn').click(function () {
        $('.shprFCountry option:first').attr('selected', 'selected');
        $('.shprFGroup option:first').attr('selected', 'selected');
        $('.shprFColor option:first').attr('selected', 'selected');
        $('.shprFType option:first').attr('selected', 'selected');
        $('.shprFSurface option:first').attr('selected', 'selected');

        $('input.hdCountry').val("0");
        $('input.hdGroup').val("0");
        $('input.hdColor').val("0");
        $('input.hdType').val("0");
        $('input.hdSurface').val("0");

        fillListsFromMatrix(arRelation);

    });

    $('.shprFilters select').change(function () {
        // сохраняем все выбранные значения комбиков
        var cntValue = $('.shprFCountry option:selected').val();
        var grpValue = $('.shprFGroup option:selected').val();
        var clrValue = $('.shprFColor option:selected').val();
        var tpValue = $('.shprFType option:selected').val();
        var srfValue = $('.shprFSurface option:selected').val();

        $('input.hdCountry').val(cntValue);
        $('input.hdGroup').val(grpValue);
        $('input.hdColor').val(clrValue);
        $('input.hdType').val(tpValue);
        $('input.hdSurface').val(srfValue);

        var transMatrix2 = transformRelationArray(arRelation);
        //printBigMatrix(arRelation, "Исходная Таблица", $('.text1'));

        fillListsFromMatrix(transMatrix2, this);
        //printBigMatrix(transMatrix2, "Таблица после нач преобразования", $('.text2'));        

        // теперь надо заполнить предыдущими значениями или какими то другими
        // если такой элемент существует - то ставим его

        if (isItemInList($('.shprFCountry option'), cntValue) == true) {
            $('.shprFCountry option[value=' + cntValue + ']').attr('selected', 'selected');
            $('input.hdCountry').val(cntValue);
        }
        else {
            $('.shprFCountry option:first').attr('selected', 'selected');
            $('input.hdCountry').val("0");
        }
        if (isItemInList($('.shprFGroup option'), grpValue) == true) {
            $('.shprFGroup option[value=' + grpValue + ']').attr('selected', 'selected');
            $('input.hdGroup').val(grpValue);
        }
        else {
            $('.shprFGroup option:first').attr('selected', 'selected');
            $('input.hdGroup').val("0");
        }
        if (isItemInList($('.shprFColor option'), clrValue) == true) {
            $('.shprFColor option[value=' + clrValue + ']').attr('selected', 'selected');
            $('input.hdColor').val(clrValue);
        }
        else {
            $('.shprFColor option:first').attr('selected', 'selected');
            $('input.hdColor').val("0");
        }
        if (isItemInList($('.shprFType option'), tpValue) == true) {
            $('.shprFType option[value=' + tpValue + ']').attr('selected', 'selected');
            $('input.hdType').val(tpValue);
        }
        else {
            $('.shprFType option:first').attr('selected', 'selected');
            $('input.hdType').val("0");
        }
        if (isItemInList($('.shprFSurface option'), srfValue) == true) {
            $('.shprFSurface option[value=' + srfValue + ']').attr('selected', 'selected');
            $('input.hdSurface').val(srfValue);
        }
        else {
            $('.shprFSurface option:first').attr('selected', 'selected');
            $('input.hdSurface').val(0);
        }
    })
}
// на входе матрица для паполнения комбиков
// выполняет создание массив и заполнение значений для комбиков
function fillListsFromMatrix(matrix, curList) {
    var cntAr = [];
    var grpAr = [];
    var clrAr = [];
    var tpAr = [];
    var srfAr = [];


    $.each(matrix, function (index, value) {
        if (value.cntID > 0) {
            cntAr.push({
                value: value.cntID,
                text: value.cnt
            });
        }
        if (value.grpID > 0) {
            grpAr.push({
                value: value.grpID,
                text: value.grp
            });
        }
        if (value.clrID > 0) {
            clrAr.push({
                value: value.clrID,
                text: value.clr
            });
        }
        if (value.tpID > 0) {
            tpAr.push({
                value: value.tpID,
                text: value.tp
            });
        }
        if (value.srfID > 0) {
            srfAr.push({
                value: value.srfID,
                text: value.srf
            });
        }
    });
    // а теперь можно заполненные массивы связать с комбиками
    var curListClass = $(curList).attr('class');

    if (curListClass != 'shprFCountry') fillList('.shprFilters select.shprFCountry', cntAr);
    if (curListClass != 'shprFGroup') fillList('.shprFilters select.shprFGroup', grpAr);
    if (curListClass != 'shprFColor') fillList('.shprFilters select.shprFColor', clrAr);
    if (curListClass != 'shprFType') fillList('.shprFilters select.shprFType', tpAr);
    if (curListClass != 'shprFSurface') fillList('.shprFilters select.shprFSurface', srfAr);
}


// изменяет массив в зависимости от значений комбиков
function transformRelationArray(ar) {

    // просто зануляем элементы, которые не нужны                       
    var cntValue = $('input.hdCountry').val();
    var grpValue = $('input.hdGroup').val(); ;
    var clrValue = $('input.hdColor').val(); ;
    var tpValue = $('input.hdType').val(); ;
    var srfValue = $('input.hdSurface').val(); ;
    // если комбика нет то значение undefined
    var newAr = [];


    $.each(ar, function (index, value) {
        if
                            (
                                ((cntValue == undefined) || (value.cntID == cntValue) || (cntValue == 0)) &&
                                ((grpValue == undefined) || (value.grpID == grpValue) || (grpValue == 0)) &&
                                ((clrValue == undefined) || (value.clrID == clrValue) || (clrValue == 0)) &&
                                ((tpValue == undefined) || (value.tpID == tpValue) || (tpValue == 0)) &&
                                ((srfValue == undefined) || (value.srfID == srfValue) || (srfValue == 0))
                            ) {

            newAr.push({
                cntID: value.cntID, cnt: value.cnt, grpID: value.grpID, grp: value.grp,
                clrID: value.clrID, clr: value.clr, tpID: value.tpID, tp: value.tp,
                srfID: value.srfID, srf: value.srf
            });
        }

    });

    return newAr;
}



// есть ли элемент в select                    
function isItemInList(lst, checkValue) {
    var result = false;
    $.each(lst, function (index, value) {
        if (checkValue == $(value).val()) result = true;

    });
    return result;
}

// заполняет select значениями из массива
// у массива каждое значение имеет параметры value, text
function fillList(lstSelector, values) {
    $(lstSelector).empty();
    $(lstSelector).append($('<option value=0>Показать все</option>'));
    $.each(values, function (index, value) {
        if (isItemInList($(lstSelector + ' option'), value.value) != true)
            $(lstSelector).append($('<option value=' + value.value + '>' + value.text + '</option>'));
    });
}

function printBigMatrix(m, header, container) {
    var st = "<h2>" + header + "</h2><table border='1' cellpadding='0' cellspacing='2'>";
    var i = 1;
    $.each(m, function (index, value) {
        st += "<tr>" +
                                "<td>" + i + "</td>" +
                                "<td>" + value.cntID + "</td><td>" + value.cnt + "</td>" +
                                "<td>" + value.grpID + "</td><td>" + value.grp + "</td>" +
                                "<td>" + value.clrID + "</td><td>" + value.clr + "</td>" +
                                "<td>" + value.tpID + "</td><td>" + value.tp + "</td>" +
                                "<td>" + value.srfID + "</td><td>" + value.srf + "</td>" +
                                "</tr>";
        i++;
    });
    st += "</table>";
    $(container).html(st);
}

