﻿function carouselTriarts() {

    var originalProjectList;
    var originalDetailList;
    var horizontalSlider;
    var verticalSlider;
    var accueilslider;
    var sectionList = new Array("#accueil", "#services", "#realisations", "#contact");
    var modeGotoSlide = false;
    var slideNumber = 0;

    InitSlider();
    
    $(document).keydown(function (event) {
        switch (event.keyCode) {
            case 37: // left arrow
                event.preventDefault();
                carousel.MoveLeft();
                break;
            case 39: // right arrow
                event.preventDefault();
                carousel.MoveRight();
                break;
            case 40: // down arrow
                event.preventDefault();
                carousel.MoveDown();
                break;
            case 38: // up arrow
                event.preventDefault();
                carousel.MoveUp();
                break;
        }
    });

    $(document).mousewheel(function (event, delta) {
        (delta > 0) ? carousel.MoveUp() : carousel.MoveDown();
    });

    this.MoveUp = function() {
        if (!$('html, body').is(':animated')) {
            if (horizontalSlider.getCurrentSlide() == 0) {
                ScrollPrevSection();
            } else {
                GotoVerticalSlider(verticalSlider.getCurrentSlide() - 1);
            }
        }
    }

    this.MoveDown = function() {
        if (!$('html, body').is(':animated')) {
            if (horizontalSlider.getCurrentSlide() == 0) {
                ScrollNextSection();
            } else {
                GotoVerticalSlider(verticalSlider.getCurrentSlide() + 1);
            }
        }
    }

    this.MoveRight = function() {
        if (GetCurrentSectionName() == "#realisations") {
            GotoHorizontalSlider(horizontalSlider.getCurrentSlide() + 1);
        }
    }

    this.MoveLeft = function() {
        if (GetCurrentSectionName() == "#realisations") {
            GotoHorizontalSlider(horizontalSlider.getCurrentSlide() - 1);
        }
    }

    function InitSlider() {
        originalProjectList = $(".horizontal-slider").clone();
        originalDetailList = $(".vertical-slider").clone();

        var newDetailList = originalDetailList.children().eq(1);
        $(".vertical-slider").empty();
        $(".vertical-slider").append(newDetailList.clone().children());

        CreateSliders();
        ShowVerticalSlider();
        InitMenuSelection();
        InitSorting();
        SetMenuForiPad();

        $(".horizontalSliderItem").click(function () {
            GotoHorizontalSlider($(this).parent().attr("data"));
            return false;
        });
    }

    function CreateSliders() {
        horizontalSlider = $('.horizontal-slider').bxSlider({
            displaySlideQty: 11,
            moveSlideQty: 1,
            speed: 250,
            controls: false,
            infiniteLoop: false,
            onBeforeSlide: function (currentSlide, totalSlides) {

            },
            onAfterSlide: function (currentSlide, totalSlides) {
                ShowVerticalSlider();
            }
        });
        verticalSlider = $(".vertical-slider").bxSlider({
            displaySlideQty: 3,
            moveSlideQty: 1,
            speed: 250,
            controls: false,
            infiniteLoop: false,
            mode: 'vertical',
            onBeforeSlide: function (currentSlide, totalSlides) {
                var selectedSlider = $(".vertical-slider").children();
                selectedSlider.animate({ 'opacity': 0.5 }, 100);
                $("#arrow-controls").remove();
            },
            onAfterSlide: function (currentSlide, totalSlides) {
                var selectedSlider = $(".vertical-slider").children().eq(currentSlide);
                selectedSlider.animate({ 'opacity': 1 }, 100);

                CreateArrows();
            }
        });
        accueilslider = $(".accueil-slider").bxSlider({
            auto: true,
            mode: "fade",
            speed: 4000,
            captions: false,
            controls: false,
            onBeforeSlide: function (currentSlide, totalSlides) {
                var slideTitle = "&lt;" + $(".accueil-slider").children("#dernierprojet" + currentSlide).children(0).attr("title") + "&gt;";
                var slideDesc = $(".accueil-slider").children("#dernierprojet" + currentSlide).children(0).attr("rel");
                $("#dernierProjetTitle").html(slideTitle);
                $("#dernierProjetDescription").html(slideDesc);
            }
        });
        var slideTitle = "&lt;" + $(".accueil-slider").children("#dernierprojet0").children(0).attr("title") + "&gt;";
        var slideDesc = $(".accueil-slider").children("#dernierprojet0").children(0).attr("rel");
        $("#dernierProjetTitle").html(slideTitle);
        $("#dernierProjetDescription").html(slideDesc);
    }

    function InitSorting() {
        // bind radiobuttons in the form
        var $filterType = $('#radioButton label');
        // get the first collection
        var $applications = $('.horizontal-slider');
        // clone applications to get a second collection
        var $data = $applications.clone();
        selectSorting("#radio-all");
        // attempt to sort on every form change
        $filterType.click(function () {
            if ($(this).children(':first-child').val() == "all") {
                ChangeSliderList("all");
                selectSorting("#radio-all");
            } else {
                var value = $(this).children(':first-child').val();
                ChangeSliderList(value);
                selectSorting("#radio-" + value);
            }
        });
    };
    
    function selectSorting(item) {
        $("#radio-all").removeClass("sortingSelected");
        $("#radio-web").removeClass("sortingSelected");
        $("#radio-design").removeClass("sortingSelected");
        $(item).addClass("sortingSelected");
    }
    
    function ChangeSliderList(list) {
        HideVerticalSlider();
        HideHorizontalSlider();
        ShowHorizontalSlider(list);
        ShowVerticalSlider();
    }

    function GotoHorizontalSlider(number) {
        if (number >= 0 && number < horizontalSlider.getSlideCount()) {
            if (horizontalSlider.getCurrentSlide() != number) {
                HideVerticalSlider();
            }
            horizontalSlider.goToSlide(number);
        }
    }

    function GotoVerticalSlider(number) {
        verticalSlider.goToSlide(number);
    }

    function HideVerticalSlider() {
        $(".vertical-slider").hide();
    }

    function HideHorizontalSlider() {
        $(".horizontal-slider").hide();
    }

    function ShowVerticalSlider() {
        var selectedSlider = $(".horizontal-slider").children().eq(horizontalSlider.getCurrentSlide());
        var projectID = selectedSlider.attr("data");
        var newDetailList = originalDetailList.children().eq(projectID);
        $(".vertical-slider").empty();
        $(".vertical-slider").append(newDetailList.clone().children());
        var vslider = $(".vertical-slider").detach();
        $("#vertical-wrapper").empty();
        $("#vertical-wrapper").append(vslider);
        $(".vertical-slider").show();
        verticalSlider.reloadShow();
        $(".vertical-slider").children().each(function () {
            $(this).click(function () {
                GotoVerticalSlider($(".vertical-slider li").index(this));
                return false;
            });
        });

        $(".detailLink").click(function () {
            window.open($(this).attr("href"));
        });

        CreateArrows();
    }

    function ShowHorizontalSlider(list) {
        $(".horizontal-slider").empty();
        if(list == "all") {
            $(".horizontal-slider").append(originalProjectList.children().clone());
        } else {
            originalProjectList.find('*[rel]').each(function (index) {
                if ($(this).attr("rel") == list) {
                    $(".horizontal-slider").append($(this).clone());
                }
            });
        }
        var hslider = $(".horizontal-slider").detach();
        $("#horizontal-wrapper").empty();
        $("#horizontal-wrapper").append(hslider);
        $(".horizontal-slider").show();
        horizontalSlider.reloadShow();
        $(".horizontal-slider").children().each(function () {
            $(this).click(function () {
                GotoHorizontalSlider($(".horizontal-slider li").index(this));
                return false;
            });
        });
    }

    function GetCurrentSectionIndex() {
        section = GetCurrentSectionName();
        for (var i = 0; i < sectionList.length; i++) {
            if (sectionList[i] == section) {
                return i;
            }
        }
        return -1;
    }

    function ScrollNextSection() {
        i = GetCurrentSectionIndex();
        i++;
        if (i >= 0 && i < sectionList.length) {
            scrollTo(sectionList[i]);
        }
    }

    function ScrollPrevSection() {
        i = GetCurrentSectionIndex();
        i--;
        if (i >= 0 && i < sectionList.length) {
            scrollTo(sectionList[i]);
        }
    }

    function scrollTo(element) {
        $('html, body').stop().animate({
            scrollTop: $(element).offset().top
        }, 800, 'easeInOutExpo', function () {
            window.location.hash = element;
            GetCurrentSectionName();
            if (modeGotoSlide) {
                modeGotoSlide = false;
                GotoHorizontalSlider(slideNumber);
            }
            else {
                GotoHorizontalSlider(0);
            }
            SetMenuForiPad();
        });
    }

    function GetCurrentSectionName() {
        var docViewTop = $(window).scrollTop();
        var docViewBottom = docViewTop + $(window).height();
        var medianView = (docViewBottom - docViewTop) / 2;
        medianView += docViewTop;

        var accueilTop = $("#accueil").offset().top;
        var accueilBottom = accueilTop + $("#accueil").height();
        var servicesTop = $("#services").offset().top;
        var servicesBottom = servicesTop + $("#services").height();
        var realisationTop = $("#realisations-wrapper").offset().top;
        var realisationBottom = realisationTop + $("#realisations-wrapper").height();
        var contactTop = $("#contact").offset().top;
        var contactBottom = contactTop + $("#contact").height();

        if ((medianView >= accueilTop) && (medianView <= accueilBottom)) {
            selectMenuItem("none");
            return "#accueil";
        } else if ((medianView >= servicesTop) && (medianView <= servicesBottom)) {
            selectMenuItem("#MenuServices");
            return "#services";
        } else if ((medianView >= realisationTop) && (medianView <= realisationBottom)) {
            selectMenuItem("#MenuRealisation");
            return "#realisations";
        } else if ((medianView >= contactTop) && (medianView <= contactBottom)) {
            selectMenuItem("#MenuContact");
            return "#contact";
        }
    }

    $(function () {
        $('ul.menuNav a').bind('click', function (event) {
            GotoHorizontalSlider(0);
            var $anchor = $(this);
            var division = $anchor.attr('href');
            scrollTo(division);
            event.preventDefault();
        });
    });

    $(function () {
        $('div.menuImage a').bind('click', function (event) {
            GotoHorizontalSlider(0);
            var $anchor = $(this);
            var division = $anchor.attr('href');
            scrollTo(division);
            event.preventDefault();
        });
    });

    $(function () {
        $('.accueil-slider img').click(function () {
            modeGotoSlide = true;
            slideNumber = accueilslider.getCurrentSlide();
            scrollTo("#realisations");
            event.preventDefault();
        });
    });

    function selectMenuItem(item) {
        $("#MenuServices").removeClass("menuItemSelected");
        $("#MenuRealisation").removeClass("menuItemSelected");
        $("#MenuContact").removeClass("menuItemSelected");
        $(item).addClass("menuItemSelected");
    }

    function InitMenuSelection() {
        section = window.location.hash;
        
        if (section == "#contact") {
            selectMenuItem("MenuContact");
        } else if (section == "#services") {
            selectMenuItem("#MenuServices");
        } else if (section == "#realisations") {
            selectMenuItem("#MenuRealisation");
        } else {
            selectMenuItem("none");
        }
    }

    function SetMenuForiPad() {
        if (navigator.platform == "iPad") {
            $("#leftmenuContent").css("top", ($(document).scrollTop() + 15) + "px");
        }
    }

    function CreateArrows() {
        var selectedSlider = verticalSlider.children().eq(verticalSlider.getCurrentSlide());

        var controls = $("<div id='arrow-controls'></div>");

        if (horizontalSlider.getCurrentSlide() > 0) {
            var left = $("<div class='left-arrow'></div>");
            left.click(function () {
                carousel.MoveLeft();
            });
            controls.append(left);
        }
        if (horizontalSlider.getCurrentSlide() < horizontalSlider.getSlideCount() - 1) {
            var right = $("<div class='right-arrow'></div>");
            right.click(function () {
                carousel.MoveRight();
            });
            controls.append(right);
        }
        if (verticalSlider.getCurrentSlide() > 0) {
            var up = $("<div class='up-arrow'></div>");
            up.click(function () {
                carousel.MoveUp();
            });
            controls.append(up);
        }
        if (verticalSlider.getCurrentSlide() < verticalSlider.getSlideCount() - 1) {
            var down = $("<div class='down-arrow'></div>");
            down.click(function () {
                carousel.MoveDown();
            });
            controls.append(down);
        }

        selectedSlider.append(controls);
    }
}
