/**
 * 메인 메뉴의 공통 js
 * 메뉴 navigation에 필요한 javascript
 * @author 황종혁
 * @since 2007. 01. 23.
 */


//객체의 top 길이를 반환한다.
function getRealOffsetTop(o)  {
	return o ? o.offsetTop + getRealOffsetTop(o.offsetParent) : 0;
}

function getRealOffsetTop1(o)  {
	return o ? o.offsetTop  : 0;
}

//객체의 left 길이를 반환한다.
function getRealOffsetLeft(o)  {
	return o ? o.offsetLeft + getRealOffsetLeft(o.offsetParent) : 0;
}

//객체의 left 길이를 반환한다.
function getRealOffsetLeft1(o)  {
	return o ? o.offsetLeft - getRealOffsetLeft(o.offsetParent) : 0;
}

/**
 * 하위 메뉴 div의 위치를 잡아준다.
 */
function naviInit()
{
	var elements = document.getElementsByTagName("div");
	var size = 0;
	var element;
	if(elements !=null)
	{
		size = elements.length;
		for(var i=0; i<size; i++)
		{
			elemet = elements[i];
			if(elemet.id.indexOf("SubMenu_") > -1)
			{
				elemet.style.top = getRealOffsetTop(elemet.parentElement)-14;
				elemet.style.left = getRealOffsetLeft(elemet.parentElement)-2;
			}
			
		}
	}
	
	
	//2008. 03. 04. 수정. By 황종혁.
	//익스플로어와 파폭에서 지원되도록 수정함.
	if(mozes) 
	{ 
		divMenu = document.getElementById("divMenu");
		if(divMenu != null)
		{
			//divMenu.top = top.pageYOffset + 200;
			divMenuTopVal = parseInt(divMenu.style.top, 10);
			
			divMenu.style.visibility = "visible"; 
			moveRightEdge();
		}
	} 
	else if (msie) 
	{ 
		divMenu = document.getElementById("divMenu");
	
		if(divMenu != null)
		{

//		스크롤 튕김 현상으로 주석처리 by 김태형(20070508)			
//		divMenu.style.top = (mozes ? window.pageYOffset : document.body.scrollTop) + 60;
			divMenuTopVal = parseInt(divMenu.style.top, 10);
			divMenu.style.visibility = "visible";
			moveRightEdge(); 
		} 
	}
}


/**
 * 상단 메뉴의 상위 메뉴명에 마우스를 대면 그 메뉴의 하위 리스트 div를 보여준다.
 * @param {Object} obj
 */
function viewSubNavi(obj)
{	
	//var t = -14;
	//var l = -2;
	
	var argv = viewSubNavi.arguments;
	var argc = argv.length;
	var t = (1 < argc) ? argv[1] : 0;
	var l = 40;

	
	
	if(msie)
	{
		show_ie(obj,t,l);
	}
	else if(mozes)
	{
		//t=-25;
		//l=-2;
		show_mozes(obj,t,l);
	}
	
}

function show_ie(obj,t,l)
{
	var divElement = obj.childNodes[2];
	var backIFrame = document.getElementById("SubMenuBack");

	//선택한 메뉴를 보여준다.
	
	//divElement.style.top = getRealOffsetTop(divElement.parentElement)-14;
	//divElement.style.left = getRealOffsetLeft(divElement.parentElement)-2;
	divElement.style.top = getRealOffsetTop(divElement.parentElement)+t;
	divElement.style.left = getRealOffsetLeft(divElement.parentElement)+l;
	

	divElement.style.display="block";

//	Effect.Appear(divElement.id, { duration: 0.3 });
	
	backIFrame.style.width = divElement.offsetWidth;
	backIFrame.style.height = divElement.offsetHeight;
	backIFrame.style.top = divElement.style.top;
	backIFrame.style.left = divElement.style.left;
	backIFrame.style.zIndex = divElement.style.zIndex -1;

	backIFrame.style.display = "";
}

function show_mozes(obj,t,l)
{
	var divElement = obj.childNodes[3];
	var backIFrame = document.getElementById("SubMenuBack");

	//선택한 메뉴를 보여준다.
	divElement.style.top = getRealOffsetTop(divElement.parentNode)+t+"px";
	divElement.style.left = getRealOffsetLeft(divElement.parentNode)+l+"px";
	

	divElement.style.display="block";

//	Effect.Appear(divElement.id, { duration: 0.3 });
	
	backIFrame.style.width = divElement.offsetWidth;
	backIFrame.style.height = divElement.offsetHeight;
	backIFrame.style.top = divElement.style.top;
	backIFrame.style.left = divElement.style.left;
	backIFrame.style.zIndex = divElement.style.zIndex -1;

	backIFrame.style.display = "";
}

/**
 * 하위 메뉴 div에서 마우스를 떼면 그 메뉴의 하위 리스트 div가 닫힌다.
 * @param {Object} obj
 * @param {Object} e
 */
function closeSubNavi(obj, e)
{	

	
	var divElement;
	var backIFrame = document.getElementById("SubMenuBack");

	
	if(msie)
	{
		divElement = obj.childNodes[2];
	}
	else if(mozes)
	{
		divElement = obj.childNodes[3];
	}
	
	
	var mouseX, mouseY;
	if(msie)
	{
		mouseX = event.clientX+document.body.scrollLeft;
		mouseY = event.clientY+document.body.scrollTop;
	}
	else if(mozes)
	{
		if(e) 
		{ 
        	mouseX=e.clientX+document.body.scrollLeft; 
        	mouseY=e.clientY+document.body.scrollTop; 
			
    	}
    	else
    	{ 
        	mouseX=eventM.x+document.body.scrollLeft; 
        	mouseY=eventM.y+document.body.scrollTop;
        } 
	}
	
	var display_none	=	true;
	var childDiv;

	//Element.getElementsByTagName("*").length 
	childObj	=	divElement.getElementsByTagName("div");
	for(i = 0; i < childObj.length; i++) {
		if(childObj[i].style.display == 'block') {
			childDiv	 =	 childObj[i];
			display_none	=	false;
		}
	}
	if(!display_none) return ;

	else {
		
		if( (getRealOffsetLeft(divElement)+3>mouseX) || ((getRealOffsetLeft(divElement)+divElement.clientWidth-3)<mouseX) )
		//if( !((getRealOffsetLeft(divElement)+4<mouseX) && ((getRealOffsetLeft(divElement)+divElement.clientWidth-4)>mouseX)) )
		{	
			backIFrame.style.display = "none";
			divElement.style.display="none";
						//childDiv.style.display	=	"none";
			
			//Effect.Fade(backIFrame.id, { duration: 0.0 });
			backIFrame.style.width = 0;
			backIFrame.style.height = 0;
			backIFrame.style.top = 0;
			backIFrame.style.left = 0;
			
			//Effect.Fade(divElement.id, { duration: 0.3 });
			
			return ;
		}
		else if( (getRealOffsetTop(divElement)+4>mouseY) || ((getRealOffsetTop(divElement)+divElement.clientHeight-3)<mouseY) )
		//else if( !((getRealOffsetTop(divElement)+4<mouseY) && ((getRealOffsetTop(divElement)+divElement.clientHeight-4)>mouseY)) )
		{
			backIFrame.style.display = "none";
			divElement.style.display="none";
			//childDiv.style.display	=	"none";
			
			//Effect.Fade(backIFrame.id, { duration: 0.0 });
			backIFrame.style.width = 0;
			backIFrame.style.height = 0;
			backIFrame.style.top = 0;
			backIFrame.style.left = 0;
			
			//Effect.Fade(divElement.id, { duration: 0.3 });
			
			return ;
		}
	}
}

//window.onresize = naviInit;//각 페이지에서 설정.(다른 window.onresize  이벤트가 있을때 충돌나서 하나만 실행됨).


/**
 * 플래쉬 삽입. xp 서비스 팩 패치시 점섬 없애기...
 * @param {Object} 플래쉬 url
 * @param {Object} 플래쉬 넓이, 높이, ex)"width=30 height=30"
 */
function target_chk(varUrl, varSize){
	document.write("<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0\" " + varSize + ">");
	document.write("	<param name=\"movie\" value=\"" + varUrl + "\">");
	document.write("	<param name=\"quality\" value=\"high\">");
	document.write("	<embed src=\"" + varUrl + "\" quality=\"high\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" type=\"application/x-shockwave-flash\" " + varSize + "></embed>");
	document.write("</object>");
}


/**
 * 플래쉬 삽입. xp 서비스 팩 패치시 점섬 없애기...
 * @param {Object} 플래쉬 url
 * @param {Object} 플래쉬 넓이, 높이, ex)"width=30 height=30"
 */
function switchLang(varAnnex, varLang)
{
	var url = varAnnex + "/switchLanguage.jsp?targetLanguage=" + varLang;
	document.location.href = url;
}


/**
가톨릭 방식의 메뉴처럼 하위 메뉴가 가로로 보일 때, 서브 메뉴 처리 함수.
하위 메뉴를 보이게 하고 상위 메뉴 이미지의 상태를 on상태로 바꾼다.
2007. 07. 12. 황종혁 추가.
가톨릭 성의 교정 도서관 작업하면서 추가.

*/
// 사이트 마다 이미지명이 틀리므로 이미지명 파라메터 추가 by juwon, ji 2007.12.11
function showSubMenu(menu_num, image_title) {

	var image_name	=	image_title ? image_title : "menu";

	for(var i=1; i<=parentMenuSize; i++)
	{
		if(menu_num == i)
		{
			//하위 메뉴 레이어를 보이게 한다.
			document.getElementById("main_menu"+i).style.display="";
			//메뉴의 on이미지로 교체시킨다.
			document.getElementById("MenuImage"+i).src=imgPath+"main/" + image_name + "0"+menu_num+"_on.gif";
		}
		else
		{
			hideSubMenu(i,image_name);
		}
	}	
		
}

/**
가톨릭 방식의 메뉴처럼 하위 메뉴가 가로로 보일 때, 서브 메뉴 처리 함수.
하위메뉴를 숨기고, 상위 메뉴 이미지의 on상태를 해제한다.
2007. 07. 12. 황종혁 추가.
가톨릭 성의 교정 도서관 작업하면서 추가.

*/
function hideSubMenu() {
	var argv = hideSubMenu.arguments;
	var argc = argv.length;
	
	if(argc==2)
	{
		/*
		* parentMenuSize 와 실제 메뉴카운트가 틀릴 경우(이런경우는 어떤 경우지?) 개체를 못 찾는 자바스크립트 에러가 발생
		* try..catch 문 추가 
		* by 지주원 2007.09.16
		*/
		try {
			//하위 메뉴 레이어를 숨긴다.
			document.getElementById("main_menu"+argv[0]).style.display="none";
			//메뉴의 이미지로 교체시킨다.%>
			document.getElementById("MenuImage"+argv[0]).src=imgPath+"main/" + argv[1] + "0"+argv[0]+".gif";
		}
		catch(e) {}
	}
	else
	{
		for(var i=1; i<=parentMenuSize; i++)
		{
			/*
			* parentMenuSize 와 실제 메뉴카운트가 틀릴 경우(이런경우는 어떤 경우지?) 개체를 못 찾는 자바스크립트 에러가 발생
			* try..catch 문 추가 
			* by 지주원 2007.09.16
			*/
			try {
				//하위 메뉴 레이어를 숨긴다.
				document.getElementById("main_menu"+i).style.display="none";
				//메뉴의 이미지로 교체시킨다.%>
				document.getElementById("MenuImage"+i).src=imgPath+"main/" + argv[1] + "0"+i+".gif";
			}
			catch(e) {}
			
		}
	}
}

/**
가톨릭 방식의 메뉴처럼 하위 메뉴가 가로로 보일 때, 서브 메뉴 처리 함수.
하위 메뉴를 보이게 하고 상위 메뉴 이미지의 상태를 on상태로 바꾼다.
2007.12.08 서브화면마다 다른 색상을 사용하는 경우 확장
*/
function showSubMenuExt(menu_num, selected_num) {

	for(var i=1; i<=parentMenuSize; i++)
	{
		if(menu_num == i)
		{
			//하위 메뉴 레이어를 보이게 한다.
			document.getElementById("main_menu"+i).style.display="";
			//메뉴의 on이미지로 교체시킨다.
			document.getElementById("MenuImage"+i).src=imgPath+"main/" + selected_num + "menu0"+menu_num+"_on.gif";
		}
		else
		{
			hideSubMenuExt(i,selected_num);
		}
	}	
		
}

/**
가톨릭 방식의 메뉴처럼 하위 메뉴가 가로로 보일 때, 서브 메뉴 처리 함수.
하위메뉴를 숨기고, 상위 메뉴 이미지의 on상태를 해제한다.
2007.12.08 서브화면마다 다른 색상을 사용하는 경우 확장
*/
function hideSubMenuExt() {
	var argv = hideSubMenuExt.arguments;
	var argc = argv.length;
	
	if(argc==2)
	{
		/*
		* parentMenuSize 와 실제 메뉴카운트가 틀릴 경우(이런경우는 어떤 경우지?) 개체를 못 찾는 자바스크립트 에러가 발생
		* try..catch 문 추가 
		* by 지주원 2007.09.16
		*/
		try {
			//하위 메뉴 레이어를 숨긴다.
			document.getElementById("main_menu"+argv[0]).style.display="none";
			//메뉴의 이미지로 교체시킨다.%>
			document.getElementById("MenuImage"+argv[0]).src=imgPath+"main/" + argv[1] + "menu0"+argv[0]+".gif";
		}
		catch(e) {}
	}
	else
	{
		for(var i=1; i<=parentMenuSize; i++)
		{
			/*
			* parentMenuSize 와 실제 메뉴카운트가 틀릴 경우(이런경우는 어떤 경우지?) 개체를 못 찾는 자바스크립트 에러가 발생
			* try..catch 문 추가 
			* by 지주원 2007.09.16
			*/
			try {
				//하위 메뉴 레이어를 숨긴다.
				document.getElementById("main_menu"+i).style.display="none";
				//메뉴의 이미지로 교체시킨다.%>
				document.getElementById("MenuImage"+i).src=imgPath+"main/"+i+"menu0"+i+".gif";
			}
			catch(e) {}
			
		}
	}
}

/**
* 3단메뉴 적용을 위한 추가 시작 by juwon, ji
*/

/**
 * 서브메뉴에서 3단메뉴 보여주기 추가 by juwon,ji
 * @param {Object} obj
 */
function viewTabMenu(obj)
{	
	//var t = -14;
	//var l = -2;
	
	var argv = viewTabMenu.arguments;
	var argc = argv.length;
	var t = (1 < argc) ? argv[1] : 0;
	var l = (2 < argc) ? argv[2] : 0;

	
	
	if(msie)
	{
		show_ie1(obj,t,l);
	}
	else if(mozes)
	{
		//t=-25;
		//l=-2;
		show_mozes1(obj,t,l);
	}
	
}

function show_ie1(obj,t,l)
{
	//var divElement = obj.childNodes[2];
	//var backIFrame = document.getElementById("SubMenuBack");

	divElement	=	obj.getElementsByTagName("div")[0];
	//divElement.style.top = getRealOffsetTop1(obj)+t;
	divElement.style.left = obj.offsetLeft +obj.clientWidth;

	if(divElement.style.display == 'none' ) divElement.style.display="block";
}

function show_mozes1(obj,t,l)
{
	var divElement = obj.childNodes[2];
	var backIFrame = document.getElementById("SubMenuBack");


	divElement	 =	 obj.getElementsByTagName("div")[0];
	//divElement.style.top	=	getRealOffsetTop1(obj) + getRealOffsetTop1(divElement) + "px";
	divElement.style.left = obj.offsetLeft +obj.offsetWidth + "px";
	//선택한 메뉴를 보여준다.
	divElement.style.top = getRealOffsetTop1(divElement.parentNode.parentNode)+t+ 40 + "px"; //(이상하게 top을 제대로 못잡네..ㅡㅡ;;)
	//divElement.style.left = getRealOffsetLeft(divElement.parentNode)+l+"px";
	divElement.style.display="block";

}


// 사용안함 juwon,ji
function tabMenuHide(obj, show)
{

	var divElement;
	var backIFrame = document.getElementById("SubMenuBack");

	var divEleArr	 =	 obj.getElementsByTagName("div");

		for(i = 0; i < divEleArr.length; i++) {
			divEleArr[i].style.left = divEleArr[i].parentElement.offsetLeft +divEleArr[i].parentElement.clientWidth;
			divEleArr[i].style.display	=	show;
			//}
		}
	
}


/*
* 서브메뉴에서 3단 메뉴를 닫는다.
*/

function closeTabMenu(obj, e)
{	
	var divElement;

	divElement	=	obj.getElementsByTagName("div")[0];

	eleTop			=	getRealOffsetTop(obj);
	eleLeft			=	getRealOffsetLeft(obj);
	eleRight		=	eleLeft +obj.offsetWidth;
	eleBottom	=	eleTop + obj.offsetHeight;

	
	var mouseX, mouseY;
	if(msie)
	{
		mouseX = event.clientX+document.body.scrollLeft;
		mouseY = event.clientY+document.body.scrollTop;
	}
	else if(mozes)
	{
		if(e) 
		{ 
        	mouseX=e.clientX+document.body.scrollLeft; 
        	mouseY=e.clientY+document.body.scrollTop; 
			
    	}
    	else
    	{ 
        	mouseX=eventM.x+document.body.scrollLeft; 
        	mouseY=eventM.y+document.body.scrollTop;
        } 
	}

	 if(mouseX > eleRight && mouseX < (getRealOffsetLeft(divElement) + divElement.offsetWidth) && mouseY > getRealOffsetTop(divElement) && mouseY < (getRealOffsetTop(divElement) + divElement.offsetHeight + 3))
		 return ;

	if(mouseX < (eleLeft + 2) || mouseX > (getRealOffsetLeft(divElement) + divElement.offsetWidth - 2)) {
		divElement.style.display="none";
	}

	else if(mouseX > eleLeft && mouseX < eleRight && (mouseY < (eleTop + 2) || mouseY > (eleBottom - 2)))
	{
		divElement.style.display="none";
	}

	else if( (mouseY < (getRealOffsetTop(divElement) + 2)) || (mouseY > (getRealOffsetTop(divElement) + divElement.offsetHeight - 2))) {
		divElement.style.display="none";
	}

	return ;
}

