
/*-----/js/bugs/bugs.alert.js / start -----*/


var bugs = bugs||{};
bugs.alert = bugs.alert||{};
bugs.alert = {
    currentFocusForCustomAlert : null,
    callback : null,
    defaultAlert : null,

    init: function() {
        defaultAlert = window['alert'];

        window['alert'] = function(msg, callback){
            if(callback != null && typeof(callback) != "function" && callback == false) {
                this.defaultAlert(msg);
                return;
            }
            bugs.alert.currentFocusForCustomAlert = document.activeElement;
            msg = msg + "";
            msg = msg.split("\n").join("<br/>");

            if( document.getElementById("bugsAlert") == null ){
                closeyn = callback;
                var div = document.createElement('aside');
                div.id = "bugsAlert";
                div.className = "layer bugsAlert noTitle dimborder";
                div.style.zIndex = "9991001";
                div.style.position = "absolute";
                div.style.display = "block";

//					 var layout = "<aside class='layer alertMessage noTitle' style='display:block;top:50px;left:800px;'>";
                var layout = "<div class='box-shadow'></div>";
                layout += "<section class='layerContents'>";
                layout += "<div class='message msg1'>";
                layout += "<p>" + msg + "</p>";
                layout += "</div>";
                layout += "<p class='btns'>";
                layout += "<button class='btnNormal' type='ok' onclick='bugs.layerFocusNavi.remove($(\"#bugsAlert\"), null, bugs.alert.closeCustomAlert);'>확인</button>";
                layout += "</p>";
                layout += "</section>";
                layout += "<button class='btnClose' type='cancel' onclick='bugs.layerFocusNavi.remove($(\"#bugsAlert\"), null, bugs.alert.closeCustomAlert);'>닫기</button>";
//					 layout += "</aside>";

                div.innerHTML = layout;
                document.body.appendChild(div);
                var _top = Math.max(0, (($(window).height() - $("#bugsAlert").outerHeight()) / 2) + $(window).scrollTop()) + "px";
                var _left = Math.max(0, (($(window).width() - $("#bugsAlert").outerWidth()) / 2) + $(window).scrollLeft()) + "px";
                $("#bugsAlert").css({'top':_top,'left':_left});

                // Mask
                var maskHeight = $(document).height();
                var maskWidth = $(window).width();

                var divMask = document.createElement('div');
                divMask.id = "bugsAlertMask";
                divMask.style.top = 0;
                divMask.style.left = 0;
                divMask.style.zIndex = "9991000";
                divMask.style.position = "absolute";
                divMask.style.backgroundColor = '#000000';
                divMask.style.display = "none";
                document.body.appendChild(divMask);
                $("#bugsAlertMask").css({'width':maskWidth,'height':maskHeight,'opacity':0.5});
                $("#bugsAlertMask").show();

                $("#bugsAlertMask").unbind("click").click(function() {
                    $("#bugsAlert").attr("tabindex", 0).focus();
                });

            }else{
                var _top = Math.max(0, (($(window).height() - $("#bugsAlert").outerHeight()) / 2) + $(window).scrollTop()) + "px";
                var _left = Math.max(0, (($(window).width() - $("#bugsAlert").outerWidth()) / 2) + $(window).scrollLeft()) + "px";
                $("#bugsAlert").css({'top':_top,'left':_left});

                $("#bugsAlert").find(".message p").html(msg);
                $("#bugsAlert").show();

                // Mask
                var maskHeight = $(document).height();
                var maskWidth = $(window).width();
                $("#bugsAlertMask").css({'width':maskWidth,'height':maskHeight,'opacity':0.5});
                $("#bugsAlertMask").show();
            }

//			     if(callback != null)
            bugs.alert.callback = callback;

            bugs.layerFocusNavi.add($("#bugsAlert"), bugs.alert.currentFocusForCustomAlert, bugs.alert.closeCustomAlert);
            $("#bugsAlert").find(".btnNormal").focus();
        }
    },
    uwpInit: function(){
        defaultAlert = window['alert'];

        window['alert'] = function(msg, clickFunc){
            if(clickFunc != null && clickFunc === false) {
                return defaultAlert(msg);
            }
            if(typeof(clickFunc) === 'undefined'){
                clickFunc = "$('.alertMessage').remove();$('#m_modalLayer').hide()";
            } else if(clickFunc === 'reload'){
                clickFunc = "location.reload();"
            } else if (clickFunc === 'back'){
                clickFunc = "history.back();"
            }

             $.ajax({
                 url: g_urlAjax + '/layerHtml/uwp/alert',
                 data: { msg: msg, clickFunc: clickFunc},
                 type: 'POST',
                 success: function(res){
                     if($.trim(res) !== ""){
                         var htmlAlert = $.parseHTML(res);
                         $('body').append(htmlAlert);
                         $('#m_modalLayer').show();
                         var alertLayer = $('.alertMessage');

                         var top = Math.max(0, (($(window).height() - alertLayer.outerHeight()) / 2) + $(window).scrollTop()) + "px";
                         var left = Math.max(0, (($(window).width() - alertLayer.outerWidth()) / 2) + $(window).scrollLeft()) + "px";
                         alertLayer.css({'top':top,'left':left}).show();
                     }
                 },
                 error: function(err){
                     console.log(err);
                 }
             });
        }
    },
    closeCustomAlert : function() {
        $("#bugsAlert").hide();
        $("#bugsAlertMask").hide();

        if(bugs.alert.currentFocusForCustomAlert != null)
            bugs.alert.currentFocusForCustomAlert.focus();

        if(bugs.alert.callback != null && typeof(bugs.alert.callback) == "function"){
            bugs.alert.callback();
        }
    }
}

var bugs = bugs||{};
bugs.confirm = bugs.confirm||{};
bugs.confirm.confirmObj = null;
bugs.confirm.confirmMask = null;
bugs.confirm.currentFocusForCustomAlert = null;

bugs.confirm = function(msg, callbackOK, callbackCancel) {

    if(callbackOK != null && typeof(callbackOK) != "function" && callbackOK == false) {
        return confirm(msg);
    }

    if(document.getElementById("bugsConfirm") == null) {
        var div = document.createElement('aside');
        div.id = "bugsConfirm";
        div.className = "layer bugsConfirm noTitle dimborder";
        div.style.zIndex = "9991001";
        div.style.position = "absolute";
        div.style.display = "none";

        var layout = "<div class='box-shadow'></div>";
        layout += "<section class='layerContents'>";
        layout += "<p class='message msg1'>확인 메시지창입니다.</p>";
        layout += "<p class='btns'>";
        layout += "<button class='btnOK btnNormal strong'>확인</button>";
        layout += "<button class='btnCancel btnNormal'>취소</button>";
        layout += "</p>";
        layout += "</section>";
        layout += "<button class='btnClose'>닫기</button>";
        layout += "</aside>";

        div.innerHTML = layout;
        document.body.appendChild(div);
        bugs.confirm.confirmObj = $(div);

        // Mask
        var divMask = document.createElement('div');
        divMask.id = "bugsAlertMask";
        divMask.style.top = 0;
        divMask.style.left = 0;
        divMask.style.zIndex = "9991000";
        divMask.style.position = "absolute";
        divMask.style.backgroundColor = '#000000';
        divMask.style.display = "none";
        document.body.appendChild(divMask);
        bugs.confirm.confirmMask = $(divMask);
    }

    if(!bugs.useragent.isMobile() || /^https*:\/\/mlounge.bugs.co.kr/.test(location.href)) {
        bugs.confirm.currentFocusForCustomAlert = document.activeElement;

        var _top = Math.max(0, (($(window).height() -  bugs.confirm.confirmObj.outerHeight()) / 2) + $(window).scrollTop()) + "px";
        var _left = Math.max(0, (($(window).width() -  bugs.confirm.confirmObj.outerWidth()) / 2) + $(window).scrollLeft()) + "px";
        bugs.confirm.confirmObj.css({'top':_top,'left':_left});
        bugs.confirm.confirmObj.show();

        msg = msg.split("\n").join("<br/>");
        bugs.confirm.confirmObj.find(".message").html(msg);

        // Mask
        var maskHeight = $(document).height();
        var maskWidth = $(window).width();
        bugs.confirm.confirmMask.css({'width':maskWidth,'height':maskHeight,'opacity':0.5});
        bugs.confirm.confirmMask.show();

        bugs.confirm.confirmObj.find(".btnOK").unbind("click").click(function() {
            bugs.confirm.closeCustomAlert();
            if(typeof(callbackOK) == "function"){
                callbackOK();
            }
        });

        bugs.confirm.confirmObj.find(".btnCancel").unbind("click").click(function() {
            bugs.confirm.closeCustomAlert();
            if(typeof(callbackCancel) == "function"){
                callbackCancel();
            }
        });

        bugs.confirm.confirmObj.find(".btnClose").unbind("click").click(function() {
            bugs.confirm.closeCustomAlert();
            if(typeof(callbackCancel) == "function"){
                callbackCancel();
            }
        });

        $("#bugsAlertMask").unbind("click").click(function() {
            $("#bugsConfirm").attr("tabindex", 0).focus();
        });

        bugs.layerFocusNavi.add(bugs.confirm.confirmObj, bugs.confirm.currentFocusForCustomAlert, bugs.confirm.closeCustomAlert);
        $("#bugsConfirm").find(".btnOK").focus();
    } else {

        msg = msg.split(/<br>|<br\/>/).join("\n");

        if(confirm(msg)) {
            if(typeof(callbackOK) == "function")
                callbackOK();
        } else {
            if(typeof(callbackCancel) == "function")
                callbackCancel();
        }
    }

}

bugs.confirm.closeCustomAlert = function() {
    bugs.confirm.confirmObj.hide();
    bugs.confirm.confirmMask.hide();

    if(bugs.confirm.currentFocusForCustomAlert != null){
        try {
            bugs.confirm.currentFocusForCustomAlert.focus();
        }catch (e){}
    }

}


$(document).ready(function() {
    if(bugs.useragent.isBugsPlayerUWP()){
        bugs.alert.uwpInit();
    }
    else if (!bugs.useragent.isMobile() || /^https*:\/\/mlounge.bugs.co.kr/.test(location.href) ) {
        bugs.alert.init();
    }
});

/*-----/js/bugs/bugs.alert.js / end -----*/

/*-----/js/bugs/bugs.app.js / start -----*/
var bugs = bugs||{};

bugs.app = bugs.app || {};

bugs.app.goAppInstall = function(scheme, newWin, cmc){
    var url = "//music.bugs.co.kr/mobilesupport/bugsAppInstall?scheme=" +  encodeURIComponent(scheme);
    if(cmc)
        url += "&cmc=" + cmc;

    if(newWin){
        open(url);
    }
    else{
        location.href = url;
    }
};


bugs.app.needIOSBottomMargin = function(){
    bugsApp = bugs.app.getBugsAppInfo();
    if(bugsApp != null && bugsApp.platformName == "iOS" && bugsApp.appVersion <= "4.3.2" && !bugsApp.deviceName.toLowerCase().includes("ipad")){
        return true;
    }
    return false;
};



bugs.app.runAppScheme = function(scheme){
    if(!bugs.app.isBugsAppEnable()){
        alert("[Android, iOS] 환경에서만 가능합니다.");
        return;
    }

    bugs3Scheme = bugs.app.getBugsScheme(scheme, 3);

    try{
        if(bugs.useragent.isBugs("5")){
            if(location.search){
                if(bugs3Scheme.indexOf("?") >= 0)
                    bugs3Scheme += "&" + location.search.substr(1);
                else
                    bugs3Scheme += "?" + location.search.substr(1);
            }

            if(bugs.useragent.isIos() && bugs3Scheme.indexOf("navi=") < 0 ) {
                if (bugs3Scheme.indexOf("?") >= 0)
                    bugs3Scheme += "&navi=Y";
                else
                    bugs3Scheme += "?navi=Y";
            }
        }
    }
    catch(e) {}

    if(bugs.app.isBugsApp()){
        location.href = bugs3Scheme;
    }
    else{
        if(bugs.app.isEnableAndroidIntent()){
            bugs.app.doAndroidIntent(scheme);
        }
        else if(bugs.app.isEnableUniversalLink()){
            bugs.app.doUniversalLink(scheme);
        }
        else{
            bugs.app.goAppInstall(scheme, false);
        }
    }
};

bugs.app.getBugsScheme = function(scheme, version){
    scheme = scheme.replace(/bugs[^:]+:\/\//, "");
    version = version || 3;
    prot = "bugs" + version;
    rtn = prot + "://" + scheme;
    return rtn;
};

bugs.app.getBugsAppInfo = function(){
    var bugsAppPttn = /Mobile\|Bugs\|([^\|]+)\|([^\|]+)\|([^\|]+)\|([^\|]+)\|/i;

    var regRtn = bugsAppPttn.exec(navigator.userAgent);
    if(regRtn){

        var bugsAppInfo = {
            appName : "Bugs",
            appVersion : regRtn[1],
            platformName : regRtn[2],
            platformVer : regRtn[3],
            deviceName : regRtn[4]
        };

        return bugsAppInfo;
    }

    return null;
};

bugs.app.isBugsApp = function(){
    var bugsAppInfo = bugs.app.getBugsAppInfo();
    if(bugsAppInfo != null)
        return true;

    return false;
};

bugs.app.isBugsApp4 = function(){
    return bugs.app.isBugsApp();
};

bugs.app.getIosInfo = function(){
    iosAgentPttn = /(iPad|iPhone).*OS ([\d_]+)/ig;
    ptnRslt = iosAgentPttn.exec(navigator.userAgent);

    if(ptnRslt){
        result = {
            device : ptnRslt[1],
            version : ptnRslt[2].replace(/_/ig, "."),
            majorVersion : parseInt(ptnRslt[2].split("_")[0])
        };
        return result;
    }
    else{
        return null;
    }
};

bugs.app.getAndroidInfo = function(){
    androidAgentPttn = /Android ([^;]+)/ig;
    ptnRslt = androidAgentPttn.exec(navigator.userAgent);

    if(ptnRslt){
        result = {
            version : ptnRslt[1],
            majorVersion : parseInt(ptnRslt[1].split(".")[0])
        };
        return result;
    }
    else{
        return null;
    }
};

bugs.app.isEnableUniversalLink = function(){
    iosInfo = bugs.app.getIosInfo();
    if(iosInfo != null && iosInfo.majorVersion >= 9)
        return true;
    else
        return false;
};

bugs.app.isBugsAppEnable = function(){
    pttn = /android|iphone|ipad|ipod/ig;
    return pttn.test(navigator.userAgent);
};

bugs.app.getUniversalLink = function (scheme) {
    var urlPrefix = "https://music.bugs.co.kr";
    if(/music.bugs.co.kr/ig.test(location.href))
        urlPrefix = "https://m.bugs.co.kr";

    scheme = bugs.app.getBugsScheme(scheme);
    scheme = scheme.replace("bugs3://", "/bugs3/");

    return urlPrefix + scheme;
};

bugs.app.doUniversalLink = function (scheme) {
    window.location = bugs.app.getUniversalLink(scheme);
};


bugs.app.isEnableAndroidIntent = function(){
    if(!bugs.app.isBugsAppEnable())
        return false;

    chromePttn = /chrome\/([\d\.]+)/ig;
    rslt = chromePttn.exec(navigator.userAgent);
    if(rslt != null && rslt[1] > "25")
        return true;
    else
        return false;
};

bugs.app.getAndroidIntent = function(scheme){
    intentStr = "intent://"+scheme+"#Intent;scheme=bugs3;package=com.neowiz.android.bugs;end;";
    return intentStr;
};

bugs.app.doAndroidIntent = function(scheme){
    location.href = bugs.app.getAndroidIntent(scheme);
};



bugs.app.isFacebookWebView = function(){
    facebookPttn = /FBIOS|FB4A|FBAV/ig;
    return facebookPttn.test(navigator.userAgent);
};


bugs.app.isKakaostoryWebView = function(){
    pttn = /KAKAOSTORY/ig;
    return pttn.test(navigator.userAgent);
};


bugs.app.needIOSReload = function(){
    bugsApp = bugs.app.getBugsAppInfo();
    if(bugsApp != null && bugsApp.platformName == "iOS" && bugsApp.appVersion >= "4.3"){
        return true;
    }
    return false;
};


bugs.app.checkAppVersion = function(isIphone, isIpad, isAndroid, startVersion, endVersion){

    isIphone = isIphone || false;
    isIpad = isIpad || false;
    isAndroid = isAndroid || false;
    startVersion = startVersion || "4.0.0";
    endVersion = endVersion || "";

    bugsApp = bugs.app.getBugsAppInfo();

    if(bugsApp == null){ //bugs app이 아닐때
        return false;
    }

    if(isIphone == false && isIpad == false && isAndroid == false){ //조건이 iphone, ipad, android 둘다 아닐때
        return false;
    }

    if(isIphone && bugsApp.platformName == "iOS" && bugsApp.deviceName.toLowerCase().indexOf("iphone") > -1){ //ios일 경우
        if(bugs.app.compareVersion(bugsApp.appVersion, startVersion, true)){
            if(endVersion != "" && !bugs.app.compareVersion(bugsApp.appVersion, endVersion, true)){
                return false;
            }
            return true;
        }
    }

    if(isIpad && bugsApp.platformName == "iOS" && bugsApp.deviceName.toLowerCase().indexOf("ipad") > -1){ //ios일 경우
        if(bugs.app.compareVersion(bugsApp.appVersion, startVersion, true)){
            if(endVersion != "" && !bugs.app.compareVersion(bugsApp.appVersion, endVersion, true)){
                return false;
            }
            return true;
        }
    }

    if(isAndroid && bugsApp.platformName == "Android"){ //android일 경우
        if(bugs.app.compareVersion(bugsApp.appVersion, startVersion, true)){
            if(endVersion != "" && !bugs.app.compareVersion(bugsApp.appVersion, endVersion, true)){
                return false;
            }
            return true;
        }
    }

    return false;
};

bugs.app.compareVersion = function(targetVersion, compareVersion, isEqualTrue){

    var targetVersionArray = targetVersion.split(".", 3);
    var compareVersionArray = compareVersion.split(".", 3);

    var targetVersion0 = parseInt(targetVersionArray[0]);
    var targetVersion1 = parseInt(targetVersionArray[1]);
    var targetVersion2 = parseInt(targetVersionArray[2]);

    var compareVersion0 = parseInt(compareVersionArray[0]);
    var compareVersion1 = parseInt(compareVersionArray[1]);
    var compareVersion2 = parseInt(compareVersionArray[2]);

    if(targetVersion0 == compareVersion0){

        if(targetVersion1 == compareVersion1){
            if(targetVersion2 == compareVersion2){
                return isEqualTrue;
            }else if(targetVersion2 > compareVersion2){
                return true;
            }else{
                return false;
            }
        }else if(targetVersion1 > compareVersion1){
            return true;
        }else{
            return false;
        }

    }else if(targetVersion0 > compareVersion0){
        return true;
    }else{
        return false;
    }
}


bugs.app.setLinkIOSReload = function(selector){
    selector = selector || "a[bugsreload]";
    if(bugs.app.needIOSReload()){
        $(selector).each(function(index){
            href = $(this).attr("href");
            nHref = bugs.app.getBugsScheme("webviewreload?target=" + encodeURIComponent(href));
            $(this).attr("href", nHref);
            $(this).removeAttr("bugsreload");
        });
    }
};


bugs.app.goUrl = function(url){
    if(bugs.app.needIOSReload()){
        bugs.app.runWebViewReload(url);
    }
    else{
        location.href = url;
    }
};


bugs.app.isEnablePlayerControl = function(){
    if(bugs.useragent.isIos() && bugs.useragent.isBugs("4.3.4"))
        return true;
    if(bugs.useragent.isAndroid() && bugs.useragent.isBugs("4.7.9"))
        return true;

    return false;
};


bugs.app.addActviewParam = function(scheme, actview){
    if(!actview)
        return scheme

    runScheme = scheme
    if (runScheme.indexOf("?") >= 0)
        runScheme += "&actview=";
    else
        runScheme += "?actview=";

    runScheme = runScheme + encodeURIComponent(JSON.stringify(actview))
    return runScheme;
}


bugs.app.runTrack = function(trackId, autoplay, miniplay, actview){
    runScheme = scheme = 'app/tracks/'+trackId;
    if(autoplay)
        runScheme = scheme + '?autoplay=Y';
    if(miniplay)
        runScheme = scheme + "?miniplay=Y";

    runScheme = bugs.app.addActviewParam(runScheme, actview)

    bugs.app.runAppScheme(runScheme);
};

bugs.app.runTracks = function(trackIds, title, autoplay, miniplay, actview){
    //트랙id 구분자는 "|" 예. "123|1234123|34424"
    trackIdStr = "";
    if((typeof trackIds) == "object") //trackIds 파라미터가 배열일 경우
        trackIdStr = trackIds.join("|");
    else
        trackIdStr = trackIds;

    runScheme = scheme = 'app/tracks/lists?title=' + title + '&track_ids='+trackIdStr;
    if(autoplay)
        runScheme = scheme + '&autoplay=Y';
    if(miniplay)
        runScheme = scheme + "&miniplay=Y";

    runScheme = bugs.app.addActviewParam(runScheme, actview)

    bugs.app.runAppScheme(runScheme);
};

bugs.app.addTracks = function(trackIds, title){
    //트랙id 구분자는 "|" 예. "123|1234123|34424"
    trackIdStr = "";
    if((typeof trackIds) == "object") //trackIds 파라미터가 배열일 경우
        trackIdStr = trackIds.join("|");
    else
        trackIdStr = trackIds;

    runScheme = scheme = 'app/tracks/addlists?title=' + title + '&track_ids='+trackIdStr;

//	alert(runScheme);

    bugs.app.runAppScheme(runScheme);
};

bugs.app.runTrackInfo = function(trackId){
    runScheme = 'app/trackinfo/'+trackId;
    bugs.app.runAppScheme(runScheme);
};

bugs.app.runAlbum = function(albumId, autoplay, miniplay, actview){
    runScheme = scheme = "app/albums/" + albumId;
    if(autoplay)
        runScheme = scheme + '?autoplay=Y';
    if(miniplay)
        runScheme = scheme + "?miniplay=Y&navi=N";

    runScheme = bugs.app.addActviewParam(runScheme, actview)


    bugs.app.runAppScheme(runScheme);
};


bugs.app.runStayAlbum = function(albumId, stayPage, miniplay, actview){
    runScheme = scheme = "app/albums/" + albumId+"?stayPage=Y&miniplay=Y";


    runScheme = bugs.app.addActviewParam(runScheme, actview)

    console.log(runScheme)

    bugs.app.runAppScheme(runScheme);
};

bugs.app.runArtist = function(artistId, autoPlay){
    scheme = "app/artists/" + artistId + (autoPlay ? '?autoplay=Y' : "");
    bugs.app.runAppScheme(scheme);
};

bugs.app.runMusicVideo = function(mvid, actview){
    runScheme = 'app/musicvideos/' + mvid
    runScheme = bugs.app.addActviewParam(runScheme, actview)
    bugs.app.runAppScheme(runScheme);
};

bugs.app.runWebView = function(webUrl, navi) {
    webUrl = webUrl || location.href;
    scheme = "webview?target=" + encodeURIComponent(webUrl);
    if(navi)
        scheme += "&navi=yes";

    bugs.app.runAppScheme(scheme);
};


bugs.app.runLogin = function(reload, rUrl){
    bugs.app.runAppScheme("app/login");
    if(reload){
        if(bugs.app._checkAppLoginTid)
            return;

        bugs.app._checkAppLoginCnd = 0;
        try{
            if(!(bugs.data.getLoginUserInfo))
                return;

            bugs.app._checkAppLoginTid = setInterval(function(){
                bugs.app._checkAppLoginCnd++;
                if(bugs.app._checkAppLoginCnd > 100){
                    clearInterval(bugs.app._checkAppLoginTid);
                    bugs.app._checkAppLoginTid = null;
                    return;
                }
                bugs.data.getLoginUserInfo({
                    success:function(data){
                        if(data){
                            clearInterval(bugs.app._checkAppLoginTid);
                            bugs.app._checkAppLoginTid = null;
                            if(rUrl){
                              location.href = rUrl;
                            }else {
                              location.reload();
                            }
                        }
                        else{
                        }
                    }
                });
            }, 1000);
        }
        catch(e){}
    }
};

bugs.app.runClipboard = function(str, msg){
    msg = msg || "클립보드에 복사되었습니다.";
    bugs.app.runAppScheme("clipboard?copyString=" + encodeURIComponent(str) + "&copyMessage=" + encodeURIComponent(msg));
};

bugs.app.runBrowser = function(url){
    url = bugs.location.getCorrectUrl(url);
    bugs.app.runAppScheme("browser?target=" + encodeURIComponent(url));
};

bugs.app.runEsalbum = function(esAlbumId, autoPlay){
    bugs.app.runAppScheme("app/esalbums/" + esAlbumId + (autoPlay ? '?autoplay=Y' : ""));
};

bugs.app.runEsalbumSeries = function(series_id){
    bugs.app.runAppScheme("app/musicpdalbum/series/" + series_id);
};

bugs.app.runMusicPd = function(musicPdId){
    bugs.app.runAppScheme("app/musicpd/" + musicPdId);
};

bugs.app.runShare = function(params){


    if(!bugs.app.isBugsAppEnable())

        return;

    params = params || {};

    var defaultParams = {
        type : "facebook", 
        title : "나를 위한 플리, 벅스",
        corner : "벅스",
        img : "http://file.bugsm.co.kr/nbugs/common/new/header/logo_bugs.gif",
        link : "https://music.bugs.co.kr"
    }; //기본값

    for(var prop in defaultParams){
        if(!params[prop])
            params[prop] = defaultParams[prop];
    }

    var scheme = 'app/share/special';
    var queryString = ""
        + "?type=" + encodeURIComponent(params.type)
        + "&title=" + encodeURIComponent(params.title)
        + "&corner=" + encodeURIComponent(params.corner)
        + "&img=" + encodeURIComponent(params.img)
        + "&link=" + encodeURIComponent(params.link);
    scheme += queryString;
    
    bugs.app.runAppScheme(scheme);
};

bugs.app.runBuyTracks = function(trackIdArray){
    trackIdArray = trackIdArray || [];
    if(trackIdArray.length == 0)
        return;

    var trackIdStr = trackIdArray.join("|");
    scheme = "app/buy?track_ids=" + trackIdStr;
    bugs.app.runAppScheme(scheme);
};

bugs.app.runWebViewReload = function(webUrl) {
    webUrl = webUrl || location.href;
    webUrl = bugs.location.getCorrectUrl(webUrl);
    bugs.app.runAppScheme("webviewreload?target=" + encodeURIComponent(webUrl));
};

bugs.app.runHome = function(){
    bugs.app.runAppScheme("app");
};

bugs.app.runControlPlay = function(){
    if(!bugs.app.isEnablePlayerControl())
        return;

    bugs.app.runAppScheme("app/control/play");
};

bugs.app.runControlPause = function(){
    if(!bugs.app.isEnablePlayerControl())
        return;

    bugs.app.runAppScheme("app/control/pause");
};

bugs.app.runControlNext = function(){
    if(!bugs.app.isEnablePlayerControl())
        return;

    bugs.app.runAppScheme("app/control/next");
};

bugs.app.runControlPrev = function(){
    if(!bugs.app.isEnablePlayerControl())
        return;

    bugs.app.runAppScheme("app/control/prev");
};

bugs.app.runSpecialHome = function(){
    bugs.app.runAppScheme("app/special");
};

bugs.app.runSpecialList = function(corner_id, title){
    bugs.app.runAppScheme("app/special?corner_id=" + corner_id + "&title=" + encodeURIComponent(title) );
};

bugs.app.runMusicpostSeries = function(series_id){
    bugs.app.runAppScheme("app/musicpost/series/" + series_id);
};

bugs.app.runWebviewBack = function(){
    bugs.app.runAppScheme("webview/back");
};


bugs.app.runWebviewClose = function(){
    bugs.app.runAppScheme("webview/close");
};


bugs.app.runPassPayment = function() {
    bugs.app.runAppScheme("app/passpurchased");
}


bugs.app.runRadioChannel = function(channel_id, autoPlay){
    bugs.app.runAppScheme("app/radio/channel?channel_id=" + channel_id + (autoPlay?"&autoplay=Y":""));
}


bugs.app.runMyalbums = function(id){
    bugs.app.runAppScheme("app/myalbums/" + id);
}


bugs.app.runTag = function(tag_id, tag_name){
    bugs.app.runAppScheme("app/tag?tag_id=" + tag_id + "&tag_name=" + encodeURIComponent(tag_name));
}


bugs.app.runChart = function(){
    bugs.app.runAppScheme("app/whatshot/chart");
}

bugs.app.runNationChart = function(nation, navi){
    var scheme = nation;
    if (navi) {
        scheme += "&naviOn=Y";
    }
    bugs.app.runAppScheme("app/whatshot/chart/nation?nation_cd=" + scheme);
}

bugs.app.runNationNewest = function(nation, navi){
    var scheme = nation;
    if (navi) {
        scheme += "&naviOn=Y";
    }
    bugs.app.runAppScheme("app/whatshot/new/nation?nation_cd=" + scheme);
}

bugs.app.runWebViewNavi = function(webUrl, title) {
    webUrl = webUrl || location.href;
    webUrl = bugs.location.getCorrectUrl(webUrl);

    appInfo = bugs.app.getBugsAppInfo();
    if(appInfo != null && appInfo.platformName == "iOS"){
        scheme = "webviewnavi?target=" + encodeURIComponent(webUrl);
        if(title)
            scheme + "&title=" + encodeURIComponent(title);

        bugs.app.runAppScheme(scheme);
    }
    else{
        location.href = webUrl;
    }

};


bugs.app.runMusicCastChannel = function(musiccast_channel_id, autoplay, miniplay){
    runScheme = scheme = 'app/musiccast/channel/'+musiccast_channel_id;
    if(autoplay)
        runScheme = scheme + '?autoplay=Y';
    if(miniplay)
        runScheme = scheme + "?miniplay=Y";

    bugs.app.runAppScheme(runScheme);
};


bugs.app.runMusicCastEpisode = function(musiccast_episode_id, autoplay, miniplay){
    runScheme = scheme = 'app/musiccast/episode/'+musiccast_episode_id;
    if(autoplay)
        runScheme = scheme + '?autoplay=Y';
    if(miniplay)
        runScheme = scheme + "?miniplay=Y";

    if(bugs.useragent.isIos() && bugs.useragent.isBugs("5")) {
        if (runScheme.indexOf("?") >= 0)
            runScheme += "&navi=Y";
        else
            runScheme += "?navi=Y";
    }

    bugs.app.runAppScheme(runScheme);
};


bugs.app.runMusic4u = function(securityKey, navi){
    runScheme = scheme = 'app/love?type=month'

    if(bugs.useragent.isIos() && bugs.useragent.isBugs("5")) {
        if (runScheme.indexOf("?") >= 0)
            runScheme += "&navi=Y";
        else
            runScheme += "?navi=Y";
    }

    bugs.app.runAppScheme(runScheme);
};
bugs.app.runMusic4uYear = function(securityKey, navi){
    runScheme = scheme = 'app/love?type=year'

    if(bugs.useragent.isIos() && bugs.useragent.isBugs("5")) {
        if (runScheme.indexOf("?") >= 0)
            runScheme += "&navi=Y";
        else
            runScheme += "?navi=Y";
    }

    bugs.app.runAppScheme(runScheme);
};


bugs.app.call = function(params){
    if(!bugs.useragent.isBugs())
        return;

    var callParams = {};
    for(var prop in params){
        if(/string|number|boolean/i.test(typeof(params[prop])))
            callParams[prop] = params[prop];
    }

    try{
        if(bugs.useragent.isIos()){
            window.webkit.messageHandlers.bugsapp.postMessage(callParams);
        }
        else{
            bugsapp.call(callParams);
        }
    }
    catch(e){
        if(params.fail)
            params.fail(e);
    }
}


bugs.app.callGetScreenSize = function(params){
    params.name = "getScreenSize";

    bugs.app.call(params);
}


bugs.app.callFitScreenSize = function(params){
    params.name = "fitScreenSize";

    bugs.app.call(params);
}


bugs.app.callResetScreenSize = function(params){
    params.name = "resetScreenSize";

    bugs.app.call(params);
}
/*-----/js/bugs/bugs.app.js / end -----*/

/*-----/js/bugs/bugs.sns.js / start -----*/

var bugs = bugs||{};

bugs.sns = bugs.sns || {};

bugs.sns.openSize = {
	facebook : {
		width : 555,
		height : 650
	},
	twitter : {
		width : 555,
		height : 300
	},
	kakaostory : {
		width : 555,
		height : 550
	},
	band : {
		width : 555,
		height : 550
	}
};

bugs.sns.shareUrl = {
	facebook : "https://www.facebook.com/sharer/sharer.php?u={url}&title={text}",
	twitter : "https://twitter.com/intent/tweet?text={text}&url={url}",
	kakaostory : "https://story.kakao.com/share?url={url}&text={text}",
	band : "http://band.us/plugin/share?body={text} {url}&route=music.bugs.co.kr"
};

bugs.sns.openPop = function(type, url, text){
	shareUrl = bugs.sns.shareUrl[type];
	
	openUrl = shareUrl
		.replace("{url}", encodeURIComponent(url))
		.replace("{text}", encodeURIComponent(text));
	
	openParams = 
		"width=" + bugs.sns.openSize[type].width
		+ ",height=" + bugs.sns.openSize[type].height;
	open(openUrl, "", openParams);
};

bugs.sns.open = function(params){
	var defaultParams = {
			type : "facebook", //facebook, twitter, kakaotalk, kakaostory
			url : "https://music.bugs.co.kr",
			text : "벅스",
			img : "http://file.bugsm.co.kr/nbugs/common/new/header/logo_bugs.gif",
			corner : "벅스"
		}; //기본값
	
	snsParam = bugs.object.copy(defaultParams, params);
	
	if(/kakaostory|band|twitter/.test(snsParam.type) && snsParam.hashTag )
		snsParam.text += " " + snsParam.hashTag;
	
	//if(!(/kakaostory|twitter|kakaotalk/.test(snsParam.type)))
		//snsParam.text = "";
	
	if(bugs.useragent.isBugs()){
		snsParam.title = snsParam.text;
		snsParam.link = snsParam.url;
		
		if(snsParam.type == "band"){
			shareUrl = bugs.sns.shareUrl.band;
			
			body = encodeURIComponent(snsParam.text + " " + snsParam.url);
			if(bugs.useragent.isIos())
				body = encodeURIComponent(body);
			
			shareUrl = shareUrl.replace("{text} {url}", body);
			
			bugs.app.runBrowser(shareUrl);
		}
		else{
			bugs.app.runShare(snsParam);
		}
	}
	else{
        if(snsParam.type === "twitter"){
            var ieVersion = bugs.browser.getInternetExplorerVersion();
            if(ieVersion >= 0 && ieVersion <= 10) {
                alert('Internet Explorer 10 이하 브라우저에서 이용할 수 없습니다.');
                return;
            }
        }

		if(snsParam.type == "kakaotalk"){
			bugs.sns.kakaolink(snsParam);
		}
		else{
			bugs.sns.openPop(snsParam.type, snsParam.url, snsParam.text);
		}
	}
};



bugs.sns.facebook = function(params){
	params.type = "facebook";
	bugs.sns.open(params);
};

// bugs.sns.twitter = function(params){
//     var ieVersion = bugs.browser.getInternetExplorerVersion();
//     if(ieVersion >= 0 && ieVersion <= 10){
//         alert('Internet Explorer 10 이하 브라우저에서 이용할 수 없습니다.');
//     } else {
//         params.type = 'twitter';
//         bugs.sns.open(params);
//     }
// };

bugs.sns.kakaostory = function(params){
	params.type = "kakaostory";
	bugs.sns.open(params);
};

bugs.sns.band = function(params){
	params.type = "band";
	bugs.sns.open(params);
};

bugs.sns.kakaotalk = function(params){
	params.type = "kakaotalk";
	bugs.sns.open(params);
};

bugs.sns.kakaolink = function(params){
	params.target = params.target || "bugs";
	bugs.sns._appKey = bugs.sns.kakaoKeys[params.target];
	//Kakao.init(key);
	
	if(!window.Kakao || !window.Kakao.Link){
		(function (d, s, id) {
			var js, fjs = d.getElementsByTagName(s)[0];
			if (d.getElementById(id)) return;
			js = d.createElement(s); js.id = id;
			js.src = "//developers.kakao.com/sdk/js/kakao.min.js?from=bugs.sns.js";
			fjs.parentNode.insertBefore(js, fjs);
		}(document, 'script', 'kakao-js-sdk'));
		
		waitKakaoLibLoad();
	}
	else{
		runKakaoLink();
	}
	
	function waitKakaoLibLoad(){
		try{
			window.Kakao.init(bugs.sns._appKey);
			kakaolike_ = Kakao.Link;
			runKakaoLink();
		}
		catch(e){
			setTimeout(function(){
				waitKakaoLibLoad();
			},100);
		}
	}
	
	function runKakaoLink(){
		bugs.sns.kakaolink_sendDefault(params);
	};
	
	
};

bugs.sns.kakaolink_sendDefault = function(params){
	kakaoData = {
		objectType: 'feed',
        installTalk: params.store || false,
		content: {
			title: params.text,
			description: params.hashTag,
			imageUrl: params.img,
			link: {
				mobileWebUrl: params.url,
				webUrl: params.url
			}
		}
	};

	//console.log(kakaoData);
	
	Kakao.Link.sendDefault(kakaoData);
};

bugs.sns.kakaoKeys = {
	bugs : "a82fbdf7f1b0ff57e67a4bc07fdc365e", //벅스용
	ninano : "6434f9a8c2d1bcb400c740736ea88378" //니나노용
};

bugs.sns.kakaoPropNm = "kakao";


bugs.sns.kakaoInit = function(params){
	try{
		//console.log("bugs.sns.kakaoInit 사용하지 말것.")
	}catch(e){}
};

bugs.sns.band_ = function(params) {
	var param = 'create/post?text=' + encodeURIComponent(params.url) + '&route='+encodeURIComponent(params.url);
	if(navigator.userAgent.match(/android/i))
	{
	    setTimeout(function(){
	        location.href = 'intent://' + param + '#Intent;scheme=bandapp;package=com.nhn.android.band;end';
	    }, 100);
	}
	else if(navigator.userAgent.match(/(iphone)|(ipod)|(ipad)/i))
	{
	    setTimeout(function(){
	        location.href = 'bandapp://' + param;
	    setTimeout(function(){
	        location.href = 'itms-apps://itunes.apple.com/app/id542613198?mt=8';
	    }, 200);
	    }, 100);
	}else{
	    window.open("http://band.us/plugin/share?body=" + encodeURIComponent(params.text + "\n") +params.url+"&route="+ params.url, "share_band", "width=410, height=540, resizable=no");
	}
};
/*-----/js/bugs/bugs.sns.js / end -----*/

/*-----/js/bugs/bugs.mobile.js / start -----*/

var bugs = bugs||{};

bugs.mobile = bugs.mobile || {};

bugs.mobile.isMobile = function(){
	mPttn = /iphone|android|ipad|mobile/ig;
	return mPttn.test(navigator.userAgent);
};


bugs.mobile.setDispOnRotate = function(params){
	if(!bugs.mobile.isMobile())
		return;
	
	params = params || {};
	
	if(bugs.mobile.lastProps)
		return;
	
	bugs.mobile.lastProps = {
		width : $(window).width(),
		height : $(window).height(),
		minHeight : $(window).height()
	};
	
	bugs.mobile.rotationResizeTarget = ["html", "body"];
	if(params.target){
		bugs.mobile.rotationResizeTarget = params.target;
	}
	
	eventName = "resize";
	if("onorientationchange" in window)
		eventName = "orientationchange"; 
	
	$(window).on(eventName, function(){
		if(params.over)
			nextMinHeight = bugs.mobile.lastProps.minHeight * bugs.mobile.lastProps.height / bugs.mobile.lastProps.width;
		else
			nextMinHeight = Math.max($(window).height(), $(window).width());
		
		$(bugs.mobile.rotationResizeTarget.join(",")).css({
			"min-height" : nextMinHeight + "px"
		});

		bugs.mobile.lastProps.width = $(window).width();
		bugs.mobile.lastProps.height = $(window).height();
		bugs.mobile.lastProps.minHeight = nextMinHeight;
		
		if(params.onRotate)
			params.onRotate(bugs.mobile.lastProps);
	});	
};


//모바일웹 관련
bugs.mobile.footerLogin = function() {
	if(typeof mobileFooterLogin == "function") {
		mobileFooterLogin();
	} else {
		bugs.mobile.login(true);
	}
}

bugs.mobile.login = function(force, message, alertType){

	if(!force) {
		if(typeof message == "undefined" || typeof message != "string"){
			message = "로그인 후 이용해 주세요.";
		}
		
		if(alertType != undefined && alertType == "ALERT") {
			alert(message);
		} else {
			if(!confirm(message)){
				return;
			}
		}
	}
	
	if(bugs.app.isBugsApp()){
		bugs.app.runLogin(true);
		
	}else{
		var url = location.href;
		
		if(url.indexOf("?") >= 0 ){
			url += "&ismobile=Y";
		}else{
			url += "?ismobile=Y";
		}			
		
//		window.open(g_urlM + "/login?rUrl=" + encodeURIComponent(url));
		location.href = g_urlM + "/login?rUrl=" + encodeURIComponent(url);
	}
};

bugs.mobile.logout = function(){
	var url = location.href;
	
	 if( (location.href.indexOf(g_urlM + "/me") >= 0)
		|| (location.href.indexOf("/event/dalkomm/coupon") >= 0) )
	{
		url = g_urlM;
	}
	
	if (url.indexOf("://") <= -1) url = location.protocol+url;
	location.href = g_urlMember + "/login/logout?rUrl=" + encodeURIComponent(url);
};

bugs.mobile.trackPlayAll = function(trackListName){
	
	//trackIds 세팅
	var trackIds = "";
	
	$('li.'+trackListName).each(function(){
		var value = $(this).val();
		if(typeof value == "number" && value > 0){
			trackIds += value + ",";
		}
	});
	
	if(trackIds != ""){
		trackIds = trackIds.substring(0, trackIds.length-1);
	}else{
		if($('li.'+trackListName+'1').length > 0){
			if(g_isLogged){
				bugs.ui.adult.notice();
			}else{
				if(confirm("청소년 보호법에 따라 19세 미만의 청소년이 이용할 수 없습니다. 성인 인증 확인을 위해 먼저 로그인해 주세요.") == true){
					bugs.mobile.login(true);
				}
			}
			return;
		}
	}
	
	bugs.mnplayer.playTrack(trackIds);
};

//재생목록에 추가
bugs.mobile.trackPlayAdd = function(trackListName){
	
	//trackIds 세팅
	var trackIds = "";
	
	$('li.'+trackListName).each(function(){
		var value = $(this).val();
		if(typeof value == "number" && value > 0){
			trackIds += value + "\|";
		}
	});
	
	if(trackIds != ""){
		trackIds = trackIds.substring(0, trackIds.length-1);
	}else{
		if($('li.'+trackListName+'1').length > 0){
			if(g_isLogged){
				bugs.ui.adult.notice();
			}else{
				if(confirm("청소년 보호법에 따라 19세 미만의 청소년이 이용할 수 없습니다. 성인 인증 확인을 위해 먼저 로그인해 주세요.") == true){
					bugs.mobile.login(true);
				}
			}
			return;
		}
	}
	
	bugs.app.addTracks(trackIds, "Bugs");
};

//재생목록에 추가 버튼 추가여부 파악 
bugs.mobile.checkPlayAddButton = function(trackListName){
	
	bugsApp = bugs.app.getBugsAppInfo();

	if(bugsApp == null){
		return;
	}
	
	// alert(bugsApp.appVersion);
	// alert("ios - " + bugs.app.checkAppVersion(true, true, false, "4.6.1", ""));
	// alert("and - " +bugs.app.checkAppVersion(false, false, true, "4.12.3", ""));
	
	if(bugs.app.checkAppVersion(true, true, false, "4.6.1", "") ||
			bugs.app.checkAppVersion(false, false, true, "4.12.3", "")){
		$('.btnAddPlaylist' + trackListName).show();
	}
};

bugs.mobile.morePage = function(moreBtn, func, lastPage){
	
	if(typeof func == "function"){		
		
		//페이지 제어
		var currentPage = parseInt($(moreBtn).attr("currentpage"));
		currentPage++;		
		$(moreBtn).attr("currentpage", currentPage);
		if(currentPage >= lastPage){
			$(moreBtn).closest('div.morePagination').hide();
		}
		func(currentPage); //사용자 함수 호출		
		
	}
	
};

bugs.mobile.moreCommonPage = function(moreBtn, listSelection, size){
	
	//리스트 show
	$(listSelection).not(":visible").slice(0, size).show();
	
	//더이상 볼 리스트가 없을 때, 더보기 버튼 hide
	if($(listSelection).not(":visible").length == 0){
		$(moreBtn).closest('.morePagination').hide();
	}
	
};


bugs.mobile.trackListen = function(trackIds){
	bugs.mnplayer.playTrack(trackIds);
};


bugs.mobile.myAlbumTrackListen = function(myAlbumId, trackCnt){
	if(typeof trackCnt == "undefined" || trackCnt <= 0){
		alert("선택하신 앨범에 담긴 곡이 없습니다.");
		return;
	}
	
	$.ajax({
		type : "GET",
		url : g_urlM+"/me/myAlbum/"+myAlbumId+"/trackIds",
		dataType : "json",
		async : false,
		success : function(result){
			if(result){
				if(result.trackIds){
					bugs.mobile.trackListen(result.trackIds);
				}else{
					alert("선택하신 앨범에 듣기 가능한 곡이 없습니다.");
				}
			}
		},
		
		error : function(error){
			alert("데이터를 가져오지 못했습니다.");
		}
		
	});
	
};

bugs.mobile.goPC = function(){
	location.href = g_urlMusic + "?_redir=n";
};

bugs.mobile.setDrawerMenuBtnSelected = function(){
	$('aside.drawer').find('a').each(function(index){
		$(this).closest('li').removeClass("selected");
		var compareUrl = location.href.split("?")[0];
		var menuUrl = $(this).attr("selectedUrl");
		
		if(compareUrl.indexOf(menuUrl) >= 0){
			if(menuUrl == g_urlM && menuUrl.length != compareUrl.length){
				
			}else{
				$(this).closest('li').addClass("selected");
			}
		}
	});
	
};

bugs.mobile.setDrawerMenuClickHandler = function(){
	$('aside.drawer').find('a').off("click").on("click",function(){
		$('.drawer').hide();
		$('#m_contentModalLayer').hide();
	})	
};

bugs.mobile.setViewWithAppBtn = function(params){
	params = params || {};
	
	if(bugs.mobile._setViewWithAppBtnTid)
		return;
	
	var goBugsAppArea = $("#goBugsAppArea");
	
	if(bugs.useragent.isBugs() || !bugs.useragent.isMobile()){
		goBugsAppArea.hide();
		return;
	}
	
	goBugsAppArea.find("[name=btnGoBugsApp]").click(function(){
		if(bugs.mobile._currentUrlPattern){
			params = {
				schemeAt : "enable"
			};
			
			bugs.location.goWithUrlPattern(location.href, params);	
		}
	});
	
	goBugsAppArea.find("[name=btnClose]").click(function(){
		bugs.mobile._hideViewWithAppBtn = true;
		
		goBugsAppArea.hide();
	});
	
	function watchingBtn(){
		
		if(bugs.location.getUrlPattern(location.href) != bugs.mobile._currentUrlPattern)
			bugs.mobile._hideViewWithAppBtn = false;
		
		if(!bugs.mobile._hideViewWithAppBtn){
			bugs.mobile._currentUrlPattern = bugs.location.getUrlPattern(location.href);
			
			if(bugs.mobile._currentUrlPattern && bugs.mobile._currentUrlPattern.bugsApp){
				goBugsAppArea.show();
				
				if($(".playerWrap").length > 0 && $(document.body).hasClass("nowPlaying")){
					goBugsAppArea.addClass("withPlayer");
				}
				else{
					goBugsAppArea.removeClass("withPlayer");
				}
			}
			else{
				goBugsAppArea.hide();
			}
		}
		
		
		bugs.mobile._setViewWithAppBtnTid = setTimeout(watchingBtn,1000);
	}
	watchingBtn();
};

/*-----/js/bugs/bugs.mobile.js / end -----*/

/*-----/js/bugs/bugs.data.js / start -----*/

var bugs = bugs||{};

bugs.data = bugs.data || {};

bugs.data._ajax = function(params){
	params = params || {};
	
	delete params.data;
	var ajaxParam = {
		data : {}
	};
	
	for(var prop in params){
		ajaxParam[prop] = params[prop];
		if(/string|number|boolean/i.test(typeof(params[prop]))){
			ajaxParam.data[prop] = params[prop];	
		}
	}
	if(ajaxParam.data.url)
		delete ajaxParam.data.url;
	
	params.url = params.url.replace(/http:|https:/i, "");
	
	$.ajax(ajaxParam);
};


bugs.data.ajax = bugs.data._ajax;


bugs.data.getLoginUserInfo = function(params){
	params = params || {};
	params.url = g_urlAjax + "/datasupport/ajax/getLoginUser";
	bugs.data._ajax(params);
};


bugs.data.getAlbumTrackIds = function(params){	
	params = params || {};
	params.url = g_urlAjax + "/datasupport/ajax/getAlbumTrackIds";
	bugs.data._ajax(params);
};


bugs.data.getAlbum = function(params){
	params = params || {};
	params.url = g_urlAjax + "/datasupport/ajax/getAlbum";
	bugs.data._ajax(params);
};


bugs.data.getTrack = function(params){
	params = params || {};
	if(typeof(params.trackId) == "number"){
		params.url = g_urlAjax + "/datasupport/ajax/getTrack";
	}
	else{
		params.trackIds = params.trackId.join(",");
		delete params.trackId;
		params.url = g_urlAjax + "/datasupport/ajax/getTracks";
	}
	bugs.data._ajax(params);
};



bugs.data.getMusicStatus = function(params){
	params = params || {};
	action = params.action.toLowerCase();
	target = params.target.toLowerCase();
	id = params.id;
	
	params.url = g_urlAjax + "/datasupport/ajax/musicstatus/"
		+ action + "/" + target + "/" + id;
	bugs.data._ajax(params);
}

/*-----/js/bugs/bugs.data.js / end -----*/

/*-----/js/bugs/bugs.layer.js / start -----*/


var bugs = bugs||{};

bugs.layer = bugs.layer || {};

bugs.layer.init = {
		useNetCache : true
};

bugs.layer.cache = {};
bugs.layer.cache.html = {};
bugs.layer.cache.obj = {};

bugs.layer.getLayerHtml = function(param){
	if(bugs.layer.cache.html[param.name] && param.cache){
		if(param.callback){
			param.callback(bugs.layer.cache.html[param.name]);
		}
		return;
	}
	
	sendVars = {};
	sendVars.name = param.name;
	if(bugs.layer.init.useNetCache == false){
		sendVars.timestamp = (new Date()).getTime();
	}
	
	for(var prop in param){
		if(/string|number|boolean/ig.test(typeof(param[prop]))){
			sendVars[prop] = param[prop];
		}
	}
	
	url = (g_urlAjax + "/layerHtml/ajax/getLayerHtml").replace(/http:|https:/i, "");
	$.get(url,
		sendVars,
		function(data){
			bugs.layer.cache.html[param.name] = data;
			
			if(param.callback){
				param.callback(data);
			}
		}).fail(function () {
            if(param.fail){
                param.fail();
            }
        });
};

bugs.layer.preloadLayerHtml = function(nameArr, complete){
	for(var idx in nameArr){
		bugs.layer.getLayerHtml({ name:$.trim(nameArr[idx]) });
	}
	
	if(complete){
		bugs.layer._preloadLayerHtmlComplete = setInterval(function(){
			var loadOk = true;
			for(var idx in nameArr){
				if( !bugs.layer.cache.html[nameArr[idx]] )
					loadOk = false;
			}
			if(loadOk){
				clearInterval(bugs.layer._preloadLayerHtmlComplete);
				complete();
			}
		}, 500);
	}
};

bugs.layer.getLayer = function(params){
	var name = params.name;
	var callback = params.callback;
	var cache = params.cache;
	var optParams = params.params;
	
	if(typeof(cache) == "undefined")
		cache = true;
	
	if(cache && bugs.layer.cache.obj[name]){
		callback(bugs.layer.cache.obj[name]);
		return;
	}
	
	var param = {};
	param.name = name;
	param.callback = function(data){
		bugs.layer.cache.obj[name] = 
			$(data)
				.attr("layername", name);
		
		var thisLayer = bugs.layer.cache.obj[name];
		
		callback(thisLayer);
		
		if(!thisLayer)
			return;

        if(typeof $(window).on == "undefined")
        	return;

		thisLayer.find("[layerclick]").on("click", function(){
			action = $(this).attr("layerclick").toLowerCase();
			if(action == "close"){
				bugs.layer.hideLayer(name);
			}
			else if(action == "remove"){
				bugs.layer.hideLayer(name, true);
			}
		});
		
		thisLayer.find("[firstfocus]").on("keydown", function(e){
			action = $(this).attr("firstfocus");
			if(e.keyCode == 9 && e.shiftKey){ //shift + 탭
				actionParams = {
					layername : name,
					action : action
				};
				bugs.layer.layerAction(actionParams);
				e.preventDefault();
			}
		});
		
		thisLayer.find("[lastfocus]").on("keydown", function(e){
			action = $(this).attr("lastfocus");
			if(e.keyCode == 9 && !e.shiftKey){ //탭
				actionParams = {
					layername : name,
					action : action
				};
				bugs.layer.layerAction(actionParams);
				e.preventDefault();
			}
		});
	};
	param.cache = cache;

	for(var prop in optParams){
		if(/string|number|boolean/ig.test(typeof(optParams[prop]))){
			param[prop] = optParams[prop];
		}else if(/function/ig.test(typeof(optParams[prop])) && prop == "fail"){
            param[prop] = optParams[prop];
        }
	}

	bugs.layer.getLayerHtml(param);
};


bugs.layer.layerAction = function(params){
	layername = params.layername;
	layer = params.layer;
	action = params.action;
	actor = params.actor;

	if(!layername)
		layername = layer.closest("[layername]").attr("layername");
	if(!layer)
		layer = bugs.layer.cache.obj[layername];
	
	if(action == "close"){
		bugs.layer.hideLayer(layername);
	}
	else if(action == "remove"){
		bugs.layer.hideLayer(layername, true);
	}
	else if(action == "click"){
		if(actor)
			$(actor).click();
	}
	else if(action == "firstfocus"){
		var firstfocus = layer.find("[firstfocus]:eq(0)");
		if(firstfocus.length > 0){
			setTimeout(function(){
				firstfocus.focus();
			}, 100)
		}
	}
	else if(action == "test"){
		console.debug(params);
	}
		
}


bugs.layer.showLayer = function(args){
	
	if(typeof(arguments[0]) == "string"){ 
		params = arguments[2] || {};
		params.name = arguments[0];
		params.complete = arguments[1];
	}
	else{
		params = arguments[0];
	}
	
	_obj = bugs.layer.cache.obj[params.name];
	
	if(_obj){
		_showLayer(_obj, true);
		return;
	}
	
	var getLayerParams = {
		name : params.name,
		params : params,
		callback : function(obj){
			if(params){
				for(var prop in params){
					if(/string|number|boolean/ig.test(typeof(params[prop]))){
						obj.attr(prop, params[prop]);
					}
					else if(/object/ig.test(typeof(params[prop]))){
						obj.data(prop, params[prop]);
					}
				}
			}
			
			obj.css("visibility", "hidden");

			target = obj.attr("target");
			
			obj.appendTo(target);
			
			if(params.complete)
				params.complete(obj);
			
			_showLayer(obj, false);
		}
	};
	
	bugs.layer.getLayer(getLayerParams);
	
	
	
	function _showLayer(layer, existed){
		if(params.beforeShow)
			params.beforeShow(layer);
		
		if(existed)
			layer.show();
		else
			layer.css("visibility", "");
		
		bugs.layer._afterShowLayer(layer);
		
		if(params.afterShow){
			params.afterShow(layer);
		}
	}
};

bugs.layer.setLayerDisp = function(obj){

	layername = obj.attr("layername");
	position = obj.attr("position")||"";
	posArr = position.split("|");
	
	for(var idx in posArr){
		pos = posArr[idx];
		
		if(pos == "center")
			bugs.layer.setLayerWindowCenter(layername);
		
		if(pos == "background"){
			obj.height( $(document).height() );
		}

		if(pos == "scrollTop"){
			obj.css("top", $(window).scrollTop());
		}
	}

};

bugs.layer._afterShowLayer = function(obj){
	bugs.layer.setLayerDisp(obj);
	bugs.layer.showJoinLayer(obj);
	bugs.layer.outerEventOff(obj);
};

bugs.layer.showJoinLayer = function(obj){

	join = obj.attr("join");
	if(join){
		bugs.layer.showLayer(join);
	}
	
	actionParams = {
		layer : obj,
		action : "firstfocus"
	};
	bugs.layer.layerAction(actionParams);
};

bugs.layer.hideLayer = function(name, remove){
	_obj = bugs.layer.cache.obj[name];
	if(_obj){
		_obj.hide();
		
		join = _obj.attr("join");
		
		var caller = bugs.layer.cache.obj[name].data().caller;
		if(caller){
//			setTimeout(function(){
//				$(caller).focus();
//			}, 10);
			$(caller).focus();
		}
		
		if(join) {
			if(bugs.layer.cache.obj[join] != undefined)
				bugs.layer.cache.obj[join].hide();
		}
		
		if(remove){
			bugs.layer.cache.obj[name].remove();
			delete bugs.layer.cache.obj[name];
            $("[layername=" + name + "]").remove();

			if(join){
				bugs.layer.cache.obj[join].remove();
				delete bugs.layer.cache.obj[join];
			}
		}
		
		bugs.layer.outerEventOn(_obj);
	}
};

bugs.layer.hideAllLayer = function(remove){
	for(var name in bugs.layer.cache.obj){
		bugs.layer.hideLayer(name, remove);
	}
};

bugs.layer.setLayerWindowCenter = function(name){
	_obj = bugs.layer.cache.obj[name];
	if(!(_obj))
		return;

	posL = $(window).scrollLeft() + $(window).width()/2 - _obj.outerWidth()/2;
	posT = $(window).scrollTop() + $(window).height()/2 - _obj.outerHeight()/2;
	
	_obj.css("left", posL);
	_obj.css("top", posT);
};

bugs.layer.keepLayerProp = function(eventType){
	if(!eventType)
		return;
	
	for(var name in bugs.layer.cache.obj){
		
		var _obj = bugs.layer.cache.obj[name];
		target = _obj.attr("target");
		position = _obj.attr("position");
		
		if(!_obj.is(":visible"))
			continue;
		
		if(!(_obj.attr("keeppos")))
			continue;
		
		if(_obj.attr("keeppos").indexOf(eventType) < 0)
			continue;
		
		bugs.layer.setLayerDisp(_obj);
	}
};

bugs.layer.outerEventOff = function(obj){
	
	if(!obj.attr("stopOuterEvent"))
		return;
	
	bugs.layer.outerEventOn(obj);
	
	stopEvents = obj.attr("stopOuterEvent").split(",");
	
	var eventNm = "";
	for(var idx in stopEvents){
		eventNm = stopEvents[idx];
		if(eventNm == "touchmove")
			$(document).on("touchmove", bugs.layer.stopEvent);
		else if(eventNm == "scroll")
			$(document).on("scroll", bugs.layer.stopEvent);
		else if(eventNm == "mousewheel")
			$(window).on("mousewheel", bugs.layer.stopEvent);
	}
};

bugs.layer.outerEventOn = function(obj){

	if(!obj.attr("stopOuterEvent"))
		return;
	
	stopEvents = obj.attr("stopOuterEvent").split(",");
	
	var eventNm = "";
	for(var idx in stopEvents){
		eventNm = stopEvents[idx];
		if(eventNm == "touchmove")
			$(document).off("touchmove", bugs.layer.stopEvent);
		else if(eventNm == "scroll")
			$(document).off("scroll", bugs.layer.stopEvent);
		else if(eventNm == "mousewheel")
			$(window).off("mousewheel", bugs.layer.stopEvent);
	}
};

bugs.layer.stopEvent = function(event){
	//bugs.debug.show(event.type + " : bugs.layer.stopPropagationEvent");
	event.preventDefault();
};


bugs.layer.eventHandler = function(event){
	bugs.layer.keepLayerProp(event.type);
};

$(document).ready(function(){
	if(typeof $(window).on != "undefined") {
        $(window)
            .off("resize", bugs.layer.eventHandler)
			.on("resize", bugs.layer.eventHandler)
            .off("scroll", bugs.layer.eventHandler)
            .on("scroll", bugs.layer.eventHandler);
	}
});

/*-----/js/bugs/bugs.layer.js / end -----*/

/*-----/js/bugs/bugs.string.js / start -----*/
var bugs = bugs||{};

bugs.string = bugs.string || {};

bugs.string.rexpPttns = {
		korean : "ㄱ-ㅎ|ㅏ-ㅣ|가-힣"
};

bugs.string.getPadLeft = function(str, length, addChar){
	if(!str) return null;
	if(!length) return str;
	str = str + "";
		
	len = str.length;
	rtn = str;
	if(addChar)
		while(rtn.length < length){
			rtn = addChar + rtn;
		}
	return rtn;
};

bugs.string.getPadRight = function(str, length, addChar){
	if(!str) return null;
	if(!length) return str;
	str = str + "";
		
	len = str.length;
	rtn = str;
	if(addChar)
		while(rtn.length < length){
			rtn += addChar;
		}
	return rtn;
};

bugs.string.getLeft = function(str, length, addChar){
	if(!str) return null;
	if(!length) return str;
	str = str + "";
	
	str = str.substr(0, Math.min(length, str.length));
	return bugs.string.getPadRight(str, length, addChar);
};

bugs.string.getRight = function(str, length, addChar){
	if(!str) return null;
	if(!length) return str;
	str = str + "";
	
	str = str.substr(Math.max(str.length-length, 0));
	return bugs.string.getPadLeft(str, length, addChar);
};

bugs.string.isEmpty = function(str){
	if(typeof(str) == "undefined" || str == null) 
		return true;
	return !(/\S/.test(str));
};

bugs.string.isNumber = function(str){
	return !isNaN(str+"");
};

bugs.string.getNumberOnly = function(str){
	return str.replace(/\D/ig, "");
};

bugs.string.isEmail = function(str) {
	return /^\w{1}[\w\d\._]+@[\w]+\.[\w\d]{2,}/.test(str);
};

//ie8 이하는 .trim 함수가 없음
bugs.string.trim = function(str){
	return str.replace(/^\s+|\s+$/g, '');
};

bugs.string.setByteUnit = function(nByte){
	var nImageSize;
	var sUnit;
	
	if(nByte < 0 ){
		nByte = 0;
	}
	
	if( nByte < 1024) {
		nImageSize = Number(nByte);
		sUnit = 'B';
		return nImageSize + sUnit;
	} else if( nByte > (1024*1024)) {
		nImageSize = Number(parseInt((nByte || 0), 10) / (1024*1024));
		sUnit = 'MB';
		return nImageSize.toFixed(2) + sUnit;
	} else {
		nImageSize = Number(parseInt((nByte || 0), 10) / 1024);
		sUnit = 'KB';
		return nImageSize.toFixed(0) + sUnit;
	}
};


bugs.string.getSuitableType = function(str){
	if(bugs.string.isEmpty(str))
		return str;
	
	if(!isNaN(str))
		return Number(str);
	else if(str == "false")
		return false;
	else if(str == "true")
		return true;
	else
		return str;
}

bugs.string.urlToA = function(params){
	if(typeof(params) == "string"){
		str = params;
		params = {};
		params.str = str;
	}
	else if(typeof(params) != "object"){
		return null;
	}
	
	targetStr = "";
	if(params.target)
		targetStr = "target='" + params.target + "'";
	
	return params.str.replace(/(https?:\/\/[\S]*)/g, "<a href='$1' " + targetStr + ">$1</a>")
}


bugs.string.unicodeToChar  = function(text) {
    return text.replace(/\\u[\dA-F]{4}/gi,
        function (match) {
            return String.fromCharCode(parseInt(match.replace(/\\u/g, ''), 16));
        });
};
/*-----/js/bugs/bugs.string.js / end -----*/

/*-----/js/bugs/bugs.object.js / start -----*/
var bugs = bugs||{};

bugs.object = bugs.object || {};


bugs.object.copyProps = function(target, source, overwrite){
	if(target == null)
		target = new Object();
	
	if(!source)
		return target;
	
	for(var prop in source){
		if(overwrite || typeof(target[prop]) == "undefined"){
			target[prop] = source[prop];
		}
	}
	
	return target;
};

bugs.object.clone = function(obj){
	if(!obj)
		return obj;
	
	var co = {};
	
	for(var prop in obj){
		co[prop] = obj[prop];
	}
	
	return co;
};


bugs.object.copy = function(params){
	if(!params["source"]){
		source = arguments[0] || null;
		target = arguments[1] || null;
		overwrite = arguments[2] || false;
		
		params = {
			source : source,
			target : target,
			overwrite : overwrite
		};
	}
	
	tgt = bugs.object.clone(params.target);

	if(!tgt)
		tgt = new Object();
	
	if(!params.source)
		return tgt;
	
	for(var prop in params.source){
		if(params.overwrite || typeof(tgt[prop]) == "undefined"){
			tgt[prop] = params.source[prop];
		}
	}
	
	return tgt;
}
/*-----/js/bugs/bugs.object.js / end -----*/

/*-----/js/bugs/bugs.play.js / start -----*/
var bugs = bugs||{};

bugs.play = bugs.play || {};

bugs.play.control = bugs.play.control || {};


bugs.play.tracks = function(params){
	if(!(params) || !(params.trackIds))
		return;

	autoplay = params.autoplay || false;
	miniplay = params.miniplay || false;
	title = params.title || "";
	actview = params.actview || null;

	bugs.play.ytpPauseAll();

	if(params.trackIds.length == 1 && !bugs.useragent.isMobile() ){
		checkParams = {};
		checkParams.track_id = params.trackIds[0];
		checkParams.success = function(data){
			//console.debug(data);
			afterCheckStatus()
		};

		bugs.play.getTrackMusicStatus(checkParams);
	}
	else{
		afterCheckStatus();
	}

	function afterCheckStatus(){
		if(bugs.app.isBugsApp()){
			if(params.trackIds.length == 1){
				bugs.app.runTrack(params.trackIds.join("|"), autoplay, miniplay, actview);
			}
			else{
				bugs.app.runTracks(params.trackIds.join("|"), title, autoplay, miniplay, actview);
			}
		}
		else if(bugs.useragent.isMobile()){
			bugs.play.mplayerTrack(params.trackIds, params.index, params.adultYN);
		}
		else{
			try{
				bugs.music.listen(params.trackIds.join(","), params.autoplay);
			}catch(e){}
		}
	}

};


bugs.play.video = function(params){

	if(typeof(params) == "number"){
		mvid = params;

		params = {
			mvid:mvid
		};
	}

	if(params.checkDataFreeConfirm && bugs.useragent.isMobile() && !bugs.app.isBugsApp() ){
		if(!bugs.play.checkDatafreeConfirm(params))
			return;
	}

	mvid = params.mvid;
	html5 = params.html5 || false;
    actview = params.actview;

	bugs.play.ytpPauseAll();

	if(bugs.app.isBugsApp()){
		bugs.app.runMusicVideo(mvid, actview);
	}
	else if(bugs.app.isBugsAppEnable()){
		bugs.app.runMusicVideo(mvid, actview);
	}
	else{
		videoPlayOk = false;
		if(html5 && bugs.play.supports_video()){
			try{
				obj_id = params.obj_id;
				bugs.mvHPlayer.playVideo(obj_id);
				videoPlayOk = true;
			}
			catch(e){
				videoPlayOk = false;
			}
		}

		if(!videoPlayOk){
			bugs.music.viewMV(mvid);
		}
	}
};


bugs.play.album = function(params){

	params = params || {};

	defaultParams = {
		force : true
	};
	bugs.object.copyProps(params, defaultParams);

	bugs.play.ytpPauseAll();
	
	autoplay = params.autoplay || false;
	miniplay = params.miniplay || false;

	if(bugs.app.isBugsApp()){
		bugs.app.runAlbum(params.albumId, autoplay, miniplay, actview);
	}
	else if(bugs.useragent.isMobile()){
		bugs.play.mplayerAlbum(params.albumId);
	}
	else{
		bugs.music.listenAlbum(params.albumId, params.autoplay);
	}
};


bugs.play.checkDatafreeConfirm = function(params){
	params = params || {};
	cknm = "checkDatafreeConfirm";
	ckv = Cookies.get(cknm);
	if(!ckv){
		msg = "3G/LTE 환경에서 영상 재생 시 SK텔레콤 부가서비스 전용 데이터 혜택이 적용되지 않습니다.\n재생하시겠습니까?";
		if(params.msg)
			msg = params.msg;
		if(confirm(msg)){
			Cookies.set(cknm, "Y", {expires:7, path:"/", domain:document.domain});
			return true;
		}
		else{
			return false;
		}
	}

	return true;
};


bugs.play.supports_video = function(){
	return !!document.crealeElement('video').canPlayType;
};


bugs.play.control.play = function(params){
	if(bugs.app.isBugsApp()){
		bugs.app.runControlPlay();
	}
};


bugs.play.control.pause = function(params){
	if(bugs.app.isBugsApp()){
		bugs.app.runControlPause();
	}
};


bugs.play.control.next = function(params){
	if(bugs.app.isBugsApp()){
		bugs.app.runControlNext();
	}
};


bugs.play.control.prev = function(params){
	if(bugs.app.isBugsApp()){
		bugs.app.runControlPrev();
	}
};



bugs.play.getTrackMusicStatus = function(params){
	params = params || {};

	checkParams = {};
	checkParams.action = "stream";
	checkParams.target = "track";
	checkParams.id = params.id || params.track_id;
	checkParams.async = false;
	checkParams.method = "post";
	checkParams.success = function(data){

		if(data.result == "NO"){
			if(!bugs.useragent.isBugs()){
				if(data.user_status == "NO_ADULT"){
					bugs.member.adultOnlyAlert();
					return;
				}
				else if(data.user_status == "NO_LOGIN"){
					bugs.member.login();
				}
			}
		}

		if(params.success)
			params.success(data);
	}

	bugs.object.copyProps(checkParams, params);

	bugs.data.getMusicStatus(checkParams);
}


bugs.play.musiccast = function(params){
	if(typeof(params) == "number"){
		_params = {};
		_params.musiccast_channel_id = arguments[0];
		if(arguments.length >= 2)
			_params.musiccast_episode_id = arguments[1];
		params = _params;
	}

	if(bugs.useragent.isBugs()){ //벅스앱
		if(params.musiccast_episode_id)
			bugs.app.runMusicCastEpisode(params.musiccast_episode_id, true, true);
		else if(params.musiccast_channel_id){
			bugs.app.runMusicCastChannel(params.musiccast_channel_id, true, true);
		}
	}
	else if(bugs.useragent.isMobile()) { //모바일
		bugs.mnplayer.listenRadioMusicCast(params.musiccast_episode_id);
	} 
	else { //데스크탑
		var mcType = null;
		var mcId = null;

		if((params.musiccast_episode_id)){
			mcType = "episode";
			mcId = params.musiccast_episode_id;
		}
		else if(params.musiccast_channel_id){
			mcType = "channel";
			mcId = params.musiccast_channel_id;
		}

		bugs.music.listenRadioMusicCast(mcId, mcType);
	}
}





bugs.play.ytpInit = function(params){
	params = params || {};

	(function(d, s, id){
	     var js, fjs = d.getElementsByTagName(s)[0];
	     if (d.getElementById(id)) {return;}
	     js = d.createElement(s); js.id = id;
	     js.src = "//www.youtube.com/iframe_api";
	     fjs.parentNode.insertBefore(js, fjs);
	   }(document, 'script', 'iframe_api'));

	window["onYouTubeIframeAPIReady"] = function() {
		if(params.onready)
			params.onready();
	};
};


bugs.play.ytpMake = function(params){
	bugs.play.ytPlayer = bugs.play.ytPlayer || {};

	ytpInitParam = {
		height: params.height,
		width: params.weight,
		videoId: params.vid,
		showinfo : params.showinfo || 1,
		events : params.events || {}
	};

	ytpInitParam.events.onStateChange = function(event){
		bugs.play.ytpCommonStateChangeEvent(event);

		if(params.event && params.event.onStateChange)
			params.event.onStateChange(event);
	};

	if(!bugs.play.ytPlayer[params.id])
		bugs.play.ytPlayer[params.id] =
			new YT.Player(params.id, ytpInitParam);
};

bugs.play.ytpCommonStateChangeEvent = function(event){

	bugsPause = false;
	bugsPlay = false;

	switch(event.data){
		case YT.PlayerState.PLAYING :
			bugsPause = true;
			break;
		case YT.PlayerState.ENDED :
			//bugsPlay = true;
			break;
		case YT.PlayerState.PAUSED :
			//bugsPlay = true;
			break;
		case YT.PlayerState.BUFFERING :
			break;
		case YT.PlayerState.CUED :
			break;
	}

	if(bugsPause){
		bugs.play.control.pause();
	}

	if(bugsPlay){
		bugs.play.control.play();
	}
};


bugs.play.ytpControl = function(params){
	if(!bugs.play.ytPlayer)
		return;

	try{
		if(params.all){
			for(var pid in bugs.play.ytPlayer){
				if(typeof(bugs.play.ytPlayer[pid][params.act]) == "function")
					bugs.play.ytPlayer[pid][params.act]( params.actParam||[] );
			}
		}
		else{
			if(typeof(bugs.play.ytPlayer[params.id]) == "undefined")
				return;

			if(typeof(bugs.play.ytPlayer[params.id][params.act]) == "function")
				bugs.play.ytPlayer[params.id][params.act]( params.actParam||[] );
		}
	}
	catch(e){}
};


bugs.play.ytpPlay = function(params){
	if(params.checkDataFreeConfirm && bugs.useragent.isMobile() ){
		if(!bugs.play.checkDatafreeConfirm(params))
			return;
	}

	if(params.pauseBugsPlayer)
		bugs.play.control.pause();

	params.act = "playVideo";
	bugs.play.ytpControl(params);
};


bugs.play.ytpStop = function(params){
	params.act = "stopVideo";
	bugs.play.ytpControl(params);
};


bugs.play.ytpPause = function(params){
	params.act = "pauseVideo";
	bugs.play.ytpControl(params);
};


bugs.play.ytpPauseAll = function(){
	ytpParams = {
		all : true
	};
	bugs.play.ytpPause(ytpParams);
}

bugs.play.mplayerTrack = function(track_id, index ,adultYN){
	if(bugs.mnplayer)
		bugs.mnplayer.playTrack(track_id);
	else if(bugs.mplayer)
		bugs.mplayer.playTrack(track_id, index, adultYN);
};

bugs.play.mplayerAlbum = function(album_id){
	if(bugs.mnplayer)
		bugs.mnplayer.playAlbum(album_id);
	else if(bugs.mplayer)
		bugs.mplayer.playAlbum(album_id);
};

/*-----/js/bugs/bugs.play.js / end -----*/

/*-----/js/bugs/bugs.debug.js / start -----*/

var bugs = bugs||{};

bugs.debug = {};

bugs.debug.allowConsole = false;
bugs.debug.allowHtml = false;

bugs.debug.buffer = [];

bugs.debug.level = 1;

bugs.debug.init = function(param){
	if(param){
		bugs.debug.allowConsole = param.allowConsole || bugs.debug.allowConsole;
		bugs.debug.allowHtml = param.allowHtml || bugs.debug.allowHtml;
		bugs.debug.level = param.level || bugs.debug.level;
	}
};

bugs.debug.showConsole = function(msg){
	try{
		if(console && console.log){
			console.log(msg);
		}	
	}
	catch(e){
		//console.log(e.message);
	}
};

bugs.debug.showHtml = function(msg, level){
	var style = {
		"font-size":"12px",
		"margin":"2px"
	};
	switch(level){
	case 1 : 
		style["color"] = "#888888";
		break;
	case 2 : 
		style["color"] = "#0000ff";
		break;
	case 3 : 
		style["color"] = "#ff0000";
		style["font-weight"] = "bold";
		break;
	case 9 : 
		style["color"] = "orange";
		break;
	default:
		style["color"] = "#ff00ff";
	}
	
	_msg = msg;
	if(typeof(msg) == "number")
		_msg = "" + msg;
	else if(typeof(msg) == "object"){
		_msg = "";
		for(var prop in msg){
			if(_msg)
				_msg += "\n";
			_msg += prop + ":" + msg[prop]; 
		}
	}
	
	var addMsg = "";
	try{
		_msg = _msg.replace(/\n/g, "<br>");
		addMsg = $("<div></div>").css(style).html(_msg);
	}
	catch(e){
		addMsg = $("<div></div>").css(style).html(e.message);
	}
	
	$("#debugWin").prepend(addMsg);
};

bugs.debug.show = function(msg, level, showConsole, showHtml){
	if($(".debug, #debug").length == 0){
		var showObj = {
			msg : msg,
			level : level,
			showConsole : showConsole,
			showHtml : showHtml
		};
		if(bugs.debug.buffer.length < 10)
			bugs.debug.buffer.push(showObj);
	}
	else
		bugs.debug._show(msg, level, showConsole, showHtml);
	
	if(opener){
		try{
			opener.bugs.debug.show(msg, level, showConsole, showHtml);
		}
		catch(e){}
	}
};

bugs.debug._show = function(msg, level, showConsole, showHtml){
	level = level || 1;
	showConsole = showConsole || bugs.debug.allowConsole;
	showHtml = showHtml || bugs.debug.allowHtml;
	
	if(level < bugs.debug.level)
		return;
	
	if(showConsole)
		bugs.debug.showConsole(msg);
	
	if(showHtml)
		bugs.debug.showHtml(msg, level);
};

bugs.debug.makeWindow = function(){
	if($(".debug, #debug").length > 0)
		return;
	
	
	var debugWindow = $(
			"<div id='debug'>" + 
			"</div>"
		);
	
	debugWindow.css({
		"position":"fixed",
		"z-index":"99999",
		"bottom": (bugs.useragent != null ? (bugs.useragent.isMobile() ? 30 : 100) : 100) + "px",
		"right":"0px",
		"width": (bugs.useragent != null ? (bugs.useragent.isMobile() ? 300 : 500) : 500) + "px",
		"height": (bugs.useragent != null ? (bugs.useragent.isMobile() ? 200 : 300) : 300) + "px",
		"background-color":"#ffffff",
		"border":"solid 1px #999999"
	});
	
	var debugWin = $(
			"<div id='debugWin'></div>"
		);
	debugWin.css({
		"width":"100%",
		"height":"90%",
		"float":"left",
		"background-color":"#ffeeee",
		"overflow":"auto",
		"overflow-y":"auto",
		"overflow-x":"hidden"
	});
	debugWindow.append(debugWin);
	
	var debugCmt = $(
			"<div id='debugCmd'>" +
			"<input style='float:left;width:80%;height:100%;font-size:14px;color:#000000;background-color:#ffffff'></input>" + 
			"<button style='float:right;width:15%;height:100%;font-size:14px;color:#000000;background-color:#cccccc'>실행</button>" + 
			"</div>"
		);
	
	debugCmt.css({
		"width":"100%",
		"height":"10%",
		"float":"left"
	});
	
	debugWindow.append(debugCmt);
	
	debugWindow.find("#debugCmd input").off("keydown").on("keydown", function(event){
		if(event.keyCode == 13){
			try{
				eval($(this).val());	
			}
			catch(e){
				bugs.debug.show(e);
			}
		}
	});
	
	debugWindow.find("#debugCmd button").off("click").on("click", function(){
		try{
			eval($(this).closest("#debugCmd").find("input").val());
		}
		catch(e){
			bugs.debug.show(e);
		}
	});
	
	$("body").append(debugWindow);
};

bugs.debug.showBuffer = function(){
	if(bugs.debug.buffer.length > 0){
		for(var idx in bugs.debug.buffer){
			showObj = bugs.debug.buffer[idx];
			bugs.debug.show(showObj.msg, showObj.level, showObj.showConsole, showObj.showHtml);
		}
	}
};

bugs.debug.monitor = function(level){
	bugs.debug.level = level || bugs.debug.level;
	bugs.debug.allowConsole = true;
	bugs.debug.allowHtml = true;
	
	bugs.debug.makeWindow();
};

$(document).ready(function(){
	//bugs.debug.showConsole("bugs debug ready -> bugs.debug.show(msg) ");
});
/*-----/js/bugs/bugs.debug.js / end -----*/

/*-----/js/bugs/bugs.location.js / start -----*/
var bugs = bugs||{};

bugs.location = bugs.location || {};

bugs.location.MAIN_CONTENT_TYPE = {
	TRACK :			{type:"TRACK",			mainClass:"pgTrack"},
	ALBUM :			{type:"ALBUM",			mainClass:"pgAlbum"},
	ARTIST :		{type:"ARTIST",			mainClass:"pgArtistHome"},
	MUSICPD_ALBUM :	{type:"MUSICPD_ALBUM",	mainClass:"pgMAlbum"},
	MUSICPD_INFO :	{type:"MUSICPD_INFO",	mainClass:"pgMPDHome"},
	SPECIAL :		{type:"SPECIAL",		mainClass:"pgSpecialDetail"},
	SNACK :			{type:"SNACK",			mainClass:"pgSnackMusic"},
	ETC : 			{type:"ETC",			mainClass:null}
}


bugs.location.urlPattern = [
	{
		type : "album",
		bugsApp : true,
		pattern : [
			/\/album\/([\d]+)/i
		]
	},
	{
		type : "track",
		bugsApp : true,
		pattern : [
			/\/track\/([\d]+)/i
		]
	},
	{
		type : "artist",
		bugsApp : true,
		pattern : [
			/\/artist\/([\d]+)/i
		]
	},
	{
		type : "musicvideo",
		bugsApp : true,
		pattern : [
			/\/mv\/([\d]+)/i
		]
	},
    {
        type : "special_detail",
        appNative : false,
        bugsApp : true,
        pattern : [
            /\/specialView\/(?:([^\/]+)\/){0,1}([\d\w]+)/,
            /\/special\/([\d]+)\/([\d\w]+)/,
            /\/(specialview){1}\/([\d\w]+)/,
            /\/(musicpost){1}\/([\d\w]+)/
        ],
        share:{
            url: "https://music.bugs.co.kr/specialview/$2"
        }
    },
    {
        type : "special_list",
        appNative : true,
        pattern : [
            /\/musicpost\/special(?:[^\/]*)cornerId=([\d\w]+)/
        ]
    },
    {
        type : "musicpost_home",
        appNative : true,
        pattern : [
            /\/special[\/]?$/,
            /\/special[\/]?\?[.]*/,
        ]
    },
	{
		type : "esalbum",
		bugsApp : true,
		pattern : [
			/\/musicpd\/albumview\/([\d]+)/i
		]
	},
    {
        type : "musicpd",
        bugsApp : true,
        pattern : [
            /\/musicpd\/([\d]+)/i,
            /\/musicpd\/pdlistdetail\/([\d]+)/i
        ]
    },
	{
		type : "snack",
		bugsApp : true,
		pattern : [
			/\/snack\/(?:m\/){0,1}([\d\w]{20})/i
		]
	},
	{
		type : "myalbum",
		bugsApp : true,
		pattern : [
			/\/share\/myalbum\/([\d]+)/i
		]
	},
	{
		type : "chart",
		bugsApp : false,
		pattern : [
			/\/chart(.*)/
		]
	},
	{
		type : "newest",
		bugsApp : false,
		pattern : [
			/\/newest(.*)/
		]
	},
	{
		type : "musicvideo_list",
		bugsApp : false,
		pattern : [
			/\/mv\/list(.*)/
		]
	},
	{
		type : "esalbum_list",
		bugsApp : false,
		pattern : [
			/\/musicpd([^\/]*)/
		]
	},
    {
        type : "musicpost_series",
        bugsApp : true,
        pattern : [
            /\/special\/series\/([^\/]*)/
        ]
    },
	{
		type : "special_list",
		bugsApp : false,
		pattern : [
			/\/special([^\/]*)/,
			/\/specialLounge([^\/]*)/
		]
	},
    {
        type : "musicpost_home",
        appNative : true,
        pattern : [
            /\/special[\/]?$/,
            /\/special[\/]?\?[.]*/,
        ]
    },
	{
		type : "musiccast_channel",
		bugsApp : true,
		pattern : [
			/\/radio\/musiccast\/channel\/([^\/]*)/
		]
	},
	{
		type : "musiccast_episode",
		bugsApp : true,
		pattern : [
			/\/radio\/musiccast\/episode\/([^\/]*)/
		]
	},
	{
		type : "home",
		bugsApp : true,
		pattern : [
			/bugs.co.kr$|\/m$|\/www$/i,
			/bugs.co.kr(?:[(^\?)].*){1}|\/m(?:[(^\?)].*){1}|\/www(?:[(^\?)].*){1}/i
		]
    },
    {
        type : "myfavoritemusic_month",
        bugsApp : true,
        pattern : [
            /\/myFavoriteMusic\/month\/([^\/]*)/
        ]
    },
    {
        type : "myfavoritemusic_year",
        bugsApp : true,
        pattern : [
            /\/myFavoriteMusic\/year\/([^\/]*)/
        ]
    }

];


bugs.location.getUrlInfo = function(url){
	parser = document.createElement('a');
	parser.href = url;
	rtn = {
		protocol : parser.protocol,
		hostname : parser.hostname,
		port : parser.port,
		pathname : parser.pathname,
		search : parser.search,
		hash : parser.hash,
		host : parser.host
	};
	return rtn;
};


bugs.location.removeProtocol = function(url){
	return url.replace(/(http:|https:)\/\//i, "\/\/");
};


bugs.location.getCleanUrl = function(url){
	nUrl = url.replace(/[&]*wl_ref=[^?&]*/i, "");
	if(nUrl.indexOf("?") == nUrl.length-1)
		nUrl = nUrl.replace("?", "");
	return nUrl;
};


bugs.location.addQSParams = function(url, params){
	for(var prop in params){
		value = params[prop];
		if(typeof(value) == "string")
			value = encodeURIComponent(value);
		
		url = bugs.location.setQSParam({
			url : url,
			name : prop,
			value : value,
			act : "add"
		});
	}
	
	return url;
};


bugs.location.setQSParam = function(params){
	url = params.url;
	name = params.name;
	value = params.value;
	act = params.act;
	
	propPtn = eval("/([&]?)" + name + "=([^;]*)/g");
	ptnRslt = propPtn.exec(url);
	
	if(act == "add"){
		if(ptnRslt){
			rplcPtn = eval("/" + ptnRslt[0] + "/g");
			rplcStr = ptnRslt[1] + name + "=" + value;
			url = url.replace(rplcPtn, rplcStr);
		}
		else{
			if(/\?/.test(url))
				url += "&";
			else
				url += "?";
			url += name + "=" + value;
		}
	}
	else if(act == "remove"){
		if(ptnRslt){
			rmvPtn = eval("/" + ptnRslt[0] + "/g");
			url = url.replace(ptnRslt[0], "");
		}
	}
	
	return url;
};

bugs.location.getPropsFromQS = function(url){
	url = url || location.href;
	urlInfo = bugs.location.getUrlInfo(url);
	
	if(urlInfo.search == null && urlInfo.search == "")
		return null;
	
	rtnProps = {};
	schArr = urlInfo.search.substr(1).split("&");
	for(var prop in schArr){
		prmArr = schArr[prop].split("=");
		prmN = prmArr[0];
		prmV = null;
		if(prmArr.length > 1)
			prmV = prmArr[1];
		
		rtnProps[prmN] = prmV;
	}

	return rtnProps;
};


bugs.location.getUrlPattern = function(url){

	if(url.charAt(url.length-1) == "/")
		url = url.substring(0, url.length-1);
	
	for(var idx in bugs.location.urlPattern){
		curPtn = bugs.location.urlPattern[idx];
		
		for(var idx in curPtn.pattern){
			testPtn = curPtn.pattern[idx];
			
			ptnRslt = testPtn.exec(url);
			if(ptnRslt){			
				curPtn.vars = [];
				for(var i=0; i<ptnRslt.length; i++){
					curPtn.vars[i] = ptnRslt[i];
				}
				
				return curPtn;
			}
		}
	}
	return null;
};


bugs.location.goWithUrlPattern = function(url, params){
	params = params || {};
	
	defaultParams = {
		goLast : true, //일치하는 패턴이 없을때, 그냥 url로 이동.
    isPjax : true  //pjax 여부
	};
	
	//기본값세팅
	for(var prop in defaultParams){
		if(typeof(params[prop]) == "undefined")
			params[prop] = defaultParams[prop];
	}
	
	urlPtn = bugs.location.getUrlPattern(url);
	if(urlPtn == null){
		if(params.goLast){
			url = {
				url : url
			};
			bugs.location.go(url);
		}
	}
	
	if(urlPtn.type == "track"){
		bugs.location.goTrack(urlPtn.vars[1], params);
	}
	else if(urlPtn.type == "album"){
		bugs.location.goAlbum(urlPtn.vars[1], params);
	}
	else if(urlPtn.type == "artist"){
		bugs.location.goArtist(urlPtn.vars[1], params);
	}
    else if(urlPtn.type == "special_detail"){
        bugs.location.goSpecial(urlPtn.vars[2], params);
    }
    else if(urlPtn.type == "special_list"){
        bugs.location.goSpecialList(urlPtn.vars[1], params);
    }
    else if(urlPtn.type == "musicpost_series"){
        bugs.location.goMusicpostSeries(urlPtn.vars[1], params);
    }
    else if(urlPtn.type == "musicpost_home"){
        bugs.location.goMusicpostHome(params);
    }
	else if(urlPtn.type == "esalbum"){
		bugs.location.goEsalbum(urlPtn.vars[1], params);
	}
    else if(urlPtn.type == "musicpd"){
        bugs.location.goMusicPd(urlPtn.vars[1], params);
    }
	else if(urlPtn.type == "snack"){
		bugs.location.goSnack(urlPtn.vars[1], params);
	}
	else if(urlPtn.type == "myalbum"){
		bugs.location.goMyalbum(urlPtn.vars[1], params);
	}
	else if(urlPtn.type == "musicvideo"){
		bugs.location.goMusicvideo(urlPtn.vars[1], params);
	}
	else if(urlPtn.type == "musiccast_channel"){
		bugs.location.goMusicCastChannel(urlPtn.vars[1], params);
	}
	else if(urlPtn.type == "musiccast_episode"){
		bugs.location.goMusicCastEpisode(urlPtn.vars[1], params);
	}
	else if(urlPtn.type == "home"){
		bugs.location.goHome(params);
    }
    else if(urlPtn.type == "myfavoritemusic_month"){
        bugs.location.goMusic4u(urlPtn.vars[1],params);
    }
    else if(urlPtn.type == "myfavoritemusic_year"){
        bugs.location.goMusic4uYear(urlPtn.vars[1],params);
    }else{
		url = {
			url : url
		};
		bugs.location.go(url);
	}
};


bugs.location.go = function(params){
	if(typeof(arguments[0]) != "object"){
		url = arguments[0];
		
		params = {};
		params.url = url;
	}
	
	params.mUrl = params.mUrl || params.url || null;
	params.navi = params.navi || true;
	params.schemeAt = params.schemeAt || "app";

	if(params.schemeAt == "app"){
		if(bugs.app.isBugsApp()){
			if(params.scheme){
				params.scheme();
				return;
			}
		}
	}
	else if(params.schemeAt == "enable"){
		if(bugs.app.isBugsAppEnable()){
			if(params.scheme){
				params.scheme();
				return;
			}
		}
	}
	
	var openw = false;
	var url = null;
	
	if(bugs.mobile.isMobile()){
		url = params.mUrl || null;
		openw = params.mOpen || false;
	}
	else{
		url = params.url || null;
		openw = params.open || false;
	}
	
	if(bugs.app.isBugsApp()){
		if(bugs.useragent.isIos())
			bugs.app.runWebView(url, params.navi);
		else{
			naviLoc = url;
			if(params.navi)
				naviLoc = bugs.location.addQSParams(url, {navi:"yes"});
			location.href = naviLoc;	
		}
		return;
	}
	
	if(!url)
		return;
	
	if(openw)
		open(url);
	else{
		if(bugs.mobile.isMobile() && $.pjax && params.isPjax){
			$.pjax({url:url, container:"#pjax_container", fragment:"#pjax_container"});
		}
		else{
			location.href = url;	
		}
	}
};


bugs.location.goTrack = function(trackId, params){
	goParam = {
		url : g_urlMusic + "/track/" + trackId,
		mUrl : g_urlM + "/track/" + trackId,
		scheme : function(){
			bugs.app.runTrackInfo(trackId);
		}
	};
	bugs.object.copyProps(goParam, params);
	bugs.location.go(goParam);
};


bugs.location.goAlbum = function(albumId, params){
	goParam = {
		url : g_urlMusic + "/album/" + albumId,
		mUrl : g_urlM + "/album/" + albumId,
		scheme : function(){
			bugs.app.runAlbum(albumId, false, false);
		}
	};
	bugs.object.copyProps(goParam, params);
	bugs.location.go(goParam);
};


bugs.location.goArtist = function(artistId, params){
	goParam = {
			url : g_urlMusic + "/artist/" + artistId,
			mUrl : g_urlM + "/artist/" + artistId,
			scheme : function(){
				bugs.app.runArtist(artistId, false);
			}
		};
	bugs.object.copyProps(goParam, params);
	bugs.location.go(goParam);
};


bugs.location.goSpecial = function(specialKey, params){
	goParam = {
			url : g_urlMusic + "/musicpost/" + specialKey,
			mUrl : g_urlM + "/musicpost/" + specialKey,
			scheme : function(){
				bugs.app.runWebView(goParam.mUrl, true);
			}
		};
	bugs.object.copyProps(goParam, params);	
	bugs.location.go(goParam);
};


bugs.location.goSpecialList = function(cornerKey, params){
    goParam = {
        url : g_urlMusic + "/musicpost/special?cornerId=" + cornerKey,
        mUrl : g_urlM + "/musicpost/special?cornerId=" + cornerKey,
        scheme : function(){
            bugs.app.runSpecialList(cornerKey);
        }
    };
    bugs.object.copyProps(goParam, params);
    bugs.location.go(goParam);
};


bugs.location.goMusicpostHome = function(params){
    goParam = {
        url : g_urlMusic + "/special",
        mUrl : g_urlM + "/special",
        scheme : function(){
            bugs.app.runSpecialHome();
        }
    };
    bugs.object.copyProps(goParam, params);
    bugs.location.go(goParam);
};


bugs.location.goMusicpostSeries = function(series_id, params){
    goParam = {
        url : g_urlM + "/special/series/" + series_id,
        mUrl : g_urlM + "/special/series/" + series_id
    };

    if(bugs.useragent.isBugs5()){
        goParam.scheme = function(){
            bugs.app.runMusicpostSeries(series_id);
        }
    }

    bugs.object.copyProps(goParam, params);
    bugs.location.go(goParam);
};


bugs.location.goEsalbum = function(esAlbumId, params){
	goParam = {
			url : g_urlMusic + "/musicpd/albumview/" + esAlbumId,
			mUrl : g_urlM + "/musicpd/albumview/" + esAlbumId,
			scheme : function(){
				bugs.app.runEsalbum(esAlbumId, false);
			}
		};
	bugs.object.copyProps(goParam, params);	
	bugs.location.go(goParam);
};


bugs.location.goMusicPd = function(musicPdId, params){
    goParam = {
        url : g_urlMusic + "/musicpd/pdlistdetail/" + musicPdId,
        mUrl : g_urlM + "/musicpd/pdlistdetail/" + musicPdId,
        scheme : function(){
            bugs.app.runMusicPd(musicPdId);
        }
    };
    bugs.object.copyProps(goParam, params);
    bugs.location.go(goParam);
};


bugs.location.goMusicvideo = function(mvId, params){
	goParam = {
			url : g_urlMusic + "/mv/" + mvId,
			mUrl : g_urlM + "/mv/" + mvId,
			scheme : function(){
				bugs.app.runMusicVideo(mvId);
			}
		};
	bugs.object.copyProps(goParam, params);	
	bugs.location.go(goParam);
};


bugs.location.goHome = function(params){
	goParam = {
			url : g_urlMusic,
			mUrl : g_urlM,
			scheme : function(){
				bugs.app.runHome();
			}
		};
	bugs.object.copyProps(goParam, params);	
	bugs.location.go(goParam);
};


bugs.location.goSnack = function(id, params){
	goParam = {
			url : g_urlMusic + "/snack/" + id,
			mUrl : g_urlMusic + "/snack/m/" + id,
			scheme : function(){
				bugs.app.runWebView(this.mUrl, true);
			}
		};
	bugs.object.copyProps(goParam, params);	
	bugs.location.go(goParam);
};


bugs.location.goMyalbum = function(id, params){
	goParam = {
			mUrl : g_urlM + "/nextbugs/share/myalbum/" + id,
			scheme : function(){
				bugs.app.runWebView(goParam.mUrl, true);
			}
		};
	bugs.object.copyProps(goParam, params);	
	bugs.location.go(goParam);
};


bugs.location.goMusicCastChannel = function(musiccast_channel_id, params){
	goParam = {
			url : g_urlMusic + "/radio/musiccast/channel/" + musiccast_channel_id,
			mUrl : g_urlM + "/radio/musiccast/channel/" + musiccast_channel_id,
			scheme : function(){
				bugs.app.runMusicCastChannel(musiccast_channel_id);
			}
		};
	bugs.object.copyProps(goParam, params);	
	bugs.location.go(goParam);
};


bugs.location.goMusicCastEpisode = function(musiccast_episode_id, params){
	goParam = {
			url : g_urlMusic + "/radio/musiccast/episode/" + musiccast_episode_id,
			mUrl : g_urlM + "/radio/musiccast/episode/" + musiccast_episode_id,
			scheme : function(){
				bugs.app.runMusicCastEpisode(musiccast_episode_id);
			}
		};
	bugs.object.copyProps(goParam, params);	
	bugs.location.go(goParam);
};

bugs.location.goMusic4u = function(securityKey, params){
    goParam = {
        url : g_urlMusic + "/myFavoriteMusic/month/" + securityKey,
        mUrl : g_urlM + "/myFavoriteMusic/month/" + securityKey,
        scheme : function(){
            bugs.app.runMusic4u(securityKey);
        }
    };
    bugs.object.copyProps(goParam, params);
    bugs.location.go(goParam);
};

bugs.location.goMusic4uYear = function(securityKey, params){
    goParam = {
        url : g_urlMusic + "/myFavoriteMusic/year/" + securityKey,
        mUrl : g_urlM + "/myFavoriteMusic/year/" + securityKey,
        scheme : function(){
            bugs.app.runMusic4uYear(securityKey);
        }
    };
    bugs.object.copyProps(goParam, params);
    bugs.location.go(goParam);
};



bugs.location.getMainContentType = function(){
	mainContent = $("article");
	for(var prop in bugs.location.MAIN_CONTENT_TYPE){
		c_cont = bugs.location.MAIN_CONTENT_TYPE[prop];
		if(mainContent.hasClass(c_cont.mainClass)){
			return bugs.location.MAIN_CONTENT_TYPE[prop];
		}
			
	}
	return bugs.location.MAIN_CONTENT_TYPE.ETC;
}


bugs.location.goUrl = function(url){
    var upttn = bugs.location.getUrlPattern(url);
    try{
        if(upttn){
            params = {
                open : true,
                mOpen : true
            }
            bugs.location.goWithUrlPattern(url, params);
        }
        else{
            if(bugs.useragent.isBugs()){
                bugs.app.runBrowser(url);
            }
            else{
                window.open(url);
            }
        }

    }catch(e){
        if(console){
            console.log(e);
        }

        window.open(url);
    }
}


bugs.location.urlToGo = function(str){
    return str.replace(/[\s]{1}(https?:\/\/[\S]{5,})[\s]{1}/g, " <a href='javascript:;' onclick='bugs.location.urlToGo_goFunc(\"$1\")'>$1</a> ");
}

bugs.location.urlToGo_goFunc = function(url){
    return bugs.location.goUrl(url)
}


bugs.location.setHtmlUrlToGo = function(selector){
	$(selector).each(function(index){
		$(this).html(bugs.location.urlToGo($(this).html()));
	});
}


bugs.location.getCorrectUrl = function(url){
	try{
		if(url.indexOf("http") != 0)
			url = "http:" + url;
		return url;
	}
	catch(e){
		return url;
	}
}

/*-----/js/bugs/bugs.location.js / end -----*/

/*-----/js/bugs/bugs.object.js / start -----*/
var bugs = bugs||{};

bugs.object = bugs.object || {};


bugs.object.copyProps = function(target, source, overwrite){
	if(target == null)
		target = new Object();
	
	if(!source)
		return target;
	
	for(var prop in source){
		if(overwrite || typeof(target[prop]) == "undefined"){
			target[prop] = source[prop];
		}
	}
	
	return target;
};

bugs.object.clone = function(obj){
	if(!obj)
		return obj;
	
	var co = {};
	
	for(var prop in obj){
		co[prop] = obj[prop];
	}
	
	return co;
};


bugs.object.copy = function(params){
	if(!params["source"]){
		source = arguments[0] || null;
		target = arguments[1] || null;
		overwrite = arguments[2] || false;
		
		params = {
			source : source,
			target : target,
			overwrite : overwrite
		};
	}
	
	tgt = bugs.object.clone(params.target);

	if(!tgt)
		tgt = new Object();
	
	if(!params.source)
		return tgt;
	
	for(var prop in params.source){
		if(params.overwrite || typeof(tgt[prop]) == "undefined"){
			tgt[prop] = params.source[prop];
		}
	}
	
	return tgt;
}
/*-----/js/bugs/bugs.object.js / end -----*/

/*-----/js/bugs/bugs.utils.js / start -----*/

var bugs = bugs||{};

bugs.utils = bugs.utils || {};


bugs.utils.fitImgSizeToShort = function(target, size){
    $(target).css({'max-width': 'none', 'max-height': 'none'});

    var width =  $(target)[0].naturalWidth;
    var height =  $(target)[0].naturalHeight;
    var ratio = 0;
    if(width < height){
        ratio = size / width;
        $(target).css({'width': size + 'px'});
        $(target).css({'margin-top': - ((height * ratio - size) / 2) });
    } else {
        ratio = size / height;
        $(target).css({'height': size + 'px'});
        $(target).css({'margin-left': - ((width * ratio - size) / 2) });
    }
};

bugs.utils.Waiter = function(checkFunc, onReadyFunc, intervalTime){
	this.checkFunc = checkFunc;
	this.onReadyFunc = onReadyFunc;
	this.intervalTime = intervalTime || 100;
};

bugs.utils.Waiter.prototype = {
	wait : function(){
		if(this.checkFunc()){
			console.debug(this);
			if(this.onReadyFunc)
				this.onReadyFunc();
			
			delete this;
		}
		else{
			this.again();
		}
	},
	again : function(){
		this.tid = setTimeout(this.wait.bind(this), this.intervalTime);
	},
	stop : function(){
		clearTimeout(this.tid);
	}
};

bugs.utils.wait = function(checkFunc, onReadyFunc, intervalTime){
	var waiter = new bugs.utils.Waiter(checkFunc, onReadyFunc, intervalTime);
	waiter.wait();
	
	return waiter;
};


bugs.utils.getJsonp = function(url, data, param){
	data.decorator = "jsonp";
	var ajaxParam = {
		data : data,
		dataType : "jsonp",
		jsonp : "callback"
	};
	ajaxParam = bugs.utils.addObjectProp(ajaxParam, param, true);
	return $.ajax(url, ajaxParam);
};

bugs.utils.addObjectProp = function(target, add, overwrite){
	if(typeof(overwrite) == "undefined")
		
	overwrite = overwrite || true;
	for(var prop in add){
		if(overwrite || (typeof(target[prop]) == "undefined") ){
			target[prop] = add[prop];
		}
	}
	return target;
};

bugs.utils.htmlDecode = function(str){
	var e = document.createElement('div');
	e.innerHTML = str;
	return e.childNodes[0].nodeValue;	
};

bugs.utils.getIEVersion = function() {
	var sAgent = window.navigator.userAgent;
	var Idx = sAgent.indexOf("MSIE");

	// If IE, return version number.
	if (Idx > 0) 
		return parseInt(sAgent.substring(Idx+ 5, sAgent.indexOf(".", Idx)));

	// If IE 11 then look for Updated user agent string.
	else if (!!navigator.userAgent.match(/Trident\/7\./))
		return 11;

	else
		return 0; //It is not IE
};

bugs.utils.getTridentVersion = function(){
	var agent = navigator.userAgent.toLowerCase();

	if(agent.indexOf("trident/7")!=-1){
		return 11;
	}else if(agent.indexOf("trident/6")!=-1){
		return 10;
	}else if(agent.indexOf("trident/5")!=-1){
		return 9;
	}else if(agent.indexOf("trident/4")!=-1){
		return 8;
	}else{
		return 0;
	}	
};

bugs.utils.isIECompatibleMode = function(){
	ieVer = bugs.utils.getIEVersion();
	triVer = bugs.utils.getTridentVersion();
	
	bugs.utils._debugShow("ieVer:" + ieVer + " triVer:" + triVer);
	
	if(ieVer > 0 && triVer > 0 && ieVer != triVer){
		return true;
	}
	
	return false;
};

bugs.utils.getCurrency = function(num) {
	if(isNaN(num)){
		try{
			num = Number(num);
		}
		catch(e){
			return num;
		}
	}
	
    return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
};

bugs.utils._debugShow = function(msg, level){
	try{
		msg = "[bugs.utils.js]<br>" + msg;
		bugs.debug.show(msg, level);
	}
	catch(e){}
};

bugs.utils.btnTopClick = function(duration){
	duration = duration || 0;
	if(duration == 0){
		$('body,html').scrollTop(0);
	}else{
		$('body,html').animate({scrollTop: 0}, duration);
	}
	
};

bugs.utils.intToString = function(number, isComma){
	isComma = isComma || false;
	if(isComma){
		return number.toString().replace(/(\d)(?=(?:\d{3})+(?!\d))/g, '$1,');
	}else{
		return number.toString();
	}
};

bugs.utils.time = {

	// 문자열 포맷의 시간을 원하는 포맷으로 변환 (시분초, 분초 표기 모두 처리 가능 e.g. 1:52:35 or 112:35)
	formatStandard : function(strTime, eh, nh)  {

		if(strTime == undefined || strTime == "")
			return 0;
		
		var timeArr = strTime.split(":");
		
		if(timeArr.length > 3)
			return -2;
		
		for(var i = 0; i < timeArr.length; i++) {
			if(isNaN(parseInt(timeArr[i]))) {
				return -1;
			}
		}
	
		var timeSec = 0, count = 0;
		for(var i = timeArr.length - 1; i >= 0 ; i--) {
			if(count == 0) {	// 초단위
				timeSec += parseInt(timeArr[i]);
			} else if(count == 1) {	// 분단위
				timeSec += parseInt(timeArr[i]) * 60;
			} else if(count == 2) {
				timeSec += parseInt(timeArr[i]) * 60 * 60;
			}
			count++;
		}
		
		return this.timeFormat(timeSec, (eh == undefined ? false : eh), (eh == undefined ? true: eh));
	},
	
	// 시간 정보(초)를 받아서 원하는 포맷으로 변환
	timeFormat : function(t, excludeHour, noHourOption) {
		// excludeHour : 시간 단위 제외 여부 (true이면 시간 값도 분단위에 합산하여 표기, false이면 시간 단위도 표기)
		// noHour : 시간 단위 표시 방식 (true이면 시간 값이 0이면 시간 단위 미표기, false 이면 시간 값 없어도 00 표기)
		var h = parseInt(t / 3600, 10);
		var m;
		if(!excludeHour)	m = parseInt((t % 3600) / 60, 10);
		else					m = parseInt(t / 60, 10);		
		var s = (t % 3600) % 60;
		
		var str = "";
		if(!excludeHour) {
			str = ((h >= 10) ? h : ((h > 0) ? h : (noHourOption != true ? "00" : "")));
//			str = ((h >= 10) ? h : ((h > 0) ? "0" + h : (noHourOption != true ? "00" : "")));

			if(str != "")
				str += ":"; 
		}
 
		str += ((m >= 10) ? m : "0" + m) + ":";
		str += (s >= 10) ? s : "0" + s;
		
		try{
			return str;
		}finally{
			h = null; m = null; s = null; str = null;
		}
	}
};
 
bugs.utils.highlight = {
	markup : function(keyword, list, ignoreClassArr){
		var listLength = list.length;
		var regKeyword  = keyword.replace(/(\(|\)|\[|\]|\\)/g, function (strMatch, p1){
			if(p1 == "("){
	    		return "\\(";
	    	}else if(p1 == ")"){
	    		return "\\)";
	    	}else if(p1 == "["){
	    		return "\\[";
	    	}else if(p1 == "]"){
	    		return "\\]";
	    	}else if(p1 == "\\"){
	    		
	    		return "";
	    	}
	    	return "";
	    });
	    
		var reg = new RegExp(regKeyword,"gi");
	    
	    var ignoreStr = null;
	    if($.isArray(ignoreClassArr) && ignoreClassArr.length > 0){
	    	ignoreStr = ignoreClassArr.join(" ");
	    }
		for(var i=0;i < listLength;i++){
			var classStr = list.eq(i).attr("class");
			if(ignoreStr && classStr){
				var classReg = new RegExp(list.eq(i).attr("class").split(" ").join("|"),"g");
				if(!classReg.test(ignoreStr)){
					this.setMarkupTextNode(list.eq(i)[0], reg);
				}
			}else{
				this.setMarkupTextNode(list.eq(i)[0], reg);
			}
		}
	},
	
	setMarkupTextNode : function (node,reg) {
		var $node = $(node)
		var tempElement = "";
		if($node.children().length > 0){
			tempElement = $node.children();
			$node.children().remove();
		}
		if(reg.test($node.text())){
			$node.html( $node.text().replace(reg, "<mark>$&</mark>") ).prepend(tempElement);
		}else{
			$node.prepend(tempElement);
		}
	}
		
};
/*-----/js/bugs/bugs.utils.js / end -----*/

/*-----/js/bugs/bugs.useragent.js / start -----*/

var bugs = bugs||{};

bugs.useragent = {};

bugs.useragent.getIosInfo = function(){
	iosAgentPttn = /(iPad|iPhone).*OS ([\d_]+)/ig;
	ptnRslt = iosAgentPttn.exec(navigator.userAgent);
	
	if(ptnRslt){
		result = {
			device : ptnRslt[1],
			version : ptnRslt[2].replace(/_/ig, "."),
			majorVersion : parseInt(ptnRslt[2].split("_")[0])
		};
		return result;
	}
	else{
		return null;
	}
};

bugs.useragent.getAndroidInfo = function(){
	androidAgentPttn = /Android ([^;]+)/ig;
	ptnRslt = androidAgentPttn.exec(navigator.userAgent);
	
	if(ptnRslt){
		result = {
			version : ptnRslt[1],
			majorVersion : parseInt(ptnRslt[1].split(".")[0])
		};
		return result;
	}
	else{
		return null;
	}	
};

bugs.useragent.getIEInfo = function(){
	iePttn1 = /msie ([^;]+)/i;
	iePttn2 = /trident\/([^;]+)/i;
	
	ptnRslt1 = iePttn1.exec(navigator.userAgent);
	ptnRslt2 = iePttn2.exec(navigator.userAgent);
	
	if(ptnRslt1){
		result = {
			version : ptnRslt1[1],
			majorVersion : parseInt(ptnRslt1[1].split(".")[0])
		};
		return result;
	}
	else if(ptnRslt2){
		if(ptnRslt2[1].substr(0,1) == "7"){
			result = {
				version : "11",
				majorVersion : 11
			};
			return result;	
		}
	}
	else{
		return null;
	}
};

bugs.useragent.getEdgeInfo = function(){
	edgePttn = /edge\/([\d.]+)/i;
	ptnRslt = edgePttn.exec(navigator.userAgent);
	
	if(ptnRslt){
		result = {
			version : ptnRslt[1],
			majorVersion : parseInt(ptnRslt[1].split(".")[0])
		};
		return result;
	}
	else{
		return null;
	}	
};

bugs.useragent.getBugsAppInfo = function(){
	bugsAppPttn = /Mobile\|Bugs\|([^\|]+)\|([^\|]+)\|([^\|]+)\|([^\|]+)\|/i;
	regRtn = bugsAppPttn.exec(navigator.userAgent);
	
	if(regRtn){
		bugsAppInfo = {
			appName : "Bugs",
			version : regRtn[1],
			platformName : regRtn[2],
			platformVer : regRtn[3],
			deviceName : regRtn[4]
		};
		
		return bugsAppInfo;
	}
	
	return null;
};

bugs.useragent.getPttnRsltFromUA = function(pttn){
	ptnRslt = pttn.exec(navigator.userAgent);
	
	if(ptnRslt)
		return ptnRslt;
	else
		return null;
};

bugs.useragent.isGreatEqualThan = function(thisVer, minVer){
	if(!minVer)
		return true;
	
	thisVerArr = thisVer.split(".");
	minVerArr = minVer.split(".");
	mLen = Math.max(thisVerArr.length, minVerArr.length);
	
	for(var i=0; i<mLen; i++){
		if(i >= thisVerArr.length)
			thisVerArr.push("0");
		if(i >= minVerArr.length)
			minVerArr.push("0");

		ctv = thisVerArr[i];
		cmv = minVerArr[i];
		
		if(!isNaN(ctv) && !isNaN(cmv)){
			if(parseInt(ctv) != parseInt(cmv))
				return parseInt(ctv) > parseInt(cmv);
		}
		else{
			if(ctv != cmv)
				return ctv > cmv;
		}
	}
	
	return true;
};

bugs.useragent.isIos = function(minVer){
	info = bugs.useragent.getIosInfo();
	if(info != null){
		return bugs.useragent.isGreatEqualThan(info.version, minVer);
	}
	else{
		bi = bugs.useragent.getBugsAppInfo();
		if(bi != null){
			if(bi.platformName.toUpperCase() == "IOS"){
				return bugs.useragent.isGreatEqualThan(bi.platformVer, minVer);
			}
		}
	}
	return false;
};

bugs.useragent.isAndroid = function(minVer){
	info = bugs.useragent.getAndroidInfo();
	if(info != null){
		return bugs.useragent.isGreatEqualThan(info.version, minVer);
	}
	else{
		bi = bugs.useragent.getBugsAppInfo();
		if(bi != null){
			if(bi.platformName.toUpperCase() == "ANDROID"){
				return bugs.useragent.isGreatEqualThan(bi.platformVer, minVer);
			}
		}
	}
	return false;
};

bugs.useragent.isIE = function(minVer){
	info = bugs.useragent.getIEInfo();
	if(info == null)
		return false;
	
	return bugs.useragent.isGreatEqualThan(info.version, minVer);
};

bugs.useragent.isEdge = function(minVer){
	info = bugs.useragent.getEdgeInfo();
	if(info == null)
		return false;
	
	return bugs.useragent.isGreatEqualThan(info.version, minVer);
};

bugs.useragent.isBugs = function(minVer){
	info = bugs.useragent.getBugsAppInfo();
	if(info == null)
		return false;
	
	return bugs.useragent.isGreatEqualThan(info.version, minVer);
};

bugs.useragent.isBugs5 = function(minVer){
    var info = bugs.useragent.getBugsAppInfo();
    if(info == null)
        return false;

    if(bugs.useragent.isIos()){
        if(info.version == "5.0.0.19" || info.version == "5.0.0.50")
        	return false;
	}

    return bugs.useragent.isGreatEqualThan(info.version, "5");
};

bugs.useragent.isIphone = function(){
	return /iphone/ig.test(navigator.userAgent);
};

bugs.useragent.isIpad = function(){
	return /ipad/ig.test(navigator.userAgent);
};

bugs.useragent.isTizen = function(){
	return /tizen/ig.test(navigator.userAgent);
};

bugs.useragent.isBugsPlayerUWP = function(){
    return /BUGSPLAYERUWP/ig.test(navigator.userAgent);
}

bugs.useragent.isMobile = function(){
	return /android|iphone|ipad|ipod|mobile/ig.test(navigator.userAgent);
};

bugs.useragent.setBugsAppBodyClass = function(){
	if(!bugs.useragent.isBugs())
		return;
	
	appClass = "";
	
	if(bugs.useragent.isAndroid()){
		appClass = "androidApp";
	}
	else if(bugs.useragent.isIos()){
		if(bugs.useragent.isBugs("4.3.3")){
			appClass = "iphoneApp433";
		}
		else if(!bugs.useragent.isBugs("4.3.3")){
			appClass = "iphoneApp";
		}
	}
	
	$("body").removeClass(appClass).addClass(appClass);
};
/*-----/js/bugs/bugs.useragent.js / end -----*/

/*-----/js/bugs/bugs.member.js / start -----*/

var bugs = bugs||{};

bugs.member = bugs.member || {};

bugs.member._ajax = function(params){
	var ajaxParam = {
		data : {}
	};
	
	for(var prop in params){
		ajaxParam[prop] = params[prop];
		if(/string|number/ig.test(typeof(params[prop]))){
			ajaxParam.data[prop] = params[prop];	
		}
	}
	
	$.ajax(ajaxParam);
};

bugs.member.getLoginUser = function(params){
	bugs.data.getLoginUserInfo(params);
};

bugs.member.login = function(params){
	params = params || {};
	
	if(bugs.app.isBugsApp()){
		bugs.app.runLogin(true, params.rUrl || location.href);
	}
	else if(bugs.useragent.isMobile()){
		rUrl = params.rUrl || location.href;
		if(rUrl.indexOf("?") >= 0 )
			rUrl += "&";
		else
			rUrl += "?";
		rUrl += "ismobile=Y";
		
		location.href = "http://m.bugs.co.kr/login?rUrl="+encodeURIComponent(rUrl);
	}
	else{
		if(params.popup){
			bugs.ui.showLoginPopup();	
		}
		else{
			bugs.ui.showLoginLayer(params);
		}
	}	
};

bugs.member.logout = function(params){
	params = params || {};
	rUrl = encodeURIComponent( params.rUrl || location.href );
	
	location.href="https://secure.bugs.co.kr/member/login/logout?rUrl="+rUrl;
};


bugs.member.checkAdult = function(params){
	
	msg_check = "19세 미만 청소년 이용불가 컨텐츠입니다."
		+ "\n벅스 앱 또는 PC웹에서 성인 인증 후 이용해 주세요.";
	
	msg_login = "19세 미만 청소년 이용불가 컨텐츠입니다."
		+ "\n성인 인증을 위해 먼저 로그인 해 주세요.";
	
	if(bugs.useragent.isBugs())
		return true;
	
	result = false; 
	
	adultCheckVal = params.adultCheckVal;
	if(adultCheckVal){
		if(adultCheckVal == 1){
			result = true;
		}
		else if(adultCheckVal == 2){
			bugs.ui.adult.limit();
		}
		else if(adultCheckVal == 3){
			if(bugs.useragent.isMobile()){
				if(bugs.useragent.isBugs()){
					msg_check = "19세 미만 청소년 이용불가 컨텐츠입니다."
						+ "\n성인 인증 후 이용해 주세요.";	
					alert(msg_check);
					return true;
				}
				else{
					alert(msg_check);
				}
			}
			else{
				if(!bugs.useragent.isBugs())
					bugs.ui.adult.notice();	
			}
		}
		else{
			//if(!confirm(msg_login))
				//return;
			
			loginParams = params.loginParams || {};
			bugs.member.login(loginParams);
		}
	}
	else{
		result = false;
	}
	
	return result;
};


bugs.member.comicoJoin = function(params){
	params = params || {};
	url = g_urlAjax + "/pay/comico/ajax/join";
	
	$.get(url, 
		{}, 
		function(data) {
			if(params.success)
				params.success(data);
		});
};


bugs.member.paycoLogin = function(params){
	params = params || {};
	referer  = params.referer || encodeURIComponent(document.referrer);
	width = params.width || 630;
	height = params.height || 560;
	popupName = params.popupName || "paycoLoginPopup";
	returnUri = encodeURIComponent( params.returnUri || location.href );
	
	window.open(g_urlSecure + "/member/payco/login?returnUri=" +returnUri +"&referer="+referer, popupName,"width=" + width + ", height=" + height);
};


bugs.member.adultOnlyAlert = function(params){
	params = params || {};

	bugs.ui.adult.notice();
};


bugs.member.noPayAlert = function(params){
	params = params || {};
	
	alert("듣기 이용권이 없으므로 1분 미리듣기만 할 수 있습니다.");
}


bugs.member.loginAlert = function(params){
	params = params || {};
	
	alert("로그인 후 이용해 주세요.");
}
/*-----/js/bugs/bugs.member.js / end -----*/

/*-----/js/bugs/bugs.html.js / start -----*/

var bugs = bugs||{};

bugs.html = bugs.html || {};


bugs.html.setSelectNumber = function(selector){
	selector = selector || "select[setnum]";
	$(selector).each(function(index){
		obj = $(this);
		
		val = obj.attr("val") || "-1";
		val = parseInt(val);
		
		setnum = obj.attr("setnum");
		startNum = parseInt(setnum.split(",")[0]);
		endNum = parseInt(setnum.split(",")[1]);
		
		addNum = 1;
		if(startNum > endNum)
			addNum = -1;
		
		sel = "";
		currNum = startNum;
		
		nowEnd = false;
		
		while(!nowEnd){
			if(val == currNum)
				sel = "selected";
			else
				sel = "";
				
			obj.append("<option value='" + currNum + "' " + sel + ">" + currNum + "</option>");
			
			currNum = currNum + addNum;
			
			if(addNum > 0)
				nowEnd = currNum > endNum;
			else
				nowEnd = currNum < endNum;
		}
	});	
};


bugs.html.setSelectVal = function(selector){
	selector = selector || "select[val]";
	$(selector).each(function(index){
		obj = $(this);
		
		val = obj.attr("val") || "";
		
		obj.val(val);
	});	
};


bugs.html.setRadioValue = function(name, value){
	$("input[name="+ name +"]").removeAttr("checked");
	$("input[name="+ name +"][value="+ value +"]").attr("checked", true);
};


bugs.html.selectText = function(id){
	if($("#" + id).is(":input")){ //input, textarea
		$("#" + id).select();
		try{
			document.getElementById(id).setSelectionRange(0, 9999);
		}
		catch(e){}
	}
	else{ //div, span, ..etc
		text = document.getElementById(id);
		
	    if (document.body.createTextRange) { //msie
	        range = document.body.createTextRange();
	        range.moveToElementText(text);
	        range.select();
	    }
	    else{
	    	selection = window.getSelection();
	    	
	    	if(selection.setBaseAndExtent){ //safari
	    		selection.setBaseAndExtent(text, 0, text, 1);
	    	}
	    	else{ //mozila, opera
	            range = document.createRange();
	            range.selectNodeContents(text);
	            selection.removeAllRanges();
	            selection.addRange(range);
	    	}
	    }		
	}
};


bugs.html.getFocusableElement = function(params){
	params = params || {};
	params.position = params.position || 0;
	
	focusableList = $(":focusable");
	targetPos = -1;
	for(var idx in focusableList){
		currEle = focusableList[idx];
		if($(currEle)[0] == $(params.target)[0]){
			targetPos = idx;
			break;
		}
	}
	
	if(targetPos == -1)
		return null;
	
	rtnPos = parseInt(targetPos)+params.position;
	
	return $(focusableList[rtnPos]);
}



bugs.html.scrollTo = function(params){
	var params = params || {};
	
	if(!params.target)
		return null;
	
	var defaultParams = {
			delay : 500,
			easing : 'easeOutCubic'
	};
	
	bugs.object.copy(defaultParams, params);
	
	var body = $("body, html");
	var top = $(params.target).offset().top + (params.offset||0);
	var maxTop = $(document).height() - $(window).height();
	
	top = Math.min(top, maxTop);
	
	if(!bugs.useragent.isMobile() && $("#header").length > 0)
		top -= $("#header").outerHeight();
	
	top = Math.max(0, top);
	
	body.animate(
			{scrollTop : top},
			params.delay,
			params.easing,
			function(){
				if(params.complete)
					params.complete();
			}
		);
}


bugs.html.copyClipboard = function(params){
	if(!params.str){
		_p = {
			str : arguments[0],
			success : arguments[1] || null,
			error : arguments[2] || null
		};
		params = _p;
	}
	try{
		var rid = "rid_" + (new Date()).getTime();
        var hInput = $("<input id='" + rid + "' style='position:absolute; top:-50px;'>");

        if(bugs.useragent.isIos()){
            var tempInput = document.createElement('Input');
            tempInput.value = params.str;
            document.body.appendChild(tempInput);

            tempInput.setSelectionRange(0, 9999);

            document.execCommand("Copy");
            document.body.removeChild(tempInput);

            window.scrollTo(0, event.screenY);
        } else {
            hInput.val(params.str);
            hInput.appendTo("body");
            hInput.select();

            document.execCommand("Copy");

            hInput.remove();
		}

		if(params.success){
            params.success();
		}
	}
	catch(e){
		if(params.fail)
			params.fail(e);
	}
}


bugs.html.copyClipboard2 = function(copyText){
  var uagent = navigator.userAgent.toLocaleLowerCase();

  if(bugs.app.isBugsApp4()) {
    bugs.app.runClipboard(copyText, '쿠폰번호가 복사되었습니다.')

  }else if(uagent.search("chrome") > -1 || uagent.search("safari") > -1){ // 크롬, 사파리
    var t = document.createElement("textarea");
    document.body.appendChild(t);
    t.value = copyText;

    if(bugs.useragent.isIos()){
      t.contentEditable = true;
      t.readOnly = true;

      var range = document.createRange();
      range.selectNodeContents(t);

      var selection = window.getSelection();
      selection.removeAllRanges();
      selection.addRange(range);
      t.setSelectionRange(0, 999999);
    }else{
      t.select();
    }

    document.execCommand('copy');
    document.body.removeChild(t);
    alert("쿠폰번호가 복사되었습니다.");

  }else{// IE
    window.clipboardData.setData('Text', copyText);
    alert("쿠폰번호가 복사되었습니다.");
  }
}
/*-----/js/bugs/bugs.html.js / end -----*/

/*-----/js/bugs/bugs.image.js / start -----*/

var bugs = bugs||{};

bugs.image = bugs.image || {};

bugs.image.getColor = function(params){
	var defaultParams = {
			method : "most",
			startX : 0,
			startY : 0,
			endX : 0,
			endY : 0,
			decorator : "blank"
	};
	
	params.imageUrl = decodeURIComponent(params.imageUrl||"");
	params.imageUrl = bugs.location.getCorrectUrl(params.imageUrl);
	
	callback = params.callback || "";
	delete params.callback;
	
	for(var prop in defaultParams){
		if(typeof(params[prop]) == "undefined")
			params[prop] = defaultParams[prop];
	}
	
	$.ajax({
		url : g_urlAjax + "/utils/image/getColor",
		data : params,
		dataType : 'jsonp',
		jsonp : "callback",
		success : function(data){
			bugs.image._debugShow("getColor - result:" + data.result + ", color:" + data.color);
			try{
				callback(data);
			}
			catch(e){}
		}
	});
};


bugs.image.getImgData = function(src){
	sid = "_tempImgData";
	
	selArea = "#" + sid;
	selImg = selArea + " #img";
	selCnv = selArea + " #cnv";
	
	$(selArea).remove();
	
	imgData = $("<div id='" + sid + "'></div>")
		.css({
			"position" : "absolute",
			"width" : "1px",
			"height" : "1px",
			"overflow" : "hidden",
			"visibility" : "hidden"
		});
	$("<img id='img' crossOrigin='Anonymous' />")
		.attr("src", src)
		.on("load", function(event){
			$(selCnv).width($(this).width());
			$(selCnv).height($(this).height());
			//bugs.image._debugShow($(this).width() + "/" + $(this).height());
			ctx = $(selCnv)[0].getContext("2d");
			ctx.drawImage($(selImg)[0], 0, 0);
			imgData = ctx.getImageData(0, 0, $(selCnv).width(), $(selCnv).height());
		})
		.appendTo(imgData);
	$("<canvas id='cnv'/>")
		.appendTo(imgData);
		
	imgData.appendTo("body");
	
};

bugs.image.getUrl = function(){
	rtnUrl = g_urlClipimg;
	arg = null;
	for(var idx in arguments){
		arg = arguments[idx];
		
		rtnUrl += "/";
		
		if(idx > 0 && idx < arguments.length-1){
			if(typeof(arg) == "number" || !isNaN(arg)){
				rtnUrl += (Math.floor(arg / 100) + "/" + arg);
			}
			else{
				var add = 5;
				var argStr = arg + "";
				for(var ln=0; ln<argStr.length; ln=ln+add){
					rtnUrl += 
						argStr.substring(ln, Math.min(ln+add, argStr.length))
						+ "/";
				}
				rtnUrl = rtnUrl.substring(0, rtnUrl.length-1);
			}
		}
		else{
			rtnUrl += (arg + "");
		}
		
	}
	rtnUrl += ".jpg";
	
	return rtnUrl;
};



bugs.image.getPreloader = function(params){
	params = params || {};
	defaultParam = {
		tag : "div",
		width : 42,
		height : 42
	};
	
	for(var prop in defaultParam){
		if(typeof(params[prop]) == "undefined")
			params[prop] = defaultParam[prop];
	}
	
	preloader =  
		$("<" + params.tag + ">")
			.css(params)
			.addClass("bugs-preloader")
			.addClass("bugs-preloader-white");
	
	if(params.addClass)
		preloader.addClass(params.addClass);
	
	return preloader;
};


bugs.image._debugShow = function(msg, level){
	try{
		msg = "[bugs.image.js]<br>" + msg;
		bugs.debug.show(msg, level);
	}
	catch(e){}
};

/*-----/js/bugs/bugs.image.js / end -----*/

/*-----/js/bugs/bugs.wiselog.js / start -----*/
var bugs = bugs || {};

bugs.wiselog = bugs.wiselog || {};

bugs.wiselog.area = function(param){
	url = (g_urlAjax + "/dummy").replace(/http:|https:/g, "");
	$.get(url,
		{wl_ref : param},
		function(data){
			try{
				bugs.debug.show("wiselog:" + data.querystring, 2);
			}
			catch(e){}
		},
		"json");
};



bugs.wiselog.defaultAreaList = [
	{sel:"header .header .logo",		event:"click",	val:"headerLogo"}, 
	{sel:"header .top .openPlayer",		event:"click",	val:"headerPlayer",	delay:1000}
];

bugs.wiselog.setWiseArea = function(wiseAreaList){
	var areaList = wiseAreaList || bugs.wiselog.defaultAreaList;
	
	var noExists = [];
	
	for(var idx in areaList){
		curArea = areaList[idx];
		curSelHead = curArea.sel.split(" ")[0];
		
		if(noExists.join().indexOf(curSelHead) >= 0){
			//console.log(curSelHead + " : 스킵");
			continue;
		}
		
		if($(curSelHead).length == 0){
			noExists.push(curSelHead);
			//console.log(curSelHead + " : 없음");
			continue;
		}
		
		_setWiseArea(curArea);
	}
	
	function _setWiseArea(area){
		var cArea = area;
		cArea.delay = cArea.delay || 0; 
		setTimeout(function(){
			try{
				$(cArea.sel)
					.data("wiseArea", cArea)
					.off(cArea.event, bugs.wiselog.setWiseEvent)
					.on(cArea.event, bugs.wiselog.setWiseEvent);	
			}
			catch(e){}
		}, cArea.delay);
	}
};

bugs.wiselog.setWiseEvent = function(e){
	wiseArea = $(e.currentTarget).data("wiseArea");
	bugs.wiselog.log(wiseArea.val);
	bugs.wiselog.area(wiseArea.val);
};

bugs.wiselog.log = function(msg){
	try{
		bugs.debug.show(msg);
		//console.log(msg);
	}
	catch(e){}
}
/*-----/js/bugs/bugs.wiselog.js / end -----*/

/*-----/js/bugs/bugs.userReaction.js / start -----*/
var bugs = bugs || {};

bugs.userReaction = bugs.userReaction || {};

bugs.userReaction.TARGET_TYPE = {
	COMMENT : 			"COMMENT", 			//한마디
	COMMENT_REPLY : 	"COMMENT_REPLY" 	//한마디 댓글
};

bugs.userReaction.REACTION_TYPE = {
	GOOD : 	"GOOD",		//공감
	BAD : 	"BAD"		//비공감
};

bugs.userReaction.RESULT = {
	OK : 			"OK",			//입력성공
	READY :			"READY",		//입력할수있음
	NEED_LOGIN :	"NEED_LOGIN",	//로그인필요함
	ALREADY :		"ALREADY",		//이미했음
    NOTVIP :		"NOTVIP",		//vip가 아님
	UNKNOWN :		"UNKNOWN"		//알수없는오류
};

bugs.userReaction._ajax = function(params){
	delete params.data;
	
	var ajaxParam = {
		data : {}
	};
	
	for(var prop in params){
		ajaxParam[prop] = params[prop];
		if(/string|number|boolean/ig.test(typeof(params[prop]))){
			ajaxParam.data[prop] = params[prop];	
		}
	}
	
	params.url = params.url.replace(/http:|https:/i, "");
	
	$.ajax(ajaxParam);
};



bugs.userReaction.check = function(params){
	params.url = g_urlAjax + "/userReaction/ajax/check"; 
	bugs.userReaction._ajax(params);
};


bugs.userReaction.set = function(params){
	params.url = g_urlAjax + "/userReaction/ajax/set"; 
	bugs.userReaction._ajax(params);
}
/*-----/js/bugs/bugs.userReaction.js / end -----*/

/*-----/js/bugs/bugs.userReport.js / start -----*/
var bugs = bugs || {};

bugs.userReport = bugs.userReport || {};

bugs.userReport.TARGET_TYPE = {
	COMMENT : 			"COMMENT", 			//한마디
	COMMENT_REPLY : 	"COMMENT_REPLY", 	//한마디 댓글
	BSIDE_FEED : 		"BSIDE_FEED", 		//bside feed
	TRACK : 			"TRACK", 			//트랙
	MV : 				"MV" 				//뮤직비디오
};

bugs.userReport.TARGET_TYPE_DISPNAME = {
	COMMENT : 			"한마디",
	COMMENT_REPLY : 	"답글",
	BSIDE_FEED : 		"소식",
	TRACK : 			"곡",
	MV : 				"영상"
};

bugs.userReport.REPORT_CATEGORY = {
	SLANG : 	"SLANG",		//특정인 비방/욕설
	PORNO : 	"PORNO",		//음란성 게시물
	AD : 		"AD",			//광고 / 홍보 게시물
	TOOMANY : 	"TOOMANY",		//게시물 도배
	COPYWRITE : "COPYRIGHT",	//저작권 위반
	ILLEGAL_FILM : "ILLEGAL_FILM",	//불법촬영물
	ETC : 		"ETC"			//기타
};

bugs.userReport.RESULT = {
	OK : 			"OK",			//입력성공
	READY :			"READY",		//입력할수있음
	NEED_LOGIN :	"NEED_LOGIN",	//로그인필요함
	ALREADY :		"ALREADY",		//이미했음
	NOTVIP:			"NOTVIP",
	UNKNOWN :		"UNKNOWN"		//알수없는오류
};

bugs.userReport._ajax = function(params){
	delete params.data;
	var ajaxParam = {
		data : {}
	};
	
	for(var prop in params){
		if(typeof(params[prop]) != "undefined"){
			ajaxParam[prop] = params[prop];
			if(/string|number|boolean/ig.test(typeof(params[prop]))){
				ajaxParam.data[prop] = params[prop];	
			}
		}
	}
	
	params.url = params.url.replace(/http:|https:/i, "");
	
	$.ajax(ajaxParam);
};



bugs.userReport.check = function(params){
	params.url = g_urlAjax + "/userReport/ajax/check"; 
	bugs.userReport._ajax(params);
};


bugs.userReport.set = function(params){
	params.url = g_urlAjax + "/userReport/ajax/set"; 
	bugs.userReport._ajax(params);
}


bugs.userReport.showLayer = function(param){
	var name, comment;
	if(param.parent){
		name = $.trim(param.parent.find("[name=name]:eq(0)").text());
		comment = $.trim(param.parent.find("[name=comment]:eq(0)").text());
	}
	
	bugs.userReport.hideLayer(param);
	
	layerParams = {
		name : param.layername,
		caller : param.caller,
		complete : function(layer){
			if(name && comment){
				layer.find("[name=name]").html(name);
				layer.find("[name=comment]").html(comment);	
			}
			layer.data("param", param);
			
			//확인버튼
			layer.find("[name=submit]").click(function(){
			
				if($("input[name=reportReason]:checked").length == 0){
					msg = "신고 사유를 선택해 주세요.";
					alert(msg);
					return;
				}
			
				param = $(this).closest(".layer").data("param");
				param.report_category = $("input[name=reportReason]:checked").val();
				
				param.success = function(data){
					param.data = data;
					bugs.userReport.commonResultUI(param);
				}
				bugs.userReport.set(param);
				
			});
		}
	};
	
	bugs.layer.showLayer(layerParams);
}

bugs.userReport.hideLayer = function(param){
	layername = param.layername;
	bugs.layer.hideLayer(layername, true);
}

bugs.userReport.commonResultUI = function(param){
	dispname = bugs.userReport.TARGET_TYPE_DISPNAME[param.target_type];
	
	if(bugs.userReport.RESULT.READY == param.data.code){
		bugs.userReport.showLayer(param);
	}
	else if(bugs.userReport.RESULT.NEED_LOGIN == param.data.code){
		msg = "로그인 후 이용해 주세요.";
		alert(msg);
	}
    else if(bugs.userReport.RESULT.NOTVIP == param.data.code){
        msg = "벅스VIP라운지 회원만 가능합니다.";
        alert(msg);
    }
	else if(bugs.userReport.RESULT.ALREADY == param.data.code){
		msg = "이미 신고한 " + dispname + "입니다.";
		alert(msg);
	}
	else if(bugs.userReport.RESULT.OK == param.data.code){
		msg = "신고되었습니다.";
		alert(msg);
		bugs.userReport.hideLayer(param);
	}
	else{
		msg = "오류발생(" + param.data.code + ")\n잠시 후 다시 이용해 주세요.";
		alert(msg);
	}
}

bugs.userReport.commonCheckUI = function(params){
	params.layername = "userReport_common";
	params.success = function(data){
		params.data = data;
		bugs.userReport.commonResultUI(params);
	}
	bugs.userReport.check(params);
}


bugs.userReport.clickCommonReportBtn = function(params){
	
	if(arguments.length == 3){
		newParams = {};
		newParams.caller = arguments[0];
		newParams.content_type = arguments[1];
		newParams.target_id = arguments[2];
		params = newParams;
	}
	else{
		params = params || {};
	}
	
	switch(params.content_type.toUpperCase()){
		case "TRACK"		:	params.target_type = bugs.userReport.TARGET_TYPE.TRACK; 		break;
		case "MV" 			:	params.target_type = bugs.userReport.TARGET_TYPE.MV; 			break; 
		case "BSIDE_FEED" 	:	params.target_type = bugs.userReport.TARGET_TYPE.BSIDE_FEED; 	break; 
	}
	
	bugs.userReport.commonCheckUI(params);
};

/*-----/js/bugs/bugs.userReport.js / end -----*/

/*-----/js/bugs/bugs.bside.js / start -----*/

var bugs = bugs||{};

bugs.bside = bugs.bside || {};

bugs.bside.FeedWriteLayerName = "bside_feed_write";

bugs.bside.FeedAddActionsLayerName = "bside_feed_addActions";

bugs.bside.showFeedAddActionsLayer = function(obj, bsideFeedId, isBsideArtist, feedType){
	
	if(bsideFeedId <= 0){
		return false;
	}
	isBsideArtist = isBsideArtist || false;
	
	bugs.bside.hideFeedAddActionsLayer();
	
	var layerParams = {
			name : bugs.bside.FeedAddActionsLayerName,
			complete : function($layerAddActions){
				
				$layerAddActions.css("top", $(obj).offset().top + $(obj).height() + 5);
				$layerAddActions.css("left", $(obj).offset().left + $(obj).width() - $layerAddActions.width() + 9);
				
				if(isBsideArtist){
					if(feedType == "STORY" || feedType == "STORYIMAGE"){
						$layerAddActions.find('a[name=modify]').attr('onclick', 'bugs.bside.showFeedWriteLayer('+bsideFeedId+');');
					}else{
						$layerAddActions.find('a[name=modify]').closest('li').hide();
					}
					$layerAddActions.find('a[name=delete]').attr('onclick', 'bugs.bside.deleteFeed('+bsideFeedId+');');
					$layerAddActions.find('a[name=userReport]').closest('li').hide();
				}else{
					$layerAddActions.find('a[name=userReport]').attr('onclick', 'bugs.userReport.clickCommonReportBtn(this, \'BSIDE_FEED\', '+bsideFeedId+');');
					$layerAddActions.find('a[name=modify]').closest('li').hide();
					$layerAddActions.find('a[name=delete]').closest('li').hide();
				}
				
				$layerAddActions.show();
				
				$(document).off('click');
				$(document).on('click', function(event){
					if(!$(event.target).is('button[name=bsideFeedActionsButton]')){
						bugs.bside.hideFeedAddActionsLayer();
					}
				});
			}
		};
	
	bugs.layer.showLayer(layerParams);
}

bugs.bside.hideFeedAddActionsLayer = function(){
	bugs.layer.hideLayer(bugs.bside.FeedAddActionsLayerName, true);
}

bugs.bside.showFeedWriteLayer = function(bsideFeedId){
	
	var isModify = false;
	
	bsideFeedId = bsideFeedId || 0;
	if(bsideFeedId > 0){
		isModify = true;
	}
	
	var layerParams = {
		name : bugs.bside.FeedWriteLayerName,
		complete : function($layerBsideWrite){
			
			bugs.scroll.setScrollBar($layerBsideWrite.find(".innerScroll"));
			
			var $myform = $layerBsideWrite.find("#myform");
			
			var loadingLayer = null;
			
			$('#fileupload').fileupload({
				dataType: 'json',
				singleFileUploads: false,
				add: function(e, data){
					
					var extensions = ["jpg", "jpeg", "png", "gif"];
					
					var totalFileSize = 0;
					var isValidExtension = false;
					
					$(data.files).each(function(){
						var extension = this.name.substring(this.name.lastIndexOf(".") + 1);
						isValidExtension = false;
						extensions.forEach(function(element){
							if(extension.toLowerCase() == element){
								isValidExtension = true;
							}
						})
						if(!isValidExtension){
							return false;
						}
						totalFileSize += this.size;
					});
				
					if(!isValidExtension){
						alert("지원하지 않는 이미지 형식입니다. jpg, png, gif, jpeg 파일을 선택해 주세요.");
						return null;
					}
					
					if(totalFileSize > (100*1024*1024)){ //100MB check
						alert("한 번에 100MB를 초과하는 사진을 첨부할 수 없습니다.");
						return null;
					}
					
					
					//이미지 업로드 로딩바 show
					loadingLayer = new bugs.ui.loadingLayer("이미지를 올리는 중입니다.", null, true); //로딩레이어 생성
					loadingLayer.show({top : $layerBsideWrite.offset().top + 210, left : $layerBsideWrite.offset().left + 110});
					
					data.submit();
				},
				done: function(e, data){
//					console.log(data);
					data.result.forEach(function(element, index, array){
						if(element.resultCode == "EXCEED_FILE_SIZE"){
							alert("한 번에 100MB를 초과하는 사진을 첨부할 수 없습니다.\n파일명 : " + element.filename);
						}else if(element.resultCode == "INVALID_EXTENSION"){
							alert("지원하지 않는 이미지 형식입니다. jpg, png, gif, jpeg 파일을 선택해 주세요.\n파일명 : " + element.filename);
						}else{
							$layerBsideWrite.find("ul[name=uploadImages]").append(bugs.bside.getFeedImageHtml(bugs.bside.getThumnailImagePath(element.path), element.path, element.size, 0));
						}
					});
					bugs.bside.cheakFeedContents($layerBsideWrite);
					bugs.bside.changeFeedImage($layerBsideWrite);
				},
				always: function(e, data){
					//이미지 업로드 로딩바 hide
					if(loadingLayer != null){
						loadingLayer.remove();
					}
				}
			});
			
			//사진 올리기 버튼 클릭 
			$layerBsideWrite.find("button[name=upload]").on('click', function(){

				var ieModeCheck = bugs.browser.getInternetExplorerVersion();
				if(ieModeCheck < 0 || ieModeCheck >= 10){
					$('#fileupload').click();
				}else{
					alert('사진 올리기는 Internet Explorer 10 이상에서만 이용하실 수 있습니다.\n브라우저를 업그레이드 하시거나, Chrome 브라우저를 이용해 주세요.');
					return false;
				}
				
			});
			
			//확인 버튼 클릭 
			$layerBsideWrite.find("button[name=submit]").on('click', function(){
//				console.log("submitFeed");
				if(isModify){
					bugs.bside.submitFeed($layerBsideWrite, bsideFeedId);
				}else{
					bugs.bside.submitFeed($layerBsideWrite);
				}
			});
			
			//placeholder
			$layerBsideWrite.find("textarea[name=content]").on('focus', function(){
				$layerBsideWrite.find("p.placeholder").hide();
			});
			$layerBsideWrite.find("textarea[name=content]").on('blur', function(){
				var content = $(this).val();
				if(content.length <= 0){
					$layerBsideWrite.find("p.placeholder").show();
				}
			});
			//2000자 
			$layerBsideWrite.find("textarea[name=content]").on('keyup ', function(){
				var content = $(this).val();
				if(content.length > 2000){
					alert("소식은 2,000자까지 쓸 수 있습니다.");
					$(this).val(content.substring(0, 2000));
				}
			});
			
			//수정일때, 기존 피드 데이터 가져오기
			if(isModify){
				$.ajax({
					url : g_urlAjax + "/bside/ajax/feed/get",
					type : "post",
					data : {bsideFeedId : bsideFeedId},
					success : function(data){
						if(data.result){
							$layerBsideWrite.find("textarea[name=content]").val(data.bsideFeed.content);
							if(data.bsideFeed.bsideFeedImageList != null){
								data.bsideFeed.bsideFeedImageList.forEach(function(element){
//									console.log(element);
									$layerBsideWrite.find("ul[name=uploadImages]").append(bugs.bside.getFeedImageHtml(bugs.bside.getThumnailImagePath(element.image_path), element.image_path, element.image_size, element.bside_feed_image_id));
								});
								//이미지 noti 체크 
								bugs.bside.changeFeedImage($layerBsideWrite);
							}
							
						}
						$layerBsideWrite.find("p.placeholder").hide();
					}
				});
			}
			
		}
	};
	
	bugs.layer.showLayer(layerParams);
}

bugs.bside.hideFeedWriteLayer = function(){
	bugs.layer.hideLayer(bugs.bside.FeedWriteLayerName, true);
}

bugs.bside.getThumnailImagePath = function(path, width, height) {
	width = width || 200;
	height = height || 200;
	return "http://image.bugsm.co.kr/thumb/fitin/"+ width +"x"+ height +"/bs/bside" + path;
}

bugs.bside.getFeedImageHtml = function(src, path, size, feedImageId){
	return '<li><span><img src="' + src + '" path="' + path + '" size="' + size + '" feedImageId="' + feedImageId + '" /></span><button type="button" onclick="bugs.bside.deleteFeedImage(this);bugs.wiselog.area(\'bside_write_01_03\');">삭제</button></li>';
}

bugs.bside.deleteFeedImage = function(deleteButton){
	var $layerBsideWrite = $(deleteButton).closest('aside.layerBsideWrite');
	$(deleteButton).closest('li').hide();
	bugs.bside.changeFeedImage($layerBsideWrite);
}

bugs.bside.changeFeedImage = function($layerBsideWrite){
	
	$layerBsideWrite.find("div.innerScroll").show();
	var imageLength = $layerBsideWrite.find("ul[name=uploadImages]").find("li:visible").size();
	if(imageLength == 0){
		var htmlNoti = '<p class="noti">글과 함께 사진을 첨부할 수 있습니다.</p>';
		if($layerBsideWrite.find("p.noti").length == 0){
			$layerBsideWrite.find("div.uploadset").prepend(htmlNoti);
		}
		$layerBsideWrite.find("textarea[name=content]").css("height", "366px");
		$layerBsideWrite.find("div.innerScroll").hide();
		
	}else if(0 < imageLength && imageLength <= 7){	//한줄 
		$layerBsideWrite.find("textarea[name=content]").css("height", "342px");
		$layerBsideWrite.find("div.jspContainer").css("height", "70px");
		$layerBsideWrite.find("p.noti").remove();
		
	}else if(7 < imageLength && imageLength <= 14){	//두줄 
		$layerBsideWrite.find("textarea[name=content]").css("height", "282px");
		$layerBsideWrite.find("div.jspContainer").css("height", "130px");
		$layerBsideWrite.find("p.noti").remove();
		
	}else{											//세줄
		$layerBsideWrite.find("textarea[name=content]").css("height", "222px");
		$layerBsideWrite.find("div.jspContainer").css("height", "190px");
		$layerBsideWrite.find("p.noti").remove();
		
	}
}

bugs.bside.cheakFeedContents = function($layerBsideWrite){
	
	if($layerBsideWrite.find("ul[name=uploadImages]").find("li:visible").size() > 30){
		alert("하나의 소식에는 최대 30장의 사진을 첨부할 수 있습니다.");
		return false;
	}
	
	return true;
}

bugs.bside.deleteFeed = function(bsideFeedId){
	
	if(bsideFeedId <= 0){
		return false;
	}
	
	bugs.confirm('한 번 삭제된 글은 복원할 수 없습니다.<br/>정말 삭제하시겠습니까?', function() {
		$.ajax({
			url : g_urlAjax + "/bside/ajax/feed/delete",
			type : "post",
			data : {bsideFeedId : bsideFeedId},
			success : function(data){
//				console.log(data);
				if(data.result){
					bugs.bside.hideFeedAddActionsLayer();
					location.reload();
				}else{
					if(data.code == "NOT_LOGGED"){
						alert("로그인 후 다시 시도해주시기 바랍니다.");
					}else if(data.code == "NO_BSIDE_ARTIST"){
						alert("해당 Bside 아티스트가 아닙니다.");
					}else{
						alert("잠시 후 다시 시도해주시기 바랍니다.");
					}
				}
			},
			error : function(){
				alert("잠시 후 다시 시도해주시기 바랍니다.");
			}
		});
	});
}

bugs.bside.userReportFeed = function(obj, bsideFeedId){
	param = {
		target_type : bugs.userReport.TARGET_TYPE.BSIDE_FEED,
		target_id : bsideFeedId,
		caller : obj
	};
	bugs.userReport.commonCheckUI(param);
}
	
bugs.bside.submitFeed = function($layerBsideWrite, bsideFeedId){
	
	if(!bugs.bside.cheakFeedContents($layerBsideWrite)){
		return null;
	}
	
	//parameter setting
	bsideFeedId = bsideFeedId || 0;
	
	var content = $layerBsideWrite.find("textarea[name=content]").val();
	
	var feedType = "STORY";
	if($layerBsideWrite.find("ul[name=uploadImages]").find("li:visible").length > 0){ //이미지가 있을 때 
		feedType = "STORYIMAGE";
	}
	
	var imageInfos = "";
	$layerBsideWrite.find("ul[name=uploadImages]").find("li").each(function(){
		var image_del_yn = $(this).find("img").is(":visible") ? "N" : "Y";
		if(imageInfos != ""){
			imageInfos += ",";
		}
		imageInfos += $(this).find("img").attr("path") + "&&" + $(this).find("img").attr("size") + "&&" + $(this).find("img").attr("feedImageId") + "&&" + image_del_yn;
	});
	
	if(bugs.valid.empty(content) && feedType == "STORY"){
		alert("내용을 입력해 주세요.");
		return null;
	}
	
	params = {
			bside_feed_id : bsideFeedId,
			feed_type : feedType,
			content : content,
			status : "OK",
			imageInfos : imageInfos
		};
	//parameter setting end
	
//	console.log(params);
	
	$.ajax({
		url : g_urlAjax + "/bside/ajax/feed/post",
		type : "post",
		data : params,
		success : function(data){
//			console.log(data);
			if(data.result){
				bugs.bside.hideFeedWriteLayer();
				location.href = g_urlMusic + "/artist/" + data.artistId + "/bsidefeed";
			}else{
				if(data.code == "NOT_LOGGED"){
					alert("로그인 후 다시 시도해주시기 바랍니다.");
				}else if(data.code == "NO_BSIDE_ARTIST"){
					alert("해당 Bside 아티스트가 아닙니다.");
				}else{
					alert("잠시 후 다시 시도해주시기 바랍니다.");
				}
			}
		},
		error : function(){
			alert("잠시 후 다시 시도해주시기 바랍니다.");
		}
	});
}

bugs.bside.fitImageSize = function(obj, imgSrc, maxWidth, maxHeight) {
	
	if(obj.height >= maxHeight || obj.width >= maxWidth){
		$(obj).show();
		return;
	}
	var image = new Image();

	image.onload = function(){
	
		var width = image.width;
		var height = image.height;
		
		var scalex = maxWidth / width;
		var scaley = maxHeight / height;
		
		var scale = (scalex < scaley) ? scalex : scaley;
		
		$(obj).width(scale * width);
		$(obj).height(scale * height);
		
		$(obj).show();
	}
	image.src = imgSrc;
}

bugs.bside.thumnailImageChange = function(obj) {
	
	var $photoDiv = $(obj).closest('div.photo');
	var $thumbnailSpan = $photoDiv.find('span.thumbnail');
	var $thumbnailDiv = $photoDiv.find('div.thumbnail');
	var $PhotoMoreButton = $photoDiv.find('button.btnPhotoMore');
	
	$thumbnailSpan.each(function(){
		var $img = $(this).find('img');
		var $anchor = $(this).find('a');
		$img.attr('onload', 'return false;');
		$img.css("width", "auto");
		$img.css("height", "auto");
		$img.attr('src', $img.attr('bigImageSrc'));
		$(this).replaceWith('<div class="thumbnail">' + $(this).html() +'</div>');
	});
	
	$thumbnailDiv.each(function(){
		var $img = $(this).find('img');
		var $anchor = $(this).find('a');
		$anchor.attr('onclick', '');
		$anchor.attr('target', '_blank');
		$anchor.attr('href', $img.attr('originalImageSrc'));
	});
	
	$PhotoMoreButton.hide();
}

bugs.bside.showCommonHeaderBsideMenuLayer = function(button) {
	
	var $layerBsideMenu = $('aside.layerBsideMenu');
	
	$('.layer').hide();
	$layerBsideMenu.show();
	
	$(document).off("click", bugs.bside.hideWhenDocumentClick);
	setTimeout(function(){
		$(document).on("click", {button : button, $layer : $layerBsideMenu}, bugs.bside.hideWhenDocumentClick);
	}, 100)
	
}

bugs.bside.hideWhenDocumentClick = function(e) {
	if(!$.contains(e.data.button, e.target)){
		$(document).off("click", bugs.bside.hideWhenDocumentClick);
		e.data.$layer.hide();
	}
}
/*-----/js/bugs/bugs.bside.js / end -----*/

/*-----/js/bugs/bugs.comment.js / start -----*/
var bugs = bugs||{};

bugs.comment = bugs.comment || {};
bugs.comment.utils = {};

bugs.attach = bugs.attach||{};


bugs.comment.SECT = {
		COMMENT : 		"COMMENT",
		COMMENT_REPLY :	"COMMENT_REPLY"
};

bugs.comment.ACTION = {
		LIST : 		"LIST",
		CONFIRM : 	"CONFIRM",
		INSERT :	"INSERT",
		DELETE :	"DELETE"
}

bugs.comment.RESULT_CODE = {
		OK :		"OK",
		NO :		"NO"
}

bugs.comment.RESULT_MSG = {
		OK :						"OK",
		NOT_LOGIN :					"NOT_LOGIN",
		BLACKLIST :					"BLACKLIST",
		FORBIDDENWORD :				"FORBIDDENWORD",
		NOT_OWNER :					"NOT_OWNER",
		ONLYONE_COMMENT :			"ONLYONE_COMMENT",
		ONEDAY_LIMIT :				"ONEDAY_LIMIT",
		DENY_REPLY :				"DENY_REPLY",
		CONTENT_LENGTH :			"CONTENT_LENGTH",
		EVENT_AVAILABLE :			"EVENT_AVAILABLE",
		ONLY_MUSICLOUNGE_MEMBER : 	"ONLY_MUSICLOUNGE_MEMBER",
    	ONLY_MUSICLOUNGE_MONTHLY_MEMBER : 	"ONLY_MUSICLOUNGE_MONTHLY_MEMBER",
		ONLY_MUSICLOUNGE_SINGLE_MEMBER:	"ONLY_MUSICLOUNGE_SINGLE_MEMBER",
		ONLY_MUSICLOUNGE_LOGIN:		"ONLY_MUSICLOUNGE_LOGIN",
		SYSTEM_ERROR :				"SYSTEM_ERROR",
		CUSTOM : 					"CUSTOM"
};

bugs.comment.EVENTS = {
		FIRST_LOAD :	"COMMENT_FIRST_LOAD",
		RESPONSE :		"COMMENT_RESPONSE",
		SET_LISTENER : 	"SET_LISTENER"
}


bugs.comment.selector = {};
bugs.comment.selector.main = "[cmt_comment_group_id]";



bugs.comment.data_commonAjax_stts = "stop";
bugs.comment.data_commonAjax = function(params){
	if(bugs.comment.data_commonAjax_stts == "run")
		return;

	bugs.comment.data_commonAjax_stts = "run"

	params.method = "POST";
	//params.aysnc = false;
	params.success = function(data){
		bugs.comment.data_commonAjax_stts = "stop";

		bugs.comment.data_setResultData(data, params);
	}

	bugs.data._ajax(params);
}

bugs.comment.data_selectComment = function(params){
	params.url = g_urlAjax + "/comment/ajax/list";
	bugs.comment.data_commonAjax(params);
};

bugs.comment.data_confirmComment = function(params){
	params.url = g_urlAjax + "/comment/ajax/confirm";
	bugs.comment.data_commonAjax(params);
};

bugs.comment.data_actionComment = function(params){
	if(params.action == bugs.comment.ACTION.DELETE){
		msg = "삭제하시겠습니까?";
		if(params.sect == bugs.comment.SECT.COMMENT){
			msg = "한마디만 삭제되고 답글은 삭제되지 않습니다.\n삭제하시겠습니까?"
		}

		bugs.confirm(msg, function() {
			params.url = g_urlAjax + "/comment/ajax/action";
			bugs.comment.data_commonAjax(params);
		});
		return;
	}

	params.url = g_urlAjax + "/comment/ajax/action";
	bugs.comment.data_commonAjax(params);
};



bugs.comment.data_getCommentList = function(params){
	params.sect = bugs.comment.SECT.COMMENT;
	params.action = bugs.comment.ACTION.LIST;

	var cmtStatus = bugs.comment.getStatus(params.comment_group_id);
	var cmtGroupArea = cmtStatus.cmtGroupArea;

	for(var prop in params)
		cmtStatus[prop] = params[prop];

	bugs.comment.data_selectComment(cmtStatus)
}

bugs.comment.data_setResultData = function(data, status){
	status = status || {};

	for(var i=0; i<$(data)[0].attributes.length; i++){
		attr = $(data)[0].attributes[i];
		if(/string|number|boolean/i.test(typeof(attr.value))){
			status[attr.name] = bugs.string.getSuitableType(attr.value);
		}
	}
	status.html = $(data).html();

	//console.debug(status);

	bugs.comment.data_setCommentArea(status);

	bugs.comment.response_showStatusResponse(status);

	bugs.comment.setStatus(status);
}


bugs.comment.data_setCommentArea = function(params){

	
	if(params.action == bugs.comment.ACTION.CONFIRM)
		return;

	var cmtStatus = bugs.comment.getStatus(params.comment_group_id);
	cmtGroupArea = cmtStatus.cmtGroupArea;

	
	cmt_area_list = cmtGroupArea.find("[cmt_area=commentlist]");

	if(params.clear){
		cmt_area_list.empty();
	}

	listAct = null;
	if(params.result_code == bugs.comment.RESULT_CODE.OK || params.action == bugs.comment.ACTION.LIST){

		if(params.action == bugs.comment.ACTION.LIST){
			if(params.page >= cmtStatus.history_page_min)
				listAct = "append";
			else
				listAct = "prepend";
		}
		else if(params.sect == bugs.comment.SECT.COMMENT){
			if(params.action == bugs.comment.ACTION.INSERT)
				listAct = "prepend";
			else if(params.action == bugs.comment.ACTION.DELETE)
				listAct = "replace";
		}
		else if(params.sect == bugs.comment.SECT.COMMENT_REPLY){
			listAct = "replace";
		}
		else{
			listAct = null;
		}

		if(listAct == "append"){
			$(params.html)
				.hide()
				.appendTo(cmt_area_list)
				.fadeIn(1000);

			
			if(!(params.history_page_min == 1 && params.page == 1)){
				scroll_my_comment_id =
					$("<div>" + params.html + "</div>").find("[cmt_area=comment]:eq(0)").attr("my_comment_id");

				setTimeout(function(){
					try{
						bugs.scroll.moveScroll(cmtStatus.scrollArea, cmtStatus.scrollArea.find("[my_comment_id=" + scroll_my_comment_id + "]"));
					}catch(e){}
				}, 10);
			}
		}
		else if(listAct == "prepend"){

			newItem = $(params.html)
						.css("margin-top", -100)
						.animate(
								{"margin-top":0},
								{
									duration : 400,
									complete : function(){
										bugs.comment.listener_reinitScrollBar(cmtStatus);
										bugs.comment.arrangeLayout();

										
										if(bugs.comment._noticeTarget){
											if(bugs.comment._tid_delayScroll)
												clearTimeout(bugs.comment._tid_delayScroll);
											bugs.comment._tid_delayScroll = setTimeout(delayScroll, 100);

											function delayScroll(){
												
												var cmtScArea = bugs.comment._noticeTarget.closest("[cmt_scrollarea=jsp]");
												if(cmtScArea.length == 1){
													bugs.scroll.moveScroll(cmtScArea.find(".jspScrollable"), bugs.comment._noticeTarget);
												}
												else{
													pos = (bugs.comment._noticeTarget.offset() != null ? bugs.comment._noticeTarget.offset().top : 0);
													cHeight = $("#header").height();
													$(window).scrollTop(pos-cHeight - 20);
												}
											}
										}
									}
								}
							);

			if(cmt_area_list.find("[type=admin]").length > 0){
				newItem.insertAfter(cmt_area_list.find("[type=admin]:last"));
			}
			else{
				newItem.prependTo(cmt_area_list);
			}

			$("[cmt_area=emptyItem]").remove();

			//bugs.scroll.moveScroll(cmtStatus.scrollArea, 0);
		}
		else if(listAct == "replace"){
			repCmtArea = cmtGroupArea.find("[my_comment_id=" + params.my_comment_id + "]");
			repCmtArea.replaceWith(params.html);
		}

		
		bugs.comment._noticeTarget = null;
		if(cmtStatus.load_first){
			if(cmtStatus.direct_comment_reply_id > 0){
				bugs.comment._noticeTarget = cmtGroupArea.find("[cmt_area=reply][comment_reply_id=" + cmtStatus.direct_comment_reply_id + "]");
			}
			else if(cmtStatus.direct_my_comment_id > 0){
				bugs.comment._noticeTarget = cmtGroupArea.find("[cmt_area=comment][my_comment_id=" + cmtStatus.direct_my_comment_id + "]");
			}

			if(bugs.comment._noticeTarget != null){
				bugs.comment._noticeTarget.addClass("notificationFocus").animate({
					backgroundColor: '#ffffff'},
					4000,
					function() { bugs.comment._noticeTarget.removeClass("notificationFocus"); }
				);
			}

			var rtnStatus = bugs.handler.run(bugs.comment.EVENTS.FIRST_LOAD, params);
		}

		bugs.comment.arrangeLayout();
	}


	
	if(params.action == bugs.comment.ACTION.LIST){

		
		prevPageBtnArea = cmtGroupArea.find("[cmt_area=prevPageBtnArea]");
		nextPageBtnArea = cmtGroupArea.find("[cmt_area=nextPageBtnArea]")

		checkPrev = Math.min(cmtStatus.history_page_min||params.page, params.page);
		if(checkPrev > 1)
			prevPageBtnArea.show();
		else
			prevPageBtnArea.hide();

		checkNext = Math.max(cmtStatus.history_page_max||params.page, params.page);
		if(checkNext < params.last_page)
			nextPageBtnArea.show();
		else
			nextPageBtnArea.hide();


		
		cmtGroupArea.find("[cmt_sort_type_option]")
			.removeClass("selected")
			.each(function(){
				if($(this).attr("cmt_sort_type_option") == params.sort_type)
					$(this).addClass("selected");
			});
	}
	
	else if(params.action == bugs.comment.ACTION.INSERT){

		if(params.sect == bugs.comment.SECT.COMMENT){
			if(params.result_code == bugs.comment.RESULT_CODE.OK){

                bugs.comment.attach_remove();
                bugs.comment.imageattach_remove();

                cmtStatus.commentContentEditArea.val("");
				cmtStatus.commentContentEditArea.keyup();
			}
		}
	}
	
	else if(params.action == bugs.comment.ACTION.DELETE){

	}

	
	$("[cmt_disp_comment_count=" + params.comment_group_id + "], [cmt_disp_comment_count=onlyone]")
		.text(bugs.utils.addCommas(params.total_count));

	
	if( params.comment_count == 0 ){
		//cmtGroupArea.find("[cmt_area=commentListScroll]").hide();
		cmt_area_list.html("<li cmt_area='emptyItem'><p class='none'>등록된 한마디가 없습니다. 첫 번째 한마디를 남겨주세요!</p></li>");
		bugs.comment.listener_reinitScrollBar({comment_group_id:params.comment_group_id});
		bugs.comment.arrangeLayout();
	}
	else{
		cmtGroupArea.find("[cmt_area=commentListScroll]").show();
		bugs.comment.listener_reinitScrollBar({comment_group_id:params.comment_group_id});
	}

	bugs.comment.listener_set(params);
}


bugs.comment.data_getCommentListByDirection = function(params){
	cmtStatus = bugs.comment.getStatus(params.comment_group_id);
	nextAddPage = 0;
	if(params.addPage > 0)
		nextAddPage = cmtStatus.history_page_max + 1;
	else
		nextAddPage = cmtStatus.history_page_min - 1;

	if(nextAddPage > cmtStatus.last_page || nextAddPage < 1)
		return;

	params.page = nextAddPage;
	bugs.comment.data_getCommentList(params);
}


bugs.comment.data_getCommentListBySortType = function(params){
	params.clear = true;
	params.page = 1;
	bugs.comment.data_getCommentList(params);
}

bugs.comment.arrangeLayout = function(){
	try{
		bugs.navigator._arrangeLayout(true);
	}
	catch(e){}
}






bugs.comment.response_showStatusResponse = function(status){

	cmtStatus = bugs.comment.getStatus(status.comment_group_id);
	cmtGroupArea = cmtStatus.cmtGroupArea;
	code = status.result_code;
	msg = status.result_msg;

	
	if(code == bugs.comment.RESULT_CODE.NO){
		if(msg == bugs.comment.RESULT_MSG.NOT_LOGIN){
            cmtStatus.commentContentEditArea.blur();
            msg = "로그인 후 이용해 주세요.";
            if(confirm(msg)){
                bugs.member.login();
            }
		}
		else if(msg == bugs.comment.RESULT_MSG.BLACKLIST){
			alert("운영 정책에 의해 글쓰기 이용이 정지된 ID 입니다.\n해제 요청을 하려면 1:1 문의를 이용해 주세요.");
		}
		else if(msg == bugs.comment.RESULT_MSG.FORBIDDENWORD){
			alert("입력 내용에 금칙어가 포함되어 있습니다.\n금칙어(" + status.forbidden_word + ") 삭제 후 다시 등록해 주세요.");
		}
		else if(msg == bugs.comment.RESULT_MSG.NOT_OWNER){
			alert("작성자 본인에게만 허용되는 기능입니다.");
		}
		else if(msg == bugs.comment.RESULT_MSG.ONLYONE_COMMENT){
			alert("이 게시물은 한마디를 1개만 작성할 수 있습니다.");
		}
		else if(msg == bugs.comment.RESULT_MSG.ONEDAY_LIMIT){
			type = "";
			ondayLimit = 0;
			if(status.sect == bugs.comment.SECT.COMMENT){
				type = "한마디는";
				ondayLimit = cmtStatus.limit_oneday_comment;
			}
			else{
				type = "댓글은";
				ondayLimit = cmtStatus.limit_oneday_reply;
			}
			alert("이 게시물의 " + type + " 하루 " + ondayLimit + "개까지 작성할 수 있습니다.");
		}
		else if(msg == bugs.comment.RESULT_MSG.DENY_REPLY){
			alert("이 게시물은 댓글을 입력할 수 없습니다.");
		}
		else if(msg == bugs.comment.RESULT_MSG.CONTENT_LENGTH){
			type = "";
			contentMinLength = 0;
			contentMaxLength = 0;
			if(status.sect == bugs.comment.SECT.COMMENT){
				type = "한마디";
				contentMinLength = cmtStatus.limit_comment_content_min_length;
				contentMaxLength = cmtStatus.limit_comment_content_max_length;
			}
			else{
				type = "댓글";
				contentMinLength = cmtStatus.limit_reply_content_min_length;
				contentMaxLength = cmtStatus.limit_reply_content_max_length;
			}
			alert("한글, 영문 관계없이 최소 " + contentMinLength + "자, 최대 " + contentMaxLength + "자까지 작성할 수 있습니다.");
		}
		else if(msg == bugs.comment.RESULT_MSG.SYSTEM_ERROR){
			alert("시스템오류");
		}
		else{
			bugs.handler.run(bugs.comment.EVENTS.RESPONSE, status);
		}
	}
	
	else{
		if(msg == bugs.comment.RESULT_MSG.EVENT_AVAILABLE){
			bugs.confirm("한마디가 등록되었습니다.<br/>해당 이벤트에 참여하시겠습니까?", function() {
				try{
					//console.log(status);
					_goCommentEvent(status.event_srl, status.comment_group_id||null);
				}
				catch(e){}
			});
		}
	}

	//if(status.action == bugs.comment.ACTION.INSERT)
}









bugs.comment.listener_clickWriteBtn = function(params){
	var cmtStatus = bugs.comment.getStatus(params.comment_group_id);
	contentEditor = params.contentEditor;

	inputStr = $.trim(contentEditor.val());

	if(params.type == "comment"){
		cmtStatus.sect = bugs.comment.SECT.COMMENT;
	}
	else{
		cmtStatus.sect = bugs.comment.SECT.COMMENT_REPLY;
		cmtStatus.my_comment_id = params.my_comment_id;
	}

	cmtStatus.content = inputStr;
	cmtStatus.action = bugs.comment.ACTION.INSERT;

    attachInfo = bugs.comment.attach_getAttachInfo(params);
    if(attachInfo){
        if(attachInfo.type == bugs.comment.attach_type.TRACK){
        	cmtStatus.appended_track_id = attachInfo.appended_track_id;
        }
        else if(attachInfo.type == bugs.comment.attach_type.ALBUM){
        	cmtStatus.appended_album_id = attachInfo.appended_album_id;
        }
        else if(attachInfo.type == bugs.comment.attach_type.ARTIST){
        	cmtStatus.appended_artist_id = attachInfo.appended_artist_id;
        }


    }

    attachInfo2 = bugs.comment.imageattach_getAttachInfo(params);
    if(attachInfo2) {
        if(attachInfo2.type == bugs.comment.attach_type.IMAGE){
            cmtStatus.image = attachInfo2.attached_image;
        }
	}

	bugs.comment.data_actionComment(cmtStatus);
};


bugs.comment.listener_clickCommentWriteBtn = function(e){
	var cmtStatus = bugs.comment.getCurrentStatus(e.currentTarget);
	cmtStatus.type = "comment";
	cmtStatus.contentEditor = cmtStatus.commentContentEditArea;

	bugs.comment.listener_clickWriteBtn(cmtStatus);
};


bugs.comment.listener_clickReplyWriteBtn = function(e){
	var cmtStatus = bugs.comment.getCurrentStatus(e.currentTarget);
	cmtArea = $(e.currentTarget).closest("[cmt_area=comment]");
	cmtStatus.my_comment_id = cmtArea.attr("my_comment_id");

	cmtStatus.type = "reply";
	cmtStatus.contentEditor = cmtArea.find("[cmt_area=replyContentEdit]");

	bugs.comment.listener_clickWriteBtn(cmtStatus);
};


bugs.comment.listener_clickReplyEditShow = function(e){
	var cmtStatus = bugs.comment.getCurrentStatus(e.currentTarget);

	replyEdit = $(e.currentTarget).closest("[cmt_area=comment]").find("[cmt_area=replyEdit]");
	if(replyEdit.is(":visible"))
		replyEdit.hide();
	else
		replyEdit.show();

    replyEdit.find("[cmt_area=max]").text(cmtStatus.limit_reply_content_max_length);

	bugs.comment.listener_reinitScrollBar(cmtStatus);

	bugs.comment.arrangeLayout();
}


bugs.comment.listener_clickPrevPageBtn = function(e){
	var cmtStatus = bugs.comment.getCurrentStatus(e.currentTarget);
	cmtStatus.addPage = -1;
	bugs.comment.data_getCommentListByDirection(cmtStatus);
}


bugs.comment.listener_clickNextPageBtn = function(e){
	var cmtStatus = bugs.comment.getCurrentStatus(e.currentTarget);
	cmtStatus.addPage = 1;
	bugs.comment.data_getCommentListByDirection(cmtStatus);
}


bugs.comment.listener_keyupContentEdit = function(params){
	var cmtStatus = bugs.comment.getStatus(params.comment_group_id);
	cmtStatus.elem = params.elem;
	cmtStatus.type = params.type;

	limitStatus = bugs.comment.listener_showContentStatus(cmtStatus);

	
	needBlur = false;
	if(bugs.useragent.isIE() && !bugs.useragent.isIE("10"))
		needBlur = true;

	if(!limitStatus.inLimit){
		if(needBlur)
			$(cmtStatus.elem).blur();

		$(cmtStatus.elem).val(limitStatus.inLimitContent);
		bugs.comment.listener_showContentStatus(cmtStatus);

		if(needBlur)
			$(cmtStatus.elem).focus();
	}

	bugs.comment.listener_resizeContentEdit(cmtStatus.elem);
}


bugs.comment.listener_keyupCommentContentEdit = function(e){
	var cmtStatus = bugs.comment.getCurrentStatus(e.currentTarget);
	cmtStatus.elem = e.currentTarget;
	cmtStatus.type = "comment";
	bugs.comment.listener_keyupContentEdit(cmtStatus);
}



bugs.comment.listener_keyupReplyContentEdit = function(e){
	var cmtStatus = bugs.comment.getCurrentStatus(e.currentTarget);
	cmtStatus.elem = e.currentTarget;
	cmtStatus.type = "reply";
	bugs.comment.listener_keyupContentEdit(cmtStatus);
}

bugs.comment.listener_resizeContentEdit = function(elem){
	
	if(bugs.useragent.isMobile())
		return false;

	minHeight = parseInt($(elem).css("min-height"));
	if(!(minHeight))
		$(elem).css("min-height", $(elem).outerHeight());

	$(elem).css("height", 1);
	$(elem).css("max-height", elem.scrollHeight);
	$(elem).css("height", elem.scrollHeight);
}


bugs.comment.listener_showContentStatus = function(params){
	var cmtStatus = bugs.comment.getCurrentStatus(params.elem);
	currentArea = null;
	editArea = null;
	maxLimit = 0;
	if(params.type == "comment"){
		currentArea = cmtStatus.cmtGroupArea;
		editArea = cmtStatus.commentContentEditArea;
		minLimit = cmtStatus.limit_comment_content_min_length;
		maxLimit = cmtStatus.limit_comment_content_max_length;
	}
	else{
		currentArea = $(params.elem).closest("[cmt_area=replyEdit]")
		editArea = currentArea.find("[cmt_area=replyContentEdit]");
		minLimit = cmtStatus.limit_reply_content_min_length;
		maxLimit = cmtStatus.limit_reply_content_max_length;
	}

	monitor = currentArea.find("[cmt_area=contLenMonitor]");

	currStrLen = editArea.val().length;

	monitor.find("[cmt_area=current]").text(currStrLen);
	monitor.find("[cmt_area=max]").text(maxLimit);

	if(currStrLen < minLimit){
		monitor.find("[cmt_area=current]").addClass("limit");
	}
	else{
		monitor.find("[cmt_area=current]").removeClass("limit");
	}

	limitStatus = {};
	limitStatus.inLimit = (currStrLen <= maxLimit);
	limitStatus.inLimitContent = editArea.val().substr(0, maxLimit);
	return limitStatus;
}


bugs.comment.listener_clickShowRuleBtn = function(e){

	if(!bugs.useragent.isMobile()){
		bugs.comment.showRuleLayer(e.currentTarget);
	}
	else{
		// var msg = "벅스 한마디 운영 원칙\n\n"
		// 	+"* 한마디 등록 및 삭제\n"
		// 	+"벅스 한마디는 이용약관 제14조를 바탕으로, 건전한 댓글 문화의 정착을 위해 아래와 같이 운영 원칙을 적용합니다."
		// 	+"모니터링을 통해 아래 내용이 포함된 한마디가 발견되면 관리자에 의해 예고 없이 게시글이 삭제 될 수 있습니다. 상습적이거나 위반 정도가 심한 경우 글쓰기가 제한될 수 있으며 글쓰기 이용이 정지되었을 경우에는 고객센터 > 1:1문의하기로 해제 요청을 해주시기 바랍니다."
		// 	+"보다 나은 벅스를 위해 회원 여러분의 적극적인 협조를 부탁 드립니다.\n\n"
		// 	+"- 아래 -\n"
		// 	+"1. 욕설 및 비방 글을 등록한 경우\n"
		// 	+"2. 한 페이지 내에서 동일한 내용의 글을 반복적으로 3회 이상 등록한 경우 (도배 글)\n"
		// 	+"3. 홍보 및 상업성 글을 등록한 경우\n"
		// 	+"4. 음란성 글을 등록한 경우\n"
		// 	+"5. 악성코드를 유포한 경우\n"
		// 	+"6. 본인 및 타인의 개인 정보를 유출한 경우 (실명, 연락처, 메일 주소 등)\n"
		// 	+"7. 반사회성 글을 등록한 경우\n"
		// 	+"8. 기타 관리자 판단에 의해 제공 서비스와 관계없는 글을 등록한 경우\n";
		// alert(msg,false);
		var msg = "한마디 등록 및 삭제 정책 안내\n\n"
			+"벅스 한마디는 이용약관 제14조, 제15조, 커넥트 이용약관 제 13조를 바탕으로, 건전한 댓글 문화의 정착을 위해 한마디 운영정책을 적용합니다.\n"
			+"자세한 한마디 운영정책은 고객센터 FAQ 자주묻는질문에서 확인하실 수 있습니다.";
		alert(msg,false);
	}
}


bugs.comment.listener_clickSortTypeBtn = function(e){
	var cmtStatus = bugs.comment.getCurrentStatus(e.currentTarget);
	sort_type = $(e.currentTarget).attr("cmt_sort_type_option");
	cmtStatus.sort_type = sort_type;
	bugs.comment.data_getCommentListBySortType(cmtStatus);
}


bugs.comment.listener_reinitScrollBar = function(params){
	return;

	var cmtStatus = bugs.comment.getStatus(params.comment_group_id);
	cmtGroupArea = cmtStatus.cmtGroupArea;
	cmt_area_list = cmtGroupArea.find("[cmt_area=commentlist]");
	innerScrollArea = cmtStatus.scrollArea;

	if(innerScrollArea.length > 0){
		scroll_inner_area = cmt_area_list.closest(".innerPadding");
		innerScrollArea.height( scroll_inner_area.outerHeight() );
		try{
			if(innerScrollArea.data("jsp")){
				bugs.scroll.reinit(innerScrollArea);
			}
			else{
				bugs.scroll.setScrollBar(innerScrollArea);
			}
		}catch(e){
			//console.debug(e);
		}
	}
};


bugs.comment.listener_confirmCommentInsert = function(e){
	cmtStatus = bugs.comment.getCurrentStatus(e.currentTarget);


	if($(e.currentTarget).attr("cmt_area") == "commentContentEdit"){ 
		cmtStatus.sect = bugs.comment.SECT.COMMENT;
	}
	else{
		cmtStatus.sect = bugs.comment.SECT.COMMENT_REPLY; 
	}

	cmtStatus.action = bugs.comment.ACTION.CONFIRM;

	bugs.comment.data_confirmComment(cmtStatus);
}


bugs.comment.listener_clickCommentDeleteBtn = function(e){
	cmtStatus = bugs.comment.getCurrentStatus(e.currentTarget);
	cmtArea = $(e.currentTarget).closest("[cmt_area=comment]");
	cmtStatus.my_comment_id = cmtArea.attr("my_comment_id");

	cmtStatus.sect = bugs.comment.SECT.COMMENT;
	cmtStatus.action = bugs.comment.ACTION.DELETE;

	bugs.comment.data_actionComment(cmtStatus);
}


bugs.comment.listener_clickReplyDeleteBtn = function(e){
	cmtStatus = bugs.comment.getCurrentStatus(e.currentTarget);
	cmtArea = $(e.currentTarget).closest("[cmt_area=comment]");
	replyArea = $(e.currentTarget).closest("[cmt_area=reply]");

	cmtStatus.my_comment_id = cmtArea.attr("my_comment_id");
	cmtStatus.comment_reply_id = replyArea.attr("comment_reply_id");

	cmtStatus.sect = bugs.comment.SECT.COMMENT_REPLY;
	cmtStatus.action = bugs.comment.ACTION.DELETE;

	bugs.comment.data_actionComment(cmtStatus);
}


bugs.comment.listener_set = function(params){
	params = params || {};

	eventListenerList = [
		{sel:"[cmt_area=prevPageBtn]", 			event:"click", 	listener:bugs.comment.listener_clickPrevPageBtn},
		{sel:"[cmt_area=nextPageBtn]", 			event:"click", 	listener:bugs.comment.listener_clickNextPageBtn},
		{sel:"[cmt_area=replyEditShowBtn]", 	event:"click", 	listener:bugs.comment.listener_clickReplyEditShow},
		{sel:"[cmt_area=showRuleBtn]", 			event:"click", 	listener:bugs.comment.listener_clickShowRuleBtn},
		{sel:"[cmt_area=sortTypeBtn]", 			event:"click", 	listener:bugs.comment.listener_clickSortTypeBtn},
		{sel:"[cmt_area=commentWriteBtn]", 		event:"click", 	listener:bugs.comment.listener_clickCommentWriteBtn},
		{sel:"[cmt_area=commentContentEdit]", 	event:"keyup", 	listener:bugs.comment.listener_keyupCommentContentEdit},
		{sel:"[cmt_area=commentContentEdit]", 	event:"click", 	listener:bugs.comment.listener_confirmCommentInsert},
		{sel:"[cmt_area=commentDeleteBtn]", 	event:"click", 	listener:bugs.comment.listener_clickCommentDeleteBtn},
		{sel:"[cmt_area=replyContentEdit]", 	event:"keyup", 	listener:bugs.comment.listener_keyupReplyContentEdit},
		{sel:"[cmt_area=replyContentEdit]", 	event:"click", 	listener:bugs.comment.listener_confirmCommentInsert},
		{sel:"[cmt_area=replyWriteBtn]", 		event:"click", 	listener:bugs.comment.listener_clickReplyWriteBtn},
		{sel:"[cmt_area=replyDeleteBtn]", 		event:"click", 	listener:bugs.comment.listener_clickReplyDeleteBtn}
	];

	cmtAllArea = $(bugs.comment.selector.main);
	cmtAllArea.each(function(idx){
		cmtGroupArea = $(this);
		if(params.comment_group_id){
			comment_group_id = Number(cmtGroupArea.attr("cmt_comment_group_id"));
			if(params.comment_group_id != comment_group_id)
				return true; //continue
		}
		//cmtStatus = bugs.comment.getStatus(comment_group_id);

		for(var idx in eventListenerList){
			lstn = eventListenerList[idx];
			cmtGroupArea.find(lstn.sel)
				.off(lstn.event, lstn.listener)
				.on(lstn.event, lstn.listener);
		}
	});

	bugs.handler.run(bugs.comment.EVENTS.SET_LISTENER, params);

	bugs.comment.listener_keepAlive(params);
}



bugs.comment.listener_keepAlive_tid = 0;
bugs.comment.listener_keepAlive = function(params){

	if(bugs.comment.listener_keepAlive_tid)
		clearTimeout(bugs.comment.listener_keepAlive_tid);

	bugs.comment.listener_keepAlive_tid = setTimeout(
		function(){
			bugs.comment.listener_set(params);
			bugs.comment.listener_keepAlive(params);
		},
		2000
	);
}







bugs.comment.commentRuleLayerName = "comment_rule";
bugs.comment.showRuleLayer = function(elem){
	layerParams = {};
	layerParams.name = bugs.comment.commentRuleLayerName;
	layerParams.caller = elem;
	layerParams.cache = false;
	bugs.layer.showLayer(layerParams);
}

bugs.comment.getCommentGroupArea = function(comment_group_id){
	return $(bugs.comment.selector.main.replace("]", "=" + comment_group_id + "]"));
};

bugs.comment.getCurrentCommentArea = function(elem){
	return $(elem).closest(bugs.comment.selector.main);
};

bugs.comment.getCurrentStatus = function(elem){
	if(!elem)
		return null;

	cmtGroupArea = bugs.comment.getCurrentCommentArea(elem);
	comment_group_id = cmtGroupArea.attr("cmt_comment_group_id");

	var cmtStatus = bugs.comment.getStatus(comment_group_id);

	return cmtStatus;
};


bugs.comment.setCurrentStatus = function(params){
	if(!params.elem || !params.status)
		return null;

	cmtStatus = bugs.comment.getCurrentStatus(params.elem);
	params.comment_group_id = cmtStatus.comment_group_id;

	bugs.comment.setStatus(params);
}


bugs.comment.getStatus = function(comment_group_id){
	cmtGroupArea = bugs.comment.getCommentGroupArea(comment_group_id);
	if(!cmtGroupArea)
		return cmtGroupArea;

	var cmtStatus = {};
	cmtStatus.cmtGroupArea = cmtGroupArea;
	cmtStatus.scrollArea = cmtGroupArea.find(".innerScroll");
	cmtStatus.commentContentEditArea = cmtGroupArea.find("[cmt_area=commentContentEdit]");

	for(var i=0; i<cmtGroupArea[0].attributes.length; i++){
		attr = cmtGroupArea[0].attributes[i];

		attr_nm = attr.name;
		attr_vl = attr.value;

		if(!attr_nm)continue;

		if(attr_nm.indexOf("cmt_") >= 0){
			nm = attr_nm.substr(4);
			cmtStatus[nm] = bugs.string.getSuitableType(attr_vl);
		}
	}

//	cmtStatus.history_page_min = cmtStatus.history_page_min || cmtStatus.page;
//	cmtStatus.history_page_max = cmtStatus.history_page_max || cmtStatus.page;

	return cmtStatus;
}


bugs.comment.setStatus = function(params){
	var saveParams = bugs.object.copyProps(null, params);

	cmtStatus = bugs.comment.getStatus(saveParams.comment_group_id);
	cmtGroupArea = cmtStatus.cmtGroupArea;

	history_page = saveParams.page;
	history_page_min = cmtStatus.history_page_min || saveParams.page;
	history_page_max = cmtStatus.history_page_max || saveParams.page;

	saveParams.history_page = history_page;
	if((params.load_first||"N") == "Y"){
		saveParams.history_page_min = saveParams.page;
		saveParams.history_page_max = saveParams.page;
	}
	else{
		saveParams.history_page_min = Math.min(history_page_min, saveParams.page);
		saveParams.history_page_max = Math.max(history_page_max, saveParams.page);
	}

	
	if(saveParams.clear){
		saveParams.history_page = saveParams.history_page_min = saveParams.history_page_max = saveParams.page;
	}

	//console.debug(saveParams);

	
	saveProps = ["comment_count", "total_count", "last_page", "page", "sort_type", "history_page_min", "history_page_max"];
	for(var prop in saveParams){
		isSaveProp = false;
		for(var idx in saveProps){
			if(saveProps[idx].toUpperCase() == prop.toUpperCase()){
				isSaveProp = true;
				break;
			}
		}
		if(!isSaveProp)
			delete saveParams[prop];
	}

	//console.debug(saveParams);

	for(var prop in saveParams){
		if(!bugs.string.isEmpty(saveParams[prop]) && /string|number|boolean/i.test(typeof(saveParams[prop])))
			cmtGroupArea.attr(("cmt_" + prop), saveParams[prop]);
	}

	
	deleteProps = ["load_first"];
	for(var idx in deleteProps){
		cmtGroupArea.removeAttr("cmt_" + deleteProps[idx]);
	}
}







bugs.comment.input_textareaResize = function(target){
	bugs.comment.listener_resizeContentEdit(target);
};







bugs.comment.cmtUR_setResultCount = function(param){
	param.success = function(data){

		$(param.obj).blur();

		if(bugs.userReaction.RESULT.OK == data.code){
			$(param.obj).parent().find("[name=good_cnt]").text(data.good_cntStr);
			$(param.obj).parent().find("[name=bad_cnt]").text(data.bad_cntStr);

			//console.debug(data);

			$(param.obj).parent().find("button").removeClass("selected");
			if(data.myReaction == "GOOD")
				$(param.obj).parent().find("button.btnLike").addClass("selected");
			else if(data.myReaction == "BAD")
				$(param.obj).parent().find("button.btnDislike").addClass("selected");
		}
		else if(bugs.userReaction.RESULT.NEED_LOGIN == data.code){
            msg = "로그인 후 이용해 주세요.";
            if(confirm(msg)){
                bugs.member.login();
            }
		}
        else if(bugs.userReaction.RESULT.NOTVIP == data.code){
            msg = "벅스VIP라운지 회원만 가능합니다.";
            alert(msg);
        }
		else if(bugs.userReaction.RESULT.ALREADY == data.code){
			oldAct = "공감";
			if(data.myReaction == "BAD")
				oldAct = "비공감";

			msg = "이미 " + oldAct + "한 한마디입니다.";
			alert(msg);
		}
		else{
			msg = "오류발생(" + data.code + ")\n잠시 후 다시 이용해 주세요.";
			alert(msg);
		}
	}

	bugs.userReaction.set(param);
}

bugs.comment.cmtUR_comment_good = function(obj){
	my_comment_id = $(obj).closest("[my_comment_id]").attr("my_comment_id");

	param = {
		obj : obj,
		target_type : bugs.userReaction.TARGET_TYPE.COMMENT,
		target_id : my_comment_id,
		reaction_type : bugs.userReaction.REACTION_TYPE.GOOD
	};

	bugs.comment.cmtUR_setResultCount(param);
}

bugs.comment.cmtUR_comment_bad = function(obj){
	my_comment_id = $(obj).closest("[my_comment_id]").attr("my_comment_id");

	param = {
		obj : obj,
		target_type : bugs.userReaction.TARGET_TYPE.COMMENT,
		target_id : my_comment_id,
		reaction_type : bugs.userReaction.REACTION_TYPE.BAD
	};

	bugs.comment.cmtUR_setResultCount(param);
}

bugs.comment.cmtUR_reply_good = function(obj){
	comment_reply_id = $(obj).closest("[comment_reply_id]").attr("comment_reply_id");

	param = {
		obj : obj,
		target_type : bugs.userReaction.TARGET_TYPE.COMMENT_REPLY,
		target_id : comment_reply_id,
		reaction_type : bugs.userReaction.REACTION_TYPE.GOOD
	};

	bugs.comment.cmtUR_setResultCount(param);
}

bugs.comment.cmtUR_reply_bad = function(obj){3
	comment_reply_id = $(obj).closest("[comment_reply_id]").attr("comment_reply_id");

	param = {
		obj : obj,
		target_type : bugs.userReaction.TARGET_TYPE.COMMENT_REPLY,
		target_id : comment_reply_id,
		reaction_type : bugs.userReaction.REACTION_TYPE.BAD
	};

	bugs.comment.cmtUR_setResultCount(param);
}






bugs.comment.cmtReport_comment = function(obj){
	prnt = $(obj).closest("[my_comment_id]");
	my_comment_id = prnt.attr("my_comment_id");

	param = {
		obj : obj,
		parent : prnt,
		target_type : bugs.userReport.TARGET_TYPE.COMMENT,
		target_id : my_comment_id,
		caller : obj,
		layername : "userReport_comment"
	};
	bugs.userReport.commonCheckUI(param);
}

bugs.comment.cmtReport_reply = function(obj){
	prnt = $(obj).closest("[comment_reply_id]");
	comment_reply_id = prnt.attr("comment_reply_id");

	param = {
		obj : obj,
		parent : prnt,
		target_type : bugs.userReport.TARGET_TYPE.COMMENT_REPLY,
		target_id : comment_reply_id,
		caller : obj,
		layername : "userReport_comment"
	};
	bugs.userReport.commonCheckUI(param);
}




bugs.comment.imageattach_layerName = "attachimage2_select";
bugs.comment.imageattach_itemLayerName = "attachimage2_item";
bugs.comment.imageattach_bigItemLayerName = "attachimage2_big";
bugs.comment.imageattach_type = { // 필요없을 듯
    TRACK : "PNG",
    ALBUM : "JPG",
    ARTIST : "JPEG"
};

bugs.comment.imageattach_showUploadLayer = function(params){
	var params = params || {};

    checkLoginParams = {};
    checkLoginParams.success = function(data){

        if(!data){
            msg = "로그인 후 이용해 주세요.";
            if(confirm(msg)){
                bugs.member.login();
            }
            return;
        }

        var layerParams = {
            name : bugs.comment.imageattach_layerName,
            caller : params.caller,
            beforeShow : function(layer){
            	function _waitAttachLibLoad(){
                    try{
                        var setLayerParam = {
                            layer : layer,
                            targetElement : params.caller,
                            caller : params.caller,
                            callBackFunc : function(cbParam){
                            	// 암것두 안 함
                                //bugs.comment.imageattach_searchCallback(cbParam);
                            }
                        };
                        bugs.attach.image.setLayer(setLayerParam);
                    }
                    catch(e){
                        //alert("error");
                        //console.debug(e);
                        //setTimeout(_waitAttachLibLoad, 100);
                    }
                }
                _waitAttachLibLoad();
                bugs.comment.imageattach_documentReady(params);
            }
        };

        bugs.layer.showLayer(layerParams);

    };

    bugs.member.getLoginUser(checkLoginParams);

}


bugs.comment.imageattach_showBigImage = function(params){

    var params = params || {};

    $("div.layerPhotoGallery #comment_big_img").attr("src", params.url);
    bugs.comment.imageattach_showSimpleLayer("div.commentPhotoBigLayer");

};

bugs.comment.imageattach_showSimpleLayer = function(obj){

    var cWin = $(window);
    var layer = $(obj);

    var toppx = ( ((cWin.height() - layer.height()) >> 1));
    var leftpx = ( ((cWin.width() - layer.width()) >> 1));

    if (toppx<0) toppx=0;
    if (leftpx<0) leftpx=0;

    layer.css({left:leftpx+"px",	top:toppx+"px"}).show();
    bugs.ui.modalLayer.show(100);
};

bugs.comment.imageattach_hideSimpleLayer = function(obj){

    $(obj).hide();
    bugs.ui.modalLayer.hide();

};

bugs.comment.imageattach_logforupload = function(param){

    var params = {};

    //console.log($.toJSON(params), false);

    var url  = g_urlAjax + "/log/upload/loungecomment";
    $.post(url,
        params
        ,
        function(ret) {
            //console.log(ret);
            //console.log(ret.code);
            //console.log(ret.message);
            //console.log(ret.timeStamp);
            //console.log(ret.msrl);
            var s_timeStamp = ret.timeStamp;
            var s_msrl = ret.msrl;
            $("#timestamp").val(s_timeStamp);
            $("#msrl").val(s_msrl);
        });
};


bugs.comment.imageattach_documentReady = function(){

	var self = this;



    $('#myform_track_image').on('change', '#audio_image_file', function (e) {
        //alert("upload start track image", false);

        var image_file_size_limit = 10485760;
        var filname= $('#audio_image_file').val();

        if (filname) {
        	//alert('inside', false);
            var over_size_limit = false;
            uploadForm = $('#myform_track_image').ajaxSubmit({
                beforeSubmit: function () {
                    //$('#mv_upload_progress').width('0%');
                    //showArea("#mv_upload_progress");
                },
                uploadProgress: function (event, position, total, percentComplete) {
                    if(total > image_file_size_limit) {
                        if (!over_size_limit || over_size_limit == false) {
                            over_size_limit = true;
                            $('#audio_image_file').val("");// 같은 파일을 다시 올릴 때도 그냥 올라가도록 해야지. 안내 메시지 보여주기 애매 -->
                            //$('#audio_image_file').attr("type", "");
                            //$('#audio_image_file').attr("type", "file");
                            alert('용량이 너무 큽니다. 이미지는 최대 10MB까지 올리실 수 있습니다.');
                        }
                        over_size_limit = true;
                    } else {
                        //showLoadingNoimage("이미지를 업로드 중입니다.");
                    }
                    //dalert(2 + "position:"+ position+ ", total:" + total + ", percentComplete:" + percentComplete);
                    //$('#mv_upload_progress').width(percentComplete + '%');

                },
                success: function showResponse(responseText, statusText, xhr, $form) {
                    if (!over_size_limit || over_size_limit == false) {
                        //alert(3 + ":" + responseText.path, false);
                        //$('#mv_upload_progress').hide();

                        bugs.comment.imageattach_setTmpTrackImagePath(self, responseText.path, responseText.url);
                        $('#audio_image_file').val(""); // 같은 파일을 다시 올릴 때도 그냥 올라가도록 해야지. 안내 메시지 보여주기 애매 -->
                        //$('#audio_image_file').attr("type", "");
                        //$('#audio_image_file').attr("type", "file");
                    }
                },
                resetForm: false
            });

        }
        return false;
    });

    $('input#audio_image_file').change(function () {
        var val = $(this).val().toLowerCase();
        if(val == "") return;
        else {
            var regex = new RegExp("(.*?)\.(jpg|jpeg|png)$");
            if (!(regex.test(val))) {
                $(this).val('');
                alert('지원하지 않는 이미지 형식입니다. jpg, png, jpeg 파일을 선택해 주세요.');
            }
        }
    });
}

// 업로드한 tmp 정보 세팅하기  -->
bugs.comment.imageattach_selectImageFile = function() {
    $.ajaxSetup({async: false});
    bugs.comment.imageattach_logforupload();
    $('#audio_image_file').click();
    $.ajaxSetup({async: true});

};

// 업로드한 tmp 정보 세팅하기  -->
bugs.comment.imageattach_setTmpTrackImagePath = function(caller, path, url) {
	//alert(url, false);

    // image src에 추가하기
    $("#tmp_track_image").html("<img src="+url+" >");

    //submit할 정보에 추가
    $("#tmp_audio_image_file").val(path);


    $("#button_insert_image_comment").attr("attached_image", path);
    $("#button_insert_image_comment").removeClass("dimmed");

};


bugs.comment.imageattach_searchCallback = function(param){
    //console.debug(param);
    //bugs.comment.imageattach_add(param);
};


bugs.comment.imageattach_add = function(param){

    if(param.attached_image=="" || (param.attached_image!=""&& param.attached_image.indexOf("/tmp")<=-1) ) {
        alert('먼저 이미지를 추가하세요.', false);
    } else {
		bugs.layer.hideLayer(bugs.comment.imageattach_layerName);

		var param = param || {};


			param.attached_image_url = "https://image.bugsm.co.kr/comment/" + param.attached_image;

			layerParams = {
				name : bugs.comment.imageattach_itemLayerName,
				complete : function(){
					afterReadyLayer();
				}
			}
			bugs.layer.showLayer(layerParams);

			function afterReadyLayer(){
				html = bugs.layer.cache.html[bugs.comment.imageattach_itemLayerName];

				for(var prop in param){
					regexp = new RegExp("{" + prop + "}", "g");
					html = html.replace(regexp, param[prop]);
				}

				bugs.comment.imageattach_remove();

				var cmtArea = $(param.targetElement).closest("[cmt_area=comment_group]");
				if(cmtArea.length == 0)
					cmtArea = $(document);

				$(cmtArea).find("[cmt_area=commentImageAttachArea]").append(html);

				bugs.comment.arrangeLayout();
		}
    }
}



bugs.comment.imageattach_remove = function(param){
    $("[cmt_area=commentImageAttachArea]").html("");
    bugs.layer.hideLayer(bugs.comment.imageattach_itemLayerName, true);
}


bugs.comment.imageattach_getAttachInfo = function(param){
    var cmtGroupArea = $(document);
    if(param){
        var cmtStatus = bugs.comment.getStatus(param.comment_group_id);
        cmtGroupArea = cmtStatus.cmtGroupArea;
    }

    attachInfo = cmtGroupArea.find("[cmt_area=commentImageAttachArea] .attach:eq(0)");
    if(attachInfo.length == 0)
        return null;

    props = ["type", "attached_image"];
    rtnObj = {};
    for(var idx in props){
        if(attachInfo.attr(props[idx]))
            rtnObj[props[idx]] = attachInfo.attr(props[idx]);
    }

    return rtnObj;
};







bugs.comment.attach_searchLayerName = "attach_search";
bugs.comment.attach_itemLayerName = "attach_item";
bugs.comment.attach_type = {
	TRACK : "TRACK",	//트랙
	ALBUM : "ALBUM",	//앨범
	ARTIST : "ARTIST",	//아티스트
    IMAGE : "IMAGE"	//이미지
};

bugs.comment.attach_showSearchLayer = function(params){
	var params = params || {};

	checkLoginParams = {};
	checkLoginParams.success = function(data){

		if(!data){
			msg = "로그인 후 이용해 주세요.";
			if(confirm(msg)){
				bugs.member.login();
			}
			return;
		}

		var layerParams = {
			name : bugs.comment.attach_searchLayerName,
			caller : params.caller,
            beforeShow : function(layer){
				function _waitAttachLibLoad(){
					try{
						var setLayerParam = {
							layer : layer,
							targetElement : params.caller,
							caller : params.caller,
							callBackFunc : function(cbParam){
								bugs.comment.attach_searchCallback(cbParam);
							}
						};
						bugs.attach.musicSearch.setLayer(setLayerParam);
					}
					catch(e){
						//alert("error");
						//console.debug(e);
						setTimeout(_waitAttachLibLoad, 100);
					}
				}
				_waitAttachLibLoad();
			}
		};

		bugs.layer.showLayer(layerParams);

	};

	bugs.member.getLoginUser(checkLoginParams);

}

bugs.comment.attach_searchCallback = function(param){
	//console.debug(param);
	bugs.comment.attach_add(param);
};


bugs.comment.attach_add = function(param){

	var param = param || {};

	bugs.comment.wiselog_attachLayerMusicType(param.type);

	if(param.type == bugs.comment.attach_type.TRACK){
		param.image = bugs.url.albumThumbnail(param.appended_album_id, 50);
	}
	else if(param.type == bugs.comment.attach_type.ALBUM){
		param.image = bugs.url.albumThumbnail(param.appended_album_id, 70);
	}
	else if(param.type == bugs.comment.attach_type.ARTIST){
		param.image = bugs.url.artistThumbnail(param.appended_artist_id, 70);
	}

	layerParams = {
		name : bugs.comment.attach_itemLayerName,
		complete : function(){
			afterReadyLayer();
		}
	}
	bugs.layer.showLayer(layerParams);

	function afterReadyLayer(){
		html = bugs.layer.cache.html[bugs.comment.attach_itemLayerName];

		for(var prop in param){
			regexp = new RegExp("{" + prop + "}", "g");
			html = html.replace(regexp, param[prop]);
		}

		addItem = null;
		addItem = $(html).find("[type=" + param.type + "]");

		if(addItem){
			addItem.find(".btnDelete").click(function(){
				bugs.comment.attach_remove();
			});

			if(param.isAdult != "Y"){
				addItem.find("span.o19").remove();
			}

			bugs.comment.attach_remove();

			var cmtArea = $(param.targetElement).closest("[cmt_area=comment_group]");
			if(cmtArea.length == 0)
				cmtArea = $(document);

			$(cmtArea).find("[cmt_area=commentAttachArea]").append(addItem);
		}

		bugs.comment.arrangeLayout();
	}
}


bugs.comment.attach_remove = function(param){
	$("[cmt_area=commentAttachArea]").html("");
	bugs.layer.hideLayer(bugs.comment.attach_itemLayerName, true);
}


bugs.comment.attach_getAttachInfo = function(param){
	var cmtGroupArea = $(document);
	if(param){
		var cmtStatus = bugs.comment.getStatus(param.comment_group_id);
		cmtGroupArea = cmtStatus.cmtGroupArea;
	}

	attachInfo = cmtGroupArea.find("[cmt_area=commentAttachArea] .attach:eq(0)");
	if(attachInfo.length == 0)
		return null;

	props = ["type", "appended_track_id", "appended_album_id", "appended_artist_id", "attached_image"];
	rtnObj = {};
	for(var idx in props){
		if(attachInfo.attr(props[idx]))
			rtnObj[props[idx]] = attachInfo.attr(props[idx]);
	}

	return rtnObj;
}


bugs.comment.wiselog_commentWriteBtn = function(){
	mainContentType = bugs.location.getMainContentType();
	wiseVar = null;
	switch(mainContentType){
		case bugs.location.MAIN_CONTENT_TYPE.TRACK :			wiseVar="com_wr_01";	break;
		case bugs.location.MAIN_CONTENT_TYPE.ALBUM :			wiseVar="com_wr_02";	break;
		case bugs.location.MAIN_CONTENT_TYPE.ARTIST :			wiseVar="com_wr_03";	break;
		case bugs.location.MAIN_CONTENT_TYPE.MUSICPD_ALBUM :	wiseVar="com_wr_04";	break;
		case bugs.location.MAIN_CONTENT_TYPE.MUSICPD_INFO :		wiseVar="com_wr_05";	break;
		case bugs.location.MAIN_CONTENT_TYPE.SPECIAL :			wiseVar="com_wr_06";	break;
	}

	if(wiseVar){
		bugs.wiselog.area(wiseVar);
	}
}


bugs.comment.wiselog_attachMusicBtn = function(){
	mainContentType = bugs.location.getMainContentType();
	wiseVar = null;
	switch(mainContentType){
		case bugs.location.MAIN_CONTENT_TYPE.TRACK :			wiseVar="com_mbtn_01";	break;
		case bugs.location.MAIN_CONTENT_TYPE.ALBUM :			wiseVar="com_mbtn_02";	break;
		case bugs.location.MAIN_CONTENT_TYPE.ARTIST :			wiseVar="com_mbtn_03";	break;
		case bugs.location.MAIN_CONTENT_TYPE.MUSICPD_ALBUM :	wiseVar="com_mbtn_04";	break;
		case bugs.location.MAIN_CONTENT_TYPE.MUSICPD_INFO :		wiseVar="com_mbtn_05";	break;
		case bugs.location.MAIN_CONTENT_TYPE.SPECIAL :			wiseVar="com_mbtn_06";	break;
	}

	if(wiseVar){
		bugs.wiselog.area(wiseVar);
	}
}


bugs.comment.wiselog_attachLayerMusicType = function(type){
	wiseVar = null;
	switch(type){
		case bugs.comment.attach_type.TRACK :	wiseVar="com_mbtn_07_01";	break;
		case bugs.comment.attach_type.ALBUM :	wiseVar="com_mbtn_07_02";	break;
		case bugs.comment.attach_type.ARTIST :	wiseVar="com_mbtn_07_03";	break;
	}

	if(wiseVar){
		bugs.wiselog.area(wiseVar);
	}
}

bugs.comment.attach_goTrack = function(track_id){
	goPrams = {
		open : true,
		mOpen : true
	}
	bugs.location.goTrack(track_id, goPrams);
}

bugs.comment.attach_goAlbum = function(album_id){
	goPrams = {
		open : true,
		mOpen : true
	}
	bugs.location.goAlbum(album_id, goPrams);
}

bugs.comment.attach_goArtist = function(artist_id){
	goPrams = {
		open : true,
		mOpen : true
	}
	bugs.location.goArtist(artist_id, goPrams);
}






bugs.comment.bside_clickCmtOpenBtn = function(elem, type){

	type = type || "";

	var $sectionComment = $(elem).parent().next();

	if(type == "BSIDE_FEED"){
		$sectionComment = $(elem).closest('li').find('section.commentsCommon');
	}

	if($(elem).hasClass("open")){
		$(elem).removeClass("open");
		$(elem).find("[name=icon]").text("접기");

		$sectionComment.hide();
	}
	else{
		$(elem).addClass("open");
		$(elem).find("[name=icon]").text("펼치기");

		$sectionComment.show();

		comment_group_id = Number($(elem).attr("comment_group_id"));
		var cmtStatus = bugs.comment.getStatus(comment_group_id);
		bugs.scroll.reinit(cmtStatus.scrollArea);
		if(!cmtStatus.comment_count)
			bugs.comment.data_getCommentList({comment_group_id:comment_group_id});
	}
}




// 이미지 첨부하기 레이어를 띄우는 코드
bugs.attach.image = {

    baseUrl : null,
    layer : null,
    targetElement : null,
    callBackFunc : null,
    thumbnailSection : null,
    attachImageResultSection : null,
    sort : "A",
    layerWidthType : 'PC',
    mobileWidthMax : 720,
    layerName : "attach_search",
    init : function(){
        this.win = $(window);
        this.baseUrl = "https://boardw.bugs.co.kr/cmtimg/upload";
        this.thumbnailSection = $("#attachImageResultSection div.thumbnail");
        this.attachImageResultSection = $("#attachImageResultSection");
    },

    showLayer : function(targetElement, callBackFunc, caller){
        this.targetElement = targetElement;//호출(클릭)한 obj
        this.callBackFunc = callBackFunc; // 아마도 코멘트 입력하는 영역에 넣을 첨부한 이미지 html을 넣는 함수로 세팅할 것이다.
        var left = this.win.scrollLeft() + ((this.win.width() - this.layer.width()) >> 1); // center
        var top = this.win.scrollTop() + ((this.win.height() - this.layer.height()) >> 1); // middle
        bugs.ui.modalLayer.show();

        this.layer.css({"left":left+"px","top":top+"px"}).show();
        bugs.layerFocusNavi.remove(this.layer);
        bugs.layerFocusNavi.add(this.layer, $(caller),function(){bugs.attach.image.hideLayer()});
    },

    hideLayer : function(){
        bugs.layer.hideLayer(this.layerName);
        this.clearResult();
        $(this.targetElement).focus();
    },

    setLayer : function(param){
        this.layer = param.layer;
        this.targetElement = param.targetElement;
        this.clearResult();
        this.callBackFunc = param.callBackFunc;
        bugs.layerFocusNavi.remove(this.layer);
        bugs.layerFocusNavi.add(this.layer, $(param.caller),function(){bugs.attach.image.hideLayer()});
    },


    clearResult : function(){
    	//첨부 layer를 처음 상태로 변경
        this.thumbnailSection.html("<em>이미지를<br />추가하세요</em>");
        $('#audio_image_file').val(""); // 같은 파일을 다시 올릴 때도 그냥 올라가도록 해야지. 안내 메시지 보여주기 애매 -->
        //$('#audio_image_file').attr("type", "");
        //$('#audio_image_file').attr("type", "file");
        $("#button_insert_image_comment").attr("attached_image", "");
        $("#button_insert_image_comment").addClass("dimmed");

    }
};


bugs.comment.utils.getNickname = function (nickname){
	
	const emailRgx = nickname.indexOf('@');
	if(emailRgx > 0){ // 이메일
		nickname = nickname.slice(0,emailRgx);
	}else{
		nickname = nickname.replace(/(\s*)/g, "");
	}

	return nickname
}




$(function() {
    bugs.attach.image.init();
    //bugs.comment.imageattach_documentReady();ㅁ
});

/*-----/js/bugs/bugs.comment.js / end -----*/

/*-----/js/bugs/bugs.handler.js / start -----*/
var bugs = bugs || {};

bugs.handler = bugs.handler || {};

bugs.handler.events = {};

bugs.handler.RESULT_CODE = {
	OK : "OK",
	NO : "NO"
};

bugs.handler.getEvent = function(eventName, createIfNull){
	if(!bugs.handler.events[eventName] && createIfNull)
		bugs.handler.events[eventName] = [];
			
	return bugs.handler.events[eventName];
}


bugs.handler.add = function(params){
	if(typeof(arguments[0]) == "string"){
		var _params = {};
		_params.eventName = arguments[0];
		_params.handler = arguments[1];
		
		params = _params;
	}
	
	evnt = bugs.handler.getEvent(params.eventName, true);
	evnt.push(params);
};


bugs.handler.remove = function(params){
	
	if(typeof(arguments[0]) == "string"){
		var _params = {};
		_params.eventName = arguments[0];
		_params.handler = arguments[1];
		
		params = _params;
	}
	
	evnt = bugs.handler.getEvent(params.eventName, true);
	if(evnt){
		if(!params.handler){
			delete evnt;
			return true;
		}
		
		for(var idx in evnt){
			hdlr = evnt[idx];
			if(hdlr.handler == params.handler){
				evnt.splice(idx, 1);
				return true;
			}
		}
	}
	return false;
}


bugs.handler.removeAll = function(){
	delete bugs.handler.events;
	bugs.handler.events = {};
}


bugs.handler.run = function(params){
	
	if(typeof(arguments[0]) == "string"){
		var _params = {};
		_params.eventName = arguments[0];
		_params.handlerParams = arguments[1];
		
		params = _params;
	}
	
	evnt = bugs.handler.getEvent(params.eventName);
	if(evnt){
		var currParams = params.handlerParams || {};
		for(var idx in evnt){
			hdlr = evnt[idx];
			if(hdlr != null && hdlr.handler){
				currParams = hdlr.handler(currParams) || {};
				currParams.handler_result_code = currParams.handler_result_code || bugs.handler.RESULT_CODE.OK;
				if(currParams.handler_result_code != bugs.handler.RESULT_CODE.OK){
					break;
				}
			}
		}
		params.handlerParams = currParams;
	}
	return params;
}
/*-----/js/bugs/bugs.handler.js / end -----*/

/*-----/js/bugs/bugs.scroll.js / start -----*/

var bugs = bugs||{};

bugs.scroll = {};

bugs.scroll.scrollSelector = "#gnbBody, .innerScroll, .jScroll";

bugs.scroll.defaultInitProps = {
	//autoReinitialise: true,
	//autoReinitialiseDelay:100,
	animateScroll: true,
	animateDuration:300,
	mouseWheelPreventDefault: true,
	isVerticalScrollBarHide : true,
	contentWidth : '0px',
	verticalGutter : 0,
    verticalDragMinHeight: 50
};

//스크롤바 세팅
bugs.scroll.setScrollBar = function(selector, force){
	
	var select = selector || bugs.scroll.scrollSelector;
	var isForce = force || false;
	var autoScrollVar;
	$(select).each(function(){
		if(!isForce){
			autoScrollVar = $(this).attr("autoScroll") || null;
			if(autoScrollVar && autoScrollVar == "N")
				return true; //continue
		}
		
		initProps = bugs.object.copyProps(null, bugs.scroll.defaultInitProps);
		
		jsp_init = bugs.scroll.getElemetJspInit($(selector));
		
		if(jsp_init){
			for(var prop in jsp_init){
				initProps[prop] = jsp_init[prop];
			}
		}

		$(this).jScrollPane(
			initProps
		).on("mouseover", function(){
			$(this).find("div.jspVerticalBar").show();
		}).on("mouseout",function(){
			$(this).find("div.jspVerticalBar").hide();
		});
		
	});
	
};



bugs.scroll.reinit = function(selector, moveTarget, force){

	var selector = selector || bugs.scroll.scrollSelector;
	var isForce = force || false;
	var autoScrollVar;
	
	$(selector).each(function(index){

		if(!isForce){
			autoScrollVar = $(this).attr("autoScroll") || null;
			if(autoScrollVar && autoScrollVar == "N")
				return true; //continue
		}
		
		try{
			var isVerticalScrollBarHide = true;
			if(moveTarget)
				isVerticalScrollBarHide = false;
			
			initProps = {
				isVerticalScrollBarHide:isVerticalScrollBarHide
			};
			
			jsp_init = bugs.scroll.getElemetJspInit($(this));
			
			if(jsp_init){
				for(var prop in jsp_init){
					initProps[prop] = jsp_init[prop];
				}
			}
			
			$(this).data("jsp").reinitialise(initProps);
		}
		catch(e){}
		
		if(moveTarget){
			bugs.scroll.moveScroll($(this), moveTarget);
		}
		
	});
};

bugs.scroll.moveScroll = function(selector, target){
	var selector = selector || bugs.scroll.scrollSelector;
	
	try{
		//bugs.debug.show("bugs.scroll.reinit\n");
		if(typeof target =="object"){
			$(selector).data("jsp").scrollToElement(target, true);
		}else{
			$(selector).data("jsp").scrollToY(target);
		}
	}
	catch(e){}
};

bugs.scroll.getElemetJspInit = function(elem){
	jsp_init = null;
	
	try{
		jsp_init = $.parseJSON( $(elem).attr("jsp_init") );
	}catch(e){};
	
	return jsp_init;
};

$(document).ready(function(){
	setTimeout(function(){
		bugs.scroll.setScrollBar();
	}, 10);
});
/*-----/js/bugs/bugs.scroll.js / end -----*/

/*-----/js/bugs/bugs.musiccast.js / start -----*/

var bugs = bugs||{};

bugs.musiccast = bugs.musiccast || {};


bugs.musiccast.setFoldArea = function(selector){
	var obj = $(selector);
	if(selector == null || selector.length == 0)
		return null;
	
	var mH = obj.height();
	obj.attr("fmH", mH);

	var position = obj.css("position");
	var foldBtn = obj.parent().find(".btns");
		
	obj
		.css("visibility", "hidden")
		.css("display", "")
		.css("position", "absolute")
		.removeClass("fold");
	
	
	obj
		.off("transitionend")
		.on("transitionend", function(){
			bugs.navigator.arrangeLayout();
		});
	
	var timeDelay = 400;
	var loopCnt = 0;
	
	delayForHeight();
	
	function delayForHeight(){

		var oH = obj.height();
		if(oH == mH && loopCnt < 10){
			setTimeout(delayForHeight, 100);
			loopCnt++;
			return;
		}

		obj.attr("foH", oH);
		obj.addClass("fold");
		
		setTimeout(function(){
			obj.css("visibility", "");
			obj.css("position", position);
			
			if(oH > mH){
				foldBtn.show();
				obj.find("[onfold=hide]").hide();
			}
			else{
				foldBtn.hide();
			}
		}, timeDelay);
	}
}

bugs.musiccast.setFoldOnOff = function(elem){
	var foldArea = $(elem).parent().parent().find("[fmH]");
	if(foldArea.hasClass("fold")){
		foldArea.removeClass("fold");
		$(elem).addClass("open");
		$(elem).find("em").text("접기");
		foldArea.find("[onfold=hide]").show();
	}
	else{
		foldArea.addClass("fold");
		$(elem).removeClass("open");
		$(elem).find("em").text("펼치기");
		foldArea.find("[onfold=hide]").hide();
	}
	
	setTimeout(function(){
		bugs.navigator.arrangeLayout();
	}, 300);
}


bugs.musiccast.setEpisodeFold = function(){
	$(".season").each(function(index){
		bugs.musiccast.setEpisodeFoldOnOff($(this), "off");
		$(this).show();
		if($(this).find("tr").length < 10){
			$(this).find(".btns").hide();
		}
	});
}


bugs.musiccast.setEpisodeFoldOnOff = function(elem, force){
	var season = $(elem).closest(".season");
	var force = force || null;
	
	if(force == "on" || season.hasClass("fold")){
		season.removeClass("fold");
		season.find(".btnSwitchgear").addClass("open");
		season.find(".btnSwitchgear em").text("접기");
		season.find("tr").show();
	}
	else{
		season.addClass("fold");
		season.find(".btnSwitchgear").removeClass("open");
		season.find(".btnSwitchgear em").text("펼치기");
		season.find("tr:gt(10)").hide();
	}
	bugs.navigator.arrangeLayout();
}


bugs.musiccast.clickChannelLikes = function(elem, musiccast_channel_id){

	var btn = $(elem);
	var nowCnt = parseInt(btn.find("em").text());
	
	bugs.member.getLoginUser({
		success : function(data){
			if(data){
				_add_del_like();
			}
			else{
				if(bugs.useragent.isMobile()){
					if(confirm("로그인 후 이용할 수 있습니다. 로그인 하시겠습니까?")){
						bugs.member.login();
					}
				}
				else{
					bugs.member.login();
				}
			}
		}
	});
	
	function _add_del_like(){
		var selCls = "selected";
		if(bugs.useragent.isMobile())
			selCls = "on";
			
		if(!btn.hasClass(selCls)){
			bugs.music.addLikeMusicCastChannel(
				musiccast_channel_id, 
				{
					success : function() {
						btn.addClass(selCls);
						btn.find("[lk=cnt]").text(nowCnt+1);
					}
				}
			);
		}
		else{
			bugs.music.delLikeMusicCastChannel(
					musiccast_channel_id,
				{
					success : function() {
						btn.removeClass(selCls);
						btn.find("[lk=cnt]").text( Math.max(nowCnt-1, 0) );
					}
				}
			);
		}
	}
}


bugs.musiccast.playVideo = function(vid){
	var vids = [vid];
	var cvid;
	$("[bugsvid]").each(function(index){
		cvid = parseInt($(this).attr("bugsvid"));
		if(vid != cvid)
			vids.push(cvid);
	});

	bugs.music.viewMusicVideo(vids.join(","), true);
};


bugs.musiccast.setMobileContentMore = function(selector){
	
	selector = selector || "[contmore=area]";
	area = $(selector);
	body = $(selector).find("[contmore=body]");
	temp =$("<span name='temp' style='position:absolute; visibility:hidden'></span>")
		.append(body.clone());
	body.parent().append(temp);
	btns = $(selector).find("[contmore=btns]");
	
	bh = body.height();
	th = temp.height();
	
	temp.remove();
	
	if(bh >= th){
		btns.hide();
		return null;
	}
	
	btns.find("[contmore=more]")
		.off("click")
		.on("click", function(){
			//$(this).closest("[contmore=area]").find("[contmore=body]").addClass("open");
			$(this).closest("[contmore=area]")
				.removeClass("fold")
				.addClass("open");
			$(this).closest("[contmore=area]").find("[contmore=btns]").remove();
		});
		
}

bugs.musiccast.setWiseLogArea = function(){
	if($(".pgMusicCastChannelDetail, .pgMusicCastEpisodeDetail").length == 0)
		return;
	
	wiseAreaList = [
		{sel:".pgMusicCastEpisodeDetail .basicInfo .episode",			event:"click",	val:"nRadio_10_06"}, 
		{sel:".pgMusicCastEpisodeDetail .etcInfo .comment",				event:"click",	val:"nRadio_10_07"},
		{sel:".pgMusicCastEpisodeDetail .share .twitter",				event:"click",	val:"nRadio_10_08"},
		{sel:".pgMusicCastEpisodeDetail .share .facebook",				event:"click",	val:"nRadio_10_09"},
		{sel:".pgMusicCastEpisodeDetail .share .kakaostory",			event:"click",	val:"nRadio_10_10"},
		{sel:".pgMusicCastEpisodeDetail .share .link",					event:"click",	val:"nRadio_10_11"},
		{sel:".pgMusicCastEpisodeDetail .channelInfo .thumbnail"
				+ ".pgMusicCastEpisodeDetail .channelInfo .info",		event:"click",	val:"nRadio_10_12"},
		{sel:".pgMusicCastEpisodeDetail .channelInfo .btnLike",			event:"click",	val:"nRadio_10_13"},
		{sel:".pgMusicCastChannelDetail .basicInfo .site a",			event:"click",	val:"nRadio_10_14"}, 
		{sel:".pgMusicCastChannelDetail .btnSwitchgear",				event:"click",	val:"nRadio_10_15"},
		{sel:".pgMusicCastChannelDetail .episodeList .btnPlay",			event:"click",	val:"nRadio_10_16"},
		{sel:".pgMusicCastChannelDetail .episodeList .episode",			event:"click",	val:"nRadio_10_17"},
		{sel:".pgMusicCastChannelDetail .episodeList .channel",			event:"click",	val:"nRadio_10_18"},
		{sel:".pgMusicCastChannelDetail .season .btnSwitchgear",		event:"click",	val:"nRadio_10_19"},
		{sel:".pgMusicCastChannelDetail .etcInfo .likeBtn",				event:"click",	val:"nRadio_10_20"},
		{sel:".pgMusicCastChannelDetail .etcInfo .twitter",				event:"click",	val:"nRadio_10_21"},
		{sel:".pgMusicCastChannelDetail .etcInfo .facebook",			event:"click",	val:"nRadio_10_22"},
		{sel:".pgMusicCastChannelDetail .etcInfo .kakaostory",			event:"click",	val:"nRadio_10_23"},
		{sel:".pgMusicCastChannelDetail .etcInfo .link",				event:"click",	val:"nRadio_10_24"}
	];
	
	bugs.wiselog.setWiseArea(wiseAreaList);
};

$(document).ready(function(){
	bugs.musiccast.setWiseLogArea();
});
/*-----/js/bugs/bugs.musiccast.js / end -----*/

/*-----/js/bugs/bugs.encryption.js / start -----*/

var bugs = bugs||{};

bugs.encryption = bugs.encryption || {};

$(document).ready(function() {
	bugs.encryption.init();
});

bugs.encryption  = {
	login_key : "tyu@!###########################",
	init : function(){
		
		var script = document.createElement('script'); 
		script.type = 'text/javascript'; 
		script.src = '/js/enc/gibberish-aes.js';
		document.getElementsByTagName('head')[0].appendChild(script);
		
		if(typeof GibberishAES != "undefined"){
			GibberishAES.size(256);
		}else{
			return;
		}
		
	},
	loginEncrypt : function(str){
		
		str = str || "";
		
		if(bugs.encryption.isValidLoginEncrypt() == "Y"){
			return GibberishAES.aesEncrypt(str, bugs.encryption.login_key);
		}else{
			return str;
		}
	},
	isValidLoginEncrypt : function(){
		
		if(typeof GibberishAES != "undefined" && g_env != "dev"){
			return "Y";
		}else{
			return "N";
		}
	}
};
/*-----/js/bugs/bugs.encryption.js / end -----*/

/*-----/js/bugs/bugs.number.js / start -----*/
var bugs = bugs||{};

bugs.number = bugs.number || {};


bugs.number.getCurrency = function(num) {
	if(isNaN(num)){
		try{
			num = Number(num);
		}
		catch(e){
			return num;
		}
	}
	
    return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
};
/*-----/js/bugs/bugs.number.js / end -----*/

/*-----/js/bugs/bugs.connect.js / start -----*/

var bugs = bugs||{};

bugs.connect = bugs.connect || {};

bugs.connect.showCommonHeaderConnectMenuLayer = function(button) {
	
	var $layerConnectMenu = $('aside.layerConnectMenu');
	
	$('.layer').hide();
	$layerConnectMenu.show();
	
	$(document).off("click", bugs.connect.hideWhenDocumentClick);
	setTimeout(function(){
		$(document).on("click", {button : button, $layer : $layerConnectMenu}, bugs.connect.hideWhenDocumentClick);
	}, 100)
	
}

bugs.connect.hideWhenDocumentClick = function(e) {
	if(!$.contains(e.data.button, e.target)){
		$(document).off("click", bugs.connect.hideWhenDocumentClick);
		e.data.$layer.hide();
	}
}


// click for file upload (커넥트 소속사 등록, 사업자등록증 업로드 )
bugs.connect.click_for_connnectCompanyImage1 = function(obj) {
    $.ajaxSetup({async: false});
    bugs.connect.logforupload(obj);
    $('#company_license_file').click();
    $.ajaxSetup({async: true});

};

// click for file upload ( 커넥트 소속사 등록, 재직증명서 업로드 )
bugs.connect.click_for_connnectCompanyImage2 = function(obj) {
    $.ajaxSetup({async: false});
    bugs.connect.logforupload(obj);
    $('#manager_employ_cert_file').click();
    $.ajaxSetup({async: true});

};


// click for file upload ( 새 아티스트 등록  )
bugs.connect.click_for_new_artist = function(obj) {
    $.ajaxSetup({async: false});
    bugs.connect.logforupload(obj);
    $(obj.click_id + "").click();
    $.ajaxSetup({async: true});

};


// click for file upload ( common )
bugs.connect.click_for_common_upload = function(obj) {
    $.ajaxSetup({async: false});
    bugs.connect.logforupload(obj);
    $(obj.click_id + "").click();
    $.ajaxSetup({async: true});

};

// logging for uploading
bugs.connect.logforupload = function(obj){

    var params = {};

    //console.log($.toJSON(params), false);

    var url  = g_urlAjax + "/log/upload/connectfile";
    $.post(url,
        params
        ,
        function(ret) {
            //console.log(ret);
            //console.log(ret.code);
            //console.log(ret.message);
            //console.log(ret.timeStamp);
            //console.log(ret.msrl);
            var s_timeStamp = ret.timeStamp;
            var s_msrl = ret.msrl;
            $(obj.timestamp_id + "").val(s_timeStamp);
            $(obj.msrl_id + "").val(s_msrl);
        });
};

/*-----/js/bugs/bugs.connect.js / end -----*/

/*-----/js/bugs/bugs.connect.story.js / start -----*/

var bugs = bugs||{};

bugs.connect = bugs.connect || {};

bugs.connect.story = bugs.connect.story || {};

bugs.connect.story.FeedWriteLayerName = "connect_story_write";

bugs.connect.story.FeedAddActionsLayerName = "connect_story_addActions";

bugs.connect.story.FeedReadLayerName = "connect_story_read";

bugs.connect.story.showFeedReadLayer = function(bsideFeedId, feedType, feedList){
//	console.log("showFeedReadLayer");
    var feedListInfo = {id : 'defaultId', storyCardClass : '', isVisibleOnlyFirstRow: false};

    if(typeof feedList == "undefined"){
        feedList = new Array();
    }
    for(var info in feedList.info){
        if(/string|number|boolean/ig.test(typeof(feedList.info[info]))){
            feedListInfo[info] = feedList.info[info];
        }
    }

    //feedList matching
    var currentFeedListIndex = -1;
    var prevPagingButtonIndex = -1;
    var nextPagingButtonIndex = -1;
    $.each(feedList, function(index, value){
        var bside_feed_id = value.bside_feed_id || 0;
        if(bside_feed_id == bsideFeedId){
            currentFeedListIndex = index;
        }
    });

    if(currentFeedListIndex >= 0 && currentFeedListIndex <= feedList.length-1){
        if(currentFeedListIndex == feedList.length-1){
            prevPagingButtonIndex = currentFeedListIndex - 1;
        }else if(currentFeedListIndex == 0){
            nextPagingButtonIndex = 1;
        }else{
            prevPagingButtonIndex = currentFeedListIndex - 1;
            nextPagingButtonIndex = currentFeedListIndex + 1;
        }
    }

    //위치 맞추기(기획요청으로 주석처리), prev/next버튼 처리
    if(currentFeedListIndex >= 0){
        var firstRowTop = 0;
        $('article.storyCard'+ feedListInfo.storyCardClass).each(function (index) {
            if(index == 0){
                firstRowTop = $(this).offset().top;
            }
            var bside_feed_id = parseInt($(this).attr('bsidefeedid'));
            // if(feedList[currentFeedListIndex].bside_feed_id == bside_feed_id){
            //     $('html, body').animate({scrollTop: $(this).offset().top - $('#header').height() - 20});
            // }
            if(nextPagingButtonIndex >= 0
                && feedList[nextPagingButtonIndex].bside_feed_id == bside_feed_id
                && feedListInfo.isVisibleOnlyFirstRow
                && firstRowTop != $(this).offset().top){
                nextPagingButtonIndex = -1;
            }
        });
    }

	$.ajax({
		url : g_urlAjax + "/connect/ajax/feed/get",
		type : "post",
		data : {bsideFeedId : bsideFeedId, isUpdateViewCnt : true},
		success : function(data){
			if(data.result){
				
				$('body').css("overflow", "hidden");
				// console.log(data);

				var trackId = 0;
				if(data.bsideFeed.feed_type == "TRACK"){
					trackId = data.bsideFeed.track.track_id;
				}
				var layerParams = {
						name : bugs.connect.story.FeedReadLayerName,
						ct : 'BSIDE_FEED',
						cgid : data.bsideFeed.comment_group_id,
						feedType : data.bsideFeed.feed_type,
						trackId : trackId,
                        appendType : data.bsideFeed.bsideFeedAppendedContent != null ? data.bsideFeed.bsideFeedAppendedContent.appendType : "",
						cache : false,
						complete : function($layerRead){

                            if(prevPagingButtonIndex >= 0){
                                $layerRead.find('#prevPagingButton').removeClass('disabled');
                                $layerRead.find('#prevPagingButton').on('click', function(e){
                                    e.stopPropagation();
                                    bugs.connect.story.hideFeedReadOtherLayer();
                                    bugs.layer.cache.obj[bugs.connect.story.FeedReadLayerName].remove();
                                    delete bugs.layer.cache.obj[bugs.connect.story.FeedReadLayerName];
                                    bugs.connect.story.showFeedReadLayer(feedList[prevPagingButtonIndex].bside_feed_id, feedList[prevPagingButtonIndex].type, feedList);
                                });
                            }else{
                                $layerRead.find('#prevPagingButton').on('click', function(e){
                                    e.stopPropagation();
                                });
                            }
                            if(nextPagingButtonIndex >= 0){
                                $layerRead.find('#nextPagingButton').removeClass('disabled');
                                $layerRead.find('#nextPagingButton').on('click', function(e){
                                    e.stopPropagation();
                                    bugs.connect.story.hideFeedReadOtherLayer();
                                    bugs.layer.cache.obj[bugs.connect.story.FeedReadLayerName].remove();
                                    delete bugs.layer.cache.obj[bugs.connect.story.FeedReadLayerName];
                                    bugs.connect.story.showFeedReadLayer(feedList[nextPagingButtonIndex].bside_feed_id, feedList[nextPagingButtonIndex].type, feedList);
                                });
                            }else{
                                $layerRead.find('#nextPagingButton').on('click', function(e){
                                    e.stopPropagation();
                                });
                            }
				
							//artist info setting
							$layerRead.find('#artistInfoLink').attr("href", g_urlMusic + "/artist/" + data.bsideFeed.artist_id);
							$layerRead.find('#artistInfoImage').attr("src", data.bsideFeed.artist.clipImg108);
							$layerRead.find('#artistInfoImage').attr("alt", data.bsideFeed.artist.disp_nm + " 대표이미지");
							$layerRead.find('#artistInfoNameLink').attr("href", g_urlMusic + "/artist/" + data.bsideFeed.artist_id);
							$layerRead.find('#artistInfoNameLink').text(data.bsideFeed.artist.disp_nm);
							$layerRead.find('#commentTime').text(data.bsideFeed.createDateBeforeExpression);
							var createDate = new Date(data.bsideFeed.crt_dt);
							$layerRead.find('#commentTime').attr("datetime", createDate.getFullYear() + "-" + (createDate.getMonth()+1) + "-" + createDate.getDate());
							$layerRead.find('#commentCount').text(data.bsideFeed.comment_cnt);
							$layerRead.find('#commentCount').attr("cmt_disp_comment_count", data.bsideFeed.comment_group_id);
                            var viewYesDate = new Date(2019, 0, 15); //2019.01.15
							if(createDate > viewYesDate){
                                $layerRead.find('#viewCount').text(data.bsideFeed.view_cnt);
                            }

							//content setting
							var $textDiv = $layerRead.find('#textDiv');
							$textDiv.html(data.bsideFeed.content.replace(/(\n|\r\n)/g, "<br>"));
							
							if($textDiv[0].scrollHeight - $textDiv[0].clientHeight > 0){
								$layerRead.find('#textMoreButton').show();
							}else{
								$textDiv.removeClass('fold');
							}

							$(".layerContents").click(function(e){
                                bugs.connect.story.hideFeedAddActionsLayer();
								e.stopPropagation();
							});

							if(data.bsideFeed.bsideFeedAppendedContent != null){

                                var $appendedContent = $layerRead.find('.appended.'+ data.bsideFeed.bsideFeedAppendedContent.appendType.toLowerCase());

                                if(data.bsideFeed.bsideFeedAppendedContent.appendType == "ALBUM"){
                                    var album = data.bsideFeed.bsideFeedAppendedContent.album;
                                    $appendedContent.find('[name=albumPageLink]').attr("href", bugs.url.albumPage(album.album_id));
                                    $appendedContent.find('#appendedAlbumImage')
                                        .attr("src", bugs.url.albumThumbnail(album.album_id, 70))
                                        .attr("alt", album.title + " 앨범 대표이미지");
                                    $appendedContent.find('#appendedPlayButton').attr("onclick", "bugs.music.listenAlbum("+album.album_id+")");
                                    $appendedContent.find('#appendedAlbumTitle')
                                        .attr("title", album.title)
                                        .text(album.title);
                                    if(album.artist_id == 533){  //Various Artists
                                        $appendedContent.find('#appendedArtistTitle').replaceWith('<span>' + $appendedContent.find('#appendedArtistTitle').html() +'</span>')
                                    }
                                    if(album.multi_artist_yn == "Y"){
                                        var artistInfoArray = bugs.layermenu.getMultiArtistInfoArr(album.multi_artist_infoset) || null;
                                        if(artistInfoArray != null && artistInfoArray.length > 0){
                                            album.artist_nm = artistInfoArray[0].artist_nm;
                                        }
                                        $appendedContent.find('#multiArtistButton').attr("onclick", "bugs.layermenu.openMultiArtistSearchResultPopLayer(this, '"+ album.multi_artist_infoset +"', '_blank', true);");
                                        $appendedContent.find('#multiArtistButton').show();
                                    }
                                    $appendedContent.find('#appendedArtistTitle')
                                        .attr("href", bugs.url.artistPage(album.artist_id))
                                        .attr("title", album.artist_disp_nm)
                                        .text(album.artist_disp_nm);
                                    var regdate = new Date(album.releaseDate);
                                    $appendedContent.find('#appendedRegDate')
                                        .attr("datetime", [regdate.getFullYear(), (regdate.getMonth()+1 < 10 ? '0' : '') + (regdate.getMonth()+1), (regdate.getDate() < 10 ? '0' : '') + regdate.getDate()].join("."))
                                        .text([regdate.getFullYear(), (regdate.getMonth()+1 < 10 ? '0' : '') + (regdate.getMonth()+1), (regdate.getDate() < 10 ? '0' : '') + regdate.getDate()].join("."));
                                    $appendedContent.find('#appendedAlbumType').text(album.album_tp);
                                    //스토리 이벤트
                                    if(data.bsideFeed.bsideFeedAppendedContent.musicEvent != null){
                                        // console.log(data.bsideFeed.bsideFeedAppendedContent.musicEvent);
                                        $layerRead.find('#albumEventBadge').html('<span>EVENT</span> <strong>' + data.bsideFeed.bsideFeedAppendedContent.album.title + '</strong> 앨범에 한마디를 남기고 이벤트에 참여해보세요!');
                                        $layerRead.find('#albumEventBadge').show();
                                    }

                                }else if(data.bsideFeed.bsideFeedAppendedContent.appendType == "TRACK"){
                                    var track = data.bsideFeed.bsideFeedAppendedContent.track;

                                    $appendedContent.find('[name=albumPageLink]').attr("href", bugs.url.albumPage(track.album_id));
                                    $appendedContent.find('#appendedAlbumImage')
                                        .attr("src", bugs.url.albumThumbnail(track.album_id, 70))
                                        .attr("alt", track.track_title + " 대표이미지");
                                    $appendedContent.find('[name=trackPageLink]').attr("href", bugs.url.trackPage(track.track_id));
                                    $appendedContent.find('#appendedPlayButton').attr("onclick", "bugs.music.listen("+track.track_id+", true)");
                                    if(track.adult_yn == "Y"){
                                        $appendedContent.find('#appendedAdultYn').show();
                                    }
                                    $appendedContent.find('#appendedTrackTitle')
                                        .attr("href", bugs.url.trackPage(track.track_id))
                                        .attr("title", track.track_title)
                                        .text(track.track_title);
                                    if(track.multi_artist_yn == "Y"){
                                        var artistInfoArray = bugs.layermenu.getMultiArtistInfoArr(track.multi_artist_infoset) || null;
                                        if(artistInfoArray != null && artistInfoArray.length > 0){
                                            track.artist_nm = artistInfoArray[0].artist_nm;
                                        }
                                        $appendedContent.find('#multiArtistButton').attr("onclick", "bugs.layermenu.openMultiArtistSearchResultPopLayer(this, '"+ track.multi_artist_infoset +"', '_blank', true);");
                                        $appendedContent.find('#multiArtistButton').show();
                                    }
                                    $appendedContent.find('#appendedArtistTitle')
                                        .attr("href", bugs.url.artistPage(track.artist_id))
                                        .attr("title", track.artist_nm)
                                        .text(track.artist_nm);


                                }else if(data.bsideFeed.bsideFeedAppendedContent.appendType == "ARTIST"){
                                    var artist = data.bsideFeed.bsideFeedAppendedContent.artist;

                                    $appendedContent.find('[name=artistPageLink]').attr("href", bugs.url.artistPage(artist.artist_id));
                                    $appendedContent.find('#appendedArtistImage').attr("src", bugs.url.artistThumbnail(artist.artist_id, 70))
                                        .attr("alt", artist.disp_nm + " 대표이미지");
                                    $appendedContent.find('#appendedArtistTitle')
                                        .attr("href", bugs.url.artistPage(artist.artist_id))
                                        .attr("title", artist.disp_nm)
                                        .text(artist.disp_nm);
                                }
                                $appendedContent.show();
                            }

							if(data.bsideFeed.feed_type == "STORYIMAGE"){
								
								//image setting
								var $photoDiv = $layerRead.find('#photoDiv');
								$(data.bsideFeed.bsideFeedImageList).each(function(){
									var html = "";
									if(data.bsideFeed.bsideFeedImageList.length == 1){
										html = 
											'<div class="thumbnail">' +
											'<a href="javascript:;" onclick="bugs.connect.story.thumnailImageChange(this);">' +
												'<span class="mask"></span>' +
												'<img src="' + bugs.url.bsideFeedThumbnail(this.image_path, 640, 0) + '" ' +
												'originalImageSrc="' + this.currentImagePath + '">' +
												'</a>' +
											'</div>';
									}else{
										html = 
											'<span class="thumbnail">' +
												'<a href="javascript:;" onclick="bugs.connect.story.thumnailImageChange(this);">' +
												'<span class="mask"></span>' +
												'<img  src="' + bugs.url.bsideFeedThumbnail(this.image_path, 294, 0) + '"' +
													'bigImageSrc="' + bugs.url.bsideFeedThumbnail(this.image_path, 640, 0) + '"' +
													'originalImageSrc="' + this.currentImagePath + '"' +
													'onload="javascript:bugs.connect.story.fitImageSize(this, \'' + bugs.url.bsideFeedThumbnail(this.image_path, 294, 0) + '\', 294, 294);">' +
												'</a>' +
											'</span>';
									}
									
									$photoDiv.append(html);
									
								});
								
								
							}else if(data.bsideFeed.feed_type == "TRACK"){
								
							}else if(data.bsideFeed.feed_type == "MV"){
								
//								console.log(data.userInfo ? true : false);
//								console.log(data.userInfo != null && data.useStreaming > 0 ? true : false);
//								console.log(data.useDataFree);
								
								bugs.mvHPlayer.init(data.userInfo ? true : false, data.userInfo != null && data.useStreaming > 0 ? true : false, data.useDataFree, g_urlMusic);
								
								bugs.mvHPlayer.addPlayer("BugsMediaPlayerBsideFeedRead",
										data.bsideFeed.feed_meta_id,
										640,
										"embed",
										"S_bside_03"
								);
								
							}
							
							//addActions setting
							$('#addActionsButton').attr("onclick", "bugs.connect.story.showFeedAddActionsLayer(this, " + data.bsideFeed.bside_feed_id +", " + data.bsideFeed.isBsideArtist + ", '" + data.bsideFeed.feed_type + "');");
							
							//comment button setting
							$('#commentCountClick').on('click', function(){
								var commentTop = $layerRead.find('section#comments').offset().top;
								$layerRead.animate({ scrollTop: commentTop }, 300);
							})
							
							$layerRead.show();
						}
				};
				
				bugs.layer.showLayer(layerParams);
				
			}
		}
	});

};

bugs.connect.story.hideFeedReadLayer = function(){
    bugs.connect.story.hideFeedReadOtherLayer();
	bugs.layer.hideLayer(bugs.connect.story.FeedReadLayerName, true);
	$('body').css("overflow", "");
};

bugs.connect.story.hideFeedReadOtherLayer = function(){
    bugs.layer.hideLayer(bugs.comment.commentRuleLayerName, true);
    bugs.layer.hideLayer(bugs.connect.story.FeedAddActionsLayerName, true);
    bugs.layer.hideLayer(bugs.comment.attach_searchLayerName, true);
};

bugs.connect.story.showFeedAddActionsLayer = function(obj, bsideFeedId, isBsideArtist, feedType){
	
//	console.log(obj);
	
	if(bsideFeedId <= 0){
		return false;
	}
	isBsideArtist = isBsideArtist || false;

	// toggle처리
	var $addActions = $('aside#layerBsideFeed[name=connect_story_addActions]');
	if($addActions.is(':visible')){
        bugs.layer.hideLayer(bugs.connect.story.FeedAddActionsLayerName, true);
        if($addActions.attr("bside_feed_id") == bsideFeedId+""){
            return;
        }
    }
	
	var layerParams = {
			name : bugs.connect.story.FeedAddActionsLayerName,
			cache : false,
			complete : function($layerAddActions){

                $layerAddActions.attr("bside_feed_id", bsideFeedId);
				$layerAddActions.css("top", $(obj).offset().top + $(obj).height() + 5);
				$layerAddActions.css("left", $(obj).offset().left + $(obj).width() - $layerAddActions.width() + 9);
				
				if(isBsideArtist){
					if(feedType == "STORY" || feedType == "STORYIMAGE"){
						$layerAddActions.find('a[name=modify]').attr('onclick', 'bugs.connect.story.showFeedWriteLayer('+bsideFeedId+');bugs.connect.story.hideFeedReadLayer();');
					}else{
						$layerAddActions.find('a[name=modify]').closest('li').hide();
					}
					$layerAddActions.find('a[name=delete]').attr('onclick', 'bugs.connect.story.deleteFeed('+bsideFeedId+');bugs.connect.story.hideFeedReadLayer();');
					$layerAddActions.find('a[name=userReport]').closest('li').hide();
				}else{
					$layerAddActions.find('a[name=userReport]').attr('onclick', 'bugs.userReport.clickCommonReportBtn(this, \'BSIDE_FEED\', '+bsideFeedId+');bugs.connect.story.hideFeedReadLayer();');
					$layerAddActions.find('a[name=modify]').closest('li').hide();
					$layerAddActions.find('a[name=delete]').closest('li').hide();
				}
				
				$layerAddActions.show();
				
				$(document).off('click');
				$(document).on('click', function(event){
					if(!$(event.target).is('button[name=bsideFeedActionsButton]')){
						bugs.layer.hideLayer(bugs.connect.story.FeedAddActionsLayerName, true);
					}
				});
			}
		};
	
	bugs.layer.showLayer(layerParams);
};

bugs.connect.story.hideFeedAddActionsLayer = function(){
	bugs.layer.hideLayer(bugs.connect.story.FeedAddActionsLayerName, true);
};

bugs.connect.story.showFeedWriteLayer = function(bsideFeedId, artistId){
	
	var isModify = false;
	
	bsideFeedId = bsideFeedId || 0;
	if(bsideFeedId > 0){
		isModify = true;
	}
	artistId = artistId || 0;
	
	var layerParams = {
		name : bugs.connect.story.FeedWriteLayerName,
		complete : function($layerBsideWrite){
			
			bugs.scroll.setScrollBar($layerBsideWrite.find(".innerScroll"));

			var $myform = $layerBsideWrite.find("#myform");

			var loadingLayer = null;

			$('#fileupload').fileupload({
				dataType: 'json',
				singleFileUploads: false,
				add: function(e, data){

					var extensions = ["jpg", "jpeg", "png", "gif"];

					var totalFileSize = 0;
					var isValidExtension = false;

					$(data.files).each(function(){
						var extension = this.name.substring(this.name.lastIndexOf(".") + 1);
						isValidExtension = false;
						extensions.forEach(function(element){
							if(extension.toLowerCase() == element){
								isValidExtension = true;
							}
						})
						if(!isValidExtension){
							return false;
						}
						totalFileSize += this.size;
					});

					if(!isValidExtension){
						alert("지원하지 않는 이미지 형식입니다. jpg, png, gif, jpeg 파일을 선택해 주세요.");
						return null;
					}

					if(totalFileSize > (100*1024*1024)){ //100MB check
						alert("한 번에 100MB를 초과하는 사진을 첨부할 수 없습니다.");
						return null;
					}


					//이미지 업로드 로딩바 show
					loadingLayer = new bugs.ui.loadingLayer("이미지를 올리는 중입니다.", null, true); //로딩레이어 생성
					loadingLayer.show({top : $layerBsideWrite.offset().top + 210, left : $layerBsideWrite.offset().left + 110});

					data.submit();
				},
				done: function(e, data){
//					console.log(data);
					data.result.forEach(function(element, index, array){
						if(element.resultCode == "EXCEED_FILE_SIZE"){
							alert("한 번에 100MB를 초과하는 사진을 첨부할 수 없습니다.\n파일명 : " + element.filename);
						}else if(element.resultCode == "INVALID_EXTENSION"){
							alert("지원하지 않는 이미지 형식입니다. jpg, png, gif, jpeg 파일을 선택해 주세요.\n파일명 : " + element.filename);
						}else{
							$layerBsideWrite.find("ul[name=uploadImages]").append(bugs.connect.story.getFeedImageHtml(bugs.connect.story.getThumnailImagePath(element.path), element.path, element.size, 0));
						}
					});
					bugs.connect.story.cheakFeedContents($layerBsideWrite);
					bugs.connect.story.changeFeedImage($layerBsideWrite);
				},
				always: function(e, data){
					//이미지 업로드 로딩바 hide
					if(loadingLayer != null){
						loadingLayer.remove();
					}
				}
			});

			//사진 올리기 버튼 클릭
			$layerBsideWrite.find("button[name=upload]").on('click', function(){
				// 불법 쵤영물 check
				warnIllegalFilming({
					caller: this,
					actionAfterWarning: function() {
						bugs.connect.story.doFileUpload();
					}
				});
			});

			//확인 버튼 클릭
			$layerBsideWrite.find("button[name=submit]").on('click', function(){
//				console.log("submitFeed");
				if(isModify){
					bugs.connect.story.submitFeed($layerBsideWrite, bsideFeedId);
				}else{
					bugs.connect.story.submitFeed($layerBsideWrite);
				}
			});

			//placeholder
			$layerBsideWrite.find("textarea[name=content]").on('focus', function(){
				$layerBsideWrite.find("p.placeholder").hide();
			});
			$layerBsideWrite.find("textarea[name=content]").on('blur', function(){
				var content = $(this).val();
				if(content.length <= 0){
					$layerBsideWrite.find("p.placeholder").show();
				}
			});
			//5000자
			$layerBsideWrite.find("textarea[name=content]").on('keyup ', function(){
				var content = $(this).val();
				if(content.length > 5000){
					alert("소식은 5,000자까지 쓸 수 있습니다.");
					$(this).val(content.substring(0, 5000));
				}
			});

			//company setting
			$layerBsideWrite.find("#bsideArtistName").on('click', function(){
				if($layerBsideWrite.find('aside#layerSelectBsideArtist').is(':visible')){
					$layerBsideWrite.find('aside#layerSelectBsideArtist').hide();
				}else{
					$layerBsideWrite.find('aside#layerSelectBsideArtist').show();
					bugs.scroll.setScrollBar(".innerScrollAfter");
				}
			});
			$layerBsideWrite.find("a[name=bsideArtistSelect]").on('click', function(){
				$('ul#bsideArtistSelectUl').attr("value", $(this).closest('li').val());
				$('a#bsideArtistName').text($(this).text());
				$('aside#layerSelectBsideArtist').hide();
			});
			if(artistId > 0){
				$layerBsideWrite.find("a[name=bsideArtistSelect]").each(function(){
					if($(this).closest('li').val() == artistId){
						$(this).click();
					}
				});
			}

			//수정일때, 기존 피드 데이터 가져오기
			if(isModify){
				$.ajax({
					url : g_urlAjax + "/connect/ajax/feed/get",
					type : "post",
					data : {
						bsideFeedId : bsideFeedId,
						isUrlReplace : false
					},
					success : function(data){
						if(data.result){
							$layerBsideWrite.find("textarea[name=content]").val(data.bsideFeed.content);
							if(data.bsideFeed.bsideFeedImageList != null){
								data.bsideFeed.bsideFeedImageList.forEach(function(element){
//									console.log(element);
									$layerBsideWrite.find("ul[name=uploadImages]").append(bugs.connect.story.getFeedImageHtml(bugs.connect.story.getThumnailImagePath(element.image_path), element.image_path, element.image_size, element.bside_feed_image_id));
								});
								//이미지 noti 체크
								bugs.connect.story.changeFeedImage($layerBsideWrite);
							}

							var bsideFeedAppendedContent = data.bsideFeed.bsideFeedAppendedContent;
							if(bsideFeedAppendedContent != null){
							    if(bsideFeedAppendedContent.appendType == "ALBUM" &&
                                    bsideFeedAppendedContent.album != null){
                                    var result = {
                                        type : "ALBUM",
                                        appended_album_id : bsideFeedAppendedContent.album.album_id,
                                        albumTitle : bsideFeedAppendedContent.album.title,
                                        appended_artist_id : bsideFeedAppendedContent.album.artist_id,
                                        artistName : bsideFeedAppendedContent.album.artist_disp_nm,
                                        albumType : bsideFeedAppendedContent.album.album_tp,
                                        release_ymd : bsideFeedAppendedContent.album.release_ymd.substring(0,4)+"."+
                                                        bsideFeedAppendedContent.album.release_ymd.substring(4,6)+"."+
                                                        bsideFeedAppendedContent.album.release_ymd.substring(6,8),
                                        multi_artist_infoset : bsideFeedAppendedContent.album.multi_artist_infoset || ""
                                    };
                                    bugs.connect.story.attach_add(result);

                                }else if(bsideFeedAppendedContent.appendType == "TRACK" &&
                                    bsideFeedAppendedContent.track != null){
                                    var result = {
                                        type : "TRACK",
                                        appended_track_id : bsideFeedAppendedContent.track.track_id,
                                        trackTitle : bsideFeedAppendedContent.track.track_title,
                                        appended_artist_id : bsideFeedAppendedContent.track.artist_id,
                                        artistName : bsideFeedAppendedContent.track.artist_nm,
                                        appended_album_id : bsideFeedAppendedContent.track.album_id,
                                        isAdult : bsideFeedAppendedContent.track.adult_yn || 'N'
                                    };
                                    bugs.connect.story.attach_add(result);

                                }else if(bsideFeedAppendedContent.appendType == "ARTIST" &&
                                    bsideFeedAppendedContent.artist != null){
                                    var result = {
                                        type : "ARTIST",
                                        appended_artist_id : bsideFeedAppendedContent.artist.artist_id,
                                        artistName : bsideFeedAppendedContent.artist.disp_nm
                                    };
                                    bugs.connect.story.attach_add(result);
                                }

                            }

							$('ul#bsideArtistSelectUl').attr("value", data.bsideFeed.artist_id);
							$('a#bsideArtistName').text(data.bsideFeed.artist.artist_nm);
							$('a#bsideArtistName').off('click');

						}
						$layerBsideWrite.find("p.placeholder").hide();
					}
				});
			}
			
		}
	};
	
	bugs.layer.showLayer(layerParams);
};

bugs.connect.story.doFileUpload = function(){
	var ieModeCheck = bugs.browser.getInternetExplorerVersion();
	if(ieModeCheck < 0 || ieModeCheck >= 10){
		$('#fileupload').click();
	}else{
		alert('사진 올리기는 Internet Explorer 10 이상에서만 이용하실 수 있습니다.\n브라우저를 업그레이드 하시거나, Chrome 브라우저를 이용해 주세요.');
		return false;
	}
};

bugs.connect.story.hideFeedWriteLayer = function(){
	bugs.layer.hideLayer(bugs.connect.story.FeedWriteLayerName, true);
};

bugs.connect.story.getThumnailImagePath = function(path, width, height) {
	width = width || 200;
	height = height || 200;
	return "http://image.bugsm.co.kr/thumb/fitin/"+ width +"x"+ height +"/bs/bside" + path;
};

bugs.connect.story.getFeedImageHtml = function(src, path, size, feedImageId){
	return '<li><span><img src="' + src + '" path="' + path + '" size="' + size + '" feedImageId="' + feedImageId + '" /></span><button type="button" onclick="bugs.connect.story.deleteFeedImage(this);bugs.wiselog.area(\'bside_write_01_03\');">삭제</button></li>';
};

bugs.connect.story.deleteFeedImage = function(deleteButton){
	var $layerBsideWrite = $(deleteButton).closest('aside.layerBsideWrite');
	$(deleteButton).closest('li').hide();
	bugs.connect.story.changeFeedImage($layerBsideWrite);
};

bugs.connect.story.changeFeedImage = function($layerBsideWrite){
	
	$layerBsideWrite.find("div.innerScroll").show();
	var imageLength = $layerBsideWrite.find("ul[name=uploadImages]").find("li:visible").size();
	if(imageLength == 0){
		var htmlNoti = '<p class="noti">글과 함께 사진을 첨부할 수 있습니다.</p>';
		if($layerBsideWrite.find("p.noti").length == 0){
			$layerBsideWrite.find("div.uploadset").prepend(htmlNoti);
		}
		$layerBsideWrite.find("textarea[name=content]").css("height", "366px");
		$layerBsideWrite.find("div.innerScroll").hide();
		
	}else if(0 < imageLength && imageLength <= 7){	//한줄 
		$layerBsideWrite.find("textarea[name=content]").css("height", "342px");
		$layerBsideWrite.find("div.jspContainer").css("height", "70px");
		$layerBsideWrite.find("p.noti").remove();
		
	}else if(7 < imageLength && imageLength <= 14){	//두줄 
		$layerBsideWrite.find("textarea[name=content]").css("height", "282px");
		$layerBsideWrite.find("div.jspContainer").css("height", "130px");
		$layerBsideWrite.find("p.noti").remove();
		
	}else{											//세줄
		$layerBsideWrite.find("textarea[name=content]").css("height", "222px");
		$layerBsideWrite.find("div.jspContainer").css("height", "190px");
		$layerBsideWrite.find("p.noti").remove();
		
	}
};

bugs.connect.story.cheakFeedContents = function($layerBsideWrite){
	
	if($layerBsideWrite.find("ul[name=uploadImages]").find("li:visible").size() > 30){
		alert("하나의 소식에는 최대 30장의 사진을 첨부할 수 있습니다.");
		return false;
	}
	
	return true;
};

bugs.connect.story.deleteFeed = function(bsideFeedId){
	
	if(bsideFeedId <= 0){
		return false;
	}
	
	bugs.confirm('한 번 삭제된 글은 복원할 수 없습니다.<br/>정말 삭제하시겠습니까?', function() {
		$.ajax({
			url : g_urlAjax + "/connect/ajax/feed/delete",
			type : "post",
			data : {bsideFeedId : bsideFeedId},
			success : function(data){
//				console.log(data);
				if(data.result){
					bugs.layer.hideLayer(bugs.connect.story.FeedAddActionsLayerName, true);
					location.reload();
				}else{
					if(data.code == "NOT_LOGGED"){
						alert("로그인 후 다시 시도해주시기 바랍니다.");
					}else if(data.code == "NO_BSIDE_ARTIST"){
						alert("해당 Bside 아티스트가 아닙니다.");
					}else{
						alert("잠시 후 다시 시도해주시기 바랍니다.");
					}
				}
			},
			error : function(){
				alert("잠시 후 다시 시도해주시기 바랍니다.");
			}
		});
	});
};

bugs.connect.story.userReportFeed = function(obj, bsideFeedId){
	param = {
		target_type : bugs.userReport.TARGET_TYPE.BSIDE_FEED,
		target_id : bsideFeedId,
		caller : obj
	};
	bugs.userReport.commonCheckUI(param);
};
	
bugs.connect.story.submitFeed = function($layerBsideWrite, bsideFeedId){
	
	if(!bugs.connect.story.cheakFeedContents($layerBsideWrite)){
		return null;
	}
	
	//parameter setting
	bsideFeedId = bsideFeedId || 0;
	
	var content = $layerBsideWrite.find("textarea[name=content]").val();
	
	var feedType = "STORY";
	if($layerBsideWrite.find("ul[name=uploadImages]").find("li:visible").length > 0){ //이미지가 있을 때 
		feedType = "STORYIMAGE";
	}
	
	var imageInfos = "";
	$layerBsideWrite.find("ul[name=uploadImages]").find("li").each(function(){
		var image_del_yn = $(this).find("img").is(":visible") ? "N" : "Y";
		if(imageInfos != ""){
			imageInfos += ",";
		}
		imageInfos += $(this).find("img").attr("path") + "&&" + $(this).find("img").attr("size") + "&&" + $(this).find("img").attr("feedImageId") + "&&" + image_del_yn;
	});
	
	if(bugs.valid.empty(content) && feedType == "STORY"){
		alert("내용을 입력해 주세요.");
		return null;
	}
	
	var artistId = $('ul#bsideArtistSelectUl').attr("value") || 0;

	params = {
			artist_id : artistId,
			bside_feed_id : bsideFeedId,
			feed_type : feedType,
			content : content,
			status : "OK",
			imageInfos : imageInfos
		};

	// 첨부음악 파라메터 추가
    for(index in bugs.connect.story.attach_type){
        var $attachTag = $layerBsideWrite.find('[type='+ bugs.connect.story.attach_type[index] +']');
        var attributeName = 'appended_'+ bugs.connect.story.attach_type[index].toLowerCase() +'_id';

        if($attachTag.length > 0){
            console.log($($attachTag[0]).attr(attributeName));
            params[attributeName] = $($attachTag[0]).attr(attributeName);
        }
    }
	//parameter setting end
	
//	console.log(params);
	
	$.ajax({
		url : g_urlAjax + "/connect/ajax/feed/post",
		type : "post",
		data : params,
		success : function(data){
//			console.log(data);
			if(data.result){
				bugs.connect.story.hideFeedWriteLayer();
				window.open(g_urlMusic + "/artist/" + data.artistId + "/story");
			}else{
				if(data.code == "NOT_LOGGED"){
					alert("로그인 후 다시 시도해주시기 바랍니다.");
				}else if(data.code == "NO_BSIDE_ARTIST"){
					alert("해당 Bside 아티스트가 아닙니다.");
				}else{
					alert("잠시 후 다시 시도해주시기 바랍니다.");
				}
			}
		},
		error : function(){
			alert("잠시 후 다시 시도해주시기 바랍니다.");
		}
	});
};

bugs.connect.story.fitImageSize = function(obj, imgSrc, maxWidth, maxHeight) {
	
	if(obj.height >= maxHeight || obj.width >= maxWidth){
		$(obj).show();
		return;
	}
	var image = new Image();

	image.onload = function(){
	
		var width = image.width;
		var height = image.height;
		
		var scalex = maxWidth / width;
		var scaley = maxHeight / height;
		
		var scale = (scalex < scaley) ? scalex : scaley;
		
		$(obj).width(scale * width);
		$(obj).height(scale * height);
		
		$(obj).show();
	};
	image.src = imgSrc;
};

bugs.connect.story.thumnailImageChange = function(obj) {
	
	var $photoDiv = $(obj).closest('#photoDiv');
	var $thumbnailSpan = $photoDiv.find('span.thumbnail');
	var $thumbnailDiv = $photoDiv.find('div.thumbnail');
	
	$thumbnailSpan.each(function(){
		var $img = $(this).find('img');
		var $anchor = $(this).find('a');
		$img.attr('onload', 'return false;');
//		$img.css("width", "auto");
//		$img.css("height", "auto");
		$img.attr('src', $img.attr('bigImageSrc'));
		$(this).replaceWith('<div class="thumbnail">' + $(this).html() +'</div>');
	});
	
	$thumbnailDiv.each(function(){
		var $img = $(this).find('img');
		var $anchor = $(this).find('a');
		$anchor.attr('onclick', '');
		$anchor.attr('target', '_blank');
		$anchor.attr('href', $img.attr('originalImageSrc'));
	});
};

bugs.connect.story.fitImage = function(obj, maxWidth, maxHeight) {
	setTimeout(function(){
		var imgRatio = obj.height / obj.width;
//		console.log(imgRatio);
		if(imgRatio > 1){
			$(obj).css("max-height", "none");
		}else{
			$(obj).css("max-width", "none");
			$(obj).css("margin-left", -(obj.width - maxWidth >> 1));
		}
	},500);
};

// 첨부 시작
bugs.connect.story.attach_searchLayerName = "attach_search";
bugs.connect.story.attach_itemLayerName = "attach_storyitem";
bugs.connect.story.attach_type = {
    TRACK : "TRACK",	//트랙
    ALBUM : "ALBUM",	//앨범
    ARTIST : "ARTIST"	//아티스트
};

bugs.connect.story.attach_showSearchLayer = function(params){
    var params = params || {};

    checkLoginParams = {};
    checkLoginParams.success = function(data){

        if(!data){
            msg = "로그인 후 이용해 주세요.";
            if(confirm(msg)){
                bugs.member.login();
            }
            return;
        }

        var layerParams = {

            name : bugs.connect.story.attach_searchLayerName,
            caller : params.caller,
            beforeShow : function(layer){
                function _waitAttachLibLoad(){
                    try{
                        var setLayerParam = {
                            layer : layer,
                            targetElement : params.caller,
                            caller : params.caller,
                            callBackFunc : function(cbParam){
                                bugs.connect.story.attach_add(cbParam);
                            }
                        };
                        bugs.attach.musicSearch.setLayer(setLayerParam);
                    }
                    catch(e){
                        //alert("error");
                        //console.debug(e);
                        setTimeout(_waitAttachLibLoad, 100);
                    }
                }
                _waitAttachLibLoad();
            }
        };

        bugs.layer.showLayer(layerParams);

    };

    bugs.member.getLoginUser(checkLoginParams);

};

bugs.connect.story.attach_add = function(param){

    var param = param || {};

    if(param.type == bugs.connect.story.attach_type.TRACK){
        param.image = bugs.url.albumThumbnail(param.appended_album_id, 70);
    }
    else if(param.type == bugs.connect.story.attach_type.ALBUM){
        param.image = bugs.url.albumThumbnail(param.appended_album_id, 70);
    }
    else if(param.type == bugs.connect.story.attach_type.ARTIST){
        param.image = bugs.url.artistThumbnail(param.appended_artist_id, 70);
    }

    layerParams = {
        name : bugs.connect.story.attach_itemLayerName,
        complete : function(){
            afterReadyLayer();
        }
    };
    bugs.layer.showLayer(layerParams);

    function afterReadyLayer(){
        html = bugs.layer.cache.html[bugs.connect.story.attach_itemLayerName];

        for(var prop in param){
            regexp = new RegExp("{" + prop + "}", "g");
            html = html.replace(regexp, param[prop]);
        }

        addItem = null;
        addItem = $(html).find("[type=" + param.type + "]");

        if(addItem){
            addItem.find(".btnDelete").click(function(){
                bugs.connect.story.attach_remove();
            });

            // if(param.multi_artist_infoset == ""){
            //     addItem.find("#attachMultiArtistName").hide();
            // }

            if(param.isAdult != "Y"){
                addItem.find("span.o19").remove();
            }

            bugs.connect.story.attach_remove();

            $("#musicUploadNoti").hide();

            $("#bsideFeedAttachArea").append(addItem);
        }

        // bugs.comment.arrangeLayout();
    }
};

bugs.connect.story.attach_remove = function(param){
    $("#musicUploadNoti").show();
    $("#bsideFeedAttachArea").html("");
    bugs.layer.hideLayer(bugs.connect.story.attach_itemLayerName, true);
};

//첨부 끝

/*-----/js/bugs/bugs.connect.story.js / end -----*/

/*-----/js/bugs/bugs.connect.graph.js / start -----*/
var bugs = bugs || {};

bugs.connect.graph = bugs.connect.graph || {};

bugs.connect.graph.showPeriodLayer = function(target, layer){
    bugs.wiselog.area('bside_manage_03_05');
    if( $(layer).css('display') === 'none' ){
        $(layer).css({ 'left' : $(target).offset().left - 185,
                        'top' : $(target).offset().top + 35,
                        'display' : 'block'});
    }
};

bugs.connect.graph.init = function(contentId, contentType, artistId, startDate, endDate, period, musicType, isConnect) {
    var rootLayer = $('.layerStatisticsTrackVideo');
    var rootDatePicker = $('#layer_periodPickerLayer');
    var rootlistener = $('#listenerAnalysis');
    var ajaxUnit = 'DAY';

    var theme = {
        series: {
            colors: ['#ff7e76'],
            dot: {
                fillColor: '#fff',
                fillOpacity: 1,
                radius: 4,
                strokeColor: '#ff7e76',
                strokeOpacity: 1,
                strokeWidth: 2,
                hover: {
                    fillOpacity: 1,
                    radius: 7,
                    strokeOpacity: 1,
                    strokeWidth: 3
                }
            }
        }
    };

    var layer_chartTooltipOption = {
        offsetY: -40,
        offsetX: -5,
        template: function (category, item, timestamp) {
            var itemDate = new Date(timestamp);

            var detail = '';
            var month = itemDate.getMonth() + 1;
            var date = itemDate.getDate();
            var week = Math.ceil(itemDate.getDate()/7);

            if ( period === "recentWeek" || period === "recentMonth" || ajaxUnit === "DAY")
                detail = month + '월 '+ date + '일';
            else if ( period === "recent3Months" || ajaxUnit === "WEEK" )
                detail = month + '월 '+ week + '주';
            else if ( period === "recentYear" || ajaxUnit === "MONTH" )
                detail = month + '월';
            else
                detail = month +'월 ' + date + '일';

            var tooltipLabel = itemDate.getFullYear() + '년 ' + detail;

            var tooltipElem = $('#layer_tooltip');
            tooltipElem.find('aside').show();
            tooltipElem.find('.date').text(tooltipLabel);
            tooltipElem.find('.count').text(bugs.utils.addCommas(item.value) + '회');

            return tooltipElem.prop('outerHTML');
        }
    };

    var getDateFormat = function(dateValue) {
        var year = dateValue.getFullYear();
        var month = dateValue.getMonth() + 1;
        var date = dateValue.getDate();
        var week = Math.ceil(date/7);

        if( period === 'recentWeek' || period === 'recentMonth' || ajaxUnit === 'DAY'){
            return month + '월 '+ date + '일';
        }
        else if( period === 'recent3Months' || ajaxUnit === 'WEEK'){
            return month + '월 '+ week + '주';
        }
        else if( period === 'recentYear' || ajaxUnit === "MONTH") {
            return month + '월';
        }
        else if ( ajaxUnit === "YEAR" ){
            return year + '년';
        }
        else {
            return month +'월 ' + date + '일';
        }
    };

    var layer_options = {
        theme: 'newTheme',
        chart: {
            width: rootLayer.find('.lineGraph').width(),
            height: 360,
            title: false
        },
        series: {showDot: true},
            xAxis: {
                type: 'custom',
                dateFormat: getDateFormat
            },
        tooltip: layer_chartTooltipOption,
        legend: {
            visible: false,
            showCheckbox: false
        },
        chartExportMenu: {visible: false}
    };

    var layer_LR_lineData = {
        categories: [0],
        series: [{data: [0]}]
    };

    tui.chart.registerTheme('newTheme', theme);
    var layerChartContainer = document.getElementById('layerLineChart');
    var LayerChart = tui.chart.lineChart(layerChartContainer, layer_LR_lineData, layer_options);


    if (!musicType || typeof (musicType) === "undefined") {
        rootLayer.find("select[name='listenerAction']").val('LISTEN').prop('selected', true);
    } else {
        rootLayer.find("select[name='listenerAction']").val(musicType).prop('selected', true);
    }

    var downloadOption = rootLayer.find("select[name='listenerAction'] option[value='DOWNLOAD']");
    isConnect = (typeof(isConnect) === 'boolean') ? isConnect : true;

    if (contentType.toUpperCase() === 'MV' || isConnect === false) {
        if (downloadOption.length > 0) {
            downloadOption.remove();
        }
    }

    if (isConnect === false) {
        $('.listSupport li').remove();
        $('.listSupport').append('<li>직접 올리지 않은 곡/영상의 통계는 등록을 완료한 시점부터 집계합니다.</li>' +
            '<li>통계는 아티스트 본인과 소속사만 조회할 수 있습니다.</li>');
    }

    $.get(
        g_urlAjax +"/connect/statistics/ajax/detail",
        {
            startDate : startDate,
            endDate : endDate,
            music_type : musicType,
            period : period,
            content_type : contentType,
            content_id : contentId,
            artist_id : artistId
        },
        function(data){
            chartDraw(data);
            setChartEvent(rootlistener);
        });

    var sendToUpdate = function(_musicType, _period, isAction){
        $.get(
            g_urlAjax +"/connect/statistics/ajax/detail",
            {
                startDate : startDate,
                endDate : endDate,
                music_type : _musicType,
                period : _period,
                content_type : contentType,
                content_id : contentId,
                artist_id : artistId
            },
            function(data){
                if(isAction){
                    actionChartDraw(data);
                } else {
                    chartDraw(data);
                    setChartEvent(rootlistener);
                }
            }
        );
    };

    var layer_startCal = rootDatePicker.find('.startCalendar');
    var layer_endCal = rootDatePicker.find('.endCalendar');

    // layer start calendar
    rootDatePicker.find(".calStartInput").click(function(){
        layer_endCal.css({'display':'none'});

        if(layer_startCal.attr('class').toString().split(' ')[1] === 'hasDatepicker')
            layer_startCal.empty().removeClass('hasDatepicker');

        periodDatePicker(rootDatePicker, $(this), layer_startCal);
        layer_startCal.css({'display':'block'});
    });

    // layer end calendar
    rootDatePicker.find(".calEndInput").click(function(){
        layer_startCal.css({'display':'none'});

        if(layer_endCal.attr('class').toString().split(' ')[1] === 'hasDatepicker')
            layer_endCal.empty().removeClass('hasDatepicker');

        periodDatePicker(rootDatePicker, $(this), layer_endCal);
        layer_endCal.css({'display':'block'});
    });

    // 정해진 기간 선택
    rootDatePicker.find("button").click(function() {
        var musicType = rootLayer.find("select[name='listenerAction']").val();
        var period = this.id;
        var startDateSelected = rootDatePicker.find("#startDate").val().replace(/\./g,"");
        var endDateSelected = rootDatePicker.find("#endDate").val().replace(/\./g,"");

        if( period === "selectedPeriod" && (!startDateSelected || !endDateSelected)){
            alert("날짜를 선택해 주세요."); return;
        }
        startDate = startDateSelected;
        endDate = endDateSelected;

        rootDatePicker.find("#startDate").val('');
        rootDatePicker.find("#endDate").val('');
        sendToUpdate(musicType, period, false);
        rootDatePicker.hide();
    });

    var actionChartDraw = function(data){
        var layerPeriodText = rootLayer.find('#layer_periodText');

        period = data.period;
        startDate = data.start_date;
        endDate = data.end_date;
        ajaxUnit = data.unit;

        if(data.period === 'recentWeek')
            layerPeriodText.find('span').text('최근 1주일');
        else if (data.period === 'recentMonth')
            layerPeriodText.find('span').text('최근 1개월');
        else if (data.period === 'recent3Months')
            layerPeriodText.find('span').text('최근 3개월');
        else if (data.period === 'recentYear')
            layerPeriodText.find('span').text('최근 1년');
        else if (data.period === 'selectedPeriod'){
            layerPeriodText.find('span').text(parseDate(startDate)+'~'+parseDate(endDate));
        }

        // 데이터 없을 경우 처리
        if(!data || !data.actionList || typeof (data.actionList) === "undefined"
            || typeof(data.totalCount) === "undefined" || data.totalCount === 0 ){
            rootLayer.find('.listenerResponse .lineGraph').hide();
            rootLayer.find('.listenerResponse .nodata').fadeIn();
            rootLayer.find('.listenerResponse .sectionTitle .count strong').text("0회");
            return false;
        }

        var ajaxMusicData = [];
        var ajaxMusicCategories = [];
        var actionList = data.actionList;

        rootLayer.find('.listenerResponse .lineGraph').fadeIn();
        rootLayer.find('.listenerResponse .nodata').hide();

        // 기간별 포맷
        for(var i=0; i < actionList.length; i++){
            if(actionList[i].date != null && actionList[i].count != null){
                ajaxMusicCategories.push(new Date(actionList[i].date));
                ajaxMusicData.push(actionList[i].count);
            }
        }
        rootLayer.find('.listenerResponse .sectionTitle .count strong').text(bugs.utils.addCommas(data.totalCount)+"회");
        layer_LR_lineData.categories = ajaxMusicCategories;
        layer_LR_lineData.series[0].data = ajaxMusicData;

        // 라인 차트 새로 그리기
        $('#layerLineChart').find('.tui-chart').remove();
        LayerChart = tui.chart.lineChart(layerChartContainer, layer_LR_lineData, layer_options);
    };

    var listenerChartDraw = function(data){

        if(!data || !data.listenerList || typeof (data.listenerList) === "undefined"
            || typeof(data.total_listener) === "undefined" || data.total_listener === 0){
            rootLayer.find('.barGraph').hide();
            rootLayer.find('.listenerAnalysis .nodata').show();
            rootlistener.find('.resultAll .male strong').text('0%');
            rootlistener.find('.resultAll .female strong').text('0%');
            return false;
        }

        var listenerList = data.listenerList;
        var totalListener = data.total_listener;
        var femaleListener = data.female_listener;
        var maleListener = data.male_listener;
        var chartBarList = [];

        rootLayer.find('.listenerAnalysis .barGraph').show();
        rootLayer.find('.listenerAnalysis .nodata').hide();

        // get data
        for(var i=0; i < listenerList.length; i++){
            var listenerItem = {};
            listenerItem.range = listenerList[i].range;
            listenerItem.sum = listenerList[i].sum;
            listenerItem.age_ratio = listenerList[i].age_ratio;
            listenerItem.female_ratio = listenerList[i].female_ratio;
            listenerItem.male_ratio = listenerList[i].male_ratio;
            chartBarList.push(listenerItem);
        }

        var femaleRatio = ( femaleListener * 100 ) / totalListener;
        var maleRatio = ( maleListener * 100 ) / totalListener;

        // get selector
        var graph = rootlistener.find('.barGraph ul');
        var ratio = rootlistener.find('.resultAll');

        // set text
        ratio.find('.male strong').text(Math.round(maleRatio*10)/10+'%');
        ratio.find('.female strong').text(Math.round(femaleRatio*10)/10+'%');
        ratio.find('.male strong').attr('ratio', Math.round(maleRatio*10)/10+'%');
        ratio.find('.female strong').attr('ratio', Math.round(femaleRatio*10)/10+'%');

        // 차트 새로 그리기
        graph.empty();
        var chartBar = "";

        $.each (chartBarList, function(i){

            chartBar += "<li>";
            if(chartBarList[i].sum !== 0)
                chartBar += '<strong class="xAxis">'+chartBarList[i].range+'</strong>';
            else
                chartBar += '<span class="xAxis">'+chartBarList[i].range+'</span>';
            chartBar += '<div class="bar" style="height:'+chartBarList[i].age_ratio+'%">';
            if(chartBarList[i].age_ratio !== 0)
                chartBar += '<span class="all">'+Math.round(chartBarList[i].age_ratio*10)/10+'%</span>';
            chartBar += '<span class="female" style="height:'+chartBarList[i].female_ratio+'%"></span>';
            chartBar += ' <span class="male" style="height:'+chartBarList[i].male_ratio+'%"></span>';
            chartBar += '</div>';
            // tooltip
            chartBar += '<aside class="layer tooltip basic" style="display:none;">'
                +'<div class="layerTapBtm"></div><section class="layerContents">'
                +'<div class="male"><span></span> 남성 <strong>'+Math.round(chartBarList[i].male_ratio*10)/10+'%</strong></div>'
                +'<div class="female"><span></span> 여성 <strong>'+Math.round(chartBarList[i].female_ratio*10)/10+'%</strong></div></section></aside>';
            chartBar += '</li>';
        });

        graph.append(chartBar);
    };

    // === 전체 차트 그리기
    var chartDraw = function(data){
        if(data == null)
            return false;

        rootLayer.find('.layer-title h1 strong').text(data.content_title);
        actionChartDraw(data);	 	// 청취자 반응 차트
        listenerChartDraw(data);	// 청취자 분석 차트

        return true;
    };

// 다른 곳 클릭 시 기간선택 레이어 닫기
    $(document).mouseup(function(e){
        var targetLayer = $('#layer_periodPickerLayer');
        if( targetLayer.has(e.target).length === 0 ) targetLayer.css({'display':'none'});
    });

    var periodDatePicker = function(rootElem, curInput, curCal) {
        curCal.datepicker({
            minDate: new Date(2017, 1 - 1, 1),
            maxDate : "-1d",
            firstDay: 1,
            dateFormat: "yy.mm.dd",
            dayNames:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],
            dayNamesMin:["S","M","T","W","T","F","S"],
            monthNames:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
            showMonthAfterYear:true,
            beforeShowDay: function(date) {
                $(this).find('.ui-datepicker').removeClass('ui-widget-content');
                $(this).find('.ui-datepicker').css({'box-shadow':'none', 'padding': 0});

                var dateFormat = $(this).datepicker("option","dateFormat");
                var date1 = $.datepicker.parseDate(dateFormat, rootElem.find('.calStartInput').val());
                var date2 = $.datepicker.parseDate(dateFormat, rootElem.find('.calEndInput').val());

                if(date1 && curInput.attr('class') === 'calEndInput' && date < date1)
                    return [false,""];	// startDate 있을 때, 더 이른 날짜 선택 불가
                if (date2 && curInput.attr('class') === 'calStartInput' && date2 < date)
                    return [false, ""]; // endDate 있을 때, 더 늦은 날짜 선택 불가

                return [true, date1 && ((date.getTime() === date1.getTime()) || (date2 && date >= date1 && date <= date2)) ? "ui-state-active" : ""];
            },
            onSelect: function(dateText) {
                curInput.val(dateText);
                $(this).hide();
            }
        });
    };

    var parseDate = function(str) {
        if(!/^(\d){8}$/.test(str)) return null;

        return ( str.substr(0,4) +'.'+ str.substr(4,2) + '.'+ str.substr(6,2) );
    };

    var setChartEvent = function(section){
        section.find('.barGraph li').mouseover(function(){
            $(this).find('.tooltip').css({"display":"block", "bottom": $(this).find('.bar').height()});
            $(this).find('.bar').addClass('over');
        }).mouseleave(function(){
            $(this).find('.tooltip').css({"display":"none"});
            $(this).find('.bar').removeClass('over');
        });
    };

    // 청취자 반응 [SELECT] 변경
    rootLayer.find("select[name='listenerAction']").change(function(){
        bugs.wiselog.area('bside_manage_03_06');

        $(this).each(function(){
            if($(this).val() != null || $(this).val() !== '')
                sendToUpdate($(this).val(), period, true);
        });
    });
};

bugs.connect.graph.showLayer = function(contentId, contentType, artistId, startDate, endDate, period, musicType, isConnect){

    var layerParams = {
        name : "connect_statistics_trackVideolayer",
        complete : function(){
            bugs.connect.graph.init(contentId, contentType, artistId, startDate, endDate, period, musicType, isConnect);
        }
    }; // layer

    bugs.layer.showLayer(layerParams);
};

/*-----/js/bugs/bugs.connect.graph.js / end -----*/

/*-----/js/bugs/bugs.recommend.js / start -----*/
var bugs = bugs||{};
bugs.recommend = bugs.recommend || {};

bugs.recommend.Layername = "recommend_commonList";
bugs.recommend.UiType = {
    LIST : "list",
    ONE : "one"
}

bugs.recommend.ArrowPostion = {
    TopCenter :     "topCenter",
    TopRight :      "topRight"
}

bugs.recommend.showLayer = function(params){
    var params = params||{};
	bugs.recommend.hideLayer();
	params.name = bugs.recommend.Layername;
	bugs.layer.showLayer(params);
};

bugs.recommend.hideLayer = function(params){
    var params = params||{};
	bugs.layer.hideLayer(bugs.recommend.Layername, true);
};

bugs.recommend.showList = function(params){
    var params = params||{};
    bugs.recommend.Layername = "recommend_commonList";
    bugs.recommend.showLayer(params);
}

bugs.recommend.showOne = function(params){
    var params = params||{};
    bugs.recommend.Layername = "recommend_commonOne";

    try{
        if(!params.data.result.object)
            return;

        if(params.data.result.object.likes
            || params.data.result.artist_next || params.data.result.pd_next
            || params.data.result.artist_like || params.data.result.pd_like)
            return;
    }
    catch(e){
        return;
    }

    params.beforeShow = function(layer){
        var data = params.data.result.object;
        var type_nm;
        var image;
        var title;
        var link;
        var selected = false;
        var like_content_type;
        var next_content_type;
        var like_content_id;
        var next_content_id;
        var wl_close;

        if(params.recom_type == bugs.api.recommend.Type.Artist){
            type_nm = "아티스트";
            title = data.disp_nm;
            link = g_urlMusic + "/artist/" + data.artist_id;
            like_content_type = bugs.api.like.ContentType.ARTIST;
            next_content_type = bugs.api.like.NextContentType.ARTIST;
            like_content_id = data.artist_id;
            next_content_id = data.artist_id;
            wl_close = "S_ab_01_14";
        }
        else if(params.recom_type == bugs.api.recommend.Type.MusicPd){
            type_nm = "뮤직PD";
            title = data.nickname;
            link = g_urlMusic + "/musicpd/pdlistdetail/" + data.musicpd_info_id;
            like_content_type = bugs.api.like.ContentType.MUSICPD;
            next_content_type = bugs.api.like.NextContentType.MUSICPD;
            like_content_id = data.msrl;
            next_content_id = data.musicpd_info_id;
            wl_close = "S_mab_02_05";
        }
        selected = params.data.result.artist_like || data.likes;
        image = data.img_urls["200"];

        var head_title = type_nm + "를 좋아하고<br>새 음악과 스토리를 놓치지 마세요.";
        var image_alt = type_nm + " 대표이미지";

        if((data.bside_yn||"N") == "Y")
            layer.find(".badgeConnect").show();

        layer.find(".btnLike").removeClass("selected");
        if(data.likes == true)
            layer.find(".btnLike").addClass("selected")

        if(selected)
            layer.find(".btnLike").addClass("selected");
        else
            layer.find(".btnLike").removeClass("selected");

        layer.find(".btnLike").click(function(){
            var btn = $(this);
            bugs.like.toggle({
                content_type : like_content_type,
                content_id : like_content_id,
                eventTarget : this,
                apiSuccess : function(data){
                    if(btn.hasClass("selected")){
                        alert("좋아했습니다. 새소식이 나오면 알려드릴게요.");
                    }
                }
            });
        });

        layer.find(".btnClose").click(function(){
            bugs.api.like.next({
                next_content_type : next_content_type,
                object_id : next_content_id,
                complete : function(){
                    bugs.recommend.hideLayer();
                }
            });
            bugs.wiselog.area(wl_close);
        });

        layer.find("[nm=head_title]").html(head_title);
        layer.find("[nm=image]")
            .attr("src", image)
            .attr("alt", image_alt);
        layer.find("a.title").text(title);
        layer.find("a[nm=link]").attr("href", link);
        layer.find("[nm=arrow]").addClass(params.arrow_position);

        layer.find("a[nm=link]").click(function(e){
            if(bugs.player){
                window.open($(this).attr("href"));
                e.preventDefault();
            }
        });
    };
    bugs.recommend.showLayer(params);
}


bugs.recommend.show = function(params){
    var params = params || {};
    var defaultParams = {
        ui_type : bugs.recommend.UiType.LIST,
        arrow_position : bugs.recommend.ArrowPostion.TopCenter
    };

    params = bugs.object.copy({
        source : defaultParams,
        target : params
    });

    if(params.ui_type == bugs.recommend.UiType.LIST)
        bugs.recommend.showList(params);
    else
        bugs.recommend.showOne(params);
}
/*-----/js/bugs/bugs.recommend.js / end -----*/

/*-----/js/bugs/bugs.like.js / start -----*/
var bugs = bugs||{};
bugs.like = bugs.like || {};

bugs.like.LikeBtnSelector = "[nm=likeBtn], [nm=commonLikeBtn], .like";


bugs.like.set = function(params){
	var params = params || {};
	var defaultParams = {
		useDefaultHandler : true,
        showRecommendLayer : false,
        ui_type : bugs.recommend.UiType.LIST
	};

    var nParams = bugs.object.copy({
		source : defaultParams,
		target : params
	});

    

    if(nParams.content_type == bugs.api.like.ContentType.ES_ALBUM)
        nParams.recom_type = params.recom_type = bugs.api.recommend.Type.MusicPd;
    else
        nParams.recom_type = params.recom_type = bugs.api.recommend.Type.Artist;

    nParams.apiSuccess = function(data){

		if(nParams.useDefaultHandler)
            bugs.like.defaultUiHandler(params, data);

		if(nParams.customHandler)
            nParams.customHandler(params, data);

        if(nParams.showRecommendLayer){
            if(bugs.like.isSelectedCheck(params)){

                if(nParams.ui_type == bugs.recommend.UiType.ONE){
                    params.data = data;
                }
                bugs.recommend.show(params);
            }
            else{
                bugs.recommend.hideLayer();
			}
		}

		if(params.apiSuccess)
            params.apiSuccess(data);
	}

    bugs.api.like.set(nParams);
}


bugs.like.defaultUiHandler = function(params, data){
	if(!params.eventTarget)
		return;

    var _et = $(params.eventTarget);
	var like_cnt = data.result.likesCnt || data.result.likes_cnt || data.result.likes_count || 0;
	like_cnt = bugs.utils.addCommas(like_cnt);
	var like_group = _et.closest(".like_group, .lxlLikeArea, .lxlArea");
	var selected = bugs.like.isSelectedCheck(params);

	
    _et.closest(bugs.like.LikeBtnSelector).toggleClass("selected");
    _et.closest(bugs.like.LikeBtnSelector).find("em").text(like_cnt);

    
    var moreActBtn = like_group.find(".btnActions");
    if(moreActBtn.length == 1){
        var islikeyn = selected ? "Y" : "N";
        moreActBtn.attr("islikeyn", islikeyn);
    }

    
    var likeCntArea = like_group.find(".like_cnt");
    if(likeCntArea.length == 1){
        likeCntArea.text(like_cnt)
    }

    
    var recomNextBtn = like_group.find(".btnLikeRecommend");
    if(recomNextBtn.length == 1){
        if(!selected)
            recomNextBtn.addClass("dim").attr("disabled", "disabled");
        else
            recomNextBtn.removeClass("dim").removeAttr("disabled");
    }

    
    var  likeToolTip = like_group.find("#like_tooltip_area");
    if(likeToolTip.length == 1){
        if(!likeToolTip.is(":visible"))
            bugs.like._likeToolTipShow = true;
        if(!selected)
            likeToolTip.hide();
        else{
            if(!bugs.like._likeToolTipShow){
                likeToolTip.show();
                bugs.like._likeToolTipShow = true;
            }
        }
    }
}


bugs.like.defaultConfirmHandler = function(params){
    if( (params.content_type == bugs.api.like.ContentType.ARTIST || params.content_type == bugs.api.like.ContentType.MUSICPD)
        && (params.type == bugs.api.like.Type.DISLIKE) ){
        var msg = "앞으로는 새 소식을 받아볼 수 없습니다.\n정말 취소할까요?";
        if(!confirm(msg))
            return false;
    }

    return true;
}


bugs.like.toggle = function(params){
	var selected = bugs.like.isSelectedCheck(params);

	if(selected)
        params.like_type = bugs.api.like.LikeType.DISLIKE;
	else
        params.like_type = bugs.api.like.LikeType.LIKE;

    bugs.like.set(params);
}


bugs.like.isSelectedCheck = function(params){
    if(!params.eventTarget)
        return false;

    _et = $(params.eventTarget);
    var selected = false;

    if(_et.closest(bugs.like.LikeBtnSelector).hasClass("selected"))
    	selected = true;

    if(params.player)
        selected = ($(".btnLikeTrackCancel").is(":visible"));

	return selected;
}


bugs.like.setToggleCommonLikeButton = function(){
    $(".oxoCommonLikeBtn[like_content_type], [nm=commonLikeBtn][like_content_type]").each(function(){
        if(!$(this).attr("setToggleAllLikeButton")){
            $(this)
                .off("click", bugs.like.setToggleCommonLikeButton_onClick)
                .on("click", bugs.like.setToggleCommonLikeButton_onClick)
                .attr("setToggleAllLikeButton", "Y");
        }
    });
};


bugs.like.setToggleCommonLikeButton_onClick = function(e){
    var params = {
        eventTarget : e.target,
        content_type : $(e.target).attr("like_content_type"),
        content_id : $(e.target).attr("like_content_id"),
        apiError : function(data){
            if(data.ret_code ==  bugs.api.RETURN_CODE.NOT_LOGGED.code) {
                bugs.member.login();
            }
        }
    }

    
    var wl_like = $(e.target).attr("wl_like")||null;
    var wl_dislike = $(e.target).attr("wl_dislike")||null;
    var selected = bugs.like.isSelectedCheck( {eventTarget:e.target} );
    var wl_thisTime = selected ? wl_dislike : wl_like;
    if(wl_thisTime)
        bugs.wiselog.area(wl_thisTime);

    bugs.like.toggle(params);
};




bugs.like.next = bugs.like.next || {};


bugs.like.next.toggle = function(params){
    var nParams = bugs.object.copy({
        source : params
    });
    nParams.next_content_type = params.next_content_type;
    nParams.object_id = params.object_id;
    nParams.apiSuccess = function(data){
        $(params.eventTarget).addClass("dim").attr("disabled", "disabled");
    };
    bugs.api.like.next(nParams);
}


bugs.like.setNextCommonNextButton = function(){
    $("[nm=commonNextBtn][next_content_type]").each(function(){
        if(!$(this).attr("setNextCommonNextButton")){
            $(this)
                .off("click", bugs.like.setNextCommonNextButton_onClick)
                .on("click", bugs.like.setNextCommonNextButton_onClick)
                .attr("setNextCommonNextButton", "Y");
        }
    });
};


bugs.like.setNextCommonNextButton_onClick = function(e){
    console.log(e);
    return;

    var params = {
        eventTarget : e.target,
        next_content_type : $(e.target).attr("next_content_type"),
        object_id : $(e.target).attr("next_content_id"),
        apiError : function(data){
            if(data.ret_code ==  bugs.api.RETURN_CODE.NOT_LOGGED.code) {
                bugs.member.login();
            }
        }
    }
    bugs.like.next.toggle(params);
}


/*-----/js/bugs/bugs.like.js / end -----*/

/*-----/js/bugs/bugs.api.js / start -----*/
var bugs = bugs||{};
bugs.api = bugs.api||{};


bugs.api.RETURN_CODE = {
	SUCCESS : 			{code : 0,				msg : "SUCCESS",				desc : "성공"},
	NOT_LOGGED : 		{code : 200,			msg : "NOT_LOGGED",			desc : "로그인필요"}
}

bugs.api.ENV = {
	SERVCIE 	: "svc",
	QA 			: "qa",
	NONE		: ""
}


bugs.api.request = function(params){
	var apiParams = {
		version : 3,
		dataType : "json"
	};
	
	apiParams = bugs.object.copy({
		source : params,
		target : apiParams,
		overwrite : true
	});
	
	apiParams.success = function(data){
		if(data.ret_code == bugs.api.RETURN_CODE.SUCCESS.code){
			if(params.apiSuccess)
				params.apiSuccess(data);
		}
		else{
			if(params.apiError){
				params.apiError(data);
			}
			else{
				bugs.api.commonErrorHandler(data);
			}
		}
		
		if(params.success)
			params.success(data);
	}

    if(params.url.indexOf(0) != "/")
        params.url = "/" + params.url
	
	apiParams.url = g_urlAjax + "/api/" + apiParams.version + params.url;
	bugs.data.ajax(apiParams);
};


bugs.api.commonErrorHandler = function(data){
	
}

/*-----/js/bugs/bugs.api.js / end -----*/

/*-----/js/bugs/bugs.api.recommend.js / start -----*/
var bugs = bugs||{};
bugs.api = bugs.api || {};
bugs.api.recommend = bugs.api.recommend || {};

bugs.api.recommend.Type = {
	Artist : "artist",
	MusicPd : "musicpd/pd"
};


bugs.api.recommend.getList = function(params){
	var params = params || {};
    params.version = 5;
	params.url = "total_recommend";
	bugs.api.request(params);
};
/*-----/js/bugs/bugs.api.recommend.js / end -----*/

/*-----/js/bugs/bugs.api.like.js / start -----*/
var bugs = bugs||{};
bugs.api = bugs.api || {};
bugs.api.like = bugs.api.like || {};

bugs.api.like.LikeType = {
	LIKE :		"likes",
	DISLIKE :	"dislikes"
};

bugs.api.like.ContentType = {
	TRACK :		"track",
	ALBUM :		"album",
	MV :		"mv",
    ARTIST :	"artist",
    ES_ALBUM :	"musicpd/album",
	MUSICPD : 	"musicpd/pd"
};

bugs.api.like.NextContentType = {
    ARTIST :    "artist",
    MUSICPD :   "musicpd"
}


bugs.api.like.set = function(params){
    var params = params || {};
    params.version = 5
    params.method = "POST";
    params.url = "total_like";
    bugs.api.request(params);
};


bugs.api.like.next = function(params){
    var params = params || {};
    params.version = 5
    params.url = "total_like_next";
    params.content_type = params.next_content_type
    params.content_id = params.object_id
    bugs.api.request(params);
}
/*-----/js/bugs/bugs.api.like.js / end -----*/

/*-----/js/bugs/bugs.url.js / start -----*/
var bugs = bugs || {};


bugs.url = bugs.url || {};
bugs.url.v5 = bugs.url.v5 || {};

v5 = bugs.url.v5;

v5.Content_Type = {
	Track: "track",
	Album: "album",
	Artist: "artist/images",
	Musicpd: "pdinfo/images"
}

v5.getImageUrl = function(content_type, size, path){
	var imgUrl = g_urlClipimg + "/" + content_type + "/" + size + path
	return imgUrl
}

/*-----/js/bugs/bugs.url.js / end -----*/

/*-----/js/bugs/bugs.promotion.hangame.js / start -----*/
var bugs = bugs || {};

bugs.promotion = bugs.promotion || {};

bugs.promotion.hangame = bugs.promotion.hangame || {};

bugs.promotion.hangame = {
  alertHangameRestriction : function(isPayButton) {
    const PURCHASE_UNAVAILABLE_MSG = '한게임 제휴 혜택 제공 기간 중에는 듣기가 \n포함된 상품을 구매할 수 없습니다. 혜택 제공 \n기간 종료 후에 구매해 주세요.';
    const ACCOUNT_LINKING_GUIDE = '이 기능은 벅스 계정을 연동하면 이용할 수 있습니다. \n\'벅스 계정 연동하러 가기\' 버튼을 클릭하여 진행해주세요.\n기존에 벅스 계정이 있더라도 한게임 프로모션에 한해서는 새로운 벅스 계정 생성이 필요합니다.';

    const homeUrl = g_urlMusic;
    const okUrl = g_urlSecure + "/member/hangame/memberMain";
    const cancelUrl = g_urlMusic;

    const currentUrl = location.href;
    const isPayMenu = document.querySelector('.mnTicket') !== null;
    const isExcludedPayMenu = currentUrl.includes('offlineCoupon') || currentUrl.includes('chargecash');
    const isIncludedPayMenu = isPayMenu && !isExcludedPayMenu;
    const isCrewInfo = currentUrl.includes('crew/info');
    const isPlayer = currentUrl.includes('newPlayer') || currentUrl.includes('newRadio');

    function handleBuyDisabled() {
      alert(PURCHASE_UNAVAILABLE_MSG, function(){
        if (isPayMenu) location.replace(homeUrl);
      });
    }

    function handleConfirm(okUrl, cancelUrl) {
			bugs.confirm(ACCOUNT_LINKING_GUIDE, function() {
        isPlayer ? window.open(okUrl) : location.href = okUrl;
			}, function() {
				if (cancelUrl) {
					location.replace(cancelUrl);
				}
			});
		}

		try {
      if (isIncludedPayMenu || isPayButton) {
        handleBuyDisabled();
      } else {
        handleConfirm(okUrl, isExcludedPayMenu || isCrewInfo ? cancelUrl : null);
      }

			const hangameConfirm = document.getElementById('bugsConfirm');
			if (hangameConfirm) {
				const btnOk = hangameConfirm.querySelector('.btnOK');
				const btnCancel = hangameConfirm.querySelector('.btnCancel');
				if (btnOk) btnOk.textContent = '벅스 계정 연동하러 가기';
				if (btnCancel) btnCancel.remove();
			}
		}
		catch (e) {
			console.error('bugs.promotion.hangame.alertHangameRestriction error', e);
		}
  }
}

function handleRestrictedClick(event) {
  if (window.g_isGuest === undefined) {
    g_isGuest = false;
  }

  if (!g_isGuest) return;

  const restrictedValue = event.target.getAttribute('data-restricted');
  const restrictedButtonValue = event.target.getAttribute('data-restricted-button');

  if (restrictedValue && restrictedValue === 'hangame') {
    const isPayButton = restrictedButtonValue === 'pay';

    if (event.target.tagName === 'A' && event.target.getAttribute('target') === '_blank') {
      event.preventDefault();
    }
    event.preventDefault();
    event.stopImmediatePropagation();
    bugs.promotion.hangame.alertHangameRestriction(isPayButton);
  }
}

document.addEventListener('click', handleRestrictedClick, true);
/*-----/js/bugs/bugs.promotion.hangame.js / end -----*/

/*----- / start -----*/
