﻿var PairedDatePicker2 = (function ($) {

    var dateFrom;
    var dateTo;

    var selectionDirection; // 1 for "from -> to", -1 for "to -> from" and 0 for default


    return {

        bindPairedDatePickers: function (dateFromId, dateToId, langCode, shortDateFormatStringJs, monthNamesShortInJsonForCurrCulture, customOnSelect) {

            dateFrom = $j('#' + dateFromId);
            dateTo = $j('#' + dateToId);
            var dateFromAndTo = dateFrom.add(dateTo);


            selectionDirection = 0;

            var currentLang = langCode;
            var customizedRg = TB.deepClone($j.datepicker.regional[currentLang]);
            customizedRg.monthNamesShort = monthNamesShortInJsonForCurrCulture;
            var dates = dateFromAndTo.datepicker(customizedRg);
            dates.each(function () {
                $j(this).datepicker({});
                $j(this).datepicker('option', 'altField', '#' + $j(this).next('input[type="hidden"]').attr('id'));
                $j(this).datepicker('option', {
                    defaultDate: null, // null = today, old value - '+1w',
                    dateFormat: 'd-mm-yy',
                    numberOfMonths: 3,
                    showAnim: '',
                    altFormat: shortDateFormatStringJs,
                    hideIfNoPrevNext: true,
                    showOn: 'focus',
                    constrainInput: false,
                    minDate: new Date(),
                    beforeShow: function (input, inst) {
                        if (selectionDirection == 0) {

                            if (PairedDatePicker2.isDateFromPicker(this)) {
                                //date-from picker
                                $j(this).datepicker("option", "maxDate", null);
                                $j(this).datepicker("option", "minDate", "+1");
                            } else {
                                //date-to picker
                                $j(this).datepicker("option", "minDate", "+2");
                            }

                        } else {

                            if (PairedDatePicker2.isDateFromPicker(this)) {
                                //date-from picker
                                var date = PairedDatePicker2.getPickerSelectedDate(dateTo);
                                if (date != null) {
                                    date.setDate(date.getDate() - 1);
                                    $j(this).datepicker("option", "maxDate", date);
                                }
                            } else {
                                //date-to picker
                                var date = PairedDatePicker2.getPickerSelectedDate(dateFrom);
                                if (date != null) {
                                    date.setDate(date.getDate() + 1);
                                    $j(this).datepicker("option", "minDate", date);
                                }
                            }

                        }
                    },
                    onSelect: function (selectedDate) {
                        if (selectionDirection == 0) {
                            var date = PairedDatePicker2.getPickerSelectedDate(this);
                            if (PairedDatePicker2.isDateFromPicker(this)) {
                                //date-from picker
                                selectionDirection = 1;
                            } else {
                                //date-to picker
                                selectionDirection = -1;
                            }
                            setTimeout(PairedDatePicker2.showDateToPicker, 0);
                        }
                        if (typeof (customOnSelect) !== 'undefined' && customOnSelect != null) customOnSelect(selectedDate, selectionDirection);
                    },
                    onClose: function (dateText, inst) {
                        if ((selectionDirection == 1 && !PairedDatePicker2.isDateFromPicker(this)) || (selectionDirection == -1 && PairedDatePicker2.isDateFromPicker(this))) {
                            selectionDirection = 0;
                        }
                    }
                });


            });

            dateFromAndTo.attr('autocomplete', 'off').bind('click', function () { $j(this).datepicker('show'); });
        },

        getPickerSelectedDate: function (picker) {
            var instance = $j(picker).data("datepicker");
            var selectedDate = $j(picker).val();
            var date = $j.datepicker.parseDate(instance.settings.dateFormat || $j.datepicker._defaults.dateFormat, selectedDate, instance.settings);
            return date;
        },

        isDateFromPicker: function (picker) {
            return picker.id == dateFrom.attr('id');
        },

        showDateToPicker: function () {
            switch (selectionDirection) {
                case 1: dateTo.datepicker('show'); break;
                case -1: dateFrom.datepicker('show'); break;
            }
        }



    }
})(jQuery);


 
