var req = false;
var timer = false;
var interval = null;

Date.dayNames = ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'];
Date.abbrDayNames = ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'];
Date.monthNames = ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'];
Date.abbrMonthNames = ['Jan', 'Feb', 'Mrz', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'];

Date.firstDayOfWeek = 1;
Date.format = 'dd.mm.yyyy';

$(function () {
    $(document).off('keyup', '#filter').on('keyup', '#filter', function (e) {
        var keycodes = [9, 16, 17, 18, 20, 37, 38, 39, 40, 91];
        if (keycodes.indexOf(e.which) === -1) {
            if (timer) {
                window.clearTimeout(timer);
            }
            timer = window.setTimeout(function () {
                var link = '?' + SID;
                link += '&veranstaltungen';
                link += '&veranstaltung_von=' + $('#hdatum').val();
                link += '&veranstaltung_bis=' + $('#rdatum').val();
                link += $('#kategorie').val() > 0 ? '&kategorie=' + $('#kategorie').val() : '';
                link += $('#filter').val() ? '&filter=' + $('#filter').val() : '';
                link += $('#selectedVeranstaltung').val() ? '&veranstaltung=' + $('#selectedVeranstaltung').val() : '';


                window.location.href = link;
            }, 500);
        }
    });

    $(document).off('keyup input', '.reload').on('keyup input', '.reload', function (e) {
        var value = $(this).val() * 1;
        var max = $(this).attr('max') * 1;
        if (value > max) {
            $(this).val(max);
        }
        if (timer) {
            window.clearTimeout(timer);
        }
        timer = window.setTimeout(function () {
            var data = {
                page: 'details',
                termin: $('#vId').val(),
                kategorie: $('#kategorie').val(),
                filter: $('#filter').val(),
                veranstaltung_von: $('#hdatum').val(),
                veranstaltung_bis: $('#rdatum').val(),
                veranstaltungArtikel: {}
            };
            var elems = ['#preise'];

            $('.reload').each(function () {
                data['veranstaltungArtikel'][$(this).attr('id')] = $(this).val();
            });

            req = reload(elems, data);
        }, 500);
    });

    $(document).off('click', '.changeTerminView').on('click', '.changeTerminView', function (e) {
        e.preventDefault();
        var type = $(this).data('type');
        var t = $('#termine').data('termin');
        var data = {
            page: 'details',
            terminView: type,
            termin: t
        };
        reload(['#termine'], data);
    });

    $(document).off('click', '.monthChange').on('click', '.monthChange', function (e) {
        e.preventDefault();
        var datum = $(this).data('datum');
        var v = $('#termine').data('termin');
        var data = {
            page: 'details',
            datum: datum,
            termin: v,
            terminView: 'calendar'
        };
        reload(['#termine'], data);
    });

//    $(document).off('click', '.pagination').on('click', '.pagination', function(e) {
//        e.preventDefault();
//        var type = $(this).data('type');
//        var data = {
//            page: 'veranstaltungen',
//            datum: datum
//        };
//        reload(['#veranstaltungen'], data);
//    });

    init();
});

function init() {
    $.datepicker.regional['de'] = {clearText: 'löschen', clearStatus: 'aktuelles Datum löschen',
        closeText: 'schließen', closeStatus: 'ohne Änderungen schließen',
        prevText: '<zurück', prevStatus: 'letzten Monat zeigen',
        nextText: 'Vor>', nextStatus: 'nächsten Monat zeigen',
        currentText: 'heute', currentStatus: '',
        monthNames: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni',
            'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],
        monthNamesShort: ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun',
            'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],
        monthStatus: 'anderen Monat anzeigen', yearStatus: 'anderes Jahr anzeigen',
        weekHeader: 'Wo', weekStatus: 'Woche des Monats',
        dayNames: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
        dayNamesShort: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
        dayNamesMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
        dayStatus: 'Setze DD als ersten Wochentag', dateStatus: 'Wähle D, M d',
        dateFormat: 'dd.mm.yy', firstDay: 1,
        initStatus: 'Wähle ein Datum', isRTL: false};
    $.datepicker.setDefaults($.datepicker.regional['de']);

    $("[title]").not('#information').tooltip({
        container: 'body'
    });
    $('#hdatum').datepicker({
        dateFormat: 'dd.mm.yy',
        minDate: '0'
    }).click(function () {
        $(this).select();
    });
    $('#rdatum').datepicker({
        dateFormat: 'dd.mm.yy',
        minDate: $('#hdatum').val()
    }).click(function () {
        $(this).select();
    });
    if ($('#hdatum').length) {
        $('#htag').html(Date.fromString($('#hdatum').val()).getDayName(true));
    }
    if ($('#rdatum').length) {
        $('#rtag').html(Date.fromString($('#rdatum').val()).getDayName(true));
    }
}

function reload(elems, sendData, callback) {
    if (typeof (elems) == 'undefined') {
        elems = ['#site'];
    }
    if (typeof (callback) == 'undefined') {
        callback = function () {
        };
    }
    for (var i = 0; i < elems.length; i++) {
        $(elems[i]).addClass('loading');
    }

    return $.ajax({
        url: '?' + SID,
        data: sendData,
        dataType: 'html',
        method: 'POST',
    }).done(function (data, textStatus, xhr) {
        var d = $.parseHTML(data);
        for (var i = 0; i < elems.length; i++) {
            var r = $(d).find(elems[i]);
            $(elems[i]).replaceWith(r.length ? r : $(d).filter(elems[i]));
        }
        init();
        callback();
    });
}

function toTimestamp(strDate) {
    var day = strDate.substring(0, 2);
    var month = strDate.substring(3, 5);
    var year = strDate.substring(6, 10);

    return (Math.round((new Date(year, month, day)).getTime() / 1000));
}