﻿/// <reference path="../../Libs/Plugins/jQuery/jquery.js" />

/// <summary>
/// © XTRA | Estetica e tecnologia
/// Email: info@xtra.it
/// </summary>

// Page: Ready
$(document).ready(function () {

    // Imposta: DivLinkDetail
    $(function () {
        var $DivLinkDetail = $(".DivLinkDetail");

        // Imposta: MouseOver nella lista
        $DivLinkDetail.hover(function () {

            // Imposta: MouseOver
            $(".Product_ListItem_Top", this).addClass("Product_ListItem_TopOver");
            $(".Product_ListItem_Label", this).addClass("Product_ListItem_LabelOver");

        }, function () {

            // Imposta: MouseOut
            $(".Product_ListItem_Top", this).removeClass("Product_ListItem_TopOver");
            $(".Product_ListItem_Label", this).removeClass("Product_ListItem_LabelOver");
        });

        // Imposta: Div cliccabile nella lista
        $DivLinkDetail.click(function () {

            // Recupera: Valore Href da Tag A all'interno del Div da render cliccabile
            window.location = $("a", this).attr("href");
        });
    });

    // Imposta: Modulo Visual
    $(function () {

        //: Parametri
        var $TimerInterval = 5000;
        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 = NumberRandom;
        var $VisualItemSelected = null;
        var $VisualItemPrevious = null;
        var $Timer = null;

        if ($VisualItems.length > 1) {

            //: Se attivato: imposta selettore
            if ($IsSelectorEnabled) {

                $Selector.show();
            }
        }
        else {
            $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();

                    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();

                        $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");
        }

        // 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;
}

