﻿/// <reference path="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.4.min.js" />

/// <summary>
/// © XTRA | Estetica e tecnologia
/// Email: info@xtra.it
/// </summary>
$(document).ready(function () {

    // Imposta: Modulo Visual
    $(function () {

        //: Parametri
        var $TimerInterval = 7000;
        var $IsSelectorEnabled = false;
        var $IsTimerEnabled = true;
        var $IsClickOnVisualEnabled = false;

        // Recupera: Elementi dalla pagina
        var $VisualContainer = $(".VisualContainer");
        var $VisualLoader = $(".VisualLoader", $VisualContainer);
        var $VisualItems = $(".VisualItem", $VisualContainer);

        var $Selector = $(".Selector", $VisualContainer);
        var $SelectorPrev = $(".SelectorPrev", $Selector);
        var $SelectorNext = $(".SelectorNext", $Selector);
        var $SelectorItems = $(".SelectorItem", $Selector);

        // Imposta: Posizione assoluta dei visual
        $VisualItems.css({ "position": "absolute", "z-index": 1 });

        // Imposta: Hide e toglie Hidden
        $Selector.hide();
        $Selector.removeClass("Hidden");

        $VisualItems.hide();
        $VisualItems.removeClass("Hidden");

        $VisualLoader.hide();
        $VisualLoader.removeClass("Hidden");

        // Imposta: Primo visual casuale
        //var NumberRandom = RandNum(0, $VisualItems.length - 1);

        // Inizializza: Variabili
        var $VisualIndex = 0;
        //var $VisualIndex = NumberRandom;
        var $VisualItemSelected = null;
        var $VisualItemPrevious = null;
        var $Timer = null;

        if ($VisualItems.length < 2) {

            $IsTimerEnabled = false;
        }

        VisualSelected_Set();


        //: Se attivato, imposta click di avanzamento su visual
        if ($IsClickOnVisualEnabled) {

            $VisualItems.click(function () {

                // Seleziona: Visual successivo
                MoveNext();

            });
        }

        $SelectorPrev.click(function () {

            // Seleziona: Visual precedente
            MovePrev();

        });

        $SelectorNext.click(function () {

            // Seleziona: Visual successivo
            MoveNext();

        });

        $SelectorItems.click(function () {

            // Seleziona: Visual selezionato
            MoveAt(this);

        });

        // Seleziona: Visual selezionato
        function MoveAt($SelectorItem) {

            // Disattiva: Timer
            Timer_Stop();

            //: Se non sta eseguendo un'animazione imposta il nuovo visual
            if ($VisualItems.filter(":animated").length == 0) {

                $VisualIndex = $SelectorItems.index($SelectorItem);

                // Carica: Visual corrente
                VisualSelected_Set();
            }
        }

        // Seleziona: Visual precedente
        function MovePrev() {

            // Disattiva: Timer
            Timer_Stop();

            //: Se non sta eseguendo un'animazione imposta il nuovo visual
            if ($VisualItems.filter(":animated").length == 0) {

                // Imposta: Nuovo indice
                if ($VisualIndex > 0)
                    $VisualIndex--;
                else
                    $VisualIndex = $VisualItems.length - 1;

                // Carica: Visual corrente
                VisualSelected_Set();
            }
        }

        // Seleziona: Visual successivo
        function MoveNext() {

            // Disattiva: Timer
            Timer_Stop();

            //: Se non sta eseguendo un'animazione imposta il nuovo visual
            if ($VisualItems.filter(":animated").length == 0) {

                // Imposta: Nuovo indice
                if ($VisualIndex < $VisualItems.length - 1)
                    $VisualIndex++;
                else
                    $VisualIndex = 0;

                //[DEV]
                $('.NavigatorIndex').text($VisualIndex);

                // Carica: Visual corrente
                VisualSelected_Set();
            }
        }

        // Carica: Contenuto visual corrente
        function VisualSelected_Set() {

            if ($VisualItems.index($VisualItemSelected) != $VisualIndex || $VisualItemSelected == null) {

                // Imposta: Selettore
                Selector_Set();

                if ($VisualItemSelected != null) {
                    $VisualItemPrevious = $VisualItemSelected;
                }

                // Imposta: Nuovo visual corrente
                $VisualItemSelected = $VisualItems.eq($VisualIndex);

                if ($(".VisualImage", $VisualItemSelected).length == 0) {

                    //: Contenuto visual da caricare

                    var $ImageUrl = $(".ImageUrl", $VisualItemSelected).text();
                    var $ImageAlt = $(".ImageAlt", $VisualItemSelected).text();

                    // Imposta: Immagine <img>
                    var $VisualImage = $("<img/>")
                        .addClass("VisualImage Hidden")
                        .attr("alt", $ImageAlt)
                        .attr("src", $ImageUrl);

                    // Imposta: Immagine come background di VisualItem
                    //$VisualItemSelected.css({ "background-image": "url(" + $ImageUrl + "?random=" + (new Date()).getTime() + ")" });
                    $VisualItemSelected.css({ "background-image": "url(" + $ImageUrl + ")" });

                    $VisualLoader.show();

                    $VisualImage.load(function () {

                        $VisualLoader.hide();

                        //: Se attivato: imposta selettore
                        if ($IsSelectorEnabled) {

                            $Selector.show();
                        }

                        $VisualImage.appendTo($VisualItemSelected);

                        // Imposta: Visual corrente
                        VisualSelected_Render();

                    })
                        .error(function () {

                            // Se attivato: imposta timer
                            if ($IsTimerEnabled) {

                                Timer_Start();
                            }
                        });

                }
                else {

                    //: Contenuto visual già impostato

                    // Imposta: Visual corrente
                    VisualSelected_Render();
                }
            }
        }

        // Imposta: Contenuto visual corrente
        function VisualSelected_Render() {

            $VisualItemSelected.show();

            // Attiva: Visual selezionato sotto il precedente
            if ($VisualItemPrevious != null) {

                $VisualItemPrevious.css({ "z-index": 2 });

                $VisualItemPrevious.fadeOut(function () {

                    $VisualItemPrevious.css({ "z-index": 1 });
                });
            }

            // Se attivato: imposta timer
            if ($IsTimerEnabled) {
                Timer_Start();
            }
        }

        // Imposta: Selettore
        function Selector_Set() {

            $SelectorItems.removeClass("SelectorItem_Selected");
            $SelectorItems.eq($VisualIndex).addClass("SelectorItem_Selected");

            // Imposta: Pallino selezionato
            $(".SelectorItem_Button", $SelectorItems).removeClass("SelectorItem_Button_Selected");
            $(".SelectorItem_Button", $SelectorItems.eq($VisualIndex)).addClass("SelectorItem_Button_Selected");
        }

        // Avvia: Timer
        function Timer_Start() {

            $Timer = setTimeout(function () {
                MoveNext();
            }, $TimerInterval);
        }

        // Disattiva: Timer
        function Timer_Stop() {

            clearInterval($Timer);
        } 
        
        function RandNum() {

            //RandomNum = RandNum(43);        //Generate a number between 0 and 43
            //RandomNum = RandNum(43, 134);  //Generate a number between 43 and 134

            var l = arguments.length;
            var f = -1;
            var c = -1;
            switch (l) {
                case 1:
                    f = 0;
                    c = arguments[0];
                    break;

                case 2:
                    f = arguments[0];
                    c = arguments[1];
                    break;

                default:
                    f = -1;
            }
            if (f >= 0) {
                var r = Math.random();
                var d = c - f;
                var rnd = r * d;
                var rand = Math.round(rnd) + f;

            }
            return rand;
        }
    });
});
