var sessId;
var totalSize = 0; //file size
var totalSizeRequest = null; //stores an instance of Ajax.Request (prototype.js)
var bytesDoneUpdater = null; //stores an instance of Ajax.PeriodicalUpdater (prototype.js)
submittedBefore = false;
waitSeconds = 300;

function showUploadForm(show){
	if (show){
		$('uploadPlaceHolder').style.display = 'none';
		$('ajaxStatusHolder').style.display = 'none';
		$('fileInputWrapper').style.display = 'block';
	} else {
		$('fileInputWrapper').style.display = 'none';
		$('uploadPlaceHolder').style.display = 'block';
		$('ajaxStatusHolder').style.display = 'block';
	}
}


function showError(errMsgFromServer){
	alert('Error: '+errMsgFromServer);
	return true;
}

function calculateUpdateFreq(fSize){
	var freq = 0.3;
	if ( fSize < (600 * 1024) ){
		freq = 0.3; //for tiny files
	} else {
		if ( fSize < (3 * 1024 * 1024) ){
			freq = 0.5; //for small files
		} else {
			if ( fSize < (10 * 1024 * 1024) ){
				freq = 0.7; //for normal files
			} else {
				if ( fSize < (25 * 1024 * 1024) ){
					freq = 0.9; //for larger files
				} else {
					freq = 1.1; //for huge files
				}
			}
		}
	}
	return 2;
}

function startUpload(sessionId){
	$('multiUpload').style.visibility = 'hidden';
	//document.getElementById('fileForm').submit();
	if ($('cesta-k-souboru').value == '') {alert(_("UPLOAD_NO_FILE")); return false;}
	$('uploadForm').submit();
	showUploadForm(false);
	sessId = sessionId;
	$('uploadProgressBar').style.width = 0;
	$('uploadPlaceHolder').style.display = 'block';
	setTimeout('getTotalSize()', 1200);
}

function getTotalSize(){
	var paramStr = 'uploadHost='+uploadHost+'&requestStr=celkova-velikost';
	totalSizeRequest = new Ajax.Request(
							'/proxy-request/acc/'+sessId,
							{
								method: 'post',
								parameters: paramStr,
								onSuccess: function(req){ setTotalSize(req.responseText); },
								onFailure: function(req){ showError(req.responseText); }
							});
}

function setTotalSize(msgFromServer){
	//alert(msgFromServer);
	var paramStr = 'uploadHost='+uploadHost+'&requestStr=kolik-preneseno';
	totalSize = parseInt(msgFromServer);
	if ( isNaN(totalSize) ){
		// i suppose this whole if{} isn't even needed here
		//alert('totalSize isNaN! ("'+totalSize+'")');
		//
		//totalSize = 0;
		//
		totalSize = '---';
	}
	
	if ( bytesDoneUpdater == null){
		//
		// if bytesDoneUpdater already exists, it's useless
		// re-creating it again
		//
		
		var frequency = calculateUpdateFreq(totalSize);
		
		//create a periodical updater to fetch the number of bytes that have been transferred so far
		bytesDoneUpdater = new Ajax.PeriodicalUpdater(
								   {},
								   '/proxy-request/acc/'+sessId,
								   {
									   decay: 0,
									   frequency: frequency,
									   method: 'post',
									   parameters: paramStr,
									   onSuccess: function(req){ calculateDone(req.responseText); },
									   onFailure: function(req){ showError(req.responseText); }
								   });
	}
	
	return true;
}

function calculateDone(msgFromServer){
	bytesDone = parseInt(msgFromServer);
	if ( isNaN(bytesDone) ){
		bytesDone = 0;
	}
	
	var paramStr = 'uploadHost='+uploadHost+'&requestStr=celkova-velikost';
	if ( isNaN(totalSize) ){
		//create a new Ajax.Request to get the size!!
		new Ajax.Request(
					 '/proxy-request/acc/'+sessId,
					 {
						 method: 'post',
						 parameters: paramStr,
						 onSuccess: function(req){ setTotalSize(req.responseText); },
						 onFailure: function(req){ showError(req.responseText); }
					 });
	}
	
	if ( totalSize != 0 ){
		percentDone = Math.round( (bytesDone / totalSize) * 100 );
		pbWidth = percentDone + '%';
	} else {
		percentDone = '?';
		pbWidth = 0;
	}
	
	/**
	* It would probably save some resources
	* to declare hrTotalSize as a global and calculate
	* it only once in setTotalSize()
	*/
	
	//calculate kB / MB / sizes (2 decimals)
	var tmpTotalSize = totalSize; 
	var tmpTransferred = bytesDone;
	var units = ['B', 'kB', 'MB', 'GB'];

	var tsUnitsIdx = 0;
	var bdUnitsIdx = 0;
	
	while( (tmpTotalSize >= 1024) && (tsUnitsIdx < 4) ){
		tmpTotalSize = tmpTotalSize / 1024;
		tsUnitsIdx++;
	}
	tmpTotalSize = Math.round(tmpTotalSize * 100) / 100;
	
	while( (tmpTransferred >= 1024) && (bdUnitsIdx < 4) ){
		tmpTransferred = tmpTransferred / 1024;
		bdUnitsIdx++;
	}
	tmpTransferred = Math.round(tmpTransferred * 100) / 100;
	
	$('uploadProgressBar').style.width = pbWidth;
	transferredText = _("UPLOAD_TRANSFERRED_PART1") + ' ';
	outOf = _("UPLOAD_TRANSFERRED_PART2");
	$('ajaxStatusHolder').innerHTML = transferredText+' '+tmpTransferred+' '+units[bdUnitsIdx]+' '+outOf+' '+tmpTotalSize+' '+units[tsUnitsIdx]+' (<strong>'+percentDone+'%</strong>). &nbsp; &nbsp; &nbsp; (<a href="/moje-soubory" class="whiteLink">' + _("UPLOAD_CANCEL") + '</a>)';
	
		if ( bytesDone >= totalSize ){
			bytesDoneUpdater.stop();
			$('uploadPlaceHolder').style.visibility = 'hidden';
			errorTimeout = setTimeout('countError()', 1000);
			$('ajaxStatusHolder').innerHTML = _("UPLOAD_PROCESSING");
			//alert('submitting options form');
			submitOptionsForm();
		} //else {
			//alert(bytesDone);
		//}
}

function countError(){
	if ( waitSeconds <= 0 ){
		clearTimeout(errorTimeout);
		alert(_("UPLOAD_FAILED"));
		document.location = '/';
	} else {
		waitSeconds--;
	}
}

function submitOptionsForm(){
	if ( !submittedBefore ){
		submittedBefore = true;
		$('hiddenSelCatId').value = selCatId;
		$('hiddenFromRecord').value = fromRecord;
		frmsubmit = $('optionsForm').submit();
		//alert(frmsubmit);
	}
	$('multiUpload').style.visibility = 'visible';
}

// translation variables
var intl;
var _;
// translation load dictionary
function init() {
    
	intl = new i18n(i18nDict);
	intl.translateNodes();
	_ = function (str) { return intl.translate(str); };
}
// initialize translation
