/*  Slideshow 
 *  Patches welcome -> jochem@vorm.net */ 

var interval_in_msec = 3000;
var preload_ready = false;
var path = "";
var oldurl = "";
var first_id = 1;

function format(nr) {
    // yep evil
    if(nr < 10) { return "00" + nr; }
    if(nr < 100) { return "0" + nr; }
    return nr;
}


function extract_id(str) {    

    re = /([1-9]+(0+)?)\.(jpg|JPG)$/
    ids = re.exec(str);
    if (ids) 
        return parseInt(ids[1]);
    return 1;
}

function change_button() {
    if(document.getElementById('slideshow')) {
        d = document.getElementById('slideshow');    
        d.href="javascript:stop_slideshow()";
        d.innerHTML="Stop Slideshow";
    }
}


function start_slideshow() {
    // next previous links do not work anymore -> hide them
    if (document.getElementById('nextthumb'))
        document.getElementById('nextthumb').style.display = 'none';
    if (document.getElementById('prevthumb'))
        document.getElementById('prevthumb').style.display = 'none';
    if (document.getElementById('navigation')) {
        t = document.getElementById('navigation').innerHTML.replace(/Photo [0-9]+/,'Slideshow');
        document.getElementById('navigation').innerHTML = t;
    }
    change_button();
    setTimeout('slideshow()',interval_in_msec);
}

function slideshow() {

    if (next > last_id) {
        next = next -1;
        stop_slideshow();
    }

    if (preload_ready) {
        swap();
        
        // Preload next image
        preload_ready = false;
        preload();
        setTimeout('slideshow()',interval_in_msec);
    } else {
        setTimeout('slideshow()', 250);
    }
}

function set_preload_ready() {
    preload_ready = true;
}

function preload() {
    next = extract_id(document.getElementById('preview').src) + 1;
    // Preload next image
    opreload = document.getElementById('preload');
    opreload.src = path + '/img-' + format(next) + '.jpg';

}

function swap() {

    // Set shortnames
    opreview = document.getElementById('preview');
    opreload = document.getElementById('preload');

    // Replace image
    if (opreload.src != 'about:blank') { 
        opreview.width  = opreload.width;
        opreview.height = opreload.height;
        opreview.src = opreload.src; 
    } 
    // Replace photo nr
    if(document.getElementById('comment')) {
        t = document.getElementById('comment').innerHTML.replace(/[0-9]+/,next);
        document.getElementById('comment').innerHTML = t;
    }
}

function init() {
    
    // Image path
    re = /(.*)\/img-[0-9]+\.jpg/
    if (document.getElementById('preview')) {
        ids = re.exec(document.getElementById('preview').src);
        path = ids[1];
    }
    
    // Url 
    oldurl = location.href; 
                             
    // Preload container
    document.write('<img id="preload" src="about:blank" onload="set_preload_ready()" style="display:none" alt=""/>');
    preload_ready = false;
    preload();

    if(location.href.search('slideshow') > 1) {
        setTimeout('change_button()',500);
        start_slideshow();
    }
}

// Use page reload to show proper links and exif data again
function stop_slideshow() {
    cur = extract_id(document.getElementById('preview').src);
    newurl = location.href.replace(/img-[0-9]+.html/,'img-'+format(cur)+'.html');
    newurl = location.href.replace(/\?slideshow/,'');
    location.href= newurl;
}

/* Main  program */
init();

