// source --> https://oxfordshireyouth.org/wp-content/mu-plugins/raiser-wp/pro/load-more/load-more.js?v=1.1&#038;ver=7.0 
jQuery(document).ready(function($){

	var insertBefore = '#raiser-load-more-results';
	
	$('#raiser-load-more-button').click(function(e){
		e.preventDefault();

		$('.raiser-paginate-spinner, .raiser-load-more-spinner').show();
		$('#raiser-load-more-button').hide();

		var data = raiser_getDataAttributes($(this));

		if ( typeof data.insert_before !== "undefined") {
			insertBefore = data.insert_before;
		}

		raiser_get_more_posts( data, function(response){

			$('.raiser-paginate-spinner, .raiser-load-more-spinner').hide();

			$(insertBefore).before( response.html );

			// set next page
			$('#raiser-load-more-button').attr('data-page',response.next_page);

			$('#raiser-count-summary').html( response.post_count_summary );

			// set page in url
			raiser_updateURLParam('lm-at', data.page, 'lm-state', false);

			// hide load more button if no more posts
			if( response.next_page == -1 ){
				$('#raiser-load-more-button').hide();
			} else {
				$('#raiser-load-more-button').show();
			}

			$(document).trigger("raiser-load-more-fetched", [{response:response}] );

		});
	});

	$(document).on('click', '.raiser-paginate button', function(e){
		e.preventDefault();

		$('.raiser-paginate-spinner, .raiser-load-more-spinner').show();

		var data = raiser_getDataAttributes($(this).parent());
		data.page = $(this).attr('data-page');

		$('.raiser-paginate button').removeClass('paging-nav__page--active');
		$('.raiser-paginate button[data-page="'+data.page+'"]').not('.raiser-paginate-arrows').addClass('paging-nav__page--active');		

		raiser_get_more_posts( data, function(response){

			$('.raiser-paginate-spinner, .raiser-load-more-spinner').hide();

			$('.raiser-posts').html( response.html );
			$('.current-page').text( data.page );

			$('.raiser-pagination').html( response.pagination );
			// move browser to posts
		    $([document.documentElement, document.body]).animate({
		        scrollTop: $(".raiser-posts").offset().top - 200
		    }, 500);

			raiser_updateURLParam('lm-page', data.page, 'lm-state', true);
		});
	});	

	// back browser
	$(window).on("popstate", function(e) {
	    if( e.originalEvent.state == 'lm-page' ){

	    	$('.raiser-paginate-spinner, .raiser-load-more-spinner').show();

	    	var data = raiser_getDataAttributes($('.raiser-paginate'));
	    	data.page = rasier_$_GET('lm-page');

			raiser_get_more_posts( data, function(response){

				$('.raiser-paginate-spinner, .raiser-load-more-spinner').hide();
				
				$('.raiser-posts').html( response.html );
				$('.current-page').text( data.page );

				$('.raiser-pagination').html( response.pagination );
			});	    	
	    }
	});	
	// on page load, if first page, add 1 to url
	setTimeout(function(){
		if( $('.raiser-paginate').length && rasier_$_GET('lm-page') == null ) {
			raiser_updateURLParam('lm-page', 1, 'lm-state', false);
		}
	},1);

	// set next page if lm-at in get
	if( rasier_$_GET('lm-at') != null ) {
		$('#raiser-load-more-button').attr('data-page', parseInt(rasier_$_GET('lm-at'))+1);
	}

	// tax filters
	$('.raiser-filter').change(function(){
		$('.raiser-filter-form').submit();
	});
	// search text field
	$('.raiser-filter-text').keyup(function(){
		if( $(this).val().length < 3 && $(this).val() != '' ){
			return;
		}
		$('.raiser-filter-form').submit();
	});

	// tax filter clear
	$('.raiser-filter-clear').click(function(){
		$('.raiser-filter').each(function(){
			$(this).val(-1);
		});
		$('.raiser-filter-form').submit();
	});

	// when form is submitted
	window.raiserLoadMore = function(e){
		e.preventDefault();

		// replace entire results div
		$(insertBefore).parent().html('<div id="raiser-load-more-results"></div>')
		$('#raiser-load-more-button').hide();
		$('#raiser-count-summary').parent().hide();
		$('.raiser-paginate-spinner, .raiser-load-more-spinner').show();

		var form_data = $(e.target).serialize();
		$('#raiser-load-more-button').attr('data-form_data', form_data);

		// set to page 1
		$('#raiser-load-more-button').attr('data-page', 1);

		var data = raiser_getDataAttributes($('#raiser-load-more-button'));	
		//data.form_data = form_data;

		raiser_get_more_posts( data, function(response){

			$('.raiser-paginate-spinner, .raiser-load-more-spinner').hide();

			$(insertBefore).before( response.html );

			// set next page
			$('#raiser-load-more-button').attr('data-page',response.next_page);
			$('#raiser-count-summary').html( response.post_count_summary );
			$('#raiser-count-summary').parent().show();

			// set form data in url for back button
			if (history.pushState) {
		   		var newurl = window.location.protocol + "//" + window.location.host + window.location.pathname + '?'+form_data;
		    	window.history.replaceState({path:newurl},'',newurl);
		    }

			// hide load more button if no more posts
			if( response.next_page == -1 ){
				$('#raiser-load-more-button').hide();
			} else {
				$('#raiser-load-more-button').show();
			}

			$(document).trigger("raiser-load-more-fetched", [{response:response}] );
		});

	}

	var rwlmCurrentRequest = null;
	function raiser_get_more_posts(data, callback) {

		// Do the AJAX call
		rwlmCurrentRequest = $.ajax({
			url: raiser.ajax_url/*+location.search*/,
			type: 'post',
			dataType: "json",
			data: {
				action: data.action,
				data: data,
			},
		    beforeSend: function()    {           
		        if(rwlmCurrentRequest != null) {
		            rwlmCurrentRequest.abort();
		        }
		    },			
			success: function( response ) {
				callback(response);
			}
		});
	}	

	function raiser_getDataAttributes(node) {
	    var d = {}, 
	        re_dataAttr = /^data\-(.+)$/;

	    $.each(node.get(0).attributes, function(index, attr) {
	        if (re_dataAttr.test(attr.nodeName)) {
	            var key = attr.nodeName.match(re_dataAttr)[1];
	            d[key] = attr.nodeValue;
	        }
	    });

	    return d;
	}	
	function rasier_$_GET(param) {
		var vars = {};
		window.location.href.replace( location.hash, '' ).replace( 
			/[?&]+([^=&]+)=?([^&]*)?/gi, // regexp
			function( m, key, value ) { // callback
				vars[key] = value !== undefined ? decodeURIComponent(value) : '';
			}
		);
		if ( param ) {
			return vars[param] ? vars[param] : null;	
		}
		return vars;
	}
	window.raiser_updateURLParam = function(param, paramVal,page, push){
	    var TheAnchor = null;
	    var newAdditionalURL = "";
	    var tempArray = window.location.href.split("?");
	    var baseURL = tempArray[0];
	    var additionalURL = tempArray[1];
	    var temp = "";

	    if (additionalURL) 
	    {
	        var tmpAnchor = additionalURL.split("#");
	        var TheParams = tmpAnchor[0];
	            TheAnchor = tmpAnchor[1];
	        if(TheAnchor)
	            additionalURL = TheParams;

	        tempArray = additionalURL.split("&");

	        for (var i=0; i<tempArray.length; i++)
	        {
	            if(tempArray[i].split('=')[0] != param)
	            {
	                newAdditionalURL += temp + tempArray[i];
	                temp = "&";
	            }
	        }        
	    }
	    else
	    {
	        var tmpAnchor = baseURL.split("#");
	        var TheParams = tmpAnchor[0];
	            TheAnchor  = tmpAnchor[1];

	        if(TheParams)
	            baseURL = TheParams;
	    }

	    if(TheAnchor)
	        paramVal += "#" + TheAnchor;

	    var rows_txt = temp + "" + param + "=" + paramVal;
	    var new_url = baseURL + "?" + newAdditionalURL + rows_txt;

	    if(push){
	    	window.history.pushState(param, page, new_url )
		} else { 
	    	window.history.replaceState("lm-page", "", new_url);
		}
	}

});