var $blog_cat_filters = [];
var $blog_search_order = "date", $blog_current_order = "date";
var $blog_search_sort = "desc", $blog_current_sort = "desc";
var $blog_search_keyword = "";
var $blog_paginate = 1, $blog_page_count = 6;
var $storageType = localStorage; // sessionStorage

var $has_storage = (typeof(Storage) !== "undefined");
var $pathname = window.location.pathname;

(function($){

  $('[data-load]').each(function(i,itm){
  	$(this).load($(this).attr('data-load'), function(e){
    	load_lazy_images();
        if ($('#grant_search').length) {
            var form = $('#grant_search');
            var url = form.attr('action');

            pagination_links();
        };
    });
  });
  
  
  load_lazy_images();
  $(".news-resources-list a").each(function(){
    var match = this.href.match(/\.([a-zA-Z0-9]{2,4})([#;\?]|$)/);
    console.log(match);
    if(match){$(this).parent('li').addClass("download");}
  });
  if ( $('#tag-cloud-1').get(0) ){columnize_tag_cloud();}
  $('.news-tags-block').each(function(i,itm){
  	if ( $('ul', $(this)).children().length == 0)
    	$(this).hide();
  });
  $('.news-related-block').each(function(i,itm){
  	if ( $('ul', $(this)).children().length == 0)
    	$(this).hide();
  });
  
  $('[data-toggle="tooltip"]').tooltip();
  
})(jQuery);

function columnize_tag_cloud(){
	var $totes = $('li', '#tag-cloud-1').length;
    var $third = Math.ceil($totes / 3), $leftover = $totes % 3;
    $( '#tag-cloud-3' ).html( $('li', '#tag-cloud-1').splice( ($third*2), $third ) );
    $( '#tag-cloud-2' ).html( $('li', '#tag-cloud-1').splice( $third, $third ) );
}

$(document).on('click', '.blog-sort-btn', function(e){
	e.preventDefault();
    var $this = $(this);
    if ( $this.attr('data-state') == 'off'){
    	$('.blog-sort-btn').attr('data-state', 'off');
        $('.blog-sort-btn').parent().removeClass('selected');
        
    	$blog_search_order = $(this).attr('data-value');
        $run_blog_filters();
        
        $this.attr('data-state', 'on');
        $this.parent().addClass('selected');
    }
    return false;
});

$(document).on('click', '#blog-filter-clear', function(e){
  e.preventDefault();
  $('#blog-search-keyword').val('');
    $('.blog-cat-btn.active').each(function(i,itm){
      $(this).removeClass('active');
      $(this).parent().removeClass('selected');
  });
  		$('.blog-sort-btn').attr('data-state', 'off');
        $('.blog-sort-btn').parent().removeClass('selected');        
        $('.blog-sort-btn:first').attr('data-state', 'on');
        $('.blog-sort-btn:first').parent().addClass('selected');
    $clear_blog_filters();
    $filter_it_blog();
});

$(document).on('click', '.blog-cat-btn', function(e){
  e.preventDefault();
    var $this = $(this);
    if ($this.hasClass('active')){
      $this.removeClass('active');
      $(this).parent().removeClass('selected');
    }
    else{
      $this.addClass('active');
      $(this).parent().addClass('selected');
    }
  $blog_cat_filters = [];
  $('.blog-cat-btn.active').each(function(i,itm){$blog_cat_filters.push($(this).attr('data-value'));});
  $run_blog_filters();
});

$(document).on('click', '.btn-view-more-blog', function(e){
  e.preventDefault();
    $('.page-pending').slice(0,$blog_page_count).show().removeClass('page-pending');
    if ( $('.page-pending').length == 0){$(this).hide();}
    $blog_paginate = $blog_paginate + 1;
    $store_blog_filters();
    return false;
});

var $store_blog_filters = function(){
  if ($has_storage){
      var $all_filters = {blog_cat_filters: $blog_cat_filters, blog_search_order: $blog_search_order, blog_search_sort: $blog_search_sort, blog_search_keyword: $blog_search_keyword, blog_paginate: $blog_paginate};
        $storageType.all_blog_filters = JSON.stringify($all_filters);
    }
}

var $clear_blog_filters = function(){
  	$blog_cat_filters = [];
    $blog_search_order = "date";
    $blog_search_sort = "desc";
    $blog_search_keyword = "";
    $blog_paginate = 1;
    $store_blog_filters();
};

$(document).on('submit', '#blog-search-form,#blog-search-form-mobile', function(e){
  e.preventDefault();
  $run_blog_filters();
  return false;
});

var $run_blog_filters = function(){
  
    $blog_search_keyword = $('#blog-search-keyword').val();
    
    if ($blog_search_keyword.length){
      $.ajax({
             type: "POST",
             url: $("#blog-search-form").attr('action'),
             data: $("#blog-search-form").serialize(),
             dataType: 'html',
             success: function(xml)
             {
              var $ids = [];
                $(xml).find('item').each(function(){
                    $ids.push( $(this).text() );
                });
                $filter_it_blog($ids);
             }
           });

    }
    else
    {$filter_it_blog();}
    
    $store_blog_filters();
};

var $filter_it_blog = function($ids){

  if($blog_search_order !== $blog_current_order || $blog_search_sort !== $blog_current_sort){
        $run_blog_sort();
        $blog_current_order = $blog_search_order;
        $blog_current_sort = $blog_search_sort;
    }
    
    var $r_count = 0;
  $('.blog-entry').each(function(i,itm){
      var $this = $(this), $show = true;
        
        $(this).removeClass('page-pending');
        
        // apply keyword search filters
        if (typeof $ids !== "undefined" && $ids.length > 0){
          var $this_id = $this.attr('id');
            if ( $ids.indexOf( $this_id ) === -1) {
              $show = false;
            }
        }
        
        // apply category filters
        if ($blog_cat_filters.length > 0){
          $has_cat = false;
          $.each($blog_cat_filters, function(i,itm){
              if ($this.hasClass(itm))
                  $has_cat = true;
          });
          $show = $has_cat;
        }
               
        if ($show){
          
            $r_count++;
            if ($r_count <= ($blog_paginate * $blog_page_count)){$this.show();}
            else{
              $this.hide();
                $this.addClass('page-pending');
            }
        }
        else
          $this.hide();
            
        if ($('.blog-entry:visible').length == 0){$('#no-results').show();}
        else{$('#no-results').hide();}
            
        if ( $('.page-pending').length == 0){$('.btn-view-more-blog').hide();} 
        else{$('.btn-view-more-blog').show();}
    });
};

var $run_blog_sort = function() {
    var $container = $('#blog-container-v2');

    var $wrapper = $($container);
    var $attr = 'id';

    switch ($blog_search_order) {
        case 'date':
            $attr = 'data-date';
            break;
        case 'popular':
            var $attr = 'data-tracking';
            break;
    }

    $wrapper.find('.blog-entry').sort(function(a, b) {
       return +b.getAttribute($attr) - +a.getAttribute($attr);
    }).appendTo($wrapper);


}

var $news_cat_filters = [];
var $news_search_order = "date", $news_current_order = "date";
var $news_search_sort = "desc", $news_current_sort = "desc";
var $news_search_keyword = "";
var $news_paginate = 1, $news_page_count = 10;


$(document).on('click', '.news-sort-btn', function(e){
       e.preventDefault();
    var $this = $(this);
    if ( $this.attr('data-state') == 'off'){
       $('.news-sort-btn').attr('data-state', 'off');
        $('.news-sort-btn').parent().removeClass('selected');
        
       $news_search_order = $(this).attr('data-value');
        $run_news_filters();
        
        $this.attr('data-state', 'on');
        $this.parent().addClass('selected');
    }
    return false;
});

$(document).on('click', '#news-filter-clear', function(e){
  e.preventDefault();
  $('#news-search-keyword').val('');
    $('.news-cat-btn.active').each(function(i,itm){
      $(this).removeClass('active');
      $(this).parent().removeClass('selected');
  });
    $clear_news_filters();
    $filter_it_news();
});

$(document).on('click', '.news-cat-btn', function(e){
  e.preventDefault();
    var $this = $(this);
    if ($this.hasClass('active')){
      $this.removeClass('active');
      $(this).parent().removeClass('selected');
    }
    else{
      $this.addClass('active');
      $(this).parent().addClass('selected');
    }
  $news_cat_filters = [];
  $('.news-cat-btn.active').each(function(i,itm){$news_cat_filters.push($(this).attr('data-value'));});
  $run_news_filters();
});

$(document).on('click', '.btn-view-more-news', function(e){
  e.preventDefault();
    $('.page-pending').slice(0,$news_page_count).show().removeClass('page-pending');
    if ( $('.page-pending').length == 0){$(this).hide();}
    $news_paginate = $news_paginate + 1;
    $store_news_filters();
    return false;
});

var $store_news_filters = function(){
  if ($has_storage){
      var $all_filters = {news_cat_filters: $news_cat_filters, news_search_order: $news_search_order, news_search_sort: $news_search_sort, news_search_keyword: $news_search_keyword, news_paginate: $news_paginate};
        $storageType.all_news_filters = JSON.stringify($all_filters);
    }
}

var $clear_news_filters = function(){
       $news_cat_filters = [];
    $news_search_order = "date";
    $news_search_sort = "desc";
    $news_search_keyword = "";
    $news_paginate = 1;
    $store_news_filters();
};

$(document).on('submit', '#news-search-form,#news-search-form-mobile', function(e){
  e.preventDefault();
  $run_news_filters();
  return false;
});

var $run_news_filters = function(){
  
    $news_search_keyword = $('#news-search-keyword').val();
    
    if ($news_search_keyword.length){
      $.ajax({
             type: "POST",
             url: $("#news-search-form").attr('action'),
             data: $("#news-search-form").serialize(),
             dataType: 'html',
             success: function(xml)
             {
              var $ids = [];
                $(xml).find('item').each(function(){
                    $ids.push( $(this).text() );
                });
                $filter_it_news($ids);
             }
           });

    }
    else
    {$filter_it_news();}
    
    $store_news_filters();
};

var $filter_it_news = function($ids){

  if($news_search_order !== $news_current_order || $news_search_sort !== $news_current_sort){
        $run_news_sort();
        $news_current_order = $news_search_order;
        $news_current_sort = $news_search_sort;
    }
    
    var $r_count = 0;
  $('.news-entry').each(function(i,itm){
      var $this = $(this), $show = true;
        
        $(this).removeClass('page-pending');
        
        // apply keyword search filters
        if (typeof $ids !== "undefined" && $ids.length > 0){
          var $this_id = $this.attr('id');
            if ( $ids.indexOf( $this_id ) === -1) {
              $show = false;
            }
        }
        
        // apply category filters
        if ($news_cat_filters.length > 0){
          $has_cat = false;
          $.each($news_cat_filters, function(i,itm){
              if ($this.hasClass(itm))
                  $has_cat = true;
          });
          $show = $has_cat;
        }
               
        if ($show){
          
            $r_count++;
            if ($r_count <= ($news_paginate * $news_page_count)){$this.show();}
            else{
              $this.hide();
                $this.addClass('page-pending');
            }
        }
        else
          $this.hide();
            
        if ($('.news-entry:visible').length == 0){$('#no-results').show();}
        else{$('#no-results').hide();}
            
        if ( $('.page-pending').length == 0){$('.btn-view-more-news').hide();}
        else{$('.btn-view-more-news').show();}
    });
};

var $run_news_sort = function() {
    var $container = $('#news-container-v2');

    var $wrapper = $($container);
    var $attr = 'id';

    switch ($news_search_order) {
        case 'date':
            $attr = 'data-date';
            break;
        case 'popular':
            var $attr = 'data-tracking';
            break;
    }

    $wrapper.find('.news-entry').sort(function(a, b) {
       return +b.getAttribute($attr) - +a.getAttribute($attr);
    }).appendTo($wrapper);


}



function load_lazy_images(){
	// replace transparent placeholder image with true image source
	$('img[data-src]').each(function(i,itm){
		var $src = $(this).attr('data-src'), $src_alt = $(this).attr('data-src-alt');
		if ($src_alt && !$src)
			$src = $src_alt;
		if ($src)
			$(this).prop('src', $src).removeAttr('data-src');
	});
}

		
$(function() {

	
	//Grant ajax search results
	if ($('#grant_search').length) {
		var form = $('#grant_search');
		var url = form.attr('action');

		pagination_links();
	};

	$(document).on('submit', '#grant_search', function(e) {
		e.preventDefault();
        
        var form = $('#grant_search');
        var url = form.attr('action');

		var form_data = form.serialize();

		post_search(url, form_data);
	});

	$(document).on('click', '#prev_link, #prev_link2', function(e) {
		e.preventDefault();
        
        var form = $('#grant_search');
        var url = form.attr('action');

		var form_data = (form.data('form_data') != undefined) ? form.data('form_data') : form.serialize();

		post_search(url, form_data, prev_offset);
	});

	$(document).on('click', '#next_link, #next_link2', function(e) {
		e.preventDefault();
        
        var form = $('#grant_search');
        var url = form.attr('action');

		var form_data = (form.data('form_data') != undefined) ? form.data('form_data') : form.serialize();

		post_search(url, form_data, next_offset);
	});
    

});

function post_search(url, form_data, offset) {

	offset = (typeof(offset) != 'undefined') ? offset : 0;

	if (parseInt(offset) < 0) {
		return false;
	};

	form_data = form_data + '&offset=' + offset;

	$('#grant_search').data('form_data', form_data);

	$.post(
		url,
		form_data,
		function(data) {
			$('.tbody').html(data);
			$('#grant_total_results').text(total_results);

			$('#search_pages, #search_pages2').text('Page ' + page + ' of ' + total_pages);

			pagination_links();
	});
}

var load_portfolio_toggle = true;

function pagination_links() {
	
    console.log('show_prev: ' + show_prev, 'show_next: ' + show_next);

	show_prev != '' ? $('#prev_link, #prev_link2').show() : $('#prev_link, #prev_link2').hide();

	show_next != '' ? $('#next_link, #next_link2').show() : $('#next_link, #next_link2').hide();
    
    if ( load_portfolio_toggle ){
    	$('.table-row-toggle').toggler({
          forceClose: false,
          startClosed: true,
          toggleClass: 'table-row-toggle',
          manuallyClassToggleContent: true
        });
        
        load_portfolio_toggle = false;
    }
    
}

(function( $ ){

    var defaults = {
        toggleEvent: 'click',
		toggleClass: 'toggler',
        delay: 250,
        forceClose: true,
        startClosed: false,
		manuallyClassToggleContent: false
    },


	/* `Private Methods
	---------------------------------------------- */

	helpers = {
	},



	/* `Public Methods
	---------------------------------------------- */

    methods = {

        init: function( options ) {

			if ($(this).length === 0) { return false }

            var settings = $.extend( true, {}, defaults, options);
			var toggleClass = '.' + settings.toggleClass;

			$(document).on('click', toggleClass, function(e) {
				e.preventDefault();
				e.stopPropagation();

				if (settings.forceClose == true) {

					if ( $(this).siblings().hasClass('toggle-open') ) {
						$(this)
							.removeClass('active')
							.siblings()
							.toggleClass('toggle-open')
							.slideUp(settings.delay);
					}

					else {

						$('.toggle-content')
							.slideUp(settings.delay)
							.removeClass('toggle-open')
							.siblings('.toggler')
							.removeClass('active');

						$('.toggle-content').promise().done(function() {
							$(this)
								.addClass('active')
								.siblings()
								.toggleClass('toggle-open')
								.slideDown(settings.delay)
						})
					}
				}

				else {
					$(this).toggleClass('active');
					if (settings.manuallyClassToggleContent === true) {$(this).siblings('.toggleable').slideToggle().toggleClass('toggle-open');} else {$(this).siblings().slideToggle().toggleClass('toggle-open');}
				}
			});

            return this.each(function(i) {
				var 
				$this = $(this);

				if (settings.startClosed == false) {
					if ($this.siblings().is(':visible')) {
						$this
							.addClass('active')
							.siblings()
							.addClass('toggle-open');
					}
					else {
						$this
							.removeClass('active')
							.siblings()
					}
				}

            });

        }
    };

    $.fn.toggler = function( method ) {

        if ( methods[method] ) {
            return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
        } else if ( typeof method === 'object' || ! method ) {
            return methods.init.apply( this, arguments );
        } else {
        return $.error( 'Method ' + method + ' does not exist on jQuery.toggler' );
        }
    };

})(jQuery);
