/home/arranoyd/magicraft/wp-content/plugins/preloader-ultimate/js/pu-single-settings.js
jQuery(document).ready(function($){

	//preloader ultimate table list object
	var pu_list = {
	   
	    init: function() {
	        // This will have its utility when dealing with the page number input
	        var timer;
	        var delay = 500;
	        // Pagination links, sortable link
	        $('.tablenav-pages a, .manage-column.sortable a, .manage-column.sorted a').on('click', function(e) {
	            // We don't want to actually follow these links
	            e.preventDefault();
	            // Simple way: use the URL to extract our needed variables
	            var query = this.search.substring( 1 );
	            
	            var data = {
	                paged: pu_list.__query( query, 'paged' ) || '1',
	                order: pu_list.__query( query, 'order' ) || 'desc',
	                orderby: pu_list.__query( query, 'orderby' ) || 'time'
	            };
	            pu_list.update( data );
	        });
	        // Page number input
	        $('input[name=paged]').on('keyup', function(e) {
	            // If user hit enter, we don't want to submit the form
	            // We don't preventDefault() for all keys because it would
	            // also prevent to get the page number!
	            if ( 13 == e.which )
	                e.preventDefault();
	            // This time we fetch the variables in inputs
	            var data = {
	                paged: parseInt( $('input[name=paged]').val() ) || '1',
	                order: $('input[name=order]').val() || 'desc',
	                orderby: $('input[name=orderby]').val() || 'time'
	            };
	            // Now the timer comes to use: we wait half a second after
	            // the user stopped typing to actually send the call. If
	            // we don't, the keyup event will trigger instantly and
	            // thus may cause duplicate calls before sending the intended
	            // value
	            window.clearTimeout( timer );
	            timer = window.setTimeout(function() {
	                pu_list.update( data );
	            }, delay);
	        });

			//set the height of the preloader preview
			$(".table-preview").each(function(){
				var w = $(this).attr('spinwidth'),
					h = (parseInt(w) + 40)+'px';

				if(w == 'la-3x' || w == 'la-2x' || w == 'la-sm' || w == ''){
					h = ($(this).children().eq(0).height()+40) +'px';
				}
			  	$(this).css('height',h);
			});

	    },
	    /** AJAX call
	     * Send the call and replace table parts with updated version!
	     * @param    object    data The data to pass through AJAX
	     */
	    update: function( data ) {
	        $.ajax({
	            // /wp-admin/admin-ajax.php
	            url: ajaxurl,
	            // Add action and nonce to our collected data
	            data: $.extend(
	                {
	                    _ajax_custom_list_nonce: $('#_ajax_custom_list_nonce').val(),
	                    action: '_ajax_fetch_custom_list',
	                },
	                data
	            ),
	            // Handle the successful result
	            success: function( response ) {

	                // WP_List_Table::ajax_response() returns json
	                var response = $.parseJSON( response );

	                // Add the requested rows
	                if ( response.rows.length )
	                    $('#the-list').html( response.rows );
	                // Update column headers for sorting
	                if ( response.column_headers.length )
	                    $('thead tr, tfoot tr').html( response.column_headers );
	                // Update pagination for navigation
	                if ( response.pagination.bottom.length )
	                    $('.tablenav.top .tablenav-pages').html( $(response.pagination.top).html() );
	                if ( response.pagination.top.length )
	                    $('.tablenav.bottom .tablenav-pages').html( $(response.pagination.bottom).html() );
	                // Init back our event handlers
	                pu_list.init();
	            }
	        });
	    },
	    /**
	     * Filter the URL Query to extract variables
	     * 
	     * @see http://css-tricks.com/snippets/javascript/get-url-variables/
	     * 
	     * @param    string    query The URL query part containing the variables
	     * @param    string    variable Name of the variable we want to get
	     * 
	     * @return   string|boolean The variable value if available, false else.
	     */
	    __query: function( query, variable ) {
	        var vars = query.split("&");
	        for ( var i = 0; i <vars.length; i++ ) {
	            var pair = vars[ i ].split("=");
	            if ( pair[0] == variable )
	                return pair[1];
	        }
	        return false;
	    },
	}
	//initialize the preloader table listing;
	pu_list.init();
	pu_list.update({paged: "1", order: "desc", orderby: "time"});


	$('#preloader-table-form').on('change','.column-cb input[type="checkbox"]',function(){
		if($(this).is(':checked')){
			$('#preloader-table-form tr input[type="checkbox"]').attr('checked','checked');
		}else{
			$('#preloader-table-form tr input[type="checkbox"]').removeAttr('checked');
		}
    });

	$('.add-new-h2').on('click',function(e){
		e.preventDefault();

		$('.save-options').text('Save Settings');
		set_settings(pu_default_settings);
		tb_show("Add New Preloader", "#TB_inline?width=600&height=550&inlineId=preloader-setting-modal");
	});

	$('#preloader-table-form').on('click','.delete-preloader',function(e){
		e.preventDefault();
		var id = $(this).attr('id');

		if(confirm('Are you sure you want to delete this preloader?')){
			delete_preloader(id);
		}
	});

	$('#preloader-table-form').on('click','.edit-preloader',function(e){
		e.preventDefault();
		var id = $(this).attr('id');
		
		retrieve_preloader(id);
	});

	function retrieve_preloader(id){
		var data = {
	      'action': 'retrieve_pu_single_page_settings',
	      'preloader_id':id,
	    };

	    preloader.show(pu_default_settings);

	    $.post(ajaxurl, data, function(res) {

	    	if(res['response'] = 1){

	    		preloader.hide(pu_default_settings);
	    		$('.save-options').text('Update Settings').attr('preloader_id',id);
	    		set_settings(res['settings']);
				tb_show("Update Preloader", "#TB_inline?width=600&height=550&inlineId=preloader-setting-modal");

	    	}else{
	    		notification.show('error','Oops, something went wrong. Please try again.');
	    	}

	    },'json');
	}

	function delete_preloader(id){
		var data = {
	      'action': 'delete_pu_single_page_settings',
	      'preloader_id':id,
	    };

	    preloader.show(pu_default_settings);

	    $.post(ajaxurl, data, function(res) {

	    	if(res['response'] = 1){
	    		notification.show('updated','Preloader sucessfully removed.');
	    	}else{
	    		notification.show('error','Oops, something went wrong. Please try again.');
	    	}

	    	var data = {paged: "1", order: "desc", orderby: "time"};
	    	pu_list.update(data);

	    	preloader.hide(pu_default_settings);

	    },'json');
	}


	var preloader_title 		= $('#preloader-title'),
		available_on 			= $('#available-on'),
		enable_preloader 		= $('#enable-preloader'),
		enable_on_mobile 		= $('#enable-on-mobile'),
		hide_scrollbar   		= $('#hide-scrollbar'),
		spinner_color 			= $('#spinner-color'),
		spinner_background 		= $('#spinner-background'),
		text_spinner 			= $('#text-spinner'),
		text_color 				= $('#text-color'),
		ie_spinner_color 		= $('#ie-spinner-color'),
		ie_spinner_background 	= $('#ie-spinner-background'),
		exit_animation 			= $('#exit-animation'),
		page_entrance 	 		= $('#page-entrance');

	var preview = {
		con 	:$('#spinner-preview'), 	//preview container
		clr 	:spinner_color, 			//spinner color input field
		csw 	:$('#css-width'), 			//css width option container
		bgd 	:spinner_background, 		//background color input field
		cur 	:'',						//hold the current used spinner
		tpe     :'svg',						//spinner type being used
		up_width:function(w){
			if(this.tpe == 'css')
				var spinner = $('#spinner-preview > *').removeClass('la-sm la-2x la-3x').addClass(w);			
			else
				var spinner = $('#spinner-preview > *').css('width',w);

			if(this.tpe == 'gif') this.up_gifsrc(parseInt(w));

			var h = (spinner.height() == 0) ? parseInt(w) : spinner.height();
				
			this.con.css('height',(h+60)+'px');
		},
		up_spinner:function(spinner){
			this.con.html(spinner);
			$('#spinner-preview > *').addClass('center-spin').attr('spintype',this.tpe);

			if(this.tpe != 'custom') this.cur = this.con.html();
			
			var w = (this.tpe == 'css') ? $('input[name="css-width"]:checked').val() : parseInt(spinner_width.noUiSlider.get())+'px';
			this.up_width(w);	
			this.up_options(this.tpe);

			(this.tpe == 'svg') ? preview_ie.opt.show() : preview_ie.opt.hide();
		},
		up_color:function(clr){
			$('#spinner-preview > *').css('color',clr);
			this.con.html(this.con.html());
		},
		up_background:function(clr){
			this.con.css('background-color',clr);
		},
		up_options:function(type){		
			if(type == "css"){
				this.clr.closest('tr').show();
				this.csw.closest('tr').show().prev().hide();
				this.up_color(this.clr.val());
			}else{
				this.clr.closest('tr').hide();
				this.csw.closest('tr').hide().prev().show();
			}
		},
		up_gifsrc: function(w){
	        var src = '128';
	        if(w <= 40) src = '32';      
	        else if(w <= 80) src = '64';

	        var el  = $('#spinner-preview > img');
	        if(el.length != 0){
	        	var str = el.attr('src').replace(/32|64|128/g,src);
	        	el.attr('src',str);
	        } 
		}
	}

	var preview_ie = {
		opt     :$('.ie-spinner-options'),
		con 	:$('#ie-spinner-preview'), 	
		clr 	:ie_spinner_color, 		
		csw 	:$('#ie-css-width'), 			
		bgd 	:ie_spinner_background, 	
		cur 	:'',							
		tpe     :'css',							
		up_width:function(w){
			if(this.tpe == 'css')
				var spinner = $('#ie-spinner-preview > *').removeClass('la-sm la-2x la-3x').addClass(w);			
			else
				var spinner = $('#ie-spinner-preview > *').css('width',w);

			if(this.tpe == 'gif') this.up_gifsrc(parseInt(w));

			var h = (spinner.height() == 0) ? parseInt(w) : spinner.height();
				
			this.con.css('height',(h+60)+'px');
		},
		up_spinner:function(spinner){
			this.con.html(spinner);
			$('#ie-spinner-preview > *').addClass('center-spin').attr('spintype',this.tpe);

			if(this.tpe != 'custom') this.cur = this.con.html();

			var w = (this.tpe == 'css') ? $('input[name="ie-css-width"]:checked').val() : parseInt(ie_spinner_width.noUiSlider.get())+'px';
			this.up_width(w);	
			this.up_options(this.tpe);
		},
		up_color:function(clr){
			$('#ie-spinner-preview > *').css('color',clr);
			this.con.html(this.con.html());
		},
		up_background:function(clr){
			this.con.css('background-color',clr);
		},
		up_options:function(type){
			if(type == "css"){
				this.clr.closest('tr').show();
				this.csw.closest('tr').show().prev().hide();
			}else{
				this.clr.closest('tr').hide();
				this.csw.closest('tr').hide().prev().show();
			}
		},
		up_gifsrc: function(w){
	        var src = '128';
	        if(w <= 40) src = '32';      
	        else if(w <= 80) src = '64';

	        var el  = $('#ie-spinner-preview > img');
	        if(el.length != 0){
	        	var str = el.attr('src').replace(/32|64|128/g,src);
	        	el.attr('src',str);
	        } 
		}
	}

	var spinner_width = document.getElementById('spinner-width'),
		spinner_width_display = document.getElementById('spinner-width-display');

	noUiSlider.create(spinner_width, {
		start: [50],
		step: 1,
		connect: 'lower',
		range: {
			'min': [20],
			'max': [200]
		}
	});
	spinner_width.noUiSlider.on('update', function( values, handle ) {
		var width = parseInt(values[handle])+'px';
		spinner_width_display.innerHTML = width;
		preview.up_width(width);
	});


	var ie_spinner_width = document.getElementById('ie-spinner-width'),
		ie_spinner_width_display = document.getElementById('ie-spinner-width-display');

	noUiSlider.create(ie_spinner_width, {
		start: [50],
		step: 1,
		connect: 'lower',
		range: {
			'min': [20],
			'max': [200]
		}
	});
	ie_spinner_width.noUiSlider.on('update', function( values, handle ) {
		var width = parseInt(values[handle])+'px';
		ie_spinner_width_display.innerHTML = width;
		preview_ie.up_width(width);
	});


	var exit_delay = document.getElementById('exit-delay'),
		exit_delay_display = document.getElementById('exit-delay-display');

	noUiSlider.create(exit_delay, {
		start: [1],
		step: 0.1,
		connect: 'lower',
		range: {
			'min': [0],
			'max': [10]
		}
	});
	exit_delay.noUiSlider.on('update', function( values, handle ) {
		exit_delay_display.innerHTML = (Math.round( values[handle] * 10 ) / 10)+'s';
	});


	var exit_duration = document.getElementById('exit-duration'),
		exit_duration_display = document.getElementById('exit-duration-display');

	noUiSlider.create(exit_duration, {
		start: [1],
		step: 0.1,
		connect: 'lower',
		range: {
			'min': [0],
			'max': [10]
		}
	});
	exit_duration.noUiSlider.on('update', function( values, handle ) {
		exit_duration_display.innerHTML = (Math.round( values[handle] * 10 ) / 10)+'s';
	});

	var text_size = document.getElementById('text-size'),
		text_size_display = document.getElementById('text-size-display');

	noUiSlider.create(text_size, {
		start: [14],
		step: 1,
		connect: 'lower',
		range: {
			'min': [10],
			'max': [50]
		}
	});
	text_size.noUiSlider.on('update', function( values, handle ) {
		var width = parseInt(values[handle])+'px';
		text_size_display.innerHTML = width;
	});


	function set_settings(opt){

		(opt['enable'] == '1') ? enable_preloader.attr('checked','checked') : enable_preloader.removeAttr('checked');
		(opt['mobile'] == '1') ? enable_on_mobile.attr('checked','checked') : enable_on_mobile.removeAttr('checked');
		(opt['scrollbar'] == '1') ? hide_scrollbar.attr('checked','checked') : hide_scrollbar.removeAttr('checked');

		preloader_title.val(opt['title']);
		available_on.val(opt['available_on']);
		spinner_color.val(opt['color']);
		spinner_background.val(opt['background']);
		ie_spinner_color.val(opt['ie_color']);
		ie_spinner_background.val(opt['ie_background']);

		text_spinner.val(opt['text_spinner']),
	    text_color.val(opt['text_color']);
	    text_size.noUiSlider.set(opt['text_size']);

		//update the color picker value
		$('.color-select').trigger('change')
	
		exit_animation.val(opt['exit_anim']);
		page_entrance.val(opt['page_entrance']);

		exit_delay.noUiSlider.set(opt['exit_delay']);
		exit_duration.noUiSlider.set(opt['exit_duration']);
	
		preview.tpe = opt['type'];
		if(preview.tpe == 'css'){
			$('input[name="css-width"][value="'+opt['width']+'"]').attr('checked','checked').siblings().removeAttr('checked');
			spinner_width.noUiSlider.set(50);
		}else{
			$('input[name="css-width"][value=""]').attr('checked','checked').siblings().removeAttr('checked');
			spinner_width.noUiSlider.set(opt['width']);
		}
		preview.up_spinner(opt['html']);


		preview_ie.tpe = opt['ie_type'];
		if(preview_ie.tpe == 'css'){
			$('input[name="ie-css-width"][value="'+opt['ie_width']+'"]').attr('checked','checked').siblings().removeAttr('checked');
			ie_spinner_width.noUiSlider.set(50);
		}else{
			$('input[name="ie-css-width"][value=""]').attr('checked','checked').siblings().removeAttr('checked');
			ie_spinner_width.noUiSlider.set(opt['ie_width']);
		}
		preview_ie.up_spinner(opt['ie_html']);

		var ths = $('.spinner-options .nav-tab-wrapper > div[spintype="'+preview.tpe+'"]');
	    ths.addClass('nav-tab-active').siblings().removeClass('nav-tab-active');
	    ths.closest('.spinner-tabs').find('.spinner-list > div').hide().eq(ths.index()).show();
	    if(preview.tpe == 'custom') $('.spinner-options .upload-preview > img').attr('src',opt['spinner']); 

	    var ths = $('.ie-spinner-options .nav-tab-wrapper > div[spintype="'+preview_ie.tpe+'"]');
	    ths.addClass('nav-tab-active').siblings().removeClass('nav-tab-active');
	    ths.closest('.spinner-tabs').find('.spinner-list > div').hide().eq(ths.index()).show();
	    if(preview_ie.tpe == 'custom') $('.ie-spinner-options .upload-preview > img').attr('src',opt['ie_spinner']);
	}


	$('.save-options').on('click',function(){

		if(available_on.val().trim() == ""){
			alert("Available On field is required.");
			available_on.focus();
			return false;
		}

		var action = $(this).text().trim();

		var preloader_options = {
			preloader_id  : '0',
			title     	  : preloader_title.val().trim(),
			available     : available_on.val().trim().toLowerCase(),
			enable        : (enable_preloader.is(':checked')) ? '1' : '0',
	        mobile        : (enable_on_mobile.is(':checked')) ? '1' : '0',
	        scrollbar     : (hide_scrollbar.is(':checked')) ? '1' : '0',
	        type          : preview.con.find('[spinner]').attr('spintype').trim(),
	        spinner       : preview.con.find('[spinner]').attr('spinner').trim(),
	        width         : (preview.con.find('[spinner]').attr('spintype') == 'css') ? $('input[name="css-width"]:checked').val() : parseInt(spinner_width.noUiSlider.get()),
	        color         : spinner_color.val(),
	        background    : spinner_background.val(),
	        html 		  : preview.con.html().trim(),    
	        exit_anim     : exit_animation.val(),
	        exit_delay    : (Math.round(exit_delay.noUiSlider.get() * 10) / 10),
	        exit_duration : (Math.round(exit_duration.noUiSlider.get() * 10) / 10),
	        ie_type       : preview_ie.con.find('[spinner]').attr('spintype').trim(),
	        ie_spinner    : preview_ie.con.find('[spinner]').attr('spinner').trim(),
	        ie_width      : (preview_ie.con.find('[spinner]').attr('spintype') == 'css') ? $('input[name="ie-css-width"]:checked').val() : parseInt(ie_spinner_width.noUiSlider.get()),
	        ie_color      : ie_spinner_color.val(),
	        ie_background : ie_spinner_background.val(),
	        ie_html       : preview_ie.con.html().trim(),
	        page_entrance : page_entrance.val(),
	        text_spinner  : text_spinner.val().trim(),
	        text_color 	  : text_color.val(),
	        text_size     : parseInt(text_size.noUiSlider.get())	
		};

		if(action == "Update Settings") 
			preloader_options.preloader_id = $(this).attr('preloader_id');

		var data = {
	      'action': 'save_pu_single_page_settings',
	      'preloader_options':preloader_options,
	    };

	    preloader.show(pu_default_settings);

	    $.post(ajaxurl, data, function(res) {

	    	if(res['response'] == 'exist'){

	    		notification.show('error','Oops, Available On field value already exist. Please try again.');

	    	}else if(res['response'] == '1'){
	    		if(preloader_options.preloader_id == "0")
		    		notification.show('updated','Preloader added.');
		    	else
		    		notification.show('updated','Preloader sucessfully updated.');
	    	}else{
	    		notification.show('error','Oops, something went wrong. Please try again.');
	    	}

	    	var data = {paged: "1", order: "desc", orderby: "time"};
	    	pu_list.update(data);

	    	preloader.hide(pu_default_settings);

	    },'json');

	});


	spinner_background.on('blur',function(){
		preview.up_background($(this).val());
	});

	$('.nav-tab-wrapper').on('click','div',function(e){
		var ths = $(this);
	    ths.addClass('nav-tab-active').siblings('div').removeClass('nav-tab-active');
	    ths.closest('.spinner-tabs').find('.spinner-list > div').hide().eq(ths.index()).show();	    
	});


	$(".spinner-options").on("click", ".img-con", function(e){
		preview.tpe = $(this).closest('.spinner-tabs').find('.nav-tab-active').attr('spintype');
		preview.up_spinner($(this).html());
	});
	$(".ie-spinner-options").on("click", ".img-con", function(e){
		preview_ie.tpe = $(this).closest('.spinner-tabs').find('.nav-tab-active').attr('spintype');
		preview_ie.up_spinner($(this).html());	
	});


	$('input[name="css-width"]').change(function(){
		preview.up_width($(this).val());
    });
    $('input[name="ie-css-width"]').change(function(){
		preview_ie.up_width($(this).val());
    });


	$('.spinner-options .upload-preview').on('click','img',function(){
		preview.tpe = 'custom';
		preview.up_spinner($(this).parent().html());
	});
	$('.ie-spinner-options .upload-preview').on('click','img',function(){
		preview_ie.tpe = 'custom';
		preview_ie.up_spinner($(this).parent().html());
	});

	$('.upload-btn').click(function(e) {
		var ths_btn = $(this);

		var image = wp.media({ 
			title: 'Upload Image',
			multiple: false
		}).open()
		.on('select', function(e){
			// This will return the selected image from the Media Uploader, the result is an object
			var uploaded_image = image.state().get('selection').first();
			var image_url = uploaded_image.toJSON().url;
			
			ths_btn.closest('.custom-upload').find('img').attr({'src':image_url,'spinner':image_url});

			var el 	= ths_btn.closest('.custom-upload').find('.upload-preview');
			var ie = ths_btn.closest('.spinner-tabs').parent().hasClass('ie-spinner-options');

			if(ie){
				preview_ie.tpe = 'custom';	
				preview_ie.up_spinner(el.html());
			}else{
				preview.tpe = 'custom';	
				preview.up_spinner(el.html());
			}
		});
	});

	$('.spinner-options .remove-btn').click(function(e) {
		$('.spinner-options .upload-preview > img').removeAttr('src');	
		var html = (preview.cur == '') ? '<div spintype="css" spinner="ball-clip-rotate" class="la-ball-clip-rotate center-spin"><div></div></div>' : preview.cur;
		preview.con.html(html);
		preview.tpe = preview.con.find('[spinner]').attr('spintype');
		preview.up_spinner(preview.con.html());
	});

	$('.ie-spinner-options .remove-btn').click(function(e) {
		$('.ie-spinner-options .upload-preview > img').removeAttr('src');
		var html = (preview_ie.cur == '') ? '<div spintype="css" spinner="ball-clip-rotate" class="la-ball-clip-rotate center-spin"><div></div></div>' : preview_ie.cur;
		preview_ie.con.html(html);
		preview_ie.tpe = preview_ie.con.find('[spinner]').attr('spintype');
		preview_ie.up_spinner(preview_ie.con.html());
	});


	$('.color-select').wpColorPicker({
		change: function(event, ui){
			var ths = $(this),
				id  = ths.attr('id');

			if(id == "spinner-background"){
				setTimeout(function(){
					preview.up_background(ths.val());
				},100);			
			}else if(id == "ie-spinner-background"){
				setTimeout(function(){
					preview_ie.up_background(ths.val());
				},100);			
			}else if(id == "spinner-color"){
				setTimeout(function(){
					preview.up_color(ths.val());
				},100);			
			}else if(id == "ie-spinner-color"){
				setTimeout(function(){
					preview_ie.up_color(ths.val());
				},100);			
			}
		}
	});


	var preloader = {
		bd: $('body'),
		show:function(opt){
			if($('#TB_window').is(':visible')){
				$('#TB_window').hide();
				$('#TB_overlay').hide();
				tb_remove();
			}
			
			this.bd.prepend('<div class="preloader-ultimate-container">'+opt.html+'</div>');
			this.bd.find('.preloader-ultimate-container').css('background-color','rgba(26,188,156,0.6)');
		},
		hide:function(opt){
			var anim_class = 'animated '+opt.exit_anim;

		    $('.preloader-ultimate-container').addClass(anim_class).one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function(){
		      	$(this).remove(); //remove the loading element
		    });	
		}
	}

	var notification = {
		con: $('#notification-messages'),
		show:function(cls, msg){
			$('.is-dismissible').remove();
			this.con.html('<div class="'+cls+' notice is-dismissible below-h2"><p>'+msg+'</p><button type="button" class="notice-dismiss"></button></div>')
		},
		hide:function(){
			this.con.find('.notice').fadeOut(function(){
				$(this).remove();
			});
		}
	}
	$('#notification-messages').on('click','.notice-dismiss',function(){
		var el = $(this).parent();
		el.fadeOut(function(){
			el.remove();
		});
	});

});