// global variables
var slideshowSpeed = 3000;
var showController = 'yes';
var animationSpeed = 2000;
var slideshowLoop = 'yes';
var slideshowTimer;

// default settings
var slidecount;
var images =[];
var maxSlides;

function fgSlideShow(data) {
    // set options
    var slidecount = data.slides.length;
    if(data.options.slideshowSpeed) {
        slideshowSpeed = data.options.slideshowSpeed;
    };
    if(data.options.maxSlides && data.options.maxSlides < slidecount) {
        maxSlides = data.options.maxSlides;
    } else {
        maxSlides = slidecount;
    };
    if (slideshowSpeed <= 4000) {
        animationSpeed = slideshowSpeed / 2;
    };
    if(data.options.showController) {
        showController = data.options.showController;
    };
    if (jQuery.browser.msie && parseInt(jQuery.browser.version) < 7) {
        showController = 'no';
    };
    if(data.options.loop) {
        slideshowLoop = data.options.loop;
    };
    
    // replace image placeholder with slides
    var slideshowContainer = $('<ul class="slides"></ul>');
    if (data.options.width) {
        slideshowContainer.css({width:data.options.width});
    };
    if (data.options.height) {
        slideshowContainer.css({height:data.options.height});
    };
    var count = 0;
    for (slide in data.slides) {
        if (count < maxSlides) {
            var slideNumber = count + 1;
            var newSlide = $('<li id="slide-' + slideNumber + '"><a href="' + data.slides[slide][2] + '"><img src="' + data.slides[slide][0] + '" alt="' + data.slides[slide][1] + '" title="' + data.slides[slide][1] + '" /></a></li>')
            if (data.options.width) {
                newSlide.children('a').children('img').css({width:data.options.width});
            };
            if (data.options.height) {
                newSlide.children('a').children('img').css({height:data.options.height});
            };
            newSlide.css({opacity: 0.0});
            slideshowContainer.append(newSlide);
            images.push(data.slides[slide][0]);
        }
        count++;
    }
    slideshowContainer.children('li:first').addClass('current');
    slideshowContainer.children('li:first').css({opacity: 1.0});
    
    if (!(jQuery.browser.msie && parseInt(jQuery.browser.version) < 7)) {
        $('#slideshow-text ul.blurbs').children('li:first').addClass('current-blurb');
    };

    
    $('#slideshow-banner').html(slideshowContainer);
    
    fgImagePreload(images);

    
    if (showController == 'yes') {
        count = 0;
        var slideshowController = $('<div id="slideshow-navigator" class="pngfix"><ul></ul></div>');
        slideshowController.children('ul').append('<li class="rewind-slide"><a href="javascript:fgToggleSlide(\'back\')"></a></li>');
        while (count < maxSlides) {
            if (count == 0) {
                slideshowController.children('ul').append('<li class="slide-button active-slide"><a></a></li>');
            } else {
                slideshowController.children('ul').append('<li class="slide-button inactive-slide"><a href="javascript:fgGoToSlide(\'' + count + '\')"></a></li>');
            }
            count++;
        }
        slideshowController.children('ul').append('<li class="advance-slide"><a href="javascript:fgToggleSlide(\'forward\')"></a></li>');
        $('#slideshow-container').append(slideshowController);
    };

    // start the slideshow
    slideshowTimer = setInterval("fgRotateSlides('forward')",slideshowSpeed);
};

function fgRotateSlides(direction) {
    //advance slide
    var previousSlide = $('#slideshow-banner ul.slides li.previous');
    previousSlide.removeClass('previous');
    var currentSlide = $('#slideshow-banner ul.slides li.current');
    if (direction == 'back') {
        if (currentSlide.prev().length) {
            var nextSlide = currentSlide.prev();
        } else {
            var nextSlide = $('#slideshow-banner ul.slides li:last')
        };
    } else {
        if (currentSlide.next().length) {
            var nextSlide = currentSlide.next();
        } else {
            var nextSlide = $('#slideshow-banner ul.slides li:first')
            if (slideshowLoop == 'no') {
                clearInterval(slideshowTimer);
            };
        };
    }

    nextSlide.css({opacity: 0.0}).addClass('current').animate({opacity: 1.0}, animationSpeed);

    currentSlide.animate({opacity: 0.0}, animationSpeed);
    
    currentSlide.addClass('previous');
    currentSlide.removeClass('current');
    if (direction == 'back') {
        setTimeout("fgAdvanceController('back')",animationSpeed / 4);
        if (!(jQuery.browser.msie && parseInt(jQuery.browser.version) < 7)) {
            setTimeout("fgAdvanceBlurb('back')",animationSpeed / 4);
        };
    } else {
        setTimeout("fgAdvanceController('next')",animationSpeed / 4);
        if (!(jQuery.browser.msie && parseInt(jQuery.browser.version) < 7)) {
            setTimeout("fgAdvanceBlurb('next')",animationSpeed / 4);
        };
    };
};

function fgAdvanceController(direction) {
    //advance controller
    var currentSlideControl = $('#slideshow-navigator ul li.active-slide');
    if (direction == 'back') {
        if (currentSlideControl.prev().hasClass('inactive-slide')) {
            var nextSlideControl = currentSlideControl.prev();
        } else {
            var nextSlideControl = $('#slideshow-navigator ul li.inactive-slide:last')
        };
    } else {
        if (currentSlideControl.next().hasClass('inactive-slide')) {
            var nextSlideControl = currentSlideControl.next();
        } else {
            var nextSlideControl = $('#slideshow-navigator ul li.inactive-slide:first')
        };
    }
     
    nextSlideControl.addClass('active-slide');
    nextSlideControl.removeClass('inactive-slide');
    nextSlideControl.children('a').removeAttr('href');
    
    currentSlideControl.addClass('inactive-slide');
    var i = currentSlideControl.index() - 1;
    currentSlideControl.children('a').attr('href','javascript:fgGoToSlide(\'' + i + '\')');
    currentSlideControl.removeClass('active-slide');
};

function fgImagePreload(imageArray) {
    $(imageArray).each(function(){
        $('<img/>')[0].src = this;
    });
};

function fgToggleSlide(direction) {
    //advance slide
    var previousSlide = $('#slideshow-banner ul.slides li.previous');
    previousSlide.removeClass('previous');
    var currentSlide = $('#slideshow-banner ul.slides li.current');
    if (direction == 'back') {
        if (currentSlide.prev().length) {
            var nextSlide = currentSlide.prev();
        } else {
            var nextSlide = $('#slideshow-banner ul.slides li:last')
        };
    } else {
        if (currentSlide.next().length) {
            var nextSlide = currentSlide.next();
        } else {
            var nextSlide = $('#slideshow-banner ul.slides li:first')
        };
    }
     
    nextSlide.css({opacity: 0.0}).addClass('current').animate({opacity: 1.0}, animationSpeed / 4);

    currentSlide.animate({opacity: 0.0}, animationSpeed / 4);
    
    currentSlide.addClass('previous');
    currentSlide.removeClass('current');

    fgAdvanceController(direction);
    fgAdvanceBlurb(direction);

    clearInterval(slideshowTimer);
    slideshowTimer = setInterval("fgRotateSlides('forward')",slideshowSpeed);
};

function fgGoToSlide(slideNumber) {
    var currentSlide = $('#slideshow-banner ul.slides li.current');
    var nextSlide = $('#slideshow-banner ul.slides li').get(slideNumber);
    
    $(nextSlide).css({opacity: 0.0}).addClass('current').animate({opacity: 1.0}, animationSpeed / 4);

    currentSlide.animate({opacity: 0.0}, animationSpeed / 4);
    
    currentSlide.addClass('previous');
    currentSlide.removeClass('current');

    fgUpdateController(slideNumber);
    
    clearInterval(slideshowTimer);
    slideshowTimer = setInterval("fgRotateSlides('forward')",slideshowSpeed);
};

function fgUpdateController(slideNumber) {
    var currentSlideControl = $('#slideshow-navigator ul li.active-slide');
    var nextSlideControl = $('#slideshow-navigator ul li.slide-button').get(slideNumber);
    $(nextSlideControl).addClass('active-slide');
    $(nextSlideControl).removeClass('inactive-slide');
    $(nextSlideControl).children('a').removeAttr('href');

    var i = currentSlideControl.index() - 1;
    currentSlideControl.addClass('inactive-slide');
    currentSlideControl.removeClass('active-slide');
    currentSlideControl.children('a').attr('href','javascript:fgGoToSlide(\'' + i + '\')');
};

function fgAdvanceBlurb(direction) {
    var previousBlurb = $('#slideshow-text ul.blurbs li.previous-blurb');
    previousBlurb.removeClass('previous-blurb');
    var currentBlurb = $('#slideshow-text ul.blurbs li.current-blurb');
    if (direction == 'back') {
        if (currentBlurb.prev().length) {
            var nextBlurb = currentBlurb.prev();
        } else {
            var nextBlurb = $('#slideshow-text ul.blurbs li:last')
        };
    } else {
        if (currentBlurb.next().length) {
            var nextBlurb = currentBlurb.next();
        } else {
            var nextBlurb = $('#slideshow-text ul.blurbs li:first')
        };
    }

    nextBlurb.addClass('current-blurb');  
    currentBlurb.addClass('previous-blurb');
    currentBlurb.removeClass('current-blurb');
};

