/*!
 * jQuery plugin mf__multifader 1.0
 * http://pksoftware.de/
 *
 * Copyright 2011, Jan Philipp Knoeller
 * Dual licensed under the MIT or GPL Version 2 licenses.
 *
 * Date: Sat Aug 19 12:28 2011
 */

var mf__faders=new Object();

function mf__create_fader(faderId, newFadeInterval, newFadeTime, newFramesChoosable, newPlayResume){
	mf__faders[faderId]={
		//Object Attributes
		frameCount: -1,
		currentFrame: -12345678,
		oldIndex: -1,
		step: 1,
		
		frames: null,
		timer: null,
		isRunning: true,
		stopped: false,
		
		//Options
		interval: newFadeInterval ? newFadeInterval : 5000,
		fadeTime: newFadeTime ? newFadeTime : 800,
		
		framesChoosable: newFramesChoosable,
		playResume: newPlayResume,
		
		init: function(){
			
			this.frames = jQuery('#' + faderId).children('.mf__frame');
			this.frameCount = this.frames.length;
			
			if (this.frameCount == 0) {
				return;
			}
			
			var faderControls=jQuery('#' + faderId + ' .mf__controls');
			
			this.frames.each(function(i){
/*
				jQuery(mf__faders[faderId].frames[i]).mouseover(function(){
					mf__faders[faderId].isRunning = false;
				});
				jQuery(mf__faders[faderId].frames[i]).mouseout(function(){
					mf__faders[faderId].isRunning = true;
				});
*/				
				if (mf__faders[faderId].framesChoosable) {
					faderControls.append('<a href="#" class="mf__controls_' + i + '" onclick="mf__faders[\'' + faderId + '\'].fadeTo(' + i + ');return false;" onfocus="this.blur();"></a>');
//					faderControls.append('<a href="#" class="mf__controls_' + i + '" onclick="mf__faders[\'' + faderId + '\'].fadeTo(' + i + ');return false;" onfocus="this.blur();">' + (i + 1) + '</a>');
				}
			});
/*			
			faderControls.mouseover(function(){
				mf__faders[faderId].isRunning = false;
			});
			faderControls.mouseout(function(){
				mf__faders[faderId].isRunning = true;
			});
 */ 		
 			
			if (this.playResume) {
				faderControls.append('<a href="#" class="mf__play" onclick="mf__faders[\'' + faderId + '\'].startStop();return false;" onfocus="this.blur();">&nbsp;</a>');
			}
			
			if (this.step < 0) {
				this.fadeTo(this.frameCount - 1);
			}
			else {
				this.fadeTo(0);
			}
			
			if (this.stopped) {
				this.startStop();
			}
		},
		
		fadeTo: function(pos){
			window.clearTimeout(this.timer);
			this.oldIndex = this.currentFrame;
			this.currentFrame = pos;
			
			this.fade();
			this.timer = window.setTimeout('mf__faders["' + faderId + '"].fadeThrough();', this.interval);
			
			if (!this.stopped) {
				this.startStop();
			}
		},
		
		startStop: function(){
			this.stopped = !this.stopped;
			
			if (this.stopped) {
				jQuery('#' + faderId + ' .mf__controls' + ' a.mf__play').addClass('mf__on');
			}
			else {
				jQuery('#' + faderId  + ' .mf__controls' + ' a.mf__play').removeClass('mf__on');
			}
		},
		
		fadeThrough: function(){
			if (this.isRunning && !this.stopped) {
				window.clearTimeout(this.timer);
				this.oldIndex = this.currentFrame;
				
				if (this.currentFrame == -12345678) {
					this.currentFrame = 0;
				}
				else {
					this.currentFrame += this.step;
				}
				
				if (this.currentFrame >= this.frameCount) {
					this.currentFrame = 0;
				}
				else if (this.currentFrame < 0) {
					this.currentFrame = this.frameCount - 1;
				}
				
				this.fade();
			}
			
			this.timer = window.setTimeout('mf__faders["' + faderId + '"].fadeThrough();', this.interval);
		},
		
		fade: function(){
			faderControlPrefix='#' + faderId + ' a.mf__controls_';
			if (this.oldIndex > -1) {
				jQuery(faderControlPrefix + mf__faders[faderId].oldIndex).removeClass('mf__on');
				jQuery(this.frames[this.oldIndex]).fadeOut(this.fadeTime, function(){});
			}
			if (this.currentFrame > -1) {
				jQuery(faderControlPrefix + mf__faders[faderId].currentFrame).addClass('mf__on');
				
				jQuery(this.frames[this.currentFrame]).fadeIn(this.fadeTime, function(){});
			}
		}
	};
	
	return mf__faders[faderId];
}
