
// zeigt eine Fehlermeldung, wenn der MultiDownload nicht initialisiert werden konnte
function initMultiDownloadError(){
    alert(msgErrorMultiDownload);
    parent.close();
}

// pr?ft auf Filename-Duplikate im Array 'fileNames' und benennt diese ggf. um,
// indem es einen steigenden Counterwert anh?ngt
function checkForDuplicateFileName(filename) {
    var suffix = "";
    if(!fileNames[filename]) {
        fileNames[filename] = 1;
    } else {
        suffix = "_" + fileNames[filename];
        fileNames[filename] += 1;
    }
    var posExt = filename.lastIndexOf(".");
    var firstPart = filename.substring(0, posExt);
    var lastPart = filename.substring(posExt, filename.length);
    return firstPart+suffix+lastPart;
}

// ?ffnet das kleine MultiDownload-Popup mit den Statusmeldungen und der Progressbar
function openMultiDownloadWindow(url, name) {
    var windowWidth = 300;
    var windowHeight = 200;
    var posX = (screen.availWidth/2)-(windowWidth/2);
    var posY = (screen.availHeight/2)-(windowHeight/2);
    var url = url;
    autoPopup('url='+url ,'name='+name+',scrollbars=no,top='+posY+', left='+posX+', width='+windowWidth+', height='+windowHeight+'');
}

// L?dt das Appet in einen hidden iframe
function initDownload() {
    if(opener.multiDownloadImages.length > 0) {
        multiDownloadImages = opener.multiDownloadImages;
    }
    document.getElementById("download_iframe").src = contextServletUserAlbumPath+"/multidownload/applet";
}

function init() {
    if(document.Detector.getVendor().toLowerCase().substr(0, 9) == 'microsoft') {
        alert(errorInitMultidownloadWrongjvmMsg);
        parent.close();
    }
}

// Initialisiert den MultiDownload (aus downloadImafe oder downloadImageGuest heraus)
function initMultiDownload(name) {
    if (initDetector() == false) {
        // Jedes selektierte File wieder deselektieren
        // Checkboxen nur in der Owner-Ansicht deaktivieren
        if(name == 'owner') {
            CheckStateNew(4);
        }
        return false;
    }
    try {
        var elem = document.imageActionForm.elements['imageCheckBox'];
        // Folgender Aufruf ist notwendig f?r den IE3,
        // der Checkboxen nicht gruppiert
        if (!elem.length) elem = document.imageActionForm.elements;
        var i;
        var counter = 0;
        // Jedes selektierte File der Downloadliste hinzuf?gen
        for (i = 0; i < elem.length; i++) {
            if (elem[i].name == "imageCheckBox" && elem[i].checked) {
                var fileName = document.getElementById("filename" + elem[i].value).value;
                multiDownloadImages[counter] = new Object();
                multiDownloadImages[counter]["fileName"] = fileName;
                multiDownloadImages[counter]["fileUrl"]  = multiDownloadImagesFileUrl + encodeURIComponent(fileName) + "?imageId=" + elem[i].value;
                multiDownloadImages[counter]["fileSize"] = document.getElementById("sizeBytes" + elem[i].value).value;
                ++counter;
            }
        }
        // Checkboxen nur in der Owner-Ansicht deaktivieren
        if(name == 'owner') {
            CheckStateNew(4);
        }
    }
    catch(e) {}
    openMultiDownloadWindow(contextServletUserAlbumPath+"/multidownload", name);
}

// Event-Aufruf: startet den eigentlichen Download-Prozess
function performDownload()
{
    // zu ladende Bilder von der aufrufenden Seite holen
    var downloadImages = parent.multiDownloadImages;
    fileNames = new Array();
    // Downloadliste des Applets zur?cksetzen
    document.FileDownload.clearFiles();
    var i;
    // Jedes Image aus dem assoz. Array downloadImages der Downloadliste hinzuf?gen
    for (i = 0; i < downloadImages.length; i++) {
        var filename = downloadImages[i]["fileName"];
        var fileSize = downloadImages[i]["fileSize"];
        // eventuelle Filename-Duplikate umbenennen
        filename = checkForDuplicateFileName(filename);
        // File der Downloadliste des Applets hinzuf?gen
        document.FileDownload.addFile(filename, downloadImages[i]["fileUrl"], fileSize);
    }
    // Bilder beim Download gleich in ein Folder mit dem Albumnamen speichern
    document.FileDownload.addFolder(albumDisplayName);
    // Download starten
    parent.document.getElementById("initMultiDownload").style.display = "none";
    parent.document.getElementById("confirmMultiDownload").style.display = "block";
    document.FileDownload.startDownload();
    return true;
}

// Methode, die gerufen wird, wenn das Applet ein EVENT feuert.
function onMDownloadEvent(EVENT_TYPE, DATA1, DATA2, DATA3) {
    //alert( "Event received: " + EVENT_TYPE + " " + DATA1 + " " + DATA2 + " " + DATA3 );
    switch(parseInt(EVENT_TYPE)) {
        case 0: // Applet initialisiert
            performDownload();
            break;
        case 1: // Verzeichnis wurde vom Benutzer ausgew?hlt
            // nix machen
            break;
        case 2: // vorzeitiger Abbruch
            parent.close();
            break;
        case 3: // Start Download
            parent.document.getElementById("confirmMultiDownload").style.display = "none";
            parent.document.getElementById("progressMultiDownload").style.display = "block";
            parent.document.getElementById("downloadPercentage").innerHTML = "0&nbsp;%";
            parent.document.getElementById("downloadStatus").innerHTML = "Download wird gestartet...";
              break;
        case 4: // Progress
            parent.document.getElementById("downloadDiv").style.width = parseInt(DATA1)*2+"px";
            parent.document.getElementById("downloadPercentage").innerHTML = DATA1+"&nbsp;%";
            parent.document.getElementById("downloadStatus").innerHTML = DATA2 + ' wird geladen...<br /><img src="'+imgbase+'/p.gif" width="1" height="5" /><br />Restzeit ' + DATA3;
              break;
        case 5: // success
            parent.document.getElementById("downloadPercentage").innerHTML = "100&nbsp;%";
            parent.document.getElementById("downloadCancel").innerHTML = '<br /><input type="button" value="OK" onClick="self.close()" style="font-family: Verdana; font-size: 11px; width: 50px;">';
            parent.document.getElementById("downloadBorder").style.backgroundColor = serviceFrameColor;
            parent.document.getElementById("downloadStatus").innerHTML = "Download abgeschlossen!";
              break;
        case 6: // Download vom Benutzer abgebrochen
            alert("Download abgebrochen");
            parent.close();
            break;
        case 7: // Fehler beim Initialisieren
            alert("Error: " + document.FileDownload.getLastError());
            break;
    }
}

// Bricht den Download ab
function cancelDownload() {
    document.FileDownload.cancel();
}