var QckInstall;

// [함수개요] 퀵매니저 설치 여부
// [리턴 값] Y:설치, N:미설치
function LF_QM_InstallYn()
{
    if(LF_QM_BSLoaderChk()==true){
        var strParam = unescape(LF_QM_GetCookie("SessionID"));
        var objBrokerCtrl = new LC_QM_BrokerControl('',strParam);
        return objBrokerCtrl.ControlInstallYn();
    }
}


// [함수개요] 퀵매니저 실행 여부
// [리턴 값] 0: 실행 중, 1: 실행 안함
function LF_QM_RunYn()
{
    if(LF_QM_BSLoaderChk()==true){
        var strParam = unescape(LF_QM_GetCookie("SessionID"));
        var objBrokerCtrl = new LC_QM_BrokerControl('',strParam);
        return objBrokerCtrl.GetQuickManagerRUFlag();
    }
}

// [함수 개요] 퀵매니저 실행
function LF_QM_Run()
{
    if(LF_QM_BSLoaderChk()) {
        var strParam = unescape(LF_QM_GetCookie("SessionID"));
        var objBrokerCtrl = new LC_QM_BrokerControl('',strParam);
        objBrokerCtrl.RunQuickManager(unescape(LF_QM_GetCookie("SessionID")));
    } else {
        LF_QM_BSLoaderInstall("run");
    }
}

// [함수 개요] 사용자 정보 Refresh
function LF_QM_Refresh()
{
    if(LF_QM_BSLoaderChk()==true){
        var strParam = unescape(LF_QM_GetCookie("SessionID"));
        var objBrokerCtrl = new LC_QM_BrokerControl('',strParam);
        objBrokerCtrl.RefreshMemberInfo();
    }
}

// [함수개요] 단품구매 완료 후 다운로드 처리(엠넷사용X)
function LF_QM_NotifyPPUDown()
{
    var strParam = unescape(LF_QM_GetCookie(""));
    var objBrokerCtrl = new LC_QM_BrokerControl("",strParam);
    objBrokerCtrl.NotifyPPUDown();
}

// [함수개요] 보안설정용
function LF_QM_SetRunnerImpl()
{
    var strParam = unescape(LF_QM_GetCookie(""));
    var objBrokerCtrl = new LC_QM_BrokerControl("",strParam);
    objBrokerCtrl.SetRunnerImpl();
}


// [함수 개요] 다운로드 (함수명 변경하면 안됨!!-MP3버튼 클릭시 호출되는 함수)
function LF_QM_DownLoad()
{
    // Set param value
    var strOriMediaID   = arguments[0];
    var strServiceCode  = (arguments[1])?arguments[1]:"";
    var strCallPage     = (arguments[2])?arguments[2]:"";

    var strMediaID      = LF_QM_FilteringMediaID(strOriMediaID,"media");

    // 데이타 무결성 최소 규칙 적용 (데이타 있다 없다 정도만)
    if (strMediaID.length <= 0 || strMediaID == "")
    {
        alert('다운로드 곡 정보가 없습니다.');
        return false;
    }

    if (strCallPage == "" || !strCallPage) {
        strMediaID     = LF_QM_SpecialAlbumFiltering(strMediaID, strCallPage);
        strOriMediaID  = strMediaID;
        strServiceCode = strServiceCode;
        strCallPage    = "";
        if (strMediaID.length <= 0 || strMediaID == "") {
            return false;
        }
    }

    // 고객센터를 통해 퀵매니저 사용 안할 경우
    if (LF_QM_GetCookie('QckNotUse')=="Y")
    {
                // 정회원 무료곡인경우,
                if (strCallPage.indexOf("128") > -1) {
                    var theURL = "http://newmember.mnet.com/LoginProc/loginChk.asp?songID="+strMediaID;
                    void(window.open(theURL, 'displayWindow', "width=552,height=460,resizable=no,scrollbars=0,top=0,left=0"));
                } else {
                    var theURL = "http://music.mnet.com/BuyLoginChk/index.asp?cpitemid="+strMediaID;
                    void(window.open(theURL, 'displayWindow_gogo', "width=552,height=460,resizable=no,scrollbars=0,top=0,left=0"));
                }
    }
    // 퀵매니저 호출
    else {
                if(!strServiceCode) {
                    // serviceCode 정보가 전달되지 않은경우 mediaID를 통해 serviceCode 생성(Default:aodd)
                    strServiceCode = LF_QM_FilteringMediaID(strOriMediaID,"make_code","aodd");
                } else {
                    strServiceCode = LF_QM_FilteringMediaID(strServiceCode,"servicecode");
                }

                // 호출페이지(0:바닥페이지 / 1,2,3:단품보관함 / 4:무제한DRM / 8:기간형 / 16:40곡 / 32:160곡 / 48:40&160곡 / 64:CP3 / 128:정회원무료 / 256:UCC녹음곡)
                if(!strCallPage) {
                    // CallPage 정보가 전달되지 않은경우 mediaID를 통해 CallPage 생성(Default:0)
                    strCallPage = LF_QM_FilteringMediaID(strOriMediaID,"make_code","0");
                } else {
                    strCallPage = LF_QM_FilteringMediaID(strCallPage,"callpage");
                }

                var strIDInfoScript = "<span id='QmediaID' style='display:none'>"+strMediaID+"</span>"+ "<span id='QserviceCode' style='display:none'>"+strServiceCode+"</span>"+ "<span id='QcallPage' style='display:none'>"+strCallPage+"</span>";
                document.body.insertAdjacentHTML('beforeEnd', strIDInfoScript);

                if(LF_QM_BSLoaderChk()) {
                    LF_QM_RealDownLoad(strMediaID, strServiceCode, strCallPage);
                } else {
                    LF_QM_BSLoaderInstall("");
                }
    }
}


function LF_QM_RealDownLoad()
{
    var strSessionID    ="";
    var strQMediaID     = (arguments[0])? arguments[0]: "";
    var strQServiceCode = (arguments[1])? arguments[1]: "";
    var strQCallPage    = (arguments[2])? arguments[2]: "";

    if (strQMediaID == "") {
        alert('다운로드 곡 정보가 없습니다.');
        return false;
    }

    if(LF_QM_GetCookie("SessionID")) {
        strSessionID = unescape(LF_QM_GetCookie("SessionID"));
    }

    // 퀵매니저 인스턴스
    var objBrokerCtrl = new LC_QM_BrokerControl("",strSessionID, strQMediaID, strQServiceCode, strQCallPage);
    objBrokerCtrl.RunNSendMetaInfo(strSessionID, strQMediaID, strQServiceCode, strQCallPage);
}


// [함수 개요] 통합모듈 설치여부 체크
function LF_QM_BSLoaderChk()
{
    var bInstallBSLoader = false;
    try{
        //var wcQckLauncher = new ActiveXObject("MNETHELPER2.MnetHelper217Ctrl.1");
        var wcQckLauncher = new ActiveXObject("NSAppHelper.NSAppHelperWizrd.MNET.1.1");

        if (wcQckLauncher) bInstallBSLoader = true;

    } catch(e) {
    }
    return bInstallBSLoader;
}



// [함수 개요] 통합모듈 설치 팝업 띄우기
function LF_QM_BSLoaderInstall(execType)
{
    var bRetVal = false;
    bRetVal = LF_QM_BSLoaderChk();

    if (!bRetVal)
    {
        QckInstall = window.open("http://download.mnet.com/_HelpDesk/QuickManager/QuickInstallPop.asp?execType="+execType,"Qck","width=503, height=577, status=yes, scrollbars=no, resizable=no, top=0, left=0");
        QckInstall.focus();
    }
    return bRetVal;
}

// [함수 개요] 전달받은 곡 ID들의 필터링해서 구분자를 ^ 로 변경
// [파라미터]
// strOrgMediaID : 아이디 문자열
// strRetType : 아이디들을 통한 서비스코드 생성(media/servicecode)
function LF_QM_FilteringMediaID(strOrgMediaID, strRetType)
{
    var strSplitter = "|";
    var strDelimiter = '^';
    var strFilterMediaID = strOrgMediaID;
    var strDefaultCode = (arguments[2])?arguments[2]:"";

    if(strRetType=="servicecode")
    {
        // 영문자를 제외한 나머지 문자는 구분자 값으로 치환한다.
        strFilterMediaID = strFilterMediaID.replace(/[^a-zA-Z0-9]/g,strSplitter);
    } else {
        // 숫자를 제외한 나머지 문자는 구분자 값으로 치환한다. (자바 스크립트 버전 문제는??? -> 업데이트 유도)
        strFilterMediaID = strFilterMediaID.replace(/[^a-zA-Z0-9\-]/g, strSplitter);
    }

    // Delimiter 값 단위로 배열을 만들고 배열 단위로 공백 값을 제외한 나머지 숫자 값만 문자열로 재 조합한다.
    var nCnt, arrFilteringID, strFilteringID
    strFilteringID = "";
    arrFilteringID = strFilterMediaID.split(strSplitter);

    // PlayBack ID 값 필터링
    for(nCnt = 0; nCnt < arrFilteringID.length; ++nCnt)
    {
        if (arrFilteringID[nCnt] != "" && arrFilteringID[nCnt].length >= 1)
        {
            if (strRetType == "make_code")
            {
                strFilteringID = (strFilteringID == "")?strDefaultCode:strFilteringID + strDelimiter + strDefaultCode;
            }
            else
            {
                strFilteringID = (strFilteringID == "")?arrFilteringID[nCnt]:strFilteringID + strDelimiter + arrFilteringID[nCnt];
            }
        }
    }
    return strFilteringID;
}

// [함수 개요] 쿠키 값 가져오기
function LF_QM_GetCookie( set_id )
{
    cookies = document.cookie+";";
    if((pos = cookies.indexOf( set_id + "=" ))== -1) return false;
    else {
        spos = cookies.indexOf( "=" , pos );
        epos = cookies.indexOf( ";" , spos );
        return ( cookies.substring( spos+1 , epos ) )
    }
}

// [함수 개요] 쿠키 세팅하기
function LF_QM_SetCookie( name, value, expiredays, path, domain )
{
    var todayDate = new Date(); 
    todayDate.setDate( todayDate.getDate() + expiredays ); 
    //document.cookie = name + "=" + escape( value ) + "; path=/; domain="+window.location.hostname+"; expires=" + todayDate.toGMTString() + ";"
    document.cookie = name + "=" + escape( value ) + "; path=/; domain=mnet.com; expires=" + todayDate.toGMTString() + ";"
}

// [함수 개요] 특정 앨범 Filter
function LF_QM_SpecialAlbumFiltering( mediaid )
{
    // 앨범단위 구매 예외처리 -- 이상준(2011.12.28)
	// This is it (185329)
	// Norwegian Wood OST (217322)
	// Song For Japan (219451)
	var strTargetAlb1 = "N";
	var strTargetAlb2 = "N";
	var strTargetAlb3 = "N";
    var strFilterID  = "";
    var str1 = "^1955515^1955516^1955517^1955518^1955519^1955520^1955521^1955522^1955523^1955524^1955525^1955526^1955527^1955528^1955529^1955530^1955531^1955532^1955533^1955534^";
    var str2 = "^2328749^2328750^2328751^2328752^2328753^2328754^2328755^2328756^2328757^2328758^2328759^2328760^2328761^2328762^";
    var str3 = "^2350511^2350512^2350513^2350514^2350515^2350516^2350517^2350518^2350519^2350520^2350521^2350522^2350523^2350524^2350525^2350526^2350527^2350528^2350529^2350530^2350531^2350532^2350533^2350534^2350535^2350536^2350537^2350538^2350539^2350540^2350541^2350542^2350543^2350544^2350545^2350546^2350547^2350548^";
	var result1 = "선택하신 곡 중에 Michael Jackson의 [This Is It] 앨범 수록곡이 포함되어 있습니다.\n\n[This Is It] 앨범은 권리사의 요청에 따라 앨범 단위의 구매만 가능합니다.\n\n앨범 페이지를 확인하시겠습니까?"
	var result2 = "선택하신 곡 중에 [Norwegian Wood OST] 앨범 수록곡이 포함되어 있습니다.\n\n[Norwegian Wood OST] 앨범은 권리사의 요청에 따라 앨범 단위의 구매만 가능합니다.\n\n앨범 페이지를 확인하시겠습니까?"
	var result3 = "선택하신 곡 중에 [Song For Japan] 앨범 수록곡이 포함되어 있습니다.\n\n[Song For Japan] 앨범은 권리사의 요청에 따라 앨범 단위의 구매만 가능합니다.\n\n앨범 페이지를 확인하시겠습니까?"

    arrMediaID = mediaid.split("^");
    for (var i = 0; i < arrMediaID.length; i++) {
        if (str1.indexOf("^"+arrMediaID[i]+"^") >= 0) {
            strTargetAlb1 = "Y";
        }
		else if (str2.indexOf("^"+arrMediaID[i]+"^") >= 0) {
            strTargetAlb2 = "Y";
		}
		else if (str3.indexOf("^"+arrMediaID[i]+"^") >= 0) {
            strTargetAlb3 = "Y";
		}
		else {
            if(i == arrMediaID.length - 1)
                strFilterID = strFilterID + arrMediaID[i];
            else
                strFilterID = strFilterID + arrMediaID[i] + "^";
        }
    }

    // 타켓 앨범이 있다면, 앨범 페이지로 이동
    if (strTargetAlb1 == "Y") {
        if(confirm(result1)){
            window.open("http://www.mnet.com/album/185329");
        }
    }
	else if (strTargetAlb2 == "Y") {
        if(confirm(result2)){
            window.open("http://www.mnet.com/album/217322");
        }
    }
	else if (strTargetAlb3 == "Y") {
        if(confirm(result3)){
            window.open("http://www.mnet.com/album/219451");
        }
    }

    return strFilterID;
}








// 브로커 컨트롤 객체를 생성하거나, 설치되어 있지 않으면 설치해주는 Install Script Function
// QuickManager Broker Control Class
function LC_QM_BrokerControl()
{
    // 멤버 변수 선언
    this.m_Domain = "mnet@mnet";                    // ASP 구분 상수
    this.m_SessionType = "1";                       // 1:SessionID (default), 2:Cookie

    this.m_BrokerControlID = "";                    // Broker 객체 참조 아이디
    this.m_objBrokerControl = null;                 // Broker Control 참조 객체 멤버 변수
    this.m_SessionID = "";                          // 사용자 세션 (객체 생성 파라미터 정보)
    this.m_ErrCode = "";                            // Class 에러 코드 관리 멤버 변수

    // Class 생성자 함수 호출
    this.QMBrokerControl(arguments);
}


// Broker Control Class Memeber Function
LC_QM_BrokerControl.prototype =
{
    // Broker Control Class 생성자
    QMBrokerControl: function(arrInitArguments)
    {
        // Broker Control 아이디
        this.m_BrokerControlID = (arrInitArguments.length > 0 && arrInitArguments[0] != "")?arrInitArguments[0]:"QckM";

        // SessionID
        this.m_SessionID    = (arrInitArguments.length > 1 && arrInitArguments[1] != "")?arrInitArguments[1]:"";
        this.m_MediaID      = (arrInitArguments.length > 2 && arrInitArguments[2] != "")?arrInitArguments[2]:"";
        this.m_ServiceCode  = (arrInitArguments.length > 3 && arrInitArguments[3] != "")?arrInitArguments[3]:"";
        this.m_LocationFrom = (arrInitArguments.length > 4 && arrInitArguments[4] != "")?arrInitArguments[4].replace(/[,]/g,'^'):"";

        // 컨트롤 아이디로 검색되는 객체가 없을 때만 컨트롤 객체를 생성한다.
        try {
            var wcQckHelper = new ActiveXObject("NSAppHelper.NSAppHelperWizrd.MNET.1.1");
            if (wcQckHelper)
            {
                if (!document.getElementById(this.m_BrokerControlID))
                {
                    // Broker Control Instance 생성 스크립트
                    var strInstallScript = "<object name=\""+this.m_BrokerControlID+"\" id=\""+this.m_BrokerControlID+"\" CLASSID=\"clsid:DFBBCB52-4D9F-4D0E-BF4A-A51223FC2541\" width=\"0\" height=\"0\"></object>\n"
                    // 인스턴스 생성
                    document.body.insertAdjacentHTML('beforeEnd', strInstallScript);
                }
                // 인스턴스 참조 변수 설정
                this.m_objBrokerControl = document.getElementById(this.m_BrokerControlID);
            }
            this.m_objBrokerControl.SetSessionType(this.m_SessionType);
        }
        catch (e) {
        }

    },
    // 퀵매니저 실행중 여부 체크(0:실행중/1:실행X)
    GetQuickManagerRUFlag: function(){
        return this.m_objBrokerControl.QuickManagerRUFlag();
    },
    // 퀵매니저 설치 여부 체크(0:설치/1:미설치)
    GetQuickManagerInstallFlag: function(){
        return this.m_objBrokerControl.GetQuickMgrInstallFlag(this.m_Domain);
    },
    // 퀵매니저 실행
    RunQuickManager: function(){
        this.m_objBrokerControl.RunQuickManager(this.m_Domain, this.m_SessionID);
    },
    // 퀵매니저로 다운로드할 곡정보 전송
    RunNSendMetaInfo: function(){

        try {if(QckInstall){ QckInstall.close();}} catch(e) {}

        try {
            //alert(this.m_Domain+"\n"+this.m_SessionID +"\n"+ this.m_MediaID +"\n"+ this.m_ServiceCode +"\n"+ this.m_LocationFrom);
            this.m_objBrokerControl.RunNSendMetaInfo(this.m_Domain, this.m_SessionID, this.m_MediaID, this.m_ServiceCode, this.m_LocationFrom);
        } catch(e) {
            /*
            alert("퀵매니저 2.0 연동을 위해 파일을 설치합니다.");
            location.href = "http://patch.mnet.com/Ver2/App/totalApp/mnethelper/install/MnetActivexSetup(1.5).exe";
            */
            QckInstall = window.open("http://download.mnet.com/_HelpDesk/QuickManager/QuickInstallPop.asp","Qck","width=503, height=577, status=yes, scrollbars=no, resizable=no, top=0, left=0");
        }

    },
    // 퀵매니저 Refresh
    RefreshMemberInfo: function(){
        this.m_objBrokerControl.RefreshMemberInfo(this.m_Domain);
    },
    // 퀵매니저 SesionID Flush
    FlushSessionID: function(){
        try {
            this.m_objBrokerControl.FlushSessionID(this.m_Domain, this.m_SessionID);
        } catch(e) {
        }
    },
    // 퀵매니저 설치 여부(GetQuickMgrInstallFlag - 0:설치됨)
    QMIntrallYn: function()
    {
        try {
            var strUserID = this.m_objBrokerControl.GetQuickMgrInstallFlag(this.m_Domain);
            return "Y";
        } catch(e) {
            return "N";
        }
    },
    // 헬퍼 설치 여부 (임의의 메소드 호출하여 에러 없다면 설치되었음)
    ControlInstallYn: function()
    {
        try {
            var strUserID = this.m_objBrokerControl.QuickManagerRUFlag(this.m_Domain);
            return "Y";
        } catch(e) {
            return "N";
        }
    },
    // 헬퍼 설치 여부 체크(임의의 메소드 호출하여 에러 없다면 설치되었음)
    ControlInstallYn: function()
    {
        try {
            var strUserID = this.m_objBrokerControl.QuickManagerRUFlag(this.m_Domain);
            return "Y";
        } catch(e) {
            return "N";
        }
    },
    // 단품구매 완료 후 다운로드
    NotifyPPUDown: function()
    {
        try {
            this.m_objBrokerControl.NotifyPPUDown(this.m_Domain);
        }
        catch (e) {
        }
    },
    // 보안설정용
    SetRunnerImpl: function()
    {
        try {
            this.m_objBrokerControl.SetRunnerImpl(this.m_Domain);
        }
        catch (e) {
        }
    }
}
