

var isXblibInit = false ;

var isOther = true;	

var isNav4 = false;
var isNav6 = false ;
var isIE = false ;
var isIE4 = false ;
var isIE5 = false ;
var isW3C = false ;
var isWin = false;
var isMac = false;
var isMoz5 = false;

var docAll = null;

var verMajor = 0;
var verMinor = 0;

var getElem = function(){}

xblibInit();

function xblibInit ()
{
	docAll = document;

	var ver = navigator.appVersion.toLowerCase();
	var agt = navigator.userAgent.toLowerCase(); 

	isWin = (-1 != ver.indexOf( "win" ) ); 
	isMac = (-1 != ver.indexOf( "mac" ) ); 

	verMajor = parseInt( ver ); 
	verMinor = parseFloat( ver ); 

	if ( document.layers )
	{
		isNav4 = ( verMinor >= 4.06 );
		isOther = !isNav4;
	}
	else
	{
		if ( document.all )
		{
			isIE = true ;
			isIE4 = true ;
			isOther = false;
			docAll = document.all ;
		}

		if ( document.getElementById )
		{
			isIE4 = false ;
			isIE5 = isIE ;
			isMoz5 = (!isIE);
			isW3C = true ;
			isOther = false;
			docAll = document;
			isNav6 = (-1 != agt.indexOf( "netscape" ) );
		}
	}

	getElem = (isIE ? (isMac ? getElemIEMac : getElemIE) : isNav4 ? getElemNav4 : getElemNav6);

	isXblibInit = true ;
}

function isObj ( objToTest )
{
	return ( (objToTest != null) &&
			 (typeof(objToTest) == "object") );
}

function addEvent ( obj, evType, fn, useCapture, Nav4EventCode )
{
	if (obj.addEventListener)	
	{
		obj.addEventListener( evType, fn, useCapture );
	}
	else if (obj.attachEvent)	
	{
		obj.attachEvent( "on" + evType, fn );
	}
	
	else
	{
		var origHandler = obj[ "on" + evType ];
		obj[ "on" + evType ] = fn ;
		if ( isNav4 && useCapture && obj.captureEvents && Nav4EventCode )
		{
			obj.captureEvents( Nav4EventCode );
		}
		return origHandler ;
	}

	return null;
}


function cancelEvent ( e )
{
	if ( ! e ) return false ;
	
	if ( isIE )
	{
		e.cancelBubble = true;
		e.returnValue = false;
	}
	if ( e.cancelable )	e.cancelBubble = true;
	if ( e.stopPropagation ) e.stopPropagation();
	if ( e.preventDefault ) e.preventDefault();

	
	return false ;
}


function getInstanceEventHandler ( obj, handlerName )
{
	function _getInstanceMethodClosure( _obj )
	{
		
		return function(evt)
		{
			return _obj[ handlerName ](evt);		
		}
	}
	
	return _getInstanceMethodClosure( obj );

}	




function getElemIE ( elem, doc ) 
{
	if (! doc ) doc = document;
	return doc.all[ elem ];
}


function getElemIEMac ( elem, doc ) 
{
	if (! doc ) doc = document;
	if ( elem == "" ) return null; 
	return doc.all[ elem ];
}


function getElemNav4 ( elemName, doc ) 
{
	function _searchElem( _doc )
	{
		
		var elem = _doc.layers[ elemName ];

		if ( isObj( elem ) )
		{
			return elem ;
		}

		
		for ( var x = 0; x < _doc.forms.length; x++ )
		{
			if ( _doc.forms[ x ].name == elemName )
			{
				return _doc.forms[ x ] ;
			}

			elem = _doc.forms[ x ][ elemName ];
			if ( isObj( elem ) )
			{
				return elem ;
			}
		}

		for ( x = 0; x < _doc.layers.length; x++ )
		{
			elem = _searchElem( _doc.layers[ x ].document );
			if ( isObj( elem ) )
			{
				return elem ;
			}
		}

		return elem ;
	}

	if (! doc ) doc = document;
	return _searchElem( doc );
}

function getElemNav6 ( elemNameOrID, doc ) 
{
	if (! doc ) doc = document;
	var elem = doc.getElementById( elemNameOrID );
	if ( elem ) return elem;
	
	elem = doc.getElementsByName( elemNameOrID );
	if ( elem[0] ) return elem[0];

	return null ;
}

function getChild ( obj, childIndex )
{
	if ( obj.childNodes )
	{
		return obj.childNodes[ childIndex ];
	}
	if ( obj.children )
	{
		return obj.children[ childIndex ];
	}
	else	
	{
		return null ;	
	}
}


function getParentByTagName ( obj, tagName )
{
	if ( isNav4 ) return obj;
	
	var parentObj = obj;
	while ( parentObj )
	{
		if ( tagName == parentObj.tagName )
		{
			return parentObj ;
		}
		
		parentObj = parentObj.parentNode ? parentObj.parentNode : parentObj.parentElement ;
	}

	return null ;

}	


function isElemInView ( elem, win )
{
	if ( ! win ) win = window ;
	if ( isNav4 )
	{
		return (elem.top >= win.pageYOffset) &&
		      ((elem.top + elem.clip.height) <=
		       (win.innerHeight + win.pageYOffset));
	}
	else if ( isIE )
	{
		return (elem.offsetTop >= win.document.body.scrollTop) &&
		       (elem.offsetTop < (win.document.body.scrollTop + win.document.body.offsetHeight));
	}
	else if( isMoz5 )
	{
		return (elem.offsetTop >= win.scrollX) &&
		       (elem.offsetTop < (win.scrollX + win.innerHeight));
	}

}	

function scrollVertToElem ( elem, win )
{
	if ( !win ) win = window ;
	if ( isNav4 )
	{
		if ( (elem.top < win.pageYOffset) || 
		     ((elem.top + elem.clip.height) > 
		      (win.innerHeight + win.pageYOffset)) )
		{
			win.scroll( 0, elem.top );
		}
	}
	else if ( isIE )
	{
		elem.scrollIntoView();
	}
	else
	{
		win.scrollTo( 0, elem.offsetTop );
	}
	
}	

function getTags ( parentObj, tagName )
{
	return (isIE4 ? parentObj.tags( tagName ) : 
			isW3C ?  parentObj.getElementsByTagName( tagName ) : null ); 
}

