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 = 100;
        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()
