/**
 * @author Frederik Krautwald
 */


var windowState = (function(){
	var readScroll = {scrollLeft:0,scrollTop:0};
	var readSize = {clientWidth:0,clientHeight:0};
	var readScrollX = 'scrollLeft';
	var readScrollY = 'scrollTop';
	var readWidth = 'clientWidth';
	var readHeight = 'clientHeight';

	function otherWindowTest(obj){
		if ((document.compatMode) && (document.compatMode == 'CSS1Compat') && (document.documentElement)) {
			return document.documentElement;
		} else if (document.body) {
			return document.body;
		} else {
			return obj;
		}
	};

	if ((typeof this.innerHeight == 'number') && (typeof this.innerWidth == 'number')) {
		readSize = this;
		readWidth = 'innerWidth';
		readHeight = 'innerHeight';
	} else {
		readSize = otherWindowTest(readSize);
	}

	if ((typeof this.pageYOffset == 'number') && (typeof this.pageXOffset == 'number')) {
		readScroll = this;
		readScrollY = 'pageYOffset';
		readScrollX = 'pageXOffset';
	} else {
		readScroll = otherWindowTest(readScroll);
	}

	return {
		getScrollX:function() {
			return (readScroll[readScrollX]||0);
		},
		getScrollY:function() {
			return (readScroll[readScrollY]||0);
		},
		getWidth:function() {
			return (readSize[readWidth]||0);
		},
		getHeight:function() {
			return (readSize[readHeight]||0);
		}
	};
})(); // windowState()


function getObjStyle(id) {
	var obj = null;
	if (document.getElementById) {
		obj = document.getElementById(id);
	} else if (document.all) {
		obj = document.all[id];
	} else if (document.layers) {
		obj = document.layers[id];
	}
	return (obj && obj.style) || obj;
} // getObjStyle()


function getObjById(id) {
	var obj = null;
	if (document.getElementById) {
		obj = document.getElementById(id);
	} else if (document.all) {
		obj = document.all[id];
	} else if (document.layers) {
		obj = document.layers[id];
	}
	return obj;
} // getObjById()


function centerPosObj(id) {
	var viewportWidth = windowState.getWidth();
	var viewportHeight = windowState.getHeight();
	var horizontalScroll = windowState.getScrollX();
	var verticalScroll = windowState.getScrollY();
	
	var objStyleRef = getObjStyle(id);
	if(objStyleRef){
		var positionMod = (typeof objStyleRef.top == 'string') ? "px" : 0;
		
		var objWidth = parseInt(objStyleRef.width);
		var objHeight = parseInt(objStyleRef.height);
	
		var hPos = Math.round(horizontalScroll + ((viewportWidth - objWidth) / 2));
		var vPos = Math.round(verticalScroll + ((viewportHeight - objHeight) / 2));
		hPos = (hPos < 0) ? 0 : hPos;
		vPos = (vPos < 0) ? 0 : vPos;
		
		objStyleRef.top = vPos + positionMod;
		objStyleRef.left = hPos + positionMod;
	}
} // centerPosObj()


// Global variables
var objDragDropRef = null;

objDragDrop = function(e) {
	var mousePosX = 0;
	var mousePosY = 0;
	var dragDropModY = 0;
	var	dragDropModX = 0;
	if (!e) var e = window.event;
	if (e.pageX || e.pageY) { // Gecko
		mousePosX = e.pageX;
		mousePosY = e.pageY;
		dragDropModY = -6;
		dragDropModX = -2;
	} else if (e.clientX || e.clientY) { // IE
		mousePosX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		mousePosY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}
	var positionMod = (typeof objDragDropRef.top == 'string') ? "px" : 0;
	objDragDropRef.top = (mousePosY > 15 - dragDropModY) ? mousePosY - 15 - dragDropModY + positionMod : 0;
	objDragDropRef.left = (mousePosX > 10 - dragDropModX) ? mousePosX - 10 - dragDropModX + positionMod : 0;
}
		
startObjDragDrop = function(id) {
	objDragDropRef = getObjStyle(id);
	if (document.addEventListener) { // Gecko
		document.addEventListener("mousemove", objDragDrop, false);
	} else if (document.attachEvent) { // IE/Win
		document.attachEvent("onmousemove", objDragDrop);
		document.attachEvent("onmouseup", endObjDragDrop);
	}
} // startDrag()


endObjDragDrop = function(id) {
	if (document.addEventListener) { // Gecko
		document.removeEventListener("mousemove", objDragDrop, false)
	} else if (document.attachEvent) { // IE/Win
		document.detachEvent("onmousemove", objDragDrop);
		document.detachEvent("onmouseup", endObjDragDrop);
	}
} // endDrag();
