
function xGetElementById(ID) {

	var ele = null;

	if(document.all) {
		ele = document.all[ID];
	}
  else if(document.getElementById) {
		ele = document.getElementById(ID);
	}
	else if(document.layers) {
		ele = nnGetElementById(ID);
	}
	return ele;
}

/* Element Functions */

/* Appearance */

function xSwap(hide, show, focus_set) {

	var ele_1, ele_2;

	ele_1 = xGetElementById(hide)
	ele_2 = xGetElementById(show)

	if(ele_1 != null && ele_2 != null) {
		ele_1.style.display = "none";
		ele_2.style.display = "block";
	}
	else {
		alert("ERROR: <div> [" + hide + "] or [" + show + "] is missing");
	}
}

function xDisplay(sId) {

  var ele = xGetElementById(sId);

  if(ele.style) {
		ele.style.display = 'block';
	}
  else if(document.layers) {
		ele.visibility = 'block';
	}
	else {
		alert("ERROR: <element> [" + hide + "] is missing");
	}

}

function xDisplayHide(sId) {
	
  var ele = xGetElementById(sId);

  if(ele.style) {
		ele.style.display = 'none';
	}
  else if(document.layers) {
		ele.visibility = 'none';
	}
	else {
		alert("ERROR: <element> [" + hide + "] is missing");
	}
}

function xShow(sId) {

  var ele = xGetElementById(sId);
  if (ele.style) ele.style.visibility = 'visible';
  else if (document.layers) ele.visibility = 'show';
}

function xHide(sId) {

	var ele = xGetElementById(sId);

	if(ele.style) {
		ele.style.visibility = 'hidden';
	}
	else if (document.layers) ele.visibility = 'hide';
}

function xBackground(sId, sBgColor, sBgImage) {
  var bg = "", ele = xGetElementById(sId);
  if (ele.style) {
    if (arguments.length > 1)
      ele.style.backgroundColor = sBgColor;
    if (arguments.length == 3)
      ele.style.backgroundImage = "url(" + sBgImage + ")";
    bg = ele.style.backgroundColor;
  }
  else if (document.layers) {
    if (arguments.length > 1) ele.bgColor = sBgColor;
    if (arguments.length == 3) ele.background.src = sBgImage;
    bg = ele.bgColor;
  }
  return bg;
}

// Position

function xMoveTo(sId, iX, iY) {
  xLeft(sId, iX);
  xTop(sId, iY);
}

function xMoveBy(sId, iDX, iDY) {
  xLeft(sId, iDX + xLeft(sId));
  xTop(sId, iDY + xTop(sId));
}

function xLeft(sId, iLeft) {
  var x=0, ele=xGetElementById(sId);
  if (ele.style) {
    if (ele.style.pixelLeft) {
      if (arguments.length==2) ele.style.pixelLeft = iLeft;
      x = ele.style.pixelLeft;
    }
    else {
      if (arguments.length==2) ele.style.left = iLeft + "px";
      x = parseInt(ele.style.left);
    }
  }  
  else if (document.layers) {
    if (arguments.length==2) ele.left = iLeft;
    x = ele.left;
  }
  return x;
}

function xTop(sId, iTop) {
  var y=0, ele=xGetElementById(sId);
  if (ele.style) {
    if (ele.style.pixelTop) {
      if (arguments.length==2) ele.style.pixelTop = iTop;
      y = ele.style.pixelTop;
    }
    else {
      if (arguments.length==2) ele.style.top = iTop + "px";
      y = parseInt(ele.style.top);
    }
  }  
  else if (document.layers) {
    if (arguments.length==2) ele.top = iTop;
    y = ele.top;
  }
  return y;
}

// Size

function xResizeTo(sId, uW, uH) {
  xWidth(sId, uW);
  xHeight(sId, uH);
  xClip(sId, 0, uW, uH, 0);
}

function xResizeBy(sId, uDW, uDH) {
  xResizeTo(sId, uDW + xWidth(sId), uDH + xHeight(sId));
}

function xWidth(sId, uW) {
  var w=0, ele=xGetElementById(sId);
  if (ele.style) {
    if (ele.style.pixelWidth) {
      if (arguments.length==2) ele.style.pixelWidth = uW;
      w = ele.style.pixelWidth;
    }
    else {
      if (arguments.length==2) ele.style.width = uW + "px";
      w = parseInt(ele.style.width);
    }
  }  
  else if (document.layers) {
    w = ele.clip.width;
  }
  return w;
}

function xHeight(sId, uH) {
  var h=0, ele=xGetElementById(sId);
  if (ele.style) {
    if (ele.style.pixelHeight) {
      if (arguments.length==2) ele.style.pixelHeight = uH;
      h = ele.style.pixelHeight;
    }
    else {
      if (arguments.length==2) ele.style.height = uH + "px";
      h = parseInt(ele.style.height);
    }
  }  
  else if (document.layers) {
    h = ele.clip.height;
  }
  return h;
}

// Clipping

function xClip(sId, iTop, iRight, iBottom, iLeft) {
  var ele=xGetElementById(sId);
  if (ele.style) {
    ele.style.clip =
      "rect("
      + iTop + "px "
      + iRight + "px "
      + iBottom + "px "
      + iLeft + "px" + ")";
  }
  else if (document.layers) {
    ele.clip.top = iTop;
    ele.clip.right = iRight;
    ele.clip.bottom = iBottom;
    ele.clip.left = iLeft;
  }
}

//// Window Functions

// Position

function xScrollLeft() {
  var offset=0;
  if (window.pageXOffset) offset = window.pageXOffset;
  else if (document.body) {
    if (document.body.scrollLeft) offset = document.body.scrollLeft;
  }  
  return offset;
}

function xScrollTop() {
  var offset=0;
  if(window.pageYOffset) {
		offset = window.pageYOffset;
	}
  else if(document.body) {
    if(document.body.scrollTop) {
			offset = document.body.scrollTop;
		}
  }  
  return offset;
}

// Size

function xClientWidth() {
  var w = 0;
  if (window.innerWidth) {
    w = window.innerWidth;
    if (!window.opera && document.height > window.innerHeight) w -= 16;
  }
  else if (document.body) {
    if (document.body.clientWidth) w = document.body.clientWidth;
  }  
  return w;
}

function xClientHeight() {
  var h = 0;
  if (window.innerHeight) {
    h = window.innerHeight;
    if (!window.opera && document.width > window.innerWidth) h -= 16;
  }
  else if (document.body) {
    if (document.body.clientHeight) h = document.body.clientHeight;
  }  
  return h;
}

// Event Functions

function xAddEventListener(sId, eventType, eventListener, useCapture) {
  var ele=xGetElementById(sId);
  if (!useCapture) useCapture = false;
  eventType = eventType.toLowerCase();
  var eh = "ele.on" + eventType + "=eventListener";
  if (ele.addEventListener) {
    ele.addEventListener(eventType, eventListener, useCapture);
  }  
  else if (ele.captureEvents) {
    if (useCapture || (eventType.indexOf('mousemove')!=-1))
      ele.captureEvents(eval("Event." + eventType.toUpperCase()));
    eval(eh);
  }
  else { eval(eh); }  
}

function xRemoveEventListener(sId, eventType, eventListener, useCapture) {
  var ele=xGetElementById(sId);
  if (!useCapture) useCapture = false;
  eventType = eventType.toLowerCase();
  var eh = "ele.on" + eventType + "=null";
  if (ele.removeEventListener) {
    ele.removeEventListener(eventType, eventListener, useCapture);
  }  
  else if (ele.releaseEvents) {
    if (useCapture || (eventType.indexOf('mousemove')!=-1))
      ele.releaseEvents(eval("Event." + eventType.toUpperCase()));
    eval(eh);
  }
  else { eval(eh); }  
}

function getElementsByTagName(tagName) {
  var eleArray;
  if (document.all) eleArray = document.body.getElementsByTagName(tagName);

  else if (document.all) eleArray = document.all.tags(tagName);
  else if (is) eleArray = document.getElementsByTagName(tagName);
  else if (is) {
    eleArray = new Array();
    nnGetAllLayers(window, eleArray, 0);
  }
  return eleArray;
}

// end x.js








function getMouseXY() {
	alert(window.clientX+"-"+window.clientY);
}

function getElementXY(eleId)
{
	var result = new Object;

	var element = xGetElementById(eleId);
	var x = getOffsetLeft(element);
	var y = getOffsetTop(element);

	result.x = x; 
	result.y = y;

	return result;
}

function getOffsetLeft(ele)
{
	var oLeft = ele.offsetLeft;

	while((ele = ele.offsetParent) != null) {
		oLeft += ele.offsetLeft;
	}
	return oLeft;
}

function getOffsetTop(ele)
{
	var oTop = ele.offsetTop;

	while((ele = ele.offsetParent) != null) {
		oTop += ele.offsetTop;
	}
	return oTop;
}
                                       
function xDisplayTip() {

	var args = arguments.length;
	var ele, eleId, pos, prfx = "tip-", offsetY = -25, offsetX = 25;
	// error, no args
	if(args == 0) {
			alert("ERROR: missing argument for xDisplayTip()");
	} else {
		eleId = prfx + arguments[0].id;
		pos = getElementXY(arguments[0].id);
	}
	if(args == 2) {
			if(!isFinite(arguments[1])) {
				eleId = prfx + arguments[1];
				if(arguments[0].id == "") {
					alert("ERROR: call from an element [DIV, SPAN, ...] without id set for xDisplayTip()\narg passed : \"" + arguments[1] + "\"");
				} else {
					// arg is an Y offset
					pos = getElementXY(arguments[0].id);
				}
			} else {
				offsetY = arguments[1];
			}

	}
	if(args == 3) {
		eleId = prfx + arguments[1];
		offsetY = arguments[2];
	}
	if(args == 4) {
		eleId = prfx + arguments[1];
		offsetY = arguments[2];
		offsetX = arguments[3];
	}
	ele = xGetElementById(eleId); 
	if(ele != null) {
		if(ele.style) {
			ele.style.left = (pos.x + offsetX) + "px";
			ele.style.top = (pos.y + offsetY) + "px";
			ele.style.display = 'block';
		}
		else if(document.layers) {
			ele.visibility = 'block';
		}
	}
	else {
		alert("ERROR: show <element> [tip-" + eleId + "] is missing");
	}
}

function xHideTip() {
  var eleId;
  if(typeof arguments[0] == "object") {
    eleId = "tip-" + arguments[0].id;
  }
  else {
    eleId = "tip-" + arguments[0];
  }
  var ele = xGetElementById(eleId);
	if(ele != null) {
	  if(ele.style) {
			ele.style.display = 'none';
		}
	  else if(document.layers) {
			ele.visibility = 'none';
		}
	}
	else {
		alert("ERROR: hide <element> [" + arguments[0] + "] is missing");
	}
}

function xScrollTopTo(offset) {
	// MOZ, FF, NS?
  if(window.pageYOffset != null) {
		window.scrollTo(0,offset);
	}
	// IE, OP
  else if(document.body) {
		window.scrollTo(0,offset);
  }  
  return offset;
}

