﻿function SliderData() { }
var objSliderData = new SliderData();

$(function () {
    pageCookie()
    var intConfigItemsCount = 1;
    var strHTML = '';
    var temp = new Array();
    if (typeof arrSliders != 'undefined') {
        for (var i = 1; i < arrSliders.length; i++) {
            var strInterval = "";
            if (arrSliders[i]['interval']) {
                var arrIntervalTemp = arrSliders[i]['interval'];
                arrSliders[i]['min'] = 0;
                arrSliders[i]['max'] = (arrIntervalTemp.length - 1);
                strInterval = arrSliders[i]['interval'].join(",");
            }
            else {
                arrSliders[i]['min'] = Math.floor(arrSliders[i]['min']);
            }

            var varName = arrSliders[i]['varName'];

            temp[i] = getCookie("searchCriteria_" + varName);
            if (temp[i]) {
                temp2 = temp[i].split("#");
                arrSliders[i]['chosenMin'] = getIntervalIndexFromValue(temp2[0], arrSliders[i]);
                arrSliders[i]['chosenMax'] = getIntervalIndexFromValue(temp2[1], arrSliders[i]);
            }
            else {
                arrSliders[i]['chosenMin'] = arrSliders[i]['min'];
                arrSliders[i]['chosenMax'] = arrSliders[i]['max'];
            }

            $('#displayAmount_' + arrSliders[i]['varName'] + "_1").html(arrSliders[i]['chosenMin']);
            $('#displayAmount_' + arrSliders[i]['varName'] + "_2").html(arrSliders[i]['chosenMax']);
            $('#amount_' + arrSliders[i]['varName'] + "_1").val(arrSliders[i]['chosenMin']);
            $('#amount_' + arrSliders[i]['varName'] + "_2").val(arrSliders[i]['chosenMax']);
            $('#amount_' + arrSliders[i]['varName'] + "_min").val(arrSliders[i]['min']);
            $('#amount_' + arrSliders[i]['varName'] + "_max").val(arrSliders[i]['max']);

            $('#interval_' + arrSliders[i]['varName']).val(strInterval);

        }

        var objSliderContainer = document.getElementById('cntAllSliders');
        objSliderContainer.innerHTML += strHTML;
    }


    //$("#cntAllSliders > div.cntSearchCriteriaItemSlider slider-range").each(function () {
    $("div.slider-range").each(function () {
        // read initial values from markup and remove that
        var intParameterId = $(this).attr('id').split("_").pop();

        $("#slider-range_" + intParameterId).slider({
            range: true,
            //animate: true,
            min: 1 * ($("#amount_" + intParameterId + "_min").val()),
            max: 1 * ($("#amount_" + intParameterId + "_max").val()),
            values: [$("#amount_" + intParameterId + "_1").val(), $("#amount_" + intParameterId + "_2").val()],
            interval: getIntervalValues($("#interval_" + intParameterId).val(), intParameterId),
            change: function (event, ui) {
                if (typeof event.originalEvent != 'undefined') {
                    $('#activity').fadeIn("fast");
                }
                var strSliderId = event.target.id;
                var arrSliderId = strSliderId.split("_");
                var intSliderNumber = arrSliderId[1];
                updateSliderValue(intSliderNumber, ui);
                var strValues = $("#amount_" + intSliderNumber + "_1").val() + "#" + $("#amount_" + intSliderNumber + "_2").val()

                setCookie("searchCriteria_" + intSliderNumber, strValues, 3);

                // Update other slider ranges when slider-handle has been pulled (but not when slider has been updated programmatically)
                if (typeof event.originalEvent != 'undefined') {
                    setSliderRanges(selectedItemsList, null, intSliderNumber);
                    $('#activity').fadeOut("fast");
                }
                else {

                }

            },
            slide: function (event, ui) {
                var strSliderId = event.target.id;
                var arrSliderId = strSliderId.split("_");
                var intSliderNumber = arrSliderId[1];
                var intValue_0 = ui.values[0];
                var intValue_1 = ui.values[1];
                if (objSliderData['labels_' + intSliderNumber]) { intValue_0 = objSliderData['labels_' + intSliderNumber][intValue_0]; }
                if (objSliderData['labels_' + intSliderNumber]) { intValue_1 = objSliderData['labels_' + intSliderNumber][intValue_1]; }

                $("#displayAmount_" + intSliderNumber + "_1").html(intValue_0);
                $("#displayAmount_" + intSliderNumber + "_2").html(intValue_1);
            }
        });

        var label_1 = $("#slider-range_" + intParameterId).slider("values", 0);
        if (objSliderData['labels_' + intParameterId]) { label_1 = objSliderData['labels_' + intParameterId][$("#slider-range_" + intParameterId).slider("values", 0)]; }
        var label_2 = $("#slider-range_" + intParameterId).slider("values", 1);
        if (objSliderData['labels_' + intParameterId]) { label_2 = objSliderData['labels_' + intParameterId][$("#slider-range_" + intParameterId).slider("values", 1)]; }
        $("#displayAmount_" + intParameterId + "_1").html(label_1);
        $("#displayAmount_" + intParameterId + "_2").html(label_2);

        var value_1 = $("#slider-range_" + intParameterId).slider("values", 0);
        if (objSliderData['values_' + intParameterId]) { value_1 = objSliderData['values_' + intParameterId][$("#slider-range_" + intParameterId).slider("values", 0)]; }
        var value_2 = $("#slider-range_" + intParameterId).slider("values", 1);
        if (objSliderData['values_' + intParameterId]) { value_2 = objSliderData['values_' + intParameterId][$("#slider-range_" + intParameterId).slider("values", 1)]; }
        $("#amount_" + intParameterId + "_1").val(value_1);
        $("#amount_" + intParameterId + "_2").val(value_2);

        var objSlider2 = document.getElementById('slider-range_' + intParameterId).getElementsByTagName('a')[1];
        objSlider2.className = objSlider2.className + " ncSlider2";
    });


    if (typeof arrSelectingItems != 'undefined') {
        for (var i = 0; i < arrSelectingItems.length; i++) {
            if (arrSelectingItems[i]['type'] == "checkbox") {
                strHTML += makeSearchCriteriaTypeCheckbox(arrSelectingItems[i])
            }
            else if (arrSelectingItems[i]['type'] == "radio") {
                strHTML += makeSearchCriteriaTypeRadio(arrSelectingItems[i])
            }
            else if (arrSelectingItems[i]['type'] == "select") {
                strHTML += makeSearchCriteriaTypeSelect(arrSelectingItems[i])
            }

            updateCriteriaInfo(arrSelectingItems[i]['varName']);
        }
    }

    initBooleanSliders();

    displayProductList();
});

function updateSliderValue(argSliderNumber, ui) {
    var intValue_0 = ui.values[0];
    var intValue_1 = ui.values[1];
    if (objSliderData['labels_' + argSliderNumber]) { intValue_0 = objSliderData['labels_' + argSliderNumber][intValue_0]; }
    if (objSliderData['labels_' + argSliderNumber]) { intValue_1 = objSliderData['labels_' + argSliderNumber][intValue_1]; }

    $("#displayAmount_" + argSliderNumber + "_1").val(intValue_0);
    $("#displayAmount_" + argSliderNumber + "_2").val(intValue_1);
    if (objSliderData['values_' + argSliderNumber]) {
        $("#amount_" + argSliderNumber + "_1").val(objSliderData['values_' + argSliderNumber][ui.values[0]]);
    }
    else {
        $("#amount_" + argSliderNumber + "_1").val(ui.values[0]);
    }
    if (objSliderData['values_' + argSliderNumber]) {
        $("#amount_" + argSliderNumber + "_2").val(objSliderData['values_' + argSliderNumber][ui.values[1]]);
    }
    else {
        $("#amount_" + argSliderNumber + "_2").val(ui.values[1]);
    }

    displayProductList();
}

function getIntervalValues(argInterval, argSliderCount) {
    if (argInterval.search(',') != -1) {
        var arrSliderValues = new Array();
        var arrSliderLabels = new Array();
        argInterval = argInterval.split(',');
        var arrValues = argInterval;
        for (var i = 0; i < argInterval.length; i++) {
            var strValueItem = argInterval[i];
            if (-1 == strValueItem.search(';')) {
                arrValues[i] = i;
                arrSliderValues[i] = parseFloat(strValueItem); // arrSliderValues[i] = parseInt(strValueItem);
                arrSliderLabels[i] = parseFloat(strValueItem); // arrSliderLabels[i] = parseInt(strValueItem);
            }
            else {
                var arrValueItem = strValueItem.split(';');
                var strValue = arrValueItem.shift();
                var strLabel = arrValueItem.join(';');
                arrValues[i] = i;
                arrSliderValues[i] = parseFloat(strValue); // arrSliderValues[i] = parseInt(strValue);
                arrSliderLabels[i] = strLabel;
            }
        }
        objSliderData['values_' + argSliderCount] = arrSliderValues;
        objSliderData['labels_' + argSliderCount] = arrSliderLabels;
        return arrValues;
    }
    else {
        return null;
    }
}

function getIntervalIndexFromValue(argValue, argSlider) {
    if (!argSlider['interval']) {
        return argValue;
    }
    for (var i = 0; i < argSlider['interval'].length; i++) {
        var value = argSlider['interval'][i];
        if (-1 != String(value).search(';')) { value = value.substr(0, value.search(';')) }

        if (argValue == value) {
            return i;
        }
    }
}

function makeSearchCriteriaTypeCheckbox(argArr) {
    var strHTML = "";

    var varName = argArr['varName'];

    var strCookieData = getCookie("searchCriteria_" + varName);
    if (strCookieData) {
        var arrCookieValues = strCookieData.split("#");
    }

    for (var j = 0; j < argArr['items'].length; j++) {

        strChecked = "";
        if (arrCookieValues && in_array(argArr['items'][j]['name'], arrCookieValues)) {
            strChecked = ' checked="checked"';
            $('#inputCheck' + varName + '_' + j).attr("checked", "checked");
        }
    }

    return strHTML;
}


function initBooleanSliders() {
    //var values = argSliderData['interval'];
    if (typeof arrBoolSliders != 'undefined') {

        $(function () {
            for (intSliderCurrent in arrBoolSliders) {
                var sliderValue = 1; // middle value
                var parsedValue = "";

                storedVal = getCookie("searchCriteria_" + arrBoolSliders[intSliderCurrent]['varName']);

                if (storedVal) {
                    sliderValue = storedVal;
                    if (0 == storedVal) {
                        parsedValue = true;
                    }
                    else if (1 == storedVal) {
                        parsedValue = "";
                    }
                    else if (2 == storedVal) {
                        parsedValue = false;
                    }
                    $('#booleanSliderValue_' + arrBoolSliders[intSliderCurrent]['varName']).val(parsedValue); // Update input holding parsed value
                }
                $("#slider-boolean_" + arrBoolSliders[intSliderCurrent]['varName']).slider({
                    value: sliderValue,
                    min: 0,
                    max: 2,
                    step: 1,
                    slide: function (event, ui) {

                    },
                    change: function (event, ui) {
                        var strSliderId = event.target.id;
                        var arrSliderId = strSliderId.split("_");
                        var intSliderNumber = arrSliderId[1];

                        var newValue;
                        if (ui.value == 0) {
                            newValue = true;
                        } else if (ui.value == 2) {
                            newValue = false;
                        } else {
                            newValue = "";
                        }
                        setCookie("searchCriteria_" + intSliderNumber, ui.value, 3);
                        $('#booleanSliderValue_' + intSliderNumber).val(newValue); // Update input holding parsed value

                        displayProductList();
                    }
                });
            }
        });
    }
}




function setSliderRanges(productNodeList, argDataValues, originParameter) {
    if ("undefined" == typeof argDataValues)
        argDataValues = dataValues;
    var dataValuesUpdate = {};
    $('#productSearchResultContent').children().each(function () {
        //for (specificationParameter in argDataValues) {
        for (specificationParameter in dataValues) {
            if (typeof $(this).data('att_'+specificationParameter) != "undefined") {
                if (typeof dataValuesUpdate[specificationParameter] == 'undefined') {
                    dataValuesUpdate[specificationParameter] = new Array();
                }

                if (!in_array($(this).data('att_' + specificationParameter), dataValuesUpdate[specificationParameter])) {
                    if (isDisplayProduct($(this), specificationParameter)) {
                        dataValuesUpdate[specificationParameter].push($(this).data('att_' + specificationParameter));
                    }
                }
            }
        }
    });

    updateSliderOptions(dataValuesUpdate);

}

function updateSliderOptions(dataValuesCurrent) {
    for (specificationParameter in dataValuesCurrent) {
        if ($('#slider-range_' + specificationParameter).length > 0) {
            /*
            var arrInterval = new Array();
            var valueMin = null;
            var valueMax = null;
            for (var i = 0; i < dataValuesCurrent[specificationParameter].length; i++) {
            if (!in_array(parseNumber(dataValuesCurrent[specificationParameter][i]), arrInterval))
                arrInterval.push(parseNumber(dataValuesCurrent[specificationParameter][i]));
                if (parseNumber(dataValuesCurrent[specificationParameter][i]) > valueMax)
                valueMax = parseNumber(dataValuesCurrent[specificationParameter][i]);
                if (valueMin == null || parseNumber(dataValuesCurrent[specificationParameter][i]) < valueMin)
                valueMin = parseNumber(dataValuesCurrent[specificationParameter][i]);
            }
            arrInterval.sort();

            $('#amount_' + specificationParameter + '_min').val(valueMin);
            //console.log("valueMin" + $('#amount_' + specificationParameter + '_min').val());
            //console.log("max "+specificationParameter+" before: " + $('#amount_' + specificationParameter + '_max').val());
            $('#amount_' + specificationParameter + '_max').val(valueMax);
            //console.log("max after: " + $('#amount_' + specificationParameter + '_max').val());


            $("#slider-range_" + specificationParameter).slider("option", "min", (1 * valueMin));
            $("#slider-range_" + specificationParameter).slider("option", "max", (1 * valueMax));
            $("#amount_" + specificationParameter + "_min").val((1 * valueMin));
            $("#amount_" + specificationParameter + "_max").val((1 * valueMax));

            $("#slider-range_" + specificationParameter).slider("values", 0, 1 * $('#amount_' + specificationParameter + '_1').val());
            $("#slider-range_" + specificationParameter).slider("values", 1, 1 * $('#amount_' + specificationParameter + '_2').val());
            */
        }
        else if ($('#list_' + specificationParameter).length > 0) {
            // Checkboxes
            $('#list_' + specificationParameter + ' input[type=checkbox]').each(function () {
                if (!in_array($(this).val(), dataValuesCurrent[specificationParameter])) {
                    $(this).attr('disabled', "disabled");
                }
                else {
                    $(this).removeAttr('disabled');
                }
            });

        }
        else if ($('#slider-boolean_' + specificationParameter).length > 0) {
            // Don't disable boolSliders
        }

        /*
        if (null != arrSliders[i] && typeof arrSliders[i] == "object") {
            if (arrSliders[i]['varName'] == specificationParameter) {
                arrSliders[i]['min'] = valueMin;
                arrSliders[i]['chosenMin'] = valueMin;
                arrSliders[i]['max'] = valueMax;
                arrSliders[i]['chosenMax'] = valueMax;
                //arrSliders[i]['interval'] = "["+arrInterval.join(',')+"]";

            }
        }
        */
    }
}

