/*globals jQuery, ajaxurl*/
/*jshint browser:true, devel:true*/

var WPML_Package_Translation = WPML_Package_Translation || {};

(function () {
	"use strict";

	WPML_Package_Translation.ManagementPage = function () {
		var self = this;

		self.init = function () {
			jQuery('.js_package_all_cb').on('change', self.check_uncheck_all);
			jQuery('.js_package_row_cb').on('change', self.enable_disable_delete);
			jQuery('#delete_packages').on('click', self.delete_selected_packages);
			jQuery('#package_kind_filter').on('change', self.filter_by_kind);
		};

		self.check_uncheck_all = function () {
			var package_all_cb = jQuery('.js_package_all_cb').first();

			var checked = package_all_cb.prop('checked');
			jQuery('.js_package_row_cb').each(
				function () {
					if (!jQuery(this).is(':disabled')) {
						jQuery(this).prop('checked', checked);
					}
				}
			);

			self.enable_disable_delete();
		};

		self.enable_disable_delete = function () {
			var enable = jQuery('.js_package_row_cb:checked:visible').length !== 0;

			jQuery('#delete_packages').prop('disabled', !enable);
		};

		self.delete_selected_packages = function () {

			if (confirm(jQuery('.js-delete-confirm-message').html())) {
				jQuery('#delete_packages').prop('disabled', true);
				jQuery('.spinner').css( 'float', 'none' ).addClass( 'is-active' );

				var selected = jQuery('.js_package_row_cb:checked:visible');

				var packages = [];

				selected.each(
					function () {
						packages.push(jQuery(this).val());
					}
				);

				var data = {
					action:   'wpml_delete_packages',
					wpnonce:  jQuery('#wpml_package_nonce').attr('value'),
					packages: packages
				};

				jQuery.ajax(
					{
						url:     ajaxurl,
						type:    'post',
						data:    data,
						success: function () {
							selected.each(
								function () {
									var package_row = jQuery(this).closest('.js_package');
									package_row.fadeOut(
										1000, function () {
											jQuery(this).remove();
										}
									);
								}
							);
							jQuery('.spinner').removeClass( 'is-active' );

						}
					}
				);
			}
		};

		self.all_selected = function () {
			var kind_slug = jQuery('#package_kind_filter').val();
			return kind_slug === '-1';
		};

		self.filter_by_kind = function () {
			var kind_slug = jQuery('#package_kind_filter').val();
			var icl_package_translations = jQuery('#icl_package_translations');
			var icl_package_translations_body = icl_package_translations.find('tbody');
			if (self.all_selected()) {
				icl_package_translations_body.find('tr').show();
            } else {
                icl_package_translations_body.find('tr').hide();
                icl_package_translations_body.find('tr.js_package.js_package_' + kind_slug).show();
            }
            self.enable_disable_delete();
        };

        self.init();
    };

    jQuery(
        function () {
            WPML_Package_Translation.management_page = new WPML_Package_Translation.ManagementPage();
        }
    );

}());