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 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 toggleTime(e) {
    var selEl = YAHOO.util.Event.getTarget(e, 1);
    var selVal = selEl.options[selEl.selectedIndex].value;
    var selID = selEl.id.split('_')[0];
    switch(selVal) {
        case 'ワイキキカラカウア通りサービスセンター':
            YAHOO.util.Dom.addClass(selID + '_time_airport', 'timeDefault');
            YAHOO.util.Dom.removeClass(selID + '_time_waikiki', 'timeDefault');
            break;
        case 'ホノルル空港':
        default:
            YAHOO.util.Dom.addClass(selID + '_time_waikiki', 'timeDefault');
            YAHOO.util.Dom.removeClass(selID + '_time_airport', 'timeDefault');
            break;
    }
}

function initTime(obj) {
    var selEl = obj;
    var selVal = selEl.options[selEl.selectedIndex].value;
    var selID = selEl.id.split('_')[0];
    switch(selVal) {
        case 'ワイキキカラカウア通りサービスセンター':
            YAHOO.util.Dom.addClass(selID + '_time_airport', 'timeDefault');
            YAHOO.util.Dom.removeClass(selID + '_time_waikiki', 'timeDefault');
            break;
        case 'ホノルル空港':
        default:
            YAHOO.util.Dom.addClass(selID + '_time_waikiki', 'timeDefault');
            YAHOO.util.Dom.removeClass(selID + '_time_airport', 'timeDefault');
            break;
    }
}

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 = ['pickup','returnCar'];
        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(['rentalcars-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;
}

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 selectedPickup = getDate('mdy', 'pickup');
    var pagedatePickup = getDate('my', 'pickup');
    YAHOO.tphawaii.calendar.pickup = new YAHOO.widget.Calendar("pickup","pickupContainer", {
                                                                                            selected: selectedPickup,
                                                                                            pagedate: pagedatePickup,
                                                                                            mindate: minDate,
                                                                                            maxdate: maxDate,
                                                                                            title:"貸出日時:",
                                                                                            close:true });
    YAHOO.tphawaii.calendar.pickup.setJapanese = setJapanese;
    YAHOO.tphawaii.calendar.pickup.setJapanese();
    YAHOO.tphawaii.calendar.pickup.selectEvent.subscribe(handleSelect, YAHOO.tphawaii.calendar.pickup, true);
    YAHOO.tphawaii.calendar.pickup.render();
    YAHOO.util.Event.addListener(["pickup_month","pickup_day","pickup_year"], "change", updateCal, YAHOO.tphawaii.calendar.pickup);
    YAHOO.tphawaii.calendar.pickup.hide();
    YAHOO.tphawaii.calendar.pickup.viewMode = true;
    YAHOO.util.Event.addListener("pickupCalIcon", "click", toggleCal, YAHOO.tphawaii.calendar.pickup);

    // Check-out calendar
    var selectedReturn = getDate('mdy', 'returnCar');
    var pagedateReturn = getDate('my', 'returnCar');
    YAHOO.tphawaii.calendar.returnCar = new YAHOO.widget.Calendar("returnCar","returnCarContainer", {
                                                                                            selected: selectedReturn,
                                                                                            pagedate: pagedateReturn,
                                                                                            mindate: minDate,
                                                                                            maxdate: maxDate,
                                                                                            title:"返却日時:",
                                                                                            close:true });
    YAHOO.tphawaii.calendar.returnCar.setJapanese = setJapanese;
    YAHOO.tphawaii.calendar.returnCar.setJapanese();
    YAHOO.tphawaii.calendar.returnCar.selectEvent.subscribe(handleSelect, YAHOO.tphawaii.calendar.returnCar, true);
    YAHOO.tphawaii.calendar.returnCar.render();
    YAHOO.util.Event.addListener(["returnCar_month","returnCar_day","returnCar_year"], "change", updateCal, YAHOO.tphawaii.calendar.returnCar);
    YAHOO.tphawaii.calendar.returnCar.hide();
    YAHOO.tphawaii.calendar.returnCar.viewMode = true;
    YAHOO.util.Event.addListener("returnCarCalIcon", "click", toggleCal, YAHOO.tphawaii.calendar.returnCar);

    // Pickup and return times
    YAHOO.util.Event.addListener(["pickup_location","returnCar_location"], "change", toggleTime);
    YAHOO.util.Event.onAvailable("pickup_location", initTime, document.getElementById('pickup_location'));
    YAHOO.util.Event.onAvailable("returnCar_location", initTime, document.getElementById('returnCar_location'));

    // 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';
