/**
 * Fader for abtvmedia
 * 
 * @author Dominik "Kurrija" Schöner - darkhavens.de
 * @version 0.3.2-20101018
 */

(function($) {	
	
	var Fader = function( container, options )
	{
		var dhf = this;
		this.fadeTimer = 0;
		this.container = container;
		this.currItem = 0;
		this.items = $(container).children(options.itemClass);
		
		//$(container).css( { position:'relative', overflow:'hidden', height:$(container).height()+'px', width:$(container).width()+'px' } );
		//$(this.items).css( { position:'absolute' } );
		
		/*
		 * Initialize buttons and attach events
		 */
		$(options.buttonPrev).css( { visibility: 'visible'} );
		$(options.buttonNext).css( { visibility: 'visible'} );
		
		$(options.buttonPrev).bind( 'mouseup', dhf, function(event){
			event.data.fadeToItem( ( event.data.items.length + event.data.currItem - 1 ) % event.data.items.length );
			return false;
		});
		$(options.buttonNext).bind( 'mouseup', dhf, function(event){															
			event.data.fadeToItem(( event.data.items.length + event.data.currItem + 1 ) % event.data.items.length);
			return false;
		});

		
		for( i = 0; i < this.items.length; i++ ) {
			if( i > 0 ) {
				$('#' + options.navID).append('<img id="' + options.navID + '_' + i + '" alt="o" src="' + options.navImg + '" />');
				$(this.items[i]).fadeTo( 0, 0 );
			}
			else
				$('#' + options.navID).append('<img id="' + options.navID + '_' + i + '" alt="x" src="' + options.navImgAct + '" />');
			$('#' + options.navID + '_' + i).data( 'iid', i ).bind( 'click', this, function(event){ event.data.fadeToItem($(event.currentTarget).data('iid')); } );
		}

		/*
		 * Disable selections within the fader
		 */
		$(container).bind( 'mousedown', dhf, function( event ){	
			event.data.container.focus();
			return false;
		});
		/* IE fix */
		container.onselectstart = function () { return false; };
				
		/*
		 * Stop auto-fade on mouseover
		 */
		$(container).bind( 'mouseover', dhf, function( event ) {
			clearInterval( event.data.fadeTimer );
		});
		/*
		 * Restore auto-fade on mouseout
		 */
		$(container).bind( 'mouseout', dhf, function( event ){
			event.data.autoFade();
		});

		this.fadeToItem = function( fadeTarget )
		{
			clearInterval( dhf.fadeTimer );
			fadeTarget %= dhf.items.length;
			if( fadeTarget == dhf.currItem )
				return;
			$(dhf.items[dhf.currItem]).css('z-index','2').fadeTo( 1000, 0 );
			$('#' + options.navID + '_' + dhf.currItem).attr('src',options.navImg);
			$('#' + options.navID + '_' + dhf.currItem).attr('alt','o');
			$(dhf.items[fadeTarget]).css('z-index','1').css('visibility','visible').fadeTo( 1000, 1 );
			$('#' + options.navID + '_' + fadeTarget).attr('src',options.navImgAct);
			$('#' + options.navID + '_' + fadeTarget).attr('alt','x');
			dhf.currItem = fadeTarget;
			dhf.autoFade();
		};
		
		this.autoFade = function()
		{			
			if ( options.autoFade != 0 )
			{
				dhf.fadeTimer = setInterval( function(){ dhf.fadeToItem( ( dhf.currItem + options.autoFade ) % dhf.items.length ); }, options.autoFadeDelay );
			}
		};
		
		this.autoFade();
	}; 
	
	$.fn.dhFader = function(options) {
		this.each( function() {			
			options = $.extend({}, {
				autoFadeDelay:5000,
				autoFade:1,
				itemClass:'.dhfader',
				navID:'dhfadernav',
				navImg: './img/btn.teaser.gif',
				navImgAct: './img/btn.teaseract.gif'
			},options );	
			$(this).data('dhfader', new Fader( this, options ) );
		});				
		return this;
	};

})(jQuery);
