

	//
	// GLOBAL DEFINITIONS
	//


	// JS Error Reporter
	var Care_errorHandler_cachedMessage    = ""
	var Care_errorHandler_cachedUrl        = ""
	var Care_errorHandler_cachedLineNumber = ""
	
	// Care
	Care_SkinFolder       = 'images/'
	capsLockTest_Text     = ''
	
	// Tooltip
	Tooltip_Enabled = false
	


	//
	// FUNCTIONS
	//

	
	// FUNCTION byId(id)
	// Returns the object referred to by 'id' indepentant of web browser
	//   id  - string representing the id of the object required
	
	function byId(id) {
		if (document.getElementById) {
			return document.getElementById(id);
		}
		else if (document.all) {
			return document.all[id];
		}
	}



	// FUNCTION capsLockTest(e)
	// Displays a warning tooltip if caps lock is on (otherwise, ensures tooltips are hidden)
	//   e        - a textbox's OnKeyPress event object
	
	function capsLockTest(e) {
		var key=0;
		var keyIsUpper = false;
		var shiftState=false;
		var thisControl = e.target ? e.target : e.srcElement;
	
		key = e.keyCode ? e.keyCode : e.which;
		shiftState=e.shiftKey;
		
		// determine key case
		if      ( key >= 65 && key <=  90 ) { keyCase=true;  }
		else if ( key >= 97 && key <= 122 ) { keyCase=false; }
		else {
			Tooltip_Hide();
			return;
		}
	
		if ( !shiftState != !keyCase ) {
			Tooltip_Show(thisControl, capsLockTest_Text);
		}
		else {
			Tooltip_Hide();
		}
	}



	// FUNCTION charFilter(e)
	// Given an OnKeyUp event and a regular expression, disables certain characters.
	//   e        - a textbox's OnKeyUp event object
	//   regEx    - a regular expression string identifying allowed characters
	
	function charFilter(e, regEx) {
		re = new RegExp(regEx);
		key = e.keyCode ? e.keyCode : e.which
		
		if (e.altKey || e.ctrlKey) {
			// special function
		}
		else if (key < 32 || key == 127) {
			// special key
		}
		else if ( re.test(String.fromCharCode(key)) ) {
			// key is allowed
		}
		else {
			// not allowed
			if (e.preventDefault) {
				e.preventDefault()
			}
			else {
				e.returnValue = false
			}
		}
	}



	// FUNCTION ErrorHandler(message, url, lineNumber)
	// handle JavaScript errors
	//   message    - the text message generated by JavaScript
	//   url        - the URL where the JavaScript error occured
	//   lineNumber - the line number in the URL where the errr occured
	function Care_errorHandler(message, url, lineNumber){
		
		// load from cache
		// this method is error-lossy, but won't flood the server with errors
		if ( message=="" && url=="" && lineNumber=="" ) {

			message    = Care_errorHandler_cachedMessage
			url        = Care_errorHandler_cachedUrl
			lineNumber = Care_errorHandler_cachedLineNumber
			
			Care_errorHandler_cachedMessage = ""
			Care_errorHandler_cachedUrl = ""
			Care_errorHandler_cachedLineNumber = ""
			
			if (message=="" && url=="" && lineNumber=="") {
				return
			}
		}
		
		var errorControl = byId('Care_jsErrorReporter')
		
		if ( errorControl == null ) {
			Care_errorHandler_cachedMessage    = message
			Care_errorHandler_cachedUrl        = url
			Care_errorHandler_cachedLineNumber = lineNumber
			return
		}
		
		x = "System.php?action=logJsError"
		x = x + "&PHPSESSID="  + Care_sessionId
		x = x + "&message="    + escape(message)
		x = x + "&url="        + escape(url)
		x = x + "&lineNumber=" + escape(lineNumber)
		errorControl.src = x
		errorControl.title = "[Line: " + lineNumber + "] " + message
	}
	//window.onerror = Care_errorHandler

	
	
	// FUNCTION Tooltip_Show(thisControl, tipText, tipWidth)
	// Displays a tooltip
	//   e        - the event object causing the tooltip (used for tip position)
	//   tipText  - the text to be displayed in the tooltip (string)
	//   tipWidth - width in pixels of the tooltip
	
	function Tooltip_Show(thisControl, tipText) {
		var ie  = document.all
		var ns6 = document.getElementById && !document.all
		
		if (!(ns6||ie)) {
			alert(tipText)
		}
		else {
			var ToolTipObj  = byId('ToolTip')
			var ToolTipPointerObj = byId('ToolTipPointer')
			
			var nondefaultpos=false
			var offsetdivfrompointerX=-3
			var offsetdivfrompointerY=14
			
			var parent = thisControl
			var curX = parent.offsetWidth * 0.66
			var curY = parent.offsetHeight - 4
			
			ToolTipObj.innerHTML="<a href='#' onclick='Tooltip_Hide()'><img src='" + Care_SkinFolder + "close.gif' border='0' align='right'></a>" + tipText
			Tooltips_Enabled=true

			var ietruebody = (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
			
			while(parent){
				curX += parent.offsetLeft
				curY += parent.offsetTop
				parent = parent.offsetParent
			}

			//Find out how close we are to the corner of the window
			var winwidth=ie&&!window.opera? ietruebody.clientWidth : window.innerWidth-20
			var winheight=ie&&!window.opera? ietruebody.clientHeight : window.innerHeight-20
			
			var rightedge  = winwidth  - curX
			var bottomedge = winheight - curY
			
			var leftedge= -1000
			
			//if the horizontal distance isn't enough to accomodate the width of the context menu
			if (rightedge<ToolTipObj.offsetWidth){
				//move the horizontal position of the menu to the left by it's width
				ToolTipObj.style.left=curX-ToolTipObj.offsetWidth+"px"
				nondefaultpos=true
			}
			else if (curX<leftedge)
				ToolTipObj.style.left="5px"
			else{
				//position the horizontal position of the menu where the mouse is positioned
				ToolTipObj.style.left=curX-offsetdivfrompointerX+"px"
				ToolTipPointerObj.style.left=curX+"px"
			}
			
			//same concept with the vertical position
			//if (bottomedge<ToolTipObj.offsetHeight){
			//	ToolTipObj.style.top=curY-ToolTipObj.offsetHeight+"px"
			//	nondefaultpos=true
			//}
			//else{
				ToolTipObj.style.top=curY+offsetdivfrompointerY+"px"
				ToolTipPointerObj.style.top=curY+"px"
			//}
			
			ToolTipObj.style.visibility="visible"
			if (!nondefaultpos)
				ToolTipPointerObj.style.visibility="visible"
			else
				ToolTipPointerObj.style.visibility="hidden"
		}
	}
	
	
	
	// FUNCTION Tooltip_Hide()
	// Hides the tooltip object
	
	function Tooltip_Hide(){
		var ie=document.all
		var ns6=document.getElementById && !document.all

		if (ns6||ie){
			Tooltips_Enabled = false
			byId('ToolTipPointer').style.visibility="hidden"
			
			var tipobj = byId('ToolTip')
			tipobj.style.visibility="hidden"
			tipobj.style.left="-1000px"
			tipobj.style.backgroundColor=''
			tipobj.style.width=''
		}
	}





