
	function SlideShow() {
	
		var Me=this;
		
		this.silent = false;
		this.images = new Array();
		this.slide_timeout = 2000;
		this.slideshow_container_id = 'div_slideshow';
		this.image_base_path;
		this.fade_effect_enabled = true;
		this.fade_increment = 10;
		this.fade_interval = 80;
		this.image_width;
		this.image_height;
		
		this._Cur_slide_index;
		this._Image_objects = new Array();
		
		//
		// Methods
		//
		this.start = start;
		this.stop  = stop;
		this.show_slide = show_slide;
		this.hide_slide = hide_slide;
		this.advance	= advance;
		this.preload_next_image = preload_next_image;
		this.get_next_img_index = get_next_img_index;
		this.get_next_slide_index = get_next_slide_index;
		this.load_image = load_image;
		this.image_path_by_slide_index = image_path_by_slide_index;
		
		this._Get_image_obj	   = _Get_image_obj;
		this._Handle_exception = _Handle_exception;
		this._Active_img_index = 0;
		this._Image_preloader  = new Image();
		this._Timer;
		this._Slideshow_repeated = 0;
		
		function start() {
			
			try {
				
				this.show_slide(0);
				
			}
			catch( e ) {
				this._Handle_exception(e);
			}
			
		}	
		
		function advance() {
			
			try {
				
				clearTimeout(Me._Timer);
				
				if ( Me._Cur_slide_index != undefined ) {
					Me.hide_slide(Me._Cur_slide_index);
				}
				
				Me.show_slide( Me.get_next_slide_index() );
				
			}
			catch( e ) {
				Me._Handle_exception(e);
			}
		}
		
		function hide_slide( slide_index ) {

			try {

				image_obj	  = Me._Get_image_obj(Me._Active_img_index);
				
				DomControl.Opacity_fade_down(image_obj, 0, Me.fade_increment, Me.fade_interval);
				
			}
			catch( e ) {
				Me._Handle_exception(e);
			}
			
		}
		
		function preload_next_image() {

			try {
				
				Me._Image_preloader.src = Me.image_path_by_slide_index(Me.get_next_slide_index());
				
			}
			catch( e ) {
				Me._Handle_exception(e);
			}
			
		}
		
		function show_slide( slide_index ) {
			
			try {

				Me._Active_img_index = Me.get_next_img_index();
				Me._Cur_slide_index = slide_index;
				
				image_obj	  = Me._Get_image_obj(Me._Active_img_index);
				
				Me.load_image(image_obj, slide_index);
				
				image_obj.style.visibility='visible';
				
				DomControl.Opacity_fade_up(image_obj, 100, Me.fade_increment, Me.fade_interval);
				
				Me._Timer = setTimeout(Me.advance, this.slide_timeout);
				
				if ( Me._Cur_slide_index < (Me.images.length-1) && !this._Slideshow_repeated ) {
					Me.preload_next_image();
				}
				
			}
			catch( e ) {
				Me._Handle_exception(e);
			}
			
		}
		
		function image_path_by_slide_index( slide_index ) {
			
			try {
				var image_file = Me.images[slide_index];
				
				return Me.image_base_path + '/' + image_file; 

			}
			catch( e ) {
				Me._Handle_exception(e);
			}
						
		}
		
		function load_image( image_obj, slide_index ) {

			try {
				
				image_obj.src = Me.image_path_by_slide_index(slide_index); 
					
				
			}
			catch( e ) {
				Me._Handle_exception(e);
			}

			
		}
		
		function stop() {
			
			try {
				
				clearTimeout( Me._Timer );
				Me._Cur_slide_index = null;
				
			}
			catch( e ) {
				Me._Handle_exception(e);
			}
			
		}
		
		function get_next_img_index() {
		
			try {
				if ( Me._Active_img_index == 1 ) {
					return 2;
				}
				else {
					return 1;
				}
			}
			catch( e ) {
				Me._Handle_exception(e);
			}
			
		}
		
		function get_next_slide_index() {
			
			try {

				if ( Me._Cur_slide_index >= (Me.images.length - 1) ) {
					Me._Slideshow_repeated = true;
					Me._Image_preloader = null;
					return 0;
				}
				else {
					return Me._Cur_slide_index + 1;
				}
				
			}
			catch( e ) {
				Me._Handle_exception(e);
			}
		}
		
		function _Get_image_obj(image_index) {
			
			try {
				
				var container  = DomControl.Get_object_by_id(this.slideshow_container_id);
				
				var image_obj;
				
				
				if ( typeof(Me._Image_objects[image_index]) == 'undefined' ) {
					
					image_obj = new Image();
									
					image_obj.style.position = 'absolute';
					image_obj.style.left = DomControl.Get_x_offset(container) + 'px';
					image_obj.style.top = DomControl.Get_y_offset(container) + 'px';									
					image_obj.style.display = 'block';
					
					if ( this.image_height ) {
						if ( isNaN(this.image_height) ) {
							image_obj.style.height = this.image_height;
						}
						else {
							image_obj.style.height = this.image_height + 'px';
						}
					}

					if ( this.image_width ) {
						if ( isNaN(this.image_width) ) {
							image_obj.style.width = this.image_width;
						}
						else {
							image_obj.style.width = this.image_width + 'px';
						}
					}

					
					DomControl.Change_opacity(image_obj, 0);
									
					Me._Image_objects[image_index] = image_obj;
					
					container.appendChild(image_obj);
				}
				
				return Me._Image_objects[image_index];
				
			}
			catch( e ) {
				Me._Handle_exception(e);
			}
			
			
		}
		
		function _Handle_exception( e ) {
		
			try {
				if ( !this.silent ) {
					alert( e.message );
				}
				
				Me.stop();
			}
			catch( e ) {
			}
		
		}
		
	}
	
	