﻿(function ($) {
    $.fn.sliderM = function (options) {
        //variabili di default
        var defaults = {
            speedS: 1000,        //velocità slide
            timerS: 4000,       //tempo fra uno slide e l'altro
            speedP: 1600,     //velocità pannello di controllo
            direction: "left",   //direzione di scorrimento <"left"> || <"right">
            numP: 1,            //numero di pannelli da visualizzare
            controlPanel: true   //se true visualizzo il pannello di controllo
        };
        //se le opzioni sono diverse, le defaults vengono sostituite con le nuove opzioni
        var options = $.extend(defaults, options);

        this.each(function () {
            //INIZIO inizializzazione dello sliderM.children()
            var obj = $(this);
            obj.addClass("sliderM");
            var divBase = obj.children();
            var margine = parseInt(divBase.css("margin-left"));
            divBase.css({ "margin-right": margine + "px" });
            var divContent = $("<div />").addClass("sliderM_content").prependTo(obj);
            if (options.controlPanel == true) {
                var divControlSx = $("<div />").addClass("sliderM_control_sx").appendTo(obj);
                var divControlDx = $("<div />").addClass("sliderM_control_dx").appendTo(obj);
                divControlSx.css("top", "-" + ((divBase.height() / 2) + 70) + "px");
                divControlDx.css("top", "-" + ((divBase.height() / 2) + 70) + "px");
            }
            var stateControl = "open";
            //uso outerWidth(false) e sommo il margine sinistro trascurando quello destro per centrare il divBase
            var w = divBase.outerWidth(false) + (margine * 2);
            var h = divBase.outerHeight(true);
            divContent.html(divBase);
            obj.width(w * options.numP);
            obj.height(h);
            divContent.width(w * divBase.length);
            divContent.height(h);
            divBase.css({ "float": "left" });
            if (divBase.length > options.numP) {
                if (options.controlPanel == true) { divControlSx.fadeIn(options.speedP); }
                if (options.controlPanel == true) { divControlDx.fadeIn(options.speedP); }
                
                lanciaSliderM(true);

                obj.hover(function () {
                    lanciaSliderM(false);
                    if (stateControl == "close") { openControl(); }
                }, function () {
                    lanciaSliderM(true);
                    if (stateControl == "open") { closeControl(); }
                });
                if (options.controlPanel == true) {
                    //controllo sull'evento click dell bottone prev
                    divControlSx.click(function (event) {
                        event.preventDefault();
                        prevSlide();
                    });

                    //controllo sull'evento click dell bottone prev
                    divControlDx.click(function (event) {
                        event.preventDefault();
                        nextSlide();
                    });
                }
            }

            //controllo sull'evento mouseover dello slider


            //accende/spegne lo scorrimento automatico
            var timer;
            function lanciaSliderM(attivo) {
                if (attivo == true) {
                    timer = setInterval(function () {
                        if (options.direction == "left") { nextSlide(); }
                        if (options.direction == "right") { prevSlide(); }
                        if (stateControl == "open") { closeControl(); }
                    }, options.timerS);
                }
                else { clearInterval(timer); };
            };
            //avanti di un pannello
            function nextSlide() {
                var firstPanel = divContent.children().first();
                if (parseInt(firstPanel.css("margin-left")) == margine) {
                    firstPanel.animate({ "margin-left": "-" + w + "px" }, options.speedS, function () {
                        firstPanel.appendTo(divContent).css({ "margin-left": margine + "px" });
                    });
                }
            };
            //indietro di un pannello
            function prevSlide() {
                var firstPanel = divContent.children().first();
                if (parseInt(firstPanel.css("margin-left")) == margine) {
                    var lastPanel = divContent.children().last(); ;
                    lastPanel.prependTo(divContent).css({ "margin-left": "-" + w + "px" });
                    lastPanel.animate({ "margin-left": margine + "px" }, options.speedS);
                };
            };
            //nascondi i comandi avanti e indietro
            function closeControl() {
                if (options.controlPanel == true) {
                    divControlSx.fadeOut(options.speedP, function () { stateControl = "close"; });
                    divControlDx.fadeOut(options.speedP, function () { stateControl = "close"; });
                }
            }
            //mostra i comandi avanti e indietro
            function openControl() {
                if (options.controlPanel == true) {
                    divControlSx.fadeIn(options.speedP, function () { stateControl = "open"; });
                    divControlDx.fadeIn(options.speedP, function () { stateControl = "open"; });
                }
            }

        });
    }
})(jQuery);
