goog.provide('goog.ui.EventsDatePicker');

goog.require('goog.ui.DatePicker');

goog.ui.EventsDatePicker = function(opt_events, opt_date, opt_dateTimeSymbols) {
    // call the superClass constructor
    goog.ui.DatePicker.call(this, opt_date, opt_dateTimeSymbols);
    
    this.events = opt_events;
    
    // special CSS class name for cells with events    
    this.eventCellClassName = 'goog-date-picker-event';
    
    this.setDecorator(this.eventDecorator);
    
    // call this.dateClicked() when selecting a date
    goog.events.listen(this, goog.ui.DatePicker.Events.SELECT, this.dateClicked, false, this);
};

// extend goog.ui.DatePicker
goog.inherits(goog.ui.EventsDatePicker, goog.ui.DatePicker);


/**
 * Searches the events array and returns the event corresponding to passed date
 */
goog.ui.EventsDatePicker.prototype.findEventByDate = function (date) {
    var dateString = date.toIsoString(true);
    var event      = goog.array.find(this.events, function (event) { return event.date == dateString; });
    
    return event;
};


/**
 * Returns a different CSS class name to use for cells that have events
 */
goog.ui.EventsDatePicker.prototype.eventDecorator = function (date) {
    var event = this.findEventByDate(date);    
   
    if (event !== null) {
        return this.eventCellClassName;
    }
};


/**
 * Checks if an event cell was clicked, and jumps to the event's URL if true
 */
goog.ui.EventsDatePicker.prototype.dateClicked = function (event) {
    var date  = event.date;
    var event = this.findEventByDate(date);
    if (event !== null && event.url != '') {
        document.location.href = event.url;
    }
};
