//var base="http://i219.photobucket.com/albums/cc195/constantine_sh/";
//var base="http://const.homelinux.net/hp/kernel_map.d/";
//var base="/kernel_map.d/";

var scale_timer;
var lkmi;
var ping_t=5;
var uptime=0;
var actions=0;

function trace(m1,m2)
{
	try {
		if ( m1 == "error" && ( -1 == m2.indexOf("urchin"))) { 
			document.getElementById('status2').style.display='error';
			document.getElementById('status2').innerHTML="<b>Sorry. Error. Please reload.</b>"// +m2
		}
		//log(navigator.appName);
		//if ( navigator.appName  != "Konqueror" ) 
		{
			var http_req = http_req_get();
			if (http_req) with (http_req) {
				onreadystatechange = function (){/*log("onreadystatechange");*/ }
				open("get", 
						//						"http://www.makelinux.net/"
						//"http://hp.const.homelinux.net/" +
						"/kernel_map.d/trace_"+m1+"?t="+uptime+"&"+m2,true);
				send(null);
			}
		}
	} catch (e) { }
}

function tick()
{
	setTimeout("tick()",1000);
	uptime+=1;
}
function ping()
{
	//trace("ping","");
	setTimeout("ping()",ping_t);
	ping_t*=4;
}
setTimeout("ping()",ping_t);
function rectangle(rl,rt,rr,rb,  l,t,r,b)
{
	w=(b-t)/10;
	w=2
	//log2(w);
	rt.style.position = 'absolute';
	rt.style.left = l-w;
	rt.style.top  = t-w-1;
	rt.style.width = r-l+2*w + "px";
	rt.style.height = w+ "px";
	rt.style.backgroundColor = 'white';
	rt.style.visibility = 'visible';
	rt.style.size=0
	rt.style.display='inline'

	rl.style.position = 'absolute';
	rl.style.left = l-w;
	rl.style.top  = t-w;
	rl.style.width = w;
	rl.style.height = b-t+2*w;
	rl.style.backgroundColor = 'white';
	rl.style.visibility = 'visible';
	rl.style.display=''

	
	rr.style.position = 'absolute';
	rr.style.left = r;
	rr.style.top  = t-w;
	rr.style.width = w;
	rr.style.height = b-t +2*w;
	rr.style.backgroundColor = 'white';
	rr.style.visibility = 'visible';
	rr.style.display=''

	rb.style.position = 'absolute';
	rb.style.left = l;
	rb.style.top  = b;
	rb.style.width = r-l;
	rb.style.height = w;
	rb.style.backgroundColor = 'white';
	rb.style.visibility = 'visible';
	rb.style.display=''
}

var sirl,sirt, sirr, sirb;
sirl  = document.getElementById("sirl");
sirt  = document.getElementById("sirt");
sirr  = document.getElementById("sirr");
sirb  = document.getElementById("sirb");

function zoomw( w , m)
{	
	//log2("zoomw");
	if ( scale_timer ) clearTimeout(scale_timer);
	scale_timer = setTimeout("scale()",500);
	var docPos    = getPosition(lkmi);
	var mousePos2 = mousePos_get();
	if ( mousePos2 ) {
		//log2(mousePos2.x+" "+mousePos2.y);
		o1= {x:mousePos2.x - docPos.x, y:mousePos2.y - docPos.y};
		lkmi.style.position = 'absolute';
		lkmi.style.top = docPos.y + o1.y - m*o1.y;
		lkmi.style.left = docPos.x + o1.x - m*o1.x;
	}
	lkmi.width = w;
	lkmi.height = w * 384 / 512;
	if ( w <= 512 ) { lkmi.src=img[512].src; } 
	else if ( w <= 768 ) { lkmi.src=img[768].src; } 
	else if ( w <= 1024 ) { lkmi.src=img[1024].src; } 
	 else lkmi.src=img[2048].src;
	//log2(" " + w + lkmi.src);
	//log2("zoomw " + lkmi.width);
	width_save=w;
	//var sip    = getPosition(document.getElementById("si"));
	//rectangle(sirl,sirt,sirr,sirb, sip.x ,sip.y , sip.x + 100, sip.y + 100);
}

function r(w,h)
{
	if ((w > h/1.1) && (w < 1.1*h)) w = h;
	//document.getElementById("msg").innerHTML=h;
	return w
}

function zoom( delta )
{
	//window.scroll(0,0);
	//log2("zoom");
	var m=0;
		if (delta < 0) m=1/1.1;
		else m=1.1;
	w = lkmi.width * m;
	w=r(w,512);
	w=r(w,768);
	w=r(w,1024);
	w=r(w,2048);
	w=r(w,2*2048);
	if (  w > 2*1024 ) w = 2*1024;
	if (  w < 512 ) w = 512;
	//if (  w > 1600 ) w = 1600;
	m=w/lkmi.width
	//if (w > 500 && w <= 2*1024 ) {
		zoomw(w,m)
	//}
}

var wheel_zoom=1;
function wheel(event)
{
	//log2("wheel");
	var delta = 0;
	if (!event) event = window.event;
	if (event.wheelDelta) {
		delta = event.wheelDelta/120; 
		//if (window.opera) delta = -delta;
	} else if (event.detail) {
		delta = -event.detail/3;
	}
	if (delta) zoom(wheel_zoom * delta);
	if (event.preventDefault)
		event.preventDefault();
	event.returnValue = false;
}


var area_cur;

function area_hold()
{
	//log("over&t="+area_cur.title);
	//log2("area_hold");
}

var rl,rt, rr, rb;
		
rl  = document.getElementById("rl");
rt  = document.getElementById("rt");
rr  = document.getElementById("rr");
rb  = document.getElementById("rb");

var none='none';
var area_timer=0;
var click_count=0;
function aa() { alert("aa"); }
function area_add(t,l,x,y,x1,y1)
{ 
	var idmap = document.getElementById("idmap");
	var a0 = idmap.firstChild;
	var a=a0.cloneNode(true);
	//log2("area_add " + t + " " + a0 + " " + typeof(a0)+ " " + l );
	a.href=l;
	//a.title=t;
	a.coords=x+','+y+','+x1+','+y1;
	//a.target="lxr";
	//a.onFocus=aa;
	a.onmouseover=function() { 
		var coords0 = String(a.coords).split(",");
		var docPos    = getPosition(lkmi);
		rectangle(rl,rt,rr,rb, docPos.x + parseInt(coords0[0]),docPos.y + parseInt(coords0[1]),
				docPos.x + parseInt(coords0[2]), docPos.y + parseInt(coords0[3]));
		area_cur = a;
		//area_timer = setTimeout("area_hold()",100);
		cur.style.position = 'absolute';
		//var mousePos = mousePos_get();
		if  ( mousePos ) { 
		cur.style.left = mousePos.x;
		cur.style.top  = mousePos.y;
		//cur.style.width = 10 ;
		//cur.style.height = 10;
		cur.style.backgroundColor = '#DDDDDD';
		cur.style.visibility = 'visible';
		cur.style.display='';
		//	cur.firstChild.href=l;
		//cur.firstChild.innerHTML=t;
		cur.innerHTML='<a style="text-decoration:none" target="lxr" href="'+l+'">&nbsp;'+t+'&nbsp;</a>';
		}
	}

	var cur = document.getElementById('cur');

	cur.onmouseout=function() { document.getElementById('cur').style.display='none';  }
	a.onmouseout=function() 
	{ 
		//if ( area_timer ) clearTimeout(area_timer);
		area_cur = null;
		rl.style.display='none'
		rt.style.display='none'
		rr.style.display='none'
		rb.style.display='none'
	}
	a.onclick=function() { trace("click","t="+t+"&c="+( ++click_count));};
	idmap.appendChild(a);
}

function ah(id,x,y,w,h) { area_add(id,"http://lxr.free-electrons.com/source/include/"+id,x,y,x+w,y+h); }
function as(id,x,y,w,h) { area_add(id,"http://lxr.free-electrons.com/source/"+id,x,y,x+w,y+h); }
function ai(id,x,y,w,h) { 
	area_add(id,"http://lxr.free-electrons.com/ident?i="+id,x,y,x+w,y+h);
	//trace("click","c="+x+','+y+','+x+w+','+y+h)
}
function au(url,x,y,w,h) { 
	area_add(url,url,x,y,x+w,y+h);
	//trace("click","c="+x+','+y+','+x+w+','+y+h)
}

function http_req_get()
{
	var http_req;
	try {
		http_req=new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari
	} catch (e) {
		try {
			http_req=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
		} catch (e) {
			try {
				http_req=new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
			}
		}
	}
	return http_req;
}


function log(m)
{
	//document.write(m+"<br>");
	/*var http_req = http_req_get();
	if (http_req) { 
		http_req.open("get", "log?t="+uptime+"&m="+m,true);
		http_req.send(null);
	}*/
}

var data = new Array;
function map_init()
{
	var i =0; 
	var idmap = document.getElementById("idmap");
	var a0 = idmap.firstChild;
	log("map_init");
	//log("<br> map_init <br>");
	//log(i + a0.href +" "+a0.coords + "<br>");
	a=a0.nextSibling;
	while ( a ) {
		if (a.coords) { 
			var coords0 = String(a.coords).split(",");
			coords0[0]=Math.round(coords0[0]);
			coords0[1]=Math.round(coords0[1]);
			coords0[2]=Math.round(coords0[2]);
			coords0[3]=Math.round(coords0[3]);
			data[i]=coords0;
			i++;
			//log(i + a + a.href +" "+a.coords + "<br>");
		}
		a=a.nextSibling;
	}
}

var width_save;

function scale()
{
	scale_timer = 0;
	var idmap = document.getElementById("idmap");
	var a0 = idmap.firstChild;
	a=a0.nextSibling;
	//log("a0=" + a0.title + " "+ a0.href + " "+a0.coords +"<br>");
	//log(a +" " +a.title + " "+ a.href + " "+a.coords +"<br>");
	if (!lkmi.width) lkmi.width= width_save;
	var k = lkmi.width/1200;
	//log2("scale"+ lkmi.width +" "+ k);
	var i =0; 
	var coords = new Array(4);
	var coords2 = new Array(4);
	while ( a ) {
		if ( a.href) { 
			coords=data[i];
			coords2[0]=Math.round(k* coords[0]);
			coords2[1]=Math.round(k* coords[1]);
			coords2[2]=Math.round(k* coords[2]);
			coords2[3]=Math.round(k* coords[3]);
			a.coords = coords2.join(",");
			//log(i + a + a.href +" "+a.coords);
			i++
		}
		a=a.nextSibling;
	}
}

function move(x,y)
{
	var docPos    = getPosition(lkmi);
	lkmi.style.position = 'absolute';
	lkmi.style.top = docPos.y+y ;
	lkmi.style.left = docPos.x+x;
}

var wnd;

if (navigator.appName.indexOf("Microsoft")!=-1) 
wnd = { x:document.body.offsetWidth,y:document.body.offsetHeight};
else {
	wnd =  {x:window.innerWidth,y:window.innerHeight};
}

function map_macro()
{
	//document.getElementById('status2').style.display='';
	mousePos={x:wnd.x/2,y:wnd.y/2};
	zoomw(4096,4096/lkmi.width);
	/*lkmi.style.position = 'absolute';
	lkmi.style.top = 0;
	lkmi.style.left = 0;
	lkmi.style.display = '';*/
}

function map_home()
{
	//log2("map_home");
	//window.scroll(0,0);
	//log(navigator.appName);
	//log(navigator.appVersion);
	trace("wnd","x="+wnd.x+"&y="+wnd.y);
	/*if (navigator.appName=="Opera") {
	}
	if ( parseInt(navigator.appVersion) > 3 ) {
		if (navigator.appName=="Netscape") {
			winW = window.innerWidth;
			winH = window.innerHeight;
		}
	}*/
	//var dw = document.getElementById("dashboard").style.width;
	dw=50;
	//log2(el('header').height);
	zoomw(( wnd.y   )* 2048/1536,1);
	lkmi.style.position = 'absolute';
	lkmi.style.top = 0;
	//lkmi.style.left = (winW - lkmi.width)/2;
	lkmi.style.left = (wnd.x - dw - (( wnd.y  )* 2048/1536))/2;
	lkmi.style.display = '';
	//move(0,0);
}

function key(event)
{
	var k;
	//window.scroll(0,0);
	//log2(window.event.modifiers)
	if (window.event) k = window.event.keyCode;
	else if (event) k = event.which;
	if ( ! k ) k = event.keyCdode;
	if ( k ) { 
		switch ( k )
		{
			case 107: // +
			case 34: // PD
				mousePos={x:wnd.x/2,y:wnd.y/2};
				zoom(1);
				break;
			case 109: // -
			case 33: // PU
				mousePos={x:wnd.x/2,y:wnd.y/2};
				zoom(-1);
				break;
			case 40:
			case 98:
				move(0,-30);
				break;
			case 37:
			case 100:
				move(30,0);
				break;
			case 39:
			case 102:
				move(-30,0);
				break;
			case 38:
			case 104:
				move(0,30);
				break;
		}
	}
}
// init
if (window.addEventListener)
	window.addEventListener('DOMMouseScroll', wheel, false);
	window.onmousewheel = document.onmousewheel = wheel;
document.onkeyup=key;

function kH(e) {
var pK = e ? e.which : window.event.keyCode;
	log(pK);
	alert (pK)
	//return pK != 13;
	return 0
}
tick();
//document.onkeypress = kH;
//if (document.layers) document.captureEvents(Event.KEYPRESS);

// (c) Constantine Shulyupin
// Thanks to: http://adomas.org/javascript-mouse-wheel/
