
function CMenu() {
    var _oMenuContainer;
    var _oBg;
    var _oGameLogo;
    var _oButPlay;
    var _oFade;
    var _oAudioToggle;
    var _oButCredits;
    var _oCreditsPanel = null;
    var _oButFullscreen;
    var _fRequestFullScreen = null;
    var _fCancelFullScreen = null;
    var _pStartPosAudio;
    var _pStartPosCredits;
    var _pStartPosFullscreen;

    //lng
    var _oButEnglish;
    var _oButUkrainian;
    var _oButRussian;
    var _oButGerman;
    var _oButArabic;
    var _oButFrench;
    var _oButItalian;
    var _oButPortugues;
    var _oButSpanish;

    var _pStartEnglish;
    var _pStartUkrainian;
    var _pStartRussian;
    var _pStartGerman;
    var _pStartArabic;
    var _pStartFrench;
    var _pStartItalian;
    var _pStartPortugues;
    var _pStartSpanish;
    var userLang;
    var locArray = ["en", "uk", "ru", "de", "ar", "fr", "it", "pt", "es"];

    var refreshY = 0;

    this._init = function () {
        if_menu = false;
        console.log('menu')
        trackMenu();
        if (localStorage.getItem("sound") == null) {
            s_bAudioActive = true;
            Howler.mute(false);
            localStorage.setItem("sound", 1);
        } else if (localStorage.getItem("sound") == 1) {
            s_bAudioActive = true;
            Howler.mute(false);
        }
        if (localStorage.getItem("sound") == 0) {
            s_bAudioActive = false;
            Howler.mute(true);
        }

        userLang = navigator.language || navigator.userLanguage;
        console.log("browser lang full: " + userLang);

        userLang = userLang.substring(0, 2);
        console.log("browser lang: " + userLang);

        //lng
        if (localStorage.getItem("language") == null) {
            for (let i = 0; i < locArray.length; i++) {
                if (userLang === locArray[i]) {
                    console.log("match");
                    localiseGame(locArray[i]);
                    storeLanguage = true;
                }
            }
        } else if (localStorage.getItem("language") != null) {
            localiseGame(localStorage.getItem("language"));
        }

        //lng

        //localStorage.clear();            // TO DELETE EVERYTHING SAVED IN LOCALSTORAGE
        _oMenuContainer = new createjs.Container();
        s_oStage.addChild(_oMenuContainer);

        _oBg = createBitmap(s_oSpriteLibrary.getSprite("bg_menu"));
        _oMenuContainer.addChild(_oBg);

        this.initLeds();
        var canvasWH = document.getElementById('canvas');

        console.log(canvasWH.style.width.split('px')[0])
        console.log(canvasWH.style.height)
        var oGameLogo = s_oSpriteLibrary.getSprite(canvasWH.style.width.split('px')[0] < 580 && canvasWH.style.width.split('px')[0] > 565 &&
        canvasWH.style.height.split('px')[0] > 1050 && canvasWH.style.height.split('px')[0] < 1060
            ? 'logo_menu3' : window.innerHeight < 480 ? 'logo_menu3' : 'logo_menu');

        _oGameLogo = createBitmap(oGameLogo);
        _oGameLogo.regX = oGameLogo.width/2;
        _oGameLogo.regY = oGameLogo.height/2;
        _oGameLogo.x = CANVAS_WIDTH_HALF;
        console.log(oGameLogo)
        _oGameLogo.y = -180;
        createjs.Tween.get(_oGameLogo, {loop: false}).to({y: CANVAS_HEIGHT_HALF - 330}, 1000, createjs.Ease.cubicOut);
        _oMenuContainer.addChild(_oGameLogo);



        var oSprite = s_oSpriteLibrary.getSprite("but_credits");
        _pStartPosCredits = {
            x: 20 + oSprite.width / 2,
            y: oSprite.height / 2 + 30,
        };
        _oButCredits = new CGfxButton(
            _pStartPosCredits.x,
            _pStartPosCredits.y,
            oSprite,
            _oMenuContainer
        );
        _oButCredits.addEventListener(ON_MOUSE_UP, this._onCredits, this);

        if (DISABLE_SOUND_MOBILE === false || s_bMobile === false) {
            var oSprite = s_oSpriteLibrary.getSprite("audio_icon");
            _pStartPosAudio = {
                x: CANVAS_WIDTH - oSprite.width / 4 - 20,
                y: oSprite.height / 2 + 30,
            };
            _oAudioToggle = new CToggle(
                _pStartPosAudio.x,
                _pStartPosAudio.y,
                oSprite,
                s_bAudioActive,
                _oMenuContainer
            );
            _oAudioToggle.addEventListener(ON_MOUSE_UP, this._onAudioToggle, this);
        }

        var doc = window.document;
        var docEl = doc.documentElement;
        _fRequestFullScreen =
            docEl.requestFullscreen ||
            docEl.mozRequestFullScreen ||
            docEl.webkitRequestFullScreen ||
            docEl.msRequestFullscreen;
        _fCancelFullScreen =
            doc.exitFullscreen ||
            doc.mozCancelFullScreen ||
            doc.webkitExitFullscreen ||
            doc.msExitFullscreen;

        if (ENABLE_FULLSCREEN === false) {
            _fRequestFullScreen = false;
        }

        if (_fRequestFullScreen && screenfull.enabled) {
            oSprite = s_oSpriteLibrary.getSprite("but_fullscreen");
            _pStartPosFullscreen = {
                x: _pStartPosCredits.x + oSprite.width / 2 + 10,
                y: _pStartPosCredits.y,
            };

            _oButFullscreen = new CToggle(
                _pStartPosFullscreen.x,
                _pStartPosFullscreen.y,
                oSprite,
                s_bFullscreen,
                _oMenuContainer
            );
            _oButFullscreen.addEventListener(
                ON_MOUSE_UP,
                this._onFullscreenRelease,
                this
            );
        }



        //Languages ------------------------------------------------------------------------------------
        //left

        heightSize = 1160;
        var sWidthTop;
        var sWidthBot;
        var langSpace = 125;
        if (s_bMobile === true) {
            sWidthTop = CANVAS_WIDTH / 2 - 190;
            sWidthBot = CANVAS_WIDTH / 2 - 250;
        } else {
            sWidthTop = CANVAS_WIDTH / 2 - 190;
            sWidthBot = CANVAS_WIDTH / 2 - 228;
        }



        var oSpriteEnglish = s_oSpriteLibrary.getSprite("but_lang_EN");

        _pStartEnglish = {
            x: sWidthTop,
            y: heightSize,
        };

        _oButEnglish = new CGfxButton(
            _pStartEnglish.x,
            _pStartEnglish.y,
            oSpriteEnglish,
            s_oStage
        );
        _oButEnglish.addEventListener(ON_MOUSE_UP, this._oChangeLanguageToEn, this);

        var oSpritePlay = s_oSpriteLibrary.getSprite(canvasWH.style.width.split('px')[0] < 580 && canvasWH.style.width.split('px')[0] > 565 &&
        canvasWH.style.height.split('px')[0] > 1050 && canvasWH.style.height.split('px')[0] < 1060
            ? 'but_play2' : window.innerHeight < 480 ? "but_play2" : "but_play1");
        _oButPlay = new CGfxButton(
            CANVAS_WIDTH_HALF,
            CANVAS_HEIGHT + 150,
            oSpritePlay,
            _oMenuContainer
        );
        console.log(oSpritePlay)
        _oButPlay.addEventListener(ON_MOUSE_UP, this._onButPlayRelease, this);
        // createjs.Tween.get(_oButPlay.getSprite(), { loop: false }).to(
        //   { y: _pStartEnglish.y - s_iOffsetY - 200 },
        //   1000,
        //   createjs.Ease.cubicOut
        // );



        var oSpriteUkrainian = s_oSpriteLibrary.getSprite("but_lang_UK");
        _pStartUkrainian = {
            x: _pStartEnglish.x + langSpace,
            y: _pStartEnglish.y,
        };
        _oButUkrainian = new CGfxButton(
            _pStartUkrainian.x,
            _pStartUkrainian.y,
            oSpriteUkrainian,
            s_oStage
        );

        _oButUkrainian.addEventListener(
            ON_MOUSE_UP,
            this._oChangeLanguageToUk,
            this
        );

        var oSpriteRussian = s_oSpriteLibrary.getSprite("but_lang_RU");

        _pStartRussian = {
            x: _pStartUkrainian.x + langSpace,
            y: _pStartEnglish.y,
        };
        _oButRussian = new CGfxButton(
            _pStartRussian.x,
            _pStartRussian.y,
            oSpriteRussian,
            s_oStage
        );
        _oButRussian.addEventListener(ON_MOUSE_UP, this._oChangeLanguageToRu, this);

        var oSpriteGerman = s_oSpriteLibrary.getSprite("but_lang_DE");

        _pStartGerman = {
            x: _pStartRussian.x + langSpace,
            y: _pStartEnglish.y,
        };
        _oButGerman = new CGfxButton(
            _pStartGerman.x,
            _pStartGerman.y,
            oSpriteGerman,
            s_oStage
        );
        _oButGerman.addEventListener(ON_MOUSE_UP, this._oChangeLanguageToDe, this);

        var oSpriteArabic = s_oSpriteLibrary.getSprite("but_lang_AR");

        _pStartArabic = {
            x: sWidthBot - 22,
            y: heightSize + langSpace,
        };
        _oButArabic = new CGfxButton(
            _pStartArabic.x,
            _pStartArabic.y,
            oSpriteArabic,
            s_oStage
        );
        _oButArabic.addEventListener(ON_MOUSE_UP, this._oChangeLanguageToAr, this);

        //right
        var oSpriteFrench = s_oSpriteLibrary.getSprite("but_lang_FR");
        _pStartFrench = {
            x: _pStartArabic.x + langSpace,
            y: _pStartArabic.y,
        };

        _oButFranch = new CGfxButton(
            _pStartFrench.x,
            _pStartFrench.y,
            oSpriteFrench,
            s_oStage
        );
        _oButFranch.addEventListener(ON_MOUSE_UP, this._oChangeLanguageToFr, this);

        var oSpriteItalian = s_oSpriteLibrary.getSprite("but_lang_IT");

        _pStartItalian = {
            x: _pStartFrench.x + langSpace,
            y: _pStartFrench.y,
        };
        _oButItalian = new CGfxButton(
            _pStartItalian.x,
            _pStartItalian.y,
            oSpriteItalian,
            s_oStage
        );
        _oButItalian.addEventListener(ON_MOUSE_UP, this._oChangeLanguageToIt, this);

        var oSpritePortugues = s_oSpriteLibrary.getSprite("but_lang_PT");

        _pStartPortugues = {
            x: _pStartItalian.x + langSpace,
            y: _pStartFrench.y,
        };
        _oButPortugues = new CGfxButton(
            _pStartPortugues.x,
            _pStartPortugues.y,
            oSpritePortugues,
            s_oStage
        );
        _oButPortugues.addEventListener(
            ON_MOUSE_UP,
            this._oChangeLanguageToPt,
            this
        );

        var oSpriteSpanish = s_oSpriteLibrary.getSprite("but_lang_ES");
        _pStartSpanish = {
            x: _pStartPortugues.x + langSpace,
            y: _pStartFrench.y,
        };
        _oButSpanish = new CGfxButton(
            _pStartSpanish.x,
            _pStartSpanish.y,
            oSpriteSpanish,
            s_oStage
        );

        _oButSpanish.addEventListener(ON_MOUSE_UP, this._oChangeLanguageToEs, this);

        //Languages ---------------------

        _oFade = new createjs.Shape();
        _oFade.graphics
            .beginFill("black")
            .drawRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT);
        _oMenuContainer.addChild(_oFade);

        createjs.Tween.get(_oFade)
            .to({ alpha: 0 }, 1000)
            .call(function () {
                _oMenuContainer.removeChild(_oFade);
            });

        if (!s_bStorageAvailable) {
            new CMsgBox(TEXT_ERR_LS, _oMenuContainer);
        } else {
            var iTotalScore = getItem("lights_total_score");
            if (iTotalScore !== null && iTotalScore !== undefined) {
                s_iTotalScore = parseInt(iTotalScore);
            } else {
                s_iTotalScore = 0;
            }

            var aBestScore = getItemJson("lights_best_score");
            if (aBestScore !== null && aBestScore !== undefined) {
                s_aBestScore = aBestScore;
            } else {
                s_aBestScore = [0, 0, 0, 0];
            }

            var aLastLevel = getItemJson("lights_last_level");
            if (aLastLevel !== null && s_aLastLevel !== undefined) {
                s_aLastLevel = aLastLevel;
            } else {
                s_aLastLevel = [1, 1, 1, 1];
            }

            if (s_aLevelStars === undefined || s_aLevelStars === null) {
                s_aLevelStars = new Array();

                for (var i = 0; i < 4; i++) {
                    for (var j = 0; j < MATRIX_SETTINGS[i].length; j++) {
                        s_aLevelStars[i].push(0);
                    }
                }
            }

            var aLevelStars = getItemJson("lights_level_stars");
            if (aLevelStars !== null && s_aLevelStars !== undefined) {
                s_aLevelStars = aLevelStars;
            }
        }

        this.refreshButtonPos(s_iOffsetX, s_iOffsetY);
    };

    this.initLeds = function () {
        var oLed;
        var iLedWidth = 141;
        var iLedHeight = 165;
        var iStartY = CANVAS_HEIGHT_HALF - 10;
        var iOffsetX = 300;
        var iOffsetY = 250;

        var aX = [
            CANVAS_WIDTH_HALF - iOffsetX,
            CANVAS_WIDTH_HALF,
            CANVAS_WIDTH_HALF + iOffsetX,
            CANVAS_WIDTH_HALF - iOffsetX,
            CANVAS_WIDTH_HALF,
            CANVAS_WIDTH_HALF + iOffsetX,
        ];
        var aY = [
            iStartY,
            iStartY,
            iStartY,
            iStartY - iOffsetY,
            iStartY - iOffsetY,
            iStartY - iOffsetY,
        ];

        for (var i = 0; i < 6; i++) {
            var iRandomN = Math.floor(Math.random() * 4 + 1);
            var szAnimation = "led_" + iRandomN;
            var iX = aX[i];
            var iY = aY[i];

            var data = {
                images: [s_oSpriteLibrary.getSprite(szAnimation)],
                frames: { width: iLedWidth, height: iLedHeight },
                animations: {
                    PIPE_END_ON: [1, 9, "LED_TURN_OFF"],
                    LED_TURN_OFF: {
                        frames: [9, 8, 7, 6, 5, 4, 3, 2, 1],
                        next: "PIPE_END_ON",
                    },
                },
                framerate: Math.floor(Math.random() * 30 + 15),
            };

            var oSpriteSheet = new createjs.SpriteSheet(data);
            oLed = createSprite(
                oSpriteSheet,
                "PIPE_END_ON",
                0,
                0,
                iLedWidth,
                iLedHeight
            );
            oLed.regX = iLedWidth / 2 - 2;
            oLed.regY = iLedHeight / 2 + 20;
            oLed.scaleX = oLed.scaleY = 0.7;
            oLed.x = iX;
            oLed.y = iY;
            _oMenuContainer.addChild(oLed);
        }
    };

    this.unload = function () {
        _oButPlay.unload();
        //_oButPlay = null;

        _oButCredits.unload();

        _oMenuContainer.removeChild(_oBg);

        if (DISABLE_SOUND_MOBILE === false || s_bMobile === false) {
            _oAudioToggle.unload();
            _oAudioToggle = null;
        }
        if (_fRequestFullScreen && screenfull.enabled) {
            _oButFullscreen.unload();
        }
        s_oMenu = null;
    };

    this.refreshButtonPos = function (iNewX, iNewY) {
        console.log('refresh')
        _oButSpanish.setPosition(
            _pStartSpanish.x + iNewX,
            _pStartSpanish.y - iNewY
        );




        _oButArabic.setPosition(
            _pStartArabic.x + iNewX,
            _pStartArabic.y - iNewY
        );

        _oButEnglish.setPosition(
            _pStartEnglish.x + iNewX,
            _pStartEnglish.y - iNewY
        );

        _oButFranch.setPosition(
            _pStartFrench.x + iNewX,
            _pStartFrench.y - iNewY
        );

        _oButGerman.setPosition(
            _pStartGerman.x + iNewX,
            _pStartGerman.y - iNewY
        );

        _oButItalian.setPosition(
            _pStartItalian.x + iNewX,
            _pStartItalian.y - iNewY
        );

        _oButPortugues.setPosition(
            _pStartPortugues.x + iNewX,
            _pStartPortugues.y - iNewY
        );

        _oButRussian.setPosition(
            _pStartRussian.x + iNewX,
            _pStartRussian.y - iNewY
        );

        _oButUkrainian.setPosition(
            _pStartUkrainian.x + iNewX,
            _pStartUkrainian.y - iNewY
        );



        if (DISABLE_SOUND_MOBILE === false || s_bMobile === false) {
            _oAudioToggle.setPosition(
                _pStartPosAudio.x - iNewX,
                _pStartPosAudio.y + iNewY
            );
        }
        if (_fRequestFullScreen && screenfull.enabled) {
            _oButFullscreen.setPosition(
                _pStartPosFullscreen.x + iNewX,
                _pStartPosFullscreen.y + iNewY
            );
        }

        _oButCredits.setPosition(
            _pStartPosCredits.x + iNewX,
            _pStartPosCredits.y + iNewY
        );
        _oButPlay.setPosition(
            CANVAS_WIDTH_HALF + iNewX,
            _pStartEnglish.y - iNewY - 200,
        );
    };

    this.resetFullscreenBut = function () {
        if (_fRequestFullScreen && screenfull.enabled) {
            _oButFullscreen.setActive(s_bFullscreen);
        }
    };

    this.exitFromCredits = function () {
        _oCreditsPanel = null;
    };

    this._onAudioToggle = function () {
        Howler.mute(s_bAudioActive);
        s_bAudioActive = !s_bAudioActive;
        if (s_bAudioActive) {
            localStorage.setItem("sound", 1);
        } else {
            localStorage.setItem("sound", 0);
        }
    };

    this._onCredits = function () {
        _oCreditsPanel = new CCreditsPanel();
    };

    this._onButPlayRelease = function () {
        this.unload();
        checkMenu = false
        s_oMain.gotoMenuMode();
    };

    this._onFullscreenRelease = function () {
        if (s_bFullscreen) {
            _fCancelFullScreen.call(window.document);
        } else {
            _fRequestFullScreen.call(window.document.documentElement);
        }

        sizeHandler();
    };

    //----------------------------------Languages------------------------------------------------------------------------
    //-----lang func

    this._oChangeLanguageToEn = function () {
        if(checkMenu === true)
            localiseGame("en");
    };
    this._oChangeLanguageToUk = function () {
        if(checkMenu === true)
            localiseGame("uk");
    };
    this._oChangeLanguageToRu = function () {
        if(checkMenu === true)
            localiseGame("ru");
    };
    this._oChangeLanguageToDe = function () {
        if(checkMenu === true)
            localiseGame("de");
    };
    this._oChangeLanguageToAr = function () {
        if(checkMenu === true)
            localiseGame("ar");
    };
    this._oChangeLanguageToFr = function () {
        if(checkMenu === true)
            localiseGame("fr");
    };
    this._oChangeLanguageToIt = function () {
        if(checkMenu === true)
            localiseGame("it");
    };
    this._oChangeLanguageToPt = function () {
        if(checkMenu === true)
            localiseGame("pt");
    };
    this._oChangeLanguageToEs = function () {
        if(checkMenu === true)
            localiseGame("es");
    };
    //-----end of lang func
    //----------------------------------Languages------------------------------------------------------------------------

    this.update = function () {};

    s_oMenu = this;

    this._init();
}

var s_oMenu = null;
