var updater;
var dataToCheck;

var oldBytes = 0;
var oldTime = 0;

var unit = '';

var waiting = 0;

function updateFunc() {
	dataToCheck.iesuxx = Math.random();

	if (waiting && waiting++ < 10)
		return;
	
	$.get(
		'/ctl/' + unit + '/stat/',
		dataToCheck,
		function(data, status) {
			waiting = 0;
			
//		    try {
			var l = data.match(/^(\S+)\s(.*)$/);
			cmd = l[1];
			data = l[2];
			
			if ( cmd == 'wait' && data == '1' ) {
				dataToCheck.cmd = 'bytes';
				$("#links").addClass('hidden');
				$("#percentage").removeClass('hidden');
				setStatus(fileTransferStarted);

				var frm = window.frames.file.window.$('form').get(0);
				frm.submit();
			}

			if ( cmd == 'bytes' ) {
				var pc = data.split(' ');
				var state = pc[0];
				
				switch(state) {
				    case 'work':
				    
					var dt = new Date;
					var time = dt.getTime();
					
					speed = oldTime ? Math.round( (pc[1] - oldBytes) / (time - oldTime) / 0.1024 ) / 10 : 0;
					
					if (!oldTime) {
						oldBytes = pc[1];
						oldTime = time;
					}
					
					pc = Math.round( pc[1] / pc[2] * 100 );					
					
					setPercentage(pc);
					setStatus(fileTransferInProgress + pc + "%, " + speed + kBps);
					
					break;

				    case 'finished':
					dataToCheck.cmd = '';
					clearInterval(updater);
					setStatus(fileTransferCompleted);
					$('#percentage').addClass('finished');
					setPercentage(100);
					break;
					
				    case 'error':
					dataToCheck.cmd = '';
					clearInterval(updater);
					setStatus("");
					showError(fileTransferFailed);
					window.frames.file.window.location.href = "frame.html";
					setPercentage(0);
					break;
					
				    default:
					break;
				}
			}
//		    } catch(e) {
//			alert(e.description);
//		    }
		}
	);
}

function setPercentage(value) {
    $('#percentage div').css('width', value + '%');
}

function setStatus(text) {
    $('#state').text(text);
}

function showError(text) {
    $('.error').text(text);
    $('.error').removeClass('hidden');
}

function hideError() {
    $('.error').text('');
    $('.error').addClass('hidden');
}

$(document).ready( function() {
	$('.frame input[type="file"]').change( function() {
		var frm = $(this).parent();
		frm.attr('action', '');
		frm.addClass('loading');
		
		window.parent.$("#links div").text('');
		window.parent.$("#links").addClass('hidden');
		window.parent.$("#introduction").removeClass('hidden');
		window.parent.hideError();
		
		$.ajax({
			url: '/ctl/get_url/',
			data: { filename: $(this).val(), iesuxx: Math.random() },
			success: function(data, status) {
				var ab = data.split(' ');
				window.parent.unit = ab[0];
				data = ab[1];
				
				frm.attr('action', data);
				frm.removeClass('loading');
				window.parent.$("#links div").text(data);
				window.parent.$("#links").removeClass('hidden');
				window.parent.$("#introduction").addClass('hidden');
				window.parent.setStatus(waitingForRecipient);
				window.parent.setPercentage(0);
				window.parent.oldTime = 0;
				window.parent.oldBytes = 0;
				window.parent.$('#percentage').addClass('hidden');
				window.parent.$('#percentage').removeClass('finished');
				
				window.parent.dataToCheck = {
					cmd: 'wait',
					url: data,
					iesuxx: Math.random()
				};
				
				window.parent.updater = window.parent.setInterval(window.parent.updateFunc, 1000);
			},
			error: function(req) {
			    window.parent.showError(oops);
			}
		});
	});
	
	$('.frame form').submit(function() {
	    return false;
	});
});
