+    if (!e.lengthComputable && async_global_file.size != 0)
+        return;
+    var p = Math.round ((e.loaded + async_global_transfered) * 100 / (async_global_file.size));
+    if (p == 100)
+        show_upload_progression (' ');
+    else
+        show_upload_progression (p.toString() + '%');
+}
+
+function async_upload_push (code)
+{
+    if (async_global_transfered == async_global_file.size)
+    {
+        async_upload_end (code);
+        return;
+    }
+    var req = new XMLHttpRequest ();
+    req.upload.addEventListener ("progress", async_upload_progress, false);
+    req.addEventListener ("error", upload_failed, false);
+    req.addEventListener ("abort", upload_failed, false);
+    req.onreadystatechange = function ()
+    {
+        if (req.readyState == 4 && req.status == 200)
+        {
+            var res = req.responseText;
+            if (res == "Error")
+                return;
+            res = res.split ("\n");
+            var code = res[0]
+            async_global_transfered = async_global_transfering;
+            async_upload_push (code);
+        }
+    }
+    req.open ("POST", async_global_url + 'script.php?push_async' , true);
+
+    var chunk_size = parseInt (async_global_max_size * 0.50);
+    var start = async_global_transfered;
+    var end = start + chunk_size;
+    if (end >= async_global_file.size)
+        end = async_global_file.size;
+    var blob = async_global_file.slice (start, end);
+    async_global_transfering = end;
+
+    var form = new FormData();
+    form.append ("ref", async_global_ref);
+    form.append ("data", blob);
+    form.append ("code", code);
+    req.send (form);
+}
+
+function async_upload_end (code)
+{
+    var req = new XMLHttpRequest ();
+    req.addEventListener ("error", upload_failed, false);
+    req.addEventListener ("abort", upload_failed, false);
+    req.onreadystatechange = function ()
+    {
+        if (req.readyState == 4 && req.status == 200)
+        {
+            var res = req.responseText;
+            if (res == "Error")
+                return;
+            res = res.split ("\n");
+            if (async_global_time != 'none')
+            {
+                var d = new Date();
+                if (async_global_time == 'minute')
+                    d.setSeconds (d.getSeconds() + 60);
+                else if (async_global_time == 'hour')
+                    d.setSeconds (d.getSeconds() + 3600);
+                else if (async_global_time == 'day')
+                    d.setSeconds (d.getSeconds() + 86400);
+                else if (async_global_time == 'week')
+                    d.setSeconds (d.getSeconds() + 604800);
+                else if (async_global_time == 'month')
+                    d.setSeconds (d.getSeconds() + 2419200);
+                else
+                    return;
+                show_link (async_global_url, res[0], res[1], res[2], d.toString());
+            }
+            else
+                show_link (async_global_url, res[0], res[1], res[2]);
+        }
+    }
+    req.open ("POST", async_global_url + 'script.php?end_async' , true);
+
+    var form = new FormData();
+    form.append ("ref", async_global_ref);
+    form.append ("code", code);
+    req.send (form);
+}
+
+function upload (url, max_size)
+{
+    if (check_html5_file_api ()
+        && document.getElementById('file_select').files[0].size >= max_size)
+    {
+        async_upload_start (url,
+            max_size,
+            document.getElementById('file_select').files[0],
+            document.getElementById('select_time').value,
+            document.getElementById('input_key').value,
+            document.getElementById('one_time_download').checked
+            );
+    }
+    else
+    {
+        classic_upload (url,