HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux WebLive 5.15.0-79-generic #86-Ubuntu SMP Mon Jul 10 16:07:21 UTC 2023 x86_64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/html/wpmuhibbah_err/wp-content/themes/goodwish/assets/js/modules/shortcodes.js
(function($) {
    'use strict';

    var shortcodes = {};

    edgtf.modules.shortcodes = shortcodes;

    shortcodes.edgtfInitCounter = edgtfInitCounter;
    shortcodes.edgtfInitProgressBars = edgtfInitProgressBars;
    shortcodes.edgtfInitCountdown = edgtfInitCountdown;
    shortcodes.edgtfInitMessages = edgtfInitMessages;
    shortcodes.edgtfInitMessageHeight = edgtfInitMessageHeight;
    shortcodes.edgtfInitTestimonials = edgtfInitTestimonials;
    shortcodes.edgtfInitCarousels = edgtfInitCarousels;
    shortcodes.edgtfInitPieChart = edgtfInitPieChart;
    shortcodes.edgtfInitPieChartDoughnut = edgtfInitPieChartDoughnut;
    shortcodes.edgtfInitTabs = edgtfInitTabs;
    shortcodes.edgtfInitTabIcons = edgtfInitTabIcons;
    shortcodes.edgtfInitBlogListMasonry = edgtfInitBlogListMasonry;
    shortcodes.edgtfInitBlogSlider = edgtfInitBlogSlider;
    shortcodes.edgtfCustomFontTypeOut = edgtfCustomFontTypeOut;
    shortcodes.edgtfCustomFontResize = edgtfCustomFontResize;
    shortcodes.edgtfInitImageGallery = edgtfInitImageGallery;
    shortcodes.edgtfProjectPresentationSlider = edgtProjectPresentationSlider;
    shortcodes.edgtfInitAccordions = edgtfInitAccordions;
    shortcodes.edgtfShowGoogleMap = edgtfShowGoogleMap;
    shortcodes.edgtfInitPortfolioListMasonry = edgtfInitPortfolioListMasonry;
    shortcodes.edgtfInitPortfolioListPinterest = edgtfInitPortfolioListPinterest;
    shortcodes.edgtfInitPortfolio = edgtfInitPortfolio;
    shortcodes.edgtfInitPortfolioMasonryFilter = edgtfInitPortfolioMasonryFilter;
    shortcodes.edgtfInitPortfolioSlider = edgtfInitPortfolioSlider;
    shortcodes.edgtfInitPortfolioLoadMore = edgtfInitPortfolioLoadMore;
    shortcodes.edgtfCheckSliderForHeaderStyle = edgtfCheckSliderForHeaderStyle;
    shortcodes.edgtfInitShopListMasonry = edgtfInitShopListMasonry;
    shortcodes.edgtfItemShowcase = edgtfItemShowcase;
    shortcodes.edgtfAnimationsHolder = edgtfAnimationsHolder;
    shortcodes.edgtfInitImageGalleryMasonry = edgtfInitImageGalleryMasonry;
    shortcodes.edgtfReservationFormDatePicker = edgtfReservationFormDatePicker;
    shortcodes.edgtfBanner = edgtfBanner;
    shortcodes.edgtfInitGiveSlider = edgtfInitGiveSlider;
    shortcodes.edgtfInitMasonryGallery = edgtfInitMasonryGallery;

    shortcodes.edgtfOnDocumentReady = edgtfOnDocumentReady;
    shortcodes.edgtfOnWindowLoad = edgtfOnWindowLoad;
    shortcodes.edgtfOnWindowResize = edgtfOnWindowResize;
    shortcodes.edgtfOnWindowScroll = edgtfOnWindowScroll;

    $(document).ready(edgtfOnDocumentReady);
    $(window).on('load', edgtfOnWindowLoad);
    $(window).resize(edgtfOnWindowResize);
    $(window).scroll(edgtfOnWindowScroll);

    /* 
        All functions to be called on $(document).ready() should be in this function
    */
    function edgtfOnDocumentReady() {
        edgtfInitCounter();
        edgtfInitProgressBars();
        edgtfInitCountdown();
        edgtfIcon().init();
        edgtfInitMessages();
        edgtfInitMessageHeight();
        edgtfInitTestimonials();
        edgtfInitCarousels();
        edgtfInitPieChart();
        edgtfInitPieChartDoughnut();
        edgtfInitTabs();
        edgtfInitElementsHolderResponsiveStyle();
        edgtfInitTabIcons();
        edgtfButton().init();
        edgtfInitBlogListMasonry();
		edgtfInitBlogSlider();
        edgtfCustomFontResize();
        edgtfInitImageGallery();
        edgtProjectPresentationSlider();
        edgtfInitAccordions();
        edgtfShowGoogleMap();
        edgtfInitPortfolioListMasonry();
        edgtfInitPortfolioListPinterest();
        edgtfInitPortfolio();
        edgtfInitPortfolioMasonryFilter();
        edgtfInitPortfolioSlider();
        edgtfInitPortfolioLoadMore();
        edgtfSlider().init();
        edgtfSocialIconWidget().init();
        edgtfInitIconList().init();
        edgtfInitShopListMasonry();
        edgtfInitMasonryGallery();
        edgtfItemShowcase();
        edgtfCustomFontTypeOut();
        edgtfInitImageGalleryMasonry();
        edgtfReservationFormDatePicker();
        edgtfBanner();
    }

    /* 
        All functions to be called on $(window).load() should be in this function
    */
    function edgtfOnWindowLoad() {
        edgtfAnimationsHolder();
        edgtfInitGiveSlider();
    }

    /* 
        All functions to be called on $(window).resize() should be in this function
    */
    function edgtfOnWindowResize() {
        edgtfInitBlogListMasonry();
		//edgtfInitBlogSlider();
        edgtfCustomFontResize();
        edgtfInitPortfolioListMasonry();
        edgtfInitPortfolioListPinterest();
        edgtfInitMessageHeight();
    }

    /* 
        All functions to be called on $(window).scroll() should be in this function
    */
    function edgtfOnWindowScroll() {
        
    }
    

    /**
     * Counter Shortcode
     */
    function edgtfInitCounter() {

        var counters = $('.edgtf-counter');


        if (counters.length) {
            counters.each(function() {
                var counter = $(this);
                counter.appear(function() {
                    counter.parent().addClass('edgtf-counter-holder-show');

                    //Counter zero type
                    if (counter.hasClass('zero')) {
                        var max = parseFloat(counter.text());
                        counter.countTo({
                            from: 0,
                            to: max,
                            speed: 1500,
                            refreshInterval: 100
                        });
                    } else {
                        counter.absoluteCounter({
                            speed: 2000,
                            fadeInDelay: 1000
                        });
                    }

                },{accX: 0, accY: edgtfGlobalVars.vars.edgtfElementAppearAmount});
            });

            var counterTitle = $('.edgtf-counter-title');
            if(counterTitle.length){
                counterTitle.each(function(){
                    var thisTitle = $(this);
                    if(typeof thisTitle.data('hover-color') !== 'undefined') {
                        var changeTitleColor = function(event) {
                            event.data.thisTitle.css('color', event.data.color);
                        };

                        var originalColor = thisTitle.css('color');
                        var hoverColor = thisTitle.data('hover-color');

                        thisTitle.on('mouseenter', { thisTitle: thisTitle, color: hoverColor }, changeTitleColor);
                        thisTitle.on('mouseleave', { thisTitle: thisTitle, color: originalColor }, changeTitleColor);
                    }
                });
            }
        }

    }

    /*
     **	Elements Holder responsive style
     */
    function edgtfInitElementsHolderResponsiveStyle(){

        var elementsHolder = $('.edgtf-elements-holder');

        if(elementsHolder.length){
            elementsHolder.each(function() {
                var thisElementsHolder = $(this),
                    elementsHolderItem = thisElementsHolder.children('.edgtf-elements-holder-item'),
                    style = '',
                    responsiveStyle = '';

                elementsHolderItem.each(function() {
                    var thisItem = $(this),
                        itemClass = '',
                        largeLaptop = '',
                        smallLaptop = '',
                        ipadLandscape = '',
                        ipadPortrait = '',
                        mobileLandscape = '',
                        mobilePortrait = '';

                    if (typeof thisItem.data('item-class') !== 'undefined' && thisItem.data('item-class') !== false) {
                        itemClass = thisItem.data('item-class');
                    }
                    if (typeof thisItem.data('1280-1600') !== 'undefined' && thisItem.data('1280-1600') !== false) {
                        largeLaptop = thisItem.data('1280-1600');
                    }
                    if (typeof thisItem.data('1024-1280') !== 'undefined' && thisItem.data('1024-1280') !== false) {
                        smallLaptop = thisItem.data('1024-1280');
                    }
                    if (typeof thisItem.data('768-1024') !== 'undefined' && thisItem.data('768-1024') !== false) {
                        ipadLandscape = thisItem.data('768-1024');
                    }
                    if (typeof thisItem.data('600-768') !== 'undefined' && thisItem.data('600-768') !== false) {
                        ipadPortrait = thisItem.data('600-768');
                    }
                    if (typeof thisItem.data('480-600') !== 'undefined' && thisItem.data('480-600') !== false) {
                        mobileLandscape = thisItem.data('480-600');
                    }
                    if (typeof thisItem.data('480') !== 'undefined' && thisItem.data('480') !== false) {
                        mobilePortrait = thisItem.data('480');
                    }

                    if(largeLaptop.length || smallLaptop.length || ipadLandscape.length || ipadPortrait.length || mobileLandscape.length || mobilePortrait.length) {

                        if(largeLaptop.length) {
                            responsiveStyle += "@media only screen and (min-width: 1280px) and (max-width: 1600px) {.edgtf-elements-holder-item-content."+itemClass+" { padding: "+largeLaptop+" !important; } }";
                        }
                        if(smallLaptop.length) {
                            responsiveStyle += "@media only screen and (min-width: 1024px) and (max-width: 1280px) {.edgtf-elements-holder-item-content."+itemClass+" { padding: "+smallLaptop+" !important; } }";
                        }
                        if(ipadLandscape.length) {
                            responsiveStyle += "@media only screen and (min-width: 768px) and (max-width: 1024px) {.edgtf-elements-holder-item-content."+itemClass+" { padding: "+ipadLandscape+" !important; } }";
                        }
                        if(ipadPortrait.length) {
                            responsiveStyle += "@media only screen and (min-width: 600px) and (max-width: 768px) {.edgtf-elements-holder-item-content."+itemClass+" { padding: "+ipadPortrait+" !important; } }";
                        }
                        if(mobileLandscape.length) {
                            responsiveStyle += "@media only screen and (min-width: 480px) and (max-width: 600px) {.edgtf-elements-holder-item-content."+itemClass+" { padding: "+mobileLandscape+" !important; } }";
                        }
                        if(mobilePortrait.length) {
                            responsiveStyle += "@media only screen and (max-width: 480px) {.edgtf-elements-holder-item-content."+itemClass+" { padding: "+mobilePortrait+" !important; } }";
                        }
                    }
                });

                if(responsiveStyle.length) {
                    style = '<style type="text/css" data-type="goodwish_style_handle_shortcodes_custom_css">'+responsiveStyle+'</style>';
                }

                if(style.length) {
                    $('head').append(style);
                }
            });
        }
    }
    
    /*
    **	Horizontal progress bars shortcode
    */
    function edgtfInitProgressBars(){
        
        var progressBar = $('.edgtf-progress-bar');
        
        if(progressBar.length){
            
            progressBar.each(function() {
                
                var thisBar = $(this);
                
                thisBar.appear(function() {
                    edgtfInitToCounterProgressBar(thisBar);
                    if(thisBar.find('.edgtf-floating.edgtf-floating-inside') !== 0){
                        var floatingInsideMargin = thisBar.find('.edgtf-progress-content').height();
                        floatingInsideMargin += parseFloat(thisBar.find('.edgtf-progress-title-holder').css('padding-bottom'));
                        floatingInsideMargin += parseFloat(thisBar.find('.edgtf-progress-title-holder').css('margin-bottom'));
                        thisBar.find('.edgtf-floating-inside').css('margin-bottom',-(floatingInsideMargin)+'px');
                    }
                    var percentage = thisBar.find('.edgtf-progress-content').data('percentage'),
                        progressContent = thisBar.find('.edgtf-progress-content'),
                        progressNumber = thisBar.find('.edgtf-progress-number');

                    progressContent.css('width', '0%');
                    progressContent.animate({'width': percentage+'%'}, 1500);
                    progressNumber.css('left', '0%');
                    progressNumber.animate({'left': percentage+'%'}, 1500);

                });
            });
        }
    }

    /*
    **	Counter for horizontal progress bars percent from zero to defined percent
    */
    function edgtfInitToCounterProgressBar(progressBar){
        var percentage = parseFloat(progressBar.find('.edgtf-progress-content').data('percentage'));
        var percent = progressBar.find('.edgtf-progress-number .edgtf-percent');
        if(percent.length) {
            percent.each(function() {
                var thisPercent = $(this);
                thisPercent.parents('.edgtf-progress-number-wrapper').css('opacity', '1');
                thisPercent.countTo({
                    from: 0,
                    to: percentage,
                    speed: 1500,
                    refreshInterval: 50
                });
            });
        }
    }
    
    /*
    **	Function to close message shortcode
    */
    function edgtfInitMessages(){
        var message = $('.edgtf-message');
        if(message.length){
            message.each(function(){
                var thisMessage = $(this);
                thisMessage.find('.edgtf-close').on('click',function(e){
                    e.preventDefault();
                    $(this).parent().parent().fadeOut(500);
                });
            });
        }
    }
    
    /*
    **	Init message height
    */
    function edgtfInitMessageHeight(){
       var message = $('.edgtf-message.edgtf-with-icon');
       if(message.length){
           message.each(function(){
               var thisMessage = $(this);
               var textHolderHeight = thisMessage.find('.edgtf-message-text-holder').height();
               var iconHolderHeight = thisMessage.find('.edgtf-message-icon-holder').height();
               
               if(textHolderHeight > iconHolderHeight) {
                   thisMessage.find('.edgtf-message-icon-holder').height(textHolderHeight);
               } else {
                   thisMessage.find('.edgtf-message-text-holder').height(iconHolderHeight);
               }
           });
       }
    }

    /**
     * Countdown Shortcode
     */
    function edgtfInitCountdown() {

        var countdowns = $('.edgtf-countdown'),
            year,
            month,
            day,
            hour,
            minute,
            timezone,
            monthLabel,
            dayLabel,
            hourLabel,
            minuteLabel,
            secondLabel;

        if (countdowns.length) {

            countdowns.each(function(){

                //Find countdown elements by id-s
                var countdownId = $(this).attr('id'),
                    countdown = $('#'+countdownId),
                    digitFontSize,
                    labelFontSize,
	                digitColor,
	                labelColor;

                //Get data for countdown
                year = countdown.data('year');
                month = countdown.data('month');
                day = countdown.data('day');
                hour = countdown.data('hour');
                minute = countdown.data('minute');
                timezone = countdown.data('timezone');
                monthLabel = countdown.data('month-label');
                dayLabel = countdown.data('day-label');
                hourLabel = countdown.data('hour-label');
                minuteLabel = countdown.data('minute-label');
                secondLabel = countdown.data('second-label');
                digitFontSize = countdown.data('digit-size');
                labelFontSize = countdown.data('label-size');
                digitColor = countdown.data('digit-color');
                labelColor = countdown.data('label-color');


                //Initialize countdown
                countdown.countdown({
                    until: new Date(year, month - 1, day, hour, minute, 44),
                    labels: ['Years', monthLabel, 'Weeks', dayLabel, hourLabel, minuteLabel, secondLabel],
                    format: 'ODHMS',
                    timezone: timezone,
                    padZeroes: true,
                    onTick: setCountdownStyle
                });

                function setCountdownStyle() {
                    countdown.find('.countdown-amount').css({
                        'font-size' : digitFontSize+'px'
                    });
	                countdown.find('.countdown-amount').css({
                        'color' : digitColor
                    });
                    countdown.find('.countdown-period').css({
                        'font-size' : labelFontSize+'px'
                    });
	                countdown.find('.countdown-period').css({
                        'color' : labelColor
                    });
                }

            });

        }

    }

    /**
     * Object that represents icon shortcode
     * @returns {{init: Function}} function that initializes icon's functionality
     */
    var edgtfIcon = edgtf.modules.shortcodes.edgtfIcon = function() {
        //get all icons on page
        var icons = $('.edgtf-icon-shortcode');

        /**
         * Function that triggers icon animation and icon animation delay
         */
        var iconAnimation = function(icon) {
            if(icon.hasClass('edgtf-icon-animation')) {
                icon.appear(function() {
                    icon.parent('.edgtf-icon-animation-holder').addClass('edgtf-icon-animation-show');
                }, {accX: 0, accY: edgtfGlobalVars.vars.edgtfElementAppearAmount});
            }
        };

        /**
         * Function that triggers icon hover color functionality
         */
        var iconHoverColor = function(icon) {
            if(typeof icon.data('hover-color') !== 'undefined') {
                var changeIconColor = function(event) {
                    event.data.icon.css('color', event.data.color);
                };

                var iconElement = icon.find('.edgtf-icon-element');
                var hoverColor = icon.data('hover-color');
                var originalColor = iconElement.css('color');

                if(hoverColor !== '') {
                    icon.on('mouseenter', {icon: iconElement, color: hoverColor}, changeIconColor);
                    icon.on('mouseleave', {icon: iconElement, color: originalColor}, changeIconColor);
                }
            }
        };

        /**
         * Function that triggers icon holder background color hover functionality
         */
        var iconHolderBackgroundHover = function(icon) {
            if(typeof icon.data('hover-background-color') !== 'undefined') {
                var changeIconBgColor = function(event) {
                    event.data.icon.css('background-color', event.data.color);
                };

                var hoverBackgroundColor = icon.data('hover-background-color');
                var originalBackgroundColor = icon.css('background-color');

                if(hoverBackgroundColor !== '') {
                    icon.on('mouseenter', {icon: icon, color: hoverBackgroundColor}, changeIconBgColor);
                    icon.on('mouseleave', {icon: icon, color: originalBackgroundColor}, changeIconBgColor);
                }
            }
        };

        /**
         * Function that initializes icon holder border hover functionality
         */
        var iconHolderBorderHover = function(icon) {
            if(typeof icon.data('hover-border-color') !== 'undefined') {
                var changeIconBorder = function(event) {
                    event.data.icon.css('border-color', event.data.color);
                };

                var hoverBorderColor = icon.data('hover-border-color');
                var originalBorderColor = icon.css('border-color');

                if(hoverBorderColor !== '') {
                    icon.on('mouseenter', {icon: icon, color: hoverBorderColor}, changeIconBorder);
                    icon.on('mouseleave', {icon: icon, color: originalBorderColor}, changeIconBorder);
                }
            }
        };

        return {
            init: function() {
                if(icons.length) {
                    icons.each(function() {
                        iconAnimation($(this));
                        iconHoverColor($(this));
                        iconHolderBackgroundHover($(this));
                        iconHolderBorderHover($(this));
                    });

                }
            }
        };
    };

    /**
     * Object that represents social icon widget
     * @returns {{init: Function}} function that initializes icon's functionality
     */
    var edgtfSocialIconWidget = edgtf.modules.shortcodes.edgtfSocialIconWidget = function() {
        //get all social icons on page
        var icons = $('.edgtf-social-icon-widget-holder');

        /**
         * Function that triggers icon hover color functionality
         */
        var socialIconHoverColor = function(icon) {
            if(typeof icon.data('hover-color') !== 'undefined') {
                var changeIconColor = function(event) {
                    event.data.icon.css('color', event.data.color);
                };

                var iconElement = icon;
                var hoverColor = icon.data('hover-color');
                var originalColor = iconElement.css('color');

                if(hoverColor !== '') {
                    icon.on('mouseenter', {icon: iconElement, color: hoverColor}, changeIconColor);
                    icon.on('mouseleave', {icon: iconElement, color: originalColor}, changeIconColor);
                }
            }
        };

        return {
            init: function() {
                if(icons.length) {
                    icons.each(function() {
                        socialIconHoverColor($(this));
                    });

                }
            }
        };
    };

    /**
     * Init testimonials shortcode
     */
    function edgtfInitTestimonials(){

        var testimonial = $('.edgtf-testimonials');
        if(testimonial.length){
            testimonial.each(function(){

                var thisTestimonial = $(this);

                thisTestimonial.waitForImages(function() {
                    thisTestimonial.css('visibility','visible');
                });

                var auto = true;
                var controlNav = true;
                var directionNav = true;
                var animationSpeed = 1000;
				var responsive;
				var slidesToShow = 1;

                if(typeof thisTestimonial.data('animation-speed') !== 'undefined' && thisTestimonial.data('animation-speed') !== false) {
                    animationSpeed = thisTestimonial.data('animation-speed');
                }

				if(typeof thisTestimonial.data('dots-navigation') !== 'undefined') {
					controlNav = thisTestimonial.data('dots-navigation');
				}
				if(typeof thisTestimonial.data('arrows-navigation') !== 'undefined') {
					directionNav = thisTestimonial.data('arrows-navigation');
				}

				if(thisTestimonial.hasClass('edgtf-testimonials-type-carousel')){
					slidesToShow = 3;

					responsive = [
						{
							breakpoint: 1024,
							settings: {
								slidesToShow: 2,
								slidesToScroll: 1,
								infinite: true,
								dots: false
							}
						},
						{
							breakpoint: 600,
							settings: {
								slidesToShow: 1,
								slidesToScroll: 1
							}
						}
					]
				}

				thisTestimonial.slick({
					infinite: true,
					autoplay: auto,
					slidesToShow : slidesToShow,
					arrows: directionNav,
					dots: controlNav,
					dotsClass: 'edgtf-slick-dots',
					adaptiveHeight: true,
                    speed: animationSpeed,
                    easing:'easeOutCubic',
					prevArrow: '<span class="edgtf-slick-prev edgtf-prev-icon"><span class="arrow_carrot-left"></span></span>',
					nextArrow: '<span class="edgtf-slick-next edgtf-next-icon"><span class="arrow_carrot-right"></span></span>',
					customPaging: function(slider, i) {
						return '<span class="edgtf-slick-dot-inner"></span>';
					},
					responsive: responsive,
				});
            });

        }

    }

    /**
     * Init Carousel shortcode
     */
    function edgtfInitCarousels() {

        var carouselHolders = $('.edgtf-carousel-holder'),
            carousel,
            numberOfItems,
			arrowsNavigation,
			dotsNavigation;

        if (carouselHolders.length) {
            carouselHolders.each(function(){
                carousel = $(this).children('.edgtf-carousel');
                numberOfItems = carousel.data('items');
                arrowsNavigation = (carousel.data('arrows-navigation') == 'yes') ? true : false;
                dotsNavigation = (carousel.data('dots-navigation') == 'yes') ? true : false;

                //Responsive breakpoints

      			carousel.slick({
					infinite: true,
					autoplay: true,
					slidesToShow : numberOfItems,
					arrows: arrowsNavigation,
					dots: dotsNavigation,
					dotsClass: 'edgtf-slick-dots',
					adaptiveHeight: true,
                    easing:'easeOutCubic',
					prevArrow: '<span class="edgtf-slick-prev edgtf-prev-icon"><span class="arrow_carrot-left"></span></span>',
					nextArrow: '<span class="edgtf-slick-next edgtf-next-icon"><span class="arrow_carrot-right"></span></span>',
					customPaging: function(slider, i) {
						return '<span class="edgtf-slick-dot-inner"></span>';
					},
					responsive: [
						{
							breakpoint: 1024,
							settings: {
								slidesToShow: 3,
								slidesToScroll: 1
							}
						},
						{
							breakpoint: 600,
							settings: {
								slidesToShow: 2,
								slidesToScroll: 1
							}
						},
						{
							breakpoint: 480,
							settings: {
								slidesToShow: 1,
								slidesToScroll: 1
							}
						}
					]
				});


			});
        }

    }

    /**
     * Init Pie Chart and Pie Chart With Icon shortcode
     */
    function edgtfInitPieChart() {

        var pieCharts = $('.edgtf-pie-chart-holder, .edgtf-pie-chart-with-icon-holder');

        if (pieCharts.length) {

            pieCharts.each(function () {

                var pieChart = $(this),
                    percentageHolder = pieChart.children('.edgtf-percentage, .edgtf-percentage-with-icon'),
                    barColor = '#ffb422',
                    trackColor = '#f6f4ee',
                    lineWidth = 6,
                    size = 180;

                if(typeof percentageHolder.data('bar-color') !== 'undefined' && percentageHolder.data('bar-color') !== '') {
                    barColor = percentageHolder.data('bar-color');
                }

                if(typeof percentageHolder.data('track-color') !== 'undefined' && percentageHolder.data('track-color') !== '') {
                    trackColor = percentageHolder.data('track-color');
                }

                percentageHolder.appear(function() {
                    initToCounterPieChart(pieChart);
                    percentageHolder.css('opacity', '1');

                    percentageHolder.easyPieChart({
                        barColor: barColor,
                        trackColor: trackColor,
                        scaleColor: false,
                        lineCap: 'butt',
                        lineWidth: lineWidth,
                        animate: 1500,
                        size: size
                    });
                },{accX: 0, accY: edgtfGlobalVars.vars.edgtfElementAppearAmount});

            });

        }

    }

    /*
     **	Counter for pie chart number from zero to defined number
     */
    function initToCounterPieChart( pieChart ){

        pieChart.css('opacity', '1');
        var counter = pieChart.find('.edgtf-to-counter'),
            max = parseFloat(counter.text());
        counter.countTo({
            from: 0,
            to: max,
            speed: 1500,
            refreshInterval: 50
        });

    }

    /**
     * Init Pie Chart shortcode
     */
    function edgtfInitPieChartDoughnut() {

        var pieCharts = $('.edgtf-pie-chart-doughnut-holder, .edgtf-pie-chart-pie-holder');

        pieCharts.each(function(){

            var pieChart = $(this),
                canvas = pieChart.find('canvas'),
                chartID = canvas.attr('id'),
                chart = document.getElementById(chartID).getContext('2d'),
                type,
                values = [],
                backgroundColors = [],
                borderWidth = [],
                jqChart = $(chart.canvas); //Convert canvas to JQuery object and get data parameters

            for (var i = 1; i <= 10; i++) {

                var value = jqChart.data('value-' + i),
                    color = jqChart.data('color-' + i);

                if (typeof value !== 'undefined' && typeof color !== 'undefined') {
                    values.push(value);
                    backgroundColors.push(color);
                    borderWidth.push(0);
                }

            }

            if (canvas.hasClass('edgtf-pie')) {
                type = 'pie';
            } else {
                type = 'doughnut';
            }

            var chartOptions = {
                type: type,
                data: {
                    datasets: [{
                        data: values,
                        backgroundColor: backgroundColors,
                        borderWidth: borderWidth,
                    }],
                },
            }

            if ( ! canvas.hasClass( 'edgtf--initialized' ) ) {
                chart = new Chart(
                    canvas,
                    chartOptions
                );

                canvas.addClass( 'edgtf--initialized' );
            }

        });

    }

    /*
    **	Init tabs shortcode
    */
    function edgtfInitTabs(){

       var tabs = $('.edgtf-tabs');
        if(tabs.length){
            tabs.each(function(){
                var thisTabs = $(this);

                thisTabs.children('.edgtf-tab-container').each(function(index){
                    index = index + 1;
                    var that = $(this),
                        link = that.attr('id'),
                        navItem = that.parent().find('.edgtf-tabs-nav li:nth-child('+index+') a'),
                        navLink = navItem.attr('href');

                        link = '#'+link;

                        if(link.indexOf(navLink) > -1) {
                            navItem.attr('href',link);
                        }
                });

                if(thisTabs.hasClass('edgtf-horizontal-tab')){
                    thisTabs.tabs();
                } else if(thisTabs.hasClass('edgtf-vertical-tab')){
                    thisTabs.tabs().addClass( 'ui-tabs-vertical ui-helper-clearfix' );
                    thisTabs.find('.edgtf-tabs-nav > ul >li').removeClass( 'ui-corner-top' ).addClass( 'ui-corner-left' );
                }
            });
        }
    }

    /*
    **	Generate icons in tabs navigation
    */
    function edgtfInitTabIcons(){

        var tabContent = $('.edgtf-tab-container');
        if(tabContent.length){

            tabContent.each(function(){
                var thisTabContent = $(this);

                var id = thisTabContent.attr('id');
                var icon = '';
                if(typeof thisTabContent.data('icon-html') !== 'undefined' || thisTabContent.data('icon-html') !== 'false') {
                    icon = thisTabContent.data('icon-html');
                }

                var tabNav = thisTabContent.parents('.edgtf-tabs').find('.edgtf-tabs-nav > li > a[href="#'+id+'"]');

                if(typeof(tabNav) !== 'undefined') {
                    tabNav.children('.edgtf-icon-frame').append(icon);
                }
            });
        }
    }

    /**
     * Button object that initializes whole button functionality
     * @type {Function}
     */
    var edgtfButton = edgtf.modules.shortcodes.edgtfButton = function() {
        //all buttons on the page
        var buttons = $('.edgtf-btn');

        /**
         * Initializes button hover color
         * @param button current button
         */
        var buttonHoverColor = function(button) {
            if(typeof button.data('hover-color') !== 'undefined') {
                var changeButtonColor = function(event) {
                    event.data.button.css('color', event.data.color);
                };

                var originalColor = button.css('color');
                var hoverColor = button.data('hover-color');

                button.on('mouseenter', { button: button, color: hoverColor }, changeButtonColor);
                button.on('mouseleave', { button: button, color: originalColor }, changeButtonColor);
            }
        };



        /**
         * Initializes button hover background color
         * @param button current button
         */
        var buttonHoverBgColor = function(button, hoverEl) {
            if(typeof button.data('hover-bg-color') !== 'undefined') {
                var changeButtonBg = function(event) {
                    event.data.button.css('background-color', event.data.color);
                };

                var originalBgColor = button.css('background-color');
                var hoverBgColor = button.data('hover-bg-color');

                if(hoverEl){
                    button.find('.edgtf-btn-hover').css('background-color',hoverBgColor);
                }
                else{
                    button.on('mouseenter', { button: button, color: hoverBgColor }, changeButtonBg);
                    button.on('mouseleave', { button: button, color: originalBgColor }, changeButtonBg);
                }
            }
        };

        /**
         * Initializes button border color
         * @param button
         */
        var buttonHoverBorderColor = function(button) {
            if(typeof button.data('hover-border-color') !== 'undefined') {
                var changeBorderColor = function(event) {
                    event.data.button.css('border-color', event.data.color);
                };

                var originalBorderColor = button.css('borderTopColor'); //take one of the four sides
                var hoverBorderColor = button.data('hover-border-color');
                button.on('mouseenter', { button: button, color: hoverBorderColor }, changeBorderColor);
                button.on('mouseleave', { button: button, color: originalBorderColor }, changeBorderColor);
            }
        };

        return {
            init: function() {
                if(buttons.length) {
                    buttons.each(function() {
                        var thisBtn = $(this);
                        buttonHoverColor(thisBtn);
                        if(thisBtn.hasClass('edgtf-btn-animated')){
                            buttonHoverBgColor(thisBtn, true);
                        }else{
                            buttonHoverBgColor(thisBtn,false);
                            // border color transition exists only for non animated buttons
                            buttonHoverBorderColor(thisBtn);
                        }
                    });
                }
            }
        };
    };

    /*
    **	Init blog list masonry type
    */
    function edgtfInitBlogListMasonry(){
        var blogList = $('.edgtf-blog-list-holder.edgtf-masonry .edgtf-blog-list');
        if(blogList.length) {
            blogList.each(function() {
                var thisBlogList = $(this);
                blogList.waitForImages(function() {
                    thisBlogList.isotope({
                        layoutMode: 'packery',
                        itemSelector: '.edgtf-blog-list-masonry-item',
                        packery: {
                            columnWidth: '.edgtf-blog-list-masonry-grid-sizer',
                            gutter: '.edgtf-blog-list-masonry-grid-gutter'
                        }
                    });
                    thisBlogList.addClass('edgtf-appeared');
                });
            });

        }
    }

	/**
	 * Initializes portfolio slider
	 */

	function edgtfInitBlogSlider(){
		var blogSlider = $('.edgtf-blog-slider');
		if(blogSlider.length){
			blogSlider.each(function(){
				var thisBlogSlider = $(this);
				var navigation = true;
				var responsive;
				var slides = 1;

				if (typeof thisBlogSlider.data('type') !== 'undefined' && thisBlogSlider.data('type') !== false && thisBlogSlider.data('type') == 'carousel') {

					responsive = [
						{
							breakpoint: 1025,
							settings: {
								slidesToShow: 2,
								slidesToScroll: 1,
								infinite: true,
								dots: true
							}
						},
						{
							breakpoint: 768,
							settings: {
								slidesToShow: 1,
								slidesToScroll: 1
							}
						}
					]
					slides = 3;
				}

				thisBlogSlider.on('init', function(slick){
					thisBlogSlider.css('opacity', 1);
				});
				thisBlogSlider.waitForImages(function() {
					thisBlogSlider.slick({
						infinite: true,
						autoplay: false,
						slidesToShow : slides,
						arrows: navigation,
						dots: true,
						dotsClass: 'edgtf-slick-dots',
						adaptiveHeight: true,
                        easing:'easeOutCubic',
						prevArrow: '<span class="edgtf-slick-prev edgtf-prev-icon"><span class="arrow_carrot-left"></span></span>',
						nextArrow: '<span class="edgtf-slick-next edgtf-next-icon"><span class="arrow_carrot-right"></span></span>',
						customPaging: function(slider, i) {
							return '<span class="edgtf-slick-dot-inner"></span>';
						},
						responsive: responsive
					});
				});

			});
		}
	}

	/*
	**	Custom Font resizing
	*/
	function edgtfCustomFontResize(){
		var customFont = $('.edgtf-custom-font-holder');
		if (customFont.length){
			customFont.each(function(){
				var thisCustomFont = $(this);
				var fontSize;
				var lineHeight;
				var coef1 = 1;
				var coef2 = 1;

				if (edgtf.windowWidth < 1200){
					coef1 = 0.8;
				}

				if (edgtf.windowWidth < 1024){
					coef1 = 0.7;
				}

				if (edgtf.windowWidth < 768){
					coef1 = 0.6;
					coef2 = 0.7;
				}

				if (edgtf.windowWidth < 600){
					coef1 = 0.5;
					coef2 = 0.6;
				}

				if (edgtf.windowWidth < 480){
					coef1 = 0.4;
					coef2 = 0.5;
				}

				if (typeof thisCustomFont.data('font-size') !== 'undefined' && thisCustomFont.data('font-size') !== false) {
					fontSize = parseInt(thisCustomFont.data('font-size'));

					if (fontSize > 70) {
						fontSize = Math.round(fontSize*coef1);
					}
					else if (fontSize > 35) {
						fontSize = Math.round(fontSize*coef2);
					}

					thisCustomFont.css('font-size',fontSize + 'px');
				}

				if (typeof thisCustomFont.data('line-height') !== 'undefined' && thisCustomFont.data('line-height') !== false) {
					lineHeight = parseInt(thisCustomFont.data('line-height'));

					if (lineHeight > 70 && edgtf.windowWidth < 1200) {
						lineHeight = '1.2em';
					}
					else if (lineHeight > 35 && edgtf.windowWidth < 768) {
						lineHeight = '1.2em';
					}
					else{
						lineHeight += 'px';
					}

					thisCustomFont.css('line-height', lineHeight);
				}
			});
		}
	}

    /*
     **	Show Google Map
     */
    function edgtfShowGoogleMap(){

        if($('.edgtf-google-map').length){
            $('.edgtf-google-map').each(function(){

                var element = $(this);

                var customMapStyle;
                if(typeof element.data('custom-map-style') !== 'undefined') {
                    customMapStyle = element.data('custom-map-style');
                }

                var colorOverlay;
                if(typeof element.data('color-overlay') !== 'undefined' && element.data('color-overlay') !== false) {
                    colorOverlay = element.data('color-overlay');
                }

                var saturation;
                if(typeof element.data('saturation') !== 'undefined' && element.data('saturation') !== false) {
                    saturation = element.data('saturation');
                }

                var lightness;
                if(typeof element.data('lightness') !== 'undefined' && element.data('lightness') !== false) {
                    lightness = element.data('lightness');
                }

                var zoom;
                if(typeof element.data('zoom') !== 'undefined' && element.data('zoom') !== false) {
                    zoom = element.data('zoom');
                }

                var pin;
                if(typeof element.data('pin') !== 'undefined' && element.data('pin') !== false) {
                    pin = element.data('pin');
                }

                var mapHeight;
                if(typeof element.data('height') !== 'undefined' && element.data('height') !== false) {
                    mapHeight = element.data('height');
                }

                var uniqueId;
                if(typeof element.data('unique-id') !== 'undefined' && element.data('unique-id') !== false) {
                    uniqueId = element.data('unique-id');
                }

                var scrollWheel;
                if(typeof element.data('scroll-wheel') !== 'undefined') {
                    scrollWheel = element.data('scroll-wheel');
                }
                var addresses;
                if(typeof element.data('addresses') !== 'undefined' && element.data('addresses') !== false) {
                    addresses = element.data('addresses');
                }

                var map = "map_"+ uniqueId;
                var geocoder = "geocoder_"+ uniqueId;
                var holderId = "edgtf-map-"+ uniqueId;

                edgtfInitializeGoogleMap(customMapStyle, colorOverlay, saturation, lightness, scrollWheel, zoom, holderId, mapHeight, pin,  map, geocoder, addresses);
            });
        }

    }
    /*
     **	Init Google Map
     */
    function edgtfInitializeGoogleMap(customMapStyle, color, saturation, lightness, wheel, zoom, holderId, height, pin,  map, geocoder, data){

        var mapStyles = [
            {
                stylers: [
                    {hue: color },
                    {saturation: saturation},
                    {lightness: lightness},
                    {gamma: 1}
                ]
            }
        ];

        var googleMapStyleId;

        if(customMapStyle){
            googleMapStyleId = 'edgtf-style';
        } else {
            googleMapStyleId = google.maps.MapTypeId.ROADMAP;
        }

        var qoogleMapType = new google.maps.StyledMapType(mapStyles,
            {name: "Edge Google Map"});

        geocoder = new google.maps.Geocoder();
        var latlng = new google.maps.LatLng(-34.397, 150.644);

        if (!isNaN(height)){
            height = height + 'px';
        }

        var myOptions = {

            zoom: zoom,
            scrollwheel: wheel,
            center: latlng,
            zoomControl: true,
            zoomControlOptions: {
                style: google.maps.ZoomControlStyle.SMALL,
                position: google.maps.ControlPosition.RIGHT_CENTER
            },
            scaleControl: false,
            scaleControlOptions: {
                position: google.maps.ControlPosition.LEFT_CENTER
            },
            streetViewControl: false,
            streetViewControlOptions: {
                position: google.maps.ControlPosition.LEFT_CENTER
            },
            panControl: false,
            panControlOptions: {
                position: google.maps.ControlPosition.LEFT_CENTER
            },
            mapTypeControl: false,
            mapTypeControlOptions: {
                mapTypeIds: [google.maps.MapTypeId.ROADMAP, 'edgtf-style'],
                style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
                position: google.maps.ControlPosition.LEFT_CENTER
            },
            mapTypeId: googleMapStyleId
        };

        map = new google.maps.Map(document.getElementById(holderId), myOptions);
        map.mapTypes.set('edgtf-style', qoogleMapType);

        var index;

        for (index = 0; index < data.length; ++index) {
            edgtfInitializeGoogleAddress(data[index], pin, map, geocoder);
        }

        var holderElement = document.getElementById(holderId);
        holderElement.style.height = height;
    }
    /*
     **	Init Google Map Addresses
     */
    function edgtfInitializeGoogleAddress(data, pin,  map, geocoder){
        if (data === '')
            return;
        var contentString = '<div id="content">'+
            '<div id="siteNotice">'+
            '</div>'+
            '<div id="bodyContent">'+
            '<p>'+data+'</p>'+
            '</div>'+
            '</div>';
        var infowindow = new google.maps.InfoWindow({
            content: contentString
        });
        geocoder.geocode( { 'address': data}, function(results, status) {
            if (status === google.maps.GeocoderStatus.OK) {
                map.setCenter(results[0].geometry.location);
                var marker = new google.maps.Marker({
                    map: map,
                    position: results[0].geometry.location,
                    icon:  pin,
                    title: data['store_title']
                });
                google.maps.event.addListener(marker, 'click', function() {
                    infowindow.open(map,marker);
                });

                google.maps.event.addDomListener(window, 'resize', function() {
                    map.setCenter(results[0].geometry.location);
                });

            }
        });
    }

    function edgtfInitAccordions(){
        var accordion = $('.edgtf-accordion-holder');
        if(accordion.length){
            accordion.each(function(){

               var thisAccordion = $(this);

				if(thisAccordion.hasClass('edgtf-accordion')){

					thisAccordion.accordion({
						animate: "swing",
						collapsible: true,
						active: 0,
						icons: "",
						heightStyle: "content"
					});
				}

				if(thisAccordion.hasClass('edgtf-toggle')){

					var toggleAccordion = $(this);
					var toggleAccordionTitle = toggleAccordion.find('.edgtf-title-holder');
					var toggleAccordionContent = toggleAccordionTitle.next();

					toggleAccordion.addClass("accordion ui-accordion ui-accordion-icons ui-widget ui-helper-reset");
					toggleAccordionTitle.addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-top ui-corner-bottom");
					toggleAccordionContent.addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").hide();

					toggleAccordionTitle.each(function(){
						var thisTitle = $(this);
						thisTitle.on('mouseenter mouseleave',function(){
							thisTitle.toggleClass("ui-state-hover");
						});

						thisTitle.on('click',function(){
							thisTitle.toggleClass('ui-accordion-header-active ui-state-active ui-state-default ui-corner-bottom');
							thisTitle.next().toggleClass('ui-accordion-content-active').slideToggle(400);
						});
					});
				}
            });
        }
    }

    function edgtfInitImageGallery() {

        var galleries = $('.edgtf-image-gallery');

        if (galleries.length) {
            galleries.each(function () {
                var gallery = $(this).children('.edgtf-image-gallery-slider'),
                    animation = (gallery.data('animation') == 'fade'),
                    navigation = (gallery.data('navigation') == 'yes'),
                    pagination = (gallery.data('pagination') == 'yes'),
                    autoPlay = false,
                    autoPlaySpeed = 1;
                    if(gallery.data('autoplay') != ''){
                        autoPlay = true;
                        autoPlaySpeed = gallery.data('autoplay') * 1000;
                    }

                gallery.slick({
                    autoplay: autoPlay,
                    autoPlaySpeed: autoPlaySpeed * 1000,
                    arrows: navigation,
                    adaptiveHeight: true,
                    fade: animation,
                    dotsClass: 'edgtf-slick-dots',
                    dots: pagination,
                    speed: 600,
                    easing:'easeOutCubic',
                    prevArrow: '<span class="edgtf-slick-prev edgtf-prev-icon"><span class="arrow_carrot-left"></span></span>',
                    nextArrow: '<span class="edgtf-slick-next edgtf-next-icon"><span class="arrow_carrot-right"></span></span>',
                    customPaging: function(slider, i) {
                        return '<span class="edgtf-slick-dot-inner"></span>';
                    }
                });
            });
        }

        var carousels = $('.edgtf-image-gallery-carousel-wrapper');

        if (carousels.length) {
            carousels.each(function () {
                var carousel = $(this).children('.edgtf-image-gallery-carousel'),
                    navigation = (carousel.data('navigation') == 'yes'),
                    pagination = (carousel.data('pagination') == 'yes'),
                    autoPlay = false,
                    slidesToShow = 1,
                    centerMode = true,
                    variableWidth = true,
                    autoPlaySpeed = 1;
                if(carousel.data('autoplay') != ''){
                    autoPlay = true;
                    autoPlaySpeed = carousel.data('autoplay') * 1000;
                }

                var responsive = [
                    {
                        breakpoint: 1024,
                        settings: {
                            slidesToShow: 3,
                            slidesToScroll: 1,
                            infinite: true,
                            dots: true
                        }
                    },
                    {
                        breakpoint: 768,
                        settings: {
                            slidesToShow: 2,
                            slidesToScroll: 1,
                            infinite: true,
                            dots: true
                        }
                    },
                    {
                        breakpoint: 600,
                        settings: {
                            slidesToShow: 1,
                            slidesToScroll: 1
                        }
                    }
                ]

                carousel.slick({
                    autoplay: autoPlay,
                    autoPlaySpeed: autoPlaySpeed * 1000,
                    arrows: navigation,
                    dots: pagination,
                    dotsClass: 'edgtf-slick-dots',
                    speed: 600,
                    easing:'easeOutCubic',
                    slidesToShow : slidesToShow,
                    variableWidth: variableWidth,
                    centerMode: centerMode,
                    prevArrow: '<span class="edgtf-slick-prev edgtf-prev-icon"><span class="arrow_carrot-left"></span></span>',
                    nextArrow: '<span class="edgtf-slick-next edgtf-next-icon"><span class="arrow_carrot-right"></span></span>',
                    responsive:responsive,
                    customPaging: function(slider, i) {
                        return '<span class="edgtf-slick-dot-inner"></span>';
                    }
                });
            });
        }

    }

    /**
     * Init Image Masonry Gallery
     */
    function edgtfInitImageGalleryMasonry(){
        var masonryGallery = $('.edgtf-image-gallery-masonry');

        if(masonryGallery.length) {
            masonryGallery.each(function () {
                var thisGallery = $(this);
                thisGallery.waitForImages(function () {
                    var size = thisGallery.find('.edgtf-image-masonry-grid-sizer').width();
                    edgtfImageResizeMasonry(size,thisGallery);
                    edgtfInitImageMasonry(thisGallery);

                });
                $(window).resize(function(){
                    var size = thisGallery.find('.edgtf-image-masonry-grid-sizer').width();
                    edgtfImageResizeMasonry(size,thisGallery);
                    edgtfInitImageMasonry(thisGallery);
                });
            });
        }
    }

    function edgtfInitImageMasonry(container){
        container.animate({opacity: 1});
        container.isotope({
            itemSelector: '.edgtf-gallery-image',
            masonry: {
                columnWidth: '.edgtf-image-masonry-grid-sizer'
            }
        });
    }


    function edgtfImageResizeMasonry(size,container){

        var defaultMasonryItem = container.find('.edgtf-size-square');
        var largeWidthMasonryItem = container.find('.edgtf-size-landscape');
        var largeHeightMasonryItem = container.find('.edgtf-size-portrait');
        var largeWidthHeightMasonryItem = container.find('.edgtf-size-big-square');

        defaultMasonryItem.css('height', size);
        largeHeightMasonryItem.css('height', Math.round(2*size));

        if(edgtf.windowWidth > 768){
            largeWidthHeightMasonryItem.css('height', Math.round(2*size));
            largeWidthMasonryItem.css('height', size);
        }else{
            largeWidthHeightMasonryItem.css('height', size);
            largeWidthMasonryItem.css('height', Math.round(size/2));
        }
    }

    /**
     * Initializes project presentation slider
     */

    function edgtProjectPresentationSlider() {

        var sliders = $('.edgtf-pp-gallery');

        if (sliders.length) {
            sliders.each(function () {
                var slider = $(this).children('.edgtf-pp-gallery-slider'),
                    animation = (slider.data('animation') == 'fade'),
                    navigation = false,
                    pagination = (slider.data('pagination') == 'yes'),
                    autoPlay = false,
                    autoplaySpeed = 1;
                if(slider.data('autoplay') != 'disable'){
                    autoPlay = true;
                    autoplaySpeed = slider.data('autoplay') * 1000;
                }

                slider.on('afterChange', function(slick){
                    $('.edgtf-project-presentation .slick-slider .slick-track').css('height', '100%');
                });

                slider.slick({
                    autoplay: autoPlay,
                    autoplaySpeed: autoplaySpeed,
                    arrows: navigation,
                    adaptiveHeight: true,
                    fade: true,
                    dots: pagination,
                    easing:'easeOutCubic',
                    dotsClass: 'edgtf-slick-dots',
                    prevArrow: '<span class="edgtf-slick-prev edgtf-prev-icon"><span class="arrow_carrot-left"></span></span>',
                    nextArrow: '<span class="edgtf-slick-next edgtf-next-icon"><span class="arrow_carrot-right"></span></span>',
                    customPaging: function(slider, i) {
                        return '<span class="edgtf-slick-dot-inner"></span>';
                    }
                });

            });
        }
    }

    /**
     * Initializes portfolio list
     */
    function edgtfInitPortfolio(){
        var portList = $('.edgtf-portfolio-list-holder-outer.edgtf-ptf-standard:not(.edgtf-portfolio-slider-holder), .edgtf-portfolio-list-holder-outer.edgtf-ptf-gallery:not(.edgtf-portfolio-slider-holder), .edgtf-portfolio-list-holder-outer.edgtf-ptf-gallery-with-space:not(.edgtf-portfolio-slider-holder)');
        if(portList.length){            
            portList.each(function(){
                var thisPortList = $(this);
                edgtfInitPortMixItUp(thisPortList);
                if(thisPortList.hasClass('edgtf-follow')){
                    thisPortList.find('article').each(function(){
                        $(this).hoverdir({
                        hoverElem:'div.edgtf-item-text-overlay',
                        speed: 330,
                        hoverDelay: 35,
                        easing: 'ease'
                        });
                    });
                }
            });
        }
    }
    /**
     * Initializes mixItUp function for specific container
     */
    function edgtfInitPortMixItUp(container){
        var filterClass = '';
        if(container.hasClass('edgtf-ptf-has-filter')){
            filterClass = container.find('.edgtf-portfolio-filter-holder-inner ul li').data('class');
            filterClass = '.'+filterClass;
        }
        
        var holderInner = container.find('.edgtf-portfolio-list-holder');
        holderInner.mixItUp({
            callbacks: {
                onMixLoad: function(){
                    holderInner.find('article').css('visibility','visible');
                    edgtf.modules.common.edgtfInitParallax();
                },
                onMixStart: function(){
                    holderInner.find('article').css('visibility','visible');
                },
                onMixBusy: function(){
                    holderInner.find('article').css('visibility','visible');
                } 
            },           
            selectors: {
                filter: filterClass
            },
            animation: {
                effects: 'fade',
                duration: 600
            }
            
        });
        
    }
     /*
    **	Init portfolio list masonry type
    */
    function edgtfInitPortfolioListMasonry(){
        var portList = $('.edgtf-portfolio-list-holder-outer.edgtf-ptf-masonry,.edgtf-portfolio-list-holder-outer.edgtf-ptf-masonry-with-space');
        if(portList.length) {
            portList.each(function() {
                var thisPortList = $(this).children('.edgtf-portfolio-list-holder');
                var size = thisPortList.find('.edgtf-portfolio-list-masonry-grid-sizer').width();
                edgtfResizeMasonry(size,thisPortList);
                
                edgtfInitMasonry(thisPortList);
                $(window).resize(function(){
                    edgtfResizeMasonry(size,thisPortList);
                    edgtfInitMasonry(thisPortList);
                });
            });
        }
    }
    
    function edgtfInitMasonry(container){
        container.waitForImages(function() {
            container.isotope({
                layoutMode: 'packery',
                itemSelector: '.edgtf-portfolio-item',
                packery: {
                    columnWidth: '.edgtf-portfolio-list-masonry-grid-sizer'
                }
            });
            container.addClass('edgtf-appeared');
            $(window).on('load', function(){
                ptfListAppear(container)
            });
        });
    }
    
    function edgtfResizeMasonry(size,container){
        
        var defaultMasonryItem = container.find('.edgtf-default-masonry-item');
        var largeWidthMasonryItem = container.find('.edgtf-large-width-masonry-item');
        var largeHeightMasonryItem = container.find('.edgtf-large-height-masonry-item');
        var largeWidthHeightMasonryItem = container.find('.edgtf-large-width-height-masonry-item');

        defaultMasonryItem.css('height', size);
        largeHeightMasonryItem.css('height', Math.round(2*size));

        if(edgtf.windowWidth > 600){
            largeWidthHeightMasonryItem.css('height', Math.round(2*size));
            largeWidthMasonryItem.css('height', size);
        }else{
            largeWidthHeightMasonryItem.css('height', size);
            largeWidthMasonryItem.css('height', Math.round(size/2));

        }
    }
    /**
     * Initializes portfolio pinterest 
     */
    function edgtfInitPortfolioListPinterest(){
        
        var portList = $('.edgtf-portfolio-list-holder-outer.edgtf-ptf-pinterest,.edgtf-portfolio-list-holder-outer.edgtf-ptf-pinterest-with-space');
        if(portList.length) {
            portList.each(function() {
                var thisPortList = $(this).children('.edgtf-portfolio-list-holder');
                edgtfInitPinterest(thisPortList);
                $(window).resize(function(){
                     edgtfInitPinterest(thisPortList);
                });
            });
            
        }
    }
    
    function edgtfInitPinterest(container){
        container.waitForImages(function() {
            container.isotope({
                itemSelector: '.edgtf-portfolio-item',
                masonry: {
                    columnWidth: '.edgtf-portfolio-list-masonry-grid-sizer',
                    gutter:'.edgtf-portfolio-list-masonry-grid-gutter'
                }
            });
        });
        container.addClass('edgtf-appeared');
        $(window).on('load', function(){
            ptfListAppear(container)
        });
    }

    /*
    * Appear FX
    */
    function ptfListAppear(container) {
        if (container.parent().hasClass('edgtf-appear-fade-scale')) {
            var articles = container.find('article'),
                animateCycle = 1 + Math.floor(Math.random() * 6),
                animateCycleCounter = 0;

            if (articles.length) {
                articles.each(function(){
                    var article = $(this);

                    setTimeout(function(){
                        article.appear(function(){
                            animateCycleCounter ++;

                            if(animateCycleCounter == animateCycle) {
                                animateCycleCounter = 0;
                            }

                            setTimeout(function(){
                                if (!article.hasClass('edgtf-appeared')) {
                                    article.addClass('edgtf-appeared');        
                                }
                            },animateCycleCounter * 280);
                        },{accX: 0, accY: 0});
                    },30);
                });
            }
        }
    }
    /**
     * Initializes portfolio masonry filter
     */
    function edgtfInitPortfolioMasonryFilter(){
        
        var filterHolder = $('.edgtf-portfolio-filter-holder.edgtf-masonry-filter');
        
        if(filterHolder.length){
            filterHolder.each(function(){
               
                var thisFilterHolder = $(this);
                
                var portfolioIsotopeAnimation = null;
                
                var filter = thisFilterHolder.find('ul li').data('class');
                
                thisFilterHolder.find('.filter:first').addClass('current');
                
                thisFilterHolder.find('.filter').on('click',function(){

                    var currentFilter = $(this);
                    clearTimeout(portfolioIsotopeAnimation);

                    $('.isotope, .isotope .isotope-item').css('transition-duration','0.8s');

                    portfolioIsotopeAnimation = setTimeout(function(){
                        $('.isotope, .isotope .isotope-item').css('transition-duration','0s'); 
                    },700);

                    var selector = $(this).attr('data-filter');
                    thisFilterHolder.siblings('.edgtf-portfolio-list-holder-outer').find('.edgtf-portfolio-list-holder').isotope({ filter: selector });

                    thisFilterHolder.find('.filter').removeClass('current');
                    currentFilter.addClass('current');

                    return false;

                });
                
            });
        }
    }
    /**
     * Initializes portfolio slider
     */
    
    function edgtfInitPortfolioSlider(){
        var portSlider = $('.edgtf-portfolio-list-holder-outer.edgtf-portfolio-slider-holder');
        if(portSlider.length){
            portSlider.each(function(){
                var thisPortSlider = $(this);
                var sliderWrapper = thisPortSlider.children('.edgtf-portfolio-list-holder');
                var numberOfItems = thisPortSlider.data('items');
                var navigation = false;
                
                //Responsive breakpoints
                var responsive = [
                    {
                        breakpoint: 1024,
                        settings: {
                            slidesToShow: 3,
                            slidesToScroll: 1,
                            infinite: true,
                        }
                    },
                    {
                        breakpoint: 768,
                        settings: {
                            slidesToShow: 2,
                            slidesToScroll: 1,
                            infinite: true,
                        }
                    },
                    {
                        breakpoint: 600,
                        settings: {
                            slidesToShow: 1,
                            slidesToScroll: 1
                        }
                    }
                ];

                 sliderWrapper.on('init', function(slick){
                    var slides = sliderWrapper.find('.slick-slide');

                    var dragStart, clickable = false;

                    var handleDragStart = function(event) {
                        event = typeof event.originalEvent !== 'undefined' ? event.originalEvent : event;
                        event = event.type == 'touchstart' ? event.touches[0] : event;
                        dragStart = {
                            x: event.clientX,
                            y: event.clientY
                        };
                    };

                    var handleDragStop = function(event) {
                        event = typeof event.originalEvent !== 'undefined' ? event.originalEvent : event;
                        event = event.type == 'touchend' ? event.changedTouches[0] : event;
                        var dragEnd = {
                            x: event.clientX,
                            y: event.clientY
                        };
                        if (Math.abs(dragEnd.x - dragStart.x) < 10) {
                            clickable = true;
                        }
                    };

                    var handleClick = function(event) {
                        if (clickable) {
                            clickable = false;
                        }
                        else {
                            event.preventDefault();
                            event.stopImmediatePropagation();
                        }
                    };

                    slides.find('a')
                    .on('dragstart', function(event) {
                        event.stopImmediatePropagation();
                        event.preventDefault();
                    })
                    .on('click', handleClick)
                    .on('mousedown touchstart', handleDragStart)
                    .on('mouseup touchend', handleDragStop);
                });

                sliderWrapper.slick({
                    infinite: true,
                    autoplay: true,
                    autoplaySpeed: 3000,
                    arrows: navigation,
                    dots: false,
                    dotsClass: 'edgtf-slick-dots',
                    speed: 600,
                    easing:'easeOutCubic',
                    slidesToShow:numberOfItems,
                    prevArrow: '<span class="edgtf-slick-prev edgtf-prev-icon"><span class="arrow_carrot-left"></span></span>',
                    nextArrow: '<span class="edgtf-slick-next edgtf-next-icon"><span class="arrow_carrot-right"></span></span>',
                    responsive:responsive,
                    customPaging: function(slider, i) {
                        return '<span class="edgtf-slick-dot-inner"></span>';
                    }
                });
            });
        }
    }
    /**
     * Initializes portfolio load more function
     */
    function edgtfInitPortfolioLoadMore(){
        var portList = $('.edgtf-portfolio-list-holder-outer.edgtf-ptf-load-more');
        if(portList.length){
            portList.each(function(){
                
                var thisPortList = $(this);
                var thisPortListInner = thisPortList.find('.edgtf-portfolio-list-holder');
                var nextPage; 
                var maxNumPages;
                var loadMoreButton = thisPortList.find('.edgtf-ptf-list-load-more a');
                var loadMoreSpinner = thisPortList.find('.edgtf-3d-cube-holder');
                
                if (typeof thisPortList.data('max-num-pages') !== 'undefined' && thisPortList.data('max-num-pages') !== false) {  
                    maxNumPages = thisPortList.data('max-num-pages');
                }
                
                loadMoreButton.on('click', function (e) {  
                    var loadMoreDatta = edgtfGetPortfolioAjaxData(thisPortList);
                    nextPage = loadMoreDatta.nextPage;
                    e.preventDefault();
                    e.stopPropagation(); 
                    loadMoreButton.hide();
                    loadMoreSpinner.fadeIn(500);
                    if(nextPage <= maxNumPages){
                        var ajaxData = edgtfSetPortfolioAjaxData(loadMoreDatta);
                        $.ajax({
                            type: 'POST',
                            data: ajaxData,
                            url: edgtCoreAjaxUrl,
                            success: function (data) {
                                nextPage++;
                                thisPortList.data('next-page', nextPage);
                                var response = $.parseJSON(data);
                                var responseHtml = edgtfConvertHTML(response.html); //convert response html into jQuery collection that Mixitup can work with
                                setTimeout(function() {
                                    if(thisPortList.hasClass('edgtf-ptf-masonry') || thisPortList.hasClass('edgtf-ptf-masonry-with-space') || thisPortList.hasClass('edgtf-ptf-pinterest') || thisPortList.hasClass('edgtf-ptf-pinterest-with-space')){
                                        thisPortList.waitForImages(function(){
                                            thisPortListInner.isotope().append( responseHtml ).isotope( 'appended', responseHtml ).isotope('reloadItems');
                                            ptfListAppear(thisPortListInner);
                                            loadMoreSpinner.fadeOut(100, function() {
                                                loadMoreButton.show()
                                            });
                                        });
                                    } else {
                                        thisPortList.waitForImages(function(){
                                            thisPortListInner.mixItUp('append',responseHtml);
                                            loadMoreSpinner.fadeOut(100, function() {
                                                loadMoreButton.show()
                                            });
                                        });
                                    }
                                    if(nextPage > maxNumPages){
                                        loadMoreButton.hide();
                                        loadMoreButton.closest('.edgtf-ptf-list-paging').hide();
                                        loadMoreSpinner.fadeOut(0);
                                    }
                                    if(thisPortList.hasClass('edgtf-follow')){
                                        thisPortList.find('article').each(function(){
                                            $(this).hoverdir({
                                                hoverElem:'div.edgtf-item-text-overlay'});
                                        });
                                    }
                                },400);                                    
                            }
                        });
                    }
                });
                
            });
        }
    }
    
    function edgtfConvertHTML ( html ) {
        var newHtml = $.trim( html ),
                $html = $(newHtml ),
                $empty = $();

        $html.each(function ( index, value ) {
            if ( value.nodeType === 1) {
                $empty = $empty.add ( this );
            }
        });

        return $empty;
    }

    /**
     * Initializes portfolio load more data params
     * @param portfolio list container with defined data params
     * return array
     */
    function edgtfGetPortfolioAjaxData(container){
        var returnValue = {};
        
        returnValue.type = '';
        returnValue.columns = '';
        returnValue.gridSize = '';
        returnValue.orderBy = '';
        returnValue.order = '';
        returnValue.number = '';
        returnValue.imageSize = '';
        returnValue.filter = '';
        returnValue.filterOrderBy = '';
        returnValue.category = '';
        returnValue.selectedProjectes = '';
        returnValue.showLoadMore = '';
        returnValue.titleTag = '';
        returnValue.nextPage = '';
        returnValue.maxNumPages = '';
        
        if (typeof container.data('type') !== 'undefined' && container.data('type') !== false) {
            returnValue.type = container.data('type');
        }
        if (typeof container.data('grid-size') !== 'undefined' && container.data('grid-size') !== false) {                    
            returnValue.gridSize = container.data('grid-size');
        }
        if (typeof container.data('columns') !== 'undefined' && container.data('columns') !== false) {                    
            returnValue.columns = container.data('columns');
        }
        if (typeof container.data('order-by') !== 'undefined' && container.data('order-by') !== false) {                    
            returnValue.orderBy = container.data('order-by');
        }
        if (typeof container.data('order') !== 'undefined' && container.data('order') !== false) {                    
            returnValue.order = container.data('order');
        }
        if (typeof container.data('number') !== 'undefined' && container.data('number') !== false) {                    
            returnValue.number = container.data('number');
        }
        if (typeof container.data('image-size') !== 'undefined' && container.data('image-size') !== false) {                    
            returnValue.imageSize = container.data('image-size');
        }
        if (typeof container.data('filter') !== 'undefined' && container.data('filter') !== false) {                    
            returnValue.filter = container.data('filter');
        }
        if (typeof container.data('filter-order-by') !== 'undefined' && container.data('filter-order-by') !== false) {                    
            returnValue.filterOrderBy = container.data('filter-order-by');
        }
        if (typeof container.data('category') !== 'undefined' && container.data('category') !== false) {                    
            returnValue.category = container.data('category');
        }
        if (typeof container.data('selected-projects') !== 'undefined' && container.data('selected-projects') !== false) {                    
            returnValue.selectedProjectes = container.data('selected-projects');
        }
        if (typeof container.data('show-load-more') !== 'undefined' && container.data('show-load-more') !== false) {                    
            returnValue.showLoadMore = container.data('show-load-more');
        }
        if (typeof container.data('title-tag') !== 'undefined' && container.data('title-tag') !== false) {                    
            returnValue.titleTag = container.data('title-tag');
        }
        if (typeof container.data('next-page') !== 'undefined' && container.data('next-page') !== false) {                    
            returnValue.nextPage = container.data('next-page');
        }
        if (typeof container.data('max-num-pages') !== 'undefined' && container.data('max-num-pages') !== false) {                    
            returnValue.maxNumPages = container.data('max-num-pages');
        }
        return returnValue;
    }
     /**
     * Sets portfolio load more data params for ajax function
     * @param portfolio list container with defined data params
     * return array
     */
    function edgtfSetPortfolioAjaxData(container){
        var returnValue = {
            action: 'edgt_core_portfolio_ajax_load_more',
            type: container.type,
            columns: container.columns,
            gridSize: container.gridSize,
            orderBy: container.orderBy,
            order: container.order,
            number: container.number,
            imageSize: container.imageSize,
            filter: container.filter,
            filterOrderBy: container.filterOrderBy,
            category: container.category,
            selectedProjectes: container.selectedProjectes,
            showLoadMore: container.showLoadMore,
            titleTag: container.titleTag,
            nextPage: container.nextPage
        };
        return returnValue;
    }

    /**
     * Slider object that initializes whole slider functionality
     * @type {Function}
     */
    var edgtfSlider = edgtf.modules.shortcodes.edgtfSlider = function() {

	    //all sliders on the page
	    var sliders = $('.edgtf-slider .carousel');
	    //image regex used to extract img source
	    var imageRegex = /url\(["']?([^'")]+)['"]?\)/;

	    /*** Functionality for translating image in slide - START ***/

	    var matrixArray = { zoom_center : '1.2, 0, 0, 1.2, 0, 0', zoom_top_left: '1.2, 0, 0, 1.2, -150, -150', zoom_top_right : '1.2, 0, 0, 1.2, 150, -150', zoom_bottom_left: '1.2, 0, 0, 1.2, -150, 150', zoom_bottom_right: '1.2, 0, 0, 1.2, 150, 150'};

	    // regular expression for parsing out the matrix components from the matrix string
	    var matrixRE = /\([0-9epx\.\, \t\-]+/gi;

	    // parses a matrix string of the form "matrix(n1,n2,n3,n4,n5,n6)" and
	    // returns an array with the matrix components
	    var parseMatrix = function (val) {
		    return val.match(matrixRE)[0].substr(1).
		    split(",").map(function (s) {
			    return parseFloat(s);
		    });
	    };

	    // transform css property names with vendor prefixes;
	    // the plugin will check for values in the order the names are listed here and return as soon as there
	    // is a value; so listing the W3 std name for the transform results in that being used if its available
	    var transformPropNames = [
		    "transform",
		    "-webkit-transform"
	    ];

	    var getTransformMatrix = function (el) {
		    // iterate through the css3 identifiers till we hit one that yields a value
		    var matrix = null;
		    transformPropNames.some(function (prop) {
			    matrix = el.css(prop);
			    return (matrix !== null && matrix !== "");
		    });

		    // if "none" then we supplant it with an identity matrix so that our parsing code below doesn't break
		    matrix = (!matrix || matrix === "none") ?
			    "matrix(1,0,0,1,0,0)" : matrix;
		    return parseMatrix(matrix);
	    };

	    // set the given matrix transform on the element; note that we apply the css transforms in reverse order of how its given
	    // in "transformPropName" to ensure that the std compliant prop name shows up last
	    var setTransformMatrix = function (el, matrix) {
		    var m = "matrix(" + matrix.join(",") + ")";
		    for (var i = transformPropNames.length - 1; i >= 0; --i) {
			    el.css(transformPropNames[i], m + ' rotate(0.01deg)');
		    }
	    };

	    // interpolates a value between a range given a percent
	    var interpolate = function (from, to, percent) {
		    return from + ((to - from) * (percent / 100));
	    };

	    $.fn.transformAnimate = function (opt) {
		    // extend the options passed in by caller
		    var options = {
			    transform: "matrix(1,0,0,1,0,0)"
		    };
		    $.extend(options, opt);

		    // initialize our custom property on the element to track animation progress
		    this.css("percentAnim", 0);

		    // supplant "options.step" if it exists with our own routine
		    var sourceTransform = getTransformMatrix(this);
		    var targetTransform = parseMatrix(options.transform);
		    options.step = function (percentAnim, fx) {
			    // compute the interpolated transform matrix for the current animation progress
			    var $this = $(this);
			    var matrix = sourceTransform.map(function (c, i) {
				    return interpolate(c, targetTransform[i],
					    percentAnim);
			    });

			    // apply the new matrix
			    setTransformMatrix($this, matrix);

			    // invoke caller's version of "step" if one was supplied;
			    if (opt.step) {
				    opt.step.apply(this, [matrix, fx]);
			    }
		    };

		    // animate!
		    return this.stop().animate({ percentAnim: 100 }, options);
	    };

	    /*** Functionality for translating image in slide - END ***/


	    /**
	     * Calculate heights for slider holder and slide item, depending on window width, but only if slider is set to be responsive
	     * @param slider, current slider
	     * @param defaultHeight, default height of slider, set in shortcode
	     * @param responsive_breakpoint_set, breakpoints set for slider responsiveness
	     * @param reset, boolean for reseting heights
	     */
	    var setSliderHeight = function(slider, defaultHeight, responsive_breakpoint_set, reset) {
		    var sliderHeight = defaultHeight;
		    if(!reset) {
			    if(edgtf.windowWidth > responsive_breakpoint_set[0]) {
				    sliderHeight = defaultHeight;
			    } else if(edgtf.windowWidth > responsive_breakpoint_set[1]) {
				    sliderHeight = defaultHeight * 0.75;
			    } else if(edgtf.windowWidth > responsive_breakpoint_set[2]) {
				    sliderHeight = defaultHeight * 0.6;
			    } else if(edgtf.windowWidth > responsive_breakpoint_set[3]) {
				    sliderHeight = defaultHeight * 0.55;
			    } else if(edgtf.windowWidth <= responsive_breakpoint_set[3]) {
				    sliderHeight = defaultHeight * 0.45;
			    }
		    }

		    slider.css({'height': (sliderHeight) + 'px'});
		    slider.find('.edgtf-slider-preloader').css({'height': (sliderHeight) + 'px'});
		    slider.find('.edgtf-slider-preloader .edgtf-ajax-loader').css({'display': 'block'});
		    slider.find('.item').css({'height': (sliderHeight) + 'px'});
		    if(edgtfPerPageVars.vars.edgtfStickyScrollAmount === 0) {
			    edgtf.modules.header.stickyAppearAmount = sliderHeight; //set sticky header appear amount if slider there is no amount entered on page itself
		    }
	    };

	    /**
	     * Calculate heights for slider holder and slide item, depending on window size, but only if slider is set to be full height
	     * @param slider, current slider
	     */
	    var setSliderFullHeight = function(slider) {
		    var mobileHeaderHeight = edgtf.windowWidth < 1025 ? edgtfGlobalVars.vars.edgtfMobileHeaderHeight + $('.edgtf-top-bar').height() : 0;
		    slider.css({'height': (edgtf.windowHeight - mobileHeaderHeight) + 'px'});
		    slider.find('.edgtf-slider-preloader').css({'height': (edgtf.windowHeight - mobileHeaderHeight) + 'px'});
		    slider.find('.edgt-slider-preloader .edgtf-ajax-loader').css({'display': 'block'});
		    slider.find('.item').css({'height': (edgtf.windowHeight - mobileHeaderHeight) + 'px'});
		    if(edgtfPerPageVars.vars.edgtfStickyScrollAmount === 0) {
			    edgtf.modules.header.stickyAppearAmount = edgtf.windowHeight; //set sticky header appear amount if slider there is no amount entered on page itself
		    }
	    };

	    var setElementsResponsiveness = function(slider) {
		    // Basic text styles responsiveness
		    slider
			    .find('.edgtf-slide-element-text-small, .edgtf-slide-element-text-normal, .edgtf-slide-element-text-large, .edgtf-slide-element-text-extra-large')
			    .each(function() {
				    var element = $(this);
				    if (typeof element.data('default-font-size') === 'undefined') { element.data('default-font-size', parseInt(element.css('font-size'),10)); }
				    if (typeof element.data('default-line-height') === 'undefined') { element.data('default-line-height', parseInt(element.css('line-height'),10)); }
				    if (typeof element.data('default-letter-spacing') === 'undefined') { element.data('default-letter-spacing', parseInt(element.css('letter-spacing'),10)); }
			    });
		    // Advanced text styles responsiveness
		    slider.find('.edgtf-slide-element-responsive-text').each(function() {
			    if (typeof $(this).data('default-font-size') === 'undefined') { $(this).data('default-font-size', parseInt($(this).css('font-size'),10)); }
			    if (typeof $(this).data('default-line-height') === 'undefined') { $(this).data('default-line-height', parseInt($(this).css('line-height'),10)); }
			    if (typeof $(this).data('default-letter-spacing') === 'undefined') { $(this).data('default-letter-spacing', parseInt($(this).css('letter-spacing'),10)); }
		    });
		    // Button responsiveness
		    slider.find('.edgtf-slide-element-responsive-button').each(function() {
			    if (typeof $(this).data('default-font-size') === 'undefined') { $(this).data('default-font-size', parseInt($(this).find('a').css('font-size'),10)); }
			    if (typeof $(this).data('default-line-height') === 'undefined') { $(this).data('default-line-height', parseInt($(this).find('a').css('line-height'),10)); }
			    if (typeof $(this).data('default-letter-spacing') === 'undefined') { $(this).data('default-letter-spacing', parseInt($(this).find('a').css('letter-spacing'),10)); }
			    if (typeof $(this).data('default-ver-padding') === 'undefined') { $(this).data('default-ver-padding', parseInt($(this).find('a').css('padding-top'),10)); }
			    if (typeof $(this).data('default-hor-padding') === 'undefined') { $(this).data('default-hor-padding', parseInt($(this).find('a').css('padding-left'),10)); }
		    });
		    // Margins for non-custom layouts
		    slider.find('.edgtf-slide-element').each(function() {
			    var element = $(this);
			    if (typeof element.data('default-margin-top') === 'undefined') { element.data('default-margin-top', parseInt(element.css('margin-top'),10)); }
			    if (typeof element.data('default-margin-bottom') === 'undefined') { element.data('default-margin-bottom', parseInt(element.css('margin-bottom'),10)); }
			    if (typeof element.data('default-margin-left') === 'undefined') { element.data('default-margin-left', parseInt(element.css('margin-left'),10)); }
			    if (typeof element.data('default-margin-right') === 'undefined') { element.data('default-margin-right', parseInt(element.css('margin-right'),10)); }
		    });
		    adjustElementsSizes(slider);
	    };

	    var adjustElementsSizes = function(slider) {
		    var boundaries = {
			    // These values must match those in map.php (for slider), slider.php and edgt.layout.inc
			    mobile: 600,
			    tabletp: 800,
			    tabletl: 1024,
			    laptop: 1440
		    };
		    slider.find('.edgtf-slider-elements-container').each(function() {
			    var container = $(this);
			    var target = container.filter('.edgtf-custom-elements').add(container.not('.edgtf-custom-elements').find('.edgtf-slider-elements-holder-frame')).not('.edgtf-grid');
			    if (target.length) {
				    if (boundaries.mobile >= edgtf.windowWidth && container.attr('data-width-mobile').length) {
					    target.css('width', container.data('width-mobile') + '%');
				    }
				    else if (boundaries.tabletp >= edgtf.windowWidth && container.attr('data-width-tablet-p').length) {
					    target.css('width', container.data('width-tablet-p') + '%');
				    }
				    else if (boundaries.tabletl >= edgtf.windowWidth && container.attr('data-width-tablet-l').length) {
					    target.css('width', container.data('width-tablet-l') + '%');
				    }
				    else if (boundaries.laptop >= edgtf.windowWidth && container.attr('data-width-laptop').length) {
					    target.css('width', container.data('width-laptop') + '%');
				    }
				    else if (container.attr('data-width-desktop').length){
					    target.css('width', container.data('width-desktop') + '%');
				    }
			    }
		    });
		    slider.find('.item').each(function() {
			    var slide = $(this);
			    var def_w = slide.find('.edgtf-slider-elements-holder-frame').data('default-width');
			    var elements = slide.find('.edgtf-slide-element');

			    // Adjusting margins for all elements
			    elements.each(function() {
				    var element = $(this);
				    var def_m_top = element.data('default-margin-top'),
					    def_m_bot = element.data('default-margin-bottom'),
					    def_m_l = element.data('default-margin-left'),
					    def_m_r = element.data('default-margin-right');
				    var scale_data = (typeof element.data('resp-scale') !== 'undefined') ? element.data('resp-scale') : undefined;
				    var factor;

				    if (boundaries.mobile >= edgtf.windowWidth) {
					    factor = (typeof scale_data === 'undefined') ? edgtf.windowWidth / def_w : parseFloat(scale_data.mobile);
				    }
				    else if (boundaries.tabletp >= edgtf.windowWidth) {
					    factor = (typeof scale_data === 'undefined') ? edgtf.windowWidth / def_w : parseFloat(scale_data.tabletp);
				    }
				    else if (boundaries.tabletl >= edgtf.windowWidth) {
					    factor = (typeof scale_data === 'undefined') ? edgtf.windowWidth / def_w : parseFloat(scale_data.tabletl);
				    }
				    else if (boundaries.laptop >= edgtf.windowWidth) {
					    factor = (typeof scale_data === 'undefined') ? edgtf.windowWidth / def_w : parseFloat(scale_data.laptop);
				    }
				    else {
					    factor = (typeof scale_data === 'undefined') ? edgtf.windowWidth / def_w : parseFloat(scale_data.desktop);
				    }

				    element.css({
					    'margin-top': Math.round(factor * def_m_top )+ 'px',
					    'margin-bottom': Math.round(factor * def_m_bot )+ 'px',
					    'margin-left': Math.round(factor * def_m_l )+ 'px',
					    'margin-right': Math.round(factor * def_m_r) + 'px'
				    });
			    });

			    // Adjusting responsiveness
			    elements
				    .filter('.edgtf-slide-element-responsive-text, .edgtf-slide-element-responsive-button, .edgtf-slide-element-responsive-image')
				    .add(elements.find('a.edgtf-slide-element-responsive-text, span.edgtf-slide-element-responsive-text'))
				    .each(function() {
					    var element = $(this);
					    var scale_data = (typeof element.data('resp-scale') !== 'undefined') ? element.data('resp-scale') : undefined,
						    left_data = (typeof element.data('resp-left') !== 'undefined') ? element.data('resp-left') : undefined,
						    top_data = (typeof element.data('resp-top') !== 'undefined') ? element.data('resp-top') : undefined;
					    var factor, new_left, new_top;

					    if (boundaries.mobile >= edgtf.windowWidth) {
						    factor = (typeof scale_data === 'undefined') ? edgtf.windowWidth / def_w : parseFloat(scale_data.mobile);
						    new_left = (typeof left_data === 'undefined') ? (typeof element.data('left') !== 'undefined' ? element.data('left')+'%' : '') : (left_data.mobile != '' ? left_data.mobile+'%' : element.data('left')+'%');
						    new_top = (typeof top_data === 'undefined') ? (typeof element.data('top') !== 'undefined' ? element.data('top')+'%' : '') : (top_data.mobile != '' ? top_data.mobile+'%' : element.data('top')+'%');
					    }
					    else if (boundaries.tabletp >= edgtf.windowWidth) {
						    factor = (typeof scale_data === 'undefined') ? edgtf.windowWidth / def_w : parseFloat(scale_data.tabletp);
						    new_left = (typeof left_data === 'undefined') ? (typeof element.data('left') !== 'undefined' ? element.data('left')+'%' : '') : (left_data.tabletp != '' ? left_data.tabletp+'%' : element.data('left')+'%');
						    new_top = (typeof top_data === 'undefined') ? (typeof element.data('top') !== 'undefined' ? element.data('top')+'%' : '') : (top_data.tabletp != '' ? top_data.tabletp+'%' : element.data('top')+'%');
					    }
					    else if (boundaries.tabletl >= edgtf.windowWidth) {
						    factor = (typeof scale_data === 'undefined') ? edgtf.windowWidth / def_w : parseFloat(scale_data.tabletl);
						    new_left = (typeof left_data === 'undefined') ? (typeof element.data('left') !== 'undefined' ? element.data('left')+'%' : '') : (left_data.tabletl != '' ? left_data.tabletl+'%' : element.data('left')+'%');
						    new_top = (typeof top_data === 'undefined') ? (typeof element.data('top') !== 'undefined' ? element.data('top')+'%' : '') : (top_data.tabletl != '' ? top_data.tabletl+'%' : element.data('top')+'%');
					    }
					    else if (boundaries.laptop >= edgtf.windowWidth) {
						    factor = (typeof scale_data === 'undefined') ? edgtf.windowWidth / def_w : parseFloat(scale_data.laptop);
						    new_left = (typeof left_data === 'undefined') ? (typeof element.data('left') !== 'undefined' ? element.data('left')+'%' : '') : (left_data.laptop != '' ? left_data.laptop+'%' : element.data('left')+'%');
						    new_top = (typeof top_data === 'undefined') ? (typeof element.data('top') !== 'undefined' ? element.data('top')+'%' : '') : (top_data.laptop != '' ? top_data.laptop+'%' : element.data('top')+'%');
					    }
					    else {
						    factor = (typeof scale_data === 'undefined') ? edgtf.windowWidth / def_w : parseFloat(scale_data.desktop);
						    new_left = (typeof left_data === 'undefined') ? (typeof element.data('left') !== 'undefined' ? element.data('left')+'%' : '') : (left_data.desktop != '' ? left_data.desktop+'%' : element.data('left')+'%');
						    new_top = (typeof top_data === 'undefined') ? (typeof element.data('top') !== 'undefined' ? element.data('top')+'%' : '') : (top_data.desktop != '' ? top_data.desktop+'%' : element.data('top')+'%');
					    }

					    if (!factor) {
						    element.hide();
					    }
					    else {
						    element.show();
						    var def_font_size,
							    def_line_h,
							    def_let_spac,
							    def_ver_pad,
							    def_hor_pad;

						    if (element.is('.edgtf-slide-element-responsive-button')) {
							    def_font_size = element.data('default-font-size');
							    def_line_h = element.data('default-line-height');
							    def_let_spac = element.data('default-letter-spacing');
							    def_ver_pad = element.data('default-ver-padding');
							    def_hor_pad = element.data('default-hor-padding');

							    element.css({
									    'left': new_left,
									    'top': new_top
								    })
								    .find('.edgtf-btn').css({
								    'font-size': Math.round(factor * def_font_size) + 'px',
								    'line-height': Math.round(factor * def_line_h) + 'px',
								    'letter-spacing': Math.round(factor * def_let_spac) + 'px',
								    'padding-left': Math.round(factor * def_hor_pad) + 'px',
								    'padding-right': Math.round(factor * def_hor_pad) + 'px',
								    'padding-top': Math.round(factor * def_ver_pad) + 'px',
								    'padding-bottom': Math.round(factor * def_ver_pad) + 'px'
							    });
						    }
						    else if (element.is('.edgtf-slide-element-responsive-image')) {
							    if (factor != edgtf.windowWidth / def_w) { // if custom factor has been set for this screen width
								    var up_w = element.data('upload-width'),
									    up_h = element.data('upload-height');

								    element.filter('.custom-image').css({
										    'left': new_left,
										    'top': new_top
									    })
									    .add(element.not('.custom-image').find('img'))
									    .css({
										    'width': Math.round(factor * up_w) + 'px',
										    'height': Math.round(factor * up_h) + 'px'
									    });
							    }
							    else {
								    var w = element.data('width');

								    element.filter('.custom-image').css({
										    'left': new_left,
										    'top': new_top
									    })
									    .add(element.not('.custom-image').find('img'))
									    .css({
										    'width': w + '%',
										    'height': ''
									    });
							    }
						    }
						    else {
							    def_font_size = element.data('default-font-size');
							    def_line_h = element.data('default-line-height');
							    def_let_spac = element.data('default-letter-spacing');

							    element.css({
								    'left': new_left,
								    'top': new_top,
								    'font-size': Math.round(factor * def_font_size) + 'px',
								    'line-height': Math.round(factor * def_line_h) + 'px',
								    'letter-spacing': Math.round(factor * def_let_spac) + 'px'
							    });
						    }
					    }
				    });
		    });
		    var nav = slider.find('.carousel-indicators');
		    slider.find('.edgtf-slide-element-section-link').css('bottom', nav.length ? parseInt(nav.css('bottom'),10) + nav.outerHeight() + 10 + 'px' : '20px');
	    };

	    var checkButtonsAlignment = function(slider) {
		    slider.find('.item').each(function() {
			    var inline_buttons = $(this).find('.edgtf-slide-element-button-inline');
			    inline_buttons.css('display', 'inline-block').wrapAll('<div class="edgtf-slide-elements-buttons-wrapper" style="text-align: ' + inline_buttons.eq(0).css('text-align') + ';"/>');
		    });
	    };

	    /**
	     * Set heights for slider and elemnts depending on slider settings (full height, responsive height od set height)
	     * @param slider, current slider
	     */
	    var setHeights =  function(slider) {

		    var responsiveBreakpointSet = [1600,1200,900,650,500,320];

		    setElementsResponsiveness(slider);

		    if(slider.hasClass('edgtf-full-screen')){

			    setSliderFullHeight(slider);

			    $(window).resize(function() {
				    setSliderFullHeight(slider);
				    adjustElementsSizes(slider);
			    });

		    }else if(slider.hasClass('edgtf-responsive-height')){

			    var defaultHeight = slider.data('height');
			    setSliderHeight(slider, defaultHeight, responsiveBreakpointSet, false);

			    $(window).resize(function() {
				    setSliderHeight(slider, defaultHeight, responsiveBreakpointSet, false);
				    adjustElementsSizes(slider);
			    });

		    }else {
			    var defaultHeight = slider.data('height');

			    slider.find('.edgtf-slider-preloader').css({'height': (slider.height()) + 'px'});
			    slider.find('.edgtf-slider-preloader .edgtf-ajax-loader').css({'display': 'block'});

			    edgtf.windowWidth < 1025 ? setSliderHeight(slider, defaultHeight, responsiveBreakpointSet, false) : setSliderHeight(slider, defaultHeight, responsiveBreakpointSet, true);

			    $(window).resize(function() {
				    if(edgtf.windowWidth < 1025){
					    setSliderHeight(slider, defaultHeight, responsiveBreakpointSet, false);
				    }else{
					    setSliderHeight(slider, defaultHeight, responsiveBreakpointSet, true);
				    }
				    adjustElementsSizes(slider);
			    });
		    }
	    };

	    /**
	     * Set prev/next numbers on navigation arrows
	     * @param slider, current slider
	     * @param currentItem, current slide item index
	     * @param totalItemCount, total number of slide items
	     */
	    var setPrevNextNumbers = function(slider, currentItem, totalItemCount) {
		    if(currentItem == 1){
			    slider.find('.left.carousel-control .prev').html(totalItemCount);
			    slider.find('.right.carousel-control .next').html(currentItem + 1);
		    }else if(currentItem == totalItemCount){
			    slider.find('.left.carousel-control .prev').html(currentItem - 1);
			    slider.find('.right.carousel-control .next').html(1);
		    }else{
			    slider.find('.left.carousel-control .prev').html(currentItem - 1);
			    slider.find('.right.carousel-control .next').html(currentItem + 1);
		    }
	    };

	    /**
	     * Set video background size
	     * @param slider, current slider
	     */
	    var initVideoBackgroundSize = function(slider){
		    var min_w = 1500; // minimum video width allowed
		    var video_width_original = 1920;  // original video dimensions
		    var video_height_original = 1080;
		    var vid_ratio = 1920/1080;

		    slider.find('.item .edgtf-video .edgtf-video-wrap').each(function(){

			    var slideWidth = edgtf.windowWidth;
			    var slideHeight = $(this).closest('.carousel').height();

			    $(this).width(slideWidth);

			    min_w = vid_ratio * (slideHeight+20);
			    $(this).height(slideHeight);

			    var scale_h = slideWidth / video_width_original;
			    var scale_v = (slideHeight - edgtfGlobalVars.vars.edgtfMenuAreaHeight) / video_height_original;
			    var scale =  scale_v;
			    if (scale_h > scale_v)
				    scale =  scale_h;
			    if (scale * video_width_original < min_w) {scale = min_w / video_width_original;}

			    $(this).find('video, .mejs-overlay, .mejs-poster').width(Math.ceil(scale * video_width_original +2));
			    $(this).find('video, .mejs-overlay, .mejs-poster').height(Math.ceil(scale * video_height_original +2));
			    $(this).scrollLeft(($(this).find('video').width() - slideWidth) / 2);
			    $(this).find('.mejs-overlay, .mejs-poster').scrollTop(($(this).find('video').height() - slideHeight) / 2);
			    $(this).scrollTop(($(this).find('video').height() - slideHeight) / 2);
		    });
	    };

	    /**
	     * Init video background
	     * @param slider, current slider
	     */
	    var initVideoBackground = function(slider) {
		    $('.item .edgtf-video-wrap .edgtf-video-element').mediaelementplayer({
			    enableKeyboard: false,
			    iPadUseNativeControls: false,
			    pauseOtherPlayers: false,
			    // force iPhone's native controls
			    iPhoneUseNativeControls: false,
			    // force Android's native controls
			    AndroidUseNativeControls: false
		    });

		    initVideoBackgroundSize(slider);
		    $(window).resize(function() {
			    initVideoBackgroundSize(slider);
		    });

		    //mobile check
		    if(navigator.userAgent.match(/(Android|iPod|iPhone|iPad|IEMobile|Opera Mini)/)){
			    $('.edgtf-slider .edgtf-mobile-video-image').show();
			    $('.edgtf-slider .edgtf-video-wrap').remove();
		    }
	    };

	    var initPeek = function(slider) {
		    if (slider.hasClass('edgtf-slide-peek')) {

			    var navArrowHover = function(arrow, entered) {
				    var dir = arrow.is('.left') ? 'left' : 'right';
				    var targ_peeker = peekers.filter('.'+dir);
				    if (entered) {
					    arrow.addClass('hovered');
					    var targ_item = (items.index(items.filter('.active')) + (dir=='left' ? -1 : 1) + items.length) % items.length;
					    targ_peeker.find('.edgtf-slider-peeker-inner').css({
						    'background-image': items.eq(targ_item).find('.edgtf-image, .edgtf-mobile-video-image').css('background-image'),
						    'width': itemWidth + 'px'
					    });
					    targ_peeker.addClass('shown');
				    }
				    else {
					    arrow.removeClass('hovered');
					    peekers.removeClass('shown');
				    }
			    };

			    var navBulletHover = function(bullet, entered) {
				    if (entered) {
					    bullet.addClass('hovered');

					    var targ_item = bullet.data('slide-to');
					    var cur_item = items.index(items.filter('.active'));
					    if (cur_item != targ_item) {
						    var dir = (targ_item < cur_item) ? 'left' : 'right';
						    var targ_peeker = peekers.filter('.'+dir);
						    targ_peeker.find('.edgtf-slider-peeker-inner').css({
							    'background-image': items.eq(targ_item).find('.edgtf-image, .edgtf-mobile-video-image').css('background-image'),
							    'width': itemWidth + 'px'
						    });
						    targ_peeker.addClass('shown');
					    }
				    }
				    else {
					    bullet.removeClass('hovered');
					    peekers.removeClass('shown');
				    }
			    };

			    var handleResize = function() {
				    itemWidth = items.filter('.active').width();
				    itemWidth += (itemWidth % 2) ? 1 : 0; // To make it even
				    items.children('.edgtf-image, .edgtf-video').css({
					    'position': 'absolute',
					    'width': itemWidth + 'px',
					    'height': '110%',
					    'left': '50%',
					    'transform': 'translateX(-50%)'
				    });
			    };

			    var items = slider.find('.item');
			    var itemWidth;
			    handleResize();
			    $(window).resize(handleResize);

			    slider.find('.carousel-inner').append('<div class="edgtf-slider-peeker left"><div class="edgtf-slider-peeker-inner"></div></div><div class="edgtf-slider-peeker right"><div class="edgtf-slider-peeker-inner"></div></div>');
			    var peekers = slider.find('.edgtf-slider-peeker');
			    var nav_arrows = slider.find('.carousel-control');
			    var nav_bullets = slider.find('.carousel-indicators > li');

				nav_arrows.on('mouseenter', function () {
					navArrowHover($(this), true);
				});
                nav_arrows.on('mouseleave', function () {
                    navArrowHover($(this), false);
                });

				nav_bullets.on('mouseenter', function () {
					navBulletHover($(this), true);
				});
				nav_bullets.on('mouseleave', function () {
					navBulletHover($(this), false);
				});

			    slider.on('slide.bs.carousel', function() {
				    setTimeout(function() {
					    peekers.addClass('edgtf-slide-peek-in-progress').removeClass('shown');
				    }, 500);
			    });

			    slider.on('slid.bs.carousel', function() {
				    nav_arrows.filter('.hovered').each(function() {
					    navArrowHover($(this), true);
				    });
				    setTimeout(function() {
					    nav_bullets.filter('.hovered').each(function() {
						    navBulletHover($(this), true);
					    });
				    }, 200);
				    peekers.removeClass('edgtf-slide-peek-in-progress');
			    });
		    }
	    };

	    var updateNavigationThumbs = function(slider) {
		    if (slider.hasClass('edgtf-slider-thumbs')) {
			    var src, prev_image, next_image;
			    var all_items_count = slider.find('.item').length;
			    var curr_item = slider.find('.item').index($('.item.active')[0]) + 1;
			    setPrevNextNumbers(slider, curr_item, all_items_count);

			    // prev thumb
			    if(slider.find('.item.active').prev('.item').length){
				    if(slider.find('.item.active').prev('div').find('.edgtf-image').length){
					    src = imageRegex.exec(slider.find('.active').prev('div').find('.edgtf-image').attr('style'));
					    prev_image = new Image();
					    prev_image.src = src[1];
					    //prev_image = '<div class="thumb-image" style="background-image: url('+src[1]+')"></div>';
				    }else{
					    prev_image = slider.find('.active').prev('div').find('> .edgtf-video').clone();
					    prev_image.find('.edgtf-video-overlay, .mejs-offscreen').remove();
					    prev_image.find('.edgtf-video-wrap').width(150).height(84);
					    prev_image.find('.mejs-container').width(150).height(84);
					    prev_image.find('video').width(150).height(84);
				    }
				    slider.find('.left.carousel-control .img .old').fadeOut(300,function(){
					    $(this).remove();
				    });
				    slider.find('.left.carousel-control .img').append(prev_image).find('div.thumb-image, > img, div.edgtf-video').fadeIn(300).addClass('old');

			    }else{
				    if(slider.find('.carousel-inner .item:last-child .edgtf-image').length){
					    src = imageRegex.exec(slider.find('.carousel-inner .item:last-child .edgtf-image').attr('style'));
					    prev_image = new Image();
					    prev_image.src = src[1];
					    //prev_image = '<div class="thumb-image" style="background-image: url('+src[1]+')"></div>';
				    }else{
					    prev_image = slider.find('.carousel-inner .item:last-child > .edgtf-video').clone();
					    prev_image.find('.edgtf-video-overlay, .mejs-offscreen').remove();
					    prev_image.find('.edgtf-video-wrap').width(150).height(84);
					    prev_image.find('.mejs-container').width(150).height(84);
					    prev_image.find('video').width(150).height(84);
				    }
				    slider.find('.left.carousel-control .img .old').fadeOut(300,function(){
					    $(this).remove();
				    });
				    slider.find('.left.carousel-control .img').append(prev_image).find('div.thumb-image, > img, div.edgtf-video').fadeIn(300).addClass('old');
			    }

			    // next thumb
			    if(slider.find('.active').next('div.item').length){
				    if(slider.find('.active').next('div').find('.edgtf-image').length){
					    src = imageRegex.exec(slider.find('.active').next('div').find('.edgtf-image').attr('style'));
					    next_image = new Image();
					    next_image.src = src[1];
					    //next_image = '<div class="thumb-image" style="background-image: url('+src[1]+')"></div>';
				    }else{
					    next_image = slider.find('.active').next('div').find('> .edgtf-video').clone();
					    next_image.find('.edgtf-video-overlay, .mejs-offscreen').remove();
					    next_image.find('.edgtf-video-wrap').width(150).height(84);
					    next_image.find('.mejs-container').width(150).height(84);
					    next_image.find('video').width(150).height(84);
				    }

				    slider.find('.right.carousel-control .img .old').fadeOut(300,function(){
					    $(this).remove();
				    });
				    slider.find('.right.carousel-control .img').append(next_image).find('div.thumb-image, > img, div.edgtf-video').fadeIn(300).addClass('old');

			    }else{
				    if(slider.find('.carousel-inner .item:first-child .edgtf-image').length){
					    src = imageRegex.exec(slider.find('.carousel-inner .item:first-child .edgtf-image').attr('style'));
					    next_image = new Image();
					    next_image.src = src[1];
					    //next_image = '<div class="thumb-image" style="background-image: url('+src[1]+')"></div>';
				    }else{
					    next_image = slider.find('.carousel-inner .item:first-child > .edgtf-video').clone();
					    next_image.find('.edgtf-video-overlay, .mejs-offscreen').remove();
					    next_image.find('.edgtf-video-wrap').width(150).height(84);
					    next_image.find('.mejs-container').width(150).height(84);
					    next_image.find('video').width(150).height(84);
				    }
				    slider.find('.right.carousel-control .img .old').fadeOut(300,function(){
					    $(this).remove();
				    });
				    slider.find('.right.carousel-control .img').append(next_image).find('div.thumb-image, > img, div.edgtf-video').fadeIn(300).addClass('old');
			    }
		    }
	    };

	    /**
	     * initiate slider
	     * @param slider, current slider
	     * @param currentItem, current slide item index
	     * @param totalItemCount, total number of slide items
	     * @param slideAnimationTimeout, timeout for slide change
	     */
	    var initiateSlider = function(slider, totalItemCount, slideAnimationTimeout) {

		    //set active class on first item
		    slider.find('.carousel-inner .item:first-child').addClass('active');
		    //check for header style
		    edgtfCheckSliderForHeaderStyle($('.carousel .active'), slider.hasClass('edgtf-header-effect'));
		    // setting numbers on carousel controls
		    if(slider.hasClass('edgtf-slider-numbers')) {
			    setPrevNextNumbers(slider, 1, totalItemCount);
		    }
		    // set video background if there is video slide
		    if(slider.find('.item video').length){
			    //initVideoBackgroundSize(slider);
			    initVideoBackground(slider);
		    }

		    // update thumbs
		    updateNavigationThumbs(slider);

		    // initiate peek
		    initPeek(slider);

		    // enable link hover color for slide elements with links
		    slider.find('.edgtf-slide-element-wrapper-link')
			    .mouseenter(function() {
				    $(this).removeClass('inheriting');
			    })
			    .mouseleave(function() {
				    $(this).addClass('inheriting');
			    })
		    ;

		    //init slider
		    if(slider.hasClass('edgtf-auto-start')){
			    slider.carousel({
				    interval: slideAnimationTimeout,
				    pause: false
			    });

			    //pause slider when hover slider button
			    slider.find('.slide_buttons_holder .qbutton')
				    .mouseenter(function() {
					    slider.carousel('pause');
				    })
				    .mouseleave(function() {
					    slider.carousel('cycle');
				    });
		    } else {
			    slider.carousel({
				    interval: 0,
				    pause: false
			    });
		    }

		    $(window).scroll(function() {
			    if(slider.hasClass('edgtf-full-screen') && edgtf.scroll > edgtf.windowHeight && edgtf.windowWidth > 1024){
				    slider.carousel('pause');
			    }else if(!slider.hasClass('edgtf-full-screen') && edgtf.scroll > slider.height() && edgtf.windowWidth > 1024){
				    slider.carousel('pause');
			    }else{
				    slider.carousel('cycle');
			    }
		    });


		    //initiate image animation
		    if($('.carousel-inner .item:first-child').hasClass('edgtf-animate-image') && edgtf.windowWidth > 1024){
			    slider.find('.carousel-inner .item.edgtf-animate-image:first-child .edgtf-image').transformAnimate({
				    transform: "matrix("+matrixArray[$('.carousel-inner .item:first-child').data('edgtf_animate_image')]+")",
				    duration: 30000
			    });
		    }
	    };

	    return {
		    init: function() {
			    if(sliders.length) {
				    sliders.each(function() {
					    var $this = $(this);
					    var slideAnimationTimeout = $this.data('slide_animation_timeout');
					    var totalItemCount = $this.find('.item').length;

					    checkButtonsAlignment($this);

					    setHeights($this);

					    /*** wait until first video or image is loaded and than initiate slider - start ***/
					    if(edgtf.htmlEl.hasClass('touch')){
						    if($this.find('.item:first-child .edgtf-mobile-video-image').length > 0){
							    var src = imageRegex.exec($this.find('.item:first-child .edgtf-mobile-video-image').attr('style'));
						    }else{
							    var src = imageRegex.exec($this.find('.item:first-child .edgtf-image').attr('style'));
						    }
						    if(src) {
							    var backImg = new Image();
							    backImg.src = src[1];
							    $(backImg).on('load', function(){
								    $('.edgtf-slider-preloader').fadeOut(500);
								    initiateSlider($this,totalItemCount,slideAnimationTimeout);
							    });
						    }
					    } else {
						    if($this.find('.item:first-child video').length > 0){
							    $this.find('.item:first-child video').eq(0).one('loadeddata',function(){
								    $('.edgtf-slider-preloader').fadeOut(500);
								    initiateSlider($this,totalItemCount,slideAnimationTimeout);
							    });
						    }else{
							    var src = imageRegex.exec($this.find('.item:first-child .edgtf-image').attr('style'));
							    if (src) {
								    var backImg = new Image();
								    backImg.src = src[1];
								    $(backImg).on('load', function(){
									    $('.edgtf-slider-preloader').fadeOut(500);
									    initiateSlider($this,totalItemCount,slideAnimationTimeout);
								    });
							    }
						    }
					    }
					    /*** wait until first video or image is loaded and than initiate slider - end ***/

					    /* before slide transition - start */
					    $this.on('slide.bs.carousel', function () {
						    $this.addClass('edgtf-in-progress');
						    $this.find('.active .edgtf-slider-elements-holder-frame, .active .edgtf-slide-element-section-link').fadeTo(250,0);
					    });
					    /* before slide transition - end */

					    /* after slide transition - start */
					    $this.on('slid.bs.carousel', function () {
						    $this.removeClass('edgtf-in-progress');
						    $this.find('.active .edgtf-slider-elements-holder-frame, .active .edgtf-slide-element-section-link').fadeTo(0,1);

						    // setting numbers on carousel controls
						    if($this.hasClass('edgtf-slider-numbers')) {
							    var currentItem = $('.item').index($('.item.active')[0]) + 1;
							    setPrevNextNumbers($this, currentItem, totalItemCount);
						    }

						    // initiate image animation on active slide and reset all others
						    $('.item.edgtf-animate-image .edgtf-image').stop().css({'transform':'', '-webkit-transform':''});
						    if($('.item.active').hasClass('edgtf-animate-image') && edgtf.windowWidth > 1025){
							    $('.item.edgtf-animate-image.active .edgtf-image').transformAnimate({
								    transform: "matrix("+matrixArray[$('.item.edgtf-animate-image.active').data('edgtf_animate_image')]+")",
								    duration: 30000
							    });
						    }

						    // setting thumbnails on navigation controls
						    if($this.hasClass('edgtf-slider-thumbs')) {
							    updateNavigationThumbs($this);
						    }
					    });
					    /* after slide transition - end */

					    /* swipe functionality - start */
					    $this.swipe( {
						    swipeLeft: function(){ $this.carousel('next'); },
						    swipeRight: function(){ $this.carousel('prev'); },
						    threshold:20
					    });
					    /* swipe functionality - end */

				    });

				    //adding parallax functionality on slider
				    if($('.no-touch .carousel').length){
					    var skrollr_slider = skrollr.init({
						    smoothScrolling: false,
						    forceHeight: false
					    });
					    skrollr_slider.refresh();
				    }

				    $(window).scroll(function(){
					    //set control class for slider in order to change header style
					    if($('.edgtf-slider .carousel').height() < edgtf.scroll){
						    $('.edgtf-slider .carousel').addClass('edgtf-disable-slider-header-style-changing');
					    }else{
						    $('.edgtf-slider .carousel').removeClass('edgtf-disable-slider-header-style-changing');
						    edgtfCheckSliderForHeaderStyle($('.edgtf-slider .carousel .active'),$('.edgtf-slider .carousel').hasClass('edgtf-header-effect'));
					    }

					    //hide slider when it is out of viewport
					    if($('.edgtf-slider .carousel').hasClass('edgtf-full-screen') && edgtf.scroll > edgtf.windowHeight && edgtf.windowWidth > 1025){
						    $('.edgtf-slider .carousel').find('.carousel-inner, .carousel-indicators').hide();
					    }else if(!$('.edgtf-slider .carousel').hasClass('edgtf-full-screen') && edgtf.scroll > $('.edgtf-slider .carousel').height() && edgtf.windowWidth > 1025){
						    $('.edgtf-slider .carousel').find('.carousel-inner, .carousel-indicators').hide();
					    }else{
						    $('.edgtf-slider .carousel').find('.carousel-inner, .carousel-indicators').show();
					    }
				    });
			    }
		    }
	    };
    };

    /**
     * Check if slide effect on header style changing
     * @param slide, current slide
     * @param headerEffect, flag if slide
     */

    function edgtfCheckSliderForHeaderStyle(slide, headerEffect) {

        if($('.edgtf-slider .carousel').not('.edgtf-disable-slider-header-style-changing').length > 0) {

            var slideHeaderStyle = "";
            if (slide.hasClass('light')) { slideHeaderStyle = 'edgtf-light-header'; }
            if (slide.hasClass('dark')) { slideHeaderStyle = 'edgtf-dark-header'; }

            if (slideHeaderStyle !== "") {
                if (headerEffect) {
                    edgtf.body.removeClass('edgtf-dark-header edgtf-light-header').addClass(slideHeaderStyle);
                }
            } else {
                if (headerEffect) {
                    edgtf.body.removeClass('edgtf-dark-header edgtf-light-header').addClass(edgtf.defaultHeaderStyle);
                }

            }
        }
    }

    /**
     * List object that initializes list with animation
     * @type {Function}
     */
    var edgtfInitIconList = edgtf.modules.shortcodes.edgtfInitIconList = function() {
        var iconList = $('.edgtf-animate-list');

        /**
         * Initializes icon list animation
         * @param list current list shortcode
         */
        var iconListInit = function(list) {
            setTimeout(function(){
                list.appear(function(){
                    list.addClass('edgtf-appeared');
                },{accX: 0, accY: edgtfGlobalVars.vars.edgtfElementAppearAmount});
            },30);
        };

        return {
            init: function() {
                if(iconList.length) {
                    iconList.each(function() {
                        iconListInit($(this));
                    });
                }
            }
        };
    };

    /**
     * Masonry gallery, init masonry and resize pictures in grid
     */
    function edgtfInitMasonryGallery(){


        resizeMasonryGallery($('.edgtf-masonry-gallery-grid-sizer').width());

        if($('.edgtf-masonry-gallery-holder').length){
            $('.edgtf-masonry-gallery-holder').each(function(){
                var holder = $(this);
                holder.waitForImages(function(){
                    holder.animate({opacity:1});
                    holder.isotope({
                        itemSelector: '.edgtf-masonry-gallery-item',
                        masonry: {
                            columnWidth: '.edgtf-masonry-gallery-grid-sizer'
                        }
                    });
                });
            });
            $(window).resize(function(){
                resizeMasonryGallery($('.edgtf-masonry-gallery-grid-sizer').width());
                $('.edgtf-masonry-gallery-holder').isotope('reloadItems');
            });
        }
    }

    function resizeMasonryGallery(size){

        var rectangle_portrait = $('.edgtf-masonry-gallery-holder .edgtf-mg-rectangle-portrait');
        var rectangle_landscape = $('.edgtf-masonry-gallery-holder .edgtf-mg-rectangle-landscape');
        var square_big = $('.edgtf-masonry-gallery-holder .edgtf-mg-square-big');
        var square_small = $('.edgtf-masonry-gallery-holder .edgtf-mg-square-small');

        rectangle_portrait.css('height', 2*size);
        if (window.innerWidth < 600) {
            rectangle_landscape.css('height', size/2);
        }
        else {
            rectangle_landscape.css('height', size);
        }
        square_big.css('height', 2*size);
        if (window.innerWidth < 600) {
            square_big.css('height', square_big.width());
        }
        square_small.css('height', size);
    }

    /*
     **  Init shop list masonry type
     */
    function edgtfInitShopListMasonry(){
        var shopList = $('.edgtf-shop-masonry');
        if(shopList.length) {
            shopList.each(function() {
                var thisShopList = $(this).children('.edgtf-shop-list-masonry');
                var size = thisShopList.find('.edgtf-shop-list-masonry-grid-sizer').width();
                edgtfResizeShopMasonry(size,thisShopList);

                edgtfInitMasonryLayout(thisShopList);
                $(window).resize(function(){
                    size = thisShopList.find('.edgtf-shop-list-masonry-grid-sizer').width();
                    edgtfResizeShopMasonry(size,thisShopList);
                    edgtfInitMasonryLayout(thisShopList);
                });
            });
        }
    }

    function edgtfInitMasonryLayout(container){
        container.animate({opacity: 1});
        container.isotope({
            layoutMode: 'packery',
            itemSelector: '.edgtf-shop-product',
            packery: {
                columnWidth: '.edgtf-shop-list-masonry-grid-sizer'
            }
        });
    }

    function edgtfResizeShopMasonry(size,container){

        var defaultMasonryItem = container.find('.edgtf-default-masonry-item');
        var largeWidthMasonryItem = container.find('.edgtf-large-width-masonry-item');
        var largeHeightMasonryItem = container.find('.edgtf-large-height-masonry-item');
        var largeWidthHeightMasonryItem = container.find('.edgtf-large-width-height-masonry-item');

        defaultMasonryItem.css('height', size);
        largeHeightMasonryItem.css('height', Math.round(2*size));

        var breakpoint = edgtf.body.hasClass('page-template-full-width') ? 480 : 600;

        if(edgtf.windowWidth > breakpoint){
            largeWidthHeightMasonryItem.css('height', Math.round(2*size));
            largeWidthMasonryItem.css('height', size);
        }else{
            largeWidthHeightMasonryItem.css('height', size);
            largeWidthMasonryItem.css('height', Math.round(size/2));

        }
    }

    /**
     * Initializes shop masonry filter
     */
    function edgtfInitShopMasonryFilter(){

        var filterHolder = $('.edgtf-shop-filter-holder.edgtf-masonry-filter');

        if(filterHolder.length){
            filterHolder.each(function(){

                var thisFilterHolder = $(this);

                var shopIsotopeAnimation = null;

                thisFilterHolder.find('.filter:first').addClass('current');

                thisFilterHolder.find('li').on('click',function(){

                    var currentFilter = $(this);
                    clearTimeout(shopIsotopeAnimation);

                    $('.isotope, .isotope .isotope-item').css('transition-duration','0.8s');

                    shopIsotopeAnimation = setTimeout(function(){
                        $('.isotope, .isotope .isotope-item').css('transition-duration','0s');
                    },700);

                    var selector = $(this).attr('data-filter');
                    thisFilterHolder.parent().find('.edgtf-shop-list-masonry').isotope({ filter: selector });

                    thisFilterHolder.find('.filter').removeClass('current');
                    currentFilter.addClass('current');

                    return false;

                });

            });
        }
    }

    /**
     * Check if slide effect on header style changing
     */
    function edgtfItemShowcase() {
        var itemShowcase = $('.edgtf-item-showcase');
        if (itemShowcase.length) {
            itemShowcase.each(function(){
                var thisItemShowcase = $(this),
                    leftItems = thisItemShowcase.find('.edgtf-item-left'),
                    rightItems = thisItemShowcase.find('.edgtf-item-right'),
                    itemImage = thisItemShowcase.find('.edgtf-item-image');

                //logic
                leftItems.wrapAll( "<div class='edgtf-item-showcase-holder edgtf-holder-left' />");
                rightItems.wrapAll( "<div class='edgtf-item-showcase-holder edgtf-holder-right' />");
                thisItemShowcase.animate({opacity:1},200);
                setTimeout(function(){
                    thisItemShowcase.appear(function(){
                        itemImage.addClass('edgtf-appeared');
                        thisItemShowcase.on('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend',
                            function(e) {
                                if(edgtf.windowWidth > 1200) {
                                    itemAppear('.edgtf-holder-left .edgtf-item');
                                    itemAppear('.edgtf-holder-right .edgtf-item');
                                } else {
                                    itemAppear('.edgtf-item');
                                }
                            });
                    },{accX: 0, accY: 0});
                },100);

                //appear animation trigger
                function itemAppear(itemCSSClass) {
                    thisItemShowcase.find(itemCSSClass).each(function(i){
                        var thisListItem = $(this);
                        setTimeout(function(){
                            thisListItem.appear(function(){
                                $(this).addClass('edgtf-appeared');
                            },{accX: 0, accY: 0});
                        }, i*150);
                    });
                }
            });

        }
    }

	/*
	 * Type out functionality for Custom Font
	 */
	function edgtfCustomFontTypeOut() {

		var edgtfTyped = $('.edgtf-typed');

		if (edgtfTyped.length) {
			edgtfTyped.each(function(){

				//vars
				var thisTyped = $(this),
					typedWrap = thisTyped.parent('.edgtf-typed-wrap'),
					customFontHolder = typedWrap.parent('.edgtf-custom-font-holder'),
					originalText = customFontHolder.find('.edgtf-custom-font-original'),
					str = typedWrap.data( 'strings' );

                var options = {
                    strings: str,
                    typeSpeed: 90,
                    backDelay: 700,
                    loop: true,
                    contentType: 'text',
                    loopCount: false,
                    cursorChar: "_",
                };

				//ampersand
				if(originalText.text().indexOf('&') != -1) {
					originalText.html(originalText.text().replace('&', '<span class="edgtf-amp">&</span>'));
				}

				//typeout
				setTimeout(function(){
					customFontHolder.appear(function() {
                        if ( ! thisTyped.hasClass( 'edgtf--initialized' ) ) {

                            var typed = new Typed(
                                thisTyped[0],
                                options
                            );
                            thisTyped.addClass( 'edgtf--initialized' );
                        }
					},{accX: 0, accY: edgtfGlobalVars.vars.edgtfElementAppearAmount});
				}, 100);

			});
		}
	}

    /*
    * Animations Holder
    */
    function edgtfAnimationsHolder() {
        var animationsHolderElements = $('.edgtf-animations-holder');

        if (animationsHolderElements.length) {
            animationsHolderElements.appear(function(){
                var animationsHolderElement = $(this);

                animationsHolderElement.addClass('edgtf-appeared');

            },{accX: 0, accY: edgtfGlobalVars.vars.edgtfElementAppearAmount});
        }
    }

    /*
    *  Reservation Form 
    */
    function edgtfReservationFormDatePicker() {

        var datepicker = $('.edgtf-ot-date');

            if(datepicker.length) {
                datepicker.each(function() {
                    $(this).datepicker({
                        prevText: '<span class="arrow_carrot-left"></span>',
                        nextText: '<span class="arrow_carrot-right"></span>'
                    });
                });
            }
    }

    /*
    *  Give Slider Init
    */
    function edgtfInitGiveSlider(){
    	var giveSliders = $('.edgtf-give-forms-slider');

    	if (giveSliders.length){
    		giveSliders.each(function(){
    			var thisGiveSlider = $(this);

    			thisGiveSlider.slick({
                    infinite: true,
                    autoplay: true,
                    slidesToShow : 1,
                    autoplaySpeed: 2500,
                    fade: true,
                    arrows: false,
                    dots: true,
					dotsClass: 'edgtf-slick-dots',
                    adaptiveHeight: true,
                    prevArrow: '<span class="edgtf-slick-prev edgtf-prev-icon"><span class="arrow_carrot-left"></span></span>',
                    nextArrow: '<span class="edgtf-slick-next edgtf-next-icon"><span class="arrow_carrot-right"></span></span>',
                    customPaging: function(slider, i) {
                        return '<span class="edgtf-slick-dot-inner"></span>';
                    }   				
    			});

                thisGiveSlider.addClass("edgtf-give-forms-slider-loaded");
    		});
    	}

    }

    /*
     * Banner
     */
    function edgtfBanner() {
        var banners = $('.edgtf-banner');

        if (banners.length) {
            banners.each(function(){
                var banner = $(this);

                if(banner.find('.edgtf-banner-read-more').length) {
                    var button = banner.find('.edgtf-banner-read-more');

                    button.mouseenter(function(){
                        banner.addClass('edgtf-hovered');
                    }).mouseleave(function(){
                        banner.removeClass('edgtf-hovered');
                    });
                }
            });
        }
    }


})(jQuery);