﻿$.fn.archieRotator = function(opt) {
    if (!$.isReady) {
        log('DOM not ready, queuing slideshow');
        return;        
    }
    var elTimer = null;    
    var puntatore = 0;
    var elRotator = $(this);
    
    var elFrecciaSx = $("#frecciaSxRot");
    var elFrecciaDx = $("#frecciaDxRot");
    
    var elItemsFigli = elRotator.children();
    var numItemFigli = elItemsFigli.size();
    
    var numItem = opt.numItem;
    if (numItem==undefined) {
        numItem = 1;
    }
    
    var widthItem = opt.widthItem;
    if (widthItem==undefined) {
        widthItem = elRotator.children(0).width();;
    }

    var heightItem = opt.heightItem;
    if (heightItem==undefined) {
        heightItem = elRotator.children(0).height();

    }
    
    var widthRotator = opt.widthRotator;
    if (widthRotator==undefined) {
        widthRotator = widthItem * numItem;
    }
    
    var speedAnimation = opt.speedAnime;
    if (speedAnimation==undefined) {
        speedAnimation = 800;
    }

    var timeout = (opt.timeout + speedAnimation);
    if (timeout==undefined) {
        timeout = (5000 + speedAnimation);
    }
    
    var effect = (opt.effect);
    if (effect==undefined) {
        effect = "sx";
    }
    var countEseguzioni = 0;
    var boolParteAnimazione = (((widthRotator / numItemFigli) < widthItem)? true : false);
    inizializze();
    
    function inizializze(){
        if(numItemFigli >= 5){
            elFrecciaSx.click(function(){
                decrementaPosizione();
            });
            elFrecciaDx.click(function(){
                incrementaPosizione();
            });
        }else{
            elFrecciaSx.css("display","none");
            elFrecciaDx.css("display","none");
        }

        elRotator.css({'position' : 'relative', 'width': widthRotator + "px"});
        elItemsFigli.css({'position' : 'absolute', 'height': heightItem + "px",'width': widthItem + "px"});        
        switch(effect){
            case "sx":{
                partenzaOrizzontaleSx();
                break;
            }
            case "dx":{
                partenzaOrizzontaleDx();
                break;
            }
            default:{
                partenzaOrizzontaleSx();
                break;
            }
        }        
    }
    
    function partenzaOrizzontaleSx(){
        elItemsFigli.css('top', 0);
        elItemsFigli.each(function(index, el){
             $(el).css({'left': (widthItem * index),'right': 'auto'});
        });
        
        if(boolParteAnimazione){
            /*startTimer();
            iniziallizaHoverTimer();*/
        }
    }
    function partenzaOrizzontaleDx(){
        elItemsFigli.css('top', 0);
        elItemsFigli.each(function(index, el){
             $(el).css({'right': (widthItem * index),'left': 'auto'});
        });
        
        if(boolParteAnimazione){
            startTimer();
            iniziallizaHoverTimer();
        }
    }

    
    function iniziallizaHoverTimer(){
        elRotator.hover(
            function(){
                clearTimeout(elTimer);
            },
            function(){
                countEseguzioni = 0;
                startTimer();
            }
        );
        
    }
    
    function startTimer(){
        countEseguzioni++;
        
        elTimer = setTimeout(function(){
                    if(countEseguzioni == 1){
                        switch(effect){
                            case "sx":{
                                incrementaPosizione();
                                break;
                            }
                            case "dx":{
                                decrementaPosizione();
                                break;
                            }
                            default:{
                                incrementaPosizione();
                                break;
                            }
                        }                           
                        countEseguzioni = 0; 
                        startTimer(); 
                    }                    
                  }, parseInt(timeout, 10));
    }
    function incrementaPosizione(){        
        elRotator.children().last().after(elRotator.children().first());

        elRotator.children().each(function(index, el){
            if(index < (elRotator.children().size()-1)){
                $(el).stop(true,true).animate({'left': (widthItem * index)}, 1000);
            }
            else{
                $(el).stop(true,true).animate({'left': (widthItem * -1)}, 1000, function(){ $(el).css({'left': (widthItem * index)}); });
            }
        });
    }
    
    function decrementaPosizione(){  
        elRotator.children().first().before(elRotator.children().last());
        elRotator.children().each(function(index, el){
            if(index != 0){
                $(el).stop(true,true).animate({'left': (widthItem * index)}, 1000);
            }
            else{
                $(el).stop(true,true).css('left',(widthItem * -1));
                $(el).stop(true,true).animate({'left': index}, 1000, function(){});
            }
        });
    }
    
    function log() {
        if (window.console && window.console.log)
            window.console.log('[multirotator] ' + Array.prototype.join.call(arguments, ' '));
    };
}
