/////////////////////////////////////////
// Settings

/////////////////////////////////////////
//swfupload vars
var uploader_use_swfupload = false;
var uploader_avail_instances = [];
var uploader_instances = [];
var uploader_instance_curr = -1;
var uploader_tracking = [];
var uploader_redirect_on_complete = "";
var uploader_inProgress = false;
var uploader_total_timer = new Object();

var uploader_disappear_delay = 3000; //ms
var uploader_disappear_fade_step = 5;
var uploader_disappear_fade_speed = 20;

//nonswfupload vars
var uploader_data = [];
/////////////////////////////////////////

function uploader_single_fileDialogStart()
	{var instance = this.customSettings.instance_name;
	
	var inp_obj = document.getElementById(instance);
	inp_obj.value = "";
	
	this.cancelUpload();
	}

function uploader_single_fileQueued(file,data)
	{
	///////////////////////////////
	//if swfupload is used
	if (uploader_use_swfupload)
		{var instance = this.customSettings.instance_name;
		var inp_obj = document.getElementById(instance);
	
		inp_obj.value = file.name;
		inp_obj.className = "text_field_disabled";
		}
	///////////////////////////////
	//ordinary uploader is used
	else
		{var instance_data = uploader_data[file];
		
		document.forms[0][file].value = data;
		
		//check for ext
		if (!uploader_nonswfupload_check_ext(data,instance_data.ext))
			{popupbox_alert("Napaka!|Izbrana datoteka ni dovoljenega formata...");}
		}
	///////////////////////////////
	}

function uploader_single_fileQueueError(file, errorCode, message)
	{var instance = this.customSettings.instance_name;
	var error_msg = "";
	
	switch (errorCode) 
		{case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:
			error_msg = "Napaka!|Izberete lahko samo eno datoteko...";
		break;
		case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
			error_msg = "Napaka!|Izbrana datoteka je prevelika...";
		break;
		case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
			error_msg = "Napaka!|Izbrana datoteka je prazna...";
		break;
		case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
			error_msg = "Napaka!|Izbrana datoteka ni dovoljenega formata...";
		break;
		default:
			error_msg = "Napaka!|Pri prenosu je prišlo do napake. Poskusite ponovno...";
		break;
		}
	popupbox_alert(error_msg);
	}

function uploader_single_fileDialogComplete()
	{var instance = this.customSettings.instance_name;
	
	}

function uploader_single_uploadProgress(file, bytesLoaded, bytesTotal)
	{
	var instance = this.customSettings.instance_name;
	
	var tracking_name = instance + "_" + file.id;
	var tracking = uploader_tracking[tracking_name];
	if (!tracking)
		{uploader_tracking[tracking_name] = tracking = [];}
	
	if (bytesLoaded < 0) 
		{bytesLoaded = 0;}
	else if (bytesLoaded > bytesTotal) 
		{bytesLoaded = bytesTotal;}
	
	var now = (new Date()).getTime();
	
	if (!tracking["start_time"]) 
		{tracking["start_time"] = now;
		tracking["movingAverageHistory"] = [];
		} 
	else if (tracking["start_time"] <= now) 
		{// Get time and deltas
		var deltaTime = now - tracking["last_time"];
		var deltaBytes = bytesLoaded - tracking["bytesLoaded"];
		}	
	
	tracking["last_time"] = now;
	tracking["bytesLoaded"] = bytesLoaded;
	
	// calculate speeds
	var currentSpeed = deltaBytes / (deltaTime / 1000);
	var averageSpeed = bytesLoaded / ((now - tracking["start_time"]) / 1000);

	// calculate moving average
	if (currentSpeed)
		{tracking["movingAverageHistory"].push(currentSpeed);
		if (tracking["movingAverageHistory"].length > 10) //max 10 history entries
			{tracking["movingAverageHistory"].shift();}
		}
	var movingAverageSpeed = uploader_calculateTransferAverage(tracking["movingAverageHistory"]);
	
	// update times
	var timeRemaining = (bytesTotal - bytesLoaded) / movingAverageSpeed;
	var timeElapsed = (now - tracking.startTime) / 1000;

	// update percent
	var percentLoaded = Math.round((bytesLoaded / bytesTotal) * 100);
	
	var transfer_output = uploader_formatBytes(bytesLoaded) + " / " + uploader_formatBytes(bytesTotal) + ", " + uploader_formatBytes(currentSpeed) + "/s, " + uploader_formatTime(timeRemaining);
	
	document.getElementById(instance + '_progress_status').innerHTML = "Prenašam...";
	document.getElementById(instance + '_progress_transfer').innerHTML = transfer_output;
	document.getElementById(instance + '_progress_bar').style.width = percentLoaded + "%";
	
	uploader_tracking[tracking_name] = tracking;	
	}

function uploader_single_uploadError(file, errorCode, message)
	{var instance = this.customSettings.instance_name;
	var error_msg = "";
	
	if (errorCode === SWFUpload.UPLOAD_ERROR.FILE_CANCELLED) {return;}
	
	uploader_single_uploadCancel();
	document.getElementById(instance).value = "";
		
	// handle errors
	switch (errorCode) 
		{case SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL:
			error_msg = "Napaka!|There was a configuration error.  You will not be able to upload a resume at this time.";
		break;
		case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
			error_msg = "Napaka!|Prenašate lahko samo 1 datoteko...";
		break;
		case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
			error_msg = "Napaka!|Napaka pri prenosu...";
		break;
		case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
			error_msg = "Napaka!|Prenos ni uspel...";
		break;
		case SWFUpload.UPLOAD_ERROR.IO_ERROR:
			error_msg = "Napaka!|Server (IO) Error...";
		break;
		case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
			error_msg = "Napaka!|Security Error...";
		break;
		case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
			error_msg = "Napaka!|Prenos je ustavljen...";
		break;
		default:
			error_msg = "Napaka!|Prišlo je do napake. Poskusite ponovno...";
		break;
		}
	
	popupbox_alert(error_msg);
	}



function uploader_single_uploadSuccess(file, serverData)
	{
	///////////////////////////////
	//if swfupload is used
	if (uploader_use_swfupload)
		{var instance = this.customSettings.instance_name;
		
		document.getElementById(instance + '_progress_status').innerHTML = "Prenos končan";
		document.getElementById(instance + '_progress_transfer').innerHTML = "";
		
		document.getElementById(instance + '_progress_bar').className = "bar_done";
		document.getElementById(instance + '_progress_bar').style.width = "100%";
		}
	///////////////////////////////
	//ordinary uploader is used
	else
		{var instance = file;
		
		document.getElementById(instance + '_progress_status').innerHTML = "Prenos končan";
		document.getElementById(instance + '_progress_bar').className = "bar_done";
		}
	///////////////////////////////
	
	if (uploader_data[instance].on_upload_complete)
		{eval(uploader_data[instance].on_upload_complete + "('" + instance + "', '" + serverData + "');");}
	
	uploader_single_uploadStart_next();
	}

function uploader_single_uploadComplete()
	{		
	}

function uploader_single_uploadStart(redirect_on_complete,optional_dyn_instances)
	{
	//check for specified instances only
	if (optional_dyn_instances && optional_dyn_instances.length)
		{uploader_instances = optional_dyn_instances;}
	else
		{uploader_instances = uploader_avail_instances;}
	
	uploader_redirect_on_complete = "";
	if (redirect_on_complete) {uploader_redirect_on_complete = redirect_on_complete;}
	
	///////////////////////////////
	//if swfupload is used
	if (uploader_use_swfupload)
		{for (var i = 0;i < uploader_instances.length;i++)
			{eval("var tmp_instance = " + uploader_instances[i] + ";");
			
			tmp_instance.setButtonDisabled(true);
			tmp_instance.setButtonCursor("normal");
			}
		}
	///////////////////////////////
	//ordinary uploader is used
	else
		{//check for ext
		for (var i = 0;i < uploader_instances.length;i++)
			{var instance_name = uploader_instances[i];
			
			var file_value = document.forms[0][instance_name].value;
			
			if (file_value && !uploader_nonswfupload_check_ext(file_value,uploader_data[instance_name].ext))
				{popupbox_alert("Napaka!|Izbrana datoteka ni dovoljenega formata...");
				return;
				}
			}
		}
	///////////////////////////////
	
	uploader_instance_curr = -1;
	uploader_single_uploadStart_next();
	}

function uploader_single_uploadStart_next()
	{
	uploader_instance_curr++;
	if (uploader_instance_curr < uploader_instances.length)
		{
		///////////////////////////////
		//if swfupload is used
		if (uploader_use_swfupload)
			{eval("var tmp_instance = " + uploader_instances[uploader_instance_curr] + ";");
				
			if (!document.getElementById(uploader_instances[uploader_instance_curr]).value)
				{uploader_single_uploadStart_next();
				return;
				}
			
			document.getElementById(uploader_instances[uploader_instance_curr] + '_progress_bg').style.display = "block";
			document.getElementById(uploader_instances[uploader_instance_curr] + '_progress').style.display = "block";
			document.getElementById(uploader_instances[uploader_instance_curr] + '_progress_bar').className = "bar_move";
			
			tmp_instance.startUpload();
			}
		///////////////////////////////
		//ordinary uploader is used
		else
			{
			if (!frames[uploader_instances[uploader_instance_curr] + '_iframe'].document.getElementById(uploader_instances[uploader_instance_curr]).value)
				{uploader_single_uploadStart_next();
				return;
				}
			
			document.getElementById(uploader_instances[uploader_instance_curr] + '_progress_bg').style.display = "block";
			document.getElementById(uploader_instances[uploader_instance_curr] + '_progress').style.display = "block";
			document.getElementById(uploader_instances[uploader_instance_curr] + '_progress_bar').className = "bar_move";
			document.getElementById(uploader_instances[uploader_instance_curr] + '_progress_status').innerHTML = "Prenašam...";
			
			frames[uploader_instances[uploader_instance_curr] + '_iframe'].document.forms[0].submit();
			}
		///////////////////////////////
		}
	else
		{//////////////////////////////
		//if swfupload is used
		if (uploader_use_swfupload)
			{//enable inputs
			for (var i = 0;i < uploader_instances.length;i++)
				{eval("var tmp_instance = " + uploader_instances[i] + ";");
			
				tmp_instance.setButtonDisabled(false);
				tmp_instance.setButtonCursor("hand");				
				}
			}
		///////////////////////////////
		
		eval(uploader_redirect_on_complete);
		}
	}

function uploader_single_uploadCancel()
	{
	///////////////////////////////
	//if swfupload is used
	if (uploader_use_swfupload)
		{for (var i = 0;i < uploader_instances.length;i++)
			{eval("var tmp_instance = " + uploader_instances[i] + ";");
			
			tmp_instance.cancelUpload();
			tmp_instance.setButtonDisabled(false);
			tmp_instance.setButtonCursor("hand");
			
			document.getElementById(uploader_instances[i] + '_progress_bg').style.display = "none";
			document.getElementById(uploader_instances[i] + '_progress').style.display = "none";
			document.getElementById(uploader_instances[i] + '_progress_status').innerHTML = "&nbsp;";
			document.getElementById(uploader_instances[i] + '_progress_transfer').innerHTML = "&nbsp;";
			document.getElementById(uploader_instances[i] + '_progress_bar').style.width = "0%";
			}
		}
	///////////////////////////////
	//ordinary uploader is used
	else
		{for (var i = 0;i < uploader_instances.length;i++)
			{var iframe_obj = document.getElementById(uploader_instances[i] + '_iframe');
			var iframe_orig_lnk = iframe_obj.src;
			iframe_obj.src = iframe_orig_lnk;
			
			document.getElementById(uploader_instances[i] + '_progress_bg').style.display = "none";
			document.getElementById(uploader_instances[i] + '_progress').style.display = "none";
			document.getElementById(uploader_instances[i] + '_progress_status').innerHTML = "&nbsp;";
			}
		}
	///////////////////////////////
	
	uploader_instance_curr = 0;
	uploader_redirect_on_complete = "";
	}
// single file uploader
///////////////////////////////////////////
// multi files uploader

function uploader_multi_fileDialogStart()
	{
	
	}

function uploader_multi_fileQueued(file)
	{
	var instance = this.customSettings.instance_name;
	var item_id = file.id;
	
	uploader_data[instance].bytes_total += file.size; //total size
	uploader_data[instance].uploads_total++; //total files
	
	var sample_obj = document.getElementById(instance + '_item_sample');
	var output_obj = document.getElementById(instance + '_queue_output');
	
	var new_item = sample_obj.cloneNode(true);
	new_item.id = item_id;
	new_item.style.display = "block";
	
	var elems = new_item.getElementsByTagName("div");
	elems[0].innerHTML = file.name;
	elems[2].id = item_id + "_progress_status";
	elems[2].innerHTML = "Na čakanju...";
	elems[3].id = item_id + "_progress_transfer";
	elems[5].id = item_id + "_progress_bar";
	
	output_obj.appendChild(new_item);
	rollover_reload(instance + '_queue_output');
	}

function uploader_multi_queueComplete(numFilesUploaded)
	{
	var instance = this.customSettings.instance_name;
	
	var uploads_done = uploader_data[instance].uploads_done;
	var uploads_total = uploader_data[instance].uploads_total;
	var bytes_loaded = uploader_data[instance].bytes_loaded;
	
	document.getElementById(instance + '_total_progress_status').innerHTML = "Prenešeno " + uploads_done + " / " + uploads_total + "...";
	document.getElementById(instance + '_total_progress_transfer').innerHTML = uploader_formatBytes(bytes_loaded);
	document.getElementById(instance + '_total_progress_bar').style.width = "100%";	
	document.getElementById(instance + '_total_progress_bar').className = "bar_done";
	
	//restart vars
	uploader_data[instance].bytes_total = 0; //total size
	uploader_data[instance].bytes_loaded = 0; //total loaded size
	uploader_data[instance].uploads_total = 0; //total files
	uploader_data[instance].uploads_done = 0; //total uploads
	
	uploader_multi_queueComplete_global_disappear(instance);
	
	uploader_multi_uploadStart_next();
	}

function uploader_multi_queueComplete_global_disappear(instance,step)
	{
	if (!step) {step = 1;}
	switch(step)
		{case 1:
			uploader_total_timer = setTimeout("uploader_multi_queueComplete_global_disappear('" + instance + "',2);",uploader_disappear_delay);
		break;
		case 2:
			document.getElementById(instance + '_total_progress_bg').style.display = "none";
			document.getElementById(instance + '_total_progress').style.display = "none";
		break;
		}
	}

function uploader_multi_fileQueueError(file, errorCode, message)
	{var instance = this.customSettings.instance_name;
	var error_msg = "";
	
	switch (errorCode) 
		{case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:
			var max_files = Number(message);
			var output = "";
			
			switch(max_files)
				{case 1: output = "datoteko"; break;
				case 2: output = "datoteki"; break;
				case 3: case 4: output = "datoteke"; break;
				default: output = "datotek"; break;
				}
			
			error_msg = "Napaka!|Izberete lahko največ " + max_files + " " + output + "...";
		break;
		case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
			error_msg = "Napaka!|Datoteka '" + file.name + "' je prevelika...";
		break;
		case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
			error_msg = "Napaka!|Izbrana datoteka je prazna...";
		break;
		case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
			error_msg = "Napaka!|Izbrana datoteka ni dovoljenega formata...";
		break;
		default:
			error_msg = "Napaka!|Pri prenosu je prišlo do napake. Poskusite ponovno...";
		break;
		}
	popupbox_alert(error_msg);
	}

function uploader_multi_fileDialogComplete()
	{var instance = this.customSettings.instance_name;
	
	}

function uploader_multi_uploadProgress(file, bytesLoaded, bytesTotal)
	{
	var instance = this.customSettings.instance_name;
	var item_id = file.id;
		
	var now = (new Date()).getTime();
		
	///////////////////////////
	// curr file progress
	var tracking_name = instance + "_" + file.id;
	var tracking = uploader_tracking[tracking_name];
	if (!tracking)
		{uploader_tracking[tracking_name] = tracking = [];}
	
	if (bytesLoaded < 0) 
		{bytesLoaded = 0;}
	else if (bytesLoaded > bytesTotal)
		{bytesLoaded = bytesTotal;}
	
	if (!tracking["start_time"]) 
		{tracking["start_time"] = now;
		tracking["movingAverageHistory"] = [];
		} 
	else if (tracking["start_time"] <= now) 
		{// Get time and deltas
		var deltaTime = now - tracking["last_time"];
		var deltaBytes = bytesLoaded - tracking["bytesLoaded"];
		}	
	
	tracking["last_time"] = now;
	tracking["bytesLoaded"] = bytesLoaded;
	// curr file progress
	///////////////////////////
	
	///////////////////////////
	// global progress
	var global_bytesLoaded = uploader_data[instance].bytes_loaded + bytesLoaded;
	var global_bytesTotal = uploader_data[instance].bytes_total;
	
	var global_tracking_name = instance;
	var global_tracking = uploader_tracking[global_tracking_name];
	if (!global_tracking)
		{uploader_tracking[global_tracking_name] = global_tracking = [];}	
	
	if (global_bytesLoaded < 0) 
		{global_bytesLoaded = 0;}
	else if (global_bytesLoaded > global_bytesTotal) 
		{global_bytesLoaded = global_bytesTotal;}
	
	if (!global_tracking["start_time"]) 
		{global_tracking["start_time"] = now;
		global_tracking["movingAverageHistory"] = [];
		} 
	else if (tracking["start_time"] <= now) 
		{// Get time and deltas
		var global_deltaTime = now - global_tracking["last_time"];
		var global_deltaBytes = global_bytesLoaded - global_tracking["bytesLoaded"];
		}	
	
	global_tracking["last_time"] = now;
	global_tracking["bytesLoaded"] = global_bytesLoaded;
	// global progress
	///////////////////////////

	// calculate speeds
	var currentSpeed = global_deltaBytes / (global_deltaTime / 1000);
	var averageSpeed = global_bytesLoaded / ((now - global_tracking["start_time"]) / 1000);
	
	// calculate moving average
	if (currentSpeed)
		{global_tracking["movingAverageHistory"].push(currentSpeed);
		if (global_tracking["movingAverageHistory"].length > 10) //max 10 history entries
			{global_tracking["movingAverageHistory"].shift();}
		}
	var movingAverageSpeed = uploader_calculateTransferAverage(global_tracking["movingAverageHistory"]);
	
	//if history is not avail yet
	if (global_tracking["movingAverageHistory"].length < 10) {movingAverageSpeed = currentSpeed;}
	
	/////////////////////////
	// curr file progress
	
	// update times
	var timeRemaining = (bytesTotal - bytesLoaded) / movingAverageSpeed;
	var timeElapsed = (now - tracking["start_time"]) / 1000;

	// update percent
	var percentLoaded = Math.round((bytesLoaded / bytesTotal) * 100);
	
	var transfer_output = uploader_formatBytes(bytesLoaded) + " / " + uploader_formatBytes(bytesTotal) + ", " + uploader_formatBytes(currentSpeed) + "/s, " + uploader_formatTime(timeRemaining);
	
	document.getElementById(item_id + '_progress_status').innerHTML = "Prenašam...";
	document.getElementById(item_id + '_progress_transfer').innerHTML = transfer_output;
	document.getElementById(item_id + '_progress_bar').style.width = percentLoaded + "%";
	// curr file progress
	/////////////////////////
	
	/////////////////////////
	// global progress
	
	// update times
	var global_timeRemaining = (global_bytesTotal - global_bytesLoaded) / movingAverageSpeed;
	
	// update percent
	var global_percentLoaded = Math.round((global_bytesLoaded / global_bytesTotal) * 100);
	
	var global_transfer_output = uploader_formatBytes(global_bytesLoaded) + " / " + uploader_formatBytes(global_bytesTotal) + ", " + uploader_formatBytes(currentSpeed) + "/s, " + uploader_formatTime(global_timeRemaining);
	var global_status_output = "Prenašam " + (uploader_data[instance].uploads_done + 1) + " / " + uploader_data[instance].uploads_total + "...";
	
	document.getElementById(instance + '_total_progress_status').innerHTML = global_status_output;
	document.getElementById(instance + '_total_progress_transfer').innerHTML = global_transfer_output;
	document.getElementById(instance + '_total_progress_bar').style.width = global_percentLoaded + "%";	
	// global progress
	/////////////////////////	

	uploader_tracking[tracking_name] = tracking;
	uploader_tracking[global_tracking_name] = global_tracking;
	}

function uploader_multi_uploadError(file, errorCode, message)
	{var instance = this.customSettings.instance_name;
	var error_msg = "";
	
	if (errorCode === SWFUpload.UPLOAD_ERROR.FILE_CANCELLED) {return;}
	
	uploader_single_uploadCancel();
	document.getElementById(instance).value = "";
		
	// handle errors
	switch (errorCode) 
		{case SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL:
			error_msg = "Napaka!|There was a configuration error.  You will not be able to upload a resume at this time.";
		break;
		case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
			error_msg = "Napaka!|Prenašate lahko samo 1 datoteko...";
		break;
		case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
			error_msg = "Napaka!|Napaka pri prenosu...";
		break;
		case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
			error_msg = "Napaka!|Prenos ni uspel...";
		break;
		case SWFUpload.UPLOAD_ERROR.IO_ERROR:
			error_msg = "Napaka!|Server (IO) Error...";
		break;
		case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
			error_msg = "Napaka!|Security Error...";
		break;
		case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
			error_msg = "Napaka!|Prenos je ustavljen...";
		break;
		default:
			error_msg = "Napaka!|Prišlo je do napake. Poskusite ponovno...";
		break;
		}
	
	popupbox_alert(error_msg);
	}



function uploader_multi_uploadSuccess(file, serverData)
	{
	///////////////////////////////
	//if swfupload is used
	if (uploader_use_swfupload)
		{var instance = this.customSettings.instance_name;
		var item_id = file.id;
		
		document.getElementById(item_id + '_progress_status').innerHTML = "Prenos končan";
		document.getElementById(item_id + '_progress_transfer').innerHTML = "";
		
		document.getElementById(item_id + '_progress_bar').className = "bar_done";
		document.getElementById(item_id + '_progress_bar').style.width = "100%";
		
		uploader_data[instance].uploads_done++;
		uploader_data[instance].bytes_loaded += file.size;
		}
	///////////////////////////////
	//ordinary uploader is used
	else
		{
		}
	///////////////////////////////
	
	uploader_multi_item_disappear(instance,item_id);
	
	if (uploader_data[instance].on_upload_complete)
		{eval(uploader_data[instance].on_upload_complete + "('" + instance + "', '" + serverData + "');");}
	}

function uploader_multi_uploadComplete()
	{
	}

function uploader_multi_uploadStart(redirect_on_complete,optional_dyn_instances)
	{
	if (uploader_inProgress) {return;}
	
	//check for specified instances only
	if (optional_dyn_instances && optional_dyn_instances.length)
		{uploader_instances = optional_dyn_instances;}
	else
		{uploader_instances = uploader_avail_instances;}
	
	uploader_redirect_on_complete = "";
	if (redirect_on_complete) {uploader_redirect_on_complete = redirect_on_complete;}
	
	///////////////////////////////
	//if swfupload is used
	if (uploader_use_swfupload)
		{for (var i = 0;i < uploader_instances.length;i++)
			{eval("var tmp_instance = " + uploader_instances[i] + ";");
			
			tmp_instance.setButtonDisabled(true);
			tmp_instance.setButtonCursor("normal");
			}
		}
	///////////////////////////////
	//ordinary uploader is used
	else
		{
		}
	///////////////////////////////
	
	uploader_instance_curr = -1;
	uploader_multi_uploadStart_next();
	}

function uploader_multi_uploadStart_next()
	{
	uploader_instance_curr++;
	if (uploader_instance_curr < uploader_instances.length)
		{
		uploader_inProgress = true;
		
		///////////////////////////////
		//if swfupload is used
		if (uploader_use_swfupload)
			{var instance_name = uploader_instances[uploader_instance_curr];
			eval("var tmp_instance = " + instance_name + ";");
			
			clearTimeout(uploader_total_timer);
			
			document.getElementById(instance_name + '_total_progress_status').innerHTML = "";
			document.getElementById(instance_name + '_total_progress_transfer').innerHTML = "";
			document.getElementById(instance_name + '_total_progress_bar').style.width = "0%";
			
			document.getElementById(instance_name + '_total_progress_bg').style.display = "block";
			document.getElementById(instance_name + '_total_progress').style.display = "block";
			document.getElementById(instance_name + '_total_progress_bar').className = "bar_move";
			
			tmp_instance.startUpload();
			}
		///////////////////////////////
		//ordinary uploader is used
		else
			{
			}
		///////////////////////////////
		}
	else
		{uploader_inProgress = false;
		
		//////////////////////////////
		//if swfupload is used
		if (uploader_use_swfupload)
			{//enable inputs
			for (var i = 0;i < uploader_instances.length;i++)
				{eval("var tmp_instance = " + uploader_instances[i] + ";");
			
				tmp_instance.setButtonDisabled(false);
				tmp_instance.setButtonCursor("hand");				
				}
			}
		///////////////////////////////
		
		eval(uploader_redirect_on_complete);
		}
	}

function uploader_multi_uploadCancel_all()
	{
	}

function uploader_multi_uploadCancel(cancel_obj)
	{
	}

function uploader_multi_cancelButton_hide(item_id)
	{
	var item_obj = document.getElementById(item_id);
	var imgs = item_obj.getElementsByTagName("img");
	imgs[0].style.display = "none";
	}

function uploader_multi_check_queue_num(instance)
	{if (uploader_data[instance].uploads_total)
		{return true;}
	else
		{return false;}
	}

function uploader_multi_item_disappear(instance, item_id, step)
	{if (!step) {step = 1;}	
	var item_obj = document.getElementById(item_id);
	
	switch(step)
		{case 1: 
			uploader_multi_cancelButton_hide(item_id);
			
			uploader_set_opacity(item_obj,100);
			setTimeout("uploader_multi_item_disappear('" + instance + "','" + item_id + "',2);",uploader_disappear_delay);
		break;
		case 2: 
			var curr_alpha = Math.round(Number(item_obj.style.opacity) * 100);
			curr_alpha -= uploader_disappear_fade_step;
			
			if (curr_alpha <= 0)
				{var obj_output = document.getElementById(instance + '_queue_output');
				obj_output.removeChild(item_obj);
				return;
				}
			
			uploader_set_opacity(item_obj,curr_alpha);
			setTimeout("uploader_multi_item_disappear('" + instance + "','" + item_id + "',2);",uploader_disappear_fade_speed);
		break;
		}
	}

// multi files uploader
///////////////////////////////////////////

// check ext - only for nonswfupload upload
function uploader_nonswfupload_check_ext(inp_value,avail_ext)
	{	
	if (!inp_value || !avail_ext || avail_ext == "*.*") {return true;}
	
	var tmp_arr = inp_value.split(".");
	ext = tmp_arr[tmp_arr.length - 1];
	ext = ext.toLowerCase();
	ext = "*." + ext;
	
	var allowed_ext = avail_ext.split(";");
	if (!allowed_ext.length) {return true;}
	
	var output = false;
	for (var i = 0;i < allowed_ext.length;i++)
		{if (ext == allowed_ext[i] || allowed_ext[i] == "*")
			{output = true;}
		}
	
	return output;
	}

function uploader_calculateTransferAverage(history)
	{var mSum = 0;
	var mCount = 0;
	var vals = [];
	
	var size = history.length;
	
	// Check for sufficient data
	if (size >= 8) 
		{var sum = 0;
		for (var i = 0; i < size; i++) 
			{vals[i] = history[i];
			sum += vals[i];
			}

		var mean = sum / size;

		// Calculate variance for the set
		var varianceTemp = 0;
		for (var i = 0; i < size; i++) 
			{varianceTemp += Math.pow((vals[i] - mean), 2);}

		var variance = varianceTemp / size;
		var standardDev = Math.sqrt(variance);
		
		//Standardize the Data
		for (i = 0; i < size; i++) 
			{vals[i] = (vals[i] - mean) / standardDev;}

		// Calculate the average excluding outliers
		var deviationRange = 2.0;
		for (var i = 0; i < size; i++) 
			{if (vals[i] <= deviationRange && vals[i] >= -deviationRange) 
				{mCount++;
				mSum += history[i];
				}
			}
		} 
	// Calculate the average (not enough data to remove outliers)
	else 
		{mCount = size;
		for (i = 0; i < size; i++) 
			{mSum += history[i];}
		}
	
	return mSum / mCount;
	}

function uploader_formatTime(input_sec)
	{
	input_sec = Math.ceil(input_sec);
	var output = "";

	if (input_sec >= 3600)
		{var hours = Math.floor(input_sec / 3600);
		var mins = Math.floor((input_sec - (hours * 3600)) / 60);
		mins = String(mins).length == 1 ? "0" + mins : mins;
		
		output = hours + ":" + mins + " h";
		}
	else if (input_sec >= 60)
		{output = Math.floor(input_sec / 60) + " m";}
	else
		{output = input_sec + " s";}	
	
	return output;
	}

function uploader_formatBytes(input_bytes)
	{
	var prefix = "";
	var output = parseFloat(input_bytes);
	
	if (output >= 1024)
		{//kB
		output = output / 1024;
		prefix = "k";
		
		if (output >= 1024)
			{//MB
			output = output / 1024;
			prefix = "M";
			
			if (output >= 1024)
				{//GB
				output = output / 1024;
				prefix = "G";
				}
			}
		}
	
	output = String(output);
	var pos = output.indexOf(".");
	if (pos != -1)
		{var tmp = output.substr(0,pos) + ",";
		output = tmp + output.substr(pos + 1,1);
		}
	
	return output + " " + prefix + "B";
	}

function uploader_set_opacity(obj,value)
	{
	obj.style.filter = "alpha(opacity=" + value + ")";	
	obj.style.MozOpacity = value / 100;
	obj.style.opacity = value / 100;
	}

function uploader_format_filename(input_filename)
	{
	if (!input_filename) {return "";}
	
	input_filename = input_filename.toLowerCase();
	
	var sp_char = "";
	var replace_char = "";
	
	for (var i = 0;i < uploader_filename_sp_chars.length;i++)
		{sp_char = uploader_filename_sp_chars[i];
		replace_char = uploader_filename_replace_chars[i];
				
		//input_link = input_link.replace(re, replace_char);
		input_filename = input_filename.uploader_replaceAll(sp_char, replace_char);
		}	
	return input_filename;
	}

// Replaces all instances of the given substring.
String.prototype.uploader_replaceAll = function( 
	strTarget, // The substring you want to replace
	strSubString // The string you want to replace in.
	){
	var strText = this;
	var intIndexOfMatch = strText.indexOf( strTarget );
	 
	// Keep looping while an instance of the target string
	// still exists in the string.
	while (intIndexOfMatch != -1){
		// Relace out the current instance.
		strText = strText.replace( strTarget, strSubString )
		 
		// Get the index of any next matching substring.
		intIndexOfMatch = strText.indexOf( strTarget );
	}
	 
	// Return the updated string with ALL the target strings
	// replaced out with the new substring.
	return( strText );
}

