/*
* AbstracXion JavaScript Library
* Copyright (c) 2009 WX3data
*/
// INNER FADE //
(function ($) {
	$.fn.innerfade = function (options, ControlPanel) { return this.each(function () { $.innerfade(this, options, ControlPanel); }); };

	$.innerfade = function (container, options, ControlPanel) {

		var settings = {
			'animationtype': 'fade',
			'speed': 'normal',
			'type': 'sequence',
			'timeout': 2000,
			'containerheight': 'auto',
			'runningclass': 'innerfade',
			'children': null,
			'autostart': true,
			'CurrentCounter': 0,
			'LastCounter': -1,
			'ControlTimeout': null,
			'SlideTimeout': null
		};

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

		if (settings.children === null) { var elements = $(container).children(); }
		else { var elements = $(container).children(settings.children); }

		if (elements.length > 1) {

			$(container).css('position', 'relative').css('height', settings.containerheight).addClass(settings.runningclass);

			for (var i = 0; i < elements.length; i++) { $(elements[i]).css('z-index', String(elements.length - i)).css('position', 'absolute').hide(); };

			if (settings.autostart) { settings.SlideTimeout = setTimeout(function () { $.innerfade.next(elements, settings); }, settings.timeout); }

			if (settings.type == 'sequence') { $(elements[0]).show(); }
			else {
				settings.CurrentCounter = Math.floor(Math.random() * (elements.length));
				$(elements[settings.CurrentCounter]).show();

				if (settings.type == 'random_start') { settings.type = 'sequence'; }
			}
		}
		if (ControlPanel) {

			$(ControlPanel).show();
			$(ControlPanel).fadeTo('normal', 0.3);

			$(elements).hover(function () { $(ControlPanel).fadeTo('normal', 1); }, function () { settings.ControlTimeout = setTimeout((function () { $(ControlPanel).fadeTo('normal', 0.3); }), 200); })
			$(ControlPanel).hover(function () { clearTimeout(settings.ControlTimeout); $(ControlPanel).fadeTo('normal', 1); });

			$(ControlPanel).find('.SlideshowPreviousButton').click(function () { $.innerfade.previous(elements, settings); })
			$(ControlPanel).find('.SlideshowNextButton').click(function () { $.innerfade.next(elements, settings); })
		}
	};

	$.innerfade.next = function (elements, settings) {
		if (settings.SlideTimeout != null) { clearTimeout(settings.SlideTimeout); }

		if (settings.type == 'sequence') {
			if ((settings.CurrentCounter + 1) < elements.length) {
				settings.CurrentCounter = settings.CurrentCounter + 1;
				settings.LastCounter = settings.CurrentCounter - 1;
			}
			else {
				settings.CurrentCounter = 0;
				settings.LastCounter = elements.length - 1;
			}
		}
		else if (settings.type == 'random') {
			settings.LastCounter = settings.CurrentCounter;
			while (settings.CurrentCounter == settings.LastCounter) { settings.CurrentCounter = Math.floor(Math.random() * elements.length); }
		}
		else { alert('Innerfade-Type must either be \'sequence\', \'random\' or \'random_start\''); }

		$.innerfade.show(elements, settings);

		if (settings.autostart) { settings.SlideTimeout = setTimeout((function () { $.innerfade.next(elements, settings); }), settings.timeout); }
	};

	$.innerfade.previous = function (elements, settings) {
		if (settings.SlideTimeout != null) { clearTimeout(settings.SlideTimeout); }

		if (settings.type == 'sequence') {
			if ((settings.CurrentCounter - 1) >= 0) {
				settings.CurrentCounter = settings.CurrentCounter - 1;
				settings.LastCounter = settings.CurrentCounter + 1;
			}
			else {
				settings.CurrentCounter = elements.length - 1;
				settings.LastCounter = 0;
			}
		}
		else if (settings.type == 'random') {
			settings.LastCounter = settings.CurrentCounter;
			while (settings.CurrentCounter == settings.LastCounter) { settings.CurrentCounter = Math.floor(Math.random() * elements.length); }
		}
		else { alert('Innerfade-Type must either be \'sequence\', \'random\' or \'random_start\''); }

		$.innerfade.show(elements, settings);

		if (settings.autostart) { settings.SlideTimeout = setTimeout((function () { $.innerfade.next(elements, settings); }), settings.timeout); }
	};

	$.innerfade.show = function (elements, settings) {
		if (settings.animationtype == 'slide') {
			$(elements[settings.LastCounter]).slideUp(settings.speed);
			$(elements[settings.CurrentCounter]).slideDown(settings.speed);
		}
		else if (settings.animationtype == 'fade') {
			$(elements[settings.LastCounter]).fadeOut(settings.speed);
			$(elements[settings.CurrentCounter]).fadeIn(settings.speed, function () { removeFilter($(this)[0]); });
		}
		else { alert('Innerfade-animationtype must either be \'slide\' or \'fade\''); }
	}

})(jQuery);

// **** remove Opacity-Filter in ie ****
function removeFilter(element) { if (element.style.removeAttribute) { element.style.removeAttribute('filter'); } }
// END INNER FADE //

