/*
 * $LastChangedRevision: 47 $
 * $LastChangedDate: 2010-05-10 23:47:12 -0400 (Mon, 10 May 2010) $
 */

$(function() {
    var backgroundImageWidth = 671;
    var backgroundImageHeight = 239;
    var fadeSpeed = 1000;
    var fadeFactor = 3 / 5;
    var transitionDelay = 7500;
    var jqStage = $('#homeLeft div.Stage');
    var debuggingEnabled = false;             		
    var stageXmlPath = '/sebin/c/d/home-stage4.xml';	
    
    if(!jqStage.length) {
        if(debuggingEnabled)
            alert('the stage could not be located');
        return;
    }
    
    // save the old stage content in case the XML read fails
    var jqOldStageContent = jqStage.children('div').remove();
    
    $.ajax({
        type: 'GET',
        url: stageXmlPath,
        dataType: 'xml',
        success: function(data, textStatus, XMLHttpRequest) {
            var xmlSlides = $(data).find('slide');
            var validSlides = [ ];
            
            for(var i = 0; i < xmlSlides.length; ++i) {
                var ithSlide = xmlSlides.eq(i);
                var ithImage = ithSlide.find('img');
                
                if(!ithImage.attr('src')) {
                    if(debuggingEnabled)
                        alert('slide #' + (i + 1) + ' is missing its img src');
                    continue;
                }
                
                var ithHeadline = ithSlide.find('headline');
                var ithCopy = ithSlide.find('copy');
                
                validSlides.push({
                    img: {
                        src: ithImage.attr('src'),
                        alt: ithImage.attr('alt')
                    },
                    headline: {
                        href: ithHeadline.attr('href'),
                        text: ithHeadline.text()
                    },
                    copyText: ithCopy.text()
                });
            }
            
            if(validSlides.length < 2) {
                if(debuggingEnabled)
                    alert('insufficient valid slides were found for the stage')
                jqStage.append(jqOldStageContent);
                return;
            }
            
            
            var currentTimer = false;
            
            var currentOffset = 0;
            
            var jumpToSlide = function() {
                if(currentTimer)
                    clearTimeout(currentTimer);
                transitionTo($(this).text() - 1, false);
            };
            
            var animationBusy = false;
            var transitionDelayed = false;
            var transitionDelayedTo = false;
            
            var transitionTo = function(newOffset, continueOn) {
                if(animationBusy) {
                    transitionDelayed = true;
                    transitionDelayedTo = newOffset;
                    return;
                }
                else if(newOffset != -1 && newOffset == currentOffset)
                    return;
                
                animationBusy = true;
                if(newOffset == -1)
                    newOffset = (currentOffset + 1) % jqSlides.length;
                
                jqSlides[currentOffset].fadeOut(fadeSpeed);
                setTimeout(
                    function() {
                        jqSlides[newOffset].fadeIn(fadeSpeed, function() {
                            currentOffset = newOffset;
                            for(var i = 0; i < jqJumpItems.length; ++i)
                                if(i != newOffset)
                                    jqJumpItems[i].removeClass('Active');
                                else if(!jqJumpItems[i].hasClass('Active'))
                                    jqJumpItems[i].addClass('Active');
                            animationBusy = false;
                            if(transitionDelayed) {
                                transitionDelayed = false;
                                transitionTo(transitionDelayedTo, false);
                                transitionDelayedTo = false;
                            }
                            else if(continueOn)
                                currentTimer = setTimeout(function() { transitionTo(-1, true); }, transitionDelay);
                        });
                    },
                    Math.round(fadeFactor * fadeSpeed)
                );
            };
            
            var jqJumpList = $('<ul />');
            var jqJumpItems = [ ];
            var jqSlides = [ ];
            
            for(var i = 0; i < validSlides.length; ++i) {
                jqJumpItems.push(
                    $('<li />').append(
                        $('<a href="javascript:void(0)" />')
                            .click(jumpToSlide)
                            .text(i + 1)
                    )
                );
                jqJumpList.append(jqJumpItems[i]);
                
                var newImage = $('<img />')
                    .attr('src', validSlides[i].img.src)
                    .attr('alt', validSlides[i].img.alt ? validSlides[i].img.alt : '')
                    .attr('width', backgroundImageWidth)
                    .attr('height', backgroundImageHeight);
                var newCard = $('<div />');
                if(validSlides[i].headline.text || validSlides[i].copyText) {
                    var newInnerDiv = $('<div />');
                    if(validSlides[i].headline.text) {
                        var newHeader = $('<h3 />');
                        if(validSlides[i].headline.href)
                            newHeader.append(
                                $('<a />')
                                    .attr('href', validSlides[i].headline.href)
                                    .text(validSlides[i].headline.text)
                            );
                        else
                            newHeader.text(validSlides[i].headline.text);
                        
                        newInnerDiv.append(newHeader);
                    }
                    
                    if(validSlides[i].copyText)
                        newInnerDiv.append(
                            $('<p />').text(validSlides[i].copyText)
                        );
                    
                    newCard.append($('<div />').append($('<div />').append(newInnerDiv)));
                    
                }
                
                newCard.append(newImage);
                jqSlides.push(newCard);
            }
            
            jqStage.append(jqJumpList);
            for(var i = 0; i < validSlides.length; ++i) {
                if(i)
                    jqSlides[i].hide();
                jqStage.append(jqSlides[i]);

            }
            jqJumpItems[0].addClass('Active');
        	$('.Stage > div:eq(0)').click(function(){$(location).attr('href',validSlides[0].headline.href);});
        	$('.Stage > div:eq(1)').click(function(){$(location).attr('href',validSlides[1].headline.href);});
        	$('.Stage > div:eq(2)').click(function(){$(location).attr('href',validSlides[2].headline.href);});
        	$('.Stage > div:eq(3)').click(function(){$(location).attr('href',validSlides[3].headline.href);});
        	$('.Stage > div:eq(4)').click(function(){$(location).attr('href',validSlides[4].headline.href);});
            currentTimer =  setTimeout(function() { transitionTo(-1, true); }, transitionDelay);
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            jqStage.append(jqOldStageContent);
            if(debuggingEnabled)
                alert('unable to read XML; stage reverted back to static content\n(' + errorThrown + ')');
        }
    });
});


