var startYearObj;
var startMonthObj;
var startDayObj;

var endYearObj;
var endMonthObj;
var endDayObj;

var calendarWindow;

function init(startYear, startMonth, startDay,
              endYear, endMonth, endDay) {
  startYearObj  = eval("document.forms[0]." + startYear);
  startMonthObj = eval("document.forms[0]." + startMonth);
  startDayObj   = eval("document.forms[0]." + startDay);
  
  endYearObj    = eval("document.forms[0]." + endYear);
  endMonthObj   = eval("document.forms[0]." + endMonth);
  endDayObj     = eval("document.forms[0]." + endDay);
}

function updateDATERANGEEND() {

  var startDate = getDateByListBoxes(startYearObj, startMonthObj, startDayObj);
  
  var tmpDate = getNextDate(startDate);
  
  if (getIndexInListBox(endYearObj, tmpDate.getFullYear()) == -1) {

    tmpDate = startDate;
  }
  setItemSelectedInListBox(endYearObj, getYear(tmpDate));
  setItemSelectedInListBox(endMonthObj, getMonth(tmpDate));
  setItemSelectedInListBox(endDayObj, getDay(tmpDate));
}


function updateDATERANGESTART() {
  
  var startDate = getDateByListBoxes(startYearObj, startMonthObj, startDayObj);
  
  var endDate = getDateByListBoxes(endYearObj, endMonthObj, endDayObj);

  if (startDate.getTime() > endDate.getTime()) {
    var tmpDate = getPrevDate(endDate);
    
    if (getIndexInListBox(startYearObj, tmpDate.getFullYear()) == -1 || isToday(endDate)) {

      tmpDate = endDate;
    }
    setItemSelectedInListBox(startYearObj, getYear(tmpDate));
    setItemSelectedInListBox(startMonthObj, getMonth(tmpDate));
    setItemSelectedInListBox(startDayObj, getDay(tmpDate));
  }
}

function createCalendar(targetYear, targetMonth, targetDay, callBackFn) {
  calendarWindow = window.open('', 'Calendar',
                               'width=230,height=210,resizable=no,scrollbars=no,left=200,top=160');
  
  var year  = getSelectedItemInListBox(eval("document.forms[0]." + targetYear));
  var month = getSelectedItemInListBox(eval("document.forms[0]." + targetMonth));

  generateCalendar(calendarWindow, year, month, targetYear, targetMonth, targetDay, callBackFn);
}

////////////////////////////////////////////////////////////////////////////////

function getPrevImgSrc() {
  return "http://www.hotelsky.co.kr/cn/_lib/plugins/calendar/image/prev.gif";
}

function getNextImgSrc() {
  return "http://www.hotelsky.co.kr/cn/_lib/plugins/calendar/image/next.gif";
}

function getDayOfWeekStr(dayOfWeek) {
  if (dayOfWeek == DOW_SUNDAY) {
    return "日";
  } else if (dayOfWeek == DOW_MONDAY) {
    return "月";
  } else if (dayOfWeek == DOW_TUESDAY) {
    return "火";
  } else if (dayOfWeek == DOW_WEDNESDAY) {
    return "水";
  } else if (dayOfWeek == DOW_THURSDAY) {
    return "木";
  } else if (dayOfWeek == DOW_FRIDAY) {
    return "金";
  } else if (dayOfWeek == DOW_SATURDAY) {
    return "土";
  } else {
    return "";
  }
}

function generateCalendar(targetWindow, year, month, targetYear, targetMonth, targetDay, callBackFn) {
  targetWindow.document.open();
  
  var today = getToday();
  
  var prevMonth = getPrevMonth(month);
  var nextMonth = getNextMonth(month);
  var prevYear = getYearOfPrevMonth(parseInt(year, 10), parseInt(month, 10));
  var nextYear = getYearOfNextMonth(parseInt(year, 10), parseInt(month, 10));
  calendar = "<html>\n"
    +        "<head>\n"
    +        " <title>Calendar</title>\n"
    +        "<link rel='stylesheet' type='text/css' href='http://www.hotelsky.co.kr/cn/_lib/plugins/calendar/style.css'>\n"
    +        "</head>\n"
    +        "<body bgcolor='#FFFFFF' marginheight='5' marginwidth='5' topmargin='5' leftmargin='5' rightmargin='5'>\n"
	+        "<table cellspacing='0' border='0' width='100%' bgcolor='#4682B4'>\n"
	+        "<tr><td>\n"
	+        "<table cellspacing='1' cellpadding='3' border='0' width='100%'>\n"
	+        "<tr>\n"

    +        "      <td width='20%' align=center>\n";
  if ((new Date(prevYear, prevMonth, 1)).getTime() > today.getTime()) {
    calendar += "         <a href='javascript:"
      + getScriptGenerateCalendar("self", prevYear, prevMonth, targetYear, targetMonth, targetDay, callBackFn)
      +         "'>"
      +         "              <img src=" + getPrevImgSrc() + " border=0 align=absmiddle>"
      +         "            </a>\n"
  } else {
    calendar += "";
  }
  calendar += "      </td>\n"
    +         "      <td width='60%' align=center>\n"
    +         "          <font color=ffffff>" + year + "年 " + month + "月</font>\n"
    +         "      </td>\n"
    +         "      <td width='20%' align=center>\n";
  if (getIndexInListBox(eval("document.forms[0]." + targetYear), nextYear) != -1) {
    calendar += "         <a href='javascript:"
      + getScriptGenerateCalendar("self", nextYear, nextMonth, targetYear, targetMonth, targetDay, callBackFn)
      +         "'>"
      +         "              <img src=" + getNextImgSrc() + " border=0 align=absmiddle>"
      +         "            </a>\n"
  } else {
    calendar += "";
  }
  calendar += " </td></tr></table></td></tr>\n"

    +         "    <tr><td><table cellspacing='1' cellpadding='3' border='0' width='100%'>\n"
    +         "    <tr align='center' bgcolor=#87CEFA>\n"
    +         "      <td width=30>\n"
    +         "        <div align='center'>" + getDayOfWeekStr(DOW_SUNDAY) + "</div>\n"
    +         "      </td>\n"
    +         "      <td width=30>\n"
    +         "        <div align='center'>" + getDayOfWeekStr(DOW_MONDAY) + "</div>\n"
    +         "      </td>\n"
    +         "      <td width=30>\n"
    +         "        <div align='center'>" + getDayOfWeekStr(DOW_TUESDAY) + "</div>\n"
    +         "      </td>\n"
    +         "      <td width=30>\n"
    +         "        <div align='center'>" + getDayOfWeekStr(DOW_WEDNESDAY) + "</div>\n"
    +         "      </td>\n"
    +         "      <td width=30>\n"
    +         "        <div align='center'>" + getDayOfWeekStr(DOW_THURSDAY) + "</div>\n"
    +         "      </td>\n"
    +         "      <td width=30>\n"
    +         "        <div align='center'>" + getDayOfWeekStr(DOW_FRIDAY) + "</div>\n"
    +         "      </td>\n"
    +         "      <td width=30>\n"
    +         "        <div align='center'>" + getDayOfWeekStr(DOW_SATURDAY) + "</div>\n"
    +         "      </td>\n"
    +         "    </tr>\n"
    +         "    <tr align=center bgcolor=#ffffff>\n";
  
  var firstDayOfWeek = (new Date(year + "/" + month + "/01")).getDay();
  for (var i = 0; i < firstDayOfWeek; i++) {
    calendar += "      <td>\n"
      +         "          &nbsp;\n"
      +         "      </td>\n";
  }
  
  var lastDay = getDaysInMonth(month, year);
  var dayOfWeek = firstDayOfWeek;
  for (var i = 0; i < lastDay; i++) {
    calendar += "      <td align='center' bgcolor=#ffffff>\n";
    if ((new Date(year, (month - 1), (i + 1))).getTime() >= today.getTime()) {
      calendar += "          <a href='javascript:"
        + getScriptSetDate(year, month, (i + 1), targetYear, targetMonth, targetDay, callBackFn)
        +         "'>"
        +         "            <div align='center'>" + (i + 1) + "</div>"
        +         "          </a>\n";
    } else {
      calendar += "          <div align='center'>" + (i + 1) + "</div>";
    }
    calendar += "      </td>\n";

    dayOfWeek = (dayOfWeek + 1) % 7;
    if (dayOfWeek == 0) {
      if (i != lastDay - 1) {
        calendar += "    </tr>\n"
          +         "    <tr>\n";
      }
    }
  }
  
  if (dayOfWeek != DOW_SUNDAY) {
    for (var i = dayOfWeek; i < 7; i++) {
      calendar += "      <td bgcolor=#ffffff>\n"
        +         "          &nbsp;\n"
        +         "      </td>\n";
    }
  }
  calendar += "    </tr>\n"
    +         "  </table></td></tr></table>\n"
	+         "  <br><center><a href='javascript:window.close()'><img src='http://www.hotelsky.co.kr/cn/_lib/plugins/calendar/image/close.gif' border=0></a></center>\n"
    +         "</body>\n"
    +         "</html>\n";

  targetWindow.document.close();
  targetWindow.document.write(calendar);
  targetWindow.document.close();
}

function getScriptSetDate(year, month, day, targetYear, targetMonth, targetDay, callBack) {
  return "opener.setDate(" + year + ", " + month + ", " + day + ", "
    +                           "\"" + targetYear + "\", "
    +                           "\"" + targetMonth + "\", "
    +                           "\"" + targetDay + "\", "
    +                           "\"" + callBack + "\");"
    +    "self.close();";
}

function getScriptGenerateCalendar(targetWindow, year, month, targetYear, targetMonth, targetDay, callBack) {
  return "opener.generateCalendar("
    + targetWindow + ", "
    + year + ", "
    + month + ", "
    + "\"" + targetYear + "\", "
    + "\"" + targetMonth + "\", "
    + "\"" + targetDay + "\", "
    + "\"" + callBack + "\")";
}

function setDate(year, month, day, targetYear, targetMonth, targetDay, callBack) {
  var objYear  = eval("document.forms[0]." + targetYear);
  var objMonth = eval("document.forms[0]." + targetMonth);
  var objDay   = eval("document.forms[0]." + targetDay);
  
  // Update the controls.
  var yearIndex = getIndexInListBox(objYear, year);
  objYear.selectedIndex = yearIndex;
  objMonth.selectedIndex = month -1;
  objDay.selectedIndex = parseInt(day - 1, 10);
  
  // Call the callback function.
  eval(callBack);
}

function getDateByListBoxes(listYear, listMonth, listDay) {
  var year  = getSelectedItemInListBox(listYear);
  var month = getSelectedItemInListBox(listMonth);
  var day   = getSelectedItemInListBox(listDay);
  return new Date(year, month - 1, day);
}

