YUI().use('node-base', 'substitute', function(Y) {
    var aDay        = 86400000,
    MSG_RALLY_ON    = "It's Rally Time!",
    MSG_RALLY_OFF   = "{days} day{plural} until Hells Canyon Rally {year}",
    
    rallyStart = function(year) {
        var juneFirst = new Date('6/1/'+year),
        secondFriday = (Math.abs(juneFirst.getDay() - 5) + 7);
        return new Date(juneFirst.getTime() + (aDay * secondFriday));
    },

    normalizeDate = function(d) {
        d = d || new Date();
        return new Date(d.getFullYear(),d.getMonth(),d.getDate(),0,0,0,0);
    },
    
    RallyCountDown = function() {
        var today = normalizeDate(),
        todayTime = today.getTime(),
        displayMessage,
        
        rallyStartDate  = rallyStart(today.getFullYear()),
        rallyEndDate    = new Date(rallyStartDate.getTime() + (aDay * 2));
        
        // this year's rally past?
        if (todayTime > rallyEndDate.getTime()) {
            rallyStartDate  = rallyStart(today.getFullYear() + 1);
            rallyEndDate    = new Date(rallyStartDate.getTime() + (aDay * 2));
        }
        
        if (todayTime >= rallyStartDate.getTime() &&
            todayTime <= rallyEndDate.getTime()) 
        {
            // We are mid rally, It's Rally Time
            displayMessage = MSG_RALLY_ON
        }
        else
        {
            // Rally is upcoming, XXX days till rally
            var diff = rallyStartDate.getTime() - todayTime,
            days = Math.floor(diff / aDay),
            displayMessage = Y.substitute(MSG_RALLY_OFF, {
                days: days,
                plural: (days > 1) ? 's' : '',
                year: rallyStartDate.getFullYear()
            });
        }
        
        this.setContent(displayMessage);
    };

    Y.on('available', RallyCountDown, '#days');
});
