/**************************************
    文件名:listener.js
    功能:该模块用于处理事件监听相关内容
    版本:2.0(23.01.08)
**************************************/

/**************************************
    对象名:Listener
    参数:lang: 传入语言
**************************************/
function Listener(lang) {
    //获取HTML中的Language按钮
    this.langSltBtn = document.querySelector(".langSltBtn");
    //获取语言按钮列表
    this.langSlt = document.querySelector("footer .language");
    //获取所有的语言按钮
    this.langs = document.querySelectorAll(".lang");
    //获取难度菜单
    this.difficulty = document.querySelector(".difficulty");
    //获取主菜单列表按钮
    this.selection = document.querySelectorAll(".menuList button");
    //获取难度列表按钮
    this.diffBtn = document.querySelectorAll(".difficulty button");
    //获取新手教程界面
    this.tutorial = document.querySelector(".tutorialBlk");
    //获取新手教程界面返回按钮
    this.tutoBack = document.querySelector(".tutorialBlk .back");
    //获取排行榜界面
    this.leaderBlk = document.querySelector(".leaderBlk");
    //获取排行榜界面返回按钮
    this.leadBack = document.querySelector(".leaderBlk .back");
    //获取语言
    this.lang = lang;

    //在设置监听的匿名函数中,“this”不是指代的Listener对象,必须单独获取
    let self = this;
    //语言按钮点击事件
    let flag = false;
    this.langSltBtn.addEventListener("click", function (){
        flag = !flag;
        self.langSlt.style.display = (flag) ? "flex" : "none";
    });

    //主菜单列表按钮点击事件
    for (let i = 0; i < this.selection.length; i++){
        this.selection[i].addEventListener("click", function (){
            self.btnClick(i);
        })
    }

    //难度列表按钮点击事件
    for (let i = 0; i < this.diffBtn.length; i++){
        this.diffBtn[i].addEventListener("click", function (){
            self.diffBtnClick(i);
        })
    }

    //新手教程界面返回按钮点击事件
    this.tutoBack.addEventListener("click", function (){
        self.tutorial.style.display = "none";
    });

    //排行榜界面返回按钮点击事件
    this.leadBack.addEventListener("click", function (){
        self.leaderBlk.style.display = "none";
    });

    //切换语言
    for (let i = 0; i < this.langs.length; i++) {
        this.langs[i].addEventListener("click", function (){
            let lang = self.langs[i].innerHTML;
            let langCode = '';
            switch(lang){
                case "中文":
                    langCode = "zh_cn";
                    break;
                case "English":
                    langCode = "en";
                    break;
                case "日本語":
                    langCode = "jp";
                    break;
            }
            window.open(`./menu.html?lang=${langCode}`,"_self");
        });
    }
}

/**************************************
    方式名:btnClick()
    参数:i: 第i个按钮
    功能:处理主菜单按钮事件
**************************************/
Listener.prototype.btnClick = function(i){
    switch (i){
        case 0:
            this.difficulty.style.display = "block";
            break;
        case 1:
            this.tutorial.style.display = "block";
            break;
        case 2:
            this.leaderBlk.style.display = "block";
            break;
        case 3:
            window.location.href = "about:blank";
            window.close();
            break;
    }
}

/**************************************
    方式名:diffBtnClick()
    参数:i: 第i个按钮
    功能:处理难度选单按钮事件
**************************************/
Listener.prototype.diffBtnClick = function(i){
    switch (i){
        case 0:
            window.open(`./game.html?lang=${this.lang}&mode=easy`, "_self");
            break;
        case 1:
            window.open(`./game.html?lang=${this.lang}&mode=hard`, "_self");
            break;
        case 2:
            window.open(`./game.html?lang=${this.lang}&mode=extra`, "_self");
            break;
        case 3:
            this.difficulty.style.display = "none";
            break;
    }
}

//屏蔽右键菜单
document.oncontextmenu = function(event){
    if(window.event){
        event = window.event;
    }try{
        var the = event.srcElement;
    if (!((the.tagName == "INPUT" && the.type.toLowerCase() == "text") || the.tagName == "TEXTAREA")){
        return false;
    }
        return true;
    }catch (e){
        return false;
    }
}