var fc_ie = false;
if (document.all) { fc_ie = true; }

var calendars = Array();
var fc_months = Array('1¿ù', '2¿ù', '3¿ù', '4¿ù', '5¿ù', '6¿ù', '7¿ù', '8¿ù', '9¿ù', '10¿ù', '11¿ù', '12¿ù');
var fc_openCal;

var fc_calCount = 0;

function getCalendar(fieldId) {
  var objLayer = document.getElementById("Layer"); //·¹ÀÌ¾î ´Ý±â
  objLayer.style.display = "none"; //·¹ÀÌ¾î ´Ý±â

  return calendars[fieldId];
}

function displayCalendarFor(fieldId) {
  var formElement = fc_getObj(fieldId);
  displayCalendar(formElement);
}

function displayCalendar(formElement) {
  if (!formElement.id) {
    formElement.id = fc_calCount++;
  }
  var cal = calendars[formElement.id];
  if (typeof(cal) == 'undefined') {
    cal = new floobleCalendar();
    cal.setElement(formElement);
    calendars[formElement.id] = cal;
  }
  if (cal.shown) {
    cal.hide();
  } else {
    cal.show();
  }
}

function openCalendar(formElement) {
  var objLayer = document.getElementById("Layer");
  var objLayerContents = document.getElementById("Layer-Contents");
  objLayer.style.display = "block";

  //ie6¿¡¼­ ¼¿·ºÆ® ¹Ú½º À§·Î º¸ÀÌ±â
  if(navigator.userAgent.indexOf("MSIE 6")>-1 && navigator.userAgent.indexOf("MSIE 7")<0){
    if (!document.getElementById("IE6Iframe")){
      var ie6_ifm = document.createElement("iframe"); //iframe »ý¼º
      ie6_ifm.setAttribute("id","IE6Iframe"); //id°ª ºÎ¿©
      ie6_ifm.style.position = "absolute";
      ie6_ifm.style.opacity = "0"; //Åõ¸íµµ 0
      ie6_ifm.style.filter = "alpha(opacity=0)"; //Åõ¸íµµ 0
      ie6_ifm.style.zindex = "-1";
      ie6_ifm.style.left = "0";
      ie6_ifm.style.top = "0";
      ie6_ifm.style.width = objLayerContents.offsetWidth; //·¹ÀÌ¾î ³Êºñ
      ie6_ifm.style.height = objLayerContents.offsetHeight; //·¹ÀÌ¾î ³ôÀÌ
      objLayer.appendChild(ie6_ifm); //Layer ¿ÀºêÁ§Æ®¿¡ iframe »ðÀÔ
    }
  }

  if (!formElement.id) {
    formElement.id = fc_calCount++;
  }
  var cal = calendars[formElement.id];
  if (typeof(cal) == 'undefined') {
    cal = new floobleCalendar();
    cal.setElement(formElement);
    calendars[formElement.id] = cal;
  }

  cal.show();
}

function closeCalendar(formElement) {
  if (!formElement.id) {
    formElement.id = fc_calCount++;
  }
  var cal = calendars[formElement.id];
  if (typeof(cal) == 'undefined') {
    cal = new floobleCalendar();
    cal.setElement(formElement);
    calendars[formElement.id] = cal;
  }

  cal.hide();
}

function display3FieldCalendar(me, de, ye) {
  if (!me.id) { me.id = fc_calCount++; }
  if (!de.id) { de.id = fc_calCount++; }
  if (!ye.id) { ye.id = fc_calCount++; }
  var id = me.id + '-' + de.id + '-' + ye.id;
  var cal = calendars[id];
  if (typeof(cal) == 'undefined') {
    cal = new floobleCalendar();
    cal.setElements(me, de, ye);
    calendars[id] = cal;
  }
  if (cal.shown) {
    cal.hide();
  } else {
    cal.show();
  }
}

//--Class Stuff--------------------------------------------------
function floobleCalendar() {
  // Define Methods
  this.setElement = fc_setElement;
  this.setElements = fc_setElements;
  this.parseDate = fc_parseDate;
  this.generateHTML = fc_generateHTML;
  this.show = fc_show;
  this.hide = fc_hide;
  this.moveMonth = fc_moveMonth;
  this.setDate = fc_setDate;
  this.formatDate = fc_formatDate;
  this.setDateFields = fc_setDateFields;
  this.parseDateFields = fc_parseDateFields;

  this.shown = false;
}

function fc_setElement(formElement) {
  this.element = formElement;
  this.format = this.element.title;
  this.value = this.element.value;
  this.id = this.element.id;
  this.mode = 1;
}

function fc_setElements(monthElement, dayElement, yearElement) {
  this.mElement = monthElement;
  this.dElement = dayElement;
  this.yElement = yearElement;
  this.id = this.mElement.id + '-' + this.dElement.id + '-' + this.yElement.id;
  this.element = this.mElement;
  if (fc_absoluteOffsetLeft(this.dElement) < fc_absoluteOffsetLeft(this.element)) {
    this.element = this.dElement;
  }
  if (fc_absoluteOffsetLeft(this.yElement) < fc_absoluteOffsetLeft(this.element)) {
    this.element = this.yElement;
  }
  if (fc_absoluteOffsetTop(this.mElement) > fc_absoluteOffsetTop(this.element)) {
    this.element = this.mElement;
  }
  if (fc_absoluteOffsetTop(this.dElement) > fc_absoluteOffsetTop(this.element)) {
    this.element = this.dElement;
  }
  if (fc_absoluteOffsetTop(this.yElement) > fc_absoluteOffsetTop(this.element)) {
    this.element = this.yElement;
  }

  this.mode = 2;
}

function fc_parseDate() {
  if (this.element.value) {
    this.date = new Date();
    var out = '';
    var token = '';
    var lastCh, ch;
    var start = 0;
    lastCh = this.format.substring(0, 1);
    for (i = 0; i < this.format.length; i++) {
      ch = this.format.substring(i, i+1);
      if (ch == lastCh) {
        token += ch;
      } else {
        fc_parseToken(this.date, token, this.element.value, start);
        start += token.length;
        token = ch;
      }
      lastCh = ch;
    }
    fc_parseToken(this.date, token, this.element.value, start);
  } else {
    this.date = new Date();
  }
  if ('' + this.date.getMonth() == 'NaN') {
    this.date = new Date();
  }
}

function fc_parseDateFields() {
  this.date = new Date();
  if (this.mElement.value) this.date.setMonth(fc_getFieldValue(this.mElement) - 1);
  if (this.dElement.value) this.date.setDate(fc_getFieldValue(this.dElement));
  if (this.yElement.value) this.date.setFullYear(fc_getFieldValue(this.yElement));
  if ('' + this.date.getMonth() == 'NaN') {
    this.date = new Date();
  }
}

function fc_setDate(d, m, y) {
  this.date.setYear(y);
  this.date.setMonth(m);
  this.date.setDate(d);
  if (this.mode == 1) {
    this.element.value = this.formatDate();
  } else {
    this.setDateFields();
  }
  this.hide();
}

function fc_setDateFields() {
  fc_setFieldValue(this.mElement, fc_zeroPad(this.date.getMonth() + 1));
  fc_setFieldValue(this.dElement, fc_zeroPad(this.date.getDate()));
  fc_setFieldValue(this.yElement, this.date.getFullYear());
}

function fc_formatDate() {
  var out = '';
  var token = '';
  var lastCh, ch;
  lastCh = this.format.substring(0, 1);
  for (i = 0; i < this.format.length; i++) {
    ch = this.format.substring(i, i+1);
    if (ch == lastCh) {
      token += ch;
    } else {
      out += fc_formatToken(this.date, token);
      token = ch;
    }
    lastCh = ch;
  }
  out += fc_formatToken(this.date, token);
  return out;
}

function fc_show() {
  if (typeof(fc_openCal) != 'undefined') { fc_openCal.hide(); }
  if (this.mode == 1) {
    this.parseDate();
  } else {
    this.parseDateFields();
  }
  this.showDate = new Date(this.date.getTime());
  if (typeof(this.div) != 'undefined') {
    this.div.innerHTML = this.generateHTML();
  }

  if (typeof(this.div) == 'undefined') {
    this.div = document.createElement('DIV');
    this.div.style.position = 'absolute';
    this.div.style.display = 'none';
    this.div.className = 'fc_main';
    this.div.innerHTML = this.generateHTML();
    this.div.style.left = fc_absoluteOffsetLeft(this.element);
    this.div.style.top = fc_absoluteOffsetTop(this.element) + this.element.offsetHeight + 1;
    document.body.appendChild(this.div);
  }
  this.div.style.display = 'block';
  this.shown = true;
  fc_openCal = this;
}

function fc_generateHTML() {
  today = new Date();
  year = today.getYear(); //³â ±¸ÇÑ´Ù.
  month = today.getMonth()+1; //¿ùÀ» ±¸ÇÏ±â À§ÇØ¼­´Â ¹Ýµå½Ã +1À» ÇØ Áà¾ß ÇÑ´Ù.
  pmonth = today.getMonth();
  day = today.getDate(); //ÀÏÀ» ±¸ÇÑ´Ù.
  var html = '<TABLE bgcolor=#FFFFFF color=efefef width=170><TR><TD COLSPAN="6" height=25 bgcolor=#0E579A> &nbsp; <font color=FFFFFF> ¤ý³¯Â¥¼±ÅÃ </FONT></TD><TD CLASS="fc_date" onMouseover="this.className = \'fc_dateHover\';" onMouseout="this.className=\'fc_date\';" onClick="getCalendar(\'' + this.id + '\').hide();"><B>X</B></TD></TR>';
  html += '<TR height=22><TD CLASS="fc_date" onMouseover="this.className = \'fc_dateHover\';" onMouseout="this.className=\'fc_date\';" onClick="getCalendar(\'' + this.id + '\').moveMonth(-12);"><B><font size=1>¢¸¢¸</font></B></TD><TD CLASS="fc_date" onMouseover="this.className = \'fc_dateHover\';" onMouseout="this.className=\'fc_date\';" onClick="getCalendar(\'' + this.id + '\').moveMonth(-1);"><B><font size=1>¢¸</font></B></TD><TD COLSPAN="3" CLASS="fc_wk">' + fc_getYear(this.showDate) + '³â ' + fc_months[this.showDate.getMonth()] + ' </TD><TD CLASS="fc_date" onMouseover="this.className = \'fc_dateHover\';" onMouseout="this.className=\'fc_date\';" onClick="getCalendar(\'' + this.id + '\').moveMonth(1);"><B><font size=1>¢º</font></B></TD><TD CLASS="fc_date" onMouseover="this.className = \'fc_dateHover\';" onMouseout="this.className=\'fc_date\';" onClick="getCalendar(\'' + this.id + '\').moveMonth(12);"><B><font size=1>¢º¢º</font></B></TD></TR>';
  html += '<TR height=22><TD WIDTH="14%" CLASS="fc_wk">¿ù</TD><TD WIDTH="14%" CLASS="fc_wk">È­</TD><TD WIDTH="14%" CLASS="fc_wk">¼ö</TD><TD WIDTH="14%" CLASS="fc_wk">¸ñ</TD><TD WIDTH="14%" CLASS="fc_wk">±Ý</TD><TD class="fc_wknd1" WIDTH="14%">Åä</TD><TD class="fc_wknd" WIDTH="14%">ÀÏ</TD></TR>';
  html += '<TR>';
  var dow = 0;
  var i, style;
  var totald = fc_monthLength(this.showDate);
  for (i = 0; i < fc_firstDOW(this.showDate); i++) {
    dow++;
    html += '<TD> </TD>';
  }
  for (i = 1; i <= totald; i++) {
    if (dow == 0) { html += '<TR>'; }
    if (this.showDate.getMonth() == this.date.getMonth() && this.showDate.getYear() == this.date.getYear() && this.date.getDate() == i) {
      style = ' style="font-weight: bold; font-color: red"';
    } else {
      style = '';
    }
    html += '<TD WIDTH=10 HEIGHT=18 CLASS="fc_date" onMouseover="this.className = \'fc_dateHover\';" onMouseout="this.className=\'fc_date\';" onClick="getCalendar(\'' + this.id + '\').setDate(' + i + ', ' + this.showDate.getMonth() + ', ' + this.showDate.getFullYear() + ');" ' + style + '>' + i + '</TD>';
    dow++;
    if (dow == 7) {
      html += '</TR>';
      dow = 0;
    }
  }
  if (dow != 0) {
    for (i = dow; i < 7; i++) {
      html += '<TD> </TD>';
    }
  }
  html +='</TR>';
  html +='<tr height=25  CLASS="fc_date" onMouseover="this.className = \'fc_dateHover\';" onMouseout="this.className=\'fc_date\';" onClick="getCalendar(\'' + this.id + '\').setDate(' + day + ',' + pmonth + ', ' + year + ');"><td align=center colspan=7>¿À´Ã' + ' ' + year + '/' + month +'/' + day + '</td></tr>';
  html += '</TABLE>';
  return html;
}

function fc_hide() {
  if (this.div != false) {
    this.div.style.display = 'none';
  }
  this.shown = false;
  fc_openCal = undefined;
}

function fc_moveMonth(amount) {
  var objLayer = document.getElementById("Layer");
  var objLayerContents = document.getElementById("Layer-Contents");
  objLayer.style.display = "block";

  //ie6¿¡¼­ ¼¿·ºÆ® ¹Ú½º À§·Î º¸ÀÌ±â
  if(navigator.userAgent.indexOf("MSIE 6")>-1 && navigator.userAgent.indexOf("MSIE 7")<0){
    if (!document.getElementById("IE6Iframe")){
      var ie6_ifm = document.createElement("iframe"); //iframe »ý¼º
      ie6_ifm.setAttribute("id","IE6Iframe"); //id°ª ºÎ¿©
      ie6_ifm.style.position = "absolute";
      ie6_ifm.style.opacity = "0"; //Åõ¸íµµ 0
      ie6_ifm.style.filter = "alpha(opacity=0)"; //Åõ¸íµµ 0
      ie6_ifm.style.zindex = "-1";
      ie6_ifm.style.left = "0";
      ie6_ifm.style.top = "0";
      ie6_ifm.style.width = objLayerContents.offsetWidth; //·¹ÀÌ¾î ³Êºñ
      ie6_ifm.style.height = objLayerContents.offsetHeight; //·¹ÀÌ¾î ³ôÀÌ
      objLayer.appendChild(ie6_ifm); //Layer ¿ÀºêÁ§Æ®¿¡ iframe »ðÀÔ
    }
  }

  var m = this.showDate.getMonth();
  var y = fc_getYear(this.showDate);
  if (amount == 1)  {
    if (m == 11)  {
      this.showDate.setMonth(0);
      this.showDate.setYear(y + 1);
    } else {
      this.showDate.setMonth(m + 1);
    }
  } else if (amount == -1)  {
    if (m == 0)  {
      this.showDate.setMonth(11);
      this.showDate.setYear(y - 1);
    } else {
      this.showDate.setMonth(m - 1);
    }
  } else if (amount == 12) {
    this.showDate.setYear(y + 1);
  } else if (amount == -12) {
    this.showDate.setYear(y - 1);
  }
  this.div.innerHTML = this.generateHTML();
}

//--Utils-------------------------------------------------------------
function fc_absoluteOffsetTop(obj) {
  var top = obj.offsetTop;
  var parent = obj.offsetParent;
  while (parent != document.body) {
    top += parent.offsetTop;
    parent = parent.offsetParent;
  }
  return top;
}

function fc_absoluteOffsetLeft(obj) {
  var left = obj.offsetLeft;
  var parent = obj.offsetParent;
  while (parent != document.body) {
    left += parent.offsetLeft;
    parent = parent.offsetParent;
  }
  return left;
}

function fc_firstDOW(date) {
  var dow = date.getDay();
  var day = date.getDate();
  if (day % 7 == 0) return dow;
  return (7 + dow - (day % 7)) % 7;
}

function fc_getYear(date) {
  var y = date.getYear();
  if (y > 1900) return y;
  return 1900 + y;
}

function fc_monthLength(date) {
  var month = date.getMonth();
  var totald = 30;
  if (month == 0 || month == 2 || month == 4 || month == 6 || month == 7 || month == 9 || month == 11) totald = 31;
  if (month == 1) {
    var year = date.getYear();
    if (year % 4 == 0 && (year % 400 == 0 || year % 100 != 0))
      totald = 29;
    else
      totald = 28;
  }
  return totald;
}

function fc_formatToken(date, token) {
  var command = token.substring(0, 1);
  if (command == 'y' || command == 'Y') {
    if (token.length == 2) { return fc_zeroPad(date.getFullYear() % 100); }
    if (token.length == 4) { return date.getFullYear(); }
  }
  if (command == 'd' || command == 'D') {
    if (token.length == 2) { return fc_zeroPad(date.getDate()); }
  }
  if (command == 'm' || command == 'M') {
    if (token.length == 2) { return fc_zeroPad(date.getMonth() + 1); }
    if (token.length == 3) { return fc_months[date.getMonth()]; }
  }
  return token;
}

function fc_parseToken(date, token, value, start) {
  var command = token.substring(0, 1);
  var v;
  if (command == 'y' || command == 'Y') {
    if (token.length == 2) {
      v = value.substring(start, start + 2);
      if (v < 70) { date.setFullYear(2000 + parseInt(v)); } else { date.setFullYear(1900 + parseInt(v)); }
    }
    if (token.length == 4) { v = value.substring(start, start + 4); date.setFullYear(v);}
  }
  if (command == 'd' || command == 'D') {
    if (token.length == 2) { v = value.substring(start, start + 2); date.setDate(v); }
  }
  if (command == 'm' || command == 'M') {
    if (token.length == 2) { v = value.substring(start, start + 2); date.setMonth(v - 1); }
    if (token.length == 3) {
      v = value.substring(start, start + 3);
      var i;
      for (i = 0; i < fc_months.length; i++) {
        if (fc_months[i].toUpperCase() == v.toUpperCase()) { date.setMonth(i); }
      }
    }
  }
}

function fc_zeroPad(num) {
  if (num < 10) { return '0' + num; }
  return num;
}

function fc_getObj(id) {
  if (fc_ie) { return document.all[id]; }
  else { return document.getElementById(id); }
}

function fc_setFieldValue(field, value) {
  if (field.type.substring(0,6) == 'select') {
    var i;
    for (i = 0; i < field.options.length; i++) {
      if (fc_equals(field.options[i].value, value)) {
        field.selectedIndex = i;
      }
    }
  } else {
    field.value = value;
  }
}

function fc_getFieldValue(field) {
  if (field.type.substring(0,6) == 'select') {
    return field.options[field.selectedIndex].value;
  } else {
    return field.value;
  }
}

function fc_equals(val1, val2) {
  if (val1 == val2) return true;
  if (1 * val1 == 1 * val2) return true;
  return false;
}