// $Revision: 2676 $
function Finish(event) {
    if (typeof event == "undefined") {
		return false;
	}
	if (window.event) {
		event = window.event;
	}
	if (event == null) {
		return false;
	}
	DoPropagate(false, event);
	DoDefault(false, event);
	return false;
}

function DoDefault(doDefault, event) {
	if (event.preventDefault) {
		if (!doDefault) {
			event.preventDefault();
		}
	} else {
		event.returnValue = doDefault;
	}
}

function DoPropagate(doPropagate, event) {
	if (event.stopPropagation) {
		if (!doPropagate) {
			event.stopPropagation();
		}
	} else {
		event.cancelBubble = !doPropagate;
	}
}

function IsValidButton(event) {
	if (typeof event.button == "undefined" || event.button == null) {
		return false;
	}
	return !isIE || event.button != 0;
}

function IsLeftMouseButton(event) {
	if (typeof event.button == "undefined" || event.button == null) {
		return false;
	}
	return isIE ? event.button == 1 : event.button == 0;
}

function IsRightMouseButton(event) {
	if (typeof event.button == "undefined" || event.button == null) {
		return false;
	}
	return event.button == 2;
}

function IsCtrl(event) {
	return event.ctrlKey;
}

function GetTarget(event) {
    var target;
    if (event.target) {
        target = event.target;
    } else if (event.srcElement) {
        target = event.srcElement;
    }
    if (target.nodeType == 3) {
        target = target.parentNode;
    }
	return target;
}

function EatEvent(event) {
	return Finish(event);
}

function ContextMenu(event) {
	var target = GetTarget(event);
	switch (target.tagName) {
		case "IMG":
			DoDefault(true, event);
			return true;
		default:
			DoDefault(false, event);
			return false;
	}
}

function CatchEvents(events, fn) {
	for (var i = 0; i < events.length; i++) {
		if (document.addEventListener) {
			document.addEventListener(events[i], fn, true);
		} else if (document.attachEvent) {
			document.attachEvent("on" + events[i], fn);
		}
	}
}

function ReleaseEvents(events, fn) {
	for (var i = 0; i < events.length; i++) {
		if (document.removeEventListener) {
			document.removeEventListener(events[i], fn, true);
		} else if (document.detachEvent) {
			document.detachEvent("on" + events[i], fn);
		}
	}
}

function GetX(event) {
	if (event.pageX) {
		return event.pageX;
	}
	return event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
}

function GetY(event) {
	if (event.pageY) {
		return event.pageY;
	}
	return event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
}

var OnMouseDownStack = new Array();
var OnMouseMoveStack = new Array();
var OnMouseUpStack = new Array();
var OnDblClickStack = new Array();

function PushOnMouseDown(f, doNotDuplicate) {
	if (!doNotDuplicate || (document.onmousedown != f))
	{
		OnMouseDownStack.push(document.onmousedown);
		document.onmousedown = f;
	}
}

function PopOnMouseDown(f) {
	if (document.onmousedown != f) {
		return;
	}
	if (OnMouseDownStack.length == 0) {
		document.onmousedown = null;
	} else {
		document.onmousedown = OnMouseDownStack.pop();
	}
}

function PushOnMouseMove(f, doNotDuplicate) {
	if (!doNotDuplicate || (document.onmousemove != f))
	{
		OnMouseMoveStack.push(document.onmousemove);
		document.onmousemove = f;
	}
}

function PopOnMouseMove(f) {
	if (document.onmousemove != f) {
		return;
	}
	if (OnMouseMoveStack.length == 0) {
		document.onmousemove = null;
	} else {
		document.onmousemove = OnMouseMoveStack.pop();
	}
}

function PushOnMouseUp(f, doNotDuplicate) {
	if (!doNotDuplicate || (document.onmouseup != f))
	{
		OnMouseUpStack.push(document.onmouseup);
		document.onmouseup = f;
	}
}

function PopOnMouseUp(f) {
	if (document.onmouseup != f) {
		return;
	}
	if (OnMouseUpStack.length == 0) {
		document.onmouseup = null;
	} else {
		document.onmouseup = OnMouseUpStack.pop();
	}
}

function PushOnDblClick(f, doNotDuplicate) {
	if (!doNotDuplicate || (document.ondblclick != f))
	{
		OnDblClickStack.push(document.ondblclick);
		document.ondblclick = f;
	}
}

function PopOnDblClick(f) {
	if (document.ondblclick != f) {
		return;
	}
	if (OnDblClickStack.length == 0) {
		document.ondblclick = null;
	} else {
		document.ondblclick = OnDblClickStack.pop();
	}
}