Greasy Fork

AfreecaTV_Manager

AfreecaTV manager plugin for web player

目前为 2021-07-09 提交的版本。查看 最新版本

// ==UserScript==
// @name         AfreecaTV_Manager
// @namespace    AfreecaTV_Manager
// @version      1.4
// @description  AfreecaTV manager plugin for web player
// @author       darkyop
// @match        *://play.afreecatv.com/*
// @require     https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @grant        none
// ==/UserScript==

$(function() {      
    
    var addCss = document.createElement('link'); 
    addCss.href = 'https://mngr.afreehp.kr/mngr/css.php?time=' + new Date().getTime();
    addCss.type = 'text/css';
    addCss.rel = 'stylesheet';
    document.getElementsByTagName('head')[0].appendChild(addCss); 
});

var serverUrl = "mngr.afreehp.kr";
var page = {};
$.getScript('//static.afreecatv.com/asset/library/requirejs/2.1.8/require.js', function() {
    page = {
        debug: false,
        io:null,
        $:null,
        log: {
            debug: false,
            info: false,
            callscript: false,
            msg: false
        },
        opt: {
            idx:0,
            loadcheck: false,
            socket: null,
            socketip: location.protocol !== 'https:' ? serverUrl+":13536" : "wss://"+serverUrl+":14536",
            //mainlist:["short", "info", "gift", "report", "join", "greet", "answer", "dumb", "kick", "macro"]
            mainlist: ["gift", "report", "join", "greet", "up", "answer", "macro"],
            maincheck: true,
            sublist: ["short", "info"],
            subcheck: true,
            joinlist: {},
            prevmacro: {},
            giftcontinue: false
        },
        info: {
            search:false,
            searchid:"",
            searchnick:"",
            connect: false,
            use:false,
            key:"",
            idx:"",
            bjid:"",
            flag:0,
            id:"",
            sid:"",
            nid:"",
            detail: { title:"", start:"", view:0 },
            statstime:10000,
            up:{
                load:false,
                day:0,
                total:0,
                today:0,
                list:{},
                recent:[]
            },
            uptime:10000
        },
        filter:{
            word:"",
            answer:[],
            dumb:[],
            kick:[]
        },
        data: {},
        init: function() {
            if(typeof liveView === "object" && typeof livePlayer === "object" && liveView.LiveViewInfo !== undefined && liveView.LiveViewInfo.nBroadNo !== undefined && liveView.LiveViewInfo.nBroadNo > 0) {
                //css 로드
                page.css();

                //함수 오버라이드
                page.funcadd();

                doTimeout("mngr_join", function() {
                    page.start();
                }, 5000);
            }
            else {
                setTimeout(function() {
                    page.init();
                }, 1000);
            }
        },
        css: function() {
            var addCss = document.createElement('link');
            addCss.href = '//cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css';
            addCss.type = 'text/css';
            addCss.rel = 'stylesheet';
            document.getElementsByTagName('head')[0].appendChild(addCss);

            var addCss = document.createElement('link');
            addCss.href = 'https://afreehp.kr/resource/css/vendor/fonts.css';
            addCss.type = 'text/css';
            addCss.rel = 'stylesheet';
            document.getElementsByTagName('head')[0].appendChild(addCss);
        },

        //접속시작
        start: function() {
            doTimeout("mngr_join", false);

            //스타일 설정
            page.style.init();

            if(!page.isLogin()) {
                return;
            }

            if(page.info.bjid === "") {
                if(page.log.debug) console.log(liveView.LiveViewInfo.szBjId, liveView.LiveViewInfo.nBroadNo);
                page.info.bjid = page.getid(liveView.LiveViewInfo.szBjId);
                page.info.id = page.getid(liveView.ChatInfo.myUserInfo.szUserId);
                page.info.nid = liveView.LiveViewInfo.nBroadNo;
            }

            if(page.info.connect === true) return;
            page.info.connect = true;

            //소켓
            page.connect();

            //상태
            page.stats();

            //로딩
            page.load();

            //히스토리 내역 초기화
            page.history.init();

            //갈고리
            page.galgori.init();

            //명령어 툴
            page.cmdtool.init();
        },
        mngrload: function() {
            doTimeout("manager_load", function() {
                if(page.isManager()) {
                    if(page.log.debug) console.log("manager_load");
                    page.start();
                    page.noticeClose();

                    var getMngMenu = page.getCookie("player_menu_manager");
                    if(getMngMenu == "off") {
                        $("#layer_mchat .btn_close").trigger("click");
                    }
                    if(!page.isSocket()) {
                        page.reconnect();
                        $("#add_menu_check").prop("checked", true).trigger("change");
                    }
                    $("#chatting_area").removeClass("mngr_non");
                    page.style.managerResize();

                    liveView.Chat.setManager(1);
                }
                else {
                    $("#chatting_area").removeClass("manager");
                    $("#chatting_area").addClass("mngr_non");
                    // if(page.isSocket()) {
                        // page.socket.close();
                    // }
                    //$("#add_menu_check").prop("checked", false).trigger("change");
                    liveView.Chat.setManager(0);
                }
            }, 500);
        },
        mngrcheck: function() {
            doTimeout("manager_check", function() {
                if(page.isLogin()) {
                    page.start();
                }
                else {
                    // if(page.isSocket()) {
                        // page.socket.close();
                        // $("#add_menu_check").prop("checked", false).trigger("change");
                    // }
                    //$("#add_menu_check").prop("checked", false).trigger("change");
                }
                page.info.use = page.isUse();
                page.mngrcheck();

                // if(page.info.use && page.isManager()) $("#chatting_area").removeClass("mngr_hide");
                // else $("#chatting_area").addClass("mngr_hide");
            }, 1000);
        },

        //소켈
        connect: function() {
            if(!page.isLogin()) return;
            require.config({
                paths: {
                    socketio: '//cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io'
                }
            });

            //DISCRIPTION :: 'css!//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css', 'css!http://afreehp.kr/afreecahelper/css/fonts.css'
            //CSS 로드가 안되서 제거 했습니다.
            require(['socketio'], function(io) {
                page.io = io;

                var socket = page.io.connect(page.opt.socketip,{
                	transports: ['websocket'],
                    reconnection: true,
                    reconnectionDelay: page.randomRange(300, 600) * 10
                });
                page.socket = socket;

                socket.on("connect", function(data) {
                    if(page.log.debug) console.log("mngr socket connect", data);
                    socket.emit("mngr", { type:"player", id:page.info.id, bjid:page.info.bjid });
                });

                socket.on("id", function(data) {
                    if(page.log.debug) console.log("mngr socket id", data);
                    if(data && data.key != undefined && data.idx != undefined && data.key !== "" && data.idx !== "") {
                        page.info.key = data.key;
                        page.info.idx = data.idx;
                        $("#mngr_menu .btn_addmenu_setup").removeAttr("onclick").attr("href", "https://mngr.afreehp.kr/?key=" + data.key + "&idx=" + data.idx + "&id=mngr");
                    }
                });

                socket.on("setup", function(data) {
                    if(page.log.debug) console.log("mngr socket setup", data);
                    page.load();
                });

                socket.on("error", function(data) {
                    if(page.log.debug) console.log("mngr socket error", data);
                    doTimeout("mngr_socket_reconnect", function() {
                        page.reconnect();
                    }, 1000);
                });

                socket.on("close", function(data) {
                    if(page.log.debug) console.log("mngr socket close", data);
                    doTimeout("mngr_socket_reconnect", function() {
                        page.reconnect();
                    }, 3000);
                });
            });
        },
        reconnect: function() {
            if(page.isLogin() && page.socket != null && page.socket.connected === false) {
                page.socket.connect();
                doTimeout("mngr_socket_reconnect", function() {
                    page.reconnect();
                }, 3000);
            }
        },

        //불러오기
        load: function() {
            doTimeout("page_load", false);
            if(page.info.id === "" || page.info.id == "false" || page.info.id === false || page.info.bjid === "") {
                doTimeout("page_load", function() {
                    page.load();
                }, 1000);
                return;
            }

            $.ajax({
                type:"POST",
                url:"https://"+serverUrl+"/mngr/save.php",
                dataType:"json",
                data:{
                    type:"load",
                    key:page.info.id,
                    idx:page.info.bjid
                },
                success: function(data) {
                    if(page.log.debug) console.log("load", page.info, data);

                    if(data && data.opt !== undefined) {
                        $.each(data.opt, function(key, value) {
                            page.opt[key] = value;
                        });

                        if(page.opt.giftcontinue === true) $("#layerStarGiftNew .btn_gifts, #layerStarGiftNew .gifts_popup .gifts_panel .btn_gifts_gift").removeClass("hide");
                        else $("#layerStarGiftNew .btn_gifts, #layerStarGiftNew .gifts_popup .gifts_panel .btn_gifts_gift").addClass("hide");
                    }

                    if(data && data.data != undefined) {
                        var saveData = $.parseJSON(data.data);
                        page.opt.ver = !isNaN(saveData.ver) ? Number(saveData.ver) : 0;
                        if(data.prevdata != undefined && data.prevdata !== "") {
                            var prevData = $.parseJSON(data.prevdata);
                            var prevDataList = ["join", "joinfan", "joinsupport", "thank", "thankvalue", "thankstar", "thanksticker", "thankchoco", "gift", "simple", "simplesearch", "simplemanner", "simplenick", "simpledirect", "simplehome", "blindcancel", "rule", "rulechat", "alarm", "oncolor", "searchcolor", "filtercolor", "aicolor" ,"autocolor"]
                            $.each(prevDataList, function(keys, values) {
                                saveData[values] = prevData[values];
                            });

                            saveData.mouseover = prevData.over;
                            saveData.filteruse = prevData.filter;
                            saveData.filterword = prevData.filters;
                            saveData.shortuse = prevData.short;
                            saveData.dumbuse = prevData.autodumb;
                            saveData.kickuse = prevData.autokick;
                            saveData.autohiuse = prevData.greet;
                            saveData.autohitext = prevData.greetstr;
                            saveData.autoansweruse = prevData.aianswer;
                            saveData.autoanswerchat = prevData.aianswermsg;
                            saveData.autoansweruser = prevData.aianswercount;
                            saveData.autoanswerdelay = prevData.aianwertime;
                            saveData.shortlist = prevData.shortdata;
                            saveData.macrolist = prevData.macrodata;

                            $.each(prevData.answerdata, function(keys, values) {
                                saveData.autolist.push(values);
                            });
                            saveData.autoanswerregex = true;
                            saveData.dumblist = prevData.autodumbdata;
                            saveData.dumbregex = true;
                            saveData.kicklist = prevData.autokickdata;
                            saveData.kickregex = true;

                            setTimeout(function() {
                                $("#mngr_menu").append("<div class='mngr_prev_data'>이전 버전의 매니저도우미 설정을 불러왔습니다. 바뀐내용 설정을 위해 설정 버튼을 눌러서 설정 확인 후 저장해주세요.</div>");
                                var prevSavePopup = $("#mngr_menu .mngr_prev_data").on("click", function() {
                                    $(this).fadeOut(200);
                                    return false;
                                });
                                $("#mngr_menu .btn_addmenu_setup").on("click", function() {
                                    prevSavePopup.fadeOut(200);
                                });
                            }, 1000);
                        }

                        if(saveData.id != undefined && (saveData.id == page.info.id || saveData.id == "default") && saveData.bjid != undefined && (saveData.bjid == page.info.bjid || saveData.bjid == "default")) {
                            page.data = saveData;
                            page.data.id = page.info.id;
                            page.data.bjid = page.info.bjid;
                        }

                        page.macro();

                        page.shorts();

                        page.menu();
                    }
                }
            });
        },

        //매니저 메뉴
        menu: function() {
            if($("#mngr_menu").length == 0) {
                var mngrMenu = $("<div id='mngr_menu' class='mngr_toploc'><div class='check_wrap'><input type='checkbox' id='add_menu_check' checked='checked' class='check'></div></div>");
                mngrMenu.append('<div class="menu_list"><div class="menu_box"><a href="#" class="btn_addmenu_setup" onclick="alert(\'매니저도우미 서버와 연결에 실패했습니다. 웹플레이어 로그인 상태를 확인하시고 새로고침해주세요.\'); return false;" target="_blank" title="매니저 도우미 설정"><span class="new">N</span></a></div>' +
                	'<div class="menu_box mngr_btn"><a href="#" class="btn_addmenu_cmd new" title="공지, 타이머, 투표 설정"><i class="fas fa-bullhorn"></i><span class="new">N</span></a></div>' +
                    '<div class="menu_box mngr_btn"><div class="sub_menu"><a href="#" class="btn_addmenu_info" title="시청자수, 누적시청자수, 추천수 보기"></a><a href="#" class="btn_addmenu_detail" title="현재 시청자수 남녀 비율, 팬클럽 수 보기"></a></div></div>' +
                    '<div class="menu_box mngr_btn"><div class="sub_menu"><a href="#" class="btn_addmenu_kick" title="강퇴 리스트 보기"><span class="badge" style="display: none;"></span></a><a href="#" class="btn_addmenu_dumb" title="채팅금지 리스트 보기"><span class="badge" style="display: none;"></span></a></div></div>' +
                    '<div class="menu_box"><a href="#" class="btn_addmenu_direct" title="귓속말 보내기"></a></div>' +
                    '<div class="menu_box"><a href="#" title="채팅 검색" class="btn_addmenu_search"></a><a href="#" class="btn_search_del" title="검색 삭제"><img src="https://mngr.afreehp.kr/mngr/img/icon_del.png" alt=""></a></div>' +
                    '<div class="menu_box"><a href="#" class="btn_addmenu_clear" title="채팅 지우기"></a></div><div class="menu_box mngr_btn"><a href="#" id="btn_addmenu_debug" class="btn_addmenu_debug" title="테스트 모드 설정"><i class="fa fa-bug" aria-hidden="true"></i></a></div></div>');

                var mngrPanel = $("<div id='mngr_panel' class='mngr_toploc'></div>");
                mngrPanel.append("<div class='menu_panel panel_search'><a href='#' title='닫기' class='btn_panel_close'></a><div class='input_wrap'><label title='검색할 사용자의 ID또는 닉네임 입력' class='input_option search_wrap'><p class='label'>검색</p><input type='text' id='addmenu_search_input' placeholder='ID 또는 닉네임 입력' class='text'><a href='#' title='검색 삭제' class='btn_search_del'><img src='https://mngr.afreehp.kr/mngr/img/icon_del.png' alt=''></a><a href='#' title='검색' id='addmenu_search_btn'></a></div></div></div>");
                mngrPanel.append("<div class='menu_panel panel_chat'><a href='#' title='닫기' class='btn_panel_close'></a><div class='panel_wrap'><div class='chat_panel'><div class='chat_box'></div></div><div class='chat_input'><input type='text' title='귓속말 보낼 사용자 ID 입력' placeholder='ID 입력' id='addmenu_chat_id' class='text'><input type='text' placeholder='귓속말 입력' id='addmenu_chat_msg' class='text'><a href='#' title='귓속말 보내기' id='addmenu_chat_send'>보내기</a></div></div></div>");
                $("#chatting_area #chatbox").append(mngrMenu);
                $("#chatting_area #chatbox").append(mngrPanel);

                //테스트 모드 켜고 끄기
                $("#btn_addmenu_debug").on("click", function() {
                    if(page.debug === false) {
                        $(this).addClass("active");
                        page.debug = true;
                        alert("테스트 모드 켜짐\r\n테스트를 위한 모드로 매크로, 자동답변, 채금, 강퇴등의 내용이 실행되지 않고, 채팅입력박스에만 표시됩니다.");
                    }
                    else {
                        $(this).removeClass("active");
                        page.debug = false;
                        alert("테스트 모드 꺼짐\r\n실제 사용을 위한 모드로 매크로, 자동답변, 채금, 강퇴등의 내용이 정상적으로 실행됩니다.");
                    }
                    return false;
                });
                if(page.debug === true) {
                    $("#btn_addmenu_debug").addClass("active");
                }

                //체크박스
                $("#chatting_area .check:not(.on)").each(function() {
                    $(this).addClass("on").wrap('<div class="toggle_box"></div>');
                    $(this).attr("tabindex",-1).parent().append('<span class="ico"><span class="off">OFF</span><span class="on">ON</span>');
                    page.style.toggle(true,this);
                });

                //메뉴 이벤트
                $("#add_menu_check").on("change", function() {
                    page.style.toggle(true,this);
                    if(this.checked) {
                        $("#chatting_area").removeClass("mngr_hide");
                    }
                    else {
                        $("#chatting_area").addClass("mngr_hide");
                    }

                    page.info.use = page.isUse();
                }).trigger("change");

                //설정 링크
                if(page.info.key !== "" && page.info.idx !== "") {
                    $("#mngr_menu .btn_addmenu_setup").removeAttr("onclick").attr("href", "https://mngr.afreehp.kr/?key=" + page.info.key + "&idx=" + page.info.idx + "&id=mngr");
                }

                //패널
                $("#mngr_panel .btn_panel_close").on("click", function() {
                    $("#mngr_panel .menu_panel.active").removeClass("active").stop(true,true).fadeOut(200);
                    return false;
                });

                //검색
                page.search.init();

                //귓속말
                page.direct.init();

                //오버 간단 메뉴
                $("#chatting_area").append($("<div id='simple_menu' class='simple_menu'><a href='#' title='강퇴' class='btn_simple_kick'></a><a href='#' title='채팅금지' class='btn_simple_dumb'></a><a href='#' title='강퇴 취소' class='btn_simple_kickcancel'></a><a href='#' title='검색' class='btn_simple_search'></a><a href='#' title='귓속말' class='btn_simple_direct'></a><a href='#' title='비매너경고' class='btn_simple_manner'></a><a href='#' title='닉네임경고' class='btn_simple_nick'></a><a href='#' title='방송국' target='_blank' class='btn_simple_home'></a><a href='#' title='채팅번역' class='btn_simple_translate'></a><a href='#' title='채팅고정' class='btn_simple_chatfix'></a><a href='#' title='채팅음성고정' class='btn_simple_chatfixsound'></a><a href='#' title='채팅고정삭제' class='btn_simple_chatfixdelete'></a></div>"));
                $("#simple_menu").on("click", "a", function() {
                    var getType = $(this).attr("class").replace("btn_simple_","");
                    if(getType != "home") {
                        var getTarget = $(this).closest("dl");
                        if(getTarget.length === 0) {
                            getTarget = $(this).closest("#simple_menu");
                        }
                        if(getTarget.length > 0) {
                            page.simplemenu(getType, getTarget);
                        }
                        return false;
                    }
                });

                //마우스 오버
                var getSimpleMenu = $("#simple_menu");
                var getScrollBottom = $(".chat_scroll_down");
                var getChatArea = $("#chat_area");
                getScrollBottom.find("button")
                function mouseLeave(target) {
                    if(page.isUse()) {
                        getSimpleMenu.removeClass("simple_manager").hide();
                        $(target).removeClass("chat_on");
                    }
                }

                $("#chatting_area").on("mouseenter", ".chat_area dl dt a[user_id], .chat_area .notice a[user_id]", function() {
                    if(page.isUse()) {
                        getSimpleMenu.hide().removeClass("isme isadmin simple_manager");

                        var getIdMenu = $(this);
                        var getUid = getIdMenu.attr("user_id");
                        var getUname = getIdMenu.attr("user_nick");
                        var getFlag = getIdMenu.attr("userflag");
                        var getGrade = page.grade("grade", getFlag != undefined && getFlag !== "" ? getFlag : 0);

                        if(page.isMe(getUid) && page.debug === false) getSimpleMenu.addClass("isme");
                        if(page.isAdmin(getGrade)) getSimpleMenu.addClass("isadmin");

                        doTimeout("simple_hover", function() {
                            if(page.data.mouseover === true) {
                                liveView.ChatInfo.aEnv.scrollLock = true;
                                getScrollBottom.addClass("on");
                            }

                            if(page.data.simple === true) {
                                if(getUname.indexOf("<em>") > -1) {
                                    getUname = getUname.split("<em>")[0];
                                }
                                if(getUid !== undefined && getUid !== null && getUid !== "") {
                                    getIdMenu.append(getSimpleMenu);
                                    if(page.isUse() && page.isManager() && page.data.simplekick === true) {
                                        getSimpleMenu.addClass("simple_manager");
                                    }
                                    getSimpleMenu.show().attr({ "data-id":getUid, "data-name":getUname }).find(".btn_simple_home").attr("href","https://bj.afreecatv.com/" + page.getid(getUid));
                                }
                            }
                        }, 100);

                        $(this).parent().addClass("chat_on");
                    }
                }).on("mouseleave", ".chat_area dl dt a[user_id], .chat_area .notice a[user_id]", function() {
                    if(page.isUse()) {
                        doTimeout("simple_hover", function() {
                            if(page.data.mouseover === true) {
                                getScrollBottom.find("button").trigger("click");
                                liveView.ChatInfo.aEnv.scrollLock = false;
                                getScrollBottom.removeClass("on");
                            }
                            getSimpleMenu.removeClass("simple_manager").hide();
                        }, 1000);
                        $(this).parent().addClass("chat_on");
                    }
                }).on("click",".chat_area dl dd",function() {
                    var getTalk = $(this).text();
                    if(getTalk.indexOf("http://") > -1 || getTalk.indexOf("https://") > -1 || getTalk.indexOf("www") > -1 || getTalk.indexOf(".com") > -1 || getTalk.indexOf(".co.kr") || getTalk.indexOf(".net") > -1) {
                        var regexToken = /(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/gi;
                        var getLink = regexToken.exec(getTalk);
                        if(getLink != null && getLink[0] != undefined && getLink[0] != "") {
                            var getUrl = getLink[0];
                            if(getUrl.indexOf("http") === -1) getUrl = "//" + getUrl;
                            window.open(getUrl,"_blank");
                        }
                    }
                });

                //히스토리 보기
                $("#mngr_menu .btn_addmenu_kick").on("click", function() {
                    page.history.view("kick", "");
                    return false;
                });
                $("#mngr_menu .btn_addmenu_dumb").on("click", function() {
                    page.history.view("dumb", "");
                    return false;
                });
                page.history.save("load");

                //메뉴 명령
                $("#mngr_menu .btn_addmenu_info").on("click",function() {
                    page.infoView();
                    return false;
                });
                $("#mngr_menu .btn_addmenu_detail").on("click",function() {
                    page.detailView();
                    return false;
                });
                $("#mngr_menu .btn_addmenu_clear").on("click",function() {
                    liveView.Chat.clearChat();
                    if($("#layer_mchat").is(":visible")) $("#setbox_mchat a").removeClass("off").addClass("on");
                    return false;
                });

                //cmd 명령
                $("#mngr_menu .btn_addmenu_cmd").on("click", function() {
                	$("#mngr_cmd_popup").stop(true,true).fadeIn(200);
                	return false;
                });

                //저화질 팝업
                var getQualityCookie = page.getCookie("info_normal_quality");
                if(getQualityCookie === "agree") {
                    var qualityInterval = setInterval(function() {
                        if($("#layer_high_quality").is(":visible")) {
                            $("#layer_high_quality .info_normal_quality a span").trigger("click");
                            clearInterval(qualityInterval);
                        }
                    }, 100);
                }
                $("body").on("click", "#layer_high_quality .info_normal_quality a", function() {
                    page.setCookie("info_normal_quality","agree","",365);
                });

                //새로운 기능 공지 알림
                var getNewNotice = page.getCookie("new_notice");
                if(getNewNotice === "new_notice_20210105") {
                }
                else {
                    $("#mngr_menu .menu_list .btn_addmenu_setup").addClass("new");
                }
                $("#mngr_menu .menu_list .btn_addmenu_setup").on("click", function() {
                    page.setCookie("new_notice","new_notice_20210105","",365);
                    $("#mngr_menu .menu_list .btn_addmenu_setup").removeClass("new");
                });
            }

            //공지
            page.noticeClose();

            var simpleMenu = $("#simple_menu");
            simpleMenu.find(".btn_simple_kick").css("display",page.data.simplekick ? "inline-block" : "none");
            simpleMenu.find(".btn_simple_dumb").css("display",page.data.simplekick ? "inline-block" : "none");
            simpleMenu.find(".btn_simple_kickcancel").css("display",page.data.simplekick ? "inline-block" : "none");
            simpleMenu.find(".btn_simple_search").css("display",page.data.simplesearch ? "inline-block" : "none");
            simpleMenu.find(".btn_simple_direct").css("display",page.data.simpledirect ? "inline-block" : "none");
            simpleMenu.find(".btn_simple_manner").css("display",page.data.simplemanner ? "inline-block" : "none");
            simpleMenu.find(".btn_simple_nick").css("display",page.data.simplenick ? "inline-block" : "none");
            simpleMenu.find(".btn_simple_home").css("display",page.data.simplehome ? "inline-block" : "none");
            simpleMenu.find(".btn_simple_chatfix").css("display",page.data.simplechatfix ? "inline-block" : "none");
            simpleMenu.find(".btn_simple_chatfixsound").css("display",page.data.simplechatfix ? "inline-block" : "none");
            simpleMenu.find(".btn_simple_chatfixdelete").css("display",page.data.simplechatfix ? "inline-block" : "none");

            //폰트
            $("head .mngr_font").remove();
            if(page.data.fontselect === true && page.data.font !== "") {
                if(page.data.font != "inputfont") {
                    $("head").append("<style class='mngr_font'>#chat_area * { font-family:'" + page.data.font + "','돋움',dotum,AppleGothic,tahoma!important }</style>");
                }
                else {
                    if(page.data.addfontname !== "" && page.data.addfonturl !== "") {
                        $("head").append("<style class='mngr_font'>#chat_area * { font-family:'" + page.data.addfontname + "'; src:" + page.data.addfonturl + " }</style>");
                    }
                }
            }

            //배경색
            $("head .mngr_color").remove();
            var colorStyle = '#chat_area dl.chat_search{background:' + page.data.searchcolor + ' url("https://mngr.afreehp.kr/mngr/img/filter/icon_search.png") no-repeat right top}' +
                '#chat_area dl.chat_filter{background:' + page.data.filtercolor + ' url("https://mngr.afreehp.kr/mngr/img/filter/icon_filter.png") no-repeat right top}' +
                '#chat_area dl.chat_filternick dt{background-color:' + page.data.filtercolor + '}' +
                '#chat_area dl.chat_autokick{background:' + page.data.autocolor + ' url("https://mngr.afreehp.kr/mngr/img/filter/icon_out.png") no-repeat right top}' +
                '#chat_area dl.chat_autodumb{background:' + page.data.autocolor + ' url("https://mngr.afreehp.kr/mngr/img/filter/icon_dumb.png") no-repeat right top}' +
                '#chat_area dl.chat_ai{background:' + page.data.aicolor + ' url("https://mngr.afreehp.kr/mngr/img/filter/icon_chat.png") no-repeat right top}' +
                '#chat_area dl.chat_gift{background:' + page.data.giftcolor + ' url("https://mngr.afreehp.kr/mngr/img/filter/icon_stars.png") no-repeat right top}' +
                '#chat_area dl.chat_on{background-color:' + page.data.oncolor + '}';
            $("head").append('<style class="mngr_font">'+ colorStyle +'</style>');

            //필터링
            page.filter = {
                word:"",
                answer:[],
                dumb:[],
                kick:[]
            }
            if(page.data.filteruse === true && page.data.filterword !== "") {
                var getFilterMsg = page.data.filterword;
                var getLastWord = getFilterMsg.slice(-1);
                if(getLastWord == ",") getFilterMsg = getFilterMsg.slice(0, -1);

                if(getFilterMsg.indexOf(",") > -1) var getFilter = getFilterMsg.split(",");
                else if(getFilterMsg.indexOf("\n") > -1) var getFilter = getFilterMsg.split("\n");
                else var getFilter = getFilterMsg.split("\n");
                var getFilterArray = [];
                $.each(getFilter, function(keys, values) {
                    var getText = $.trim(values);
                    if(getText !== "") {
                        if(page.data.filterspecial === true) {
                            var getAddFilter = "";
                            if(getText.indexOf("!") === 0) getAddFilter = "!";
                            getText = getAddFilter + getText.replace(/[\{\}\[\]\/?.,;:|\)*~`!^\-_+<>@\#$%&\\\=\(\'\"]/gi,"");
                        }
                        if(page.data.filterspace === true) {
                            getText = getText.replace(/\s*/gi,"");
                        }
                        getFilterArray.push(getText);
                    }
                });
                if(getFilterArray.length > 0) {
                    page.filter.word = eval("/" + getFilterArray.join("|") + "/gi");
                }
            }

            //자동답변
            if(page.data.autoansweruse === true && page.data.autolist.length > 0) {
                $.each(page.data.autolist, function(keys, values) {
                    if(values[0] === true && values[1] !== "" && values[2] !== "") {
                        var getText = values[1];
                        var getLastWord = getText.slice(-1);
                        if(getLastWord == "|" || getLastWord == "&") getText = getText.slice(0, -1);
                        if(page.data.autoanswerregex !== true && getText.indexOf("&") > -1) {
                            var getAndWord = getText.split("&");
                            page.filter.answer.push([eval("/" + getAndWord.join("|") + "/gi"), values[2], getAndWord.length]);
                        }
                        else page.filter.answer.push([eval("/" + getText + "/gi"), values[2], 0]);
                    }
                });
            }

            //자동채금
            if(page.data.dumbuse === true && page.data.dumblist.length > 0) {
                $.each(page.data.dumblist, function(keys, values) {
                    if(values[0] === true && values[1] !== "") {
                        var getText = values[1];
                        var getLastWord = getText.slice(-1);
                        if(getLastWord == "|" || getLastWord == "&") getText = getText.slice(0, -1);
                        if(page.data.dumbregex !== true && getText.indexOf("&") > -1) {
                            var getAndWord = getText.split("&");
                            page.filter.dumb.push([eval("/" + getAndWord.join("|") + "/gi"), "", getAndWord.length]);
                        }
                        else page.filter.dumb.push([eval("/" + getText + "/gi"), "", 0]);
                    }
                });
            }

            //자동강퇴
            if(page.data.kickuse === true && page.data.kicklist.length > 0) {
                $.each(page.data.kicklist, function(keys, values) {
                    if(values[0] === true && values[1] !== "") {
                        var getText = values[1];
                        var getLastWord = getText.slice(-1);
                        if(getLastWord == "|" || getLastWord == "&") getText = getText.slice(0, -1);
                        if(page.data.kickregex !== true && getText.indexOf("&") > -1) {
                            var getAndWord = getText.split("&");
                            page.filter.kick.push([eval("/" + getAndWord.join("|") + "/gi"), "", getAndWord.length]);
                        }
                        else page.filter.kick.push([eval("/" + getText + "/gi"), "", 0]);
                    }
                });
            }
        },

        //공지 닫기
        noticeClose: function() {
            $(".chat_notice").removeClass("open");
            doTimeout("mngr_notice", function() {
                $(".chat_notice").removeClass("open");
            }, 1000);
        },

        //메뉴 명령
        infoView: function() {
            if(page.isManager()) {
                page.statsdetail("info", function() {
                    var getTotal = "";
                    if($("#nTotalViewer").length > 0) {
                        getTotal = " (누적 : " + page.numberComma(page.info.detail.total) + "명)";
                    }
                    var getInfo = "▶ 시청자수 : " + page.numberComma(page.info.detail.view) + "명" + getTotal + " \r\n▶ 즐겨찾기 : " + page.numberComma(page.info.detail.fav) + "명\r\n▶ 팬클럽수 : " + page.numberComma(page.info.detail.fan) + "명\r\n▶ 오늘 /추천/ : " + page.numberComma(page.info.detail.up) + "개";
                    if(page.info.up.today > 0 && page.info.up.recent.length > 0) {
                        getInfo += "\r\n▶ 최근 /추천/ : " + page.info.up.recent.slice(0,3).join(", ");
                    }
                    page.chat.check("info", getInfo);
                });
            }
        },
        detailView: function() {
            if(page.isManager()) {
                if(liveView.Chat.aChatUserInfo == undefined) return;
                var getTotalLen = Object.keys(liveView.Chat.aChatUserInfo).length;
                if(getTotalLen == 0) return;

                var manLen = 0;
                var womanLen = 0;
                var fanLen = 0;
                var mobileLen = 0;
                var pcLen = 0;
                $.each(liveView.Chat.aChatUserInfo, function(key, value) {
                    var getWoman = value.female;
                    if(getWoman) womanLen += 1;
                    else manLen += 1;
                    if(liveView.ChatInfo.isFan(value.flag1)) fanLen += 1;
                    if(liveView.ChatInfo.isMobile(value.flag1)) mobileLen += 1;
                    else pcLen += 1;
                });
                var getMenPercent = (manLen * 100 / getTotalLen).toFixed(1);
                var getWomanPercent = (womanLen * 100 / getTotalLen).toFixed(1);
                var getFanPercent = (fanLen * 100 / getTotalLen).toFixed(1);
                var getPcPercent = (pcLen * 100 / getTotalLen).toFixed(1);
                var getMobilePercent = (mobileLen * 100 / getTotalLen).toFixed(1);
                var getInfo = "▶ 시청자수 : " + getTotalLen + "명 (본방,로그인)\r\n ▶ 팬클럽수 : " + fanLen + "명 (" + getFanPercent + "%)\r\n▶ 남성 : " + manLen + "명 (" + getMenPercent + "%) / 여성 : " + womanLen + "명 (" + getWomanPercent + "%)\r\n▶ PC : " + pcLen + "명 (" + getPcPercent + "%) / 모바일 : " + mobileLen + "명 (" + getMobilePercent + "%)";
                page.chat.check("info", getInfo);
            }
        },

        //채팅
        chatlist:[],
        chatidx:0,
        chatprev:0,
        starlist:{},
        chat: {
            check: function(type, data) {
                if(page.log.debug) console.log("chat check", type, data);
                if(page.info.use) {
                    if(page.isManager()) {
                        if(page.debug === false) {
                            if($.inArray(type, page.opt.mainlist) > -1) {
                                if(page.isSocket()) {
                                    var checkData = { cmd:"check", type:type, id:page.info.id, bjid:page.info.bjid, uid:data.id };
                                    if(type == "answer") {
                                        checkData.answerdelay = !isNaN(page.data.autoanswerdelay) && Number(page.data.autoanswerdelay) > 0 ? Number(page.data.autoanswerdelay) : 0;
                                        checkData.answerchat = page.data.autoanswerchat;
                                        checkData.answerchattime = !isNaN(page.data.autoanswerchattime) && Number(page.data.autoanswerchattime) > 0 ? Number(page.data.autoanswerchattime) : 0;
                                        checkData.answerchatidx = data.idx;
                                        checkData.answeruser = page.data.autoansweruser;
                                        checkData.answerusertime = !isNaN(page.data.autoanswerusertime) && Number(page.data.autoanswerusertime) > 0 ? Number(page.data.autoanswerusertime) : 0;
                                        checkData.answeruserid = data.id;
                                    }
                                    page.socket.emit("cmd", checkData, function(result) {
                                        if(page.log.debug) console.log("socket", result);
                                        if(result.result != undefined && result.result === true) {
                                            page.chat.msg(type, data, result.data);
                                        }
                                        if(result.cmd != undefined & result.cmd !== "") {
                                            window[result.cmd] = false;
                                        }
                                    });
                                }
                            }
                            else if($.inArray(type, page.opt.sublist) > -1 && page.opt.maincheck === true) {
                                page.chat.msg(type, data);

                                page.opt.maincheck = false;
                                doTimeout("mngr_sublist", function() {
                                    page.opt.maincheck = true;
                                }, 1000);
                            }
                            else {
                                page.chat.msg(type, data);
                            }
                        }
                        else {
                            page.chat.msg(type, data);
                        }
                    }
                    else {
                        if($.inArray(type, page.opt.sublist) > -1 && page.opt.subcheck === true) {
                            page.chat.msg(type, data);

                            page.opt.subcheck = false;
                            doTimeout("mngr_sublist", function() {
                                page.opt.subcheck = true;
                            }, 3000);
                        }
                    }
                }
            },
            msg: function(type, data, result) {
                var getMsg = "";
                if(type == "short" || type == "info" || type == "macro" || type == "join" || type == "gift" || type == "direct" || type == "cmd") {
                    getMsg = data;

                    if(type === "cmd") {
                    	log("cmd",{ type:"cmd", bjid:page.info.bjid, id:page.info.id, msg:getMsg });
                    }
                }
                else if(type == "kick" || type == "dumb") {
                    var getKickData = { id:data.id, name:data.name, type:"", msg:"" };
                    if(type == "kick") getKickData.type = 0;
                    page.chat.kick(type, getKickData);
                }
                else if(type == "manner" || type == "nick") {
                    getMsg = (type == "manner" ? "[" + (data.name == "" ? data.id : data.name)  + "]님 매너채팅 부탁드립니다!" : "[" + data.id + "]님 닉 변경부탁드립니다.\r\n계속사용하실 경우 강퇴 될 수 있습니다!");
                }
                else if(type == "chatfix" || type == "chatfixsound") {
                    getMsg = "!" + (type == "chatfix" ? "고정" : "음성고정") + "/" + data.id;
                }
                else if(type == "chatfixdelete") {
                    getMsg = "!고정삭제";
                }
                else if(type == "answer") {
                    getMsg = page.replacedetail({ id:data.id, name:data.name }, data.msg);
                }
                else if(type == "greet") {
                    //자동인사
                    getMsg = page.replacedetail({ id:data.id, name:data.nickname }, page.data.autohitext);
                }
                else if(type == "up") {
                    //추천인사
                    getMsg = page.replacedetail({ uplist:data.uplist, up:data.up }, page.data.autouptext);
                }
                else if(type == "rule") {
                    //매너
                    getMsg = page.replacedetail({ id:data.id, name:data.name }, page.data.rulechat);
                }

                if(getMsg !== "") {
                    getMsg = page.replaceword(type, getMsg);

                    if(page.debug === false) {
                        getMsg = page.brtext(false, getMsg);
                        if(getMsg.indexOf("/to") === 0) {
                            if(page.grade("mobile",data.flag1) === false) {
                                $("#write_area").html(getMsg);
                                $("#btn_send").trigger("click");
                            }
                        }
                        else {
                            if(liveView._playerController.sendChat) liveView._playerController.sendChat({ szMessage : getMsg, nType : 0 });
                        }
                    }
                    else {
                        $("#write_area").html(getMsg);
                    }
                }
                if(page.log.debug || page.debug === true) console.log("msg run", type, data, getMsg);
            },
            gift: function(type, data) {
                var getMsg = "";
                if(page.log.debug) console.log("gift", type, data);
                if(type == "join" || type == "gift") {
                    getMsg = page.replacedetail(data, page.data[data.type]);

                    if(page.starlist[data.id] != undefined && page.starlist[data.id] != null) {
                        clearTimeout(page.starlist[data.id]);
                        page.starlist[data.id] = null;
                        delete page.starlist[data.id];
                    }
                    page.starlist[data.id] = setTimeout(function() {
                        page.starlist[data.id] = null;
                        delete page.starlist[data.id];
                    }, 30000);

                    if(getMsg !== "") {
                        if(page.data.gift === true && (data.type == "thankfollow" || data.type == "thankadcon" || (!isNaN(page.data.giftcount) && data.val >= Number(page.data.giftcount)))) {
                            page.shortgift({ msg:getMsg, type:data.type, val:data.type == "thankfollow" ? data.follow : data.val });
                        }

                        var getCheck = false;
                        if(type == "join" && page.data.join === true) {
                            getCheck = true;
                        }
                        else if(type == "gift" && page.data.thank === true && (data.thankfollow === "thankfollow" || data.thankfollow === "thankadcon" || (!isNaN(page.data.thankvalue) && data.val >= Number(page.data.thankvalue)))) {
                            getCheck = true;
                        }
                        if(getCheck === true) {
                            if(!page.isMe(data.id) || page.debug === true) {
                                page.chat.check(type, getMsg);
                            }
                        }
                    }
                }
            },
            kick: function(type, data) {
                if(page.isManager()) {
                    if(page.log.debug) console.log(type, data);
                    if(page.debug === false) {
                        if(type == "kick" || type == "kickcancel") {
                            if(liveView._playerController.sendKickAndCancel) liveView._playerController.sendKickAndCancel({
                                szUserId: data.id,
                                szUserNick: data.name,
                                szBjId: page.info.bjid,
                                nBroadNo: page.info.nid,
                                nType: data.type,
                                szMessage: data.msg
                            });
                        }
                        else {
                            if(liveView._playerController.sendDumb) liveView._playerController.sendDumb({
                                szUserId: data.id,
                                szMessage: data.msg
                            });
                        }
                    }
                    else {
                        $("#write_area").html(type + " / " + data.name + "(" + data.id + ")");
                    }

                    if((type == "kick" || type == "dumb") && page.data.rule === true && page.data.rulechat !== "") {
                        page.chat.msg("rule", { id:data.id, name:data.name });
                    }
                }
            }
        },

        //매니저
        cmdtest: function(data) {
            var getCmd = data.cmd;
            var getData = data.data;
            var getChat = data.chat;

            if(page.mngr[getCmd] != undefined) {
                var getResult = page.mngr[getCmd](getData, getChat);
                if(page.log.debug) console.log(getResult);
            }
        },
        mngr: {
            msg: function(data) { //메시지
                var getResultMsg = "";
                var getGrade = page.grade("grade", data.flag);
                var getFollow = page.grade("follow", data.flag);
                var getSupport = page.grade("support", data.flag);

                var getId = page.getid(data.senderID);
                var getName = data.nickname;
                var getMsg = data.message;

                if(page.log.debug) console.log("msg", data, getGrade, getFollow, getSupport);

                page.opt.idx += 1;

                //선물후 채팅 체크
                var checkFilterClass = [];

                //TODO 자기 채팅 체크제외
                if(!page.isMe(getId) || page.debug === true) {
                    if(page.starlist[getId] != undefined && page.starlist[getId] != null) {
                        page.starlist[getId] = null;
                        delete page.starlist[getId];
                        checkFilterClass.push("chat_gift");
                    }

                    //필터링
                    if(page.data.filteruse === true && page.filter.word !== "") {
                        var checkFilterWord = false;
                        if(page.filter.word.test(getMsg)) {
                            checkFilterClass.push("chat_filter");
                            checkFilterWord = true;
                        }
                        else if(page.filter.word.test(getName)) {
                            checkFilterClass.push("chat_filternick");
                            checkFilterWord = true;
                        }
                        page.filter.word.lastIndex = 0;
                        if(checkFilterWord === true && page.data.alarm === true) {
                            page.alarm();
                        }
                    }

                    //검색
                    if(page.info.search === true && page.info.searchid !== "") {
                        if(page.info.searchid.test(getId) || page.info.searchnick.test(getName)) {
                            checkFilterClass.push("chat_search");
                        }
                        page.info.searchid.lastIndex = 0;
                        page.info.searchnick.lastIndex = 0;
                    }

                    if(page.isManager()) {
                        //자동 답변
                        var getFilterCheck = false;
                        if(page.data.autoansweruse === true && page.filter.answer.length > 0) {
                            var getCheck = false;
                            if(page.data.autograde !== "all") {
                                getCheck = page.isGrade(page.data.autograde, data.flag);
                            }
                            else {
                                getCheck = true;
                            }

                            if(page.data.autoanswermngr != undefined && page.data.autoanswermngr === true && page.isAdmin(getGrade)) {
                                getCheck = false;
                            }

                            if(getCheck === true) {
                                var getFilterMsg = getMsg;
                                if(page.data.autoanswerspecial === true) {
                                    var getAddFilter = "";
                                    if(getFilterMsg.indexOf("!") === 0) getAddFilter = "!";
                                    getFilterMsg = getAddFilter + getFilterMsg.replace(/[\{\}\[\]\/?.,;:|\)*~`!^\-_+<>@\#$%&\\\=\(\'\"]/gi,"");
                                }
                                if(page.data.autoanswerspace === true) {
                                    getFilterMsg = getFilterMsg.replace(/\s*/gi,"");
                                }
                                var getResult = page.filtercheck("answer", getFilterMsg);
                                getFilterCheck = getResult[0];
                                if(getResult[0] === true && getResult[1] !== "") {
                                    page.chat.check("answer", { id:getId, name:getName, msg:getResult[1], idx:getResult[2] });
                                    checkFilterClass.push("chat_ai");
                                }
                            }
                        }

                        if(!page.isAdmin(getGrade) || page.debug === true) {
                            //자동 채금
                            var checkDumb = "";
                            if(getFilterCheck === false && page.data.dumbuse === true && page.filter.dumb.length > 0) {
                                var getCheck = false;
                                if(page.data.dumbgrade !== "all") {
                                    if(page.opt.ver === undefined || page.opt.ver < 20190101) {
                                        getCheck = page.isGrade(page.data.dumbgrade, data.flag);
                                    }
                                    else {
                                        getCheck = page.isBelow(page.data.dumbgrade, data.flag);
                                    }
                                }
                                else {
                                    getCheck = true;
                                }

                                if(getCheck === true) {
                                    var getFilterMsg = getMsg;
                                    if(page.data.dumbspecial === true) {
                                        var getAddFilter = "";
                                        if(getFilterMsg.indexOf("!") === 0) getAddFilter = "!";
                                        getFilterMsg = getAddFilter + getFilterMsg.replace(/[\{\}\[\]\/?.,;:|\)*~`!^\-_+<>@\#$%&\\\=\(\'\"]/gi,"");
                                    }
                                    if(page.data.dumbspace === true) {
                                        getFilterMsg = getFilterMsg.replace(/\s*/gi,"");
                                    }
                                    var getResult = page.filtercheck("dumb", getFilterMsg);
                                    getFilterCheck = getResult[0];
                                    if(getResult[0] === true) {
                                        page.chat.check("dumb", { id:getId, name:getName });
                                        checkFilterClass.push("chat_autodumb");
                                    }
                                }
                            }

                            //자동 강퇴
                            var checkKick = "";
                            if(getFilterCheck === false && page.data.kickuse === true && page.filter.kick.length > 0) {
                                var getCheck = false;
                                if(page.data.kickgrade !== "all") {
                                    if(page.opt.ver === undefined || page.opt.ver < 20190101) {
                                        getCheck = page.isGrade(page.data.kickgrade, data.flag);
                                    }
                                    else {
                                        getCheck = page.isBelow(page.data.kickgrade, data.flag);
                                    }
                                }
                                else {
                                    getCheck = true;
                                }

                                if(getCheck === true) {
                                    var getFilterMsg = getMsg;
                                    if(page.data.kickspecial === true) {
                                        var getAddFilter = "";
                                        if(getFilterMsg.indexOf("!") === 0) getAddFilter = "!";
                                        getFilterMsg = getAddFilter + getFilterMsg.replace(/[\{\}\[\]\/?.,;:|\)*~`!^\-_+<>@\#$%&\\\=\(\'\"]/gi,"");
                                    }
                                    if(page.data.kickspace === true) {
                                        getFilterMsg = getFilterMsg.replace(/\s*/gi,"");
                                    }
                                    var getResult = page.filtercheck("kick", getFilterMsg);
                                    getFilterCheck = getResult[0];
                                    if(getResult[0] === true) {
                                        page.chat.check("kick", { id:getId, name:getName });
                                        checkFilterClass.push("chat_autokick");

                                        //log("kick",{ type:"autokick", bjid:page.info.bjid, id:page.info.id, uid:getId, uname:getName, msg:getFilterMsg });
                                    }
                                }
                            }
                        }
                    }
                }

                //신고
                if(page.isManager() && data.message.indexOf("!신고") === 0) {
                    page.report.run({id:getId, name:getName, msg:data.message});
                }

                //getResultMsg = $(chat).addClass("mngr_chat " + checkFilterClass.join(" ")).attr({ "data-mngrid": page.opt.idx, "data-chatid":getId, "data-chatname":getName }).get(0).outerHTML;

                if(page.isManager() && page.isMe(getId)) {
                    if(data.message.indexOf("!수정") === 0 || data.message.indexOf("!추가") === 0 || data.message.indexOf("!삭제") === 0) {
                        page.edit.answer(data.message);
                    }
                }
            },
            join: function(data) {  //입장
                var getCheck = false;
                if(page.data.autohiuse === true && !page.isMe(data.id)) {
                    if(page.data.autohigrade != "all") {
                        getCheck = page.isGrade(page.data.autohigrade, data.flag1);
                    }
                    else {
                        getCheck = true;
                    }
                }

                // if(page.log.debug) console.log("join", data, getCheck);
                if(getCheck === true) {
                    if(page.opt.joinlist[data.id] == undefined) {
                        page.opt.joinlist[data.id] = setTimeout(function() {
                            page.opt.joinlist[data.id] = undefined;
                            delete page.opt.joinlist[data.id];
                        }, 1000 * 30);
                        page.chat.check("greet" ,data);
                    }
                }
            },
            balloon: function(data) {
                if(page.log.debug) console.log("balloon", data);
                var getId = page.getid(data.sender_id);
                var getName = data.sender_nickname;
                var getVal = Number(data.cnt);
                var getJoin = Number(data.fan_order);

                if(!isNaN(getVal)) {
                    if(getJoin > 0) page.chat.gift("join", { type:"joinfan", id:getId, name:getName, val:getVal, join:getJoin });
                     else page.chat.gift("gift", { type:"thankstar", id:getId, name:getName, val:getVal });
                }
            },
            sticker: function(data) {
                if(page.log.debug) console.log("sticker", data);
                var getId = page.getid(data.sender_id);
                var getName = data.sender_nickname;
                var getVal = Number(data.cnt);
                var getJoin = Number(data.supporter_order);

                if(!isNaN(getVal)) {
                    if(getJoin > 0) page.chat.gift("join", { type:"joinsupport", id:getId, name:getName, val:getVal, join:getJoin });
                    else page.chat.gift("gift", { type:"thanksticker", id:getId, name:getName, val:getVal });
                }
            },
            chocolate: function(data) {
                if(page.log.debug) console.log("chocolate", data);
                var getId = page.getid(data.sender_id);
                var getName = data.sender_nickname;
                var getVal = Number(data.cnt);

                if(!isNaN(getVal)) {
                    page.chat.gift("gift", { type:"thankchoco", id:getId, name:getName, val:getVal });
                }
            },
            subscription_item_effect: function(data) {
                if(page.log.debug) console.log("subscription_item_effect", data);
                var getId = page.getid(data.sendId);
                var getName = data.sendNick;
                var getVal = Number(data.month);

                if(!isNaN(getVal)) {
                    page.chat.gift("gift", { type:"thankfollow", id:getId, name:getName, follow:getVal });
                }
            },
            adcon_effect: function(data) {
                if(page.log.debug) console.log("adcon_effect", data);
                var getId = page.getid(data.userID);
                var getName = data.userNickname;
                var getVal = Number(data.adcon_cnt);
                var getTitle = data.title;

                if(!isNaN(getVal)) {
                    page.chat.gift("gift", { type:"thankadcon", id:getId, name:getName, val:getVal, title:getTitle });
                }
            },
            direct_receive: function(data) {
                page.direct.chat("receive", data);
            },
            direct_send: function(data) {
                page.direct.chat("send", data);
            }
        },

        //간단 메뉴
        simplemenu: function(type, target) {
            var getId = $(target).find("a[user_id]").attr("user_id");
            var getName = $(target).find("a[user_nick]").attr("user_nick");

            if(getId === undefined || getId === null || getId === "") {
            	getId = $(target).data("id");
            	getName = $(target).data("name");
            }

            if(getId !== undefined && getId !== null && getId !== "") {
                if(type == "kick" || type == "dumb" || type == "kickcancel") {
                    var getKickData = { id:getId, name:getName, type:"", msg:"" };
                    if(type == "kick") getKickData.type = 0;
                    else if(type == "kickcancel") getKickData.type = 1;
                    page.chat.kick(type, getKickData);

                    //log("kick",{ type:"simplekick", bjid:page.info.bjid, id:page.info.id, uid:getId, uname:getName });
                }
                else if(type == "search") {
                    $("#addmenu_search_input").val(getId);
                    $("#addmenu_search_btn").trigger("click");
                }
                else if(type == "direct") {
                    page.direct.show(getId);
                }
                else if(type == "manner" || type == "nick" || type == "chatfix" || type == "chatfixsound" || type == "chatfixdelete") {
                    if(page.isManager()) {
                        page.chat.msg(type, { id:getId, name:getName });
                    }
                }
            }
        },

        //검색
        search: {
            init: function() {
                $("#mngr_menu .btn_addmenu_search").on("click", function() {
                    var getPanel = $("#mngr_panel .panel_search");
                    if(getPanel.hasClass("active")) {
                        getPanel.removeClass("active").stop(true,true).fadeOut(200);
                    }
                    else {
                        $("#mngr_panel .menu_panel.active").removeClass("active").stop(true,true).fadeOut(200);
                        getPanel.addClass("active").stop(true,true).fadeIn(200);
                        $("#addmenu_search_input").focus();
                    }
                    return false;
                });

                $("#addmenu_search_input").on("keyup",function(e) {
                    if(e.keyCode == 13) $("#addmenu_search_btn").trigger("click");
                });
                $("#addmenu_search_btn").on("click",function() {
                    var getVal = $("#addmenu_search_input").val();
                    if(getVal == "") {
                        $("#mngr_menu .btn_search_del").trigger("click");
                        $("#addmenu_search_input").focus();
                    }
                    else {
                        page.search.run(true, getVal);
                    }
                    return false;
                });
                $("#mngr_panel .btn_search_del, #mngr_menu .btn_search_del").on("click", function() {
                    page.search.run(false, "");
                    return false;
                });
            },
            run: function(type, val) {
                page.info.search = type;
                if(type === true) {
                    page.info.searchid = eval("/^" + val + "$/i");
                    page.info.searchnick = eval("/" + val + "/i");
                    $("#mngr_menu .btn_search_del").show();
                    $("#mngr_panel .panel_search .btn_search_del").show();
                    $("#chat_area dl a[user_id*='" + val + "']").closest("dt").addClass("chat_search");
                    $("#chat_area dl a[user_nick*='" + val + "']").closest("dt").addClass("chat_search");
                }
                else {
                    page.info.searchword = "";
                    $("#addmenu_search_input").val("");
                    $("#chat_area dl.chat_search").removeClass("chat_search");
                    $("#mngr_panel .btn_search_del, #mngr_menu .btn_search_del").hide();
                }
            }
        },

        //귓속말
        direct: {
            init: function() {
                $("#mngr_menu .btn_addmenu_direct").on("click",function() {
                    var getPanel = $("#mngr_panel .panel_chat");
                    if(getPanel.hasClass("active")) {
                        getPanel.removeClass("active").stop(true,true).fadeOut(200);
                    }
                    else {
                        page.direct.show("");
                    }
                    return false;
                });
                $("#addmenu_chat_msg").on("keyup",function(e) {
                    if(e.keyCode == 13) $("#addmenu_chat_send").trigger("click");
                });
                $("#addmenu_chat_send").on("click",function() {
                    var getChatId = $("#addmenu_chat_id").val();
                    var getChatMsg = $("#addmenu_chat_msg").val();
                    if(getChatId == "") $("#addmenu_chat_id").focus();
                    else if(getChatMsg == "") $("#addmenu_chat_msg").focus();
                    else {
                        page.chat.msg("direct","/to " + getChatId + " " + getChatMsg);
                        $("#addmenu_chat_msg").val("");
                    }
                    return false;
                });
                $("#mngr_panel .chat_panel").on("click",".chat_id, .chat_msg",function() {
                    var getId = $(this).closest(".chat_content").data("uid");
                    if(getId != "") {
                        $("#addmenu_chat_id").val(getId);
                        $("#addmenu_chat_msg").focus();
                    }
                    return false;
                });
            },
            show: function(id) {
                $("#mngr_panel .menu_panel.active").removeClass("active").stop(true,true).fadeOut(200);
                $("#mngr_panel .panel_chat").addClass("active").stop(true,true).fadeIn(200);
                $("#mngr_menu.msg").removeClass("msg");
                $("#addmenu_chat_id").focus();
                var directScroll = $("#mngr_panel .chat_panel");
                directScroll.scrollTop(directScroll.prop("scrollHeight") + 10);

                if(id !== "") {
                    $("#addmenu_chat_id").val(id);
                    $("#addmenu_chat_msg").val("");
                    setTimeout(function() {
                        $("#addmenu_chat_msg").focus();
                    }, 300);
                }
            },
            chat: function(type, data) {
                if(type == "receive") {
                    if($.inArray(data.id, liveView.ChatInfo.chatIgnoreInfo[page.info.nid]) > -1) return "";
                }

                if(page.isUse()) {
                    var getNow = new Date();
                    var getTime = ((getNow.getHours() < 10)?"0":"") + getNow.getHours() +":"+ ((getNow.getMinutes() < 10)?"0":"") + getNow.getMinutes();
                    var getId = data.id;
                    var getNick = data.nickname;
                    var chatDirect = $("#mngr_panel .chat_box");
                    var directId = getNick + "(" + getId + ")" + (type == "send" ? " 님에게" : " 님이");
                    var directMsg = $('<div data-uid="' + getId + '" class="chat_content chat_you"><div class="chat_wrap"><p class="chat_id">' + directId + '</p><div class="box_wrap"><p class="chat_msg">' + data.message +'<span class="chat_time">' + getTime + '</span></p></div></div></div>');
                    if(type == "send") directMsg.addClass("chat_me");
                    chatDirect.append(directMsg);
                    var directScroll = $("#mngr_panel .chat_panel");
                    directScroll.scrollTop(directScroll.prop("scrollHeight") + 10);

                    if(type == "receive" && !$("#mngr_panel .panel_chat").is(":visible")) {
                        $("#mngr_menu").addClass("msg");
                        $("#addmenu_chat_id").val(getId);
                        $("#addmenu_chat_msg").val("");
                    }

                    if(type == "receive") {
                        if(page.isManager() && data.message.indexOf("!신고") === 0) {
                            page.report.run({id:getId, name:getName, msg:data.message});
                        }
                    }
                }
            }
        },

        edit: {
            answer: function(msg) {
                var getTextList = msg.split(" ");
                if(page.log.debug) console.log("edit", msg, getTextList);
                if(getTextList.length > 1) {
                    var getCmd = getTextList[0];
                    var getQ = getTextList[1];
                    var getA = getTextList.length > 2 ? getTextList.slice(2).join(" ") : "";
                    if((getQ !== "" && getA !== "") || (getCmd == "!삭제" && getQ !== "")) {
                        $.ajax({
                            type:"POST",
                            url:"https://"+serverUrl+"/mngr/save.php",
                            dataType:"json",
                            data:{
                                type:"edit",
                                subtype:"answer",
                                cmd:getCmd,
                                key:page.info.id,
                                idx:page.info.bjid,
                                q:getQ,
                                a:getA
                            },
                            success: function(data) {
                                if(data && data.result != undefined && data.result == "ok") {
                                    page.load();
                                }
                            }
                        });
                    }
                }
            }
        },

        //매크로
        macrolist: [],
        macro: function() {
            $.each(page.macrolist, function(key, value) {
                clearInterval(value);
            });
            page.macrolist = [];

            if(page.data.macro != undefined && page.data.macro === true) {
                $.each(page.data.macrolist, function(key, value) {
                    var getMacro = value;
                    if(getMacro.length > 2 && getMacro[0] === true) {
                        var getTime = !isNaN(getMacro[1]) ? Number(getMacro[1]) : 600;
                        var getIdx = setInterval(function() {
                            page.chat.check("macro", getMacro[2]);
                        }, getTime * 1000);
                        page.macrolist.push(getIdx);
                    }
                });
            }
        },

        //필터링
        filtercheck: function(type, msg) {
            var getResult = [false, "", 0];
            var getFilterList = page.filter[type];
            if(getFilterList.length > 0) {
                $.each(getFilterList, function(key, value) {
                    if(value[0] !== "") {
                        if(value[2] === 0) {
                            if(value[0].test(msg)) {
                                getResult = [true, ""];
                                if(type == "answer") {
                                    getResult[1] = value[1];
                                    getResult[2] = key;
                                }
                                value[0].lastIndex = 0;
                                return false;
                            }
                        }
                        else if(value[2] > 1) {
                            var getMatch = msg.match(value[0]);
                            if(getMatch != null && value[2] === getMatch.length) {
                                getResult = [true, ""];
                                if(type == "answer") {
                                    getResult[1] = value[1];
                                    getResult[2] = key;
                                }
                                return false;
                            }
                        }
                    }
                });
            }
            return getResult;
        },

        //단축메뉴
        shorts: function() {
            $("#short_menu").remove();
            if(page.data.shortuse === true) {
                $("#actionbox").append("<div id='short_menu'><div class='short_area'></div></div>");
                var shortMenu = $("#short_menu").show();
                shortMenu.find(".short_area").append("<div class='ballon_wrap'></div><div class='short_wrap'></div>");
                var btnShort = shortMenu.find(".short_wrap");
                $.each(page.data.shortlist,function(key, value) {
                    btnShort.append("<a href='#' title='" + value[1] + "' class='short_btn'>" + value[0] + "</a>");
                });
                shortMenu.off("click",".short_btn, .gift_btn").on("click",".short_btn, .gift_btn",function() {
                    page.chat.check("short", $(this).attr("title"));
                    return false;
                });
            }
        },
        shortgift: function(data) {
            var shortMenu = $("#short_menu");
            var getShortBtn = $('<a href="#" title="' + data.msg + '" class="gift_btn ' + data.type + '">' + data.val + '</a>');
            var getCurrentBtn = shortMenu.find(".gift_btn");
            if(getCurrentBtn.length > 4) {
                getCurrentBtn.slice(0,getCurrentBtn.length - 4).remove();
            }
            shortMenu.find(".ballon_wrap").append(getShortBtn);
            setTimeout(function() {
                if(getShortBtn.length > 0) {
                    getShortBtn.remove();
                }
            }, !isNaN(page.data.gifttime) ? (Number(page.data.gifttime) * 1000) : (1000 * 60));
        },

        //정보
        stats: function() {
            doTimeout("mngr_stats", function() {
                if(page.isLogin() && page.info.bjid !== "") {
                    if(page.info.sid === "") {
                        $.ajax({
                            url:"https://st.afreecatv.com/api/get_station_status.php",
                            dataType:"json",
                            data:{
                                szBjId:page.info.bjid
                            },
                            success: function(data) {
                                if(data && data.DATA != undefined && data.DATA.user_id != undefined) {
                                    page.info.sid = data.DATA.station_no;
                                    page.statsdetail("stats");
                                }
                            }
                        });
                    }
                    else {
                        page.statsdetail("stats");
                    }
                }

                page.stats();
            }, page.info.statstime);
        },
        statsdetail: function(type, fnc) {
            if(page.isLogin() && page.info.bjid !== "" && page.info.sid !== "") {
                $.ajax({
                    type:"POST",
                    url:"https://api.m.afreecatv.com/station/main/a/getmaindata",
                    dataType:"json",
                    data:{
                        bj:page.info.bjid,
                        station_no:page.info.sid
                    },
                    success: function(data) {
                        if(data && data.result != undefined && data.result === 1 && data.data != undefined) {
                            if(data.data.liveBroadInfo != undefined && data.data.liveBroadInfo.length > 0) {
                                page.info.detail.title = data.data.liveBroadInfo[0].broad_title;
                                page.info.detail.start = data.data.liveBroadInfo[0].broad_start;
                                page.info.detail.view = data.data.liveBroadInfo[0].view_cnt;
                                page.info.nid = data.data.liveBroadInfo[0].broad_no;
                            }
                            if(data.data.fanclubCnt != undefined) page.info.detail.fan = data.data.fanclubCnt;
                            if(data.data.supporterCnt != undefined) page.info.detail.sup = data.data.supporterCnt;
                            if(data.data.subscriptionInfo != undefined) page.info.detail.follow = data.data.subscriptionInfo.subscriptionCnt;
                            if($("#nTotalViewer").length > 0) page.info.detail.total = parseInt($("#nTotalViewer").text().replace(/,/g, ""), 10);
                            if(data.data.stationUpdInfo != undefined) {
                                page.info.detail.fav = data.data.stationUpdInfo.fan_cnt;
                                page.info.detail.up = data.data.stationUpdInfo.today_ok_cnt;
                            }
                        }

                        if(type == "info" && fnc != undefined) {
                            fnc();
                        }
                    }
                });
            }
        },

        //스타일 설정
        style: {
            check: true,
            init: function() {
                if(page.style.check === false) return;
                page.style.check = false;

                //채팅
                page.style.chat();

                //매니저 채팅
                page.style.managerChat();

                //메뉴 상태
                page.style.menustats();
            },
            chat: function() {
                var contBox = $("#webplayer_contents");
                var chatLine = $("<div class='chat_line'></div>");
                var chatBox = $("#chatting_area").append(chatLine);
                var chatVideobox = $("#player_area");
                var listBox = $("#list_area");
                var favBox = $("#list_bookmark_area");
                var webplayer = $("#webplayer");
                var managerPopup = $("#layer_mchat");
                var body = $("body");

                var lineResizeCheck = false;
                var lineLeft = 0;
                var lineMove = 0;
                var chatLeft = 0;
                var contWidth = 0;
                var listWidth = 0;
                var favWidth = 0;

                function chatMove(chatRight) {
                    var videoRight = contWidth - (contWidth - (chatRight + listWidth + favWidth));
                    chatVideobox.css({
                        right:videoRight > 0 ? videoRight + 4 : videoRight
                    });
                    chatBox.css({
                        width:chatRight
                    });
                }

                var chatResizeInterval = null;
                chatLine.on("mousedown",function() {
                    clearTimeout(chatResizeInterval);
                    lineResizeCheck = true;
                    lineLeft = chatBox.offset().left;
                    contWidth = parseInt(contBox.width(), 10);
                    chatWidth = webplayer.hasClass("chat_open") ? parseInt(chatBox.width(), 10) : 0;
                    listWidth = !body.hasClass("smode") && listBox.is(":visible") && webplayer.hasClass("list_open") ? parseInt(listBox.width(), 10) + 20 : 0;
                    favWidth = !body.hasClass("smode") && favBox.is(":visible") && webplayer.hasClass("list_bookmark_open") ? parseInt(favBox.width(), 10) + 20 : 0;

                    $("body > .wrap").attr("onselectstart","return false").addClass("noselect");
                    $(document).one("mouseup.lineresize",function() {
                        lineResizeCheck = false;
                        $("body > .wrap").removeAttr("onselectstart").removeClass("noselect");
                        $(document).off("mousemove.lineresize");
                        page.setCookie("mng_chat_resize",chatBox.width() - 1,"",365);

                    }).on("mousemove.lineresize",function(e) {
                        clearTimeout(chatResizeInterval);
                        if(lineResizeCheck && e.pageX) {
                            var chatPos = chatBox.offset().left;
                            lineMove = lineLeft - e.pageX;
                            var chatRight = chatWidth + lineMove;
                            if(chatRight < 201) chatRight = 200;
                            chatMove(chatRight);
                        }
                        chatResizeInterval = setTimeout(function() {
                            $("body > .wrap.noselect").removeAttr("onselectstart").removeClass("noselect");
                        }, 5000);
                    });
                });

                var getChatRight = page.getCookie("mng_chat_resize");
                if(getChatRight && !isNaN(getChatRight)) {
                    contWidth = parseInt(contBox.width(), 10);
                    chatWidth = webplayer.hasClass("chat_open") ? parseInt(chatBox.width(), 10) : 0;
                    listWidth = !body.hasClass("smode") && listBox.is(":visible") && webplayer.hasClass("list_open") ? parseInt(listBox.width(), 10) + 20 : 0;
                    favWidth = !body.hasClass("smode") && favBox.is(":visible") && webplayer.hasClass("list_bookmark_open") ? parseInt(favBox.width(), 10) + 20 : 0;
                    chatMove(parseInt(getChatRight));
                }

                $("#topmenu_chat a, #topmenu_airlist a, #topmenu_fav a, .smode_chatbtn a, .listbox .headbtn .close a, .favbox .headbtn .close a").on("click",function() {
                    page.style.managerResize();
                    chatResize();

                    page.setCookie("player_menu_chat",$("#topmenu_chat a").hasClass("off") ? "off" : "on","",365);
                    page.setCookie("player_menu_artlist",$("#topmenu_airlist a").hasClass("off") ? "off" : "on","",365);
                    page.setCookie("player_menu_fav",$("#topmenu_fav a").hasClass("off") ? "off" : "on","",365);
                });

                $("#layer_mchat .btn_close").on("click",function() {
                    page.setCookie("player_menu_manager", "off", "", 365);
                });
                $("#setbox_mchat a").on("click", function() {
                    setTimeout(function() {
                        page.setCookie("player_menu_manager", "on", "", 365);
                    }, 100);
                });

                $(".btn_smode").on("click", function() {
                    setTimeout(function() {
                        chatResize();
                    }, 100);
                });

                $(".btn_extend_mode").on("click", function() {
                    setTimeout(function() {
                        chatResize();
                    }, 100);
                });

                var resizeInterval = null;
                chatResize = function() {
                    clearTimeout(resizeInterval);
                    resizeInterval = setTimeout(function() {
                        contWidth = parseInt(contBox.width(), 10);
                        chatWidth = webplayer.hasClass("chat_open") ? parseInt(chatBox.width(), 10) : 0;
                        listWidth = !body.hasClass("smode") && listBox.is(":visible") && webplayer.hasClass("list_open") ? parseInt(listBox.width(), 10) + 20 : 0;
                        favWidth = !body.hasClass("smode") && favBox.is(":visible") && webplayer.hasClass("list_bookmark_open") ? parseInt(favBox.width(), 10) + 20 : 0;
                        var videoRight = contWidth - (contWidth - (chatWidth + listWidth + favWidth));
                        chatVideobox.css({
                            right:videoRight > 0 ? videoRight + 4 : videoRight
                        });
                    },100);
                }

                $(window).on("resize",function() {
                    chatResize();
                });
                chatResize();

                //폰트 설정
                $("#chatting_area").append("<select title='폰트 크기 선택' id='add_chat_fontsize'><option value='10'>10px</option><option selected='selected' value='12'>12px</option><option value='14'>14px</option><option value='16'>16px</option><option value='18'>18px</option><option value='20'>20px</option><option value='24'>24px</option><option value='30'>30px</option><option value='40'>40px</option><option value='50'>50px</option><option value='60'>60px</option></select>");
                var getFontSize = $("#add_chat_fontsize").on("change",function() {
                    $("#chatting_area .chat_area").removeClass("font_size10 font_size12 font_size14 font_size16 font_size18 font_size20 font_size24 font_size30 font_size40 font_size50 font_size60").addClass("font_size" + this.value);
                    page.setCookie("player_menu_fontsize",this.value,"",365);
                });
                //폰트 크기
                var getMenufontsize = page.getCookie("player_menu_fontsize");
                if(getMenufontsize && getMenufontsize != "") {
                    getFontSize.val(getMenufontsize).trigger("change");
                }

                //이전 채팅
                $("body").on("keyup", "#write_area", function(e) {
                    if(page.data.chatprev != undefined && page.data.chatprev === true) {
                        if(e.keyCode == 38 || e.keyCode == 40) {
                            if(e.keyCode == 38) {
                                if(page.chatprev === -1) page.chatidx -= 1;
                                page.chatprev = -1;
                                if(page.chatidx < 0) {
                                    page.chatidx = page.chatlist.length - 1;
                                }
                            }
                            else {
                                page.chatidx += 1;
                                if(page.chatidx > page.chatlist.length - 1) {
                                    page.chatidx = 0;
                                }
                            }
                            var getPrevChat = page.chatlist[page.chatidx] != undefined ? page.chatlist[page.chatidx] : "";
                            if(getPrevChat !== "") {
                                $("#write_area").html(getPrevChat);
                            }
                        }
                    }
                });
                // .on("focus", "#write_area", function() {
                    // $(this).off("cut copy paste");
                    // $(this).unbind("cut copy paste");
                // });

                $("#write_area").on("paste", function (e) {
                    e.preventDefault();
                    try{
                        var a = e.originalEvent.clipboardData || window.clipboardData;
                        $("#write_area").text(a.getData("text"));
                    }
                    catch(error) {
                    }
                });

                $("#chatting_area, #webplayer_top .top_item").append('<a href="#" title="상단 화면 닫기" class="btn_top_remove"></a>');
                $(".btn_top_remove").on("click", function() {
                    if($(this).hasClass("active")) {
                        $(".btn_top_remove").removeClass("active");
                        $("body").removeClass("top_remove");
                    }
                    else {
                        $(".btn_top_remove").addClass("active");
                        $("body").addClass("top_remove");
                    }
                    page.setCookie("player_header_top",$(this).hasClass("active") ? "on" : "off","",365);
                    return false;
                });
                var getHeaderTop = page.getCookie("player_header_top");
                if(getHeaderTop == "on") {
                    $(".btn_top_remove").eq(0).trigger("click");
                }

                //공지 펼침
                $("#chatting_area .chat_notice .msg").on("click", function() {
                    $(this).parent().find(".btn_chat_notice").trigger("click");
                });
            },
            managerChat: function() {
                //매니저 채팅 고정
                $("#layer_mchat").append("<label class='mchat_check'><input type='checkbox' id='manager_fixed' class='check'>상단 고정</label>");
                $("#manager_fixed").on("click",function() {
                    page.style.managerResize();
                    page.setCookie("mng_mng_fixed",this.checked,"",365);
                });
                $("#setbox_mchat a, #layer_mchat .btn_close").on("click",function() {
                    $(".chatbox .setbox .btnset li.mchat a").removeClass("msg");
                    page.style.managerResize();
                });

                //매니저창 상태
                var getMngFixed = page.getCookie("mng_mng_fixed");
                if(getMngFixed && getMngFixed == "true") {
                    $("#manager_fixed").prop("checked",true);
                }
            },
            managerResize: function() {
                var managerPopup = $("#layer_mchat");
                if(managerPopup.length > 0) {
                    if($("#manager_fixed").is(":checked") && managerPopup.is(":visible") && $("#chatting_area").is(":visible")) {
                        $("#chatting_area").addClass("manager");
                        managerPopup.appendTo($("#chatting_area"));
                    }
                    else {
                        $("#chatting_area").removeClass("manager");
                        managerPopup.appendTo($("body"));
                    }
                }
            },
            menustats: function() {
                //리스트 상태
                var getMenuChat = page.getCookie("player_menu_chat");
                var getMenuArtlist = page.getCookie("player_menu_artlist");
                var getMenuFav = page.getCookie("player_menu_fav");
                if(getMenuChat == "off" && !$("#topmenu_chat a").hasClass("off")) $("#setbox_close a").trigger("click");
                if(getMenuArtlist == "off" && !$("#topmenu_airlist a").hasClass("off")) $(".listbox .headbtn .close a").trigger("click");
                if(getMenuFav == "off" && !$("#topmenu_fav a").hasClass("off")) $(".favbox .headbtn .close a").trigger("click");
            },
            toggle: function(type, target) {
                if($(target).is(":checked")) {
                    $(target).parent().addClass("toggle_on").find(".ico").stop(true,true).animate({ left:25 },type ? 100 : 0);
                    if($(target).hasClass("expand")) {
                        if($(target).closest(".option_panel").hasClass("active")) $(target).closest(".input_wrap").next(".input_sub").stop(true,true).slideDown(200);
                        else $(target).closest(".input_wrap").next(".input_sub").show();
                    }
                }
                else {
                    $(target).parent().removeClass("toggle_on");
                    $(target).parent().removeClass("toggle_on").find(".ico").stop(true,true).animate({ left:1 },type ? 100 : 0);
                    if($(target).hasClass("expand")) {
                        if($(target).closest(".option_panel").hasClass("active")) $(target).closest(".input_wrap").next(".input_sub").stop(true,true).slideUp(200);
                        else $(target).closest(".input_wrap").next(".input_sub").hide();
                    }
                }
            }
        },
        //함수 오버라이드
        funcadd: function() {
            var prev_msg = liveView.controller.chatContainer.msg;
            liveView.controller.chatContainer.msg = function() {
            	var getChat = prev_msg.apply(this, arguments);
                if(arguments.length > 0) {
                    var getData = arguments[0];
                    var getId = page.getid(getData.senderID);
                    var getName = getData.nickname;
                    var getMsg = getData.message;
                    if(page.info.use) {
                        page.mngr['msg'](getData);
                    }
                    if(page.isMe(getId)) {
                        page.chatlist.push(getMsg);
                        if(page.chatlist.length > 10) {
                            page.chatlist = page.chatlist.splice(page.chatlist.length - 10);
                        }
                        page.chatidx = page.chatlist.length - 1;
                        page.chatprev = 0;
                    }
                    if(getMsg.indexOf("?") > -1) {
                    	var getGalMsg = getMsg.replace(/\s/gi,"");
                    	if(getGalMsg === "?" || getGalMsg === "??" || getGalMsg === "???" || getGalMsg.replace(/\?/gi, "") === "") {
	                    	page.galgori.data.count += 1;
	                    	if(page.galgori.data.userlist[getId] === undefined) {
	                    		page.galgori.data.userlist[getId] = { name:getName, count:0 };
	                    	}
	                    	page.galgori.data.userlist[getId].count += 1;
	                    	if(page.galgori.data.maxcount < page.galgori.data.userlist[getId].count) {
	                    		page.galgori.data.maxid = getId;
	                    		page.galgori.data.maxname = getName;
	                    		page.galgori.data.maxcount = page.galgori.data.userlist[getId].count;
	                    	}
	                    }
                    }
                }
            };

            var prev_ogq = liveView.controller.chatContainer.ogq;
            liveView.controller.chatContainer.ogq = function() {
                var getChat = prev_ogq.apply(this, arguments);
                if(arguments.length > 0) {
                    var getData = arguments[0];
                    var getId = page.getid(getData.senderID);
                    var getName = getData.nickname;
                    var getMsg = getData.message;
                    if(page.info.use) {
                        getChat = page.mngr['msg'](getData, getChat);
                    }
                    if(page.isMe(getId)) {
                        page.chatlist.push(getMsg);
                        if(page.chatlist.length > 10) {
                            page.chatlist = page.chatlist.splice(page.chatlist.length - 10);
                        }
                        page.chatidx = page.chatlist.length - 1;
                        page.chatprev = 0;
                    }
                }
                return getChat;
            };

            var prev_join_ch = liveView.controller.chatContainer.join_ch;
            liveView.controller.chatContainer.join_ch = function() {
                prev_join_ch.apply(this, arguments);
                var data = arguments[0];
                if(page.log.debug) console.log("mngr join_ch", data);

                var getChangeCheck = false;
                var getChangeId = false;
                var getBjId = page.getid(data.bjID);
                if(page.info.bjid !== "" && page.info.bjid != getBjId) {
                    getChangeCheck = true;
                }

                if(liveView.ChatInfo.myUserInfo.bAdmin && liveView.ChatInfo.myUserInfo.szUserId != undefined) {
                    data.userID = liveView.ChatInfo.myUserInfo.szUserId;
                }

                if(page.info.id != page.getid(data.userID)) {
                    getChangeId = true;
                }
                page.info.bjid = getBjId;
                page.info.id = page.getid(data.userID);
                page.info.flag = page.getFlag();

                //공지
                page.noticeClose();

                //재설정
                if(getChangeCheck === true) {
                    page.info.sid = "";
                    if(page.isSocket()) {
                        page.socket.emit("mngr", { type:"player", id:page.info.id, bjid:page.info.bjid });
                    }
                    page.load();
                }
                else {
                    page.start();
                }

                if(getChangeId === true) {
                    page.load();
                }

                page.mngrload();
            };
            var prev_set_flag = liveView.controller.chatContainer.set_flag;
            liveView.controller.chatContainer.set_flag = function() {
                var data = arguments[0];
                if(page.log.debug) console.log("set_flag", page.info.flag, data);
                page.info.flag = data.flag1;
                page.mngrload();
                prev_set_flag.apply(this, arguments);
            };
            var prev_manager = liveView.controller.chatContainer.manager;
            liveView.controller.chatContainer.manager = function() {
                var data = arguments[0];
                if(page.log.debug) console.log("manager", data);

                var getId = page.getid(data.id);
                if(getId == page.info.id) {
                    page.info.flag = data.flag1;
                    page.mngrload();
                }
                prev_manager.apply(this, arguments);
            };
            var prev_manager_msg = liveView.controller.chatContainer.manager_msg;
            liveView.controller.chatContainer.manager_msg = function() {
                var mngBtn = $(".chatbox .setbox .btnset li.mchat a");
                if(!mngBtn.hasClass("on")) {
                    mngBtn.addClass("msg");
                }
                prev_manager_msg.apply(this, arguments);
            };
            var prev_kickout = liveView.controller.chatContainer.kickout;
            liveView.controller.chatContainer.kickout = function() {
                var data = arguments[0];
                if(page.isUse()) {
                    var getId = page.getid(data.id);

                    if(page.isManager()) {
                        //블라인드 강퇴 취소
                        if(data.kickType == 4 || data.kickType == 5) {
                            if(page.data.blindcancel === true) {
                                setTimeout(function() {
                                    page.chat.kick("kickcancel", { id:data.id, name:data.nickname, type:1, msg:"" });

                                    //log("kick",{ type:"kickcancel", bjid:page.info.bjid, id:page.info.id, uid:e.channel.data.id, uname:e.channel.data.nickname });
                                }, 500);
                            }
                        }
                        page.history.run("kick", data);
                    }

                    //강퇴 채팅 삭제
                    if(page.data.kickremove === false) {
                        $("#chat_area dl a[user_id='" + getId + "']").each(function(key, obj) {
                            $(obj).find("em").parent().append(function() {
                                var getEm = $(this).find("em");
                                var getText = getEm.text();
                                getEm.remove();
                                return "<span>" + getText + "</span>";
                            });
                        });
                    }
                }
                prev_kickout.apply(this, arguments);
            };
            var prev_dumb = liveView.controller.chatContainer.dumb;
            liveView.controller.chatContainer.dumb = function() {
                var data = arguments[0];
                if(page.isUse() && page.isManager()) {
                    page.history.run("dumb", data);
                }
                prev_dumb.apply(this, arguments);
            };
            var prev_join = liveView.controller.chatContainer.join;
            liveView.controller.chatContainer.join = function() {
                if(page.info.use) {
                    var getData = arguments[0][0];
                    page.mngr['join'](getData);
                }
                prev_join.apply(this, arguments);
            };
            var prev_balloon = liveView.controller.chatContainer.balloon;
            liveView.controller.chatContainer.balloon = function() {
                if(page.info.use) {
                    var getData = arguments[0];
                    page.mngr['balloon'](getData);
                }
                prev_balloon.apply(this, arguments);
            };
            var prev_sticker = liveView.controller.chatContainer.sticker;
            liveView.controller.chatContainer.sticker = function() {
                if(page.info.use) {
                    var getData = arguments[0];
                    page.mngr['sticker'](getData);
                }
                prev_sticker.apply(this, arguments);
            };
            var prev_chocolate = liveView.controller.chatContainer.chocolate;
            liveView.controller.chatContainer.chocolate = function() {
                if(page.info.use) {
                    var getData = arguments[0];
                    page.mngr['chocolate'](getData);
                }
                prev_chocolate.apply(this, arguments);
            };
            var prev_subscription_item_effect = liveView.controller.chatContainer.subscription_item_effect;
            liveView.controller.chatContainer.subscription_item_effect = function() {
                if(page.info.use) {
                    var getData = arguments[0];
                    page.mngr['subscription_item_effect'](getData);
                }
                prev_subscription_item_effect.apply(this, arguments);
            };
            var prev_adcon_effect = liveView.controller.chatContainer.adcon_effect;
            liveView.controller.chatContainer.adcon_effect = function() {
                if(page.info.use) {
                    var getData = arguments[0];
                    page.mngr['adcon_effect'](getData);
                }
                prev_adcon_effect.apply(this, arguments);
            };
            var prev_direct_receive = liveView.controller.chatContainer.direct_receive;
            liveView.controller.chatContainer.direct_receive = function() {
                if(page.info.use) {
                    var getData = arguments[0];
                    page.mngr['direct_receive'](getData);
                }
                prev_direct_receive.apply(this, arguments);
            };
            var prev_direct_send = liveView.controller.chatContainer.direct_send;
            liveView.controller.chatContainer.direct_send = function() {
                if(page.info.use) {
                    var getData = arguments[0];
                    page.mngr['direct_send'](getData);
                }
                prev_direct_send.apply(this, arguments);
            };

            //귓속말 보내기
            var prev_showChatMenu = liveView.Chat.showChatMenu;
            liveView.Chat.showChatMenu = function(a) {
                var getId = $(a).attr("user_id");
                setTimeout(function() {
                    $("#contextChatMenu ul li a:contains('귓속말 보내기')").off("click").on("click",function() {
                        if(page.isUse()) {
                            page.direct.show(getId);
                        }
                        else {
                            $("#write_area").html("/to " + getId + "&nbsp;").focus().focusEnd();
                        }
                        return false;
                    });
                }, 10);
                return prev_showChatMenu.apply(this, arguments);
            };
        },

        //신고
        report: {
            list: {},
            data: [],
            run: function(data) {
                if(page.log.debug) console.log("report", data);
                if(page.isManager() && (page.data.autoreportdumb === true || page.data.autoreportkick === true) && data.msg !== "") {
                    var getReport = data.msg.split(" ");
                    if(getReport.length > 1 && getReport[0] == "!신고" && getReport[1] !== "") {
                        var getReportId = getReport[1];
                        var getReportName = "";
                        var getChat = [];
                        var getReportList = $("#chat_area dl a[user_id='" + getReportId + "']");

                        if(getReportList.length > 0) {
                            getReportName = getReportList.eq(0).attr("user_nick");

                            getReportList.slice(-30).each(function() {
                                getChat.push($(this).closest("dl").find("dd").text());
                            });

                            if(page.report.list[getReportId] == undefined) {
                                page.report.list[getReportId] = { name:getReportName, count:1, chat:[], stats:"", reportlist:[data.id] };
                            }
                            else {
                                if($.inArray(data.id, page.report.list[getReportId].reportlist) == -1) {
                                    page.report.list[getReportId].reportlist.push(data.id);
                                }
                                else {
                                    return;
                                }
                                page.report.list[getReportId].count += 1;
                            }
                            if(getChat.length > 0) {
                                page.report.list[getReportId].chat = getChat;
                            }

                            var getReportType = "";
                            if(page.data.autoreportdumb === true && !isNaN(page.data.autoreportdumbcnt) && Number(page.data.autoreportdumbcnt) > 0 && page.report.list[getReportId].count >= Number(page.data.autoreportdumbcnt) && page.report.list[getReportId].stats === "") {
                                getReportType = "dumb";
                                page.report.list[getReportId].stats = "dumb";
                            }
                            if(page.data.autoreportkick === true && !isNaN(page.data.autoreportkickcnt) && Number(page.data.autoreportkickcnt) > 0 && page.report.list[getReportId].count >= Number(page.data.autoreportkickcnt)) {
                                getReportType = "kick";
                                page.report.list[getReportId].stats = "kick";
                            }

                            if(page.log.debug) console.log("report", page.report.list, getReportType);
                            if(getReportType !== "") {
                                var getKickData = { id:getReportId, name:getReportName, type:"", msg:"" };
                                if(getReportType == "kick") getKickData.type = 0;
                                page.chat.kick(getReportType, getKickData);
                                page.report.data.push(JSON.stringify(page.report.list[getReportId]));
                                page.history.save("save");
                                if((getReportType == "dumb" && page.data.autoreportkick !== true) || getReportType == "kick") {
                                    page.report.list[getReportId] = undefined;
                                    delete page.report.list[getReportId];
                                }

                                log("reportkick",{ type:"reportkick", bjid:page.info.bjid, id:page.info.id, uid:getReportId, uname:getReportName });
                            }
                        }
                    }
                }
            }
        },

        //히스토리
        history: {
            list: { kick: [], dumb: [], blind: [], report:[] },
            init: function() {
                var getPrevDay = new Date(new Date().getTime() - 7*24*60*60*1000);
                var getPrevDate = getPrevDay.getFullYear().toString() + (getPrevDay.getMonth() + 1 < 10?"0":"") + (getPrevDay.getMonth() + 1).toString() + (getPrevDay.getDate() < 10?"0":"") + getPrevDay.getDate().toString();
                $.each(localStorage,function(key,value) {
                    if(key.indexOf("historykick_") > -1 || key.indexOf("historydumb_") > -1 || key.indexOf("historybadge_") > -1 || key.indexOf("historyreport_") > -1) {
                        var getDay = key.split("_").pop();
                        if(Number(getDay) < Number(getPrevDate)) {
                            localStorage.removeItem(key);
                        }
                    }
                });
            },
            run: function(type, data) {
                if(page.isManager()) {
                    var getId = page.getid(data.id);
                    if(getId === null || getId === undefined || getId === "") return;

                    var getBtn = $("#mngr_menu .btn_addmenu_" + (type == "kick" || type == "blind" ? "kick" : type));
                    var getBadge = getBtn.find(".badge");
                    var getCount = parseInt(getBadge.text(),10);
                    if(isNaN(getCount)) getCount = 0;
                    getBadge.html(getCount + 1).show();

                    var getType = type == "kick" || type == "blind" ? "kick" : type;
                    var getChat = [];
                    $("#chat_area dl a[user_id='" + getId + "']").slice(-10).each(function() {
                        getChat.push($(this).closest("dl").find("dd").text());
                    });

                    var getAddChat = {
                        id:getId,
                        nick:data.nickname,
                        type:type,
                        kicktype:getType == "kick" && data.kickType ? data.kickType : "",
                        time:page.timeFormat("day") + " " + page.timeFormat("time"),
                        chat:getChat
                    };
                    page.history.list[getType].push(getAddChat);
                    page.history.save("save");
                }
            },
            save: function(type) {
                if('localStorage' in window && window['localStorage'] !== null) {
                    if(type == "save" && page.info.bjid != "") {
                        var getKickBadge = $(".btn_addmenu_kick .badge").text();
                        var getDumbBadge = $(".btn_addmenu_dumb .badge").text();
                        var getDay = page.timeFormat("date");
                        var getPrevHistory = localStorage.getItem("historybadge_" + page.info.bjid + "_" + getDay);

                        if(getPrevHistory == null ) {
                            if(page.history.list.kick.length > 0) {
                                page.history.list.kick = [page.history.list.kick.pop()];
                            }
                            if(page.history.list.dumb.length > 0) {
                                page.history.list.dumb = [page.history.list.dumb.pop()];
                            }
                        }
                        var getHistoryKick = JSON.stringify(page.history.list.kick);
                        var getHistoryDumb = JSON.stringify(page.history.list.dumb);
                        var getHistoryReport = JSON.stringify(page.report.data);

                        localStorage.setItem("historybadge_" + page.info.bjid + "_" + getDay, getKickBadge+","+getDumbBadge);
                        if(page.history.list.kick.length > 0) localStorage.setItem("historykick_" + page.info.bjid + "_" + getDay, getHistoryKick);
                        if(page.history.list.dumb.length > 0) localStorage.setItem("historydumb_" + page.info.bjid + "_" + getDay, getHistoryDumb);
                        if(page.report.data.length > 0) localStorage.setItem("historyreport_" + page.info.bjid + "_" + getDay, getHistoryReport);
                    }
                    else if(type == "load" && page.info.bjid != "") {
                        var getDay = page.timeFormat("date");
                        var getHistoryKick = localStorage.getItem("historykick_" + page.info.bjid + "_" + getDay);
                        var getHistoryDumb = localStorage.getItem("historydumb_" + page.info.bjid + "_" + getDay);
                        var getHistoryBadge = localStorage.getItem("historybadge_" + page.info.bjid + "_" + getDay);
                        var getHistoryReport = localStorage.getItem("historyreport_" + page.info.bjid + "_" + getDay);

                        if(getHistoryBadge && getHistoryBadge != "") {
                            var badgeArray = getHistoryBadge.split(",");
                            if(badgeArray[0] && badgeArray[0] != "") $(".btn_addmenu_kick .badge").html(badgeArray[0]).show();
                            if(badgeArray[1] && badgeArray[1] != "") $(".btn_addmenu_dumb .badge").html(badgeArray[1]).show();
                        }
                        else {
                            $(".btn_addmenu_kick .badge, .btn_addmenu_dumb .badge").html("").hide();
                        }

                        if(getHistoryKick && getHistoryKick != "") {
                            page.history.list.kick = $.parseJSON(getHistoryKick);
                        }
                        if(getHistoryDumb && getHistoryDumb != "") {
                            page.history.list.dumb = $.parseJSON(getHistoryDumb);
                        }
                        if(getHistoryReport && getHistoryReport != "") {
                            page.report.data = $.parseJSON(getHistoryReport);
                        }

                        //7일 이후 삭제
                        var localData = [];
                        var localName = "historybadge_" + page.info.bjid + "_";
                        $.each(localStorage,function(key, value) {
                            if(key.indexOf(localName) > -1) {
                                localData.push(key.replace(localName,""));
                            }
                        });

                        if(localData.length > 0) {
                            var getPrevDay = new Date(new Date().getTime() - 7*24*60*60*1000);
                            var getPrevDate = getPrevDay.getFullYear().toString() + (getPrevDay.getMonth() + 1 < 10?"0":"") + (getPrevDay.getMonth() + 1).toString() + (getPrevDay.getDate() < 10?"0":"") + getPrevDay.getDate().toString();
                            localData.sort();
                            $.each(localData,function(key,value) {
                                if(Number(value) < Number(getPrevDate)) {
                                    localStorage.removeItem("historykick_" + page.info.bjid + "_" + value);
                                    localStorage.removeItem("historydumb_" + page.info.bjid + "_" + value);
                                    localStorage.removeItem("historybadge_" + page.info.bjid + "_" + value);
                                    localStorage.removeItem("historyreport_" + page.info.bjid + "_" + value);
                                }
                            });
                        }
                    }
                }
            },
            view: function(type, sid) {
                if(page.isManager()) {
                    var getDay = page.timeFormat("date");
                    var getHistoryId = page.info.bjid;
                    var getHistoryList = [];
                    var localName = "historybadge_" + getHistoryId + "_";
                    $.each(localStorage,function(key, value) {
                        if(key.indexOf(localName) > -1) {
                            getHistoryList.push(key.replace(localName,""));
                        }
                    });

                    var getDumbData = [];
                    var getKickData = [];
                    if(getHistoryList) {
                        if($("#history_popup").length == 0) {
                            $("body").append('<div id="history_mask"></div><div id="history_popup">' +
                                '<div class="header_wrap"><p class="bjid"></p><div class="search_wrap"><select title="검색 타입 선택" class="select_search"><option value="id">아이디로 검색</option><option value="name">닉네임으로 검색</option></select><input type="text" placeholder="아이디를 입력해주세요." class="input_search" value=""><a href="#" class="btns btn_search">검색</a></div><a href="#" class="btns btn_history_reset">초기화</a><a href="#" class="btns btn_history_close">닫기</a></div>' +
                                '<div class="file_wrap"><div class="list_box"><p class="title">리스트</p><div class="scroll_wrap"><ul id="history_filelist" class="list"></ul></div></div></div>' +
                                '<div class="history_wrap">' +
                                    '<div class="kick_wrap"><div class="list_box"><div class="tab"><a href="#" class="btn_kick active">강퇴 내용<span class="number"></span></a><a href="#" class="btn_dumb">채팅금지 내용<span class="number"></span></a></div><div class="scroll_wrap kick on"><ul id="history_kick_list" class="list history_list"><li><p class="list_no">검색결과가 없습니다.</p></li></ul></div><div class="scroll_wrap dumb"><ul id="history_dumb_list" class="list history_list"><li><p class="list_no">검색결과가 없습니다.</p></li></ul></div></div></div>' +
                                    '<div class="detail_wrap"><div class="list_box"><p class="title">채팅 내용</p><div id="history_chat_detail" class="scroll_wrap"><div id="history_chat_area" class="history_chat_area"></div></div></div></div>' +
                                '</div></div>');

                            $("#history_popup .kick_wrap .tab a").on("click",function() {
                                if($(this).hasClass("active")) return false;
                                $("#history_popup .kick_wrap .tab a").removeClass("active");
                                var getIdx = $(this).addClass("active").index();
                                $("#history_popup .kick_wrap .scroll_wrap").removeClass("on").eq(getIdx).addClass("on");
                                return false;
                            });

                            var historyChatArea = $("#history_chat_area");
                            function historyChatView(target, chatdata) {
                                var removeCheck = false;
                                if($(target).is("input")) {
                                    if(!$(target).is(":checked")) {
                                        var getList = $(target).parent().find("a").removeClass("active").data("list");
                                        if(getList) {
                                            getList.remove();
                                        }
                                        return;
                                    }
                                    else {
                                        if($("#history_popup .history_list .check:checked").length == 1) removeCheck = true;
                                    }
                                }

                                if(chatdata.type == "kick") {
                                    var getType = "강퇴 내용";
                                    if(chatdata.kicktype && chatdata.kicktype == 3) getType = "채팅금지 횟수 초과 강퇴 내용";
                                    else if(chatdata.kicktype && chatdata.kicktype == 4) getType = "무분별한 도배 강퇴 내용";
                                    else if(chatdata.kicktype && chatdata.kicktype == 5) getType = "블라인드 강퇴 내용";
                                }
                                else if(chatdata.type == "blind") var getType = "블라인드 강퇴 내용";
                                else if(chatdata.type == "dumb") var getType = "채팅금지 내용";
                                var listArray = ["<li class='detail_title'><b>[" + chatdata.time + "]</b> " + chatdata.nick + "(" + chatdata.id + ") <b class='type'>" + getType + "</b></li>"];

                                $.each(chatdata.chat,function(key,value) {
                                    if(value != "") listArray.push('<li>' + value + '</li>');
                                });

                                if(removeCheck || $(target).is("a")) {
                                    historyChatArea.empty();
                                    $("#history_popup .history_list .active").removeClass("active").parent().find(".check").prop("checked",false);
                                    if($(target).is("a")) {
                                        $(target).parent().find(".check").prop("checked",true);
                                    }
                                }
                                var getDetailList = $("<ul class='list'>" + listArray.join("") + "</ul>");
                                $(target).parent().find("a").addClass("active").data("list", getDetailList);
                                historyChatArea.append(getDetailList);
                            }

                            function historyListView(type,file) {
                                var historyDumbList = $("#history_dumb_list").html("<li><p class='list_no'>검색결과가 없습니다.</p></li>");
                                var historyKickList = $("#history_kick_list").html("<li><p class='list_no'>검색결과가 없습니다.</p></li>");
                                var historyTabNumber = $("#history_popup .kick_wrap .tab .number").html("");
                                $("#history_chat_area").empty();
                                getDumbData = [];
                                getKickData = [];

                                if(type == "file") {
                                    $("#history_popup .input_search").val("");
                                    var getHistoryDumb = localStorage.getItem("historydumb_" + file);
                                    var getHistoryKick = localStorage.getItem("historykick_" + file);

                                    if(getHistoryDumb != null && getHistoryDumb != "") getDumbData = $.parseJSON(getHistoryDumb);
                                    if(getHistoryKick != null && getHistoryKick != "") getKickData = $.parseJSON(getHistoryKick);
                                }
                                else if(type == "search") {
                                    $("#history_filelist a.active").removeClass("active");
                                    var historySearchVal = $("#history_popup .input_search").val();
                                    var historySearchType = $("#history_popup .select_search").val();
                                    $.each(getHistoryList.sort().reverse(), function(key,value) {
                                        var getSearchDumb = localStorage.getItem("historydumb_" + getHistoryId + "_" + value);
                                        var getSearchKick = localStorage.getItem("historykick_" + getHistoryId + "_" + value);
                                        if(getSearchDumb != null && getSearchDumb != "") {
                                            var getSearchDumbData = $.parseJSON(getSearchDumb);
                                            if(getSearchDumbData.length > 0) {
                                                $.each(getSearchDumbData,function(keys,values) {
                                                    if((historySearchType == "id" && values.id.indexOf(historySearchVal) > -1) || (historySearchType == "name" && values.nick.indexOf(historySearchVal) > -1)) {
                                                        getDumbData.push(values);
                                                    }
                                                });
                                            }
                                        }
                                        if(getSearchKick != null && getSearchKick != "") {
                                            var getSearchKickData = $.parseJSON(getSearchKick);
                                            if(getSearchKickData.length > 0) {
                                                $.each(getSearchKickData,function(keys,values) {
                                                    if((historySearchType == "id" && values.id.indexOf(historySearchVal) > -1) || (historySearchType == "name" && values.nick.indexOf(historySearchVal) > -1)) {
                                                        getKickData.push(values);
                                                    }
                                                });
                                            }
                                        }
                                    });
                                }

                                if(getDumbData.length > 0) {
                                    historyTabNumber.eq(1).html("(" + getDumbData.length + ")");
                                    historyDumbList.empty();
                                    $.each(getDumbData.reverse(),function(key,value) {
                                        var getType = "<b class='type'>채팅금지</b> 되었습니다.";
                                        historyDumbList.append('<li data-id="' + value.id + '" data-idx="' + key + '" data-type="dumb"><input type="checkbox" class="check"><a href="#"><b class="time">[' + value.time + ']</b> ' + value.nick + '(' + value.id + ') 님이 ' + getType + '</a></li>');
                                    });
                                }

                                if(getKickData.length > 0) {
                                    historyTabNumber.eq(0).html("(" + getKickData.length + ")");
                                    historyKickList.empty();
                                    $.each(getKickData.reverse(),function(key,value) {
                                        if(value.type == "kick") {
                                            var getType = "<b class='type'>강제퇴장</b> 당하셨습니다.";
                                            if(value.kicktype && value.kicktype == 3) getType = "<b class='type'>채팅금지 횟수 초과로 강제퇴장</b> 당하셨습니다.";
                                            else if(value.kicktype && value.kicktype == 4) getType = "<b class='type'>무분별한 도배로 강제퇴장</b> 당하셨습니다.";
                                            else if(value.kicktype && value.kicktype == 5) getType = "<b class='type'>블라인드 상태에서 탈출 시도로 강제퇴장</b> 당하셨습니다.";
                                        }
                                        else var getType = "<b class='type'>블라인드 탈출 시도로 강제퇴장</b> 처리되었습니다.";
                                        historyKickList.append('<li data-id="' + value.id + '" data-idx="' + key + '" data-type="kick"><input type="checkbox" class="check"><a href="#"><b class="time">[' + value.time + ']</b> ' + value.nick + '(' + value.id + ') 님이 ' + getType + '</a></li>');
                                    });
                                }
                            }
                            $("#history_popup").on("click","#history_filelist a",function() {
                                if($(this).hasClass("active")) return false;
                                $("#history_filelist a.active").removeClass("active");
                                $(this).addClass("active");
                                var getFile = $(this).data("file");
                                historyListView("file", getFile);
                                return false;
                            }).on("click",".history_list a",function() {
                                var getIdx = $(this).parent().data("idx");
                                var getId = $(this).parent().data("id");
                                var getType = $(this).parent().data("type");
                                var getChat = getType == "dumb" ? getDumbData[getIdx] : getKickData[getIdx];
                                if(getChat != undefined && getChat.id == getId) {
                                    historyChatView(this,getChat);
                                }
                                return false;
                            }).on("change",".history_list .check",function() {
                                var getIdx = $(this).parent().data("idx");
                                var getId = $(this).parent().data("id");
                                var getType = $(this).parent().data("type");
                                var getChat = getType == "dumb" ? getDumbData[getIdx] : getKickData[getIdx];
                                if(getChat != undefined && getChat.id == getId) {
                                    historyChatView(this,getChat);
                                }
                                return false;
                            });

                            var historySearchBtn = $("#history_popup .btn_search").on("click",function() {
                                var getSearch = $("#history_popup .input_search").val();
                                if(getSearch != "") {
                                    historyListView("search");
                                }
                                else $("#history_popup .input_search").focus();
                                return false;
                            });
                            $("#history_popup .input_search").on("keyup",function(e) {
                                if(e.keyCode == 13) {
                                    historySearchBtn.trigger("click");
                                }
                            });

                            $("#history_popup .btn_history_close").on("click",function() {
                                $("#history_mask").stop(true,true).animate({ opacity:0 },200,function() {
                                    $(this).hide();
                                    $("#history_filelist, #history_kick_list, #history_dumb_list, #history_chat_area").empty();
                                    $("#history_popup .input_search").val("");
                                    $("#history_popup .kick_wrap .tab .number").html("");
                                });
                                $("#history_popup").stop(true,true).fadeOut(200);
                                return false;
                            });

                            $("#history_popup .btn_history_reset").on("click",function() {
                                if(confirm("강퇴, 채금 리스트를 초기화 하시겠습니까?")) {
                                    $.each(localStorage,function(key,value) {
                                        if(key.indexOf("historykick_" + page.info.bjid) > -1 || key.indexOf("historydumb_" + page.info.bjid) > -1 || key.indexOf("historybadge_" + page.info.bjid) > -1 || key.indexOf("historyreport_" + page.info.bjid) > -1) {
                                            localStorage.removeItem(key);
                                        }
                                    });
                                    $(".btn_addmenu_kick .badge, .btn_addmenu_dumb .badge").html("").hide();
                                    $("#history_popup .btn_history_close").trigger("click");
                                }

                                return false;
                            });

                            var historyPopup = $("#history_popup");
                            function popupResize() {
                                var getWidth = $(window).width();
                                var getHeight = $(window).height();
                                if(getWidth < 1020) historyPopup.addClass("fixwidth");
                                else historyPopup.removeClass("fixwidth");
                                if(getHeight < 620) historyPopup.addClass("fixheight");
                                else historyPopup.removeClass("fixheight");
                            }
                            $(window).on("resize",function() {
                                popupResize();
                            });
                            popupResize();
                        }

                        $("#history_chat_area").empty();
                        $("#history_popup .bjid").html(getHistoryId);
                        var historyFileList = $("#history_filelist").empty();
                        $.each(getHistoryList.sort().reverse(), function(key,value) {
                            historyFileList.append('<li><a href="#" data-file="' + getHistoryId + '_' + value + '"><span>▶</span>' + value.substr(0,4) + '년 ' + value.substr(4,2) + '월 ' + value.substr(6,2) + '일</a></li>');
                        });

                        $("#history_popup .kick_wrap .tab a").eq(type == "kick" ? 0 : 1).trigger("click");
                        $("#history_mask").stop(true,true).show().animate({ opacity:0.5 },200);
                        $("#history_popup").stop(true,true).fadeIn(200, function() {
                            if(sid == "") $("#history_filelist a:eq(0)").trigger("click");
                            else {
                                $("#history_popup .input_search").val(sid);
                                $("#history_popup .btn_search").trigger("click");
                            }
                        });
                    }
                }
            }
        },

        galgori: {
        	data: { time: 0, count: 0, maxid: "", maxname:"", maxcount: 0, userlist:{} },
        	init: function() {
        		page.galgori.data.time = new Date().getTime();
        	}
        },

        cmdtool: {
        	init: function() {
        		//메뉴 설정
        		if($("#mngr_cmd_popup").length == 0) {
        			$("body").append('<div id="mngr_cmd_popup"> <div class="popup_area"> <div class="popup_header"> <div class="tab_menu"> <a href="#" class="btn btn_tab active"><i class="fas fa-bullhorn"></i>공지</a> <a href="#" class="btn btn_tab"><i class="far fa-clock"></i>타이머</a> <a href="#" class="btn btn_tab"><i class="fas fa-poll-h"></i>투표</a> </div> <a href="#" class="btn btn_close"><i class="fas fa-times"></i>닫기</a> </div> <div class="popup_content"> <div class="tab_area tab_notice active"> <ul class="input_list"> <li class="input_box"> <p class="label">공지 설정</p> <a href="#" data-type="now" class="btn btn_notice">현재시간</a> <a href="#" data-type="uptime" class="btn btn_notice">방송시간</a> <a href="#" data-type="delete" class="btn btn_notice btn_delete"><i class="fas fa-times"></i>공지삭제</a> </li> <li class="input_box input_box_notice"> <p class="label">공지 내용</p> <input type="text" placeholder="공지내용" class="input_text input_notice"> <a href="#" data-type="notice" class="btn btn_notice btn_start"><i class="fas fa-bullhorn"></i>공지설정</a> </li> </ul> </div> <div class="tab_area tab_timer"> <ul class="input_list"> <li class="input_box"> <p class="label">타이머 설정</p> <a href="#" data-type="now" class="btn btn_time">현재시간</a> <a href="#" data-type="uptime" class="btn btn_time">방송시간</a> <a href="#" data-type="pause" class="btn btn_time btn_pause">일시정지</a> <a href="#" data-type="restart" class="btn btn_time btn_restart">재시작</a> <a href="#" data-type="delete" class="btn btn_time btn_delete"><i class="fas fa-times"></i>타이머삭제</a> </li> <li class="input_box"> <p class="label">타이머 입력</p> <div class="time_box"> <a href="#" data-time="60" data-timer="1분" title="1분 카운트다운" data-type="countdown" class="btn btn_time"><i class="fas fa-history"></i>1분</a> <a href="#" data-time="300" data-timer="5분" title="5분 카운트다운" data-type="countdown" class="btn btn_time"><i class="fas fa-history"></i>5분</a> <a href="#" data-time="600" data-timer="10분" title="10분 카운트다운" data-type="countdown" class="btn btn_time"><i class="fas fa-history"></i>10분</a> <a href="#" data-time="3600" data-timer="1시간" title="1시간 카운트다운" data-type="countdown" class="btn btn_time"><i class="fas fa-history"></i>1시간</a> </div> <div class="time_box"> <a href="#" data-time="10" data-timer="10초" title="10초 추가" data-type="add" class="btn btn_time"><i class="fa fa-plus-circle" aria-hidden="true"></i>10초</a> <a href="#" data-time="60" data-timer="1분" title="1분 추가" data-type="add" class="btn btn_time"><i class="fa fa-plus-circle" aria-hidden="true"></i>1분</a> <a href="#" data-time="600" data-timer="10분" title="10분 추가" data-type="add" class="btn btn_time"><i class="fa fa-plus-circle" aria-hidden="true"></i>10분</a> <a href="#" data-time="3600" data-timer="1시간" title="1시간 추가" data-type="add" class="btn btn_time"><i class="fa fa-plus-circle" aria-hidden="true"></i>1시간</a> </div> </li> </ul> </div> <div class="tab_area tab_vote"> <ul class="input_list"> <li class="input_box input_box_vote"> <p class="label">투표 설정</p> <a href="#" data-type="restart" title="이전에 설정한 투표 재시작" class="btn btn_vote">재시작</a> <a href="#" data-type="end" title="투표 끝내고 결과 보기" class="btn btn_vote">결과보기</a> <a href="#" data-type="delete" class="btn btn_vote btn_delete"><i class="fas fa-times"></i>투표삭제</a> <a href="#" data-type="start" class="btn btn_vote btn_start"><i class="fas fa-poll-h"></i>투표시작</a> </li> <li class="input_box input_box_time"> <p class="label">투표 시간</p> <input type="text" placeholder="10" class="input_text input_time"><p class="unit">초</p> </li> <li class="input_box input_box_name"> <p class="label">투표 내용</p> <input type="text" placeholder="투표내용 입력" class="input_text input_name"> </li> <li class="input_box vote_scroll"> <p class="label">투표 항목</p> <ul class="vote_list"> <li class="list_box"> <p class="label">1번</p> <input type="text" placeholder="투표항목 입력" class="input_text input_vote"> <a href="#" class="btn btn_add"><i class="fa fa-plus"></i>추가</a> <a href="#" class="btn btn_delete"><i class="fa fa-minus"></i>삭제</a> </li> </ul> <p class="desc">※ 투표는 채팅창에 숫자를 입력하여 참여할 수 있습니다.</p> </li> </ul> </div> </div> <p class="popup_desc">※ 아프리카도우미 채팅창을 이용 중이어야 사용가능합니다.</p> </div> </div>');
        		}

        		$("#mngr_cmd_popup .btn_close").on("click", function() {
        			$("#mngr_cmd_popup").stop(true,true).fadeOut(200);
        			return false;
        		});

        		$("#mngr_cmd_popup .tab_menu .btn_tab").on("click", function() {
        			$("#mngr_cmd_popup .tab_menu .btn_tab").removeClass("active");
        			var getIdx = $(this).addClass("active").index();
        			$("#mngr_cmd_popup .tab_area").removeClass("active").eq(getIdx).addClass("active");
        			return false;
        		});

        		var getVote = $("#mngr_cmd_popup .vote_list .list_box").eq(0).clone();
        		var voteList = $("#mngr_cmd_popup .vote_list");
        		$("#mngr_cmd_popup").on("click", ".vote_list .btn", function() {
        			var getType = $(this).hasClass("btn_add") ? "add" : "delete";
        			if(getType === "add") {
        				if(voteList.find(".list_box").length > 8) {
        					alert("9개 이상 추가할 수 없습니다.");
        				}
        				else {
        					getVote.clone().insertAfter($(this).closest(".list_box"));
        					voteList.find(".list_box").last().find(".input_text").focus();
        				}
        			}
        			else {
        				if(voteList.find(".list_box").length > 1) {
        					 $(this).closest(".list_box").remove();
        				}
        				else {
        					voteList.find(".list_box").find(".input_text").val("");
        				}
        			}
        			voteList.find(".list_box").each(function(key) {
        				$(this).find(".label").html((key + 1)+"번");
        			});

        			return false;
        		});

        		//공지사항
        		$("#mngr_cmd_popup .tab_notice .btn_notice").on("click", function() {
        			var getType = $(this).data("type");
        			var getMsg = "";
        			var getNotice = $("#mngr_cmd_popup .tab_notice .input_notice").val();
        			if(getType == "now") getMsg = "!공지/시간";
        			else if(getType == "uptime") getMsg = "!공지/{방송시간}";
        			else if(getType == "delete") getMsg = "!공지삭제";
        			else if(getType == "notice") {
        				if(getNotice == "") {
        					alert("공지내용을 입력해주세요.");
        					return false;
        				}
        				getMsg = "!공지/" + getNotice;
        			}
        			if(getMsg !== "'") page.chat.msg("cmd", getMsg);
        			return false;
        		});

        		//타이머
        		$("#mngr_cmd_popup .tab_timer .btn_time").on("click", function() {
        			var getType = $(this).data("type");
        			var getMsg = "";
        			if(getType == "now") getMsg = "!시간";
        			else if(getType == "uptime") getMsg = "!시간/방송시간";
        			else if(getType == "delete") getMsg = "!시간삭제";
        			else if(getType == "pause") {
        				$("#mngr_cmd_popup .tab_timer").addClass("pause");
        				getMsg = "!시간정지";
        			}
        			else if(getType == "restart") {
        				$("#mngr_cmd_popup .tab_timer").removeClass("pause");
        				getMsg = "!시간시작";
        			}
        			else if(getType == "countdown") {
        				getMsg = "!시간/" + $(this).data("time");
        			}
        			else if(getType == "add") {
        				getMsg = "!시간/추가/" + $(this).data("time");
        			}
        			if(getMsg !== "'") page.chat.msg("cmd", getMsg);
        			return false;
        		});

        		//투표
        		$("#mngr_cmd_popup .tab_vote .input_time").on("keyup", function(e) {
	            	if(e.keyCode == 8 || e.keyCode == 16 || e.keyCode == 35 || e.keyCode == 36 || e.keyCode == 37 || e.keyCode == 38 || e.keyCode == 39 || e.keyCode == 40 || e.keyCode == 45 || e.keyCode == 46 || (e.ctrlKey === true && e.keyCode == 65)) {
		                return true;
		            }
		            this.value = this.value.replace(/[^0-9]/g,'');
	         	});

        		$("#mngr_cmd_popup .tab_vote .btn_vote").on("click", function() {
        			var getType = $(this).data("type");
        			var getMsg = "";
        			if(getType == "restart") getMsg = "!투표시작";
        			else if(getType == "end") getMsg = "!투표종료";
        			else if(getType == "delete") getMsg = "!투표삭제";
        			else if(getType == "start") {
        				var getTime = $("#mngr_cmd_popup .tab_vote .input_time").val();
        				var getVoteTime = 10;
        				if(getTime !== "" && !isNaN(getTime) && Number(getTime) > 10) {
        					getVoteTime = getTime;
        				}
        				var getDesc = $("#mngr_cmd_popup .tab_vote .input_name").val();
        				var getVoteDesc = "";
        				if(getDesc !== "") {
        					getVoteDesc = "/" + getDesc;
        				}
        				var getVoteList = [];
        				var voteIdx = 0;
        				var voteCheck = true;
        				$("#mngr_cmd_popup .tab_vote .vote_list .input_vote").each(function(key) {
        					var getText = $(this).val();
        					if(getText !== "") {
        						if(getText.indexOf(",") > -1 || getText.indexOf("~") > -1) {
        							alert("투표항목에 , 또는 ~ 는 입력할 수 없습니다.");
        							voteCheck = false;
        							return false;
        						}
        						voteIdx += 1;
        						getVoteList.push((voteIdx) + ":" + getText);
        					}
        				});
        				if(voteCheck == false) return false;

        				if(getVoteList.length > 0) {
        					getMsg = "!투표설정/" + getVoteList.join(",") + "/" + getVoteTime + getVoteDesc;
        				}
        				else {
        					getMsg = "!투표시작";
        				}
        			}

        			if(getMsg !== "'") page.chat.msg("cmd", getMsg);
        			return false;
        		});
        	}
        },

        //별풍선 기능
        balloon: {
            interval: null,
            statsinterval: null,
            useinterval: null,
            usecheck: true,
            usetime: 0,
            init: function() {
                //send_area
                if(!$("#layerStarGiftNew .tab1 .send_area").hasClass("add")) {
                    var getPopupGift = $("#layerStarGiftNew .tab1 .send_area").addClass("add");
                    $("<div class='text_box'><p class='gift_title'><i class='fa fa-commenting-o' aria-hidden='true'></i>채팅 메시지</p><textarea class='gift_box'></textarea></div>").insertBefore(getPopupGift.find(".btn_area"));
                    $("#layerStarGiftNew .tab1 .send_area .gift_at > dt").prepend('<i class="fa fa-star" aria-hidden="true"></i>');
                    $("#layerStarGiftNew .tab1 .send_area .btn_area").prepend('<button class="btn_gifts">연속 선물</button>');
var giftsPopup = '<div class="gifts_popup">' +
'<div class="gifts_tab"><a href="#" data-tab="doosan" class="btn_tab tab_01 active">두산 선물하기</a><a href="#" data-tab="continue" class="btn_tab tab_02">반복 선물하기</a></div><a href="#" class="btn_gifts_close">닫기</a>' +
'<div class="gifts_content">' +
    '<div class="gifts_panel doosan active">' +
        '<p class="txt_info"><i class="fa fa-info-circle" aria-hidden="true"></i>시작 부터 끝 개수까지 1개씩 증가하며 선물합니다.</p>' +
        '<table class="gifts_table"><tbody>' +
            '<tr><th>선물할 개수</th><td><p class="label">시작:</p><input type="text" data-def="1" class="input_gifts gifts_start" value="1"><p class="label"> &nbsp;&nbsp;&nbsp; 끝:</p><input type="text" data-def="10" class="input_gifts gifts_end" value="10"></td></tr>' +
            '<tr><th>선물 딜레이</th><td><select data-def="500" class="select_time gifts_time"><option value="200">0.2초</option><option value="500" selected="selected">0.5초</option><option value="1000">1초</option><option value="2000">2초</option><option value="3000">3초</option><option value="5000">5초</option><option value="7000">7초</option><option value="10000">10초</option><option value="20000">20초</option><option value="30000">30초</option><option value="60000">1분</option></select><p class="label">(딜레이 초마다 선물)</p></td></tr>' +
        '</tbody></table>' +
        '<div class="gifts_info"><p class="gifts_number">보유 별풍선 <b>0</b>개</p><p class="gifts_total">필요 별풍선 <b>0</b>개<span class="error"><em></em>보유 별풍선 부족</span></p><a href="#" class="btn_gifts_buy">구매</a></div>' +
        '<div class="btn_area"><button class="btn_gifts_gift">선물하기</button><button class="btn_gifts_cancel">취소</button></div>' +
        '<p class="txt_info"><i class="fa fa-info-circle" aria-hidden="true"></i>연속선물 취소는 채팅창 하단의 선물취소를 누르거나 웹플레이어를 새로고침 해주세요.</p>' +
    '</div>' +
    '<div class="gifts_panel continue">' +
        '<p class="txt_info"><i class="fa fa-info-circle" aria-hidden="true"></i>개수를 횟수만큼 반복해서 선물합니다.</p>' +
        '<table class="gifts_table"><tbody>' +
            '<tr><th>선물할 개수</th><td><p class="label">개수:</p><input type="text" data-def="10" class="input_gifts gifts_number" value="10"><p class="label"> &nbsp;&nbsp;&nbsp; 횟수:</p><input type="text" data-def="10" class="input_gifts gifts_count" value="10"></td></tr>' +
            '<tr><th>선물 딜레이</th><td><select data-def="500" class="select_time gifts_time"><option value="200">0.2초</option><option value="500" selected="selected">0.5초</option><option value="1000">1초</option><option value="2000">2초</option><option value="3000">3초</option><option value="5000">5초</option><option value="7000">7초</option><option value="10000">10초</option><option value="20000">20초</option><option value="30000">30초</option><option value="60000">1분</option></select><p class="label">(딜레이 초마다 선물)</p></td></tr>' +
        '</tbody></table>' +
        '<div class="gifts_info"><p class="gifts_number">보유 별풍선 <b>0</b>개</p><p class="gifts_total">필요 별풍선 <b>0</b>개<span class="error"><em></em>보유 별풍선 부족</span></p><a href="#" class="btn_gifts_buy">구매</a></div>' +
        '<div class="btn_area"><button class="btn_gifts_gift">선물하기</button><button class="btn_gifts_cancel">취소</button></div>' +
        '<p class="txt_info"><i class="fa fa-info-circle" aria-hidden="true"></i>연속선물 취소는 채팅창 하단의 선물취소를 누르거나 웹플레이어를 새로고침 해주세요.</p>' +
    '</div></div></div>';
                    $("#layerStarGiftNew .tab1 .send_area").append(giftsPopup);

                    $("#actionbox").prepend('<div id="gifts_stats" class="gifts_stats"><p class="doosan"><b class="total">0</b>두산 중 <b class="count">0</b>두산</p><p class="continue"><b class="total">0</b>회 중 <b class="count">0</b>회</p><a href="#" class="btn_cancel">선물취소</a></div>');

                    //연속 선물 팝업 열기
                    $("#layerStarGiftNew .btn_gifts").on("click", function() {
                        if(page.opt.giftcontinue !== true) return;


                        var giftsCookie = page.getCookie("gifts_agree");
                        if(giftsCookie === "agree" || confirm("테스트 및 주의가 필요한 기능입니다.\r\이용 목적 및 취소 방법 등에 대해 미리 숙지해주세요.\r\n연속 선물하기 기능을 사용하시겠습니까?")) {
                            page.setCookie("gifts_agree","agree","",365);

                            $("#layerStarGiftNew .gifts_popup").stop(true,true).fadeIn(200);
                            $("#layerStarGiftNew .gifts_popup .input_gifts[data-def]").val(function() {
                                return $(this).data("def");
                            });
                            $("#layerStarGiftNew .gifts_popup .gifts_info .gifts_number b").html($("#layerStarGiftNew .tab1 .send_area .userBalloonCount").html());
                            $("#layerStarGiftNew .gifts_popup .gifts_info .gifts_total .error").removeClass("on");
                            page.balloon.total();
                        }
                        return false;
                    });

                    //연속 선물 탭
                    $("#layerStarGiftNew .gifts_popup .btn_tab").on("click", function() {
                        $(this).parent().find(".btn_tab.active").removeClass("active");
                        var getIdx = $(this).addClass("active").index();
                        $("#layerStarGiftNew .gifts_popup .gifts_panel").removeClass("active").eq(getIdx).addClass("active");
                        page.balloon.total();
                        return false;
                    });
                    $("#layerStarGiftNew .gifts_popup .btn_gifts_buy").on("click", function() {
                        $("#layerStarGiftNew .tab1 .send_area .btn_buy").trigger("click");
                        return false;
                    });

                    //연속 선물 팝업 닫기
                    $("#layerStarGiftNew .gifts_popup .btn_gifts_close, #layerStarGiftNew .gifts_popup .btn_gifts_cancel").on("click", function() {
                        $("#layerStarGiftNew .gifts_popup").stop(true,true).fadeOut(200);
                        return false;
                    });

                    //입력창 선택
                    var giftSelectInterval = null;
                    $("#layerStarGiftNew .gifts_popup .gifts_panel.doosan .gifts_start, #layerStarGiftNew .gifts_popup .gifts_panel.doosan .gifts_end, #layerStarGiftNew .gifts_popup .gifts_panel.continue .gifts_number, #layerStarGiftNew .gifts_popup .gifts_panel.continue .gifts_count").on("keyup focusout", function() {
                        page.balloon.total();
                    }).on("focusin", function() {
                        var getInput = $(this);
                        clearTimeout(giftSelectInterval);
                        giftSelectInterval = setTimeout(function() {
                            getInput.select();
                        }, 100);
                    });

                    //연속 선물 하기
                    var btnGiftCheck = true;
                    $("#layerStarGiftNew .gifts_popup .gifts_panel.doosan .btn_gifts_gift").on("click", function() {
                        if(page.opt.giftcontinue !== true) return false;

                        //if(page.balloon.usecheck !== true && !page.isGrade("top", page.info.flag)) {
                        if(page.balloon.usecheck !== true) {
                            alert(page.balloon.usetime + "초 후 사용 가능합니다.");
                            return false;
                        }

                        if(btnGiftCheck === false) return false;
                        btnGiftCheck = false;
                        doTimeout("btn_gifts_gift", function() {
                            btnGiftCheck = true;
                        }, 1000);

                        page.balloon.use(true);

                        var giftTotal = $("#layerStarGiftNew .gifts_popup .gifts_panel.doosan .gifts_info .gifts_total b").html();
                        if($("#layerStarGiftNew .gifts_popup .gifts_panel.doosan .gifts_info .gifts_total .error").hasClass("on")) {
                            alert("보유한 별풍선이 부족합니다.");
                        }
                        else {
                            var giftEnd = $("#layerStarGiftNew .gifts_popup .gifts_panel.doosan .gifts_end").val();
                            if(giftEnd === "" || giftEnd === undefined || giftEnd === null || isNaN(giftEnd)) {
                                giftEnd = 1;
                            }
                            if(+giftEnd < 10) {
                                alert("최소 10두산 이상부터 선물 가능합니다.");
                                $("#layerStarGiftNew .gifts_popup .gifts_panel.doosan .gifts_end").val(10);
                                page.balloon.total();
                            }
                            else if(confirm("총 " + giftTotal + " 개의 별풍선을 선물하시겠습니까?")) {
                                $("#layerStarGiftNew .gifts_popup").hide();
                                page.balloon.start("doosan");
                            }
                        }
                        return false;
                    });
                    $("#layerStarGiftNew .gifts_popup .gifts_panel.continue .btn_gifts_gift").on("click", function() {
                        if(page.opt.giftcontinue !== true) return false;

                        //if(page.balloon.usecheck !== true && !page.isGrade("top", page.info.flag)) {
                        if(page.balloon.usecheck !== true) {
                            alert(page.balloon.usetime + "초 후 사용 가능합니다.");
                            return false;
                        }

                        if(btnGiftCheck === false) return false;
                        btnGiftCheck = false;
                        doTimeout("btn_gifts_gift", function() {
                            btnGiftCheck = true;
                        }, 1000);

                        page.balloon.use(true);

                        var giftTotal = $("#layerStarGiftNew .gifts_popup .gifts_panel.continue .gifts_info .gifts_total b").html();
                        if($("#layerStarGiftNew .gifts_popup .gifts_panel.continue .gifts_info .gifts_total .error").hasClass("on")) {
                            alert("보유한 별풍선이 부족합니다.");
                        }
                        else {
                            var giftNumber = $("#layerStarGiftNew .gifts_popup .gifts_panel.continue .gifts_number").val();
                            if(giftNumber === "" || giftNumber === undefined || giftNumber === null || isNaN(giftNumber)) {
                                giftNumber = 1;
                            }
                            if(+giftNumber < 10) {
                                alert("최소 10개 이상부터 선물 가능합니다.");
                                $("#layerStarGiftNew .gifts_popup .gifts_panel.continue .gifts_number").val(10);
                                page.balloon.total();
                            }
                            else if(confirm("총 " + giftTotal + " 개의 별풍선을 선물하시겠습니까?")) {
                                $("#layerStarGiftNew .gifts_popup").hide();
                                page.balloon.start("continue");
                            }
                        }
                        return false;
                    });

                    //연속선물 취소
                    $("#gifts_stats .btn_cancel, #gifts_stats .btn_close").on("click", function() {
                        clearInterval(page.balloon.interval);
                        clearTimeout(page.balloon.statsinterval);
                        $("#gifts_stats").fadeOut(200);
                        $("#layerStarGiftNew .tab1 .send_area .gift_at .starCount").prop("readonly", false);
                        return false;
                    });

                    //선물창 닫기
                    $(".player_item_list .star_balloon button").on("click", function() {
                        $("#layerStarGiftNew .tab1 .send_area .gift_at .starCount").prop("readonly", false);
                        $("#layerStarGiftNew .tab1 .send_area .text_box .gift_box").val("");
                        $("#layerStarGiftNew .gifts_popup").hide();
                    });

                    //선물 채팅 메시지
                    $("#layerStarGiftNew .tab1 .send_area .btn_area .btn_gift").on("click", function() {
                        var giftText = $("#layerStarGiftNew .tab1 .send_area .text_box .gift_box").val();
                        if($.trim(giftText) !== "") {
                            giftText = page.brtext(true, giftText);
                            giftText = page.brtext(false, giftText);
                            $("#layerStarGiftNew .tab1 .send_area .text_box .gift_box").val("");
                            $("#write_area").html(giftText);
                            doTimeout("gift_text_send", function() {
                                $("#btn_send").trigger("click");
                            }, 1000);
                        }
                    });

                    //임시
                    //$("#layerStarGiftNew").fadeIn(200);
                }
            },
            total: function() {
                var getType = $("#layerStarGiftNew .gifts_popup .btn_tab.active").data("tab");
                var getTotal = 0;
                var getStats = 0;
                if(getType === "doosan") {
                    var giftStart = $("#layerStarGiftNew .gifts_popup .gifts_panel.doosan .gifts_start").val();
                    var giftEnd = $("#layerStarGiftNew .gifts_popup .gifts_panel.doosan .gifts_end").val();
                    if(giftStart === "" || giftStart === undefined || giftStart === null || isNaN(giftStart)) {
                        giftStart = 1;
                        $("#layerStarGiftNew .gifts_popup .gifts_panel.doosan .gifts_start").val(1);
                    }
                    if(giftEnd === "" || giftEnd === undefined || giftEnd === null || +giftStart>+giftEnd) {
                        $("#layerStarGiftNew .gifts_popup .gifts_panel.doosan .gifts_end").val(giftStart);
                    }
                    getTotal = 0;
                    for(var i = +giftStart ; i<= +giftEnd; i++) {
                        getTotal += i;
                    }
                    getStats = giftEnd;
                }
                else if(getType === "continue") {
                    var giftNumber = $("#layerStarGiftNew .gifts_popup .gifts_panel.continue .gifts_number").val();
                    var giftCount = $("#layerStarGiftNew .gifts_popup .gifts_panel.continue .gifts_count").val();
                    if(giftNumber === "" || giftNumber === undefined || giftNumber === null || isNaN(giftNumber)) {
                        giftNumber = 1;
                        $("#layerStarGiftNew .gifts_popup .gifts_panel.continue .gifts_number").val(1);
                    }
                    if(giftCount === "" || giftCount === undefined || giftCount === null) {
                        $("#layerStarGiftNew .gifts_popup .gifts_panel.continue .gifts_count").val(1);
                    }
                    getTotal = +giftNumber * +giftCount;
                    getStats = giftCount;
                }

                $("#layerStarGiftNew .gifts_popup .gifts_panel." + getType + " .gifts_info .gifts_total b").html(page.numberComma(getTotal));
                $("#layerStarGiftNew .gifts_popup .gifts_panel." + getType + " .gifts_info .gifts_total .error").removeClass("on");
                var getCurrentGift = $("#layerStarGiftNew .gifts_popup .gifts_info .gifts_number b").eq(0).text();
                getCurrentGift = getCurrentGift.replace(/,/gi,"");
                if(!isNaN(getCurrentGift) && +getCurrentGift < getTotal) {
                    $("#layerStarGiftNew .gifts_popup .gifts_panel." + getType + " .gifts_info .gifts_total .error").addClass("on");
                }

                $("#gifts_stats p.on").removeClass("on");
                $("#gifts_stats p." + getType).addClass("on").find("b.total").html(page.numberComma(getStats));
            },
            start: function(type) {
                clearInterval(page.balloon.interval);
                var giftStart = 0;
                var giftEnd = 0;
                var giftNumber = 0;
                var giftCount = 0;
                var giftDelay = 0;
                var giftStartCheck = false;
                if(type === "doosan") {
                    giftStart = $("#layerStarGiftNew .gifts_popup .gifts_panel.doosan .gifts_start").val();
                    giftEnd = $("#layerStarGiftNew .gifts_popup .gifts_panel.doosan .gifts_end").val();
                    giftDelay = $("#layerStarGiftNew .gifts_popup .gifts_panel.doosan .gifts_time").val();

                    $("#layerStarGiftNew .tab1 .send_area .gift_at .starCount").prop("readonly", true);
                    if(giftStart !== "" && giftStart !== undefined && giftStart !== null && !isNaN(giftStart) && giftEnd !== "" && giftEnd !== undefined && giftEnd !== null && !isNaN(giftEnd)) {
                        if(isNaN(giftDelay) || +giftDelay < 200) giftDelay = 200;
                        clearTimeout(page.balloon.statsinterval);
                        $("#gifts_stats").fadeIn(200);
                        giftStart = +giftStart;
                        giftEnd = +giftEnd;
                        $("#gifts_stats p.doosan .count").html(0);
                        $("#layerStarGiftNew .tab1 .send_area .gift_at .starCount").val(giftStart);
                        page.balloon.interval = setInterval(function() {
                            if($("#gifts_stats").is(":visible") === false || giftStart > giftEnd) {
                                clearInterval(page.balloon.interval);
                                $("#gifts_stats").fadeOut(200);
                                page.balloon.use(false);
                                $("#layerStarGiftNew .tab1 .send_area .gift_at .starCount").prop("readonly", false);
                                return;
                            }
                            else {
                                $("#gifts_stats p.doosan .count").html(giftStart);
                                $("#layerStarGiftNew .tab1 .send_area .gift_at .starCount").val(giftStart);
                                $("#layerStarGiftNew .tab1 .send_area .btn_area .btn_gift").trigger("click");
                                giftStart += 1;
                            }
                        }, giftDelay);
                        giftStartCheck = true;
                    }
                    else {
                        $("#layerStarGiftNew .tab1 .send_area .gift_at .starCount").prop("readonly", false);
                    }
                }
                else if(type === "continue") {
                    giftNumber = $("#layerStarGiftNew .gifts_popup .gifts_panel.continue .gifts_number").val();     //개수
                    giftCount = $("#layerStarGiftNew .gifts_popup .gifts_panel.continue .gifts_count").val();           //회수
                    giftDelay = $("#layerStarGiftNew .gifts_popup .gifts_panel.continue .gifts_time").val();

                    $("#layerStarGiftNew .tab1 .send_area .gift_at .starCount").prop("readonly", true);
                    if(giftNumber !== "" && giftNumber !== undefined && giftNumber !== null && !isNaN(giftNumber) && giftCount !== "" && giftCount !== undefined && giftCount !== null && !isNaN(giftCount)) {
                        if(isNaN(giftDelay) || +giftDelay < 200) giftDelay = 200;
                        clearTimeout(page.balloon.statsinterval);
                        $("#gifts_stats").fadeIn(200);
                        giftNumber = +giftNumber;
                        giftCount = +giftCount;
                        giftStart = 1;
                        $("#gifts_stats p.continue .count").html(0);
                        $("#layerStarGiftNew .tab1 .send_area .gift_at .starCount").val(giftNumber);
                        page.balloon.interval = setInterval(function() {
                            if($("#gifts_stats").is(":visible") === false || giftStart > giftCount) {
                                clearInterval(page.balloon.interval);
                                $("#gifts_stats").fadeOut(200);
                                page.balloon.use(false);
                                $("#layerStarGiftNew .tab1 .send_area .gift_at .starCount").prop("readonly", false);
                                return;
                            }
                            else {
                                $("#gifts_stats p.continue .count").html(giftStart);
                                $("#layerStarGiftNew .tab1 .send_area .gift_at .starCount").val(giftNumber);
                                $("#layerStarGiftNew .tab1 .send_area .btn_area .btn_gift").trigger("click");
                                giftStart += 1;
                            }
                        }, giftDelay);
                        giftStartCheck = true;
                    }
                    else {
                        $("#layerStarGiftNew .tab1 .send_area .gift_at .starCount").prop("readonly", false);
                    }
                }

                if(giftStartCheck === true) {
                    page.balloon.use(false);
                }
            },
            use: function(type) {
                clearInterval(page.balloon.useinterval);
                if(type === false) {
                    page.balloon.usecheck = false;
                    page.balloon.usetime = 30;
                    page.balloon.useinterval = setInterval(function() {
                        page.balloon.usetime -= 1;
                        if(page.balloon.usetime < 1) {
                            page.balloon.use(true);
                        }
                    }, 1000);
                }
                else {
                    page.balloon.usetime = 0;
                    page.balloon.usecheck = true;
                }
            }
        },


        //유틸
        alarm: function() {
            if($("#chat_alarm").length > 0) $("#chat_alarm").remove();
            $("body").append('<div id="chat_alarm"><embed hidden="true" autostart="true" loop="false" src="https://mngr.afreehp.kr/mngr/sound.mp3" /></div>');
        },

        brtext: function(type, msg) {
            if(typeof msg == "string" && $.trim(msg) !== "") {
                if(type) {
                    msg = msg.replace(/\r\n/g,"<br>").replace(/\n/g,"<br>").replace(/\r/g,"<br>");
                }
                else {
                    //preg_replace('#(<br */?>\s*)+#i', '<br />', $html);
                    //msg = msg.replace(/(<br\s*\/?>\s*)+/gi,"<br>").replace(/<br>/g,"\r\n");
                    msg = msg.replace(/(<br[^>]*>\s*){3,}/gi,"<br>").replace(/<br>/g,"\r\n");
                }
            }
            return msg;
        },

        //대체어
        replacedetail: function(data, msg) {
            var getMsg = msg;
            var getName = "";
            if(data.name != undefined && data.name !== "") {
                getMsg = getMsg.replace(/{닉네임}/gi, data.name);
                getName = data.name;
            }
            if(data.id != undefined && data.id !== "") {
                getMsg = getMsg.replace(/{아이디}/gi, data.id);
                if(getName !== "") {
                    getName = getName + "(" + data.id + ")";
                }
                else getName = data.id;
            }
            if(data.join != undefined && data.join !== "") {
                getMsg = getMsg.replace(/{가입수}/gi, page.numberComma(data.join));
            }
            if(data.val != undefined && data.val !== "") {
                getMsg = getMsg.replace(/{선물수}/gi, page.numberComma(data.val));
            }
            if(data.follow != undefined && data.follow !== "") {
                getMsg = getMsg.replace(/{개월수}/gi, page.numberComma(data.follow));
            }
            if(getMsg.indexOf("{이름}") > -1 && getName !== "") {
                getMsg = getMsg.replace(/{이름}/gi, getName);
            }

            if(data.uplist != undefined && data.uplist.length > 0) {
                getMsg = getMsg.replace(/{최근추천}/gi, data.uplist.join(","));
            }
            if(data.up != undefined && data.up > 0) {
                getMsg = getMsg.replace(/{오늘추천수}/gi, data.up);
            }
            return getMsg;
        },
        replaceword: function(type, msg) {
            var getMsg = msg;
            if(getMsg.indexOf("{제목}") > -1 && page.info.detail.title != undefined) {
                getMsg = getMsg.replace(/{제목}/gi, page.info.detail.title);
            }
            if(getMsg.indexOf("{시작시간}") > -1 && page.info.detail.start != undefined) {
                getMsg = getMsg.replace(/{시작시간}/gi, page.info.detail.start);
            }
            if(getMsg.indexOf("{시청자수}") > -1 && page.info.detail.view != undefined) {
                getMsg = getMsg.replace(/{시청자수}/gi, page.numberComma(page.info.detail.view));
            }
            if(getMsg.indexOf("{누적시청자수}") > -1 && page.info.detail.total != undefined) {
                getMsg = getMsg.replace(/{누적시청자수}/gi, page.numberComma(page.info.detail.total));
            }
            if(getMsg.indexOf("{팬클럽수}") > -1 && page.info.detail.fan != undefined) {
                getMsg = getMsg.replace(/{팬클럽수}/gi, page.numberComma(page.info.detail.fan));
            }
            if(getMsg.indexOf("{서포터수}") > -1 && page.info.detail.sup != undefined) {
                getMsg = getMsg.replace(/{서포터수}/gi, page.numberComma(page.info.detail.sup));
            }
            if(getMsg.indexOf("{구독자수}") > -1 && page.info.detail.follow != undefined) {
                getMsg = getMsg.replace(/{구독자수}/gi, page.numberComma(page.info.detail.follow));
            }
            if((getMsg.indexOf("{즐찾수}") > -1 || getMsg.indexOf("{즐겨찾기수}") > -1) && page.info.detail.fav != undefined) {
                getMsg = getMsg.replace(/{즐찾수}/gi, page.numberComma(page.info.detail.fav));
                getMsg = getMsg.replace(/{즐겨찾기수}/gi, page.numberComma(page.info.detail.fav));
            }
            if(getMsg.indexOf("{추천수}") > -1 && page.info.detail.up != undefined) {
                getMsg = getMsg.replace(/{추천수}/gi, page.numberComma(page.info.detail.up));
            }

            if(getMsg.indexOf("{오늘추천수}") > -1 && page.info.up.today != undefined) {
                getMsg = getMsg.replace(/{오늘추천수}/gi, page.numberComma(page.info.up.today));
            }
            if(getMsg.indexOf("{최근추천}") > -1 && page.info.up.today > 0 && page.info.up.recent.length > 0) {
                getMsg = getMsg.replace(/{최근추천}/gi, page.info.up.recent.join(","));
            }

            if(getMsg.indexOf("{방송시간}") > -1 && page.info.detail.start != undefined) {
                var getStartDate = new Date(page.info.detail.start);
                var getCurrentDate = new Date();
                var getUptime = (getCurrentDate - getStartDate) / 1000;

                var getUptimeDay = Math.floor(getUptime/86400);
                var getUptimeHour = Math.floor((getUptime%86400)/3600);
                var getUptimeMin = Math.floor(((getUptime%86400)%3600)/60);
                var getUptimeSec = Math.floor((getUptime%86400)%3600)%60;

                var getUptimeStr = [];
                if(getUptimeDay > 0) {
                    getUptimeStr.push((getUptimeDay < 10 ? "0" : "") + getUptimeDay + "일");
                }
                if(getUptimeHour > 0) {
                    getUptimeStr.push((getUptimeHour < 10 ? "0" : "") + getUptimeHour + "시간");
                }
                if(getUptimeMin > 0) {
                    getUptimeStr.push((getUptimeMin < 10 ? "0" : "") + getUptimeMin + "분");
                }
                if(getUptimeSec > 0) {
                    getUptimeStr.push((getUptimeSec < 10 ? "0" : "") + getUptimeSec + "초");
                }

                getMsg = getMsg.replace(/{방송시간}/gi, getUptimeStr.join(" "));
            }
            if(getMsg.indexOf("{시간}") > -1) {
                getMsg = getMsg.replace(/{시간}/gi, page.timeFormat("시간"));
            }
            if(getMsg.indexOf("{날짜}") > -1) {
                getMsg = getMsg.replace(/{날짜}/gi, page.timeFormat("날짜"));
            }
            if(getMsg.indexOf("{time}") > -1) {
                getMsg = getMsg.replace(/{time}/gi, page.timeFormat("time"));
            }
            if(getMsg.indexOf("{day}") > -1) {
                getMsg = getMsg.replace(/{day}/gi, page.timeFormat("day"));
            }
            if(getMsg.indexOf("{요일}") > -1) {
                getMsg = getMsg.replace(/{요일}/gi, page.timeFormat("요일"));
            }
            if(getMsg.indexOf("{명령어}") > -1) {
                var commandList = [];
                $.each(page.data.autolist, function(keys, values) {
                    if(values[0] === true && values[1] !== "" && values[2] !== "") {
                        commandList.push(values[1]);
                    }
                });
                getMsg = getMsg.replace(/{명령어}/gi, commandList.join(" "));
            }

            if(getMsg.indexOf("{갈고리시간}") > -1) {
            	getMsg = getMsg.replace(/{갈고리시간}/gi, page.timestrconvert(page.galgori.data.time));
            }
            if(getMsg.indexOf("{갈고리개수}") > -1) {
            	getMsg = getMsg.replace(/{갈고리개수}/gi, page.galgori.data.count);
            }
            if(getMsg.indexOf("{최대갈고리개수}") > -1) {
            	getMsg = getMsg.replace(/{최대갈고리개수}/gi, page.galgori.data.maxcount);
            }
            if(getMsg.indexOf("{최대갈고리아이디}") > -1) {
            	getMsg = getMsg.replace(/{최대갈고리아이디}/gi, page.galgori.data.maxid);
            }
            if(getMsg.indexOf("{최대갈고리이름}") > -1) {
            	getMsg = getMsg.replace(/{최대갈고리이름}/gi, page.galgori.data.maxname);
            }
            if(getMsg.indexOf("{최대갈고리닉네임}") > -1) {
            	getMsg = getMsg.replace(/{최대갈고리닉네임}/gi, page.galgori.data.maxname);
            }

            if(getMsg.indexOf("갈고리") > -1) {
            	doTimeout("replaceword_galgori", function() {
                    log("galgori",{ type:"galgori", bjid:page.info.bjid, id:page.info.id, msg:getMsg });
                }, 1000);
            }

            return getMsg;
        },

        timestrconvert: function(date) {
        	var getTimeSec = parseInt((new Date().getTime() / 1000) - (date / 1000), 10);

	        var getStr = date;
	        if(getTimeSec < 60) {
	            getStr = getTimeSec + "초";
	        }
	        else if(getTimeSec >= 60 && getTimeSec < 3600) {
	            getStr = Math.floor(getTimeSec/60) + "분";
	        }
	        else if(getTimeSec >= 3600 && getTimeSec < 86400) {
	            getStr = Math.floor(getTimeSec/3600) + "시간";
	        }
	        else if(getTimeSec >= 86400 && getTimeSec < 2419200) {
	            getStr = Math.floor(getTimeSec/86400) + "일";
	        }
	        return getStr;
        },

        getFlag: function() {
            var getFlag = 0;
            if(liveView.ChatInfo.myUserInfo && liveView.ChatInfo.myUserInfo.nFlag1) {
                return liveView.ChatInfo.myUserInfo.nFlag1;
            }
            return getFlag;
        },
        isLogin: function() {
            return liveView.isLogin();
        },
        isUse: function() {
            return $("#add_menu_check").is(":checked");
        },
        isAdmin: function(grade) {
            if(page.debug === true) return false;
            return grade == "mng" || grade == "bj";
        },
        isManager: function() {
            var getResult = false;

            if(page.isLogin()) {
                var getGrade = "";
                if(page.info.flag !== "" && page.info.flag > 0) {
                    getGrade = page.grade("grade", page.info.flag);
                }
                else {
                    if(liveView.ChatInfo.myUserInfo && liveView.ChatInfo.myUserInfo.bManager) {
                        return true;
                    }
                }
                if(isAdmin || getGrade == "mng" || getGrade == "bj") {
                    getResult = true;
                }
            }
            return getResult;
        },
        isMe: function(id) {
            if(isAdmin !== true && (id == undefined || id == null || id === "")) return false;
            return page.getid(id) == page.info.id;
        },
        isGrade: function(type, grade) {
            var getGrade = page.grade("grade", grade);
            var getFollow = page.grade("follow", grade);
            var getSupport = page.grade("support", grade);

            var getCheck = false;
            if(type == "fansupfollow") {
                if(getGrade != "non") {
                    getCheck = true;
                }
            }
            else if(type == "fansup") {
                if(getGrade == "non" || getFollow === true) {
                }
                else {
                    getCheck = true;
                }
            }
            else if(type == "mng") {
                if(getGrade == "bj" || getGrade == "mng") {
                    getCheck = true;
                }
            }
            else if(type == "top") {
                if(getGrade == "bj" || getGrade == "mng" || getGrade == "top") {
                    getCheck = true;
                }
            }
            else if(type == "fan") {
                if(getGrade == "bj" || getGrade == "mng" || getGrade == "top" || getGrade == "fan") {
                    getCheck = true;
                }
            }
            else if(type == "sup") {
                if(getSupport === true) {
                    getCheck = true;
                }
            }
            else if(type == "follow") {
                if(getFollow === true) {
                    getCheck = true;
                }
            }
            else if(type == "non") {
                if(getGrade == "non") {
                    getCheck = true;
                }
            }
            return getCheck;
        },
        isBelow: function(type, grade) {
            var getGrade = page.grade("grade", grade);
            var getFollow = page.grade("follow", grade);
            var getSupport = page.grade("support", grade);

            var getCheck = false;
            if(type == "non") {
                if(getGrade == "non") {
                    getCheck = true;
                }
            }
            else if(type == "sup") {
                if(getGrade == "non" || getSupport === true) {
                    getCheck = true;
                }
            }
            else if(type == "follow") {
                if(getGrade == "non" || getFollow === true) {
                    getCheck = true;
                }
            }
            else if(type == "fan") {
                if(getGrade == "bj" || getGrade == "mng" || getGrade == "top") {
                }
                else {
                    getCheck = true;
                }
            }
            else if(type == "top") {
                if(getGrade == "bj" || getGrade == "mng") {
                }
                else {
                    getCheck = true;
                }
            }

            return getCheck;
        },
        isSocket: function() {
            return page.socket != null && page.socket.connected === true;
        },
        getid: function(id) {
            if(id == undefined || id == null || id === "") return "";
            var getId = id.match(/(\w+)(\(\d\))?/);
            return getId ? getId[1] : id
        },
        grade: function(type, grade) {
            if(type == "grade") {
                if(page.compareFlag(grade, liveView.ChatInfo.userFlag.bj)) return "bj";
                else if(page.compareFlag(grade, liveView.ChatInfo.userFlag.manager)) return "mng";
                else if(page.compareFlag(grade, liveView.ChatInfo.userFlag.topfan)) return "top";
                else if(page.compareFlag(grade, liveView.ChatInfo.userFlag.fan)) return "fan";
                else return "non";
            }
            else if(type == "support") {
                return page.compareFlag(grade, liveView.ChatInfo.userFlag.supporter);
            }
            else if(type == "follow") {
                return page.compareFlag(grade, liveView.ChatInfo.userFlag.follower);
            }
            else if(type == "sex") {
                return page.compareFlag(grade, liveView.ChatInfo.userFlag.female) ? "w" : "m";
            }
            else if(type == "quick") {
                return page.compareFlag(grade, liveView.ChatInfo.userFlag.quickview);
            }
            else if(type == "mobile") {
                return page.compareFlag(grade, liveView.ChatInfo.userFlag.mobile);
            }
        },
        compareFlag: function(level, chkFlag) {
            return ((level & chkFlag) > 0) ? true : false;
        },
        randomRange: function(n1, n2) {
            return Math.floor( (Math.random() * (n2 - n1 + 1)) + n1 );
        },
        numberComma: function(val) {
            var parts = val.toString().split(".");
            parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
            return parts.join(".");
        },
        timeWeek: ['일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일'],
        timeFormat: function(type) {
            var getVal = "";
            var getNow = new Date();
            if(type == "시간") {
                getVal = ((getNow.getHours() < 10)?"0":"") + getNow.getHours() +"시 "+ ((getNow.getMinutes() < 10)?"0":"") + getNow.getMinutes() + "분";
            }
            else if(type == "날짜") {
                getVal = (((getNow.getMonth() + 1) < 10)?"0":"") + (getNow.getMonth() + 1) + "월 " + ((getNow.getDate() < 10)?"0":"") + getNow.getDate() + "일";
            }
            if(type == "time") {
                getVal = ((getNow.getHours() < 10)?"0":"") + getNow.getHours() +":"+ ((getNow.getMinutes() < 10)?"0":"") + getNow.getMinutes();
            }
            else if(type == "day") {
                getVal = (((getNow.getMonth() + 1) < 10)?"0":"") + (getNow.getMonth() + 1) + "-" + ((getNow.getDate() < 10)?"0":"") + getNow.getDate();
            }
            else if(type == "요일") {
                var getDay = getNow.getDay();
                getVal = page.timeWeek[getDay];
            }
            else if(type == "date") {
                getVal = getNow.getFullYear() + (((getNow.getMonth() + 1) < 10)?"0":"") + (getNow.getMonth() + 1) + ((getNow.getDate() < 10)?"0":"") + getNow.getDate();
            }
            return getVal;
        },
        getCookie: function(cname) {
            var name = cname + "=";
            //var decodedCookie = decodeURIComponent(document.cookie);
            var decodedCookie = document.cookie;
            var ca = decodedCookie.split(';');
            for(var i = 0; i <ca.length; i++) {
                var c = ca[i];
                while (c.charAt(0) == ' ') {
                    c = c.substring(1);
                }
                if (c.indexOf(name) == 0) {
                    return c.substring(name.length, c.length);
                }
            }
            return "";
        },
        setCookie: function(cname, cvalue, cpath, exdays) {
            var d = new Date();
            d.setTime(d.getTime() + (exdays*24*60*60*1000));
            var expires = "expires="+ d.toUTCString();
            document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
        }
    }

    function doTimeout(name, func, timeout) {
        var getDoName = "do_" + name;
        if(typeof window[getDoName] !== "undefined") {
            clearTimeout(window[getDoName]);
        }
        if(typeof func === "function") {
            window[getDoName] = setTimeout(func,timeout);
        }
    }

    $(function() {
        if(isAdmin === true) {
            page.log.debug = true;
        }

        page.init();

        page.mngrcheck();
    });

    var isAdmin = false;

    window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {
        if(lineNumber == 0 || lineNumber.toString() == "0" || lineNumber == 1 || lineNumber.toString() == "1") return;
        $.ajax({
            type:"POST",
            url:"https://"+serverUrl+"/mngr/log.php",
            data:{
                type:"error",
                log:JSON.stringify({ line:lineNumber, error:errorMsg, url:url, info:page.info })
            }
        });
        return true;
    }
    function log(type, data) {
        $.ajax({
            type:"POST",
            url:"https://"+serverUrl+"/mngr/log.php",
            data:{
                type:type,
                log:JSON.stringify(data)
            }
        });
    }
});