HEX
Server: nginx/1.27.1
System: Linux in-4 5.15.0-131-generic #141-Ubuntu SMP Fri Jan 10 21:18:28 UTC 2025 x86_64
User: ilikadirect (1186)
PHP: 7.4.33
Disabled: exec,passthru,shell_exec,system,proc_open,popen,parse_ini_file,show_source
Upload Files
File: /storage/v6964/testingff/public_html/fdfctr/wp-content/plugins/giveasap/assets/js/admin.js
import tlite from 'tlite';
import '../../node_modules/magnific-popup/dist/jquery.magnific-popup.js';

/**
 * Creating the Media Uploader
 *
 * @param $imageContainer
 * @param $imageInput
 */
function giveasap_image_media( $imageContainer, $imageInput ) {
	'use strict';

	var file_frame;

	/**
	 * If an instance of file_frame already exists, then we can open it
	 * rather than creating a new instance.
	 */

	if ( undefined !== file_frame ) {

		file_frame.open();

		return;

	}

	/**
	 * If we're this far, then an instance does not exist, so we need to
	 * create our own.
	 *
	 * Here, use the wp.media library to define the settings of the Media
	 * Uploader. We're opting to use the 'post' frame which is a template
	 * defined in WordPress core and are initializing the file frame
	 * with the 'insert' state.
	 *
	 * We're also not allowing the user to select more than one image.
	 */
	file_frame = wp.media(
		{
			multiple: false,
		}
	);

	file_frame.on(
		'open',
		function() {
			var selection = file_frame.state().get( 'selection' );
			var ids       = $imageInput.val().split( ',' );
			ids.forEach(
				function(id) {
					var attachment = wp.media.attachment( id );
					attachment.fetch();
					selection.add( attachment ? [ attachment ] : [] );
				}
			);
		}
	);

	// When an image is selected in the media frame...
	file_frame.on(
		'select',
		function() {

			// Get media attachment details from the frame state
			var attachments = file_frame.state().get( 'selection' ).toJSON();

			var attachmentIDs = [];
			$imageContainer.empty();
			console.log( $imageContainer );
			var $galleryID = $imageContainer.attr( "id" );
			for ( var i = 0; i < attachments.length; i++ ) {
				if ( attachments[ i ].type == "image" ) {
					attachmentIDs.push( attachments[ i ].id );
					$imageContainer.append( sortable_gallery_image_create( attachments[ i ], $galleryID ) );
				}
			}

			$imageInput.val( attachmentIDs.join() );
			// sortable_gallery_image_remove();
		}
	);

	// Now display the actual file_frame
	file_frame.open();

}

function sortable_image_gallery_media( $imageContainer, $imageInput ) {
	'use strict';

	var file_frame;

	/**
	 * If an instance of file_frame already exists, then we can open it
	 * rather than creating a new instance.
	 */

	if ( undefined !== file_frame ) {

		file_frame.open();

		return;

	}

	/**
	 * If we're this far, then an instance does not exist, so we need to
	 * create our own.
	 *
	 * Here, use the wp.media library to define the settings of the Media
	 * Uploader. We're opting to use the 'post' frame which is a template
	 * defined in WordPress core and are initializing the file frame
	 * with the 'insert' state.
	 *
	 * We're also not allowing the user to select more than one image.
	 */
	file_frame = wp.media(
		{
			multiple: true,
		}
	);

	file_frame.on(
		'open',
		function() {
			var selection = file_frame.state().get( 'selection' );
			var ids       = $imageInput.val().split( ',' );
			ids.forEach(
				function(id) {
					var attachment = wp.media.attachment( id );
					attachment.fetch();
					selection.add( attachment ? [ attachment ] : [] );
				}
			);
		}
	);

	// When an image is selected in the media frame...
	file_frame.on(
		'select',
		function() {

			// Get media attachment details from the frame state
			var attachments = file_frame.state().get( 'selection' ).toJSON();

			var attachmentIDs = [];
			$imageContainer.empty();
			var $galleryID = $imageContainer.attr( "id" );
			for ( var i = 0; i < attachments.length; i++ ) {
				if ( attachments[ i ].type == "image" ) {
					attachmentIDs.push( attachments[ i ].id );
					$imageContainer.append( sortable_gallery_image_create( attachments[ i ], $galleryID ) );
				}
			}

			$imageInput.val( attachmentIDs.join() );
			// sortable_gallery_image_remove();
		}
	);

	// Now display the actual file_frame
	file_frame.open();

}

function sortable_gallery_image_create( $attachment, $galleryID ) {
	var image_url = '';
	if ( $attachment.sizes.thumbnail ) {
		image_url = $attachment.sizes.thumbnail.url;
	} else {
		image_url = $attachment.sizes.full.url;
	}
	var $output = '<li tabindex="0" role="checkbox" aria-label="' + $attachment.title + '" aria-checked="true" data-id="' + $attachment.id + '" class="attachment save-ready selected details">';
	$output    += '<div class="attachment-preview js--select-attachment type-image subtype-jpeg portrait">';
	$output    += '<div class="thumbnail">'

	$output += '<div class="centered">'
	$output += '<img src="' + image_url + '" draggable="false" alt="">'
	$output += '</div>'

	$output += '</div>'

	$output += '</div>'

	$output += '<button type="button" data-gallery="#' + $galleryID + '" class="button-link check remove-sortable-wordpress-gallery-image" tabindex="0"><span class="media-modal-icon"></span><span class="screen-reader-text">Deselect</span></button>'

	$output += '</li>';
	return $output;

}

function sortable_gallery_image_remove( ) {
	jQuery( ".remove-sortable-wordpress-gallery-image" ).on(
		'click',
		function(){
			var $id         = jQuery( this ).parent().attr( "data-id" );
			var $gallery    = jQuery( this ).attr( "data-gallery" );
			var $imageInput = jQuery( $gallery + "_input" );

			jQuery( this ).parent().remove();
			var ids      = $imageInput.val().split( ',' );
			var $idIndex = ids.indexOf( $id );
			if ( $idIndex >= 0 ) {
				ids.splice( $idIndex, 1 );
				$imageInput.val( ids.join() );
			}
		}
	);
}

function giveasap_prepare_format_from_php( format ) {
	format = format.replace( "d", "dd" );
	format = format.replace( "j", "d" );
	format = format.replace( "Y", "yy" );
	format = format.replace( "m", "mm" );

	return format;
}

(function($){

	$( document ).ready(
		function(){

			tlite( el => el.classList.contains( 'sg-tooltip' ) );

			if ( $( '.sg-code-editor' ).length ) {
				$( '.sg-code-editor' ).each(
					function(){
						var editorSettings = wp.codeEditor.defaultSettings ? _.clone( wp.codeEditor.defaultSettings ) : {};
						var mode           = $( this ).attr( 'data-mode' );
						if ( typeof mode === 'undefined' ) {
							mode = false;
						}
						editorSettings.codemirror = _.extend(
							{},
							editorSettings.codemirror,
							{
								indentUnit: 2,
								tabSize: 2
							}
						);

						if ( mode ) {
							editorSettings.codemirror.mode = mode;
						}

						var editor = wp.codeEditor.initialize( $( this ), editorSettings );
					}
				);
			}

			$( '#sgToggleAwardPrizes' ).on(
				'click',
				function(e){
					e.preventDefault();
					var $this = $( this ),
					$target   = $this.attr( 'data-target' ),
					$class    = $this.attr( 'data-class' );

					$( $target ).toggleClass( $class );
					if ( $( $target ).hasClass( $class ) ) {
						$( '#sg_awarding_prizes_manually' ).removeAttr( 'checked' );
					} else {
						$( '#sg_awarding_prizes_manually' ).attr( 'checked', 'checked' );
					}
				}
			);

			$( '.sg-toggle' ).on(
				'click',
				function (e) {
					e.preventDefault();
					var $this = $( this ),
					$target   = $this.attr( 'data-target' ),
					$class    = $this.attr( 'data-class' ),
					$text     = $this.attr( 'data-text' );

					$( $target ).toggleClass( $class );
					if ( $text ) {
						var old_text = $this.text();
						$this.attr( 'data-text', old_text );
						$this.html( $text );
					}
				}
			);

			if ( $( '#sg_giveaway_add_subscriber' ).length ) {
				$( '#sg_giveaway_add_subscriber' ).on(
					'change',
					function() {
						$.ajax(
							{
								url: gasap.ajax_url,
								dataType: 'json',
								type: 'GET',
								data: { action: 'sg_get_giveaway_form_fields', giveaway: $( this ).val(), nonce: gasap.nonce },
								success: function(resp) {
									if ( resp.success ) {
										$( '#sgGiveawayFields' ).html( resp.data );
									}
								}
							}
						);
					}
				);
			}

			var imageButton = $( ".add-sortable-wordpress-gallery" );

			$( document ).on(
				'click',
				'.remove-sortable-wordpress-gallery-image',
				function( e ){
					e.preventDefault();
					var $this = $( this ),
					$id       = $this.parent().attr( 'data-id' ),
					$gallery  = $this.attr( 'data-gallery' ),
					$input    = $( $gallery + '_input' );

					var ids  = $input.val().split( ',' ),
					$idIndex = ids.indexOf( $id );
					if ( $idIndex >= 0 ) {
						ids.splice( $idIndex, 1 );
						$input.val( ids.join() );
					}

					$this.parent().remove();
				}
			);

			// sortable_gallery_image_remove();
			imageButton.each(
				function(){
					var galleryID      = $( this ).attr( "data-gallery" );
					var imageContainer = $( galleryID );
					var imageInput     = $( galleryID + "_input" );
					imageContainer.sortable();
					imageContainer.on(
						"sortupdate",
						function( event, ui ) {
							var $ids    = [];
							var $images = imageContainer.children( "li" );
							$images.each(
								function(){
									$ids.push( $( this ).attr( "data-id" ) );
								}
							);
							imageInput.val( $ids.join() );
						}
					);

					$( this ).on(
						'click',
						function(){
							sortable_image_gallery_media( imageContainer, imageInput );
						}
					);

				}
			);

			$( document ).on(
				'click',
				'.add-single-wordpress-image',
				function(e){
					e.preventDefault();
					var galleryID      = $( this ).attr( "data-gallery" );
					var imageContainer = $( galleryID );
					var imageInput     = $( galleryID + "_input" );
					giveasap_image_media( imageContainer, imageInput );
				}
			);

			$( document ).on(
				'change',
				'#giveasap_end_date, #giveasap_end_time',
				function(){
					var end_time       = $( '#giveasap_end_time' ).val(),
					end_date           = $( '#giveasap_end_date' ).val().split( '-' ).reverse().join( '-' ),
					winner_time        = $( '#giveasap_winner_time' ).val(),
					winner_date        = $( '#giveasap_winner_date' ).val().split( '-' ).reverse().join( '-' ),
					end_date_object    = Date.parse( end_date + 'T' + end_time ),
					winner_date_object = Date.parse( winner_date + 'T' + winner_time );

					if ( end_date_object > winner_date_object ) {
						$( '#giveasap_winner_date' ).val( $( '#giveasap_end_date' ).val() );
						$( '#giveasap_winner_time' ).val( $( '#giveasap_end_time' ).val() );
					}
				}
			);

			$( document ).on(
				'change',
				'#giveasap_winner_time, #giveasap_winner_date',
				function(){
					var end_time       = $( '#giveasap_end_time' ).val(),
					end_date           = $( '#giveasap_end_date' ).val().split( '-' ).reverse().join( '-' ),
					winner_time        = $( '#giveasap_winner_time' ).val(),
					winner_date        = $( '#giveasap_winner_date' ).val().split( '-' ).reverse().join( '-' ),
					end_date_object    = Date.parse( end_date + 'T' + end_time ),
					winner_date_object = Date.parse( winner_date + 'T' + winner_time );

					if ( end_date_object > winner_date_object ) {
						alert( gasap.text.winner_before_end );
					}
				}
			);

			var $expand_users = $( "#giveasap_expand_users" );
			$expand_users.on(
				'click',
				function(){
					var $users_container = $( "#giveasap_users_container" );
					$users_container.toggleClass( "hidden" );
				}
			);

			var $date_format = $( "#date_format" );
			$date_format.on(
				'change',
				function(){

					$format = giveasap_prepare_format_from_php( $( this ).val() );
					$( ".datepicker" ).datepicker(
						'option',
						{
							altFormat: $format
						}
					);
				}
			);

			$( document ).on(
				'click',
				'.button-integration-deactivate',
				function( e ){
					e.preventDefault();

					var integration = $( this ).attr( 'data-integration' ),
					$this           = $( this );
					if ( integration ) {
						$.ajax(
							{
								url: gasap.ajax_url,
								dataType: 'json',
								type: 'POST',
								data: { action: 'giveasap_deactivate_integration', integration: integration, nonce: gasap.nonce },
								success: function(resp) {
									if ( resp.success ) {
										$this.removeClass( 'button-integration-deactivate' )
										.removeClass( 'button-default' )
										.addClass( 'button-integration-activate' )
										.addClass( 'button-primary' )
										.html( gasap.text.activate );
									}
								}
							}
						);
					}

				}
			);

			$( document ).on(
				'click',
				'.button-integration-activate',
				function( e ){
					e.preventDefault();

					var integration = $( this ).attr( 'data-integration' ),
					$this           = $( this );

					if ( integration ) {
						$.ajax(
							{
								url: gasap.ajax_url,
								dataType: 'json',
								type: 'POST',
								data: { action: 'giveasap_activate_integration', integration: integration, nonce: gasap.nonce },
								success: function(resp) {
									if ( resp.success ) {
										$this.addClass( 'button-integration-deactivate' )
										.addClass( 'button-default' )
										.removeClass( 'button-integration-activate' )
										.removeClass( 'button-primary' )
										.html( gasap.text.deactivate );
									}
								}
							}
						);
					}

				}
			);

			/**
			 * Searching Email on User List.
			 */
			$( document ).on(
				'click',
				'.ga-search-email',
				function( e ){
					e.preventDefault();
					var inputs = $( this ).parent().find( 'input' ),
					url        = window.location.href,
					parts      = url.split( '?' ),
					query      = parts[1],
					qparams    = query.split( '&' ),
					params     = {};

					for ( var i = 0; i < qparams.length; i++ ) {
						var strings          = qparams[i].split( '=' );
						params[ strings[0] ] = strings[1];
					}

					inputs.each(
						function(){
							var name = $( this ).attr( 'name' ),
							val      = $( this ).val();
							if ( val ) {
								params[ name ] = val;
							} else {
								delete params[ name ];
							}
						}
					);

					var params_array = [];
					for ( var key in params ) {
						params_array.push( key + '=' + params[key] );
					}
					var location = parts[0] + '?' + params_array.join( '&' );

					window.location.href = location;
				}
			);

			$( document ).on(
				'click',
				'.sg-metaboxes li.sg-metabox a',
				function(e){
					e.preventDefault();
					$( '.sg-metabox-fields' ).addClass( 'hidden' );
					$( '.sg-metaboxes li.active' ).removeClass( 'active' );
					var target = $( this ).attr( 'href' );
					$( target ).removeClass( 'hidden' );
					$( this ).parent().addClass( 'active' );
					$( target ).find( '.wp-editor-wrap' ).each(
						function(){
							var frame = $( this ).find( 'iframe' ),
							height    = frame.height();
							if ( height < 200 ) {
								frame.height( 200 );
							}
						}
					);
				}
			);

			$( document ).on(
				'change',
				'.sg-admin-form.sg-action-form :input',
				function(){
					var form = $( this ).parents( '.sg-admin-form' );
					if ( ! $( this )[0].checkValidity() ) {
						var txt   = $( this )[0].validationMessage;
						var error = form.find( '.error' );
						$( this ).focus();
						if ( error.length ) {
							error.find( 'p' ).html( txt );
						} else {
							form.prepend( '<div class="notice error"><p>' + txt + '</p></div>' );
						}
						setTimeout(
							function(){
								form.find( '.error' ).fadeOut().remove();
							},
							5000
						);
					}
				}
			);

			$( '.sg-image-popup-link' ).magnificPopup( {type:'image'} );

			/**
			 * Sharing Methods.
			 */
			$( '#addShareMethod' ).on(
				'click',
				function(e){
					e.preventDefault();
					var template = wp.template( 'sharing-method' ),
					index        = $( '.giveaway-sharing-methods' ).children().length,
					data         = { index: index, title: 'New Method' },
					html         = template( data );
					$( '.giveaway-sharing-methods' ).append( html );
					$( '.giveaway-sharing-methods' ).children().eq( index ).find( '.method-select' ).trigger( 'change' );
				}
			);

			function giveaway_reset_methods_index() {
				var index = 0;
				$( '.giveaway-sharing-methods' ).children().each(
					function(){
						var _index = parseInt( $( this ).attr( 'data-index' ) );
						if ( _index !== index ) {
							var html  = $( this ).html(),
							reg       = new RegExp( 'giveasap_methods\\[' + _index + '\\]', 'g' );
							var _html = html.replace( reg, 'giveasap_methods[' + index + ']' );
							$( this ).html( _html );
							$( this ).attr( 'data-index', index );
						}
						index++;
					}
				);
			}

			$( '.giveaway-sharing-methods' ).sortable(
				{
					update: function( event, ui ) {
						giveaway_reset_methods_index();
					}
				}
			);

			$( document ).on(
				'click',
				'.giveaway-sharing-method .method-header',
				function(){
					$( this ).parent().toggleClass( 'active' );
				}
			);

			$( document ).on(
				'click',
				'.giveaway-sharing-method .button-delete',
				function(){
					$( this ).parents( '.giveaway-sharing-method' ).remove();
					giveaway_reset_methods_index();
				}
			);

			$( document ).on(
				'change',
				'.giveaway-sharing-method .method-select',
				function(){
					var value = $( this ).val();

					if ( 'custom' === value ) {
						var template = wp.template( 'sharing-method-custom' ),
						method       = $( this ).parents( '.giveaway-sharing-method' ),
						index        = method.attr( 'data-index' ),
						data         = { index: index, url: '', title: method.attr( 'data-title' ), attributes: { url: '', text: '', image: '' } },
						html         = template( data );
						method.find( '.giveasap-method-html' ).html( html );
						method.find( '.color-picker' ).wpColorPicker();
					} else {
						var method = $( this ).parents( '.giveaway-sharing-method' );
						method.find( '.giveasap-method-html' ).html( '' );
					}
				}
			);

			$( document ).on(
				'keyup',
				'.giveaway-sharing-method .method-title',
				function(){
					$( this ).parents( '.giveaway-sharing-method' ).find( '.method-header strong' ).html( $( this ).val() );
				}
			);

			if ( $( '.giveaway-sharing-methods' ).length ) {
				$( '.giveaway-sharing-methods .color-picker' ).wpColorPicker();
			}

			/** Form Fields ********/

			function giveaway_reset_form_fields_index() {
				var index = 0;
				$( '.sg-form-fields-container' ).children().each(
					function(){
						var _index = parseInt( $( this ).attr( 'data-index' ) );
						if ( _index !== index ) {
							var html  = $( this ).html(),
							reg       = new RegExp( 'form_fields\\[' + _index + '\\]', 'g' );
							var _html = html.replace( reg, 'form_fields[' + index + ']' );
							$( this ).html( _html );
							$( this ).attr( 'data-index', index );
						}
						index++;
					}
				);
			}

			function giveaway_reset_prizes_fields_index() {
				var index = 0;
				$( '.sg-prizes-field-container' ).children().each(
					function(){
						var _index = parseInt( $( this ).attr( 'data-index' ) );
						if ( _index !== index ) {
							var html  = $( this ).html(),
							reg       = new RegExp( 'form_fields\\[' + _index + '\\]', 'g' );
							var _html = html.replace( reg, 'form_fields[' + index + ']' );
							$( this ).html( _html );
							$( this ).attr( 'data-index', index );
						}
						index++;
					}
				);
			}

			$( document.body ).on(
				'change',
				'.sg-field-type',
				function(e){
					var type = $( this ).val(),
					$this    = $( this ),
					parent   = $this.parent();
					if ( 'radio' === type || 'select' === type ) {
						if ( parent.find( '.sg-form-field-options' ).length === 0 ) {
							var index = $this.parents( '.sg-form-field' ).attr( 'data-index' ),
							   tmpl   = wp.template( 'sg-form-field-options' ),
							   html   = tmpl( {index: index} );
							parent.append( html );
						}
					} else {
						var options = parent.find( '.sg-form-field-options' );
						if ( options.length ) {
							options.remove();
						}
					}
				}
			);

			$( document.body ).on(
				'click',
				'.sg-remove-form-field-option',
				function(e){
					$( this ).parent().remove();
				}
			);

			$( document.body ).on(
				'click',
				'.sg-add-form-field-option',
				function(e){
					e.preventDefault();
					var index = $( this ).parents( '.sg-form-field' ).attr( 'data-index' ),
					tmpl      = wp.template( 'sg-form-field-option' ),
					html      = tmpl( { index: index } );
					$( this ).parent().find( '.sg-form-field-options-container' ).append( html );
				}
			);

			$( '.sg-form-fields-container' ).sortable(
				{
					placeholder: "ui-state-highlight",
					handle: '.sg-form-row-handle',
					update: function( event, ui ) {
						giveaway_reset_form_fields_index();
					}
				}
			);

			$( '#sgAddFormField' ).on(
				'click',
				function() {
					var tmpl = wp.template( 'sg-form-field' ),
					count    = $( '.sg-form-fields-container' ).children().length,
					html     = tmpl( { index: count } );
					$( '.sg-form-fields-container' ).append( html );
				}
			);

			$( document.body ).on(
				'click',
				'.sg-delete-form-field',
				function(){
					$( this ).parents( '.sg-form-field' ).remove();
					giveaway_reset_form_fields_index();
				}
			);

			$( document.body ).on(
				'click',
				'.sg-form-field-header .sg-field-name',
				function(){
					$( this ).parents( '.sg-form-field' ).toggleClass( 'open' );
				}
			);

			$( document.body ).on(
				'keyup',
				'.sg-form-field-body .sg-field-name input',
				function(){
					var value = $( this ).val();
					$( this ).parents( '.sg-form-field' ).find( '.sg-form-field-header .sg-field-name' ).html( value );
				}
			);

			$( '#sgAddPrizesField' ).on(
				'click',
				function() {
					var tmpl = wp.template( 'sg-prizes-field' ),
					count    = $( '.sg-prizes-field-container' ).children().length,
					html     = tmpl( { index: count } );
					$( '.sg-prizes-field-container' ).append( html );

					var prizesBox = $( '.sg-prizes-field-container .sg-form-field' ).last();
					prizesBox.toggleClass( 'open' );
					prizesBox.find( '.sg-field-name input' ).focus();
					sg_hide_show_metabox_fields_per_type();
					$( document.body ).triggerHandler( 'sg_prizes_field_added' );
				}
			);

			$( document.body ).on(
				'click',
				'.sg-delete-prizes-field',
				function(){
					$( this ).parents( '.sg-form-field' ).remove();
					giveaway_reset_prizes_fields_index();
				}
			);

			$( '.sg-prizes-field-container' ).sortable(
				{
					placeholder: "ui-state-highlight",
					handle: '.sg-form-row-handle',
					update: function( event, ui ) {
						giveaway_reset_prizes_fields_index();
					}
				}
			);

			/** Giveaway ***********/
			function sg_hide_show_metabox_fields_per_type() {
				var giveaway_type = $( '#giveasap_type' ).val();

				$( '.sg-metaboxes .hide_if_any' ).hide();
				$( '.sg-metaboxes .show_if_any' ).show();
				$( '.hide_if_' + giveaway_type ).hide();
				$( '.show_if_' + giveaway_type ).show();
				// $('.sg-metaboxes tr:not(.hide_if_' + giveaway_type + ')').show();

				$( document.body ).triggerHandler( 'sg_giveaway_type_changed', [ giveaway_type ] );
			}

			if ( $( '#sg-metaboxes' ).length ) {

				sg_hide_show_metabox_fields_per_type();

				$( '#giveasap_type' ).on( 'change', sg_hide_show_metabox_fields_per_type );
			}

			/** Globals ***********/

			$( document ).on(
				'click',
				'.sg-button-action',
				function( e ){
					e.preventDefault();
					var $this = $( this ),
					ajax      = $this.attr( 'data-ajax' ) || '',
					reload    = $this.attr( 'data-reload' ) || '0',
					callback  = $this.attr( 'data-callback' ) || '',
					nonce     = $this.attr( 'data-nonce' ) || '',
					text2     = $this.attr( 'data-text' ),
					text      = $this.text(),
					href      = $this.attr( 'href' );

					if ( text2 ) {
						$this.text( text2 );
					}

					if ( ajax ) {

						var data = { action: ajax };

						if ( nonce ) {
							data.nonce = gasap.nonce;
						}
						if ( this.attributes.length ) {
							for ( var i = 0; i < this.attributes.length; i++  ) {
								var attr                                  = this.attributes[ i ];
								data[ attr.nodeName.replace( '-', '_' ) ] = attr.nodeValue;
							}
						}
						$.ajax(
							{
								url: gasap.ajax_url,
								dataType: 'json',
								data: data,
								success: function( resp ) {
									if ( callback ) {
										var fn = window[ callback ];
										if (typeof fn === 'function') {
											fn( $this, resp );
										}
									}

									if ( text2 && '1' !== reload ) {
										$this.text( text );
									}

									if ( '1' === reload ) {
										if ( href ) {
											window.location.href = href;
										} else {
											location.reload( false );
										}
									}
								}
							}
						);
					} else {
						if ( callback ) {
							var fn = window[ callback ];
							if (typeof fn === 'function') {
								fn( $this );
							}
						}
						if ( text2 && '1' !== reload ) {
							$this.text( text );
						}

						if ( '1' === reload ) {
							if ( href ) {
								window.location.href = href;
							} else {
								location.reload( false );
							}
						}
					}
				}
			);

			$( '.sg-action-category-title' ).on(
				'click',
				function(e){
					$( this ).parent().toggleClass( 'active' );
				}
			);

			$( '.sg-action' ).on(
				'click',
				function(e){
					var $actionContainer = $( '#sgEntriesActions' ),
					count                = $actionContainer.children().length,
					slug                 = $( this ).attr( 'data-slug' ),
					template             = wp.template( slug );

					if ( $( '#tmpl-' + slug ).length ) {
						e.preventDefault();
						$actionContainer.append( template( { index: count } ) );
						$( document.body ).trigger( 'sg-enhanced-select-search-init' );
						$( document.body ).trigger( 'sg-color-picker-init' );
						var action = $actionContainer.children().last();
						action.find( '.sg-admin-action-title' ).trigger( 'click' );
						window.giveasap_max_instance_id = window.giveasap_max_instance_id + 1
						action.find( '.sg-action-form-instance' ).val( window.giveasap_max_instance_id );
						$( [document.documentElement, document.body] ).animate(
							{
								scrollTop: $actionContainer.children().last().offset().top - 24 // admin bar.
							},
							500
						);
					}
				}
			);

			$( '.sg-extra-actions' ).sortable(
				{
					update: function( event, ui ) {
						giveaway_reset_extra_action_index();
						giveasap_update_specific_mandatory_actions();

					}
				}
			);

			$( document ).on(
				'click',
				'.sg-admin-action-remove',
				function(e){
					e.preventDefault();
					$( this ).parents( '.sg-admin-action' ).remove();
					giveaway_reset_extra_action_index();
					giveasap_update_specific_mandatory_actions();
				}
			);

			function giveaway_reset_extra_action_index() {
				var index = 0;
				$( '.sg-extra-actions' ).children().each(
					function(){
						var _index = parseInt( $( this ).attr( 'data-index' ) );
						if ( _index !== index ) {
							var html  = $( this ).html(),
							reg       = new RegExp( 'entries_actions\\[' + _index + '\\]', 'g' );
							var _html = html.replace( reg, 'entries_actions[' + index + ']' );
							$( this ).html( _html );
							$( this ).attr( 'data-index', index );
						}
						index++;
					}
				);
			}

			$( document ).on(
				'click',
				'.sg-admin-action-title',
				function( e ){
					e.preventDefault();
					$( this ).parent().toggleClass( 'active' );
				}
			);

			$( document ).on(
				'click',
				'.sg-multioption-button',
				function(e){
					e.preventDefault();
					var id   = $( this ).attr( 'data-id' ),
					name     = $( this ).attr( 'data-name' ),
					tmpl     = $( this ).attr( 'data-template' ),
					count    = $( '#' + id ).children().length,
					template = wp.template( tmpl ),
					html     = template( { index: count, id: id, name: name } );

					$( '#' + id ).append( html );
				}
			);

			$( document ).on(
				'click',
				'.sg-multioption-delete',
				function(e){
					e.preventDefault();
					$( this ).parent().remove();
				}
			);

			$( document ).on(
				'keyup',
				'.sg-form-field-title input',
				function(){
					var parent   = $( this ).parents( '.sg-admin-form' );
					var instance = parent.find( '.sg-action-form-instance' ).val();
					var title    = $( this ).val();
					giveasap_update_specific_mandatory_action( instance, title );
					giveasap_update_specific_mandatory_actions();
				}
			);

			$( document ).on(
				'change',
				'.mandatory-specific-action-checkbox',
				function(){
					var parent   = $( this ).parents( '.sg-admin-form' );
					var field    = $( this ).parents( '.sg-form-field' );
					var selected = field.attr( 'data-value' );
					var instance = parent.find( '.sg-action-form-instance' ).val();
					var value    = $( this ).val();

					selected = selected.split(',');
					if ( $(this).prop('checked') && selected.indexOf( value ) < 0) {
						selected.push( value );
					}

					if ( ! $(this).prop('checked') && selected.indexOf( value ) >= 0) {
						var  index = selected.indexOf(value);
						if (index > -1) {
							selected.splice(index, 1);
						}
					}

					field.attr('data-value', selected.join(','));
				}
			);

			function giveasap_update_specific_mandatory_action( instance, title ) {
				var ids = window.giveasap_actions.map(
					function(action){
						return parseInt( action.instance );
					}
				);

				if ( ids.indexOf( parseInt( instance ) ) >= 0 ) {
					window.giveasap_actions = window.giveasap_actions.map(
						function (action) {
							if (parseInt( action.instance ) !== parseInt( instance )) {
								return action;
							}

							action.title = title;
							return action;
						}
					);
				} else {
					window.giveasap_actions.push(
						{
							instance: instance,
							title: title
						}
					);
				}
			}

			function giveasap_update_specific_mandatory_actions() {
				$( document ).find( '.sg-select-specific-mandatory-actions' ).each(
					function(){
						var $this    = $( this );
						var parent   = $this.parents( '.sg-admin-form' );
						var field    = $this.parents( '.sg-form-field' );
						var selected = field.attr( 'data-value' );
						var name     = field.attr( 'data-name' );
						var instance = parent.find( '.sg-action-form-instance' ).val();
						var data     = [];

						if ( selected ) {
							selected = selected.split(',');
						}

						if ( window.giveasap_actions && window.giveasap_actions.length ) {
							for (var g = 0; g < window.giveasap_actions.length; g++ ) {
								var action_id = window.giveasap_actions[ g ].instance;

								if ( parseInt( instance ) === parseInt( action_id ) ) {
									continue;
								}

								var optionSelected = selected && selected.indexOf( action_id ) >= 0;

								data.push(
									{
										id: action_id,
										text: window.giveasap_actions[ g ].title,
										selected: optionSelected
									}
								)
							}
						}

						if ( ! data.length ) {
							field.addClass('hidden');
							return;
						}

						var html = '';
						for( var d = 0; d < data.length; d++ ) {
							var action = data[d];
							var checkedHTML = '';
							if ( action.selected ) {
								checkedHTML = 'checked="checked"';
							}
							html += '<label for="' + instance + '_specific_action_' + d + '">';
							html += '<input class="mandatory-specific-action-checkbox" ' + checkedHTML + ' id="' + instance + '_specific_action_' + d + '" type="checkbox" name="' + name + '" value="' + action.id + '"/>'
							html += action.text;
							html += '</label>';
						}

						$this.html(html);
						field.removeClass('hidden');
					}
				);
			}

			giveasap_update_specific_mandatory_actions();

			$( document ).find( '.sg-select2:not(.enhanced)' ).each(
				function(){
					if ( $( this ).parents( '.sg-report-options' ).length ) {
						return;
					}

					var $this = $( this );
					$( this ).select2(
						{
							placeholder: $this.attr( 'placeholder' ) || '',
							minimumInputLength: $this.attr( 'data-mininput' ) || 3,
							ajax: {
								url: gasap.ajax_url,
								dataType: 'json',
								data: function (params) {
									var query = {
										search: params.term,
										type: 'public',
										action: $this.attr( 'data-action' ) || 'sg_get_giveaways'
									}

									// Query parameters will be ?search=[term]&type=public
									return query;
								},
								processResults: function (data) {
									if ( data.success ) {
										var items = [];
										for ( var index in data.data ) {
											items.push(
												{
													id: data.data[index].ID,
													text: data.data[index].post_title
												}
											);
										}
										return {
											results: items
										};
									}
									// Transforms the top-level key of the response object from 'items' to 'results'
									return {
										results: data.items
									};
								}
							}
						}
					).addClass( 'enhanced' );
				}
			);

			

			/** Select2 Ajax **/
			$( document.body )
			.on(
				'sg-enhanced-select-search-init',
				function() {

					// Ajax product search box
					$( ':input.sg-select-search' ).filter( ':not(.enhanced)' ).each(
						function () {
							var select2_args = {
								allowClear: $( this ).data( 'allow_clear' ) ? true : false,
								placeholder: $( this ).data( 'placeholder' ),
								minimumInputLength: $( this ).data( 'minimum_input_length' ) ? $( this ).data( 'minimum_input_length' ) : '3',
								escapeMarkup: function (m) {
									return m;
								},
								ajax: {
									url: gasap.ajax_url,
									dataType: 'json',
									delay: 250,
									data: function (params) {
										return {
											term: params.term,
											action: $( this ).data( 'action' ) || 'sg_select_search',
											security: gasap.nonce,
											exclude: $( this ).data( 'exclude' ),
											exclude_type: $( this ).data( 'exclude_type' ),
											include: $( this ).data( 'include' ),
											limit: $( this ).data( 'limit' ),
											display_stock: $( this ).data( 'display_stock' )
										};
									},
									processResults: function (data) {
										var terms = [];
										if (data) {
											$.each(
												data,
												function (id, text) {
													terms.push( {id: id, text: text} );
												}
											);
										}
										return {
											results: terms
										};
									},
									cache: true
								}
							};

							$( this ).select2( select2_args ).addClass( 'enhanced' );

							if ($( this ).prop( 'multiple' )) {
								$( this ).on(
									'change',
									function () {
										var $children = $( this ).children();
										$children.sort(
											function (a, b) {
												var atext = a.text.toLowerCase();
												var btext = b.text.toLowerCase();

												if (atext > btext) {
													return 1;
												}
												if (atext < btext) {
													return -1;
												}
												return 0;
											}
										);
										$( this ).html( $children );
									}
								);
							}
						}
					);
				}
			).trigger( 'sg-enhanced-select-search-init' );

			$( document.body )
			.on(
				'sg-color-picker-init',
				function() {
					// Ajax product search box
					$( ':input.sg-color-picker' ).filter( ':not(.enhanced)' ).each(
						function () {
							$( this ).wpColorPicker();
						}
					);
				}
			).trigger( 'sg-color-picker-init' );
		}
	);
})( jQuery )