var flexApp;
var currentSlide = -1;

// Entry method (triggered after load)
function init() {
    // register callback for FABridge initialization
    FABridge.addInitializationCallback("FLVScrubber", initBridge);
    // sort TIMES array from small to high numbers
    TIMES.sort(sortNumber);
    // render first slide
    var so = new SWFObject(getPathForSlide(0), "slides", "100%", "100%", "8");
    so.write("slideArea");
}

// Init Flex-AJAX-Bridge and subscribe to FLVStatusEvent
function initBridge() {
    flexApp = FABridge.FLVScrubber.root();
    flexApp.getVideoDisplay().addEventListener("FLVStatusEvent", scrubberEventHandler);
    flexApp.getVideoDisplay().setFile(Base64.decode(jsclassref));
}

// Handler for scrubber events (gets triggered three times a second)
var scrubberEventHandler = function(event) {
    // get index of slide for the current playing position ...
    var cand = getIndexOfProjectedSlide(event.getTime());
    // and switch to it if it isn't already shown
    if (cand != currentSlide) {
        var so = new SWFObject(getPathForSlide(cand), "slides", "100%", "100%", "7");
        so.write("slideArea");
        if(document.EXPRESSINSTALL_SWF) {
           so.useExpressInstall(EXPRESSINSTALL_SWF);
        }
        currentSlide = cand;
    }
}

// Returns relative path to slide
function getPathForSlide(index) {
	return slides[index];
}

// Returns index of projected slide at given time
function getIndexOfProjectedSlide(time) {
    var index = 0;
    for (var i = 0; i < TIMES.length; i++) {
        if (TIMES[i] < time) {
            index = i;
        } else {
            break;
        }
    }
    return index;
}

// Helper for sort() to compare numbers
function sortNumber(a, b) {
    return a - b;
}