(function($) {

    $.fn.innerfade = function(options) {
        return this.each(function() {   
            $.innerfade(this, options);
        });
    };

    $.innerfade = function(container, options) {
        var settings = {
            'container': container, // container's data is used as state memory
            'animationtype': 'fade',
            'type': 'sequence',
            'speed': 'normal',
            'timeout': 2000,
            'containerheight': 'auto',
            'runningclass': 'innerfade',
            'children': null,
            'next_selector': '#if-next',
            'prev_selector': '#if-prev',
            'pause_selector': null,
            'callback': null,
			'current_selector':'#dd',
			'click_wait':5000
        };
        $.data(settings.container, 'paused', false);
        if (options)
            $.extend(settings, options);
        
        if (settings.children === null)
            var elements = $(container).children();
        else
            var elements = $(container).children(settings.children);

        if (elements.length < 1) return;

        if (settings.type == "sequence") {
            $.data(settings.container, 'current', 1);
            $.data(settings.container, 'last', 0);
        }

        if (settings.pause_selector !== null) {
            $(settings.pause_selector).hover(function () {
                $.data(settings.container, 'paused', true);
            }, function () {
                $.data(settings.container, 'paused', false);
            });
        }

        $(settings.prev_selector).click(function(e) {
            e.preventDefault();

			clearTimeout(id);
			id=setTimeout((function() {
			$(this).queue(function  ()
			{
				$.innerfade.next(elements, settings);
				$(this).dequeue();
			});
            }), settings.timeout);


            current = $.data(settings.container, 'current') - 2;
            if (current < 0) current = elements.length + current; // js modulo for negative numbers is strange (in IE)
            $.data(settings.container, 'current', current);
            $.innerfade.animate(elements, settings);
        });

        $(settings.next_selector).click(function(e) {
            e.preventDefault();

			clearTimeout(id);
			id=setTimeout((function() {
			$(this).queue(function  ()
			{
				$.innerfade.next(elements, settings);
				$(this).dequeue();
			});
            }), settings.timeout);


            $.innerfade.animate(elements, settings);
        });
        
        $(settings.current_selector).click(function(e) {
            e.preventDefault();
			clearTimeout(id);
			id=setTimeout((function() {
			$(this).queue(function  ()
			{
				$.innerfade.next(elements, settings);
				$(this).dequeue();
			});
            
        }), settings.timeout + settings.click_wait);
			var index = $("#idNum2 li").index(this);
			$('#idNum2 li').removeClass("on").eq(index).addClass("on");
			$.data(settings.container, 'current', index);
            $.innerfade.animate(elements, settings);
        });


        $(container).css('position', 'relative').css('height', settings.containerheight).addClass(settings.runningclass);
        for (var i = 0; i < elements.length; i++) {
            $(elements[i]).css('z-index', String(elements.length-i)).hide();
        };
       
	

		id=setTimeout(function() { 
			$(this).queue(function  ()
			{
				$.innerfade.next(elements, settings); 
				$(this).dequeue();
			});
			
		}, settings.timeout);
        $(elements[0]).show();
    };

    $.innerfade.next = function(elements, settings) {

		

        if (!$.data(settings.container, 'paused')) {
            $.innerfade.animate(elements, settings);
        }
	
        id=setTimeout((function() {
			$(this).queue(function  ()
			{
				$.innerfade.next(elements, settings);
				$(this).dequeue();
			});
            
        }), settings.timeout);

	
    };

    $.innerfade.animate = function(elements, settings) {
        current = $.data(settings.container, 'current');
        last = $.data(settings.container, 'last');
        if (settings.animationtype == 'slide') {
            $(elements[last]).slideUp(settings.speed);
            $(elements[current]).slideDown(settings.speed);
        } else if (settings.animationtype == 'fade') {
            $(elements[last]).fadeOut(settings.speed,function(){
				$(elements[current]).fadeIn(settings.speed , function() {
					  removeFilter($(this)[0]);
				});
			});
			//fadeIn(
           
        } else {
            alert('Innerfade-animationtype must either be \'slide\' or \'fade\'');
        }
        
        if (typeof(settings.callback) == "function") {
            settings.callback(current, elements[current]);
        }

        $.data(settings.container, 'last', current);
        $.data(settings.container, 'current', (current + 1) % elements.length);
    };
    
})(jQuery);

// **** remove Opacity-Filter in ie ****
function removeFilter(element) {
    if(element.style.removeAttribute){
        element.style.removeAttribute('filter');
    }
}
