function displayProgress(container) {
	re = /^\./;
	if (! re.test(container.innerHTML))
		return;
	container.innerHTML += ' .';
	setTimeout(function(){displayProgress(container)}, 200);
}

function loadimg(_id, loc, fileSize) {
	var img = new Image();
	var div_status = document.getElementById("speedtest_status");
	var div_output= document.getElementById("speedtest_output");
	var ajaxObject = new Array();

	img.onload = function() {
		end = (new Date()).getTime();
		diff = end - start;
		
		//alert('loaded. timediff: ' + (end - start) + ' ms');
		connectSpeed = (Math.floor((((fileSize * 8) / (diff / 1000)) / 1024) * 10) / 10);//kbs

		//set display timeout to at least 10s
		to = ( (diff  >= 10000) ? 0 : (10000-diff)) ;

		audio_size = 5 * 8 * 1024;//Kb
		video_size = 700 * 8 * 1024;//Kb
		audio_seconds = audio_size / connectSpeed;
		video_seconds = video_size / connectSpeed;

		//ajax: get avgspeeds
		ajaxObject[0] = new sack();
		ajaxObject[0].requestFile = '/runBwGetAvgSpeedData.php';
		ajaxObject[0].onCompletion = function() {
			var data = eval(ajaxObject[0].response);
			var p_name = data.provider;
			var c_name = data.country;
			var c_avgs = data.c_avgspeed;
			var p_avgs = data.p_avgspeed;
			
			//compute %
			var c_percentage = (connectSpeed * 100) / c_avgs;
			c_percentage -= 100;
			c_percentage = Math.floor(c_percentage * 10) / 10;
			var p_percentage = (connectSpeed * 100) / p_avgs;
			p_percentage -= 100;
			p_percentage = Math.floor(p_percentage * 10) / 10;
			
			//compute % output text
			if (c_percentage == c_avgs)
				c_percentage_text = 'equal to';
			else if (c_percentage < 0)
				c_percentage_text = '<c_percentage>% lower than';
			else if(c_percentage > 0)
				c_percentage_text = '<c_percentage>% higher than';
			
			if (p_percentage == p_avgs)
				p_percentage_text = 'equal to';
			else if (p_percentage < 0)
				p_percentage_text = '<p_percentage>% lower than';
			else if(p_percentage > 0)
				p_percentage_text = '<p_percentage>% higher than';
			
			//compute output colors based on %
			c_color = 'red';
			if ( c_percentage > 5 )
				c_color = 'green';
			else if (  (c_percentage >= -5) && (c_percentage <= 5) )
				c_color = 'blue';

			p_color = 'red';
			if ( p_percentage > 5 )
				p_color = 'green';
			else if (  (p_percentage >= -5) && (p_percentage <= 5) )
				p_color = 'blue';
			
			//build up output
			var line1 = '<b>Your speed: <u>' + connectSpeed + '</u> Kbps</b>' ;
			if (connectSpeed > 512)
				line1 += '<br /><b>Your network speed allows you to watch TV online, click <a target="_blank" href="http://www-online.tv/watch-tv-online/' + c_name + '">here</a> for a test.</b>';
			var line2 = '<span style="font-weight:bold; color:' + c_color + '">Average download speed in ' + c_name + ' (See <a target="_blank" href="http://www.download-speed.org/speed-test/' + escape(c_name) + '">' + c_name + ' Speed</a>): <u>' + c_avgs + '</u> Kbps <br>(your speed is ' + c_percentage_text + ' your country\'s average speed)</span>';
			var line3 = '<span style="font-weight:bold; color:' + p_color + '">Provider\'s average speed is: <u>' + p_avgs + '</u> Kbps <br>(your speed is ' + p_percentage_text + ' your provider\'s <u>(' + p_name + ')</u></span>';
			var line4 = '<b>You can download (at least theoretically) a song (5MB) in  <audio_seconds> seconds</b>';
			var line5 = '<b>or a movie (700MB) in <video_minutes> minutes.<br><u>For relevant results please run the test several times.</u></b>';
		
			line2 = line2.replace(/<c_percentage>/, Math.abs(c_percentage));
			line3 = line3.replace(/<p_percentage>/, Math.abs(p_percentage));
			line4 = line4.replace(/<audio_seconds>/, Math.floor(audio_seconds * 10) / 10);
			line5 = line5.replace(/<video_minutes>/, Math.floor((video_seconds / 60) * 10) / 10);
			
			var output = '<br />' + line1 + '<br />' + line2 + '<br />' + line3 + '<br />' + line4 + '<br />' + line5 + '<br /><br />';
			
			//display output with timeout and update href with server id
			setTimeout(function(){
				updateSrv(_id);
				div_status.innerHTML = output; 
				div_status.removeAttribute('style');
				div_output.style.display = 'block'}, to);
		}
		ajaxObject[0].runAJAX();

		//ajax: update db
		ajaxObject[1] = new sack();
		ajaxObject[1].requestFile = '/runBwClientDbUpdate.php';
		ajaxObject[1].method = 'GET';
		ajaxObject[1].setVar('id', _id);
		ajaxObject[1].setVar('speed', connectSpeed);
		ajaxObject[1].onCompletion = function() {
			//alert(ajaxObject[1].response);
		}
		ajaxObject[1].runAJAX();
	}
	if (loc == '')
		div.innerHTML = 'Invalid server';
	else {
		start = (new Date()).getTime();
		div_output.style.display = 'none';
		div_status.style.fontSize='15px';
		div_status.style.display = 'block';
		displayProgress(div_status);
		img.src = loc + fileSize + '.gif?t=' + escape(start);
	}
}

function updateSrv(_id) {
	var a = document.getElementById('speedtest_start');
	var pattern = /([^0-9]+).*/;
	a.href = a.href.replace(pattern, "$1" + _id);
}
