$.fn.isVisible = function(offset) {
	// Am I visible?
	// Height and Width are not explicitly necessary in visibility detection, the bottom, right, top and left are the
	// essential checks. If an image is 0x0, it is technically not visible, so it should not be marked as such.
	// That is why either width or height have to be > 0.
	var rect = this[0].getBoundingClientRect();
	return (
		(rect.height > 0 || rect.width > 0) &&
		rect.bottom >= 0 &&
		rect.right >= 0 &&
		rect.top <= (window.innerHeight - offset || document.documentElement.clientHeight - offset) &&
		rect.left <= (window.innerWidth - offset || document.documentElement.clientWidth - offset)
	);
};

$(".multi-event-timeline  .timeline-items .timeline-item:nth-of-type(odd)").addClass("timeRight");
$.fn.timelify = function(options){

	var settings = $.extend({
		animLeft: "fadeIn",
		animRight: "fadeIn",
		animCenter: "bounceInUp",
		animSpeed: 300,
		offset: 150
	}, options);

	var elem = this;

	var timeline_items = $(this).find('.timeline-items li');

	window.addEventListener('scroll', function(){
		var scrollPos = $(window).scrollTop();
		if($('.timeline-items li.is-hidden').length > 0){
			if(scrollPos > $(elem).offset().top - 600){
				$(timeline_items).each(function () {

					if ($(this).isVisible(settings.offset)) {
						$(this).removeClass('is-hidden').addClass('animated').css({"animation-duration": settings.animSpeed + "ms"});
						if (!$(this).hasClass('timeRight')) {
							if ($(this).hasClass('centered')) {
								$(this).addClass(settings.animCenter)
							} else {
								$(this).addClass(settings.animLeft)
							}
						} else {

							$(this).addClass(settings.animRight)

						}
					}
				});
			}
		}


	});

	return this;
};