var slide = (function () {

	var gallery;
	var s = 3;
	var imgWidth;
	var imgHeight;
	var numImages;
	var interval;
	var images = [];
	var running = false;
	var delay = 40;
	var counter;
	var galleryLeft;
	var imgLeft;
	var contentWidth = 0;
	var step = 1;
	var maxCounter;

	//initialisatie
	var init = function(config) {
                
		//configuratie
		if('gallery' in config) gallery = config.gallery;
		if('images' in config) images = config.images;
		if('imgWidth' in config) imgWidth = config.imgWidth;
		if('imgHeight' in config) imgHeight = config.imgHeight;
		if('step' in config) step = config.step;
		
		numImages = images.length;
		galleryLeft = gallery.offsetLeft;
		maxCounter = numImages-step;
		       
        //breedte content div instellen (schuivende div waarin beelden naast elkaar staan)
        contentWidth = (numImages * imgWidth);
        
        //breedte content instellen + 50 voor de zekerheid dat alle beelden horizontaal komen
		gallery.getElementsByTagName('div')[0].style.width = contentWidth + 50 + 'px';
		
        //buttons instellen voor bedienen van fotogalerie
        if('controls' in config) {
        	
            var numControls = Math.round(((contentWidth - gallery.offsetWidth) / imgWidth)) + 1;
            
            //aantal benodigde knoppen is meer dan 1
            if(numControls > 1) {
                ImageGallery.setControls({
                    gallery: gallery,
                    numControls: numControls
                });
            }
                
        }
        
        //door images loopen en benodigde instellingen doen voor dit effect
		for(i=0;i<numImages;i++) {

			//float left toepassen
			images[i].style.cssFloat = 'left';
			images[i].style.styleFloat = 'left';

		    //breedte beeld opslaan
		    images[i].imgWidth = images[i].imgWidth;
		}
		
		counter = 0;
		
		return {
			gallery: gallery,
			images: images,
			numImages: numImages,
			imgWidth: imgWidth,
			imgHeight: imgHeight,
			delay: delay,
			init: init,
			prev: prev,
			next: next,
			toImage: toImage,
			isRunning: isRunning,
			getCounter: getCounter,
			setCounter: setCounter,
			setSpeed: setSpeed
		};
	};

	//vorige
	var prev = function() {
            
	    imgLeft = images[counter].offsetLeft;   
	    if(sl(gallery) > imgLeft) {
    
			var v = Math.round((sl(gallery)-imgLeft)/s);
			v = (v<1) ? 1 : v;
            v = (v>150) ? 150 : v;
			v = sl(gallery)-v;
			sl(gallery, v);
			running = true;
		}
		//einde enkele cyclus
		else {
			sl(gallery, imgLeft);
			if(counter < 0) counter = 0;
			running = false;
			ImageGallery.stop();
		}
	};

	//volgende
	var next = function() {
        
	    //scrollLeft begrenzen op maxCounter*imgWidth
	    if(counter>maxCounter) imgLeft = maxCounter*imgWidth;
	    else imgLeft = counter*imgWidth;
	    
	    if(sl(gallery) < imgLeft) {

			var v = Math.round((imgLeft-sl(gallery))/s);
			v = (v<1) ? 1 : v;
            v = (v>150) ? 150 : v;
			v = sl(gallery)+v;
			sl(gallery, v);
			running = true;
		}
		//einde enkele cyclus
		else {
			sl(gallery, imgLeft);
			if(counter > numImages) counter = numImages;
			running = false;
			ImageGallery.stop();
		}
	};
	
	//naar beeld gaan
	var toImage = function(index) {
            
		if(index > counter) {
			counter = index;
			next();
		}
		else if(counter < index) {
			counter = index;
			prev();
		}
	};
	
	//scrollLeft getten of setten
	var sl = function (el, v) {
		if(v==undefined) return el.scrollLeft;
		else el.scrollLeft = v;
	};
	
	//huidige stijl element uitlezen
	var getStyle = function(el, prop) {
		if(document.all) return parseInt(el.currentStyle[prop]);
		else return parseInt(window.getComputedStyle(el,null)[prop]);
	};

	//terugspoelen
	var rewind = function () {

		if(sl(el) > 0) {

			var v = Math.round(sl(el)/s);
			v = (v<1) ? 1 : v;
			v = sl(el)-v;
			sl(el, v);
		}
		else {
			sl(el, 0);
			clearInterval(rewindInterval);
			counter = 1;
		}
	};
		
	var endAction = function() {
		rewindInterval = setInterval(rewind, 100);
	};

	var isRunning = function() {
		return running;
	};

	var getCounter = function() {
		return counter;
	};
	
	var setCounter = function(c) {
		counter = c;
	};
        
	var setSpeed = function(speed) {
		s = speed;
	};

	return {
		init: init
	}
	
});	
