var $Y = YAHOO;
var $D = $Y.util.Dom;
var $E = $Y.util.Event;

$Y.namespace("reanet");

$Y.reanet.homeshow = function(){
    // set up default values and global variables 
    var config = {
        imageClass: 'home-image',
        currentImage: 1,
        slideInterval: 5,
        fadeOutTime: 0.2,
        fadeInTime: 0.5,
        intervalID: null,
        playerEvent: null,
        allImageLinks: null,
        allImagesButFirst: null
    };

    // runs continuously, triggering a custom event.
    var timer = function(){
        config.intervalID = setTimeout(function () {timer();}, (config.slideInterval * 1000));
        config.playerEvent.fire();
    };



    // populates some 'global' vars, adds listeners to player controls, starts the timer and then starts the slideshow.
    var init = function(){

        config.allImages = $D.getElementsBy(function(el){
            if ($D.hasClass(el, config.imageClass)) {
                return true;
            }
            else {
                return false;
            }
        }, 'img', 'content');
        config.allImagesButFirst = $D.getElementsBy(function(el){
            if ($D.hasClass(el, config.imageClass) && $D.hasClass(el, 'hidden')) {
                return true;
            }
            else {
                return false;
            }
        }, 'img', 'content');
        $D.setStyle(config.allImagesButFirst, 'opacity', 0);
        $D.removeClass(config.allImagesButFirst, 'hidden');

        config.playerEvent = new YAHOO.util.CustomEvent('playerEvent');
        timer();
        config.playerEvent.subscribe(loadNext);

    };

    // loads the next image. 
    var loadNext = function(type, args){
        
        var thisImage = $D.get('image' + config.currentImage);

        (config.currentImage < config.allImages.length) ? config.currentImage += 1 : config.currentImage = 1;

        var nextImage = $D.get('image' + config.currentImage);
    
        imageSwitch(thisImage, nextImage);
           
    };

    // swaps the images passed to it.
    var imageSwitch = function(outImage, inImage){
        var fadeOut = new YAHOO.util.Anim(outImage, {
            opacity: {
                to: 0
            }
        }, config.fadeOutTime);
        var doIt = function(type, args){
            var fadeIn = new YAHOO.util.Anim(inImage, {
                opacity: {
                    to: 1
                }
            }, config.fadeInTime);
            fadeIn.animate();
        }
        outImage = YAHOO.util.Dom.get(inImage);
        fadeOut.onComplete.subscribe(doIt);
        fadeOut.animate();
    };

  

    // reveals public functions.
    return {
        init: init
    };
}
();

$E.onDOMReady($Y.reanet.homeshow.init);
