﻿(function ($) {

    //Attach this new method to jQuery
    $.fn.extend({

        //This is where you write your plugin's name
        bookingCalendar: function (settings) {
            var defaults = {
                toggleThrobber: function () {
                    return false;
                },
                startDateSelected: function (dateString) {
                    return false; 
                },
                endDateSelected: function (dateStrinf) {
                    return false;
                }
            };
            var config = $.extend({}, defaults, settings);
            var globals = {
                container: null,
                calenderSelectDiv: null
            };
            var setShowDatesButtonEvents = function (ctrl) {
                $(".moreDates", ctrl).bind("click", function () {
                    var btn = $(this);
                    config.toggleThrobber();
                    $.ajax({
                        url: btn.attr("href"),
                        dataType: 'html',
                        context: globals.container,
                        success: function (data, textStatus, jqXHR) {
                            config.toggleThrobber();
                            $(".calenderControl", globals.container).html(data)
                            $(".calenderControl", globals.container).bookingCalendar({
                                toggleThrobber: config.toggleThrobber,
                                startDateSelected: config.startDateSelected,
                                endDateSelected: config.endDateSelected
                            });
                        }
                    });
                    return false;
                });
            };
            var setClickableDates = function (ctrl) {
                $(".selectable", ctrl).mouseenter(function () {
                    showSelectDate($(this));
                });
                $("td", ctrl).not(".selectable").mouseenter(function () {
                    hideSelectDate();
                });
            };

            var showSelectDate = function (cell) {
                var calenderSelectDiv;
                if (!globals.calenderSelectDiv) {
                    calenderSelectDiv = $("<div></div>").addClass("calenderSelectDiv").appendTo($("body")).bind("click", function () {
                        var btn = $(this);
                        hideSelectDate();
                        if (globals.container.find(".calenderControl").attr("data-checkin") === 'true') {
                            config.startDateSelected(btn.attr("title"));
                        }
                        else {
                            config.endDateSelected(btn.attr("title"));
                        };
                        btn.remove();
                        return false;
                    });
                    globals.calenderSelectDiv = calenderSelectDiv;
                }
                else {
                    calenderSelectDiv = globals.calenderSelectDiv;
                }
                var cellPos = cell.offset();
                calenderSelectDiv.html(cell.text()).css({
                    top: cellPos.top - (cell.height() / 2),
                    left: cellPos.left - (cell.outerWidth() / 2)
                }).attr({ "title": cell.attr("title"), "rel": cell.attr("rel") }).show();

            };
            var hideSelectDate = function () {
                $(".calenderSelectDiv").hide();
            };
            var setUpDates = function (ctrl) {
                setShowDatesButtonEvents(ctrl);
                setClickableDates(ctrl);
            };
            return this.each(function () {
                var mainControl = $(this);
                globals.container = $(this).parent();
                setUpDates(mainControl);
                return this;
            });
        }
    });
})(jQuery);
