// nav
var _d = document;

function addEvent(element, type, callback) {
	var eventListener = function(element, event) {
		element.addEventListener(event, function(e) {
			var obj = e.relatedTarget;
			while (obj != element) {
				if (!obj) return callback.apply(this);
				obj = obj.parentNode;
			}
			return false;
		}, false);
	};
	if (element.addEventListener) {
		switch(type) {
			case 'mouseleave': eventListener(element, 'mouseout');
				break;
			case 'mouseenter': eventListener(element, 'mouseover');
				break;
			default : element.addEventListener(type, callback, false);
				break;
		}
	} else if (element.attachEvent) {
		element.attachEvent('on' + type, function() {
			callback.apply(element);
		});
	}
}


function getClass(classname, tagname, tarID) {
	if (tarID == undefined) tarID = document;
	var element = this.nodeType == 1 ? this : tarID;
	var elements = [], nodes = tagname ? element.getElementsByTagName(tagname) : element.getElementsByTagName('*');
	for(var i=0; i<nodes.length; i++) {
		if(nodes[i].className.indexOf(classname) != -1)
			elements.push(nodes[i]);
	}
	return elements;
}

function addClass(element,value) {
	if (!element.className) {
		element.className = value;
	} else {
		newClassName = element.className;
		newClassName += " ";
		newClassName += value;
		element.className = newClassName;
	}
}

function removeClass(element,value) {
	if (element.className == value) {
		element.className = "";
	} else if (element.className.indexOf(value) != -1) {
		element.className = element.className.replace(value,"");
	}
}

var gnbNavi = function(gnbID, currentNum, subCurrentNum, noscript){
	var wrapper = _d.getElementById(gnbID);
	if (noscript) removeClass(wrapper,noscript);	// 스크립트가 로딩되면 wrapper의 class중 'noscript'를 삭제합니다.

	var menu = getClass('depth1','li',wrapper);
	var menuLink = [];			// 이벤트를 발생시킬 대메뉴의 a들
	var submenu = [];			// 대메뉴의 하위에 위치한 ul들
	var submenuLink = [];		// 서브메뉴의 a들

	var initialize = function(){
		for (var i=0; i<menu.length; i++){
			menuLink[i] = menu[i].getElementsByTagName('a')[0];
			submenu[i] = menu[i].getElementsByTagName('ul')[0];
			if(submenu[i] == undefined){
				submenu[i] = null;
			}
			if(submenu[i]) submenu[i].style.visibility = 'hidden';	// 서브메뉴 'hidden'초기화

			showSubmenu(i);											// 마우스 이벤트에 서브메뉴 show / hide
		}
		if (currentNum) menuLink[currentNum-1].onclick();		// 대메뉴 활성화
	};
	var showSubmenu = function(num){
		menuLink[num].onmouseover = menuLink[num].onfocus = function(){
			for(var i=0; i<menu.length; i++){
				var imgEl = menuLink[i].getElementsByTagName('img')[0];
				if(i == num){
					if (menu[i].className.indexOf('visible') == -1) addClass(menu[i],'visible');		// 활성화 된 메뉴에 class추가
					if (imgEl && imgEl.src.indexOf('_on.gif') == -1) imgEl.src = imgEl.src.replace('_off.gif', '_on.gif');	// 대메뉴 이미지 오버
					if(submenu[i]) {
						submenu[i].style.visibility = 'visible';
						subImgOver(i);								// 보여지는 서브메뉴의 메뉴들에게 이벤트를 지정
					}
				} else {
					removeClass(menu[i],'visible');
					if (imgEl) imgEl.src = imgEl.src.replace('_on.gif', '_off.gif');
					if(submenu[i]) {
						submenu[i].style.visibility = 'hidden';
					}
				}
			}
		}
		addEvent(menuLink[num].parentNode, 'mouseleave', function() {
			removeClass(this,'visible');
			submenu[num].style.visibility = 'hidden';

			if (currentNum <= 0) return;
			var imgEl = this.getElementsByTagName('img')[0];
			var imgEl2 = menuLink[currentNum - 1].getElementsByTagName('img')[0];
			if ((num + 1) != currentNum) {
				if (imgEl && imgEl.src.indexOf('_on.gif') != -1) imgEl.src = imgEl.src.replace('_on.gif', '_off.gif');
				if (imgEl2 && imgEl2.src.indexOf('_off.gif') != -1) imgEl2.src = imgEl2.src.replace('_off.gif', '_on.gif');
			}
		});
		menuLink[num].onclick = function(){
			for(var i=0; i<menu.length; i++){
				var imgEl = menuLink[i].getElementsByTagName('img')[0];
				if(i == num){
					if (menu[i].className.indexOf('visible') == -1) addClass(menu[i],'visible');		// 활성화 된 메뉴에 class추가
					if (imgEl && imgEl.src.indexOf('_on.gif') == -1) imgEl.src = imgEl.src.replace('_off.gif', '_on.gif');	// 대메뉴 이미지 오버
					if(submenu[i]) {
						submenu[i].style.visibility = 'hidden';
						subImgOver(i);								// 보여지는 서브메뉴의 메뉴들에게 이벤트를 지정
					}
				} else {
					removeClass(menu[i],'visible');
					if (imgEl) imgEl.src = imgEl.src.replace('_on.gif', '_off.gif');
					if(submenu[i]) {
						submenu[i].style.visibility = 'hidden';
					}
				}
			}
		}
	};
	var subImgOver = function(num){
		submenuLink = submenu[num].getElementsByTagName('a');
		for(var i=0; i<submenuLink.length; i++){
			submenuLink[i].onmouseover = function(){
				var imgEl = this.getElementsByTagName('img')[0];
				if (this.className.indexOf('on') == -1) addClass(this,' on');
				if (imgEl && imgEl.src.indexOf('_on.gif') == -1) imgEl.src = imgEl.src.replace('_off.gif', '_on.gif');
			}
			submenuLink[i].onmouseout = function(){
				var imgEl = this.getElementsByTagName('img')[0];
				removeClass(this,'on');
				if (imgEl) imgEl.src = imgEl.src.replace('_on.gif', '_off.gif');
			}
			if (subCurrentNum && num == (currentNum - 1)) {				// 서브메뉴 활성화가 지정된 경우 && 현재 보여지는 서브메뉴가 활성화된 대메뉴 일 경우
				var subCurrentMenu = submenuLink[subCurrentNum - 1];
				if(!subCurrentMenu) return;
				var subCurrentImage = subCurrentMenu.getElementsByTagName('img')[0];
				if(subCurrentMenu.className.indexOf('on') == -1) addClass(subCurrentMenu,' on');
				if (subCurrentImage && subCurrentImage.src.indexOf('_on.gif') == -1) subCurrentImage.src = subCurrentImage.src.replace('_off.gif', '_on.gif');
				/*
				subCurrentMenu.onmouseout = function(){
					return false;
				}
				*/
			}
		}
	}
	initialize();
}

/* main tab */
function tabMenu(id,currentNum) {
	var objAnchor = [], objLink = [];
	var ID = document.getElementById(id);
	var objLI = ID.getElementsByTagName('li');

	var initialize2 = function() {
		for (var i=0; i<objLI.length; i++) {
			objLink[i] = objLI[i].getElementsByTagName('a')[0];
			objAnchor[i] = document.getElementById(objLink[i].getAttribute('href').split('#')[1]);

			if (i != 0)
				objAnchor[i].className += ' hidden';
			else
				objLink[i].parentNode.className += ' visible';

			objEvent(i);
		}
		if (currentNum) objLink[currentNum-1].onclick();
	};

	var objEvent = function(num) {
		objLink[num].onclick = function() {
			for (var i=0; i<objLI.length; i++) {
				var imgEl = objLink[i].getElementsByTagName('img')[0]
				if (i == num) {
					if (imgEl) imgEl.src = imgEl.src.replace('_off.gif', '_on.gif');
					if (objLink[i].parentNode.className.indexOf('visible') == -1)
						objLink[i].parentNode.className += ' visible';
					objAnchor[i].className = objAnchor[i].className.replace('hidden', '');
				} else {
					if (imgEl) imgEl.src = imgEl.src.replace('_on.gif', '_off.gif');
					objLink[i].parentNode.className = objLink[i].parentNode.className.replace('visible', '');
					if (objAnchor[i].className.indexOf('hidden') == -1)
						objAnchor[i].className += ' hidden';
				}
			}
			return false;
		}
	};

	initialize2();
}
