var theTarget;
var diffX,diffY;
var posX,posY;
var cssOK,w3c,nn4,ie4,ie6;

function defineObject(e) {
	var item = (e.target) ? e.target:e.srcElement;
	//workaround for Safari where target contains text (nodeType = 3)...
	while (item.nodeName == "FONT" || item.nodeName == "#text") {
		if (item.parentNode) {
			item = item.parentNode;
		}
		else {
			break;
		}
	}
	var divID = (item.id || (item.name && item.src)) ? (item.id+"Div"):null;
	if (divID && item.id && item.id.indexOf("proxy") != -1) divID = divID.replace("proxy","");
	if (divID) {
		if (document.layers) {
			theTarget = document.layers[divID];
		}
		else if (document.all) {
			theTarget = document.all(divID);
		}
		else if (document.getElementById) {
			theTarget = document.getElementById(divID);
		}
		setZIndex(theTarget,100);
		return;
	}
	// theTarget = null;
	return;
}

function gettheTarget() {
	return theTarget;
}

function mouseDrag(e) {
	e = (e) ? e:event;
	if (theTarget) {
		var theRef = getObjRef(theTarget);
		var x,y;
		if (e.pageX) {
			x = (e.pageX - diffX);
			y = (e.pageY - diffY);
		}
		else if (e.offsetX) {
			x = (e.offsetX - diffX);
			y = (e.offsetY - diffY);
		}
		if (e.clientX) {
			x = (e.clientX - diffX);
			y = (e.clientY - diffY);
		}
		if (theRef) {
			if (cssOK) {
				var units = (typeof theRef.left == "string") ? "px":0;
				theRef.left = (x + units);
				theRef.top = (y + units);
			}
			else if (nn4) {
				theRef.moveTo(x,y)
			}
		}
		e.cancelBubble = true;
		return false;
	}
}

function mouseDown(e) {
	e = (e) ? e:event;
	defineObject(e);
	if (theTarget) {
		if (e.pageX) {
			diffX = e.pageX - ((theTarget.offsetLeft) ? theTarget.offsetLeft:theTarget.left);
			diffY = e.pageY - ((theTarget.offsetTop) ? theTarget.offsetTop:theTarget.top);
		}
		else if (e.offsetX) {
			diffX = e.offsetX - ((e.offsetX < -2) ? 0:document.body.scrollLeft);
			diffY = e.offsetY - ((e.offsetY < -2) ? 0:document.body.scrollTop);
		}
		if (e.clientX) {
			diffX = e.clientX - ((theTarget.offsetLeft) ? theTarget.offsetLeft:0);
			diffY = e.clientY - ((theTarget.offsetTop) ? theTarget.offsetTop:0);
		}
		return false;
	}
}

function mouseUp(e) {
	if (theTarget) {
		e = (e) ? e:event;
		if (e.pageX) {
			posX = (e.pageX - diffX);
			posY = (e.pageY - diffY);
		}
		else if (e.offsetX) {
			posX = (e.offsetX - diffX);
			posY = (e.offsetY - diffY);
		}
		if (e.clientX) {
			posX = (e.clientX - diffX);
			posY = (e.clientY - diffY);
		}
		//setZIndex(theTarget,0);
		mUp(theTarget);
		theTarget = null;
	}
}

function init() {
	if (document.layers) {
		document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);
	}
	document.onmousedown = mouseDown;
	document.onmousemove = mouseDrag;
	document.onmouseup = mouseUp;
	if (document.images) {
		cssOK = (document.body && document.body.style) ? true:false;
		w3c = (cssOK && document.getElementById) ? true:false;
		ie4 = (cssOK && document.all) ? true:false;
		nn4 = (document.layers) ? true:false;
		ie6 = (document.compatMode && document.compatMode.indexOf("CSS1") != -1) ? true:false;
	}
}

function setZIndex(elem,newZ) {
	var theRef = getObjRef(elem);
	if (theRef) {
		theRef.zIndex = newZ;
	}
}

function getObjRef(elem) {
	var theRef = elem;
	if (typeof elem == "string") {
		if (w3c) {
			theRef = document.getElementById(elem);
		}
		else if (ie4) {
			theRef = document.all(elem);
		}
		else if (nn4) {
			theRef = nsLayer(document,elem);
		}
	}
	if (theRef && cssOK) theRef = theRef.style;
		return theRef;
}

function nsLayer(doc,name) {
	var theRef;
	for (i=0;i<doc.layers.length;i++) {
		if (doc.layers[i].name == name) {
			theRef = doc.layers[i];
			break;
		}
		if (doc.layers[i].document.layers.length > 0) {
			theRef = nsLayer(document.layers[i].document,name);
		}
	}
	return theRef;
}
