var swfHandler = new Object();

swfHandler.cleanup = function() {
    if (swfHandler.uiSlideField) swfHandler.uiSlideField.value = "";
    if (swfHandler.uiSoundField) swfHandler.uiSoundField.value = "";
    
    swfHandler.slideFileId = null;
    swfHandler.soundFileId = null;
    swfHandler.browsingFile = "";  //"slide" or "sound"
    swfHandler.redirect = null;
    swfHandler.plickId = null;
    swfHandler.uploading = false;
    swfHandler.response = null;
    if (swfHandler.upload) swfHandler.upload.cancelQueue();
}

swfHandler.browseFiles = function(fileType) {
    if (swfHandler.uploading) {
        alert("Upload in progress...  Please wait until the current upload completes.  To cancel the current upload, simply press your browser's refresh button.");
        return;
    }
    swfHandler.browsingFile = fileType;
    swfHandler.upload.browse();
}

swfHandler.fileQueued = function(fileObj) {
    if (swfHandler.browsingFile == "slide") {
        swfHandler.slideFileId = fileObj.id;
        swfHandler.uiSlideField.value = fileObj.name;
        var ua = getCookie("ua");
        if (ua != null && ua.length > 0) swfHandler.upload.addFileParam(swfHandler.slideFileId, "ua", ua);     
        swfHandler.upload.addFileParam(swfHandler.slideFileId, "plickName", swfHandler.generatePlickName(fileObj.name));
        var dotIndex = fileObj.name.lastIndexOf(".");
        if (dotIndex >= 0 && dotIndex < fileObj.name.length - 1) {
            var postfix = fileObj.name.substring(dotIndex + 1).toLowerCase();
            if (postfix == "jpg" || postfix == "jpeg" || postfix == "gif" || postfix == "png") {
                alert("You are uploading a single picture.  It is recommended to upload a multi-slide show/presentation (e.g. a powerpoint file) instead of one single picture.");
            }
        }
    }
    else if (swfHandler.browsingFile == "sound") {
        swfHandler.soundFileId = fileObj.id;
        var ua = getCookie("ua");
        if (ua != null && ua.length > 0) swfHandler.upload.addFileParam(swfHandler.soundFileId, "ua", ua);
        swfHandler.uiSoundField.value = fileObj.name;
    }
}

swfHandler.uploadFiles = function(gp) {
    if (swfHandler.uploading) { 
        alert("Upload in progress...  Please wait until the current upload completes.  To cancel the current upload, simply press your browser's refresh button.");
        return false;
    }

    swfHandler.uploading = true;
    
    if (swfHandler.slideFileId) {
        swfHandler.upload.setFilePostName("slide");
        swfHandler.upload.startUpload(swfHandler.slideFileId);
    }
    else if (swfHandler.soundFileId) {
        swfHandler.upload.setFilePostName("sound");
        swfHandler.upload.startUpload(swfHandler.soundFileId);
    }
    
    swfHandler.initStatusBox(gp);
    return true;
}

swfHandler.initStatusBox = function(gp) {
    var header = document.getElementById("header");
    header.className = "header_with_msg";
    swfHandler.statusBox.className = "msgBox";
    
    var slideDiv = document.getElementById('slideDiv');
    var soundDiv = document.getElementById('soundDiv');
    
    while (swfHandler.statusBox.hasChildNodes()) 
        swfHandler.statusBox.removeChild(swfHandler.statusBox.firstChild);
    
    swfHandler.statusBox.innerHTML = "";
    if (swfHandler.slideFileId) {
        swfHandler.statusBox.innerHTML += "Uploading Slide File "
            + "<img id='slideProgressBar' class='progressBar' src='/img/progress_finished.gif' />"
            + "<span id='slideProgressText' class='progress'>0%</span><br/>";
    }
    if (gp) {
      swfHandler.statusBox.innerHTML += "Checking Google URL ...<br/>";
    }

    if (swfHandler.soundFileId) {
        swfHandler.statusBox.innerHTML += "Uploading Audio File "
            + "<img id='soundProgressBar' class='progressBar' src='/img/progress_finished.gif' />"
            + "<span id='soundProgressText' class='progress'>0%</span>";            
    }
}

swfHandler.uploadProgress = function(fileObj, bytesLoaded, done) {
    try {
        var percent = Math.ceil((bytesLoaded / fileObj.size) * 100);
        if (done != "done" && percent >= 100) percent = 99;
        
        if (fileObj.id == swfHandler.slideFileId) {
            var progBar = document.getElementById("slideProgressBar");
            var progText = document.getElementById("slideProgressText");
            progBar.style.width = (percent * 0.5) + "%";  //firefox takes the outer div width not image width
            while (progText.hasChildNodes()) progText.removeChild(progText.firstChild);
            progText.appendChild(document.createTextNode(" " + percent + "%"));        
        }
        else if (fileObj.id == swfHandler.soundFileId) {
            var progBar = document.getElementById("soundProgressBar");
            var progText = document.getElementById("soundProgressText");
            progBar.style.width = (percent * 0.5) + "%";  //firefox takes the outer div width not image width
            while (progText.hasChildNodes()) progText.removeChild(progText.firstChild);
            progText.appendChild(document.createTextNode(" " + percent + "%"));    
            
        }
    } catch (ex) { this.debugMessage(ex); }
}

swfHandler.uploadComplete = function (fileObj, server_data) {
    swfHandler.parseResponse(server_data);

    if (swfHandler.response.ua) {
        setCookie("ua", swfHandler.response.ua);
        swfHandler.upload.addFileParam(swfHandler.soundFileId, "ua", swfHandler.response.ua);
    }
    
    if (!swfHandler.response.success) {
    		alert("server response: " + server_data);
        while (swfHandler.statusBox.hasChildNodes()) 
            swfHandler.statusBox.removeChild(swfHandler.statusBox.firstChild);
        if (!swfHandler.response.failure) {
          swfHandler.response.failure = "upload failed";
        }
        swfHandler.statusBox.appendChild(document.createTextNode(swfHandler.response.failure));
        swfHandler.cleanup();
        return;
    }
    
    if (fileObj.id == swfHandler.slideFileId && swfHandler.soundFileId) {
        swfHandler.uploadProgress(fileObj, fileObj.size, "done");
        swfHandler.upload.setFilePostName("sound");
        swfHandler.upload.addFileParam(swfHandler.soundFileId, "plickId", swfHandler.response.success); 
        //setTimeout: has to wait till swf cleans info on this file upload
        setTimeout("swfHandler.upload.startUpload(swfHandler.soundFileId)", 500); 
    }
    else {
        //all uploads done.
        if (swfHandler.redirect) {
            if (swfHandler.redirect.charAt(swfHandler.redirect.length - 1) == '?'
            || swfHandler.redirect.charAt(swfHandler.redirect.length - 1) == '&') {
                swfHandler.redirect += ("plickId=" + swfHandler.response.success);
            }
            window.location = swfHandler.redirect;
            return;
        }
        while (swfHandler.statusBox.hasChildNodes()) 
            swfHandler.statusBox.removeChild(swfHandler.statusBox.firstChild);

        var plickLink = document.createElement("a");
        plickLink.setAttribute("href", "/editPlick.do?plickId=" + swfHandler.response.success + "&returnUrl=%2FsharePlick.do%3Ftype%3Do%26plickId%3D" + swfHandler.response.success);
        plickLink.appendChild(document.createTextNode("Add more information"));

        var shareLink = document.createElement("a");
        shareLink.setAttribute("href", "/sharePlick.do?plickId=" + swfHandler.response.success + "&type=h");
        shareLink.appendChild(document.createTextNode("Share with friends"));

        swfHandler.statusBox.appendChild(
            document.createTextNode(" Upload succeeded.  We are processing your plick."));
        swfHandler.statusBox.appendChild(document.createElement("br"));
        swfHandler.statusBox.appendChild(shareLink);
        swfHandler.statusBox.appendChild(document.createTextNode(" OR "));
        swfHandler.statusBox.appendChild(plickLink);
        swfHandler.cleanup();
    }
}

swfHandler.uploadError = function(error_code, fileObj, message) {
    alert(fileObj.name + ": " + message);
    while (swfHandler.statusBox.hasChildNodes()) 
        swfHandler.statusBox.removeChild(swfHandler.statusBox.firstChild);
    swfHandler.statusBox.appendChild(document.createTextNode(message)); 
    swfHandler.cleanup();
}

//
// Utilities
//

swfHandler.parseResponse = function(data){
    swfHandler.response = new Object();
    var dataArray = data.split("&", 2);
    for (var i = 0; i < dataArray.length; i++) {
        var elem = dataArray[i];
        if (elem) {
            var nv = elem.split("=", 2);
            if (nv && nv[0] && nv[1]) {
                if (nv[0] == "success") {
                    swfHandler.response.success = nv[1];
                    swfHandler.response.failure = null;
                }
                else if (nv[0] == "ua") {
                    swfHandler.response.ua = nv[1];
                }
                else if (nv[0] == "failure") {
                  swfHandler.response.failure = nv[1];
                }
            }
        }
    }
}

swfHandler.generatePlickName = function(filename) {
    if (!filename)
      return "no name";
    var index = filename.lastIndexOf(".");
    if (index > 0)
      filename = filename.substring(0, index);
    else if (index == 0)
      filename = filename.substring(1);

    var reg1 = /_/g;
    var reg2 = /-/g;
    return filename.replace(reg1, " ").replace(reg2, " ");
}
