dojo.provide('slideshow');

slideshow.img = [];
slideshow.imghash = 0;
slideshow.imgtotal = 0;
slideshow.i = -1;

//show the next event
slideshow.advance = function(){
    slideshow.i++;
    if(slideshow.i > (slideshow.data.length - 1)){
        slideshow.i = 0;
    }

    dojo.byId('home_feature_overlay').innerHTML = "<h1><a href=\"/" + slideshow.data[slideshow.i].section_stub + "/" +
        slideshow.data[slideshow.i].category_stub + "/" + slideshow.data[slideshow.i].stub + "\">" +
        slideshow.data[slideshow.i].event_name + "</a></h1>" +
        "<p>From " + slideshow.data[slideshow.i].event_date + "</p>";
    
    dojo.byId('home_feature_img').innerHTML = "<a href=\"/" + slideshow.data[slideshow.i].section_stub + "/" +
        slideshow.data[slideshow.i].category_stub + "/" + slideshow.data[slideshow.i].stub + "\"><img src=\"" + slideshow.data[slideshow.i].img_src + "\" /></a>";

    dojo.forEach(dojo.query(".slideshow_control"), function(e){
        dojo.removeClass(e, "slideshow_control_selected");
    });

    dojo.addClass(dojo.byId('slideshow_control' + (slideshow.i + 1)), "slideshow_control_selected");
}

//everything is loaded, start the slideshow
slideshow.display = function(){
    dojo.byId('home_feature_controls').style.display = "block";
    slideshow.advance();
    slideshow.cycler = window.setInterval(function(){
        slideshow.advance();
    }, 3000);
}

//load resources
slideshow.begin = function(data){
    //store the data for when we are ready to display
    slideshow.data = data;

    //preload the images
    var i = 1;
    dojo.forEach(data, function(e){
        var img = new Image(700, 330);
        img.onload = function(){
            slideshow.imghash++;
        }
        img.src = e.img_src;

        slideshow.img.push(img);
        slideshow.imgtotal++;
    });

    slideshow.checker = window.setInterval(function(){
        if(slideshow.imghash == slideshow.imgtotal){
            window.clearInterval(slideshow.checker);
            slideshow.display();
        }
    }, 1000);
}

//load the list of events
slideshow.load = function(){
    dojo.xhrGet({
        url: '/events/slideshow',
        handleAs: 'json',
        load: function(result){
            if(result.status == 'success'){
                slideshow.begin(result.data);
            }else{
                this.error("Couldn't load featured events");
            }
        },
        error: function(e, io){
            if(io.xhr.status != 0){
                alert('Sorry, an error occurred. Please reload the page and try again.');
            }
        }
    });
}

dojo.addOnLoad(function(){
    //add mouse events to pause slideshow cycling
    dojo.query(".slideshow_control").onclick(function(e){
        dojo.stopEvent(e);

        if(slideshow.cycler){
            window.clearInterval(slideshow.cycler);
            slideshow.cycler = null;
        }

        var id = e.currentTarget.id.substr(17);
        slideshow.i = id - 2;
        slideshow.advance();
    });

    slideshow.load();
});
