function handleCalendarSelect(type, args, obj) {

    var dates = args[0];
    var date = dates[0];
    var year = date[0], month = date[1], day = date[2];

    var dateField = document.getElementById("date_field");
    dateField.value = month + "/" + day + "/" + year;
    this.hide();
}

function validDate(dateString) {
    return dateString.match(/\d{1,2}\/\d{1,2}\/\d{4}/);
}

function showCalendar(calendar) {
    var dateString = document.getElementById("date_field").value;
    if (validDate(dateString)) {
        calendar.select(dateString);
    }
    else {
        calendar.select(new Date());
    }

    var firstDate = calendar.getSelectedDates()[0];
    calendar.cfg.setProperty("pagedate", (firstDate.getMonth() + 1) + "/" + firstDate.getFullYear());
    calendar.render();
    calendar.show();
}

var overCalendar = false;
function wireUpMouseListeners() {
    YAHOO.util.Event.addListener("calendar_container", "mouseover", function() {
        overCalendar = true;
    });

    YAHOO.util.Event.addListener("calendar_container", "mouseout", function() {
        overCalendar = false;
    });
}

function insertCalendar() {
    var dateField = document.getElementById("date_field");
    if (!dateField) {
        return;
    }

    var calendarContainer = document.createElement('div');
    calendarContainer.id = "calendar_container";
    dateField.parentNode.insertBefore(calendarContainer, dateField.nextSibling);

    var calendar = new YAHOO.widget.Calendar(
        "calendar",
        "calendar_container",
        { close: true });
    calendar.selectEvent.subscribe(handleCalendarSelect, calendar, true);

    YAHOO.util.Event.addListener(dateField, "focus", function () {
        showCalendar(calendar);
    });

    YAHOO.util.Event.addListener(dateField, "blur", function () {
        if (!overCalendar) {
            calendar.hide();
        }
    });

    YAHOO.util.Event.addListener(dateField, "click", function () {
        showCalendar(calendar);
    });

    YAHOO.util.Event.addListener(dateField, "keypress", function () {
        calendar.hide();
    });

    calendar.renderEvent.subscribe(wireUpMouseListeners, calendar, true);
}

YAHOO.util.Event.on(window, "load", insertCalendar);
