    //MultiPowUpload_onSelect. Invoked when the user selects a file to upload or download from the file-browsing dialog box.
    function MultiPowUpload_onSelect()
    {
        MultiPowUpload.uploadAll();    
    }

    //MultiPowUpload_onStart.Invoked when nex file upload starts
    function MultiPowUpload_onStart(type, index)
    {    
        addFile(MultiPowUpload.fileList()[index].id);
    }

    //MultiPowUpload_onProgress. Invoked periodically during the file upload or download operation
    function MultiPowUpload_onProgress(type, index, fileBytesLoaded, fileBytesLength, totalBytesLoaded, totalBytesLength) 
    {
           updateFileInfo(MultiPowUpload.fileList()[index].id);      
    }

    //MultiPowUpload_onError. Invoked when an input/output error occurs or when an upload/download fails because of an HTTP error
    function MultiPowUpload_onError(type, index, error) 
    {
        var file = MultiPowUpload.getFile(MultiPowUpload.fileList()[index].id);
           updateStatus(file,error);
    }
    
    //MultiPowUpload_onComplete. Invoked when the upload or download of single file operation has successfully completed
    function MultiPowUpload_onComplete(type, index, response)
    {
        updateFileInfo(MultiPowUpload.fileList()[index].id);
    }


    function addFile(fileID)
    {
        if(document.getElementById(fileID) == null)
        {
            var fdiv = document.createElement("div");
            fdiv.innerHTML = MultiPowUpload.getFile(fileID).name;
            fdiv.id = fileID;
            fdiv.className = "fileInfo current";
            fdiv.style.width = "400px";
            var progressdiv = document.createElement("div");        
            progressdiv.id = "progressbar_"+fileID;
            fdiv.appendChild(progressdiv);
            progressdiv.className = "progressBar";
            var statussdiv = document.createElement("div");        
            statussdiv.id = "status_" + fileID;
            fdiv.appendChild(statussdiv);
            document.getElementById("filelist").innerHTML = '';
            document.getElementById("filelist").appendChild(fdiv);
        }
    }

    function updateFileInfo(fileID)
    {
        var fdiv = document.getElementById(fileID);        
        if(fdiv != null)
        {
            var file = MultiPowUpload.getFile(fileID);
            updateProgressBar(file);
            updateStatus(file);            
        }
    }

    function updateProgressBar(file)
    {        
        document.getElementById("progressbar_"+file.id).style.width = file.percentDone + "%";
    }

    function updateStatus(file, errorMessage)
    {
        var status=""
        switch(file.status)
        {
            case 0:
                status = "Ready for upload";
                break;
            case 1:
                status = "Uploaded: " + Math.round(file.percentDone) + "%";
                break;
            case 2:
                status = "Upload complete. Server response: <br>" + file.serverResponse;
                document.getElementById(file.id).className = "fileInfo complete";
                break;
            case 3:
                status = "Upload cancelled";
                break;
            case 4:
                document.getElementById(file.id).className = "fileInfo error";
                status = "Error occured: " + errorMessage;
                break;
        }
        document.getElementById("status_" + file.id).innerHTML = status;
    }
