/** 
 * $Id: audi.imageFade.js 4093 2009-07-15 13:42:25Z holgerh $ 
 */
/**
 * Image-plugin for Audi eJournals
 * 
 * @project         Audi
 * @copyright       Neue Digitale / razorfish GmbH
 * @version         $Revision: 4093 $
 * @author          $Author: holgerh $
 * @lastmodified    $Date: 2009-07-15 15:42:25 +0200 (Wed, 15 Jul 2009) $
 */

/*global
	jQuery
*/

/*
 * Wrapper function to use "$" instead of "jQuery"
 */
(function ($) {
	
	
	$.fn.imageFade = function (options) {

		// override the default options by parameter given
		var opts = $.extend({}, $.fn.imageFade.defaults, options);
		
		
		// create the local variables and save initial values (if needed)
		var i,
			$this = jQuery(this)
			$items = $('li li', $this);

		
		
		$.fn.imageFade.container = jQuery('#current');
		$.fn.imageFade.duration =  opts.fadeDuration;
		$.fn.imageFade.interval =  opts.interval;
		$.fn.imageFade.list = [];
		$.fn.imageFade.count = $items.size();
		
		
		// we need more then one element to go through
		if( 1 > $.fn.imageFade.count ) {
			return false;
		}
		
		// go through all elements and save the metadata in an array
		for( i = 0; i < $.fn.imageFade.count; i++ ) {
			$.fn.imageFade.list[i] = $items.metadata();
		}

		$items.each(function(index){
			$.fn.imageFade.list[index] = jQuery(this).metadata();
		});
		

		$.fn.imageFade.timeout = window.setInterval($.fn.imageFade.doFade, $.fn.imageFade.interval);

		$.fn.imageFade.container.find('.controls').show();
		
		
		$.fn.imageFade.container.find('.play a').bind('click', function(){
			$.fn.imageFade.status = true;//!$.fn.imageFade.status;
			jQuery('li.play').hide();
			jQuery('li.pause').show();			
			return false;
		});
		
		$.fn.imageFade.container.find('.pause a').bind('click', function(){
			$.fn.imageFade.status = false;//!$.fn.imageFade.status;
			jQuery('li.pause').hide();
			jQuery('li.play').show();
			return false;
		});
		
		$.fn.imageFade.container.find('.back a').bind('click', function(){
			$.fn.imageFade.status = true;
			window.clearInterval($.fn.imageFade.timeout);

			if( 0 === $.fn.imageFade.current )	{
				$.fn.imageFade.current = $.fn.imageFade.count - 2;				
			} else if( 1 === $.fn.imageFade.current ) {
				$.fn.imageFade.current = $.fn.imageFade.count - 1;
			} else {
				$.fn.imageFade.current = $.fn.imageFade.current - 2;
			}
			$.fn.imageFade.doFade();

			$.fn.imageFade.timeout = window.setInterval($.fn.imageFade.doFade, $.fn.imageFade.interval);
			return false;
		});
		
		$.fn.imageFade.container.find('.forward a').bind('click', function(){
			$.fn.imageFade.status = true;
			window.clearInterval($.fn.imageFade.timeout);
			$.fn.imageFade.doFade();
			$.fn.imageFade.timeout = window.setInterval($.fn.imageFade.doFade, $.fn.imageFade.interval);
			return false;
		});
		
		// enable jQuery chaning
		return this;
	};
	
	$.fn.imageFade.status = true; 
	$.fn.imageFade.current = 1;
	
	$.fn.imageFade.doFade = function () {

		if( false === $.fn.imageFade.status ) {
			return true;			
		}


		if( $.fn.imageFade.current >= $.fn.imageFade.count ) {
			$.fn.imageFade.current = 0;
		}
		
		
		var $img = $.fn.imageFade.container.find('img');
		var data = $.fn.imageFade.list[$.fn.imageFade.current];

		var $cloneImg = $img.clone().attr('src', $.fn.imageFade.container.find('img').attr('src')).css({'position': 'absolute', 'left': '0px'}).insertAfter($img);
		$img.attr('src', data.image);
		$cloneImg.fadeTo($.fn.imageFade.duration, 0, function(){
			
			data.headline = ('undefined' !== typeof(data.headline)) ? data.headline : '';
			data.subheadline = ('undefined' !== typeof(data.subheadline)) ? data.subheadline : '';
			data.button = ('undefined' !== typeof(data.button) ) ? data.button : '';
			data.url = ('undefined' !== typeof(data.url)) ? data.url : '';
			data.rel = ('undefined' !== typeof(data.rel)) ? data.rel : '';
			
			$.fn.imageFade.container = jQuery(this).parent();
			jQuery(this).remove();
			
			
			$.fn.imageFade.container.find('h2').html(data.headline);
			$.fn.imageFade.container.find('h3').html(data.subheadline);
			$.fn.imageFade.container.find('a.open').attr({'href': data.url, 'rel': data.rel}).find('span').html(data.button);
			//$.fn.imageFade.container.find('a.open').attr();
		});

		$.fn.imageFade.current++;
		
		return this;
	}
	
	/**
	 * Default settings for the jQuery plugin
	 */	
	$.fn.imageFade.defaults = {
		interval: 5000,
		fadeDuration: 1000
	};
	
}(jQuery));



