//*************************************************************************************************************** // // Name: upload.js // //*************************************************************************************************************** var Step_1 = "Step 1: Uploading File"; var Step_2 = "Step 2: Analyzing File"; var Step_3 = "Step 3: Checking for Virus"; var File_Null = "Please Choose A File To Upload."; var Initializing = "Initializing..."; var Upload_In_Progress = "Upload In Progress"; var Error_status_code = "Error: returned status code"; var error = "Error"; var day = "Day"; var hor = "Hour"; var min = "Min"; var sec = "Sec"; var Error_No_AJAX = "Error: Your browser does not support AJAX"; var upload_range = 1; var total_upload_size; var get_status_speed; var get_status_url; var get_data_loop = true; var seconds = 0; var minutes = 0; var hours = 0; var info_width = 0; var info_bytes = 0; var info_time_width = 500; var info_time_bytes = 15; var cedric_hold = true; var num_reads = 0; var total_bytes = 0; // Disable Web Page function disable_webpage() { document.getElementById("overLayer").style.top = '0px'; document.getElementById("overLayer").style.height = document.body.scrollHeight+50; document.getElementById("overLayer").style.display = 'block'; document.getElementById("check_box").style.display='none'; document.getElementById("upload_box").style.display='none'; document.getElementById("error_box").style.display='none'; document.getElementById("upload_bar").style.display='none'; document.getElementById("message_box").style.display='none'; document.getElementById("scan_box").style.display='none'; document.getElementById("xbody").style.overflow = 'hidden'; } function enable_webpage() { document.getElementById("overLayer").style.height = '0px'; document.getElementById("overLayer").style.display = 'none'; document.getElementById("xbody").style.overflow = 'auto'; iniFilePage(); } function step_1() { disable_webpage(); document.getElementById("step").innerHTML = Step_1; document.getElementById("upload_box").style.display='block'; document.getElementById("upload_bar").style.display='block'; document.getElementById("progress_bar").style.display='block'; } function step_2() { disable_webpage(); document.getElementById("upload_status").style.width = '0px' document.getElementById("step").innerHTML = Step_2; document.getElementById("check_box").style.display='block'; document.getElementById("upload_bar").style.display='block'; document.getElementById("progress_bar").style.display='block'; } function step_3() { disable_webpage(); document.getElementById("upload_status").style.width = '0px'; document.getElementById("step").innerHTML = Step_3; document.getElementById("scan_box").style.display='block'; document.getElementById("upload_bar").style.display='block'; document.getElementById("progress_bar").style.display='block'; } function error_box(msg) { disable_webpage(); document.getElementById("error_box").style.display='block'; document.getElementById('step').innerHTML = error; document.getElementById('progress_info').innerHTML = msg; } function message_box() { disable_webpage(); document.getElementById("message_box").style.display='block'; document.getElementById('step').innerHTML = ''; document.getElementById('progress_info').innerHTML = ''; } function step_finish() { enable_webpage(); } function convertBytes (bytes) { if(bytes > (1024*1024*1024)) { res=(bytes/(1024*1024*1024)); // g unit="GB"; } else if(bytes > (1024*1024)) { res=(bytes/(1024*1024)); // m unit="MB"; } else if(bytes > (1024)) { res=(bytes/(1024)); // k unit="KB"; } else { res=bytes; unit="Byte"; } return getFormatData(res, unit); } function convertSeconds (seconds) { if(seconds > (60*60*24)) { restime=(seconds/(60*60*24)); // d unittime=day; } else if(seconds > (60*60)) { restime=(seconds/(60*60)); // h unittime=hor; } else if(seconds > (60)) { restime=(seconds/(60)); // m unittime=min; } else { restime=seconds; unittime=sec; } return getFormatData(restime, unittime); } function getFormatData (num, unit) { var ret=new String(num); var re=/^(\d+)(\.\d)?/; var mc=re.exec(ret); var rt=new String(); if(mc!=null) { if(mc[1]!=null) rt+=mc[1]; if(mc[2]!=null) rt+=mc[2]; return rt+" "+unit; } else return num+" "+unit; } // Make sure the user selected at least one file function checkNullFileCount(){ var null_file_count = 0; if(document.form_upload.elements['file'].value == ""){ null_file_count++; } if(null_file_count == upload_range){ alert(File_Null); return true; } else{ return false; } } // Handle user pressing 'Enter' in the upload slots function handleKey(event){ if(document.all){ if(window.event.keyCode == 13){ return false; } } else{ if(event && event.which == 13){ return false; } } } // Submit the upload form function uploadFiles(){ if(checkNullFileCount()){ return false; } var total_uploads = 0; if(document.form_upload.elements['file'].value != ""){ total_uploads++; } document.form_upload.submit(); document.getElementById('upload_button').disabled = true; iniProgressRequest(); getElapsedTime(); document.form_upload.elements['file'].disabled = true; step_1(); } // Reset the file upload page function resetForm(){ location.href = self.location; } // Hide the progress bar function hideProgressBar(){ document.getElementById('progress_bar').style.display = "none"; } // Initialize the file upload page function iniFilePage(){ resetProgressBar(); document.form_upload.elements['file'].disabled = false; document.form_upload.elements['file'].value = ""; document.getElementById('rescan_button').disabled =false; document.getElementById('progress_info').innerHTML = ""; document.getElementById('upload_button').disabled = false; document.getElementById('progress_bar').style.display = "none"; document.form_upload.reset(); } // Reset the progress bar function resetProgressBar(){ get_data_loop = true; seconds = 0; minutes = 0; hours = 0; info_width = 0; info_bytes = 0; cedric_hold = true; document.getElementById('step').innerHTML = ""; document.getElementById('upload_status').style.width = '0px'; document.getElementById('percent').innerHTML = '0%'; document.getElementById('current').innerHTML = 0; document.getElementById('total_kbytes').innerHTML = ''; document.getElementById('time').innerHTML = 0; document.getElementById('remain').innerHTML = 0; document.getElementById('speed').innerHTML = 0; document.getElementById('file_name').innerHTML = ''; document.getElementById('file_size').innerHTML = ''; document.getElementById('file_type').innerHTML = ''; document.getElementById('file_md5').innerHTML = ''; document.getElementById('file_sha1').innerHTML = ''; document.getElementById('compress_file').innerHTML = ''; document.getElementById('progress_info').innerHTML = ''; document.getElementById('scan_position').innerHTML = ''; document.getElementById('scan_scanner').innerHTML = ''; document.getElementById('scan_last_scan').innerHTML = ''; document.getElementById('scan_suspicious_degree').innerHTML = ''; document.getElementById('scan_pic').src= '/images/av/null.gif'; } // Stop the upload function stopUpload(){ try{ window.stop(); } catch(e){ try{ document.execCommand('Stop'); } catch(e){} } } // Make the progress bar smooth function smoothCedricStatus(){ if(info_width < progress_bar_width && !cedric_hold){ info_width++; document.getElementById('upload_status').style.width = info_width + 'px'; } if(get_data_loop){ self.setTimeout("smoothCedricStatus()", info_time_width); } } // Make the bytes uploaded smooth function smoothCedricBytes(){ if(info_bytes < total_upload_size && !cedric_hold){ info_bytes++; document.getElementById('current').innerHTML = convertBytes(info_bytes * 1024); if (total_bytes < convertBytes(info_bytes * 1024)) {document.getElementById('current').innerHTML = total_bytes;} } if(get_data_loop){ self.setTimeout("smoothCedricBytes()", info_time_bytes); } } // Update the Cedric progress bar values function updateCedricStatus(stats, bytes){ //METHOD 1 - Deviation /******************************************************************************* var deviant_bytes = bytes + (total_upload_size / 10); //Add 2.5% deviation if(info_bytes > deviant_bytes){ cedric_hold = true; } else{ cedric_hold = false; if(stats > info_width){ info_width = stats; } if(bytes > info_bytes){ info_bytes = bytes; } } ********************************************************************************/ //METHOD 2 - Hold on the first 'x' reads then auto-correct "jump" /******************************************************************************* cedric_hold = false; if(num_reads > 7){ info_width = stats; info_bytes = bytes; } else{ if(stats > info_width){ info_width = stats; } else{ cedric_hold = true; } if(bytes > info_bytes){ info_bytes = bytes; } else{ cedric_hold = true; } num_reads++; } ********************************************************************************/ //METHOD 3 - Hold until actual info catches up /*******************************************************************************/ cedric_hold = false; if(stats > info_width){ info_width = stats; } else{ cedric_hold = true; } if(bytes > info_bytes){ info_bytes = bytes; } else{ cedric_hold = true; } /********************************************************************************/ //METHOD 4 - Auto-correct "jump" on every read /* cedric_hold = false; info_width = stats; info_bytes = bytes; */ } // Get the progress of the upload function getProgressStatus(){ var jsel = document.createElement('SCRIPT'); jsel.type = 'text/javascript'; jsel.src = get_status_url + "&rnd_id=" + Math.random(); document.body.appendChild(jsel); if(get_data_loop){ self.setTimeout("getProgressStatus()", get_status_speed); } } // Calculate the time spent uploading function getElapsedTime(){ seconds++; if(seconds == 60){ seconds = 0; minutes++; } if(minutes == 60){ minutes = 0; hours++; } var hr = "" + ((hours < 10) ? "0" : "") + hours; var min = "" + ((minutes < 10) ? "0" : "") + minutes; var sec = "" + ((seconds < 10) ? "0" : "") + seconds; document.getElementById('time').innerHTML = hr + ":" + min + ":" + sec; if(get_data_loop){ self.setTimeout("getElapsedTime()", 1000); } } // Create the AJAX request function createRequestObject(){ var req = false; if(window.XMLHttpRequest){ req = new XMLHttpRequest(); if(req.overrideMimeType){ req.overrideMimeType('text/xml'); } } else if(window.ActiveXObject){ try{ req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e){ try{ req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e){} } } if(!req){ document.getElementById('progress_info').innerHTML = Error_No_AJAX; return false; } else{ return req; } } // Initialize the progress bar function iniProgressRequest(){ var req = false; req = createRequestObject(); if(req){ document.getElementById('progress_info').innerHTML = Initializing; req.open("GET", path_to_ini_status_script + "&rnd_id=" + Math.random(), true); req.onreadystatechange = function(){ iniProgressResponse(req); }; req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); req.send(null); } } // Initialize the progress bar function iniProgressResponse(req){ if(req.readyState == 4){ if(req.status == 200){ var xml = req.responseXML; if(xml.getElementsByTagName('error_status').item(0).firstChild.nodeValue == 1){ error_box(xml.getElementsByTagName('error_msg').item(0).firstChild.nodeValue); document.getElementById('progress_info').innerHTML = xml.getElementsByTagName('error_msg').item(0).firstChild.nodeValue; if(xml.getElementsByTagName('stop_upload').item(0).firstChild.nodeValue == 1){ stopUpload(); } } else{ get_status_speed = xml.getElementsByTagName('get_data_speed').item(0).firstChild.nodeValue; get_data_loop = true; // document.getElementById('upload_div').style.display = "none"; get_status_url = "/get_status.php?temp_dir_sid=" + xml.getElementsByTagName('temp_dir_sid').item(0).firstChild.nodeValue + "&start_time=" + xml.getElementsByTagName('start_time').item(0).firstChild.nodeValue + "&total_upload_size=" + xml.getElementsByTagName('total_bytes').item(0).firstChild.nodeValue + "&cedric_progress_bar=" + xml.getElementsByTagName('cedric_progress_bar').item(0).firstChild.nodeValue; document.getElementById('progress_bar').style.display = ""; total_bytes = convertBytes(Math.round(Number(xml.getElementsByTagName('total_bytes').item(0).firstChild.nodeValue))); document.getElementById('total_kbytes').innerHTML = convertBytes(Math.round(Number(xml.getElementsByTagName('total_bytes').item(0).firstChild.nodeValue))); document.getElementById('progress_info').innerHTML = Upload_In_Progress; getProgressStatus(); if(xml.getElementsByTagName('cedric_progress_bar').item(0).firstChild.nodeValue == 1){ total_upload_size = xml.getElementsByTagName('total_bytes').item(0).firstChild.nodeValue; smoothCedricBytes(); smoothCedricStatus(); } } } else{ document.getElementById('progress_info').innerHTML = Error_status_code + " " + req.status + " " + req.statusText; //stopUpload(); } } }