/* globals jQuery, soWidgetsAdmin */

jQuery( function( $ ){

	$( '.so-widget-toggle-active button' ).on( 'click', function() {
		var $$ = $(this),
			s = $$.data('status'),
			$w = $$.closest('.so-widget');

		if(s) {
			$w.addClass('so-widget-is-active').removeClass('so-widget-is-inactive');
		}
		else {
			$w.removeClass('so-widget-is-active').addClass('so-widget-is-inactive');
		}

		// Lets send an ajax request.
		$.post(
			soWidgetsAdmin.toggleUrl,
			{
				'widget' : $w.data('id'),
				'active' : s
			},
			function(data){
				// $sw.find('.dashicons-yes').clearQueue().fadeIn('fast').delay(750).fadeOut('fast');
			}
		);

	} );

	//  Fill in the missing header images
	$('.so-widget-banner').each( function(){
		var $$ = $(this),
			$img = $$.find('img');

		if( !$img.length ) {
			// Create an SVG image as a placeholder icon
			var pattern = Trianglify({
				width: 128,
				height: 128,
				variance : 1,
				cell_size: 32,
				seed: $$.data('seed')
			});

			$$.append( pattern.svg() );
		}
		else {
			if( $img.width() > 128 ) {
				// Deal with wide banner images
				$img.css( 'margin-left', - ( $img.width() - 128 ) / 2 + 'px' );
			}
		}
	} );

	// Lets implement the search
	var widgetSearch = function(){
		var q = $(this).val().toLowerCase();

		if( q === '' ) {
			$('.so-widget-wrap').show();
		}
		else {
			$('.so-widget').each( function(){
				var $$ = $(this);

				if( $$.find('h3').html().toLowerCase().indexOf(q) > -1 ) {
					$$.parent().show();
				}
				else {
					$$.parent().hide();
				}
			} );
		}

		$( window ).trigger( 'resize' );
	};
	$('#sow-widget-search input').on( {
		keyup: widgetSearch,
		search: widgetSearch
	});

	$( window ).on( 'resize', function() {
		var $descriptions = $( '.so-widget-text:visible' );
		var largestHeight = 0;
		var largestHeight = [];
		var column = 0;

		$descriptions.css( 'height', 'auto' );

		// Don't size text descriptions on tablet portrait and mobile devices.
		if ( window.matchMedia( '(max-width: 960px)' ).matches ) {
			return;
		}

		// Work out how many columns are visible per row.
		if ( window.matchMedia( '(min-width: 1800px)' ).matches ) {
			columnCount = 4;
		} else if ( window.matchMedia( '(max-width: 1280px)' ).matches ) {
			columnCount = 2;
		} else {
			columnCount = 3;
		}

		$descriptions.each( function( index ) {
			column = index / columnCount;
			// Turnicate column number - IE 11 friendly.
			column = column < 0 ? Math.ceil( column ) : Math.floor( column );
			$( this ).data( 'column', column )

			largestHeight[ column ] = Math.max( typeof largestHeight[ column ] == 'undefined' ? 0 : largestHeight[ column ], $( this ).height() );
		} );

		$descriptions.each( function() {
			$( this ).css( 'height', largestHeight[ $( this ).data( 'column' ) ] + 'px' );
		} );
	} ).trigger( 'resize' );

	// Handle the tabs
	$( '#sow-widgets-page .page-nav a' ).on( 'click', function( e ) {
		e.preventDefault();
		var $$ = $(this);
		var href = $$.attr('href');

		var $li = $$.closest('li');
		$('#sow-widgets-page .page-nav li').not($li).removeClass('active');
		$li.addClass('active');

		switch( href ) {
			case '#all' :
				$('.so-widget-wrap').show();
				break;

			case '#enabled' :
				$('.so-widget-wrap').hide();
				$('.so-widget-wrap .so-widget-is-active').each(function(){ $(this).closest('.so-widget-wrap').show(); });
				$('.so-widget-wrap .so-widget-is-inactive').each(function(){ $(this).closest('.so-widget-wrap').hide(); });
				break;

			case '#disabled' :
				$('.so-widget-wrap .so-widget-is-active').each(function(){ $(this).closest('.so-widget-wrap').hide(); });
				$('.so-widget-wrap .so-widget-is-inactive').each(function(){ $(this).closest('.so-widget-wrap').show(); });
				break;
		}

		$( window ).trigger( 'resize' );
	});

	// Enable css3 animations on the widgets list
	$('#widgets-list').addClass('so-animated');

	// Handle the dialog
	var dialog = $('#sow-settings-dialog');

	$( '#widgets-list .so-widget-settings' ).on( 'click', function( e ) {
		var $$ = $(this);
		e.preventDefault();

		$content = dialog.find( '.so-content' );
		$content
			.empty()
			.addClass('so-loading')

		$.get( $$.data( 'form-url' ), function( form ) {
			$content
				.html( form )
				.removeClass( 'so-loading' );
		} );

		dialog.show();
		$( '#sow-settings-dialog .so-close' ).trigger( 'focus' );

		// Close dialog when escape is pressed.
		$( window ).one( 'keyup', function( e ) {
			if ( e.which === 27 ) {
				dialog.hide();
			}
		} );
	} );

	dialog.find( '.so-close' ).on( 'click keyup', function( e ){
		if ( e.type == 'keyup' && ! window.sowbForms.isEnter( e ) ) {
			return;
		}
		e.preventDefault();
		dialog.hide();
	} );

	dialog.find( '.so-save' ).on( 'click', function( e ) {
		e.preventDefault();
		var $form = dialog.find( 'form' );

		validSave = sowbForms.validateFields( $form )
		if ( typeof validSave == 'boolean' && ! validSave ) {
			return false;
		}

		var $$ = $( this );
		$$.prop( 'disabled', true );

		$form.on( 'submit', function() {
			$$.prop( 'disabled', false );
			dialog.hide();
		} ).trigger( 'submit' );
	} );

	// Enable all widget settings button after the save iframe has loaded.
	$('#so-widget-settings-save').on( 'load', function() {
		$( '#widgets-list .so-widget-settings' ).prop( 'disabled', false );
	} );

	// Automatically open settings modal based on hash
	if( window.location.hash && window.location.hash.substring(0, 10) === '#settings-' ) {
		var openSettingsId = window.location.hash.substring(10);
		$('div[data-id="' + openSettingsId +  '"] button.so-widget-settings').trigger( 'click' );
	}

	$( '.installer-link' ).on( 'click', function( e ) {
		e.preventDefault();
		$( '.installer-container' ).slideToggle( 'fast' );
	} );

	$( '.installer_status' ).on( 'change', function() {
		var $$ = $( this );
		$$.prop( 'disabled', true );
		jQuery.post(
			ajaxurl,
			{
				action: 'so_installer_status',
				nonce: $$.data( 'nonce' ),
				status: $$.is( ':checked' )
			},
			function() {
				$$.prop( 'disabled', false );
			}
		);
	} );

} );
