function ImageSlideshow(obj, podID, options){
	var nextIndex = 0;
	var timer = 0;
	var currentSlide = -1;
	var opacityChange;
	var durationSpeed = 600;
	var jsonObj = Json.evaluate(obj);
	var slides = jsonObj.slides;
	var currentImageLoaded = 1;
	options["delay"] = options["delay"] ? options["delay"] * 1000 : 6000;
	
	function init(){
		// if show buttons is selected and there is more than one slide
		if(options["buttons"] == 1 && slides.length > 1){
			var buttons = document.createElement("div");
			buttons.className = "buttons";
			

			for(var i = 1; i <= slides.length; i++){
				var a = document.createElement("a");
				a.innerHTML = i;
				a.rel = i - 1;
				a.href = "javascript:void1();";
				a.id = "slideshow_" + podID + "_" + i;

				a.onclick = function(){
					clearTimeout(timer);
					//function 
					nextIndex = this.rel;
					next_slide();
				};

				buttons.appendChild(a);
			}
			$("isWrapper" + podID).appendChild(buttons);
		}
		
		if(slides.length > 1){
			preload_images();
		}
		next_slide();
	}
	
	function next_slide(){
		show_slide(nextIndex);
	}
	
	function show_slide(index){
		index = parseInt(index);
		//alert(index);
		if(currentSlide > -1){
			clearTimeout(timer);
			
			if($(slides[currentSlide].divID).innerHTML == ""){
				load_content_into_slidearea(currentSlide);
			}
			
			//alert(currentSlide);
			opacityChange = new Fx.Style(slides[currentSlide].divID, 'opacity', {duration:durationSpeed});
			opacityChange.start(0).chain(function(){
				$(slides[currentSlide].divID).style.display = "none";
				if(options["buttons"] == 1){
					$("slideshow_" + podID + "_" + (currentSlide + 1)).className = "";
				}
				opacityChange = new Fx.Style(slides[index].divID, 'opacity', {duration:durationSpeed});
				opacityChange.set(0);
				$(slides[index].divID).style.display = "block";
				opacityChange.start(1).chain(function(){
					if(slides.length > 1){
						timer = setTimeout(next_slide, options["delay"]);
						if(options["buttons"] == 1){
							$("slideshow_" + podID + "_" + (index + 1)).className = "current";
						
						}
						
						nextIndex = (index + 1 < slides.length ? index + 1 : 0);
						//alert("nextIndex1=" + nextIndex);
						currentSlide = index;
					}
				});
			});
		}else{	// if the first time, just fade in the new slides
			opacityChange = new Fx.Style(slides[0].divID, 'opacity', {duration:durationSpeed});
			opacityChange.set(0);
			$(slides[0].divID).style.display = "block";
			opacityChange.start(1).chain(function(){
				if(slides.length > 1){
					timer = setTimeout(next_slide, options["delay"]);
					if(options["buttons"] == 1){
						//alert("1 should be current");
						$("slideshow_" + podID + "_1").className = "current";
						
					}
					
					nextIndex = (index + 1 < slides.length ? index + 1 : 0);
					//alert("nextIndex2=" + nextIndex);
					currentSlide = index;
				}
				
			});
		}
	}
	
	function load_content_into_slidearea(slideIndex){
		//$(slides[slideIndex].divID).style.display = "none";
		base_ajax(slides[slideIndex].divID, "/includes/modules/images/controllers/fn-slideshow.php", "mode=displaySlide&imageID=" + slides[slideIndex].id,"");
	}
	
	function preload_images(){
		var img = new Image();
		
		if(currentImageLoaded < slides.length){
			img.onload = function(){
				//alert("Image " + currentImageLoaded + " loaded");
				// once the image loades, load the content into the slide area
				load_content_into_slidearea(currentImageLoaded);
				// load the next image
				currentImageLoaded++;
				preload_images();
			}
			
			img.src = slides[currentImageLoaded].image;
		}
	}
	
	function randOrd(){
	return (Math.round(Math.random())-0.5); }
	
	// run the constructor
	init();
}

function void1(){}
