﻿function Slider() {
    this.config = {};
}

Slider.prototype.beltClassName = 'sliderbelt';
Slider.prototype.itemClassName = 'slideritem';
Slider.prototype.automaticSlide = true;
Slider.prototype.automaticSlideInterval = 10000;
Slider.prototype.slideSpeed = 1000;
Slider.prototype.stopOnMouseHover = true;
Slider.prototype.showNav = true;
Slider.prototype.prevClassName = 'prevbtn';
Slider.prototype.nextClassName = 'nextbtn';
/* IF SOMEONE WISHES TO HAVE TEXT INSIDE THE PREV/NEXT BUTTONS, THE SLIDER COULD BE EXTENDED TO HAVE INNERHTML PROPERTIES OF EACH BUTTON. */

var intervals = new Array();
var index = new Array();

Slider.prototype.makeSliders = function(element, sliderclassname) {
    var sliders = pn1.getElementsByClassName(element, sliderclassname);
	
	for (var a = 0; a < sliders.length; a++) {
		var slider = sliders[a];
		index[index.length] = 0;
		intervals[intervals.length] = '';
		
		this.makeSlider(slider,a);
	}
}

Slider.prototype.makeSlider = function(slider,i) {
	var belt = pn1.getElementsByClassName(slider,this.beltClassName)[0];
	var items = pn1.getElementsByClassName(belt,this.itemClassName);
	var itemwidth = items[0].offsetWidth;
	var beltwidth = itemwidth * items.length;
	
	belt.style.width = beltwidth + 'px';
	
	var prev;
	var next;
	
	if (this.showNav) {
		prev = document.createElement('div');
		next = document.createElement('div');
		
		prev.className = this.prevClassName;
		next.className = this.nextClassName;
		
		prev.style.display = 'none';
		
		if (items.length > 1) {
			next.style.display = 'block';
		} else {
			next.style.display = 'none';
		}
		
		slider.appendChild(prev);
		slider.appendChild(next);
		
		pn1.addEventHandler(prev,'click',function() {
			var ind = arguments[3];
			var intv = intervals[ind];
			
			if (intv != undefined) {
				clearInterval(intv);
			}
			
			var p = arguments[0];
			var n = arguments[1];
			var b = arguments[2];
			var iw = arguments[4];
			var is = arguments[5];
			
			$(b).stop(true,true).animate({'left':'+=' + iw + 'px'},this.slideSpeed);
			index[ind]--;
			
			if (index[ind]+1 == is.length) {
				n.style.display = 'none';
			} else {
				n.style.display = 'block';
			}
			
			if (index[ind] == 0) {
				p.style.display = 'none';
			} else {
				p.style.display = 'block';
			}
			
			//DO NOT UPDATE, BECAUSE BUTTONS ARE INSIDE THE SLIDER - WE UPDATE WHEN WE MOVE MOUSE OUT
			//this.updateInterval(b,is,iw,ind,p,n);
		}.bind(this,prev,next,belt,i,itemwidth,items));
		
		pn1.addEventHandler(next,'click',function() {
			var ind = arguments[3];
			var intv = intervals[ind];
			
			if (intv != undefined) {
				clearInterval(intv);
			}
			
			var p = arguments[0];
			var n = arguments[1];
			var b = arguments[2];
			var iw = arguments[4];
			var is = arguments[5];
			
			$(b).stop(true,true).animate({'left':'-=' + iw + 'px'},this.slideSpeed);
			index[ind]++;
			
			if (index[ind]+1 == is.length) {
				n.style.display = 'none';
			} else {
				n.style.display = 'block';
			}
			
			if (index[ind] == 0) {
				p.style.display = 'none';
			} else {
				p.style.display = 'block';
			}
			
			//DO NOT UPDATE, BECAUSE BUTTONS ARE INSIDE THE SLIDER - WE UPDATE WHEN WE MOVE MOUSE OUT
			//this.updateInterval(b,is,iw,ind,p,n);
		}.bind(this,prev,next,belt,i,itemwidth,items));
	}
	
	if (this.stopOnMouseHover && this.automaticSlide) {
		$(slider).mouseenter(function() {
			var ind = arguments[0];
			
			if (intervals[ind] != undefined) {
				clearInterval(intervals[ind]);
			}
		}.bind(this,i));
		
		$(slider).mouseleave(function() {
			var b = arguments[0];
			var is = arguments[1];
			var iw = arguments[2];
			var ind = arguments[3];
			var s = arguments[4];
			
			var p;
			var n;
			
			if (this.showNav) {
				p = pn1.getElementsByClassName(s,this.prevClassName)[0];
				n = pn1.getElementsByClassName(s,this.nextClassName)[0];
			}
			
			this.updateInterval(b,is,iw,ind,p,n,s,this.showNav,this.slideSpeed);
		}.bind(this,belt,items,itemwidth,i,slider));
	}
	
	if (this.automaticSlide) {
		this.updateInterval(belt,items,itemwidth,i,prev,next,slider,this.showNav,this.slideSpeed);
	}
}

Slider.prototype.updateInterval = function(belt,items,itemwidth,i,p,n,slider,shownav,slidespeed) {
	intervals[i] = setInterval(function() {
		if (index[i]+1 == items.length) {
			$(belt).stop(true,true).animate({'left':'0px'},this.slideSpeed);
			index[i] = 0;
			
			if (shownav) {
				p.style.display = 'none';
				
				if (items.length > 0) {
					n.style.display = 'block';
				}
			}
		} else {
			$(belt).stop(true,true).animate({'left':'-=' + itemwidth + 'px'},slidespeed);
			index[i]++;
			
			if (shownav) {
				p.style.display = 'block';
				
				if (index[i]+1 == items.length) {
					n.style.display = 'none';
				} else {
					n.style.display = 'block';
				}
			}
		}
	},this.automaticSlideInterval);
}
