function windowHandler(){
	var Drag,o;
	var Coords = {mouse:null, mouseOffset:null, original:null};
	var Obj = {root:null, originalParent:null, rootParent:null, rootSibling:null, originalNum:null, rootNum:null, containerNum:null, dragHelper:null, dragMap:null};
	var Tmp = {root:null, originalParent:null, rootParent:null};
	var dragableObject = null;
	var activeCont = null;

	this.ajaxCall = new Function();
	this.Add = {container:null, item:null, position:0};

	this.init = function(set){
		Drag = set;
		o = this;
		Number.prototype.NaN0 = function(){ return isNaN(this) ? 0 : this; }
		Obj.dragHelper = document.createElement('div');
		Obj.dragHelper.style.cssText = 'position:absolute; display:none;';
		document.body.appendChild(Obj.dragHelper);
		if(typeof Drag.horizontalMove == 'undefined') Drag.horizontalMove = true;
		if(typeof Drag.verticalMove == 'undefined') Drag.verticalMove = true;
		if(typeof Drag.clear == 'undefined') Drag.clear = new Array();
		if(typeof Drag.offset == 'undefined') Drag.offset = 0;
		if(typeof Drag.paging_class == 'undefined') Drag.paging_class = 0;
	};

	this.reinit = function(set) {
		Drag.containers = new Array();
		Drag.offset = set.offset;
		for (var i = 0; i < set.containers.length; i++) {
			Drag.containers[i] = set.containers[i];
		}

		if(dragableObject){
			// reinit dragMap
			Obj.dragMap = document.createElement('div');
			Obj.dragMap.id = Drag.map;
			Drag.containers[0].insertBefore(Obj.dragMap, Drag.containers[0].childNodes[0]);
			Obj.rootParent = Obj.dragMap.parentNode;
		}
	}

	this.start = function(){
		for(var i=0; i<Drag.containers.length; i++){
			for(var j=0; j<Drag.containers[i].childNodes.length; j++){ // Remove firefox #text nodes
				if(Drag.containers[i].childNodes[j].nodeName=='#text'){
					Drag.containers[i].removeChild(Drag.containers[i].childNodes[j]);
				}
			}
		} // end FOR i;

		if(!Drag.addContainer){
			for(var i=0; i<Drag.containers.length; i++){
				for(var j=0; j<Drag.containers[i].childNodes.length; j++){
				var root = Drag.containers[i].childNodes[j];
					for(var n=0; n<root.childNodes.length; n++){
						var handle = root.childNodes[n];
						if(handle.className == Drag.handle){
							handle.onmousedown = function(e){
								o.mouseDown(this.parentNode, e);
							}
						}
					}
				}
			} // end FOR i;
		}else if(Drag.addContainer){
			for(var i=0; i<Drag.addContainer.childNodes.length; i++){
				var root = Drag.addContainer.childNodes[i];
				for(var j=0; j<root.childNodes.length; j++){
					var handle = root.childNodes[j];
					if(handle.className == Drag.handle){
						handle.onmousedown = function(e){
							o.mouseDown(this.parentNode, e);
						}
					}
				}
			} // end FOR i;
		}
	};

	this.returnMovedElements = function(){
		if(Tmp.root && Tmp.originalParent && Tmp.rootParent){
			return {id:Tmp.root.id, oldposition:Obj.originalNum, newposition:Obj.rootNum, oldcontainer:Tmp.originalParent.id, newcontainer:Tmp.rootParent.id};
		}else{
			return false;
		}
	};

	this.mouseMove = function(e){
		e = event(e);
		Coords.mouse = getMouseCoords(e);

		if(dragableObject){
			var containerPosition = [];
			var boxPosition = [];

			Obj.rootParent = Obj.dragMap.parentNode;
			if(!Drag.addContainer) Obj.rootSibling = Obj.dragMap.nextSibling;

			for(var i=0; i<Drag.containers.length; i++){
				with(Drag.containers[i]){
					var pos = getPosition(Drag.containers[i]);
					var containerP = { top:pos.y, left:pos.x, height:offsetHeight, width:offsetWidth };
					containerPosition[i] = containerP;
				}

				for(var j=0; j<Drag.containers[i].childNodes.length; j++){
					with(Drag.containers[i]){
						if(childNodes[j]==Obj.dragMap) continue;
						var pos = getPosition(childNodes[j]);
						var boxP = { top:pos.y, left:pos.x, height:childNodes[j].offsetHeight, width:childNodes[j].offsetWidth };
						boxPosition[childNodes[j].id] = boxP;
					}
				}
			}

			var addScrollTop = 0;
			var addScrollLeft = 0;
			if(Drag.addContainer){
				addScrollTop = Drag.addContainer.scrollTop;
				addScrollLeft = Drag.addContainer.scrollLeft;
			}

			if(Drag.verticalMove) dragableObject.style.top  = Coords.mouse.y - Coords.mouseOffset.y - addScrollTop + 'px';
			if(Drag.horizontalMove) dragableObject.style.left = Coords.mouse.x - Coords.mouseOffset.x - addScrollLeft + 'px';

			var xPos = Coords.mouse.x - Coords.mouseOffset.x + (Coords.original.width/2) - addScrollLeft;
			var yPos = Coords.mouse.y - Coords.mouseOffset.y + (Coords.original.height/2) - addScrollTop;

			if(!Drag.addContainer){
				for(var i=0; i<Drag.containers.length; i++){
					with(containerPosition[i]){
						if((left < xPos) && (top < yPos) &&
							((left + width) > xPos) && ((top + height) > yPos)){
							activeCont = Drag.containers[i];
							Obj.containerNum = i;
							break;
						}
					}
				}
			}else if(Drag.addContainer){
				for(var i=0; i<Drag.containers.length; i++){
					with(containerPosition[i]){
						if((left < xPos) && (top < yPos) &&
							((left + width) > xPos) && ((top + height) > yPos)){
							activeCont = Drag.containers[i];
							if(Drag.containerBorderHover) activeCont.style.border = Drag.containerBorderHover;
							Obj.dragMap.style.width = '100%';
							Obj.dragMap.style.display = 'block';
							Obj.containerNum = i;
							break;
						}else{
							if(activeCont){
								if(Drag.containerBorder) activeCont.style.border = Drag.containerBorder;
								Obj.dragMap.style.display = 'none';
							}
							activeCont = null;
						}
					}
				}
			}

			if(activeCont){ // Our target object is in one of our containers!
				var beforeNode = null;
				for(var i=activeCont.childNodes.length-1; i>=0; i--){
					with(activeCont.childNodes[i]){
						if(id != Obj.dragMap.id){ // if the current item is "After" the item being dragged
							if(Obj.dragMap != activeCont.childNodes[i] &&
								((boxPosition[id].left + boxPosition[id].width) > xPos) &&
								((boxPosition[id].top + boxPosition[id].height) > yPos)){
									beforeNode = activeCont.childNodes[i];
							}
						}
					}
				}

				if(beforeNode){
					if(beforeNode != Obj.dragMap.nextSibling){
						if(Obj.dragMap.parentNode != activeCont){
							Obj.rootParent.removeChild(Obj.dragMap); // remove dragMap
						}else{
							activeCont.removeChild(Obj.dragMap); // remove dragMap
						}
						activeCont.insertBefore(Obj.dragMap, beforeNode); // reinsert dragMap
					}
				}else{
					if((Obj.dragMap.nextSibling) || (Obj.dragMap.parentNode!=activeCont)){
						if(Drag.clear[Obj.containerNum]){
							activeCont.insertBefore(Obj.dragMap, Drag.clear[Obj.containerNum]);
						}else{
							activeCont.appendChild(Obj.dragMap);
						}
					}
				}
			}

			// pager-es draghez
			if (typeof dragPagerLinks != 'undefined') {

				/*var dbst = window.pageYOffset ? window.pageYOffset : (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
				var dbsl = window.pageXOffset ? window.pageXOffset : (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
				var xPos = Coords.mouse.x + dbsl;
				var yPos = Coords.mouse.y + dbst;*/

				var dbst;
				var dbsl;

				var xPos = Coords.mouse.x;
				var yPos = Coords.mouse.y;

				/*if (document.getElementById('marker')) {
					document.getElementById('marker').style.left = xPos+'px';
					document.getElementById('marker').style.top = yPos+'px';
				}
				if (document.getElementById('debug')) {
					document.getElementById('debug').innerHTML = Coords.mouse.x+'.'+Coords.mouse.y+'; '+xPos+'.'+yPos+'; dbst:'+dbst+'; dbsl:'+dbsl+'; t:'+window.pageYOffset+'; i:'+document.body.scrollTop+'; de:'+document.documentElement.scrollTop+'<br />';
				}*/

				if (dragPagerTimer) clearTimeout(dragPagerTimer);
				for (var i = 0; i < dragPagerLinks.length; i++) {
					var el = dragPagerLinks[i];
					if (xPos >= el.x && xPos <= el.x+el.w && yPos >= el.y && yPos <= el.y+el.h) {
						if (dragPagerLock == 0) {
							dragPagerTimer = setTimeout('dragPagerLock = 1; dragPagerLinks['+i+'].obj.onclick();', 500);
							break;
						}
					}
				}
			}

		} // end IF dragableObject

		return false;
	};

	this.mouseUp = function(){
		if(Obj.rootParent){

			if(!Drag.addContainer){
				if(Obj.rootSibling){
					Obj.rootParent.insertBefore(Obj.root, Obj.dragMap); // insert root
					Obj.rootParent.removeChild(Obj.dragMap); // remove dragMap
				}else{
					Obj.rootParent.removeChild(Obj.dragMap); // remove dragMap
					Obj.rootParent.appendChild(Obj.root); // insert root
				}
			}

			for(var i=0; i<Obj.rootParent.childNodes.length; i++){
				if(!Drag.addContainer && Obj.rootParent.childNodes[i] == Obj.root){
					Obj.rootNum = Drag.offset + i;
					break;
				}else if(Drag.addContainer && Obj.rootParent.childNodes[i] == Obj.dragMap){
					o.Add.position = i;
					break;
				}
			}

			if(!Drag.addContainer){
				Tmp.root = Obj.root;
				Tmp.originalParent = Obj.originalParent;
				Tmp.rootParent = Obj.rootParent;

				Obj.dragHelper.style.display = 'none';
				Obj.root = null;
				dragableObject = null;
				Obj.dragMap = null;
				Obj.originalParent = null;
				Obj.rootParent = null;
				Obj.rootSibling = null;

				if((Tmp.originalParent != Tmp.rootParent) || (Obj.originalNum != Obj.rootNum)){
					o.ajaxCall();
				}

				Obj.originalNum = null;
				Obj.rootNum = null;
				Obj.containerNum = null;
			}else{
				Obj.rootParent.removeChild(Obj.dragMap); // remove dragMap

				Obj.dragHelper.style.display = 'none';
				dragableObject = null;
				Obj.dragMap = null;
				Obj.rootParent = null;

				if(activeCont){
					if(Drag.containerBorder) activeCont.style.border = Drag.containerBorder;
					o.Add.container = activeCont.id;
					o.Add.item = Obj.root.id;
					o.ajaxCall(o.Add.container, o.Add.item, o.Add.position);
				}

				Obj.root = null;
				activeCont = null;
			}
		}
		if (typeof document.onselectstart!="undefined") {
		  document.onselectstart = null;
		}else{
		  document.onmousedown = null;
		}
	};

	this.mouseDown = function(root, e){

		// ha van beallitva class, akkor a class-u pagerek koordinatait lementi
		if (Drag.paging_class) dragPagerBuild(Drag.paging_class);

		e = event(e);
		Obj.root = root;
		Coords.mouse = getMouseCoords(e);

		if(!Drag.addContainer){
			Obj.originalParent = Obj.root.parentNode;
			for(var i=0; i<Obj.originalParent.childNodes.length; i++){
				if(Obj.originalParent.childNodes[i] == Obj.root){
					Obj.originalNum = Drag.offset + i;
					break;
				}
			}
		}

		// save root position
		Coords.mouseOffset = getMouseOffset(Obj.root,e);
		var origXY = getPosition(Obj.root);
		Coords.original = {top:origXY.y, left:origXY.x, height:Obj.root.offsetHeight, width:Obj.root.offsetWidth};

		// init dragHelper
		for(var i=0; i<Obj.dragHelper.childNodes.length; i++) Obj.dragHelper.removeChild(Obj.dragHelper.childNodes[i]);
		Obj.dragHelper.appendChild(Obj.root.cloneNode(true));
		Obj.dragHelper.style.display = 'block';
		Obj.dragHelper.style.opacity = 0.50;
		Obj.dragHelper.style.filter = 'alpha(opacity=50)';
		Obj.dragHelper.style.zIndex = '101';
		if(!Drag.addContainer){
			Obj.dragHelper.style.top  = Coords.mouse.y - Coords.mouseOffset.y + 'px';
			Obj.dragHelper.style.left = Coords.mouse.x - Coords.mouseOffset.x + 'px';
		}else{
			Obj.dragHelper.style.top  = Coords.mouse.y - Coords.mouseOffset.y - Drag.addContainer.scrollTop + 'px';
			Obj.dragHelper.style.left = Coords.mouse.x - Coords.mouseOffset.x - Drag.addContainer.scrollLeft + 'px';
		}

		// init dragMap
		Obj.dragMap = document.createElement('div');
		Obj.dragMap.id = Drag.map;
		Obj.root.parentNode.insertBefore(Obj.dragMap, Obj.root);
		Obj.dragMap.style.width = (Obj.root.offsetWidth - ((Drag.mapBorderWidth) ? (Drag.mapBorderWidth*2) : 0 )) + 'px';
		if(!Drag.addContainer){
			Obj.dragMap.style.height = (Obj.root.offsetHeight - ((Drag.mapBorderWidth) ? (Drag.mapBorderWidth*2) : 0 )) + 'px';
		}else{
			Obj.dragMap.style.display = 'none';
		}

		dragableObject = Obj.dragHelper;
		Obj.rootParent = Obj.dragMap.parentNode;
		if(!Drag.addContainer) Obj.rootSibling = Obj.dragMap.nextSibling;

		Obj.root.parentNode.removeChild(Obj.root); // remove Obj.root
		if(Drag.addContainer) Obj.rootParent.insertBefore(Obj.root, Obj.dragMap); // insert Obj.root when selected text bug

		document.onmousemove = o.mouseMove;
		document.onmouseup = o.mouseUp;

		if (typeof document.onselectstart!="undefined") {
		  document.onselectstart = new Function ("return false");
		}else{
		  document.onmousedown = new Function ("return false");
		}

		return false;
	};

	function getMouseOffset(target, e){
		e = event(e);
		var targPos =  getPosition(target);
		var mousePos = getMouseCoords(e);
		return {x:mousePos.x - targPos.x, y:mousePos.y - targPos.y};
	};

	function getMouseCoords(e){
		e = event(e);

		/*var sL = (document.body.scrollLeft) ? document.body.scrollLeft : 0 ;
		var sT = (document.body.scrollTop) ? document.body.scrollTop : 0 ;
		var cL = (document.body.clientLeft) ? document.body.clientLeft : 0 ;
		var cT = (document.body.clientTop) ? document.body.clientTop : 0 ;

		var mouseX = e.clientX + sL - cL;
		var mouseY = e.clientY + sT - cT;*/

		if (e.pageX) {
			var cx = e.pageX;
			var cy = e.pageY;
		} else if (e.clientX) {
			var cx = e.clientX;
			var cy = e.clientY;
		} else {
			var cx = 0;
			var cy = 0;
		}

		var mouseX = e.pageX || (cx + (document.documentElement.scrollLeft || document.body.scrollLeft));
		var mouseY = e.pageY || (cy + (document.documentElement.scrollTop || document.body.scrollTop));

		//var mouseX = e.pageX || (cx + ((parseInt(document.documentElement.scrollLeft)).NaN0() || (parseInt(document.body.scrollLeft)).NaN0()));
		//var mouseY = e.pageY || (cy + ((parseInt(document.documentElement.scrollTop)).NaN0() || (parseInt(document.body.scrollTop)).NaN0()));

		return {x:mouseX, y:mouseY};
	};

	function getPosition(target){
		var left = 0;
		var top  = 0;
		do{
			left += target.offsetLeft + (target.currentStyle ? (parseInt(target.currentStyle.borderLeftWidth)).NaN0() : 0);
			top += target.offsetTop + (target.currentStyle ? (parseInt(target.currentStyle.borderTopWidth)).NaN0() : 0);
		}while(target = target.offsetParent);
		return {x:left, y:top};
	};

	function event(e){
		if (typeof e == 'undefined') e = window.event;
		return e;
	};

	function info(target,mode,text){
		if(mode)
			document.getElementById('inp'+target).value += text;
		else
			document.getElementById('inp'+target).value = text;
	};
}

/* DRAG_PAGER */

var oneDD = null; // ez kell, lasd xajax->script-et is
var dragPagerTimer = 0;
var dragPagerLock = 0;
var dragPagerLinks = new Array();

function dragPagerBuild(baseclass) {
	var array_count = 0;
	dragPagerLinks = new Array();
	var divs = document.getElementsByTagName('div');
	for (var i = 0; i < divs.length; i++) {
		var mydiv = divs[i];
		var myclass = mydiv.getAttributeNode("class");
		if (myclass) {
			myclass = myclass.nodeValue;
			if (myclass == baseclass) {
				var el = mydiv.getElementsByTagName('a');
				for (var j = 0; j < el.length; j++) {
					var obj = el[j];
					var pos = getPosition(obj);
					var w = obj.scrollWidth;
					var h = obj.scrollHeight;

					var myid = 'pager_'+array_count;
					obj.setAttribute('id', myid);
					dragPagerLinks[array_count] = {obj: obj, x:pos.x, y:pos.y, w:w, h:h};
					array_count++;
				}
			}
		}
	}

	setTimeout('dragPagerLock = 0;', 3000);
}

getPosition = function(target) {
	var left = 0;
	var top  = 0;
	do{
		left += target.offsetLeft + (target.currentStyle ? (parseInt(target.currentStyle.borderLeftWidth)).NaN0() : 0);
		top += target.offsetTop + (target.currentStyle ? (parseInt(target.currentStyle.borderTopWidth)).NaN0() : 0);
	}while(target = target.offsetParent);
	return {x:left, y:top};
}

/**/
var bt_Widget = 0;
function bt_Window(){
    var Setting;
    var Coords = {mouse:null, mouseOffset:null};
    var dragableObject = null;

    this.open = function(set){
        Setting = set;
        o = this;
        bt_Widget++;

        Number.prototype.NaN0 = function(){ return isNaN(this) ? 0 : this; }
        var objBody = document.getElementsByTagName("body").item(0);
        var zIndex = (bt_Widget) ? bt_Widget * 1000 : 1000;
        var pageSize = o.getPageSize();
        var objOverlay = document.createElement("div");

        objOverlay.setAttribute('id','bt_layer_' + bt_Widget );
        objOverlay.style.display = 'none';
        objOverlay.style.position = 'absolute';
        objOverlay.style.top = '0';
        objOverlay.style.left = '0';
        objOverlay.style.zIndex = zIndex;
        objOverlay.style.width = (pageSize.pw + 'px');
        objOverlay.style.minWidth = '100%';
        objOverlay.style.height = (pageSize.ph + 'px');
        objOverlay.style.minHeight = '100%';
        if(Setting.background)
            objOverlay.style.backgroundColor = Setting.background;
        else
            objOverlay.style.backgroundColor = '#000000';
        if(Setting.transparent){
            objOverlay.style.filter = 'alpha(opacity=' + Setting.transparent + ')';
            objOverlay.style.opacity = ( Setting.transparent / 100 );
        }else{
            objOverlay.style.filter = 'alpha(opacity=50)';
            objOverlay.style.opacity = 0.50;
        }
        objBody.appendChild(objOverlay);

        var objContent = document.createElement("div");
        objContent.setAttribute('id','bt_content_' + bt_Widget );
        objContent.style.visibility    = 'hidden';
        objContent.style.position = 'absolute';
        objContent.style.top = '0';
        objContent.style.left = '0';
        objContent.style.zIndex = zIndex + 1;
        objBody.appendChild(objContent);

        Setting.winid = 'bt_win_' + bt_Widget;
        var objBox = document.createElement("div");
        objBox.setAttribute('id', Setting.winid);
        if(Setting.winclass) objBox.className = Setting.winclass;
        objContent.appendChild(objBox);
        if(Setting.html) objBox.innerHTML = Setting.html;

        if(!Setting.width) Setting.width = objBox.offsetWidth;
        if(!Setting.height) Setting.height = objBox.offsetHeight;

        var scroll = o.getPageScroll(0);
        if(Setting.fixtop)
            toppos   = scroll.y + Setting.fixtop;
        else
            toppos   = scroll.y + (pageSize.wh - Setting.height) / 2;
        leftpos    = scroll.x + (pageSize.pw - Setting.width) / 2;

        objBox.style.top  = (toppos < 0) ? '0px' : toppos + 'px';
        objBox.style.left = (leftpos < 0) ? '0px' : leftpos + 'px';

        objOverlay.style.display = '';
        objContent.style.visibility    = '';

        if(Setting.drag){
            var root = document.getElementById(Setting.winid);
            for(var i=0; i<root.childNodes.length; i++){
                var handle = root.childNodes[i];
                if(handle.className == Setting.drag){
                    handle.onmousedown = function(e){
                        o.mouseDown(this.parentNode, e);
                    }
                }
            } // end for
        }
    };

    this.reposition = function(bt_Def){
        var target = (!bt_Def) ? document.getElementById('bt_win_' + bt_Widget) : document.getElementById('bt_win_' + bt_Def);
        var pageSize = o.getPageSize();
        var scroll = o.getPageScroll(0);

        toppos   = scroll.y + (pageSize.wh - target.offsetHeight) / 2;
        leftpos    = scroll.x + (pageSize.pw - target.offsetWidth) / 2;
        target.style.top  = (toppos < 0) ? '0px' : toppos + 'px';
        target.style.left = (leftpos < 0) ? '0px' : leftpos + 'px';
    };

    this.mouseDown = function(root, e){
        e = event(e);
        Coords.mouse = getMouseCoords(e);
        Coords.mouseOffset = getMouseOffset(root,e);
        dragableObject = root;

        document.onmousemove = o.mouseMove;
        document.onmouseup = o.mouseUp;
        
        if (typeof document.onselectstart!="undefined") {
          document.onselectstart = new Function ("return false");
        }else{
          document.onmousedown = new Function ("return false");
        }
        
        return false;
    };

    this.mouseUp = function(){
        dragableObject = null;
        if(document.onselectstart) {
          document.onselectstart = null;
        }else{
          document.onmousedown = null;
        }
    };

    this.mouseMove = function(e){
        e = event(e);
        Coords.mouse = getMouseCoords(e);

        if(dragableObject){
            dragableObject.style.top  = Coords.mouse.y - Coords.mouseOffset.y + 'px';
            dragableObject.style.left = Coords.mouse.x - Coords.mouseOffset.x + 'px';
        }
        return false;
    };

    this.close = function(){

        var activeWidget = bt_Widget;

        layerID = 'bt_content_' + activeWidget;
        objElement = document.getElementById(layerID);
        if (objElement && objElement.parentNode && objElement.parentNode.removeChild){
            objElement.parentNode.removeChild(objElement);
        }

        layerID = 'bt_layer_' + activeWidget;
        objElement = document.getElementById(layerID);
        if (objElement && objElement.parentNode && objElement.parentNode.removeChild){
            objElement.parentNode.removeChild(objElement);
            bt_Widget--;
        }
    };

    this.getPageSize = function(){
        var scroll = o.getPageScroll(1);

        var windowWidth, windowHeight;
        if(self.innerHeight) {    // all except
            windowWidth = self.innerWidth; windowHeight = self.innerHeight;
        }else if(document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict
            windowWidth = document.documentElement.clientWidth; windowHeight = document.documentElement.clientHeight;
        }else if(document.body) { // other
            windowWidth = document.body.clientWidth; windowHeight = document.body.clientHeight;
        }

        pageHeight = (scroll.y < windowHeight) ? windowHeight : scroll.y ;
        pageWidth = (scroll.x < windowWidth) ? windowWidth : scroll.x ;

        return {pw:pageWidth, ph:pageHeight, ww:windowWidth, wh:windowHeight};
    };

    this.getPageScroll = function(mode){
        var xScroll, yScroll;
        if(mode==1){
            if(window.innerHeight && window.scrollMaxY) {
                xScroll = document.body.scrollWidth; yScroll = window.innerHeight + window.scrollMaxY;
            }else if(document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
                xScroll = document.body.scrollWidth; yScroll = document.body.scrollHeight;
            }else{ // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
                xScroll = document.body.offsetWidth; yScroll = document.body.offsetHeight;
            }
        }else{
            if(self.pageYOffset){
                xScroll = self.pageXOffset; yScroll = self.pageYOffset;
            }else if(document.documentElement && document.documentElement.scrollTop){ // Explorer 6 Strict
                xScroll = document.documentElement.scrollLeft; yScroll = document.documentElement.scrollTop;
            }else if(document.body){ // other
                xScroll = document.body.scrollLeft; yScroll = document.body.scrollTop;
            }
        }
        return {x:xScroll,y:yScroll};
    };

    function getMouseOffset(target, e){
        e = event(e);
        var targPos =  getPosition(target);
        var mousePos = getMouseCoords(e);
        return {x:mousePos.x - targPos.x, y:mousePos.y - targPos.y};
    };

    function getMouseCoords(e){
        e = event(e);

        var sL = (document.body.scrollLeft) ? document.body.scrollLeft : 0 ;
        var sT = (document.body.scrollTop) ? document.body.scrollTop : 0 ;
        var cL = (document.body.clientLeft) ? document.body.clientLeft : 0 ;
        var cT = (document.body.clientTop) ? document.body.clientTop : 0 ;

        var mouseX = e.clientX + sL - cL;
        var mouseY = e.clientY + sT - cT;
        return {x:mouseX, y:mouseY};
    };

    function getPosition(target){
        var left = 0;
        var top  = 0;
        do{
            left += target.offsetLeft + (target.currentStyle ? (parseInt(target.currentStyle.borderLeftWidth)).NaN0() : 0);
            top += target.offsetTop + (target.currentStyle ? (parseInt(target.currentStyle.borderTopWidth)).NaN0() : 0);
        }while(target = target.offsetParent);
        return {x:left, y:top};
    };

    function event(e){
        if (typeof e == 'undefined') e = window.event;
        return e;
    };
}
