/**
 * This file holds the main javascript functions needed for the functionallity of the widget area creator at wp-admin/widgets.php
 *
 * @author		Christian "Kriesi" Budschedl
 * @copyright	Copyright ( c ) Christian Budschedl
 * @link		http://kriesi.at
 * @link		http://aviathemes.com
 * @since		Version 1.0
 * @package 	AviaFramework
 */

(function($)
{
	var AviaSidebar = function()
	{
        this.widget_wrap = $('.widget-liquid-right');
        this.widget_area = $('#widgets-right');
        this.widget_add  = $('#avia-tmpl-add-widget');

        this.create_form();
        this.add_del_button();
        this.bind_events();
	};

    AviaSidebar.prototype =
	{
        create_form: function()
        {
            this.widget_wrap.append(this.widget_add.html());
            this.widget_name = this.widget_wrap.find( 'input[name="avia-sidebar-widgets"]' );
            this.nonce = this.widget_wrap.find( 'input[name="avia-delete-custom-sidebar-nonce"]' ).val();
        },

        add_del_button: function()
        {
            this.widget_area.find('.sidebar-avia-custom').append('<span class="avia-custom-sidebar-area-delete"></span>');
        },

        bind_events: function()
        {
            this.widget_wrap.on( 'click', '.avia-custom-sidebar-area-delete', this.delete_sidebar.bind( this ) );
        },


        //delete the sidebar area with all widgets within, then re calculate the other sidebar ids and re save the order
        delete_sidebar: function(e)
        {
        	var delete_it = confirm( "Do you really want to delete this widget area?" );

        	if( delete_it == false )
			{
				return false;
			}

            var widget      = $(e.currentTarget).parents('.widgets-holder-wrap').eq( 0 ),
                title       = widget.find('.sidebar-name h3 , .sidebar-name h2'),
                spinner     = title.find('.spinner'),
                widget_name = title.text().trim(),
                obj         = this;

            $.ajax({
	 		  type: "POST",
	 		  url: window.ajaxurl,
	 		  data: {
	 		     action: 'avia_ajax_delete_custom_sidebar',
	 		     name: widget_name,
	 		     _wpnonce: obj.nonce
	 		  },

	 		  beforeSend: function()
	 		  {
	 		        spinner.addClass('activate_spinner');
	 		  },
	 		  success: function(response)
	 		  {
                   if(response == 'sidebar-deleted')
                   {
                        widget.slideUp( 200, function()
						{

                            $('.widget-control-remove', widget).trigger('click'); //delete all widgets inside
                            widget.remove();


                            //re calculate widget ids - no longer necessary since wp 4.2

/*
                            obj.widget_area.find('.widgets-holder-wrap .widgets-sortables').each(function(i)
                            {
                                $(this).attr('id','sidebar-' + (i + 1));
                            });

                            wpWidgets.saveOrder();
*/

                        });
                   }
	 		  }
	 		});
        }

    };

	$(function()
	{
		new AviaSidebar();
 	});


})(jQuery);

(function($)
{
	var objAviaWidgetConditionalHide = null;

	/*
	 * Implement an easy CSS solution for conditional hiding of input elements in widget backend page
	 *
	 * Currently only supports select boxes
	 */
	var AviaWidgetConditionalHide = function()
	{
		objAviaWidgetConditionalHide = this;

		this.body = $( 'body' );

		this.bind_events();

		this.body.find( 'form .widget-content .avia-coditional-widget-select' ).trigger('change');
	};

	AviaWidgetConditionalHide.prototype =
	{
		bind_events: function()
		{
			this.body.on( 'change', 'form .widget-content .avia-coditional-widget-select', this.select_changed );

			$(document).on( 'widget-updated', function()
			{
				var save_button = $( this.activeElement );
				var select = save_button.closest('form').find('.avia-coditional-widget-select');
				if( select.length > 0 )
				{
					select.trigger( 'change' );
				}
			});
		},

		select_changed: function( event )
		{
			var select = $(this);
			var form_container = select.closest( '.avia_widget_conditional_form' ).first();

			select.find('option').each( function()
			{
				var value = $(this).val();
				form_container.removeClass( value );
			});

			var option_selected = select.find( 'option:selected' );
			var value = option_selected.val();
			form_container.addClass( value );
		}
	};

	$(function()
	{
		new AviaWidgetConditionalHide();
 	});

})(jQuery);

(function($)
{
	/**
	 * Allow colorpicker in widget area - only necessary when a new widget is added.
	 * Already existing colorpickers are correctly initialised on page load.
	 *
	 * To work correctly you need to add:
	 *		- class avia-colorpicker-to-attach for template
	 *		- class avia-colorpicker-attached to already existing widgets
	 */
	var sidebar_colorpicker = function()
	{
		var self = this;
		$(document).on( 'widget-added', function( event, instance )
		{
			if( $('body').hasClass( 'block-editor-page' ) )
			{
				self.check_colorpickers( $( instance ) );
			}
			else
			{
				self.check_colorpickers();
			}
		});

		$(document).on( 'widget-updated', function( e )
		{
			var button = $( this.activeElement );
			var form = button.closest( 'form' );
			var widget = form.closest( 'div.widgets-sortables' );
			var pickers = form.find( '.avia_color_picker.avia-colorpicker-attached' );
			pickers.removeClass( 'avia-colorpicker-attached' ).addClass( 'avia-colorpicker-to-attach' );
			self.check_colorpickers( widget );
		});

	};

	sidebar_colorpicker.prototype =
	{
		check_colorpickers: function( widget )
		{
			var widget_areas = 'undefined' != typeof widget ? widget : $( 'div.widgets-sortables' );
			if( widget_areas.length == 0 )
			{
				return;
			}

			//	blocks are added dynamically by default - static in classic widget page
			var selector = ! $('body').hasClass( 'block-editor-page' ) ? '.avia-colorpicker-to-attach' : '';
			var colorpicker = widget_areas.find( '.avia_color_picker' + selector );

			colorpicker.each( function( index )
			{
				var color = $( this );
				color.removeClass( 'avia-colorpicker-to-attach' ).addClass( 'avia-colorpicker-attached' );

				//	We need to select surrounding container otherwise it will not work !!!
				color.closest( '.avia_colorpicker_style_wrap' ).avia_color_picker_activation();
			});
		}
	};

	$(function()
	{
		new sidebar_colorpicker();
 	});

})(jQuery);
