/******************************************************************************************************************
   시스템 명      : AUTOWINI
   서브시스템명   : 달력
   프로그램명     : calendar.js
   작성자         : ISHIFT 정성우
   작성일         : 2004년 01월 31일
   수정일         : 2004년 01월 31일
   버전           : S_3.0.00
   관련DB         :
   사용 COM       :
   개요           : 사용 페이지에서 Calendar(sSelectedDay, sTargetFormName, sPositionX, sPositionY)함수 호출
                    sSelectedDay - 달력에 선택된 날자(2002.01.01)
                    sTargetFormName - 날자가 문자열로 표시되는 폼오브제트의 이름
                    sPositionX - X좌표값
                    sPositionY - Y좌표값
   특이사항       :
********************************************************************************************************************/

var app_name    = navigator.appName;
var w_location  = document.location;
var w_host      = w_location.host;
var w_pathname  = w_location.pathname;
var pathnameArr = w_pathname.split( "/" );
//var baseUrl     = "http://" + w_host + "/" + pathnameArr[ 1 ] + "/";
var baseUrl     = "http://" + w_host + "/";

var sTargetName = "";
var sTime       = "";
var calStatus   = "";
var x1 = 0;
var y1 = 0;
var ImgPATH = baseUrl + "IMG/EN/CALENDAR/";

//if (null != window.jsRootPATH) {
//	ImgPATH	= jsRootPATH + ImgPATH;
//}

//minical Div 태그 문자열 작성
var iframeString	= "<iframe id='iframe_minical' style='width:224px;height:300px;visibility:hidden;position:absolute;z-index:101;'"
						+ " FRAMEBORDER='0' MARGINHEIGHT='0' MARGINWIDTH='0' SCROLLING='NO'></iframe>";

var divString   = "<div id='minical' onContextMenu='return false' onDragStart='return false' onSelectStart='return false' "
                 +     "style='background:#DFEAF1;margin:5px;padding:5px;margin-top:2px;"
                 +            "border-top: 1px solid buttonshadow #6FA4C1;"
                 +            "border-left: 1px solid buttonshadow #6FA4C1;"
                 +            "border-right: 1px solid buttonshadow #6FA4C1;"
                 +            "border-bottom:1px solid buttonshadow #6FA4C1;"
                 +            "width:220px;display:none;position:absolute;z-index:102;'></div>";

document.write(iframeString);
document.write(divString);

//달력 텍스트박스 옆의 버튼을 클릭했을때 호출되는 함수
function Calendar(sSelectedDay, sTargetFormName, sPositionX, sPositionY) 
{
    // 달력을 호출한 Form Object의 이름 저장;
    sTargetName = sTargetFormName;

    //달력 위치 지정
    var x, y;

    x   = sPositionX;
    y   = sPositionY;
    x1  = x;
    y1  = y;
    if (sPositionX=="0"&&sPositionY=="0")
    {
        ShowCalPos();

        x = x1;
        y = y1;
    }

    document.getElementById('minical').style.pixelLeft = parseInt(x);
    document.getElementById('minical').style.pixelTop  = parseInt(y);

    document.getElementById('iframe_minical').style.left		= document.getElementById('minical').style.pixelLeft + 5;
    document.getElementById('iframe_minical').style.top		= document.getElementById('minical').style.pixelTop + 2;
    
    /*
    document.getElementById('minical').style.margin         = y + "px 0px 0px " + x + "px";
    document.getElementById('iframe_minical').style.margin  = y + "px 0px 0px " + x + "px";
    
//    document.getElementById('minical').style.positionX  = parseInt(x);
//    document.getElementById('minical').style.pixelTop   = parseInt(y);

    document.getElementById('iframe_minical').style.left	= document.getElementById('minical').style.pixelLeft + 5;
    document.getElementById('iframe_minical').style.top		= document.getElementById('minical').style.pixelTop + 2;
*/
    if (document.getElementById('minical').style.display == "block") 
    {
        //기존에 보이던 달력 지운다
        //showElement("SELECT");
        document.getElementById('minical').style.display            = "none";
        document.getElementById('iframe_minical').style.visibility  = "hidden";
    }

    document.getElementById('minical').style.display = "block";
    document.getElementById('iframe_minical').style.visibility = "visible";
    //document.body.detachEvent("onClick",fnHideMiniCal);

    //인자로 받은 날자체크[유효하지 않은 일자는 현재 일자로 설정]하여 Show_cal 호출
    var now = sSelectedDay.split(".");
    if (now.length == 3) 
    {
        Show_cal(now[0],now[1],now[2]);
    } 
    else 
    {
        now = new Date();
        Show_cal(now.getFullYear(), now.getMonth()+1, now.getDate());
    }
    //hideElement("SELECT");

}

// 마우스가 칼렌다위에 있으면
function doOver(e) 
{
    var el;

    if (app_name.toLowerCase().indexOf("microsoft") > -1)
        el  = e.srcElement;
    else
        el  = e.target;

    cal_Day = el.title;

    //날자 값이 유효하면
    if (cal_Day.length > 9) {
        el.style.borderTopColor   = el.style.borderLeftColor   = "buttonhighlight";
        el.style.borderRightColor = el.style.borderBottomColor = "buttonshadow";
    }
    //document.body.detachEvent("onClick", fnHideMiniCal);
}

//날자를 Click하였을 경우
function doClick(e) 
{
    var el;

    if (app_name.toLowerCase().indexOf("microsoft") > -1)
        el  = e.srcElement;
    else
        el  = e.target;

    cal_Day = el.title;

    // 테두리 색을 빨간색으로(색 바뀌는거 거의 안보인다)
    //window.event.srcElement.style.borderColor = "red";

    //날자 값이 유효하면
    if (cal_Day.length > 9) 
    {
        //호출한 페이지의 달력 텍스트 값 변경
        //var tempstr = "document.all." + sTargetName + ".value = cal_Day";
    	//eval(tempstr);
    	document.getElementsByName(sTargetName)[0].value = cal_Day;
        //var tempstr = "document.all." + sTargetName + ".focus()";
        //eval(tempstr);
        document.getElementsByName(sTargetName)[0].focus();
    }

    //alert(tempstr);
    document.getElementById('minical').style.display = "none";
    document.getElementById('iframe_minical').style.visibility = "hidden";
    //showElement("SELECT");
    check_model_year(cal_Day);
}

function check_model_year(cal_Day){
	if(document.getElementsByName("TX_V_MODEL_YEAR").length > 0){
		document.getElementsByName("TX_V_MODEL_YEAR")[0].value = cal_Day.substr(0,4);
	} 
}

function doOut(e) 
{
    var el;

    if (app_name.toLowerCase().indexOf("microsoft") > -1)
        el  = e.fromElement;
    else
        el  = e.target;

    cal_Day = el.title;

    if (cal_Day.length > 7) {
        el.style.borderColor = "white";
    }

    //calStatus = "none"
    //document.body.attachEvent("onClick", fnHideMiniCal);
}

//2자리 문자열로 변경
function change2byte(p) {

   var str = new String();
   if (parseInt(p) < 10) {
      str = "0" + parseInt(p);
   } else {
      str = "" + parseInt(p);
   }
   return str;
}

//1자리 숫자로 변경
function change1byte(p) {

   var str = new String();
   if (p.length > 1) {
      if ( p.substring(0, 1) == "0") {
         str = p.substring(1, 2);
      } else {
         str = p;
      }
   } else {
      str = p;
   }
   return str;

}

function Show_cal(sYear, sMonth, sDay) {
   var Months_day   = new Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
   var Weekday_name = new Array("SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT");

   var intThisYear  = new Number()
   var intThisMonth = new Number()
   var intThisDay   = new Number();

   //달력 초기화
   document.getElementById('minical').innerHTML = "";

   //현재 날자 설정
   datToday     = new Date();
   NowThisYear  = datToday.getFullYear();
   NowThisMonth = datToday.getMonth()+1;
   NowThisDay   = datToday.getDate();


   //Calendar함수에서 호출한 일자를 숫자로 저장.
   intThisYear  = parseInt(sYear);
   intThisMonth = parseInt(change1byte(sMonth));
   intThisDay   = parseInt(change1byte(sDay));

   //값이 없는 경우에는 오늘 날자로 Setting
   if (intThisYear  == 0)  intThisYear  = NowThisYear
   if (intThisMonth == 0) intThisMonth  = parseInt(NowThisMonth)+1;
   if (intThisDay   == 0)   intThisDay  = NowThisDay

   //작년,내년,전달,다음달 Setting
   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;
   }


   //인자로 전달받은 날자의 해당월 1일로 날자 오브젝트 생성
   datFirstDay      = new Date(intThisYear, intThisMonth-1, 1);
   //1일의 요일을 구함 (0:일요일, 1:월요일)
   intFirstWeekday  = datFirstDay.getDay();

   //이 아래 2줄은 뭘까?
   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

   //윤년 Check
   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

   //divString 변수에 들어갈 달력 Html
   Cal_HTML = "<table width='100%' style='direction:ltr' border='0' cellpadding='0' cellspacing='0' onMouseOver='doOver(event);' onMouseOut='doOut(event);' style='font-size:8pt;font-family:tahoma;'>"
            + "   <tr><td colspan='7' align='right' valign='top' height='20'>"
            + "         <img src='" + ImgPATH + "cal_close.gif' border='0' style='cursor:pointer;' onClick='fnHideMiniCal();'>"
            + "       <td>"
            + "   </tr>"
            + "   <tr align=center>"
            + "      <td colspan='7' nowrap='nowrap' align='center'>"
            + "         <span onClick='Show_cal(" + intPrevYear + "," + intPrevMonth + ",1);'><img src='" + ImgPATH + "cal_prev.gif' border=0>&nbsp;</span> "
            + "         <span>" + " <img src='" + ImgPATH + "cal_year.gif' border=0 align='absbottom'> " + get_Yearinfo(intThisYear,intThisMonth,intThisDay) + " <img src='" + ImgPATH + "cal_month.gif' border=0 align='absbottom'> " + get_Monthinfo(intThisYear,intThisMonth,intThisDay) + "</span>"
            + "         <span onClick='Show_cal(" + intNextYear + "," + intNextMonth + ",1);'>&nbsp;<img src='" + ImgPATH + "cal_next.gif' border=0></span>"
            + "      </td>"
            + "   </tr>"
            + "   <tr height='25' style='color:#000000;font-weight:lighter;'>"
            + "      <td width='30' align='right'><img src='" + ImgPATH + "cal_sun.gif' border=0></td>"
            + "      <td width='30' align='right'><img src='" + ImgPATH + "cal_mon.gif' border=0></td>"
            + "      <td width='30' align='right'><img src='" + ImgPATH + "cal_the.gif' border=0></td>"
            + "      <td width='30' align='right'><img src='" + ImgPATH + "cal_wed.gif' border=0></td>"
            + "      <td width='30' align='right'><img src='" + ImgPATH + "cal_thu.gif' border=0></td>"
            + "      <td width='30' align='right'><img src='" + ImgPATH + "cal_fri.gif' border=0></td>"
            + "      <td width='30' align='right'><img src='" + ImgPATH + "cal_sat.gif' border=0></td>"
            + "   </tr>";
   var	iframe_height	= 20 + 20 + 25;

   //[1]주단위 반복, 1개월에 최대 6주가 들어올 수 있다.
   for (intLoopWeek=1; intLoopWeek < 7; intLoopWeek++) {

      //일주일의 TR 시작
      Cal_HTML += "<TR ALIGN='RIGHT' BGCOLOR='WHITE'>"
      iframe_height	+= 18;

      //[2]요일 단위 반복,일요일부터 시작
      for (intLoopDay=1; intLoopDay <= 7; intLoopDay++) {

         //[3-1]해당월의 첫주의 시작요일까지
         if (intThirdWeekday > 0) {
            //빈 TD를 만든다
            Cal_HTML += "<TD onClick='doClick(event);;'>";
            //intThirdWeekday는 0이 되면 [1]번 루프 안에서 더 이상 변하지 않는다.
            intThirdWeekday--;

         //[3-2]해당월의 시작일부터는 말일까지 Else문을 탄다.
         } else {

            //[4-1]입력 날짜가 말일을 초과하면 마지막 주의 남은 요일은 빈 TD를 만든다. thirdPrintDay는 상위에서 1일로 Setting되었다.
            if (thirdPrintDay > intLastDay) {
               Cal_HTML += "<TD onClick=doClick(event);;>";

            //[4-2]입력날짜가 현재월에 해당 되면
            } else {

               Cal_HTML += "<TD onClick=doClick(event);; title="+intThisYear+"."+change2byte(intThisMonth).toString()+"."+change2byte(thirdPrintDay).toString()+" STYLE='cursor:pointer;border:1px solid white;";

               //선택된 날짜의 색 변경
               //if (thirdPrintDay == sDay) {
               //   Cal_HTML += "background-color:#ABA46F;";
               //		Cal_HTML += "color:#ABA46F;";
               //}

               //일요일과 토요일의 색 변경
               switch(intLoopDay) {
                  case 1:
                     Cal_HTML += "color:#910101;"
                     break;
                  case 7:
                     Cal_HTML += "color:#3751A7;"
                     break;
                  default:
                     Cal_HTML += "color:black;"
                     break;
               }
               //TD 태그의 style속성의 '를 닫아준다
               Cal_HTML += "'>"+thirdPrintDay;

            }
            //날자 하루 증가
            thirdPrintDay++;

            //날자가 말일을 초과하면 [2]번 루프 완료 후 [1]번 루프 탈출
            if (thirdPrintDay > intLastDay) {
               Stop_Flag = 1;
            }
         }//[3]번 분기 종료

         Cal_HTML += "</TD>";

      }//[2]번 루프 종료

      Cal_HTML += "</TR>";
      if (Stop_Flag==1) break;

   }//[1]번 루프 종료

   Cal_HTML += "</TABLE>";

   document.getElementById('minical').innerHTML = Cal_HTML;
   document.getElementById('iframe_minical').style.height	= (iframe_height + 14) + "px";
   //calStatus = "block";
   //document.body.attachEvent("onClick",fnHideMiniCal);
}

// 달력 선택값 초기화
function fnResetCal() {
   //var tempstr = "document.all." + sTargetName + ".value = ''";
   //eval(tempstr);
	
	document.getElementsByName(sTargetName)[0].value = "";

   fnHideMiniCal();
}

function fnHideMiniCal() {
   if (calStatus != "block") {
      document.getElementById('minical').style.display = "none";
      document.getElementById('iframe_minical').style.visibility	= "hidden";
      //document.body.detachEvent("onClick",fnHideMiniCal);
      //showElement("SELECT");
   }
   calStatus="none";
}

//년 정보를 콤보 박스로 표시
function get_Yearinfo(year,month,day) {
//   var min = parseInt(year) - 10;
   var min = 1975;
   var now  = new Date();
   var max = now.getFullYear() + 3;
   var j   = new Number();
   var str = new String();

   str = "<select id='calsel1' onChange='Show_cal(this.value,"+month+","+day+");' onMouseOver='doOver(event);'>";
   for (j=max; j>=min; j--) {
      if (j == parseInt(year)) {
         str += "<option value='"+j+"' selected onMouseOver='doOver(event);'>"+j+"</option>";
      } else {
         str += "<option value='"+j+"' onMouseOver='doOver(event);'>"+j+"</option>";
      }
   }

   str += "</select>";
   return str;
}

//월 정보를 콤보 박스로 표시
function get_Monthinfo(year,month,day) {
   var i   = new Number();
   var str = new String();

   str = "<select id='calsel2' onChange='Show_cal("+year+",this.value,"+day+");' onMouseOver='doOver(event);'>";
   for (i=1; i<=12; i++) {
      if (i == parseInt(month)) {
         str += "<option value='"+i+"' selected onMouseOver='doOver(event);'>"+i+"</option>";
      } else {
         str += "<option value='"+i+"' onMouseOver='doOver(event);'>"+i+"</option>";
      }
   }
   str += "</select>";
   return str;
}





//태정이 추가부분

function hideElement(elmID) {

	  //차트컨트롤이 있으면 숨긴다.
	  if (document.all.Com_TeeChart) {
		    document.all.Com_TeeChart.style.visibility = "hidden";
	  }

   for (i = 0; i < document.all.tags(elmID).length; i++) {
      objElement = document.all.tags(elmID)[i];
      if (! objElement || ! objElement.offsetParent) {
         continue;
      }

      objElementLeft   = objElement.offsetLeft;
      objElementTop    = objElement.offsetTop;
      objElementWidth = objElement.offsetWidth;
      objElementHeight = objElement.offsetHeight;
      objElementParent = objElement.offsetParent;

      while (objElementParent.tagName.toUpperCase() != "BODY") {
         objElementLeft   += objElementParent.offsetLeft;
         objElementTop    += objElementParent.offsetTop;
         //objElementHeight += objElementParent.offsetHeight;
         objElementParent  = objElementParent.offsetParent;
      }

      //objElementTop = objElementTop - y1;

      if (parseInt(x1) > (objElementLeft + objElement.offsetWidth) ||
          objElementLeft > (parseInt(x1) + document.getElementById('minical').offsetWidth)) {
      }
      else if (objElementTop > (document.getElementById('minical').offsetTop + document.getElementById('minical').offsetHeight)) {
      }
      else if ((objElementTop + objElementHeight) < document.getElementById('minical').offsetTop) {
      }
      //else if (objElementTop > document.getElementById('minical').offsetHeight) {
      //}
      //else if (IsMSMenu && (y1 + document.getElementById('minical').offsetHeight) <= 80) {
      //}
      //else if ((y1 + document.getElementById('minical').offsetHeight) <= 80) {
      //}
      else {
         if (objElement.id != "calsel1" && objElement.id != "calsel2") {
            objElement.style.visibility = "hidden";
         }
      }
   }
}


function showElement(elmID) {

		//차트컨트롤이 있으면 보여준다.
		if (document.all.Com_TeeChart) {
    		document.all.Com_TeeChart.style.visibility = "visible";
	 }

   for (i = 0; i < document.all.tags(elmID).length; i++) {
      objElement = document.all.tags(elmID)[i];

      if (! objElement || ! objElement.offsetParent) {
         continue;
      }
      objElement.style.visibility = "";
   }
}


function ShowCalPos() {
	//var tempstr = "var objElement = document.all." + sTargetName;
   //eval(tempstr);
   var objElement	= document.getElementsByName(sTargetName)[0];	
	
   var objElementParent = objElement.offsetParent;
   var objElementWidth  = objElement.offsetWidth;
   var objElementHeight = objElement.offsetHeight;
   var objElementLeft   = objElement.offsetLeft;
   var objElementTop    = objElement.offsetTop;

   while (objElementParent.tagName.toUpperCase() != "BODY") {
      objElementTop    += objElementParent.offsetTop;
      objElementLeft   += objElementParent.offsetLeft;
      objElementParent  = objElementParent.offsetParent;
   }

   x1 = objElementLeft + objElementWidth - 210 + "px";
   y1 = objElementTop  + objElementHeight + "px";
}


