function sliderHorizontal (container) {
	var self = this;
	var oldChilds = [];

	var slider;
	var slideChilds = [];
	var slideChildsSize = [];
	var hiddenOffsetWidthDiv;
	this.init = function () {

		var cloned = [];
		for (var i = 0; i < container.children.length; i++) {
			var span = document.createElement("div");
				span.style.position = 'absolute';
				container.appendChild(span);
				span.appendChild(container.children[i].cloneNode(true));
				slideChildsSize.push({"width": span.offsetWidth, "height": span.offsetHeight});
				container.removeChild(span);

			oldChilds.push(container.children[i].cloneNode(true));
			cloned.push(container.children[i].cloneNode(true));
			container.removeChild(container.children[i]);
			i--;
		}


		slider = document.createElement("div");
			container.appendChild(slider);
			slider.style.width = '0px';

		for (var i = 0; i < cloned.length; i++) {
			this.addItem(cloned[i], slideChildsSize[i]);
		}

		var end = false;
	};

	this.addItem = function (item, size) {
		var div = document.createElement("div");
			slider.appendChild(div);

			div.style.width = size.width + 'px';
			div.style.height = size.height + 'px';
			if (document.all) {
				div.style.styleFloat = "left";
			}
			else {
				div.style.cssFloat = "left";
			}
			div.style.display	= "block";

		slider.style.width = (parseFloat(slider.style.width) + size.width) + 'px';

		div.appendChild(item);
	};

	this.animate = {
		canGoNext: function () {
			var x = this.getX();
			var maxWidth  = slider.offsetWidth - container.offsetWidth;

			if ((x * -1) >= maxWidth) {
				return false;
			}
			else {
				return true;
			}
		},
		canGoBack: function () {
			var x = this.getX();
			if ((x * -1) <= 0) {
				return false;
			}
			else {
				return true;
			}
		},
		next: function (onNext) {
			var x = this.getX();
			var maxWidth  = slider.offsetWidth - container.offsetWidth;
			var widthNext = 0;
			var left = 0;
			for (var i = 0; i < slider.children.length; i++) {
				var width = slider.children[i].offsetWidth;
				left += width;
				if (left > (x * -1)) {
					widthNext = width;
					break;
				}
			}

			if (widthNext === 0) {
				return false;
			}
			else {
				var step = new smoothAnimationHelper(0, widthNext, 10);
					step.onStep = function (nextValue, __speed) {
						slider.style.marginLeft = x + (nextValue * -1) + 'px';
					};
					if (onNext !== undefined)
						step.onReady = onNext;
				return true;
			}
		},
		back: function (onPrev) {
			var x = this.getX();
			var right = slider.offsetWidth;
			var widthPrev = 0;
			for (var i = (slider.children.length - 1); i >= 0; i--) {


				if ((x * -1) >= right) {
					widthPrev = slider.children[i].offsetWidth;
					break;
				}
				right -= slider.children[i].offsetWidth;
			}

			if ((x*-1) <= 0)
				return false;
			else {
				var step = new smoothAnimationHelper(0, widthPrev, 10);
					step.onStep = function (nextValue, __speed) {
						slider.style.marginLeft = x - (nextValue * -1) + 'px';
					};
					if (onPrev !== undefined)
						step.onReady = onPrev;
				return true;
			}
		},
		animate: function (maxSpeed) {
			if (this.i !== undefined) {
				alert ("firstStop Animation");
			}

			var self = this;
			this.speed = {
				"maxSpeed": maxSpeed,
				"speed": 0,
				"acceleration": maxSpeed / 20
			};

			this.i = window.setInterval(function () {
				if (self.speed.speed !== self.speed.maxSpeed) {
					self.speed.speed += self.speed.acceleration;
				}


				var x = self.getX();
				if (self.speed.maxSpeed < 0) {
					if (((x + self.speed.speed) * -1) >= (slider.offsetWidth - container.offsetWidth)) {
						self.setX(((slider.offsetWidth - container.offsetWidth) * -1));
						window.clearInterval(self.i);
					}
					else {
						self.setX((x + self.speed.speed));
					}
				}
				else {
					if (((x + self.speed.speed) * -1) <= 0) {
						self.setX(0);
						window.clearInterval(self.i);
					}
					else {
						self.setX((x + self.speed.speed));
					}
				}
			}, 20);
		},
		stopAnimate: function (onStop) {
			window.clearInterval(this.i);
			var self = this;
			this.i = window.setInterval(function () {
				if (self.speed.speed !== 0) {
					self.speed.speed -= self.speed.acceleration;

					var x = self.getX();
					if (self.speed.maxSpeed < 0) {
						if (((x - self.speed.speed) * -1) >= (slider.offsetWidth - container.offsetWidth)) {
							self.setX(((slider.offsetWidth - container.offsetWidth) * -1));
							window.clearInterval(self.i);
							self.i = undefined;
							if (onStop !== undefined)
								onStop();
						}
						else {
							self.setX((x + self.speed.speed));
						}
					}
					else {
						if (((x - self.speed.speed) * -1) <= 0) {
							self.setX(0);
							self.clearInterval(self.i);
							self.i = undefined;
							if (onStop !== undefined)
								onStop();
						}
						else {
							self.setX((x + self.speed.speed));
						}
					}


				}

				if (self.speed.speed === 0) {
					window.clearInterval(self.i);
					self.i = undefined;
					if (onStop !== undefined)
						onStop();
				}
			}, 20);
		},
		setX: function (x) {
			slider.style.marginLeft = x + 'px';
		},
		getX: function () {
			return (slider.style.marginLeft !== '')? parseFloat(slider.style.marginLeft) : 0;
		}

	};

	this.destroy = function () {
		container.innerHTML = '';
		for (var i = 0; i < oldChilds.length; i++) {
			container.appendChild(oldChilds[i]);
		}
	};

	this.init();
}
