/*
author: radek.riedel@onsemi.com
*/
// this is javascript utilities for positioning elements 

function Coords(top,left,height,width) {
	this.top = top;
	this.left = left;
	this.height = height;
	this.width = width;
}

function getCoords(elm) {
	var _height = elm.offsetHeight;
	var _width = elm.offsetWidth;
	var _top = elm.offsetTop;
	var _left = elm.offsetLeft;
	var _x = elm;	
	var _p = null;
	var _lastParent = null;
	while ( _x != null && _x.tagName.toUpperCase() != "BODY" ) {
		if (_x.tagName.toUpperCase() != "TBODY"){
			_p = _x.offsetParent;
			if (_p!=_lastParent) {
				_top += _p.offsetTop;
				_left += _p.offsetLeft;						   
			}
			_lastParent = _p;
		}
		if (app.isNS6){
			if (_p != null && _p.tagName.toUpperCase() == "BODY") {
				// here we finish, becase body is at the top
				_x = null;
			} else {
				_x = _x.parentNode;
			}
		}
		else{
			if ((app.isIE4 || app.isIE5) && _p != null && _p.tagName.toUpperCase() == "HTML") {
				// here we finish, becase body is at the top
				_x = null;
			} else {
			   _x = _x.parentElement;
			}
		}
	}
	
	return new Coords(_top,_left,_height,_width);
}

/*
Show element specified by {id}, offset it relatively to position of element {offsetElm}.
The offset position coudl be in defferent manner:
{offsetTop}
	none - over the element
	middle - in middle of the element
	bottom - to the bottom (beneath)
	top - sit on top of the element (above)
{offsetLeft}
	none - over the element
	middle - in middle of the element
	middle-left - the right edge is in middle of the element
	right - next to the element
	left - next to the element
	
*/
function show (id, offsetElm, offsetTop, offsetLeft, isSubmenu) {
	var _elm = document.getElementById(id);
	var _parentCoords = null;

	// simply show the element
	_elm.style.visibility="hidden";
	_elm.style.display="block";

	// get parrent coords
	if (null!=offsetElm) {
		_parentCoords = getCoords(offsetElm);
		if (app.isMac) {
			if (app.isMac && isSubmenu && offsetElm.tagName.toUpperCase()=="TD") {
				if (offsetElm.parentElement.parentElement.parentElement.style.left!='') {
					var __left = offsetElm.parentElement.parentElement.parentElement.style.left;
					_parentCoords.left += parseInt(__left.substring(0,__left.indexOf('px')));
				}
				if (offsetElm.parentElement.parentElement.parentElement.style.top!='') {
					var __top = offsetElm.parentElement.parentElement.parentElement.style.top;
					_parentCoords.top += parseInt(__top.substring(0,__top.indexOf('px')));
				}
			}
		}
	}
	
	// count the oofset position 
	if (null!=_parentCoords) {
		// set element to 0:0 for countig its offset
		_elm.style.top=0 + "px";
		_elm.style.left=0 + "px";
		var _popupCoords = getCoords(_elm);
		
		// count layout offset
		var _topOffset = 0;
		var _leftOffset = 0;
		if (offsetTop!=null) {
			switch (offsetTop) {
			case "middle":
				_topOffset = _parentCoords.height/2;
			    break;
			case "bottom":
				_topOffset = _parentCoords.height;
				break;
			case "top":
				_topOffset = -_popupCoords.height;
				break;
			}
		}
		if (offsetLeft!=null) {
			switch (offsetLeft) {
			case "middle":
				_leftOffset = _parentCoords.width/2;
			    break;
			case "middle-left":
				_leftOffset = -_popupCoords.width/2;
				break;
			case "right":
				_leftOffset = _parentCoords.width;
				break;
			case "left":
				_leftOffset = -_popupCoords.width;
				break;
			}
		}
		
		var topPos = _parentCoords.top + _topOffset - _popupCoords.top;
		// fix position at bootm of page
		if (isSubmenu && offsetLeft=='right') {
			// submenu position correction
			topPos = topPos - 10;
			if ((topPos - document.documentElement.scrollTop + _popupCoords.height) > document.documentElement.clientHeight) {
				if (_popupCoords.height <= document.documentElement.clientHeight) {
					topPos = document.documentElement.clientHeight - (_popupCoords.height) + document.documentElement.scrollTop + 5;
				} else {
					topPos=5 + document.documentElement.scrollTop;
				}
			}
		}
		_elm.style.top=(topPos) +"px";
	    var leftPos = _parentCoords.left + _leftOffset - _popupCoords.left;
	    if (_parentCoords.left + _leftOffset - _popupCoords.left + _popupCoords.width > document.documentElement.clientWidth + document.documentElement.scrollLeft) {
			leftPos = document.documentElement.clientWidth - _popupCoords.width;
			leftPos += document.documentElement.scrollLeft;
		}
		// fixing th eposition in case submenu is over the menu
		if ((leftPos<_parentCoords.left && leftPos+_popupCoords.width>_parentCoords.left + _parentCoords.width) &&
			((topPos<_parentCoords.top && topPos+_popupCoords.height>_parentCoords.top) ||
			 (topPos>_parentCoords.top && topPos<_parentCoords.top + _parentCoords.height))) {

			leftPos = _parentCoords.left + _parentCoords.width/2;
//		alert("Ycoords: " + _parentCoords.top + ":" + _parentCoords.height + ":" +_popupCoords.top + ":" +_popupCoords.height + ":" + _topOffset);		
//		alert("Xcoords: " + _parentCoords.left + ":" + _parentCoords.width + ":" +_popupCoords.left + ":" +_popupCoords.width + ":" + _leftOffset);		
		}
		
		_elm.style.left=leftPos +"px";
		_elm.style.width=_popupCoords.width +"px";
		_elm.style.visibility="visible";
	}
}

function hide (id) {
	var _elm = document.getElementById(id);
	_elm.style.display="none";
}




