		
		
		
  function getElementPosX( myObj)
		{
		  var val=0;
				//dont think we are interested in the first objects borderLeftWidth only parent objects.  But perhaps the whole of clientLeft is irrelevant for anything other than parent objects?
				var myObjClientLeft = myObj.clientLeft;
				//elog(myObjClientLeft);
		  do 
				{
					 if ( myObj.offsetLeft > 0 )//occasionally offsetLeft returns a negative number.  For instance when we hava a left side scroller.....we want to ignore this negative.
						{
					   val += myObj.offsetLeft + myObj.clientLeft;			
								//elog(myObj.nodeName + " cn=" + myObj.className + "  id=" + myObj.id + "  ol=" + myObj.offsetLeft + " cl=" + myObj.clientLeft + " op=" + (myObj.offsetParent ? myObj.offsetParent.nodeName : "null") + " hl="+myObj.currentStyle.hasLayout);
						}
						else
						{
						  val += myObj.clientLeft;
								//elog(myObj.nodeName + " cn=" + myObj.className + "  id=" + myObj.id + "  cl=" + myObj.clientLeft + "  ol=" + myObj.offsetLeft + " op=" + (myObj.offsetParent ? myObj.offsetParent.nodeName : "null") + " hl="+myObj.currentStyle.hasLayout);								
						}
				} while( (myObj=myObj.offsetParent) && myObj.nodeName != 'BODY' );
				//elog("exit with " + (val-myObjClientLeft));
				return val-myObjClientLeft;
		}		
	
			
  function getElementPosY( myObj)
		{
		  var val=0;
				var myObjClientTop = myObj.clientTop;//origonal objects clientTop doesn't count, so well take it off before we return
		  do 
				{
					 if ( myObj.offsetTop > 0 )//occasionally offsetLeft returns a negative number.  For instance when we hava a left side scroller.....we want to ignore this negative.
					   val += myObj.offsetTop + myObj.clientTop;
						else
						  val += myObj.clientTop;			
				} while( (myObj=myObj.offsetParent) && myObj.nodeName != 'BODY' );
				return val-myObjClientTop;
		}	

  function getElementClientY( myObj)
		{
		  var val=0;
				var myObjClientTop = myObj.clientTop;//origonal objects clientTop doesn't count, so well take it off before we return
		  do 
				{
					 if ( myObj.offsetTop > 0 )//occasionally offsetLeft returns a negative number.  For instance when we hava a left side scroller.....we want to ignore this negative.
					   val += myObj.offsetTop + myObj.clientTop - myObj.scrollTop;
						else
						  val += myObj.clientTop;			
				} while( (myObj=myObj.offsetParent) && myObj.nodeName != 'BODY' );
				return val-myObjClientTop;
		}
		
  function getElementClientX( myObj)
		{
		  var val=0;
				var myObjClientLeft = myObj.clientLeft;
		  do 
				{
					 if ( myObj.offsetLeft > 0 )//occasionally offsetLeft returns a negative number.  For instance when we hava a left side scroller.....we want to ignore this negative.
						{
					   val += myObj.offsetLeft + myObj.clientLeft - myObj.scrollLeft;			
						}
						else
						{
						  val += myObj.clientLeft;
						}
				} while( (myObj=myObj.offsetParent) && myObj.nodeName != 'BODY' );
				return val-myObjClientLeft;
		}			
	
  function getElementPosYSide(myObj, align) 
		{
			 if ( !align || align=='top' )
				  return getElementPosY(myObj);
				else
      return doc(myObj).body.offsetHeight-( getElementPosY(myObj) + myObj.offsetHeight );
  }

  function getElementPosXSide(myObj, align) 
		{
			 if ( !align || align=='left' )
				  return getElementPosX(myObj);
				else
      return doc(myObj).body.offsetWidth-( getElementPosX(myObj) + myObj.offsetWidth );
  }	
		
		function scrollIntoVView( scroller, obj, page )
		{
			  var y=getElementPosY( obj );
					var cy=getElementPosY( scroller );
					var ch=scroller.clientHeight;
					var st=scroller.scrollTop;
					if ( (y-cy) > (ch+st) ) 
					{
						 if ( page )
						   scroller.doScroll("scrollbarPageDown");
							else
							  scroller.doScroll("scrollbarDown");
							scrollIntoVView( scroller, obj );
					} else if ( (y-cy) < (st) )
					{
						 if ( page )
						   scroller.doScroll("scrollbarPageUp");
							else
							  scroller.doScroll("scrollbarUp");
							scrollIntoVView( scroller, obj );						
					}
		}
		
		function scrollIntoHView( scroller, obj, page )
		{
			  var x=getElementPosX( obj );
					var cx=getElementPosX( scroller );
					var cw=scroller.clientWidth;
					var sl=scroller.scrollLeft;
					if ( (x-cx) > (cw+sl) ) 
					{
						 if ( page )
							  scroller.doScroll("scrollbarPageRight");
							else
						   scroller.doScroll("scrollbarRight");
							scrollIntoHView( scroller, obj, page );
					} else if ( (x-cx) < (sl) )
					{
						 if ( page )
						   scroller.doScroll("scrollbarPageLeft");
							else
							  scroller.doScroll("scrollbarLeft");
							scrollIntoHView( scroller, obj, page );						
					}
		}			