// Licensed Materials - Property of IBM
//
// 5724-L02   (Product: IBM HATS)
//
// (C) Copyright IBM Corp. 2002, 2005  All Rights Reserved

beensubmitted=false;
refreshSafe=true;
var statusBIDI = "";
var enableBIDI="false";
var OIA_BIDI="&nbsp;";
intNumberOfColumns = 80;
intNumberOfRows = 24;
var intCurrentPosition=1;
//var intInitialCursorPosition;
var oiabc="";
nrtc=1920;
incount=0;
var startin=new Array();
var lengthin=new Array();
var highlightInputField = false;
var gobject;
var screenLocked = false;
var enableDBCSSession = false;
var enableDBCSEuro = false;
var enableAutoConvertSBCStoDBCS = false;

/***********************************************************
 * NOTICE: DO NOT MODIFY THE FOLLOWING VARIABLES!!
 ***********************************************************/
var hatsForm;
//var hatsForm = document.HATSForm ;
//var activeID = "default";
//var portletID = "hatsportletid";
//var formID = "HATSForm";
//var portletFocus = 0;
var activeID;
var portletID;
var formID;
//var portletFocus = 0;
/***********************************************************/

/* Determine Browser */
var brwsapname = navigator.appName;
var brwsusragent = navigator.userAgent;
var brwsapversion = navigator.appVersion;

var NN = false;
var MAC = false;
var NNCOMPAT = false;
var OPERA = false;
var MOZILLA = false;
var KONQUEROR = false;
var SAFARI = false;
var IE = false;

ns4 = (document.layers)? true:false;
ie4 = (document.all)? true:false;
ns6 = ((document.getElementById)&&(!ie4))?true:false;

if ((navigator.userAgent.toLowerCase().indexOf("mac")!=-1))
	MAC=true;

if ((brwsapname == 'Microsoft Internet Explorer'))
{
	brwsapname = 'Microsoft Internet Explorer';
	IE = true;
}

if (brwsusragent.indexOf('Opera') != -1)
{
	brwsapname = 'Opera';
	IE=false;
	NN=false;
	NNCONMPAT = true;
	OPERA = true;
	ie4=false;

}

if (brwsapname.indexOf('Netscape') != -1)
{
	brwsapname = 'Netscape';
	NN = true;
	NNCOMPAT = true;
	IE = false;
	ie4=false;
}

if (brwsapname == 'Netscape')
{
	if ((brwsusragent.indexOf('Mozilla') != -1) ||
		(brwsusragent.indexOf('Firebird') != -1))
	{
		brwsapname = 'Mozilla';
		NNCOMPAT = true;
		MOZILLA = true;
		IE = false;
		ie4=false;
		ns4=false;
	}
}

if (brwsusragent.indexOf('Konqueror') != -1)
{
	brwsapname = 'Konqueror';
	KONQUEROR = true;
	NNCOMPAT = true;
	IE = false;
	NN = false;
	ns4 = false;
	ns6 = false;
	ie4=false;
}

if (brwsusragent.indexOf('Safari') != -1)
{
	brwsapname = 'Safari';
	SAFARI = true;
	NNCOMPAT = true;
	IE = false;
	NN = false;
	ns4 = false;
	ns6 = false;
	ie4=false;
}

if (MAC && IE)
{
	IE = true;
	ie4=false;
}

var lasttextfield;
var revscrbuffer= new String("");
var scrbuffer= new String("");
var appletInitialized = false;
window.onunload = checkForClose;

function resetGlobals()
{
	if (document.HATSForm)
	{
		hatsForm = document.HATSForm;
	}
	else
	{
		hatsForm = document.forms[0];
	}
	if (!hatsForm.CURSORPOSITION)
	{
		var newCursorPosition = document.createElement("<INPUT TYPE='HIDDEN' NAME='CURSORPOSITION' VALUE='1' />");
		hatsForm.appendChild(newCursorPosition);
	}
	if (!hatsForm.COMMAND)
	{
		var newCommand = document.createElement("<INPUT TYPE='HIDDEN' NAME='COMMAND' VALUE='[enter]' />");
		hatsForm.appendChild(newCommand);
	}
	setTimeout("resetCursor()", 0);
	beensubmitted = false;
	refreshSafe = true;
	keyPressed = false;
}

function resetCursor()
{
	if (hatsForm.CURSORPOSITION.value)
	{
		initInputFieldFocus(hatsForm.CURSORPOSITION.value);
	}
	setInputFieldFocus();
}

function updateCursor(cursor)
{
	if (!refreshSafe)
	{
		return;
	}
	hatsForm.CURSORPOSITION.value = cursor;
	resetCursor();
}

function checkForClose()
{
	if (self.screenTop < 9000 && appletInitialized && document.HATSApplet)
	{
		document.HATSApplet.doNotKillOnExit();
	}
}

function revscrstr()
{
	lasttextfield.focus();
	lasttextfield.value+=revscrbuffer;
	revscrbuffer="";
	scrbuffer="";
	window.status = "buffer:"+scrbuffer+" reversed buffer:"+revscrbuffer;
}

var hatsInElems = null;
function getElemsin_pos_y(e, pos)
{
	if (pos == "any") pos = -1;	  // faster compares
	hatsInElems = new Array();
	var j = 0;
	for (var i=0; i<e.elements.length; i++)
	{
		contents = new Array(2);
		elemNext = e.elements[i];
		if (elemNext.name != null)
		{
			if (elemNext.name.length > 0)
			{
				if (isHInput(elemNext.type, elemNext.name))
				{
					if (pos == -1)
					{
						contents[0] = elemNext;
						contents[1] = i;
						hatsInElems[j++] = contents;
					}
					else if (pos == pool[1])
					{
						contents[0] = elemNext;
						contents[1] = i;
						hatsInElems[j++] = contents;
					}
				}
			}
		}
	}

	return hatsInElems;
}

function getElemsin_x_y(e)
{
	return getElemsin_pos_y(e, "any");
}

function monitorfields(where)
{
	wt=window.open();
	wt.document.open();
	wt.document.writeln("<H1>"+where+"</H1>");
	wt.document.writeln("<TABLE BORDER=1><TR><TH>VALUE</TH><TH>NAME</TH><TH>TYPE</TH><TH>CHARCODES</TH></TR>");
	for ( var j = 0; j < hatsForm.elements.length; j++ )
	{
		elementNext = hatsForm.elements[j];
		if ( (elementNext.type == "text") || (elementNext.type == "password") || (elementNext.type=="hidden")|| (elementNext.type == "select-one") || (elementNext.type=="checkbox" ) || (elementNext.type=="radio" ) )
		{
			{
				doc= "<TR><TD>"+elementNext.value+"<TD>"+elementNext.name+"<TD>"+elementNext.type;
				if (elementNext.disabled==true)
				{
					doc += "(disabled)";
				}
				doc +="<TD>";
				for ( var t = 0; t< elementNext.value.length; t++ )
				{
					doc+= elementNext.value.charCodeAt(t)+" ";
				}
				doc +="</TR>";
				wt.document.writeln(doc);
			}
		}
	}
	wt.document.writeln("<TR><TD>"+hatsForm.CURSORPOSITION.value+"<TD colspan=3>Cursor</TR>");
	wt.document.writeln("<TR><TD>"+hatsForm.COMMAND.value+"<TD colspan=3>Command</TR></TABLE>");
	wt.document.close();
}

function listElements()
{
	var mystring = "";
	for (var i = 0; i<hatsForm.elements.length; i++)
	{
		mystring = mystring + ":" + hatsForm.elements[i].name + "=" + hatsForm.elements[i].value + "(" + hatsForm.elements[i].disabled + ")";
	}
	return mystring;
}

function msNonBlank(key,formID)
{
	if ((key!=null) && (key!=""))
	{
		ms(key,formID);
	}
}

function ms(intCommand,pID)
{
	setHatsFocus(pID);
	if ( intCommand == "ResetButton" )
	{
		hatsForm.reset();
		if (enableBIDI=="true")
			adjustReversedFields();
		return;
	}

	if (!beensubmitted)
	{
		beensubmitted=true;
	}
	else
	{
		return;
	}

	if ( intCommand == "disconnect" ) closePrintJobWindow();
	if ( gobject  != null ) checkInput(gobject, intCommand);  //A0 added intCommand
	setExtraInfo();
	hatsForm.COMMAND.value = adjustPosition(intCommand,pID);
	if (enableBIDI=="true")
	{
		if ( ns4 )
		{
			hatsForm.visibility = 'hidden';
		}
		else
		{
			hatsForm.style.visibility = 'hidden';
			reverseBeforeSubmit(hatsForm,intCommand);
		}
	}
	var now = new Date();
	var hours = now.getHours();
	var minutes = now.getMinutes();
	var seconds = now.getSeconds();
	var millis = now.getMilliseconds();


	beensubmitted = false;


	if (!appletInitialized || !document.HATSApplet || !document.HATSApplet.isUseDynamicUpdates() || hatsForm.COMMAND.value == 'refresh' || hatsForm.COMMAND.value == 'disconnect' || hatsForm.COMMAND.value == 'default')
	{
		hatsForm.submit();
	}
	else
	{
                window.focus();
		document.HATSApplet.userRequest();
	}
}

function submitForm()
{
	hatsForm.submit();
}

function appletRefresh()
{
	if (!beensubmitted && refreshSafe)
	{
		beensubmitted = true;
	}
	else
	{
		return -1;
	}
	if ( gobject  != null ) checkInput(gobject);
	setExtraInfo();
	hatsForm.COMMAND.value = "refresh";
}

function appletFullRefresh()
{
	hatsForm.COMMAND.value = "refresh";
	hatsForm.submit();
}

function getFormValues()
{
	var values = "";
	for (i = 0; i < hatsForm.elements.length; i++)
	{
		var elementVal = "";
		computeValue = true;
		if ((hatsForm.elements[i].type == "radio")
			||(hatsForm.elements[i].type == "checkbox"))
			computeValue = hatsForm.elements[i].checked;
		if (computeValue == true)
		{
			if (window.encodeURIComponent)
				elementVal = encodeURIComponent(hatsForm.elements[i].value);
			else if (window.escape)
				elementVal = escape(hatsForm.elements[i].value);
			values += "&" + hatsForm.elements[i].name + "=" + elementVal;	 //IC4263
		}
		//values += "&" + hatsForm.elements[i].name + "=" + elementVal;	 //IC4263
	}
	return values;
}

function getDefaultSelectValue(elem)
{
	var name=elem.name;
	var defaultElement = eval("document."+hatsForm.name+".selectDefault"+name);
	if (defaultElement==null)
	{
		for (i=0;i<elem.options.length;i++)
		{
			if (elem.options[i].defaultSelected)
			{
				return elem.options[i].value;
			}
		}
		return null; //not good.
	}
	else
	{
		return defaultElement.value;
	}
}

function inputAdjust(elem, disableIfSame)
{//returns true if element was changed
	var type=elem.type;
	var name=elem.name;
	var pool = name.split("_");  //fix for having the in_pos_len_radio set "o" into the input field
	if (pool.length>3)
	{
		if (pool[3] == "radio")
		{
			elem.disabled = true;
			return true;
		}
	}
	if ( ! ((type=="checkbox" ) || (type=="radio" ))  )
	{
		if (isHInput(type,name))
		{
			if (type=="select-one")
			{
				var hostVal = getDefaultSelectValue(elem);
			}
			else
			{
				var hostVal = elem.defaultValue;
			}
			if (hostVal==null) hostVal="";
			var webVal = elem.value;
			if (webVal==null) webVal="";
			if ( webVal == hostVal )
			{  //no change? then disable so not sent back to host

				if ( disableIfSame == true )
				{
					if(! (MOZILLA && type=="hidden")){
						elem.disabled = true;
					}

					return true;
				}
				else
				{
					return false;
				}
			}
			else
			{

				if ( (MAC && IE) && (type=="select-one") )
				{

					return false;
				}
				var update = webVal;
				while ( hostVal.length > update.length )
				{
					update = update+" ";
				}

				if (type=="select-one")
				{
					elem.options[elem.selectedIndex].value=update;
				}
				else
				{
					if (elem.value!=update) elem.value = update;
				}

				if (update != webVal)
				{
					return true;
				}
			}
		}
	}
	return false;
}

function isHInput(type,name)	  //HATS input field
{
	if ( (type == null) || (name == null) ) return false;
	if (   (type=="text")   || (type=="password")
		   || (type=="hidden") || (type=="checkbox" )
		   || (type=="select-one" )
		   || (type=="radio" ) || (type == "textarea"))
	{
		var pool = name.split("_");
		if (pool.length>=3)
		{
			if ((pool[0].indexOf("in")!=-1) &&(!isNaN(pool[1]))&&(!isNaN(pool[2])))
			{
				return true;
			}
		}
	}
	return false;
}

function isH5EInput(type,name)
{
	if ((type == null) || (name == null)) return false;
	if ((type=="radio") || (type=="checkbox"))
	{
		var pool = name.split("_");
		if (pool.length >= 3)
		{
			if ((pool[0].indexOf("in5E")!=-1) && (!isNaN(pool[1])) && (!isNaN(pool[2])))
			{
				return true;
			}
		}
	}
	return false;
}

function isHGVInput(name)
{
	var pool =name.split("_");
	if (pool.length>=1)
	{
		if ( (pool[0].indexOf("hats")!=-1) && (pool[0].indexOf("gv")!=-1) )
		{
			return true;
		}
	}
	return false;
}

var conntype = 3270;
function adjustPosition(intCommand,pID)
{
	setHatsFocus(pID);
	if ((intCommand.indexOf("[")==-1) && (intCommand.indexOf("enptui")==-1)) return intCommand;

	list = getElemsin_x_y(hatsForm);

	for ( var i = 0; i<list.length; ++i )
	{
		elementNext=list[i][0]; // the element itself
		inputAdjust(elementNext,true);
		var index = list[i][1]; // the element's index in hatsForm.elements
		if (   isHInput(elementNext.type,elementNext.name) )
		{
			//if (   (fieldchangedlist[index] != "enable" )
			//	&& (elementNext.type != "hidden"		)
			//	)
			//{  elementNext.disabled=true;
			//}else
			if (   (elementNext.type=="checkbox" ))
			{
				elementNext.disabled=true;
			}
			else
			{
				pool = elementNext.name.split("_");
				pos = parseInt(hatsForm.CURSORPOSITION.value);
				len=parseInt(pool[2]);
				ipos = parseInt(pool[1]);
				if ( (ipos <= pos)  && ((ipos+len) >= pos ))
				{
					strlen=elementNext.value.length;

					if ( carettrackingenabled && (IE||MOZILLA||NN))
					{

						if (  (intCommand!="[fldext]")	  // A0 adding the if
							  &&(intCommand!="[field+]")
							  &&(intCommand!="[field-]")
							  &&(intCommand!="[eraseeof]")
						   )
						{
							updateCursorPosition(pID);
						}
					}
					else
					{
						if ( len>1 )
						{
							if ( (strlen<len) && (strlen>0) )
							{
								pos=(ipos)+strlen;
							}
							else if ( strlen==0 )
							{
							}
							else
							{
								pos=(ipos)+len-1;
							}
						}
						hatsForm.CURSORPOSITION.value=pos;

					}
					cp=parseInt(hatsForm.CURSORPOSITION.value);
					if ( (len == strlen) && (conntype == 5250) && ((ipos+len-1)==cp) )
					{
						intCommand= "[fldext]" + intCommand;
					}
					//return intCommand;//this was causing the disable check to end prematurely
				}
			}
		}
	}
	return intCommand;
}

function msb(intCommand, intPos, pID)
{
	setHatsFocus(pID);
	hatsForm.CURSORPOSITION.value=intPos;
	ms(intCommand,pID);
}

function selllistValue(sellistobj)
{
	return sellistValue(sellistobj);
}

function sellistValue(sellistobj)
{
	if ( ns4&&!ie4&&!ns6 )
	{
		si=sellistobj.selectedIndex;
		opt=sellistobj.options[si];
		return opt.value;
	}
	else
	{
		return sellistobj.value;
	}
}

var var_setupValuexxxaction="";
var var_setupValuepos="";
function setupValue(pos, len, xxxvalue,xxxaction)
{
	for ( var i = 0; i<hatsForm.elements.length; ++i )
	{
		elementNext=hatsForm.elements[i];
		if ( (elementNext.type=="text") || (elementNext.type=="password") || (elementNext.type=="hidden") || (elementNext.type=="checkbox" ) || (elementNext.type=="radio" ) || (elementNext.type == "textarea"))
		{
			if ( elementNext.name!=null )
			{
				current = elementNext.name;
				if ( current.length>0 )
				{
					pool = current.split("_");
					if ( pool.length==3 )
					{
						if (pool[0].indexOf("in")!=-1)
						{
							if ( pool[1] == pos )
							{
								elementNext.value = xxxvalue;
							}
						}
					}
				}
			}
		}
	}
	var_setupValuepos=pos;
	var_setupValuexxxaction=xxxaction;
}

function setup_PresetAction_1(xxxaction)
{
	var_setupValuexxxaction=xxxaction;
}
function setup_PresetAction(pos,xxxaction)
{
	var_setupValuepos=pos;
	var_setupValuexxxaction=xxxaction;
}
function msb_From_Preset(pID)
{

	msb(var_setupValuexxxaction,var_setupValuepos,pID);
}
function ms_From_Preset(pID)
{
	ms(var_setupValuexxxaction,pID);
}

function setValue(pos, len, xxxvalue, xxxaction, pID)
{
	setHatsFocus(pID);

	list = getElemsin_pos_y(hatsForm, pos);
	if (list!=null)
	{
		for (var i = 0; i<list.length; i++)
		{
			elementNext = list[i][0];		  // [][0] is elem itself
			elementNext.value = xxxvalue;
		}
	}
	ms(xxxaction, pID);
}

function setLineSize(intLineSize)
{
	if ( intLineSize == 2 )
	{
		intNumberOfColumns = 80;		 // 24X80
		intNumberOfRows = 24;
	}
	else if ( intLineSize == 3 )
	{
		intNumberOfColumns = 80;		 // 32X80
		intNumberOfRows = 32;
	}
	else if ( intLineSize == 4 )
	{
		intNumberOfColumns = 80;		 // 43X80
		intNumberOfRows = 43;
	}
	else if ( intLineSize == 6 )
	{
		intNumberOfColumns = 132;		// 27X132
		intNumberOfRows = 27;
	}
	else if ( intLineSize == 5 )
	{
		intNumberOfColumns = 132;		// 24X132
		intNumberOfRows = 24;
	}
	nrtc = intNumberOfRows*intNumberOfColumns;
}

function emptyString(stringToTest)
{
	booleanResult = true;
	for ( i = 0; i < stringToTest.length; i++ )
	{
		if ( stringToTest.charAt(i) != ' ' )
		{
			booleanResult = false;
			break;
		}
	}
	return booleanResult;
}

function strEndTrim(intarget)
{
	var outtarget=intarget;
	var poslen = intarget.length;
	if ( poslen<=0 ) return outtarget;		  //no change possible
	while ( intarget.charAt(poslen-1) == " " )
	{
		poslen--;
	}
	if ( poslen<intarget.length ) poslen++;
	if ( (poslen<intarget.length) && (poslen>=0) ) //make it have a valid change to be changed
		outtarget = intarget.substring(0, poslen); //substring(start, length)
	return outtarget;
}

function setCursorPosition(intCursorPosition,pID)
{
	if (isNaN(intCursorPosition))
	{
		updateStatusWindow(); return;
	}
	setHatsFocus(pID);
	hatsForm.CURSORPOSITION.value=intCursorPosition;
	updateStatusWindow();
}

function initInputFieldFocus(intPutItHere)
{
	intInitialCursorPosition = intPutItHere;
}


// this is overridden by the one in TabbedFolder.js, if that script is included
function Info(HTInfo,useTF,focusFieldName,hatsportletid)
{
	this.HTInfo = HTInfo;
	this.useTF = useTF;
	this.focusFieldName = focusFieldName;
	this.hatsportletid = hatsportletid;
}
// this is overridden by the one in TabbedFolder.js, if that script is included
function getInfo(id)
{
	if (id == "default" || id == null)
	{
		id = "hatsportletid" ;
	}
	ret = new Info(null,false,null,id);
	return (ret);
}

function HATSTFInit(HTInfo,useTF,focusFieldName,hatsportletid)
{ // this function is overridden by the one in TabbedFolder.js, if that script is included
}

function setExtraInfo()
{ // this function is overridden by the one in TabbedFolder.js, if that script is included
}	   

function setInputFieldFocus()
{
	k = 0;
	updateStatusWindow();
	var intInitialCursorPosition=0;
	if (hatsForm.CURSORPOSITION.value != null)
	{
		intInitialCursorPosition = hatsForm.CURSORPOSITION.value;
	}
	for ( var j = 0; j < hatsForm.elements.length; j++ )
	{
		if ( k !=1 )
		{
			elementNext = hatsForm.elements[j];

			if ((enableBIDI=="true") && (elementNext.name!=null) && ((elementNext.type == "text")||(elementNext.type == "textarea")))
			{
				var startIndex = elementNext.name.indexOf(intInitialCursorPosition);
                maxLen = (IE) ? elementNext.cols : elementNext.maxLength;
				var endIndex = elementNext.name.indexOf(intInitialCursorPosition - maxLen + 1);
				if ( (startIndex != -1) || (endIndex != -1) )
				{
					elementNext.focus();
					lasttextfield=elementNext;
					k = 1;
					hatsForm.CURSORPOSITION.value = (startIndex != -1) ? intInitialCursorPosition : intInitialCursorPosition - maxLen + 1;
					getInfo(hatsForm.name).focusFieldName = elementNext.name;
					break;
				}
			}
			else
				if ( (elementNext.type == "text") || (elementNext.type == "password") || (elementNext.type == "select-one") || (elementNext.type == "checkbox") || (elementNext.type == "radio") )
			{
				if ( elementNext.name!=null )
				{
					if ( elementNext.name.length>0 )
					{
						var elemlst=elementNext.name.split("_");
						if ( elemlst.length==3 )
						{
							if (elemlst[0].indexOf("in")!=-1)
							{
								var start=parseInt(elemlst[1],10);
								var len=parseInt(elemlst[2],10);
								if ( (intInitialCursorPosition >= start) && ( intInitialCursorPosition < (start + len)) )
								{ //back from help, the cp is at the end of the field
									if ( ns4 == true )
									{
										if ( (elementNext.visibility != "hidden") && (!elementNext.disabled) )
										{
											elementNext.focus();
											lasttextfield=elementNext;
											k = 1;
											hatsForm.CURSORPOSITION.value = intInitialCursorPosition;
											getInfo(hatsForm.name).focusFieldName = elementNext.name;
											break;
										}
									}
									else
									{
										if ( (elementNext.style.visibility != "hidden") && (!elementNext.disabled) )
										{
											elementNext.focus();
											lasttextfield=elementNext;
											k = 1;
											hatsForm.CURSORPOSITION.value = intInitialCursorPosition;
											getInfo(hatsForm.name).focusFieldName = elementNext.name;
											break;
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}

function cursorfinder(start, length)
{
	startin[incount]=start;
	lengthin[incount]=length;
	incount++;
}

function displacement(num)
{
	where=1;
	for ( i=0;i<incount;i++ )
	{
		if ( startin[i]<num )
		{
			where+=lengthin[i]-1;
		}
	}
	return where;
}

function p(clickNum)
{
	if ( cursorclick )
	{
		if ( ie4 )
		{
			var tagTD=hatsForm.getElementsByTagName("TD");
			tagTD[hatsForm.CURSORPOSITION.value-displacement(hatsForm.CURSORPOSITION.value)].bgColor='#c0c0c0';
			tagTD[clickNum-displacement(clickNum)].bgColor='#FFFFFF';
		} //else if (ns4){}
	}
	setCursorPosition(clickNum);
	if ( clickNum>=nrtc )
	{
		ms('[pf1]');
	}
}

function C(clickNum)
{
	setCursorPosition(clickNum);
}

function quotechange(a)
{
	var stringReplace = new String("");
	for ( j = 0; j < a.length; j++ )
	{
		if ( a.charAt(j) == '\"' )
			stringReplace=stringReplace + "&quot;";
		else
			stringReplace=stringReplace + a.charAt(j);
	}
	return stringReplace;
}

var orig = null;  //pID, inputfieldname, value
function setOriginal(inputbox,pID)
{
	orig = new Array(3);
	orig[0]=pID;
	orig[1]=inputbox.name;
	var handleorig = new String(inputbox.value);
	orig[2]=handleorig;
}

function compareAgainstOriginal(inputbox, intCommand)  //A0 added intCommand
{
	if ( orig==null ) {return;}
	if ( orig[1]!=inputbox.name ) {return;}
	if (gobject != inputbox) {return;}
	if ( !isHInput(inputbox.type,inputbox.name)) {return;}

	var pool = inputbox.name.split("_");

	var fstart =parseInt(pool[1]);
	var flength=parseInt(pool[2]);
	var cpos   =parseInt(hatsForm.CURSORPOSITION.value);
	if (!(  ( (fstart		  ) <= cpos )
		&&  ( (fstart+flength-1) >= cpos )
		) )
	{
		return;
	}
	inputAdjust(inputbox,false);

	// if the command is field exit, don't move the cursor! A0
	if ( ( (intCommand!=null)
		   && ((intCommand=='[fldext]') || (intCommand=='[field+]') || (intCommand=='[field-]') || (intCommand=='[eraseeof]'))
		  ||
          (carettrackingenabled && (IE||MOZILLA||NN))
		 ))
	{
		orig=null;
		return;
	}

	var a=strEndTrim(orig[2]);
	var b= inputbox.value;
	var d = fstart+b.length;
	if ( flength<=b.length )
	{
		d=d-1;  //adjust for last in field
	}
	setCursorPosition(d,hatsForm.name);
	orig=null;
}

function setFocusFieldIntoGlobal(inputbox,pID)
{
	if (beensubmitted==true) return;
	gobject=inputbox;
	getInfo(pID).focusFieldName = inputbox.name;
	setHatsFocus(pID);
	pool = inputbox.name.split("_");
	setCursorPosition(pool[1],pID);
	if ( ns6 )
	{
		if ( (inputbox.type=="text") || (inputbox.type=="password") || (inputbox.type == "textarea"))
		{
			if ( inputbox.setSelectionRange )
			{  //NS6+ only
				inputbox.setSelectionRange(0, 0);	//before first character
			}
		}
	}
	setOriginal(inputbox,pID);
	thisFieldOverwrite(inputbox);

	if ((enableBIDI=="true") && (inputbox.type == "password"))
		showStatusBar(inputbox);

	if (highlightInputField)
	{
		inputbox.style.backgroundColor = highlighInputFieldColor;
	}
	updateStatusWindow();
	if ((IE||MOZILLA||NN)&&(carettrackingenabled||statuswindowenabled))
	{
		updateCursorPosition(pID)
	};
}

function checkInputOnCombo(me)
{
	checkInput(me, null)			   // A0 added null
}

function checkInput(me, intCommand)
{  // A0 added intCommand
	if (screenLocked==true) return;
	if ((me.type=="checkbox" )
		||(me.type=="radio" )   )
	{
		if (!(me.checked)) return;
	}
	compareAgainstOriginal(me, intCommand);  // A0 added intCommand
	checkInput2(me.name,me.value,me.type);
}

function checkInput2(name, value, type)
{
	if (screenLocked==true) return;
	var mesplit = new Array();
	mepool = name.split("_");
	if ( ns6 )
	{
		useTF = getInfo(hatsForm.name).useTF;
		if ( useTF )
		{
			hte = new htElement(name,value,type);
			getInfo(hatsForm.name).HTInfo = updateHTInfo(hte);
		}
	}

	lm = parseInt(mepool[1],10);
	size = parseInt(mepool[2],10);
	rm = lm + size - 1;
	flag = lm + value.length - 1;

	if ( value.length != 0 )
	{
		for ( var i = 0; i<size; ++i )
		{
			mesplit[i] = new Array(2);
			mesplit[i][0] = lm + i ;
			if ( lm+i <= flag )
			{
				mesplit[i][1] = value.charAt(i);
			}
			else
			{
				mesplit[i][1] = " ";
			}
		}
	}
	else if ( value.length == 0 )
	{
		for ( var i = 0; i<size; ++i )
		{
			mesplit[i] = new Array(2);
			mesplit[i][0] = lm + i ;
			mesplit[i][1] = " ";
		}
	}

	// Start to loop for each element
	for ( var i = 0; i<hatsForm.elements.length; ++i )
	{
		if ( hatsForm.elements[i].name == null )
		{
			//do not process null name elements
		}
		else if (!isHInput(hatsForm.elements[i].type,hatsForm.elements[i].name))
		{
			//do not process non-hats elements
		}
		else if ( ((hatsForm.elements[i].name.split("_"))[0]) == "selectDefaultin")
		{
			//do not process selectDefaultin, it is not a true input // here is culprit for changing selectdefaultin and therefore getting the item disabled
		}
		else if ( (hatsForm.elements[i].type == "select-one") )
		{


			if ((hatsForm.elements[i].name==name)
				||(((hatsForm.elements[i].name.split("_"))[1]) == ((name.split("_"))[1]))
			   )
			{
				if (hatsForm.elements[i].selectedIndex!=null)
				{
					hatsForm.elements[i].selectedIndex=-1;
					if (hatsForm.elements[i].options != null)
					{
						for (var f = 0; f<hatsForm.elements[i].options.length; ++f)
						{
							if (hatsForm.elements[i].options[f].value == value)
							{
								hatsForm.elements[i].selectedIndex=f;
								break;
							}
						}
					}
				}
			}
			//}else if( MAC && (hatsForm.elements[i].type == "select-one") ){
		}
		else if ( hatsForm.elements[i].name == name )
		{//for the elements have the same name
			if ((hatsForm.elements[i].type == "radio")
				||(hatsForm.elements[i].type == "checkbox"))
			{
				if (hatsForm.elements[i].value == value)
				{
					hatsForm.elements[i].checked=true;
				}
				else
				{
					hatsForm.elements[i].checked=false;
				}
			}
			else
			{
				if (hatsForm.elements[i].value != value)hatsForm.elements[i].value = value;
			}
			//addToInputFieldChangeList(i);
		}
		else if ( ( hatsForm.elements[i].name != name ) && !(isH5EInput(type,name)))
		{
			var pool = hatsForm.elements[i].name.split("_");
			if ((pool.length>=3)
				&& (!( (hatsForm.elements[i]=="checkbox" )||
					   (hatsForm.elements[i].type=="radio" )
					 ))
			   )
			{
				if (pool[0].indexOf("in")!=-1)
				{
					clm = parseInt(pool[1],10);//field start position
					csize = parseInt(pool[2],10);//field length
					crm = clm + csize - 1;//field end position
					currString= hatsForm.elements[i].value;//initial value in the field
					if ( (clm >= lm && clm <= rm ) ||
						 (crm >= lm && crm <= rm ) ||
						 (clm <  lm && crm >  rm ) )
					{//check if overlapping
						//addToInputFieldChangeList(i);
						buffer = new String();
						if ( currString.length != 0 )
						{
							for ( var k =0; k<csize ; ++k )
							{
								match = false;
								walker = clm + k;
								len = size;
								for ( var m = 0; m<len; ++m )
								{
									if ( walker == mesplit[m][0] )
									{
										buffer = buffer + mesplit[m][1];
										match = true;
									}
								}
								if ( !match )
								{
									if ( ( clm + k ) <  rm )
									{
										buffer = buffer + currString.charAt(k);
									}
									else if ( (clm + k ) > flag )
									{
										buffer += currString.charAt(k);
									}
								}
							}
						}
						else if ( currString.length == 0 )
						{
							for ( var k =0; k<csize; ++k )
							{
								match = false;
								walker = clm + k;
								for ( var m = 0; m<value.length; ++m )
								{
									if ( walker == mesplit[m][0] )
									{
										buffer += mesplit[m][1];
										match = true;
									}
								}
								if ( !match )
								{
									if ( ( clm + k ) <  rm )
									{
										buffer += " ";
									}
								}
							}
						}

						if ( emptyString(buffer) )
						{
							hatsForm.elements[i].value = "";
						}
						else
						{
							if (hatsForm.elements[i].value != buffer) hatsForm.elements[i].value = buffer;
						}
					}
					else
					{

					}
				}
			}
		}
	}
	gobject = null;
}

function  setActiveIDX(aID)
{
	activeID = aID;
	formID = aID;
}

function setPortletIDX(pID)
{
	portletID = pID;
}

function setFormObjX()
{
	if ( activeID != "default" )
	{
		if ( formID != activeID )
		{
			formID = activeID;
		}
	}
	hatsForm = eval("document."+formID);
}

function validateDropDownListWidget(thisForm)
{
	for ( var i=0;i<thisForm.elements.length;i++ )
	{
		if ( thisForm.elements[i].type.indexOf('select-one') > -1 )
		{
			if ( thisForm.elements[i].selectedIndex == 0 )
			{
				return false;
			}
		}
	}
	return true;
}

function validateDropDownListWithinSubfileWidget(thisForm)
{
	for ( var i=0;i<thisForm.elements.length;i++ )
	{
		if ( thisForm.elements[i].type.indexOf('select-one') > -1 )
		{
			if ( thisForm.elements[i].selectedIndex != 0 )
			{
				return true;
			}
		}
	}
	return false;
}

var overwritemodeenabled=true; //set to true to enable this for your application
var overwriteSetting = 7; //new base setting
var isOverwriteMozilla = false;

function thisFieldOverwrite(fldobj)
{
	if ( overwritemodeenabled==false ) return;
//	if (!IE || MAC)	return;	//Win IE only code
	aaname = fldobj.name;
	pool = aaname.split("_");
	ipos=parseInt(pool[1]);
	ilen=parseInt(pool[2]);
	vlen=fldobj.value.length;
	if ( (ilen<=vlen) )
	{ //we have a full field
		setOverWriteMode((overwriteSetting==1)||(overwriteSetting==3)||(overwriteSetting==5)||(overwriteSetting==7));
	}
	else if ( (ilen>vlen) && (vlen!=0) )
	{
		setOverWriteMode((overwriteSetting==2)||(overwriteSetting==3)||(overwriteSetting==6)||(overwriteSetting==7));
	}
	else if ( (vlen==0) )
	{
		setOverWriteMode((overwriteSetting==4)||(overwriteSetting==5)||(overwriteSetting==6)||(overwriteSetting==7));
	}
}

function isOverWriteMode()
{
    if (isOverwriteMozilla && (enableBIDI=="true")) return true;

	if (!IE || MAC)	return false; //Win IE only code
	return document.queryCommandValue("OverWrite");
}

function setOverWriteMode(bset)
{
	if ( overwritemodeenabled==false ) return;

    if (enableBIDI=="true")
        isOverwriteMozilla = true;

	if (!IE || MAC)	return;	//Win IE only code
	if ( bset!=document.queryCommandValue("OverWrite") )
	{	//dont repeat commands to the system
		if ( bset )
		{
			document.execCommand("OverWrite");
		}
		else
		{
			document.execCommand("OverWrite",false,false);
		}
	}
}

var statwin= new Array();
statwin[0]=" (,)";
statwin[1]="|";
statwin[2]=" ";
statwin[3]=" ";
function updateStatusWindowOld()
{
	value = parseInt(hatsForm.CURSORPOSITION.value);
	if (!isNaN(value))
	{
		statwin[0]=" "+value +"  ("+ ConvertPosToRow(value, intNumberOfColumns)+","+ ConvertPosToCol(value, intNumberOfColumns)+")";
	}
	if ( isOverWriteMode()==true ) statwin[1]="[]";
	else statwin[1]="|";

	if (screenLocked==true)
	{
		statwin[3]=" >< ";
	}
	var strstat="";
	if ( carettrackingenabled )	strstat=strstat+statwin[0];
	if ( overwritemodeenabled )	strstat=strstat+"     "+statwin[1];
	if ( statwin[2]!=" " ) strstat=strstat+"     "+statwin[2];
	if ( screenLocked==true ) strstat=strstat+"     "+statwin[3];
	if (enableBIDI=="true")
	{
		window.status = statusBIDI;
	}
	else
		window.status=strstat;
}

function updateStatusWindow()
{
	if (statusUpdateOIA())
	{
		for (var i=1; statusUpdateOIA(i) ; ++i)
		{
		}
	}
}

function statusUpdateOIA(oiaCounter)
{
	if (hatsForm==null)	return false;
	var oiaNumber = "";
	if (oiaCounter != null)
	{
		oiaNumber = "_"+oiaCounter;
	}
	//find the correct OIA for this form
	//        public static final String PREOIATAGFORMIDENTIFIER = "OPERATING_INFO_FOR_";
	//    public static final String POSTOIATAGFORMIDENTIFIER = "_AREA";
	var oiaName = "OPERATING_INFO_FOR_"+hatsForm.name+"_AREA"+oiaNumber;

	if (eval(document.getElementById(oiaName+"_DIV_ID"))==null)
	{
		if (oiaCounter == null)
		{
			updateStatusWindowOld();//window.status = statusBIDI;
		}
		return false;
	} //no OIA area

	value = parseInt(hatsForm.CURSORPOSITION.value);
	if (!isNaN(value))
	{
		var oiacp = eval(document.getElementById(oiaName+"_ITEM_ID_"+"cursorPosition"));
		if (oiacp!=null)
		{
			oiacp.innerHTML= hatsForm.CURSORPOSITION.value;
		}
		var oiarw = eval(document.getElementById(oiaName+"_ITEM_ID_"+"cursorRowColumn"));
		if (oiarw!=null)
		{
			var rowoia =""+ConvertPosToRow(value, intNumberOfColumns);
			while (rowoia.length < 2) rowoia="0"+rowoia;
			var coloia =""+ConvertPosToCol(value, intNumberOfColumns);
			while (coloia.length < 3) coloia="0"+coloia;
			oiarw.innerHTML= rowoia+"/"+coloia;
		}
	}
	var oiaim = eval(document.getElementById(oiaName+"_ITEM_ID_"+"insertMode"));
	if (oiaim!=null)
	{
		if ((!IE || MAC) && !MOZILLA && !NN)
		{
			oiaim.innerHTML= "&nbsp;&nbsp;";
		}//if we cant support it don't show anything
		else if ( isOverWriteMode()==true )
		{
			oiaim.innerHTML= createImgTag("insertMode",overwriteModeImage,"[]","overwriteMode_indicator");
		}
		else
		{
			oiaim.innerHTML= createImgTag("insertMode",insertModeImage,"&nbsp;|","insertMode_indicator");
		}
	}
	//we don't need to change system, it can't be changed here
	//var oiasw = eval(document.getElementById(oiaName+"_ITEM_ID_"+"systemWait"));
	//if(oiasw!=null){
	//    oiasw.innerHTML= "&nbsp;";
	//}
	var oiaii = eval(document.getElementById(oiaName+"_ITEM_ID_"+"inputInhibited"));
	if (oiaii!=null)
	{
		if (screenLocked==true)	oiaii.innerHTML=createImgTag("inputInhibited",inputInhibitedImage,inputInhibitedTranslation,"inputInhibited_indicator");//" X ";
		else oiaii.innerHTML="&nbsp;&nbsp;&nbsp;";
	}
	var oiabc = eval(document.getElementById(oiaName+"_ITEM_ID_"+"bidiControls"));
	if (oiabc!=null)
	{
		oiabc.innerHTML = OIA_BIDI;
	}
	var oiaaai = eval(document.getElementById(oiaName+"_ITEM_ID_"+"autoAdvanceIndicator"));
	if (oiaaai!=null)
	{
		if (autoAdvance==true) oiaaai.innerHTML=createImgTag("autoAdvanceIndicator",autoAdvanceIndicatorImage,autoAdvanceIndicatorTranslation,"autoAdvanceIndicator_indicator");
		else oiaaai.innerHTML="&nbsp;";
	}
	var oiaaa = eval(document.getElementById(oiaName+"_ITEM_ID_"+"appletActive"));
	if (oiaaa!=null)
	{
		if (appletInitialized==true) oiaaa.innerHTML=createImgTag("appletActive",appletActiveImage,appletActiveTranslation,"appletActive_indicator");
		else oiaaa.innerHTML="&nbsp;";
	}
	var oiafd = eval(document.getElementById(oiaName+"_ITEM_ID_"+"fieldData"));
	if (oiafd!=null)
	{
		var stat = "";
		if (gobject!=null)
		{
			if (isHInput(gobject.type,gobject.name))
			{
				if (gobject.type=="password")			 stat+=" "+hiddenTranslation;
				if (gobject.entryRequired=="true")		 stat+=" "+entryRequiredTranslation;
				if (gobject.fillRequired=="true")		 stat+=" "+fillRequiredTranslation;
				if (gobject.fieldExitRequired=="true")	 stat+=" "+fieldExitRequiredTranslation;
				if (gobject.autoEnter=="true")			 stat+=" "+autoEnterTranslation;
				if (gobject.onkeypress)
				{
					var a = " "+gobject.onkeypress;
					if (a.indexOf("allowSignedNumeric")!=-1) stat+=" "+signedNumericTranslation;
					if (a.indexOf("allowNumericOnly")!=-1)	 stat+=" "+numericTranslation;
					if (a.indexOf("convertToUpperCase")!=-1) stat+=" "+upperCaseTranslation;
					if (a.indexOf("allowDBCSOnly") != -1)	 stat+=" "+dbcsOnlyTranslation;
					if (a.indexOf("allowDBCSPure") != -1)	 stat+=" "+dbcsPureTranslation;
					if (a.indexOf("allowSBCSOnly") != -1)	 stat+=" "+sbcsOnlyTranslation;
					if (a.indexOf("inhibitKeyboardEntry") != -1) stat+=" "+keyboardEntryInhibitedTranslation;
				}
			}
		}
		if (stat == "")
		{
			stat="&nbsp;";
		}
		oiafd.innerHTML= stat;
	}
	return true;
}

function createImgTag(divClass,image,message,name){
	return "<IMG border=\"0\""+divClass+" src=\""+image+"\" alt=\""+message+"\" name=\""+name+"\">";
}

function updateCursorPosition(pID)
{
	setHatsFocus(pID);
	var ace = caretTracking(pID);	// the only call to caretTracking in the file
	if ( ace == -1 ) return;
	if (isNaN(ace))return;
	setCursorPosition(ace,pID);
}

function ConvertPosToRow(pos, sizecols)
{
	var a = Math.floor( pos / sizecols )+1;
	return a;
}
function ConvertPosToCol(pos, sizecols)
{
	var a = ( pos % sizecols );
	return a;
}
function ConvertRowColToPos(row,col,sizecols)
{
	var a= ((row-1)*sizecols) +col;
	return a;
}

var autoAdvance=false;
function nextvalidhatsinputfield(position,plen, pID)	// A0 added pID
{
	setHatsFocus(pID);									 // A0 added call
	if ( autoAdvance!=true ) return -1;	  //no need to run function
	if ((!IE || MAC) && !MOZILLA && !NN)    return -1; //Win IE,  Netscape/Mozilla only code
	if ( hatsForm.elements.length<=1 ) return -1;	//no need to run function
	var mlc=hatsForm.elements[0];
	var mlcpos=-1;
	var mlclen=-1;
	var mlcnum=-1;
	var x=position+plen;
	for ( var i = 0; i<hatsForm.elements.length; ++i )
	{
		elementNext=hatsForm.elements[i];
		if ( ( isHInput(elementNext.type,elementNext.name) )
			 && ( elementNext.disabled!="true"                )
			 && ( elementNext.type!="hidden"                  ) )
		{
			pool = elementNext.name.split("_");
			ilen=parseInt(pool[2]);
			ipos=parseInt(pool[1]);
			if ( ( (mlcnum==-1) && (ipos>=x     ) )
				 ||  ( (ipos>=x    ) && (mlcpos>=ipos) ) )
			{
				mlc=elementNext;
				mlclen=ilen;
				mlcpos=ipos;
				mlcnum=i;
			}
		}
	}

	if (mlcpos!=-1 && (mlc.disabled!=true))
	{
		window.focus();mlc.focus();
	}  //change to add if else statement
	else
	{	//change to focus on first field again
		for ( var i = 0; i<hatsForm.elements.length; ++i )
		{
			elementNext=hatsForm.elements[i];
			if ( ( isHInput(elementNext.type,elementNext.name) )
				 && ( elementNext.disabled!="true"                )
				 && ( elementNext.type!="hidden"                  ) )
			{
				pool = elementNext.name.split("_");
				if (pool[0].indexOf("in")!=-1)
				{	   //  pool[0]=="in" ) {
					ilen=parseInt(pool[2]);
					ipos=parseInt(pool[1]);
					mlc=elementNext;
					mlclen=ilen;
					mlcpos=ipos;
					mlcnum=i;
					if (mlc.disabled!=true)	mlc.focus();
					return mlcpos;
				}
			}
		}
	}
	return mlcpos;
}

function countUserInteractiveHatsFormFields(){
	var uihff = 0;
	if (hatsForm == null) return 0;
	for ( var i = 0; i<hatsForm.elements.length; ++i )
	{
			elementNext=hatsForm.elements[i];
			if ( ( isHInput(elementNext.type,elementNext.name) )
				 && ( elementNext.disabled!="true"                )
				 && ( elementNext.type!="hidden"                  ) )
			{
				uihff=uihff+1;
			}
	}
	return uihff;
}

var carettrackingenabled=true;

function caretTracking(pID)	// A0 added pID
{
	setHatsFocus(pID);			// A0 added call

	if ((!IE || MAC) && !MOZILLA && !NN)	return -1;  //Win IE, Netscape/Mozilla only code
	if ( carettrackingenabled!=true ) return -1;
	if (countUserInteractiveHatsFormFields()<1) return -1;
    
    var pos = 0;
    var t;
    if(!IE) {
        try{
            t = gobject; //(document.getElementsByName(getInfo(hatsForm.name).focusFieldName))[0];
        } catch(e){ return -1; }           

        if ((t == null) || (t.type!="text" && t.type!="password" && t.type!="textarea")) return -1;

        pos = t.selectionStart;
    }
    else {
    	var caretPos = document.selection.createRange().duplicate();
    	t = caretPos.parentElement();
    	//alert("t type is " + t.type);
    	if (t.type!="text" && t.type!="password" && t.type!="textarea")	return -1;
    	var beginField = t.createTextRange();
    	caretPos.collapse();
    	beginField.collapse();
    	var slen = t.value.length ;

    	for ( pos = 0 ; pos <= slen ; pos++ )
    	{
    		qa =caretPos.getBoundingClientRect();
    		qb = beginField.getBoundingClientRect();
    		if ( qa.left == qb.left )
    		{
    			break;
    		}
    		caretPos.move("character",-1);
    	}
    }

	iname = t.name;
	pool = iname.split("_");
	ipos=parseInt(pool[1]);
	ilen=parseInt(pool[2]);
	if (isNaN(ipos)||isNaN(ilen)||isNaN(pos)) return(-1);

	var charCount = pos;
	for (var i=0; i < charCount; i++)
	{
		if (isDBCSChar(t.value.charAt(i), enableDBCSSession, enableDBCSEuro))
		{
			pos++;
		}
	}

	newcursor=ipos+pos;
	if ( (newcursor)>(ipos +ilen -1) )
	{
		if (autoAdvance && !t.disableAutoAdvance)  // we can try  to the next field
		{
			if (t && t.autoEnter && t.autoEnter == "true")
			{
				ms("[enter]");
				return(newcursor-1);
			}
			var tcp=nextvalidhatsinputfield(ipos,ilen);// return tcp;
			if (tcp!=-1)
			{
				newcursor= (tcp);  //tcp is now first character of a different field
			}//else we want to go with the last char from the other screen
			else
			{
				newcursor= (newcursor-1); //tcp had no better field for me
			}
		}
		else
		{ // no field transition so since pos!=ilen, pos-=1
			newcursor= (newcursor-1);
		}
	}
	//alert("caretTracking returns pos " + pos + " and ipos " + ipos);
	return(newcursor);
}
//above this line, caret positioning code!

var hatsFocusedClass='HATSFOCUSED';
var hatsUnfocusedClass='HATSUNFOCUSED';

function setInitHatsFocus(formName)
{
	if (hatsForm==null)
	{
		setHatsFocus(formName);
		if (hatsForm==null)
		{
			alert('could not set initial hats focus!');
			return;
		}
		setInputFieldFocus();
		updateStatusWindow();
		return;
	}
	updateStatusWindow();
}

//grab initial user input focus, forced, only used by portal
function stealHatsFocus(formName)
{
	setHatsFocus(formName);
	if (hatsForm==null)
	{
		alert('could not steal initial hats focus!');
		return;
	}
	//initInputFieldFocus(hatsForm.CURSORPOSITION.value);
	//setInputFieldFocus();
}
//change user input focus to specified form
function setHatsFocus(formName)
{
	if (formName==null)	return;			 // A0 added if check
	if (hatsForm!=null)
	{
		if (formName==hatsForm.name) return;
	}
	//var tmp=eval("document."+formName);
	var tmp=document.forms[formName];
	if (!tmp) return;
	if (tmp==null) return; //dont remove old focus, it might still be valid.
	if (typeof tmp == 'undefined')	return;	   // A0 added if check

	if (hatsForm!=null)
	{
		removeHatsFocus(hatsForm.name);
	}
	hatsForm=tmp;
	if (hatsForm==null)
	{
		alert('form '+formName+' not found');
		return;
	}
	//set current linesize
	setLineSize(hatsForm.LINESIZE.value);

	var focusRegion=document.getElementById("HATSFR"+formName);
	if (focusRegion == null)
	{
		return;
	}
	focusRegion.className=hatsFocusedClass;
}

//remove any state from form losing the focus, update appearance
function removeHatsFocus(formName)
{
	var focusRegion=document.getElementById("HATSFR"+formName);
	if (focusRegion == null)
	{
		//alert('focus region '+formName+' not initd');
		return;
	}
	focusRegion.className=hatsUnfocusedClass;
	//alert('focus removed from: '+formName);
}

if (document.layers)   // Netscape
{
	document.captureEvents(Event.MOUSEMOVE);
	document.onmousemove = captureMousePosition;
}
else if (document.all) // Internet Explorer
{
	document.onmousemove = captureMousePosition;
}
else if (document.getElementById) // Netcsape 6
{
	document.onmousemove = captureMousePosition;
}
xMousePos = 0; // Horizontal position of the mouse on the screen
yMousePos = 0; // Vertical position of the mouse on the screen
xMousePosMax = 0; // Width of the page
yMousePosMax = 0; // Height of the page

function captureMousePosition(e)
{
	if ((ns4 == true) /*document.layers*/)
	{
		//NS4
		xMousePos = e.pageX;
		yMousePos = e.pageY;
		xMousePosMax = window.innerWidth+window.pageXOffset;
		yMousePosMax = window.innerHeight+window.pageYOffset;
	}
	else if ((IE == true)||(OPERA == true) /*document.all*/)
	{
		//IE
		xMousePos = window.event.x+document.body.scrollLeft;
		yMousePos = window.event.y+document.body.scrollTop;
		xMousePosMax = document.body.clientWidth+document.body.scrollLeft;
		yMousePosMax = document.body.clientHeight+document.body.scrollTop;
	}
	else if (ns6 == true /*document.getElementById*/)
	{  /*gecko*/
		// Netscape 6
		xMousePos = e.pageX;
		yMousePos = e.pageY;
		xMousePosMax = window.innerWidth+window.pageXOffset;
		yMousePosMax = window.innerHeight+window.pageYOffset;
	}
	else
	{ //if( (SAFARI==true) || (KONQUEROR == true)){ /*KHTML*/
		xMousePos = e.pageX;
		yMousePos = e.pageY;
		xMousePosMax = window.innerWidth+window.pageXOffset;
		yMousePosMax = window.innerHeight+window.pageYOffset;
	}
}
function popup(popupid)
{
	var content=document.getElementById(popupid);

	if ((ns4 == true) /*document.layers*/)
	{
		document.layers[popupid].left = xMousePos;
		document.layers[popupid].top = yMousePos;
	}
	else if ((IE == true)||(OPERA == true)	/*document.all*/)
	{
		content.style.pixelLeft=xMousePos;
		content.style.pixelTop=yMousePos;
	}
	else if ( (ns6 == true)	/*document.getElementById*/)   /*gecko*/
	{
		content.style.left=xMousePos;
		content.style.top=yMousePos;
	}
	else
	{ //   if((SAFARI==true) || (KONQUEROR == true)){ /*KHTML*/
		content.style.left=xMousePos;
		content.style.top=yMousePos;
	}
	content.style.visibility="visible";
}

function close(popupid)
{
	var content=document.getElementById(popupid);
	content.style.visibility="hidden";
}

function pick(code,formName,fldName)
{
	setHatsFocus(formName);
	var fld=eval("document."+hatsForm.name+"."+fldName);

	for ( var i = 0; i<hatsForm.elements.length; ++i )
	{

		if ( (hatsForm.elements[i].name == fldName) &&(( hatsForm.elements[i].type == "text")||(hatsForm.elements[i].type == "password")||(hatsForm.elements[i].type == "textarea") ))
		{
			hatsForm.elements[i].focus();
			hatsForm.elements[i].value=code;
			hatsForm.elements[i].blur();
			hatsForm.elements[i].focus();
			if (IE)
			{
				checkInput(hatsForm.elements[i]);
				break;	
			}
		}
	}

	close(hatsForm.name+"_"+fldName);
}

function setCheckboxValue(me)
{
	if (me.checked)
	{
		checkInput(me);
	}
	else
	{
		var fld=eval("document."+hatsForm.name+".deselect_"+me.name);
		checkInput2(me.name,fld.value,"checkbox");
	}
}
function evalCheckboxValue(me,on,off)
{
	if (me.checked)
	{
		checkInput2(me.name,on,"checkbox");
	}
	else
	{
		checkInput2(me.name,off,"checkbox");
	}
}

function setScreenLocked(value)
{
	screenLocked = value;
	if (screenLocked && hatsForm)
	{
		disableHhostForm(hatsForm);
	}
	updateStatusWindow();
}

function disableHhostForm(form)
{
	for (var i = 0; i < form.elements.length; i++)
	{
		if (form.elements[i].type != "button" && form.elements[i].type != "hidden")
		{
			if (isHInput(form.elements[i].type,form.elements[i].name)==true)
			{
				form.elements[i].disabled = true;
			}
		}
	}
}

function disableForm(form)
{
	for (var i = 0; i < form.elements.length; i++)
	{
		if (form.elements[i].type != "button" && form.elements[i].type != "hidden")
		{
			form.elements[i].disabled = true;
		}
	}
}

function allowDigitsOnly(event)
{
	var code = event.keyCode;
	if ((enableBIDI=="true") && ((code < 1642) && (code > 1631)))
		return;

	if ((code < 48 || code > 57) && (code != 13 && code != 8))
	{
		event.returnValue = false;
	}
}

function allowAlphabeticOnly(event)
{
	var code = event.keyCode;
	if ((code < 65 || code > 90) && (code < 97 || code > 122) && code != 13 && code != 8 && code != 44 && code != 46 && code != 45 && code != 32)
	{
		event.returnValue = false;
	}
}

function convertToUpperCase(event)
{
	var code = event.keyCode;
	if (code >= 97 && code <= 122)
	{
		event.keyCode = code - 32;
	}
	if ( !MAC && !IE )
		event.returnValue = true;
}

function allowNumericOnly(event)
{
	var code = event.keyCode;
	if ((enableBIDI=="true") && ((code < 1642) && (code > 1631)))
		return;

	if ((code < 48 || code > 57) && code != 13 && code != 8 && code != 43 && code != 45 && code != 46 && code != 44 && code != 32)
	{
		event.returnValue = false;
	}
	else
	{
		if ( !MAC && !IE )
			event.returnValue = true;
	}
}

function allowSignedNumeric(event)
{
	allowDigitsOnly(event);
}

function autoSubmitIfFilled(element, event)
{
	var pool = element.name.split("_");
	if (pool.length == 3)
	{
		if (pool[0].indexOf("in")!=-1)
		{ // (pool[0] == "in") {
			if (!isNaN(pool[2]))
			{
				if (element.value.length == pool[2])
				{
					ms("[enter]");
				}
			}
		}
	}
	if ( !MAC && !IE )
		event.returnValue = true;
}

function rz(element)
{
	var str = element.value;
	var intLength = str.length;
	for (var i = 0; i < (element.maxLength - intLength); i++)
	{
		str = "0" + str;
	}
	if (element.value != str)
	{
		element.value = str;
	}
}

function rb(element)
{
	var str = element.value;
	var intLength = str.length;
	for (var i = 0; i < (element.maxLength - intLength); i++)
	{
		str = " " + str;
	}
	if (element.value != str)
	{
		element.value = str;
	}
}

function openCalendar(event, baseURL, id, inputFieldNames, datePattern, patternLocale, rangeStart, rangeEnd, clientLocale)
{
	var names = "";
	var values = "";
	for (var i = 0; i < inputFieldNames.length; i++)
	{
		var e = eval("hatsForm." + inputFieldNames[i]);
		if ( typeof e.value == 'undefined')
		{
			if (typeof e[0].value != 'undefined')
			{
				values = values + e[0].value;
			}
		}
		else
		{
			values = values + e.value;
		}
		names = names + inputFieldNames[i];
		if (i < inputFieldNames.length - 1)
		{
			values = values + "|";
			names = names + "|";
		}
	}
	var address = baseURL + "?";
	address += "datePattern=" + encodeURIComponent(datePattern);
	address += "&inputFieldNames=" +  encodeURIComponent(names);
	address += "&inputFieldValues=" + encodeURIComponent(values);
	address += "&patternLocale=" + encodeURIComponent(patternLocale);
	address += "&rangeStart=" + encodeURIComponent(rangeStart);
	address += "&rangeEnd=" + encodeURIComponent(rangeEnd);
	address += "&calendarID=" + encodeURIComponent(id);
	address += "&clientLocale=" + encodeURIComponent(clientLocale);
	var w = window.open(address, id, "height=230,width=240,left=" + event.screenX + ",top=" + event.screenY + ",status=no,toolbar=no,menubar=no,location=no,scrollbars=no,resizable=yes");
	w.focus();
	return false;
}

function reverseData(element,inputFieldValues) {
	if (element.style.direction == "rtl"){			
		text =  inputFieldValues;	
		len = text.length;	
		var temp = "";										 
		for(j = 0;j < len;j++)
			temp +=  text.charAt(len - j - 1);
								
		inputFieldValues = temp;
	}
}

function applyDate(inputFieldNames, inputFieldValues)
{
	for (var i = 0; i < inputFieldNames.length; i++)
	{
		var e = eval("hatsForm." + inputFieldNames[i]);
				
		if (enableBIDI=="true") {
			if(e.length > 0){
				for ( var k = 0; k < e.length; k++ )
					reverseData(e[k],inputFieldValues[i]);						
			}
			else
				reverseData(e,inputFieldValues[i]);	
		}		

		checkInput2(inputFieldNames[i], inputFieldValues[i], e.type);
	}
}

if (parent != self)
{
	parent.frames[0].connect = 1;
}

function isDBCSChar(unichar, isDBCSSession, isDBCSEuro)
{
	if (!isDBCSSession)
	{
		return false;
	}
	if (unichar == '\u20a9')
	{
		return false;
	}
	if (unichar == '\u20ac')
	{
		if (isDBCSEuro)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	if ('\u0080' <= unichar && unichar <= '\u00A1'
		|| '\u00A4' == unichar
		|| '\u00A7' <= unichar && unichar <= '\u00AB'
		|| '\u00AD' <= unichar && unichar <= '\u00AE'
		|| '\u00B0' <= unichar && unichar <= '\u04FF'
		|| '\u0600' <= unichar && unichar <= '\u06FF'
		|| '\u0F00' <= unichar && unichar <= '\u0FFF'
		|| '\u1100' <= unichar && unichar <= '\u11FF'
		|| '\u1800' <= unichar && unichar <= '\u18FF'
		|| '\u1E00' <= unichar && unichar <= '\u27BF'
		|| '\u2E80' <= unichar && unichar <= '\u2EF3'
		|| '\u2ff0' <= unichar && unichar <= '\u2ffb'
		|| '\u3000' <= unichar && unichar <= '\u33FF'
		|| '\u3400' <= unichar && unichar <= '\u4DFF'
		|| '\u4E00' <= unichar && unichar <= '\u9FA5'
		|| '\uA000' <= unichar && unichar <= '\uA4FF'
		|| '\uAC00' <= unichar && unichar <= '\uD7A3'
		|| '\uE000' <= unichar && unichar <= '\uF86F'
		|| '\uF900' <= unichar && unichar <= '\uFB4F'
		|| '\uFB50' <= unichar && unichar <= '\uFDFF'
		|| '\uFE20' <= unichar && unichar <= '\uFE6F'
		|| '\uFE70' <= unichar && unichar <= '\uFEFF'
		|| '\uFF00' <= unichar && unichar <= '\uFF5F'
		|| '\uFFE0' <= unichar && unichar <= '\uFFE6'
		|| '\uFFF0' <= unichar && unichar <= '\uFFFF')
	{
		return true;
	}
	return false;
}

function allowDBCSPure(event)
{
	if(enableAutoConvertSBCStoDBCS) {
	    var code = event.keyCode;
	    if(code == 32) {
	      event.keyCode = 0x3000;
	      event.returnValue = true;
	    }
        else if(code >= 33 && code <=126) {
          event.keyCode = 65281 + (code - 33);
          event.returnValue = true;
          return;
        }
	}
    
	if (isDBCSChar(String.fromCharCode(event.keyCode), enableDBCSSession, enableDBCSEuro))
	{
		event.returnValue = true;
		return;
	}
	else
	{
		event.returnValue = false;
		return;
	}
}

function allowDBCSOnly(event)
{
	if(enableAutoConvertSBCStoDBCS) {
	    var code = event.keyCode;
	    if(code == 32) {
	      event.keyCode = 0x3000;
	      event.returnValue = true;
	    }
        else if(code >= 33 && code <=126) {
          event.keyCode = 65281 + (code - 33);
          event.returnValue = true;
          return;
        }
	}

	if (isDBCSChar(String.fromCharCode(event.keyCode), enableDBCSSession, enableDBCSEuro))
	{
		event.returnValue = true;
		return;
	}
	else
	{
		event.returnValue = false;
		return;
	}
}

function allowSBCSOnly(event)
{
	var ck = function(c)
	{
		if (isDBCSChar(String.fromCharCode(c), enableDBCSSession, enableDBCSEuro)) return false;
		else return true;
	};
	if (isCtrlKey(event))
	{
		verifyText(event, ck);
	}
}

function inhibitKeyboardEntry(event)
{
    var ck = function(c) {
        return false;
    };
    verifyText(event, ck);
    event.returnValue = false;
}

function isCtrlKey(event)
{
	if (enableDBCSSession && (event.keyCode == 13 || event.keyCode == 0)) return true;
	else return false;
}

function verifyText(e, ck)
{
	var element = (IE) ? e.srcElement : e.target;
	var inStr = element.value, outStr = "";
	for (var i=0; i< inStr.length; i++)
	{
		if (ck(inStr.charCodeAt(i)))
		{
			outStr += inStr.charAt(i);
		}
		else
		{
			break;
		}
	}

	if (outStr != element.value)
	{
		element.value = outStr;
		e.returnValue = false;
	}
}

function wipeInput(nameList)
{
	var myArray = nameList.split("|");
	for (var i=0; i<myArray.length; i++)
	{
		if (myArray[i] != "")
		{
			for ( var j = 0; j < hatsForm.elements.length; j++ )
			{
				elementNext = hatsForm.elements[j];
				if (elementNext.name == myArray[i])
					elementNext.value="";
			}
		}
	}

	return;
}

var dragapproved=false
var dragvert=false
var dragmoving=false
var dragthumbObj=null
var dragthumbID=null
var dragStartX
var dragStartY
var dragStyleTop=0
var dragStyleLeft=0
var dragMaxUpMove=0
var dragMaxDownMove=0
var dragDelta=0
var scrollbarEnabled=false
var scrollbarCount=0
var scrollbarArray
var scrollbarFormArray

function scrollbarInit(isVertical,screenPos,scrollSize,sliderPos,sliderSize,formID)
{
  if (!scrollbarEnabled)
  {
    document.onmousemove=mouseMove
    scrollbarEnabled=true
    scrollbarArray=new Array()
    scrollbarFormArray=new Array()
  }
  scrollbarArray[scrollbarCount] = "" + screenPos + "-" + isVertical + "-" + scrollSize + "-" + sliderPos + "-" + sliderSize 
  scrollbarFormArray[scrollbarCount] = formID
  scrollbarCount++
}

function getEvtX(evt) 
{
    return ((evt) ? (evt.clientX) : 0)
}

function getEvtY(evt) 
{
   return ((evt) ? (evt.clientY) : 0)
}

function getEvtLoc(evt)
{
   return "("+getEvtX(evt)+","+getEvtY(evt)+")"
}

function getObjLoc(obj)
{
   if (obj)
     return "("+obj.offsetLeft+","+obj.offsetTop+","+obj.clientWidth+"w,"+obj.clientHeight+"h)"
   else
     return obj
}

function getDragObjLoc(obj)
{
   return ((obj) ? ((dragvert) ? (obj.offsetTop) : (obj.offsetLeft)) : 0)
}
function getDragObjSize(obj)
{
   return ((obj) ? ((dragvert) ? (obj.clientHeight) : (obj.clientWidth)) : 0)
}

function dragSetObjPos(obj, pos)
{
  if (dragvert)
  {
    if (NN)
      obj.style.top = pos
    else
      obj.style.pixelTop = pos
  }
  else 
  {
    if (NN)
      obj.style.left = pos
    else
      obj.style.pixelLeft = pos
  }
  dragDelta=pos 
}

function dragGetDelta(evt)
{
  delta = (dragvert) ? (/*dragStyleTop +*/ getEvtY(evt) - dragStartY) : (/*dragStyleLeft +*/ getEvtX(evt) - dragStartX)
  delta = Math.min( (Math.max(delta, dragMaxUpMove)), dragMaxDownMove)
  return delta
}

function mouseMove(evt) 
{
  try
  {
    if (dragapproved)
    {
      evt = (evt) ? evt : event
      dragSetObjPos(dragthumbObj, dragGetDelta(evt))
      dragmoving=true
      return false
    }
  }
  catch(e)
  {
     var errNum = (e.number) ? (e.number & 0xFFFF) : ""
     alert("mouseMove Exception "+errNum+": " + e.name + " " + e.toString())
     if (e.fileName)
        alert(e.fileName + ":" + e.lineNumber)
     dragReset()
  }
}

function dragStart(evt)
{
  try
  {
    evt= (evt) ? evt : event
    target= (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null)

    if (target && target.id)
    {
      dragthumbID= target.id.split("_")
      if ((dragthumbID.length==4) && (dragthumbID[0]=="scroll") && (dragthumbID[2]=="thumb"))
      {
        dragapproved= true
        dragvert= (dragthumbID[3]=="v")
        screenpos= dragthumbID[1]
        document.onmouseup= dragStop
      }
      else
      {
        dragapproved= false
      }
    }

    if (dragapproved)
    {
      upbutton = document.getElementById("scroll_"+screenpos+"_up")
      downbutton = document.getElementById("scroll_"+screenpos+"_down")
      pageupbutton = document.getElementById("scroll_"+screenpos+"_pageup")
      pagedownbutton = document.getElementById("scroll_"+screenpos+"_pagedown")

      dragthumbObj=target
      if (NN)
      {
        sty = getComputedStyle(dragthumbObj,"")
        dragStyleLeft = sty.getPropertyValue("left")
        dragStyleTop = sty.getPropertyValue("top")
      }
      else
      {
        dragStyleLeft = dragthumbObj.style.pixelLeft
        dragStyleTop = dragthumbObj.style.pixelTop
      }

      if (NN)
      {
        dragStartX= evt.pageX
        dragStartY= evt.pageY
      }
      else
      {
        dragStartX= getEvtX(evt)  
        dragStartY= getEvtY(evt)  
      }

      dragMaxUpMove= (pageupbutton) ? getDragObjLoc(pageupbutton)-getDragObjLoc(target)+2 : 0
      dragMaxDownMove= (pagedownbutton) ? (getDragObjLoc(downbutton)-getDragObjLoc(target)-getDragObjSize(target)-2) : 0
    }

  }
  catch(e)
  {
     var errNum = (e.number) ? (e.number & 0xFFFF) : ""
     alert("dragStart Exception "+errNum+": " + e.name + " " + e.toString())
     if (e.fileName)
        alert(e.fileName + ":" + e.lineNumber)
     dragReset()
  }
}

function dragReset()
{
  dragapproved=false
  dragvert=false
  dragmoving=false
}

function dragStop(evt)
{
  try
  {
    if (dragapproved)
    {
      evt = (evt) ? evt : event
      dragReset()
      if (dragDelta != 0)
      {
         dragMove = (dragDelta > 0) ? dragDelta : (0-dragDelta)
         dragMaxMove = (dragDelta > 0) ? dragMaxDownMove : (0-dragMaxUpMove)

         for (var i=0; i<scrollbarCount; i++)
         {
            sbData = scrollbarArray[i].split("-")
            if (sbData[0]==dragthumbID[1])
            // build command: enptuislider-[pos]-[vertical]-[size]-[sliderpos]-[slidersize]-[U/D]-[movement]
            {
               scrollSize = sbData[2]
               sliderPos = sbData[3]
               sliderSize = sbData[4]
               sliderAboveBarSize = sliderPos-1
               sliderBelowBarSize = (scrollSize-2)-sliderSize-sliderAboveBarSize
               pixelsPerPos = dragMaxMove / ((dragDelta > 0) ? sliderBelowBarSize:sliderAboveBarSize)
               movementSize = Math.round( dragMove / pixelsPerPos)
               if (movementSize == 0)
                 movementSize = 1    
               movementDirection = (dragDelta > 0) ? "D":"U"
               workingCommand = "enptuislider-"+scrollbarArray[i]+"-"+movementDirection+"-"+movementSize
               ms(workingCommand, scrollbarFormArray[i])
            }
         }
      }
    }
  }
  catch(e)
  {
     var errNum = (e.number) ? (e.number & 0xFFFF) : ""
     alert("dragStop Exception "+errNum+": " + e.name + " " + e.toString())
     if (e.fileName)
        alert(e.fileName + ":" + e.lineNumber)
     dragReset()
  }
}

