$('body').on('click', '.spoiler', function() {
	$(this).toggle();
	$(this).next('div').toggle();
});

$('body').on('click', '.blur', function(e) {
	e.stopPropagation();
	$(this).prev().toggle();
	$(this).toggle();
	$(this).next('a').toggle();
});

$('body').on('click', '.toggleblur', function(e) {
	e.stopPropagation();
	$(this).toggle();
	$(this).next('a').next('a').toggle();
	$(this).next('a').toggle();
});

$('body').on('click', '#emoji', function(e) {
	$(this).closest(".element").find('.picker').toggle();
	$('#emojisearch').focus();
});

$('body').on('click', '#contact', function(e) {
	$(this).closest(".element").find('.contactpicker').toggle();
	$('#contactsearch').focus();
});

$('body').on('click', '.emoji', function(e) {
	var code = $(this).attr("title");
	console.log(code);
	boxtxt = $(this).closest(".element").find("#status").val();
	$(this).closest(".element").find("#status").val(boxtxt + ":"+code+":");
});

$('body').on('click', '.contact', function(e) {
	var code = $(this).attr("title");
	console.log(code);
	boxtxt = $(this).closest(".element").find("#status").val();
	$(this).closest(".element").find("#status").val(boxtxt + code+" ");
});

$(document).on("change paste keyup","#emojisearch",function () {
   var val = $(this).val();
   var list = $(this).closest('.element').find('.emojilist');
   console.log(val); 
	$.get("action.php?a=true&emoji=" + val, function(data) {
		list.html(data);
	});
});

$(document).on("change paste keyup","#contactsearch",function () {
   var val = $(this).val();
   var list = $(this).closest('.element').find('.contactlist');
   console.log(val); 
	$.get("action.php?a=true&contact=" + val, function(data) {
		list.html(data);
	});
});

// Open Lightbox
$('body').on('click', '.open-lightbox', function(e) {
	e.preventDefault();
	e.stopPropagation();
	var image = $(this).attr('href');
	$('html').addClass('no-scroll');
	$('body').append('<div class="lightbox-opened"><img style="max-height:100%; max-width:100%;" src="' + image + '"></div>');
});

// Close Lightbox
$('body').on('click', '.lightbox-opened', function() {
	$('html').removeClass('no-scroll');
	$('.lightbox-opened').remove();
});

window.addEventListener("scroll", function() {
	onScrollDiv()
});
window.addEventListener("DOMContentLoaded", function() {
	onScrollDiv()
});

function onScrollDiv() {
	var images = document.querySelectorAll('.lazyload');
	for (var i = 0, nb = images.length; i < nb; i++) {
		var img = images[i]
		var rect = img.getBoundingClientRect();
		var isVisible = ((rect.top - window.innerHeight) < 500 && (rect.bottom) > -50) ? true : false;

		if (isVisible) {
			if (!img.src) {
				img.src = img.dataset.src;
			}
		}
	}
}

$('body').on('click', '.replies', function(e) {
	e.preventDefault;
	$(".reply").remove();
	$(".element").removeClass("element_pad");
	$(this).closest(".element").addClass("element_pad");
	/*$('.replies_container').html('');*/
	var id = $(this).parent().parent().attr('id');
	if($('#' + id+'.replies_container').find('.reply').length < 1){
		$('#' + id+'.replies_container').html("<p><img src='img/loading.gif'></p>");
	}
	$.get("action.php?a=true&replies=" + id, function(data) {
		$('#' + id+'.replies_container').html(data);
		$('#' + id+'.replies_container').delay(800).fadeIn(400);
		$('#a' + id).html('');
		$('#' + id+".replies_container .ancestor").appendTo('#a' + id);
	});
});

$.fn.isOnScreen = function(){

    var win = $(window);

    var viewport = {
        top : win.scrollTop(),
        left : win.scrollLeft()
    };
    viewport.right = viewport.left + win.width();
    viewport.bottom = viewport.top + win.height();

    var bounds = this.offset();
    bounds.right = bounds.left + this.outerWidth();
    bounds.bottom = bounds.top + this.outerHeight();

    return (!(viewport.right < bounds.left || viewport.left > bounds.right || viewport.bottom < bounds.top || viewport.top > bounds.bottom));

};
/*
$('body').on('click', '.postbody:not(a)', function(e) {
	e.preventDefault;
	$(".reply").remove();
	$(".element").removeClass("element_pad");
	$(this).closest(".element").addClass("element_pad");
	//$('.replies_container').html('');
	var id = $(this).closest(".post").attr('id');
	if($('#' + id+'.replies_container').find('.reply').length < 1){
		$('#' + id+'.replies_container').html("<p><img src='img/loading.gif'></p>");
	}
	$.get("action.php?a=true&replies=" + id, function(data) {
		$('#' + id+'.replies_container').html(data);
		$('#' + id+'.replies_container').delay(800).fadeIn(400);
		$('#a' + id).html('');
		$('#' + id+".replies_container .ancestor").appendTo('#a' + id);
	});
});
*/
/*
$('body').on('click', '.postbody:not(a)', function(e) {
	e.preventDefault;
	$(".reply").remove();
	$(".element").removeClass("element_pad");
	$(this).closest(".element").addClass("element_pad");
	var id = $(this).closest(".post").attr('id');
	var offset = $('#'+id+' .postHeader').offset().top + 200;
	if($('#' + id+'.replies_container').find('.reply').length < 1){
		$('#' + id+'.replies_container').html("<p><img src='img/loading.gif'></p>");
	}
	$.get("action.php?a=true&replies=" + id, function(data) {
		$('#' + id+'.replies_container').html(data);
		$('#' + id+'.replies_container').delay(800).fadeIn(400);
		$('#a' + id).html('');
		$.when($('#' + id+".replies_container .ancestor").appendTo('#a' + id)).then(function() {
		  if ($('#'+id+'.post_buttons').isOnScreen() == false) { 
				$('html, body').animate({
					scrollTop: offset
				}, 1000);

			} 
		});
	});
});
*/

$('body').on('click', '.ldr:not(.tlicon)', function(e) {
	$('.tlicon').each(function(a){
       $( this ).removeClass('tiselected')
     });
});

$('body').on('click', '.ldr', function(e) {
	e.preventDefault();
	location.hash = "#top";
	$('#loader').html('');
	$('#loaded').remove();
	var url = $(this).attr('href');
	var id = $(this).attr('id');
	localStorage.setItem("content", $('#content .element').detach());
	$('#content').html('<center><div class="loadingImage"></div></center>');
	$.get(url + "&ajax=1", function(data) {
		$('#content').html(data);
		history.pushState({}, "Dashboard FE", url);
		var thread = getUrlParameter('thread');
	});
});


$('body').on('click', '.gotop a', function(e) {
	e.preventDefault();
	$('html, body').animate({
		scrollTop: 0
	}, 800);
	return false;
});

$('body').on('click', '.topbar:not(a)', function(e) {
	if(e.target !== e.currentTarget) return;
	e.preventDefault();
	$('html, body').animate({
		scrollTop: 0
	}, 800);
	return false;
});

$('body').on('click', '#loader', function() {
	var cnt = $("#loaded").contents();
	//		$("#content").prepend(cnt);
	$('#content').find('.element').first().after(cnt);
	$("#loaded").remove();
	$("#loader").html('');
});

$('body').on('click', '.nsfw', function() {
	var id = $(this).attr('id');
	$.get("action.php?a=true&nsfw=" + id, function(data) {
		if (data == '1') {
			$('#' + id + '.nsfw').toggleClass('nsfw unnsfw');
			$('#' + id + '.unnsfw').html('NSFW <span class="fontello">&#xf205;</span>');
		}
	});
});

$('body').on('click', '.unnsfw', function() {
	var id = $(this).attr('id');
	$.get("action.php?a=true&nsfw=" + id, function(data) {
		if (data == '1') {
			$('#' + id + '.unnsfw').toggleClass('unnsfw nsfw');
			$('#' + id + '.nsfw').html('NSFW <span class="fontello">&#xf204;</span>');
		}
	});
});

$('body').on('click', '.block', function() {
	var id = $(this).attr('id');
	$.get("action.php?a=true&mode=true&block=" + id, function(data) {
		
			$('#' + id + '.block').removeClass('block').addClass('unblock');
			$('#' + id + '.unblock').html('Unblock');
		
	});
});

$('body').on('click', '.unblock', function() {
	var id = $(this).attr('id');
	$.get("action.php?a=true&mode=off&block=" + id, function(data) {
		
			$('#' + id + '.unblock').removeClass('unblock').addClass('block');
			$('#' + id + '.block').html('Block');
		
	});
});

$('body').on('click', '.autl', function() {
	var id = $(this).attr('id');
	var list = $(this).attr('list');
	$.get("action.php?a=true&mode=true&user=" + id + "&list=" + list, function(data) {
		
		$('#' + id + '.autl').removeClass('autl').addClass('rutl');
		/* $('#' + id + '.rutl li').html('Added'); */
	});
});

$('body').on('click', '.rutl', function() {
	var elem = $(this);
	var id = $(this).attr('id');
	var list = $(this).attr('list');
	$.get("action.php?a=true&mode=off&user=" + id + "&list=" + list, function(data) {
		$('#' + id + '.rutl').removeClass('rutl').addClass('autl');
		/* $(elem).find('li').html('Removed');*/
	});
});



$('body').on('click', '.hide', function() {
	var id = $(this).attr('id');
	$.get("action.php?a=true&mode=true&hide=" + id, function(data) {
		$('#' + id + '.hide').removeClass('hide').addClass('unhide');
		$('#' + id + '.unhide').html('Unhide Thread');
		console.log(data);
	});
});

$('body').on('click', '.unhide', function() {
	var id = $(this).attr('id');
	$.get("action.php?a=true&mode=off&hide=" + id, function(data) {
		$('#' + id + '.unhide').removeClass('unhide').addClass('hide');
		$('#' + id + '.hide').html('Hide Thread');
		console.log(data);
	});
});

$('body').on('click', '.bookmark', function() {
	var id = $(this).attr('id');
	$.get("action.php?a=true&mode=true&bookmark=" + id, function(data) {
		$('#' + id + '.bookmark').removeClass('bookmark').addClass('unbookmark');
		$('#' + id + '.unbookmark').html('Unbookmark');
		console.log(data);
	});
});

$('body').on('click', '.unbookmark', function() {
	var id = $(this).attr('id');
	$.get("action.php?a=true&mode=off&bookmark=" + id, function(data) {
		$('#' + id + '.unbookmark').removeClass('unbookmark').addClass('bookmark');
		$('#' + id + '.bookmark').html('Bookmark');
		console.log(data);
	});
});

$('body').on('click', '.follow', function() {
	var id = $(this).attr('id');
	$.get("action.php?a=true&follow=" + id, function(data) {
		console.log(data);
		if (data == '1') {
			$('#' + id + '.follow').removeClass('follow').addClass('unfollow');
			$('#' + id + '.unfollow').html('<span class=\'fontello\'></span> Following');
		}
	});
});

$('body').on('click', '.unfollow', function() {
	var id = $(this).attr('id');
	$.get("action.php?a=true&unfollow=" + id, function(data) {
		
		if (data == '1') {
			$('#' + id + '.unfollow').removeClass('unfollow').addClass('follow');
			$('#' + id + '.follow').html('Follow');
		}
	});
});

$('.container').on('mouseenter', '.user', function(event) {
	event.stopPropagation();
    event.stopImmediatePropagation();
	var id = $(this).attr('id');
	console.log(id);
	$(this).append("<div class='userinfo' id='" + id + "'><img src='loading.gif'></div>");
	$.when($.get("action.php?a=true&userinfo=" + id, function(data) {
		$('#' + id + '.userinfo').html(data);
	})).then(function(){
		$('#' + id + '.userinfo').fadeIn();
	});
});

$('.container').on('mouseleave', '.user', function(event) {
	event.stopPropagation();
    event.stopImmediatePropagation();
	$(this).find('.userinfo').fadeOut(300, function() { $(this).remove(); });
});


$('.container').on('mouseenter', '.preview', function(event) {
	event.stopPropagation();
    event.stopImmediatePropagation();
	var id = $(this).attr('id');
	console.log(id);
	$(this).before("<div class='notif previewpost' id='" + id + "'></div>");
	$.when($.get("action.php?a=true&previewpost=" + id, function(data) {
		$('#' + id + '.previewpost').html(data);
	})).then(function(){
		$('#' + id + '.previewpost').fadeIn();
	});
});

$('.container').on('mouseleave', '.preview', function(event) {
	event.stopPropagation();
    event.stopImmediatePropagation();
	$('.container').find('.previewpost').fadeOut(300, function() { $(this).remove(); });
});

var getUrlParameter = function getUrlParameter(sParam) {
	var sPageURL = window.location.search.substring(1),
		sURLVariables = sPageURL.split('&'),
		sParameterName,
		i;

	for (i = 0; i < sURLVariables.length; i++) {
		sParameterName = sURLVariables[i].split('=');

		if (sParameterName[0] === sParam) {
			return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
		}
	}
};

function getMode() {
	if (typeof getUrlParameter('user') !== 'undefined') {
		console.log('list');
		return "&user=" + getUrlParameter('user');
	}
	if (typeof getUrlParameter('list') !== 'undefined') {
		console.log('list');
		return "&list=" + getUrlParameter('list');
	}
	if (typeof getUrlParameter('mode') !== 'undefined') {
		console.log('mode');
		return "&mode=" + getUrlParameter('mode');
	}
	if (typeof getUrlParameter('tag') !== 'undefined') {
		console.log('tag');
		return "&tag=" + getUrlParameter('tag');
	}
	if (typeof getUrlParameter('search') !== 'undefined') {
		console.log('tag');
		return "&search=" + getUrlParameter('search');
	}
	return "&mode=federated";
};

function loadmore(){
	var thread = getUrlParameter('thread');
	if (typeof thread !== 'undefined') {
		return false;
	}
	if (typeof getUrlParameter('search') !== 'undefined') {
		return false;
	}
	var thread = getUrlParameter('thread');
	if (typeof thread === 'undefined') {
		var error = $(".error").length;
		if (error < 1) {
			pageMode = getMode();
			var id = $('.post').last().attr('pid');
			$('.loadmore').html("<img src='img/loading.gif'>")
			$.get("index.php?ajax=1&next=" + id + "" + pageMode, function(data) {
				$('.loadmore').parent().before(data);
				$('.loadmore').html("Load More Posts")
				/*$('.loadmore').parent().detach();
				$('#content').append(data);
				$('.loadmore').parent().appendTo('#content');
				*/
			});
		}
	}
}

$(window).scroll(function() {
	if ($(window).scrollTop() == $(document).height() - $(window).height()) {
		loadmore();
	}
});

$('body').on('click', '.loadmore', function() {
	loadmore();
});

function newPosts() {
	
	var url = window.location.href;
	
	var thread = getUrlParameter('thread');
	if (typeof thread !== 'undefined') {
		return false;
	}
	var search = getUrlParameter('search');
	if (typeof search !== 'undefined') {
		return false;
	}
	var error = $(".error").length;
	if (error >= 1) {
		return false;
	}
	var id = $(".post").first().attr('pid');
	pageMode = getMode();
	if (getUrlParameter('mode') == 'bookmarks') {
		return false;
	}
	var page = getUrlParameter('page');
	if (typeof page !== 'undefined') {
		return false;
	}
		
	$.get("index.php?ajax=1&since=" + id + "" + pageMode, function(data) {
		
		if (window.location.href !== url){
			return false;
		}
	
		if (data) {
			var scroll = $(window).scrollTop();
			if (scroll > 1000) {
			$('#loader').html("<div class='avatar' style='height:0px;'></div><div class='loader' style='display:table-cell; height:50px; line-height:50px;'><a class='link' style='margin:5px;' href='#'>Load Newer Posts</a></div>");
				if ($('#loaded').length) {
					$('#loaded').prepend(data);
				} else {
					$('#loader').after("<div id='loaded' style='display:none'></div>");
					$('#loaded').prepend(data);
				}
			} else {
				if ($('#loaded').length) {
					$('#loaded').prepend(data);
				} else {
					$('#content').find('.element').first().after(data);
				}
			}
		}
	});
};

window.setInterval(function() {
	var timestamp;
	$('.postAge').each(function(a){
       timestamp = $(this).attr('id');
	   $(this).html(timeSince(timestamp)+' ago');
     });

	newPosts();

}, 25000);

function themecheck(name){
	if(name.value == "custom"){
		$('#customtheme').css("display","block");
    }
    else{
        $('#customtheme').css("display","none");
    }
};

function timeSince(date) {
  /*  https://stackoverflow.com/questions/3177836/how-to-format-time-since-xxx-e-g-4-minutes-ago-similar-to-stack-exchange-site  */
  
  var seconds = Math.floor((new Date() - (date*1000)) / 1000);

  var interval = Math.floor(seconds / 31536000);

  if (interval >= 1) {
    return interval + " year"+(interval > 1 ? "s" : "");
  }
  interval = Math.floor(seconds / 2592000);
  if (interval >= 1) {
    return interval + " month"+(interval > 1 ? "s" : "");
  }
  interval = Math.floor(seconds / 604800);
  if (interval >= 1) {
    return interval + " week"+(interval > 1 ? "s" : "");
  }
  interval = Math.floor(seconds / 86400);
  if (interval >= 1) {
    return interval + " day"+(interval > 1 ? "s" : "");
  }
  interval = Math.floor(seconds / 3600);
  if (interval >= 1) {
    return interval + " hour"+(interval > 1 ? "s" : "");
  }
  interval = Math.floor(seconds / 60);
  if (interval >= 1) {
    return interval + " minute"+(interval > 1 ? "s" : "");
  }
  
  if (interval < 0) {
    return " just now";
  }
  return Math.floor(seconds) + " seconds";
}