	// Simple Javascript Slideshow
	// 2007 by Jim Keller, Context Technology Solutions (www.contextsolutions.net)
	// Under the terms of the MIT License
	//
	//v2.0.4


	function SlideShow() {

		var Me=this;

		this.silent = false;
		this.images = new Array();
		this.slide_timeout = 2000;
		this.slideshow_container_id = 'slideshow';
		this.image_base_link;
		this.fade_effect_enabled = true;
		this.fade_increment = 10; //milliseconds
		this.fade_interval = 80; //milliseconds
		this.fade_first_slide = true;
		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_image_cycle = get_next_image_cycle;
		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_image_cycle = 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_image_cycle);

				if ( Me.fade_effect_enabled ) {
					DomControl.Opacity_fade_down(image_obj, 0, Me.fade_increment, Me.fade_interval);
				}
				else {
					DomControl.Disable_display(image_obj);
				}

			}
			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, options ) {

			try {

				if ( typeof(options == 'undefined') ) {
					options = new Array();
				}

				Me._Active_image_cycle = Me.get_next_image_cycle();
				Me._Cur_slide_index = slide_index;

				if ( slide_index == 0 && Me._Slideshow_repeated == false && Me.fade_first_slide == false ) {
					options['fade_enabled'] = false;
				}

				image_obj	  = Me._Get_image_obj(Me._Active_image_cycle, options);

				Me.load_image(image_obj, slide_index);

				image_obj.style.visibility='visible';


				if ( Me.fade_effect_enabled && (slide_index > 0 || Me._Slideshow_repeated == true || Me.fade_first_slide == true) ) {
					DomControl.Opacity_fade_up(image_obj, 100, Me.fade_increment, Me.fade_interval);
				}
				else {
					DomControl.Enable_display(image_obj);
				}


				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];

				if ( Me.image_base_link ) {
					return Me.image_base_link + '/' + image_file;
				}
				else {
					return 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_image_cycle() {

			try {
				if ( Me._Active_image_cycle == 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_cycle, options) {

			try {

				var container  = DomControl.Get_object_by_id(this.slideshow_container_id);

				var image_obj;


				if ( typeof(Me._Image_objects[image_cycle]) == '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';
						}
					}

					if ( Me.fade_effect_enabled && (typeof(options['fade_enabled']) == 'undefined' || options['fade_enabled'] == true) ) {
						DomControl.Change_opacity(image_obj, 0);
					}

					Me._Image_objects[image_cycle] = image_obj;

					container.appendChild(image_obj);
				}

				return Me._Image_objects[image_cycle];

			}
			catch( e ) {
				Me._Handle_exception(e);
			}


		}

		function _Handle_exception( e ) {

			try {
				if ( !this.silent ) {
					alert( e.message );
				}

				Me.stop();
			}
			catch( e ) {
			}

		}

	}


