﻿/*
	FunctionName :  fn_SetCalendarInit(objCtrl) 
	Params objCtrl : 달력을 생성할 Div 영역   
	사용방법.  
	달력을 사용할 페이지의 body.onload 이벤트에 달력을 생성하는 function 을 호출한다. 
	
	ex :
	 var objElementDiv = document.getElementById("canlender_main");			//영역  div 
	 
	 //달력 만드는 스크립트 호출.
	 fn_SetCalendarInit(objElementDiv);
	
*/

var currDate;	//현재 날짜.
var oDropBtn;	//달력을 보이게 하는 버튼 Element 정의할 변수.
var ctrlFrame;	//달력이 생성될 영역
var ctrlLeftLayer;	//달력이 생성될 좌측 하부 영역
var ctrlRightLayer;	//달력이 생성될 우측 하부 영역
var oYearOption;	//년 select box Option Element 정의할 변수
var oMonthOption;	//월 select box Option Element 정의할 변수
var currCell;
var curMonth;  //현재 월 
var curYear;   //현재 년.

//var objDateCells = new Array();	//요일의 색상처리.

//초기화 관련 함수 선언.

//ondocumentready - 엘레멘트에 첨부된 비헤이버는 ondocumentready와 oncontentready의 통보를 받는다.
//그러나 이 통보는 window.onload 이벤트가 발생된 후에만 가능하다.


//******************************************************
//Event 
//******************************************************


//폼이 로드되어 지정한 컨트롤도 로드되면 발생하는 이벤트.
function fn_SetCalendarInit(objCtrl) {
	//현재 날짜를 셋팅.
	//text 값이 날자형에 유효하면 해당값을,유효하지 못하면 현재 날짜로 셋팅한다. 
	var initDate = new Date();
	if(document.all){
		currDate = new Date(initDate.getYear() ,initDate.getMonth(),"01")	
	}
	else
	{
		currDate = new Date(initDate.getYear()+1900 ,initDate.getMonth(),"01")	
	}

	var objdl = document.createElement("dl");
	var objdt = document.createElement("dt");

	objdl.appendChild(objdt);


	var firstDate, lastDate;
	lastDate =new Date(initDate.getYear() ,initDate.getMonth(),0);		
		
	var year = initDate.getFullYear();
	var month = initDate.getMonth()+1;
	var day = initDate.getDate();

	if ( month < 10) {
	   month = "0"+month;
	}
	if ( day < 10) {
	   day = "0"+day;
	}
	firstDate = year+month+day;
	
	day = lastDate.getDate();
	if ( day < 10) {
	   day = "0"+day;
	}	
	lastDate = year+month+day;
	
	var alink = document.createElement("a");
	alink.onclick = "javascript:addSession('edu/eduList.jsp','curMenu=E01000000&sEduBgnDt="+firstDate+"&sEduEndDt="+lastDate+"')";
	alink.onkeypress = voidback;
	alink.href= "javascript:addSession('edu/eduList.jsp','curMenu=E01000000&sEduBgnDt="+firstDate+"&sEduEndDt="+lastDate+"')";
	
	objdt.appendChild(alink);
	
	var imgCal = document.createElement("img");
	imgCal.src = "images/main/calender_tit.gif";
	imgCal.alt = "이달의 교육일정 달력입니다.";
	
	alink.appendChild(imgCal);
	//objdt.appendChild(imgCal);
	
	var  objSpace = document.createElement("span");
	if( document.all){
		objSpace.innerText  = "    ";
	}
	else
	{
		objSpace.textContent = "    ";
	}
	objdt.appendChild(objSpace);
	
	
	var objdd= document.createElement("dd");

	objdl.appendChild(objdd);
	
	var objalink = document.createElement("a");
	objalink.onclick = preMonth;
	objalink.onkeypress = voidback;
	objalink.href= "javascript:void(0)";
	
	var imgPreMon = document.createElement("img");
	imgPreMon.src = "images/main/calender_arrow01.gif";
	imgPreMon.alt = "이전달";
	//imgPreMon.onclick = preMonth;
	//imgPreMon.onkeypress = preMonth;
		
	objalink.appendChild(imgPreMon);
	objdd.appendChild(objalink);

	var objSpan  = document.createElement("span");
	objSpan.id = "spanCalendarDate";
	
	if( document.all){
		objSpan.innerText  =  getDateStr().replace(/-/g,".").substring(0,7);
	}
	else
	{
		objSpan.textContent = getDateStr().replace(/-/g,".").substring(0,7);
	}
	objdd.appendChild(objSpan);
	
	var objblink = document.createElement("a");
	objblink.onclick = nextMonth;
	objblink.onkeypress = voidback;
	objblink.href= "javascript:void(0)";
	
	var imgNextMon = document.createElement("img");
	imgNextMon.src = "images/main/calender_arrow02.gif";
	imgNextMon.alt = "다음달";
//	imgNextMon.onclick = nextMonth;
	//imgNextMon.onkeypress = nextMonth;
	
	objblink.appendChild(imgNextMon);
	objdd.appendChild(objblink);
	
	//objdd.appendChild(imgNextMon);
	
	var objui = document.createElement("ui");

	objdl.appendChild(objui);
	
	var objli = document.createElement("li");
	objli.className = "cal_bg";
	
	objui.appendChild(objli);

	var objtable = document.createElement("table");
	objtable.border = "0";
	
	objli.appendChild(objtable);
	
	var objthead = document.createElement("thead");
	
	objtable.appendChild(objthead);
	
	var objtr = document.createElement("tr");
	
	objthead.appendChild(objtr);
	
	//요일 Element 를 저장할 변수.
	var oWeekArray = new Array(7);

	oWeekArray[0] = document.createElement("img");
	oWeekArray[0].src = "images/main/calender_sun.gif";
	oWeekArray[0].alt ="일요일";
	
	oWeekArray[1] = document.createElement("img");
	oWeekArray[1].src = "images/main/calender_mon.gif";
	oWeekArray[1].alt = "월요일";
	
	oWeekArray[2] = document.createElement("img");
	oWeekArray[2].src = "images/main/calender_tue.gif";
	oWeekArray[2].alt = "화요일";
	
	oWeekArray[3] = document.createElement("img");
	oWeekArray[3].src = "images/main/calender_wed.gif";
	oWeekArray[3].alt = "수요일";
	
	oWeekArray[4] = document.createElement("img");
	oWeekArray[4].src = "images/main/calender_thu.gif";
	oWeekArray[4].alt = "목요일";

	oWeekArray[5] = document.createElement("img");
	oWeekArray[5].src = "images/main/calender_fri.gif";
	oWeekArray[5].alt = "금요일";

	oWeekArray[6] = document.createElement("img");
	oWeekArray[6].src = "images/main/calender_sat.gif";
	oWeekArray[6].alt = "토요일";

	var objth ;
	
	for(var i = 0; i <= 6 ; i ++){
		objth = document.createElement("th");
		objth .scope ="col";
		objth .appendChild(oWeekArray[i]);
		objtr.appendChild(objth );
	}
	
	
	//달력 날짜부분.
	var row, cell, span, nbsp,alink;
	var objtbody = document.createElement("tbody"); 
	objtbody.id = "tbodyEduCalendar" ;
	
	for (var i=0; i<6; i++) {
		//로우 생성.
		row = document.createElement("tr"); 	
		//열 생성.
		for (var j=0; j<7; j++) {
			cell = document.createElement("td");
			
			with(cell.style)
			{
				textAlign ="center";
			}
			cell.onselectstart = function(){return false;}
			
			alink = document.createElement("a");
			alink.href ="javascript:void(0)";
			
			cell.appendChild(alink);
			
//			objDateCells[i*7+j] = cell;
			row.appendChild(cell);
		}
		objtbody.appendChild(row);
	}	
	objtable.appendChild(objtbody);
	
    objCtrl.appendChild(objdl);
    calAdjust(objtbody);
       
}
function voidback()
{
	//아무기능도 없다. onkeypress 이벤트를 흘리기 위한것.
}
//  이미지 버튼 '<' 클릭 이벤트.
//  현재 월 + 1 하여 달력 변경.
function preMonth(e)
{
	if(document.all)
	{
		if(event.keyCode != 13 && event.button != 0) return;
	}
	else
	{
	
	}
	
	
    var objSpan = document.getElementById("spanCalendarDate");

	if( document.all){
		currDate = new Date(objSpan.innerText.substr(0,4) ,objSpan.innerText.substr(5,2)-2,"01")	
		objSpan.innerText  = getDateStr().replace(/-/g,".").substring(0,7);
	}
	else
	{
		currDate = new Date(objSpan.textContent.substr(0,4) ,objSpan.textContent.substr(5,2)-2,"01")
		objSpan.textContent = getDateStr().replace(/-/g,".").substring(0,7);
	}
		
	calAdjust(document.getElementById("tbodyEduCalendar"));
}

//  이미지 버튼 '>' 클릭 이벤트.
//  현재월 -1 하여 달력 변경
function nextMonth(e)
{	
	if(document.all)
	{
		if(event.keyCode != 13 && event.button != 0) return;
	}
	else
	{
	
	}
	
	  var objSpan = document.getElementById("spanCalendarDate");

	if( document.all){
		currDate = new Date(objSpan.innerText.substr(0,4) ,objSpan.innerText.substr(5,2),"01")	
		objSpan.innerText  = getDateStr().replace(/-/g,".").substring(0,7);
	}
	else
	{
		currDate = new Date(objSpan.textContent.substr(0,4) ,objSpan.textContent.substr(5,2),"01")
		objSpan.textContent = getDateStr().replace(/-/g,".").substring(0,7);
	}	
	calAdjust(document.getElementById("tbodyEduCalendar"));
}


//날짜를 문자형으로 리턴. YYYY-MM-DD
function getDateStr() {
	if(document.all){
		return currDate.getYear()+"-"+padZeros(currDate.getMonth()+1,2)+"-"+padZeros(currDate.getDate(),2);
	}else{		
		return currDate.getYear()+ 1900 +"-"+padZeros(currDate.getMonth()+1,2)+"-"+padZeros(currDate.getDate(),2);
	}
}

//사용자 액션시 달력모양 변경.
function calAdjust(objTbody) {

	var curYear = currDate.getYear();
	if(document.all){}else{curYear+=1900;}
	
	var curMonth = currDate.getMonth() ;

	var dateFirst = new Date(curYear, curMonth, 1);  

	var startCellNum = dateFirst.getDay();
	

	var dateLast = new Date(curYear, curMonth+1, 0);
	var endCellNum = startCellNum + dateLast.getDate() -1;
	var enumDate ;

	/*  
		날짜 생성하기전 DB를 조회해서 해당월의 교육일정이 존재하는가 확인하여 존재일에 표시한다.
		가능하다면..링크도 걸어준다. 		
	*/
	//

	callServer("Pt_frontEduCalendar.jsp","CUR_MONTH="+ getDateStr().replace(/-/g,""));

	//달력 테이블을 분석해서 각 셀에 값을 셋팅.
	//objTbody 를 분석.
	var oRows = objTbody.getElementsByTagName("TR");
	
	var  iDayNum = 0;
	var oRowsLen = oRows.length;
	for(var i=0;i < oRowsLen ; i++)		//rows
	{
		var oCells = oRows[i].getElementsByTagName("TD");		//row 
		var oCellsLen = oCells.length;
		for(var j=0; j < oCellsLen ; j ++)	//cells
		{
			var oCurCell = oCells[j]; 	//cell 
			
			if(document.all){

				oCurCell.childNodes[0].innerText = ( iDayNum >= startCellNum && iDayNum <= endCellNum ) ? iDayNum-startCellNum+1 : "";
			

			    enumDate = ( iDayNum >= startCellNum && iDayNum <= endCellNum ) ?    parseInt(getDateStr().replace(/-/g,"")) + iDayNum : "";
		
				if(enumDate != "")
				{
					oCurCell.style.backgroundColor="white";
					oCurCell.title = "";
					//조회된 건 추가.
					var ochildLen = objXmlDom.childNodes[0].childNodes.length;
					for( var k = 0 ; k < ochildLen ; k ++)
					{		 	

						//var iBgnDay =  objXmlDom.childNodes[0].childNodes[k].selectSingleNode("EDU_BGN_DT").text.substr(6,2);
						//var iEndDay =  objXmlDom.childNodes[0].childNodes[k].selectSingleNode("EDU_END_DT").text.substr(6,2);
						var iBgnDay =  objXmlDom.childNodes[0].childNodes[k].selectSingleNode("EDU_BGN_DT").text;
						var iEndDay =  objXmlDom.childNodes[0].childNodes[k].selectSingleNode("EDU_END_DT").text;						
			
						var mm = curMonth+1 >9 ?""+(curMonth+1):"0"+(curMonth+1);
						var dd = iDayNum-startCellNum+1 >9 ?""+(iDayNum-startCellNum+1):"0"+(iDayNum-startCellNum+1);
						var viewDay = curYear+mm+dd;
						if(parseInt(viewDay) >=parseInt( iBgnDay) && parseInt(viewDay) <=  parseInt(iEndDay))
						{
								
							if( j%7 != 0 && j%7 != 6){
								oCurCell.style.background="#FFECE8"; 	//현재 날짜가 교육일정일에 보함된다면 백그라운드 컬러를 변경.
								oCurCell.title = oCurCell.title + objXmlDom.childNodes[0].childNodes[k].selectSingleNode("EDU_NM").text + "\n";
								
								//oCurCell.childNodes[0].href ="javascript:addSession('edu/eduList.jsp','curMenu=E01000000&sEduBgnDt="+objXmlDom.childNodes[0].childNodes[k].childNodes[2].text+"&sEduEndDt="+objXmlDom.childNodes[0].childNodes[k].childNodes[3].text+"')";
								oCurCell.childNodes[0].href ="javascript:addSession('edu/eduList.jsp','curMenu=E01000000&sEduBgnDt="+viewDay+"&sEduEndDt="+viewDay+"')";
								
								
							}
						}
					 }	
				}
				else{
					oCurCell.style.backgroundColor="white";
				}
			}
			else
			{	
				oCurCell.childNodes[0].textContent = ( iDayNum >= startCellNum && iDayNum <= endCellNum ) ? iDayNum-startCellNum+1 : "";
				enumDate = ( iDayNum >= startCellNum && iDayNum <= endCellNum ) ? iDayNum-startCellNum+1 : "";
				
				if(enumDate != "")
				{
				
					oCurCell.style.backgroundColor="white";
					oCurCell.title = "";
					//조회된 건 추가.
					var ochildLen = objXmlDom.childNodes[0].childNodes.length;
					for( var k = 0 ; k < ochildLen ; k ++)
					{		 	

						var iBgnDay =  objXmlDom.childNodes[0].childNodes[k].childNodes[2].textContent.substr(7,2);
						var iEndDay =  objXmlDom.childNodes[0].childNodes[k].childNodes[3].textContent.substr(7,2);
	

						//if(parseInt(enumDate) >= parseInt(iBgnDay) && parseInt(enumDate) <= parseInt( iEndDay))
						var mm = curMonth+1 >9 ?""+(curMonth+1):"0"+(curMonth+1);
						var dd = iDayNum-startCellNum+1 >9 ?""+(iDayNum-startCellNum+1):"0"+(iDayNum-startCellNum+1);
						var viewDay = curYear+mm+dd;
						if(parseInt(viewDay) >=parseInt( iBgnDay) && parseInt(viewDay) <=  parseInt(iEndDay))
						{
							if( j%7 != 0 && j%7 != 6){
								oCurCell.style.background="#FFECE8"; 	//현재 날짜가 교육일정일에 보함된다면 백그라운드 컬러를 변경.
								oCurCell.title = oCurCell.title + objXmlDom.childNodes[0].childNodes[k].childNodes[1].textContent + ",";
								//oCurCell.childNodes[0].href ="javascript:addSession('edu/eduList.jsp','curMenu=E01000000&sEduBgnDt="+objXmlDom.childNodes[0].childNodes[k].childNodes[2].textContent+"&sEduEndDt="+objXmlDom.childNodes[0].childNodes[k].childNodes[3].textContent+"')";
								oCurCell.childNodes[0].href ="javascript:addSession('edu/eduList.jsp','curMenu=E01000000&sEduBgnDt="+viewDay+"&sEduEndDt="+viewDay+"')";
									
							}	
											
						}
					 }	
				}
				else{
					oCurCell.style.backgroundColor="white";
				}
			}
				
			switch (j%7) {
				//토요일,일요일,평일 의 fontColor 셋팅. 
				case 0: oCurCell.childNodes[0].style.color="red"; break;
				case 6: oCurCell.childNodes[0].style.color="blue"; break;
				default: oCurCell.childNodes[0].style.color="black";
			}
			iDayNum ++;
		}
	}	
}

//********************************************************************************
//Method 
//********************************************************************************
// 입력받은 숫자의 왼쪽을 0 으로 채워서 "00" 형식으로 변경하는 함수.
function padZeros(num, size) {
	var str = num.toString();
	var numZeros = size - str.length;
	for (var i=0; i<numZeros; i++) str="0"+str;
	return str;
}
//현재 지정된 컨트롤의 위치를 기준으로  offsetParent로 지정한 모체 좌표에 상대적 위쪽 위치를 반환. 
function getRealOffsetTop(o) { 
	return o ? o.offsetTop + getRealOffsetTop(o.offsetParent) : 0; 
}
//현재 지정된 컨트롤의 위치를 기준으로  offsetParent로 지정한 모체 좌표에 상대적 왼쪽 위치를 반환.
function getRealOffsetLeft(o) { 
	return o ? o.offsetLeft + getRealOffsetLeft(o.offsetParent) : 0;
}

// insertAdjacentHTML(), insertAdjacentText() and insertAdjacentElement()
// for Netscape 6/Mozilla by Thor Larholm me@jscript.dk
// Usage: include this code segment at the beginning of your document
// before any other Javascript contents.

if(typeof HTMLElement!="undefined" && ! HTMLElement.prototype.insertAdjacentElement){
    
    HTMLElement.prototype.insertAdjacentElement = function(where,parsedNode)
    {
        switch (where){
        case 'beforeBegin':
            this.parentNode.insertBefore(parsedNode,this)
            break;
        case 'afterBegin':
            this.insertBefore(parsedNode,this.firstChild);
            break;
        case 'beforeEnd':
            this.appendChild(parsedNode);
            break;
        case 'afterEnd':
            if (this.nextSibling) 
				this.parentNode.insertBefore(parsedNode,this.nextSibling);
            else this.parentNode.appendChild(parsedNode);
            break;
        }
    }

    HTMLElement.prototype.insertAdjacentHTML = function(where,htmlStr)
    {
        var r = this.ownerDocument.createRange();
        r.setStartBefore(this);
        var parsedHTML = r.createContextualFragment(htmlStr);
        this.insertAdjacentElement(where,parsedHTML)
    }


    HTMLElement.prototype.insertAdjacentText = function
(where,txtStr)
    {
        var parsedText = document.createTextNode(txtStr)
        this.insertAdjacentElement(where,parsedText)
    }
}

	/* 출력 테스트
	if(document.all)
		alert(ctrlFrame.outerHTML);
	else{
		var temp = document.createElement("body");
		temp.appendChild(ctrlFrame);
		var retHTML = temp.innerHTML;
		
		alert( retHTML);
	}
	*/






