(function(jQuery) {
    jQuery.fn.fader = function(options) {
        return this.each(function() {   
            jQuery.fader(this, options);
        });
    };

    jQuery.fader = function(container, options) {
        var o = {
        	'animationType':    'fade',
            'speed':            10000, // please use only numbers because of the jumpNav fade!! 600 is normal, 1200 is slow
            'type':             'sequence',
            'timeout':          4000,
            'containerHeight':  300,
            'runningclass':     'fader',
            'previousButtonClass':     'previousButton',
            'nextButtonClass':     'nextButton',
            'previousButtonText':     '&nbsp;',
            'nextButtonText':     '&nbsp;',
            'play':     true
        };
        if (options)
            jQuery.extend(o, options);
        
        // checks
        if(isNaN(o.speed)){
        	alert('The speed settings needs to be in seconds, not a string');
        }
        
        // wrap nav and container
        var jQuerycontainer = jQuery(container);
   
        // hiding the elements and attaching the innerFade
        jQuerycontainer.o = o;
        jQuerycontainer.slides = [];
        jQuerycontainer.jumpNavAnchors = [];
        
        // set css properties for the elements
        var elements = jQuerycontainer.children();
        if (elements.length > 1) {
        	
        	jQuerycontainer.addClass(jQuerycontainer.o.runningclass);
        	
            for (var i = 0; i < elements.length; i++) {
                
            	var element = jQuery(elements[i])
			                	/*.css('z-index', 10 + String(elements.length-i))*/
			                	.css('position', 'absolute')
			                	.hide();
                // assigning slide to jumpnav and vice versa
            	element.slideNumber = i;

                jQuerycontainer.slides.push(element);

            };
            
           
            jQuerycontainer.currentSlide = jQuerycontainer.slides[0];
            jQuerycontainer.nextSlide = jQuerycontainer.slides[1];
            
            // initialise the sequence

            jQuerycontainer.currentSlide.show();
            jQuery.fader.timedChange(jQuerycontainer);      
		}
        
        
       	jQuery("ul#faderNav li").each(function(){
			jQuery(this).click(function(){
				var slide = jQuery(this).index();
				jQuerycontainer.nextSlide =	jQuerycontainer.slides[slide];									   				jQuery.fader.forceChange(jQuerycontainer);
			});
		});
	     
    };
        
    jQuery.fader.forceChange = function(jQuerycontainer){
        clearTimeout(jQuerycontainer.innerFadeTimer);
        jQuerycontainer.o.play =  false;
        jQuerycontainer.innerFadeTimer = jQuery.fader.next(jQuerycontainer);
    };
    
    jQuery.fader.timedChange = function(jQuerycontainer){
    	jQuerycontainer.innerFadeTimer = setTimeout(function() {
            jQuery.fader.next(jQuerycontainer);
        }, jQuerycontainer.o.timeout);
    };
    
    jQuery.fader.next = function(jQuerycontainer) {
    	
    	if(jQuerycontainer.currentSlide.slideNumber != jQuerycontainer.nextSlide.slideNumber){
	        if (jQuerycontainer.o.animationType == 'slide') {
	        	jQuerycontainer.currentSlide.slideUp(jQuerycontainer.o.speed);
	        	jQuerycontainer.nextSlide.slideDown(jQuerycontainer.o.speed);
	        } else if (jQuerycontainer.o.animationType == 'fade') {
				jQuerycontainer.nextSlide.fadeIn(jQuerycontainer.o.speed);
				
				jQuery("ul#faderNav li a").css({'background-position':'0 0'});
				jQuery("ul#faderNav li").eq(jQuerycontainer.nextSlide.slideNumber).find('a').css({'background-position':'0 -102px'});
				
				
				jQuerycontainer.currentSlide.fadeOut(jQuerycontainer.o.speed);
	        	
	        	
	        } else
	            alert('Innerfade-animationType must either be \'slide\' or \'fade\'');
	        

	        // sequence
	        jQuerycontainer.currentSlide = jQuerycontainer.nextSlide;
	        if(jQuerycontainer.currentSlide.slideNumber + 1 > (jQuerycontainer.slides.length-1)){
	        	jQuerycontainer.nextSlide =	jQuerycontainer.slides[0];
	        }else{
	        	jQuerycontainer.nextSlide = jQuerycontainer.slides[jQuerycontainer.currentSlide.slideNumber + 1];
	        }
    	}
        // check if play or not
        if(jQuerycontainer.o.play){
        	jQuery.fader.timedChange(jQuerycontainer);
        }
    };

})(jQuery);

// **** remove Opacity-Filter in ie ****
function removeFilter(element) {
	if(element.style.removeAttribute){
		element.style.removeAttribute('filter');
	}
}
