var check86924 = {
    start : function() {
        document.getElementById('step1').style.display = 'none';
        document.getElementById('step2').style.display = 'block';
        this.iframe = document.getElementById('test_iframe');
        this.upload.set_progress(0);
        this.download.start();
    },
    save_results : function() {
        this.iframe.src = '/speedtest/saveresults?u=' + encodeURIComponent(this.results.upload) + '&d=' + encodeURIComponent(this.results.download) + '&idx=86924&z=' + encodeURIComponent(this.data.plz) + '&p=' + encodeURIComponent(this.data.provider) + '&s=' + encodeURIComponent(this.data.tarif) + '&str=' + encodeURIComponent(this.data.street) + '&c=' + encodeURIComponent(this.data.country);
    },
    finish : function() {},
    results : {
	place : 0,
	place_of : 0,
        download : 0,
        upload : 0
    },
    data : {
	provider : '',
	tarif : '',
        country: '',
	plz : '',
        street : ''
    },
    iframe : null,
    download : {
        start : function() {
            // Make one-time check
            // Fill this.tests array
            this.tests = [64, 128, 256];
            // Run tests
            this.progress_chunk = parseInt(100 / (this.tests.length * 5));
            this.set_progress(0);
            document.getElementById('th_download').style.visibility = 'visible';
            this.start_test(0);
        },
        finish : function() {
            this.set_progress(100);
            var average = 0;
            var res;
            if(this.results_tests.length > 0) {
                for(var i = 0; i < this.results_tests.length; i++) {
                    res = this.results_tests[i];
                    average += (res.size / res.time * 1000);
                }
                average = average / this.results_tests.length;
            }
            check86924.results.download = average;
            document.getElementById('th_download').style.visibility = 'hidden';
            check86924.upload.start();
        },
        progress_chunk : 0,
        progress : 0,
        set_progress : function(progress) {
            this.progress = progress;
            document.getElementById('progress_download').innerHTML = this.progress + '%';
            document.getElementById('pb_download').style.width = this.progress + '%'
        },
        tests : [],
        results_tests : [],
        results_chunks : [],
        start_test : function(test_number) {
            var size = this.tests[test_number];
            check86924.iframe.src = this.url + '?test=' + test_number + '&size=' + this.tests[test_number] + '&idx=86924';
        },
        process_chunk : function(chunk_size, timedelta) {
            this.results_chunks.push({size : chunk_size, time : timedelta});
            this.set_progress(this.progress + this.progress_chunk);
        },
        finish_test : function(test_number, test_size, timedelta) {
            this.results_tests.push({size : test_size, time : timedelta});
            if(test_number < this.tests.length - 1) {
                this.start_test(test_number + 1);
            } else {
                this.finish();
            }
        },
        url : '/utils/download.php'
    },
    upload : {
        start : function() {
            this.tests = [32, 64, 128, 32];
            // Run tests
            this.progress_chunk = parseInt(100 / (this.tests.length * 2));
            this.set_progress(0);
            document.getElementById('th_upload').style.visibility = 'visible';
            this.start_test(0);
        },
        finish : function() {
            this.set_progress(100);
            var average = 0;
            var res, timedelta;
            if(this.results_tests.length > 0) {
                for(var i = 0; i < this.results_tests.length; i++) {
                    res = this.results_tests[i];
                    if(res.end_time) {
                        timedelta = res.end_time - res.start_time;
                        average += (res.size / timedelta * 1000);
                    }
                }
                average = average / this.results_tests.length;
            }
            check86924.results.upload = average;
            document.getElementById('th_upload').style.visibility = 'hidden';
            check86924.save_results();
        },
        tests : [],
        results_tests : [],
        results_chunks : [],
        progress_chunk : 0,
        progress : 0,
        set_progress : function(progress) {
            this.progress = progress;
            document.getElementById('progress_upload').innerHTML = this.progress + '%';
            document.getElementById('pb_upload').style.width = this.progress + '%'
        },
        start_test : function(test_number) {
            var size = this.tests[test_number];
            check86924.iframe.src = this.url + '?test=' + test_number + '&size=' + this.tests[test_number] + '&idx=86924';
        },
        set_test_start : function(test_number, time) {
            this.set_progress(this.progress + this.progress_chunk);
            this.results_tests[test_number] = {size: this.tests[test_number] * 1024, start_time : time, end_time : 0}
        },
        set_test_end : function(test_number, time) {
            this.results_tests[test_number].end_time = time;
            this.set_progress(this.progress + this.progress_chunk);
            if(test_number < this.tests.length - 1) {
                this.start_test(test_number + 1);
            } else {
                this.finish();
            }
        },
        url : '/utils/upload.php'
    },
    pager : {
        page : 1,
        total_pages : 4,
	init_pages : function() {
		var maxp = 0;
		while(document.getElementById('page' + (maxp + 1))) {
		    maxp++;
		}
		this.total_pages = maxp;
	},
        previous : function() {
            var p = this.page;
            this.page = (this.page == 1) ? this.total_pages : this.page - 1;
            document.getElementById('page' + p).style.display = 'none';
            document.getElementById('page' + this.page).style.display = 'block';
	    document.getElementById('page_number').innerHTML = this.page;
        },
        next : function() {
            var p = this.page;
            this.page = (this.page == this.total_pages) ? 1 : this.page + 1;
            document.getElementById('page' + p).style.display = 'none';
            document.getElementById('page' + this.page).style.display = 'block';
	    document.getElementById('page_number').innerHTML = this.page;
        }
    }
}