

SpeedTest = {};

// create application
SpeedTest.app = function(){
    // do NOT access DOM from here; elements don't exist yet
   
    // private variables
    var speed;
    var _this;
	
    // private functions
	
	format_seconds = function (s){
		function tfn(t){
			return t >= 10 ? t : '0'+t
		}

		var sec = s % 60;
		var min = Math.floor((s/60) % 60);
		var h = Math.floor(s/3600);
		var f = '';
		if(!h && !min) f = sec + ' Sek';
		else if(!h) f = min + ':' + tfn(sec) + ' Min';
		else f = h + ':' + tfn(min) + ':' + tfn(sec) + ' Std';

		return f;
	};

	format_speed = function(s){
		kbps = s*8;
		if(kbps > 1000)
			f = Math.round(10*kbps/1000)/10 + " MBit";
		else
			f = Math.round(kbps) + " kbit/s";

		return f;
	};
	
	test_dlspeed = function (callback){
		var startTime = (new Date()).getTime();
		
		_this.http.open('get','speedtest_data.php',true);
		_this.http.onreadystatechange = function(){
			if (_this.http.readyState == 4){
				var endTime = (new Date()).getTime();
				var bytes = _this.http.responseText.length;
				var speed = Math.round(bytes/(endTime-startTime));
				new Ajax.Request('speedtest_data.php?report_speed='+speed, { method:'get' });
				callback.bind(_this)(speed);
			}
		};
		_this.http.send(null);
		
		/*
		new Ajax.Request('speedtest_data.php',
		{
			method:'get',
			onSuccess: function(transport){
				var endTime = (new Date()).getTime();
				var bytes = transport.responseText.length;
				var speed = Math.round(bytes/(endTime-startTime));
				new Ajax.Request('speedtest_data.php?report_speed='+speed, { method:'get' });
				callback.bind(_this)(speed);
			},
			onFailure: function(){ alert('Ihre Bandbreite konnte nicht ermittelt werden.') }
		});*/
	};
	
	var addLinks = function(){
		var links = $$('.speedtest_calculate');
		links.push($('speedtest_humanspeed'));
       	links.each(function(el){
      		Event.observe(el, 'click', _this.calculateSpeed.bindAsEventListener(_this));
       	});
    };
    
    var createRequestObject = function() {
		try {
			var ro = new XMLHttpRequest();
		}
		catch (e) {
			var ro = new ActiveXObject("Microsoft.XMLHTTP");
		}
		return ro;
	};
    
    // public space
    return {
        // public properties, e.g. strings to translate
        
       thumbler:  'speedtest_thumbler',
       humanspeed: 'speedtest_humanspeed',
		
		displayDlTimes: function(){
			$$('.speedtest').each( function(el){ 
				var bytes = el.select('.speedtest_bytes')[0].innerHTML;
				var dlSeconds = Math.round((bytes/1024)/speed);
				var result = el.select('.speedtest_result')[0];
				el.select('.speedtest_calculate')[0].hide();
				result.innerHTML = format_seconds(dlSeconds);
				result.show();
			});
			$(this.humanspeed).show();
			$(this.humanspeed).innerHTML = format_speed(speed);
			$(this.thumbler).hide();
		},
		
		calculateSpeed: function(){
		
			$(this.humanspeed).hide();
			$(this.thumbler).show();
			
			test_dlspeed(
			 function(mspeed, t){
				speed = mspeed;
				this.displayDlTimes();
			});
		},
		
        // public methods
        init: function(mspeed){
        	_this = this;
            this.http = createRequestObject();
        	
            if(mspeed && mspeed > 0){
            	speed = mspeed;
            	this.displayDlTimes();
            }
            addLinks();
            
        }
    };
}
(); // end of app
// end of file

SpeedTest.app.init.bind(SpeedTest.app);

/*Event.observe(window, 'load', function() {
  SpeedTest.app.displayDlTimes();
});*/

/*


function calc_dltime(bytes){
	var dltime = $('dl_time');
	var dltLink = $('dl_time_calc');
	var dltWait = $('dl_time_wait');
	dltime.innerHTML = '';
	dltLink.hide();
	dltWait.show();
	Effect.Pulsate(dltWait, {duration: 10, pulses: 10});
	get_dlspeed(function(speed){
		show_dltime(bytes, speed);
		dltWait.hide();
		dltLink.innerHTML = "(neu berechnen)";
		dltLink.show();
	});
}

function show_dltime(bytes, speed){
	var dlSeconds = Math.round((bytes/1024)/speed);
	$('dl_time').innerHTML = format_seconds(dlSeconds) + " bei " + format_speed(speed);
	$('dl_time_calc').innerHTML = "(neu berechnen)";

}


*/

