var slideshow = {
	xmlPath: '/bin/m/k/slideshow.xml',
	
	animationSpeed: 'slow',
	animationEasing: 'swing',
	fadeSpeed: 'fast',
	
	containerId: 'homeSlideshow',
	slideWidth: 650,
	slideHeight: 271,
	panWidth: 14,
	panHeight: 25,
	panLeftPath: '/bin/o/g/pan-left.gif',
	panRightPath: '/bin/o/s/pan-right.gif',
	
	left: function() {
		if(slideshow.ready) {
			slideshow.ready = false;
			if(slideshow.currentOffset == 0)
				slideshow.currentOffset = slideshow.slideCount;
			
			if($.support.opacity) {
				var spanElementsFadedOut = 0, spanElementsFadedIn = 0;
				slideshow.allSpanElements.fadeOut(slideshow.fadeSpeed, function() {
					if(++spanElementsFadedOut == slideshow.allSpanElements.length)
						slideshow.slidingContainer
							.css('left', -(slideshow.currentOffset * slideshow.slideWidth))
							.animate(
								{ left: -((slideshow.currentOffset - 1) * slideshow.slideWidth) },
								slideshow.animationSpeed,
								slideshow.animationEasing,
								function() {
									slideshow.allSpanElements.fadeIn(slideshow.fadeSpeed, function() {
										if(++spanElementsFadedIn == slideshow.allSpanElements.length) {
											--slideshow.currentOffset;
											slideshow.ready = true;
										}
									});
								}
							);
				});
			}
			else {
				slideshow.allSpanElements.hide();
				slideshow.slidingContainer
					.css('left', -(slideshow.currentOffset * slideshow.slideWidth))
					.animate(
						{ left: -((slideshow.currentOffset - 1) * slideshow.slideWidth) },
						slideshow.animationSpeed,
						slideshow.animationEasing,
						function() {
							slideshow.allSpanElements.show();
							--slideshow.currentOffset;
							slideshow.ready = true;
						}
					);
			}
		}
	},
	
	right: function() {
		if(slideshow.ready) {
			slideshow.ready = false;
			
			if($.support.opacity) {
				var spanElementsFadedOut = 0, spanElementsFadedIn = 0;
				slideshow.allSpanElements.fadeOut(slideshow.fadeSpeed, function() {
					if(++spanElementsFadedOut == slideshow.allSpanElements.length)
						slideshow.slidingContainer
							.css('left', -(slideshow.currentOffset * slideshow.slideWidth))
							.animate(
								{ left: -((slideshow.currentOffset + 1) * slideshow.slideWidth) },
								slideshow.animationSpeed,
								slideshow.animationEasing,
								function() {
									slideshow.allSpanElements.fadeIn(slideshow.fadeSpeed, function() {
										if(++spanElementsFadedIn == slideshow.allSpanElements.length) {
											++slideshow.currentOffset;
											if(slideshow.currentOffset >= slideshow.slideCount)
												slideshow.currentOffset = 0;
											
											slideshow.ready = true;
										}
									});
								}
							);
				});
			}
			else {
				slideshow.allSpanElements.hide();
				slideshow.slidingContainer
					.css('left', -(slideshow.currentOffset * slideshow.slideWidth))
					.animate(
						{ left: -((slideshow.currentOffset + 1) * slideshow.slideWidth) },
						slideshow.animationSpeed,
						slideshow.animationEasing,
						function() {
							slideshow.allSpanElements.show();
							++slideshow.currentOffset;
							if(slideshow.currentOffset >= slideshow.slideCount)
								slideshow.currentOffset = 0;
							
							slideshow.ready = true;
						}
					);
			}
		}
	},
	
	initialize: function() {
		$(function() {
			var container = $('#' + slideshow.containerId);
			if(container.length)
				$.get(
					slideshow.xmlPath, null,
					function(data, textStatus) {
						var slides = [ ];
						var slideElements = data.getElementsByTagName('slide');
						
						var getChildNodeAsText = function(domNode, childTagName) {
							var childElements = domNode.getElementsByTagName(childTagName);
							return childElements.length && childElements[0].firstChild && childElements[0].firstChild.nodeValue
								   ? childElements[0].firstChild.nodeValue : false;
						};
						
						for(var i = 0; i < slideElements.length; ++i) {
							var slide = {
								imageSrc: getChildNodeAsText(slideElements[i], 'path'),
								imageAlt: getChildNodeAsText(slideElements[i], 'alternate'),
								bannerH3: getChildNodeAsText(slideElements[i], 'banner'),
								bannerP1: getChildNodeAsText(slideElements[i], 'line1'),
								bannerP2: getChildNodeAsText(slideElements[i], 'line2')
							};
							
							if(slide.imageSrc)
								slides.push(slide);
						}
						
						if(slides.length > 1) {
							slideshow.currentOffset = 0;
							slideshow.slideCount = slides.length;
							slideshow.ready = false;
							
							container.empty().append(
								'<h2>Slideshow</h2>' +
								'<a id="' + slideshow.containerId + 'Left" href="javascript:slideshow.left()">' +
									'<img src="' + slideshow.panLeftPath + '" width="' + slideshow.panWidth + '" height="' + slideshow.panHeight + '" alt="&lt;" title="Go to Previous Slide" />' +
								'</a>' +
								'<a id="' + slideshow.containerId + 'Right" href="javascript:slideshow.right()">' +
									'<img src="' + slideshow.panRightPath + '" width="' + slideshow.panWidth + '" height="' + slideshow.panHeight + '" alt="&gt;" title="Go to Next Slide" />' +
								'</a>' +
								'<div id="' + slideshow.containerId + 'Slides"></div>'
							);
							
							container = container.children('div');
							container.css('width', slideshow.slideWidth * (slides.length + 1));
							
							var addSlide = function(slide) {
								container.append(
									'<div class="Slide">' +
										'<div class="Banner">' +
											'<h3>&nbsp;<span>' + (slide.bannerH3 ? slide.bannerH3 : 'Slide') + '</span></h3>' +
											'<p>' +
												'&nbsp;' + (slide.bannerP1 ? ('<span>' + slide.bannerP1 + '</span>') : '') + '<br />' +
												'&nbsp;' + (slide.bannerP2 ? ('<span>' + slide.bannerP2 + '</span>') : '') +
											'</p>' +
										'</div>' +
										'<img src="' + slide.imageSrc + '" alt="[' + (slide.imageAlt ? slide.imageAlt : 'slide photograph') + ']" width="' + slideshow.slideWidth + '" height="' + slideshow.slideHeight + '" />' +
									'</div>'
								);
							}
							
							var beginningOffset = Math.floor(Math.random() * slides.length);
							for(var i = beginningOffset; i < slides.length; ++i) addSlide(slides[i]);
							for(var i = 0; i < beginningOffset; ++i) addSlide(slides[i]);
							addSlide(slides[beginningOffset]);
							
							slideshow.allSpanElements = $('#homeSlideshowSlides div.Banner span');
							slideshow.slidingContainer = $('#' + slideshow.containerId + 'Slides');
							slideshow.ready = true;
						}
					},
					'xml'
				);
		});
	}
};

slideshow.initialize();
