var interval = null;
var stop_ajax = false;
function getUuid() {
    uuid = "";
    for (i = 0; i < 32; i++) {
        uuid += Math.floor(Math.random() * 16).toString(16);
    }
    return uuid;
}
function startUpload(formId) {
    var form = $(formId);
    handleUploadStatus('uploading', 0);
    var uuid = getUuid();
    var form_action = form.action;
    form.action = form_action + '/?X-Progress-ID=' + uuid;
    interval = setInterval(
    function () {
        fetch(uuid);
    },
    2000
    );
    form.submit();
    form.action = form_action;
    form.disable();
}
function setBarProgress(barId, percent) {
    if(percent <0 || percent > 100) {
        return false;
    }
    var bar = document.getElementById(barId);
    bar.style.width = percent + "%";
    return true;
}
function showMessage(id){
    var array_messages = $$('div.div_messages');
    array_messages.each(
        function(item){
            if (item.id != id && item.style.display != 'none'){
                item.hide();
            }
        }
    );
    $(id).show();
}
function stop_ajax_execution(){
    clearInterval(interval);
    interval = null;
}
function handleUploadStatus(status, percent){
    if (interval !=null ){
    switch (status) {
	case 'errorFileSize':
        stop_ajax_execution();
        showMessage('error-filesize');	
	break;
        case 'errorFormat':
        stop_ajax_execution();
        showMessage('error-format');
        break;
        case 'limitExceed':
        stop_ajax_execution();
        showMessage('limit-exceed');
        break;          
        case 'error':
        stop_ajax_execution();
        showMessage('progress-error');
        break;
        case 'uploading':
        setBarProgress('progress-div', percent);
        showMessage('progress-load');
        break;
        case 'done':
        stop_ajax_execution();
        setBarProgress('progress-div', percent);
        showMessage('upload-successful');
        break;
    }
    }
    return true;
}
function fetch(uuid) {
    var ajax = new Ajax.Request('/progress', {
        method: 'get',
        requestHeaders: ["X-Progress-ID", uuid],
        onSuccess: function(transport) {
            var upload = eval(transport.responseText);
            //$('tester').innerHTML = transport.responseText;
            if (upload.state == 'uploading') {
                handleUploadStatus(upload.state, Math.floor(100 * upload.received / upload.size));
            }
            if (upload.state == 'done') {
                handleUploadStatus(upload.state, 100);
            }
            if (upload.state == 'error') {
                handleUploadStatus(upload.state, 0);
            }
        }
    });
}

