﻿function Carousel() {

    var _carousel = null;
    var _pagesContainer = null;

    var _prevButton = null;
    var _nextButton = null;

    var _pageWidth = 0;
    var _pageHeight = 0;

    var _pageCount = 0;
    var _currentPage = -1;

    var slideSteps = 200;
    var slideInterval = 10;

    var oInterval = null;


    function hookEvent(element, eventName, callback) {
        if (typeof (element) == "string") element = document.getElementById(element);
        if (element == null) return;

        if (element.addEventListener) {
            if (eventName == 'mousewheel')
                element.addEventListener('DOMMouseScroll', callback, false);
            element.addEventListener(eventName, callback, false);
        }
        else if (element.attachEvent) element.attachEvent("on" + eventName, callback);
    }


    this.setPageHeight = function(height) {
        _pageHeight = height;
    }
    this.setPageWidth = function(width) {
        _pageWidth = width;
    }
    this.setPageCount = function(count) {
        _pageCount = count;
    }

    this.start = function(index) {
        _pagesContainer.style.left = (0 - (_pageWidth * index)) + 'px';
        _currentPage = index;
    }

    this.setCarousel = function(element) {
        if (typeof (element) == "string") element = document.getElementById(element);
        if (element == null) return;
        _carousel = element;
    }

    this.setPagesContainer = function(element) {
        if (typeof (element) == "string") element = document.getElementById(element);
        if (element == null) return;
        _pagesContainer = element;


    }

    this.setPrevButton = function(element) {
        if (typeof (element) == "string") element = document.getElementById(element);
        if (element == null) return;
        _prevButton = element;
        hookEvent(_prevButton, 'click', this.prevPage);
    }

    this.setNextButton = function(element) {
        if (typeof (element) == "string") element = document.getElementById(element);
        if (element == null) return;
        _nextButton = element;
        hookEvent(_nextButton, 'click', this.nextPage);
    }


    function slideToPage(index) {
        switch (true) {
            case index > _currentPage:
                _currentPage = index;
                window.clearInterval(oInterval);
                oInterval = window.setInterval(function() { slideToPosition((0 - (_pageWidth * index))) }, 25)
                break;

            case index < _currentPage:
                _currentPage = index;
                //slideToPosition((0 - (_pageWidth * index)));
                window.clearInterval(oInterval);
                oInterval = window.setInterval(function() { slideToPosition((0 - (_pageWidth * index))) }, 25);
                break;

            default:
                // do nothing, the page doesn't need to move.
        }


    }

    this.nextPage = function() {
        if (_currentPage < (_pageCount - 1)) {
            slideToPage(_currentPage + 1)
        }
    }

    this.prevPage = function() {
        if (_currentPage > 0) {
            slideToPage(_currentPage - 1)
        }
    }

    var DistanceToTravel = 0;
    var Difference = 0;

    function slideToPosition(targetPosition) {

        if (targetPosition < _pagesContainer.offsetLeft) {
            Difference = _pagesContainer.offsetLeft - targetPosition
            var newPositon = (_pagesContainer.offsetLeft - (Difference / 10)) - 5
        } else {
            Difference = targetPosition - _pagesContainer.offsetLeft
            var newPositon = (_pagesContainer.offsetLeft + (Difference / 10)) + 5
        }

        if (Difference < 4) {
            window.clearInterval(oInterval)
            _pagesContainer.style.left = targetPosition + 'px';
        } else {
            _pagesContainer.style.left = newPositon + 'px';
        }


    }


}