/**
 * Jquery Fader Plugin
 *
 * Created by Ashok
 * Version 1.0
 * Last updated: 2008-01-30
 */

/* Simple usage:
$('document').ready(function () {
	$('#promo-box').promo({
		nav: 'promo-nav',
		timeout: 3000,
		speed: 'slow'
	});
});
*/

(function($) {
	$.fn.promo = function (options) {
		this.each(function () {
			var settings = {
				timeout: 2000,
				speed: 'normal',
				nav: false,
				timerId: 0,
				currentEl: 0
			};

			if (options) $.extend(settings, options);

			var proObj = $(this);
			var proElements = $(this).find('.promo-content');
			var navObj = settings.nav ? $('#'+ settings.nav) : false;
			var navElements = navObj ? navObj.find('a.promonav') : false;

			if (proElements.length > 1) {
				for (var i = 0; i < proElements.length; ++i) {
					$(proElements[i]).hide();

					$(proElements[i]).bind('mouseover', function () {
						clearTimeout(settings.timerId); settings.timerId = null;
					});

					$(proElements[i]).bind('mouseout', {findEl: i}, function (e) {
						if (! settings.timerId) {
							var index = e.data.findEl;

							settings.timerId = setTimeout((function () {
								$.promo.next(proElements, navElements, settings, index);
							}), settings.timeout);
						}
					});
				}

				if (settings.timeout && ! settings.timerId) {
					settings.timerId = setTimeout((function () {
						$.promo.next(proElements, navElements, settings, 0);
					}), settings.timeout);
				}

				$(proElements[0]).show();
			}

			if (navElements) {
				for (var i = 0; i < navElements.length; ++i) {
					if (i >= proElements.length) {
						$(navElements[i]).hide();
					} else {
						$(navElements[i]).bind('click', {findEl: i}, function (e) {
							if (settings.timerId && settings.currentEl != e.data.findEl) {
								clearTimeout(settings.timerId); settings.timerId = null;
								$.promo.find(proElements, navElements, settings, settings.currentEl, e.data.findEl);
							}
						});
					}
				}

				$(navElements[0]).addClass('promonav-active');
			}
		});
	}

	$.promo = function () {}

	$.promo.find = function (proEl, navEl, settings, current, find) {
		if (find < 0 || find >= proEl.length) return false;

		var nextEl = $(proEl[find]);

		$(proEl[current]).fadeOut(settings.speed, function () {
			nextEl.fadeIn(settings.speed);

			settings.currentEl = find;
			$.promo.hide(proEl);

			if (navEl) {
				$(navEl[current]).removeClass('promonav-active');
				$(navEl[find]).addClass('promonav-active');
			}

			if (settings.timeout && ! settings.timerId) {
				settings.timerId = setTimeout((function () {
					$.promo.next(proEl, navEl, settings, find);
				}), settings.timeout);
			}
		});
	};

	$.promo.next = function (proEl, navEl, settings, current) {
		var next = 0;

		if (current + 1 < proEl.length) {
			next = current + 1;
		}

		var nextEl = $(proEl[next]);

		$(proEl[current]).fadeOut(settings.speed, function () {
			nextEl.fadeIn(settings.speed);

			settings.currentEl = next;
			$.promo.hide(proEl);	

			if (navEl) {
				$(navEl[current]).removeClass('promonav-active');
				$(navEl[next]).addClass('promonav-active');
			}

			if (settings.timeout) {
				settings.timerId = setTimeout((function() {
					$.promo.next(proEl, navEl, settings, next);
				}), settings.timeout);
			}
		});
	};

	$.promo.hide = function (proEl) {
		for (var i = 0; i < proEl; ++i) {
			if (i != settings.currentEl) {
				$(proEl[i]).hide();
			}
		}
	}
})(jQuery);

