﻿// 목  적 : 스터디매니아 메뉴 동작 스크립트
// 제  작 : 안우길(amoogi@tstudycorp.com)
// 제작일 : 2008년 9월 10일
// 설  명 :
//         1. switch 메뉴 : 2, 3 depth 펼침 메뉴
//         2. vertical 메뉴 : 4 depth 팝업 메뉴
// 변  수 :
//         persistmenu -> yes:현재메뉴상태정보를 유지한다. no:현재메뉴상태정보를 유지하지 않는다.
//         persisttype -> sitewide: 사이트내에서 메뉴상태정보 유지, local: 현재페이지에서만 메뉴상태정보 유


// switch 메뉴 변수 선언
var persistmenu = "yes";
var persisttype = "sitewide";

// vertical 메뉴 변수 선언
var disappeardelay=250  //menu disappear speed onMouseout (in miliseconds)
var enableanchorlink=1 //Enable or disable the anchor link when clicked on? (1=e, 0=d)
var hidemenu_onclick=1 //hide menu when user clicks within menu? (1=yes, 0=no)
var horizontaloffset=1 //horizontal offset of menu from default location. (0-5 is a good value)

// 메뉴를 switch 한다.
function SwitchMenu(obj, imgoff, imgon, sOpen) {
  if(sOpen == "open")
    return false;
  if(document.getElementById)
  {
  	  var el = document.getElementById(obj); // sub1
  	  var ioff = document.getElementById(imgoff);
  	  var ion = document.getElementById(imgon)
  	  var ar = document.getElementById("masterdiv").getElementsByTagName("dl");
  	  var oIoff = "imgoff";
  	  var oIon = "imgon";
  	  
  	  if(el.style.display != "block")
  	  {  	 
  	  	// menu open, image on
  	  	for(var idx=0; idx<ar.length; idx++)
  	  	{   	  		 
  	  		 if(ar[idx].className.indexOf("submenu") >= 0)
  	  		   ar[idx].style.display = "none";
  	  		   
  	  		 document.getElementById("imgon" + (idx+1)).style.display = "none";
  	  		 document.getElementById("imgoff" + (idx+1)).style.display = "block";
  	  	}  	  	  	  
  	  	
  	  	el.style.display = "block";        	  
  	  	ioff.style.display = "none";
  	  	ion.style.display = "block";
  	  }
  	  else
  	  {
  	    el.style.display = "none";  
  	    ion.style.display = "none";  	  	 
  	    ioff.style.display = "block";
  	  }
  }
}

// switch 메뉴 쿠키정보를 저장한다.      
function get_tsmenu_cookie(name)
{
	var search = name + "=";
	var returnValue = "";
	
	if(document.cookie.length > 0)
	{
		  offset = document.cookie.indexOf(search);
		  
		  if(offset != -1)
		  {
		  	offset += search.length;
		  	end = document.cookie.indexOf(";", offset);
		  	
		  	if(end == -1)
		  	  end = document.cookie.length;
		  	
		  	returnValue = unescape(document.cookie.substring(offset, end))
		  }
	}
	
	return returnValue;
}

// onload시 switch메뉴 동작 정의
function onloadfunction() {
	if(persistmenu == "yes")      	
	{
		var cookiename = (persisttype == "sitewide")?"switchmenu":window.location.pathname;
		var cookievalue = get_tsmenu_cookie(cookiename)
		if (cookievalue != "") {
		  if(document.getElementById("sub" + cookievalue) != null)
		  {
		    document.getElementById("sub" + cookievalue).style.display = "block";
		    document.getElementById("imgoff" + cookievalue).style.display = "none";
		    document.getElementById("imgon" + cookievalue).style.display = "block";		  		  
		  }
		}

	}
}

// switch메뉴의 상태정보를 저장한다.
function savemenustate()
{
	var blockid = "";
	var inc = 1;

	if (false == persistmenu)
	  return;
	
	while(document.getElementById("sub" + inc))
	{
		if(document.getElementById("sub" + inc).style.display == "block")
		{
			  blockid = inc;
			  break;
		}      
		inc++;
	}
	
	var cookiename = (persisttype == "sitewide")?"switchmenu":window.location.pathname;
	var cookievalue = (persisttype == "sitewide")?blockid + ";path=/":blockid;
	document.cookie = cookiename + "=" + cookievalue;     
}

// switch 메뉴 이벤트 Add
if(window.addEventListener)
  window.addEventListener("load", onloadfunction, false);
else if(window.attachEvent)
	window.attachEvent("onload", onloadfunction);
else if(document.getElementById)
	window.onload = onloadfunction;

// unload시 상태값 저장하도록 되어있으면, 상태값을 저장한다.	
if(persistmenu == "yes" && document.getElementById)
  window.onunload = savemenustate;

// vertical 메뉴에서 offsettype에 따라 element의 x(offsetLeft), y(offsetTop)좌표를 구한다.
function getposOffset(what, offsettype)
{
  var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
  var parentEl=what.offsetParent; // element의 parent element가 있을 수 있으므로 계산해 주어야 한다.
  while (parentEl!=null)
  {
    totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
    parentEl=parentEl.offsetParent;
  }
  return totaloffset;
}

// vertical 메뉴의 display여부를 결정한다.
function showhide(obj, e, visible, hidden)
{
  if (e.type=="click" && obj.visibility==hidden || e.type=="mouseover")
    obj.visibility=visible;
  else if (e.type=="click")
    obj.visibility=hidden;
}

// ie6이후 버전에서 표준부함 모두 적용여부를 검사한다. 
// BackCompat일 경우 dtd의 주소가 적용되어 있지 않은 타입이다. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
function iecompattest()
{
  return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body;
}

// vertical 메뉴의 팝업방향을 설정한다.
function clearbrowseredge(obj, whichedge)
{
  var edgeoffset=0
  if (whichedge=="rightedge")
  {
    var windowedge = !window.opera? iecompattest().scrollLeft+iecompattest().clientWidth-15 : window.pageXOffset+window.innerWidth-15;
    dropmenuobj.contentmeasure=dropmenuobj.offsetWidth;
    if (windowedge-dropmenuobj.x-obj.offsetWidth < dropmenuobj.contentmeasure)
      edgeoffset=dropmenuobj.contentmeasure+obj.offsetWidth+(horizontaloffset*2); //no space to the right of page? Move menu over to the left
  }
  else
  {
    var topedge = !window.opera? iecompattest().scrollTop : window.pageYOffset;
    var windowedge=!window.opera? iecompattest().scrollTop+iecompattest().clientHeight-15 : window.pageYOffset+window.innerHeight-18;
    dropmenuobj.contentmeasure=dropmenuobj.offsetHeight;
    if (windowedge-dropmenuobj.y < dropmenuobj.contentmeasure)
    { //move menu up?
      edgeoffset=dropmenuobj.contentmeasure-obj.offsetHeight;
      
      if ((dropmenuobj.y-topedge)<dropmenuobj.contentmeasure) //up no good either? (position at top of viewable window then)
        edgeoffset=dropmenuobj.y;
    }
  }
  return edgeoffset;
}

// vertical 메뉴를 생성시켜주는 메인 함수
function dropdownmenu(obj, e, dropmenuID)
{
  if (window.event) 
    event.cancelBubble=true;
  else if (e.stopPropagation) 
  	e.stopPropagation();
  	
  if (typeof dropmenuobj!="undefined") //hide previous menu
    dropmenuobj.style.visibility="hidden";
    
  clearhidemenu();    
  obj.onmouseout=delayhidemenu;
    
  dropmenuobj=document.getElementById(dropmenuID);
  
  if (hidemenu_onclick) 
    dropmenuobj.onclick=function(){dropmenuobj.style.visibility='hidden'};
  dropmenuobj.onmouseover=clearhidemenu;  
  dropmenuobj.onmouseout= function(event){delayhidemenu()};
  
  showhide(dropmenuobj.style, e, "visible", "hidden");
  dropmenuobj.x=getposOffset(obj, "left");
  dropmenuobj.y=getposOffset(obj, "top");
  dropmenuobj.style.left=dropmenuobj.x-clearbrowseredge(obj, "rightedge")+obj.offsetWidth+horizontaloffset+"px";
  dropmenuobj.style.top=dropmenuobj.y-clearbrowseredge(obj, "bottomedge")+"px";
    
  return clickreturnvalue();
}

// click bool 반환
function clickreturnvalue(isenablelink) {
  return isenablelink;
}

// hide menu delay
function delayhidemenu()
{
  delayhide=setTimeout("dropmenuobj.style.visibility='hidden'",disappeardelay);
}

// hide menu clear
function clearhidemenu()
{
  if (typeof delayhide!="undefined")
    clearTimeout(delayhide);
} 