HEX
Server: Apache
System: Linux webm005.cluster121.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User: adventp (418412)
PHP: 7.4.33
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/adventp/www/wp-content/plugins/ut-shortcodes/ut-shortcode-functions.php
<?php if ( ! defined( 'ABSPATH' ) ) exit;

/**
 * Helper function to implode data html attributes
 *
 * @param     array    $array
 *
 * @return    string
 *
 * @access    public
 * @since     5.0.0
 * @version   1.0.0
 */

if( !function_exists( 'ut_implode_data_attributes' ) ) {

    function ut_implode_data_attributes( $array = '' ) {

        return implode(' ', array_map(
                function ($v, $k) { return sprintf("%s=\"%s\"", $k, $v); },
                $array,
                array_keys( $array )
        ) );

    }

}


/**
 * Helper function to create unique ID without sleep
 *
 * @param     string    $prefix
 * @param     boolean   $entropy
 *
 * @return    string
 *
 * @access    public
 * @since     5.0.0
 * @version   1.0.0
 */

if( !function_exists( 'ut_get_unique_id' ) ) {

    function ut_get_unique_id($prefix = '', $entropy = false)
    {

        $uniqueId = uniqid($prefix, $entropy);
        return str_replace(array('.', '+'), '', $uniqueId);

    }

}

/*
 * Helper Function: Removes multiple
 */

if ( !function_exists( 'ut_nl2br_special' ) ) {

	function ut_nl2br_special($string){

		$string = nl2br($string); 
		$string = preg_replace("/(<br\ ?\/?>)+/", '<br />', $string);

		return $string;

	}

}

/*
 * Helper Function: Add unit to value
 */

if ( !function_exists( 'ut_add_unit_value' ) ) {

	function ut_add_unit_value( $option, $unit ) {

        return $option . $unit;

	}

}


/*
 * Helper Function: Add px to value in case someone has not entered it
 */

if ( !function_exists( 'ut_add_px_value' ) ) {

	function ut_add_px_value( $option ) {

		if ( strpos( $option, 'px' ) !== false ) {

			return $option;

		} else {

			return $option . 'px';

		}

	}

}

/*
 * Helper Function: Remove px value
 */

if ( !function_exists( 'ut_remove_px_value' ) ) {

	function ut_remove_px_value( $option ) {

		return str_replace( 'px', '', $option );

	}

}

/*
 * Helper Function: Add timer unit to value in case someone has not entered it
 */

if ( !function_exists( 'ut_add_timer_unit' ) ) {

	function ut_add_timer_unit( $option, $unit ) {

		if ( strpos( $option, $unit ) !== false ) {

			return $option;

		} else {

			return $option . $unit;

		}

	}

}


/*
 * Helper Function: Delete Timer Unit and Turn into MS
 */

if ( !function_exists( 'ut_delete_timer_unit' ) ) {

    function ut_delete_timer_unit( $option, $unit ) {

        if ( strpos( $option, $unit ) !== false ) {

            return str_replace( $unit, '', $option );

        } else {

            return $option . $unit;

        }

    }

}


/*
 * Placeholder Images
 */

if ( !function_exists( 'ut_img_asset_url' ) ) {
    
    function ut_img_asset_url( $image ) {
        
        return UT_SHORTCODES_URL . '/img/placeholder/' . $image;
        
    }

}



/*
 * Box Shadow Styles
 */

if ( !function_exists( 'ut_box_shadow' ) ) {
    
    function ut_box_shadow( $style, $color ) {
        
        ob_start(); ?>
        
        <?php if( $style == 'ut-box-shadow-1' ) : ?>

        .ut-box-shadow-1 {
            -webkit-box-shadow: 0 10px 6px -6px <?php echo $color; ?>;
               -moz-box-shadow: 0 10px 6px -6px <?php echo $color; ?>;
                    box-shadow: 0 10px 6px -6px <?php echo $color; ?>;
        }

        <?php endif; ?>
        
        <?php if( $style == 'ut-box-shadow-2' ) : ?>

        .ut-box-shadow-2:before, 
        .ut-box-shadow-2:after {
            background: <?php echo $color; ?>;
            -webkit-box-shadow: 0 15px 10px <?php echo $color; ?>;
               -moz-box-shadow: 0 15px 10px <?php echo $color; ?>;
                    box-shadow: 0 15px 10px <?php echo $color; ?>;
        }
        
        <?php endif; ?>

        <?php if( $style == 'ut-box-shadow-3' ) : ?>
        
        .ut-box-shadow-3:before {
            background: <?php echo $color; ?>;
            -webkit-box-shadow: 0 15px 10px <?php echo $color; ?>;
               -moz-box-shadow: 0 15px 10px <?php echo $color; ?>;
                    box-shadow: 0 15px 10px <?php echo $color; ?>;
        }

        <?php endif; ?>

        <?php if( $style == 'ut-box-shadow-4' ) : ?>

        .ut-box-shadow-4:after {
            background: <?php echo $color; ?>;
            -webkit-box-shadow: 0 15px 10px <?php echo $color; ?>;
               -moz-box-shadow: 0 15px 10px <?php echo $color; ?>;
                    box-shadow: 0 15px 10px <?php echo $color; ?>;
        }

        <?php endif; ?>

        <?php if( $style == 'ut-box-shadow-5' ) : ?>

        .ut-box-shadow-5:before, 
        .ut-box-shadow-5:after {
            background: <?php echo $color; ?>;
            -webkit-box-shadow: 0 35px 20px <?php echo $color; ?>;
               -moz-box-shadow: 0 35px 20px <?php echo $color; ?>;
                    box-shadow: 0 35px 20px <?php echo $color; ?>;
        }

        <?php endif; ?>

        <?php if( $style == 'ut-box-shadow-6' ) : ?>

        .ut-box-shadow-6:before, 
        .ut-box-shadow-6:after {
            -webkit-box-shadow:0 0 20px <?php echo $color; ?>;
               -moz-box-shadow:0 0 20px <?php echo $color; ?>;
                    box-shadow:0 0 20px <?php echo $color; ?>;
        }
        
        <?php endif; ?>

        <?php if( $style == 'ut-box-shadow-7' ) : ?>

        .ut-box-shadow-7:before, 
        .ut-box-shadow-7:after {
            -webkit-box-shadow:0 0 20px <?php echo $color; ?>;
               -moz-box-shadow:0 0 20px <?php echo $color; ?>;
                    box-shadow:0 0 20px <?php echo $color; ?>;
        }

        <?php endif; ?>

        <?php if( $style == 'ut-box-shadow-8' ) : ?>

        .ut-box-shadow-8:before, 
        .ut-box-shadow-8:after {
            -webkit-box-shadow:0 0 20px <?php echo $color; ?>;
               -moz-box-shadow:0 0 20px <?php echo $color; ?>;
                    box-shadow:0 0 20px <?php echo $color; ?>;
        }

        <?php endif; ?>

        <?php return ob_get_clean();         
                
    }

}

/*
 * Extra Attachment Fields
 *
 * @param $form_fields array, fields to include in attachment form
 * @param $post object, attachment record in database
 * @return $form_fields, modified form fields
 *
 * @access    public
 * @version   1.0
 */

if ( !function_exists( 'ut_attachment_extra_fields' ) ) {

    function ut_attachment_extra_fields( $form_fields, $post ) {

        $form_fields['ut-gallery-width'] = array(
            'label' => 'Width in Gallery Module',
            'input' => 'text',
            'value' => get_post_meta( $post->ID, 'ut_gallery_width', true ),
            'helps' => 'Supported in draggable gallery module only at the moment.',
        );

        $form_fields['ut-attachment-url'] = array(
            'label' => 'Project URL',
            'input' => 'text',
            'value' => get_post_meta( $post->ID, 'ut_attachment_url', true ),
            'helps' => 'Add an option Project URL. Will be used for different theme features.',
        );

        if( function_exists('ot_type_upload_id') ) {

            // Alternate Image
            ob_start();

            ot_type_upload_id(array(

                'field_name' => "attachments[$post->ID][ut-morph-full-url]",
                'field_id' => "attachments-$post->ID-ut-morph-full-url",
                'field_value' => get_post_meta($post->ID, 'ut_morph_full_url', true),
                'field_class' => '',
                'post_id' => ''

            ));

            $html = ob_get_clean();

            $form_fields['ut-morph-full-url'] = array(
                'label' => 'Alternate Morphbox Image',
                'input' => 'html',
                'html' => $html,
                'helps' => 'Assign an alternate image for the Morphbox which display on zoom.',
            );

            // Caption Color
            ob_start();

            ot_type_colorpicker(array(

                'field_name' => "attachments[$post->ID][ut-morph-caption-color]",
                'field_id' => "attachments-$post->ID-ut-morph-caption-color",
                'field_value' => get_post_meta($post->ID, 'ut_morph_caption_color', true),
                'field_class' => '',
                'field_mode' => 'rgb',
                'post_id' => ''

            ));

            $html = ob_get_clean();

            $form_fields['ut-morph-caption-color'] = array(
                'label' => 'Morphbox Caption Color',
                'input' => 'html',
                'html' => $html,
                'helps' => 'Color for Caption and Close Button.',
            );

            // Caption Background Color
            ob_start();

            ot_type_colorpicker(array(

                'field_name' => "attachments[$post->ID][ut-morph-caption-background]",
                'field_id' => "attachments-$post->ID-ut-morph-caption-background",
                'field_value' => get_post_meta($post->ID, 'ut_morph_caption_background', true),
                'field_class' => '',
                'field_mode' => 'rgb',
                'field_position' => 'top left',
                'post_id' => ''

            ));

            $html = ob_get_clean();

            $form_fields['ut-morph-caption-background'] = array(
                'label' => 'Morphbox Caption Background Color',
                'input' => 'html',
                'html' => $html,
                'helps' => 'Backgroundcolor for Caption.',
            );

        }

        return $form_fields;

    }

    add_filter( 'attachment_fields_to_edit', 'ut_attachment_extra_fields', 10, 2 );

}

/**
 * /**
 *  vc_filter: vc_nav_front_logo - hook to override WPBakery Page Builder logo
 * @return mixed|void
 *
 * @access    public
 * @since     5.0.6
 * @version   1.0
 */

if ( !function_exists( 'ut_vc_navbar' ) ) {
    function ut_vc_navbar() {
        $output = '<a id="vc_logo" class="vc_navbar-brand" title="' . __( 'Brooklyn Page Builder (Visual Composer)', 'js_composer' ) . '" href="' . esc_attr( 'http://unitedthemes.com' ) . '" target="_blank">' . __( 'Brooklyn Page Builder (Visual Composer)', 'js_composer' ) . '</a>';

        return $output;
    }
    add_filter( 'vc_nav_front_logo', 'ut_vc_navbar' );
}

/**
 * Save values of Extra Attachment Fieldsin media uploader
 *
 * @param $post array, the post data for database
 * @param $attachment array, attachment fields from $_POST form
 * @return $post array, modified post data
 *
 * @access    public
 * @version   1.0
 */

if ( !function_exists( 'ut_attachment_extra_fields_save' ) ) {

    function ut_attachment_extra_fields_save( $post, $attachment ) {

        if( isset( $attachment['ut-attachment-url'] ) ) {
            update_post_meta( $post['ID'], 'ut_attachment_url', esc_url($attachment['ut-attachment-url']) );
        }

        if( isset( $attachment['ut-gallery-width'] ) ) {
            update_post_meta( $post['ID'], 'ut_gallery_width', esc_attr($attachment['ut-gallery-width']) );
        }

        if( isset( $attachment['ut-morph-full-url'] ) ) {
            update_post_meta( $post['ID'], 'ut_morph_full_url', esc_url($attachment['ut-morph-full-url']) );
        }

        if( isset( $attachment['ut-morph-caption-color'] ) ) {
            update_post_meta( $post['ID'], 'ut_morph_caption_color', esc_attr($attachment['ut-morph-caption-color']) );
        }

        if( isset( $attachment['ut-morph-caption-background'] ) ) {
            update_post_meta( $post['ID'], 'ut_morph_caption_background', esc_attr($attachment['ut-morph-caption-background']) );
        }

        return $post;
    }

    add_filter( 'attachment_fields_to_save', 'ut_attachment_extra_fields_save', 10, 2 );

}





/*
 * Add Autoplay for Ajax Video Request
 *
 * @access    public
 * @version   1.1
 */

if ( !function_exists( 'ut_ajax_player_autoplay' ) ) {

    function ut_ajax_player_autoplay( $provider, $url, $args ) {
        
        /* only execute for ajax action */
        if( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
        
            if( strpos( $provider, 'vimeo' ) !== false ) {
                
                $provider = esc_url_raw( add_query_arg( 'autoplay', 1, $provider ) );
                
            }
            
            if( strpos( $provider, 'youtube' ) !== false || strpos($provider, 'youtu.be') !== false ) {
                
                $provider = esc_url_raw( add_query_arg( 'autoplay', 1, $provider ) );
                
            }            
        
        }
        
        return $provider;
        
    }
    
    add_filter('oembed_fetch_url', 'ut_ajax_player_autoplay', 90, 3);

}

/*
 * Add HTTP
 *
 * @access    public
 * @since     4.4.5
 */

if(!function_exists('ut_portfolio_add_http')) {

	function ut_portfolio_add_http( $url ) {
		
		if ( !preg_match("~^(?:f|ht)tps?://~i", $url ) ) {
			
            $url = is_ssl() ? "https://" . $url : "http://" . $url;
            
		}
        
		return esc_url_raw($url);
        
	}
	
}

/*
 * Extract URL from String
 *
 * @access    public
 * @since     4.4.5
 */

if( !function_exists('ut_extract_url_from_string') ) {
 
    function ut_extract_url_from_string( $string ) {
    
        $image_url = !empty( $string ) ? preg_match_all('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', $string , $match) : '';
        return isset($match[0][0]) ? ut_portfolio_add_http($match[0][0]) : '';
    
    }
    
}

/**
 * Check if given string is a youtube video
 *
 * @access    public 
 * @since     4.4.5
 * @version   1.0.0
 */
 
if ( ! function_exists( 'ut_video_is_youtube' ) ) :

    function ut_video_is_youtube( $video ) {
        
        return preg_match('~^(?:https?://)?(?:www[.])?(?:youtube[.]com/watch[?]v=|youtu[.]be/)([^&]{11})~x', trim($video) , $matches);

    }

endif;


/**
 * Extract Vimeo ID form URL
 *
 * @access    public 
 * @since     4.4.5
 * @version   1.0.0
 */

if ( ! function_exists( 'extract_vimeo_id' ) ) :

    function extract_vimeo_id( $url ) {

        if( preg_match("/(https?:\/\/)?(www\.)?(player\.)?vimeo.com\/([a-z]*\/)*([0-9]{6,11})[?]?\.*/", trim($url) , $matches) ){

            if( !empty($matches[5]) ) {

                return $matches[5];

            } else {

                return false;

            }

        } else {

            return false;

        }

    }

endif;


/**
 * Check if given string is a vimeo video
 *
 * @access    public 
 * @since     4.4,5
 * @version   1.0.0
 */
 
if ( ! function_exists( 'ut_video_is_vimeo' ) ) :

    function ut_video_is_vimeo( $video ) {
        
        return preg_match('/\/\/(www\.)?vimeo.com\/(\d+)($|\/)/', trim($video) , $matches);

    }

endif;


/*
 * CSS Minifier
 */

if ( !function_exists( 'ut_minify_inline_css' ) ) {
    
    function ut_minify_inline_css( $buffer ) { 
        
        $buffer = preg_replace( '!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer );
        $buffer = str_replace( array("\r\n", "\r", "\n", "\t", '  ', '    ', '    '), '', $buffer );
        
        return $buffer;
        
    }
        
}

/*
 * Filter Array Recursive
 */

if( !function_exists('array_filter_recursive') ) {

    function array_filter_recursive( $input ) { 
   
        foreach ($input as &$value) { 
            
            if( is_array( $value ) ) { 
                
                $value = array_filter_recursive( $value );
                 
            }
            
        }
            
        return array_filter( $input ); 
   
    } 

}

/*
 * Web Safe Font Markup
 */
if( !function_exists('get_websafe_font_css_family') ) {

    function get_websafe_font_css_family( $key ) {
        
        $websafe_fonts = array(
            'arial'         => 'Arial, Helvetica, sans-serif',
            'courier'       => '"Courier New", Courier, monospace',
            'comic'         => '"Comic Sans MS", cursive, sans-serif',
            'georgia'       => 'Georgia, serif',
            'helvetica'     => 'Helvetica, sans-serif',
            'impact'        => 'Impact, Charcoal, sans-serif',
            'lucida_sans'   => '"Lucida Sans Unicode", "Lucida Grande", sans-serif',
            'lucida_console'=> '"Lucida Console", Monaco, monospace',
            'palatino'      => '"Palatino Linotype", "Book Antiqua", Palatino, serif',
            'tahoma'        => 'Tahoma, Geneva, sans-serif',
            'times'         => '"Times New Roman", Times, serif',
            'trebuchet'     => '"Trebuchet MS", Helvetica, sans-serif',
            'verdana'       => 'Verdana, Geneva, sans-serif'
        );
        
        return isset( $websafe_fonts[$key] ) ? $websafe_fonts[$key] : $websafe_fonts['arial'];
        
    }

}



/*
 * Array of available Font Settings
 *
 * since 4.4.6
 * version 1.0
 */

if ( !function_exists( '_vc_add_font_settings' ) ) {
    
    function _vc_add_font_settings( $prefix = NULL, $category = 'Font Settings', $defaults = array(), $exception = array() ) {
        
        $font_settings = array();
        
        if( !in_array( 'custom_fonts', $exception ) ) {
            
            $font_settings[] = array(
                'type'              => 'dropdown',
                'heading'           => esc_html__( 'Choose Font Source', 'ut_shortcodes' ),
                'param_name'        => $prefix . 'font_source',
                'group'             => $category,
                'value'             => array(
                    esc_html__( 'Theme Default', 'ut_shortcodes' ) => 'default',
                    esc_html__( 'Web Safe Fonts', 'ut_shortcodes' ) => 'websafe',
                    esc_html__( 'Google Font', 'ut_shortcodes' ) => 'google'                                            
                ),                                                                
            );
            
            $font_settings[] = array(
                'type'              => 'google_fonts',
                'param_name'        => $prefix . 'google_fonts',
                'value'             => 'font_family:Abril%20Fatface%3Aregular|font_style:400%20regular%3A400%3Anormal',
                'group'             => $category,
                'settings'          => array(
                    'fields' => array(
                        'font_family_description' => __( 'Select font family.', 'ut_shortcodes' ),
                        'font_style_description'  => __( 'Select font styling.', 'ut_shortcodes' ),
                    ),
                ),
                'dependency'        => array(
                    'element'           => $prefix . 'font_source',
                    'value'             => 'google',
                ),
            );
            
            $font_settings[] = array(
                'type'              => 'dropdown',
                'heading'           => esc_html__( 'Websafe Fonts', 'ut_shortcodes' ),
                'param_name'        => $prefix . 'websafe_fonts',
                'group'             => $category,
                'value'             => array(
                    esc_html__( 'Arial', 'unite' )              => 'arial',
                    esc_html__( 'Comic Sans', 'unite' )         => 'comic',
                    esc_html__( 'Georgia', 'unite' )            => 'georgia',
                    esc_html__( 'Helvetica', 'unite' )          => 'helvetica',
                    esc_html__( 'Impact', 'unite' )             => 'impact',
                    esc_html__( 'Lucida Sans', 'unite' )        => 'lucida_sans',
                    esc_html__( 'Lucida Console', 'unite' )     => 'lucida_console',                                    
                    esc_html__( 'Palatino', 'unite' )           => 'palatino',
                    esc_html__( 'Tahoma', 'unite' )             => 'tahoma',
                    esc_html__( 'Times New Roman', 'unite' )    => 'times',
                    esc_html__( 'Trebuchet', 'unite' )          => 'trebuchet',
                    esc_html__( 'Verdana', 'unite' )            => 'verdana'                            
                ),
                'dependency'        => array(
                    'element'           => $prefix . 'font_source',
                    'value'             => 'websafe',
                ),
                
            );
        
        }
        
        if( !in_array( 'font_color', $exception ) ) {
            
            $font_settings[] = array(
                'type'              => 'colorpicker',
                'heading'           => esc_html__( 'Font Color', 'ut_shortcodes' ),
                'param_name'        => $prefix . 'font_color',
                'group'             => $category,                								
            );
        
        }        
        
        if( !in_array( 'font_size', $exception ) ) {
            
            $default = !empty( $defaults['font_size'] ) ? $defaults['font_size'] : 10;
            $font_size_min = !empty( $defaults['font_size_min'] ) ? $defaults['font_size_min'] : 8;
            $font_size_max = !empty( $defaults['font_size_max'] ) ? $defaults['font_size_max'] : 200;
            
            $font_settings[] = array(
                'type'              => 'range_slider',
                'heading'           => esc_html__( 'Font Size', 'ut_shortcodes' ),
                'param_name'        => $prefix . 'font_size',
                'group'             => $category,
                'value'             => array(
                    'default'   => $default,
                    'min'       => $font_size_min,
                    'max'       => $font_size_max,
                    'step'      => '1',
                    'unit'      => 'px'
                ),								
            );
        
        }        
        
        if( !in_array( 'line_height', $exception ) ) {
            
            $default = !empty( $defaults['line_height'] ) ? $defaults['line_height'] : 150;
            
            $font_settings[] = array(
                'type'              => 'range_slider',
                'heading'           => esc_html__( 'Line_height', 'ut_shortcodes' ),
                'param_name'        => $prefix . 'line_height',
                'group'             => $category,
                'value'             => array(
                    'default'   => $default,
                    'min'       => '80',
                    'max'       => '300',
                    'step'      => '5',
                    'unit'      => '%'
                ),
                
            );
        
        }
        
        if( !in_array( 'text_transform', $exception ) ) {
            
            $font_settings[] = array(
                'type'              => 'dropdown',
                'heading'           => esc_html__( 'Title Text Transform', 'ut_shortcodes' ),
                'description'       => esc_html__( '(optional)' , 'ut_shortcodes' ),
                'param_name'        => $prefix . 'text_transform',
                'group'             => $category,
                'value'             => array(
                    esc_html__( 'Select Text Transform' , 'ut_shortcodes' ) => '',
                    esc_html__( 'capitalize' , 'ut_shortcodes' )            => 'capitalize',
                    esc_html__( 'uppercase', 'ut_shortcodes' )              => 'uppercase',
                    esc_html__( 'lowercase', 'ut_shortcodes' )              => 'lowercase'                                    
                ),
            );        
        
        }
        
        if( !in_array( 'font_weight', $exception ) ) {
            
            $font_settings[] = array(
                'type'              => 'dropdown',
                'heading'           => esc_html__( 'Font Weight', 'ut_shortcodes' ),
                'description'       => esc_html__( 'Please keep in mind, that the selected font needs to support the font weight.', 'ut_shortcodes' ),
                'param_name'        => $prefix . 'font_weight',
                'group'             => $category,
                'value'             => array(
                    esc_html__( 'Select Font Weight' , 'ut_shortcodes' ) => '',
                    esc_html__( 'normal' , 'ut_shortcodes' )             => 'normal',
                    esc_html__( 'bold' , 'ut_shortcodes' )               => 'bold',
                    esc_html__( '100' , 'ut_shortcodes' )                => 100,
                    esc_html__( '200' , 'ut_shortcodes' )                => 200,
                    esc_html__( '300' , 'ut_shortcodes' )                => 300,
                    esc_html__( '400' , 'ut_shortcodes' )                => 400,
                    esc_html__( '500' , 'ut_shortcodes' )                => 500,
                    esc_html__( '600' , 'ut_shortcodes' )                => 600,
                    esc_html__( '700' , 'ut_shortcodes' )                => 700,
                    esc_html__( '800' , 'ut_shortcodes' )                => 800,
                    esc_html__( '900' , 'ut_shortcodes' )                => 900
                ),
                'dependency'        => array(
                    'element'           => $prefix . 'font_source',
                    'value'             => array('websafe','default'),
                ),                                
            );
                
        }
        
        return $font_settings;
            
    }

}


/*
 * CSS3 Animation Effects
 */

if( !function_exists('ut_recognized_animation_effects') ) :

    function ut_recognized_animation_effects() {
     
      return apply_filters( 'ut_recognized_animation_effects', array(
        'flash'             => 'Flash',
        'bounce'            => 'Bounce',
        'shake'             => 'Shake',
        'tada'              => 'Tada',
        'swing'             => 'Swing',
        'wobble'            => 'Wobble',
        'wiggle'            => 'Wiggle',
        'pulse'             => 'Pulse',
        'slideInUp'         => 'Slide In Up',
        'slideInLeft'       => 'Slide In Left',
        'slideInRight'      => 'Slide In Right',
        'slideInDown'       => 'Slide In Down',
        'flip'              => 'Flip',
        'flipInX'           => 'Flip In X',
        'flipInY'           => 'Flip In Y',
        'fadeIn'            => 'Fade In',
        'fadeInUp'          => 'Fade In Up',
        'fadeInDown'        => 'Fade In Down',
        'fadeInLeft'        => 'Fade In Left',
        'fadeInRight'       => 'Fade In Right',
        'fadeInUpBig'       => 'Fade In Up Big',
        'fadeInDownBig'     => 'Fade In Down Big',
        'fadeInLeftBig'     => 'Fade In Left Big',
        'fadeInRightBig'    => 'Fade In Right Big',
        'bounceIn'          => 'Bounce In',
        'bounceInDown'      => 'Bounce In Down',
        'bounceInUp'        => 'Bounce In Up',
        'bounceInLeft'      => 'Bounce In Left',
        'bounceInRight'     => 'Bounce In Right',
        'rotateIn'          => 'Rotate In',
        'rotateInDownLeft'  => 'Rotate In Down Left',
        'rotateInDownRight' => 'Rotate In Down Right',
        'rotateInUpLeft'    => 'Rotate In Up Left',
        'rotateInUpRight'   => 'Rotate In Up Right',
        'lightSpeedIn'      => 'LightSpeed In',
        'hinge'             => 'Hinge',
        'rollIn'            => 'Roll In'
      ));
      
    }

endif;

/*
 * CSS3 Animation Effects
 */

if( !function_exists('ut_recognized_animation_effects_vc') ) :

    function ut_recognized_animation_effects_vc() {
     
      return apply_filters( 'ut_recognized_animation_effects_vc', array(
        'No Animation Effect'   => '',
        'Flash'                 => 'flash',
        'Bounce'                => 'bounce',
        'Shake'                 => 'shake',
        'Tada'                  => 'tada',
        'Swing'                 => 'swing',
        'Wobble'                => 'wobble',
        'Wiggle'                => 'wiggle',
        'Pulse'                 => 'pulse',
        'Slide In Up'           => 'slideInUp',
        'Slide In Left'         => 'slideInLeft',
        'Slide In Right'        => 'slideInRight',
        'Slide In Down'         => 'slideInDown',
        'Flip'                  => 'flip',
        'Flip In X'             => 'flipInX',
        'Flip In Y'             => 'flipInY',
        'Fade In'               => 'fadeIn',
        'Fade In Up'            => 'fadeInUp',
        'Fade In Down'          => 'fadeInDown',
        'Fade In Left'          => 'fadeInLeft',
        'Fade In Right'         => 'fadeInRight',
        'Fade In Up Big'        => 'fadeInUpBig',
        'Fade In Down Big'      => 'fadeInDownBig',
        'Fade In Left Big'      => 'fadeInLeftBig',
        'Fade In Right Big'     => 'fadeInRightBig',
        'Bounce In'             => 'bounceIn',
        'Bounce In Down'        => 'bounceInDown',
        'Bounce In Up'          => 'bounceInUp',
        'Bounce In Left'        => 'bounceInLeft',
        'Bounce In Right'       => 'bounceInRight',
        'Rotate In'             => 'rotateIn',
        'Rotate In Down Left'   => 'rotateInDownLeft',
        'Rotate In Down Right'  => 'rotateInDownRight',
        'Rotate In Up Left'     => 'rotateInUpLeft',
        'Rotate In Up Right'    => 'rotateInUpRight',
        'LightSpeed In'         => 'lightSpeedIn',
        'Hinge'                 => 'hinge',
        'Roll In'               => 'rollIn'
      ));
            
    }

endif;

/*
 * Custom "get"_comments_popup_link
 */
if( !function_exists('ut_get_comments_popup_link') ) {
    
    function ut_get_comments_popup_link( $zero = false, $one = false, $more = false, $css_class = '', $none = false ) {
        
        global $wpcommentspopupfile, $wpcommentsjavascript;
     
        $id = get_the_ID();
     
        if ( false === $zero ) $zero = esc_html__( 'No Comments' , 'ut_shortcodes' );
        if ( false === $one ) $one = esc_html__( '1 Comment' , 'ut_shortcodes' );
        if ( false === $more ) $more = esc_html__( '% Comments' , 'ut_shortcodes' );
        if ( false === $none ) $none = esc_html__( 'Comments Off' , 'ut_shortcodes' );
     
        $number = get_comments_number( $id );
     
        $str = '';
     
        if ( 0 == $number && !comments_open() && !pings_open() ) {
            $str = '<span' . ((!empty($css_class)) ? ' class="' . esc_attr( $css_class ) . '"' : '') . '>' . $none . '</span>';
            return $str;
        }
     
        if ( post_password_required() ) {
            $str = esc_html__('Enter your password to view comments . ' , 'ut_shortcodes' );
            return $str;
        }
     
        $str = '<a href="';
        if ( $wpcommentsjavascript ) {
            if ( empty( $wpcommentspopupfile ) )
                $home = home_url();
            else
                $home = get_option('siteurl');
            $str .= $home . '/' . $wpcommentspopupfile . '?comments_popup=' . $id;
            $str .= '" onclick="wpopen(this.href); return false"';
        } else { // if comments_popup_script() is not in the template, display simple comment link
            if ( 0 == $number )
                $str .= get_permalink() . '#respond';
            else
                $str .= get_comments_link();
            $str .= '"';
        }
     
        if ( !empty( $css_class ) ) {
            $str .= ' class="' . $css_class . '" ';
        }
        $title = the_title_attribute( array('echo' => 0 ) );
     
        $str .= apply_filters( 'comments_popup_link_attributes', '' );
     
        $str .= ' title="' . esc_attr( sprintf( esc_html__('Comment on %s' , 'ut_shortcodes'), $title ) ) . '">';
        $str .= ut_get_comments_number_str( $zero, $one, $more );
        $str .= '</a>';
         
        return $str;
    }
}

if( !function_exists('ut_get_comments_number_str') ) {
    
    function ut_get_comments_number_str( $zero = false, $one = false, $more = false, $deprecated = '' ) {
        if ( !empty( $deprecated ) )
            _deprecated_argument( __FUNCTION__, '1.3' );
     
        $number = get_comments_number();
     
        if ( $number > 1 )
            $output = str_replace('%', number_format_i18n($number), ( false === $more ) ? esc_html__('% Comments', 'ut_shortcodes') : $more);
        elseif ( $number == 0 )
            $output = ( false === $zero ) ? esc_html__('No Comments', 'ut_shortcodes') : $zero;
        else // must be one
            $output = ( false === $one ) ? esc_html__('1 Comment', 'ut_shortcodes') : $one;
     
        return apply_filters('comments_number', $output, $number);
    }
    
}

/*
 * Fix Shortcodes
 */
 
if( !function_exists('ut_fix_shortcodes') ) {
    
    function ut_fix_shortcodes( $content ){
    
        
        $block = join("|",array( "ut_custom_css", "ut_animate_image" , "ut_button" , "ut_alert" , "ut_one_sixth" , "ut_one_sixth_last" , "ut_one_fifth" , "ut_one_fifth_last" , "ut_one_fourth" , "ut_one_fourth_last" , "ut_one_third" , "ut_one_third_last" , "ut_one_half" , "ut_one_half_last" , "ut_two_thirds" ,
                                 "ut_two_thirds_last" , "ut_service_icon_box", "ut_three_fourth" , "ut_three_fourth_last" , "ut_probar" , "ut_highlight" , "ut_tabgroup" , "ut_tab" , "ut_togglegroup" , "ut_toggle" , "ut_rotate_words" , "ut_fw_section" , "ut_showcase" , "ut_service_box" , "ut_quote_rotator" , 
                                 "ut_quote" , "ut_quote_rotator_alt" , "ut_quote_alt" , "ut_service_column" , "ut_service_column_vertical" , "ut_count_up" , "ut_parallax_quote" , "ut_social" , "ut_social_media", "ut_client_group" , "ut_client" , "ut_single_quote" , "ut_highlight_section" , 'ut_video_testimonial', 'ut_video_testimonials',
                                 "video", "ut_custom_box", "contact-form-7", "ut_icon_tab", "ut_icon_tabs", "ut_pricing_table" ));
         
        $rep = preg_replace("/(<p>)?\[($block)(\s[^\]]+)?\](<\/p>|<br \/>)?/","[$2$3]",$content);
        $rep = preg_replace("/(<p>)?\[\/($block)](<\/p>|<br \/>)?/","[/$2]",$rep);
         
        return $rep;

    }
    
    add_filter( 'the_content', 'ut_fix_shortcodes' );
        
}

/*
 * Icons
 */

if( !function_exists('ut_create_icon') ) { 
 
    function ut_create_icon($atts, $content = null) {
                
        extract(shortcode_atts(array(
             
             'icon'     => 'fa-off',
             'size'     => 'fa-4',
             'color'    => '',
             'bgcolor'  => '#CCC',
             'border'   => 'none',
             'spin'     => '',
             'rotate'   => '',
             'link'     => '',
             'target'   => 'self',
             'align'    => 'alignnone',
             'class'    => ''    
             
        ), $atts));

            $finalicon = NULL;
            $iconclass = NULL;
            
            if( $border == 'none' ) {
                
                /* default icon */
                $classes    = array('icon' , 'size' , 'spin', 'rotate', 'class');
    
                $style = (!empty($color)) ? 'style="color:' . $color . '"' : '';
                
                $span_open  = '<span class="' . $align . ' ut-custom-icon">';
                $span_close = '</span>';
                
                foreach($atts as $key => $att) {
                    
                    if( !empty($att) && in_array($key, $classes) ){
				if($key == 'icon' && $att == 'fa-twitter'){
					$iconclass .= 'fa-brands fa-x-twitter ';
				}else{
					$iconclass .= $att . ' ';
				}
			}
                    
                }
                
                if(!empty($link)) {
                    
                    $finalicon .= $span_open  . '<a class="ut-custom-icon-link" target="_' . $target . '" href="' . $link . '"><i class="fa ' . trim($iconclass) . '" ' . $style . '></i></a>' .  $span_close;
                    
                } else {
                    
                    $finalicon .= $span_open  . '<i class="fa ' . trim($iconclass) . '" ' . $style . '></i>' .  $span_close;
                    
                }
                
            } else {
            
                
                /* stacked icon */
                $classes    = array('icon' , 'spin', 'rotate', 'class');
                $style      = (!empty($color)) ? 'style="color:' . $color . '"' : '';
                
                foreach($atts as $key => $att) {
                    
                    if( !empty($att) && in_array($key, $classes) ){
				if($key == 'icon' && $att == 'fa-twitter'){
					$iconclass .= 'fa-brands fa-x-twitter ';
				}else{
					$iconclass .= $att . ' ';
				}
			}
                    
                }
                
                /* start output */
                $finalicon .= '<span class="fa-stack ut-custom-icon ' . $size . ' ' . $align . '">';
                    
                    if(!empty($link)) { $finalicon .= '<a target="_' . $target . '" href="' . $link . '">'; }
                                                
                        $finalicon .= '<i class="fa fa-' . $border . ' fa-stack-2x" style="color:' . $bgcolor . '"></i>';
                        $finalicon .= '<i class="fa ' . trim($iconclass) . ' fa-stack-1x" ' . $style . '></i>';
                        
                    if(!empty($link)) { $finalicon .= '</a>'; }
                
                $finalicon .= '</span>';
            
            }
                    
        
        return $finalicon;
        
    }
    add_shortcode('ut_icon', 'ut_create_icon');

}

/*
 * Spacer
 */
 
if( !function_exists('ut_create_spacer') ) {  

    function ut_create_spacer( $atts ) {
        
        extract(shortcode_atts(array(            
                'class'  => '',
                'margin_bottom' => '',
                'margin_top' => ''        
            ), $atts));
            
            /* create style */
            $style = 'style="';
            
            if(!empty($margin_bottom)) {
                $margin_bottom = is_numeric($margin_bottom) ? $margin_bottom  . 'px' : $margin_bottom ; 
                $style .= 'margin-bottom: ' . $margin_bottom . ';';
            }
            
            if(!empty($margin_top)) {
                $margin_top = is_numeric($margin_top) ? $margin_top  . 'px' : $margin_top ; 
                $style .= 'margin-top: ' . $margin_top . ';';
            }
            
            $style .= '"';            
            
            return '<div class="ut-spacer ' . $class . '" ' . $style . '></div>';
            
    }
    
    add_shortcode('ut_spacer', 'ut_create_spacer');
    
}

/*
 * Alerts
 */
 
if( !function_exists('ut_create_alert') ) {  

    function ut_create_alert( $atts, $content = null ) {
        
        extract(shortcode_atts(array(
                'class'        => '',
                'color'        => 'white',
                'effect'       => '',
                'animate_once' => 'no',
            ), $atts));
            
            /* animation effect */
            $dataeffect = $animated = NULL;
            if( !empty( $effect ) ) {
    
                $dataeffect = 'data-effect="' . $effect . '" data-animateonce="' . $animate_once . '"';
                $animated   = 'ut-animate-element animated';
                
            }
            
            return '<div ' . $dataeffect . ' class="ut-alert ' . $color . ' ' . $class . ' ' . $animated . '">' . do_shortcode($content) . '</div>';
            
    }
    
    add_shortcode('ut_alert', 'ut_create_alert');
    
}




/*
 * Highlights
 */ 

if( !function_exists('ut_highlight') ) { 
 
    function ut_highlight($atts, $content = null) {
        
        extract(shortcode_atts(array(
             'class'     => '',
             'color'    => '',
             'bgcolor'    => ''
        ), $atts));
        
        $extraStyle = 'style="';
        
        if( !empty($color) ) {
            $extraStyle .= 'color: ' . $color . ' ;';
        }
        
        if( !empty($bgcolor) ) {
            $extraStyle .= 'background: ' . $bgcolor . ' ;';
        }
        
        $extraStyle .= '"';
        
        
        return '<span ' . $extraStyle . ' class="ut-highlight ' . $class . '">' . do_shortcode($content) . '</span>';
    }
    add_shortcode('ut_highlight', 'ut_highlight');
}

/*
 * Tabs
 */ 

if( !function_exists('ut_tabgroup') ) {

    function ut_tabgroup( $atts, $content ){
            
            extract(shortcode_atts(array(
                'width'        => '',
                'last'        => 'false',
                'class'     => ''
            ), $atts));    
            
            $grid = array(  'third'  => 'ut-one-third',
                            'fourth' => 'ut-one-fourth',
                               'half'     => 'ut-one-half' );
        
            $last = $last == 'true' ? 'ut-column-last' : '';
            $return = '';
            
            /* fallback */
            $gridwidth = !empty($grid[$width]) ? $grid[$width] : '';
            
            
            $GLOBALS['tab_count'] = 0;
            $GLOBALS['tabs'] = array();
            
            do_shortcode( $content );        
        
            if( is_array( $GLOBALS['tabs'] ) ){
                
                $tabcount = 1;
                
                foreach( $GLOBALS['tabs'] as $tab ){
                    
                    $active = ($tabcount == 1) ? 'class="active"' : '';
                    $tabs[]     = '<li ' . $active . '><a href="#' . $tab['id'] . 'Tab" data-toggle="tab">' . $tab['title'] . '</a></li>';
                    
                    $active = ($tabcount == 1) ? 'active' : '';
                    $panes[]    = '<div class="tab-pane ' . $active . ' ' . $tab['class'] . ' clearfix" id="' . $tab['id'] . 'Tab">' . do_shortcode($tab['content']) . '</div>';
                    
                    $tabcount++;
                    
                }
                
                if( !empty($width) || !empty($class) ) {
                    $return .= '<div class="' . $gridwidth . ' ' . $class . ' ' . $last . '">';
                }
                
                $return .= "\n" . '<!-- the tabs --><ul class="ut-nav-tabs clearfix">' . implode( "\n", $tabs ) . '</ul>' . "\n" . '<!-- tab "panes" --><div class="ut-tab-content entry-content clearfix">' . implode( "\n", $panes ) . '</div>' . "\n";
                
                if( !empty($width) ) {
                    $return .= '</div>';
                }
                
                
            }
        
        return $return;
    
    }
    add_shortcode( 'ut_tabgroup', 'ut_tabgroup' );

}

if( !function_exists('ut_tab') ) {

    function ut_tab( $atts, $content ){
        
        extract(shortcode_atts(array(
            'title' => '%d',
            'id' => '%d',
            'class' => ''
        ), $atts));
        
                
        $x = $GLOBALS['tab_count'];
        $GLOBALS['tabs'][$x] = array(
            'title' => sprintf( $title, $GLOBALS['tab_count'] ),
            'content' =>  $content,
            'id' =>  $id,        
            'class' => $class );
        
        $GLOBALS['tab_count']++;
    }
    add_shortcode( 'ut_tab', 'ut_tab' );
}

/*
 * Video Testimonials
 */

$GLOBALS['ut_video_testimonial_total_count'] = NULL;
$GLOBALS['ut_video_testimonial_count'] = NULL; 
  
if( !function_exists('ut_video_testimonials') ) {

    function ut_video_testimonials( $atts, $content ){
    
        extract(shortcode_atts(array(
                'class' => ''
        ), $atts));
        
        global $ut_video_testimonial_total_count , $ut_video_testimonial_count; 
        
        $ut_video_testimonial_total_count = substr_count($content, '[/ut_video_testimonial]');
        $ut_video_testimonial_count = 0;
        
        $testimonials = NULL;
        
        $testimonials.= '<div class="ut-video-testimonial-wrapper grid-100 tablet-grid-100 mobile-grid-100 grid-parent ' . $class . '">';
            
            $testimonials.= do_shortcode( $content );
            
        $testimonials.= '</div>';
        
        return $testimonials;
        
    }    
    
    add_shortcode( 'ut_video_testimonials', 'ut_video_testimonials' );
    
}

if( !function_exists('ut_video_testimonial') ) {

    function ut_video_testimonial( $atts, $content ){
        
        extract(shortcode_atts(array(
                'author'        => '',
                'company'       => '',
                'box'           => 'off',
                'poster'        => get_template_directory_uri() . '/images/video-default-thumbnail.jpg',
                'width'         => '800',
                'height'        => '450',
                'style'         => 'dark',
                'effect'        => '',
                'animate_once'  => 'no',
                'class'         => ''
        ), $atts));
        
        $grid = array(  1 => '100',
                        2 => '50',
                        3 => '33'                    
                );
        
        global $ut_video_testimonial_total_count , $ut_video_testimonial_count; 
        
        /* animation effect */
        $dataeffect = $animated = NULL;
        if( !empty( $effect ) ) {

            $dataeffect = 'data-effect="' . $effect . '" data-animateonce="' . $animate_once . '"';
            $animated      = 'ut-animate-element animated';
            
        }        
        
        /* fallback if there is no global value */
        $ut_video_testimonial_total_count = empty($ut_video_testimonial_total_count) ? 3 : $ut_video_testimonial_total_count;
        
        $grid_items = ( $ut_video_testimonial_total_count >= 3 ) ? 3 : $ut_video_testimonial_total_count;
                
        $testimonial = NULL;
        
        $style = ( $box == 'on' ) ? 'ut-video-box-' . $style : '';
        
        $testimonial.= '<div ' . $dataeffect . ' class="grid-' . $grid[$grid_items] . ' tablet-grid-' . $grid[$grid_items] . ' mobile-grid-100 ' .  $animated  . '">';
            
            $testimonial.= '<div class="ut-video-testimonial ' . ( ($box == 'on') ? 'ut-video-testimonial-boxed' : '' ) . ' ' . $style . '">';
                
                if( !empty($poster) ) {
                     
                $testimonial .= '<a data-exthumbimage="' . esc_url( $poster ) . '" class="ut-load-vtestimonial ut-vc-images-lightbox" href="' . strip_tags($content) . '">';                    
                    $testimonial .= '<img alt="' . ( !empty($author) ? $author : esc_html__('Video Testimonial','ut_shortcodes') ) . '" src="' . esc_url( $poster ) . '" />';                    
                $testimonial .= '</a>';
                
                }
                    
                if( !empty($author) ) {
                    $testimonial.= '<h3>' . $author . '</h3>';
                }
                
                if( !empty($company) ) {
                    $testimonial.= '<span>' . $company . '</span>';
                }                
                
            $testimonial.= '</div>';
            
        $testimonial.= '</div>';
        
        /* global counter */
        $ut_video_testimonial_count++;
        
        /* if counter has reached the maximum of 3 per row , decrease the total counter */
        if( $ut_video_testimonial_count ==  3 && $ut_video_testimonial_total_count > 3) {
            $ut_video_testimonial_total_count = $ut_video_testimonial_total_count - $ut_video_testimonial_count;
            $ut_video_testimonial_count = 0;
        }     
        
        return $testimonial;
        
    }
    
    add_shortcode( 'ut_video_testimonial', 'ut_video_testimonial' );
    
}


/*
 * Social Media List
 */ 
 
$GLOBALS['ut_social_total_count'] = NULL;
$GLOBALS['ut_social_count'] = NULL;

if( !function_exists('ut_social_media') ) {

    function ut_social_media( $atts, $content ){
            
        extract(shortcode_atts(array(
            'class' => ''
        ), $atts));        
        
        global $ut_social_total_count, $ut_social_count;
        
        $ut_social_total_count = substr_count($content, '[/ut_social]');
        $ut_social_count = 0;
        
        $social  = '<ul class="ut-social-network ' . $class . '">';
            $social .= do_shortcode( $content );
        $social .= '</ul>';
        
        return $social;
            
    }
    
    add_shortcode( 'ut_social_media', 'ut_social_media' );

}

if( !function_exists('ut_social') ) {

    function ut_social( $atts, $content ){
        
        extract(shortcode_atts(array(
            'title'        => '',
            'url'         => '#',
            'icon'        => 'fa-facebook',
            'target'    => '_blank',
            'avatar'     => '',
            'class'        => ''            
        ), $atts));        
        
        $grid = array(  1 => '100',
                        2 => '25',
                        3 => '33',
                        4 => '25',
                        5 => '20' );
        
        global $ut_social_total_count, $ut_social_count;
        
        $prefix = NULL;
        $suffix = NULL;        
                        
        //fallback if there is no global value
        $ut_social_total_count = empty($ut_social_total_count) ? 5 : $ut_social_total_count;
                
        // special case if we only have 2 items
        if( $ut_social_total_count == 2 && $ut_social_count == 0 ) {
            $prefix = "prefix-25 tablet-prefix-25";
        }
        
        if( $ut_social_total_count == 2 && $ut_social_count == 1 ) {
            $suffix = "suffix-25 tablet-suffix-25";
        }        
        
        $grid_items = ( $ut_social_total_count >= 5 ) ? 5 : $ut_social_total_count;
                
        $profile  = '<li class="grid-' . $grid[$grid_items] . ' tablet-grid-' . $grid[$grid_items] . ' mobile-grid-100 ' . $class . ' ' . $prefix . ' ' . $suffix . '">';
            $profile .= '<a target="' . $target . '" href="' . $url . '" class="ut-social-link">';
                $profile .= '<span class="ut-social-icon"><i class="fa ' . $icon . ' fa-4x"></i></span>';
                
                if( !empty($title) ) {
                    $profile .= '<h3 class="ut-social-title">' . $title . '</h3>';
                }
                
                if( !empty($content) ) {
                    $profile .= '<span class="ut-social-info">' . do_shortcode( $content ) . '</span>';
                }
                
            $profile .= '</a>';
        $profile .= '</li>';
        
        /* global counter */
        $ut_social_count++;        
        
        /* if counter has reached the maximum of 5 per row , decrease the total counter */
        if( $ut_social_count ==  5 && $ut_social_total_count > 5) {
            $ut_social_total_count = $ut_social_total_count - $ut_social_count;
            $ut_social_count = 1;
        }
                    
        return $profile;        
        
    }
    
    add_shortcode( 'ut_social', 'ut_social' );
    
}



/*
 * Toggles
 */ 
 
if( !function_exists('ut_togglegroup') ) {
    
    $togglegroupcount = 0;
    
    function ut_togglegroup( $atts, $content ){
        
        global $togglegroupcount;
        
        extract(shortcode_atts(array(
                'width'        => '',
                'last'        => 'false',
                'class'     => ''
        ), $atts));
        
        $grid = array( 'third'  => 'ut-one-third',
                       'fourth' => 'ut-one-fourth',
                       'half'    => 'ut-one-half');
        
        $last = $last == 'true' ? 'ut-column-last' : '';
        $return = '';
        
        /* fallback */
        $gridwidth = !empty($grid[$width]) ? $grid[$width] : '';        
        
        $togglegroupcount++;
        
        if( !empty($width) || !empty($class) ) {
            $return .= '<div class="' . $gridwidth . ' ' . $class . ' ' . $last . '">';
        }
           
        $return .= '<div id="ut-accordion-parent-' . $togglegroupcount . '" class="ut-accordion"><div class="ut-accordion-group">' . do_shortcode($content) . '</div></div>';
        
        if( !empty($width) || !empty($class) ) {
            $return .= '</div>';
        }
        
        
        return $return;
    
    }
    add_shortcode( 'ut_togglegroup', 'ut_togglegroup' );
}

if( !function_exists('ut_toggle') ) {

    $togglecount = 0;

    function ut_toggle( $atts, $content = null ) {
        
        global $togglecount , $togglegroupcount;    
            
        extract(shortcode_atts(array(
             'title'     => '',
             'state'     => 'closed',
             'class'    => ''
        ), $atts));
        
        $output = '';
        
        $hstate = ($state == 'closed') ? 'collapsed' : ''; 
        $state  = ($state == 'closed') ? 'collapse' : 'collapse in'; 
        $active = ($state == 'collapse') ? '' : 'active'; 
        
        $output .= '<div class="ut-accordion-heading ' . $class . '">';
            $output .= '<a data-parent="#ut-accordion-parent-' . $togglegroupcount . '" class="accordion-toggle ' . $hstate . ' ' . $active . '" data-toggle="collapse" data-target="#accordion' .$togglecount. '">';
                $output .= $title;
            $output .= '</a>';
        $output .= '</div>';
        $output .= '<div id="accordion' .$togglecount. '" class="ut-accordion-body ' . $state . '">';
            $output .= '<div class="ut-accordion-inner entry-content clearfix">';
                $output .= do_shortcode($content);
            $output .= '</div>';
        $output .= '</div>';
        
        $togglecount++;
        
        return $output;
        
    }
    add_shortcode('ut_toggle', 'ut_toggle');
}

/*
 * Blockquotes
 */ 

if( !function_exists('ut_blockquote_left') ) { 

    function ut_blockquote_left($atts, $content = null) {
        
        extract(shortcode_atts(array(
             'class'    => ''
        ), $atts));        
        
        return '<div class="ut-blockquote-left ' . $class . '"><blockquote><p>' . do_shortcode( $content ) . '</p></blockquote></div>';
    }
    add_shortcode('ut_blockquote_left', 'ut_blockquote_left');
}



if( !function_exists('ut_blockquote_right') ) { 

    function ut_blockquote_right($atts, $content = null) {
        
        extract(shortcode_atts(array(
             'class'    => ''
        ), $atts));    
        
        return '<div class="ut-blockquote-right ' . $class . '"><blockquote><p>' . do_shortcode( $content ) . '</p></blockquote></div>';
    }
    add_shortcode('ut_blockquote_right', 'ut_blockquote_right');
}

/*
 * Dropcaps
 */ 

if( !function_exists('ut_dropcap') ) { 

    function ut_dropcap($atts, $content = null) {
        
        extract(shortcode_atts(array(
             'class'     => '',
             'style'    => 'one'
        ), $atts)); 
        
        return '<span class="ut-dropcap-' . $style . ' ' . $class . '">' . do_shortcode($content) . '</span>';
    }
    
    add_shortcode('ut_dropcap', 'ut_dropcap');
    
}

/*
 * Highlight Section
 */

if( !function_exists('ut_highlight_section') ) { 
 
    function ut_highlight_section( $atts, $content = null ) {
        
        extract(shortcode_atts(array(
             'image'            => '',
             'imagetype'        => 'portrait',
             'alt'              => '',
             'imageeffect'      => '',
             'leftboxeffect'    => '',
             'rightboxeffect'   => '',
             'animate_once'     => 'no',
             'margin_bottom'    => '',
             'class'            => ''
        ), $atts));
        
        $highlight = NULL;
        
        /* margin bottom*/
        $margin_bottom = !empty($margin_bottom) ? 'style="margin-bottom:' . $margin_bottom . 'px"' : '';
        
        /* highlight wrapper */
        $highlight .= '<div class="ut-highlight-section-wrap clearfix" ' . $margin_bottom . '>';        
        
        /* animation effect */
        $dataeffect = $animated = NULL;
        if( !empty( $leftboxeffect ) ) {

            $dataeffect = 'data-effect="' . $leftboxeffect . '" data-animateonce="' . $animate_once . '"';
            $animated   = 'ut-animate-element animated';
            
        }
        
        /* left service columns */
        $highlight .= '<div ' . $dataeffect . ' class="grid-33 tablet-grid-33 mobile-grid-100 ut-highlight-section-right ' . $animated . '">';
            
            preg_match_all( '/' . get_shortcode_regex() . '/s', $content , $left_service_boxes );
                                    
            if (is_array($left_service_boxes[2]) && !empty($left_service_boxes[2]) ) {               
                
                foreach( $left_service_boxes[2] as $key => $box) {
                    
                    if( $box == 'ut_highlight_left' && !empty( $left_service_boxes[0][$key] ) ) {                    
                        $highlight .= do_shortcode( $left_service_boxes[0][$key] );
                    }
               
                }                
            
            }
            
        $highlight .= '</div><!-- grid-33 -->';
        
        
        /* image output */
        $image_class = ( $imagetype == 'portrait' ) ? 'ut-portrait' : 'ut-landscape';
                
        $highlight .= '<div class="grid-33 tablet-grid-33 mobile-grid-100">';
            $highlight .= '<div class="ut-highlight-section-image ' . $image_class . '">';

                if( !empty($image) ) {
                    
                    /* animation effect */
                    $dataeffect = $animated = NULL;
                    if( !empty( $imageeffect ) ) {
            
                        $dataeffect = 'data-effect="' . $imageeffect . '" data-animateonce="' . $animate_once . '"';
                        $animated   = 'ut-animate-element animated';
                        
                    }
                        
                    $highlight .= '<img ' . $dataeffect . ' class="' . $animated . '" alt="' . $alt . '" src="' . $image . '">';
                
                }
        
             $highlight .= '</div>';
        $highlight .= '</div><!-- grid-33 -->';
        
        
        /* animation effect */
        $dataeffect = $animated = NULL;
        if( !empty( $rightboxeffect ) ) {

            $dataeffect = 'data-effect="' . $rightboxeffect . '" data-animateonce="' . $animate_once . '"';
            $animated   = 'ut-animate-element animated';
            
        }
        
        /* right service columns */
        $highlight .= '<div ' . $dataeffect . ' class="grid-33 tablet-grid-33 mobile-grid-100 ' . $animated . '">';
            
            preg_match_all( '/' . get_shortcode_regex() . '/s', $content , $right_service_boxes );
                                    
            if (is_array($right_service_boxes[2]) && !empty($right_service_boxes[2]) ) {               
                
                foreach( $right_service_boxes[2] as $key => $box) {
                    
                    if( $box == 'ut_highlight_right' && !empty( $right_service_boxes[0][$key] ) ) {                    
                        $highlight .= do_shortcode( $right_service_boxes[0][$key] );
                    }
               
                }                
            
            }
            
        $highlight .= '</div><!-- grid-33 -->';
        
        /* end wrap */
        $highlight .= '</div><!-- ut-highlight-section-wrap -->';  
          
        return $highlight;
        
    }
    
    add_shortcode('ut_highlight_section', 'ut_highlight_section');

}


if( !function_exists('ut_highlight_section_box') ) { 
 
    function ut_highlight_section_box( $atts, $content = null ) {
    
        extract(shortcode_atts(array(
             'title'        => '',
             'icon'         => '',
             'color'        => '',
             'class'         => ''
        ), $atts));
        
        $ut_highlight_section_box = NULL;           
        
        /* set unique ID for this rotator */
        $id = uniqid("uthsbox_");
        
        if( !empty($color) ) {
            
            $ut_highlight_section_box .= '<style type="text/css">';
                $ut_highlight_section_box .= '#' . $id . ' . ut-highlight-section-box:hover h3 { color: ' . $color . '; }';
                $ut_highlight_section_box .= '#' . $id . ' .ut-highlight-section-icon { border-color: ' . $color . '; color: ' . $color . '; }';
            $ut_highlight_section_box .= '</style>';
        
        } elseif( empty($color) ) {
        
            $accentcolor = get_option('ut_accentcolor' , '#F1C40F');
            
            $ut_highlight_section_box .= '<style type="text/css">
                #' . $id . ' . ut-highlight-section-box:hover h3 { color: ' . $accentcolor . '; }
                #' . $id . ' .ut-highlight-section-icon { border-color: ' . $accentcolor . '; color: ' . $accentcolor . '; }                
            </style>';
        
        }
        
        $ut_highlight_section_box .= '<div id="' . $id . '" class="ut-highlight-section-box">';
            
            if( !empty($icon) ) {
                $ut_highlight_section_box .= '<div class="ut-highlight-section-icon hide-on-tablet"><i class="fa ' . $icon . '"></i></div>';
            }
            
            $ut_highlight_section_box .= '<div class="ut-highlight-section-content">';
                
                if( !empty($title) ) {
                    $ut_highlight_section_box .= '<h3>' . $title . '</h3>';
                }
                
                $ut_highlight_section_box .= do_shortcode( wpautop($content) );
                
            $ut_highlight_section_box .= '</div>';
            
        $ut_highlight_section_box .= '</div>';
        
        return $ut_highlight_section_box;
        
    }
    
    add_shortcode('ut_highlight_left', 'ut_highlight_section_box');
    add_shortcode('ut_highlight_right', 'ut_highlight_section_box');    
    
}


/*
 * Video Shortcode
 */ 

if( !function_exists('ut_video_player') ) {

    function ut_video_player( $atts, $content ){
        
        extract(shortcode_atts(array(
            'url'       => '',
            'caption'   => '',
            'poster'    => '',
            'maxwidth'  => '',
            'class'     => ''
        ), $atts));
        
        if( empty($url) ) {
            return;
        }
        
        $player = NULL;
        
        /* set unique ID for this video */
        $id = uniqid("utvs_");
        
        if( !empty( $maxwidth ) ) {
            
            $player .= '<style type="text/css">
                #' . $id . ' . ut-shortcode-video-wrap { max-width: ' . $maxwidth . '% ; }
            </style>';
        
        }
        
        $player .= '<div id="' . $id . '" class="ut-shortcode-video-wrap ' . $class . '">';
        
                $player .= '<figure class="ut-video-caption">';
                
                if( !empty($poster) ) {
                    
                    $player .= '<a class="ut-load-video" data-nonce="'.wp_create_nonce('ut-video-nonce').'" data-location="inline" data-video="' . trim($url) . '">';
                        
                        $player .= '<img alt="' . ( !empty($caption) ? $caption : esc_html__('Video','ut_shortcodes') ) . '" src="' . $poster . '" />';
                        $player .= '<i class="fa fa-youtube-play fa-4x fa-border"></i>';
                    
                    $player .= '</a>';
                    
                } else {
                    
                    $player .= '<a class="ut-load-video" data-nonce="'.wp_create_nonce('ut-video-nonce').'" data-location="inline data-video="' . trim($url) . '" href="#?custom=true&amp;width=' . $width . '&amp;height=' . $height . '">';
                    
                        $player .= '<i class="fa fa-youtube-play fa-4x fa-border"></i>';
                    
                    $player .= '</a>';
                    
                }
                
                if(!empty($caption)) {
                    $player .= '<figcaption class="ut-video-caption-text">' . $caption . '</figcaption></figure>';
                }
                
                $player .= '</figure>';
                
                $player .= '<div class="ut-video-loading"><i class="fa fa-spinner fa-3x fa-spin"></i></div>';
                    
        $player .= '</div>';
        
        return $player;
        
    }
    
    add_shortcode( 'ut_united_video', 'ut_video_player' );
    
}



/*
|--------------------------------------------------------------------------
| custom box
|--------------------------------------------------------------------------
*/
if ( !function_exists( 'ut_custom_box' ) ) {
    
    function ut_custom_box( $atts, $content ) {
        
         extract(shortcode_atts(array(
            'title'             => '',
            'logo'              => '',
            'title_color'       => '',
            'text_color'        => '',
            'border_width'      => '1',
            'border_style'      => 'solid',            
            'border_color'      => '#FFF',
            'border_radius'     => '',
            'margin_top'        => '',
            'margin_right'      => '',
            'margin_bottom'     => '',
            'margin_left'       => '',
            'padding_top'       => '',
            'padding_right'     => '',
            'padding_bottom'    => '',
            'padding_left'      => '',
            'background'        => '',
            'effect'            => '',
            'animate_once'      => 'no',
            'class'             => ''                
        ), $atts));
        
        $box   = '<div class="clear"></div>';
        $style = '';
        
        /* set unique ID for this rotator */
        $id = uniqid("utcb_");
        
        /* animation effect */
        $dataeffect = $animated = NULL;
        if( !empty( $effect ) ) {

            $dataeffect = 'data-effect="' . $effect . '" data-animateonce="' . $animate_once . '"';
            $animated   = 'ut-animate-element animated';
            
        }
        
        /* box custom css */
        $style .= '<style type="text/css">';
            
            /* title color */
            if( !empty($text_color) ) {
                $style .= '#' . $id . ' p { color: ' . $text_color . '; }';
            }
            
            /* background color */
            if( !empty($background) ) {
                $style .= '#' . $id . ' { background: ' . $background . '; }';
            }
            
            /* border settings */
            if( $border_style != 'none' ) {
                
                $border_width = str_replace('px','',$border_width);
                $style .= '#' . $id . ' { border: ' . $border_width . 'px ' . $border_style . ' ' . $border_color . ' ; }'; 
                                           
            }
            
            /* border radius */
            if( !empty($border_radius) ) {
                
                $border_radius = str_replace('px','',$border_radius);
                $style .= '#' . $id . ' { border-radius: ' . $border_radius . 'px; }'; 
                
            }
            
            /* margin */
            if( !empty($margin_top) ) {
                
                $margin_top = str_replace('px','',$margin_top);                
                $style .= '#' . $id . ' { margin-top: ' . $margin_top . 'px; }';
                
            }
            
            if( !empty($margin_right) ) {
                
                $margin_right = str_replace('px','',$margin_right);
                $style .= '#' . $id . ' { margin-right: ' . $margin_right . 'px; }'; 
                
            }
            
            if( !empty($margin_bottom) ) {
                
                $margin_bottom = str_replace('px','',$margin_bottom);
                $style .= '#' . $id . ' { margin-bottom: ' . $margin_bottom . 'px; }'; 
                
            }
            
            if( !empty($margin_left) ) {
                
                $margin_left = str_replace('px','',$margin_left);
                $style .= '#' . $id . ' { margin-left: ' . $margin_left . 'px; }'; 
                
            }
            
            /* padding */
            if( !empty($padding_top) ) {
                
                $padding_top = str_replace('px','',$padding_top);
                $style .= '#' . $id . ' { padding-top: ' . $padding_top . 'px; }'; 
                
            }
            
            if( !empty($padding_right) ) {
                
                $padding_right = str_replace('px','',$padding_right);
                $style .= '#' . $id . ' { padding-right: ' . $padding_right . 'px; }'; 
                
            }
            
            if( !empty($padding_bottom) ) {
                
                $padding_bottom = str_replace('px','',$padding_bottom);
                $style .= '#' . $id . ' { padding-bottom: ' . $padding_bottom . 'px; }'; 
                
            }
            
            if( !empty($padding_left) ) {
                
                $padding_left = str_replace('px','',$padding_left);
                $style .= '#' . $id . ' { padding-left: ' . $padding_left . 'px; }'; 
                
            }
            
            
        $style .= '</style>';
        
        /* start box */
        $box .= '<div id="' . $id . '" class="ut-custom-box ' . $class . ' clearfix ' . $animated . '" ' . $dataeffect . '>';
            
            /* box image */
            if( !empty($logo) ) {
                
                $image_title = !empty($title) ? $title : 'Custom Image';
                
                $box .= '<div class="ut-custom-box-icon">';
                    
                    $box .= '<img alt="' . $image_title . '" src="' . $logo . '" />';
                    
                $box .= '</div>';
            
            }
            
            /* box content */
            $box .= '<div class="ut-custom-box-content">';
                
                /* box title */
                if( !empty($title) ) {
                    
                    /* title color */
                    if( !empty($title_color) ) {
                        $title_color = 'style="color: ' . $title_color . ' !important;"';
                    }
                    
                    $box .= '<h3 ' . $title_color . '>' . $title . '</h3>';
                    
                }
                
                $box .= '<p>' . do_shortcode($content) . '</p>';
            
            $box .='</div>';
        
        $box .= '</div>';
        
        return $style . $box;        
                
    }
    
    add_shortcode( 'ut_custom_box', 'ut_custom_box' );

}

/*
* Gets the excerpt of a specific post ID or object
* @param - $post - object/int - the ID or object of the post to get the excerpt of
* @param - $length - int - the length of the excerpt in words
* @param - $tags - string - the allowed HTML tags. These will not be stripped out
*/

if ( !function_exists( 'ut_get_excerpt_by_id' ) ) {
    
    function ut_get_excerpt_by_id($post, $length = 10, $tags = '<a><em><strong>') {
        
        if( $post ) {
            
            $post = get_post($post);
            
        } elseif(!is_object($post)) {
            
            return false;
            
        }
         
        if( has_excerpt( $post->ID ) ) {
            
            $the_excerpt = $post->post_excerpt;
            $the_excerpt = apply_filters('the_content', $the_excerpt);
            $the_excerpt .= '<p><a class="more-link" href="' . get_permalink($post->ID) . '"><span class="more-link">' . esc_html__('Read More' , 'ut_shortcodes') . '<i class="fa fa-chevron-circle-right"></i></span></a></p>';
            return $the_excerpt;
            
        } else {
            
            $the_excerpt = $post->post_content;
            
        }
         
        $the_excerpt = strip_shortcodes(strip_tags($the_excerpt), $tags);
        $the_excerpt = preg_split('/\s+/', $the_excerpt, $length + 1);
        $excerpt_waste = array_pop($the_excerpt);
        $the_excerpt = implode(" ",$the_excerpt);
        
        if( isset($the_excerpt) && !empty($the_excerpt) ) {
            
            $the_excerpt  = '<p>' . $the_excerpt . '</p>';
            $the_excerpt .= '<p><a class="more-link" href="' . get_permalink($post->ID) . '"><span class="more-link">' . esc_html__('Read More' , 'ut_shortcodes') . '<i class="fa fa-chevron-circle-right"></i></span></a></p>';
            
        } else {
            
            $the_excerpt = '<p><a class="more-link" href="' . get_permalink($post->ID) . '"><span class="more-link">' . esc_html__('Read More' , 'ut_shortcodes') . '<i class="fa fa-chevron-circle-right"></i></span></a></p>';
        }

        return $the_excerpt;
        
    }
    
}

/*
 * List Icons ( Helper Shortcode )
 */ 
if( !function_exists('ut_list_icons') ) { 
 
    function ut_list_icons($content = null) {
        
        $output = '<div class="ut-icon-list">';
        $counter = 1;
            
        foreach( ut_recognized_icons() as $icon ) {
            
            $last = '';
            $clear = '';
            
            if( $counter == 5 ) { $last = 'ut-column-last'; $clear = '<div class="clear"></div>'; } 

            $output .= '<div class="ut-one-fifth ' . $last . '">
                            <p>
                                <i class="fa ' . $icon . ' icon-list-item" style="margin-right:5px;"></i> ' . $icon . '
                            </p>
                        </div>' . $clear;
            
            if( $counter == 5 ) { $counter = 1; } else { $counter++; }    
                        
                  
        }
        
        $output .= '</div>';    
            
        return $output;
        
    }
    add_shortcode('ut_list_icons', 'ut_list_icons');

}




/* remove default gallery shortcode */
remove_shortcode('gallery');

if( !function_exists('ut_gallery_shortcode') ) :

    function ut_gallery_shortcode( $attr ) {
        
        $post = get_post();
    
        static $instance = 0;
        $instance++;
    
        if ( ! empty( $attr['ids'] ) ) {
            // 'ids' is explicitly ordered, unless you specify otherwise.
            if ( empty( $attr['orderby'] ) )
                $attr['orderby'] = 'post__in';
            $attr['include'] = $attr['ids'];
        }
    
        /**
         * Filter the default gallery shortcode output.
         *
         * If the filtered output isn't empty, it will be used instead of generating
         * the default gallery template.
         *
         * @since 2.5.0
         *
         * @see gallery_shortcode()
         *
         * @param string $output The gallery output. Default empty.
         * @param array  $attr   Attributes of the gallery shortcode.
         */
        $output = apply_filters( 'post_gallery', '', $attr );
        if ( $output != '' )
            return $output;
    
        // We're trusting author input, so let's at least make sure it looks like a valid orderby statement
        if ( isset( $attr['orderby'] ) ) {
            $attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] );
            if ( !$attr['orderby'] )
                unset( $attr['orderby'] );
        }
    
        $html5 = current_theme_supports( 'html5', 'gallery' );
        extract(shortcode_atts(array(
            'order'                 => 'ASC',
            'orderby'               => 'menu_order ID',
            'id'                    => $post ? $post->ID : 0,
            'itemtag'               => $html5 ? 'figure'     : 'dl',
            'icontag'               => $html5 ? 'div'        : 'dt',
            'captiontag'            => $html5 ? 'figcaption' : 'dd',
            'columns'               => 3,
            'size'                  => 'thumbnail',
            'include'               => '',
            'exclude'               => '',
            'link'                  => 'file',
            'ut_gallery_lightbox' 	=> 'on',
            'ut_image_border'       => 'off',
            'ut_image_border_radius'=> '0px'            
        ), $attr, 'gallery'));

        $id = intval($id);
        if ( 'RAND' == $order )
            $orderby = 'none';
    
        if ( !empty($include) ) {

            $_attachments = get_posts( array('include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) );
    
            $attachments = array();
            foreach ( $_attachments as $key => $val ) {

                $attachments[$val->ID] = $_attachments[$key];


            }

        } elseif ( !empty($exclude) ) {

            $attachments = get_children( array('post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) );

        } else {

            $attachments = get_children( array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) );

        }
    
        if ( empty($attachments) )
            return '';
    
        if ( is_feed() ) {
            $output = "\n";
            foreach ( $attachments as $att_id => $attachment )
                $output .= wp_get_attachment_link($att_id, $size, true) . "\n";
            return $output;
        }
    
        $itemtag = tag_escape($itemtag);
        $captiontag = tag_escape($captiontag);
        $icontag = tag_escape($icontag);
        $valid_tags = wp_kses_allowed_html( 'post' );
        if ( ! isset( $valid_tags[ $itemtag ] ) )
            $itemtag = 'dl';
        if ( ! isset( $valid_tags[ $captiontag ] ) )
            $captiontag = 'dd';
        if ( ! isset( $valid_tags[ $icontag ] ) )
            $icontag = 'dt';
    
        $columns = intval($columns);
        $itemwidth = $columns > 0 ? floor(100/$columns) : 100;
        $float = is_rtl() ? 'right' : 'left';
    
        $selector = "gallery-{$instance}";
    
        $gallery_style = $gallery_div = '';
    
        /**
         * Filter whether to print default gallery styles.
         *
         * @since 3.1.0
         *
         * @param bool $print Whether to print default gallery styles.
         *                    Defaults to false if the theme supports HTML5 galleries.
         *                    Otherwise, defaults to true.
         */
        if ( apply_filters( 'use_default_gallery_style', ! $html5 ) ) {
            $gallery_style = "
            <style type='text/css'>
                #{$selector} {
                    margin: auto;
                }
                #{$selector} .gallery-item {
                    float: {$float};
                    margin-top: 10px;
                    text-align: center;
                    width: {$itemwidth}%;
                }
                #{$selector} img {
                    border: 2px solid #cfcfcf;
                }
                #{$selector} .gallery-caption {
                    margin-left: 0;
                }
                
                ".( $ut_image_border == 'on' ? "#{$selector} .gallery-item img { -webkit-border-radius:".$ut_image_border_radius."; -moz-border-radius:".$ut_image_border_radius."; border-radius:".$ut_image_border_radius."; }" : '' )."
                
                /* see gallery_shortcode() in wp-includes/media.php */
            </style>\n\t\t";
        }
    
        $size_class = sanitize_html_class( $size );

	    $lightbox_class = 'off ut-deactivated-link';

	    // no attachment pages
	    $link = $link == 'post' ? 'file' : $link;

	    if( $ut_gallery_lightbox == "on" && (! empty( $link ) && 'file' === $link) ) {
		    $lightbox_class = 'on';
        }

        $gallery_div = "<div id='$selector' class='ut-wp-gallery-lightbox-{$lightbox_class} gallery galleryid-{$id} gallery-columns-{$columns} gallery-size-{$size_class}'>";
    
        /**
         * Filter the default gallery shortcode CSS styles.
         *
         * @since 2.5.0
         *
         * @param string $gallery_style Default gallery shortcode CSS styles.
         * @param string $gallery_div   Opening HTML div container for the gallery shortcode output.
         */
        $output = apply_filters( 'gallery_style', $gallery_style . $gallery_div );
    
        $i = 0;
        foreach ( $attachments as $id => $attachment ) {

	        $mini = wp_get_attachment_image_src( $id , 'ut-mini' );
	        $mini = !empty( $mini[0] ) ? 'data-exthumbimage="' . $mini[0] . '"' : '';

            if ( ! empty( $link ) && 'file' === $link )
                $image_output = wp_get_attachment_link( $id, $size, false, false );
            elseif ( ! empty( $link ) && 'none' === $link )
                $image_output = wp_get_attachment_image( $id, $size, false );
            else
                $image_output = wp_get_attachment_link( $id, $size, true, false );
    
            $image_meta  = wp_get_attachment_metadata( $id );

            // inject data
            $image_output = str_replace('<a href', '<a ' . $mini . ' href', $image_output );

    
            $orientation = '';
            if ( isset( $image_meta['height'], $image_meta['width'] ) ) {
                $orientation = ($image_meta['height'] > $image_meta['width']) ? 'portrait' : 'landscape';
            }

            $lightbox_support = $ut_gallery_lightbox == "on" && (! empty( $attr['link'] ) && 'file' === $attr['link']) ? 'gallery-item-with-lightbox' : '';

            $output .= "<{$itemtag} class='gallery-item $lightbox_support'>";
            $output .= "
                <{$icontag} class='gallery-icon {$orientation}'>
                    $image_output
                </{$icontag}>";
            if ( $captiontag && trim($attachment->post_excerpt) ) {
                $output .= "
                    <{$captiontag} class='wp-caption-text gallery-caption'>
                    " . wptexturize($attachment->post_excerpt) . "
                    </{$captiontag}>";
            }
            $output .= "</{$itemtag}>";
            if ( ! $html5 && $columns > 0 && ++$i % $columns == 0 ) {
                $output .= '<br style="clear: both" />';
            }
        }
    
        if ( ! $html5 && $columns > 0 && $i % $columns !== 0 ) {
            $output .= "
                <br style='clear: both' />";
        }

        $output .= "</div>\n";
    
        return $output;
    }
    
    add_shortcode('gallery', 'ut_gallery_shortcode');
    
endif;


if(!class_exists('UT_Section_Video_player' ) ) :

    class UT_Section_Video_player {
        
        static $add_script;
        static $youtube;
        static $vimeo;
        static $selfhosted;
    
        static function init() {
            
            add_shortcode('ut_section_video', array(__CLASS__, 'handle_shortcode'));
            
            add_action('init', array(__CLASS__, 'register_script'));
            add_action('wp_footer', array(__CLASS__, 'print_script'));
            
        }
        
        static function vimeo_id( $url ) {
                                
            if( preg_match("/(https?:\/\/)?(www\.)?(player\.)?vimeo.com\/([a-z]*\/)*([0-9]{6,11})[?]?\.*/", trim($url) , $matches) ){
                                                    
                if( !empty($matches[5]) ) {
                    
                    return $matches[5];
                                  
                } else {
                    
                    return false;
                    
                }
                        
            } else {
                
                return false;
                
            }
        
        }

        static function vimeo_iframe( $config ) {

            $id = str_replace( '#', '', $config['containment'] );

            ob_start(); ?>

            <div id="vimelar-container-<?php echo esc_attr( $id ); ?>" class="vimelar-container ut-vimeo-loaded" style="overflow: hidden; position: absolute; z-index: 1; width: 100%; height: 100%">
                <iframe id="vimelar-player-<?php echo esc_attr( $id ); ?>" src="//player.vimeo.com/video/<?php echo $config['videoId'] ?>?<?php echo http_build_query( $config['parameters'] ) ?>" playsinline allowfullscreen allow="autoplay; fullscreen" data-ready="true" frameborder="0"></iframe>
            </div>

            <?php

            return ob_get_clean();

        }

        
        static function handle_shortcode($atts) {
                    
            self::$add_script = true;
            
            extract(shortcode_atts(array(
                   'id'         => '',
                   'section'    => '',
                   'source'     => 'youtube',
                   'video'      => '',
                   'video_vimeo'=> '',
                   'volume'     => '5',
                   'mutebutton' => 'off',
                   'sound'      => 'off',
                   'loop'       => 'on',
                   'startAt'    => '0',
                   'stopAt'     => '0',
                   'mp4'        => '',
                   'ogg'        => '',
                   'webm'       => '',
                   'preload'    => '',
                   'dnt'        => false
            ), $atts));
            
            /* id or section is empty, nothing to do here */
	        if( empty( $id ) || empty( $section ) ) {
                return;
            }
            
            $script = NULL;
            $player = NULL;
            
            if( $source == 'youtube' && !empty( $video ) ) {
                
                self::$youtube = true;
                
                /* get player options */
                $sound_attr   = ($sound == 'off') ? 'mute : true' : 'mute : false';            
                $volume_attr  = (empty($volume)) ? 'vol : 0' : 'vol: ' . $volume;            
                $loop_attr    = ($loop == 'on') ? 'loop : true' : 'loop : false';

                $player .= '<a id="ut-background-video-' . $id . '" data-id="' . $id . '" class="ut-video-section-player" data-source="youtube" data-property="{ videoURL : \'' . $video . '\' , containment : \''.$section.'\' , showControls: false, ratio: \'auto\', quality: \'hd720\', autoPlay : true, '.$loop_attr.', '.$sound_attr.', '.$volume_attr.', startAt : ' . $startAt . ', stopAt : ' . $stopAt . ', opacity : 1}"></a>';
                
                $sound = ( $sound == "on" ) ? 'ut-mute' : 'ut-unmute';
                
                if( $mutebutton == 'on' ) {
                    $player .= '<a id="ut-video-control-' . $id . '" class="ut-video-control '.$sound.' youtube" data-source="youtube" data-for="ut-background-video-' . $id . '" href="#"></a>';
                }
                
            }
            
            if( $source == 'vimeo' && !empty( $video_vimeo ) ) {

                self::$vimeo = true;
                
                $player_volume = !$volume || $sound == 'off' ? 0 : $volume;
                $player_loop = $loop == 'on' ? "1" : "0";

                // player settings json
                $player_settings = array(
                    'videoId'       => self::vimeo_id( $video_vimeo ),
                    'containment'   => $section,
                    'parameters'    => array(
                        'autopause' => 0,
                        'autoplay'  => 0,
                        'badge'     => 1,
                        'byline'    => 1,
                        'color'     => "000",
                        'loop'      => $player_loop,
                        'player_id' => 'demo',
                        'portrait'  => 1,
                        'title'     => 1,
                        'muted'     => 1,
                        'dnt'       => $dnt,
                        'controls'  => false,
                        //'background'=> 1
                    )

                );

	            $script = '';

	            $player = self::vimeo_iframe( $player_settings );

	            $player_settings = htmlentities( json_encode( $player_settings ), ENT_QUOTES, 'utf-8' );
                $player .= '<div id="ut-background-video-' . $id . '" data-id="' . str_replace( '#', '', $section ) . '" class="ut-video-section-player" data-source="vimeo" data-volume="' . ( $player_volume / 100 ) . '" data-max-volume="' . ( $volume / 100 ) . '" data-settings="' . $player_settings . '"></div>';
                
                if( $mutebutton == 'on' ) {
                    
                    $mute = ( $mutebutton == "on" && $player_volume != 0 ) ? 'ut-mute' : 'ut-unmute';
                    
                    $player .= '<a id="ut-video-hero-control" class="ut-video-control '.$sound.' ' . $mute . ' vimeo" data-source="vimeo" data-for="ut-video-hero" href="#"></a>';
                    
                }                
            
            }
            
            if( $source == 'selfhosted') {
                
                if( !empty($mp4) || !empty($ogg) || !empty($webm) ) {
                    
                    self::$selfhosted = true;
                        
                    /* build config */
                    $sound   = ($sound == 'off') ? 'muted' : '';            
                    $volume  = (empty($volume)) ? '5' : $volume;            
                    $loop    = ($loop == 'on') ? 'loop' : '';
                    $preload = ($preload == 'on') ? 'preload="auto"' : '';
                    
                    /* build player */
                    $player .= '<div class="ut-simple-video-container"><video id="ut-selfvideo-player-' . $id . '" class="ut-selfvideo-player" disablePictureInPicture autoplay '.$loop.' '.$sound.' '.$preload.' volume="'.$volume.'" autobuffer controls>';
                    
                    if( !empty( $mp4 ) ) :
                                
                        $player .= '<source src="' . $mp4 . '" type="video/mp4"> ';
                        
                    endif;
                    
                    if( !empty( $webm ) ) :
                        
                        $player .= '<source src="' . $webm . '" type="video/webm"> ';
                        
                    endif;    
                    
                    if( !empty( $ogg ) ) :
                        
                        $player .= ' <source src="' . $ogg . '" type="video/ogg ogv">';
                                        
                    endif;
                    
                    $player .= '</video></div><div class="ut-video-spacer"></div>';
                    
                    $sound = ( $sound == "on" ) ? 'ut-mute' : 'ut-unmute';
                    
                    if($mutebutton == 'on') {
                        $player .= '<a id="ut-video-control-' . $id . '" class="ut-video-control '.$sound.'" data-for="ut-selfvideo-player-' . $id . '" href="#"></a>';
                    }
                
                
                }
                
            
            }        
                    
            return $script . $player;
            
            
        }
    
        static function register_script() {
            
            $min = NULL;
                
            if( !WP_DEBUG ){
                $min = '.min';
            }

            wp_register_script(
                'ut-video-lib',
                get_template_directory_uri() . '/js/ut-videoplayer-lib' . $min . '.js',
                array('jquery'),
                '1.0',
                true
            );
            
        }
    
        static function print_script() {
            
            if ( ! self::$add_script ) {
                return;
            }

            if ( self::$selfhosted ) {
                wp_enqueue_script('ut-video-lib');
            }
            
        }
        
    }

    UT_Section_Video_player::init(); 

endif;


/*
 * Helper Shortcode : Displays a sidebar directly inside regular content
 */


if( !function_exists('ut_searchform') ) {

    function ut_searchform( $atts, $content = null ) {

        extract( shortcode_atts( array(
            'sidebar' => '',
        ), $atts ) );

        ob_start(); ?>

        <style>

            #ut-inline-search-area .search-form {
                position: relative;
                height: 70px;
            }

            #ut-inline-search-area .search-field {
                box-sizing: border-box;
                display: block;
                position: absolute;
                width: 100%;
                padding: 20px 220px 20px 20px;
                background: #191E23;
                color: #FAFAFA;
                border-color: #32373C;
                font-size: 1.2em;
                margin: 0;
                height: 70px;
            }

            #ut-inline-search-area .search-submit {
                display: block;
                position:absolute;
                top: 0;
                right: 0;
                width: 200px;
                border-radius: 0;
                margin: 0;
                height: 70px;
                background: rgba(5, 64, 242, 1);
            }

            #ut-inline-search-area .search-submit:hover {
                background: #FFF;
                color: #131416;
            }

        </style>

        <div id="ut-inline-search-area">
            <form role="search" method="get" class="search-form" action="<?php echo esc_url( home_url( '/' ) ); ?>">
                <input type="search" class="search-field" placeholder="<?php echo esc_attr_x( 'Search the Knowledge Base', 'placeholder', 'ut_shortcodes' ); ?>" value="<?php echo esc_attr( get_search_query() ); ?>" name="s" title="<?php echo esc_html_x( 'Search for:', 'label', 'ut_shortcodes' ); ?>">
                <input type="submit" class="search-submit" value="<?php echo esc_attr_x( 'Search', 'submit button', 'ut_shortcodes' ); ?>">
            </form>
        </div>

        <?php

        return ob_get_clean();

    }

    add_shortcode('ut_searchform', 'ut_searchform');

}


function _ut_update_image_post() {

	if( empty( $_REQUEST['post_ID'] ) ) {

		wp_die(esc_html__('Busted!', 'unitedthemes' ) );

	} else {

		$post_update = array(
			'ID' => (int) $_REQUEST['post_ID']
		);

	}

	if ( !current_user_can( 'edit_page', (int) $_REQUEST['post_ID'] ) ) {

		wp_die(esc_html__('Busted!', 'unitedthemes' ) );

	}

	if( get_post_type( (int) $_REQUEST['post_ID'] ) !== 'attachment' ) {

		wp_die(esc_html__('Busted!', 'unitedthemes' ) );

    }

	if( !empty( $_REQUEST['title'] ) ) {

		$post_update['post_title'] = sanitize_text_field( $_REQUEST['title'] );

	}

	if( !empty( $_REQUEST['excerpt'] ) ) {

		$post_update['post_excerpt'] = sanitize_text_field( $_REQUEST['excerpt'] );

	}

	wp_update_post( $post_update );

	wp_die();

}

// add_action( 'wp_ajax_update_image_meta', '_ut_update_image_post' );