<?php

/**
 * Error messages.
 *
 * @since 1.2.0
 * @return mixed
 */
function pp_set_error( $key )
{
	$errors = array(
		'fetch_error'      	=> esc_html__( 'Unable to fetch template data. Please click on the "Reload" button.', 'bb-powerpack' ),
		'connection_lost'	=> esc_html__( 'Error donwloading template data. Please check your internet connection and click on the "Reload" button.', 'bb-powerpack' ),
	);
	if ( isset( $errors[$key] ) && ! isset( BB_PowerPack::$errors[$key] ) ) {
		BB_PowerPack::$errors[$key] = $errors[$key];
	}
}

/**
 * Checks to see if the site has SSL enabled or not.
 *
 * @since 1.2.1
 * @return bool
 */
function pp_is_ssl()
{
	if ( is_ssl() ) {
		return true;
	}
	else if ( 0 === stripos( get_option( 'siteurl' ), 'https://' ) ) {
		return true;
	}
	else if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' == $_SERVER['HTTP_X_FORWARDED_PROTO'] ) {
		return true;
	}

	return false;
}

/**
 * Returns an array of paths for the upload directory
 * of the current site.
 *
 * @since 1.1.7
 * @return array
 */
function pp_get_upload_dir()
{
	$wp_info = wp_upload_dir();

	// Get main upload directory for every sub-sites.
    if ( is_multisite() ) {
        switch_to_blog(1);
        $wp_info = wp_upload_dir();
        restore_current_blog();
    }

	$dir_name = basename( BB_POWERPACK_DIR );

	// SSL workaround.
	if ( pp_is_ssl() ) {
		$wp_info['baseurl'] = str_ireplace( 'http://', 'https://', $wp_info['baseurl'] );
	}

	// Build the paths.
	$dir_info = array(
		'path'	 => $wp_info['basedir'] . '/' . $dir_name . '/',
		'url'	 => $wp_info['baseurl'] . '/' . $dir_name . '/'
	);

	// Create .htaccess file for security.
	$htaccess = '<FilesMatch "\.(php|php\.)$">';
	$htaccess .= "\n\r";
	$htaccess .= 'Order Allow,Deny';
	$htaccess .= "\n\r";
	$htaccess .= 'Deny from all';
	$htaccess .= "\n\r";
	$htaccess .= '</FilesMatch>';

	// Create the upload dir if it doesn't exist.
	if ( function_exists( 'fl_builder_filesystem' ) ) {
		if ( ! fl_builder_filesystem()->file_exists( $dir_info['path'] ) ) {

			// Create the directory.
			fl_builder_filesystem()->mkdir( $dir_info['path'] );

			// Add an index file for security.
			fl_builder_filesystem()->file_put_contents( $dir_info['path'] . 'index.html', '' );

			// Add .htaccess file.
			fl_builder_filesystem()->file_put_contents( $dir_info['path'] . '.htaccess', $htaccess );
		}
	} else {
		if ( ! file_exists( $dir_info['path'] ) ) {

			// Create the directory.
			mkdir( $dir_info['path'] );

			// Add an index file for security.
			file_put_contents( $dir_info['path'] . 'index.html', '' );

			// Add .htaccess file.
			file_put_contents( $dir_info['path'] . '.htaccess', $htaccess );
		}
	}

	return $dir_info;
}

/**
 * Row templates categories
 */
function pp_row_templates_categories()
{
    $cats = array(
        'pp-contact-blocks'     => __('Contact Blocks', 'bb-powerpack'),
        'pp-contact-forms'      => __('Contact Forms', 'bb-powerpack'),
        'pp-call-to-action'     => __('Call To Action', 'bb-powerpack'),
        'pp-hero'               => __('Hero', 'bb-powerpack'),
        'pp-heading'            => __('Heading', 'bb-powerpack'),
        'pp-subscribe-forms'    => __('Subscribe Forms', 'bb-powerpack'),
        'pp-content'            => __('Content', 'bb-powerpack'),
        'pp-blog-posts'         => __('Blog Posts', 'bb-powerpack'),
        'pp-lead-generation'    => __('Lead Generation', 'bb-powerpack'),
        'pp-logos'              => __('Logos', 'bb-powerpack'),
        'pp-faq'              	=> __('FAQ', 'bb-powerpack'),
        'pp-team'               => __('Team', 'bb-powerpack'),
        'pp-testimonials'       => __('Testimonials', 'bb-powerpack'),
        'pp-features'           => __('Features', 'bb-powerpack'),
        'pp-services'           => __('Services', 'bb-powerpack'),
        'pp-header'           	=> __('Header', 'bb-powerpack'),
        'pp-footer'           	=> __('Footer', 'bb-powerpack'),
    );

	if ( is_array( $cats ) ) {
    	ksort($cats);
	}

    return $cats;
}

/**
 * Templates categories
 */
function pp_templates_categories( $type )
{
	$templates = BB_PowerPack_Templates_Lib::get_templates_data( $type );
	$data = array();

	if ( is_array( $templates ) ) {
		foreach ( $templates as $cat => $info ) {
			$data[$cat] = array(
				'title'		=> $info['name'],
				'type'		=> $info['type'],
			);
			if ( isset( $info['count'] ) ) {
				$data[$cat]['count'] = $info['count'];
			}
		}

    	$data = array_reverse($data);
	}

    return $data;
}

/**
 * Templates filters
 */
function pp_template_filters()
{
	$filters = array(
		'all'				=> __( 'All', 'bb-powerpack' ),
		'home'				=> __( 'Home', 'bb-powerpack' ),
		'about'				=> __( 'About', 'bb-powerpack' ),
		'contact'			=> __( 'Contact', 'bb-powerpack' ),
		'landing'			=> __( 'Landing', 'bb-powerpack' ),
		'sales'				=> __( 'Sales', 'bb-powerpack' ),
		'coming-soon'		=> __( 'Coming Soon', 'bb-powerpack' ),
		'login'				=> __( 'Login', 'bb-powerpack' ),
		'under-construction' => __( 'Under Construction', 'bb-powerpack' ),
	);

	return $filters;
}

/**
 * Templates source URL
 */
function pp_templates_src( $type = 'page', $category = '' )
{
	if ( ! is_admin() ) {
		return;
	}

	$src = array();
	$url = 'https://ppbeaver.s3.amazonaws.com/data/';

	if ( $type == 'row' ) {
		$mode 	= 'color';
		$url 	= $url . $mode . '/';
	}

	foreach ( pp_templates_categories( $type ) as $slug => $title ) {
		$src[$slug] = $url . $slug . '.dat';
	}

	if ( '' != $category && isset( $src[$category] ) ) {
		return $src[$category];
	}

	return $src;
}

/**
 * Templates demo source URL
 */
function pp_templates_preview_src( $type = 'page', $category = '' )
{
    $url = 'https://wpbeaveraddons.com/page-templates/';

	$templates = BB_PowerPack_Templates_Lib::get_templates_data( $type );
	$data = array();

	if ( is_array( $templates ) ) {

		foreach ( $templates as $cat => $info ) {
			$data[$cat] = $info['slug'];
		}

	}

    if ( '' == $category ) {
        return $data;
    }

    if ( isset( $data[$category] ) ) {
        return $data[$category];
    }

    return $url;
}

function pp_get_template_screenshot_url( $type, $category, $mode = '' )
{
	$url = 'https://ppbeaver.s3.amazonaws.com/assets/400x400/';

	return $url . $category . '.jpg';
}

/**
 * Modules
 */
function pp_modules()
{
    // $categories = FLBuilderModel::get_categorized_modules( true );
    // $modules    = array();
	//
    // foreach ( $categories[BB_POWERPACK_CAT] as $title => $module ) {
    //     $slug = is_object( $module ) ? $module->slug : $module['slug'];
    //     $modules[$slug] = $title;
    // }
	foreach(FLBuilderModel::$modules as $module) {
		if ( $module->category == BB_POWERPACK_CAT ) {
			$slug = is_object( $module ) ? $module->slug : $module['slug'];
			$modules[$slug] = $module->name;
		}
	}

    return $modules;
}

/**
 * Row and Column Extensions
 */
function pp_extensions()
{
	$extensions = array(
		'row'       => array(
			'separators'    	=> array(
				'label'				=> __('Separators', 'bb-powerpack'),
				'description'		=> __('Row separators can be added to the top, bottom or both the ends of a row.', 'bb-powerpack'),
			),
			'overlay'       	=> array(
				'label'				=> __('Overlay Style', 'bb-powerpack'),
				'description'		=> __('Choose overlay pattern among Half Overlay Left or Right, Vertical Angled Left or Right.', 'bb-powerpack'),
			),
			'expandable'		=> array(
				'label'				=> __('Expandable', 'bb-powerpack'),
				'description'		=> __('This feature lets you toggle the entire row on just a single click.', 'bb-powerpack'),
			),
			'downarrow'     	=> array(
				'label'				=> __('Down Arrow', 'bb-powerpack'),
				'description'		=> __('This feature will add an arrow icon button at the bottom of a row which let users jump to the next row by clicking on it.', 'bb-powerpack'),
			),
			'background_effect'	=> array(
				'label'				=> __('Background Effects', 'bb-powerpack'),
				'description'		=> __('This feature includes 13 types of amazing animated background for row. These animations consist of an extensive list of styling options.', 'bb-powerpack'),
			),
		),
		'col'       => array(
			'separators'    => array(
				'label'			=> __('Separators', 'bb-powerpack'),
				'description'	=> __('Just like row separators, this feature adds various shapes for column.', 'bb-powerpack'),
			),
		)
	);

    return $extensions;
}

/**
 * Hex to Rgba
 */
function pp_hex2rgba( $hex, $opacity = 1 )
{
	if ( false !== strpos( $hex, 'rgb' ) ) {
		return $hex;
	}
	
	$hex = str_replace( '#', '', $hex );

	if ( strlen($hex) == 3 ) {
		$r = hexdec(substr($hex,0,1).substr($hex,0,1));
		$g = hexdec(substr($hex,1,1).substr($hex,1,1));
		$b = hexdec(substr($hex,2,1).substr($hex,2,1));
	} else {
		$r = hexdec(substr($hex,0,2));
		$g = hexdec(substr($hex,2,2));
		$b = hexdec(substr($hex,4,2));
	}
	$opacity = ( $opacity > 1 ) ? ( $opacity / 100 ) : $opacity;
	$rgba = array($r, $g, $b, $opacity);

	return 'rgba(' . implode(', ', $rgba) . ')';
}

/**
 * Get color value hex or rgba
 */
function pp_get_color_value( $color )
{
    if ( $color == '' || ! $color ) {
        return;
    }
    if ( false === strpos( $color, 'rgb' ) ) {
        return '#' . $color;
    } else {
        return $color;
    }
}

/**
 * Returns long day format.
 *
 * @since 1.2.2
 * @param string $day
 * @return mixed
 */
function pp_long_day_format( $day = '' )
{
	$days = array(
		'Sunday'        => __('Sunday', 'bb-powerpack'),
		'Monday'        => __('Monday', 'bb-powerpack'),
		'Tuesday'       => __('Tuesday', 'bb-powerpack'),
		'Wednesday'     => __('Wednesday', 'bb-powerpack'),
		'Thursday'      => __('Thursday', 'bb-powerpack'),
		'Friday'        => __('Friday', 'bb-powerpack'),
		'Saturday'      => __('Saturday', 'bb-powerpack'),
	);

	if ( isset( $days[$day] ) ) {
		return $days[$day];
	}
	else {
		return $days;
	}
}

/**
 * Returns short day format.
 *
 * @since 1.2.2
 * @param string $day
 * @return string
 */
function pp_short_day_format( $day )
{
	$days = array(
		'Sunday'        => __('Sun', 'bb-powerpack'),
		'Monday'        => __('Mon', 'bb-powerpack'),
		'Tuesday'       => __('Tue', 'bb-powerpack'),
		'Wednesday'     => __('Wed', 'bb-powerpack'),
		'Thursday'      => __('Thu', 'bb-powerpack'),
		'Friday'        => __('Fri', 'bb-powerpack'),
		'Saturday'      => __('Sat', 'bb-powerpack'),
	);

	if ( isset( $days[$day] ) ) {
		return $days[$day];
	}
}

function pp_get_date_formats() {
	return array(
		''			=> __( 'Default', 'bb-powerpack' ),
		'F j, Y'	=> current_time( 'F j, y' ),
		'Y-m-d'		=> current_time( 'Y-m-d' ),
		'm/d/Y'		=> current_time( 'm/d/Y' ),
		'd/m/Y'		=> current_time( 'd/m/Y' ),
	);
}

function pp_is_tribe_events_post( $post_id ) {
	return 'tribe_events' === get_post_type( $post_id );
}

/**
 * Returns user agent.
 *
 * @since 1.2.4
 * @return string
 */
function pp_get_user_agent()
{
	$user_agent = $_SERVER['HTTP_USER_AGENT'];

	if (stripos( $user_agent, 'Chrome') !== false)
	{
	    return 'chrome';
	}
	elseif (stripos( $user_agent, 'Safari') !== false)
	{
	   return 'safari';
	}
	elseif (stripos( $user_agent, 'Firefox') !== false)
	{
	   return 'firefox';
	}
	elseif (stripos( $user_agent, 'MSIE') !== false)
	{
	   return 'ie';
	}
	elseif (stripos( $user_agent, 'Trident/7.0; rv:11.0' ) !== false)
	{
	   return 'ie';
	}

	return;
}

function pp_get_client_ip() {
	$keys = array(
		'HTTP_CLIENT_IP',
		'HTTP_X_FORWARDED_FOR',
		'HTTP_X_FORWARDED',
		'HTTP_X_CLUSTER_CLIENT_IP',
		'HTTP_FORWARDED_FOR',
		'HTTP_FORWARDED',
		'REMOTE_ADDR',
	);

	foreach ( $keys as $key ) {
		if ( isset( $_SERVER[ $key ] ) && filter_var( $_SERVER[ $key ], FILTER_VALIDATE_IP ) ) {
			return $_SERVER[ $key ];
		}
	}

	// fallback IP address.
	return '127.0.0.1';
}

function pp_get_client_details()
{
	$ip = pp_get_client_ip();

	$user_agent = pp_get_user_agent();

	return array(
		'ip'			=> $ip,
		'user_agent'	=> $user_agent
	);
}

function pp_get_modules_categories( $cat = '' )
{
	if ( isset( $_GET['tab'] ) && 'modules' === $_GET['tab'] ) {
		$admin_label = '';
	} else {
		$admin_label = ' - ' . pp_get_admin_label();
	}

	$cats = array(
		'creative'		=> sprintf( __('Creative Modules%s', 'bb-powerpack'), $admin_label ),
		'content'		=> sprintf( __('Content Modules%s', 'bb-powerpack'), $admin_label ),
		'form_style'	=> sprintf( __('Form Styler Modules%s', 'bb-powerpack'), $admin_label ),
		'lead_gen'		=> sprintf( __('Lead Generation Modules%s', 'bb-powerpack'), $admin_label ),
		'media'			=> sprintf( __('Media Modules%s', 'bb-powerpack'), $admin_label ),
		'social'		=> sprintf( __('Social Media Modules%s', 'bb-powerpack'), $admin_label ),
	);

	if ( empty( $cat ) ) {
		return $cats;
	}

	if ( isset( $cats[$cat] ) ) {
		return $cats[$cat];
	} else {
		return $cat;
	}
}

/**
 * Returns modules category name for Beaver Builder 2.0 compatibility.
 *
 * @since 1.3
 * @return string
 */
function pp_get_modules_cat( $cat )
{
	return class_exists( 'FLBuilderUIContentPanel' ) ? pp_get_modules_categories( $cat ) : BB_POWERPACK_CAT;
}

/**
 * Returns admin label for PowerPack settings.
 *
 * @since 1.3
 * @return string
 */
function pp_get_admin_label()
{
	$admin_label = BB_PowerPack_Admin_Settings::get_option( 'ppwl_admin_label' );
	$admin_label = trim( $admin_label ) !== '' ? trim( $admin_label ) : 'PowerPack';

	return $admin_label;
}

/**
 * Returns group name for BB 2.x.
 *
 * @since 1.5
 * @return string
 */
function pp_get_modules_group()
{
	$list_with_standard = BB_PowerPack_Admin_Settings::get_option( 'ppwl_list_modules_with_standard' );

	if ( $list_with_standard ) {
		return '';
	}

	$group_name = BB_PowerPack_Admin_Settings::get_option( 'ppwl_builder_label' );
	$group_name = trim( $group_name ) !== '' ? trim( $group_name ) : 'PowerPack ' . __('Modules', 'bb-powerpack');

	return $group_name;
}

/**
 * Returns path of the module.
 *
 * @since 2.3
 * @return string
 */
function pp_get_module_dir( $module = '' )
{
	if ( empty( $module ) ) {
		return;
	}

	$theme_dir = '';
	$module_dir = '';
	$module_path = 'modules/' . $module;

	if ( is_child_theme() ) {
		$theme_dir = get_stylesheet_directory();
	} else {
		$theme_dir = get_template_directory();
	}

	if ( file_exists( $theme_dir . '/bb-powerpack/' . $module_path ) ) {
		$module_dir = $theme_dir . '/bb-powerpack/' . $module_path;
	}
	elseif ( file_exists( $theme_dir . '/bbpowerpack/' . $module_path ) ) {
		$module_dir = $theme_dir . '/bbpowerpack/' . $module_path;
	}
	else {
		$module_dir = BB_POWERPACK_DIR . $module_path;
	}

	return $module_dir . '/';
}

/**
 * Returns URL of the module.
 *
 * @since 2.3
 * @return string
 */
function pp_get_module_url( $module = '' )
{
	if ( empty( $module ) ) {
		return;
	}

	$theme_dir = '';
	$theme_url = '';
	$module_url = '';
	$module_path = 'modules/' . $module;

	if ( is_child_theme() ) {
		$theme_dir = get_stylesheet_directory();
		$theme_url = get_stylesheet_directory_uri();
	} else {
		$theme_dir = get_template_directory();
		$theme_url = get_template_directory_uri();
	}

	if ( file_exists( $theme_dir . '/bb-powerpack/' . $module_path ) ) {
		$module_url = trailingslashit( $theme_url ) . 'bb-powerpack/' . $module_path;
	}
	elseif ( file_exists( $theme_dir . '/bbpowerpack/' . $module ) ) {
		$module_url = trailingslashit( $theme_url ) . 'bbpowerpack/' . $module_path;
	}
	else {
		$module_url = BB_POWERPACK_URL . $module_path;
	}

	return trailingslashit( $module_url );
}

/**
 * Returns Facebook App ID stored in options.
 *
 * @since 2.4
 * @return mixed
 */
function pp_get_fb_app_id()
{
	$app_id = BB_PowerPack_Admin_Settings::get_option( 'bb_powerpack_fb_app_id' );

	return $app_id;
}

/**
 * Build the URL of Facebook SDK.
 *
 * @since 2.4
 * @return string
 */
function pp_get_fb_sdk_url( $app_id = '' )
{
	$app_id = empty( $app_id ) ? pp_get_fb_app_id() : $app_id;
	
	if ( $app_id && ! empty( $app_id ) ) {
		return sprintf( 'https://connect.facebook.net/%s/sdk.js#xfbml=1&version=v2.12&appId=%s', get_locale(), $app_id );
	}

	return sprintf( 'https://connect.facebook.net/%s/sdk.js#xfbml=1&version=v2.12', get_locale() );
}

function pp_get_fb_app_settings_url()
{
	$app_id = pp_get_fb_app_id();

	if ( $app_id ) {
		return sprintf( 'https://developers.facebook.com/apps/%d/settings/', $app_id );
	} else {
		return 'https://developers.facebook.com/apps/';
	}
}

function pp_get_fb_module_desc() {
	$app_id = pp_get_fb_app_id();

	if ( ! $app_id ) {
		// translators: %s: Setting Page link
		return sprintf( __( 'You can set your Facebook App ID in the <a href="%s" target="_blank">Integrations Settings</a>', 'bb-powerpack' ), BB_PowerPack_Admin_Settings::get_form_action() );
	} else {
		// translators: %1$s: app_id, %2$s: Setting Page link.
		return sprintf( __( 'You are connected to Facebook App %1$s, <a href="%2$s" target="_blank">Change App</a>', 'bb-powerpack' ), $app_id, BB_PowerPack_Admin_Settings::get_form_action() );
	}
}

function pp_get_google_api_key() {
	return BB_PowerPack_Admin_Settings::get_option( 'bb_powerpack_google_api_key' );
}

function pp_get_google_api_url() {
	$key = pp_get_google_api_key();
	if ( ! empty( $key ) ) {
		return "https://maps.googleapis.com/maps/api/js?key={$key}";
	}

	return false;
}

function pp_get_google_places_api_key() {
	return BB_PowerPack_Admin_Settings::get_option( 'bb_powerpack_google_places_api_key' );
}

function pp_get_google_places_api_url() {
	$key = pp_get_google_places_api_key();
	if ( ! empty( $key ) ) {
		return "https://maps.googleapis.com/maps/api/place/details/json?key={$key}";
	}

	return false;
}

function pp_get_yelp_api_key() {
	return BB_PowerPack_Admin_Settings::get_option( 'bb_powerpack_yelp_api_key' );
}

function pp_clear_enabled_templates() {
	BB_PowerPack_Admin_Settings::update_option( 'bb_powerpack_page_templates', array('disabled') );
	BB_PowerPack_Admin_Settings::update_option( 'bb_powerpack_templates', array('disabled') );
	BB_PowerPack_Admin_Settings::delete_option( 'bb_powerpack_row_templates_type' );
	BB_PowerPack_Admin_Settings::delete_option( 'bb_powerpack_row_templates_all' );
	BB_PowerPack_Admin_Settings::delete_option( 'bb_powerpack_override_ms' );
}

function pp_get_image_alt( $img_id = false, $default = '' ) {
	if ( ! $img_id || ! absint( $img_id ) ) {
		return;
	}
	if ( ! class_exists( 'FLBuilderPhoto' ) ) {
		return;
	}
	
	$img_id = absint( $img_id );
	$attachment_data = FLBuilderPhoto::get_attachment_data( $img_id );
	$image_alt = ( ! empty( $default ) ) ? $default : '';
	
	if ( is_object( $attachment_data ) ) {
		$image_alt = $attachment_data->alt;
		if ( empty( $image_alt ) ) {
			$image_alt = $attachment_data->caption;
			if ( empty( $image_alt ) ) {
				$image_alt = $attachment_data->title;
			}
		}
	}

	return $image_alt;
}

function pp_gradient_angle_to_direction( $angle = 45 ) {
	$direction = 'top_right_diagonal';
	
	// Top to Bottom.
	if ( 180 == $angle ) {
		$direction = 'bottom';
	}
	// Left to Right.
	if ( 90 == $angle ) {
		$direction = 'right';
	}
	// Bottom Left to Top Right.
	if ( 45 == $angle ) {
		$direction = 'top_right_diagonal';
	}
	// Bottom Right to Top Left.
	if ( 315 == $angle ) {
		$direction = 'top_left_diagonal';
	}
	// Top Left to Bottom Right.
	if ( 135 == $angle ) {
		$direction = 'bottom_right_diagonal';
	}
	// Top Right to Bottom Left.
	if ( 225 == $angle ) {
		$direction = 'bottom_left_diagonal';
	}

	return $direction;
}

function pp_image_effect_fields( $hover = false ) {
	$suffix = $hover ? '_hover' : '';

	return array(
		'image_effect_opacity'.$suffix		=> array(
			'type'						=> 'unit',
			'label'						=> __('Opacity', 'bb-powerpack'),
			'property'					=> 'opacity',
			'slider'					=> array(
				'min'						=> 0,
				'max'						=> 1,
				'step'						=> 0.1
			),
		),
		'image_effect_brightness'.$suffix	=> array(
			'type'						=> 'unit',
			'label'						=> __('Brightness', 'bb-powerpack'),
			'property'					=> 'brightness',
			'units'						=> array('%'),
			'slider'					=> array(
				'min'						=> 0,
				'max'						=> 200,
				'step'						=> 1
			),
		),
		'image_effect_contrast'.$suffix		=> array(
			'type'						=> 'unit',
			'label'						=> __('Contrast', 'bb-powerpack'),
			'property'					=> 'contrast',
			'units'						=> array('%'),
			'slider'					=> array(
				'min'						=> 0,
				'max'						=> 200,
				'step'						=> 1
			),
		),
		'image_effect_saturate'.$suffix		=> array(
			'type'						=> 'unit',
			'label'						=> __('Saturate', 'bb-powerpack'),
			'property'					=> 'saturate',
			'slider'					=> array(
				'min'						=> 0,
				'max'						=> 1,
				'step'						=> 0.1
			),
		),
		'image_effect_hue_rotate'.$suffix	=> array(
			'type'						=> 'unit',
			'label'						=> __('Hue Rotate', 'bb-powerpack'),
			'property'					=> 'hue-rotate',
			'units'						=> array('deg'),
			'slider'					=> array(
				'min'						=> 0,
				'max'						=> 360,
				'step'						=> 1
			),
		),
		'image_effect_grayscale'.$suffix	=> array(
			'type'						=> 'unit',
			'label'						=> __('Grayscale', 'bb-powerpack'),
			'property'					=> 'grayscale',
			'units'						=> array( '%' ),
			'slider'					=> true,
		),
		'image_effect_blur'.$suffix			=> array(
			'type'						=> 'unit',
			'label'						=> __('Blur', 'bb-powerpack'),
			'property'					=> 'blur',
			'units'						=> array( 'px' ),
			'slider'					=> array(
				'min'						=> 1,
				'max'						=> 30,
				'step'						=> 1
			),
		),
		'image_effect_sepia'.$suffix		=> array(
			'type'						=> 'unit',
			'label'						=> __('Sepia', 'bb-powerpack'),
			'property'					=> 'sepia',
			'slider'					=> array(
				'min'						=> 0,
				'max'						=> 1,
				'step'						=> 0.1
			),
		),
		'image_effect_invert'.$suffix		=> array(
			'type'						=> 'unit',
			'label'						=> __('Invert', 'bb-powerpack'),
			'property'					=> 'invert',
			'units'						=> array('%'),
			'slider'					=> array(
				'min'						=> 0,
				'max'						=> 100,
				'step'						=> 1
			),
		),
	);
}

function pp_image_effect_render_style( $settings, $selector, $is_hover = false ) {
    $fields 		= pp_image_effect_fields( $is_hover );
	
	$css 			= "\n $selector {";
	$css			.= "\n\t cursor: pointer;\n";

	$webkit_props = array();
	$filter_props = array();

	foreach ( $fields as $name => $field ) {
        $unit = isset( $field['units'] ) ? $field['units'][0] : '';
        if ( isset( $settings->{$name} ) && '' != $settings->{$name} ) {
			$webkit_props[] = $field['property']."(" . $settings->{$name} . $unit .")";
			$filter_props[] = $field['property']."(" . $settings->{$name} . $unit .")";
        }
    }

	if ( ! empty( $webkit_props ) ) {
		$css .= "\n\t" . '-webkit-filter: ' . implode( ' ', $webkit_props ) . ';';
	}
	if ( ! empty( $filter_props ) ) {
		$css .= "\n\t" . 'filter: ' . implode( ' ', $filter_props ) . ';';
	}
    $css .= "\n" . '}';

    return $css;
}

function pp_get_site_domain() {
	return str_ireplace( 'www.', '', parse_url( home_url(), PHP_URL_HOST ) );
}

function pp_get_recaptcha_desc() {
	// translators: %s: Integration Setting Page link
	return sprintf( __( 'To use reCAPTCHA, you need to add the API keys in the <a href="%s" target="_blank">Integrations Settings</a> and complete the setup process.', 'bb-powerpack' ), BB_PowerPack_Admin_Settings::get_form_action( '&tab=integration' ) );
}

function pp_is_builder_active() {
	return is_user_logged_in() && isset( $_GET['fl_builder'] );
}

function pp_wl_reset_settings() {
	delete_option( 'ppwl_hide_form' );
	delete_option( 'ppwl_hide_plugin' );

	if ( is_network_admin() ) {
		delete_site_option( 'ppwl_hide_form' );
		delete_site_option( 'ppwl_hide_plugin' );
	}
}

function pp_wl_get_reset_url() {
	return BB_PowerPack_Admin_Settings::get_form_action( '&tab=white-label&reset_wl=' . pp_plugin_get_hash() );
}

function pp_plugin_get_hash() {
	return md5( 'PowerPack for Beaver Builder' );
}