/*
 * jQuery ImageFader v0.1
 *
 * Copyright (c) 2009 Kiwi Creation
 * http://www.kiwicreation.ca/
 *
 * Author: David Arpin
 * Date: 2009-09-26
 */
 
(function($) {

    $.fn.imagefader = function(options) {
        var settings = {
        	'animationtype':    'fade',
            'speed':            'normal',
            'type':             'sequence',
            'timeout':          2000,
            'containerheight':  'auto',
            'runningclass':     'kiwi-imagefader',
            'children':         null,
			'controlclass':		'kiwi-imagefader-control',
			'controlactiveclass':'kiwi-imagefader-control-active',
			'timer':			''
        };
		$.extend(settings, options);
		
        return this.each(function() {   
            $.imagefader(this, settings);
			$(this).show();
        });
    };
    
    $.imagefader = function(container, settings) {
        var elements = settings.children === null ? $(container).children() : $(container).children(settings.children);	
		//if(settings.control) {
			$(container).append('<div class="'+settings.controlclass+'s"></div>');
		//}
		
		if (elements.length > 1) {
            $(container).addClass(settings.runningclass);
			
			for (var i = 0; i < elements.length; i++) {
                $(elements[i]).css('position', 'absolute').hide();
				//if(settings.control) {
					var control = $('<a href="#" alt="" class="' + settings.controlclass + '" />');
					if (i == 0)	control.addClass('first');
					else if (i == elements.length-1) control.addClass('last');
					control.click(function() {
						$.imagefader.next(container, elements, settings, $(this).parent().children().index(this), $(this).parent().children().index($(container).children("." + settings.controlclass + "s").children(".kiwi-imagefader-currentslide")));
					});
					$(container).children("." + settings.controlclass + "s").append(control);
				//}
            };
			
			if (settings.type == "random") {
				current = Math.floor(Math.random() * (elements.length));
                $.imagefader.next(container, elements, settings, current, 0);			
			} else { //settings.type == 'random_start'
				var current = settings.type == 'random_start' ? Math.floor(Math.random () * (elements.length)) : 0;
				settings.type = 'sequence';
				$.imagefader.next(container, elements, settings, current, 0);
			}
		}
	};

	$.imagefader.next = function(container, elements, settings, current, last) {
		if (settings.animationtype == 'slide') {
			$(elements[last]).slideUp(settings.speed);
			$(elements[current]).slideDown(settings.speed);
		} else { //settings.animationtype == 'fade'
			$(elements[last]).fadeOut(settings.speed);
			$(elements[current]).fadeIn(settings.speed);

			//if(settings.control) {
				$(container).children("." + settings.controlclass + "s").children("." + settings.controlclass).eq(last).removeClass("kiwi-imagefader-currentslide");
				$(container).children("." + settings.controlclass + "s").children("." + settings.controlclass).eq(current).addClass("kiwi-imagefader-currentslide");
				//if(settings.controlactive) {
					$(container).children("." + settings.controlclass + "s").children("." + settings.controlclass).eq(last).toggleClass(settings.controlactiveclass, false);
					$(container).children("." + settings.controlclass + "s").children("." + settings.controlclass).eq(current).toggleClass(settings.controlactiveclass, true);
				//}
			//}
		}
		
		if (settings.type == "sequence") {
			if((current + 1) < elements.length) {
				current = current + 1;
				last = current - 1;
			} else {
				current = 0;
				last = elements.length - 1;
			}
		} else { //settings.type == "random"
			last = current;
			while (current == last) {
				current = Math.floor(Math.random() * elements.length);
			}
		}
		clearTimeout(settings.timer);
		settings.timer=setTimeout((function() {
			$.imagefader.next(container, elements, settings, current, last);
		}), settings.timeout);
	};
})(jQuery);
