/*global jQuery, icl_ajx_url, icl_ajx_saved, icl_ajx_error, icl_ajxloaderimg_src, wpml_core_strings */

var WPML_core = WPML_core || {};

WPML_core.htmlentities = function (s) {
  return jQuery("<div/>").text(s).html()
};

WPML_core.sanitize = function (s) {
  if (typeof s === 'string' || s instanceof String) {
    return s.replace(/<script[^>]*?>.*?<\/script>/gi, '')
      .replace(/<[\/\!]*?[^<>]*?>/gi, '')
      .replace(/<style[^>]*?>.*?<\/style>/gi, '')
      .replace(/<![\s\S]*?--[ \t\n\r]*>/gi, '')
      .replace(/&nbsp;/g, '');
  }

  return s;
};

jQuery(function ($) {
  // Predefine closeText of JQuery UI diaog
  jQuery.extend(jQuery.ui.dialog.prototype.options, {closeText: wpml_core_strings.dialogCloseText});


  var catAdder = jQuery('#category-adder');
  if (catAdder.html()) {
    catAdder.prepend('<p>' + icl_cat_adder_msg + '</p>');
  }
  jQuery('select[name="icl_translation_of"]').change(function () {
    jQuery('#icl_translate_options').fadeOut();
  });
  jQuery('#icl_dismiss_help').click(iclDismissHelp);
  jQuery('#icl_dismiss_upgrade_notice').click(iclDismissUpgradeNotice);
  jQuery(document).on('click', 'a.icl_toggle_show_translations', iclToggleShowTranslations);

  /* needed for tagcloud */
  oldajaxurl = false;

  jQuery(document).on('click', "#icl_make_translatable_submit", icl_make_translatable);

  jQuery('a.icl_user_notice_hide').click(icl_hide_user_notice);

  var slugTranslation = jQuery('#icl_slug_translation');
  if (slugTranslation.length) {
    iclSaveForm_success_cb.push(function (form, response) {
      if (form.attr('name') === 'icl_slug_translation') {
        if (response[1] === 1) {
          jQuery('.icl_slug_translation_choice').show();
        } else {
          jQuery('.icl_slug_translation_choice').hide();
        }
      } else if (form.attr('name') === 'icl_custom_posts_sync_options') {
        jQuery('.icl_st_slug_tr_warn').hide();
      }
    });

    slugTranslation.submit(iclSaveForm);
    jQuery('.icl_slug_translation_choice input[type=checkbox]').change(function () {
      var table_row = jQuery(this).closest('tr');
      var cpt_slugs = jQuery(table_row).find('.js-cpt-slugs');

      if (jQuery(this).prop('checked')) {
        cpt_slugs.show();
      } else {
        cpt_slugs.hide();
      }
    });
  }

  var showLangSwitcher = jQuery('#show_login_page_language_switcher_sub_section');
  var showLangSwitcherCheckbox = showLangSwitcher.find('[name="show_login_page_language_switcher"]');
  jQuery('#login_page_translation').click(function () {
    showLangSwitcher.toggle();
    var isVisible = (showLangSwitcher.is(':visible'));
    showLangSwitcherCheckbox.prop('checked', isVisible);
  });

  if (jQuery('#icl_login_page_translation').length) {
    jQuery('#icl_login_page_translation').submit(iclSaveForm);
  }

  jQuery('.icl_sync_custom_posts').change(function () {
    var val = WPML_core.sanitize(jQuery(this).val());
    var table_row = jQuery(this).closest('tr');
    var cpt_slugs = jQuery(table_row).find('.js-cpt-slugs');
    var icl_slug_translation = jQuery(table_row).find(':checkbox');
    if (val === 1) {
      icl_slug_translation.closest('.icl_slug_translation_choice').show();
      if (icl_slug_translation.prop('checked') && cpt_slugs) {
        cpt_slugs.show();
      }
    } else if (cpt_slugs) {
      icl_slug_translation.closest('.icl_slug_translation_choice').hide();
      cpt_slugs.hide();
    }

  });

  $(function () {
    $('.js-type-translation-row').each(function () {
      if ($(this).find('.js-disabled-externally').length === 3) {
        $(this).hide();
      }
    });
  });

  jQuery(document).on('focus', '.icl_error_input', function () {
    jQuery(this).removeClass('icl_error_input');
  });

  $('.js-toggle-colors-edit').on('click', function (e) {
    e.preventDefault();

    var $target = $($(this).attr('href'));
    var $caret = $(this).find('.js-arrow-toggle');

    if ($target.is(':visible')) {
      $target.slideUp();
      $caret.removeClass('dashicons-arrow-up').addClass('dashicons-arrow-down');
    } else {
      $target.slideDown();
      $caret.removeClass('dashicons-arrow-down').addClass('dashicons-arrow-up');
    }

    return false;
  });

  $('#js-post-availability').on('change', function (e) {

    var $target = $($(this).data('target'));

    if ($(this).prop('checked')) {
      $target.show();
    } else {
      $target.hide();
    }

  });

  $('.js-wpml-navigation-links a').on('click', function (e) { // prevent default scrolling for navigation links
    e.preventDefault();

    var $target = $($(this).attr('href'));

    if ($target.length !== 0) {
      var offset = 0;
      var wpAdminBar = jQuery('#wpadminbar');
      if (wpAdminBar.length !== 0) {
        offset = wpAdminBar.height();
      }

      $('html, body').animate({
        scrollTop: $target.offset().top - offset
      }, 300, function () {
        var $header = $target.find('.wpml-section-header h3');
        $header.addClass('active');
        setTimeout(function () {
          $header.removeClass('active');
        }, 700);
      });
    }

    return false;
  });

  var icl_untranslated_blog_posts = $("input[name=icl_untranslated_blog_posts]");
  var icl_untranslated_blog_posts_help = $('#icl_untranslated_blog_posts_help');

  var update_icl_untranslated_blog_posts = function () {
    //Get the value of currently selected radio option
    var value = WPML_core.sanitize(icl_untranslated_blog_posts.filter(':checked').val());

    if (value == 0) {
      icl_untranslated_blog_posts_help.fadeOut('slow');
    } else {
      icl_untranslated_blog_posts_help.fadeIn('slow');
    }
  };

  update_icl_untranslated_blog_posts();
  icl_untranslated_blog_posts.on('click', update_icl_untranslated_blog_posts);

  var last_form_id = localStorage.getItem('wpml-mlcs-last-form-id');
  if (last_form_id) {
    var last_form = jQuery("#" + last_form_id);
    if (last_form.length) {
      jQuery('html, body').animate({
        scrollTop: last_form.offset().top
      }, 1000);
    }
    localStorage.removeItem('wpml-mlcs-last-form-id');
  }

});

(function ($) {
  function click_on_lock() {
    var radio_name = $(this).data('radio-name'),
      radio = $('input[name="' + radio_name + '"]'),
      unlocked_name = $(this).data('unlocked-name'),
      slug = radio.data('slug');

    $(this).fadeOut();
    radio.prop('disabled', false);
    $('input[name="' + unlocked_name + '"]').prop('value', '1');

    return false;
  }

  function sync_lock_on_custom_fields_and_terms(form_id) {
    var locks = $('#' + form_id).find('.js-wpml-sync-lock');
    locks.on('click', click_on_lock);
  }

  $(document).on('icl-bind-locks', function (e) {
    sync_lock_on_custom_fields_and_terms(e.detail);
  });

  $(document).ready(function () {
    $('#icl_custom_posts_sync_options .js-wpml-sync-lock, #icl_custom_tax_sync_options .js-wpml-sync-lock').on(
      'click',
      click_on_lock
    );
  });

})(jQuery);


/** @deprecated use {@link fadeInAndOut} */
function fadeInAjxResp(spot, msg, err){
  fadeInAndOut(spot,msg,err);
}

function fadeInAndOut(spot, msg,err){
  let col;
  if(err != undefined){
    col = jQuery(spot).css('color');
    jQuery(spot).css('color','red');
  }
  jQuery(spot).html(WPML_core.purify(msg));
  jQuery(spot).fadeIn();
  window.setTimeout(wpml_fadeOut, 3000, spot);
  if(err != undefined){
    jQuery(spot).css('color',col);
  }
}

function wpml_fadeIn(spot, content){
  jQuery(spot).html(WPML_core.purify(content));
  jQuery(spot).fadeIn();
}

function wpml_fadeOut(spot){
  jQuery(spot).fadeOut();
}

/** @deprecated use {@link wpml_fadeOut} */
function fadeOutAjxResp(spot){
  wpml_fadeOut(spot);
}


/**
 * Create custom event
 * A kind of simple "polyfill" to support IE11
 *
 * @param eventName
 * @param eventDetail
 */
function wpmlCustomEvent(eventName, eventDetail) {
  if (!!window.MSInputMethodContext && !!document.documentMode) {
    // Internet Explorer 11
    const event = document.createEvent('CustomEvent');
    event.initCustomEvent(
      eventName,
      false,
      false,
      false
    );
    document.dispatchEvent(event);
  } else {
    document.dispatchEvent(new CustomEvent(eventName, eventDetail));
  }
}

var icl_ajxloaderimg = '<img src="' + icl_ajxloaderimg_src + '" alt="loading" width="16" height="16" />';

var iclHaltSave = false; // use this for multiple 'submit events'
var iclSaveForm_success_cb = [];

function iclSaveForm() {

  if (iclHaltSave) {
    return false;
  }
  var form_name = jQuery(this).attr('name');
  jQuery('form[name="' + form_name + '"] .icl_form_errors').html('').hide();
  var ajx_resp = jQuery('form[name="' + form_name + '"] .icl_ajx_response').attr('id');
  fadeInAjxResp('#' + ajx_resp, icl_ajxloaderimg);
  var serialized_form_data = jQuery(this).serialize();
  jQuery.ajax({
    type: "POST",
    url: icl_ajx_url,
    data: "icl_ajx_action=" + jQuery(this).attr('name') + "&" + serialized_form_data,
    success: function (msg) {
      var spl = msg.split('|');
      if (parseInt(spl[0]) == 1) {
        fadeInAjxResp('#' + ajx_resp, icl_ajx_saved);
        for (var i = 0; i < iclSaveForm_success_cb.length; i++) {
          iclSaveForm_success_cb[i](jQuery('form[name="' + form_name + '"]'), spl);
        }
        if (form_name == 'icl_slug_translation' ||
          form_name == 'wpml_ls_settings_form' ||
          form_name == 'icl_custom_posts_sync_options' ||
          form_name == 'icl_custom_tax_sync_options'
        ) {
          localStorage.setItem('wpml-mlcs-last-form-id', form_name);
          location.reload(true);
        }
        var action = this.data.split('&')[0];
        action = action.split('=')[1];
        wpmlCustomEvent('icl-save-form-' + action);
      } else {
        var icl_form_errors = jQuery('form[name="' + form_name + '"] .icl_form_errors');
        var error_html = (typeof spl[1] != 'undefined') ? spl[1] : spl[0];
        icl_form_errors.html(WPML_core.purify(error_html));
        icl_form_errors.fadeIn();
        fadeInAjxResp('#' + ajx_resp, icl_ajx_error, true);
      }
    }
  });
  return false;
}

function iclDismissHelp() {
  var thisa = jQuery(this);
  jQuery.ajax({
    type: "POST",
    url: icl_ajx_url,
    data: "icl_ajx_action=dismiss_help&_icl_nonce=" + WPML_core.sanitize(jQuery('#icl_dismiss_help_nonce').val()),
    success: function (msg) {
      thisa.closest('#message').fadeOut();
    }
  });
  return false;
}

function iclDismissUpgradeNotice() {
  var thisa = jQuery(this);
  jQuery.ajax({
    type: "POST",
    url: icl_ajx_url,
    data: "icl_ajx_action=dismiss_upgrade_notice&_icl_nonce=" + WPML_core.sanitize(jQuery('#_icl_nonce_dun').val()),
    success: function (msg) {
      thisa.parent().parent().fadeOut();
    }
  });
  return false;
}

function iclToggleShowTranslations() {
  jQuery('a.icl_toggle_show_translations').toggle();
  jQuery('#icl_translations_table').toggle();
  jQuery.ajax({
    type: "POST",
    url: icl_ajx_url,
    data: "icl_ajx_action=toggle_show_translations&_icl_nonce=" + WPML_core.sanitize(jQuery('#_icl_nonce_tst').val())
  });
  return false;
}

function icl_copy_from_original(lang, trid) {
  jQuery('#icl_cfo').after(icl_ajxloaderimg).prop('disabled', true);

  //has visual = set to normal non-html editing mode
  var ed;
  var content_type = (typeof tinyMCE !== 'undefined' && (ed = tinyMCE.get('content')) && !ed.isHidden() && ed.hasVisual === true) ? 'rich' : 'html';
  var excerpt_type = (typeof tinyMCE !== 'undefined' && (ed = tinyMCE.get('excerpt')) && !ed.isHidden() && ed.hasVisual === true) ? 'rich' : 'html';

  // figure out all available editors and their types
  jQuery.ajax({
    type: "POST",
    dataType: 'json',
    url: icl_ajx_url,
    data: "icl_ajx_action=copy_from_original&lang=" + lang + '&trid=' + trid + '&content_type=' + content_type + '&excerpt_type='
      + excerpt_type + '&_icl_nonce=' + WPML_core.sanitize(jQuery('#_icl_nonce_cfo_' + trid).val()),
    success: function (msg) {
      if (msg.error) {
        alert(msg.error);
      } else {
        try {
          if (msg.content) {
            if (typeof tinyMCE !== 'undefined' && (ed = tinyMCE.get('content')) && !ed.isHidden()) {
              ed.focus();
              if (tinymce.isIE) {
                ed.selection.moveToBookmark(tinymce.EditorManager.activeEditor.windowManager.bookmark);
              }
              ed.execCommand('mceInsertContent', false, msg.content);
            } else if (wpml_get_block_editor()) {
              wp.data.dispatch('core/editor').resetBlocks(wp.blocks.parse(msg.content));
            } else {
              wpActiveEditor = 'content';
              edInsertContent(edCanvas, msg.content);
            }

          }
          if (typeof msg.title !== "undefined") {
            if (wpml_get_block_editor()) {
              wp.data.dispatch('core/editor').editPost({title: msg.title});
            } else {
              jQuery('#title-prompt-text').hide();
              jQuery('#title').val(msg.title);
            }
          }
          //handling of custom fields
          //these have to be of array type with the indexes editor_type editor_name and value
          //possible types are editor or text
          //in case of text te prompt to be removed might have to be provided
          for (var element in msg.builtin_custom_fields) {
            if (msg.builtin_custom_fields.hasOwnProperty(element) && msg.builtin_custom_fields[element].editor_type === 'editor') {
              if (typeof tinyMCE !== 'undefined' && (ed = tinyMCE.get(msg.builtin_custom_fields[element].editor_name)) && !ed.isHidden()) {
                ed.focus();
                if (tinymce.isIE) {
                  ed.selection.moveToBookmark(tinymce.EditorManager.activeEditor.windowManager.bookmark);
                }
                ed.execCommand('mceInsertContent', false, msg.builtin_custom_fields[element].value);
              } else {
                wpActiveEditor = msg.builtin_custom_fields[element].editor_name;
                edInsertContent(edCanvas, msg.builtin_custom_fields[element].value);
              }
            } else {
              jQuery('#' + msg.builtin_custom_fields[element].editor_name).val(msg.builtin_custom_fields[element].value);
            }
          }

          if (typeof msg.external_custom_fields !== "undefined") {
            wpml_copy_external_custom_fields_from_original(msg.external_custom_fields);
          }
        } catch (err) {
        }
      }
      jQuery('#icl_cfo').next().fadeOut();
    }
  });

  return false;
}

function wpml_get_block_editor() {
  return window._wpLoadBlockEditor || window._wpLoadGutenbergEditor;
}

function wpml_copy_external_custom_fields_from_original(custom_fields) {
  var translation_already_contains_custom_fields = jQuery("#postcustomstuff #the-list tr input").length > 0;
  if (translation_already_contains_custom_fields) {
    return;
  }

  var container = jQuery("#newmeta");
  var meta_key_field = container.find("#metakeyselect");
  var meta_value_field = container.find("#metavalue");
  var add_button = container.find("#newmeta-submit");

  custom_fields.forEach(function (item) {
    meta_key_field.val(item.name);
    meta_value_field.val(item.value);
    add_button.click();
  });
}

function icl_make_translatable() {
  var that = jQuery(this);
  jQuery(this).prop('disabled', true);
  jQuery('#icl_div_config').find('.icl_form_success').hide();
  var iclMakeTranslatable = jQuery('[name=icl_make_translatable]:checked');
  var translate_input = WPML_core.sanitize(iclMakeTranslatable.val()).split(',');
  var translate = parseInt(translate_input[1]);
  var custom_post = translate_input[0];
  var custom_taxs_on = [];
  var custom_taxs_off = [];
  jQuery(".icl_mcs_custom_taxs").each(function () {
    if (jQuery(this).prop('checked')) {
      custom_taxs_on.push(WPML_core.sanitize(jQuery(this).val()));
    } else {
      custom_taxs_off.push(WPML_core.sanitize(jQuery(this).val()));
    }

  });

  var cfnames = [];
  var cfvals = [];
  jQuery('.icl_mcs_cfs:checked').each(function () {
    if (!jQuery(this).prop('disabled')) {
      cfnames.push(jQuery(this).attr('name').replace(/^icl_mcs_cf_/, ''));
      cfvals.push(WPML_core.sanitize(jQuery(this).val()));
    }
  });

  jQuery.post(location.href,
    {
      'post_id': WPML_core.sanitize(jQuery('#post_ID').val()),
      'icl_action': 'icl_mcs_inline',
      'custom_post': custom_post,
      'translate': translate,
      'custom_taxs_on[]': custom_taxs_on,
      'custom_taxs_off[]': custom_taxs_off,
      'cfnames[]': cfnames,
      'cfvals[]': cfvals,
      '_icl_nonce': WPML_core.sanitize(jQuery('#_icl_nonce_imi').val())

    },
    function (data) {
      that.prop('disabled', false);
      if (translate) {
        var iclDiv = jQuery('#icl_div');
        if (iclDiv.length > 0) {
          iclDiv.remove();
        }
        var prependTo = jQuery('#side-sortables');
        prependTo = prependTo.html() ? prependTo : jQuery('#normal-sortables');
        prependTo.prepend(
          '<div id="icl_div" class="postbox">' + jQuery(data).find('#icl_div').html() + '</div>'
        );
        jQuery('#icl_mcs_details').html(jQuery(data).find('#icl_mcs_details').html());
      } else {
        jQuery('#icl_div').hide();
        jQuery('#icl_mcs_details').html('');
      }
      jQuery('#icl_div_config').find('.icl_form_success').fadeIn();

      WPMLMetaBox.refresh.refreshMetaBox();
    }
  );

  return false;
}

function icl_hide_user_notice() {
  var notice = jQuery(this).attr('href').replace(/^#/, '');
  var thisa = jQuery(this);

  jQuery.ajax({
    type: "POST",
    dataType: 'json',
    url: icl_ajx_url,
    data: "icl_ajx_action=save_user_preferences&user_preferences[notices][" + notice + "]=1&_icl_nonce=" + WPML_core.sanitize(jQuery('#_icl_nonce_sup').val()),
    success: function (msg) {
      thisa.parent().parent().fadeOut();
    }
  });

  return false;
}

function icl_cf_translation_preferences_submit(cf, obj) {
  jQuery.ajax({
    type: 'POST',
    url: ajaxurl,
    data: 'action=wpml_ajax&icl_ajx_action=wpml_cf_translation_preferences&translate_action=' +
      WPML_core.sanitize(obj.parent().children('input:[name="wpml_cf_translation_preferences[' + cf + ']"]:checked').val()) + '&' +
      WPML_core.sanitize(obj.parent().children('input:[name="wpml_cf_translation_preferences_data_' + cf + '"]').val()) +
      '&_icl_nonce = ' + WPML_core.sanitize(jQuery('#_icl_nonce_cftpn').val()),
    cache: false,
    error: function (html) {
      jQuery('#wpml_cf_translation_preferences_ajax_response_' + cf).html('Error occured');
    },
    beforeSend: function (html) {
      jQuery('#wpml_cf_translation_preferences_ajax_response_' + cf).html(icl_ajxloaderimg);
    },
    success: function (html) {
      jQuery('#wpml_cf_translation_preferences_ajax_response_' + cf).html(WPML_core.purify(html));
    },
    dataType: 'html'
  });

}

WPML_core.redirectUploadsOnLangParam = function () {
  var path = WPML_core.sanitize(window.location.pathname),
    upload_screen_file = 'upload.php',
    has_lang_param = 1 === window.location.search.search('lang');

  if (path.slice(upload_screen_file.length * -1) === upload_screen_file && has_lang_param) {
    window.location = path;
  }
};
jQuery('ready', WPML_core.redirectUploadsOnLangParam());
