function zrSlideshow_fetch(id, url)
{
    var xmlHttp = null;

    try {
        // Real browsers.
        xmlHttp = new XMLHttpRequest(); 
    } catch (e) {
        // Internet Explorer
        try {
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    xmlHttp.onreadystatechange = function() {
        if (xmlHttp.readyState == 4) {
            try {
                // an error (e.g. Port is not responsive)
                if (xmlHttp.status == 200) {
                    document.getElementById(id).innerHTML = xmlHttp.responseText;
                }
            } catch (e) {
                document.getElementById(id).innerHTML = "<i>Der opstod en fejl.</i>";
            }
        }
    }

    xmlHttp.open("get", url);
    xmlHttp.send(null); 
}

var html_element;
var product_ids;
var index;
var fade = 0;
var oldest = 2;
var newest = 1;
var preloaded;

function zrSlideshow_init(html_id, products, images)
{
    html_element = html_id;
    product_ids = products;    
    index = 1;
    zrSlideshow_fetch(html_element+'_1', '/process/slideshow/'+product_ids[0]+'/'+product_ids.join(',')+'/');
    setTimeout('zrSlideshow_switch()',6000);
    zrSlideshow_preload(images);
}

function zrSlideshow_preload(images)
{
    preloaded = new Array();
    for(var i=0; i!=images.length; i++) {
        preloaded[i] = new Image();
        preloaded[i].src = images[i];
    }
}

function zrSlideshow_switch()
{
    // Get new product.
    zrSlideshow_fetch(html_element+'_'+oldest, '/process/slideshow/'+product_ids[index]+'/'+product_ids.join(',')+'/');
    var t = oldest; oldest = newest; newest = t;
    
    var el1 = document.getElementById(html_element+'_'+newest).style; el1.zindex = 10;
    var el2 = document.getElementById(html_element+'_'+oldest).style; el2.zindex = 5;
    
    // Start fader.
    fade = 0;
    zrSlideshow_fader();
    
    // Loop.
    index += 1;
    if(index == product_ids.length) { index = 0; }
    setTimeout('zrSlideshow_switch()',6000);
}

function zrSlideshow_fader()
{
    fade += 4;
    
    if(fade>=100) {
        fade = 100;
        document.getElementById(html_element+'_'+oldest).innerHTML = '';
    }

    zrFade(fade, html_element+'_'+newest);
    zrFade(100-fade, html_element+'_'+oldest);
    
    if(fade != 100) { setTimeout('zrSlideshow_fader()',50); }
}

function zrFade(opacity, html_id) { 
    var object = document.getElementById(html_id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
    if(opacity == 0) {
        object.display = 'none';
    } else {
        object.display = 'block';
    }
}
