var d4jsbWatchTimer;
var d4jsbOnFontResize = {};
var d4jsbBodyHeight;

function d4jsbRemove(elems) {
	for(i in elems) {
		e = elems[i];
		e.parentNode.removeChild(e);
	}
}

function d4jsbDraw(id, where, path, bgcolor) {
	var d = document.getElementById(id);
	//d.style.background = 'green';
	
	if(!bgcolor) {
		if(document.defaultView && document.defaultView.getComputedStyle) {
			bgcolor = document.defaultView.getComputedStyle(d, '').getPropertyValue('background-color');
		} else if(d.currentStyle) {
			bgcolor = d.currentStyle['backgroundColor'];
		}
	}
	
	var elems = [];
	var imgs = [];
	var imgs_waiting = where.length;
	
	var draw = function() {
	
		var z = 1;
		/*
		if(navigator.userAgent.match(/\bMSIE [7-9]/)) {
			// zoom factor for IE7
			var zd = document.createElement('div');
			zd.style.position = 'absolute';
			zd.style.left = '500px';
			document.body.appendChild(zd);
			z = zd.offsetLeft/500;
			document.body.removeChild(zd);
		}
		*/
	
		// rivien korkeudet ja sarakkeiden leveydet
		var wid = {1:0, 3:0};
		var hei = {1:0, 3:0};
		
		// reunojen leveydet
		for(i in {1:1, 2:1, 3:1}) { if(imgs[i]) { hei[1]=imgs[i].height; break } }
		for(i in {7:1, 8:1, 9:1}) { if(imgs[i]) { hei[3]=imgs[i].height; break } }
		for(i in {1:1, 4:1, 7:1}) { if(imgs[i]) { wid[1]=imgs[i].width;  break } }
		for(i in {3:1, 6:1, 9:1}) { if(imgs[i]) { wid[3]=imgs[i].width;  break } }
		
		wid[2] = Math.max(0, d.offsetWidth  - wid[1] - wid[3]);
		hei[2] = Math.max(0, d.offsetHeight - hei[1] - hei[3]);
		
		if(hei[2]<1) hei[2]=1;
		
		var ut = document.createElement('table');
		ut.className = 'jsb';
		ut.style.zIndex = 0;
		ut.style.position = 'absolute';
		var str = "";
		
		ut.style.left = d.offsetLeft/z+'px';
		ut.style.top  = d.offsetTop /z+'px';
		//alert(ut.style.left + ", " + ut.style.top);
	
		ut.style.borderCollapse = 'collapse';
		ut.style.margin = 0;
		ut.style.padding = 0;
		ut.style.emptyCells = 'show';
		
		var domain = '';
		if(location.href.match(/^(.*?\/\/.*?)\//)) {
			domain = RegExp.$1;
		}
		
		for(y=1; y<=3; y++) {
			var utr = ut.insertRow(y-1);
			for(x=1; x<=3; x++) {
				var n = 3 * (y-1) + x;
				
				var utd = utr.insertCell(x-1);
				utd.style.padding = 0;
				utd.className = 'jsb-c' + n;
				
				utd.style.width  = wid[x]+'px';
				utd.style.height = hei[y]+'px';
				
				//utd.style.border = '1px solid red';
				if(n==5) {
					utd.style.background = bgcolor;
				} else if(imgs[n]) {
					if(n % 2) {
						// nurkat
						var img = document.createElement('img');
						img.src = path + n + '.png';
						if(navigator.userAgent.match(/\bMSIE 6/)) {
							img.style.behavior = 'url(/sys/iepngfix.htc)';
						}
						utd.appendChild(img);
					} else if(navigator.userAgent.match(/\bMSIE 6/)) {
						var img = document.createElement('img');
						img.src = path + n + '.png';
						img.style.behavior = 'url(/sys/iepngfix.htc)';
						img.style.width  = wid[x] + 'px';
						img.style.height = hei[y] + 'px';
						utd.appendChild(img);
					} else if(n==2 || n==8) {
						utd.style.background = 'url('+domain+path+n+'.png) repeat-x';
					} else if(n==4 || n==6) {
						utd.style.background = 'url('+domain+path+n+'.png) repeat-y';
					}
				} else {
					utd.style.background = bgcolor;
				}
			}
		}
		if(hei[1] + hei[2] + hei[3] > d.offsetHeight) {
			d.style.height = hei[1] + hei[2] + hei[3] + 'px';
		}
		//alert(ut.innerHTML);
		//d.parentNode.appendChild(ut);
		d.parentNode.insertBefore(ut,d);
		d.style.zIndex = 2;
		
		d.style.background = 'none';

		d4jsbOnFontResize[id] = function() { d4jsbRemove([ut]); d4jsbDraw(id,where,path,bgcolor) };
		//ut.onmouseover = function() { d4jsbRemove([ut]); d4jsbDraw(id,where,path,bgcolor) };
		//ut.onmouseover = function() { alert(this.style.left + "," + this.style.top) };
		
		if(! d4jsbWatchTimer) {
			d4jsbBodyWidth = document.body.offsetWidth;
			d4jsbBodyHeight = document.body.offsetHeight;
			d4jsbFirstDivLeft = d.offsetLeft; // IE6
			d4jsbFirstDivTop = d.offsetTop;
			d4jsbWatchTimer = window.setInterval(function() {
				if(d4jsbBodyHeight != document.body.offsetHeight || d4jsbFirstDivTop != d.offsetTop || d4jsbBodyWidth != document.body.offsetWidth || d4jsbFirstDivLeft != d.offsetLeft) {
					//alert(d4jsbBodyHeight + "\n" + document.body.offsetHeight + "\n" + d4jsbFirstDivTop + "\n" + d.offsetTop + "\n" + d4jsbBodyWidth + "\n" + document.body.offsetWidth + "\n"+ d4jsbFirstDivLeft + "\n" + d.offsetLeft);
					d4jsbBodyWidth = document.body.offsetWidth;
					d4jsbBodyHeight = document.body.offsetHeight;
					d4jsbFirstDivLeft = d.offsetLeft;
					d4jsbFirstDivTop = d.offsetTop;
					for(i in d4jsbOnFontResize) {
						d4jsbOnFontResize[i]();
					}
					
				}
				
			}, 250);
		}
		
	};
	
	var B = where.split("");
	for(var _b in B) {
		var b = B[_b];
		var i = document.createElement('img');
		i.style.visibility = 'hidden';
		i.style.position = 'absolute';
		if(navigator.userAgent.match(/\bMSIE [5-6]/)) {
			i.style.behavior = 'url(iepngfix/iepngfix.htc)';
		}
		i.style.zIndex = 20;
		
		if(! navigator.userAgent.match(/\bMSIE /)) {
			i.onload = function() { if(--imgs_waiting==0) { draw() }};
		}
		i.src = path + b + '.png';
		imgs[b] = i;
		d.parentNode.appendChild(i, d);
		elems.push(i);
	}

	// IE ei aina aja onload-funktiota kaikille kuville...
	if(navigator.userAgent.match(/\bMSIE /)) {
		var tries = 200;
		var clockDraw = function() {
			
			for(i in imgs) {
				//window.status += ", " + i + ':' + imgs[i].width + 'x' + imgs[i].height;
				if(! imgs[i].height || (navigator.userAgent.match(/\bMSIE [67]/) && imgs[i].width==28 && imgs[i].height==30)) {
					if(--tries) {
						window.setTimeout(clockDraw, 100);
					}
					return;
				}
			}
			/*
			var str="";
			for(i in imgs) {
				str += i + ": " + imgs[i].fileSize + ", " + imgs[i].readyState + ", " + imgs[i].height + " x " + imgs[i].width + "\n";
			}
			alert(str);
			*/
			draw();
		};
		window.setTimeout(clockDraw, 1);
	}
}
