YAHOO.namespace("tphawaii.calendar");

function setJapanese() {
    // Date labels for Japanese locale
    this.cfg.setProperty("MONTHS_SHORT",   ["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"]);
    this.cfg.setProperty("MONTHS_LONG",    ["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"]);
    this.cfg.setProperty("WEEKDAYS_1CHAR", ["\u65E5", "\u6708", "\u706B", "\u6C34", "\u6728", "\u91D1", "\u571F"]);
    this.cfg.setProperty("WEEKDAYS_SHORT", ["\u65E5", "\u6708", "\u706B", "\u6C34", "\u6728", "\u91D1", "\u571F"]);
    this.cfg.setProperty("WEEKDAYS_MEDIUM",["\u65E5", "\u6708", "\u706B", "\u6C34", "\u6728", "\u91D1", "\u571F"]);
    this.cfg.setProperty("WEEKDAYS_LONG",  ["\u65E5", "\u6708", "\u706B", "\u6C34", "\u6728", "\u91D1", "\u571F"]);
}

function handleSelect(type,args,obj) {
    var dates = args[0];
    var date = dates[0];
    var year = date[0], month = date[1], day = date[2];
    var selMonth = document.getElementById(obj.id + "_month");
    var selDay = document.getElementById(obj.id + "_day");
    var selYear = document.getElementById(obj.id + "_year");
    
    for (var y=0;y<selMonth.options.length;y++) {
        if (selMonth.options[y].text == month) {
            selMonth.selectedIndex = y;
            break;
        }
    }
    for (var y=0;y<selDay.options.length;y++) {
        if (selDay.options[y].text == day) {
            selDay.selectedIndex = y;
            break;
        }
    }
    for (var y=0;y<selYear.options.length;y++) {
        if (selYear.options[y].text == year) {
            selYear.selectedIndex = y;
            break;
        }
    }
    obj.hide();
    obj.viewMode = true;
}

function updateCal(e,obj) {
    var selMonth = document.getElementById(obj.id + "_month");
    var selDay = document.getElementById(obj.id + "_day");
    var selYear = document.getElementById(obj.id + "_year");
    
    var month = parseInt(selMonth.options[selMonth.selectedIndex].value);
    var day = parseInt(selDay.options[selDay.selectedIndex].value);
    var year = parseInt(selYear.options[selYear.selectedIndex].value);
    
    if (! isNaN(month) && ! isNaN(day) && ! isNaN(year)) {
        var date = month + "/" + day + "/" + year;
        obj.select(date);
        obj.cfg.setProperty("pagedate", month + "/" + year);
        obj.render();
    }
}

function toggleCal(e,obj){
    if ( obj.viewMode ){
        obj.show();
        obj.render();
        obj.viewMode = false;
    }
    else {
        obj.hide();
        obj.viewMode = true;
    }
}

function toggleRooms() {
    var no_rooms = document.getElementById("no_rooms");
    var rooms = parseInt(no_rooms.options[no_rooms.selectedIndex].value);
    
    switch(rooms) {
        case 1:
            YAHOO.util.Dom.setStyle(['room2', 'room3'], 'display', 'none');
            break;
        case 2:
            YAHOO.util.Dom.setStyle(['room2'], 'display', '');
            YAHOO.util.Dom.setStyle(['room3'], 'display', 'none');
            break;
        case 3:
            YAHOO.util.Dom.setStyle(['room2', 'room3'], 'display', '');
            break;
    }
}

function getDate(type, id) {
    var selMonth = document.getElementById(id + "_month");
    var selDay = document.getElementById(id + "_day");
    var selYear = document.getElementById(id + "_year");

    var month = parseInt(selMonth.options[selMonth.selectedIndex].text);
    var day = parseInt(selDay.options[selDay.selectedIndex].text);
    var year = parseInt(selYear.options[selYear.selectedIndex].text);

    switch(type) {
        case 'mdy':
            var strDate = month + '/' + day + '/' + year;
            break;
        case 'my':
            var strDate = month + '/' + year;
            break;
        default:
            var strDate = '';
            break;
    }
    return strDate;
}

function init() {
    // Setup minimum and maximum dates
    var now = new Date();
    var minDate = (now.getMonth() + 1) + '/' + now.getDate() + '/' + now.getFullYear();
    var maxDate = (now.getMonth() + 1) + '/' + now.getDate() + '/' + (now.getFullYear() + 4);

    // Check-in calendar
    var selectedCheckIn = getDate('mdy', 'hotel_check_in');
    var pagedateCheckIn = getDate('my', 'hotel_check_in');
    YAHOO.tphawaii.calendar.hotel_check_in = new YAHOO.widget.Calendar("hotel_check_in","checkInContainer", {
                                                                                                                selected: selectedCheckIn,
                                                                                                                pagedate: pagedateCheckIn,
                                                                                                                mindate: minDate,
                                                                                                                maxdate: maxDate,
                                                                                                                title:"チェックイン日付:",
                                                                                                                close:true });
    YAHOO.tphawaii.calendar.hotel_check_in.setJapanese = setJapanese;
    YAHOO.tphawaii.calendar.hotel_check_in.setJapanese();
    YAHOO.tphawaii.calendar.hotel_check_in.selectEvent.subscribe(handleSelect, YAHOO.tphawaii.calendar.hotel_check_in, true);
    YAHOO.tphawaii.calendar.hotel_check_in.render();
    YAHOO.util.Event.addListener(["hotel_check_in_month","hotel_check_in_day","hotel_check_in_year"], "change", updateCal, YAHOO.tphawaii.calendar.hotel_check_in);
    YAHOO.tphawaii.calendar.hotel_check_in.hide();
    YAHOO.tphawaii.calendar.hotel_check_in.viewMode = true;
    YAHOO.util.Event.addListener("checkInCalIcon", "click", toggleCal, YAHOO.tphawaii.calendar.hotel_check_in);

    // Check-out calendar
    var selectedCheckOut = getDate('mdy', 'hotel_check_out');
    var pagedateCheckOut = getDate('my', 'hotel_check_out');
    YAHOO.tphawaii.calendar.hotel_check_out = new YAHOO.widget.Calendar("hotel_check_out","checkOutContainer", {
                                                                                                                selected: selectedCheckOut,
                                                                                                                pagedate: pagedateCheckOut,
                                                                                                                mindate: minDate,
                                                                                                                maxdate: maxDate,
                                                                                                                title:"チェックアウト日付:",
                                                                                                                close:true });
    YAHOO.tphawaii.calendar.hotel_check_out.setJapanese = setJapanese;
    YAHOO.tphawaii.calendar.hotel_check_out.setJapanese();
    YAHOO.tphawaii.calendar.hotel_check_out.selectEvent.subscribe(handleSelect, YAHOO.tphawaii.calendar.hotel_check_out, true);
    YAHOO.tphawaii.calendar.hotel_check_out.render();
    YAHOO.util.Event.addListener(["hotel_check_out_month","hotel_check_out_day","hotel_check_out_year"], "change", updateCal, YAHOO.tphawaii.calendar.hotel_check_out);
    YAHOO.tphawaii.calendar.hotel_check_out.hide();
    YAHOO.tphawaii.calendar.hotel_check_out.viewMode = true;
    YAHOO.util.Event.addListener("checkOutCalIcon", "click", toggleCal, YAHOO.tphawaii.calendar.hotel_check_out);

    // Room quantity selector
    //YAHOO.util.Dom.setStyle(['room2', 'room3'], 'display', 'none');
    YAHOO.util.Event.onAvailable("no_rooms", toggleRooms);
    YAHOO.util.Event.addListener("no_rooms", "change", toggleRooms);
    
    // Search field
    YAHOO.util.Event.addListener('search-field', "blur", setSrchText);
    YAHOO.util.Event.addListener('search-field', "click", clearSrch);
} 
YAHOO.util.Event.addListener(window, "load", init);


// wForms form validation
wf.showAlertOnError = false; /* or true */ 
wf.behaviors['validation'].errMsg_required = "▼入力が正しくされておりません。";
wf.functionName_formValidation = "customValidation";
var top = '#pagetop';
function customValidation(evt) {
    if(wf.formValidation(evt)) {	// call the default error management.
        var f = wf.utilities.getSrcElement(evt); // reference to the form
        var valid = true;
        var id = ['hotel_check_in','hotel_check_out'];
        for (var i=0; i < id.length; i++) {
            if (! validDate(id[i])) {
                wf.behaviors['validation'].showError(f[id[i] + '_year'], wf.behaviors['validation'].errMsg_required);
                valid = false;
            }
        }
        if (greaterThanEqTo(id)) {
            wf.behaviors['validation'].showError(f[id[0] + '_year'], wf.behaviors['validation'].errMsg_required);
            wf.behaviors['validation'].showError(f[id[1] + '_year'], wf.behaviors['validation'].errMsg_required);
            valid = false;
        }
        if (! valid) {
            YAHOO.util.Dom.removeClass(['errorMain'], 'errorHide');
            window.location.hash = top;
            top = (top == '#pagetop') ? '#' : '#pagetop'; // Safari can't handle hash with the same value twice; therefore, need to toggle the value
            return wf.utilities.XBrowserPreventEventDefault(evt);  // will prevent the form from being submitted.
        }
    }
    else {
        YAHOO.util.Dom.removeClass(['errorMain'], 'errorHide');
        YAHOO.util.Dom.setStyle(['roomDetails-E'], 'margin', '10px 0 0 15px');
        window.location.hash = top;
        top = (top == '#pagetop') ? '#' : '#pagetop'; // Safari can't handle hash with the same value twice; therefore, need to toggle the value
        return wf.utilities.XBrowserPreventEventDefault(evt);  // will prevent the form from being submitted.
    }
}

function greaterThanEqTo(id) {
    var arrDate = new Array();
    for (var i=0; i < id.length; i++) {
        arrDate[i] = {
            selMonth: document.getElementById(id[i] + "_month"),
            selDay: document.getElementById(id[i] + "_day"),
            selYear: document.getElementById(id[i] + "_year"),
            month: "",
            day: "",
            year: "",
            date: new Date()
        }
        arrDate[i].month = parseInt(arrDate[i].selMonth.options[arrDate[i].selMonth.selectedIndex].value);
        arrDate[i].day   = parseInt(arrDate[i].selDay.options[arrDate[i].selDay.selectedIndex].value);
        arrDate[i].year  = parseInt(arrDate[i].selYear.options[arrDate[i].selYear.selectedIndex].value);
        arrDate[i].date.setFullYear(arrDate[i].year, arrDate[i].month-1, arrDate[i].day);
    }
    if (arrDate[0].date >= arrDate[1].date) {
        return true;
    }
    return false;
}

function validDate(id) {
    var selMonth = document.getElementById(id + "_month");
    var selDay = document.getElementById(id + "_day");
    var selYear = document.getElementById(id + "_year");
    
    var month = parseInt(selMonth.options[selMonth.selectedIndex].value);
    var day = parseInt(selDay.options[selDay.selectedIndex].value);
    var year = parseInt(selYear.options[selYear.selectedIndex].value);
    
    var now = new Date();
    var checkDate = new Date();
    checkDate.setFullYear(year, month-1, day);
    if (checkDate > now) {
        return true;
    }
    return false;
}
