var stageRotator = {
	myXmlPath: '/bin/w/f/home.xml',
	myFadeSpeed: 'slow',
	myRotationDelayMs : 10000,
	
	initialize: function() {
		this.myJqStage = $('#pageHomeLeftStage');
		this.myJqTagline = $('#pageHomeLeftStageInnerRotator');
		this.myJqTaglineSpan = false;
		this.mySlides = [ ];
		this.mySlideOffset = -1;
		
		if(this.myJqStage.length && this.myJqTagline.length)
			$.get(
				this.myXmlPath,
				null,
				function(data, textStatus) {
					if(textStatus == 'success' && data && data.documentElement) {
						var imgElements = data.documentElement.getElementsByTagName('img');
						var getChildNodeAsText = function(domNode, childTagName, defaultValue) {
							var childElements = domNode.getElementsByTagName(childTagName);
							return childElements.length && childElements[0].firstChild && childElements[0].firstChild.nodeValue
								   ? childElements[0].firstChild.nodeValue : defaultValue;
						};
						
						for(var i = 0; i < imgElements.length; ++i) {
							var imgElement = imgElements[i];
							if(imgElement.attributes) {
								var attributes = imgElement.attributes;
								if(attributes.getNamedItem('src') && attributes.getNamedItem('src').value) {
									var jqImg = $(document.createElement('img'))
										.addClass('Rotator')
										.attr('src', attributes.getNamedItem('src').value)
										.attr('alt', '[' + (
											attributes.getNamedItem('alt') && attributes.getNamedItem('alt').value
											? attributes.getNamedItem('alt').value
											: 'stage image'
										) + ']')
										.hide();
									
									if(attributes.getNamedItem('width') && attributes.getNamedItem('width').value)
										jqImg.attr('width', attributes.getNamedItem('width').value);
									
									if(attributes.getNamedItem('height') && attributes.getNamedItem('height').value)
										jqImg.attr('height', attributes.getNamedItem('height').value);
									
									stageRotator.myJqStage.prepend(jqImg);
									stageRotator.mySlides.push({
										image: jqImg,
										markup: getChildNodeAsText(imgElement, 'line1', '&nbsp;') + '<br />' + getChildNodeAsText(imgElement, 'line2', '&nbsp;')
									});
								}
							}
						}
						if(stageRotator.mySlides.length > 1) {
							stageRotator.mySlideOffset = Math.floor(Math.random() * stageRotator.mySlides.length);
							stageRotator.mySlides[stageRotator.mySlideOffset].image.show();
							
							stageRotator.myJqTaglineSpan = $(document.createElement('span')).append(stageRotator.mySlides[stageRotator.mySlideOffset].markup);
							stageRotator.myJqTagline.html(stageRotator.myJqTaglineSpan);
							
							setTimeout(function() { stageRotator.rotate(); }, stageRotator.myRotationDelayMs);
						}
					}
				},
				'xml'
			);
	},
	
	rotate: function() {
		var newSlideOffset = (this.mySlideOffset + 1) % this.mySlides.length;
		var transitionsCount = this.mySlides[newSlideOffset].image.length + this.myJqTaglineSpan.length;
		var onFadeOutComplete = function() {
			if(--transitionsCount == 0) {
				transitionsCount = stageRotator.mySlides[newSlideOffset].image.length + stageRotator.myJqTaglineSpan.length;
				var onFadeInComplete = function() {
					if(--transitionsCount == 0) {
						stageRotator.mySlideOffset = newSlideOffset;
						setTimeout(function() { stageRotator.rotate(); }, stageRotator.myRotationDelayMs);
					}
				};
				
				stageRotator.mySlides[newSlideOffset].image.fadeIn(stageRotator.myFadeSpeed, onFadeInComplete);
				stageRotator.myJqTaglineSpan
					.html(stageRotator.mySlides[newSlideOffset].markup)
					.fadeIn(stageRotator.myFadeSpeed, onFadeInComplete);
			}
		};
		
		this.mySlides[this.mySlideOffset].image.fadeOut(this.myFadeSpeed, onFadeOutComplete);
		this.myJqTaglineSpan.fadeOut(this.myFadeSpeed, onFadeOutComplete);
	}
};

$(function() {
	var jqSpotlights = $('#pageHomeLeft div.Spotlight_Inside');
	var tallestSpotlight = 0;
	for(var i = 0; i < jqSpotlights.length; ++i)
		tallestSpotlight = Math.max(tallestSpotlight, jqSpotlights.eq(i).height());
	jqSpotlights.css('height', '' + tallestSpotlight + 'px');
	
	stageRotator.initialize();
});
