
(function($) {
    if (!window.nrt) window.nrt = {};
    var futureDate = false,
        currentMonth = "",
        carouselStart = 0,
        temptationTooltip = "",
        unresistedTooltip = "";

    // plugin configurations
    var tipConfig = {
        delay: 1000,
        edgeOffset: -44,
        leftOffset: 44
    };
    var hoverConfig = {
        over: function() { }, // function = onMouseOver callback (REQUIRED)    
        timeout: 0,         // number = milliseconds delay before onMouseOut
        out: function() { },  // function = onMouseOut callback (REQUIRED)    
        sensitivity: 5,     // mouse travel pixels - default = 7
        interval: 350       // polling frequency - default = 200ms
    };
    var carouselConfig = {
        scroll: 8,
        start: 0
    };

    // functions
    hoverConfig.over = function() {
        $(this).parent().siblings().fadeTo(500, 0.5);
    };

    hoverConfig.out = function() {
        $(this).parent().siblings().fadeTo(500, 1);
    };

    var addCalendarEntry = function(entry) {
        var tooltip = temptationTooltip + entry.temptations + "<br />" + unresistedTooltip + entry.unresisted;
        var $dayWrapper = $('<div class="dayWrapper" />');
        var $markup = $("<li />").html(entry.date.day)
                                 .addClass("entry")
                                 .addClass(entry.icon);

        if (!futureDate) { $dayWrapper.attr("title", tooltip); carouselStart++; };
        if (entry.dayToReduce || entry.dayToQuit) { $markup.addClass("quit"); };

        if (entry.today) {
            $markup.addClass("today");
            futureDate = true;
            carouselConfig.start = carouselStart - 4;
        } else if (futureDate) {
            $markup.addClass("future");
        };

        if (entry.date.monthName != currentMonth) {
            currentMonth = entry.date.monthName;
            $("<span />").html(entry.date.monthName + " " + entry.date.year)
                         .addClass("month")
                         .prependTo($markup);
        };

        $("<span />").html(entry.date.dayName)
                     .prependTo($markup);

        $markup.wrapInner($dayWrapper);

        return $markup;
    };

    var calendarDataCallbackSuccess = function(data) {
        var $calendar = $('#calendar-carousel');

        //set control headings
        $('#calendar .header').html(data.calendar.header)
                              .append($('<span class="smokefree" />').html(data.calendar.smokeFreeMessage));
        $('h2.calendar').html(data.calendar.smokeFreeMessage);
        temptationTooltip = data.calendar.popupTemptationsText;
        unresistedTooltip = data.calendar.popupUnresistedText;

        //populate entries
        data.entries.pop(); //get rid of the last array item since we know it is a dud
        $(data.entries).each(function() {
            $calendar.append(addCalendarEntry(this));
        });

        $calendar.jcarousel(carouselConfig);
        $calendar.find("li")
                 .not(".future")
                 .find(".dayWrapper")
                 .hoverIntent(hoverConfig)
                 .tipTip(tipConfig);
    };


    var calendar = {
        populateCalendar: function() {
            if ($("#calendar-carousel").length > 0) {
                $.ajax({
                    type: "GET",
                    url: "/json/Calendar.aspx?rand=" + (new Date()).getTime(),
                    //url: "/json/calendar.json.html",
                    dataType: "json",
                    success: calendarDataCallbackSuccess
                });
            }
        }
    };

    $.extend(window.nrt, calendar);

})(jQuery);

// page ready events
$(document).ready(function() {
    nrt.populateCalendar();
});

