define("three-glue", ["three"], function (three) {
    window.THREE = three;
    return three;
});


requirejs.config({
    baseUrl: "/skins/default/javascript",
    paths: {
        "jquery": "//ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min",
        "jquery_ui": "https://code.jquery.com/ui/1.12.1/jquery-ui",
        "owl.carousel": "vendor/owl.carousel",
        "imagesLoaded": "/Assembly/Public/skins/blueprint/javascript/vendor/imagesloaded.pkgd.min",
        "isotope": "vendor/isotope.pkgd",
        "bridget": "vendor/jquery-bridget",
        "matchHeight": "vendor/jquery.matchHeight-min",
        "map": "//maps.googleapis.com/maps/api/js?v=3.exp&key=AIzaSyAT5pERtdIA8tMlG5ccxezWuwOVJyFtnss",
        "mmenu": "vendor/jquery.mmenu.all.min",
        "modernizr": "vendor/modernizr-2.6.2.min",
        "three": "vendor/three.min",
        "velocity":"/Assembly/Public/skins/blueprint/javascript/vendor/velocity.min",
        "pointerevents": "https://code.jquery.com/pep/0.4.3/pep",
        "ajaxmenu": "/Assembly/Public/javascript/ajax-menu",
        "photoswipe": "vendor/photoswipe.min",
        "photoswipe.uidefault": "vendor/photoswipe-ui-default.min",

        "tween":"https://cdnjs.cloudflare.com/ajax/libs/tween.js/17.1.1/Tween.min",
        "OrbitControls":"/Assembly/Public/skins/blueprint/javascript/OrbitControls",
        "CanvasRenderer":"vendor/CanvasRenderer",

        "AssemblyIM.cms":"/Assembly/Public/skins/blueprint/javascript/core/AssemblyIM.cms",
        "AssemblyIM.global":"/Assembly/Public/skins/blueprint/javascript/core/AssemblyIM.global",
        "AssemblyIM.pageux":"/Assembly/Public/skins/blueprint/javascript/core/AssemblyIM.pageux",
        "AssemblyIM.controller":"/Assembly/Public/skins/blueprint/javascript/core/AssemblyIM.controller",
        "AssemblyIM.interactiveobject":"/Assembly/Public/skins/blueprint/javascript/core/AssemblyIM.interactiveobject",
        "AssemblyIM.hotspots":"/Assembly/Public/skins/blueprint/javascript/core/AssemblyIM.hotspots",
        "AssemblyIM.materials":"/Assembly/Public/skins/blueprint/javascript/core/AssemblyIM.materials",
        "AssemblyIM.raytracemanager":"/Assembly/Public/skins/blueprint/javascript/core/AssemblyIM.raytracemanager",
        "AssemblyIM.contentpane":"/Assembly/Public/skins/blueprint/javascript/core/AssemblyIM.contentpane",
        "AssemblyIM.cameramanager":"/Assembly/Public/skins/blueprint/javascript/core/AssemblyIM.cameramanager",
        "OrbitControls":"/Assembly/Public/skins/blueprint/javascript/utils/OrbitControls",
        "OBJLoader":"/Assembly/Public/skins/blueprint/javascript/utils/OBJLoader",
        "vue":"https://cdn.jsdelivr.net/npm/vue/dist/vue",
        "AssemblyIM.poi":"/Assembly/Public/skins/blueprint/javascript/features/AssemblyIM.poi",
        "AssemblyIM.floorplans":"/Assembly/Public/skins/blueprint/javascript/features/AssemblyIM.floorplans",
        "AssemblyIM.modelhighlighter":"/Assembly/Public/skins/blueprint/javascript/features/AssemblyIM.modelhighlighter",
        "AssemblyIM.media":"/Assembly/Public/skins/blueprint/javascript/features/AssemblyIM.media",
        "AssemblyIM.archighlighter":"/Assembly/Public/skins/blueprint/javascript/features/AssemblyIM.archighlighter",
        "StaticUtils":"/Assembly/Public/skins/blueprint/javascript/utils/StaticUtils",

        "AssemblyIM.atomnavigation":"/Assembly/Public/skins/blueprint/javascript/effects/AssemblyIM.atomnavigation",
        "GyroScope":"/Assembly/Public/skins/blueprint/javascript/utils/three/Gyroscope",
        "fancybox": "vendor/jquery.fancybox.min", // 3.5.7
        "slider":"/Assembly/Public/skins/blueprint/javascript/utils/Slider"

        /*
        "RenderPass":"/Assembly/Public/skins/blueprint/javascript/utils/three/RenderPass",
        "ShaderPass":"/Assembly/Public/skins/blueprint/javascript/utils/three/ShaderPass",
        "EffectComposer":"/Assembly/Public/skins/blueprint/javascript/utils/three/EffectComposer",
        "RGBShiftShader":"/Assembly/Public/skins/blueprint/javascript/utils/three/RGBShiftShader",
        "FXAAShader":"/Assembly/Public/skins/blueprint/javascript/utils/three/FXAAShader",
          */

    },
    map: {
        '*': {
            three: 'three-glue'
        },
        'three-glue': {
            three: 'three'
        }
    },
    shim: {
        "owl.carousel": {
            deps: ["jquery"]
        },
        "imagesLoaded": {
            deps: ["jquery"]
        },
        "filters": {
            deps: ["jquery", "isotope", "imagesLoaded"]
        },
        "tween": {
            deps: ["jquery"]
        },
        "matchHeight": {
            deps: ["jquery"]
        },
        "map": {
            deps: ["jquery"]
        },
        "mmenu": {
            deps: ["jquery"]
        },
        "ajaxmenu": {
            deps: ["jquery"]
        },
        "jquery_ui": {
            deps: ["jquery"]
        },
        "AssemblyIM.controller": {
            deps: [
                "jquery",
                "three",
                "tween",
                "velocity",
                "pointerevents",
                "OrbitControls",
                "AssemblyIM.hotspots",
                "AssemblyIM.interactiveobject",
                "AssemblyIM.raytracemanager",
                "AssemblyIM.materials",
                "AssemblyIM.contentpane",
                "AssemblyIM.pageux",
                "AssemblyIM.poi",
                "AssemblyIM.modelhighlighter",
                "AssemblyIM.archighlighter",
                "AssemblyIM.floorplans",
                "AssemblyIM.media",
                "AssemblyIM.atomnavigation",
                "AssemblyIM.cameramanager",
                "GyroScope",
                "slider",

                /*
                "RenderPass",
                "ShaderPass",
                "EffectComposer",
                "RGBShiftShader",
                "FXAAShader",
                */
            ]
        },
        "AssemblyIM.atomnavigation": {
            deps: [
                "jquery",
                "three",
                "StaticUtils",
                "GyroScope"
            ]
        },
        "AssemblyIM.interactiveobject": {
            deps: [
                "jquery",
                "three",
                "OBJLoader"
            ]
        },
        "AssemblyIM.pageUX": {
            deps: ["jquery"],
        },
        "AssemblyIM.global": {
            deps: ["jquery"]
        },
        "tween": {
            deps: ["jquery"]
        },
        "velocity": {
            deps: ["jquery"]
        },
        "slider": {
            deps: ["jquery", "pointerevents"]
        },
        "pointerevents": {
            deps: ["jquery"]
        },
        "OrbitControls": {
            deps: ["three"]
        },
        "OBJLoader": {
            deps: ["three"]
        },
        "GyroScope": {
            deps: ["three"]
        },
        "hotspots": {
            deps: ["three",
                "GyroScope"
            ]
        },
        'Vue': {
            deps: ['jquery'],
        },


    },
    waitSeconds: 40,
    urlArgs: "bust=" + (new Date()).getTime()
});

//todo: i can put all js in one file...
//todo: scan each widget to check for ip and then run it... and this way i can minify js
requirejs(["jquery", "mmenu", "modernizr", "matchHeight", "ajaxmenu"],

    function ($) {

        var $pageWrap = $("#pageWrap"); // the content dom element to fade in / out
        var $content  = $("#content"); // the content dom element to replace with loaded content

        var $loaderWrapper = $("#LoaderWrapper");
        var gallery_height = $('.widget--gallery').height();

        $(window).scroll(function () {
            if ($('#header').offset().top > gallery_height - 250) {
                $('#header').removeClass('header--gallery');
            } else {
                $('#header').addClass('header--gallery');
            }
        });

        $('.atom--link').on('click',function(e){
            e.preventDefault();
            AIMController.config.controls.config.autoRotate = true;
            AIMController.cameramanager.resetCam();

            // $pageWrap.velocity("stop");
            // $pageWrap.velocity({
            //     opacity: 0,
            //     marginTop: 200
            // }, {
            //     duration: 300,
            //     complete: function(elements) {
            //         $pageWrap.css("visibility", "hidden");
            //     },
            // });
         });
        /**************************/
        /*******Desktop Menu*******/ 
        /**************************/

        var $desktopMenu = $("#desktopMenu"),
            $desktopMenuButton = $(),
            $closeButtonDesktop = $(".close-menu-desktop"),
            $header = $('#header');
            $mobileButton = $(".menu__button"),
            $(".menu__button__desktop, .menu__button").click(function () {

                $desktopMenu.fadeIn( "slow", "linear" );

            });
            $closeButtonDesktop.click(function () {
                $desktopMenu.fadeOut( "slow", "linear" );
            });

        $('.title').on("click", function(e){

            //close other elements only if is a principal section
            if($(this).next('ul:visible').length < 1){
                closeSubMenus(this);
            }

            $(this).next('ul').toggle();

            //if has childrens, close it
            if($(this).next('ul').children('.main-section').length > 0){
                $(this).next('ul').children('.main-section').find('ul:visible').toggle();
            }

            e.stopPropagation();
            e.preventDefault();

        });

        function closeSubMenus(element){
            if($(element).parents('.main-section').length < 2){
                $('.main-section').find('ul:visible').toggle();
            }
        }

        // MMMENU    --------------------------------------------------------------------------------------------------/
        // var $mobileMenu = $("#mobileMenu"),
        //     $mobileButton = $(".menu__button"),
        //     mobile_menu_button_img = $('.mobile__button--image'),
        //     desktop_menu_button_img = $('.desktop__button--image');

        // var mText   = "Menu";
        // var langDir = "right";

        // if ( $('body').attr( "lang" ) == "ar") {
        //     langDir = "left";
        //     mText = "قائمة";
        // }

        // $mobileMenu.mmenu({
        //     offCanvas: {
        //         position  : langDir
        //     },
        //     navbar:{
        //         "title": mText
        //     },
        //     navbars: [
        //         {
        //             "position": "bottom",
        //             "content": [
        //                 ""
        //             ]
        //         }
        //     ]
        // });

        // var mmenuAPI = $mobileMenu.data("mmenu");

        // $mobileButton.click(function () {
        //     $mobileMenu.css('display', 'block');

        //     if($mobileMenu.hasClass('mm-opened')) {
        //         $mobileButton.removeClass('active');
        //         mmenuAPI.close();
        //     } else {
        //         $mobileButton.addClass('active');
        //         mobile_menu_button_img.attr('src', '/skins/default/graphics/svg/lwf-menu-close.svg');
        //         desktop_menu_button_img.attr('src', '/skins/default/graphics/svg/lwf-menu-close-white.svg');
        //         mmenuAPI.open();
        //     }
        // });

        // mmenuAPI.bind( "closed", function() {
        //     $mobileButton.removeClass('active');
        // });

        // mmenuAPI.bind( "close", function() {
        //     mobile_menu_button_img.attr('src', '/skins/default/graphics/svg/lwf-menu.svg');
        //     desktop_menu_button_img.attr('src', '/skins/default/graphics/svg/lwf-menu-white.svg');
        // });


        /* Audio Files   ---------------------------------------------------------------------------------------------*/
        $('body').on('click', '.audio--play', function (e) {
            e.preventDefault();

            var id = $(this).data('audio'),
                status = $(this).data('status'),
                audio = $('#' + id)[0];

            if (status == 0 || typeof(status) === 'undefined') {
                $(this).data('status', 1);
                $(this).removeClass('pause');
                $(this).addClass('play');
                audio.play();
            } else {
                $(this).data('status', 0);
                $(this).addClass('pause');
                $(this).removeClass('play');
                audio.pause();
            }
        });

        /* IE POLYFILL -----------------------------------------------------------------------------------------------*/
        if ($("html").hasClass("no-objectfit")) {
            $('.widget__image').each(function () {
                var $container = $(this).find('a'),
                    imgUrl = $container.find('img').prop('src');

                if ($container.length == 0) {
                    $container = $(this);
                    imgUrl = $container.find('img').prop('src');
                }

                if (imgUrl) {
                    $container
                        .css('backgroundImage', 'url(' + imgUrl + ')')
                        .addClass('ie--object-fit');
                }
            });
        }

        // setup asynchronous page loading
        // AJAX MENUS ########################################### //
        $ajax_menu = $("body"); // attach the jquery dom ajax manager to a persistent dom element e.g. header

        // setup the ajax menu with events for getting and receiving data
        $ajax_menu
            .on("get.data.ajaxmenu", function (event, href) {

                $loaderWrapper.addClass("active");

                //console.dir(AIMController.atomnavigation.atomToScreenPosition());

                $mobileButton.removeClass('active');
               // mmenuAPI.close();
                //Close desktop menu
                $('#desktopMenu').fadeOut( "1000");
                //remove transparent from content container
                $('.transparentback').removeClass('transparentback');
                //show footer after removed it if there is no content
                $('#footer').show();
                $pageWrap.velocity("stop");
                $pageWrap.velocity({
                    opacity: 0
                }, {
                    duration: 300
                });

                // iterate over all menu items and toggle their "on" class
                $(".ajaxmenu a").each(function (index) {

                    var a = $(this);
                    var li = a.parent();
                    var aHref = a.attr("href");
                    li.removeClass("on");

                    if (href.indexOf(aHref) != -1) {
                        if (aHref == "/en/" && href != "/en/") {

                        } else {
                            li.addClass("on");
                            li.parentsUntil(".ajaxmenu").addClass("on");
                        }

                    }
                });

            })
            .on("received.data.ajaxmenu", function (event, href, data) {


                $pageWrap.velocity("stop");
                $pageWrap.css({"opacity": 0, "margin-top": "200px", "visibility": "visible"});
                $content.empty();

                $content.data("href", href);
                $content.append(data.html);
                $content.stop();
                $(window).resize();

                $content[0].scrollTop = 0;
                $pageWrap[0].scrollTop = 0;

                var urlStub = '';
                if (data.contentvars.lang == "en") {
                    urlStub = '/' + data.contentvars.currurl;
                } else {
                    urlStub = '/en/' + data.contentvars.currurl
                }

                $("head title").text(data.contentvars.title);
                $("#lang").attr("href", urlStub);

                //ga('send', 'pageview', href);
                $content.imagesLoaded(function () {
                    doPageLoaded(data);
                });

                $("#content .ajaxmenu").each(function (index) {
                    $ajax_menu.ajaxmenu("addMenu", $('a:not(.mm-next, .mm-prev)', $(this)));
                });

                $('html, body').animate({scrollTop: 0});

                $pageWrap.velocity({
                    opacity: 1,
                    marginTop: 0
                }, {
                    duration: 500,
                    complete: function (elements) {
                        $pageWrap.css({"opacity": 1, "margin-top": "0", "visibility": "visible"});
                    }
                });

                $('#data-picker').empty();
                $loaderWrapper.removeClass("active");


            })
            .on("fail.data.ajaxmenu", function (event, href, faildata) {

            })
            .ajaxmenu({
                links: "",
                speed: 300,
                allow_repeat_requests:true,
                datatype: "json"
            });


        $(".ajaxmenu").each(function (index) {

            $('a:not(.mm-next, .mm-prev, .no-ajax)', $(this)).on("click", function(){

                var $this = $(this);


                document.dispatchEvent(new CustomEvent("atom_navigation_event", {
                    detail: {
                        href:$this.attr('href')
                    }
                }));

            });

            $ajax_menu.ajaxmenu("addMenu", $('a:not(.mm-next, .mm-prev, .no-ajax)', $(this)));

        });

        doPageLoaded();

        /*
         * doPageLoaded
         * params : none
         * called when the document is ready and when the received.data.ajaxmenu event is fired to prepare galleries and other js elements
         * This must be called before the ajax-menu function is called on any navigation elements.
         *
         */
        function doPageLoaded(data) {

            /* Equal Height  ---------------------------------------------------------------------------------------------*/
            $('.widget--summary .widget__item').matchHeight({
                byRow: true
            });
            $('.widget--buddy .col--1xs').matchHeight({
                byRow: true
            });
        }

    }
);