    var monthHeaderArray = [
        "1月", 
        "2月", 
        "3月",
        "4月", 
        "5月",
        "6月",
        "7月",
        "8月",
        "9月",
        "10月",
        "11月",
        "12月"
    ] 
    function getMonthName(ccmnth) {                       
        return monthHeaderArray[ccmnth];        
    }
    function nextMonth(myD) {        
        var currMnth = getDateMonth(myD);                
        var currYr = getDateYear(myD);
        if (currMnth == "11") {
            nextMnth = 0;
            nextYr = currYr;
            nextYr++;
        } 
        else {
            nextMnth=currMnth;
            nextMnth++;
            nextYr = currYr;
        }                
        str = (nextMnth+1)+"/1/"+nextYr;                             
        dt = new Date(str);                              
        return dt;                                 
    }
    function getNoOfDaysInMnth(ccmnth,yr) {         
        return 32 - new Date(yr, ccmnth-1, 32).getDate();                    
    }
    function Left(str, n){
          if (n <= 0)
              return "";
          else if (n > String(str).length)
              return str;
          else
              return String(str).substring(0,n);
    }
    function Right(str, n){
        if (n <= 0)
           return "";
        else if (n > String(str).length)
           return str;
        else {
           var iLen = String(str).length;
           return String(str).substring(iLen, iLen - n);
        }
    }
    function ToInt(value) {       
          if (Left(value, 1) == "0")                    
              return parseInt(Right(value, 1));    
          else
              return parseInt(value);
      }
      function ToString(value) {             
          if (value < 10) 
              return "0" + value;      
          else
              return value.toString();
      }
      function Trim(str) {
       return str.replace(/^\s*|\s*$/g,"");
    }
    function getDateYear(myDt) {
        return myDt.getFullYear();
    }
    function getDateMonth(myDt) {
        return myDt.getMonth();
    }
    function getDateDay(myDt) {
        return myDt.getDate();
    }
    function GetDateDiff(value1, value2) {
          return (value1.getTime() - value2.getTime())/(24*60*60*1000);
      }
    function genArriveMonthArray() {
        var monthArray = new Array()
        var myDt = new Date();
        for (var i = 0; i < 18; i++) {
            var tmpDt= myDt;                       
            var otext = getMonthName(getDateMonth(tmpDt)) + " " + Right(getDateYear(tmpDt), 2);
            var ovalue = getDateYear(tmpDt) + ToString(getDateMonth(tmpDt)+1);
            monthArray[i] = new Array(otext, ovalue);  
            myDt = nextMonth(tmpDt);      
        }         
        return monthArray;   
    }
    function genDepartMonthArray() {
        var monthArray = new Array()
        var myDt = GetDateFromString(document.getElementById("selectedarrivemonth").value+document.getElementById("selectedarrivedate").value, 0);                                                                         
        for (var i = 0; i < 2; i++) {
            var tmpDt= myDt;                       
            var otext = getMonthName(getDateMonth(tmpDt)) + " " + Right(getDateYear(tmpDt), 2);
            var ovalue = getDateYear(tmpDt) + ToString(getDateMonth(tmpDt)+1);
            monthArray[i] = new Array(otext, ovalue);  
            myDt = nextMonth(tmpDt);      
        }         
        return monthArray;   
    }
    function getDateArray(lbound, ubound) {
        var dateArray = new Array();
        for (var i = 0; i <= ubound - lbound; i++) {
            dateArray[i] = i + lbound;
        }
        return dateArray;
    }
    function loadArriveMonth() {                
        var select = document.getElementById("arriveMonth");
        var monthArray = genArriveMonthArray();
        for (var i = 0; i < monthArray.length; i++) {
            var option = document.createElement("option");           
            option.text = monthArray[i][0];
            option.value = monthArray[i][1];
            try {
                select.add(option,null);
            }
            catch (ex) {
                select.add(option);
            }            
        }                        
    }
    function loadDepartMonth() {               
        var select = document.getElementById("departMonth");                       
        var option = select.getElementsByTagName("option");
        var monthArray = genDepartMonthArray();                                                               
        for (var i = option.length-1; i >= 0; i--) {
            select.remove(option[i]);
        }    
        for (var i = 0; i < monthArray.length; i++) {
            var option = document.createElement("option");           
            option.text = monthArray[i][0];
            option.value = monthArray[i][1];
            try {
                select.add(option,null);
            }
            catch (ex) {
                select.add(option);
            }            
        }                        
    }
    function loadDate(daycontrol, monthcontrol) {                
        var monthselect = document.getElementById(monthcontrol);                 
        var sIndex = monthselect.selectedIndex;
        var option = monthselect.getElementsByTagName("option");                
        var y = Left(option[sIndex].value, 4);
        var m = parseInt(option[sIndex].value.replace(y, "")) + 1;                                       
        var ubound = getNoOfDaysInMnth(m-1, y);
        //var mydt = new Date();
        var lbound = 1;  
        var dayselect = document.getElementById(daycontrol);        
        var option = dayselect.getElementsByTagName("option");
        var dateArray = getDateArray(lbound, ubound);
        for (var i = option.length-1; i >= 0; i--) {
            dayselect.remove(option[i]);
        }                
        for (var i = 0; i < dateArray.length; i++) {
            var option = document.createElement("option");           
            option.text = dateArray[i];
            option.value = dateArray[i];
            if (daycontrol == "arriveDate" && dateArray[i] == document.getElementById("selectedarrivedate").value)
                option.selected = true;
            if (daycontrol == "departDate" && dateArray[i] == document.getElementById("selecteddepartdate").value)
                option.selected = true;
            try {
                dayselect.add(option,null);
            }
            catch (ex) {
                dayselect.add(option);
            }            
        }                    
    }
    function getSelectedDate(control) {
        var select = document.getElementById(control);
        var sIndex = select.selectedIndex;
        var option = select.getElementsByTagName("option");                
        var y = Left(option[sIndex].value, 4);
        var m = parseInt(option[sIndex].value.replace(y, ""));                                       
        return getNoOfDaysInMnth(m, y);
    }
    function dayOfWeek() {
        var dt = new Date();
        return getDateDay(dt);
    }
    function CheckinOnSelect(yyyymm, dd) {                    
          var curDate = new Date();
          var checkIndate = GetDPCheckDate(yyyymm, dd);     
          if (GetDateDiff(curDate, checkIndate) > 0) {
              checkIndate = curDate;                                      
        }           
          InitialArriveDateMonth(checkIndate); 
          loadDepartMonth();
          if (checkIndate != null) {
              var checkOutDate = GetDateFromString(GetStringFromDate(checkIndate), 24);                                     
              InitialDepartDateMonth(checkOutDate);                                                                                                             
              SetDPValue(GetStringFromDate(checkIndate), GetStringFromDate(checkOutDate));                                                
          }   
          loadDateNights();      
      }
      function CheckoutOnSelect(yyyymm, dd) {                        
          var checkOutdate = GetDPCheckDate(yyyymm, dd);    
          var checkIndate = GetDPCheckDate("arriveMonth", "arriveDate");
          if (GetDateDiff(checkIndate, checkOutdate) > 0) {
              checkOutdate = GetDateFromString(GetStringFromDate(checkIndate), 24);
              SetDPValue(GetStringFromDate(checkIndate), GetStringFromDate(checkOutdate));                                      
        }   
        if (GetDateDiff(checkOutdate, checkIndate) > 30) {
              checkOutdate = GetDateFromString(GetStringFromDate(checkIndate), 30*24);
              SetDPValue(GetStringFromDate(checkIndate), GetStringFromDate(checkOutdate));                                      
        } 
          InitialDepartDateMonth(checkOutdate); 
          loadDateNights();                                                       
      }
      function GetDPCheckDate(yyyymm, dd) {
          var dpCheckInDate;
          var dpCheckInString = GetDPControlValue(yyyymm)+ToString(GetDPControlValue(dd));                
          if (dpCheckInString != "")              
              dpCheckInDate = GetDateFromString(dpCheckInString, 0);
          else 
              dpCheckInDate = null;
        return dpCheckInDate;     
      }
      function GetDPControlValue(controlname) {
          var controlSelect = document.getElementById(controlname);
          var controlOption = controlSelect.getElementsByTagName("option");              
          return controlOption[controlSelect.selectedIndex].value;      
      }
      function GetDateFromString(datestring, hours) {                 
          var yr = Left(datestring, 4);                   
          var mth = Left(datestring.replace(yr, ""), 2);              
          var dt = Right(datestring, 2);      
          var myDate = new Date(ToInt(yr), ToInt(mth)-1, ToInt(dt), hours);
          return myDate;            
      }
      function GetStringFromDate(mydate) {                      
          var yr = ToString(mydate.getFullYear());
          var mth = ToString(mydate.getMonth()+1);
          var dt = ToString(mydate.getDate());                              
          return yr+mth+dt;             
      }
      function GetDPSelectedIndex(dpid, selectedvalue) {    
          var dp = document.getElementById(dpid);
          var op = dp.getElementsByTagName("option");
          var checkInIndex;
          for (var i = 0; i < op.length; i++) {                               
            if (op[i].value == selectedvalue)
                checkInIndex = i;                
        }                           
        return checkInIndex;  
      }
      function SetDPValue(checkinString, checkOutString) {      
          var dpCheckInYM = document.getElementById("arriveMonth");
          var dpCheckInDT = document.getElementById("arriveDate");                                                          
            dpCheckInYM.selectedIndex = GetDPSelectedIndex("arriveMonth", Left(checkinString, 6));                    
            dpCheckInDT.selectedIndex = GetDPSelectedIndex("arriveDate", ToInt(Right(checkinString, 2)));    
            var dpCheckOutYM = document.getElementById("departMonth");        
            var dpCheckOurDT = document.getElementById("departDate");                                                   
            dpCheckOutYM.selectedIndex = GetDPSelectedIndex("departMonth", Left(checkOutString, 6));                       
            dpCheckOurDT.selectedIndex = GetDPSelectedIndex("departDate", ToInt(Right(checkOutString, 2))); 
      }
    function loadDpSelectEvent(controlid) {
          var control = document.getElementById(controlid);                     
          control.onchange = "controlOnSelect('" + controlid + "')";
        var onChangeHandler = new Function(control.onchange);            
        if (control.addEventListener) {
            control.addEventListener('change', onChangeHandler, false );
        } 
        else if (control.attachEvent) {
            control.attachEvent('onchange', onChangeHandler);

        }                     
      }     
      function controlOnSelect(controlid) {         
          switch(controlid) {
              case "arriveDate":
                  CheckinOnSelect("arriveMonth", "arriveDate");
              case "arriveMonth":
                  CheckinOnSelect("arriveMonth", "arriveDate");               
                  loadDate("arriveDate", "arriveMonth");
              case "departMonth":                                 
                CheckoutOnSelect("departMonth", "departDate");
                loadDate("departDate", "departMonth"); 
              case "departDate":
                  CheckoutOnSelect("departMonth", "departDate");    
          }   
      }
		function InitialDateMonth() {
          var myDate = new Date();  
          var myDdate1 = GetDateFromString(GetStringFromDate(myDate), 24);
          var myDdate2 = GetDateFromString(GetStringFromDate(myDate), 48);                       
          InitialArriveDateMonth(myDdate1);
        InitialDepartDateMonth(myDdate2);                                         
      }
      function InitialArriveDateMonth(arriveDate) {
        var sad = document.getElementById("selectedarrivedate");
          var sam = document.getElementById("selectedarrivemonth");                           
          sad.value = ToString(getDateDay(arriveDate));               
          sam.value = ToString(getDateYear(arriveDate)) + ToString(getDateMonth(arriveDate)+1);                   
      }
      function InitialDepartDateMonth(departDate) {
        var spd = document.getElementById("selecteddepartdate");
          var spm = document.getElementById("selecteddepartmonth");         
          spd.value = ToString(getDateDay(departDate));
          spm.value = ToString(getDateYear(departDate)) + ToString(getDateMonth(departDate)+1);                                             
      }
      function loadDateNights() {                         
          var aD = GetDateFromString(document.getElementById("selectedarrivemonth").value+document.getElementById("selectedarrivedate").value, 0);                        
          var dD = GetDateFromString(document.getElementById("selecteddepartmonth").value+document.getElementById("selecteddepartdate").value, 0);        
          var aDay = document.getElementById("arriveDay");                  
          while (aDay.lastChild) {                                    
            aDay.removeChild(aDay.lastChild);
        }                          
        aDay.appendChild(document.createTextNode(toWordDay(aD.getDay())));  
        var dDay = document.getElementById("departDay"); 
          while (dDay.lastChild) {                                    
            dDay.removeChild(dDay.lastChild);
        }                          
        dDay.appendChild(document.createTextNode(toWordDay(dD.getDay())));
        var num = document.getElementById("numberOfNights");
          while (num.lastChild) {                                    
            num.removeChild(num.lastChild);
        }   
          num.appendChild(document.createTextNode(GetDateDiff(dD, aD)));  
          
          if (GetDateDiff(dD, aD) == 1) 
	        document.getElementById('labelForNumberOfNights').innerHTML = '宿泊数';	    
	    else 
	        document.getElementById('labelForNumberOfNights').innerHTML = '宿泊数';	                    
      }

    function loadPage() {
	  	document.getElementById('arriveMonth').innerHTML = '';
	  	InitialDateMonth();         
        loadArriveMonth();
        loadDepartMonth();         
        loadDate("arriveDate", "arriveMonth");
        loadDate("departDate", "departMonth");          
        loadDpSelectEvent("arriveDate");  
        loadDpSelectEvent("arriveMonth");
        loadDpSelectEvent("departDate"); 
        loadDpSelectEvent("departMonth");                           
        loadDateNights();

		if (document.getElementById("arriveDate").value === "1") {
			document.getElementById("arriveMonth").getElementsByTagName("option")[1].selected = true;
		}

		if (document.getElementById("departDate").value === "1") {
			document.getElementById("departMonth").getElementsByTagName("option")[1].selected = true;
		}
     }

	 function toWordDay(n){
          switch(n){
                case 0: return('日曜日');
                case 1: return('月曜日');
                case 2: return('火曜日');
                case 3: return('水曜日');
                case 4: return('木曜日');
                case 5: return('金曜日');
                case 6: return('土曜日');
          }
     }

// addLoadEvent(func) - allows for adding multiple load events to the body tag
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			if (oldonload) {
				oldonload();
			}
			func();
		};
	}
}

addLoadEvent(loadPage); 

