
/*!
 * Yozm Javascript Framework, v0.1
 * Copyright (c) 2011 SNS FT Team, Front-end Technology Center, Daum Communications.
 * Licensed under Daum Common License : http://dna.daumcorp.com/forge/docs/daum-license-1.0.txt
 *
 * Includes jigu.js
 * Copyright (c) 2009 Front-end Technology Center, Daum Communications.
 * Project site: http://play.daumcorp.com/display/ftst/Jigu+Javascript+Framework
 * Licensed under Daum Common License : http://dna.daumcorp.com/forge/docs/daum-license-1.0.txt
 *
 * Date: 2011.03.10
 */
if (typeof(Yozm) == "undefined") {
    window.Yozm = {}
}

Yozm.Top = {
    currentTabNum: 0,
    currentKeywordNum: -1,
    currentSpecialPage: 1,
    
    start: function(callback){
        // javascript erorr 수집
        Yozm.Widget.JavascriptErrorManager.init();
        
        // 내부 검색 폼
        daum.Event.addEvent(daum.$("yozmSearch"), "submit", Yozm.Search.submitSarchQuery);
        // 통합검색 버튼 
        daum.Event.addEvent(daum.$("daumBtnSearchAll"), "click", Yozm.Search.submitTopSarchQuery);
        // 검색키워드 삽입		
        Yozm.Common.searchSuggest();
		
		if(typeof(callback)=="function"){
			callback();
		}
		
    },
    init: function(){
        // init liveYozm scrolling
        this.yozmScroll = new Yozm.Top.Scroll("liveYozmList", {
            delay: 3,
            duringTime: 1,
            frameRate: 60
        });
        // setting liveYozmTab
        this.setLiveYozmTab();
        // setting yozm Special
        this.yozmSpecialCount = daum.$$("div", daum.$("yozmSpecial")).length;
        if (daum.$("yozmSpecialCurrentIdx") && !isNaN(daum.$("yozmSpecialCurrentIdx").value)) {
            this.currentSpecialPage = daum.$("yozmSpecialCurrentIdx").value;
        }
        this.checkBanner();
    },
    setLiveYozmTab: function(){
        var tabList = daum.$$("li", daum.$("liveYozmTab"));
        
        for (var i = 0, len = tabList.length; i < len; i++) {
            if (daum.Element.hasClassName(tabList[i], "on")) {
                this.currentTabNum = i;
                break;
            }
        }
    },
    goMyYozm: function(url_name){
        document.location.href = "/" + url_name;
    },
    showJoinYozm: function(){
        Yozm.Common.CommonJoin();
    },
    loginYozm: function(){
        var url = "http://login.daum.net/accounts/loginform.do?category=yozm&url=" + encodeURIComponent(document.location + "?layer=join");
        document.location.href = url;
    },
    getLiveYozmUrl: function(tabNum){
        if (typeof tabNum == "undefined") {
            return;
        }
        
        var ajaxUrl = "getAskMessageJSON.json";
        switch (tabNum) {
            case 0: // 궁금해요
                ajaxUrl = "getAskMessageJSON.json";
                break;
            /*case 1: // 요즘이슈
                ajaxUrl = "getYozmIssueJSON.json";
                break;*/
            case 1: // 스타소식
                ajaxUrl = "getStarNewsJSON.json";
                break;
            case 2: // 요즘크루
                ajaxUrl = "getYozmcrewJSON.json";
                break;
            case 3: // 반려동물
                ajaxUrl = "getAnimalStoryJSON.json";
                break;
        }
        return ajaxUrl;
    },
    requestLiveYozm: function(tabNum){
        if (typeof tabNum == "undefined" || tabNum == this.currentTabNum) 
            return;
        
        var ajaxUrl = this.getLiveYozmUrl(tabNum);
        var ajaxObject = {
            url: "/talk/top/json/" + ajaxUrl,
            "tiara": true,
            progress: Yozm.Top.Status
        }
        var callback = this.responseLiveYozm.bind(this, tabNum);
        Yozm.Common.getJson(ajaxObject, callback);
    },
    responseLiveYozm: function(tabNum, data){
        if (data.result) {
            daum.$("liveYozmList").innerHTML = data.result;
            Yozm.Common.renderPng("liveYozmList");
            
            // removing old tab
            if (this.currentTabNum > -1) {
                daum.Element.removeClassName("liveTab" + this.currentTabNum, "on");
                daum.Element.hide("liveTitle" + this.currentTabNum);
            }
			// keyword yozm old tab
            if (this.currentKeywordNum > -1) {
                daum.Element.removeClassName("keywordTab" + this.currentKeywordNum, "on");
                daum.Element.hide("keywordTitle" + this.currentKeywordNum);
                daum.Element.hide("keywordReload");
                daum.Element.show("liveReload");
                this.currentKeywordNum = -1;
            }
            // setting current tab
            daum.Element.addClassName("liveTab" + tabNum, "on");
            daum.Element.show("liveTitle" + tabNum);
            this.currentTabNum = tabNum;
            
            // reset yozmScroll
            if (this.yozmScroll != null) 
                this.yozmScroll.resetScroll();
        }
        else {
            alert("데이터가 없습니다.");
        }
    },
    reloadLiveYozm: function(){
        var ajaxUrl = this.getLiveYozmUrl(this.currentTabNum);
        
        var ajaxObject = {
            url: "/talk/top/json/" + ajaxUrl,
            progress: Yozm.Top.Status
        }
        var callback = this.responseLiveYozm.bind(this, this.currentTabNum);
        Yozm.Common.getJson(ajaxObject, callback);
    },
    requestKeywordYozm: function(tabNum, themeId){
        if (typeof tabNum == "undefined" || tabNum == this.currentKeywordNum) 
            return;
        this.keywordAjaxUrl = "getYozmThinkThemeMessageJSON.json?yozmthinkthemeid=" + themeId;
        var ajaxObject = {
            url: "/talk/top/json/" + this.keywordAjaxUrl,
            "tiara": true,
            progress: Yozm.Top.Status
        }
        var callback = this.responseKeywordYozm.bind(this, tabNum);
        Yozm.Common.getJson(ajaxObject, callback);
    },
    responseKeywordYozm: function(tabNum, data){
        if (data.result) {
            daum.$("liveYozmList").innerHTML = data.result;
            Yozm.Common.renderPng("liveYozmList");
            // live yozm old tab
            if (this.currentTabNum > -1) {
                daum.Element.removeClassName("liveTab" + this.currentTabNum, "on");
                daum.Element.hide("liveTitle" + this.currentTabNum);
                daum.Element.hide("liveReload");
                daum.Element.show("keywordReload");
                this.currentTabNum = -1;
            }
            // keyword yozm old tab
            if (this.currentKeywordNum > -1) {
                daum.Element.removeClassName("keywordTab" + this.currentKeywordNum, "on");
                daum.Element.hide("keywordTitle" + this.currentKeywordNum);
            }
			 // setting current tab
            daum.Element.addClassName("keywordTab" + tabNum, "on");
            daum.Element.show("keywordTitle" + tabNum);
            this.currentKeywordNum = tabNum;
            
            // reset yozmScroll
            if (this.yozmScroll != null) 
                this.yozmScroll.resetScroll();
        }
        else {
            alert("데이터가 없습니다.");
        }
    },
    reloadKeywordYozm: function(){
       
        var ajaxObject = {
            url: "/talk/top/json/" + this.keywordAjaxUrl,
            progress: Yozm.Top.Status
        }
        var callback = this.responseKeywordYozm.bind(this, this.currentKeywordNum);
        Yozm.Common.getJson(ajaxObject, callback);
    },
    /*키워드요즘-----*/
    specialPaging: function(direction){
        if (typeof direction == "undefined" || direction != "prev" && direction != "next") 
            return;
        daum.Element.hide(daum.$("specialItem" + this.currentSpecialPage));
        
        if (direction == "prev") {
            this.currentSpecialPage--;
            if (this.currentSpecialPage < 1) {
                this.currentSpecialPage = this.yozmSpecialCount;
            }
        }
        else 
            if (direction == "next") {
                this.currentSpecialPage++;
                if (this.currentSpecialPage > this.yozmSpecialCount) {
                    this.currentSpecialPage = 1;
                }
            }
        
        daum.Element.show(daum.$("specialItem" + this.currentSpecialPage));
    },
    checkBanner: function(){
        var topBannerLayer = daum.$("topBannerLayer");
        if (!topBannerLayer) 
            return;
        
        var type = daum.Browser.getCookie("topBannerLayer");
        if (type != "off") {
            topBannerLayer.className = "layer_event_on";
        }
    },
    closeBanner: function(){
        var topBannerLayer = daum.$("topBannerLayer");
        if (!topBannerLayer) 
            return;
        
        topBannerLayer.className = "layer_event_off";
        daum.Browser.setCookie("topBannerLayer", "off", 30);
    },
	initGoTopBtn: function(){
		if(daum.Browser.ie6){
			return;
		}
		var button = daum.createElement('<button style="position:fixed;bottom:50%;width:57px;height:24px;text-indent:-9999px;background:url(http://i1.daumcdn.net/icon/keroro/search/btn_gotop.gif) 0 0 no-repeat;display:none;">맨위로</button>');
		var wrap = $("daumWrap");
		var offset = daum.Element.getCoords(wrap);
		button.style.left = (offset.right + 30).px();
		document.body.appendChild(button);
		daum.Event.addEvent(button, "click", function(e){
			if(daum.Browser.cr){
				document.body.scrollTop= 0;
			}else{
				document.documentElement.scrollTop= 0;
			}
		});
		
		daum.Event.addEvent(window, "scroll", function(e){
			var scrollTop = daum.Browser.getScrollOffsets().top;
			if(scrollTop>800 && !daum.Element.visible(button)){
				daum.Effects.fadeIn(button);
			}else if(scrollTop<800 && daum.Element.visible(button)){
				daum.Element.hide(button);
			}
		});
	}
}

Yozm.Top.Status = {
    id: "topLoadingLayer",
    completed: false,
    show: function(msg, _option){
        this.completed = false;
        var self = this;
        window.setTimeout(function(){
            if (!self.completed) {
                self.render();
            }
        }, 1000);
    },
    render: function(){
        if (daum.$(this.id)) {
            daum.Element.show(this.id);
        }
    },
    hide: function(){
        this.completed = true;
        try {
            if (daum.$(this.id)) {
                daum.Element.hide(this.id);
            }
        } 
        catch (e) {
        }
        window.status = "";
    }
}

Yozm.Top.Scroll = function(targetEl, option){
    this.targetEl = daum.$(targetEl);
    if (!this.targetEl) 
        return;
    var _option = (typeof option == "object") ? option : {};
    
    this.itemLength = 0;
    this.displayItemCount = 0;
    this.viewScrollHeight = 0;
    this.distance = 0;
    this.addedDistance = 0;
    this.direction = -1;
    this.delay = _option.delay || 2;
    this.duringTime = _option.duringTime || 1;
    this.frameRate = _option.frameRate || 60;
    
    this.looping = false;
    this.loopCount = 0;
    this.maxLoopCount = 1;
    this.timeId = null;
    this.processTimeId = null;
    this.moveTimeId = null;
    this.stopAnimate = false;
    
    this.init();
    this.registEvent();
}
.members({
    init: function(){
        var item = daum.Element.getChildElements(this.targetEl);
        var lastItem = daum.Element.getLastChild(this.targetEl);
        var itemLength = this.itemLength = item.length;
        var targetHeight, itemHeight, borderWidth, displayItemCount, i, length;
        
        if (itemLength < 1) {
            return;
        }
        
        targetHeight = parseInt(daum.Element.getStyle(this.targetEl, 'height'));
        borderWidth = (parseInt(daum.Element.getStyle(lastItem, 'border-top-width')) || 0) + (parseInt(daum.Element.getStyle(lastItem, 'border-bottom-width')) || 0);
        paddingWidth = (parseInt(daum.Element.getStyle(lastItem, 'padding-top')) || 0) + (parseInt(daum.Element.getStyle(lastItem, 'padding-bottom')) || 0);
        this.distance = itemHeight = borderWidth + paddingWidth + parseInt(daum.Element.getStyle(lastItem, 'height'));
        this.displayItemCount = Math.ceil(targetHeight / itemHeight);
        this.viewScrollHeight = this.distance * this.displayItemCount;
        
        if (this.itemLength > this.displayItemCount) {
            this.actionComplete();
        }
    },
    resetScroll: function(){
        if (this.timeId) {
            window.clearTimeout(this.timeId);
            window.clearTimeout(this.processTimeId);
        }
        
        this.itemLength = daum.Element.getChildElements(this.targetEl).length;
        this.stopAnimate = false;
        this.looping = false;
        this.loopCount = 0;
        this.targetEl.scrollTop = 0;
        
        this.actionComplete();
    },
    registEvent: function(){
        daum.Event.addEvent(this.targetEl, 'mouseover', Yozm.Common.mouseEnter(this.enterScrollArea.bind(this)));
        daum.Event.addEvent(this.targetEl, 'mouseout', Yozm.Common.mouseEnter(this.leaveScrollArea.bind(this)));
    },
    enterScrollArea: function(){
        this.stopAnimate = true;
    },
    leaveScrollArea: function(){
        this.stopAnimate = false;
        this.actionComplete();
    },
    actionComplete: function(){
        if (this.stopAnimate) {
            return;
        }
        var target = this.targetEl;
        var scrollTop = target.scrollTop;
        var scrollHeight = target.scrollHeight - this.viewScrollHeight;
        var clientHeight = target.clientHeight;
        
        if (scrollTop < this.distance + this.addedDistance) {
            if (this.loopCount < this.maxLoopCount) {
                this.setScrollTop(target, scrollHeight);
            }
            else {
                return;
            }
        }
        
        this.scroll();
    },
    setScrollTop: function(target, y){
        if (y !== undefined) {
            target.scrollTop = y;
        }
        return target.scrollTop;
    },
    scroll: function(){
        var start = this.setScrollTop(this.targetEl); //current scroll position
        var end = (this.distance + this.addedDistance) * this.direction + start;
        
        this.execute(start, end);
    },
    execute: function(start, end){
        if (!this.looping) {
            this.looping = true;
            this.timeId = window.setTimeout(function(){
                this.moveinfo = {
                    startTime: (new Date() - 0),
                    duringTime: this.duringTime * 1000,
                    start: start,
                    end: end
                };
                
                this.process();
            }
.bind(this), this.delay * 1000);
        }
    },
    process: function(){
        var t = (new Date() - this.moveinfo.startTime);
        var d = this.moveinfo.duringTime;
        
        if (t < d) {
            var val = this.easeInOutQuad(t, this.moveinfo.start, this.moveinfo.end - this.moveinfo.start, d);
            try {
                this.setScrollTop(this.targetEl, val);
            } 
            catch (err) {
            }
            
            this.processTimeId = this.process.timeout(1000 / this.frameRate, this);
        }
        else {
            try {
                this.setScrollTop(this.targetEl, this.moveinfo.end);
            } 
            catch (err) {
            }
            this.looping = false;
            this.loopCount++;
            this.actionComplete();
        }
    },
    easeInOutQuad: function(t, b, c, d){
        if ((t /= d / 2) < 1) {
            return c / 2 * t * t + b;
        }
        return -c / 2 * ((--t) * (t - 2) - 1) + b;
    }
});

Yozm.Search = {
    init: function(){
        Yozm.Search.SideBarSearch.init();
        Yozm.Search.MyKeyword.init();
        Yozm.Search.PopularFriends.init();
    },
    addMykeyword: function(keyword){
        if (ENV.viewerError == -2) {
            Yozm.Common.CommonJoin();
        }
        else 
            if (ENV.viewerError == -1) {
                Yozm.Common.CommonLogin();
            }
            else {
                Yozm.Search.MyKeyword.add(keyword);
            }
    },
    deleteMykeyword: function(keywordId, keyword){
        Yozm.Search.MyKeyword.del(keywordId, keyword);
    },
    getParams: function(url){
        var r = {}, t = [], i, a;
        if (url.indexOf("?") > -1) {
            a = url.split("?")[1].split('&');
            for (i = 0; i < a.length; i += 1) {
                t = a[i].split("=");
                r[t[0]] = t[1];
            }
        }
        return r;
    },
    changeParams: function(url, obj){
        var r = [];
        for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
                r.push(key + "=" + obj[key]);
            }
        }
        return "/search/top?" + r.join("&");
    },
    submitQuery: function(e){
        daum.Event.preventDefault(e);
        var form = daum.Event.getElement(e);
        var query = form.q;
        Yozm.Search.doSearch(query.value);
    },
    submitSarchQuery: function(e){
        var form = daum.Event.getElement(e);
        var query = form.q;
        if (query && query.value.trim() == "") {
            var msg = {
                NO_KEYWORD: "검색어를 입력해주세요."
            };
            Yozm.Widget.MessageBox.alert(msg["NO_KEYWORD"], {
                callback: function(){
                    daum.$("yozmSearchQueryInput").focus();
                }
            });
            daum.Event.preventDefault(e);
            return false;
        }
    },
    submitTopSarchQuery: function(e){
        var query = $("yozmSearchQueryInput").value;
        window.open("http://search.daum.net/search?q=" + encodeURIComponent(query));
    },
    doSearch: function(query){
        var url = location.href;
        var params = Yozm.Search.getParams(url);
        params.q = encodeURIComponent(query);
        if (daum.$("useTotalSearch").value) {
            window.location.href = "/search/top?q=" + encodeURIComponent(query);
        }
        else {
            window.location.href = Yozm.Search.changeParams(url, params);
        }
    },
    setQuery: function(query){
        ENV.keyword = query;
        daum.$("yozmSearchQueryInput").value = query;
    }
};
Yozm.Search.SideBarSearch = (function(){
    var msg = {
        NO_KEYWORD: "검색어를 입력해주세요."
    }, isValid = function(url){
        var params = Yozm.Search.getParams(url).q;
        return (params && params.q !== "");
    }, check = function(target){
        if (ENV.keyword && ENV.keyword !== "") {
            var url = target.href;
            var params = Yozm.Search.getParams(url);
            params.q = encodeURIComponent(ENV.keyword);
            window.location.href = Yozm.Search.changeParams(url, params);
        }
        else {
            Yozm.Widget.MessageBox.alert(msg["NO_KEYWORD"], {
                callback: function(){
                    daum.$("yozmSearchQueryInput").focus();
                }
            })
            daum.Function.timeout(function(){
                Log.hide();
            }, 1000);
        }
    }, go = function(e){
        var target = daum.Event.getElement(e);
        if (isValid(target.href)) 
            return;
        daum.Event.preventDefault(e);
        check(target);
    };
    return {
        init: function(){
            var linkList = daum.$$("div.snb_search ul.list_search li a");
            if (isValid(linkList[0].href)) 
                return;
            linkList.each(function(link){
                daum.Event.addEvent(link, "click", daum.Function.bindAsEventListener(go));
            });
        }
    };
})();
Yozm.Search.MyKeyword = (function(){
    var template = {
        item: '<li id="searchKeyword-#{searchKeywordId}"><a href="#{link}">#{searchKeyword}</a><button onclick="Yozm.Search.deleteMykeyword(\'#{searchKeywordId}\', \'#{searchKeywordOrigin}\');return false;" class="delete_keyword_btn">삭제</button></li>',
        empty: '<li><span class="no_keyword">등록된 키워드가<br/>없습니다.</span></li>'
    }, msg = {
        ITEM_FULL: "더이상 추가할 수 없습니다.",
        ITEM_EXIST: "이미 추가하였습니다."
    }, el = {
        wrap: null,
        list: null
    }, limit = 15, open = function(){
        daum.Element.addClassName(el["wrap"], "my_keyword_on");
        daum.Element.removeClassName(el["wrap"], "my_keyword");
        daum.Element.hide(el["list"]);
        daum.Effects.slideDown(el["list"], "fast");
    }, close = function(){
        daum.Effects.slideUp(el["list"], "fast", function(){
            daum.Element.addClassName(el["wrap"], "my_keyword");
            daum.Element.removeClassName(el["wrap"], "my_keyword_on");
        });
    }, toggle = function(e){
        daum.Element.hasClassName(el["wrap"], "my_keyword") ? open() : close();
        daum.Event.preventDefault(e);
    }, checkAddable = function(keyword){
        var items = daum.$$("li a", el["list"]);
        var length = items.length;
        if (length >= limit) 
            return msg["ITEM_FULL"];
        for (var i = 0; i < length; ++i) {
            if (items[i].innerHTML === keyword) 
                return msg["ITEM_EXIST"];
        }
        return "";
    }, initEvent = function(listEl){
        var list = daum.$$("li", listEl);
        var eventName = new Array("mouseover", "mouseout");
        if (daum.Browser.ie) {
            eventName = new Array("mouseenter", "mouseleave");
        }
        list.each(function(item){
            var deleteBtn = daum.$C(item, "delete_keyword_btn")[0];
            daum.Event.addEvent(item, eventName[0], function(e){
                daum.Element.addClassName(item, "search_keyword_hover");
            });
            daum.Event.addEvent(item, eventName[1], function(e){
                daum.Element.removeClassName(item, "search_keyword_hover");
            });
        })
    };
    return {
        init: function(){
            var btnMyKeywords = daum.$("myKeywordsBtn");
            if (!btnMyKeywords) {
                return;
            }
            daum.Event.addEvent(btnMyKeywords, "click", daum.Function.bindAsEventListener(toggle));
            daum.Event.addEvent(document, "click", function(e){
                var target = daum.Event.getElement(e);
                if (target.id === "myKeywordsBtn") 
                    return;
                if (daum.Element.hasClassName(target, "btn_add_key")) 
                    return;
                close();
            });
            
            el["wrap"] = daum.Element.getParent(btnMyKeywords);
            el["list"] = daum.$$("ul.my_keyword_list", el["wrap"])[0];
            initEvent(el["list"]);
        },
        add: function(keyword){
            keyword = Yozm.Common.urlDecode(keyword);
            var btn = daum.$("addKeywordBtn");
            var msg = checkAddable(keyword);
            if (!daum.String.isEmpty(msg)) {
                Log.show(msg);
                daum.Function.timeout(function(){
                    Log.hide();
                }, 1000);
                return;
            }
            var req = {
                url: "/search/json/addFavoriteSearchKeyword.json",
                paramString: "keyword=" + encodeURIComponent(keyword)
            };
            var callback = function(json){
                var itemt = new daum.Template(template["item"]), html = "";
                daum.Array.each(json.userSearchKeywordList, function(obj){
                    html += itemt.evaluate({
                        searchKeywordId: obj.searchKeywordId,
                        searchKeyword: daum.String.escapeHTML(daum.String.cutString(obj.searchKeyword, 30, "...")),
                        searchKeywordOrigin: daum.String.escapeHTML(obj.searchKeyword),
                        link: '?q=' + encodeURIComponent(obj.searchKeyword)
                    });
                });
                el["list"].innerHTML = html;
                initEvent(el["list"]);
                open();
                if (daum.$("addKeywordBtn")) {
                    daum.Element.addClassName(daum.$("addKeywordBtn"), "dimmed_btn_add_key");
                }
            };
            var errorCallback = function(json){
                if (json.status == 400) {
                    Log.show("키워드는 10개까지만 등록할 수 있습니다.");
                    daum.Function.timeout(function(){
                        Log.hide();
                    }, 1000);
                }
            }
            Yozm.Common.getJson(req, callback, errorCallback);
        },
        del: function(keywordId, keyword){
            var req = {
                url: "/search/json/deleteFavoriteSearchKeyword.json",
                paramString: "searchkeywordid=" + keywordId
            };
            var callback = function(json){
                daum.$E("searchKeyword-" + keywordId).destroy();
                if (json.userSearchKeywordList.length == 0) {
                    el["list"].innerHTML = template["empty"];
                }
                
                if (daum.$("addKeywordBtn") && ENV.keyword == Yozm.Common.urlDecode(keyword)) {
                    daum.Element.removeClassName(daum.$("addKeywordBtn"), "dimmed_btn_add_key");
                }
            };
            Yozm.Common.getJson(req, callback);
        }
    };
})();
Yozm.Search.PopularFriends = (function(){
    var page = 0, size = 3, lastPage = null, itemList = null, length = null, display = function(type){
        var i = (page * size), n = Math.min(i + 3, length);
        for (; i < n; ++i) {
            daum.Element[type](itemList[i]);
        }
    }, go = function(direction){
        display("hide");
        page += direction;
        if (page < 0) {
            page = lastPage;
        }
        else 
            if (page > lastPage) {
                page = 0;
            }
        display("show");
    };
    return {
        init: function(){
            var wrapEl = daum.$$("div.theme_friend")[0];
            var btnPrev = daum.$$("button.prev", wrapEl)[0];
            if (btnPrev) {
                daum.Event.addEvent(btnPrev, "click", function(e){
                    go(-1);
                });
            }
            var btnNext = daum.$$("button.next", wrapEl)[0];
            if (btnNext) {
                daum.Event.addEvent(btnNext, "click", function(e){
                    go(1);
                });
            }
            itemList = daum.$$("ul.list_recommend li", wrapEl);
            length = itemList.length;
            lastPage = Math.floor((length - 1) / 3);
        }
    };
})();
Yozm.Search.Badge = {
    profileImageUploader: function(_badgeId){
        if (ENV.viewerError == "-1") {
            Yozm.Common.CommonLogin();
            return;
        }
        else 
            if (ENV.viewerError == "-2" || ENV.viewerError == "-3") {
                Yozm.Common.CommonJoin();
                return;
            }
        var badgeId = _badgeId || "";
        function goProfileImageUploader(){
            window.RoroPopWindow = window.open("/home/setting/ProfileImage?callback=Yozm.Search.Badge.uploadComplete&badgeId=" + badgeId, "profileImageUploader", "width=413,height=319");
        }
        var flag = false;
        try {
            flag = window.RoroPopWindow && window.RoroPopWindow.document;
        } 
        catch (e) {
        }
        if (flag) {
            Roro.Widget.MessageBox.confirm("현재 사진 변경하기 팝업이 떠 있습니다.<br />다시 열겠습니까?", {
                yes_callback: function(){
                    window.RoroPopWindow.close();
                    goProfileImageUploader();
                },
                no_callback: function(){
                }
            });
            return;
        }
        goProfileImageUploader();
    },
    uploadComplete: function(){
        /*
         var option= _option;
         var form = $("regist");
         form.image.value = option.image;
         form.smallImage.value = option.smallImage;
         form.originImage.value = option.originImage;
         form.miniImage.value = option.miniImage;
         form.imageWidth.value = option.imageWidth;
         form.imageHeight.value = option.imageHeight;
         form.imageX.value = option.imageX;
         form.imageY.value = option.imageY;
         form.badgeInfo.value = option.badgeInfo;
         form.compareImage.value = option.compareImage;
         if(form){
         form.submit();
         }
         RoroPopWindow.close();
         */
    }
}


/**
 * 테마 탑
 */
Yozm.Theme = {
	themeType: null,
	listParam: null,
	currentParam: null,
	themeListJson: {
		"popular": "GetFeaturedThemeListJSON.json",
		"event": "GetFeaturedThemeListJSON.json",
		"category": "GetCategoryThemeListJSON.json"	
	},
	init: function(themeType) {
		this.themeList = daum.$("themeList");
		this.themePageWrap = daum.$("themePageWrap");
		this.currentThemeEl = daum.$$("li.on", daum.$("themeTabWrap"))[0];
		
		// tab, page event
		daum.addEvent("themeTabWrap", "click", this.requestThemeList.bind(this));
		daum.addEvent("themePageWrap", "click", this.requestThemePage.bind(this));
		
		this.setThemeType(themeType);
		
		// right side yozm event
		new Yozm.Common.LoopPaging("yozmEvent");
	},
	setThemeType: function(themeType) {
		if (typeof(themeType) != "undefined") {
			this.themeType = themeType;
			
			switch(themeType) {
				case "popular":
					this.listParam = "tabType=popular";		
					break;
				case "event":
					this.listParam = "tabType=event";
					break;
				case "category":
					this.listParam = "cateid=0";
					break;
			}	
		} else { // default set popular
			this.themeType  = "popular";
			this.listParam = this.currentParam = "tabType=popular";
		}
	},
	requestThemeList: function(ev) {
		daum.Event.stopEvent(ev);
		
		var targetEl = daum.Event.getElement(ev);
		var param = "";
		var themeType = "";

		if (targetEl.tagName.toLowerCase() === "a") {
			param = this.listParam = targetEl.hash.substr(1);
			if (param.indexOf("popular") > -1) {
				themeType = "popular";
			} else if (param.indexOf("event") > -1) {
				themeType = "event";
			} else if (param.indexOf("cateId") > -1) {
				themeType = "category";
			}
			this.themeType = themeType;
		} else {
			return;
		}

		if (this.currentParam != param) {
			var ajaxObject = {
				url: "/talk/theme/json/"+ this.themeListJson[themeType],
				paramString: param,
				"tiara": true
				//progress: Yozm.Top.Status
			}
			this.currentParam = param;
			var callback = this.responseThemeList.bind(this, targetEl.parentNode);
			Yozm.Common.getJson(ajaxObject, callback);
		}
  	},
	responseThemeList: function(targetEl, data) {
		// removing old tab
		if (this.currentThemeEl) {
			daum.Element.removeClassName(this.currentThemeEl, "on");
		}
		
		// setting current tab
		daum.Element.addClassName(targetEl, "on");
		this.currentThemeEl = targetEl;
		
		if (data) {
			this.generateThemeList(data);	
		} else {
			this.themeList.innerHTML = "";
		}
	},
	generateThemeList: function(data) {
		this.themeList.innerHTML = data.result;
		this.themePageWrap.innerHTML = data.paging;
		if (daum.Browser.ie6) {
			Yozm.Common.renderPng("themeList");	
		}
	},
	requestThemePage: function(ev) {
		daum.Event.stopEvent(ev);
		
		var targetEl = daum.Event.getElement(ev);
		if (targetEl.tagName.toLowerCase() === "a") {
			var param = this.listParam +"&"+ targetEl.search.substr(1);
			var ajaxObject = {
				url: "/talk/theme/json/"+ this.themeListJson[this.themeType],
				paramString: param,
				"tiara": true
				//progress: Yozm.Top.Status
			}
			var callback = this.responseThemePage.bind(this);
			Yozm.Common.getJson(ajaxObject, callback);
		}
	},
	responseThemePage: function(data) {
		if (data) {
			this.generateThemeList(data);	
		} else {
			this.themeList.innerHTML = "";
		}
	}
}

Yozm.Common.LoopPaging = function(targetEl, option) {
	this.targetEl = daum.$(targetEl);
	if (!this.targetEl) { return; }
	var _option = option || {};
	
	this.onClassName = _option.onClassName || "on";
	this.offClassName = _option.offClassName || "off";
	this.currentPage = 1;
	this.totalCount = 0;

	this.init();
}.members({
	init: function() {
		var items = daum.Element.getChildElements(this.targetEl); 
		for (var i=0, len=items.length; i<len; i++) {
			if (items[i].id.indexOf(this.targetEl.id) > -1) {
				this.totalCount++;
			}
		}

		var btnArea = daum.$$(".btn_area", this.targetEl)[0];
		if (btnArea) {
			daum.addEvent(btnArea, "click", this.goPaging.bindAsEventListener(this));	
		}
	},
	goPaging: function(ev) {
		var button = daum.Event.getElement(ev);
		if (button.tagName.toLowerCase() == "button") {
			var direction = daum.Element.hasClassName(button, "btn_prev") ? "prev" : "next";	
		} else {
			return;
		}
		daum.Element.replaceClassName(daum.$(this.targetEl.id + this.currentPage), this.onClassName, this.offClassName);
		
		if (direction == "prev") {
			this.currentPage--;
			if (this.currentPage < 1) {
				this.currentPage = this.totalCount;
			}
		} else if (direction == "next") {
			this.currentPage++;
			if (this.currentPage > this.totalCount) {
				this.currentPage = 1;
			}
		}
		daum.Element.replaceClassName(daum.$(this.targetEl.id + this.currentPage), this.offClassName, this.onClassName);
	}
});


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// 테마뷰

daum.extend(Yozm.Theme, {
	tabId: null,
	themeType: "N",
	tabListEl: null,
	timeline: null,
	writer: null,
	writerWrap: null,
	isAgreePrivate: false,
	initView: function(params){
		this.tabId = params.tabId; 
		this.themeType = params.themeType;
		var selector = (this.themeType == "N") ? "div.tab_theme_view ul" : "ul.tab_theme_view";
		this.tabListEl = daum.$$(selector)[0]; 
		
		Yozm.Theme.MyTheme.init(params.themeId);
		
		this.configurePopularTheme();

		var defaultMsg = ThemeTabInfo[this.tabId].defaultMsg;
		var isKnowledge = ThemeTabInfo[this.tabId].isKnowledge;
		var voteType = ThemeTabInfo[this.tabId].voteType;
		
		this.timeline = new Yozm.Timeline.MessageTimeline("yozmTimeline", {
			moreIdxType : "B",
			getItemUrl : "/talk/theme/json/GetTabMessageListJSON.json",
			params : "tabId="+params.tabId,
			limit : 15,
			components : {
				moreBtn : daum.$("timelineMoreBtn")
			},
			callbacks: {
				deleteCallback: this.updateMessageCount.bind(this, "down")	
			}
		});
		this.tabGuideEl = daum.$("tabGuideText");
		this.writerWrap = daum.$$("div.theme_view_writing")[0];
		this.writer = new Yozm.Timeline.MessageWriter("themeMessageWriter", this.timeline, {
			sendMessageUrl: "/talk/theme/json/AddMessageForThemeTab.json",
			params: "tabId="+params.tabId,
			defaultMsg: defaultMsg,
			plugin : "All",
			callbacks: {
				beforeSendCallback: function() {
					var info = ThemeTabInfo[this.tabId];
					if (info.isEvent && !info.isAgreePrivate) {
						if (info.voteType == "A" && this.writer.elements.previewImg == null) {
							return;
						}
						this.writer.breakSendMessage();
						sendApplication(ThemeTabInfo[this.tabId].eventKey, ThemeTabInfo[this.tabId].eventId);	
					} 
				}.bind(this),
				sendCallback: this.updateMessageCount.bind(this, "up")
			}
		});
		if( isKnowledge ){
			var knowledgeBox = daum.createElement('<span class="btn_knowledge"><input type="checkbox" id="daumKnowledge"/> <label for="daumKnowledge">Daum 지식에 동시등록하기</label></span>');
			this.writer.addAttachBtn(knowledgeBox);
			this.writer.config.callbacks.setParamCallback = function(params){
				if(daum.$("daumKnowledge").checked){
					params.push("isKnowledge=true")
				}
			};
		}
		
		//voteTyep P: enquete, A: poll
		if (voteType=="P") {
            Yozm.Theme.ThemeVoteManager.select(params.tabId);
        }else if (voteType=="A") {
              Yozm.Theme.ThemePollManager.select(params.tabId);
        }

	},
	addMyTheme: function(themeId){
		if(ENV.viewerError==-2){
			Yozm.Common.CommonJoin();
		}else if(ENV.viewerError==-1){
			Yozm.Common.CommonLogin();
		}else{
			Yozm.Theme.MyTheme.add(themeId);
		}
	},
	deleteMyTheme: function(themeId){
		Yozm.Theme.MyTheme.del(themeId);
	},
	addFollow: function(btn, urlName){
		if (daum.Element.hasClassName(btn, "with_friend") || daum.Element.hasClassName(btn, "no_friend")) { return; }
		if(ENV.viewerError==-2){
			Yozm.Common.CommonJoin();
		}else if(ENV.viewerError==-1){
			Yozm.Common.CommonLogin();
		}else{
			Log.show("친구 등록 중입니다.");
			var url = "/" + urlName + "/addFollow.json";
			Yozm.Common.getJson(url, function(json){
				Log.hide();
				if (json.result == "both") {
					btn.className = "with_friend ir_indent";	
				} else {
					btn.className = "no_friend ir_indent";
				}
			}.bind(this));
		}
	},
	configurePopularTheme: function(){
		var el = {};
		el["wrap"] = daum.$$("div.box_popularity")[0];
		el["focusAnchor"] = daum.$$("a.thumb", el["wrap"])[0];
		el["focusImage"] = daum.$$("img", el["focusAnchor"])[0];
		el["focusTitle"] = daum.$$("em.tit", el["focusAnchor"])[0];
		var setFocus = function(link, imgUrl, title){
			el["focusAnchor"].href = link;
			el["focusImage"].src = imgUrl;
			el["focusTitle"].innerHTML = title;
		};
		var items = daum.$$("ul.list_popularity li", el["wrap"]);
		items.each(function(item){
			var txtEl = daum.$$("a.txt", item)[0];
			var numEl = daum.$$("a.num", item)[0];
			var imgEl = daum.$$("img", item)[0];
			var link = txtEl.href;
			var imgUrl = imgEl.src;
			var title = txtEl.innerHTML + '<span class="num">' + numEl.innerHTML + '</span>';
			txtEl = numEl = imgEl = null;
			daum.Event.addEvent(item, 'mouseover', function(){
				setFocus(link, imgUrl, title);
			});
		});
	},
	changeTab: function(tabId){
		this.tabId = tabId;
		var tabType = ThemeTabInfo[tabId].tabType; 
		var tabNum = ThemeTabInfo[tabId].tabNum;
		var tabGuideText = ThemeTabInfo[tabId].tabGuideText;
		var defaultMsg = ThemeTabInfo[tabId].defaultMsg;
		var canWriteMsg = ThemeTabInfo[tabId].canWriteMsg;
		var isKnowledge = ThemeTabInfo[tabId].isKnowledge;
		var voteType = ThemeTabInfo[tabId].voteType;
		
		daum.$$("li.on", this.tabListEl).each(function(obj){
			daum.Element.removeClassName(obj, "on");
		});
		daum.Element.addClassName(daum.$("themeTab"+tabId), "on");
		if(this.themeType == "I"){
			["tab1", "tab2", "tab3", "tab4"].each(function(item){
				var action = (tabNum == item) ? "add" : "remove";
				daum.Element[action+"ClassName"](this.tabListEl, item);
			}.bind(this)); 
		}
		
		daum.$$("div.theme_banner").each(function(banner){
			var idx = tabNum.split("tab")[1];
			var action = (banner.id == "themeBanner"+idx) ? "show" : "hide";
			daum.Element[action](banner);
		});
		
		var paramString = "tabId="+tabId;
		var plugin = ["MultiImage", "MultiVideo", "Suggest", "Link", "Info"];
		if( isKnowledge ){
			plugin.push("Knowledge");
		}
		
		this.timeline.replace({
			params: paramString
		});
		if(tabType == "W" || tabType == "S"){
			this.writer.setConfig({
				params:paramString,
				defaultMsg: defaultMsg,
				plugin: plugin
			});
			if (canWriteMsg) {
				daum.Element.show(this.tabGuideEl);
				daum.Element.show(this.writerWrap);
			} else {
				daum.Element.hide(this.tabGuideEl);
				daum.Element.hide(this.writerWrap);
			}   
		}else{
			daum.Element.hide(this.writerWrap);
		}
		this.tabGuideEl.innerHTML = tabGuideText;
		
		//voteType form show/hide
		if (voteType=="P") {
			Yozm.Theme.ThemePollManager.hideForm();
           	Yozm.Theme.ThemeVoteManager.select(tabId);
        }else if (voteType=="A") {
             Yozm.Theme.ThemeVoteManager.hideForm();
			 Yozm.Theme.ThemePollManager.select(tabId);
        }else{
			Yozm.Theme.ThemePollManager.hideForm();
			Yozm.Theme.ThemeVoteManager.hideForm();
		}

	},
	updateMessageCount: function(type, data) {
		if (data.status == "200") {
			ThemeTabInfo[this.tabId].isAgreePrivate = false;
			// update message count
			var countValue = (type == "up") ? 1 : -1; 
			var countEl = daum.$("themeTabCount"+ this.tabId);
			if (countEl) {
				countEl.innerHTML  = parseInt(countEl.innerHTML) + countValue;	
			}
			
			// change vote values
			var alreadyVote = (type == "up") ? true : false;
			
			if (ThemeTabInfo[this.tabId].isVote &&  ThemeTabInfo[this.tabId].voteType =="A") {
				ThemeTabInfo[this.tabId].alreadyVote = alreadyVote;
				Yozm.Theme.ThemePollManager.updateVoteCount(type, data);
			}
		}
	},
	agreePrivateEvent: function() {
		ThemeTabInfo[this.tabId].isAgreePrivate = true;
		this.writer.sendMessage();
	}
});

Yozm.Theme.MyTheme = (function(){
	var template = {
		list : '<ul class="list_favorite"></ul>',
		item : '<li id="userTheme-#{themeId}"><a class="thumb" href="/talk/theme/view?id=#{themeId}"><img width="40" height="40" alt="" src="#{thumbUrl}" /></a><div class="info"><strong class="tit"><a href="/talk/theme/view?id=#{themeId}">#{title}</a></strong><a class="txt" href="/talk/theme/view?id=#{themeId}">관련글<span class="num">#{msgCount}</span></a><button type="button" class="btn_del" onclick="Yozm.Theme.deleteMyTheme(#{themeId});return false;">삭제</button></div></li>',
		empty : '<div class="favorite_none"><strong class="txt ir_indent">즐겨찾기한 테마가 없습니다.</strong><span class="link"><a href="/talk/theme">테마 전체보기</a></span></div>'
	},
	msg = {
		ITEM_FULL : "더이상 추가할 수 없습니다.",
		ITEM_EXIST : "이미 추가하였습니다."
	},
	el = { wrap : null, layer:null, list : null, message : null },
	limit = 10,
	themeId = null,
	open = function(){
		daum.Element.addClassName(el["wrap"], "favorite_on");
		daum.Element.removeClassName(el["wrap"], "favorite_off");
		daum.Element.hide(el["layer"]);
		daum.Effects.slideDown(el["layer"], "fast");
	},
	close = function(){
		daum.Effects.slideUp(el["layer"], "fast", function(){
			daum.Element.addClassName(el["wrap"], "favorite_off");
			daum.Element.removeClassName(el["wrap"], "favorite_on");
		});
	},
	toggle = function(e){
		daum.Element.hasClassName(el["wrap"], "favorite_off") ? open() : close();
		daum.Event.preventDefault(e);
	},
	checkAddable = function(themeId){
		if(!el["list"]){
			return "";
		}
		var items = daum.$$("li", el["list"]);
		var length = items.length;
		if(length >= limit)	return msg["ITEM_FULL"];
		for(var i = 0 ; i < length ; ++i){
			if(items[i].id.split("-")[1] == themeId) return msg["ITEM_EXIST"];
		}
		return "";
	},
	toggleAddButton = function(isEnable){
		var addBtn = daum.$("addThemeBtn");
		if(isEnable){
			daum.Element.removeClassName(addBtn, "btn_bookmark_disabled");
			daum.Element.addClassName(addBtn, "btn_bookmark");
		}else{
			daum.Element.removeClassName(addBtn, "btn_bookmark");
			daum.Element.addClassName(addBtn, "btn_bookmark_disabled");
		}
	},
	initEvent = function(listEl){
		var list = daum.$$("li", listEl);
		var eventName= new Array("mouseover", "mouseout");
		if(daum.Browser.ie){
			eventName= new Array("mouseenter", "mouseleave");
		}
		list.each(function(item){
			var deleteBtn = daum.$C(item, "btn_del")[0];
			daum.Event.addEvent(item, eventName[0], function(e){
				daum.Element.show(deleteBtn);
			});
			daum.Event.addEvent(item, eventName[1], function(e){
				daum.Element.hide(deleteBtn);
			});
		})
	},
	handler = function(list){
		if(list.length == 0){
			if(!el["message"]){
				el["message"] = daum.createElement(template["empty"]);
				el["layer"].appendChild(el["message"]);
			}else{
				daum.Element.show(el["message"]);
			}
			el["list"].innerHTML = "";
			toggleAddButton(true);
			return;
		}else{
			if(el["message"]){
				daum.Element.hide(el["message"]);
			}
		}
		var addBtnEnable = true;
		var itemt = new daum.Template(template["item"]), html = "";
		daum.Array.each(list, function(obj){
			html += itemt.evaluate({
				themeId : obj.id,
				thumbUrl : obj.thumbUrl,
				title : daum.String.cutString(obj.title, 28, ".."),
				msgCount : obj.totalMsgCnt
			});
			if(themeId == obj.id){
				addBtnEnable = false;
			}
		});
		if(!el["list"]){
			el["list"] = daum.createElement(template["list"]);
			el["layer"].appendChild(el["list"]);
		}
		el["list"].innerHTML = html;
		initEvent(el["list"]);
		toggleAddButton(addBtnEnable);
	},
	errorCallback = function(json){
		if(json.status == 400){
			Log.show(json.message);
			daum.Function.timeout(function(){ Log.hide(); }, 1000);
		}
	};
	return {
		init: function(id){
			var btnMyTheme = daum.$("myThemeBtn");
			if(!btnMyTheme){
				return;
			}
			themeId = id;
			daum.Event.addEvent(btnMyTheme, "click", daum.Function.bindAsEventListener(toggle));
			daum.Event.addEvent(document, "click", function(e){
				var target = daum.Event.getElement(e);
				if(target.id === "myThemeBtn") return;
				if(daum.Element.hasClassName(target, "btn_bookmark")) return;
				close();
			});
			el["wrap"] = daum.$$("div.favorite_theme")[0];
			el["layer"] = daum.$$("div.layer_favorite", el["wrap"])[0];
			el["list"] = daum.$$("ul.list_favorite", el["layer"])[0];
			el["message"] = daum.$$("div.favorite_none", el["layer"])[0];
			if(el["list"]){
				initEvent(el["list"]);
			}
		},
		add: function(themeId){
			var msg = checkAddable(themeId);
			if(!daum.String.isEmpty(msg)){
				Log.show(msg);
				daum.Function.timeout(function(){ Log.hide(); }, 1000);
				return;
			}
			var req = {
				url : "/talk/theme/json/AddFavoriteTheme.json",
				paramString : "id=" + themeId
			};
			var callback = function(json){
				handler(json.userThemeList);
				open();
			};
			Yozm.Common.getJson(req, callback, errorCallback);
		},
		del: function(themeId){
			var req = {
				url : "/talk/theme/json/DeleteFavoriteTheme.json",
				paramString : "id=" + themeId
			};
			var callback = function(json){
				handler(json.userThemeList);
				close();
			};
			Yozm.Common.getJson(req, callback, errorCallback);
		}
	};
})();

Yozm.Theme.ShareSns= (function(){
	return {
		init: function(snsEl, snsMessageInfo) {
			this.snsEl = daum.$(snsEl);
			this.snsMessageInfo = snsMessageInfo;
			var moreSnsButton = daum.$("moreSnsButton");
			var moreSnsLayer = daum.$("moreSnsLayer");
			
			if (!this.snsEl || typeof(snsMessageInfo) == "undefined") { return; }
			
			daum.Event.addEvent(this.snsEl, "click", this.onClickSnsButton.bindAsEventListener(this));
			if (navigator.userAgent.toLowerCase().match(/ipad/)) {
				daum.Event.addEvent(moreSnsButton, 'click', function(e){
					if (daum.Element.hasClassName(moreSnsLayer, "on")) {
						daum.Element.replaceClassName(moreSnsLayer, "on", "off");
					} else {
						daum.Element.replaceClassName(moreSnsLayer, "off", "on");
					}
				});
			} else {
				daum.Event.addEvent(moreSnsButton, 'mouseover', function(e){
					daum.Element.replaceClassName(moreSnsLayer, "off", "on");	
				});
				daum.Event.addEvent(moreSnsButton, 'mouseout', function(e){
					daum.Element.replaceClassName(moreSnsLayer, "on", "off");	
				});
			} 
		},
		onClickSnsButton: function(ev) {
			daum.Event.stopEvent(ev);
			
			var btnEl = daum.Event.getElement(ev);
			if (btnEl.tagName.toLowerCase() == "a" || btnEl.tagName.toLowerCase() == "span") {
				var serviceName = (btnEl.className != "") ? btnEl.className : btnEl.parentNode.className;
				this.openShareSns(serviceName);
			}
		},
		openShareSns: function(service_name) {
			if (typeof(service_name) == "undefined") { return; }
			
			var params = "?service_name="+ service_name
				+"&prefix="+ this.snsMessageInfo.prefix
				+"&link="+ this.snsMessageInfo.link
				+"&image_path="+ this.snsMessageInfo.image_path
				+"&source_id="+ this.snsMessageInfo.source_id
				+"&callback="+ this.snsMessageInfo.callback;
			
			window.open("http://profile.daum.net/api/popup/Share.daum"+ params, "popShareSns", 'width=365, height=400, resizable=yes');
		}
	}
})();

Yozm.Theme.ThemePollManager = (function(){
	var form = {},
	currentTabId = -1,
	messageWriter = null,
	eid = null,	// event id
	isInit = false,
	setData = function(item){
		var input = daum.$$("input", item)[0];
		input.checked = true;
		var seq = input.id.split("-")[2];
		var imgUrl = daum.$$("img", item)[0].src;
		messageWriter.setPluginData("seq="+seq+"&image="+encodeURIComponent(imgUrl));
		messageWriter.attachImage(Yozm.Common.getImgUrl(imgUrl, 'W76x110'));
		var btn = daum.$$("button.btn_delete")[0];	// inner Write form
		if(!!eid) daum.Event.stopObserving(eid);
		eid = null;
		eid = daum.Event.addEvent(btn, "click", function(e){
			resetForm(form[currentTabId]);
			daum.Event.stopObserving(eid);
			eid = null;
		});
	},
	initForm = function(formEl){
		daum.$$("li", formEl).each(function(item) {
			daum.Event.addEvent(item, "click", function(e) {
				if (!ThemeTabInfo[currentTabId].alreadyVote) {
					resetForm(formEl);
					daum.Element.addClassName(item, "on");
					setData(item);	
				}
			});
		});
	},
	resetForm = function(formEl){
		daum.$$("li.on", formEl).each(function(obj){
			daum.Element.removeClassName(obj, "on");
		});
		daum.$$("input", formEl).each(function(obj){
			obj.checked = false;
		});
	},
	hasForm =  function(tabId){
		return !!form[currentTabId];
	},
	toggleImageUploadBtn = function(){
		var action = hasForm(currentTabId) ? "hide" : "show";
		daum.Element[action](messageWriter.elements.attachBtnBox);
		//daum.Element[action](messageWriter.elements.imageUploadBtn);
	};
	return {
		init: function(tabId){
			var forms = daum.$$("form.theme_poll");
			if (forms.length == 0) return;
			currentTabId = tabId;
			//messageWriter = writer;
			messageWriter = Yozm.Theme.writer;
			forms.each(function(formEl){
				form[formEl.id.split("-")[1]] = formEl;
				initForm(formEl);
			});
			toggleImageUploadBtn();
			isInit = true;
		},
		//changeTab voteFrom show/hide
		select: function(tabId){
			if (!isInit) this.init(tabId);
			if(!form) return;
			messageWriter.resetPlugin();
			// remove delete button event
			if(!!eid) daum.Event.stopObserving(eid);
			eid = null;
			
			if(!!messageWriter.elements.previewImg) messageWriter.detachImage();
			this.hideForm(currentTabId);
			
			currentTabId = tabId;
			if(hasForm(currentTabId)) daum.Element.show(form[currentTabId]);
			toggleImageUploadBtn();
		},
		hideForm: function(){			
			if (hasForm(currentTabId)) {	
				daum.Element.hide(form[currentTabId]);
				resetForm(form[currentTabId]);
			}
		},
		updateVoteCount: function(type, data) {
			var formEl = daum.$("themePoll-"+ currentTabId);
			if (type == "up") {
				var count = 0;
				if(data.result.pollObj){
					var box= document.createElement("DIV");
					box.innerHTML=	data.result.pollObj;
					formEl.innerHTML = "";
					formEl.appendChild(daum.Element.getFirstChild(daum.Element.getFirstChild(box)));
				}
				daum.Element.show("alreadyPoll-"+ currentTabId);
				daum.$$("input", formEl).each(function(input) {
					daum.Element.hide(input);
				});
				resetForm(formEl);
			} else {
				daum.Element.hide("alreadyPoll-"+ currentTabId);
				daum.$$("input", formEl).each(function(input) {
					input.style.display = "";
				});
			}
		}
	}
})();

Yozm.Theme.ThemeVoteManager = (function(){
	var form = {},
	currentTabId = -1,
	messageWriter = null,
	eventObserver = [],
	isInit = false,
	
    setData = function(item, tabId){
		var button = daum.$$("button", item)[0];
        var seq = button.id.split("-")[2];
        var imgUrl = daum.$$("img", item)[0].src;
        
        requestVoteMsg("tabId=" + currentTabId + "&seq=" + seq + "&image=" + encodeURIComponent(imgUrl));
    },
    registEvent = function(tabId, formEl){
		daum.$$("li", formEl).each(function(item,index){
		    	daum.Event.addEvent(daum.$$("button",item)[0], "click", function(e){
			        if (ENV.viewerError == -2) {
            			Yozm.Common.CommonJoin();
        			}else if (ENV.viewerError == -1) {
                		Yozm.Common.CommonLogin();
        			}else {
                		if(!ThemeTabInfo[tabId].alreadyVote){
						setData(item, tabId);
						}	
            		}
					daum.Event.preventDefault(e);
				});
		})
    },
    requestVoteMsg = function(data) {
        var sendMessageUrl = "/talk/theme/json/AddMessageForThemeTab.json";
        var ajaxObject = {
            url: sendMessageUrl,
            method: 'POST',
            paramString: data
        }
        var callback = updateVoteCount;
        Yozm.Common.getJson(ajaxObject, callback);
    },
    updateVoteCount = function(data){
		var formEl = daum.$("themePoll-"+ currentTabId);
		if(data.result.pollObj){
			var box= document.createElement("DIV");
			box.innerHTML=	data.result.pollObj;
			formEl.innerHTML = "";
			formEl.appendChild(daum.Element.getFirstChild(daum.Element.getFirstChild(box)));
		}
    },
	hasForm =  function(){
		return !!form[currentTabId];
	},
	toggleImageUploadBtn = function(){
		var action = hasForm(currentTabId) ? "hide" : "show";
		daum.Element[action](messageWriter.elements.imageUploadBtn);
	};
    return {
        init: function(tabId){
			isInit = true;
		    var forms = daum.$$("form.theme_vote");
            currentTabId = tabId;
			messageWriter = Yozm.Theme.writer;
			if (forms.length == 0) 
                return;
            currentTabId = tabId;
            forms.each(function(formEl){
                form[formEl.id.split("-")[1]] = formEl;
                registEvent(tabId, formEl);
            });
        },
		//changeTab voteFrom show/hide
		select: function(tabId){
			if(!isInit){
				this.init(tabId);
			}
			if(!form) return;			
			
			this.hideForm();
			
			currentTabId = tabId;
			if(hasForm(currentTabId)) daum.Element.show(form[currentTabId]);
			toggleImageUploadBtn();
		},
		hideForm: function(){			
			if (hasForm(currentTabId)) {
				daum.Element.hide(form[currentTabId]);
			}
		}
    }
})();




