/**
 * Script for Extend Customizer Panel
 *
 * @package Yaatra
 */

(function($) {

	var api = wp.customize;

	api.bind('pane-contents-reflowed', function() {

		// Reflow sections
		var sections = [];

		api.section.each(function(section) {

			if (
				'yaatra_section' !== section.params.type ||
				'undefined' === typeof section.params.section
			) {

				return;

			}

			sections.push(section);

		});

		sections.sort(api.utils.prioritySort).reverse();

		$.each(sections, function(i, section) {

			var parentContainer = $('#sub-accordion-section-' + section.params.section);

			parentContainer.children('.section-meta').after(section.headContainer);

		});

		// Reflow panels
		var panels = [];

		api.panel.each(function(panel) {

			if (
				'yaatra_panel' !== panel.params.type ||
				'undefined' === typeof panel.params.panel
			) {

				return;

			}

			panels.push(panel);

		});

		panels.sort(api.utils.prioritySort).reverse();

		$.each(panels, function(i, panel) {

			var parentContainer = $('#sub-accordion-panel-' + panel.params.panel);

			parentContainer.children('.panel-meta').after(panel.headContainer);

		});

	});


	// Extend Panel
	var _panelEmbed = wp.customize.Panel.prototype.embed;
	var _panelIsContextuallyActive = wp.customize.Panel.prototype.isContextuallyActive;
	var _panelAttachEvents = wp.customize.Panel.prototype.attachEvents;

	wp.customize.Panel = wp.customize.Panel.extend({
		attachEvents: function() {

			if (
				'yaatra_panel' !== this.params.type ||
				'undefined' === typeof this.params.panel
			) {

				_panelAttachEvents.call(this);

				return;

			}

			_panelAttachEvents.call(this);

			var panel = this;

			panel.expanded.bind(function(expanded) {

				var parent = api.panel(panel.params.panel);

				if (expanded) {

					parent.contentContainer.addClass('current-panel-parent');

				} else {

					parent.contentContainer.removeClass('current-panel-parent');

				}

			});

			panel.container.find('.customize-panel-back')
				.off('click keydown')
				.on('click keydown', function(event) {

					if (api.utils.isKeydownButNotEnterEvent(event)) {

						return;

					}

					event.preventDefault(); // Keep this AFTER the key filter above

					if (panel.expanded()) {

						api.panel(panel.params.panel).expand();

					}

				});

		},
		embed: function() {

			if (
				'yaatra_panel' !== this.params.type ||
				'undefined' === typeof this.params.panel
			) {

				_panelEmbed.call(this);

				return;

			}

			_panelEmbed.call(this);

			var panel = this;
			var parentContainer = $('#sub-accordion-panel-' + this.params.panel);

			parentContainer.append(panel.headContainer);

		},
		isContextuallyActive: function() {

			if (
				'yaatra_panel' !== this.params.type
			) {

				return _panelIsContextuallyActive.call(this);

			}

			var panel = this;
			var children = this._children('panel', 'section');

			api.panel.each(function(child) {

				if (!child.params.panel) {

					return;

				}

				if (child.params.panel !== panel.id) {

					return;

				}

				children.push(child);

			});

			children.sort(api.utils.prioritySort);

			var activeCount = 0;

			_(children).each(function(child) {

				if (child.active() && child.isContextuallyActive()) {

					activeCount += 1;

				}

			});

			return (activeCount !== 0);

		}

	});


	// Extend Section
	var _sectionEmbed = wp.customize.Section.prototype.embed;
	var _sectionIsContextuallyActive = wp.customize.Section.prototype.isContextuallyActive;
	var _sectionAttachEvents = wp.customize.Section.prototype.attachEvents;

	wp.customize.Section = wp.customize.Section.extend({
		attachEvents: function() {

			if (
				'yaatra_section' !== this.params.type ||
				'undefined' === typeof this.params.section
			) {

				_sectionAttachEvents.call(this);

				return;

			}

			_sectionAttachEvents.call(this);

			var section = this;

			section.expanded.bind(function(expanded) {

				var parent = api.section(section.params.section);

				if (expanded) {

					parent.contentContainer.addClass('current-section-parent');

				} else {

					parent.contentContainer.removeClass('current-section-parent');

				}

			});

			section.container.find('.customize-section-back')
				.off('click keydown')
				.on('click keydown', function(event) {

					if (api.utils.isKeydownButNotEnterEvent(event)) {

						return;

					}

					event.preventDefault(); // Keep this AFTER the key filter above

					if (section.expanded()) {

						api.section(section.params.section).expand();

					}

				});

		},
		embed: function() {

			if (
				'yaatra_section' !== this.params.type ||
				'undefined' === typeof this.params.section
			) {

				_sectionEmbed.call(this);

				return;

			}

			_sectionEmbed.call(this);

			var section = this;
			var parentContainer = $('#sub-accordion-section-' + this.params.section);

			parentContainer.append(section.headContainer);

		},
		isContextuallyActive: function() {

			if (
				'yaatra_section' !== this.params.type
			) {

				return _sectionIsContextuallyActive.call(this);

			}

			var section = this;
			var children = this._children('section', 'control');

			api.section.each(function(child) {

				if (!child.params.section) {

					return;

				}

				if (child.params.section !== section.id) {

					return;

				}

				children.push(child);

			});

			children.sort(api.utils.prioritySort);

			var activeCount = 0;

			_(children).each(function(child) {

				if ('undefined' !== typeof child.isContextuallyActive) {

					if (child.active() && child.isContextuallyActive()) {

						activeCount += 1;

					}

				} else {

					if (child.active()) {

						activeCount += 1;

					}

				}

			});

			return (activeCount !== 0);

		}

	});

	wp.customize.bind('ready', function () {
        const controlsArray = [
            'yaatra_sidebar_posts_heading_toggle',
            'yaatra_sidebar_pages_heading_toggle',
        ];

        controlsArray.forEach(function (control) {
            if ( ! wp.customize.control(control).params.initial ) {
                var _this = wp.customize.control(control).container;
                _this.find(".toggle-button .dashicons").removeClass("dashicons-arrow-up-alt2").addClass("dashicons-arrow-down-alt2");
                _this.nextUntil(".customize-control-cv-heading-toggle").hide();
            }
        });
    });

})(jQuery);