//******************************************************************************************************
//   ATTENTION: THIS FILE HEADER MUST REMAIN INTACT. DO NOT DELETE OR MODIFY THIS FILE HEADER.
//
//   Name: uu_file_upload.js
//   Revision: 2.0
//   Date: 28/04/2007 3:04PM
//   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;
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_progress_bar = 1;
var cedric_hold = true;
var total_upload_size = 0;

// Check the file format before uploading
function checkFileNameFormat(Mode){
	if (content_data_id !="new" && Mode=="Video") return false;
	if(!check_file_name_format){ return false; }

	for(var i = 0; i < upload_range; i++){
		if (Mode=="Video") {
			if(document.edit_content.elements['video'].value != ""){
				var string = document.edit_content.elements['video'].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("The Filename must less than 32 Characters. Characters must start with 1-9 a-z, A-Z, _-");
					return true;
				}
			}
			if(document.edit_content.elements['thumbnail'].value != ""){
				var string = document.edit_content.elements['thumbnail'].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("The Filename must less than 32 Characters. Characters must start with 1-9 a-z, A-Z, _-");
					return true;
				}
			}
		} else {
			if(document.edit_content.elements['upfile_main_' + i].value != ""){
				var string = document.edit_content.elements['upfile_main_' + 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("The Filename must less than 32 Characters. Characters must start with 1-9 a-z, A-Z, _-");
					return true;
				}
			}
		}
	}
	return false;
}

// Check for illegal file extentions
function checkDisallowFileExtensions(Mode){
	if (content_data_id !="new" && Mode=="Video") return false;
	if(!check_disallow_extensions){ return false; }

	for(var i = 0; i < upload_range; i++){
		if(document.edit_content.elements['upfile_' + i].value != ""){
			if(document.edit_content.elements['upfile_' + i].value.match(disallow_extensions)){
				var string = document.edit_content.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, uploading a file with the extension "' + file_extension + '" is not allowed.');
				return true;
			}
		}
	}
	return false;
}

// Check for legal file extentions
function checkAllowFileExtensions(Mode){
	if(!check_allow_extensions){ return false; }
	for(var i = 0; i < upload_range; i++){
		if (Mode=="Video") {
			if (!(content_data_id !="new" && Mode=="Video")) {
				if(document.edit_content.elements['video'].value != ""){
					if(!document.edit_content.elements['video'].value.match(allow_video_extensions)){
						var string = document.edit_content.elements['video'].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("File extension  " + file_extension + " is not allowed");
						return true;
					}
				}
			}
			// FFMPEG_MODE so no need to check thumbnails
			// if (document.edit_content.elements['FFMPEG_MODE'] && document.edit_content.elements['FFMPEG_MODE'].value > 0) return false; 
			if(document.edit_content.elements['thumbnail'].value != ""){
				if(!document.edit_content.elements['thumbnail'].value.match(allow_extensions)){
					var string = document.edit_content.elements['thumbnail'].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("File extension  " + file_extension + " is not allowed");
					return true;
				}
			}
		} else {
			if(document.edit_content.elements['upfile_main_' + i].value != ""){
				if(!document.edit_content.elements['upfile_main_' + i].value.match(allow_extensions)){
					var string = document.edit_content.elements['upfile_main_' + 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("File extension  " + file_extension + " is not allowed");
					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("Please Choose A File To Upload.");
		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.edit_content.elements['upfile_' + i].value != ""){ total_uploads++; }
	}
	total_uploads=1;

	document.getElementById('total_uploads').innerHTML = total_uploads;
	document.edit_content.submit();
	document.getElementById('upload_button').disabled = true;

	iniProgressRequest();

//	for(var i = 0; i < upload_range; i++){ document.edit_content.elements['upfile_' + i].disabled = true; }
}

function uploadVideoFiles(js_error_name, js_error_desc, js_error_category, js_error_prevpic, js_error_videowmv, js_error_video, js_error_length) {
	if(checkAllowFileExtensions('Video')){ return false; }
	var total_uploads = 0;
	if (document.edit_content.titel.value.length<10) {
		alert (js_error_name);
		return false;
	}
	if (document.edit_content.description.value.length<30) {
		alert (js_error_desc);
		return false;
	}
	if (content_data_id=="new") {
		if (document.edit_content.thumbnail.value=="") {
				alert (js_error_prevpic);
				return false;
		}
		if (document.edit_content.video.value=="") {
			if (!document.edit_content.elements['FFMPEG_MODE'] || document.edit_content.elements['FFMPEG_MODE'].value == 0){
				alert (js_error_videowmv);
				return false;
			}else{
				alert (js_error_video);
				return false;
			}
		}
		if ((!document.edit_content.elements['FFMPEG_MODE'] || document.edit_content.elements['FFMPEG_MODE'].value == 0) && document.edit_content.video_length.value=="") {
				alert (js_error_length);
				return false;
		}
		total_uploads=2;
	} else {
		total_uploads = 0;
		if (document.edit_content.thumbnail.value!="") {
			total_uploads+=1;
		}
		if (document.edit_content.video.value!="") {
			total_uploads+=1;
		}
	}
	if (document.edit_content.new_kategorie_1.value=="0" && document.edit_content.new_kategorie_2.value=="0" && document.edit_content.new_kategorie_3.value=="0" && document.edit_content.new_kategorie_4.value=="0" && document.edit_content.new_kategorie_5.value=="0") {
		alert (js_error_category);
		return false;
	}

	document.getElementById('total_uploads').innerHTML = total_uploads;
	document.edit_content.submit();
	document.getElementById('upload_button').disabled = true;
	if (document.getElementById('video_button')!=null) document.getElementById('video_button').disabled = true;
	if (document.getElementById('thumbnail_button')!=null) document.getElementById('thumbnail_button').disabled = true;
	document.edit_content.cancel_button.disabled=false;

	iniProgressRequest();
}

function uploadPictureFiles(js_error_name, js_error_desc, js_error_category){
//	if(checkFileNameFormat('Picture')){ return false; }
	if(checkAllowFileExtensions('Picture')){ return false; }

	var total_uploads = 0;

	if (document.edit_content.titel.value.length<10) {
		alert (js_error_name);
		return false;
	}
	if (document.edit_content.description.value.length<30) {
		alert (js_error_desc);
		return false;
	}
	
	if (document.edit_content.new_kategorie_1.value=="0" && document.edit_content.new_kategorie_2.value=="0" && document.edit_content.new_kategorie_3.value=="0" && document.edit_content.new_kategorie_4.value=="0" && document.edit_content.new_kategorie_5.value=="0") {
		alert (js_error_category);
		return false;
	}

	for(var i = 0; i < upload_range; i++){
		if(document.edit_content.elements['upfile_main_' + i].value != ""){ total_uploads++; }
	}

	document.getElementById('total_uploads').innerHTML = total_uploads;
	document.edit_content.submit();
	document.getElementById('upload_button').disabled = true;

	iniProgressRequest();

	for(var i = 0; i < upload_range; i++){ document.edit_content.elements['upfile_main_' + 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"; }

// Initialize the file upload page
function iniFilePage(){
	if (!isset('UploadPage')) return;
	resetProgressBar();

	for(var i = 0; i < upload_range; i++){
//		document.form_upload.elements['upfile_' + i].disabled = false;
//		document.form_upload.elements['upfile_' + i].value = "";
	}

	document.getElementById('progress_info').innerHTML = "";
	document.getElementById('upload_button').disabled = false;
	document.getElementById('progress_bar').style.display = "none";
	document.edit_content.reset();
}

// Reset the progress bar
function resetProgressBar(){
	get_status_url = "";
	get_data_loop = false;
	seconds = 0;
	minutes = 0;
	hours = 0;
	info_width = 0;
	info_bytes = 0;
	cedric_hold = true;
	total_upload_size = 0;

	document.getElementById('upload_status').style.width = '0px';
	document.getElementById('percent').innerHTML = '0%';
	document.getElementById('uploaded_files').innerHTML = 0;
	document.getElementById('total_uploads').innerHTML = '';
	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;
}

// Stop the upload
function stopUpload(){
	try{ window.stop(); }
	catch(e){
		try{ document.execCommand('Stop'); }
		catch(e){}
	}
	document.edit_content.upload_button.disabled=false;
	if (document.getElementById('video_button')!=null) document.getElementById('video_button').disabled = false;
	if (document.getElementById('thumbnail_button')!=null) document.getElementById('thumbnail_button').disabled = false;
	document.edit_content.cancel_button.disabled=true;
}

// Add one upload slot
// Add one upload slot
function addUploadSlot1(num, Album, title){
	if(upload_range < max_upload_slots){
		if(num == upload_range){
			var up = document.getElementById('upload_slots_'+Album);
			var dv = document.createElement("div");
			dv.style.float="none";
			dv.style.clear="both";
			dv.innerHTML = '<label for="upfile_main_'+upload_range+'" id="form_label">'+title+'</label><input type="file" name="upfile_main_'+upload_range+'" size="20" style="width:270px;" onChange="addUploadSlot1('+(upload_range+1)+','+Album+', \''+title+'\' )" value=""></div>';
			up.appendChild(dv);
			upload_range++;
		}
	}
}

// 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 = info_bytes;
	}

	if(get_data_loop){ self.setTimeout("smoothCedricBytes()", info_time_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);

//	alert ("test");

	if(get_data_loop){ self.setTimeout("getProgressStatus()", get_status_speed); }
}

// Calculate and display upload stats
function setProgressStatus(bytes_read, lapsed_time, uploaded_files){
	var byte_speed = 0;
	var time_remaining = 0;

	if(lapsed_time > 0){ byte_speed = bytes_read / lapsed_time; }
	if(byte_speed > 0){ time_remaining = Math.round((total_upload_size - bytes_read) / byte_speed); }

	if(cedric_progress_bar == 1){
		if(byte_speed != 0){
			info_time_width = Math.round(total_upload_size * 1000 / (byte_speed * progress_bar_width));
			info_time_bytes = Math.round(1024000 / byte_speed);
		}
		else{
			info_time_width = 200;
			info_time_bytes = 15;
		}
	}

	// Calculate percent finished
	var percent_float = bytes_read / total_upload_size;
	var percent = Math.round(percent_float * 100);
	var progress_bar_status = Math.round(percent_float * progress_bar_width);

	// Calculate time remaining
	var remaining_sec = (time_remaining % 60);
	var remaining_min = (((time_remaining - remaining_sec) % 3600) / 60);
	var remaining_hours = ((((time_remaining - remaining_sec) - (remaining_min * 60)) % 86400) / 3600);

	if(remaining_sec < 10){ remaining_sec = '0' + remaining_sec; }
	if(remaining_min < 10){ remaining_min = '0' + remaining_min; }
	if(remaining_hours < 10){ remaining_hours = '0' + remaining_hours; }

	var time_remaining_f = remaining_hours + ':' + remaining_min + ':' + remaining_sec;

	byte_speed = Math.round(byte_speed / 1024);
	bytes_read = Math.round(bytes_read / 1024);

	if(cedric_progress_bar == 1){
		cedric_hold = false;
		info_width = progress_bar_status;
		info_bytes = bytes_read;
	}
	else{
		document.getElementById('upload_status').style.width = progress_bar_status + 'px';
		document.getElementById('current').innerHTML = bytes_read;
	}

	document.getElementById('percent').innerHTML = percent + '%';
	document.getElementById('uploaded_files').innerHTML = uploaded_files;
	document.getElementById('remain').innerHTML = time_remaining_f;
	document.getElementById('speed').innerHTML = byte_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: Your browser does not support AJAX";
		return false;
	}
	else{ return req; }
}

// Initialize the progress bar
function iniProgressRequest(){
	var req = false;
	req = createRequestObject();

	if(req){
		document.getElementById('progress_info').innerHTML = "Start the Upload ...";
//		alert (path_to_ini_status_script + "&rnd_id=" + Math.random());
		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){
				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;
				cedric_progress_bar = xml.getElementsByTagName('cedric_progress_bar').item(0).firstChild.nodeValue;
				total_upload_size = xml.getElementsByTagName('total_bytes').item(0).firstChild.nodeValue;
				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;
				get_data_loop = true;

//				alert (xml.getElementsByTagName('total_bytes').item(0).firstChild.nodeValue);

				if(document.edit_content.embedded_upload_results && document.edit_content.embedded_upload_results.value == 1){
					document.getElementById('upload_div').style.display = "none";
				}

				document.getElementById('progress_bar').style.display = "";
				document.getElementById('total_kbytes').innerHTML = Math.round(Number(xml.getElementsByTagName('total_bytes').item(0).firstChild.nodeValue / 1024)) + " ";
				document.getElementById('progress_info').innerHTML = "Save Files to be on Server...";

				getElapsedTime();
				getProgressStatus();

				if(xml.getElementsByTagName('cedric_progress_bar').item(0).firstChild.nodeValue == 1){
					smoothCedricBytes();
					smoothCedricStatus();
				}
			}
		}
		else{
			alert (req.status);
			document.getElementById('progress_info').innerHTML = "Error: " + req.status + " " + req.statusText;
			//stopUpload();
		}
	}
}