﻿
function HandleDialogResult(e, form, close) {
    $("td.error", form).text("");
    if (e.Errors != null) {
        var inputs = $('input', form);

        for (var i = 0; i < e.Errors.length; i++) {
            var error_description = e.Errors[i];
            var error_input = $("#" + error_description.Name, form);
            var error_placeholder = error_input.parents("tr").children("td.error");
            error_placeholder.text(error_description.Errors.toString());
        }

        var dialogResultHandler = form.data("dialogResultHandler");
        if (dialogResultHandler != null) {
            dialogResultHandler(form, e);
        }
    }
    else {
        if (e.OK && typeof e.RedirectTo === "string") {
            window.location.replace(e.RedirectTo);
        }
        close();
    }
}

function configureDates(loc, imgurl) {
    $.datepicker.setDefaults($.datepicker.regional[loc]);
    $(".datePicker").datepicker({ showOn: 'both', buttonImage: imgurl }).datepicker($.datepicker.regional[loc]);
}

function replace_language(old_url, new_lang, cookieRoot) {
    var language_regex = /(\/ua\/)|(\/ru\/)|(\/en\/)|(\/def\/)|(\/ua$)|(\/ru$)|(\/en$)|(\/def$)/;
    var result = null;
    if (old_url.match(language_regex)) {
        result = old_url.replace(language_regex, "\/" + new_lang + "\/");
    }
    else {
        var prefix = cookieRoot;
        result = old_url.replace(prefix, prefix + '/' + new_lang);
    }
    return result;
}

function parse_date(str) {
    var parts = str.split("/");
    var temp = new Date(parseInt(parts[2], 10), parseInt(parts[1], 10) - 1, parseInt(parts[0], 10));
    return new Date(temp.getFullYear(), temp.getMonth(), temp.getDate());
}

function addDay(date, days) {
    var result = new Date(date);
    result.setDate(date.getDate() + days);
    return result;
}

function dateToString(date) {
    //TODO: date format
    return date.getDate() + "/" + (date.getMonth() + 1) + "/" + date.getFullYear();
}


function applyPriceResult(priceDiv, result) {
    var i = result;
    var isTotal = i.PriceIsTotal;
    var isDicounted = i.PriceIsDiscounted;
    function set_value(cell, v) {
        var span = $("." + cell, priceDiv);
        span.text(v);
    }

    set_value("price-daily-base", i.PriceDailyBaseString);
    set_value("price-daily-discounted", i.PriceDailyDiscountedString);
    set_value("price-total-base", i.PriceTotalBaseString);
    set_value("price-total-discounted", i.PriceTotalDiscountedString);
    set_value("price_currency", i.PriceCurrency);
    set_value("total-days", i.TotalDays);
    set_value("total-days-nights", i.TotalDaysNights);

    if (isTotal) {
        priceDiv.addClass("total");
        priceDiv.removeClass("base");
    }
    else {
        priceDiv.removeClass("total");
        priceDiv.addClass("base");
    }

    if (isDicounted) {
        priceDiv.addClass("discounted");
        priceDiv.removeClass("not-discounted");
    }
    else {
        priceDiv.addClass("not-discounted");
        priceDiv.removeClass("discounted");
    }
}

var lastTimeout = null;


function setupSlider(name, all_values) {
    var min = all_values[0];
    var max = all_values[all_values.length - 1];

    function timeoutFunc() {
        $("#Filter_" + name + "Min").trigger("change");
    }

    function getNearest(v) {
        var index = 0;
        var minIndex = -1;
        var min = 999999;
        while (index < all_values.length) {
            if (Math.abs(all_values[index] - v) < min) {
                minIndex = index;
                min = Math.abs(all_values[index] - v);
            }
            index++
        }
        return { value: all_values[minIndex], slider: minIndex };
    }

    var map = new Array();
    for (var i = 0; i < all_values.length; i++) {
        map[i] = all_values[i];
    }

    min = 0;
    max = map.length - 1;

    var min_textbox = $("#Filter_" + name + "Min");
    var max_textbox = $("#Filter_" + name + "Max");
    var slider = $("#" + name + "Range");

    var set_min_value;

    if ((max_textbox != null) && max_textbox.length > 0) {
        slider.slider({
            range: true,
            min: min,
            max: max,
            values: [min, max],
            slide: function (event, ui) {
                var min_adjusted = getNearest(map[ui.values[0]]);
                var max_adjusted = getNearest(map[ui.values[1]]);
                $(this).slider("values", 0, min_adjusted.slider);
                $(this).slider("values", 1, max_adjusted.slider);
                $("#Filter_" + name + "Min").val(min_adjusted.value);
                $("#Filter_" + name + "Max").val(max_adjusted.value);
                if (lastTimeout) {
                    window.clearTimeout(lastTimeout);
                    lastTimeout = null;
                }
                lastTimeout = window.setTimeout(timeoutFunc, 100);
                return false;
            }
        });

        set_min_value = function (v) {
            slider.slider("values", 0, [v]);
        };
    }
    else {
        slider.slider({
            range: "max",
            min: min,
            value: min,
            max: max,
            slide: function (event, ui) {
                var min_adjusted = getNearest(map[ui.value]);
                $(this).slider("value", min_adjusted.slider);
                $("#Filter_" + name + "Min").val(min_adjusted.value);
                if (lastTimeout) {
                    window.clearTimeout(lastTimeout);
                    lastTimeout = null;
                }
                lastTimeout = window.setTimeout(timeoutFunc, 100);
                return false;
            }
        });
        set_min_value = function (v) {
            slider.slider("value", [v]);
        };
    }


    min_textbox.change(function () {
        var min_val = parseInt(min_textbox.val(), 10);
        var min_index = $.inArray(min_val, map);
        set_min_value(min_index);
    });
    max_textbox.change(function () {
        var max_val = parseInt(max_textbox.val(), 10);
        var max_index = $.inArray(max_val, map);
        slider.slider("values", 1, [max_index])
    });
}

function parse_date(str) {

    var parts = str.replace(".", "/").replace(".", "/").split("/");
    var temp = new Date(parseInt(parts[2], 10), parseInt(parts[1], 10) - 1, parseInt(parts[0], 10));
    return new Date(temp.getFullYear(), temp.getMonth(), temp.getDate());
}

function addDay(date, days) {
    var result = new Date(date);
    result.setDate(date.getDate() + days);
    return result;
}

function dateToString(date) {
    //TODO: date format
    return date.getDate() + "/" + (date.getMonth() + 1) + "/" + date.getFullYear();
}

$(function () {
    function trackInputChange(e) {
        _gaq.push(['_trackEvent', 'InputChanged', $(this).attr('name')]);
    };
    $(".filter-form input").change(trackInputChange);
});
