var DOM = YAHOO.util.Dom,
	EVENT = YAHOO.util.Event,
	SELECTOR = YAHOO.util.Selector,
	CONNECT = YAHOO.util.Connect;

var favoriteAsHtml = '',
	epiAsHtml = '',
	girlAsHtml = '';

function ajaxRequest(url, sPostData, succFunc, failFunc, preFunc, postFunc) {
	CONNECT.initHeader('Charset', 'UTF-8');
	CONNECT.asyncRequest('POST', url, {
		success: function(o) {
			if(o.argument[2]) (o.argument[2])(o);

			if(o.responseXML !== undefined) {
				var root = o.responseXML.documentElement; 
				var error = root.getElementsByTagName('error');

				if(error.length != 0) {
					alert(error[0].getElementsByTagName('message')[0].firstChild.nodeValue);
				} else {
					if(o.argument[0]) (o.argument[0])(o);
				}
			} else {
				alert('오류가 발생했습니다');
			}

			if(o.argument[3]) (o.argument[3])(o);
		},
		failure: function(o) {
			if(o.argument[2]) (o.argument[2])(o);

			if(o.argument[1]) (o.argument[1])(o);

			//alert(o.status+': '+o.statusText);

			if(o.argument[3]) (o.argument[3])(o);
		},
		argument: [succFunc, failFunc, preFunc, postFunc]
	}, sPostData);
}

function ajaxUpdater(id, url, sPostData) {
	ajaxRequest(url, sPostData, function(o) {
		var root = o.responseXML.documentElement; 
		var result = root.getElementsByTagName('result')[0].firstChild.nodeValue;

		DOM.get(id).innerHTML = result;
	});
}

function domUpdater(id, selectedIndex) {
	var o;

	o = SELECTOR.query('.utility li', id);

	for(var i = 0, cnt_i = o.length; i < cnt_i; i ++) {
		if(! DOM.hasClass(o[i], 'li'+selectedIndex)) {
			DOM.removeClass(o[i], 'selected');
		} else {
			DOM.addClass(o[i], 'selected');
		}
	}

	o = SELECTOR.query('.subView', id);

	for(var i = 0, cnt_i = o.length; i < cnt_i; i ++) {
		if(! DOM.hasClass(o[i], 'div'+selectedIndex)) {
			DOM.setStyle(o[i], 'display', 'none');
		} else {
			DOM.setStyle(o[i], 'display', 'inline');
		}
	}

}

function bookmarkSite(title, url) {
	if (window.sidebar) { // firefox 
		window.sidebar.addPanel(title, url, ""); 
	} else if(window.opera && window.print) { // opera 
		var elem = document.createElement('a'); 
		elem.setAttribute('href',url); 
		elem.setAttribute('title',title); 
		elem.setAttribute('rel','sidebar'); 
		elem.click(); 
	} else if(document.all) { // ie
		window.external.AddFavorite(url, title);
	}
}

function setHomepage(f, url) {
	f.style.behavior='url(#default#homepage)';
	f.setHomePage(url);
}

function openChatWindow() {
	var room = 'common';
	if(arguments.length == 1)
		room = arguments[0];
	window.open('/core/chat?room='+room, 'chatWindow', 'width=640, height=420, scrollbars=0');
}

function openMemoWindow() {
	var o = DOM.get('memberPopup');

	if(o) {
		o.parentNode.removeChild(o);
		o = null;
	}

	if(arguments.length == 0)
		window.open('/bbs/memo.php', 'memoWindow', 'left=50, top=50, width=620, height=460, scrollbars=1');
	else if(arguments.length == 1)
		window.open('/bbs/memo_form.php?me_recv_mb_id=' + arguments[0], 'memoWindow', 'left=50, top=50, width=620, height=460, scrollbars=1');
}

function openProfileWindow(memberId) {
	var o = DOM.get('memberPopup');

	if(o) {
		o.parentNode.removeChild(o);
		o = null;
	}

	window.open('/bbs/profile.php?mb_id='+memberId, 'profileWindow', 'left=50, top=50, width=620, height=510, scrollbars=1');
}

function openMemberPopup(memberId, el) {
	var pos = DOM.getXY(el),
		o = DOM.get('memberPopup'),
		str = '';

	if(! o) {
		o = document.createElement('UL');
		o.id = 'memberPopup';
		str += '<li><a href="javascript: openMemoWindow(\''+memberId+'\');">쪽지보내기</a></li>';
		str += '<li><a href="javascript: openProfileWindow(\''+memberId+'\');">자기소개</a></li>';

		var matched = location.href.match(/bo_table=([^&]+)/i);
		if(matched)
			str += '<li><a href="/bbs/board.php?bo_table='+matched[1]+'&sca=&sfl=mb_id,1&stx='+memberId+'">작성글 보기</a></li>';

		o.innerHTML = str;
		o.style.left = pos[0]+'px';
		o.style.top = pos[1]+el.offsetHeight+2+'px';
		document.body.appendChild(o);
	}
}

function toggleSubmenuPopup(el, prefix, html) {
	if (html.length == 0) return false;

	var pos = DOM.getXY(el);
	var o = DOM.get(prefix + 'Popup');
	var str = '';

	if(! o) {
		o = document.createElement('DIV');
		o.id = prefix + 'Popup';
		o.className = 'submenuPopup';
		str += '<div class="frame120"><div class="frame120Top"></div><div class="frame120Mid">';
		str += '<div class="utility"><a href="javascript:;" onclick="toggleSubmenuPopup(this, \'' + prefix + '\', ' + prefix + 'AsHtml);">닫기</a></div>';
		str += '<ul>';
		str += html;
		str += '</ul>';
		str += '</div><div class="frame120Bot"></div></div>';
		o.innerHTML = str;
		o.style.left = pos[0]+el.offsetWidth+'px';
		o.style.top = pos[1]+'px';
		document.body.appendChild(o);
	} else {
		o.parentNode.removeChild(o);
	}
}

var oSubMenu = null,
	oTopMenu = null,
	sCurid = '';

function onSubmenu(obj, postfix) {
	if (!obj) return false;

	oSubMenu = DOM.get('submenu' + postfix);
	if (!oSubMenu) return false;

	oTopMenu = obj;
	DOM.setStyle(oSubMenu, 'display', 'block');
	if (!DOM.hasClass(oTopMenu.parentNode, 'selected')) DOM.addClass(oTopMenu, 'hover');
}

function offSubmenu(obj, postfix) {
	setTimeout(function() {
		if (!sCurid || sCurid != 'submenu' + postfix) {
			DOM.removeClass(obj, 'hover');
			DOM.setStyle('submenu' + postfix, 'display', 'none');
		}
	}, 10);
}

function menuInit() {
	var aSubmenu = SELECTOR.query('.submenu', 'skin');
	if (aSubmenu.length == 0) return;

	EVENT.on(aSubmenu, 'mouseenter', function(e) {
		sCurid = this.id;
	});
	EVENT.on(aSubmenu, 'mouseleave', function(e) {
		sCurid = '';
		DOM.removeClass(oTopMenu, 'hover');
		DOM.setStyle(this, 'display', 'none');
	});
}

EVENT.onDOMReady(menuInit);

function setPng24(obj) {
	obj.width = obj.height = 1;
	obj.className = obj.className.replace(/png24/i,'');
	obj.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+ obj.src +"',sizingMethod='image');";
	obj.src = '';
	return '';
}

function fixFlashWmode() {
    var embeds = document.getElementsByTagName('embed');
    for(i = 0; i < embeds.length; i++)  {
        embed = embeds[i];
        var new_embed;

        if(embed.outerHTML) {
            var html = embed.outerHTML;

            if(html.match(/wmode\s*=\s*('|")[a-zA-Z]+('|")/i))
                new_embed = html.replace(/wmode\s*=\s*('|")window('|")/i,"wmode='transparent'");
            else 
                new_embed = html.replace(/<embed\s/i,"<embed wmode='transparent' ");

            embed.insertAdjacentHTML('beforeBegin',new_embed);
            embed.parentNode.removeChild(embed);
        } else {
            new_embed = embed.cloneNode(true);
            if(!new_embed.getAttribute('wmode') || new_embed.getAttribute('wmode').toLowerCase()=='window')
                new_embed.setAttribute('wmode','transparent');
            embed.parentNode.replaceChild(new_embed,embed);
        }
    }

    var objects = document.getElementsByTagName('object');
    for(i=0; i<objects.length; i++) {
        object = objects[i];
        var new_object;

        if(object.outerHTML) {
            var html = object.outerHTML;

            if(html.match(/<param\s+name\s*=\s*('|")wmode('|")\s+value\s*=\s*('|")[a-zA-Z]+('|")\s*\/?\>/i))
                new_object = html.replace(/<param\s+name\s*=\s*('|")wmode('|")\s+value\s*=\s*('|")window('|")\s*\/?\>/i,"<param name='wmode' value='transparent' />");
            else 
                new_object = html.replace(/<\/object\>/i,"<param name='wmode' value='transparent' />\n</object>");

            var children = object.childNodes;
            for(j=0; j<children.length; j++) {
                if(children[j].getAttribute('name').match(/flashvars/i)) {
                    new_object = html.replace(/<param\s+name\s*=\s*('|")flashvars('|")\s+value\s*=\s*('|")[^'"]*('|")\s*\/?\>/i,"<param name='flashvars' value='"+children[j].getAttribute('value')+"' />");
                }
            }
            object.insertAdjacentHTML('beforeBegin',new_object);
            object.parentNode.removeChild(object);
        }
    }
}

function switchTab(prefix, number) {
	var oTab = DOM.getElementsByClassName(prefix + 'Tab', 'div'),
		oButton = DOM.getElementsByClassName(prefix + 'TabButton', 'a');

	for (var i = 0, iCnt = oTab.length; i < iCnt; i++) {
		if (oTab[i].id == prefix + 'Tab' + number)
			DOM.setStyle(oTab[i], 'display', 'block');
		else
			DOM.setStyle(oTab[i], 'display', 'none');
	}

	for (var i = 0, iCnt = oButton.length; i < iCnt; i++) {
		if (oButton[i].id == prefix + 'TabButton' + number)
			DOM.addClass(oButton[i], 'selected');
		else
			DOM.removeClass(oButton[i], 'selected');
	}
}

function init() {
	var o;
	
	// 검색어
	var searchMsg = '검색어 입력';
	if(o = SELECTOR.query('.text', 'search', true)) {
		o.value = searchMsg;

		EVENT.on(o, 'focus', function(e) {
			var el = EVENT.getTarget(e);
			if(el.value && el.value == searchMsg) {
				el.value = '';
				DOM.setStyle(el, 'color', '#000');
			}
		});
		EVENT.on(o, 'blur', function(e) {
			var el = EVENT.getTarget(e);
			if(! el.value || (el.value && el.value.length == 0) ) {
				el.value = searchMsg;
				DOM.setStyle(el, 'color', '#999');
			}
		});
	}

	// 검색버튼
	if(o = SELECTOR.query('.submit', 'search', true)) {
		EVENT.on(o, 'mouseenter', function(e) {
			var el = EVENT.getTarget(e);
			DOM.setStyle(el, 'background', "url('/core/system/application/views/_common/_common/search-submit-hover.png') no-repeat");
		});
		EVENT.on(o, 'mouseleave', function(e) {
			var el = EVENT.getTarget(e);
			DOM.setStyle(el, 'background', '');
		});
	}

	// 회원 팝업메뉴가 떠있을 경우 다른 곳을 클릭하면 팝업을 닫는다
	EVENT.on(document.body, 'click', function(e) {
		var el = EVENT.getTarget(e);
		var o = DOM.get('memberPopup');

		if(el.tagName.toUpperCase() == 'A') {
			// 회원 팝업메뉴를 여는 anchor 태그이거나
			if(YAHOO.util.Dom.hasClass(el, 'forMemberPopup'))
				return;
			// 회원 팝업메뉴 내 anchor 태그이면 팝업을 닫지 않음
			if(YAHOO.util.Dom.getAncestorBy(el, function(el) {
				if(el == o)
					return true;

				return false;
			}))
				return;
		}

		if(o) {
			o.parentNode.removeChild(o);
			o = null;
		}
	});

}

EVENT.onDOMReady(init);
