﻿;(function($) {

window.BookingDatePicker = function (setup) {
    var _instance = this;

    _instance.init = function(options) {
        var defaults = {
            showOn: 'button',
            buttonImage: '',
            buttonImageOnly: true,
            minDate: '',
            defaultDate: '',
            valueElement: '',
            onSelect: _instance.datePickerValueChanged
        };
        _instance.opts = $.extend(defaults, options);

        _instance.valueElement = $('#' + _instance.opts.valueElement);

        // Вычисляем айдишники для внутренних элементов
        _instance.opts.dayElement = _instance.opts.valueElement + 'day';
        _instance.opts.monthElement = _instance.opts.valueElement + 'month';
        _instance.createElements();

        _instance.dayElement = $('#' + _instance.opts.dayElement);
        _instance.monthElement = $('#' + _instance.opts.monthElement);

        _instance.valueElement.datepicker(_instance.opts);
        _instance.opts.minimalDate = _instance.getMinimalDate();

        _instance.updateDate(_instance.opts.minimalDate);        
        if (_instance.opts.defaultDate != '') {
            _instance.updateDate(new Date(_instance.opts.defaultDate));    
        }
        _instance.dayElement.bind("change", _instance.dayElementValueChanged);
        _instance.monthElement.bind("change", _instance.monthElementValueChanged);
    }
    
    _instance.getDatepickerDate = function() {
        return _instance.valueElement.datepicker('getDate');
    };

    _instance.setDatepickerDate = function(Date) {
        return _instance.valueElement.datepicker('setDate', Date);
    };

    // Обновляет оба выпадающих списка 
    _instance.updateElements = function(newDate) {
        var today = new Date();
        // Кол-во дней в месяце 
        var dayCount = 33 - new Date(newDate.getYear(), newDate.getMonth(), 33).getDate();
        var checkCurrentYear = (newDate.getFullYear() == today.getFullYear());
        var checkCurrentMonth = (newDate.getMonth() == today.getMonth());
        // Заполняем лист с днями 
        var startDate = (checkCurrentMonth && checkCurrentYear ? _instance.opts.minimalDate.getDate() : 1);
        _instance.dayElement.empty();
        for (var i = startDate; i <= dayCount; i++) {
            var optionDate = new Date(newDate.getFullYear(), newDate.getMonth(), i);
            var textDate = $.datepicker.formatDate('DD, d', optionDate, $.datepicker.regional['ru']);
            if (i == newDate.getDate()) {
                _instance.dayElement.append('<option selected value="' + i + '">' + textDate + '</option>');
            } else {
                _instance.dayElement.append('<option value="' + i + '">' + textDate + '</option>');
            }
        }

        // Заполняем лист с месяцами 
        var startMonth = (checkCurrentYear ? today.getMonth() : 1);
        _instance.monthElement.empty();
        for (var i = startMonth; i <= 11; i++) {
            var optionDate = new Date(newDate.getFullYear(), i);
            var textDate = $.datepicker.formatDate('MM, y', optionDate, $.datepicker.regional['ru']);
            if (i == newDate.getMonth()) {
                _instance.monthElement.append('<option selected value="' + i + '">' + textDate + '</option>');
            } else {
                _instance.monthElement.append('<option value="' + i + '">' + textDate + '</option>');
            }
        }
    };

    // Все меняют дату через этот метод
    _instance.updateDate = function(newDate) {
        _instance.opts.searchDate = newDate;
        if (_instance.opts.searchDate == null) {
            _instance.opts.searchDate = new Date();
        }
        _instance.updateViews();
        if (_instance.opts.onDateChange != null) {
            _instance.opts.onDateChange(_instance.opts.searchDate);
        }
    };

    _instance.updateViews = function() {
        _instance.updateElements(_instance.opts.searchDate);
        _instance.valueElement.datepicker('setDate', _instance.opts.searchDate);
    };

    _instance.datePickerValueChanged = function() {
        _instance.updateDate(_instance.getDatepickerDate());
    };

    _instance.dayElementValueChanged = function() {
        var day = $('#' + _instance.opts.dayElement + ' option:selected').val();
        _instance.updateDate(new Date(_instance.opts.searchDate.getFullYear(), _instance.opts.searchDate.getMonth(), day));
    };

    _instance.monthElementValueChanged = function() {
        var month = $('#' + _instance.opts.monthElement + ' option:selected').val();
        // В новом месяце может не быть старого числа, тут заплатка
        var day = new Date(_instance.opts.searchDate.getYear(), month, _instance.opts.searchDate.getDate()).getDate();
        if (_instance.opts.searchDate.getDate() != day) {
            _instance.opts.searchDate.setDate(1);
        }
        _instance.updateDate(new Date(_instance.opts.searchDate.getFullYear(), month, _instance.opts.searchDate.getDate()));
    };

    _instance.createElements = function() {        
        _instance.valueElement.after('<select id="' + _instance.opts.monthElement + '" size="1"></select>');
        _instance.valueElement.after('<select id="' + _instance.opts.dayElement + '" size="1"></select>');
    };

    _instance.setMinimalDate = function(minDate) {
        _instance.opts.minimalDate = minDate;        
        _instance.valueElement.datepicker('option', 'minDate', minDate);
        _instance.updateDate(minDate);
    };

    _instance.getMinimalDate = function() {
        _instance.setDatepickerDate(new Date(0, 0, 0));
        return _instance.getDatepickerDate();
    };
    
    _instance.init(setup);
};
} (jQuery));


;(function($) {
    $.fn.bookingSystemsEmbedDateForm = function(options) {
        if (options == undefined || !options.key || !options.postUrl || !options.buttonImage) {
            throw "Not enough options! Required options: key & postUrl & buttonImage";
        }

        function createForm(parent) {
            var form = $('<form id="bs-dateform" action=\"'
                + options.postUrl + '\" method=\"get\"></form>');
            var formHtml = '<table><tr><td><label for=\"DateIn\">Дата заезда</label></td><td><input class=\"bookingSystemsDate\" id=\"DateOfArrival\" name=\"DateOfArrival\" type=\"hidden\" value=\"\" /></td></tr><tr><td><label for=\"DateOut\">Дата выезда</label></td><td><input class=\"bookingSystemsDate\" id=\"DateOfIssue\" name=\"DateOfIssue\" type=\"hidden\" value=\"\" /></td></tr><tr><td><label for=\"PeopleCount\">Гостей</label></td><td class=\"guests\"><select class=\"bookingSystemsPeopleCount\" id=\"PeopleCount\" name=\"PeopleCount\"><option value=\"1\">1</option><option value=\"2\">2</option><option value=\"3\">3</option><option value=\"4\">4</option><option value=\"5\">5</option><option value=\"6\">6</option><option value=\"7\">7</option><option value=\"8\">8</option><option value=\"9\">9</option><option value=\"10\">10</option></select></td></tr></table><div id=\"bookingSystemsFindRoomNumbersWrapper\"><input class=\"submit\" type=\"submit\" value=\"Найти номер\" id=\"bookingSystemsFindRoomNumbers\" /></div>';
            form.html(formHtml);
            $('<input type=\"hidden\" name=\"HotelRequest\" value=\"'
                + options.key + '\" />').appendTo(form);
            if (options.postUrl.indexOf('?') != -1) {
                var pos = options.postUrl.indexOf('?');
                var paramsString = options.postUrl.substr(pos + 1);
                var paramsArray = paramsString.split('&');
                for (var i = 0; i < paramsArray.length; i++) {
                    var keyValuePair = paramsArray[i].split('=');
                    var key = keyValuePair[0];
                    var value = keyValuePair[1];
                    $('<input type=\"hidden\" name=\"' + key + '\" value=\"'
                        + value + '\" />').appendTo(form);
                }
            }
            form.appendTo(parent);
        }

        function initDatePickers() {
            var dependedDatePicker = null;
            function dateChangedHandler(newDate) {
                if (dependedDatePicker != null) {
                    dependedDatePicker.setMinimalDate(new Date(newDate.getFullYear(), newDate.getMonth(), newDate.getDate() + 1));
                }
            }
            var dateInOptions = {
                buttonImage: options.buttonImage,
                onDateChange: dateChangedHandler,
                valueElement: 'DateOfArrival',
                defaultDate: new Date()
            }
            new window.BookingDatePicker(dateInOptions);
            var dateOutOptions = {
                buttonImage: options.buttonImage,
                minDate: '+ 1D',
                valueElement: 'DateOfIssue',
                defaultDate: new Date()
            }
            dependedDatePicker = new window.BookingDatePicker(dateOutOptions);
        }

        return $(this).each(function() {
            var me = $(this);
            createForm(me);
            initDatePickers();
        });
    }

    $.fn.bookingSystemsEmbedIFrame = function(hrValue) {
        function gup(name) {
            name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
            var regexS = "[\\?&]" + name + "=([^&#]*)";
            var regex = new RegExp(regexS);
            var results = regex.exec(window.location.href);
            if (results == null)
                return "";
            else
                return results[1];
        };

        var dateInValue = gup('DateOfArrival');
        var dateOutValue = gup('DateOfIssue');
        var pCountValue = gup('PeopleCount');

        var wantToMove = true;

        if (hrValue == "" || dateInValue == "" || dateOutValue == "" || pCountValue == "") {
            //throw "Not enough get parameters! Required parameters: HotelRequest & DateOfArrival & DateOfIssue & PeopleCount";
            wantToMove = false;
        }

        function createFrame(element) {
            var bsDataDiv = $('<div id=\"bs\"></div>');
            $('<input type=\"hidden\" name=\"HotelRequest\" value=\"'
                + +'\" />').appendTo(bsDataDiv);
            var frameDiv = $('<div></div>');
            var frame = $('<iframe id=\"bookingSystemsIFrame\" src=\"\" width=\"700\" height=\"950\" scrolling=\"auto\" border=\"0\" frameborder=\"0\"></iframe>');
            frame.appendTo(frameDiv);
            bsDataDiv.appendTo(element);
            frameDiv.appendTo(element);
            return frame;
        }

        function configureFrame(frame) {
            var src = 'http://bookingsystems.ru/Booking/ChooseDates?';
            var hreq = 'HotelRequest=' + hrValue;
            var din = '&DateOfArrival=' + dateInValue;
            var dout = '&DateOfIssue=' + dateOutValue;
            var pcount = '&PeopleCount=' + pCountValue;
            var wm = '&WantToMoveToNextPage=' + wantToMove;
            frame.attr('src', (src + hreq + din + dout + pcount + wm));
        }

        return $(this).each(function() {
            var me = $(this);
            configureFrame(createFrame(me));
        });
    }
} (jQuery));

;(function($) {
	$.datepicker.regional['ru'] = {
		closeText: 'Закрыть',
		prevText: '&#x3c;Пред',
		nextText: 'След&#x3e;',
		currentText: 'Сегодня',
		monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
		'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
		monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
		'Июл','Авг','Сен','Окт','Ноя','Дек'],
		dayNames: ['Воскресенье','Понедельник','Вторник','Среда','Четверг','Пятница','Суббота'],
		dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'],
		dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],
		dateFormat: 'dd.mm.yy', firstDay: 1,
		isRTL: false};
	$.datepicker.setDefaults($.datepicker.regional['ru']);
} (jQuery));
