/**
  * Convert a field
  */
 public function create_field($field, $section_id = null)
 {
     $args = array();
     $args['section_id'] = $section_id;
     $args['title'] = isset($field['label']) ? $field['label'] : '';
     $args['subtitle'] = isset($field['description']) ? $field['description'] : '';
     $args['description'] = isset($field['help']) ? $field['help'] : '';
     $args['class'] = isset($field['class']) ? $field['class'] . ' avada_options' : 'avada_options';
     $args['options'] = isset($field['choices']) ? $field['choices'] : array();
     $args['required'] = array();
     if (isset($field['required']) && is_array($field['required']) && !empty($field['required'])) {
         foreach ($field['required'] as $requirement) {
             $requirement['operator'] = '==' == $requirement['operator'] ? '=' : $requirement['operator'];
             $args['required'][] = array($requirement['setting'], $requirement['operator'], $requirement['value']);
         }
     } elseif (isset($args['required'])) {
         unset($args['required']);
     }
     // This will allow us to have an 'options_mode' setting.
     // We can have 'simple', 'advanced' etc there, and options will be shown depending on our selection.
     if (isset($field['option_mode'])) {
         if (!isset($args['required'])) {
             $args['required'] = array();
         }
         $args['required'][] = array('options_mode', '=', $field['option_mode']);
     }
     if (!isset($field['type'])) {
         return;
     }
     $font_size_dimension_fields = array('meta_font_size', 'es_title_font_size', 'es_caption_font_size', 'ec_sidew_font_size', 'image_rollover_icon_size', 'pagination_font_size', 'form_input_height', 'copyright_font_size', 'tagline_font_size', 'header_sticky_nav_font_size', 'page_title_font_size', 'page_title_subheader_font_size', 'breadcrumbs_font_size', 'content_box_title_size', 'content_box_icon_size', 'counter_box_title_size', 'counter_box_icon_size', 'counter_box_body_size', 'social_links_font_size', 'sidew_font_size', 'slider_arrow_size', 'slidingbar_font_size', 'header_social_links_font_size', 'footer_social_links_font_size', 'sharing_social_links_font_size', 'post_titles_font_size', 'post_titles_font_lh', 'post_titles_extras_font_size', 'woo_icon_font_size');
     switch ($field['type']) {
         case 'color':
             if (!isset($field['transparent'])) {
                 $args['transparent'] = false;
             }
             $args['validate_callback'] = 'avada_avadaredux_validate_color_hex';
             break;
         case 'code':
             $args['type'] = 'ace_editor';
             $args['mode'] = isset($args['options']) && isset($args['options']['language']) ? $args['options']['language'] : 'css';
             $args['theme'] = isset($args['choices']) && isset($args['choices']['theme']) ? $args['choices']['theme'] : 'chrome';
             $args['options']['minLines'] = !isset($args['options']['minLines']) ? 18 : $args['options']['minLines'];
             $args['options']['maxLines'] = !isset($args['options']['maxLines']) ? 30 : $args['options']['maxLines'];
             if ('custom_css' == $field['id']) {
                 $args['full_width'] = true;
             }
             break;
         case 'radio-buttonset':
             $args['type'] = 'button_set';
             break;
         case 'dimension':
             $args['type'] = 'text';
             $args['class'] .= ' dimension';
             $args['options'] = '';
             $args['validate_callback'] = 'avada_avadaredux_validate_dimension';
             if (in_array($field['id'], $font_size_dimension_fields)) {
                 // $args['subtitle'] = sprintf( esc_html__( '%s Enter value including a CSS unit, ex: %s. Valid CSS units for this field are px, em, rem.', 'Avada' ), $args['subtitle'], $field['default'] );
                 $args['validate_callback'] = 'avada_avadaredux_validate_font_size';
                 $args['subtitle'] = sprintf(esc_html__('%s Enter value including CSS unit (px, em, rem), ex: %s.', 'Avada'), $args['subtitle'], $field['default']);
             } else {
                 $args['subtitle'] = sprintf(esc_html__('%s Enter value including any valid CSS unit, ex: %s.', 'Avada'), $args['subtitle'], $field['default']);
             }
             break;
         case 'dimensions':
             if ('lightbox_video_dimensions' == $field['id']) {
                 $args['subtitle'] = sprintf(esc_html__('%s In pixels, ex: %s.', 'Avada'), $args['subtitle'], implode(', ', $field['default']));
             } else {
                 $args['subtitle'] = sprintf(esc_html__('%s Enter values including any valid CSS unit, ex: %s.', 'Avada'), $args['subtitle'], implode(', ', $field['default']));
             }
             $args['validate_callback'] = 'avada_avadaredux_validate_dimensions';
             break;
         case 'spacing':
             $args['top'] = isset($field['choices']) && isset($field['choices']['top']) ? true : false;
             $args['bottom'] = isset($field['choices']) && isset($field['choices']['bottom']) ? true : false;
             $args['left'] = isset($field['choices']) && isset($field['choices']['left']) ? true : false;
             $args['right'] = isset($field['choices']) && isset($field['choices']['right']) ? true : false;
             $args['validate_callback'] = 'avada_avadaredux_validate_dimensions';
             $args['subtitle'] = sprintf(esc_html__('%s Enter values including any valid CSS unit, ex: %s.', 'Avada'), $args['subtitle'], implode(', ', $field['default']));
             break;
         case 'number':
             $args['type'] = 'spinner';
             if (isset($field['choices']) && isset($field['choices']['min'])) {
                 $args['min'] = $field['choices']['min'];
             }
             if (isset($field['choices']) && isset($field['choices']['max'])) {
                 $args['max'] = $field['choices']['max'];
             }
             if (isset($field['choices']) && isset($field['choices']['step'])) {
                 $args['step'] = $field['choices']['step'];
             }
             break;
         case 'select':
             $args['width'] = 'width:100%;';
             $args['select2'] = array('minimumResultsForSearch' => '-1', 'allowClear' => false);
             break;
         case 'slider':
             $not_in_pixels = array('carousel_speed', 'counter_box_speed', 'testimonials_speed', 'slidingbar_widgets_columns', 'footer_widgets_columns', 'blog_grid_columns', 'excerpt_length_blog', 'excerpt_length_portfolio', 'posts_slideshow_number', 'slideshow_speed', 'tfes_interval', 'tfes_speed', 'lightbox_slideshow_speed', 'lightbox_opacity', 'map_zoom_level', 'search_results_per_page', 'number_related_posts', 'related_posts_columns', 'related_posts_speed', 'related_posts_swipe_items', 'pw_jpeg_quality', 'portfolio_items', 'woo_items', 'woocommerce_shop_page_columns', 'woocommerce_related_columns', 'woocommerce_archive_page_columns', 'typography_sensitivity', 'typography_factor');
             if (!in_array($field['id'], $not_in_pixels)) {
                 $args['subtitle'] = $args['subtitle'] . ' ' . esc_html__('In pixels.', 'Avada');
             }
             if (isset($field['choices']) && isset($field['choices']['min'])) {
                 $args['min'] = $field['choices']['min'];
             }
             if (isset($field['choices']) && isset($field['choices']['max'])) {
                 $args['max'] = $field['choices']['max'];
             }
             if (isset($field['choices']) && isset($field['choices']['step'])) {
                 $args['step'] = $field['choices']['step'];
             }
             if (isset($field['choices']['step']) && 1 > $field['choices']['step']) {
                 $args['resolution'] = 0.1;
                 if (0.1 > $field['choices']['step']) {
                     $args['resolution'] = 0.01;
                 } elseif (0.01 > $field['choices']['step']) {
                     $args['resolution'] = 0.001;
                 }
             }
             break;
         case 'switch':
         case 'toggle':
             $args['type'] = 'switch';
             if (isset($field['choices']) && isset($field['choices']['on'])) {
                 $args['on'] = $field['choices']['on'];
             }
             if (isset($field['choices']) && isset($field['choices']['off'])) {
                 $args['off'] = $field['choices']['off'];
             }
             break;
         case 'color-alpha':
             $args['type'] = 'color_alpha';
             $args['transparent'] = false;
             $args['validate_callback'] = 'avada_avadaredux_validate_color_rgba';
             break;
         case 'preset':
             $args['type'] = 'image_select';
             $args['presets'] = true;
             $args['options'] = array();
             foreach ($field['choices'] as $choice => $choice_args) {
                 if (is_array($choice_args)) {
                     $args['options'][$choice] = array('alt' => $choice_args['label'], 'img' => $choice_args['image'], 'presets' => $choice_args['settings']);
                 }
             }
             break;
         case 'radio-image':
             $args['type'] = 'image_select';
             $args['options'] = array();
             foreach ($field['choices'] as $id => $url) {
                 $args['options'][$id] = array('alt' => $id, 'img' => $url);
             }
             if ('header_layout' == $field['id']) {
                 $args['full_width'] = true;
             }
             break;
         case 'upload':
         case 'media':
             $args['type'] = 'media';
             if (isset($field['default']) && !is_array($field['default'])) {
                 $args['default'] = '' == $field['default'] ? array() : ($args['default'] = array('url' => $field['default']));
             }
             break;
         case 'radio':
             $args['options'] = array();
             foreach ($field['choices'] as $choice => $label) {
                 if (is_array($label)) {
                     $args['options'][$choice] = '<span style="font-weight: bold; font-size: 1.1em; line-height: 2.2em;">' . $label[0] . '</span><p>' . $label[1] . '<p>';
                 } else {
                     $args['options'][$choice] = $label;
                 }
             }
             break;
         case 'multicheck':
             $args['type'] = 'checkbox';
             break;
         case 'typography':
             $args['default'] = array();
             if (isset($field['default'])) {
                 if (isset($field['default']['font-weight'])) {
                     $args['default']['font-weight'] = $field['default']['font-weight'];
                 }
                 if (isset($field['default']['font-size'])) {
                     $args['default']['font-size'] = $field['default']['font-size'];
                 }
                 if (isset($field['default']['font-family'])) {
                     $args['default']['font-family'] = $field['default']['font-family'];
                     $args['default']['font-backup'] = true;
                     $args['default']['google'] = true;
                 }
                 if (isset($field['default']['line-height'])) {
                     $args['default']['line-height'] = $field['default']['line-height'];
                 }
                 if (isset($field['default']['word-spacing'])) {
                     $args['default']['word-spacing'] = $field['default']['word-spacing'];
                 }
                 if (isset($field['default']['letter-spacing'])) {
                     $args['default']['letter-spacing'] = $field['default']['letter-spacing'];
                 }
                 if (isset($field['default']['color'])) {
                     $args['default']['color'] = $field['default']['color'];
                 }
                 if (isset($field['default']['text-align'])) {
                     $args['default']['text-align'] = $field['default']['text-align'];
                 }
                 if (isset($field['default']['text-transform'])) {
                     $args['default']['text-transform'] = $field['default']['text-transform'];
                 }
                 if (isset($field['default']['margin-top'])) {
                     $args['default']['margin-top'] = $field['default']['margin-top'];
                 }
                 if (isset($field['default']['margin-bottom'])) {
                     $args['default']['margin-bottom'] = $field['default']['margin-bottom'];
                 }
             }
             $args['fonts'] = Avada_Data::standard_fonts();
             $args['font-backup'] = true;
             $args['font-style'] = isset($args['default']['font-style']) || isset($field['choices']['font-style']) && $field['choices']['font-style'] ? true : false;
             $args['font-weight'] = isset($args['default']['font-weight']) || isset($field['choices']['font-weight']) && $field['choices']['font-weight'] ? true : false;
             $args['font-size'] = isset($args['default']['font-size']) || isset($field['choices']['font-size']) && $field['choices']['font-size'] ? true : false;
             $args['font-family'] = isset($args['default']['font-family']) || isset($field['choices']['font-family']) && $field['choices']['font-family'] ? true : false;
             $args['subsets'] = isset($args['default']['font-family']) || isset($field['choices']['font-family']) && $field['choices']['font-family'] ? true : false;
             $args['line-height'] = isset($args['default']['line-height']) || isset($field['choices']['line-height']) && $field['choices']['line-height'] ? true : false;
             $args['word-spacing'] = isset($args['default']['word-spacing']) || isset($field['choices']['word-spacing']) && $field['choices']['word-spacing'] ? true : false;
             $args['letter-spacing'] = isset($args['default']['word-spacing']) || isset($field['choices']['letter-spacing']) && $field['choices']['letter-spacing'] ? true : false;
             $args['text-align'] = isset($args['default']['text-align']) || isset($field['choices']['text-align']) && $field['choices']['text-align'] ? true : false;
             $args['text-transform'] = isset($args['default']['text-transform']) || isset($field['choices']['text-transform']) && $field['choices']['text-transform'] ? true : false;
             $args['color'] = isset($args['default']['color']) || isset($field['choices']['color']) && $field['choices']['color'] ? true : false;
             $args['margin-top'] = isset($args['default']['margin-top']) || isset($field['choices']['margin-top']) && $field['choices']['margin-top'] ? true : false;
             $args['margin-bottom'] = isset($args['default']['margin-bottom']) || isset($field['choices']['margin-bottom']) && $field['choices']['margin-bottom'] ? true : false;
             $args['select2'] = array('allowClear' => false);
             $args['validate_callback'] = 'avada_avadaredux_validate_typography';
             break;
         case 'repeater':
             $args['fields'] = array();
             $args['group_values'] = true;
             $args['sortable'] = true;
             $i = 0;
             foreach ($field['fields'] as $repeater_field_id => $repeater_field_args) {
                 $repeater_field_args['label'] = isset($repeater_field_args['label']) ? $repeater_field_args['label'] : '';
                 $args['fields'][$i] = array('id' => $repeater_field_id, 'type' => isset($repeater_field_args['type']) ? $repeater_field_args['type'] : 'text', 'title' => $repeater_field_args['label'], 'placeholder' => isset($repeater_field_args['default']) ? $repeater_field_args['default'] : $repeater_field_args['label']);
                 if (isset($repeater_field_args['choices'])) {
                     $args['fields'][$i]['options'] = $repeater_field_args['choices'];
                 }
                 if (isset($repeater_field_args['type']) && 'select' == $repeater_field_args['type']) {
                     $args['fields'][$i]['width'] = 'width:100%;';
                     $args['fields'][$i]['select2'] = array('minimumResultsForSearch' => '-1');
                 }
                 if (isset($repeater_field_args['type']) && 'color' == $repeater_field_args['type']) {
                     $args['fields'][$i]['transparent'] = false;
                 }
                 if (isset($repeater_field_args['type']) && 'upload' == $repeater_field_args['type']) {
                     $args['fields'][$i]['type'] = 'media';
                     if (isset($repeater_field_args['mode'])) {
                         $args['fields'][$i]['mode'] = $repeater_field_args['mode'];
                     }
                     if (isset($repeater_field_args['preview'])) {
                         $args['fields'][$i]['preview'] = $repeater_field_args['preview'];
                     }
                 }
                 $i++;
             }
             unset($args['options']);
             if ('custom_fonts' == $field['id']) {
                 $args['validate_callback'] = 'avada_avadaredux_validate_custom_fonts';
             }
             break;
         case 'accordion':
             $args['type'] = 'accordion';
             $args['title'] = $field['label'];
             $args['subtitle'] = isset($field['description']) ? $field['description'] : '';
             unset($field['fields']);
             unset($field['label']);
             unset($field['default']);
             unset($field['options']);
             break;
         case 'custom':
             $args['type'] = 'raw';
             $args['full_width'] = true;
             if (isset($field['style']) && $field['style'] == 'heading') {
                 $args['content'] = '<div class="avadaredux-field-info"><p class="avadaredux-info-desc" style="font-size:13px;"><b>' . $field['description'] . '</b></p></div>';
                 $args['class'] .= ' custom-heading';
             } else {
                 $args['content'] = $field['description'];
                 $args['class'] .= ' custom-info';
             }
             $args['description'] = '';
             $args['subtitle'] = '';
             $args['raw_html'] = true;
             break;
     }
     // Add validation to the email field
     if (isset($field['id']) && 'email_address' == $field['id']) {
         $args['validate'] = 'email';
     }
     $args = wp_parse_args($args, $field);
     if (class_exists('AvadaRedux')) {
         AvadaRedux::setField($this->key, $args);
     }
 }