function Slider(identifier, offset, delay)
{
	this.getIdentifier = function getIdentifier()
	{
		return identifier;
	}
	{
		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: 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];
    
/*console.log(mover.offsetWidth);*/
	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.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";
/*console.log(moverWidth);    */
    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()
