var workOk = false;
var result = false;
var ok = {
    "sample" : false,
    "cover" : false
};

function _errorHandler(error) {
    console.debug(error);
}

Event.observe(window, 'load', function() {
    if ($("_cancel") != null) {
        $("_cancel").observe("click", onCancelUploadProcess);
    }
});

function onCancelUploadProcess(evt) {
    evt.stop();
    var confirm = new ConfirmPopup(
        "confirmCancelPopup",
        function(){
            $("_cancel").stopObserving("click", onCancelUploadProcess);
            $("_cancel").click();
            return true;
        },
        function(){
            return true;
        }
        );
    confirm.show();
}

//---------------------------------------------------------------- work
function checkWork() {
    workOk = false;
    dwr.util.setValue("workUploadError", "");
    var workfile = $("workUpload").value;

    uploadService.allowedMediaType(workfile, getFileSize("workUpload"), {
        callback : function(reply) {
            workOk = reply.valid;
            dwr.util.setValue("workUploadDWR", reply.message);
        },
        errorHandler : _errorHandler
    });

    if (workfile != "") {
        _showHideUpload("sample", isImageUpload($("workUpload")));
        _showHideUpload("cover", isImageUpload($("workUpload")));
    }
}

//------------------------------------------------------------- generic
function setEnableUpload(type, enable) {
    if (!enable){
        //dwr.util.setValue(type+"UploadError", "");
        dwr.util.setValue(type + "UploadDWR", "");
        dwr.util.setValue(type + "Upload", "");
    }
    $(type+"Upload").disabled = !enable;
    ok[type] = !enable;
}

function _checkUpload(type, dwrFunction) {
    var uploadName = $(type + "Upload").value;
    var workfile = $("workUpload").value;
    var uploadEnabled = $(type + "RadioYes").checked;

    ok[type] = !uploadEnabled;
    dwr.util.setValue(type + "UploadDWR", "");

    if (uploadEnabled) {
        if (uploadName == "") {
            dwr.util.setValue(type + "UploadError", "1");
        // -- note: we call the dwr here although we now there will an error
        // -- since we need to get the right error-message
        }
        if (workfile != "") {
            dwrFunction(workfile, uploadName, getFileSize(type + "Upload"), getFileSize("workUpload"), {
                callback : function(reply) {
                    ok[type] = reply.valid;
                    dwr.util.setValue(type + "UploadDWR", reply.message);
                },
                errorHandler : _errorHandler
            });
        }
    }
}

// edit sample
function _checkSampleUpload() {
    var sampleName = $("sampleUpload").value;
    var workName = $("workUpload").value; // Feld workUpload, welches das Werk enthält gibt es in dieser Maske nicht, todo..

    dwr.util.setValue("sampleUploadDWR", "");

    if (sampleName == "") {
        dwr.util.setValue("sampleUploadError", "1");
    }
    if (workName != "") {
        uploadService.allowedSample(workName, sampleName, getFileSize("sampleUpload"), getFileSize("workUpload"), {
            callback : function(reply) {
                ok["sample"] = reply.valid;
                dwr.util.setValue("sampleUploadDWR", reply.message);
            },
            errorHandler : _errorHandler
        });
    }
}

// edit cover
function _checkCoverUpload() {
    var coverName = $("coverUpload").value;
    var workName = $("workUpload").value; // Feld workUpload, welches das Werk enthält gibt es in dieser Maske nicht, todo..

    dwr.util.setValue("coverUploadDWR", "");

    if (coverName == "") {
        dwr.util.setValue("coverUploadError", "1");
    }
    if (workName != "") {
        uploadService.allowedCover(workName, coverName, getFileSize("coverUpload"), getFileSize("workUpload"), {
            callback : function(reply) {
                ok["cover"] = reply.valid;
                dwr.util.setValue("coverUploadDWR", reply.message);
            },
            errorHandler : _errorHandler
        });
    }
}

function _showHideUpload(type, show) {
    // -- conditionally show/hide sample-upload
    if (show) {
        $(type+"UploadTable").hide();
        $(type+"RadioYes").checked = false;
        $(type+"RadioNo").checked = true;
        setEnableUpload(type, false);
    } else {
        $(type+"UploadTable").show();
    }
}

//-------------------------------------------------------------- public
function checksample() {
    _checkUpload("sample", uploadService.allowedSample);
}

function checkcover() {
    _checkUpload("cover", uploadService.allowedCover);
}

function upload() {
    if (!ok["sample"]) {
        checksample();
    }
    if (!ok["cover"]) {
        checkcover();
    }
    if (!workOk) {
        checkWork();
    }
    if (workOk && ok["sample"] && ok["cover"]) {
        showUploadProgressDialog('progressPopup');
        window.setTimeout(function(){
            _getUploadProgress(_renderUploadProgress, true);
        }, 100);
        if (!Prototype.Browser.WebKit) {
            window.setTimeout('$("formWorkUpload").submit()', 300);
        } else {
            window.setTimeout(function(){
                $("formWorkUpload").submit();
            }, 300);
        }
    }
    return false;
}

// edit sample; called by doEditMediaSample() in mediaHandler.js
function uploadSample(mediaId) {
    if (!ok["sample"]) {
        _checkSampleUpload(mediaId);
    }
    if (ok["sample"]) {
        showUploadProgressDialog('progressPopup');
        window.setTimeout(function(){
            _getUploadProgress(_renderUploadProgress, true);
        }, 100);
        if (!Prototype.Browser.WebKit) {
            window.setTimeout('$("formSampleUpload").submit()', 300);
        } else {
            window.setTimeout(function(){
                $("formSampleUpload").submit();
            }, 300);
        }
    }
    return false;
}

// edit cover; called by doEditMediaCover() in mediaHandler.js
function uploadCover(mediaId) {
    if (!ok["cover"]) {
        _checkCoverUpload(mediaId);
    }
    if (ok["cover"]) {
        showUploadProgressDialog('progressPopup');
        window.setTimeout(function(){
            _getUploadProgress(_renderUploadProgress, true);
        }, 100);
        if (!Prototype.Browser.WebKit) {
            window.setTimeout('$("formCoverUpload").submit()', 300);
        } else {
            window.setTimeout(function(){
                $("formCoverUpload").submit();
            }, 300);
        }
    }
    return false;
}

// ----------------------------------------------------------- progress
function showUploadProgressDialog(el) {
    var dialog = $(el);
    dialog.visible=false;
	
    Modalbox.show(dialog, {
        title: "Upload in progress",
        overlayOpacity: .55,
        width: 400,
        afterLoad: _onUploadProgressLoaded,
        inactiveFade: false
    });
}

function _onUploadProgressLoaded() {
    $("progressPopupCloseButton").hide();
    Modalbox.deactivate();
    resumeUpload();
}

function _renderUploadProgress(progress) {
    if (progress.percent < 0) {
        $("progressSection").hide();
        return true;
    }
    $("progressBar").style.display = "block";
    $("progressBarContent").style.width = parseInt(progress.percent * 3.5) + "px";
    window.document.title = progress.percent + "%";
    if (progress.percent == 100) {
        $("progressMessage").innerHTML = msgUploadDone;
    } else {
        $("progressMessage").innerHTML = msgUploadBeforePercent + "<span class='orange'>" + progress.percent + "%</span> " + msgUploadAfterPercent;
        window.setTimeout(function(){
            _getUploadProgress(_renderUploadProgress, false);
        }, 1000);
    }
    return true;
}

function _getUploadProgress(renderer, reset) {
    try {
        if (reset) {
            uploadService.resetProgress({
                callback: renderer
            });
        } else {
            uploadService.uploadProgress({
                callback: renderer
            });
        }
    } catch(e) {
        console.log(e);
    }
    return true;
}

function onCancelUploadClicked() {
    $("progressDialog").hide();
    $("cancelUploadConfirmation").show();
    return false;
}

function cancelUpload() {
    window.location.href = 'upload.html';
    return false;
}

// edit sample
function cancelSampleUpload() {
    //window.location.href = 'upload.html'; // TODO: wohin
    return false;
}

// edit cover
function cancelCoverUpload() {
    //window.location.href = 'upload.html'; // TODO: wohin
    return false;
}

function resumeUpload() {
    $("cancelUploadConfirmation").hide();
    $("progressDialog").show();
    return false;
}

// -------------------------------------------------------------- utils
function isImageUpload(el) {
    var a = el.value.split('.');
    var suffix = a[a.length-1];
    if (a.length > 1) {
        var idx = ['jpg', 'jpeg', 'gif', 'png', 'tif', 'tiff', 'eps'].indexOf(suffix.toLowerCase());
        return (idx >= 0);
    }
    return false;
}

function getFileSize(id){
    if (!Prototype.Browser.IE){
        file=$(id).files[0];
        if (file!=null){
            return file.fileSize;
        }
    }
    return -1;
}
