NovoSlider = function () {
	function slide(params) {
		this.scrollspeed = 0.1
		this.init(params)
	}
	slide.prototype.init = function (params) {
		//Select div from Slider
		var my_div = document.getElementById(params.id);
		//Select List from Slider
		var my_List = my_div.getElementsByTagName('ul')[0];
		this.my_List = my_List;
		//Select List-Items
		var my_List_Elements = my_List.getElementsByTagName('li');
		//Count of Listitems
		this.my_List_length = my_List_Elements.length;
		//Init Variables
		this.Slider_Positon = 0;
		//Atomatic switch interval in seconds
		this.auto_interval = params.auto || 0;
		//Automatic resume after manual swtich
		this.resume = params.resume || 0;
		//Vertical / Horizontal
		this.isVertical = params.vertical || 0;
		//Anzahl der Objekte pro Seite
		this.viewcount = params.viewcount || 1
		//Navigation vorhanden?
		if (params.navid && params.activeclass) {
			//Navigationsitems speichern
			this.my_Navigation_List_Items = document.getElementById(params.navid).getElementsByTagName('li');
			//css-Klasse des selektierten Items
			this.Selected_cssClass = params.activeclass
		}
		//Element schiebt sich ins "nichts"
		my_div.style.overflow = 'hidden';
		if (this.isVertical) {
			//Vertival layout
			my_List.style.top = 0;
			//Height for one Element
			this.height = params.height || my_List_Elements[0].offsetHeight;
			//Height for all Elements
			my_List.style.height = (this.my_List_length * this.height) + 'px';
		}
		else {
			//Horizontal layout
			my_List.style.left = 0;
			//Width for one Element
			this.width = params.width || my_List_Elements[0].offsetWidth;
			//Width for all Elemnts
			my_List.style.width = (this.my_List_length * this.width) + 'px';
		}
		//Set Slider Position
		this.isAuto = this.auto_interval ? 1 : 0
		this.pos(params.position)
	}
	,
	slide.prototype.moveForward = function () {
		//Slide +1 Pos
		this.pos((this.Slider_Positon + 1 == this.my_List_length - this.viewcount + 1) ? 0 : this.Slider_Positon + 1)
	}
	,
	slide.prototype.moveBackward = function () {
		//Slide -1 Pos
		this.pos((this.Slider_Positon - 1 < 0) ? this.my_List_length - 1 - this.viewcount + 1 : this.Slider_Positon - 1)
	}
	,
	slide.prototype.pos = function (NewPosition) {
		//Manual Interrupt - Stop running animations
		this.isAuto = 0
		clearInterval(this.MoveInterval);
		clearInterval(this.SlideInterval);
		var offset = this.isVertical ? parseInt(this.my_List.style.top) : parseInt(this.my_List.style.left);
		var target = this.isVertical ? NewPosition * this.height : NewPosition * this.width;
		var direction = target > Math.abs(offset) ? 1 : -1;
		target = target * -1;
		this.Slider_Positon = NewPosition;
		if (this.my_Navigation_List_Items) {
			//Wenn Navigation vorhanden
			for (var i = 0; i < this.my_List_length - this.viewcount + 1; i++) {
				this.my_Navigation_List_Items[i].className = i == NewPosition ? this.Selected_cssClass : '';
			}
		}
		//Slide Animation
		this.SlideInterval = setInterval(new Function('slideshow.slide(' + target + ',' + direction + ')'), 20)
	}
	,
	slide.prototype.slide = function (target, direction) {
		var offset = this.isVertical ? parseInt(this.my_List.style.top) : parseInt(this.my_List.style.left);
		if (offset == target) {
			clearInterval(this.SlideInterval);
			if (this.Slider_Positon == this.my_List_length - 1) {
				this.Slider_Positon = 0;
				this.isVertical ? this.my_List.style.top = 0 : this.my_List.style.left = 0;
			}
			if (this.isAuto || (this.auto_interval && this.resume)) {
				this.isAuto = 1
				//Automove every [this.auto_interval] seconds
				this.MoveInterval = setInterval(new Function('slideshow.moveForward()'), this.auto_interval * 1000)
			}
		}
		else {
			var NewOffset = offset - Math.ceil(Math.abs(target - offset) * this.scrollspeed) * direction + 'px';
			this.isVertical ? this.my_List.style.top = NewOffset : this.my_List.style.left = NewOffset;
		}
	};
	return { slide: slide }
} ();
