// Licensed Materials - Property of IBM
//
// 5724-D34   (Product: IBM HATS)
//
// (C) Copyright IBM Corp. 2002, 2003  All Rights Reserved

beensubmitted=false;
refreshSafe=true;
var statusBIDI = "";
var statusE = ""; 
var enableBIDI="false";

intNumberOfColumns = 80;
intNumberOfRows = 24;
var intCurrentPosition=1;
//var intInitialCursorPosition;
nrtc=1920;
incount=0;
var startin=new Array();
var lengthin=new Array();
var highlightInputField = false;
var gobject;
var screenLocked = 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 windowStatusEnabled=false;
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(where+"<BR>");

    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 = elementNext.name + "["+elementNext.type+"] ";
                if ( elementNext.disabled==true ) {
                    doc+="(disabled)";
                }
                doc+=":";
                for ( var t = 0; t< elementNext.value.length; t++ ) {
                    doc+= elementNext.value.charCodeAt(t)+" ";
                }
                wt.document.writeln(elementNext.value+"<BR>"+doc+"<BR>");
            }
        }
    }
    wt.document.writeln("cursor:"+hatsForm.CURSORPOSITION.value);
    wt.document.writeln("command:"+ hatsForm.COMMAND.value);
    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( screenLocked==true ){
            intCommand = "[reset]";
        }else{
            return;
        }
    }
    if ( intCommand == "disconnect" ) closePrintJobWindow();   
    if ( gobject  != null ) checkInput(gobject);
    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 {
		document.HATSApplet.refresh(false);
	}
}

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++) {
		values += "&" + hatsForm.elements[i].name + "=" + escape(hatsForm.elements[i].value);
	}
	return values;
}

function inputAdjust(elem, disableIfSame){//returns true if element was changed
    var type=elem.type;
    var name=elem.name;
    if( ! ((type=="checkbox" ) || (type=="radio" ))  ){
        if(isHInput(type,name)){
            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 ){
                	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+" ";                      
            	}
				
                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"))
 {
   pool = name.split("_");
   if(pool.length>=3) 
   {
   		if((pool[0].indexOf("in")!=-1) &&(!isNaN(pool[1]))&&(!isNaN(pool[2]))){
   			return true;
   		}
   }
 }
 return false;
}

function isHGVInput(name){  
    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 ) 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 ) {
                
                  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]=="in" ) {
                            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 setCursorPosition(intCursorPosition) {
	if(isNaN(intCursorPosition)){updateStatusWindow(); return;}
	hatsForm.CURSORPOSITION.value=intCursorPosition;
	updateStatusWindow();   
}

//not used, GAC
function initInputFieldFocus(intPutItHere) {

	
    intInitialCursorPosition = intPutItHere;
}

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 ( (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]=="in" ) {
                                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.focus();
                                            lasttextfield=elementNext;
                                            k = 1;
                                            hatsForm.CURSORPOSITION.value = intInitialCursorPosition; 
                                            getInfo(hatsForm.name).focusFieldName = elementNext.name;
                                            break;
                                        }
                                    } else {
                                        if ( elementNext.style.visibility != "hidden" ) {
                                            elementNext.focus();
                                            lasttextfield=elementNext;
                                            k = 1;
                                            hatsForm.CURSORPOSITION.value = intInitialCursorPosition;
                                            getInfo(hatsForm.name).focusFieldName = elementNext.name;
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            } else if ( elementNext.tagName == "TEXTAREA" ) {
                var startIndex = elementNext.name.indexOf(intInitialCursorPosition);
                var endIndex = elementNext.name.indexOf(intInitialCursorPosition - elementNext.cols + 1); 
                if ( (startIndex != -1) || (endIndex != -1) ) {
                    elementNext.focus();
                    lasttextfield=elementNext;
                    k = 1;
                    hatsForm.CURSORPOSITION.value = (startIndex != -1) ? intInitialCursorPosition : intInitialCursorPosition - elementNext.cols + 1;
                    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) {

    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);
	
    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.setSelectionRange ) {  //NS6+ only
            inputbox.setSelectionRange(0, 0);    //before first character
        }
    }
    setOriginal(inputbox,pID);
    thisFieldOverwrite(inputbox);

	if ((enableBIDI=="true") && (inputbox.type !="textarea")){
		if(hatsForm.dir=="rtl")
			statusBIDI =  "<=";
		else
			statusBIDI =  "=>";
				
		statusBIDI = " " + inputbox.type + ", Typing Orientation: => ,Screen Orientation: " + statusBIDI;
		window.status = statusE + statusBIDI;
	}

    if (highlightInputField) {
    	inputbox.style.backgroundColor = highlighInputFieldColor;
    }
    updateStatusWindow();
    if(IE&&(carettrackingenabled||statuswindowenabled)){ updateCursorPosition(pID)};
}

//var fieldchangedlist = new Array();
//function addToInputFieldChangeList(elementNumber) {
//    fieldchangedlist[elementNumber] = "enable";
//}

function checkInputOnCombo(me) {
	checkInput(me)
}
   

function checkInput(me) {
    if(screenLocked==true) return;
    if((me.type=="checkbox" )
     ||(me.type=="radio" )   ){
        if(!(me.checked)) return;
    }    
    compareAgainstOriginal(me);
    name = me.name;
    value = me.value;
    type = me.type;
    checkInput2(name,value,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].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 {
                hatsForm.elements[i].value = value;                
            }
            //addToInputFieldChangeList(i);
        } else if ( hatsForm.elements[i].name != name ) {
            pool = hatsForm.elements[i].name.split("_");
            if((pool.length>=3)  
            && (!( (hatsForm.elements[i]=="checkbox" )||
            	(hatsForm.elements[i].type=="radio" )
            	)) 
            ){
                if(pool[0]=="in"){  
                    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 {
                            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 


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(!IE || MAC) return false; //Win IE only code 
    //alert( "execCommand("+ OverWrite+") is working:" + document.queryCommandEnabled(OverWrite) + document.queryCommandState(OverWrite)+ document.queryCommandValue(OverWrite)+ document.queryCommandSupported(OverWrite));
    return document.queryCommandValue("OverWrite");
}

function setOverWriteMode(bset) {
    if ( overwritemodeenabled==false ) return;
    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 updateStatusWindow() {
    if (!windowStatusEnabled) {
        return;
    }
    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"){
		statusE =  strstat;
		window.status = statusE + statusBIDI;		   
	}
	else
		window.status=strstat;
}

function updateCursorPosition() {
    var ace = carettracking();
    if ( ace ==-1 ) return;
    if(isNaN(ace))return;
    setCursorPosition(ace,hatsForm.name);
}
function updateCursorPosition(pID) {
    setHatsFocus(pID);    	
    var ace = caretTracking(pID); 	
    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) {

    setHatsFocus(pID);
    
    return nextvalidhatsinputfield(position,plen);
}
function nextvalidhatsinputfield(position,plen) {
    if ( autoAdvance!=true ) return -1;   //no need to run function
     if(!IE || MAC) return -1; //Win IE 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.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.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.type!="hidden"                  ) ) 
            {
                    pool = elementNext.name.split("_");
                    if ( pool[0]=="in" ) {
                            ilen=parseInt(pool[2]);   
                            ipos=parseInt(pool[1]);
                            mlc=elementNext;
                            mlclen=ilen;
                            mlcpos=ipos;
                            mlcnum=i;
                            mlc.focus();
                            return mlcpos;
                    }
            }
        }
    }
    return mlcpos;   
}
var carettrackingenabled=true;

function caretTracking(pID) {

    setHatsFocus(pID);
    return caretTracking();
}
function caretTracking() {
    if(!IE || MAC) return -1; //Win IE only code 

    if ( carettrackingenabled!=true ) return -1;
     
        if (hatsForm.CURSORPOSITION.value == '1') {
		return;
	}
	var caretPos = document.selection.createRange().duplicate();
        var 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 ;
        var pos =0;    
        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);
        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();
		return;
	}	
}

//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(hatsForm!=null)
	{ 
		//alert('current '+hatsForm.name+ ' target '+formName);
		if(formName==hatsForm.name)
			{
				return;
			}
	}
	var tmp=eval("document."+formName);
	if(tmp==null) return; //dont remove old focus, it might still be valid.
	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*/) {
        // Netscape 6
        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*/)
   		{
   			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].tagName == "TEXTAREA")&&(enableBIDI=="true") ))) {
           		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 != ',' && code != '.' && code != '-' && code != ' ') {
		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 != '+' && code != '-' && code != '.' && code != ',' && code != ' ') {
		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] == "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 (e.value == undefined) {
			if (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 applyDate(inputFieldNames, inputFieldValues) {
	for (var i = 0; i < inputFieldNames.length; i++) {
		var e = eval("hatsForm." + inputFieldNames[i]);
		

		if (enableBIDI=="true"){
			if(e.tagName == "TEXTAREA"){
				if(e.style.direction == "rtl"){
					val = "";
					for(j = inputFieldValues[i].length - 1;j >= 0;j--)
						val += inputFieldValues[i].charAt(j);
										
					inputFieldValues[i] = val;
				}
			}
		}		
		checkInput2(inputFieldNames[i], inputFieldValues[i], e.type);
	}
}
   
// Function to disconnect the host
function callDisconnect() {
   ms('disconnect',portletID);
}   


if (IE) {
    // Determine if user is running IE6 
    var theAgent = navigator.userAgent.toLowerCase();
    var majorVersion = parseInt(navigator.appVersion);
    var IE6 = ((majorVersion == 4) && (theAgent.indexOf("msie 6.0")!=-1));
    
    // Only run this code for IE6
    if (IE6) {
        if (parent != self) {
            // We are running in frames.
            // Tell the hidden frame that we are connected.
            parent.frames[0].connect = 1;
        }

        if (window.opener != null) {
            if (window.opener.closed == true) {
                window.setTimeout('callDisconnect()', 1000);
            }
        }
    }
}



