var FIRST_DEPARTURE_DAY = 4; var LAST_DEPARTURE_DAY = 365; var YAHOO_CAL_DATE_PATTERN = "m/d/Y"; var processCalEvents = true; //var myLogReader; var calHovering = true; YAHOO.namespace("mp.calendar"); // // Writes selected date string from calendar int correct text field component. // function setDateFromCalendar(calId, value) { var textField = document.getElementById(calId == 'calDep' ? 'departureDate' : 'returnDate'); textField.value = value; } // // // // var setupMouseListeners = function(eventType, args, cal) { //YAHOO.log("registering listeners for " + cal.id); YAHOO.util.Event.addListener(cal.id, "mouseover", calMouseOver); YAHOO.util.Event.addListener(cal.id, "mouseout", calMouseOut); } // // Configures calendars initial properties. // function configureCalendar(cal) { var firstDepartureDate = new Date(); firstDepartureDate.setDate(firstDepartureDate.getDate() + FIRST_DEPARTURE_DAY); cal.cfg.setProperty("pages", 3); cal.cfg.setProperty("mindate", firstDepartureDate.dateFormat('m/d/Y')); cal.cfg.setProperty("pagedate", firstDepartureDate.dateFormat('m/Y')) cal.cfg.setProperty("close", true); cal.cfg.setProperty("MONTHS_LONG", ["Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu", "Heinäkuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu"]); cal.cfg.setProperty("WEEKDAYS_SHORT", ["Su","Ma","Ti","Ke","To","Pe","La"]); cal.cfg.setProperty("START_WEEKDAY", 1); if (cal.id == 'calDep') { cal.cfg.setProperty("title", "Lähtöpäivä:"); } else { cal.cfg.setProperty("title", "Paluupäivä:"); } } // // Handles calendar mouse out event to mark that user is not selecting dates // anymore and we can close the calendar at will. // function calMouseOut() { //YAHOO.log("MouseOut"); calHovering = false; } // // Handles calendar mouse over event to mark that user is selecting dates // and thus we should not close the calendar before selection is made. // function calMouseOver() { //YAHOO.log("MouseOver"); calHovering = true; } // // Returns the user entered (or selected) departure date from departure date // text field or null if not valid. // // todo: some masking be nice // function getDepartureDateAsDate() { return getStringAsDate(document.getElementById('departureDate').value); } // // Tries to convert given string into a date object. If conversion fails, // null is returned. // // todo: take pattern from selected locale. // function getStringAsDate(str) { return Date.parseDate(str, 'd.m.Y'); } // // Callback handler for hiding opened calendar. // var hideCalendar = function(eventType, cal) { if (!calHovering) { cal.hide(); } } // // Sets the selection boundaries on given calendar // function setCalendarDateRange(cal, minDate, maxDate) { if (minDate == null) { minDate = new Date(); } if (maxDate == null) { maxDate = new Date(); maxDate.setDate(minDate.getDate() + LAST_DEPARTURE_DAY); } cal.cfg.setProperty("mindate", minDate.dateFormat(YAHOO_CAL_DATE_PATTERN)); cal.cfg.setProperty("maxdate", maxDate.dateFormat(YAHOO_CAL_DATE_PATTERN)); } // // Callback handler for showing the calendar with selected value. // var showCalendar = function(eventType, cal) { //YAHOO.log("showCalendar"); var textField = document.getElementById(cal.id == 'calDep' ? 'departureDate' : 'returnDate'); var date = Date.parseDate(textField.value, 'd.m.Y'); if (date != null) { var dateStr = date.dateFormat(YAHOO_CAL_DATE_PATTERN); //alert("value to parse " + textField.value // + ", parsed to " + date // + ", formatted to " + dateStr); processCalEvents = false; cal.select(date.dateFormat(dateStr)); processCalEvents = true; var firstDate = cal.getSelectedDates()[0]; cal.cfg.setProperty("pagedate", (firstDate.getMonth()+1) + "/" + firstDate.getFullYear()); } // // Make sure we're not returning before we depart. // if (cal.id == 'calRet') { var departureDate = getDepartureDateAsDate(); setCalendarDateRange(cal, departureDate, null); } cal.render(); cal.show(); } // // Callback handler for updating text field with calendars selection. // var onDateSelectHandler = function(type, args, obj) { //YAHOO.log("Date selected type: " + type + ", args: " + args + ", obj: " + obj); if (!processCalEvents) { return; } var dates = args[0]; var date = dates[0]; var year = date[0]; var month = date[1]; var day = date[2]; setDateFromCalendar(obj.id, day + "." + month + "." + year); calHovering = false; obj.hide(); } function initDefaultDates() { var firstDepartureDate = new Date(); firstDepartureDate.setDate(firstDepartureDate.getDate() + FIRST_DEPARTURE_DAY); var departureText = document.getElementById('departureDate'); var returnText = document.getElementById('returnDate'); departureText.value = firstDepartureDate.dateFormat('d.m.Y'); firstDepartureDate.setDate(firstDepartureDate.getDate() + 7); returnText.value = firstDepartureDate.dateFormat('d.m.Y'); } function initDefaultAirports() { var departureField = document.getElementById("departureText"); if (departureField.value == '') { departureField.value = 'Helsinki, HEL'; } } function init() { initDefaultAirports(); // // This needs from come from the session or request otherwise we'll always // overwrite existing values. // //initDefaultDates(); YAHOO.mp.calendar.calDep = new YAHOO.widget.Calendar("calDep","calDepContainer"); YAHOO.mp.calendar.calRet = new YAHOO.widget.Calendar("calRet","calRetContainer"); configureCalendar(YAHOO.mp.calendar.calDep); configureCalendar(YAHOO.mp.calendar.calRet); YAHOO.mp.calendar.calDep.render(); YAHOO.mp.calendar.calRet.render(); YAHOO.util.Event.addListener("departureDate", "focus", showCalendar, YAHOO.mp.calendar.calDep, true); YAHOO.util.Event.addListener("returnDate", "focus", showCalendar, YAHOO.mp.calendar.calRet, true); YAHOO.util.Event.addListener("departureDate", "blur", hideCalendar, YAHOO.mp.calendar.calDep, true); YAHOO.util.Event.addListener("returnDate", "blur", hideCalendar, YAHOO.mp.calendar.calRet, true); YAHOO.mp.calendar.calDep.renderEvent.subscribe(setupMouseListeners, YAHOO.mp.calendar.calDep, true); YAHOO.mp.calendar.calRet.renderEvent.subscribe(setupMouseListeners, YAHOO.mp.calendar.calRet, true); YAHOO.mp.calendar.calRet.selectEvent.subscribe(onDateSelectHandler, YAHOO.mp.calendar.calRet, true); YAHOO.mp.calendar.calDep.selectEvent.subscribe(onDateSelectHandler, YAHOO.mp.calendar.calDep, true); //myLogReader = new YAHOO.widget.LogReader(); //myLogReader.show(); } YAHOO.util.Event.addListener(window, "load", init);