/* 
 * UploadForm - jQuery Plugin
 * @author Sven Finke
 * @version 0.6
 */
(function( $ ){
    /* Optionen Array definieren */
    $.sliderOptions=[];
	
    /* UploadForm Plugin initialisieren */
    $.fn.slider = function(options) {
        // Variablen definieren
        var x=0;
        var timer = null;
        var stepsize = 0;
        var visibleItems = 5;
        var showButtons = false;
        var autoScale = true;
        var elementWidth = 0;
        var vSpacing = 10;
        var direction = "ltr";
        var refreshTimer = 20;
		
        // Optionen abfragen
        $.each(options, function(key, value){
            try{
                if(typeof(value)=='string' && isNaN(value)){
                    eval(key+" = '"+value+"'");
                } else {
                    eval(key+" = "+value);
                }
            } catch (err){}
        });

        // Berechnungen durchführen
        if(!stepsize>0) stepsize = 1;
		
        // Elementgröße berechnen
        if(autoScale){
            elementWidth = (this.width()/ visibleItems) - vSpacing;
        } else if(elementWidth == "auto"){
            elementWidth = this.children(".item:first").width();
            visibleItems = this.width() / (elementWidth+vSpacing);
        }

        // Globale Einstellungen definieren
        $.sliderOptions["width"] = this.width();
        $.sliderOptions["visibleItems"] = visibleItems;
        $.sliderOptions["elementWidth"] = elementWidth;
        $.sliderOptions["vSpacing"] = vSpacing;
		
        // Neue Elemente erzeugen
        this.children(".item").each(function(){
            $(this).wrap("<div class='item_wrap' id='item_"+x+"'>");
            $(this).width(elementWidth);
            $(this).parent().css("left",((elementWidth+vSpacing)*x)+"px");
            x++;
        });
		
        while(x<visibleItems+1){
            var clone = this.children(".item_wrap").clone().appendTo(this);
            x=0;
            this.children(".item_wrap").each(function(){
                $(this).width(elementWidth).css("left",((elementWidth+vSpacing)*x)+"px").attr("id","item_"+x);
                x++;
            });
        }
		
        this.addClass("slide");
		
        $.sliderOptions["countItems"] = x;
		
        // Events anhängen
        this.hover(
            //Mouseover
            function(){
                $(this).removeClass("slide");
            },
            //Mouseout
            function(){
                $(this).addClass("slide");
            }
            );
		
        // Timer starten
        timer = setInterval(function(){
            $.slider_move(stepsize, direction);
        },refreshTimer);
		
        return this; //Enable Chaining
    };
	
    $.slider_move = function(stepsize, direction){
        $(".slide").each(function(){
            $(this).children("").each(function(){
                $(this).css("left",function(index,value){
                    // Erster aufruf und Left noch auf "auto"?
                    if(value=="auto"){
                        value="0";
                    } else { // "px" ersetzen
                        value = value.replace(/px/);
                    }
                    if(direction == "ltr"){
                        // Element ausserhalb des Sichtbereichs?
                        if(parseInt(value) > $.sliderOptions["width"] + (($.sliderOptions["vSpacing"] + $.sliderOptions["elementWidth"]) * ($.sliderOptions["countItems"] - $.sliderOptions["visibleItems"] - 1) )){
                            value=0-$(this).width()-$.sliderOptions["vSpacing"];
                        }
                        return (parseInt(value)+stepsize);
                    } else if (direction == "rtl"){
                        // Element ausserhalb des Sichtbereichs?
                        if(parseInt(value) < 0 - (($.sliderOptions["vSpacing"] + $.sliderOptions["elementWidth"]) * ($.sliderOptions["countItems"] - $.sliderOptions["visibleItems"]) )){
                            value= $.sliderOptions["width"];
                        }
                        return (parseInt(value)-stepsize);
                    }
                });
            });
        });
		
        return this; //Enable Chaining
    }
})( jQuery );
