// positioning.js
// (c) www.in.gr
// General positioning

function Debug(strMessage)
{
	var DebugElement = GetElement("Monitor");
	if (DebugElement) DebugElement.innerHTML = strMessage;
}

function DebugAppend(strMessage)
{
	var DebugElement = GetElement("Monitor");
	if (DebugElement) DebugElement.innerHTML += strMessage;
}

function IsAbsolutePositioned(Element)
{
	if (document.all) {
		if (Element.runtimeStyle.position == "absolute") return true;
	}
	if (document.getElementById) return Element.style.position == "absolute";
	else return document.position == "absolute";
}

function GetDocument()
{
	try {
		if (element) return element.document;
	}
	catch (e) {
	}
	return document;
}

function GetElement(strID)
{
	try {
		if (element) return element.document.getElementById(strID);
	}
	catch (e)	{
	}
	if (document.getElementById) return document.getElementById(strID);
	else if (document.layers) return document.layers[strID];
	else return document.all[strID];
}

function Hide(e)
{
	if (document.all) {
		e.runtimeStyle.visibility = "hidden";
	}
	else
	if (document.getElementById) e.style.visibility = "hidden"; 
	else e.visibility = "hide";
}

function Show(e)
{
	if (document.all) {
		e.runtimeStyle.visibility = "visible";
	}
	else
	if (document.getElementById) e.style.visibility = "visible";
	else e.visibility = "show";
}

function AbsoluteX(e)
{
	if (document.layers) return e.pageX;
	if (e.tagName == "BODY") return e.offsetLeft;
	else return e.offsetLeft + AbsoluteX(e.offsetParent);
}

function AbsoluteY(e)
{
	if (document.layers) return e.pageY;
	if (e.tagName == "BODY") return e.offsetTop;
	else return e.offsetTop + AbsoluteY(e.offsetParent);
}

function OffsetX(e)
{
	if (document.layers) return e.pageX;
	if (e.tagName == "BODY") return e.offsetLeft;
	if (e.offsetParent) {
		if (IsAbsolutePositioned(e.offsetParent)) {
			return e.offsetLeft;
		}
		else return e.offsetLeft + OffsetX(e.offsetParent);
	}
	else return e.offsetLeft + OffsetX(e.offsetParent);
}

function OffsetY(e)
{
	if (document.layers) return e.pageY;
	if (e.tagName == "BODY") return e.offsetTop;
	if (e.offsetParent) {
		if (IsAbsolutePositioned(e.offsetParent)) {
			return e.offsetTop;
		}
		else return e.offsetTop + OffsetY(e.offsetParent);
	}
	else return e.offsetTop + OffsetY(e.offsetParent);
}

function Width(e)
{
	if (document.all || document.getElementById) return e.offsetWidth;
	else return e.clip.width;
}

function Height(e)
{
	if (document.all || document.getElementById) return e.offsetHeight;
	else return e.clip.height;
}

function Move(e, nLeft, nTop)
{
	if (document.layers) {
		e.left = nLeft;
		e.top = nTop;
	}
	else {
		e.style.left = nLeft;
		e.style.top = nTop;
	}
}

function Resize(e, nWidth, nHeight)
{
	if (document.layers) {
		e.width = nWidth;
		e.height = nHeight;
	}
	else {
		e.style.width = nWidth;
		e.style.height = nHeight;
	}
}

function Coalesce(Element, OperandElement)
{
	if (!IsAbsolutePositioned(Element)) return;
	
	var OrgXStart = AbsoluteX(Element);
	var OrgYStart = AbsoluteY(Element);
	var OrgXEnd = OrgXStart + Width(Element);
	var OrgYEnd = OrgYStart + Height(Element);
	
	var OpXStart = AbsoluteX(OperandElement);
	var OpYStart = AbsoluteY(OperandElement);
	var OpXEnd = OpXStart + Width(OperandElement);
	var OpYEnd = OpYStart + Height(OperandElement);
	
	if (OrgXStart > OpXStart) OrgXStart = OpXStart;
	if (OrgXEnd < OpXEnd) OrgXEnd = OpXEnd;
	if (OrgYStart > OpYStart) OrgYStart = OpYStart;
	if (OrgYEnd < OpYEnd) OrgYEnd = OpYEnd;
	
	Move(Element, OrgXStart, OrgYStart);
	Resize(Element, OrgXEnd - OrgXStart, OrgYEnd - OrgYStart);
	
}


