var RANKUP_MENU = Class.create({
	initialize: function() {
		this.menu_mode = "text"; // { text | image }
		this.menu_frame = null;
		this.menu_class = null; // 메뉴 CSS 클래스
		this.open_menu = null; // 오픈된 메뉴
		this.hover_menu = null; // 오버된 메뉴
		this.browser = browser; // browser 는 common.js 에 정의됨
		this.menu_names = new Array(); // 메뉴 이름
		this.menu_items = new Array(); // 메뉴 아이템
		this.menu_infos = {}; // 메뉴 정보
		this.load_menu_item();
	},
	// 메뉴 아이템 로드
	load_menu_item: function() {
		var classObj = this;
		var url = domain+"Libs/_js/load_category_item.ajax.php?mode=load_menu_item";
		new Ajax.Request(url, {
			mthod: 'get',
			onSuccess: function(transport) {
				var sections = transport.responseXML.getElementsByTagName('section');
				for(var i=0; i<sections.length; i++) {
					var section = sections[i];
					var section_code = section.getAttribute('code');
					var section_text = section.getElementsByTagName('text')[0].firstChild.nodeValue;
					classObj.menu_names[section_code] = section_text;
					classObj.menu_items[section_code] = section_text;

					// category 노드가 존재하는지 체크
					var section_child = new Array();
					var categories = section.getElementsByTagName('category');
					for(var j=0; j<categories.length; j++) {
						var category = categories[j];
						var category_code = category.getAttribute('code');
						var category_text = category.getElementsByTagName('text')[0].firstChild.nodeValue;
						classObj.menu_names[category_code] = category_text;
						section_child.push({'code':category_code, 'text':category_text});

						// item 노드가 존재하는지 체크
						var category_child = new Array();
						var items = category.getElementsByTagName('item');
						for(var k=0; k<items.length; k++) {
							var item = items[k];
							var item_code = item.getAttribute('code');
							var item_text = item.firstChild.nodeValue;
							classObj.menu_names[item_code] = item_text;
							category_child.push({'code':item_code, 'text':item_text});
						}
						classObj.menu_items[category_code] = {'text':category_text, 'child': category_child};
					}
					classObj.menu_items[section_code] = {'text':section_text, 'child': section_child};
				}
				/*
				if(browser.kind=="GEKO") {
					classObj.draw_sub_menu(classObj.menu_infos.section);
					classObj.draw_left_menu('left_menu_title', 'left_menu_item');
					classObj.draw_page_locale({element: 'location', locale: 'div[class="left"]', rss: 'div[class="right"]' });
					$('photobox_title').innerHTML = $('moviebox_title').innerHTML = classObj.menu_items[classObj.menu_infos.category].text;
				}
				*/
			}
		});
	},
	// 마우스 오버시 메뉴스킨
	get_hover_skin: function(menu_item) {
		var menu_class = (this.menu_mode=="text") ? "br_x topmenu_tp_over" : "br_x bp_b topmenu_ip_over";
		if(this.browser.kind=="IE" && this.browser.version<7) {
			var hover_skin = "\
			<table cellpadding='0' cellspacing='0' height='35'>\
			<tr>\
				<td width='3' valign='bottom'><div style='filter:\"progid:DXImageTransform.Microsoft.AlphaImageLoader(src="+domain+"images/top_menu_over_bg1.png)\";height:1px;width:3px;'></div></td>\
				<td background='"+domain+"images/top_menu_over_bg2.gif' class='"+menu_class+"'>"+menu_item.innerHTML+"</td>\
				<td width='3' valign='bottom'><div style='filter:\"progid:DXImageTransform.Microsoft.AlphaImageLoader(src="+domain+"images/top_menu_over_bg3.png)\";height:1px;width:3px;'></div></td>\
			</tr>\
			</table>";
		}
		else {
			var hover_skin = "\
			<table cellpadding='0' cellspacing='0' height='35'>\
			<tr>\
				<td width='3' valign='bottom'><img src='"+domain+"images/top_menu_over_bg1.png'></td>\
				<td background='"+domain+"images/top_menu_over_bg2.gif' class='"+menu_class+"'>"+menu_item.innerHTML+"</td>\
				<td width='3' valign='bottom'><img src='"+domain+"images/top_menu_over_bg3.png'></td>\
			</tr>\
			</table>";
		}
 		return hover_skin;
	},
	// 마우스 오버시 메뉴효과
	hover_item: function(event, init) {
		if(init==true) var el = event;
		else {
			var el = Event.element(event);
			while(!el.tagName.match(/th/i)) el = el.parentNode;
		}
		if(el.className=='') return false;

		// 기존 오버된 메뉴 복구
		if(rankup_menu.hover_menu!=null) {
			var recover_item = rankup_menu.hover_menu;
			recover_item.className = rankup_menu.menu_class;
			var menu_item = rankup_menu.hover_menu.getElementsByTagName('a')[0];
			menu_item.className = 'topmenu';
			if(rankup_menu.menu_mode=="image") {
				var menu_img = menu_item.getElementsByTagName('img')[0];
				var normal_img = menu_img.getAttribute('default');
				if(normal_img.match(/.png/) && rankup_menu.browser.kind=="IE" && rankup_menu.browser.version<7) menu_img.style.filter = menu_img.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src='+normal_img+')';
				else menu_img.src = normal_img;
			}
			recover_item.update(menu_item.parentNode.innerHTML);
		}
		// 서브메뉴 그리기
		/<!--section:(.*)-->/.exec(el.innerHTML);
		rankup_menu.draw_sub_menu(RegExp.$1);

		// 현재 오버된 메뉴의 서브메뉴 보이기
		var item = el.getElementsByTagName('a')[0];
		item.className = 'topmenu_over';
		if(rankup_menu.menu_mode=="image") {
			var menu_img = el.getElementsByTagName('img')[0];
			var hover_img = menu_img.getAttribute('hover');
			if(menu_img.getAttribute('default')==null) menu_img.setAttribute('default', menu_img.src);
			if(hover_img.match(/.png/) && rankup_menu.browser.kind=="IE" && rankup_menu.browser.version<7) menu_img.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src='+hover_img+')';
			else menu_img.src = hover_img;
		}
		el.update(rankup_menu.get_hover_skin(el));
		el.removeClassName(el.className);
		rankup_menu.hover_menu = el;
	},
	// 마우스 오버시 서브메뉴 생성
	draw_sub_menu: function(section) {
		if(section==undefined || this.menu_names=='') {
			setTimeout(function() { rankup_menu.draw_sub_menu(section) }, 0);
			return false;
		}
		var obj = $('sub_menu_item'); obj.update('');
		if(this.menu_items[section]==undefined) return;
		for(var i=0; i<this.menu_items[section].child.length; i++) {
			var category = this.menu_items[section].child[i]; // category { code | text }
			/*if(obj.innerHTML) {
				var new_binder = document.createElement('span');
				new_binder.innerHTML = "<img src='"+domain+"images/top_menu_dot.gif' hspace='8' vspace='5'>";
				obj.appendChild(new_binder);
			}*/
			var new_item = document.createElement('a');
			if(section.match(/b[0-9]{1,}/i)) new_item.href = domain+"board/index.html?id="+category.code;
			else new_item.href = domain+"news/index.html?section="+section+"&category="+category.code;
			new_item.innerHTML = "<nobr style='margin-right:3px'><img src='"+domain+"images/top_menu_dot.gif' hspace='4' vspace='5'>"+ category.text+"</nobr>";
			new_item.style.display = "inline-block";
			if(this.menu_infos.section==section && this.menu_infos.category==category.code) new_item.style.fontWeight = "bolder";
			obj.appendChild(new_item);
		}
	},
	// 좌측 서브메뉴 생성
	draw_left_menu: function(menu_title, menu_item) {
		var obj = $(menu_item);
		if(obj==null) return false;
		var section = this.menu_infos.section;
		if(section==undefined || this.menu_names=='') {
			setTimeout(function() { rankup_menu.draw_left_menu(menu_title, menu_item) }, 0);
			return false;
		}
		$(menu_title).innerHTML = this.menu_names[section]; // 타이틀 지정

		// 메뉴 항목이 존재하지 않을 경우 리턴
		if(this.menu_items[section]==undefined) return;
		for(var i=0; i<this.menu_items[section].child.length; i++) {
			var category = this.menu_items[section].child[i]; // category { code | text }
			var new_category = document.createElement('li');
			if(this.menu_infos.category==category.code) {
				new_category.className = "on";
				category.text = "<font class='ontxt'>"+category.text+"</font>";
			}
			new_category.innerHTML = "<a href='"+domain+"news/index.html?section="+section+"&category="+category.code+"'>"+category.text+"</a>";
			obj.appendChild(new_category);

			// 선택된 카테고리가 아닌경우 하위 섹션을 생성하지 않음
			if(!['theme_movie', 'theme_photo'].include(category.code) && this.menu_infos.category!=category.code) continue;

			// 메뉴 아이템
			if(this.menu_items[category.code].child.length) {
				// 포토/동영상 섹션의 3차섹션 출력 제한
				if(in_array(this.menu_infos.section, ['photo', 'movie']) && category.code.match(/[0-9]/)) continue;

				var new_category = document.createElement('li');
				new_category.className = "sec3";
				var new_ul_item = document.createElement('ul');
				for(var j=0; j<this.menu_items[category.code].child.length; j++) {
					var item = this.menu_items[category.code].child[j]; // item { code | text }
					var new_item = document.createElement('li');
					item.text = (this.menu_infos.item==item.code) ? "<font class='sec3_ontxt'>"+item.text+"</font>" : item.text;
					new_item.innerHTML = "<a href='"+domain+"news/index.html?section="+section+"&category="+category.code+"&item="+item.code+"'>"+item.text+"</a>";
					new_ul_item.appendChild(new_item);
				}
				new_category.appendChild(new_ul_item);
				obj.appendChild(new_category);
			}
		}
	},
	// 로케일 설정 - RSS 링크 설정
	draw_page_locale: function(locale_infos) {
		with(this.menu_infos) {
			if(section==undefined || this.menu_names=='') {
				setTimeout(function() { rankup_menu.draw_page_locale(locale_infos) }, 0);
				return false;
			}
			var el = $(locale_infos.element);
			var locale = "<a href='"+domain+"main/index.html'>홈</a>"; // 1차
			var query_string = "?section=" + section;
			if(!category) locale += " &gt; <b>"+this.menu_names[section]+"</b>"; // 2차
			else {
				locale += " &gt; <a href='./index.html"+query_string+"'>"+this.menu_names[section]+"</a>";
				query_string += "&category=" + category;
				if(!item || item==0) locale += " &gt; <b>"+this.menu_names[category]+"</b>"; // 3차
				else {
					locale += " &gt; <a href='./index.html"+query_string+"'>"+this.menu_names[category]+"</a>";
					locale += " &gt; <b>"+this.menu_names[item]+"</b>";
					query_string += "&item=" + item;
				}
			}
		}
		el.getElementsBySelector(locale_infos.locale)[0].update(locale);
		if(locale_infos.rss!=null) {
			var rss = el.getElementsBySelector(locale_infos.rss)[0];
			if(rss!==undefined && rss.id.match(/rss/i)) {
				var obj = rss.getElementsByTagName('a')[0];
				obj.href = domain+"rankup_module/rankup_rss/index.html"+query_string;
				Event.observe(obj, 'click', function(event) {
					var el = Event.element(event).parentNode;
					window.clipboardData.setData('text', el.href);
					alerts('RSS 주소가 복사되었습니다.');
				});
			}
		}
	},
	// 오픈메뉴 설정
	set_open_menu: function(obj) {
		this.open_menu = obj;
		this.hover_item(obj, true);
	},
	// 메뉴 이벤트 할당
	append_event: function(el) {
		var classObj = this;
		rankup_setPng24(el); // PNG 투명이미지 처리 - common.js 에 정의

		this.menu_frame = $(el);
		this.menu_frame.getElementsBySelector('th').each(function(menu) {
			menu.style.cursor = "pointer";
			Event.observe(menu, 'mouseover', classObj.hover_item);
			/<!--section:(.*)-->/.exec(menu.innerHTML);
			var section = RegExp.$1;
			if(section==classObj.menu_infos.section) {
				// 오픈메뉴 설정
				classObj.set_open_menu(menu);
			}
		});
		// 서브메뉴 그리기
		this.draw_sub_menu(this.menu_infos.section);
	},
	// 뉴스 카테고리 출력 - 응용편
	append_category: function(el) {
		var obj = $(el);
		var categories = obj.getAttribute('info').split(/\|/);
		if(this.menu_names=='') {
			setTimeout(function() { rankup_menu.append_category(el) }, 0);
			return false;
		}
		var cate_text = this.menu_names[categories[0]] +'>'+ this.menu_names[categories[1]] +'>'+ this.menu_names[categories[2]];
		new Insertion.Before(obj, cate_text);
		obj.parentNode.removeChild(obj);
	}
});

var rankup_menu = new RANKUP_MENU;
