//******************************************************************************************************
//   ATTENTION: THIS FILE HEADER MUST REMAIN INTACT. DO NOT DELETE OR MODIFY THIS FILE HEADER.
//
//   Name: uu_file_upload.js
//   Revision: 2.1
//   Date: 25/05/2007 11:09PM
//   Link: http://uber-uploader.sourceforge.net
//   Initial Developer: Peter Schmandra  http://www.webdice.org
//
//   Licence:
//   The contents of this file are subject to the Mozilla Public
//   License Version 1.1 (the "License"); you may not use this file
//   except in compliance with the License. You may obtain a copy of
//   the License at http://www.mozilla.org/MPL/
// 
//   Software distributed under the License is distributed on an "AS
//   IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
//   implied. See the License for the specific language governing
//   rights and limitations under the License.
//
//***************************************************************************************************************

var upload_range = 1;


// Check the file format before uploading
function checkFileNameFormat(){
	if(!check_file_name_format){ return false; }
	
	for(var i = 0; i < upload_range; i++){
		if(document.form_upload.elements['upfile_' + i].value != ""){
			var string = document.form_upload.elements['upfile_' + i].value;
			var num_of_last_slash = string.lastIndexOf("\\");

			if(num_of_last_slash < 1){ num_of_last_slash = string.lastIndexOf("/"); }

			var file_name = string.slice(num_of_last_slash + 1, string.length);
			var re = /^[\w][\w\.\- ]{1,32}$/i;
				
			if(!re.test(file_name)){	
				alert("Sorry, dieses Format der Datei ist nicht erlaubt. Stellen Sie bitte sicher, dass Ihre Dateinamen dieses Format erfüllen \n\n1. Datei darf nicht 32 Zeichen überschreiten\n2. Erlaubte Zeichen sind 1-9, a-z, A-Z, '_', '-'\n");
				return true;
			}
		}
	}
	return false;
}

// Check for illegal file extentions
function checkDisallowFileExtensions(){
	if(!check_disallow_extensions){ return false; }
	
	for(var i = 0; i < upload_range; i++){
		if(document.form_upload.elements['upfile_' + i].value != ""){
			if(document.form_upload.elements['upfile_' + i].value.match(disallow_extensions)){
				var string = document.form_upload.elements['upfile_' + i].value;
				var num_of_last_slash = string.lastIndexOf("\\");

				if(num_of_last_slash < 1){ num_of_last_slash = string.lastIndexOf("/"); }

				var file_name = string.slice(num_of_last_slash + 1, string.length);
				var file_extension = file_name.slice(file_name.indexOf(".")).toLowerCase();
				
				alert('Sorry, die gewählte Datei mit der Endung"' + file_extension + '" ist nicht möglich.');
				return true;
			}
		}
	}
	return false;
}

// Check for legal file extentions
function checkAllowFileExtensions(){
	if(!check_allow_extensions){ return false; }
	
	for(var i = 0; i < upload_range; i++){
		if(document.form_upload.elements['upfile_' + i].value != ""){
			if(!document.form_upload.elements['upfile_' + i].value.match(allow_extensions)){
				var string = document.form_upload.elements['upfile_' + i].value;
				var num_of_last_slash = string.lastIndexOf("\\");

				if(num_of_last_slash < 1){ num_of_last_slash = string.lastIndexOf("/"); }

				var file_name = string.slice(num_of_last_slash + 1, string.length);
				var file_extension = file_name.slice(file_name.indexOf(".")).toLowerCase();
				
				alert('Sorry, die gewählte Datei mit der Endung "' + file_extension + '" ist nicht möglich. \n\n Nutzen Sie unseren Service !Datenübergabe!');
				return true;
			}
		}
	}
	return false;
}

// Make sure the user selected at least one file
function checkNullFileCount(){
	if(!check_null_file_count){ return false; }
  	
	var null_file_count = 0;
  	
	for(var i = 0; i < upload_range; i++){
		if(document.form_upload.elements['upfile_' + i].value == ""){ null_file_count++; }
	}
  	
	if(null_file_count == upload_range){
		alert("Bitte wählen Sie eine Datei zum Hochladen aus.");
		return true;
	}
	else{ return false; }
}

// Make sure the user is not uploading duplicate files
function checkDuplicateFileCount(){
	if(!check_duplicate_file_count){ return false; }
  	
	var duplicate_flag = false;
	var file_count = 0;
	var duplicate_msg = "Duplicate Upload Files Detected.\n\n";
	var file_name_array = new Array();
        
	for(var i = 0; i < upload_range; i++){
		if(document.form_upload.elements['upfile_' + i].value != ""){
			var string = document.form_upload.elements['upfile_' + i].value;
			var num_of_last_slash = string.lastIndexOf("\\");

			if(num_of_last_slash < 1){ num_of_last_slash = string.lastIndexOf("/"); }

			var file_name = string.slice(num_of_last_slash + 1, string.length);
			            
			file_name_array[i] = file_name;
		}
	}
  	
	var num_files = file_name_array.length;
       
	for(var i = 0; i < num_files; i++){
		for(var j = 0; j < num_files; j++){
			if(file_name_array[i] == file_name_array[j] && file_name_array[i] != null){ file_count++; }
		}
		if(file_count > 1){
			duplicate_msg += 'Duplicate file "' + file_name_array[i] + '" detected in slot ' + (i + 1) + ".\n";
			duplicate_flag = true;
		}
		file_count = 0;
	}
       
	if(duplicate_flag){ 
		alert(duplicate_msg);
		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(checkFileNameFormat()){ return false; }
	if(checkDisallowFileExtensions()){ return false; }
	if(checkAllowFileExtensions()){ return false; }
	if(checkNullFileCount()){ return false; }
	if(checkDuplicateFileCount()){ return false; }
	
	var total_uploads = 0;
	
	for(var i = 0; i < upload_range; i++){
		if(document.form_upload.elements['upfile_' + i].value != ""){ total_uploads++; }
	}

        mywin = window.open('', 'meter', "toolbar=0,directories=0,status=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=320,height=250,left = 490,top = 462");
        mywin.document.write(codeLadeanzeige(path_to_ini_status_script, progress_bar_width, cedric_progress_bar));
	

	document.form_upload.submit();
	document.getElementById('upload_button').disabled = true;
	
//	iniProgressRequest();
	
	for(var i = 0; i < upload_range; i++){ document.form_upload.elements['upfile_' + i].disabled = true; }	
}

// Reset the file upload page 
function resetForm(){ location.href = self.location; }

// Hide the progress bar
function hideProgressBar(){ document.getElementById('progress_bar').style.display = "none"; }

// Stop the upload
function stopUpload(){
	try{ window.stop(); }
	catch(e){
		try{ document.execCommand('Stop'); }
		catch(e){} 
	}
}

// Add one upload slot
function addUploadSlot(num){
	if(upload_range < max_upload_slots){
		if(num == upload_range){
			var up = document.getElementById('upload_slots');
			var dv = document.createElement("div");
			
			dv.innerHTML = '<input type="file" name="upfile_' + upload_range + '" size="90" onChange="addUploadSlot('+(upload_range + 1)+')" onKeypress="return handleKey(event)">';
			up.appendChild(dv);
			upload_range++;
		}
	}
}



function codeLadeanzeige(scriptpath, barwidth, cedric){

var popup_code = "";

popup_code += "<html><head><title>Upload Status</title>\n";
popup_code += "  <script language=\"javascript\" type=\"text/javascript\">\n";
popup_code += "    var path_to_ini_status_script = \""+scriptpath+"\";";
popup_code += "    var cedric_progress_bar = " + cedric + ";";
popup_code += "    var progress_bar_width = " + barwidth + ";\n";



// Initialize the file upload page
popup_code += "var upload_range = 1;\n";
popup_code += "var get_status_speed;\n";
popup_code += "var get_status_url;\n";
popup_code += "var get_data_loop = false;\n";
popup_code += "var seconds = 0;\n";
popup_code += "var minutes = 0;\n";
popup_code += "var hours = 0;\n";
popup_code += "var info_width = 0;\n";
popup_code += "var info_bytes = 0;\n";
popup_code += "var info_time_width = 200;\n";
popup_code += "var info_time_bytes = 15;\n";
popup_code += "var cedric_hold = true;\n";
popup_code += "var total_upload_size = 0;\n";
popup_code += "var total_Kbytes = 0;\n";

popup_code += "function iniFilePage(){\n";
popup_code += "	resetProgressBar();\n";
	
popup_code += "	for(var i = 0; i < upload_range; i++){\n";
popup_code += "		document.form_upload.elements['upfile_' + i].disabled = false;\n";
popup_code += "		document.form_upload.elements['upfile_' + i].value = \"\";\n";
popup_code += "	}\n";
	
popup_code += "	document.getElementById('progress_info').innerHTML = \"\";\n";
popup_code += "	document.getElementById('upload_button').disabled = false;\n";
popup_code += "	document.getElementById('progress_bar').style.display = \"none\";\n";
popup_code += "	document.form_upload.reset();\n";
popup_code += "}\n";

// Reset the progress bar
popup_code += "function resetProgressBar(){\n";
popup_code += "	get_status_url = \"\";\n";
popup_code += "	get_data_loop = false;\n";
popup_code += "	seconds = 0;\n";
popup_code += "	minutes = 0;\n";
popup_code += "	hours = 0;\n";
popup_code += "	info_width = 0;\n";
popup_code += "	info_bytes = 0;\n";
popup_code += "	cedric_hold = true;\n";
popup_code += "	total_upload_size = 0;\n";
popup_code += "	total_Kbytes = 0;\n";
	
popup_code += "	document.getElementById('upload_status').style.width = '0px';\n";
popup_code += "	document.getElementById('percent').innerHTML = '0%';\n";
popup_code += "	document.getElementById('current').innerHTML = 0;\n";
popup_code += "	document.getElementById('total_kbytes').innerHTML = '';\n";
popup_code += "	document.getElementById('time').innerHTML = 0;\n";
popup_code += "	document.getElementById('remain').innerHTML = 0;\n";
popup_code += "	document.getElementById('speed').innerHTML = 0;\n";
popup_code += "}\n";



// Make the progress bar smooth
popup_code += "function smoothCedricStatus(){\n";
popup_code += "	if(info_width < progress_bar_width && !cedric_hold){\n";
popup_code += "		info_width++;\n";
popup_code += "		document.getElementById('upload_status').style.width = info_width + 'px';\n";
popup_code += "	}\n";
	
popup_code += "	if(get_data_loop){ self.setTimeout(\"smoothCedricStatus()\", info_time_width); }\n";
popup_code += "}\n";

// Make the bytes uploaded smooth
popup_code += "function smoothCedricBytes(){\n";
popup_code += "	if(info_bytes < total_Kbytes && !cedric_hold){\n";
popup_code += "		info_bytes++;\n";
popup_code += "		document.getElementById('current').innerHTML = info_bytes;\n";
popup_code += "	}\n";
	
popup_code += "	if(get_data_loop){ self.setTimeout(\"smoothCedricBytes()\", info_time_bytes); }\n";
popup_code += "}\n";

// Get the progress of the upload
popup_code += "function getProgressStatus(){\n";
popup_code += "	var jsel = document.createElement('SCRIPT');\n";

popup_code += "	jsel.type = 'text/javascript';\n";
popup_code += "	jsel.src = get_status_url + \"&rnd_id=\" + Math.random();\n";
	
popup_code += "	document.body.appendChild(jsel);\n";
	
popup_code += "	if(get_data_loop){ self.setTimeout(\"getProgressStatus()\", get_status_speed); }\n";
popup_code += "}\n";

// Calculate and display upload stats
popup_code += "function setProgressStatus(bytes_read, lapsed_time, uploaded_files){\n";
popup_code += "	var byte_speed = 0;\n";
popup_code += "	var time_remaining = 0;\n";
	
popup_code += "	if(lapsed_time > 0){ byte_speed = bytes_read / lapsed_time; }\n";
popup_code += "	if(byte_speed > 0){ time_remaining = Math.round((total_upload_size - bytes_read) / byte_speed); }\n";

popup_code += "	if(cedric_progress_bar == 1){\n";
popup_code += "		if(byte_speed != 0){\n";
popup_code += "			info_time_width = Math.round(total_upload_size * 1000 / (byte_speed * progress_bar_width));\n";
popup_code += "			info_time_bytes = Math.round(1024000 / byte_speed);\n";
popup_code += "		}\n";
popup_code += "		else{\n";
popup_code += "			info_time_width = 200;\n";
popup_code += "			info_time_bytes = 15;\n";
popup_code += "		}\n";
popup_code += "	}\n";
	
	// Calculate percent finished
popup_code += "	var percent_float = bytes_read / total_upload_size;\n";
popup_code += "	var percent = Math.round(percent_float * 100);\n";
popup_code += "	var progress_bar_status = Math.round(percent_float * progress_bar_width);\n";
	
	// Calculate time remaining
popup_code += "	var remaining_sec = (time_remaining % 60); \n";
popup_code += "	var remaining_min = (((time_remaining - remaining_sec) % 3600) / 60);\n";
popup_code += "	var remaining_hours = ((((time_remaining - remaining_sec) - (remaining_min * 60)) % 86400) / 3600);\n";

popup_code += "	if(remaining_sec < 10){ remaining_sec = '0' + remaining_sec; }\n";
popup_code += "	if(remaining_min < 10){ remaining_min = '0' + remaining_min; }\n";
popup_code += "	if(remaining_hours < 10){ remaining_hours = '0' + remaining_hours; }\n";

popup_code += "	var time_remaining_f = remaining_hours + ':' + remaining_min + ':' + remaining_sec; \n";
popup_code += "	var Kbyte_speed = Math.round(byte_speed / 1024);\n";
popup_code += "	var Kbytes_read = Math.round(bytes_read / 1024);\n";
	
popup_code += "	if(cedric_progress_bar == 1){\n";
popup_code += "		cedric_hold = false;\n";

   		//if(progress_bar_status > info_width && Kbytes_read > info_bytes){ 
   		//	info_width = progress_bar_status;
   		//	info_bytes = Kbytes_read; 
   		//}
   		//else{ cedric_hold = true; }
   		
popup_code += "		info_width = progress_bar_status;\n";
popup_code += "		info_bytes = Kbytes_read;\n";
popup_code += "	}\n";
popup_code += "	else{\n";
popup_code += "		document.getElementById('upload_status').style.width = progress_bar_status + 'px';\n";
popup_code += "		document.getElementById('current').innerHTML = Kbytes_read;\n";
popup_code += "	}\n";

popup_code += "	document.getElementById('percent').innerHTML = percent + '%';\n";
popup_code += "	document.getElementById('remain').innerHTML = time_remaining_f;\n";
popup_code += "	document.getElementById('speed').innerHTML = Kbyte_speed;\n";
popup_code += "}\n";


// Calculate the time spent uploading
popup_code += "function getElapsedTime(){\n";
popup_code += "	seconds++;\n";
    	
popup_code += "	if(seconds == 60){\n";
popup_code += "		seconds = 0;\n";
popup_code += "		minutes++;\n";
popup_code += "	}\n";
    	
popup_code += "	if(minutes == 60){\n";
popup_code += "		minutes = 0;\n";
popup_code += "		hours++;\n";
popup_code += "	}\n";
    	
popup_code += "	var hr = \"\" + ((hours < 10) ? \"0\" : \"\") + hours;\n";
popup_code += "	var min = \"\" + ((minutes < 10) ? \"0\" : \"\") + minutes;\n";
popup_code += "	var sec = \"\" + ((seconds < 10) ? \"0\" : \"\") + seconds;\n";
    	
popup_code += "	document.getElementById('time').innerHTML = hr + \":\" + min + \":\" + sec;\n";
    	
popup_code += "	if(get_data_loop){ self.setTimeout(\"getElapsedTime()\", 1000); }\n";
popup_code += "}\n";

// Create the AJAX request
popup_code += "function createRequestObject(){\n";
popup_code += "	var req = false;\n";
  	
popup_code += "	if(window.XMLHttpRequest){\n";
popup_code += "		req = new XMLHttpRequest();\n";
		
popup_code += "		if(req.overrideMimeType){ req.overrideMimeType('text/xml'); }\n";
popup_code += "	}\n";
popup_code += "	else if(window.ActiveXObject){\n";
popup_code += "		try{ req = new ActiveXObject(\"Msxml2.XMLHTTP\"); }\n";
popup_code += "		catch(e){\n";
popup_code += "			try{ req = new ActiveXObject(\"Microsoft.XMLHTTP\"); }\n";
popup_code += "			catch(e){}\n";
popup_code += "		}\n";
popup_code += "	}\n";
	
popup_code += "	if(!req){\n";
popup_code += "		document.getElementById('progress_info').innerHTML = \"Error: Your browser does not support AJAX\";\n";
popup_code += "		return false;\n";
popup_code += "	}\n";
popup_code += "	else{ return req; }\n";
popup_code += "}\n";

// Initialize the progress bar
popup_code += "function iniProgressRequest(){\n";
popup_code += "	var req = false;\n";
popup_code += "	req = createRequestObject();\n";
	
popup_code += "	if(req){\n";
popup_code += "		document.getElementById('progress_info').innerHTML = \"Initialisiere Statusanzeige ...\";\n";
popup_code += "		req.open(\"GET\", path_to_ini_status_script + \"&rnd_id=\" + Math.random(), true);\n";
popup_code += "		req.onreadystatechange = function(){ iniProgressResponse(req); };\n";
popup_code += "		req.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n";
popup_code += "		req.send(null);\n";
popup_code += "	}\n";
popup_code += "}\n";

// Initialize the progress bar
popup_code += "function iniProgressResponse(req){\n";
popup_code += "	if(req.readyState == 4){\n";
popup_code += "		if(req.status == 200){\n";
popup_code += "			var xml = req.responseXML;\n";
			
popup_code += "			if(xml.getElementsByTagName('error_status').item(0).firstChild.nodeValue == 1){\n";
popup_code += "				document.getElementById('progress_info').innerHTML = xml.getElementsByTagName('error_msg').item(0).firstChild.nodeValue;\n";
				
popup_code += "			if(xml.getElementsByTagName('stop_upload').item(0).firstChild.nodeValue == 1){ window.opener.stopUpload(); }\n";
popup_code += "			}\n";
popup_code += "			else{\n";
popup_code += "				get_status_speed = xml.getElementsByTagName('get_data_speed').item(0).firstChild.nodeValue;\n";
popup_code += "				total_upload_size = xml.getElementsByTagName('total_bytes').item(0).firstChild.nodeValue;\n";
popup_code += "				total_Kbytes = Math.round(total_upload_size / 1024);\n";
popup_code += "				get_status_url = \"uu_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;\n";
popup_code += "				get_data_loop = true;\n";
				
popup_code += "				if(window.opener.document.form_upload.embedded_upload_results && window.opener.document.form_upload.embedded_upload_results.value == 1){\n";
popup_code += "					document.getElementById('upload_div').style.display = \"none\";\n";
popup_code += "				}\n";
				
popup_code += "				document.getElementById('progress_bar').style.display = \"\";\n";
popup_code += "				document.getElementById('total_kbytes').innerHTML = total_Kbytes + \" \";\n";
popup_code += "				document.getElementById('progress_info').innerHTML = \"Upload Fortschritt\";\n";
				
popup_code += "				getElapsedTime();\n";
popup_code += "				getProgressStatus();\n";
				
popup_code += "				if(cedric_progress_bar == 1){\n";
popup_code += "					smoothCedricBytes();\n";
popup_code += "					smoothCedricStatus();\n";
popup_code += "				}\n";
popup_code += "			}\n";
popup_code += "		}\n";
popup_code += "		else{\n";
popup_code += "			document.getElementById('progress_info').innerHTML = \"Error: \" + req.status + \" \" + req.statusText;\n";
popup_code += "			//stopUpload();\n";
popup_code += "		}\n";
popup_code += "	}\n";
popup_code += "}\n";
popup_code += "  </script>\n";


popup_code += makePage(barwidth);


popup_code += "  <script language=\"javascript\" type=\"text/javascript\">\n";
popup_code += "    iniProgressRequest();\n";
popup_code += "  </script>\n";

return popup_code;

}


function makePage(barwidth){

var page_code = "";

page_code += "  <style>\n";
page_code += "    .info {font:18px Arial;}\n";
page_code += "    .daun {font:12px Arial;}\n";
page_code += "    .data {background-color:#ECECEC; border:1px solid #ECECEC; width:300;}\n";
page_code += "    .data tr td {background-color:#dddddd; font:13px Arial; width:300;}\n";
page_code += "    .bar1 {background-color:#ECECEC; position:relative; text-align:left; height:20px; width:" + barwidth + "px; border:1px solid #D2D2D2;}\n";
page_code += "    .bar2 {background-color:#3B6798; position:relative; text-align:left;  height:20px; width:0%;}\n";
page_code += "    .barfree {z-index:10;position:absolute; text-align:center; height:20px; width:100%; font-weight:bold;}\n";
page_code += "  </style>\n";
page_code += "<link rel=\"stylesheet\" type=\"text/css\" href=\"css/style.css\">\n";

page_code += "</head><body onLoad=\"iniFilePage()\">";

page_code += "    <!-- Start Progress Bar -->";
page_code += "    <div class=\"info\" id=\"progress_info\"></div>";
page_code += "    <div id=\"progress_bar\" style=\"display:none\" align=\"center\">";
page_code += "     <div class=\"bar1\" id=\"upload_status_wrap\" align=\"center\">";
page_code += "      <span id=\"percent\" class=\"barfree\">0%</span>";
page_code += "        <div class=\"bar2\" id=\"upload_status\" align=\"center\"></div>";
page_code += "      </div>";
page_code += "      <br>";
page_code += "      <table class=\"data\" cellpadding='3' cellspacing='1' width='320'>";
page_code += "        <tr>";
page_code += "          <td align=\"left\"><b>Übertragung:</b></td>";
page_code += "          <td align=\"center\"><span id=\"current\">0</span> von <span id=\"total_kbytes\"></span> KBytes</td>";
page_code += "        </tr>";
page_code += "        <tr>";
page_code += "          <td align=\"left\"><b>Verstrichene Zeit:</b></td>";
page_code += "          <td align=\"center\"><span id=\"time\">0</span></td>";
page_code += "        </tr>";
page_code += "        <tr>";
page_code += "          <td align=\"left\"><b>Verbleibende Zeit:</b></td>";
page_code += "          <td align=\"center\"><span id=\"remain\">0</span></td>";
page_code += "        </tr>";
page_code += "        <tr>";
page_code += "          <td align=\"left\"><b>Geschwindigkeit:</b></td>";
page_code += "          <td align=\"center\"><span id=\"speed\">0</span> KB/s.</td>";
page_code += "        </tr>";
page_code += "      </table>";
page_code += "      <table cellpadding='0' cellspacing='0' width='300'>";
page_code += "    <tr>";
page_code += "    <td align=\"center\" class=\"daun\"><br><br><b>Bitte unterbrechen Sie diese Übertragung nicht</b><br></td>";
page_code += "    </tr>";
page_code += "    <tr>";
page_code += "    <td align=\"center\" class=\"daun\"><img src=\"layout/tipp_bilderladen.gif\" border=\"0\"/></td>";
page_code += "    </tr>";
page_code += "    </table>";
page_code += "    </div>";
page_code += "    <!-- End Progress Bar -->";

return page_code;

}
