var total_upload_size = 1;
var serial = '';
var upload_url = '/progress.cgi';

function progress(req) {
    if(req) {
        if(req.readyState == 4)  {
            if(req.status == 200) {
              var status = req.responseXML.getElementsByTagName("status")[0].firstChild.nodeValue;
              if (status == 'ok') {
                var update = new Array();
                update[0] = req.responseXML.getElementsByTagName("progress")[0].firstChild.nodeValue;
                update[1] = req.responseXML.getElementsByTagName("size")[0].firstChild.nodeValue;
                update[2] = req.responseXML.getElementsByTagName("elapsedtime")[0].firstChild.nodeValue;
                update[3] = req.responseXML.getElementsByTagName("filename")[0].firstChild.nodeValue;

                //update = request.responseText.split('|');
                if(update[1] != 0) total_upload_size = update[1];
                if (typeof(total_upload_size) == 'undefined') return null;

                document.getElementById('filename').innerHTML = update[3];
                var completed_upload_size = update[0];
                var elapsed_time = update[2];
                var progress_percent = total_upload_size > 0 ? Math.ceil((completed_upload_size / total_upload_size) * 100) : 0;

                if (progress_percent >= 50) document.getElementById('metertext').style.color = '#fff';
                document.getElementById('metertext').innerHTML                               = progress_percent + '%';

                var max_width = 500;
                var amount    = parseInt(progress_percent * max_width / 100);
                if (amount != '') document.getElementById('meterdone').style.width = amount + 'px';

                var transfer_rate = friendly_size(completed_upload_size/elapsed_time, 1);
                var total_time    = parseInt((elapsed_time * 100) / progress_percent);
                var remain_time   = format_time(eval(total_time - elapsed_time));
                if(completed_upload_size != ""  && completed_upload_size != 0) {
                  document.getElementById('uploadrate').innerHTML = '&nbsp;at&nbsp;' + transfer_rate + '/sec;';
                  var complete_text = completed_upload_size > 0 ? friendly_size(completed_upload_size, 0) : '0 KB';
                  complete_text += ' of ' + friendly_size(total_upload_size > 0 ? total_upload_size : 0, 0);
                  document.getElementById('uploadedsize').innerHTML = complete_text;
                  document.getElementById('remaintime').innerHTML   = ' ' + remain_time + ' remain';
                }
                if(progress_percent == 100) {
                  document.getElementById('meterdone').style.width = max_width - 1 + 'px';
                  document.getElementById('remaintime').innerHTML  = ' 00:00:00 remain';
                  document.getElementById('meterinfo').innerHTML   = 'Upload complete! The server is now processing your file. Please wait...';
                  return null;
                } 
                window.setTimeout("loadXML('" + upload_url + "?serial=" + serial + "', 'progress')", 700);
              }
              else if (status == 'nolog') {
                window.setTimeout("loadXML('" + upload_url + "?serial=" + serial + "', 'progress')", 700);
              }
              else {
                window.location = "/?error=" + status;
                return null;
              }
            }
            else    {
                alert('Error...');
                window.location = "/";
            }
        }
    }
}
  
function startupload(key, root_url) {
    if (document.getElementById('term') && !document.getElementById('term').checked) {
        alert("You must acept our Terms of Service!");
        return
    }

    if (root_url != '') upload_url = root_url + upload_url;
    serial = key;

    document.getElementById('upload_form').submit();
    document.getElementById('uploadpanel').className = 'hidden';
    document.getElementById('progress').className = 'display';
    window.setTimeout("loadXML('" + upload_url + "?serial=" + serial + "', 'progress')", 1200);
}

function loadXML(url, func) {
    var request = false;
    if(window.XMLHttpRequest) {
        request = new XMLHttpRequest();
        if(request.overrideMimeType) request.overrideMimeType('text/xml');
    }
    else if(window.ActiveXObject) {
        try { request = new ActiveXObject("Msxml2.XMLHTTP"); }
        catch (e) {
            try { request = new ActiveXObject("Microsoft.XMLHTTP"); }
            catch (e) {}
        }
    }
    if(!request) {
        alert('Error: could not create XMLHTTP object.');
        return false;
    }
    request.onreadystatechange = function() { eval(func + '(request)'); }
    request.open('GET', url, true);
    request.send(null);
}

function friendly_size(num, force_kb, total_size) {
    if (num < 100) return num + ' bytes';
    var force_mb = total_size > 999999 ? 1 : 0;
    var unit;
    if((num > 999999 || force_mb) && !force_kb) {
        num = num/(1024*1024);
        num = num.toString();
        var testnum = num.replace( /^(\d+\.\d).*/, '$1' );
        if(testnum == '0.0') testnum = num.replace( /^(\d+\.\d\d).*/, '$1' );
        if(testnum == '0.00') testnum = num.replace( /^(\d+\.\d\d\d).*/, '$1' );
        num = testnum;
        unit = 'MB';
    }
    else {
        num = parseInt(num/(1024));
        unit = 'KB';
    }
    return num + '&nbsp;' + unit;
}

function format_time(num) {
    if(num >= 60 * 60){
        var secs_left = num % (60 * 60);
        var mins_left = secs_left / 60;
        mins_left = mins_left.toString();
        mins_left = mins_left.replace( /^(\d+)\..*/, '$1' ); // show no decimal places.
        mins_left = mins_left.replace( /^(\d)$/, '0$1' ); // for single-digits, prepend a zero.

        num = num/(60*60);
        num = num.toString();
        num = num.replace( /^(\d+)\..*/, '$1' ); // show no decimal places.
        num = num + ':' + mins_left + ':00';
    }
    else if(num >= 60) {
        var secs_left = num % 60;
        secs_left = secs_left.toString().replace( /^(\d)$/, '0$1' ); // for single-digits, prepend a zero.

        num = num/60;
        num = num.toString();
        num = num.replace( /^(\d+)\..*/, '$1' ); // show no decimal places.
        num = num.replace( /^(\d)$/, '0$1' ); // for single-digits, prepend a zero.

        num = '00:' + num + ':' + secs_left;
    }
    else  {
        num = num.toString();
        num = num.replace( /^(\d+)\..*/, '$1' ); // show no decimal places.
        num = num.replace( /^(\d)$/, '0$1' ); // for single-digits, prepend a zero.
        num = '00:00:' + num;
    }
    return num;
}

function bookmark(url, title) {
    if (!title) title = "wiiUpload - Simple Free File Hosting";
    if (window.sidebar) { // Mozilla Firefox Bookmark
        window.sidebar.addPanel(title, url,"");
    } 
    else if( window.external ) { // IE Favorite
        window.external.AddFavorite( url, title); 
    }
    else if(window.opera && window.print) { // Opera Hotlist
        alert("Your web browser does not support automatically adding Bookmarks/Favorites.  Press 'Ctrl-D' in Firefox or 'Ctrl-T' in Opera to manually bookmark the page.");
        return true;
    }
}

function copyText(name) {
    var srcObject = document.getElementById(name);
    var error = "Copy Link will not work with your web browser.\nPlease select the text and press 'Ctrl-C' to copy it manually.\n";
    if(window.clipboardData && clipboardData.setData) clipboardData.setData("Text", document.getElementById(name).value);
    else {
        try {
            var holdtext = document.getElementById('holdtext');
            holdtext.value = document.getElementById(name).value;
            var Copied = holdtext.createTextRange();
            Copied.execCommand("Copy");
            alert("The code/link was copied to your clipboard");
        } catch (err) {
            if (window.netscape) { 
                try {
                    user_pref("signed.applets.codebase_principal_support", true);
                    var clip = Components.classes['@mozilla.org/widget/clipboard;[[[[1]]]]'].createInstance(Components.interfaces.nsIClipboard);
                    if (!clip) {
                        alert(error);
                        srcObject.select();
                        srcObject.focus();
                        return;
                    }
                    var trans = Components.classes['@mozilla.org/widget/transferable;[[[[1]]]]'].createInstance(Components.interfaces.nsITransferable);
                    if (!trans) {
                        alert(error);
                        srcObject.select();
                        srcObject.focus();
                        return;
                    }
                    trans.addDataFlavor('text/unicode');
                    var str = new Object();
                    var len = new Object();
                    var str = Components.classes["@mozilla.org/supports-string;[[[[1]]]]"].createInstance(Components.interfaces.nsISupportsString);
                    var copytext=meintext;
                    str.data=copytext;
                    trans.setTransferData("text/unicode",str,copytext.length*[[[[2]]]]);
                    var clipid=Components.interfaces.nsIClipboard;
                    if (!clip) {
                        alert(error);
                        srcObject.select();
                        srcObject.focus();
                        return;
                    }
                    clip.setData(trans,null,clipid.kGlobalClipboard);
                }
                catch (err2) {
                    alert(error);
                    srcObject.select();
                    srcObject.focus();
                }
            }
            else 
                alert(error);
                srcObject.select();
                srcObject.focus();
        }
    }
}
function check_all(form, name, flag) {
    for (var i=0; i<form.elements.length; i++) {
        var e = form.elements[i];
        if (e.type == 'checkbox' && !e.disabled && e.name == name) e.checked = flag;
    }
}
