onload = function() {
	var	div = document.getElementById("benchmark"),
		bench = new Benchmark(),
		output = [],
		common = [],
		bestlap = [],
		temporary = new Array(5000 + parseInt(Math.random()*2109));

// author
	output.push("<h1 onclick=\"window.open('http://webreflection.blogspot.com/', 'webreflection')\">&copy; Web Reflection Blog</h1>");

// loop benchmark
	common = [];
	output.push("<div class=\"container\" onmouseover=\"this.style.backgroundColor='#EFEFEF'\" onmouseout=\"this.style.backgroundColor='#FFFFFF'\">");
	output.push("<h2>for loop (i++) without any optimizzations</h2>", "<h4>for(i = 0; i &lt; temporary.length; i++)</h4>");
	bench.start();
	for(i = 0; i < temporary.length; i++)
		common.push({id:i,name:"test".concat(i)});
	output.push("<h3>Time elapsed: <strong>", bench.getTime(), "</strong> seconds<br />for ", common.length, " push operations</h3>");
	output.push("</div>");
	bestlap.push(bench.getTime());
	
	common = [];
	output.push("<div class=\"container\" onmouseover=\"this.style.backgroundColor='#EFEFEF'\" onmouseout=\"this.style.backgroundColor='#FFFFFF'\">");
	output.push("<h2>for loop (i++) with local variables</h2>", "<h4>for(var i = 0; i &lt; temporary.length; i++)</h4>");
	bench.start();
	for(var i = 0; i < temporary.length; i++)
		common.push({id:i,name:"test".concat(i)});
	output.push("<h3>Time elapsed: <strong>", bench.getTime(), "</strong> seconds<br />for ", common.length, " push operations</h3>");
	output.push("</div>");
	bestlap.push(bench.getTime());
	
	common = [];
	output.push("<div class=\"container\" onmouseover=\"this.style.backgroundColor='#EFEFEF'\" onmouseout=\"this.style.backgroundColor='#FFFFFF'\">");
	output.push("<h2>for loop (i++) with optimizzations</h2>", "<h4>for(var i = 0, j = temporary.length; i &lt; j; i++)</h4>");
	bench.start();
	for(var i = 0, j = temporary.length; i < j; i++)
		common.push({id:i,name:"test".concat(i)});
	output.push("<h3>Time elapsed: <strong>", bench.getTime(), "</strong> seconds<br />for ", common.length, " push operations</h3>");
	output.push("</div>");
	bestlap.push(bench.getTime());

	common = [];
	output.push("<div class=\"container\" onmouseover=\"this.style.backgroundColor='#EFEFEF'\" onmouseout=\"this.style.backgroundColor='#FFFFFF'\">");
	output.push("<h2>for loop (++i) with optimizzations</h2>", "<h4>for(var i = 0, j = temporary.length; i &lt; j; ++i)</h4>");
	bench.start();
	for(var i = 0, j = temporary.length; i < j; ++i)
		common.push({id:i,name:"test".concat(i)});
	output.push("<h3>Time elapsed: <strong>", bench.getTime(), "</strong> seconds<br />for ", common.length, " push operations</h3>");
	output.push("</div>");
	bestlap.push(bench.getTime());

	common = [];
	output.push("<div class=\"container\" onmouseover=\"this.style.backgroundColor='#EFEFEF'\" onmouseout=\"this.style.backgroundColor='#FFFFFF'\">");
	output.push("<h2>while loop (i++) without optimizzations</h2>", "<h4>i = 0; while(i &lt; temporary.length)</h4>");
	bench.start();
	i = 0;
	while(i < temporary.length) {
		common.push({id:i,name:"test".concat(i)});
		i++;
	}
	output.push("<h3>Time elapsed: <strong>", bench.getTime(), "</strong> seconds<br />for ", common.length, " push operations</h3>");
	output.push("</div>");
	bestlap.push(bench.getTime());
	
	common = [];
	output.push("<div class=\"container\" onmouseover=\"this.style.backgroundColor='#EFEFEF'\" onmouseout=\"this.style.backgroundColor='#FFFFFF'\">");
	output.push("<h2>while loop (i++) with optimizzations</h2>", "<h4>var i = 0, j = temporary.length; while(i &lt; j)</h4>");
	bench.start();
	var i = 0, j = temporary.length;
	while(i < j) {
		common.push({id:i,name:"test".concat(i)});
		i++;
	}
	output.push("<h3>Time elapsed: <strong>", bench.getTime(), "</strong> seconds<br />for ", common.length, " push operations</h3>");
	output.push("</div>");
	bestlap.push(bench.getTime());
	
	common = [];
	output.push("<div class=\"container\" onmouseover=\"this.style.backgroundColor='#EFEFEF'\" onmouseout=\"this.style.backgroundColor='#FFFFFF'\">");
	output.push("<h2>while loop (++i) with optimizzations</h2>", "<h4>var i = 0, j = temporary.length; while(i &lt; j)</h4>");
	bench.start();
	var i = 0, j = temporary.length;
	while(i < j) {
		common.push({id:i,name:"test".concat(i)});
		++i;
	}
	output.push("<h3>Time elapsed: <strong>", bench.getTime(), "</strong> seconds<br />for ", common.length, " push operations</h3>");
	output.push("</div>");
	bestlap.push(bench.getTime());
	
	common = [];
	output.push("<div class=\"container\" onmouseover=\"this.style.backgroundColor='#EFEFEF'\" onmouseout=\"this.style.backgroundColor='#FFFFFF'\">");
	output.push("<h2>for loop (i--) without any optimizzations</h2>", "<h4>for(i = temporary.length - 1; i &gt;= 0; i--)</h4>");
	bench.start();
	for(i = temporary.length - 1; i >= 0; i--)
		common.push({id:i,name:"test".concat(i)});
	output.push("<h3>Time elapsed: <strong>", bench.getTime(), "</strong> seconds<br />for ", common.length, " push operations</h3>");
	output.push("</div>");
	bestlap.push(bench.getTime());
	
	common = [];
	output.push("<div class=\"container\" onmouseover=\"this.style.backgroundColor='#EFEFEF'\" onmouseout=\"this.style.backgroundColor='#FFFFFF'\">");
	output.push("<h2>for loop (i--) with optimizzations</h2>", "<h4>for(var i = temporary.length - 1; i &gt; -1; i--)</h4>");
	bench.start();
	for(var i = temporary.length - 1; i > -1; i--)
		common.push({id:i,name:"test".concat(i)});
	output.push("<h3>Time elapsed: <strong>", bench.getTime(), "</strong> seconds<br />for ", common.length, " push operations</h3>");
	output.push("</div>");
	bestlap.push(bench.getTime());
	
	common = [];
	output.push("<div class=\"container\" onmouseover=\"this.style.backgroundColor='#EFEFEF'\" onmouseout=\"this.style.backgroundColor='#FFFFFF'\">");
	output.push("<h2>for loop (--i) with optimizzations</h2>", "<h4>for(var i = temporary.length - 1; i &gt;= 0; --i)</h4>");
	bench.start();
	for(var i = temporary.length - 1; i >= 0; --i)
		common.push({id:i,name:"test".concat(i)});
	output.push("<h3>Time elapsed: <strong>", bench.getTime(), "</strong> seconds<br />for ", common.length, " push operations</h3>");
	output.push("</div>");
	bestlap.push(bench.getTime());
	
	common = [];
	output.push("<div class=\"container\" onmouseover=\"this.style.backgroundColor='#EFEFEF'\" onmouseout=\"this.style.backgroundColor='#FFFFFF'\">");
	output.push("<h2>while loop (i--) with optimizzations</h2>", "<h4>var i = temporary.length; while(i--)</h4>");
	bench.start();
	var i = temporary.length;
	while(i--)
		common.push({id:i,name:"test".concat(i)});
	output.push("<h3>Time elapsed: <strong>", bench.getTime(), "</strong> seconds<br />for ", common.length, " push operations</h3>");
	output.push("</div>");
	bestlap.push(bench.getTime());
	
	common = [];
	output.push("<div class=\"container\" onmouseover=\"this.style.backgroundColor='#EFEFEF'\" onmouseout=\"this.style.backgroundColor='#FFFFFF'\">");
	output.push("<h2>while loop (--i) with optimizzations</h2>", "<h4>var i = temporary.length; while(i)</h4>");
	bench.start();
	var i = temporary.length;
	while(i) {
		--i;
		common.push({id:i,name:"test".concat(i)});
	}
	output.push("<h3>Time elapsed: <strong>", bench.getTime(), "</strong> seconds<br />for ", common.length, " push operations</h3>");
	output.push("</div>");
	bestlap.push(bench.getTime());

// fast duff ???	
	common = [];
	output.push("<div class=\"container\" onmouseover=\"this.style.backgroundColor='#EFEFEF'\" onmouseout=\"this.style.backgroundColor='#FFFFFF'\">");
	output.push("<h2>kentaromiura fastest device (duff's device optimized)</h2>", "<h4>var i = temporary.length; .... --i every 8 index</h4>");
	bench.start();
	var i = temporary.length;
	if(parseInt(i/8)) {
		var j=i%8;
		do {
			--i; common.push({id:i,name:"test".concat(i)});
			--i; common.push({id:i,name:"test".concat(i)});
			--i; common.push({id:i,name:"test".concat(i)});
			--i; common.push({id:i,name:"test".concat(i)});
			--i; common.push({id:i,name:"test".concat(i)});
			--i; common.push({id:i,name:"test".concat(i)});
			--i; common.push({id:i,name:"test".concat(i)});
			--i; common.push({id:i,name:"test".concat(i)});
		}while(i!=j);
	};
	while(i--)
		common.push({id:i,name:"test".concat(i)});
	output.push("<h3>Time elapsed: <strong>", bench.getTime(), "</strong> seconds<br />for ", common.length, " push operations</h3>");
	output.push("</div>");
	bestlap.push(bench.getTime());
	
	
	common = [];
	output.push("<div class=\"container\" onmouseover=\"this.style.backgroundColor='#EFEFEF'\" onmouseout=\"this.style.backgroundColor='#FFFFFF'\">");
	output.push("<h2>for \"in-scope\" loop (Johannes Reichardt)</h2>", "<h4>for(var i = 0, j = temporary.length; i &lt; j && common.push({id:i,name:\"test\".concat(i)}); i++);</h4>");
	bench.start();
	for(var i = 0, j = temporary.length; i < j && common.push({id:i,name:"test".concat(i)}); i++);
	output.push("<h3>Time elapsed: <strong>", bench.getTime(), "</strong> seconds<br />for ", common.length, " push operations</h3>");
	output.push("</div>");
	bestlap.push(bench.getTime());
	
	
	common = [];
	output.push("<div class=\"container\" onmouseover=\"this.style.backgroundColor='#EFEFEF'\" onmouseout=\"this.style.backgroundColor='#FFFFFF'\">");
	output.push("<h2>my dirty \"in-scope\" dedicated way :P</h2>", "<h4>while(common.push( {id:i,name:\"test\".concat(i)}) &lt; temporary.length);</h4>");
	bench.start();
	while(common.push({id:i,name:"test".concat(i)}) < temporary.length);
	output.push("<h3>Time elapsed: <strong>", bench.getTime(), "</strong> seconds<br />for ", common.length, " push operations</h3>");
	output.push("</div>");
	bestlap.push(bench.getTime());
	
	
	
// bench output
	div.innerHTML = output.join("\n");
	var i = bestlap.length, j = 0;
	while(i--)
		j = j === 0 ? bestlap[i] : Math.min(j, bestlap[i]);
	temporary = document.getElementsByTagName("strong");
	i = temporary.length;
	while(i--) {
		if(parseFloat(temporary[i].innerHTML) === j) {
			temporary[i].className = "winner";
			temporary[i].parentNode.parentNode.style.backgroundColor = "#EEF";
		}
	}
	setTimeout(arguments.callee, 4000);
};
