/* (c) Kalamun.org - GNU/GPL 3 */

var kBrowser={
	IE:!!(window.attachEvent&&!window.opera),
	IE4:navigator.userAgent.indexOf('MSIE 4')>-1,
	IE5:navigator.userAgent.indexOf('MSIE 5')>-1,
	IE6:navigator.userAgent.indexOf('MSIE 6')>-1,
	IE7:navigator.userAgent.indexOf('MSIE 7')>-1,
	OP:!!window.opera,
	SF:navigator.userAgent.indexOf('Safari')>-1,
	FF:navigator.userAgent.indexOf('Gecko')>-1&&navigator.userAgent.indexOf('Safari')==-1
	};

kAddEvent=function(obj,event,func,where) {
	if(!where) var where="after";
	if(typeof obj[event]!='function') obj[event]=func;
	else {
		var oldfunc=obj[event];
		if(where=="before") obj[event]=function() { func(); if(oldfunc) oldfunc(); };
		else obj[event]=function() { if(oldfunc) oldfunc(); func(); };
		}
	}
kGetPosition=function(obj) {
	var pos=Array();
	pos['left']=0;
	pos['top']=0;
	if(obj) {
		while(obj.offsetParent) {
			pos['left']+=obj.offsetLeft;
			pos['top']+=obj.offsetTop;
			obj=obj.offsetParent;
			}
		pos['left']+=obj.offsetLeft;
		pos['top']+=obj.offsetTop;
		}
	return {x:pos['left'],y:pos['top']};
	}

kWindow=new function() {
	this.filterResults=function(win,docel,body) {
		var result=win?win:0;
		if(docel&&(!result||(result>docel))) result=docel;
		return body&&(!result||(result>body))?body:result;
		}

	// size
	this.clientWidth=function() {
		return this.filterResults(window.innerWidth?window.innerWidth:0,document.documentElement?document.documentElement.clientWidth:0,document.body?document.body.clientWidth:0);
		}
	this.clientHeight=function() {
		return this.filterResults(window.innerHeight?window.innerHeight:0,document.documentElement?document.documentElement.clientHeight:0,document.body?document.body.clientHeight:0);
		}

	// scroll
	this.scrollLeft=function() {
		return this.filterResults(window.pageXOffset?window.pageXOffset:0,document.documentElement?document.documentElement.scrollLeft:0,document.body?document.body.scrollLeft:0);
		}
	this.scrollTop=function() {
		return this.filterResults(window.pageYOffset?window.pageYOffset:0,document.documentElement?document.documentElement.scrollTop:0,document.body ? document.body.scrollTop:0);
		}

	// mouse
	this.mousePos={x:0,y:0};
	this.elementOver=null;
	}

kMouseMove=function(e) {
	var e=e||window.event;
	var mPos={x:0,y:0};
	if(e.pageX||e.pageY) mPos={x:e.pageX,y:e.pageY};
	else mPos={x:e.clientX+document.body.scrollLeft-document.body.clientLeft,y:e.clientY+document.body.scrollTop-document.body.clientTop};
	kWindow.mousePos=mPos;
	kWindow.elementOver=(e.target)?e.target:e.srcElement;
	return false;
	}
kAddEvent(document,"onmousemove",kMouseMove);


