// JavaScript Document
// DRAG & DROP FUNCTIONS
// http://www.webreference.com/programming/javascript/mk/column2/
var dragObject;
var mouseOffset;
	
var D_D = function() {
	
	return {
		getMouseOffset : function (target, ev){
			ev = ev || window.event;
		
			var docPos    = D_D.getPosition(target);
			var mousePos  = D_D.mouseCoords(ev);
			return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
		},
		
		getPosition : function (e){
			var left = 0;
			var top  = 0;
		
			while (e.offsetParent){
				left += e.offsetLeft;
				top  += e.offsetTop;
				e     = e.offsetParent;
			}
		
			left += e.offsetLeft;
			top  += e.offsetTop;
		
			return {x:left, y:top};
		},
		
		mouseMove : function (ev){
			ev           = ev || window.event;
			var mousePos = D_D.mouseCoords(ev);
			
			if(dragObject){
				dragObject.style.position = 'absolute';
				dragObject.style.top      = mousePos.y - mouseOffset.y + 'px';
				dragObject.style.left     = mousePos.x - mouseOffset.x + 'px';
				return false;
			}
		},
		
		mouseCoords : function (ev){
			if(ev.pageX || ev.pageY){
				return {x:ev.pageX, y:ev.pageY};
			}
			try {
				return {
					x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
					y:ev.clientY + document.body.scrollTop  - document.body.clientTop
				};
			} catch(e) {
				return {x:0, y:0};
			}
		},
		
		mouseUp : function (){
			dragObject = null;
		},
		
		makeDraggable : function (item){
			if(!item) return;
			item.onmousedown = function(ev){
				dragObject  = this;
				mouseOffset = D_D.getMouseOffset(this, ev);
				return false;
			}
		},
		
		// stop drag-ability
		stopDraggable : function (item){
			if(!item) return;
			item.onmousedown = function(ev){
				dragObject  = null;
				//return false;
			}
		},
		
		getHighest : function () {
			var myEmps = document.getElementsByTagName('div');
			var myZindex = 0;
			for(var i = 0; i < myEmps.length; i++) {
				// find employee cards
				if(myEmps[i].className == 'empCard') {
					// find the z-index of the current card
					if (isNaN(parseInt(myEmps[i].style.zIndex))) {
						myEmps[i].style.zIndex = 0;
					}
					if (myEmps[i].style.zIndex >= myZindex) {
						myZindex = parseInt(myEmps[i].style.zIndex) + 1;
					}
					// dark colors/background
					myEmps[i].style.background = '#EFEFEF';
					myEmps[i].getElementsByTagName('h3')[0].style.background = '#CDDBE6';
				}
			}
			return myZindex;
		},
		
		bringToTop : function (o) {
			o.style.zIndex = D_D.getHighest();
			// light colors/foreground
			o.style.background = '#FFF';
			o.getElementsByTagName('h3')[0].style.background = '#DBEAF5';
		},
		
		toggleLayer : function (obj) {
			if (obj.style.display=='none') {
				obj.style.display='';
			} else {
				obj.style.display='none';
			}
		}
	};
} ();

// also in sorttable.js
function addEvent(elm, evType, fn, useCapture)
// addEvent and removeEvent
// cross-browser event handling for IE5+,  NS6 and Mozilla
// By Scott Andrew
{
  if (elm.addEventListener){
    elm.addEventListener(evType, fn, useCapture);
    return true;
  } else if (elm.attachEvent){
    var r = elm.attachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be removed");
  }
}

//document.onmousemove = D_D.mouseMove;
//document.onmouseup   = D_D.mouseUp;
addEvent(document, 'mousemove', D_D.mouseMove);
addEvent(document, 'mouseup', D_D.mouseUp);