/**
 * Calendar >> ½ÇÇà°á°ú html ¹®¼­·Î ¹ÝÈ¯
*/
var calendar = {
  target:null,
  panel:null,
  html:'',
  open: function(obj,handler,panel)
  {
    var now = obj.value.split('-');
    this.target = obj;
    this.handler = $(handler);
    this.panel = $(panel);
    if (now.length == 3)
    {
      this.getCal(now[0],now[1],now[2]);
    }
    else
    {
      now = new Date();
      this.getCal(now.getFullYear(), now.getMonth()+1, now.getDate());
    }
    return this.html;
  },

  getCal: function(yyyy,mm,dd)
  {
    this.html='';
    var Months_day = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31)
    var Weekday_name = new Array("S", "M", "T", "W", "T", "F", "S");
    var intThisYear = new Number(), intThisMonth = new Number(), intThisDay = new Number();
    datToday = new Date();

    intThisYear = Number(yyyy);
    intThisMonth = Number(mm);
    intThisDay = Number(dd);

    if (intThisYear == 0) intThisYear = datToday.getFullYear();
    if (intThisMonth == 0) intThisMonth = parseInt(datToday.getMonth())+1;
    if (intThisDay == 0) intThisDay = datToday.getDate();

    switch(intThisMonth) {
      case 1:
        intPrevYear = intThisYear -1;
        intPrevMonth = 12;
        intNextYear = intThisYear;
        intNextMonth = 2;
      break;
      case 12:
        intPrevYear = intThisYear;
        intPrevMonth = 11;
        intNextYear = intThisYear + 1;
        intNextMonth = 1;
      break;
      default:
        intPrevYear = intThisYear;
        intPrevMonth = parseInt(intThisMonth) - 1;
        intNextYear = intThisYear;
        intNextMonth = parseInt(intThisMonth) + 1;
      break;
    }

    NowThisYear = datToday.getFullYear();
    NowThisMonth = datToday.getMonth()+1;
    NowThisDay = datToday.getDate();
    
    datFirstDay = new Date(intThisYear, intThisMonth-1, 1);
    intFirstWeekday = datFirstDay.getDay();
    
    intSecondWeekday = intFirstWeekday;
    intThirdWeekday = intFirstWeekday;
    
    datThisDay = new Date(intThisYear, intThisMonth, intThisDay);
    intThisWeekday = datThisDay.getDay();

    varThisWeekday = Weekday_name[intThisWeekday];
    
    intPrintDay = 1;
    secondPrintDay = 1;
    thirdPrintDay = 1;
    
    Stop_Flag = 0;
    
    if ((intThisYear % 4)==0) {
      if ((intThisYear % 100) == 0) {
        if ((intThisYear % 400) == 0) {
          Months_day[2] = 29;
        }
      } else {
        Months_day[2] = 29;
      }
    }
    intLastDay = Months_day[intThisMonth];
    Stop_flag = 0;
    
    this.html = "<table width='100%' border=0 cellpadding='2' cellspacing='0' onmouseover=calendar.doOver(event); onmouseout=calendar.doOut(event);>";
    this.html += "<thead><tr><th colspan=7 nowrap=nowrap><span title='prev month' style=cursor:pointer; onClick='calendar.renewalCal("+intPrevYear+","+intPrevMonth+","+intThisDay+");'><img src='/Images/uiComponent/btn_left_arrow.gif' width='16' height='19' align='absmiddle' /></span> ";
    this.html += "<strong>"+this.getYearinfo(intThisYear,intThisMonth,intThisDay)+"³â "+this.getMonthinfo(intThisYear,intThisMonth,intThisDay)+"¿ù </strong>";
    this.html += " <span title='next month' style=cursor:pointer; onClick='calendar.renewalCal("+intNextYear+","+intNextMonth+","+intThisDay+");'><img src='/Images/uiComponent/btn_right_arrow.gif' width='16' height='19' align='absmiddle' /></SPAN></th></tr></thead>"
    this.html += "<tbody><tr bgcolor='#990000' style='color:#FFFFFF;'><th>ÀÏ</th><th>¿ù</th><th>È­</th><th>¼ö</th><th>¸ñ</th><th>±Ý</th><th>Åä</th></tr></tbody>";

    for (intLoopWeek=1; intLoopWeek < 7; intLoopWeek++) {
      this.html += "<tr align='right' bgcolor='#F5F5F5' height='18'>"
      for (intLoopDay=1; intLoopDay <= 7; intLoopDay++) {
        if (intThirdWeekday > 0) {
          this.html += "<th onClick='calendar.doClick(event);'>";
          intThirdWeekday--;
        } else {
          if (thirdPrintDay > intLastDay) {
            this.html += "<th onclick='calendar.doClick(event,this);'>";
          } else {
            this.html += "<th onclick='calendar.doClick(event,this);' title='"+intThisYear+"-"+this.day2(intThisMonth).toString()+"-"+this.day2(thirdPrintDay).toString()+"' style='cursor:pointer;border:1px solid white;";
            if (intThisYear == NowThisYear && intThisMonth==NowThisMonth && thirdPrintDay==intThisDay) {
              this.html += "background-color:#FF99FF;";
            }

            switch(intLoopDay) {
              case 1:
                this.html += "color:red;"
                break;
              case 7:
                this.html += "color:blue;"
                break;
              default:
                this.html += "color:black;"
                break;
            }
            
            this.html += "'>"+thirdPrintDay;
            
          }
          thirdPrintDay++;
          
          if (thirdPrintDay > intLastDay) {
            Stop_Flag = 1;
          }
        }
        this.html += "</th>";
      }
      this.html += "</tr>";
      if (Stop_Flag==1) break;
    }
    this.html += "</table>";
  },

  getYearinfo: function(yyyy,mm,dd)
  {
    var min = parseInt(yyyy) - 100;
    var max = parseInt(yyyy) + 10;
    var i = new Number();
    var str = new String();
    
    str = "<select onChange='calendar.renewalCal(this.value,"+mm+","+dd+");' onmouseover=calendar.doOver(event);>";
    for (i=min; i<=max; i++) {
      if (i == parseInt(yyyy)) {
        str += "<option value="+i+" selected onmouseover=calendar.doOver(event);>"+i+"</option>";
      } else {
        str += "<option value="+i+" onmouseover=calendar.doOver(event);>"+i+"</option>";
      }
    }
    str += "</select>";
    return str;
  },

  getMonthinfo: function(yyyy,mm,dd)
  {
    var i = new Number();
    var str = new String();
    
    str = "<select onChange='calendar.renewalCal("+yyyy+",this.value,"+dd+");' onmouseover=calendar.doOver(event);>";
    for (i=1; i<=12; i++) {
      if (i == parseInt(mm)) {
        str += "<option value="+i+" selected onmouseover=calendar.doOver(event);>"+i+"</option>";
      } else {
        str += "<option value="+i+" onmouseover=calendar.doOver(event);>"+i+"</option>";
      }
    }
    str += "</select>";
    return str;
  },

  day2: function(d)
  {
    var str = new String();
    
    if (parseInt(d) < 10) {
      str = "0" + parseInt(d);
    } else {
      str = "" + parseInt(d);
    }
    return str;
  },

  doOver: function(evt)
  {
    if (typeof evt == 'undefined') {
      var evt = window.event; 
    }
    if (typeof evt.target != 'undefined') {
        var el = evt.target; 
    } else if (typeof evt.srcElement != 'undefined') {
        var el = evt.srcElement; 
    }
    var cal_Day = el.title;

    if (cal_Day.length > 7)
    {
      el.style.borderTopColor = el.style.borderLeftColor = '#FFFFFF';
      el.style.borderRightColor = el.style.borderBottomColor = '#4C4C4C';
      el.style.backgroundColor = '#FFFF99';
    }
  },

  doOut: function(evt) {
    if (typeof evt == 'undefined') { // IE 
        var evt = window.event; 
    }
    el = evt.srcElement || evt.target;
/*
    if (typeof evt.target != 'undefined') {  // FF,Opera 
      var el = evt.target; 
    } else if (typeof evt.srcElement != 'undefined') {  // IE,Opera 
      var el = evt.srcElement; 
    }
*/
    var cal_Day = el.title;

    if (cal_Day.length > 7) {
      el.style.borderColor = 'white';
      el.style.backgroundColor = '#F5F5F5';
    }
  },

  doClick: function(evt,obj)
  {
    if (typeof evt == 'undefined') {
      var evt = window.event;
    }
    if (typeof evt.target != 'undefined') {  // FF,Opera 
      var el = evt.target; 
    } else if (typeof evt.srcElement != 'undefined') {  // IE,Opera 
      var el = evt.srcElement; 
    }
    var cal_Day = el.title;
      el.style.borderColor ='red';
    if (cal_Day.length > 7) {
      this.target.value=cal_Day;
    }
    this.handler.setStyle({display:'none'});
  },

  renewalCal: function(yyyy,mm,dd)
  {
    this.getCal(yyyy,mm,dd);
    this.panel.innerHTML = this.html;
  }
};