(function ($) {

	$.fn.crossFade = function () {
	
		return this.each(function (autoSlide, fadeSpeed, delayTimer, randomise) {
		
			autoSlide = autoSlide || true;
			fadeSpeed = fadeSpeed || 500;
			delayTimer = delayTimer || 7500;
			randomise = randomise || true;

			var $bg 			= $('.bg-inner').hide(),
				curImg			= $('.currentImg').show(),
				firstImg		= $('.bg-inner:first'),
				totalImg		= $bg.length,
				counter			= 0,
				$links 			= $('#pagination li a'),
				curImgId 		= curImg.attr('id'),
				triggerLink		= $('.slideshowTrigger'),
				delayed 		= null,
				rotating		= true;
				startPoint		= counter;
				
			if (autoSlide) { rotating = true; startRotation(); } else { rotating = false; }
			if (randomise) {
				var startPoint = Math.floor(Math.random()*totalImg);

				$links.removeClass('active');
				$('#pagination li').eq(startPoint).find('a').addClass('active');
				curImg.hide().removeClass('currentImg');
				curImg = $bg.eq(startPoint).fadeIn('slow').addClass('currentImg');
				counter = startPoint;
				randomise = false;
			}
						
			$links.each(function(index, value) {
				$(this).click(function(event) { 
					stopRotation();
					curImg.fadeOut('normal').removeClass('currentImg');
					curImg = $('.bg-inner').eq(index).fadeIn('slow').addClass('currentImg');
					selectNav.call(value); 
					counter = index;
					event.preventDefault(); 
				});
			});
			
			triggerLink.click(function(event) {
				if (rotating) {
					stopRotation();
				} else {
					startRotation();
				}
				event.preventDefault();
			});
			
			function startRotation() {
				if (delayed) clearInterval(delayed);
				delayed = setInterval(function() { faderInit(); }, delayTimer);
				triggerLink.text('stop');
				rotating = true;
			}
			
			function stopRotation() {
				if (delayed) clearInterval(delayed);
				triggerLink.text('start');
				rotating = false;
			}
			
			function faderInit() {
			
				if (counter < totalImg - 1) {
					oldImg = curImg;
					$links.removeClass('active');
					oldImg.fadeOut('normal').removeClass('currentImg');
					curImg = oldImg.next().fadeIn('slow').addClass('currentImg');
					$('#pagination li').eq(counter+1).find('a').addClass('active');
					counter++;
					
				} else {
					
					counter = 0;
					oldImg = curImg;
					$links.removeClass('active');
					oldImg.fadeOut('normal').removeClass('currentImg');
					curImg = firstImg.fadeIn('slow').addClass('currentImg');				
					$('#pagination li').eq(counter).find('a').addClass('active');
					
				}
				
			}
			
			function selectNav() {
				$(this)
					.parents('ul:first')
						.find('a')
							.removeClass('active')
						.end()
					.end()
				.addClass('active');
			}
			
		});
	};

})(jQuery);
