/* =========================================================
// jquery.innerfade.js
// datum: 2008-02-14
// firma: medienfreunde hofmann & baldes gbr
// author: torsten baldes
// mail: t.baldes@medienfreunde.com
// web: http://medienfreunde.com
// based on the work of matt oakes http://portfolio.gizone.co.uk/applications/slideshow/
// and ralf s. engelschall http://trainofthoughts.org/
*
*  <ul id="news"> 
*     <li>content 1</li>
*     <li>content 2</li>
*     <li>content 3</li>
*  </ul>
*  
*  $('#news').innerfade({
*     animationtype: type of animation 'fade' or 'slide'(default: 'fade'), 
*     speed: fading-/sliding-speed in milliseconds or keywords(slow, normal or fast)(default: 'normal'), 
*     timeout: time between the fades in milliseconds(default: '2000'), 
*     type: type of slideshow: 'sequence', 'random' or 'random_start'(default: 'sequence'), 
*     containerheight: height of the containing element in any css-height-value(default: 'auto'),
*     runningclass: css-class which the container get’s applied(default: 'innerfade'),
*     children: optional children selector(default: null)
* }); 
// ========================================================= */

(
	function($){
		$.fn.innerfade = function(options){
			return this.each(function(){  
			$.innerfade(this, options);
		});
	};

	$.innerfade = function(container, options){
		var settings ={
			'animationtype': 'fade',
			'speed': 'normal',
			'type': 'sequence',
			'timeout': 2000,
			'containerheight': 'auto',
			'containerposition': 'relative',
			'runningclass': 'innerfade',
			'children': 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', settings.containerposition).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.type == "sequence"){
					setTimeout(function(){
						$.innerfade.next(elements, settings, 1, 0);
					}, settings.timeout);
					$(elements[0]).show();
				}else if(settings.type == "random"){
					var last = Math.floor(Math.random()*(elements.length));
					setTimeout(function(){
						do{
							current = Math.floor(Math.random()*(elements.length));
						}while(last == current);             
							$.innerfade.next(elements, settings, current, last);
					}, settings.timeout);
					$(elements[last]).show();
				}else if(settings.type == 'random_start'){
					settings.type = 'sequence';
					var current = Math.floor(Math.random()*(elements.length));
					setTimeout(function(){
						$.innerfade.next(elements, settings,(current + 1)%  elements.length, current);
					}, settings.timeout);
					$(elements[current]).show();
				}else{
					alert('innerfade-type must either be \'sequence\', \'random\' or \'random_start\'');
				}
			}
		};
		
		$.innerfade.next = function(elements, settings, current, last){
			if(settings.animationtype == 'slide'){
				$(elements[last]).slideup(settings.speed);
				$(elements[current]).slidedown(settings.speed);
			}else if(settings.animationtype == 'fade'){
				$(elements[last]).fadeOut(settings.speed);
				$(elements[current]).fadeIn(settings.speed, function(){
					removefilter($(this)[0]);
				});
			}else
				alert('innerfade-animationtype must either be \'slide\' or \'fade\'');
				if(settings.type == "sequence"){
					if((current + 1)< elements.length){
						current = current + 1;
						last = current - 1;
					}else{
						current = 0;
						last = elements.length - 1;
					}
				}else if(settings.type == "random"){
					last = current;
					while(current == last)
						current = Math.floor(Math.random()* elements.length);
				}else
					alert('innerfade-type must either be \'sequence\', \'random\' or \'random_start\'');
					setTimeout((function(){
						$.innerfade.next(elements, settings, current, last);
				}), settings.timeout);
		};

})(jQuery);

// **** remove opacity-filter in ie ****
function removefilter(element){
	if(element.style.removeattribute){
		element.style.removeattribute('filter');
	}
}


