"use strict";
(function () {

  /**
   * Variables
   */
  var userAgent = navigator.userAgent.toLowerCase(),
      initialDate = new Date(),

      $document = $(document),
      $window = $(window),
      $html = $("html"),
      lastScroll = 0,
      isDesktop = $html.hasClass("desktop"),
      isRtl = $html.attr("dir") === "rtl",
      isIE = userAgent.indexOf("msie") != -1 ? parseInt(userAgent.split("msie")[1], 10) : userAgent.indexOf("trident") != -1 ? 11 : userAgent.indexOf("edge") != -1 ? 12 : false,
      isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),
      onloadCaptchaCallback,
      isNingBuilder = window.xMode,

      plugins = {
        bootstrapTooltip: $("[data-toggle='tooltip']"),
        bootstrapTabs: $(".tabs"),
        rdNavbar: $(".rd-navbar"),
        materialParallax: $(".parallax-container"),
        rdInputLabel: $(".form-label"),
        regula: $("[data-constraints]"),
        owl: $(".owl-carousel"),
        swiper: $(".swiper-slider"),
        search: $(".rd-search"),
        statefulButton: $('.btn-stateful'),
        isotope: $(".isotope"),
        popover: $('[data-toggle="popover"]'),
        viewAnimate: $('.view-animate'),
        radio: $("input[type='radio']"),
        checkbox: $("input[type='checkbox']"),
        customToggle: $("[data-custom-toggle]"),
        counter: $(".counter"),
        selectFilter: $("select"),
        flickrfeed: $(".flickr"),
        captcha: $('.recaptcha'),
        scroller: $(".scroll-wrap"),
        stepper: $("input[type='number']"),
        customParallax: $(".custom-parallax"),
        vide: $(".vide_bg"),
        copyrightYear: $(".copyright-year"),
        mailchimp: $('.mailchimp-mailform'),
        campaignMonitor: $('.campaign-mailform'),
        jPlayer: $('.jp-jplayer'),
        jPlayerInit: $('.jp-player-init'),
        jPlayerVideo: $('.jp-video-init'),
        lightGallery: $("[data-lightgallery='group']"),
        lightGalleryItem: $("[data-lightgallery='item']"),
        countDown: $(".countdown"),
        svgCountDown: $('[data-circle-countdown]'),
        showMoreToggle: $('.slide-down-toggle'),
        animBox: $('.animated-box-wrap'),
        maps: $(".google-map-container"),
        modal: $('.modal'),
        bgBody: $('.bg-background-fade'),
        bgPanel: $('.color-code'),
        tilter: $(".tilter"),
        tilt: $('.tilt')
      };

  $(function () {

    /**
     * getSwiperHeight
     * @description  calculate the height of swiper slider basing on data attr
     */
    function getSwiperHeight(object, attr) {
      var val = object.attr("data-" + attr),
          dim;

      if (!val) {
        return undefined;
      }

      dim = val.match(/(px)|(%)|(vh)$/i);

      if (dim.length) {
        switch (dim[0]) {
          case "px":
            return parseFloat(val);
          case "vh":
            return $window.height() * (parseFloat(val) / 100);
          case "%":
            return object.width() * (parseFloat(val) / 100);
        }
      } else {
        return undefined;
      }
    }

    /**
     * Google map function for getting latitude and longitude
     */
    function getLatLngObject(str, marker, map, callback) {
      var coordinates = {};
      try {
        coordinates = JSON.parse(str);
        callback(new google.maps.LatLng(
            coordinates.lat,
            coordinates.lng
        ), marker, map)
      } catch (e) {
        map.geocoder.geocode({'address': str}, function (results, status) {
          if (status === google.maps.GeocoderStatus.OK) {
            var latitude = results[0].geometry.location.lat();
            var longitude = results[0].geometry.location.lng();

            callback(new google.maps.LatLng(
                parseFloat(latitude),
                parseFloat(longitude)
            ), marker, map)
          }
        })
      }
    }

    /**
     * function for animate text body on landing page
     */
    // function parallaxScroll() {
    //   offsetTop = window.pageYOffset;
    //   heightParLayer = inner.parentNode.clientHeight;
    //   innerHeight = inner.clientHeight;
    //   zInner = (offsetTop ) / heightParLayer * 200;
    //   o = ((innerHeight - (offsetTop * .7)) / innerHeight).toFixed(2);
    //   inner.style.setProperty('--to', (o));
    //   inner.style.setProperty('--tzInner', (zInner) + 'px');
    // };

    /**
     * toggleSwiperInnerVideos
     * @description  toggle swiper videos on active slides
     */
    function toggleSwiperInnerVideos(swiper) {
      var prevSlide = $(swiper.slides[swiper.previousIndex]),
          nextSlide = $(swiper.slides[swiper.activeIndex]),
          videos,
          videoItems = prevSlide.find("video");

      for(var i = 0; i < videoItems.length; i++) {
        videoItems[i].pause();
      }

      videos = nextSlide.find("video");
      if (!isNingBuilder && videos.length) {
        videos.get(0).play();
        videos.css({'visibility':'visible', 'opacity':'1'});
      }
    }

    /**
     * toggleSwiperCaptionAnimation
     * @description  toggle swiper animations on active slides
     */
    function toggleSwiperCaptionAnimation(swiper) {
      var prevSlide = $(swiper.container).find("[data-caption-animate]"),
          nextSlide = $(swiper.slides[swiper.activeIndex]).find("[data-caption-animate]"),
          delay,
          duration,
          nextSlideItem,
          prevSlideItem;

      for (var i = 0; i < prevSlide.length; i++) {
        prevSlideItem = $(prevSlide[i]);

        prevSlideItem.removeClass("animated")
            .removeClass(prevSlideItem.attr("data-caption-animate"))
            .addClass("not-animated");
      }

      for (var j = 0; j < nextSlide.length; j++) {
        nextSlideItem = $(nextSlide[j]);
        delay = nextSlideItem.attr("data-caption-delay");
        duration = nextSlideItem.attr('data-caption-duration');

        var tempFunction = function (nextSlideItem, duration) {
          return function(){
            nextSlideItem
                .removeClass("not-animated")
                .addClass(nextSlideItem.attr("data-caption-animate"))
                .addClass("animated");

            if (duration) {
              nextSlideItem.css('animation-duration', duration + 'ms');
            }
          };
        };

        setTimeout(tempFunction(nextSlideItem, duration), delay ? parseInt(delay, 10) : 0);
      }
    }

    /**
     * makeParallax
     * @description  create swiper parallax scrolling effect
     */
    function makeParallax(el, speed, wrapper, prevScroll) {
      var scrollY = window.scrollY || window.pageYOffset;

      if (prevScroll != scrollY) {
        prevScroll = scrollY;
        el.addClass('no-transition');
        el[0].style['transform'] = 'translate3d(0,' + -scrollY * (1 - speed) + 'px,0)';
        el.height();
        el.removeClass('no-transition');

        if (el.attr('data-fade') === 'true') {
          var bound = el[0].getBoundingClientRect(),
              offsetTop = bound.top * 2 + scrollY,
              sceneHeight = wrapper.outerHeight(),
              sceneDevider = wrapper.offset().top + sceneHeight / 2.0,
              layerDevider = offsetTop + el.outerHeight() / 2.0,
              pos = sceneHeight / 6.0,
              opacity;
          if (sceneDevider + pos > layerDevider && sceneDevider - pos < layerDevider) {
            el[0].style["opacity"] = 1;
          } else {
            if (sceneDevider - pos < layerDevider) {
              opacity = 1 + ((sceneDevider + pos - layerDevider) / sceneHeight / 3.0 * 5);
            } else {
              opacity = 1 - ((sceneDevider - pos - layerDevider) / sceneHeight / 3.0 * 5);
            }
            el[0].style["opacity"] = opacity < 0 ? 0 : opacity > 1 ? 1 : opacity.toFixed(2);
          }
        }
      }

      requestAnimationFrame(function () {
        makeParallax(el, speed, wrapper, prevScroll);
      });
    }

    /**
     * isScrolledIntoView
     * @description  check the element whas been scrolled into the view
     */
    function isScrolledIntoView(elem) {
      if  (!isNingBuilder) {
        return ( elem.offset().top + elem.outerHeight() >= $window.scrollTop() ) && ( elem.offset().top <= $window.scrollTop() + $window.height() );
      }
      else {
        return true;
      }
    }

    /**
     * initOnView
     * @description  calls a function when element has been scrolled into the view
     */
    function lazyInit(element, func) {
      var $win = jQuery(window);
      $win.on('load scroll', function () {
        if ((!element.hasClass('lazy-loaded') && (isScrolledIntoView(element)))) {
          func.call();
          element.addClass('lazy-loaded');
        }
      });
    }

    /**
     * attachFormValidator
     * @description  attach form validation to elements
     */
    function attachFormValidator(elements) {
      for (var i = 0; i < elements.length; i++) {
        var o = $(elements[i]), v;
        o.addClass("form-control-has-validation").after("<span class='form-validation'></span>");
        v = o.parent().find(".form-validation");
        if (v.is(":last-child")) {
          o.addClass("form-control-last-child");
        }
      }

      elements
          .on('input change propertychange blur', function (e) {
            var $this = $(this), results;

            if (e.type != "blur") {
              if (!$this.parent().hasClass("has-error")) {
                return;
              }
            }

            if ($this.parents('.rd-mailform').hasClass('success')) {
              return;
            }

            if ((results = $this.regula('validate')).length) {
              for (i = 0; i < results.length; i++) {
                $this.siblings(".form-validation").text(results[i].message).parent().addClass("has-error")
              }
            } else {
              $this.siblings(".form-validation").text("").parent().removeClass("has-error")
            }
          })
          .regula('bind');
    }

    /**
     * isValidated
     * @description  check if all elemnts pass validation
     */
    function isValidated(elements, captcha) {
      var results, errors = 0;

      if (elements.length) {
        for (j = 0; j < elements.length; j++) {

          var $input = $(elements[j]);
          if ((results = $input.regula('validate')).length) {
            for (k = 0; k < results.length; k++) {
              errors++;
              $input.siblings(".form-validation").text(results[k].message).parent().addClass("has-error");
            }
          } else {
            $input.siblings(".form-validation").text("").parent().removeClass("has-error")
          }
        }

        if (captcha) {
          if (captcha.length) {
            return validateReCaptcha(captcha) && errors == 0
          }
        }

        return errors == 0;
      }
      return true;
    }


    /**
     * validateReCaptcha
     * @description  validate google reCaptcha
     */
    function validateReCaptcha(captcha) {
      var $captchaToken = captcha.find('.g-recaptcha-response').val();

      if ($captchaToken == '') {
        captcha
            .siblings('.form-validation')
            .html('Please, prove that you are not robot.')
            .addClass('active');
        captcha
            .closest('.form-group')
            .addClass('has-error');

        captcha.on('propertychange', function () {
          var $this = $(this),
              $captchaToken = $this.find('.g-recaptcha-response').val();

          if ($captchaToken != '') {
            $this
                .closest('.form-group')
                .removeClass('has-error');
            $this
                .siblings('.form-validation')
                .removeClass('active')
                .html('');
            $this.off('propertychange');
          }
        });

        return false;
      }

      return true;
    }


    /**
     * onloadCaptchaCallback
     * @description  init google reCaptcha
     */
    window.onloadCaptchaCallback = function () {
      for (i = 0; i < plugins.captcha.length; i++) {
        var $capthcaItem = $(plugins.captcha[i]);

        grecaptcha.render(
            $capthcaItem.attr('id'),
            {
              sitekey: $capthcaItem.attr('data-sitekey'),
              size: $capthcaItem.attr('data-size') ? $capthcaItem.attr('data-size') : 'normal',
              theme: $capthcaItem.attr('data-theme') ? $capthcaItem.attr('data-theme') : 'light',
              callback: function (e) {
                $('.recaptcha').trigger('propertychange');
              }
            }
        );
        $capthcaItem.after("<span class='form-validation'></span>");
      }
    }

    /**
     * Init Bootstrap tooltip
     * @description  calls a function when need to init bootstrap tooltips
     */
    function initBootstrapTooltip(tooltipPlacement) {
      if (window.innerWidth < 599) {
        plugins.bootstrapTooltip.tooltip('destroy');
        plugins.bootstrapTooltip.tooltip({
          placement: 'bottom'
        });
      } else {
        plugins.bootstrapTooltip.tooltip('destroy');
        plugins.bootstrapTooltip.tooltipPlacement;
        plugins.bootstrapTooltip.tooltip();
      }
    }

    /**
     * Copyright Year
     * @description  Evaluates correct copyright year
     */

    if (plugins.copyrightYear.length) {
      plugins.copyrightYear.text(initialDate.getFullYear());
    }

    /**
     * Is Mac os
     * @description  add additional class on html if mac os.
     */
    if (navigator.platform.match(/(Mac)/i)) $html.addClass("mac-os");

    /**
     *  Vide - v0.5.1
     *  @description jQuery plugin for video backgrounds
     */
    if (plugins.vide.length) {
      for (var i = 0; i < plugins.vide.length; i++) {

        var $element = $(plugins.vide[i]),
            videObj = $element.data("vide").getVideoObject();

        if (isNingBuilder || !isScrolledIntoView($element)) {
          videObj.pause();
        }

        document.addEventListener( 'scroll', function ( $element, videObj ) {
          return function () {
            if (!isNingBuilder && (isScrolledIntoView($element) || videObj.pause()) ) videObj.play();
            else videObj.pause();
          }
        }( $element, videObj ) );

      }
    }

    /**
     * Bootstrap tabs
     * @description Activate Bootstrap Tabs
     */

    if (plugins.bootstrapTabs.length) {
      var i;
      for (i = 0; i < plugins.bootstrapTabs.length; i++) {
        var bootstrapTabsItem = $(plugins.bootstrapTabs[i]),
            isURLTabs = bootstrapTabsItem.attr('data-url-tabs') == 'true',
            currentHash = window.location.hash,
            tabsNav = bootstrapTabsItem.find('.tabs-nav');

        if (isURLTabs) {
          $('[data-content-to]:first-of-type').addClass('show');
        }

        bootstrapTabsItem.find('.nav-tabs').on('click', 'a', (function (isURLTabs, currentHash) {
          return function (event) {
            var currentLink = $(this).attr('href');

            event.preventDefault();
            $(this).tab('show');

            if (isURLTabs) {
              currentHash = currentLink;
              window.location.hash = currentHash;
            }

            var currentItem = $('[data-content-to].show');
            currentItem.removeClass('show');

            var newItem = $('[data-content-to = ' + currentHash + ']');
            newItem.addClass('show');
          };
        })(isURLTabs, currentHash));

        if (isURLTabs && currentHash) {
          bootstrapTabsItem.find("a[href$='" + currentHash + "']").first().trigger('click');

          setTimeout(function () {
            window.scrollTo(0, 0);
          }, 200);
        }

        tabsNav.on('click', 'a', function (bootstrapTabsItem) {
          return function (e) {
            if ( $(this).attr('href').indexOf('#') == -1) {
              return;
            }

            e.preventDefault();
            e.stopPropagation();
            bootstrapTabsItem.find("a[href$='" + $(this).attr('href').split('#').pop() + "']").first().trigger('click');
          };
        }(bootstrapTabsItem));
      }
    }


    /**
     * IE Polyfills
     * @description  Adds some loosing functionality to IE browsers
     */
    if (isIE) {
      if (isIE < 10) {
        $html.addClass("lt-ie-10");
      }

      if (isIE < 11) {
        if (plugins.pointerEvents) {
          $.getScript(plugins.pointerEvents)
              .done(function () {
                $html.addClass("ie-10");
                PointerEventsPolyfill.initialize({});
              });
        }
      }

      if (isIE === 11) {
        $("html").addClass("ie-11");
      }

      if (isIE === 12) {
        $("html").addClass("ie-edge");
      }
    }

    /**
     * Bootstrap Tooltips
     * @description Activate Bootstrap Tooltips
     */
    if (plugins.bootstrapTooltip.length) {
      var tooltipPlacement = plugins.bootstrapTooltip.attr('data-placement');
      initBootstrapTooltip(tooltipPlacement);
      $window.on('resize orientationchange', function () {
        initBootstrapTooltip(tooltipPlacement);
      })
    }

    /**
     * bootstrapModalDialog
     * @description Stap vioeo in bootstrapModalDialog
     */
    if (plugins.modal.length > 0) {
      var i = 0;

      for (i = 0; i < plugins.modal.length; i++) {
        var modalItem = $(plugins.modal[i]);

        modalItem.on('hidden.bs.modal', $.proxy(function () {
          var activeModal = $(this),
              rdVideoInside = activeModal.find('video'),
              youTubeVideoInside = activeModal.find('iframe');

          if (rdVideoInside.length) {
            rdVideoInside[0].pause();
          }

          if (youTubeVideoInside.length) {
            var videoUrl = youTubeVideoInside.attr('src');

            youTubeVideoInside
                .attr('src', '')
                .attr('src', videoUrl);
          }
        }, modalItem))
      }
    }

    /**
     * Radio
     * @description Add custom styling options for input[type="radio"]
     */
    if (plugins.radio.length) {
      var i;
      for (i = 0; i < plugins.radio.length; i++) {
        var $this = $(plugins.radio[i]);
        $this.addClass("radio-custom").after("<span class='radio-custom-dummy'></span>")
      }
    }

    /**
     * Checkbox
     * @description Add custom styling options for input[type="checkbox"]
     */
    if (plugins.checkbox.length) {
      var i;
      for (i = 0; i < plugins.checkbox.length; i++) {
        var $this = $(plugins.checkbox[i]);
        $this.addClass("checkbox-custom").after("<span class='checkbox-custom-dummy'></span>")
      }
    }

    /**
     * Popovers
     * @description Enables Popovers plugin
     */
    if (plugins.popover.length) {
      if (window.innerWidth < 767) {
        plugins.popover.attr('data-placement', 'bottom');
        plugins.popover.popover();
      }
      else {
        plugins.popover.popover();
      }
    }

    /**
     * Bootstrap Buttons
     * @description  Enable Bootstrap Buttons plugin
     */
    if (plugins.statefulButton.length) {
      $(plugins.statefulButton).on('click', function () {
        var statefulButtonLoading = $(this).button('loading');

        setTimeout(function () {
          statefulButtonLoading.button('reset')
        }, 2000);
      })
    }

    /**
     * RD Navbar
     * @description Enables RD Navbar plugin
     */
    if (plugins.rdNavbar.length) {
      plugins.rdNavbar.RDNavbar({
        anchorNav: !isNingBuilder,
        autoHeight: false,
        stickUpClone: (plugins.rdNavbar.attr("data-stick-up-clone") && !isNingBuilder) ? plugins.rdNavbar.attr("data-stick-up-clone") === 'true' : false,
        responsive: {
          0: {
            stickUp: (!isNingBuilder) ? plugins.rdNavbar.attr("data-stick-up") === 'true' : false
          },
          768: {
            stickUp: (!isNingBuilder) ? plugins.rdNavbar.attr("data-sm-stick-up") === 'true' : false
          },
          992: {
            stickUp: (!isNingBuilder) ? plugins.rdNavbar.attr("data-md-stick-up") === 'true' : false
          },
          1200: {
            stickUp: (!isNingBuilder) ? plugins.rdNavbar.attr("data-lg-stick-up") === 'true' : false
          }
        },
        callbacks: {
          onStuck: function () {
            var navbarSearch = this.$element.find('.rd-search input');

            if (navbarSearch) {
              navbarSearch.val('').trigger('propertychange');
            }
          },
          onDropdownOver: function () {
            return !isNingBuilder;
          },
          onUnstuck: function () {
            if (this.$clone === null)
              return;

            var navbarSearch = this.$clone.find('.rd-search input');

            if (navbarSearch) {
              navbarSearch.val('').trigger('propertychange');
              navbarSearch.trigger('blur');
            }
          }
        }
      });


      if (plugins.rdNavbar.attr("data-body-class")) {
        document.body.className += ' ' + plugins.rdNavbar.attr("data-body-class");
      }
    }

    /**
     * ViewPort Universal
     * @description Add class in viewport
     */
    if (plugins.viewAnimate.length) {
      var i;
      for (i = 0; i < plugins.viewAnimate.length; i++) {
        var $view = $(plugins.viewAnimate[i]).not('.active');
        $document.on("scroll", $.proxy(function () {
          if (isScrolledIntoView(this)) {
            this.addClass("active");
          }
        }, $view))
            .trigger("scroll");
      }
    }

    /**
     * Swiper 3.1.7
     * @description  Enable Swiper Slider
     */

    if (plugins.swiper.length) {
      for (var i = 0; i < plugins.swiper.length; i++) {
        var s = $(plugins.swiper[i]);
        var pag = s.find(".swiper-pagination"),
            next = s.find(".swiper-button-next"),
            prev = s.find(".swiper-button-prev"),
            bar = s.find(".swiper-scrollbar"),
            parallax = s.parents('.rd-parallax').length,
            swiperSlide = s.find(".swiper-slide"),
            autoplay = false;

        for (var j = 0; j < swiperSlide.length; j++) {
          var $this = $(swiperSlide[j]),
              url;

          if (url = $this.attr("data-slide-bg")) {
            $this.css({
              "background-image": "url(" + url + ")",
              "background-size": "cover"
            })
          }
        }

        swiperSlide.end()
            .find("[data-caption-animate]")
            .addClass("not-animated")
            .end();

        var swiperOptions = {
          autoplay: isNingBuilder ? null : s.attr('data-autoplay') ? s.attr('data-autoplay') === "false" ? undefined : s.attr('data-autoplay') : 5000,
          direction:s.attr('data-direction') ? s.attr('data-direction') : "horizontal",
          effect: s.attr('data-slide-effect') ? s.attr('data-slide-effect') : "slide",
          speed: s.attr('data-slide-speed') ? s.attr('data-slide-speed') : 600,
          autoHeight: s.attr('data-auto-height') ? s.attr('data-auto-height') === "true" : false,
          keyboardControl: s.attr('data-keyboard') === "true",
          mousewheelControl: s.attr('data-mousewheel') === "true",
          mousewheelReleaseOnEdges: s.attr('data-mousewheel-release') === "true",
          nextButton: next.length ? next.get(0) : (s.attr('data-custom-next') ? $(s.attr('data-custom-next')) : null),
          prevButton: prev.length ? prev.get(0) : (s.attr('data-custom-prev') ? $(s.attr('data-custom-prev')) : null),
          pagination: pag.length ? pag.get(0) : null,
          paginationType: s.attr('data-pagination-type') ? s.attr('data-pagination-type') : 'bullets',
          paginationClickable: pag.length ? pag.attr("data-clickable") !== "false" : false,
          paginationBulletRender: pag.length ? pag.attr("data-index-bullet") === "true" ? function (index, className) {
            return '<span class="' + className + '">' + (index + 1) + '</span>';
          } : null : null,
          scrollbar: bar.length ? bar.get(0) : null,
          scrollbarDraggable: bar.length ? bar.attr("data-draggable") !== "false" : true,
          scrollbarHide: bar.length ? bar.attr("data-draggable") === "false" : false,
          loop: isNingBuilder ? false : s.attr('data-loop') !== "false",
          setWrapperSize: true,
          simulateTouch: s.attr('data-simulate-touch') && !isNingBuilder ? s.attr('data-simulate-touch') === "true" : false,
          onTransitionStart: function (swiper) {
            toggleSwiperInnerVideos(swiper);
          },
          onTransitionEnd: function (swiper) {
            toggleSwiperCaptionAnimation(swiper);
          },
          onInit: function (swiper) {
            toggleSwiperInnerVideos(swiper);
            toggleSwiperCaptionAnimation(swiper);

            $window.on('resize', function () {
              swiper.update(true);
            })
          }
        };

        plugins.swiper[i] = s.swiper(swiperOptions);

        $window
            .on("resize", function () {
              var mh = getSwiperHeight(s, "min-height"),
                  h = getSwiperHeight(s, "height");
              if (h) {
                s.css("height", mh ? mh > h ? mh : h : h);
              }
            })
            .trigger("resize");

      }
    }

    /**
     * Select2
     * @description Enables select2 plugin
     */
    if (plugins.selectFilter.length) {
      var i;
      for (i = 0; i < plugins.selectFilter.length; i++) {
        var select = $(plugins.selectFilter[i]);

        select.select2({
          theme: "bootstrap"
        }).next().addClass(select.attr("class").match(/(input-sm)|(input-lg)|($)/i).toString().replace(new RegExp(",", 'g'), " "));
      }
    }

    /**
     * Owl carousel
     * @description Enables Owl carousel plugin
     */
    if (plugins.owl.length) {
      var i;
      for (i = 0; i < plugins.owl.length; i++) {
        var c = $(plugins.owl[i]),
            responsive = {};
        plugins.owl[i].owl = c;

        var aliaces = ["-", "-xs-", "-sm-", "-md-", "-lg-", "-xl-"],
            values = [0, 480, 768, 992, 1200, 1800],
            j, k;

        for (j = 0; j < values.length; j++) {
          responsive[values[j]] = {};
          for (k = j; k >= -1; k--) {
            if (!responsive[values[j]]["items"] && c.attr("data" + aliaces[k] + "items")) {
              responsive[values[j]]["items"] = k < 0 ? 1 : parseInt(c.attr("data" + aliaces[k] + "items"), 10);
            }
            if (!responsive[values[j]]["stagePadding"] && responsive[values[j]]["stagePadding"] !== 0 && c.attr("data" + aliaces[k] + "stage-padding")) {
              responsive[values[j]]["stagePadding"] = k < 0 ? 0 : parseInt(c.attr("data" + aliaces[k] + "stage-padding"), 10);
            }
            if (!responsive[values[j]]["margin"] && responsive[values[j]]["margin"] !== 0 && c.attr("data" + aliaces[k] + "margin")) {
              responsive[values[j]]["margin"] = k < 0 ? 30 : parseInt(c.attr("data" + aliaces[k] + "margin"), 10);
            }
          }
        }

        // Create custom Numbering
        if (typeof(c.attr("data-numbering")) !== 'undefined') {
          var numberingObject = $(c.attr("data-numbering"));

          c.on('initialized.owl.carousel changed.owl.carousel', function (numberingObject) {
            return function (e) {
              if (!e.namespace) return;
              numberingObject.find('.numbering-current').text((e.item.index + 1) % e.item.count + 1);
              numberingObject.find('.numbering-count').text(e.item.count);
            };
          }(numberingObject));
        }

        // Enable custom pagination
        if (c.attr('data-dots-custom')) {
          c.on("initialized.owl.carousel", function (event) {
            var carousel = $(event.currentTarget),
                customPag = $(carousel.attr("data-dots-custom")),
                active = 0;

            if (carousel.attr('data-active')) {
              active = parseInt(carousel.attr('data-active'), 10);
            }

            carousel.trigger('to.owl.carousel', [active, 300, true]);
            customPag.find("[data-owl-item='" + active + "']").addClass("active");

            customPag.find("[data-owl-item]").on('click', function (e) {
              e.preventDefault();
              carousel.trigger('to.owl.carousel', [parseInt(this.getAttribute("data-owl-item"), 10), 300, true]);
            });

            carousel.on("translate.owl.carousel", function (event) {
              customPag.find(".active").removeClass("active");
              customPag.find("[data-owl-item='" + event.item.index + "']").addClass("active")
            });
          });
        }

        c.on("initialized.owl.carousel", function () {
          initLightGallery($('[data-lightgallery="group-owl"]'), 'lightGallery-in-carousel');
          initLightGalleryItem($('[data-lightgallery="item-owl"]'), 'lightGallery-in-carousel');
        });

        c.owlCarousel({
          autoplay: isNingBuilder ? false: c.attr("data-autoplay") === "true",
          loop: isNingBuilder ? false : c.attr("data-loop") !== "false",
          items: 1,
          rtl: isRtl,
          dotsContainer: c.attr("data-pagination-class") || false,
          navContainer: c.attr("data-navigation-class") || false,
          mouseDrag: isNingBuilder ? false : c.attr("data-mouse-drag") !== "false",
          nav:  c.attr("data-nav") === "true",
          dots: ( isNingBuilder && c.attr("data-nav") !== "true" )
              ? true
              : c.attr("data-dots") === "true",
          dotsEach: c.attr("data-dots-each") ? parseInt(c.attr("data-dots-each"), 10) : false,
          animateIn: c.attr('data-animation-in') ? c.attr('data-animation-in') : false,
          animateOut: c.attr('data-animation-out') ? c.attr('data-animation-out') : false,
          responsive: responsive,
          center: c.attr("data-center") === "true",
          navText: function () {
            try {
              return JSON.parse(c.attr("data-nav-text"));
            } catch (e) {
              return [];
            }
          }(),
          navClass: function () {
            try {
              return JSON.parse(c.attr("data-nav-class"));
            } catch (e) {
              return ['owl-prev', 'owl-next'];
            }
          }()
        });
      }
    }

    /**
     * WOW
     * @description Enables Wow animation plugin
     */
    if (!isNingBuilder && isDesktop && $html.hasClass("wow-animation") && $(".wow").length) {
      new WOW().init();
    }

    /**
     * RD Input Label
     * @description Enables RD Input Label Plugin
     */
    if (plugins.rdInputLabel.length) {
      plugins.rdInputLabel.RDInputLabel();
    }

    /**
     * Regula
     * @description Enables Regula plugin
     */
    if (plugins.regula.length) {
      attachFormValidator(plugins.regula);
    }

    /**
     * MailChimp Ajax subscription
     */

    if (plugins.mailchimp.length) {
      for (i = 0; i < plugins.mailchimp.length; i++) {
        var $mailchimpItem = $(plugins.mailchimp[i]),
            $email = $mailchimpItem.find('input[type="email"]');

        // Required by MailChimp
        $mailchimpItem.attr('novalidate', 'true');
        $email.attr('name', 'EMAIL');

        $mailchimpItem.on('submit', $.proxy(function (e) {
          e.preventDefault();

          var $this = this;

          var data = {},
              url = $this.attr('action').replace('/post?', '/post-json?').concat('&c=?'),
              dataArray = $this.serializeArray(),
              $output = $("#" + $this.attr("data-form-output"));

          for (i = 0; i < dataArray.length; i++) {
            data[dataArray[i].name] = dataArray[i].value;
          }

          $.ajax({
            data: data,
            url: url,
            dataType: 'jsonp',
            error: function (resp, text) {
              $output.html('Server error: ' + text);

              setTimeout(function () {
                $output.removeClass("active");
              }, 4000);
            },
            success: function (resp) {
              $output.html(resp.msg).addClass('active');

              setTimeout(function () {
                $output.removeClass("active");
              }, 6000);
            },
            beforeSend: function (data) {
              // Stop request if builder or inputs are invalide
              if (isNingBuilder || !isValidated($this.find('[data-constraints]')))
                return false;

              $output.html('Submitting...').addClass('active');
            }
          });

          return false;
        }, $mailchimpItem));
      }
    }


    /**
     * Campaign Monitor ajax subscription
     */
    if (plugins.campaignMonitor.length) {
      for (i = 0; i < plugins.campaignMonitor.length; i++) {
        var $campaignItem = $(plugins.campaignMonitor[i]);

        $campaignItem.on('submit', $.proxy(function (e) {
          var data = {},
              url = this.attr('action'),
              dataArray = this.serializeArray(),
              $output = $("#" + plugins.campaignMonitor.attr("data-form-output")),
              $this = $(this);

          for (i = 0; i < dataArray.length; i++) {
            data[dataArray[i].name] = dataArray[i].value;
          }

          $.ajax({
            data: data,
            url: url,
            dataType: 'jsonp',
            error: function (resp, text) {
              $output.html('Server error: ' + text);

              setTimeout(function () {
                $output.removeClass("active");
              }, 4000);
            },
            success: function (resp) {
              $output.html(resp.Message).addClass('active');

              setTimeout(function () {
                $output.removeClass("active");
              }, 6000);
            },
            beforeSend: function (data) {
              // Stop request if builder or inputs are invalide
              if (isNingBuilder || !isValidated($this.find('[data-constraints]')))
                return false;

              $output.html('Submitting...').addClass('active');
            }
          });

          return false;
        }, $campaignItem));
      }
    }

    /**
     * Google ReCaptcha
     * @description Enables Google ReCaptcha
     */
    if (plugins.captcha.length) {
      var i;
      $.getScript("//www.google.com/recaptcha/api.js?onload=onloadCaptchaCallback&render=explicit&hl=en");
    }

    /**
     * Custom Toggles
     */
    if (plugins.customToggle.length) {
      var i;

      for (i = 0; i < plugins.customToggle.length; i++) {
        var $this = $(plugins.customToggle[i]);

        $this.on('click', $.proxy(function (event) {
          event.preventDefault();
          var $ctx = $(this);
          $($ctx.attr('data-custom-toggle')).add(this).toggleClass('active');
        }, $this));

        if ($this.attr("data-custom-toggle-hide-on-blur") === "true") {
          $("body").on("click", $this, function (e) {
            if (e.target !== e.data[0]
                && $(e.data.attr('data-custom-toggle')).find($(e.target)).length
                && e.data.find($(e.target)).length == 0) {
              $(e.data.attr('data-custom-toggle')).add(e.data[0]).removeClass('active');
            }
          })
        }

        if ($this.attr("data-custom-toggle-disable-on-blur") === "true") {
          $("body").on("click", $this, function (e) {
            if (e.target !== e.data[0] && $(e.data.attr('data-custom-toggle')).find($(e.target)).length == 0 && e.data.find($(e.target)).length == 0) {
              $(e.data.attr('data-custom-toggle')).add(e.data[0]).removeClass('active');
            }
          })
        }
      }
    }

    /**
     * jQuery Count To
     * @description Enables Count To plugin
     */
    if (plugins.counter.length) {
      var i;

      for (i = 0; i < plugins.counter.length; i++) {
        var $counterNotAnimated = $(plugins.counter[i]).not('.animated');
        $document
            .on("scroll", $.proxy(function () {
              var $this = this;

              if ((!$this.hasClass("animated")) && (isScrolledIntoView($this))) {
                $this.countTo({
                  refreshInterval: 40,
                  from: 0,
                  to: parseInt($this.text(), 10),
                  speed: $this.attr("data-speed") || 1000,
                  formatter: function (value, options) {
                    if ($this.attr('data-formatter') != 'false') {
                      value = value.toFixed(options.decimals);
                      if (value < 10) {
                        return '0' + value;
                      }
                      return value;

                    } else if (value.toString().indexOf('.') !== -1) {
                      var decimals = $this.attr('data-to').split('.')[1];
                      return value.toFixed(options.decimals) + '.' + decimals;

                    } else {
                      return value.toFixed(options.decimals);
                    }

                  }
                });
                $this.addClass('animated');
              }
            }, $counterNotAnimated))
            .trigger("scroll");
      }
    }

    /**
     * RD Flickr Feed
     * @description Enables RD Flickr Feed plugin
     */
    if (plugins.flickrfeed.length > 0) {
      for (var i = 0; i < plugins.flickrfeed.length; i++) {
        var $flickrfeedItem = $(plugins.flickrfeed[i]);
        $flickrfeedItem.RDFlickr({
          callback: function ($flickrfeedItem) {
            return function () {
              var items = $flickrfeedItem.find("[data-lightgallery]");

              if (items.length) {
                for (var j = 0; j < items.length; j++) {
                  var image = new Image();
                  image.setAttribute('data-index', j);
                  image.onload = function () {
                    items[this.getAttribute('data-index')].setAttribute('data-size', this.naturalWidth + 'x' + this.naturalHeight);
                  };
                  image.src = items[j].getAttribute('href');
                }
              }
            }
          }($flickrfeedItem)
        });
      }
    }

    /**
     * JQuery mousewheel plugin
     * @description  Enables jquery mousewheel plugin
     */
    if (plugins.scroller.length) {
      var i;
      for (i = 0; i < plugins.scroller.length; i++) {
        var scrollerItem = $(plugins.scroller[i]);

        scrollerItem.mCustomScrollbar({
          theme: scrollerItem.attr('data-theme') ? scrollerItem.attr('data-theme') : 'minimal',
          scrollInertia: 100,
          scrollButtons: {enable: false}
        });
      }
    }

    /**
     * Isotope
     * @description Enables Isotope plugin
     */
    if (plugins.isotope.length) {
      var i, j, isogroup = [];
      for (i = 0; i < plugins.isotope.length; i++) {
        var isotopeItem = plugins.isotope[i],
            filterItems = $(isotopeItem).parents('.isotope-wrap').find('[data-isotope-filter]'),
            iso;

        iso = new Isotope(isotopeItem, {
          itemSelector: '.isotope-item',
          layoutMode: isotopeItem.getAttribute('data-isotope-layout') ? isotopeItem.getAttribute('data-isotope-layout') : 'masonry',
          filter: '*',
          masonry: {
            columnWidth: '.grid-size'
          }
        });

        isogroup.push(iso);

        filterItems.on("click", function (e) {
          e.preventDefault();
          var filter = $(this),
              iso = $('.isotope[data-isotope-group="' + this.getAttribute("data-isotope-group") + '"]'),
              filtersContainer = filter.closest(".isotope-filters");

          filtersContainer
              .find('.active')
              .removeClass("active");
          filter.addClass("active");

          iso.isotope({
            itemSelector: '.isotope-item',
            layoutMode: iso.attr('data-isotope-layout') ? iso.attr('data-isotope-layout') : 'masonry',
            filter: this.getAttribute("data-isotope-filter") == '*' ? '*' : '[data-filter*="' + this.getAttribute("data-isotope-filter") + '"]',
            percentPosition: true,
            masonry: {
              columnWidth: '.grid-size'
            }
          });

          $window.trigger('resize');

        }).eq(0).trigger("click");
      }

      $window.on('load', function () {
        setTimeout(function () {
          var i;
          for (i = 0; i < isogroup.length; i++) {
            isogroup[i].element.className += " isotope--loaded";
            isogroup[i].layout();
          }
        }, 600);

        setTimeout(function () {
          $window.trigger('resize');
        }, 800);
      });
    }


    /**
     * Stepper
     * @description Enables Stepper Plugin
     */
    if (plugins.stepper.length) {
      plugins.stepper.stepper({
        labels: {
          up: "",
          down: ""
        }
      });
    }

    /**
     * Material Parallax
     * @description Enables Material Parallax plugin
     */
    if (plugins.materialParallax.length) {
      var i;

      if (!isNingBuilder && !isIE && !isMobile) {
        plugins.materialParallax.parallax();
      } else {
        for (i = 0; i < plugins.materialParallax.length; i++) {
          var parallax = $(plugins.materialParallax[i]),
              imgPath = parallax.data("parallax-img");

          parallax.css({
            "background-image": 'url(' + imgPath + ')',
            "background-size": "cover"
          });
        }
      }
    }

    /**
     * jpFormatePlaylistObj
     * @description  format dynamic playlist object for jPlayer init
     */
    function jpFormatePlaylistObj(playlistHtml) {
      var playlistObj = [];

      // Format object with audio
      for (var i = 0; i < playlistHtml.length; i++){
        var playlistItem = playlistHtml[i],
            itemData = $(playlistItem).data();
        playlistObj[i] = {};

        for ( var key in itemData ){
          playlistObj[i][key.replace('jp', '').toLowerCase()] = itemData[key];
        }
      }

      return playlistObj;
    }

    /**
     * initJplayerBase
     * @description Base jPlayer init
     */
    function initJplayerBase(index, item, mediaObj) {
      return new jPlayerPlaylist({
        jPlayer: item.getElementsByClassName("jp-jplayer")[0],
        cssSelectorAncestor: ".jp-audio-" + index // Need too bee a selector not HTMLElement or Jq object, so we make it unique
      }, mediaObj, {
        playlistOptions: {
          enableRemoveControls: false
        },
        supplied: "ogv, m4v, oga, mp3",
        useStateClassSkin: true,
        volume: 0.4
      });
    }


    /**
     * Jp Audio player
     * @description  Custom jPlayer script
     */

    if (plugins.jPlayerInit.length) {
      $html.addClass( 'ontouchstart' in window || 'onmsgesturechange' in window ? 'touch' : 'no-touch' );

      $.each(plugins.jPlayerInit, function (index, item) {
        $(item).addClass('jp-audio-' + index);

        var mediaObj = jpFormatePlaylistObj($(item).find('.jp-player-list .jp-player-list-item')),
            playerInstance = initJplayerBase(index, item, mediaObj);

        if( $(item).data('jp-player-name') ){
          var customJpPlaylists = $('[data-jp-playlist-relative-to="' + $(item).data('jp-player-name') + '"]'),
              playlistItems = customJpPlaylists.find("[data-jp-playlist-item]");

          // Toggle audio play on custom playlist play button click
          playlistItems.on('click', customJpPlaylists.data('jp-playlist-play-on'), function (e) {
            var mediaObj = jpFormatePlaylistObj(playlistItems),
                $clickedItem = $(e.delegateTarget);

            if ( !JSON.stringify(playerInstance.playlist) === JSON.stringify(mediaObj) || !playerInstance.playlist.length ) {
              playerInstance.setPlaylist(mediaObj);
            }

            if ( !$clickedItem.hasClass('playing') ) {
              playerInstance.pause();

              if ( $clickedItem.hasClass('last-played') ) {
                playerInstance.play();
              } else{
                playerInstance.play(playlistItems.index($clickedItem));
              }

              playlistItems.removeClass('playing last-played');
              $clickedItem.addClass('playing');
            } else {
              playlistItems.removeClass('playing last-played');
              $clickedItem.addClass('last-played');
              playerInstance.pause();
            }

          });


          // Callback for custom playlist
          $(playerInstance.cssSelector.jPlayer).bind($.jPlayer.event.play, function(e) {

            var toggleState = function (elemClass, index) {
              var activeIndex = playlistItems.index(playlistItems.filter(elemClass));

              if ( activeIndex !== -1 ) {
                if ( playlistItems.eq(activeIndex + index).length !== 0 ) {
                  playlistItems.eq(activeIndex)
                      .removeClass('play-next play-prev playing last-played')
                      .end()
                      .eq(activeIndex + index)
                      .addClass('playing');
                }
              }
            };

            // Check if user select next or prev track
            toggleState('.play-next', +1);
            toggleState('.play-prev', -1);

            var lastPlayed = playlistItems.filter('.last-played');

            // If user just press pause and than play on same track
            if (lastPlayed.length){
              lastPlayed.addClass('playing').removeClass('last-played play-next');
            }
          });


          // Add temp marker of last played audio
          $(playerInstance.cssSelector.jPlayer).bind($.jPlayer.event.pause, function(e) {
            playlistItems.filter('.playing').addClass('last-played').removeClass('playing');

            $(playerInstance.cssSelector.cssSelectorAncestor).addClass('jp-state-visible');
          });

          // Add temp marker that user want to play next audio
          $(item).find('.jp-next')
              .on('click', function (e) {
                playlistItems.filter('.playing, .last-played').addClass('play-next');
              });

          // Add temp marker that user want to play prev audio
          $(item).find('.jp-previous')
              .on('click', function (e) {
                playlistItems.filter('.playing, .last-played').addClass('play-prev');
              });
        }
      });

    }

    /**
     * Jp Video player
     * @description  Custom jPlayer video initialization
     */

    if (plugins.jPlayerVideo.length) {
      $.each(plugins.jPlayerVideo, function (index, item) {
        var $item = $(item);

        $item.find('.jp-video').addClass('jp-video-' + index);

        new jPlayerPlaylist({
          jPlayer: item.getElementsByClassName("jp-jplayer")[0],
          cssSelectorAncestor: ".jp-video-" + index // Need too bee a selector not HTMLElement or Jq object, so we make it unique
        }, jpFormatePlaylistObj($(item).find('.jp-player-list .jp-player-list-item')), {
          playlistOptions: {
            enableRemoveControls: false
          },
          size: {
            width: "100%",
            height: "auto",
          },
          supplied: "webmv, ogv, m4v",
          useStateClassSkin: true,
          volume: 0.4
        });

        $(item).find(".jp-jplayer").on('click', function (e) {
          var $this = $(this);
          if ($('.jp-video-' + index).hasClass('jp-state-playing')) {
            $this.jPlayer("pause");
          } else {
            $this.jPlayer("play");
          }
        });

        var initialContainerWidth = $item.width();
        // this is the overall page container, so whatever is relevant to your page

        $window.resize(function () {
          if ($item.width() !== initialContainerWidth) {
            // checks current container size against it's rendered size on every resize.
            initialContainerWidth = $item.width();
            $item.trigger('resize', $item);
            //pass off to resize listener for performance
          }
        });
      });

      $window.on('resize', function (e) {
        $('.jp-video').each(function (index) {
          // find every instance of jplayer using a class in their default markup
          var $parentContainer = $(this).closest('.jp-video-init'),
              // finds jplayers closest parent element from the ones you give it (can chain as many as you want)
              containerWidth = $parentContainer.width(),
              //takes the closest elements width
              ARWidth = 1280,
              ARHeight = 720;

          // Width and height figures used to calculate the aspect ratio (will not restrict your players to this size)

          var aspectRatio = ARHeight / ARWidth;

          var videoHeight = Math.round(aspectRatio * containerWidth);
          // calculates the appropriate height in rounded pixels using the aspect ratio
          $(this).find('.jp-jplayer').width(containerWidth).height(videoHeight);
          // and then apply the width and height!
        });
      })
          .trigger('resize');
    }

    /**
     * lightGallery
     * @description Enables lightGallery plugin
     */
    function initLightGallery(itemsToInit, addClass) {
      if (itemsToInit.length && !isNingBuilder) {
        $(itemsToInit).lightGallery({
          thumbnail: true,
          selector: "[data-lightgallery='group-item']",
          addClass: addClass
        });
      }
    }

    function initLightGalleryItem(itemToInit, addClass) {
      if (itemToInit.length && !isNingBuilder) {
        $(itemToInit).lightGallery({
          selector: "this",
          addClass: addClass,
          counter: false,
          youtubePlayerParams: {
            modestbranding: 1,
            showinfo: 0,
            rel: 0,
            controls: 0
          },
          vimeoPlayerParams: {
            byline: 0,
            portrait: 0
          }
        });
      }
    }

    if (plugins.lightGallery.length) {
      initLightGallery(plugins.lightGallery);
    }

    if (plugins.lightGalleryItem.length) {
      initLightGalleryItem(plugins.lightGalleryItem);
    }

    /**
     * UI To Top
     * @description Enables ToTop Button
     */
    if (isDesktop && !isNingBuilder) {
      $().UItoTop({
        easingType: 'easeOutQuart',
        containerClass: 'ui-to-top fa fa-angle-up'
      });
    }


    /**
     * jQuery Countdown
     * @description  Enable countdown plugin
     */
    if (plugins.countDown.length) {
      var i;
      for (i = 0; i < plugins.countDown.length; i++) {
        var $countDownItem = $(plugins.countDown[i]),
            d = new Date(),
            type = $countDownItem.attr('data-type'),
            time = $countDownItem.attr('data-time'),
            format = $countDownItem.attr('data-format'),
            settings = [];

        d.setTime(Date.parse(time)).toLocaleString();
        settings[type] = d;
        settings['format'] = format;
        $countDownItem.countdown(settings);
      }
    }

    /**
     * SVG Countdown
     */
    if( plugins.svgCountDown.length ) {
      svgCountDown({
        tickInterval:    100,
        counterSelector: '.countdown-counter'
      });
    }

    /**
     * Slide down toggle
     */
    if ( plugins.showMoreToggle.length ) {
      for( var i = 0; i < plugins.showMoreToggle.length; i++ ) {
        $(plugins.showMoreToggle[i]).on( 'click', function () {
          $(this).parents('.slide-down-wrapper').children('.hidden-content').slideToggle(1000,"linear");
          $(this).toggleClass('active');
        });
      }
    }

    /**
     * button flip for builder
     */
    if( plugins.animBox.length && isNingBuilder ) {
      var newBtn = "<button type='button' class='flip btn btn-primary'>Click to Flip</button>";

      for( var i = 0; i < plugins.animBox.length; i++ ) {
        var animWrap = $(plugins.animBox[i]);
        animWrap.append(newBtn);
        animWrap.find('.flip').on ('click', function( animWrap ){
          return function(){
            animWrap.toggleClass('active');
          };
        }( animWrap ));
      }
    }

    /**
     * Google maps
     * */
    if( plugins.maps.length ) {
      $.getScript("//maps.google.com/maps/api/js?key=AIzaSyBVBfw0LmLPsPV5Ezj2snp0sEHArvAdKsc&sensor=false&libraries=geometry,places&v=3.7", function () {
        var head = document.getElementsByTagName('head')[0],
            insertBefore = head.insertBefore;

        head.insertBefore = function (newElement, referenceElement) {
          if (newElement.href && newElement.href.indexOf('//fonts.googleapis.com/css?family=Roboto') !== -1 || newElement.innerHTML.indexOf('gm-style') !== -1) {
            return;
          }
          insertBefore.call(head, newElement, referenceElement);
        };
        var geocoder = new google.maps.Geocoder;
        for (var i = 0; i < plugins.maps.length; i++) {
          var zoom = parseInt(plugins.maps[i].getAttribute("data-zoom"), 10) || 11;
          var styles = plugins.maps[i].hasAttribute('data-styles') ? JSON.parse(plugins.maps[i].getAttribute("data-styles")) : [];
          var center = plugins.maps[i].getAttribute("data-center") || "New York";

          // Initialize map
          var map = new google.maps.Map(plugins.maps[i].querySelectorAll(".google-map")[0], {
            zoom: zoom,
            styles: styles,
            scrollwheel: false,
            center: {lat: 0, lng: 0}
          });
          // Add map object to map node
          plugins.maps[i].map = map;
          plugins.maps[i].geocoder = geocoder;
          plugins.maps[i].google = google;

          // Get Center coordinates from attribute
          getLatLngObject(center, null, plugins.maps[i], function (location, markerElement, mapElement) {
            mapElement.map.setCenter(location);
          })

          // Add markers from google-map-markers array
          var markerItems = plugins.maps[i].querySelectorAll(".google-map-markers li");

          if (markerItems.length){
            var markers = [];
            for (var j = 0; j < markerItems.length; j++){
              var markerElement = markerItems[j];
              getLatLngObject(markerElement.getAttribute("data-location"), markerElement, plugins.maps[i], function(location, markerElement, mapElement){
                var icon = markerElement.getAttribute("data-icon") || mapElement.getAttribute("data-icon");
                var activeIcon = markerElement.getAttribute("data-icon-active") || mapElement.getAttribute("data-icon-active");
                var info = markerElement.getAttribute("data-description") || "";
                var infoWindow = new google.maps.InfoWindow({
                  content: info
                });
                markerElement.infoWindow = infoWindow;
                var markerData = {
                  position: location,
                  map: mapElement.map
                }
                if (icon){
                  markerData.icon = icon;
                }
                var marker = new google.maps.Marker(markerData);
                markerElement.gmarker = marker;
                markers.push({markerElement: markerElement, infoWindow: infoWindow});
                marker.isActive = false;
                // Handle infoWindow close click
                google.maps.event.addListener(infoWindow,'closeclick',(function(markerElement, mapElement){
                  var markerIcon = null;
                  markerElement.gmarker.isActive = false;
                  markerIcon = markerElement.getAttribute("data-icon") || mapElement.getAttribute("data-icon");
                  markerElement.gmarker.setIcon(markerIcon);
                }).bind(this, markerElement, mapElement));


                // Set marker active on Click and open infoWindow
                google.maps.event.addListener(marker, 'click', (function(markerElement, mapElement) {
                  if (markerElement.infoWindow.getContent().length === 0) return;
                  var gMarker, currentMarker = markerElement.gmarker, currentInfoWindow;
                  for (var k =0; k < markers.length; k++){
                    var markerIcon;
                    if (markers[k].markerElement === markerElement){
                      currentInfoWindow = markers[k].infoWindow;
                    }
                    gMarker = markers[k].markerElement.gmarker;
                    if (gMarker.isActive && markers[k].markerElement !== markerElement){
                      gMarker.isActive = false;
                      markerIcon = markers[k].markerElement.getAttribute("data-icon") || mapElement.getAttribute("data-icon")
                      gMarker.setIcon(markerIcon);
                      markers[k].infoWindow.close();
                    }
                  }

                  currentMarker.isActive = !currentMarker.isActive;
                  if (currentMarker.isActive) {
                    if (markerIcon = markerElement.getAttribute("data-icon-active") || mapElement.getAttribute("data-icon-active")){
                      currentMarker.setIcon(markerIcon);
                    }

                    currentInfoWindow.open(map, marker);
                  }else{
                    if (markerIcon = markerElement.getAttribute("data-icon") || mapElement.getAttribute("data-icon")){
                      currentMarker.setIcon(markerIcon);
                    }
                    currentInfoWindow.close();
                  }
                }).bind(this, markerElement, mapElement))
              })
            }
          }
        }
      });
    }


    /**
     * add active in Services tabs
     * */
    if ( plugins.modal.length ) {
      $('.onepage-service').find('[data-toggle="modal"]').on('click', function(){
        plugins.modal.find('.nav-link').removeClass('active');
        plugins.modal.find('.tab-pane').removeClass('active show');

        plugins.modal.find('[href="#tabs-1-1"]').addClass('active');
        plugins.modal.find('#tabs-1-1').addClass('active show');
      });

      $('.multipage-service').find('[data-toggle="modal"]').on('click', function(){
        plugins.modal.find('.nav-link').removeClass('active');
        plugins.modal.find('.tab-pane').removeClass('active show');

        plugins.modal.find('[href="#tabs-1-2"]').addClass('active');
        plugins.modal.find('#tabs-1-2').addClass('active show');
      });

      $('.extended-service').find('[data-toggle="modal"]').on('click', function(){
        plugins.modal.find('.nav-link').removeClass('active');
        plugins.modal.find('.tab-pane').removeClass('active show');

        plugins.modal.find('[href="#tabs-1-3"]').addClass('active');
        plugins.modal.find('#tabs-1-3').addClass('active show');
      });
    }

    /***
     * SetMegamenuPosition
     */
    function SetMegamenuPosition() {
      if ($window.width() > 991) {
        setTimeout(function () {
          var totalHeight = $('nav.navbar').outerHeight();
          $('.mega-menu').css({top: totalHeight});
          if ($('.navbar-brand-top').length === 0)
            $('.dropdown.simple-dropdown > .dropdown-menu').css({top: totalHeight});
        }, 200);
      } else {
        $('.mega-menu').css('top', '');
        $('.dropdown.simple-dropdown > .dropdown-menu').css('top', '');
      }
    }

    /**
     dynamic font size START CODE
     */
    function feature_dynamic_font_line_height() {
      if ($('.dynamic-font-size').length > 0) {
        var site_width = 1100;
        var window_width = $window.width();
        if (window_width < site_width) {
          var window_site_width_ratio = window_width / site_width;
          $('.dynamic-font-size').each(function () {
            var font_size = $(this).attr('data-fontsize');
            var line_height = $(this).attr('data-lineheight');
            if (font_size != '' && font_size != undefined) {
              var new_font_size = Math.round(font_size * window_site_width_ratio * 1000) / 1000;
              $(this).css('font-size', new_font_size + 'px');
            }
            if (line_height !== '' && line_height !== undefined) {
              var new_line_height = Math.round(line_height * window_site_width_ratio * 1000) / 1000;
              $(this).css('line-height', new_line_height + 'px');
            }
          });
        } else {
          $('.dynamic-font-size').each(function () {
            var font_size = $(this).attr('data-fontsize');
            var line_height = $(this).attr('data-lineheight');
            if (font_size !== '' && font_size !== undefined) {
              $(this).css('font-size', font_size + 'px');
            }
            if (line_height !== '' && line_height !== undefined) {
              $(this).css('line-height', line_height + 'px');
            }
          });
        }
      }
    }

    /***
     * setButtonPosition
     * @description swiper button position in auto height slider
     */
    function setButtonPosition() {

      var $swiperAutoHeightContainer = $(".swiper-auto-height-container"),
          $swiperAutoHeightContainerSlide = $swiperAutoHeightContainer.find('.swiper-slide'),
          $swiperAutoHeightContainerBanner = $swiperAutoHeightContainer.find('.slide-banner'),
          $navigationArea = $('.navigation-area');

      if ($window.width() > 767 && $swiperAutoHeightContainer.length > 0) {
        var leftPosition = parseInt($swiperAutoHeightContainerSlide.css('padding-left'));
        var bottomPosition = parseInt($swiperAutoHeightContainerSlide.css('padding-bottom'));
        var bannerWidth = parseInt($swiperAutoHeightContainerBanner.outerWidth());
        $navigationArea.css({'left': bannerWidth + leftPosition + 'px', 'bottom': bottomPosition + 'px'});
      } else if ($swiperAutoHeightContainer.length > 0) {
        $navigationArea.css({'left': '', 'bottom': ''});
      }
    }

    /***
     * setPageTitleSpace
     * @description page title space
     */
    function setPageTitleSpace() {
      var $navbar = $('.navbar'),
          topSpace = $('.top-space'),
          topHeaderArea = $('.top-header-area');

      if ($navbar.hasClass('navbar-top') || $('nav').hasClass('navbar-fixed-top')) {
        if (topSpace.length > 0) {
          var top_space_height = $navbar.outerHeight();
          if (topHeaderArea.length > 0) {
            top_space_height = top_space_height + topHeaderArea.outerHeight();
          }
          topSpace.css('margin-top', top_space_height + "px");
        }
      }
    }

    function SetResizeContent() {
      //    all function call
      feature_dynamic_font_line_height();
      SetMegamenuPosition();
      setPageTitleSpace();
      setButtonPosition();
    }

    /***
     * One Page Main JS
     */
    $window.on("scroll", init_scroll_navigate);

    function init_scroll_navigate() {
      var menu_links = $(".navbar-nav li a");
      var scrollPos = $document.scrollTop();
      menu_links.each(function () {
        var currLink = $(this);
        if (currLink.attr("href").indexOf("#") > -1 && $(currLink.attr("href")).length > 0) {
          var refElement = $(currLink.attr("href"));
          if (refElement.position().top <= scrollPos && refElement.position().top + refElement.height() > scrollPos) {
            menu_links.removeClass("active");
            currLink.addClass("active");
          } else {
            currLink.removeClass("active");
          }
        }
      });

      /***
       * Background color slider Start
       */
      if (plugins.bgPanel.length) {
        var scroll = $window.scrollTop() + ($window.height() / 2);

        plugins.bgPanel.each(function () {
          var $this = $(this);
          if ($this.position().top <= scroll && $this.position().top + $this.height() > scroll) {
            plugins.bgBody.removeClass(function (index, css) {
              return (css.match(/(^|\s)color-\S+/g) || []).join(' ');
            });
            plugins.bgBody.addClass('color-' + $(this).data('color'));
          }
        });
      }


      /**
       sticky nav Start
       */

      var headerHeight = $('nav').outerHeight();
      if (!$('header').hasClass('no-sticky') && !isNingBuilder) {
        if ($document.scrollTop() >= headerHeight) {
          $('header').addClass('sticky');

        } else if ($document.scrollTop() <= headerHeight) {
          $('header').removeClass('sticky');
          setTimeout(function () {
            setPageTitleSpace();
          }, 500);
        }
        SetMegamenuPosition();
      }

      /***
       * Scroll Top
       * @description header appear on scroll up
       */

      if (!isNingBuilder) {
        var st = $(this).scrollTop();
        if (st > lastScroll) {
          $('.sticky').removeClass('header-appear');
          $('.dropdown.on').removeClass('on').removeClass('open').find('.dropdown-menu').fadeOut(100);
        } else
          $('.sticky').addClass('header-appear');
        lastScroll = st;
        if (lastScroll <= headerHeight)
          $('header').removeClass('header-appear');
      }
    }


    /**
     full screen START CODE
     */
    function fullScreenHeight() {
      var element = $(".full-screen");
      var $minheight = $window.height();
      element.parents('section').imagesLoaded(function () {
        if ($(".top-space .full-screen").length > 0) {
          var $headerheight = $("header nav.navbar").outerHeight();
          $(".top-space .full-screen").css('min-height', $minheight - $headerheight);
        } else {
          element.css('min-height', $minheight);
        }
      });

      var minwidth = $window.width();
      $(".full-screen-width").css('min-width', minwidth);
      var sidebarNavHeight = $('.sidebar-nav-style-1').height() - $('.logo-holder').parent().height() - $('.footer-holder').parent().height() - 10;
      $(".sidebar-nav-style-1 .nav").css('height', (sidebarNavHeight));
      var style2NavHeight = parseInt($('.sidebar-part2').height() - parseInt($('.sidebar-part2 .sidebar-middle').css('padding-top')) - parseInt($('.sidebar-part2 .sidebar-middle').css('padding-bottom')) - parseInt($(".sidebar-part2 .sidebar-middle .sidebar-middle-menu .nav").css('margin-bottom')));
      $(".sidebar-part2 .sidebar-middle .sidebar-middle-menu .nav").css('height', (style2NavHeight));


    }

    /**
     START RESIZE
     */
    $window.resize(function (event) {
      // Bootsnav menu work with eualize height
      $("nav.navbar.bootsnav ul.nav").each(function () {
        $("li.dropdown", this).on("mouseenter", function (e) {
          if ($window.width() > 991) {
            $(this).find('.equalize').equalize({equalize: 'outerHeight', reset: true});
            return false;
          }
        });
      });

      setTimeout(function () {
        SetResizeContent();
      }, 500);
      event.preventDefault();
    });

    $("nav.navbar.bootsnav ul.nav").each(function () {
      $("li.dropdown", this).on("mouseenter", function () {
        if ($window.width() > 991) {
          $(this).find('.equalize').equalize({equalize: 'outerHeight', reset: true});
          return false;
        }
      });
    });


    $document.on("click", '.navbar .navbar-collapse a.dropdown-toggle, .accordion-style1 .panel-heading a, .accordion-style2 .panel-heading a, .accordion-style3 .panel-heading a, .toggles .panel-heading a, .toggles-style2 .panel-heading a, .toggles-style3 .panel-heading a, a.carousel-control, .nav-tabs a[data-toggle="tab"], a.shopping-cart', function (e) {
      e.preventDefault();

    });

    $(".dropdown-toggle").dropdown();

    $('body').on('touchstart click', function (e) {
      if ($window.width() < 992) {
        if (!$('.navbar-collapse').has(e.target).is('.navbar-collapse') && $('.navbar-collapse').hasClass('in') && !$(e.target).hasClass('navbar-toggle')) {
          $('.navbar-collapse').collapse('hide');
        }
      } else {
        if (!$('.navbar-collapse').has(e.target).is('.navbar-collapse') && $('.navbar-collapse ul').hasClass('in')) {

          $('.navbar-collapse').find('a.dropdown-toggle').addClass('collapsed');
          $('.navbar-collapse').find('ul.dropdown-menu').removeClass('in');
          $('.navbar-collapse a.dropdown-toggle').removeClass('active');
        }
      }
    });

    $('.navbar-collapse a.dropdown-toggle').on('touchstart', function (e) {
      $('.navbar-collapse a.dropdown-toggle').not(this).removeClass('active');
      if ($(this).hasClass('active'))
        $(this).removeClass('active');
      else
        $(this).addClass('active');
    });

    $('button.navbar-toggle').on("click", function (e) {
      if (isMobile) {
        $(".cart-content").css('opacity', '0');
        $(".cart-content").css('visibility', 'hidden');
      }
    });

    $('a.dropdown-toggle').on("click", function (e) {
      if (isMobile) {
        $(".cart-content").css('opacity', '0');
        $(".cart-content").css('visibility', 'hidden');
      }
    });

    $('.navbar-collapse [data-toggle="dropdown"]').on('click', function (event) {

      var $innerLinkLI = $(this).parents('ul.navbar-nav').find('li.dropdown a.inner-link').parent('li.dropdown');
      if (!$(this).hasClass('inner-link') && $innerLinkLI.hasClass('open')) {
        $innerLinkLI.removeClass('open');
      }
      var target = $(this).attr('target');
      if ($window.width() <= 991 && $(this).attr('href') && $(this).attr('href').indexOf("#") <= -1 && !$(event.target).is('i')) {
        if (event.ctrlKey || event.metaKey) {
          window.open($(this).attr('href'), "_blank");
          return false;
        } else if (!target)
          window.location = $(this).attr('href');
        else
          window.open($(this).attr('href'), target);

      } else if ($window.width() > 991 && $(this).attr('href').indexOf("#") <= -1) {
        if (event.ctrlKey || event.metaKey) {
          window.open($(this).attr('href'), "_blank");
          return false;
        } else if (!target)
          window.location = $(this).attr('href');
        else
          window.open($(this).attr('href'), target);

      } else if ($window.width() <= 991 && $(this).attr('href') && $(this).attr('href').length > 1 && $(this).attr('href').indexOf("#") >= 0 && $(this).hasClass('inner-link')) {
        $(this).parents('ul.navbar-nav').find('li.dropdown').not($(this).parent('.dropdown')).removeClass('open');
        if ($(this).parent('.dropdown').hasClass('open')) {
          $(this).parent('.dropdown').removeClass('open');
        } else {
          $(this).parent('.dropdown').addClass('open');
        }
        $(this).toggleClass('active');
      }
    });

    $('.nav.navbar-nav a.inner-link').on("click", function (e) {
      $(this).parents('ul.navbar-nav').find('a.inner-link').removeClass('active');
      var $this = $(this);
      if ($('.nav-header-container .navbar-toggle').is(':visible'))
        $(this).parents('.navbar-collapse').collapse('hide');
      setTimeout(function () {
        $this.addClass('active');
      }, 1000);
    });

    // ICO template

    function getRates(rate) {
      var tokenNameInfo = $('.token_name_info .token_name');
      var ratesList = $('.rates');
      var precision = 5;

      if (!rate.common) return null;

      const content = rate.common;
      const rates = content.rates;

      if (content.tokenName !== '') {
        tokenNameInfo.text(content.tokenName)
      }

      if (!rates) return null;

      for (var key in rates) {
        if (rates.hasOwnProperty(key)) {
          ratesList.find('.' + key).find('.value').text(parseFloat(rates[key]).toPrecision(precision))
        }
      }
    }

    function countdownIco(countdown) {
      function counter(stage) {
        var second = 1000,
            minute = second * 60,
            hour = minute * 60,
            day = hour * 24,
            startDate = countdown.stages.firstStage.startDate,
            finishStage = stage.finishDate,
            distance;
        if (countdown.stages.currentStage == null) {
          distance = startDate * 1000 - countdown.common.currentDate * 1000;
        } else {
          distance = finishStage * 1000 - countdown.common.currentDate * 1000;
        }

        setInterval(function () {
          distance = distance - second;
          $('.days_ico').text(Math.floor(distance / (day)));
          $('.hours_ico').text(Math.floor((distance % (day)) / (hour)));
          $('.minutes_ico').text(Math.floor((distance % (hour)) / (minute)));
          $('.seconds_ico').text(Math.floor((distance % (minute)) / second));
        }, 1000);
      }

      const isCountDownAdd = $('.ico_countdown_section').length > 0;

      if (!isCountDownAdd) return null;

      if (countdown.stages.currentStage == null) {
        setUpCountDown(countdown.stages.firstStage, 'will start after')
      } else {
        const stages = countdown.stages.currentStage;
        stages.date = stages.finishDate

        setUpCountDown(stages, 'is Going on')
      }

      function setUpCountDown(stage, status) {
        $('.stage').text(stage.title);
        if (status == "is Going on") {
          $('.stage_description').html("Buy <span class='currency'>" + countdown.common.tokenName + "</span> with <span class='percent'>" + stage.bonus + " %</span> Bonus. Hurry Up!")
        }
        $('.stage_title .status').text(status);
        counter(stage)
      }
    }

    function getBalance(data) {
      if ($('#js-ico-counter').length > 0) {

        var emission = $(".js-token-emission");
        var sold = $(".js-token-sold");
        var bonus = $(".js-token-bonus");

        $.get(window.origin + '/main/ico/getDashboardStats')
            .done(function ({data}) {
              emission.html(data.tokens.emission);
              sold.html("~ " + data.tokens.sold.toFixed(0));
              bonus.html(data.tokens.bonus);
            })
      }
    }

    function getDocuments(data) {
      if ($('.documents_section').length > 0) {

        var whitepaper = $(".whitepaper");
        var terms = $(".terms");
        
        whitepaper.attr('href', '/ico/documents/whitepaper/' + data.documents.whitepaper.filename);
        terms.attr('href', '/ico/documents/terms/' + data.documents.terms.filename);
      }
    }

    $.get(window.origin + '/main/external/fullInfo')
        .done(function (data) {
          if (data.features.icoEnabled) {
            $.get(window.origin + '/main/ico/getInfoForLanding')
                .done(function (data) {

                  if (data.error) return null;

                  getRates(data);
                  getBalance(data);
                  countdownIco(data);
                  getDocuments(data);
                })
                .fail(function (e) {
                  console.error('e', e)
                });
          }
        })
        .fail(function () {
          return false
        })
  });
}());
