function SlideShow(Settings){
	var changeImage = function(SwitchTo){
		
		/* Set Image Source */
		//ImageContainers[ContainerIndex].css('background-image','url(' + Settings.ImageData[ImageIndex].URL + ')');
		ImageContainers[ContainerIndex].attr('src',Settings.ImageData[SwitchTo].URL);
		
		/* Make Image Link */
		if(Settings.ImageData[SwitchTo].LINK){
			if(Settings.ImageData[SwitchTo].LINK.length > 0){
				ImageContainers[ContainerIndex].css('cursor','pointer');
				LinkLocation = Settings.ImageData[SwitchTo].LINK;
				ImageContainers[ContainerIndex].click(function(){
					window.location = LinkLocation;
				});
			}
		}
		
		/* Hover Text Over Image */
		OverlayText.hide();
		if(Settings.ImageData[SwitchTo].TEXT){
			if(Settings.ImageData[SwitchTo].TEXT.length > 0){
				OverlayText.html(Settings.ImageData[SwitchTo].TEXT);
				randTop = Math.max(Math.round((Math.random() * Container.height())) - 30, 0);
				randLeft = Math.max(Math.round((Math.random() * Container.width()) / 2), 0);
				OverlayText.css({'top':randTop + 'px','left':randLeft + 'px'});
				OverlayText.fadeIn(Settings.TextTransitionTime);
			}
		}
		
		
		/* Transition Function */
		switch(Settings.Mode){
			case 'FadeInOut':
				FadeInOutTransition();
				break;
			case 'RandomMove':
				RandomMoveTransition();
				break;
			case 'ZoomRandom':
				ZoomRandomTransition();
				break;
			case 'ZoomOut':
				ZoomOutTransition();
				break;
		}
		
		ImageIndex++;
		ContainerIndex++;
		if(ImageIndex >= Settings.ImageData.length){
			ImageIndex = 0;
		}
		if(ContainerIndex > 1){
			ContainerIndex = 0;
		}
		
		if(Settings.ShowControls){
			$('.SlideControl').removeClass('ActiveImage');
			$('#SlideControl_' + SwitchTo).addClass('ActiveImage');
		}
		
		ChangeTimeout = setTimeout(function(){
			changeImage(ImageIndex);
		},Settings.SwitchImageTime);
	}
	var init = function(){
		
		Container.css({'background-image':'url(/modules/admin/images/loading.gif)','background-repeat':'no-repeat','background-position':'45% 45%'});
		
		OverlayText.css({'z-index':'2','position':'absolute'});
		if(Settings.OverlayTextStyle){
			OverlayText.css(Settings.OverlayTextStyle);
		}
		Container.append(OverlayText);
		OverlayText.hide();
		
		if(!Settings.ShowControls){
			Settings.ShowControls = false;
		}
		
		if(Settings.ImageURL){
			//DataReturned = false;
			LoadCount = 0;
			$.getJSON(Settings.ImageURL,Settings.ImageURLQueryString,function(data){
				Settings.ImageData = data;
				/* Preload Images */
				NewImages = new Array();
				for(Slide in Settings.ImageData){
					NewImages[Slide] = new Image();
					if(Slide == 0){
						NewImages[Slide].onload = function(){
							Container.css('background-image','');
							Start();
						}
					}
					NewImages[Slide].src = Settings.ImageData[Slide].URL;
					if(Settings.ShowControls){
						var DisplayNum = (Slide * 1) + 1;
						var NextControl = $('<span class="SlideControl" id="SlideControl_' + Slide + '">' + DisplayNum + '</span>');
						$(Settings.Controls).append(NextControl);
						NextControl.click(function(){
							clearTimeout(ChangeTimeout);
							var Index = $(this).attr('id').split('_')[1];
							changeImage(Index);
							ImageIndex = (Index * 1) + 1;
							if(ImageIndex >= Settings.ImageData.length){
								ImageIndex = 0;
							}
						});
					}
				}
				if(Settings.ShowControls){
					var PauseControl = $('<span class="SlideControl" id="SlideControl_Pause">Pause</span>');
					var ResumeControl = $('<span class="SlideControl" id="SlideControl_Resume">Resume</span>');
					$(Settings.Controls).append(PauseControl);
					$(Settings.Controls).append(ResumeControl);
					PauseControl.click(function(){
						clearTimeout(ChangeTimeout);
						$(this).text('Paused');
					});
					ResumeControl.click(function(){
						$('#SlideControl_Pause').text('Pause');
						clearTimeout(ChangeTimeout);
						changeImage(ImageIndex);
					});
				}
			});
		}else{
			Start();
		}
		
	}
	
	var FadeInOutTransition = function(){
		if(ContainerIndex == 0){
			ImageContainers[1].fadeOut(Settings.TransitionTime);
			ImageContainers[0].fadeIn(Settings.TransitionTime);
		}
		if(ContainerIndex == 1){
			ImageContainers[0].fadeOut(Settings.TransitionTime);
			ImageContainers[1].fadeIn(Settings.TransitionTime);
		}
	}
	
	var RandomMoveTransition = function(){
		
		if(ContainerIndex == 0){
			
			randTop = Math.round((Math.random() * (ImageContainers[0].height() - Container.height()))) * -1;
			randLeft = Math.round((Math.random() * (ImageContainers[0].width() - Container.width()))) * -1;
			
			ImageContainers[1].fadeOut(Settings.TransitionTime/2);
			//ImageContainers[0].fadeIn(Settings.TransitionTime);
			ImageContainers[0].show();
			ImageContainers[0].css('opacity','0');
			ImageContainers[0].animate({'top':randTop + 'px','left':randLeft + 'px','opacity':'1'},Settings.TransitionTime);
		}
		if(ContainerIndex == 1){
			
			randTop = Math.round((Math.random() * (ImageContainers[1].height() - Container.height()))) * -1;
			randLeft = Math.round((Math.random() * (ImageContainers[1].width() - Container.width()))) * -1;
			
			ImageContainers[0].fadeOut(Settings.TransitionTime/2);
			//ImageContainers[1].fadeIn(Settings.TransitionTime);
			ImageContainers[1].show();
			ImageContainers[1].css('opacity','0');
			ImageContainers[1].animate({'top':randTop + 'px','left':randLeft + 'px','opacity':'1'},Settings.TransitionTime);
		}
	}
	
	var ZoomRandomTransition = function(){
		if(ContainerIndex == 0){
			NextContainerIndex = 1;
		}
		if(ContainerIndex == 1){
			NextContainerIndex = 0;
		}
		
			ImageContainers[NextContainerIndex].fadeOut(Settings.TransitionTime/2);
			ImageContainers[ContainerIndex].css({'height':'auto','width':'auto'});
			
			var NewTop = Math.round(Math.random() * -ImageContainers[ContainerIndex].height() * 0.5);
			var NewLeft = Math.round(Math.random() * -ImageContainers[ContainerIndex].width() * 0.5);
			
			ImageContainers[ContainerIndex].show();
			ImageContainers[ContainerIndex].css({'opacity':'0','top':'0px','left':'0px'});
			
			var OrigHeight = ImageContainers[ContainerIndex].height();
			var OrigWidth = ImageContainers[ContainerIndex].width();
			var NewHeight = Math.round(Math.max(ImageContainers[ContainerIndex].height() * 1.5,Container.height()));
			var NewWidth = Math.round(Math.max(ImageContainers[ContainerIndex].width() * 1.5,Container.width()));
			
			//ImageContainers[0].css({'height':OrigHeight + 'px','width':OrigWidth + 'px'});
			ImageContainers[ContainerIndex].animate({'opacity':'1'},800);
			
			//ImageContainers[ContainerIndex].animate({'height':NewHeight + 'px','width':NewWidth + 'px'},Settings.TransitionTime / 2);
			//ImageContainers[ContainerIndex].animate({'top':NewTop + 'px','left':NewLeft + 'px'},Settings.TransitionTime / 4);
			
			/*var divisions = 500;
			
			for(var i = 1;i<=divisions;i++){
				var NextHeight = OrigHeight + (((NewHeight - OrigHeight) * i) / divisions);
				var NextWidth = OrigWidth + (((NewHeight - OrigHeight) * i) / divisions);
				var NextTop = (NewTop * i) / divisions;
				var NextLeft = (NewLeft * i) / divisions;
				ImageContainers[ContainerIndex].animate({'height':NextHeight + 'px','width':NextWidth + 'px'},10);
				ImageContainers[ContainerIndex].animate({'top':NextTop + 'px','left':NextLeft + 'px'},10);
			}*/
			
			//working but shaky
			//alert(NewHeight + ' ' + NewWidth + ' ' + NewTop + ' ' + NewLeft);
			//ImageContainers[ContainerIndex].animate({'height':NewHeight + 'px','width':NewWidth + 'px','top':NewTop + 'px','left':NewLeft + 'px'},Settings.TransitionTime);
			
			var Transition = Math.ceil(Math.random() * 3);
			
			
			switch(Transition){
				case 1:
					// Zoom In
					ImageContainers[ContainerIndex].animate({'height':NewHeight + 'px','width':NewWidth + 'px'},{'duration':Settings.TransitionTime,'queue':false});
					//ImageContainers[ContainerIndex].animate({'top':NewTop + 'px','left':NewLeft + 'px'},{'duration':Settings.TransitionTime,'queue':false});
					break;
				case 2:
					// Zoom Out
					ImageContainers[ContainerIndex].css({'height':NewHeight + 'px','width':NewWidth + 'px'});
					//ImageContainers[ContainerIndex].css({'top':NewTop + 'px','left':NewLeft + 'px'});
					ImageContainers[ContainerIndex].animate({'height':OrigHeight + 'px','width':OrigWidth + 'px'},{'duration':Settings.TransitionTime,'queue':false});
					//ImageContainers[ContainerIndex].animate({'top':'0px','left':'0px'},{'duration':Settings.TransitionTime,'queue':false});
					break;
				case 3:
					// Slide
					ImageContainers[ContainerIndex].css({'height':NewHeight + 'px','width':NewWidth + 'px'});
					ImageContainers[ContainerIndex].animate({'top':NewTop + 'px','left':NewLeft + 'px'},{'duration':Settings.TransitionTime,'queue':false});
					break;
			}
	}
	
	var ZoomOutTransition = function(){
		if(ContainerIndex == 0){
			NextContainerIndex = 1;
		}
		if(ContainerIndex == 1){
			NextContainerIndex = 0;
		}
		
			ImageContainers[NextContainerIndex].fadeOut(Settings.TransitionTime/2);
			ImageContainers[ContainerIndex].css({'height':'auto','width':'auto'});
			
			//var NewTop = Math.round(Math.random() * -ImageContainers[ContainerIndex].height() * 0.5);
			//var NewLeft = Math.round(Math.random() * -ImageContainers[ContainerIndex].width() * 0.5);
			
			var NewTop = 0;
			var NewLeft = 0;
			
			ImageContainers[ContainerIndex].show();
			ImageContainers[ContainerIndex].css({'opacity':'0','top':'0px','left':'0px'});
			
			var OrigHeight = ImageContainers[ContainerIndex].height();
			var OrigWidth = ImageContainers[ContainerIndex].width();
			var NewHeight = Math.round(Math.max(ImageContainers[ContainerIndex].height() * 1.5,Container.height()));
			var NewWidth = Math.round(Math.max(ImageContainers[ContainerIndex].width() * 1.5,Container.width()));
			
			//ImageContainers[0].css({'height':OrigHeight + 'px','width':OrigWidth + 'px'});
			ImageContainers[ContainerIndex].animate({'opacity':'1'},800);
			
			//ImageContainers[ContainerIndex].animate({'height':NewHeight + 'px','width':NewWidth + 'px'},Settings.TransitionTime / 2);
			//ImageContainers[ContainerIndex].animate({'top':NewTop + 'px','left':NewLeft + 'px'},Settings.TransitionTime / 4);
			
			/*var divisions = 500;
			
			for(var i = 1;i<=divisions;i++){
				var NextHeight = OrigHeight + (((NewHeight - OrigHeight) * i) / divisions);
				var NextWidth = OrigWidth + (((NewHeight - OrigHeight) * i) / divisions);
				var NextTop = (NewTop * i) / divisions;
				var NextLeft = (NewLeft * i) / divisions;
				ImageContainers[ContainerIndex].animate({'height':NextHeight + 'px','width':NextWidth + 'px'},10);
				ImageContainers[ContainerIndex].animate({'top':NextTop + 'px','left':NextLeft + 'px'},10);
			}*/
			
			//working but shaky
			//alert(NewHeight + ' ' + NewWidth + ' ' + NewTop + ' ' + NewLeft);
			//ImageContainers[ContainerIndex].animate({'height':NewHeight + 'px','width':NewWidth + 'px','top':NewTop + 'px','left':NewLeft + 'px'},Settings.TransitionTime);
			
			//var Transition = Math.ceil(Math.random() * 3);
			var Transition = 2;
			
			
			switch(Transition){
				case 1:
					// Zoom In
					ImageContainers[ContainerIndex].animate({'height':NewHeight + 'px','width':NewWidth + 'px'},{'duration':Settings.TransitionTime,'queue':false});
					ImageContainers[ContainerIndex].animate({'top':NewTop + 'px','left':NewLeft + 'px'},{'duration':Settings.TransitionTime,'queue':false});
					break;
				case 2:
					// Zoom Out
					ImageContainers[ContainerIndex].css({'height':NewHeight + 'px','width':NewWidth + 'px'});
					ImageContainers[ContainerIndex].css({'top':NewTop + 'px','left':NewLeft + 'px'});
					/*NextHeight = NewHeight;
					NextWidth = NewWidth;
					ZoomInterval = setInterval(function(){
						NextHeight = NextHeight -= 1;
						NextWidth = NextWidth -= 1;
						ImageContainers[ContainerIndex].css({'height':NextHeight + 'px','width':NextWidth + 'px'});
						if(NextHeight == OrigHeight){
							clearInterval(ZoomInterval);
						}
					},100);*/
					ImageContainers[ContainerIndex].animate({'height':OrigHeight + 'px'},{'duration':Settings.TransitionTime,'queue':false});
					ImageContainers[ContainerIndex].animate({'width':OrigWidth + 'px'},{'duration':Settings.TransitionTime,'queue':false});
					//ImageContainers[ContainerIndex].animate({'top':'0px','left':'0px'},{'duration':Settings.TransitionTime,'queue':false});
					break;
				case 3:
					// Slide
					ImageContainers[ContainerIndex].css({'height':NewHeight + 'px','width':NewWidth + 'px'});
					ImageContainers[ContainerIndex].animate({'top':NewTop + 'px','left':NewLeft + 'px'},{'duration':Settings.TransitionTime,'queue':false});
					break;
			}
	}
	
	var Start = function(){
		
		//Possible Modes FadeInOut, RandomMove, ZoomIn
		
		Container.css({'position':'relative','overflow':'hidden'});
		//ImageContainers[0] = $('<div></div>');
		//ImageContainers[1] = $('<div></div>');
		
		ImageContainers[0] = $('<img />');
		ImageContainers[1] = $('<img />');
		
		for(var i in ImageContainers){
			ImageContainers[i].css({/*'height':Container.css('height'),
									'width':Container.css('width'),*/
									'position':'absolute',
									'top':'0px',
									'left':'0px',
									'background-repeat':'no-repeat'});
			Container.append(ImageContainers[i]);
		}
		ImageContainers[1].hide();
		
		changeImage(ImageIndex);
		
		//ImageContainers[ContainerIndex].css('background-image','url(' + Settings.ImageData[ImageIndex].URL + ')');
		//ImageIndex++;
		//ContainerIndex++;
		//setTimeout(changeImage,Settings.SwitchImageTime);
	}
	
	var Container = $(Settings.Container);
	var ImageContainers = new Array();
	
	var ImageIndex = 0;
	var ContainerIndex = 0;
	
	var OverlayText = $('<div></div>');
	
	init();
}
