function Slider(identifier, offset, delay) {

    this.getIdentifier = function getIdentifier() { return identifier; }


    {   // Slider: beginning of getMoverWidth()

        var slider = document.getElementById(identifier);
        if (slider == null) return new Object();

        var slides = slider.getElementsByTagName("li");
        var minSlidesNumber = 4;
        if (slides.length < minSlidesNumber) return new Object();

        var moverWidth = slides[0].offsetWidth;

        this.getMoverWidth = function getMoverWidth() { return moverWidth; }

    }   // Slider: end of getMoverWidth()


    {   // Slider: beginning of getMaxShiftOffset(), getMinShiftOffset(), getShiftOffset()

        var minShiftOffset = 1;
        var maxShiftOffset = 157;
        var shiftOffset = 12;

        if (offset >= minShiftOffset && offset <= maxShiftOffset) shiftOffset = offset;
        if (offset <= shiftOffset) return new Object();

        this.getMaxShiftOffset = function getMaxShiftOffset() { return maxShiftOffset; };
        this.getMinShiftOffset = function getMinShiftOffset() { return minShiftOffset; };
        this.getShiftOffset = function getShiftOffset() { return shiftOffset; }

    }   // Slider: end of getMaxShiftOffset(), getMinShiftOffset(), getShiftOffset()


    {   // Slider: beginning of getMaxShiftDelay(), getMinShiftDelay(), getShiftDelay()

        var minShiftDelay = 5;
        var maxShiftDelay = 250;
        var shiftDelay = 25;

        if (delay >= minShiftDelay && delay <= maxShiftDelay) shiftDelay = delay;

        this.getMaxShiftDelay = function getMaxShiftDelay() { return maxShiftDelay; };
        this.getMinShiftDelay = function getMinShiftDelay() { return minShiftDelay; };
        this.getShiftDelay = function getShiftDelay() { return shiftDelay; }

    }   // Slider: end of getMaxShiftDelay(), getMinShiftDelay(), getShiftDelay()

}   // end of Slider(identifier)


Slider.prototype.slideLeft = function slideLeft() {

    var slides = document.getElementById(this.getIdentifier())
        .getElementsByTagName("li");

    var slidesContainer = slides[0].parentNode;
    var mover = slides[0];
    var firstRegularSlide = slides[1];

    if (mover.offsetWidth == this.getMoverWidth()) {

        var lastRegularSlide = slides[slides.length - 1];

        mover.style.width = "0px";
        slidesContainer.insertBefore(lastRegularSlide, firstRegularSlide);
    }

    var moverWidth = mover.offsetWidth;

    if (this.getMoverWidth() - moverWidth > this.getShiftOffset()) moverWidth += this.getShiftOffset();
    else moverWidth = this.getMoverWidth();

    mover.style.width = moverWidth + "px";

    if (moverWidth < this.getMoverWidth()) {

        var self = this;
        setTimeout(
            function () { self.slideLeft(); },
            this.getShiftDelay()
        );
    }

}   // Slider.prototype: end of slideLeft()


Slider.prototype.slideRight = function slideRight() {

    var slides = document.getElementById(this.getIdentifier())
        .getElementsByTagName("li");

    var slidesContainer = slides[0].parentNode;
    var mover = slides[0];
    var firstRegularSlide = slides[1];

    var moverWidth = mover.offsetWidth;

    if (moverWidth > this.getShiftOffset()) moverWidth -= this.getShiftOffset();
    else moverWidth = 0;

    mover.style.width = moverWidth + "px";

    if (moverWidth > 0) {

        var self = this;
        setTimeout(
            function () { self.slideRight(); },
            this.getShiftDelay()
        );
    }
    else {

        slidesContainer.insertBefore(firstRegularSlide, null);
        mover.style.width = this.getMoverWidth() + "px";
    }

}   // Slider.prototype: end of slideRight()
