jQuery(document).ready(function($) {
	//Dismiss Review Notice
	jQuery(document).on('click', '.cff_notice_dismiss', function(event) {
		event.preventDefault();
		$.ajax({
			url : cffA.ajax_url,
			type : 'post',
			data : {
				action : 'cff_review_notice_dismiss',
				cff_nonce: cffA.cff_nonce
			}
		});
		const elem = jQuery(this);
		setTimeout(function() {
			const url = elem.attr('href');
			if(url) {
				const target = elem.attr('target') || '_self';
				window.open(url, target);
			}
		}, 100);
	});
	//Tooltips
	jQuery('#cff-admin .cff-tooltip-link').on('click', function(){
		jQuery(this).closest('tr, h3, div').find('.cff-tooltip').slideToggle();
	});

	//Toggle Access Token field
	if( jQuery('#cff_show_access_token').is(':checked') ) jQuery('.cff-access-token-hidden').show();
	jQuery('#cff_show_access_token').on('change', function(){
		jQuery('.cff-access-token-hidden').fadeToggle();
	});

	// Focus the license section on click license expired notice button
	jQuery('#sbFocusLicenseSection').on('click', function() {
		jQuery('.sb-tab-box.sb-license-box').addClass('sb-focus-box-section');

		setTimeout(function() {
			jQuery('.sb-tab-box.sb-license-box').removeClass('sb-focus-box-section');
		}, 2000);
	});

	// Get the URL parameters
	const urlSearchParams = new URLSearchParams(window.location.search);
	const params = Object.fromEntries(urlSearchParams.entries());

	// Check if the URL has license section to focus
	if ( params.focus === "license" ) {
		jQuery('.sb-tab-box.sb-license-box').addClass('sb-focus-box-section');

		setTimeout(function() {
		jQuery('.sb-tab-box.sb-license-box').removeClass('sb-focus-box-section');
		}, 2000);
	}

	//Check Access Token length
	jQuery("#cff_access_token").on('change', function() {
		var cff_token_string = jQuery('#cff_access_token').val(),
			cff_token_check = cff_token_string.indexOf('|');

  		if ( (cff_token_check == -1) && (cff_token_string.length < 50) && (cff_token_string.length !== 0) ) {
  			jQuery('.cff-profile-error.cff-access-token').fadeIn();
  		} else {
  			jQuery('.cff-profile-error.cff-access-token').fadeOut();
  		}

	});

	$('body').on('click','.cff-dismissible .notice-dismiss',function() {
		$.ajax({
			url : cffA.ajax_url,
			type : 'post',
			data : {
				action : 'cff_dismiss_custom_cssjs_notice',
				cff_nonce: cffA.cff_nonce
			},
			success : function(data) {
			},
			error : function(e)  {
				console.log(e);
			}
		});
	});

	//The "cff_ppca_access_token_invalid" transient is set if the access token doesn't match the ID specified. Use an Ajax call to check whether that transient is set, and if so, then displays a notice under the access token field. This used so we don't need to make an API call every time the page loads. It stores the value in this transient and checks it via ajax.
	$.ajax({
		url : cffA.ajax_url,
		type : 'get',
		data : {
			action : 'cff_ppca_token_check_flag',
			cff_nonce: cffA.cff_nonce
		},
		success : function(data) {
			if( data == '1' ) $('.cff-ppca-check-notice.cff-error').show();
		},
		error : function(e)  {
			console.log(e);
		}
	}); // ajax call

	//If no transient exists (eg. after the settings are saved) then check the API to see whether the ID and token match
	if( typeof jQuery('#cff_access_token').attr('data-check-ppca') !== 'undefined' ){

		var page_id = $('#cff-admin #cff_page_id').val(),
			access_token =  $('#cff-admin #cff_access_token').val();

		if( page_id.indexOf(',') == -1 && access_token.indexOf(',') == -1 ){
			var ppca_check_url = 'https://graph.facebook.com/v8.0/'+page_id+'/posts?limit=1&access_token='+access_token;

			$.ajax({
		        url: ppca_check_url,
		        type: 'GET',
		        dataType: "jsonp",
		        cache: false,
		        success: function(data) {

		        	if (typeof data.error !== 'undefined') {
		        		if( data.error.message.indexOf('Public Content') !== -1 ){

		        			//If the API response shows a PPCA error then show the notice below the access token field
		        			$('.cff-ppca-check-notice.cff-error').show();

		        			//Store the API response in a transient which is then checked above on line 29
		        			$.ajax({
								url : cffA.ajax_url,
								type : 'post',
								data : {
									action : 'cff_ppca_token_set_flag'
								},
								success : function(data) {
									//Access token transient set
								},
								error : function(e)  {
									console.log(e);
								}
							}); // ajax call

		        		}
		        	} else {
		        		//If the API response shows a good token then display a success notice instead
		        		$('#cff-admin #cff_access_token').after('<div class="cff-ppca-check-notice cff-success" style="display: block;"><i class="fa fa-check-circle"></i>&nbsp; Valid Access Token</div>');
		        	}

		        },
		        error: function(xhr,textStatus,e) {
		        	console.log(e);

		            return;
		        }

		    }); //End ajax

		}

	}

	//Is this a page, group or profile?
	var cff_page_type = jQuery('.cff-page-type select').val(),
		$cff_page_type_options = jQuery('.cff-page-options'),
		$cff_profile_error = jQuery('.cff-profile-error.cff-page-type');

	//Should we show anything initially?
	if(cff_page_type !== 'page') $cff_page_type_options.hide();
	if(cff_page_type == 'profile') $cff_profile_error.show();

	//When page type is changed show the relevant item
	jQuery('.cff-page-type').on('change', function(){
		cff_page_type = jQuery('.cff-page-type select').val();

		if( cff_page_type !== 'page' ) {
			$cff_page_type_options.fadeOut();
			if( cff_page_type == 'profile' ) {
					$cff_profile_error.show();
				} else if( cff_page_type == 'group' ) {
					$cff_profile_error.hide();
				} else {
					$cff_profile_error.hide();
				}

		} else {
			$cff_page_type_options.fadeIn();
			$cff_profile_error.hide();
		}
	});


	//PHOTOS ONLY
	//When 'Display photos from your Photos page' is checked then show the options
	var cff_photo_source = jQuery('#cff_photos_source').val();

	//Should we show anything initially?
	if(cff_photo_source == 'timeline') jQuery('.cff-photo-source-options').hide();

	jQuery('#cff_photos_source').on('change', function(){
		cff_photo_source = jQuery(this).val();

		if( cff_photo_source == 'photospage' ) {
			jQuery('.cff-photo-source-options').show();
		} else {
			jQuery('.cff-photo-source-options').hide();
		}
	});

	//ALBUMS ONLY
	//When 'Dispay albums from your Photos page' is checked then show the options
	var cff_album_source = jQuery('#cff_albums_source').val();

	//Should we show anything initially?
	if(cff_album_source == 'timeline') jQuery('.cff-album-source-options').hide();

	jQuery('#cff_albums_source').on('change', function(){
		cff_album_source = jQuery(this).val();

		if( cff_album_source == 'photospage' ) {
			jQuery('.cff-album-source-options').slideDown();
		} else {
			jQuery('.cff-album-source-options').slideUp();
		}
	});

	//VIDEOS ONLY
	//When 'Dispay videos from your Videos page' is checked then show the options
	var cff_video_source = jQuery('#cff_videos_source').val();

	//Should we show anything initially?
	if(cff_video_source == 'timeline') jQuery('.cff-video-source-options').hide();

	jQuery('#cff_videos_source').on('change', function(){
		cff_video_source = jQuery(this).val();

		if( cff_video_source == 'videospage' ) {
			jQuery('.cff-video-source-options').show();
		} else {
			jQuery('.cff-video-source-options').hide();
		}
	});

	//EVENTS ONLY
	var cff_event_source = jQuery('#cff_events_source').val();

	//Should we show anything initially?
	if(cff_event_source == 'timeline') jQuery('.cff-events-source-options').hide();

	jQuery('#cff_events_source').on('change', function(){
		cff_event_source = jQuery(this).val();

		if( cff_event_source == 'eventspage' ) {
			jQuery('.cff-events-source-options').show();
		} else {
			jQuery('.cff-events-source-options').hide();
		}
	});


	//Show narrow option when Full-width layout is selected
	function toggleMediaOptions(){
		if( $('.cff-full').hasClass('cff-layout-selected') ){
			$('.cff-media-position').show();
		} else {
			$('.cff-media-position').hide();
		}
	}
	toggleMediaOptions();



	//Choose events source
	var $cff_events_only_options = jQuery('.cff-events-only-options'),
		checked = jQuery("#post-types input.cff-post-type:checkbox:checked");

	//Hide page source option initially
	$cff_events_only_options.hide();

	//Show if only events are checked
	if (checked.length === 1 && checked[0].id === 'cff_show_event_type') {
		$cff_events_only_options.slideDown();
	}


	//Albums only
	var $cff_albums_only_options = jQuery('.cff-albums-only-options');

	//Hide page source option initially
	$cff_albums_only_options.hide();

	//Show if only events are checked
	if (checked.length === 1 && checked[0].id === 'cff_show_albums_type') {
		$cff_albums_only_options.slideDown();
	}


	//Photos only
	var $cff_photos_only_options = jQuery('.cff-photos-only-options');

	//Hide page source option initially
	$cff_photos_only_options.hide();

	//Show if only events are checked
	if (checked.length === 1 && checked[0].id === 'cff_show_photos_type') {
		$cff_photos_only_options.slideDown();
	}


	//Videos only
	var $cff_videos_only_options = jQuery('.cff-videos-only-options');

	//Hide page source option initially
	$cff_videos_only_options.hide();

	//Show if only videos are checked
	if (checked.length === 1 && checked[0].id === 'cff_show_video_type') {
		$cff_videos_only_options.slideDown();
	}


	//On change check which post type is checked
	jQuery("#post-types").on('change', function() {
		var checked = jQuery("#post-types input.cff-post-type:checkbox:checked");

		if (checked.length === 1 && checked[0].id === 'cff_show_event_type') {
	        $cff_events_only_options.slideDown();
	    } else if (checked.length === 1 && checked[0].id === 'cff_show_albums_type') {
	        $cff_albums_only_options.slideDown();
	    } else if (checked.length === 1 && checked[0].id === 'cff_show_photos_type') {
	        $cff_photos_only_options.slideDown();
	    } else if (checked.length === 1 && checked[0].id === 'cff_show_video_type') {
	        $cff_videos_only_options.slideDown();
	    } else {
	        $cff_events_only_options.slideUp();
	        $cff_albums_only_options.slideUp();
	        $cff_photos_only_options.slideUp();
	        $cff_videos_only_options.slideUp();
	    }
	});

	//Header Type Selection
	var cff_header_type = jQuery('.cff-header-type select').val(),
	$cff_facebook_header_options = jQuery('.cff-facebook-header'),
	$cff_text_header_options = jQuery('.cff-text-header');

	//Should we show anything initially?
	if(cff_header_type !== 'visual') $cff_facebook_header_options.hide();
	if(cff_header_type !== 'text') $cff_text_header_options.hide();

	//When Header type is changed show the relevant item
	jQuery('.cff-header-type').on('change', function(){
		cff_header_type = jQuery('.cff-header-type select').val();

		if( cff_header_type !== 'visual' ) {
			$cff_facebook_header_options.hide();
			$cff_text_header_options.show();
		} else {
			$cff_facebook_header_options.show();
			$cff_text_header_options.hide();
		}
	});


	//Header icon
	//Icon type
	//Check the saved icon type on page load and display it
	jQuery('#cff-header-icon-example').removeClass().addClass('fa fa-' + jQuery('#cff-header-icon').val() );
	//Change the header icon when selected from the list
	jQuery('#cff-header-icon').on('change', function() {
	    var $self = jQuery(this);

	    jQuery('#cff-header-icon-example').removeClass().addClass('fa fa-' + $self.val() );
	});

	//Test Facebook API connection button
	jQuery('#cff-api-test').on('click', function(e){
		e.preventDefault();
		//Show the JSON
		jQuery('#cff-api-test-result textarea').css('display', 'block');
	});


	//If 'Others only' is selected then show a note
	var $cffOthersOnly = jQuery('#cff-others-only');

	if ( jQuery("#cff_show_others option:selected").val() == 'onlyothers' ) $cffOthersOnly.show();

	jQuery("#cff_show_others").on('change', function() {
		if ( jQuery("#cff_show_others option:selected").val() == 'onlyothers' ) {
			$cffOthersOnly.show();
		} else {
			$cffOthersOnly.hide();
		}
	});

	//Selecting a post layout
	jQuery('.cff-layout').on('click', function(){
        var $self = jQuery(this);
        $self.addClass('cff-layout-selected').find('#cff_preset_layout').attr('checked', 'checked');
        $self.siblings().removeClass('cff-layout-selected');
        toggleMediaOptions();
    });

    //Selecting a post style
	jQuery('.cff-post-style').on('click', function(){
        var $self = jQuery(this);
        $('.cff_post_style').trigger('change');
        $self.addClass('cff-layout-selected').find('#cff_post_style').attr('checked', 'checked');
        $self.siblings().removeClass('cff-layout-selected');
    });
    function cffChangePostStyleSettings() {
        setTimeout(function(){
            jQuery('.cff-post-style-settings').hide();
            jQuery('.cff-post-style-settings.cff-'+jQuery('.cff_post_style:checked').val()).show();
        }, 1);
    }
    cffChangePostStyleSettings();
    jQuery('.cff_post_style').on('change', cffChangePostStyleSettings);

    //Add the color picker
	if( jQuery('.cff-colorpicker').length > 0 ) jQuery('.cff-colorpicker').wpColorPicker();


	//Mobile width
	var cff_feed_width = jQuery('#cff-admin #cff_feed_width').val(),
			$cff_width_options = jQuery('#cff-admin #cff_width_options');

	if (typeof cff_feed_width !== 'undefined') {
		//Show initially if a width is set
		if(cff_feed_width.length > 1 && cff_feed_width !== '100%') $cff_width_options.show();

		jQuery('#cff_feed_width').on('change', function(){
			cff_feed_width = jQuery(this).val();

			if( cff_feed_width.length < 2 || cff_feed_width == '100%' ) {
				$cff_width_options.slideUp(200);
			} else {
				$cff_width_options.slideDown(200);
			}
		});
	}

	function cffToggleNummobile() {
		if (jQuery('#cff_show_num_mobile').is(':checked')) {
			jQuery('#cff_show_num_mobile').closest('td').find('.cff-mobile-col-settings').slideDown();
		} else {
			jQuery('#cff_show_num_mobile').closest('td').find('.cff-mobile-col-settings').slideUp(function(){
				jQuery('#cff_num_mobile').val('');
			});
		}
	}
	cffToggleNummobile();
	jQuery('#cff_show_num_mobile').on('change', cffToggleNummobile);

	//Scroll to hash for quick links
  jQuery('#cff-admin a').on('click', function() {
    if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
      var target = jQuery(this.hash);
      target = target.length ? target : this.hash.slice(1);
      if (target.length) {
        jQuery('html,body').animate({
          scrollTop: target.offset().top
        }, 500);
        return false;
      }
    }
  });

  //Shortcode tooltips
  jQuery('#cff-admin label').on('click', function(){
  	var $el = jQuery(this);
    var $cff_shortcode = $el.siblings('.cff_shortcode');
    if($cff_shortcode.is(':visible')){
      $el.siblings('.cff_shortcode').css('display','none');
    } else {
      $el.siblings('.cff_shortcode').css('display','block');
    }
  });
  jQuery('#cff-admin th').on('mouseenter', function(){
    if( jQuery(this).find('.cff_shortcode').length > 0 ){
      jQuery(this).find('label').append('<code class="cff_shortcode_symbol">[]</code>');
    }
  }).on('mouseleave', function(){
    jQuery(this).find('.cff_shortcode_symbol').remove();
  });
  jQuery('#cff-admin label').on('mouseenter', function(){
    if( jQuery(this).siblings('.cff_shortcode').length > 0 ){
      jQuery(this).attr('title', 'Click for shortcode option');
    }
   }).on('mouseleave', function(){});


  //Caching options
	if( jQuery('#cff_caching_type_page').is(':checked') ) {
		jQuery('.cff-caching-cron-options').hide();
	} else {
		jQuery('.cff-caching-page-options').hide();
	}

	$('input[type=radio][name=cff_caching_type]').on('change', function() {
      if (this.value == 'page') {
      	jQuery('.cff-caching-cron-options').slideUp();
      	jQuery('.cff-caching-page-options').slideDown();
      }
      else if (this.value == 'background') {
      	jQuery('.cff-caching-page-options').slideUp();
      	jQuery('.cff-caching-cron-options').slideDown();
      }
  });


  //Should we show the caching time settings?
	var cff_cache_cron_interval = jQuery('#cff_cache_cron_interval').val(),
			$cff_caching_time_settings = jQuery('#cff-caching-time-settings');

	//Should we show anything initially?
	if(cff_cache_cron_interval == '30mins' || cff_cache_cron_interval == '1hour') $cff_caching_time_settings.hide();

	jQuery('#cff_cache_cron_interval').on('change', function(){
		cff_cache_cron_interval = jQuery('#cff_cache_cron_interval').val();

		if(cff_cache_cron_interval == '30mins' || cff_cache_cron_interval == '1hour'){
			$cff_caching_time_settings.hide();
		} else {
			$cff_caching_time_settings.show();
		}
	});


	//Post limit manual setting
	var cff_limit_setting = jQuery('#cff_limit_setting').val(),
			cff_post_limit = jQuery('#cff_post_limit').val(),
			$cff_limit_manual_settings = jQuery('#cff_limit_manual_settings');
	if( typeof cff_post_limit === 'undefined' ) cff_post_limit = '';

	//Should we show anything initially?
	if(cff_limit_setting == 'auto') $cff_limit_manual_settings.hide();
	if(cff_post_limit.length > 0){
		$cff_limit_manual_settings.show();
		jQuery('#cff_limit_setting').val('manual');
	}

	jQuery('#cff_limit_setting').on('change', function(){
		cff_limit_setting = jQuery('#cff_limit_setting').val();

		if(cff_limit_setting == 'auto'){
			$cff_limit_manual_settings.hide();
			jQuery('#cff_post_limit').val('');
		} else {
			$cff_limit_manual_settings.show();
		}
	});


	//Open/close the expandable option sections
	jQuery('.cff-expandable-options').hide();
	jQuery('.cff-expand-button a').on('click', function(e){
		e.preventDefault();
		var $self = jQuery(this);
		$self.parent().next('.cff-expandable-options').toggle();
		if( $self.text().indexOf('Show') !== -1 ){
			$self.text( $self.text().replace('Show', 'Hide') );
		} else {
			$self.text( $self.text().replace('Hide', 'Show') );
		}
	});


	//Support tab show video
	jQuery('#cff-play-support-video').on('click', function(e){
		e.preventDefault();
		jQuery('#cff-support-video').show().attr('src', jQuery('#cff-support-video').attr('src')+'&amp;autoplay=1' );
	});

	//Facebook login
	$('#cff_fb_login').on('click', function(){
		$('#cff_fb_login_modal').show();
	});
	$('#cff_admin_cancel_btn').on('click', function(){
		$('#cff_fb_login_modal').hide();
	});
	$('.cff-modal-close, #cff-close-modal-primary-button').on('click', function(){
		$('.cff_modal_tokens').hide();
	});
	$('#cff_fb_show_tokens').on('click', function(){
		$('.cff_modal_tokens, .cff-groups-list').show();
		$('#cff-group-installation').hide();
	});

	//Select a page for token
	if ($('.cff-page-selected').length) {
		$('#cff-insert-token, .cff-insert-reviews-token, .cff-insert-both-tokens').attr('disabled',false);
	}
	$('.cff-managed-page').on('click', function(){

		$('#cff_token_expiration_note').show();
		var $self = $(this);
		if( $self.hasClass('cff-page-selected') ){
			$self.removeClass('cff-page-selected');
		} else {
			$self.addClass('cff-page-selected');
		}

		var groupNotice = false, $groupNoticeHTML = $('.cff-note-group-notice');
		$('.cff-managed-page[data-pagetype="group"]').each(function(){
			if($(this).hasClass('cff-page-selected'))
				groupNotice = true;
		});
		if(groupNotice){
			$groupNoticeHTML.show();
		}else{
			$groupNoticeHTML.hide();
		}
		if ($('.cff-page-selected').length) {
			$('#cff-insert-token, .cff-insert-reviews-token, .cff-insert-both-tokens').attr('disabled',false);
		} else {
			$('#cff-insert-token, .cff-insert-reviews-token, .cff-insert-both-tokens').attr('disabled',true);
		}


	});

	//Connect Accounts array object
	var cff_connected_accounts = {},
		cff_multifeed_enabled = false,
		cff_remove_primary_text = 'Remove as Primary Feed',
    	cff_add_primary_text = 'Make Primary Feed';

    if( $('#cff_page_id').hasClass('cff_multifeed_enabled') ) cff_multifeed_enabled = true;
    if( cff_multifeed_enabled ){
    	cff_remove_primary_text = 'Remove from Primary Feed';
    	cff_add_primary_text = 'Add to Primary Feed';
    }

	//If there are accounts displayed then assign them to the connected accounts array
	var cff_connected_accounts_val = $('#cff_connected_accounts').val();
	if( cff_connected_accounts_val !== '' && cff_connected_accounts_val !== '{}' && typeof cff_connected_accounts_val !== 'undefined' ){

		cff_connected_accounts = cff_connected_accounts_val.replace(/\\"/g, '"').replace('loadcommentsjs=true','');

		cff_connected_accounts = JSON.parse(cff_connected_accounts);

		createAccountHTML(cff_connected_accounts);
	}

	//Insert Page Access Token
	$('#cff-insert-token, #cff-insert-all-tokens').on('click', function(){
		if( $(this).hasClass('cff_connect_all') ) $('.cff-managed-page').addClass('cff-page-selected');

		var $selectedPage = $('.cff-page-selected'),
			selectedPageId = $selectedPage.attr('data-page-id'),
			selectedPageToken = $selectedPage.attr('data-token');

		//Add ID to setting
		if( $('#cff_page_id').val().trim() == '' ){
			$('#cff_page_id').val( selectedPageId ).addClass('cff-success');
			cffAddCurIdLabel($('.cff-page-selected').first().find('.cff-page-info-name').text(), $('.cff-page-selected').first().find('.cff-page-avatar').attr('src'));
		}

		//Add token to setting if it's emprty or needs to be replaced (ie. it results in an API error)
		if( $('#cff_access_token').val().trim() == '' || $('#cff_access_token').hasClass('cff-replace-token') ){
			//If multifeed then add ID to front so it's assigned to that ID in the feed
			if( $('#cff_page_id').hasClass('cff_multifeed_enabled') ) selectedPageToken = selectedPageId + ':' + selectedPageToken;

			$('#cff_access_token').val( selectedPageToken ).addClass('cff-success');
		}

		if( $(this).hasClass('cff-group-btn') ){
			$('.cff-groups-list').hide();
			$('#cff-group-installation').show();

			//Show directions for either group admin or member
			if( $('.cff-page-selected').hasClass('cff-group-admin') ){
				$('#cff-group-admin-directions').show();
				$('#cff-group-member-directions').hide();
			} else {
				$('#cff-group-admin-directions').hide();
				$('#cff-group-member-directions').show();
			}

			//Change page type to be group
			$('#cff_page_type').val('group');
			$('.cff-page-options').hide();

			//Dynamically create group edit link
			var cffGroupEditLink = 'https://facebook.com/groups/'+selectedPageId+'/edit';
			$('#cff-group-installation #cff-group-edit').attr('href', cffGroupEditLink);
		} else {
			$('.cff_modal_tokens').hide();
		}

		// cff_connected_accounts
		$('.cff-managed-pages').find('.cff-page-selected').each(function(){
			var $page = $(this);
			addConnectedAccounts(
				$page.attr('data-page-id'),
				$page.find('.cff-page-info-name').text(),
				$page.attr('data-pagetype'),
				$page.attr('data-token'),
				$page.find('.cff-page-avatar').attr('src')
			);

		});

		location.hash = "cffnomodal";
	});

	//Manually connect account
	//Step 1
	$('#cff_manual_account_button, #cff-admin .cff_manual_back').on('click', function(e){
		e.preventDefault();
		if( !$(this).hasClass('cff_manual_back') ) $('#cff_manual_account').toggle();
		$('#cff_manual_account_step_1').show();
		$('#cff_manual_account_step_2').hide();
	});
	//Step 2
	jQuery("#cff_manual_account_type").on('change', function() {
		cff_go_to_step_2();
	});
	$('#cff-admin .cff_manual_forward').on('click', function(){
		if( $("#cff_manual_account_type option:selected").val() ){
			cff_go_to_step_2();
		} else {
			$("#cff_manual_account_type").addClass('cff_error');
			setTimeout(function(){ $("#cff_manual_account_type").removeClass('cff_error'); }, 500);
		}
	});
	function cff_go_to_step_2(){
		$('#cff_manual_account_step_2').attr('class', 'cff_account_type_'+jQuery("#cff_manual_account_type option:selected").val() );

		$('#cff_manual_account_step_1').hide();
		$('#cff_manual_account_step_2').show();
	}
	//Add account
	$('#cff_manual_account_step_2 input[type=submit]').on('click', function(e){
		e.preventDefault();

		var $cff_manual_account = $('#cff_manual_account');

		addConnectedAccounts(
			$cff_manual_account.find('#cff_manual_account_id').val().replace(/"/g, ''),
			$cff_manual_account.find('#cff_manual_account_name').val().replace(/"/g, ''),
			$cff_manual_account.find('#cff_manual_account_type').val(),
			$cff_manual_account.find('#cff_manual_account_token').val().replace(/\W/g, ''),
			false
		);
	});

	//Only enable manual account submit button if ID/token fields have values
	$('#cff_manual_account_id, #cff_manual_account_token').on('input', function() {
		if( $('#cff_manual_account_id').val() == '' || $('#cff_manual_account_token').val() == '' ){
			$('#cff_manual_account_step_2 #submit').attr('disabled', true);
		} else {
			$('#cff_manual_account_step_2 #submit').removeAttr('disabled');
		}
	});

	//Show raw account data (can be used for exporting/importing accounts in bulk)
	$('#cff_export_accounts').on('click', function(e){
		e.preventDefault();
		$('#cff_export_accounts_wrap').toggle();
	});


	function addConnectedAccounts(id, name, pagetype, accesstoken, avatar=false){

		if( pagetype == 'page' ) avatar = '';

		id = cffStripURLParts(id);

		//Add to connected accounts array
		cff_connected_accounts[id] = {
			id: id,
			name: encodeURI( name ),
			pagetype: pagetype,
			accesstoken: accesstoken,
			avatar: avatar
		};

		if (typeof sbswCASubmit !== 'undefined' && $('#sbspf_admin').length) {
			sbswCASubmit(cff_connected_accounts);
		} else {
			//Update setting on page
			$('#cff_connected_accounts').val( JSON.stringify(cff_connected_accounts) );

			//Add HTML to page
			createAccountHTML(cff_connected_accounts);
		}

	}

	function removeConnectedAccount($account){
		//Remove account from array
		delete cff_connected_accounts[$account.attr('data-page-id')];

		//Update setting on page
		$('#cff_connected_accounts').val( JSON.stringify(cff_connected_accounts) );

		//Remove it from primary feed if it's in there
		removePrimaryAcount($account);

		//Remove account element from page
		$account.remove();
	}

	function cffStripURLParts(string){
		if (typeof string === 'undefined') {
			return '';
		}
		//If user pastes their full URL into the Page ID field then strip it out
		var cff_facebook_string = 'facebook.com',
			hasURL = (string.indexOf(cff_facebook_string) > -1);
		if (hasURL) {
			var stringArr = string.split('?')[0].replace(/\/$/, '').split('/');
			string = stringArr[stringArr.length-1].replace(/[\.\/]/,'');
		}

		return string;
	}

	function createAccountHTML(cff_connected_accounts){

		var accountsHTML = '';

		//Loop through accounts and create HTML
		for (var key in cff_connected_accounts) {
		    if (cff_connected_accounts.hasOwnProperty(key)) {

		        var id = cffStripURLParts(cff_connected_accounts[key]['id']),
		        	name = decodeURI(cff_connected_accounts[key]['name']),
		        	pagetype = cff_connected_accounts[key]['pagetype'],
		        	accesstoken = cff_connected_accounts[key]['accesstoken'],
		        	avatar = cff_connected_accounts[key]['avatar'],
		        	cff_account_active = '',
		        	no_avatar = false;

		        if( (!avatar || avatar == 'false' ) && pagetype == 'group' ) no_avatar = true;
		        if( !avatar || avatar == '' ) avatar = 'https://graph.facebook.com/'+id+'/picture';

		        //If it's in use then mark it as primary/active
		        if( $('#cff_page_id').val().indexOf(id) !== -1 ) cff_account_active = ' cff_account_active';

		        accountsHTML += '<div class="cff_connected_account cff_account_type_'+pagetype+cff_account_active+'" id="cff_connected_account_'+id+'" data-accesstoken="'+accesstoken+'" data-pagetype="'+pagetype+'" data-page-id="'+id+'">' +
                    '<div class="cff_ca_info">' +
                        '<div class="cff_ca_delete"><a href="JavaScript:void(0);" class="cff_delete_account"><i class="fa fa-times"></i><span class="cff_remove_text">Remove</span></a></div>'+
                        '<div class="cff_ca_username">';
                        ( no_avatar ) ? accountsHTML += '' : accountsHTML += '<img class="cff_ca_avatar" src="'+avatar+'">';
							accountsHTML += '<strong><span class="cff_ca_fullname">'+name+'</span><span class="cff_ca_pagetype">'+pagetype+' ID: '+id+'</span></strong>' +
                        '</div>' +
                        '<div class="cff_ca_actions">' +
							'<a href="JavaScript:void(0);" class="cff_make_primary">';
							if( cff_account_active !== '' ){
								accountsHTML += '<i class="fa fa-minus-circle" aria-hidden="true"></i>'+cff_remove_primary_text;
							} else {
								accountsHTML += '<i class="fa fa-plus-circle" aria-hidden="true"></i>'+cff_add_primary_text;
							}
							accountsHTML += '</a>';

							if( $('#cff_page_access_token').length && pagetype == 'page' ) accountsHTML += '<a href="JavaScript:void(0);" class="cff_make_reviews"><i class="fa fa-star" aria-hidden="true"></i>Use for Reviews Feed</a>';

							accountsHTML += '<a class="cff_ca_token_shortcode" href="JavaScript:void(0);"><i class="fa fa-chevron-circle-right" aria-hidden="true"></i>Add to another Feed</a>' +
                            '<p class="cff_ca_show_token"><a href="javascript:void(0);" id="cff_ca_show_token_'+id+'"><i class="fa fa-ellipsis-h" style="margin: 0; font-size: 12px;" aria-hidden="true"></i></a></p>' +
                        '</div>' +
                        '<div class="cff_ca_shortcode">' +
                            '<p>Copy and paste this shortcode into your page or widget area:<br>' +
                                '<code>[custom-facebook-feed account="'+id+'" pagetype="'+pagetype+'"]</code>' +
                            '</p>';
                        if( cff_multifeed_enabled ) accountsHTML += '<p>To add multiple accounts in the same feed, simply separate them using commas:<br>' +
								'<code>[custom-facebook-feed account="'+id+', account_2, account_3"]</code>' +
                            '</p>';
                        accountsHTML += '<p>Click <a href="https://smashballoon.com/custom-facebook-feed/docs/shortcodes/" target="_blank">here</a> to learn more about shortcodes</p>' +
                        '</div>' +
                        '<div class="cff_ca_accesstoken">' +
                            '<span class="cff_ca_token_label">Access Token:</span><input type="text" class="cff_ca_token" value="'+accesstoken+'" readonly="readonly" onclick="this.focus();this.select()" title="To copy, click the field then press Ctrl + C (PC) or Cmd + C (Mac).">' +
                        '</div>' +
                    '</div>' +
                '</div>';
		    }
		}

		//Add HTML to page
		$('#cff_connected_accounts_wrap').html(accountsHTML);

		//Add Raw Data button
		$('.cff_connected_actions').show();

	}

	function removePrimaryAcount($account){
		//Remove ID/token from fields
    	if( $account.hasClass('cff_account_active') ){

    		var selected_id = $account.attr('data-page-id'),
        		selected_token = $account.attr('data-accesstoken');

    		//Remove as primary account
    		cffLabelAsPrimary($account);

    		$('#cff_primary_account_label').hide();

    		if( cff_multifeed_enabled ){

    			//Find the ID from the removed account and remove it from the ID field
    			var updatedIdVal = $('#cff_page_id').val().replace(selected_id, '');
    			//Remove any stray commas left over
    			updatedIdVal = updatedIdVal.replace(',,', '').replace(' ,', '').replace(/^, |, $/g,'');

        		$('#cff_page_id').val( updatedIdVal ).removeClass('cff-success');

        		//Remove Token
        		// var updatedTokenVal = $('#cff_access_token').val().replace(selected_id+':'+selected_token, '').replace(selected_token, '');
        		var updatedTokenVal = $('#cff_access_token').val().replace(selected_id+':'+selected_token, '');
        		//Remove any stray commas left over
    			updatedTokenVal = updatedTokenVal.replace(',,', '').replace(' ,', '').replace(':,', ':').replace(/^, |, $/g,'');

        		$('#cff_access_token').val( updatedTokenVal ).removeClass('cff-success');


        	} else {

        		//Revert ID/token fields back to previous values
        		$('#cff_page_id').val( $('#cff_page_id').attr('data-page-id') ).removeClass('cff-success');
        		$('#cff_access_token').val( $('#cff_access_token').attr('data-accesstoken') ).removeClass('cff-success');

        	}
    	}
	}


	var $body = $('body');
	//Show Access Token
	$body.on('click', '.cff_ca_show_token a', function(e) {
		e.preventDefault();
        jQuery(this).closest('.cff_ca_info').find('.cff_ca_accesstoken').slideToggle(200);
    });
    $body.on('click', '.cff_ca_token_shortcode, .cff_make_primary, .cff_make_reviews', function (event) {
        event.preventDefault();
        var $clicked = $(event.target);
        //Show shortcode
        if( $clicked.hasClass('cff_ca_token_shortcode') ) {
            jQuery(this).closest('.cff_ca_info').find('.cff_ca_shortcode').slideToggle(200);
        }
        //Make Reviews account
        if( $clicked.hasClass('cff_make_reviews') ){
        	$('#cff_page_access_token').val( $clicked.closest('.cff_connected_account').attr('data-accesstoken') ).addClass('cff-success');
        }
        //Make primary account
        if( $clicked.hasClass('cff_make_primary') ){
        	var $selected_account = $clicked.closest('.cff_connected_account'),
        		selected_id = $selected_account.attr('data-page-id'),
        		selected_token = $selected_account.attr('data-accesstoken');


        	//Remove ID/token from fields
        	if( $selected_account.hasClass('cff_account_active') ){

        		removePrimaryAcount($selected_account);

	        //Add ID/token to fields
        	} else {

        		//Add as primary account
        		cffLabelAsPrimary($selected_account, true);

	        	//Add ID/token to fields
	        	if( cff_multifeed_enabled ){

	        		//Add ID to existing IDs already in field
	        		var id_sep = ', ',
	        			existing_id = $('#cff_page_id').val().trim(),
	        			existing_token = $('#cff_access_token').val().trim();

	        		if( existing_id == '' ) id_sep = '';
	        		$('#cff_page_id').val( existing_id + id_sep + selected_id ).addClass('cff-success');

	        		//Change to multiple token format
	        		var token_format = '';
	        		if( existing_token !== '' ) token_format += existing_token + ', ';
	        		token_format += selected_id + ':' + selected_token;

	        		$('#cff_access_token').val( token_format ).addClass('cff-success');

	        	} else {

	        		//Replace existing ID and token
	        		$('#cff_page_id').val( selected_id ).addClass('cff-success');
	        		$('#cff_access_token').val( selected_token ).addClass('cff-success');

	        		//Remove active account class from other accounts
	        		$selected_account.siblings().each(function(){
	        			cffLabelAsPrimary($(this));
	        		});

	        	}


        	}
        }
    });
    //Remove account
    $body.on('click', '.cff_delete_account', function(){
        removeConnectedAccount( $(this).closest('.cff_connected_account') );
    });

    //Change button label when adding/removing as primary account
    function cffLabelAsPrimary($account, makePrimary=false){
    	if( makePrimary ){
        	$account.addClass('cff_account_active').find('.cff_make_primary').html('<i class="fa fa-minus-circle" aria-hidden="true"></i>'+cff_remove_primary_text);

        	if( $account.length > 0 ) cffAddCurIdLabel($account.find('.cff_ca_fullname').text(), $account.find('.cff_ca_avatar').attr('src'));

    	} else {
    		$account.removeClass('cff_account_active').find('.cff_make_primary').html('<i class="fa fa-plus-circle" aria-hidden="true"></i>'+cff_add_primary_text);
    	}
    }

    function cffAddCurIdLabel(name, avatar){
    	var account_img = '',
    		account_name = '<span>' + name + '</span>';
    	if( avatar !== undefined ) account_img = '<img src="' + avatar + '" />';

    	$('#cff_primary_account_label').show().html( account_img + account_name );
    }

    //Label a primary account when page is first loaded
    var cff_current_page_id = $('#cff_page_id').val(),
    	cff_current_page_id_arr = [];
    if( typeof cff_current_page_id !== 'undefined' ) var cff_current_page_id_arr = cff_current_page_id.split(',');

    if( cff_current_page_id_arr.length > 1 ){
    	for (var i = 0; i < cff_current_page_id_arr.length; i++) {
		    cffLabelAsPrimary( $('#cff_connected_account_' + cffValidateID( cff_current_page_id_arr[i] ) ), true );
		}
    } else {
    	cffLabelAsPrimary( $('#cff_connected_account_' + cffValidateID( cff_current_page_id ) ), true );
    }
    //Make sure ID is a valid string
    function cffValidateID(id){
    	if( typeof id === 'undefined' || id == '' ) return;

    	//Remove slashes from end
    	id = cffStripURLParts( id.replace(/\/$/, "").trim() );
    	//Only return if it contains numbers/letters
    	if( id.match("^[A-Za-z0-9]+$") ) return id;
    }


	//Show the modal by default, but hide if the "cffnomodal" class is added to prevent it showing after saving settings
	if( location.hash !== '#cffnomodal' ){
		$('.cff_modal_tokens').removeClass('cffnomodal');
	}

	//Insert Reviews Token
	$('.cff-insert-reviews-token, .cff-insert-both-tokens').on('click', function(){
		if( $(this).hasClass('cff-insert-both-tokens') ){
			$('#cff_access_token').val( $('.cff-page-selected').attr('data-token') ).addClass('cff-success');
		}
		$('#cff_page_access_token').val( $('.cff-page-selected').attr('data-token') ).addClass('cff-success');
		$('.cff_modal_tokens').hide();
	});

	//Switch Page/Group app button in modal
	jQuery("#cff_login_type").on('change', function() {
		if ( jQuery("#cff_login_type option:selected").val() == 'group' ) {
			jQuery('#cff_page_app').hide();
			jQuery('#cff_group_app').css('display', 'inline-block');
		} else {
			jQuery('#cff_page_app').css('display', 'inline-block');
			jQuery('#cff_group_app').hide();
		}
	});

    //Load the admin share widgets
    $('#cff-admin-show-share-links').on('click', function(){
    	$(this).fadeOut();
        if( $('#cff-admin-share-links iframe').length == 0 ) $('#cff-admin-share-links').html('<a href="https://twitter.com/share" class="twitter-share-button" data-url="https://smashballoon.com/custom-facebook-feed/" data-text="Display your Facebook posts on your site your way using the Custom Facebook Feed WordPress plugin!" data-via="smashballoon" data-dnt="true">Tweet</a> <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?"http":"https";if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document, "script", "twitter-wjs");</script> <style type="text/css"> #twitter-widget-0{float: left; width: 82px !important;}.IN-widget{margin-right: 20px;}</style> <div id="fb-root" style="display: none;"></div><script>(function(d, s, id){var js, fjs=d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js=d.createElement(s); js.id=id; js.src="//connect.facebook.net/en_GB/sdk.js#xfbml=1&version=v2.0"; fjs.parentNode.insertBefore(js, fjs);}(document, "script", "facebook-jssdk"));</script> <div class="fb-like" data-href="https://smashballoon.com/custom-facebook-feed/" data-layout="button_count" data-action="like" data-show-faces="false" data-share="true" style="display: block; float: left; margin-right: 5px;"></div><script src="//platform.linkedin.com/in.js" type="text/javascript"> lang: en_US </script> <script type="IN/Share" data-url="https://smashballoon.com/custom-facebook-feed/"></script></div>');

        setTimeout(function(){
        	$('#cff-admin-share-links').addClass('cff-show');
        }, 500);
    });

    //Show/hide mobile column setting
    var cff_masonry_desktop_col = jQuery('#cff_masonry_desktop_col').val(),
		$cff_mobile_col_settings = jQuery('.cff-mobile-col-settings');
	if( typeof cff_post_limit === 'undefined' ) cff_masonry_desktop_col = '1';

	//Should we show anything initially?
	if( cff_masonry_desktop_col == '1' ) $cff_mobile_col_settings.hide();
	if( parseInt(cff_masonry_desktop_col) > 1 ){
		$cff_mobile_col_settings.show();
	}

	jQuery('#cff_masonry_desktop_col').on('change', function(){
		cff_cols_num = parseInt( jQuery('#cff_masonry_desktop_col').val() );

		if(cff_cols_num > 1){
			$cff_mobile_col_settings.slideDown(200);
		} else {
			$cff_mobile_col_settings.slideUp(200);
		}
	});

	//Group app setup screenshot
	jQuery('#cff-group-app-tooltip').on('mouseenter', function(){
	    jQuery('#cff-group-app-screenshot, .cff-group-app-screenshot').show();
	}).on('mouseleave',function(){
		jQuery('#cff-group-app-screenshot, .cff-group-app-screenshot').hide();
	});

	//Remove any duplicate groups
	jQuery('.cff-group-admin').each(function(){
		jQuery('.cff-groups-list #' + jQuery(this).attr('id') ).eq(1).hide();
	});

	//sb_instagram_enable_email_report
	function cffToggleEmail() {
		if (jQuery('#cff_enable_email_report').is(':checked')) {
			jQuery('#cff_enable_email_report').closest('td').find('.cff_box').slideDown();
		} else {
			jQuery('#cff_enable_email_report').closest('td').find('.cff_box').slideUp();
		}
	}cffToggleEmail();
	jQuery('#cff_enable_email_report').on('change', cffToggleEmail);
	if (jQuery('#cff-goto').length) {
		jQuery('#cff-goto').closest('tr').addClass('cff-goto');
		$('html, body').animate({
			scrollTop: $('#cff-goto').offset().top - 200
		}, 500);
	}

	jQuery('.cff-error-directions .cff-reconnect').on('click', function(){
		event.preventDefault();
		jQuery('.cff_admin_btn').trigger('click');
	});
	jQuery('.cff-clear-errors-visit-page').on('click', function(event) {
		event.preventDefault();
		var $btn = jQuery(this);
		$btn.prop( 'disabled', true ).addClass( 'loading' ).html('<i class="fa fa-spinner fa-spin" aria-hidden="true"></i>');
		window.location.href = $btn.attr('data-url');

	});

	/* removing padding */
	if (jQuery('#cff-admin-about').length) {
		jQuery('#wpcontent').css('padding', 0);
	}

	// clear resized
	var $cffClearResizedButton = $('#cff_reset_resized');

	$cffClearResizedButton.on('click', function(event) {
		event.preventDefault();

		jQuery('#cff-clear-cache-success').remove();
		jQuery(this).prop("disabled",true);

		$.ajax({
			url : cffA.ajax_url,
			type : 'post',
			data : {
				action : 'cff_reset_resized',
				cff_nonce: cffA.cff_nonce
			},
			success : function(data) {
				$cffClearResizedButton.prop('disabled',false);
				if(data=='1') {
					$cffClearResizedButton.after('<i id="cff-clear-cache-success" class="fa fa-check-circle cff-success"></i>');
				} else {
					$cffClearResizedButton.after('<span>error</span>');
				}
			}
		}); // ajax call
	}); // clear_comment_cache click

	jQuery('#cff-oembed-disable').on('click', function(e) {
		e.preventDefault();
		jQuery(this).addClass( 'loading' ).html('<i class="fa fa-spinner fa-spin" aria-hidden="true"></i>');
		jQuery.ajax({
			url: cffA.ajax_url,
			type: 'post',
			data: {
				action : 'cff_oembed_disable',
				cff_nonce: cffA.cff_nonce
			},
			success: function (data) {
				jQuery('#cff-oembed-disable').closest('p').html(data);
			}
		});
	});

	jQuery('.cff_show_gdpr_list').on('click', function(){
		jQuery(this).closest('div').find('.cff_gdpr_list').slideToggle();
	});

	//Selecting a post style
	jQuery('#cff_gdpr_setting').on('change', function(){
		cffCheckGdprSetting( jQuery(this).val() );
	});
	function cffCheckGdprSetting(option) {
		if( option == 'yes' ){
			jQuery('.cff_gdpr_yes').show();
			jQuery('.cff_gdpr_no, .cff_gdpr_auto').hide();
		}
		if( option == 'no' ){
			jQuery('.cff_gdpr_no').show();
			jQuery('.cff_gdpr_yes, .cff_gdpr_auto').hide();
		}
		if( option == 'auto' ){
			jQuery('.cff_gdpr_auto').show();
			jQuery('.cff_gdpr_yes, .cff_gdpr_no').hide();
		}
	}
	cffCheckGdprSetting(jQuery('#cff_gdpr_setting').val());

    //Add class to Pro menu item
    $('.cff_get_pro').parent().attr({'class':'cff_get_pro_highlight', 'target':'_blank'});


	//Click event for other plugins in menu
    $('.cff_get_sbr, .cff_get_sbi, .cff_get_cff, .cff_get_ctf, .cff_get_yt').parent().on('click', function(e){
        e.preventDefault();

		// remove the already opened modal
        jQuery('#cff-op-modals').remove();

		// prepend the modal wrapper
        $('#wpbody-content').prepend('<div class="cff-fb-source-ctn sb-fs-boss cff-fb-center-boss" id="cff-op-modals"><i class="fa fa-spinner fa-spin cff-loader" aria-hidden="true"></i></div>');

		// determine the plugin name
        var $self = $(this).find('span'),
            sb_get_plugin = 'twitter';

        if( $self.hasClass('cff_get_cff') ){
            sb_get_plugin = 'facebook';
        } else if( $self.hasClass('cff_get_sbi') ){
            sb_get_plugin = 'instagram';
        } else if( $self.hasClass('cff_get_yt') ){
            sb_get_plugin = 'youtube';
        } else if( $self.hasClass('cff_get_sbr') ){
            sb_get_plugin = 'reviews';
        }

		// send the ajax request to load plugin name and others data
		$.ajax({
			url : cffA.ajax_url,
			type : 'post',
			data : {
				action : 'sb_other_plugins_modal',
				plugin : sb_get_plugin,
				cff_nonce : cffA.cff_nonce,

			},
			success : function(data) {
				if ( data.success == true ) {
					$('#cff-op-modals').html(data.data.output);
				}
			},
			error : function(e)  {
				console.log(e);
			}
		});
    });

	/**
	 * Install other plugin on modal
	 *
	 * @since 4.0
	 */
	$(document).on('click', '#cff_install_op_btn', function() {
		let self = $(this);
		let pluginAtts = self.data('plugin-atts');
		if ( pluginAtts.step == 'install' ) {
			pluginAtts.plugin = pluginAtts.download_plugin
		}
		let loader = '<span class="cff-btn-spinner"><svg version="1.1" id="loader-1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="20px" height="20px" viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve"><path fill="#fff" d="M43.935,25.145c0-10.318-8.364-18.683-18.683-18.683c-10.318,0-18.683,8.365-18.683,18.683h4.068c0-8.071,6.543-14.615,14.615-14.615c8.072,0,14.615,6.543,14.615,14.615H43.935z"><animateTransform attributeType="xml" attributeName="transform" type="rotate" from="0 25 25" to="360 25 25" dur="0.6s" repeatCount="indefinite"></animateTransform></path></svg></span>';
		self.prepend(loader);

		// send the ajax request to install or activate the plugin
		$.ajax({
			url : cffA.ajax_url,
			type : 'post',
			data : {
				action : pluginAtts.action,
				nonce : pluginAtts.nonce,
				plugin : pluginAtts.plugin,
				download_plugin : pluginAtts.download_plugin,
				type : 'plugin',
			},
			success : function(data) {
				if ( data.success == true ) {
					self.find('.cff-btn-spinner').remove();
					self.attr('disabled', 'disabled');

					if ( pluginAtts.step == 'install' ) {
						self.html( data.data.msg );
					} else {
						self.html( data.data );
					}
				}
			},
			error : function(e)  {
				console.log(e);
			}
		});
	});

	jQuery('body').on('click', '#cff-op-modals', function(e){
        if (e.target !== this) return;
        jQuery('#cff-op-modals').remove();
    });
    jQuery('body').on('click', '.cff-fb-popup-cls', function(e){
        jQuery('#cff-op-modals').remove();
    });

	$(document).on('click', '#renew-modal-btn', function() {
		$('.cff-sb-modal').show();
	});

	$(document).on('click', '#cff-sb-close-modal', function() {
		$('.cff-sb-modal').hide();
	});

	/**
	 * Recheck the licensey key by sending AJAX request to the server
	 *
	 * @since 4.0
	 */
	$(document).on('click', "#recheck-license-key", function() {
		$(this).find('.spinner-icon').show();
		let cffLicenseNotice = $('#cff-license-notice');
		$.ajax({
			url: ajaxurl,
			data: {
				action: 'cff_check_license',
				cff_nonce: cffA.cff_nonce

			},
			success: function(result){
				$(this).find('.spinner-icon').hide();

				if ( cffLicenseNotice ) {
					if ( result.success == true ) {
						cffLicenseNotice.removeClass('cff-license-expired-notice').addClass('cff-license-renewed-notice');
					}
					cffLicenseNotice.html( result.data.content );
				}
		  	}
		});
	});

	/**
	 * Dismiss the renewed license notice
	 *
	 * @since 4.0
	 */
	$(document).on('click', "#cff-hide-notice", function() {
		let cffLicenseNotice = $('#cff-license-notice');
		let cffLicenseModal = $('.cff-sb-modal');
		cffLicenseNotice.remove();
		cffLicenseModal.remove();
	});

	/**
	 * Dismiss the license notice on dashboard page
	 *
	 * @since 4.0
	 */
	$(document).on('click', "#sb-dismiss-notice", function() {
		let cffLicenseNotice = $('#cff-license-notice');
		let cffLicenseModal = $('.cff-sb-modal');
		cffLicenseNotice.remove();
		cffLicenseModal.remove();
		$.ajax({
			url: ajaxurl,
			data: {
				action: 'cff_dismiss_license_notice',
				cff_nonce: cffA.cff_nonce

			},
			success: function(result){
				console.log('notice dismissed');
		  	}
		});
	});

	jQuery('body').on('click', '#cff_review_consent_yes', function(e) {
		let reviewStep1 = jQuery('.cff_review_notice_step_1, .cff_review_step1_notice');
		let reviewStep2 = jQuery('.cff_notice.cff_review_notice, .rn_step_2');

		reviewStep1.hide();
		reviewStep2.show();

		$.ajax({
			url : cffA.ajax_url,
			type : 'post',
			data : {
				action : 'cff_review_notice_consent_update',
				consent : 'yes',
				cff_nonce: cffA.cff_nonce
			},
			success : function(data) {
			}
		}); // ajax call

	});

	jQuery('body').on('click', '#cff_review_consent_no', function(e) {
		let reviewStep1 = jQuery('.cff_review_notice_step_1, #cff-notifications');
		reviewStep1.hide();

		$.ajax({
			url : cffA.ajax_url,
			type : 'post',
			data : {
				action : 'cff_review_notice_consent_update',
				consent : 'no',
				cff_nonce: cffA.cff_nonce

			},
			success : function(data) {
			}
		}); // ajax call

	});

	jQuery( '.cff-retry-db' ).on( 'click', function( event ) {
		event.preventDefault();

		const $btn = $( this );

		$btn.prop( 'disabled', true ).addClass( 'loading' ).html('<i class="fa fa-spinner fa-spin" aria-hidden="true"></i>');

		$.ajax({
			url : cffA.ajax_url,
			type : 'post',
			data : {
				action : 'sbi_cff_retry_db_creation',
				cff_nonce: cffA.cff_nonce
			},
			success : function( data ) {
				if ( typeof data.data.message !== 'undefined' ) {
					$btn.closest( 'p' ).after( data.data.message );
					$btn.remove();
				}
			},
			error : function( data )  {
			}
		}); // ajax call
	});
	// oEmbed Reconnect
  $(document).on('click', '.sb-reconnect-oembed', function() {
    let oembedConnectUrl = cff_admin.oembed_connectionURL.connect,
      appendURL = cff_admin.oembed_connectionURL.stateURL;

    const urlParams = {
      'cff_con': cff_admin.oembed_connectionURL.cff_con,
      'state': "{'{url=" + appendURL + "}'}"
    }

    let form = document.createElement('form');
    form.setAttribute('method', 'post');
    form.setAttribute('action', oembedConnectUrl);

    for (const key in urlParams) {
      if (urlParams.hasOwnProperty(key)) {
        let hiddenField = document.createElement('input');
        hiddenField.setAttribute('type', 'hidden');
        hiddenField.setAttribute('name', key);
        hiddenField.setAttribute('value', urlParams[key]);
        form.appendChild(hiddenField);
      }
    }

    document.body.appendChild(form);
    form.submit();
  });

  $(document).on('click', '#oembed_api_change_reconnect .cff-notice-dismiss', function(e) {
    e.preventDefault();
    $('#oembed_api_change_reconnect').remove();
  });

});


/* global smash_admin, jconfirm, wpCookies, Choices, List */

(function($) {

	'use strict';

	// Global settings access.
	var s;

	// Admin object.
	var SmashCFFAdmin = {

		// Settings.
		settings: {
			iconActivate: '<i class="fa fa-toggle-on fa-flip-horizontal" aria-hidden="true"></i>',
			iconDeactivate: '<i class="fa fa-toggle-on" aria-hidden="true"></i>',
			iconInstall: '<i class="fa fa-cloud-download" aria-hidden="true"></i>',
			iconSpinner: '<i class="fa fa-spinner fa-spin" aria-hidden="true"></i>',
			mediaFrame: false
		},

		/**
		 * Start the engine.
		 *
		 * @since 1.3.9
		 */
		init: function() {

			// Settings shortcut.
			s = this.settings;

			// Document ready.
			$( document ).ready( SmashCFFAdmin.ready );

			// Addons List.
			SmashCFFAdmin.initAddons();
		},

		/**
		 * Document ready.
		 *
		 * @since 1.3.9
		 */
		ready: function() {

			// Action available for each binding.
			$( document ).trigger( 'smashReady' );
		},

		//--------------------------------------------------------------------//
		// Addons List.
		//--------------------------------------------------------------------//

		/**
		 * Element bindings for Addons List page.
		 *
		 * @since 1.3.9
		 */
		initAddons: function() {

			// Some actions have to be delayed to document.ready.
			$( document ).on( 'smashReady', function() {

				// Only run on the addons page.
				if ( ! $( '#cff-admin-addons' ).length ) {
					return;
				}

				// Display all addon boxes as the same height.
				$( '.addon-item .details' ).matchHeight( { byrow: false, property: 'height' } );

				// Addons searching.
				if ( $('#cff-admin-addons-list').length ) {
					var addonSearch = new List( 'cff-admin-addons-list', {
						valueNames: [ 'addon-name' ]
					} );

					$( '#cff-admin-addons-search' ).on( 'keyup', function () {
						var searchTerm = $( this ).val(),
							$heading = $( '#addons-heading' );

						if ( searchTerm ) {
							$heading.text( cff_admin.addon_search );
						}
						else {
							$heading.text( $heading.data( 'text' ) );
						}

						addonSearch.search( searchTerm );
					} );
				}
			});

			// Toggle an addon state.
			$( document ).on( 'click', '#cff-admin-addons .addon-item button, .cff-notice-admin-btn', function( event ) {

				event.preventDefault();

				if ( $( this ).hasClass( 'disabled' ) ) {
					return false;
				}

				SmashCFFAdmin.addonToggle( $( this ) );
			});
		},
		/**
         * Return possible plugins/addons URLs
         *
         * @since 1.3.9
         */
        filterPossibleAddonInstallation : function() {
          return cff_admin?.smashPlugins
            ? Object.values(cff_admin?.smashPlugins).map((singlePlugin) => singlePlugin.download_plugin)
            : [];
        },
		/**
		 * Toggle addon state.
		 *
		 * @since 1.3.9
		 */
		addonToggle: function( $btn ) {

			var $addon = $btn.closest( '.addon-item' ),
				plugin = $btn.attr( 'data-plugin' ),
				plugin_type = $btn.attr( 'data-type' ),
				action,
				cssClass,
				statusText,
				buttonText,
				errorText,
				successText;

			if ( $btn.hasClass( 'status-go-to-url' ) ) {
				const possibleUrls = this.filterPossibleAddonInstallation();
                const gotoUrl = $btn.attr('data-plugin');
                if (possibleUrls.includes(gotoUrl)) {
                  window.open(gotoUrl, '_blank');
                }
				return;
			}

			$btn.prop( 'disabled', true ).addClass( 'loading' );
			$btn.html( s.iconSpinner );

			if ( $btn.hasClass( 'status-active' ) ) {
				// Deactivate.
				action     = 'cff_deactivate_addon';
				cssClass   = 'status-inactive';
				if ( plugin_type === 'plugin' ) {
					cssClass += ' button button-secondary';
				}
				statusText = cff_admin.addon_inactive;
				buttonText = cff_admin.addon_activate;
				if ( plugin_type === 'addon' ) {
					buttonText = s.iconActivate + buttonText;
				}
				errorText  = s.iconDeactivate + cff_admin.addon_deactivate;

			} else if ( $btn.hasClass( 'status-inactive' ) ) {
				// Activate.
				action     = 'cff_activate_addon';
				cssClass   = 'status-active';
				if ( plugin_type === 'plugin' ) {
					cssClass += ' button button-secondary disabled';
				}
				statusText = cff_admin.addon_active;
				buttonText = cff_admin.addon_deactivate;
				if ( plugin_type === 'addon' ) {
					buttonText = s.iconDeactivate + buttonText;
				} else if ( plugin_type === 'plugin' ) {
					buttonText = cff_admin.addon_activated;
				}
				errorText  = s.iconActivate + cff_admin.addon_activate;

			} else if ( $btn.hasClass( 'status-download' ) ) {
				// Install & Activate.
				action   = 'cff_install_addon';
				cssClass = 'status-active';
				if ( plugin_type === 'plugin' ) {
					cssClass += ' button disabled';
				}
				statusText = cff_admin.addon_active;
				buttonText = cff_admin.addon_activated;
				if ( plugin_type === 'addon' ) {
					buttonText = s.iconActivate + cff_admin.addon_deactivate;
				}
				errorText = s.iconInstall + cff_admin.addon_activate;

			} else {
				return;
			}

			var data = {
				action: action,
				nonce : cff_admin.nonce,
				plugin: plugin,
				type  : plugin_type
			};
			$.post( cff_admin.ajax_url, data, function( res ) {

				if ( res.success ) {
					if ( 'cff_install_addon' === action ) {
						$btn.attr( 'data-plugin', res.data.basename );
						successText = res.data.msg;
						if ( ! res.data.is_activated ) {
							cssClass = 'status-inactive';
							if ( plugin_type === 'plugin' ) {
								cssClass = 'button';
							}
							statusText = cff_admin.addon_inactive;
							buttonText = s.iconActivate + cff_admin.addon_activate;
						}
					} else {
						successText = res.data;
					}
					$addon.find( '.actions' ).append( '<div class="msg success">'+successText+'</div>' );
					$addon.find( 'span.status-label' )
						.removeClass( 'status-active status-inactive status-download' )
						.addClass( cssClass )
						.removeClass( 'button button-primary button-secondary disabled' )
						.text( statusText );
					$btn
						.removeClass( 'status-active status-inactive status-download' )
						.removeClass( 'button button-primary button-secondary disabled' )
						.addClass( cssClass ).html( buttonText );
				} else {
					if ( 'download_failed' === res.data[0].code ) {
						if ( plugin_type === 'addon' ) {
							$addon.find( '.actions' ).append( '<div class="msg error">'+cff_admin.addon_error+'</div>' );
						} else {
							$addon.find( '.actions' ).append( '<div class="msg error">'+cff_admin.plugin_error+'</div>' );
						}
					} else {
						$addon.find( '.actions' ).append( '<div class="msg error">'+res.data+'</div>' );
					}
					$btn.html( errorText );
				}

				$btn.prop( 'disabled', false ).removeClass( 'loading' );

				// Automatically clear addon messages after 3 seconds.
				setTimeout( function() {
					$( '.addon-item .msg' ).remove();
				}, 3000 );

			}).fail( function( xhr ) {
			});
		},

	};

	SmashCFFAdmin.init();

	window.SmashCFFAdmin = SmashCFFAdmin;

})( jQuery );