	var lastElement = ""

   var lastElementValue = "" 

   var msg = ""

   var ignoreEvent = 0 

      

   function ibValidate(El,Reqd,Type,Domain,Max,Local,Server,MinValue,MaxValue,Case, Caption) { 

      msg = "";

      

      if (El == null) return true;

      

      formatField(El, Domain, Case);

         

      // validate fields 

      if (ignoreEvent) {}

      else if (lastElement == El.name && lastElementValue == El.value) {

         lastElement = ""; 

         lastElementValue = "";

      } else {

         validateField(El,Reqd,Type,Domain,Max,Local,Server,MinValue,MaxValue, Caption); 

      }

      // <LRB> 26-May-00 - could be an an IPAToolbar as well

      // <LRB> WAS : document.FORM1.IBDIRTY.value = 1; 

      document.forms[El.form.name].IBDIRTY.value = 1;

      if (msg != "") {

         ignoreEvent = 1;

         lastElement = El.name

         lastElementValue = El.value

         ignoreEvent = 0;

         if (El.type == "text") {

            El.focus();

            El.select(); 

         }

         valMsg = "This field was not entered correctly:\n" +

         "____________________________________\n" +

         msg + "\n____________________________________" +

         "\n\nPlease re-enter it with the proper format!";

         alert(valMsg);

      }

   }



   function formatField(El, Domain, Case) {

      // transformations (no error messages)

      if (Case == "UPPER")

         {El.value = El.value.toUpperCase()}

      else if (Case == "LOWER")

         {El.value = El.value.toLowerCase()}

      else if (Case == "TITLE") {

         var s = El.value.toLowerCase();

         s = s.substring(0,1).toUpperCase() + s.substring(1,s.length);

         

         for (var i=1;i < s.length; i++) {

            if (s.substring(i - 1,i) == " ") {

               s = s.substring(0,i) +

               s.substring(i,i + 1).toUpperCase() +

               s.substring(i + 1,s.length);

            }

         }

         El.value = s;

      }

      else if (Domain == "HTML")

         {domainHtml(El)} 

   }

    

   function validateField(El,Reqd,Type,Domain,Max,Local,Server,MinValue,MaxValue, Caption) {

      

      if (El == null) return true;

      

      var msgStart = "\n       -  " + Caption + ": "; 

      msg = ""; 

      

      if (Reqd == "1") { 

         var fErr=false;

         

         if (El.type == "select-one") { 

            if (El.options[El.selectedIndex].value == "")

               fErr = true;

         } else if (El.type == "select-multiple") { 

            if (El.selectedIndex == -1)

               fErr = true;

         } else if (El.type == null) {

            if (El[0].type == "checkbox" ||  El[0].type == "radio") {

                fErr = true;

                msgStart = "\n       -  " + Caption + ": ";

                var iLen = El.length;

                for(var i=0; i < iLen; i++) {

                   if (El[i].checked) {

                      fErr = false;

                      break;

                   }

                } 

            }

         } else {

            if (El.value == "")

               fErr = true; 

         }

         if (fErr)   

            msg="Required Field"; 

      }

      if (El.value == "")

      { }

      else if (Domain == "POSTAL")

      {domainPostal(El)}

      else if (Domain == "PHONE")

      {domainPhone(El)}

      else if (Domain == "EMAIL")

      {domainEmail(El)} 

      else if (Domain == "PERCENT")

      {domainPercent(El)}

      else if (Type == "MONEY")

      {typeCurrency(El,"$", 2, 0)}

      else if (Type == "DATE") 

      {typeDate(El)}

      else if (Type == "TIME") 

      {typeTime(El)}

      else if (Type == "NUMBER" && parseFloat(El.value) != El.value)

      {msg="Value Entered is not a Number";}

      else if (Type == "INTEGER" && parseInt(El.value,10) != El.value)

      {msg="Value Entered is not a Number";}

      else if (Type == "INTEGER" && parseInt(El.value,10) > 32768)

      {msg="Value Entered is not an Integer (0-32768)";} 

      

      if (Max && El.value.length > Max) 

      {msg="Maximum length of " + Max + " exceeded";} 

      if (MinValue  && parseInt(stringUtil(1,El.value,0,1,1,"$,%"),10) < MinValue )

      {msg="Value is out of range - Less than minimum of " + MinValue}

      if (MaxValue  && parseInt(stringUtil(1,El.value,0,1,1,"$,%"),10) > MaxValue )

      {msg="Value is out of range - Greater than maximum value of " + MaxValue}

      

      if (msg == "") {

         return true;

      } else {

         msg = msgStart + msg;

         return false;

      }

   }



   function ibConfirmField(Elp, Elc, bDisplayAlert, Caption) { 



      msg = ""; 

      if (Elp.value != Elc.value) { 

         if (bDisplayAlert) {

            var valMsg;

            valMsg = "The '" + Caption + "' entry was not correctly confirmed.  " +

            "Be sure that the confirmation value exactly \n" +

            "matches the new value.";

            alert(valMsg);

            Elp.focus();

            Elp.select(); 

         } else {

            msg = "\n       -  " + Caption + ": Not correctly confirmed"; 

         }

      }

   }



    function typeDate(El) {



//! Select the date Format for the server location: USA = mm-dd-yy; INT = dd-mm-yy

      var dFormat = "USA";

//////var dFormat = "INT";



      var date, dDate, sDate, sDay, sMonth, sYear, today, delim, i, c, mPos, m1, m2, pos1, pos2, leapYearInd, msg, ok;

      monthNames = new Array("JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC");

      monthDays  = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);

      date       = El.value;

      today      = new Date();

      today      = today.toString();

         msg        = "";



      monthName = ""; mPos = 0

      delim = "";

      for (i=0; i < date.length; i++) {

        c = date.charAt(i);

        if (c < "0" || c > "9") {

          if (c < "A" || c > "Z") {

            if (c < "a" || c > "z") {

              delim = c;

            } else {

              if (mPos == 0 || mPos == i - 1) {monthName += c; mPos = i}

            }

          } else {

            if (mPos == 0 || mPos == i - 1) {monthName += c; mPos = i}

          }

        }

      }



      sMonth = "";

      if (monthName != "") {

        m1 = date.indexOf(monthName);

        m2 = m1 + monthName.length;

        monthName = date.substring(m1,m2);

        if (monthName.length > 3) {monthName = monthName.substring(0,3)}

        monthName = monthName.toUpperCase();

        for (i=0; i < 12; i++) {

          if (monthNames[i] == monthName) {

            sMonth = i + 1;

            break;

          }

        }



            if (sMonth == "") {msg = "Please check spelling"};

        if (m1 > 0) {dFormat = "INT"}

      }



      if (delim == "") {

        // no delimiter

        if (dFormat == "USA") {

          if (sMonth == "") {

            sMonth = date.substring(0,2)

            sDay = date.substring(2,4);

              sYear  = date.substring(4,date.length);

          } else {

            sDay = date.substring(m2,m2 + 2);

             sYear  = date.substring(m2 + 2,date.length);

          }

        } else {

          if (sMonth == "") {

            sMonth = date.substring(2,4)

              sYear  = date.substring(4,date.length);

          } else {

              sYear  = date.substring(m2 + 2,date.length);

          }

          sDay = date.substring(0,2);

        }

      } else {

        // has  delimiter 

        pos1 = date.indexOf(delim);

        pos2 = date.lastIndexOf(delim);

        if (pos2 == pos1) {pos2 = date.length};



        if (dFormat == "USA") {

          if (sMonth == "") {sMonth = date.substring(0,pos1)}

          sDay   = date.substring(pos1 + 1, pos2);

        } else {

          sDay   = date.substring(0,pos1);

          if (sMonth == "") {sMonth = date.substring(pos1 + 1, pos2)}

        }

        sYear  = date.substring(pos2 + 1, date.length);

      } 



      if (sYear.length < 4) {

         sYear = today.substring(today.length - 4,today.length - sYear.length) + sYear;

      }



      // validate 

      if (msg == "") { 

        ok = 1;

        for (i = 0; i < sYear.length; i++) {

         c = sYear.substring(i, i + 1);

         if (c < "0" || c > "9") {

            ok = 0;

            break;

         }

        }

      

        if (ok == 0) {msg = "Year (" + sYear + ") must be between 0001 and 9999"} else {

          if (eval(sDay < 01 || sDay > 31)) {msg = "Day (" + sDay + ") must be between 1 and 31"} else {

            if (eval(sMonth - 1) < 0 || eval(sMonth - 12) > 0) {msg = "Month (" + sMonth + ") must be from 01 to 12"} else {

              if (eval(sDay - monthDays[sMonth]) > 0) {

                if (eval(sMonth) == 2 && sDay == 29) {

                  leapYearInd = sYear / 4;

                  leapYearInd = leapYearInd.toString();

                  if (leapYearInd.indexOf(".") >= 0) {msg = leapYearInd.indexOf(".") + ", " + "29th is only valid for leap years"};

                } else {

                  msg = monthNames[sMonth - 1] + " has only " + monthDays[sMonth] + " days";

                }

              }

            }

          }

        }

      }

      if (msg != "") {

        alert(msg)

      } else {

        El.value = sDay + "-" + monthNames[sMonth - 1] + "-" + sYear;

      }

    }

          

   function typeTime(El) {

        var iTod = -1;

        var sTime, s, sTod;

        var sMin, sHour;

        

        sTime = trimString(El.value.toUpperCase()); 



        sTod  = "AM"

        if  (sTime.indexOf("PM") != -1) { 

            iTod = sTime.indexOf("PM");

            sTod = "PM"; 

        } else if (sTime.indexOf("AM") != -1) {

            iTod = sTime.indexOf("AM");

            sTod = "AM"; 

        }

        if (iTod != -1) {sTime = trimString(sTime.substring(0, iTod))}



        s = stringUtil(0,sTime, 1, 0, 0, ": ");

        if (s.length == 0 && sTime.length > 0) {    

            iCol1 = sTime.indexOf(":");

            if (iCol1 != -1) 

                s = ":"

            else {

                iCol1 = sTime.indexOf(" ");

                s = " ";

            }

            

            iCol2 = sTime.indexOf(s,iCol1+1); 

            if (iCol2 == -1) 

                iCol2 = sTime.length

   

            if (iCol1 < 0) {iCol1 = iCol2}

            sHour = sTime.substring(0,iCol1)  

            sMin = sTime.substring(iCol1+1,iCol2)



            if (sMin.length == 0) {sMin = "00"} else {if (sMin.length == 1) {sMin = "0" + sMin;}}

            

            if (sTod == "PM" && parseInt(sHour,10) < 13) {sHour = parseInt(sHour,10) + 12 + ""};

  

            if (sHour.length == 0 || parseInt(sHour,10) > 24 || parseInt(sMin,10) < 0 || parseInt(sMin,10) > 59) 

                msg = "Invalid Time Entered. Please use military format or AM/PM format with ':'";

            else {

                newdate = new Date('01/01/97 ' + sHour + ':' + sMin + ':00');

                newdate = newdate.toLocaleString(); 

                if (newdate.indexOf('Invalid') != -1) 

                    msg = "Invalid Time Entered. Please use military format or AM/PM format with ':'";

                else {

                    if (parseInt(sHour,10) > 12) {sHour = parseInt(sHour,10) - 12 + ""; sTod = "PM"}

                    if (parseInt(sHour,10) == 0) {sHour = "12"}

                    if (sHour.length == 1) {sHour = "0" + sHour}

                    El.value = sHour + ':' + sMin + ' ' + sTod;

                }

            } 

        } else {

          msg = "Invalid Time Entered. Please use military format or AM/PM format with ':'"

        } 

   }  

   

    function domainPostal(El) {

        var s, sPostal;

        var fValid, iLen;

        s = stringUtil(0, El.value,1,0,0,"-");

        if (s.length == 0) {  

            s = stringUtil(1, El.value, 0, 0, 0, "-");   

           iLen = s.length;  

            fValid = 1;

            if (iLen == 9) {

               sPostal = s.substring(0,5) + "-" + s.substring(5,10)

            } else if (iLen == 5) {

               sPostal = s;

            } else {

               fValid = 0;

            }

            if (fValid) 

                El.value = sPostal; 

            else if (msg.length == 0)

                msg = "Invalid postal number.";

                 

        } else {

            msg ="Invalid postal number. '" + s + "' is not a valid character for this field.";

        }

    } 

    

    function domainPhone(El) { 

        var s, sPhone;

        var fValid, iLen;

             

        s = stringUtil(0, El.value,1,1,1,"()-. ");

        if (s.length == 0) {  

            s = stringUtil(1, El.value, 0, 0, 0, "()-. ");   

            iLen = s.length;  

            fValid = 1;

            if (iLen == 7) { 

                msg = "You must enter an area code."; 

                fValid = 0;

            } else if (iLen == 10) { 

                sPhone = "(" + s.substring(0,3) + ") " + s.substring(3,6) + "-" + s.substring(6,10);

            } else if (iLen == 11) {

                sPhone = s.substring(0,1) + " (" + s.substring(1,4) + ") " + s.substring(4,7) + "-" + s.substring(7,11);

            } else if (iLen == 12) {

                sPhone =  "(" + s.substring(0,2) + " " + s.substring(2,5) + ") " + s.substring(5,8) + "-" + s.substring(8,12);

            } else {

                fValid = 0;

            } 

            if (fValid) 

                El.value = sPhone; 

            else if (msg.length == 0)

                msg = "Invalid phone number.";

                 

        } else {

            msg = "Invalid phone number. '" + s + "' is not a valid character for this field.";

        }

        

    }

    

    function domainEmail(El) { 

        var s, sAddr, sDomain;

        var iErr=0;

        

        El.value = trimString(El.value);

        if (!El.value.length) return; 

        iPos = El.value.indexOf("@");

        if (iPos != -1 && iPos != El.value.length - 1) {

            sAddr = El.value.substring(0,iPos);

            sDomain = El.value.substring(iPos + 1, El.value.length);

            s = stringUtil(0, sAddr,1,1,1,"_-."); 

            if (s.length > 0) {

                if (s == "@")

                    iErr = 2;

                else

                    iErr = 3;

            } else {

                s = stringUtil(0, sDomain,1,1,1,"_-.");

                if (s.length > 0) {

                    if (s == "@")

                        iErr = 2;

                    else 

                        iErr = 3;

                } 

                iPos = sDomain.lastIndexOf(".");

                if (iPos == -1 || iPos == sDomain.length -1)

                    iErr = 1;

            } 

        } else {

            iErr = 1;

        }

        

        if (iErr > 0) 

            msg="Invalid email address.";

        if (iErr == 2)

            msg="Invalid Email address. Too many '@' characters.";

        else if (iErr == 3)

            msg="Invalid email address. '" + s + "' is not a valid character for this field.";

    }



    function domainPercent(El) { 

        var s, sWhole, sPart, sMinus; msg;

        var i, j, iPos, iLen; 

        var invalidPercentMsg = "Please enter a percentage between 0.00 and 100.00";

        

        sWhole=""; sPart=""; sMinus="";

        El.value = trimString(El.value);

        s = stringUtil(0, El.value,1,0,0,".-");

        if (!s.length) {

           if (El.value.charAt(0) == "-") sMinus = "-"; 



           iPos = El.value.lastIndexOf(".");

           if (iPos != -1) iPos = El.value.length - iPos - 1;

            

           sWhole = stringUtil(1, El.value, 0, 0, 0, ".-");

           if (!sWhole.length) return;



           if (iPos != -1) {

              iLen   = sWhole.length;

              sPart  = sWhole.substring(iLen - iPos, iLen); 

              sWhole = sWhole.substring(0, iLen - iPos); 

           }

           if (!sWhole.length) sWhole = "0"; 

           if (!sPart.length) sPart = "00";

           if (sPart.length > 2) {

              sPart = sPart.substring(0,2) + "." + sPart.substring(2,sPart.length);

              sPart = Math.round(sPart)+"";

              if (sPart.length > 2) {

                 sWhole = eval(sWhole) + eval(sMinus + "1") + "";

                 for (i=0, sPart = ""; i < 2; i++ , sPart += "0");

              }

           } else {

              for (i=sPart.length; i < 2; i++) {sPart += "0";}

           }



           if (eval(sWhole) > 100 || (eval(sWhole) == 100 && eval(sPart) > 0)) msg += invalidPercentMsg;



        } else {

           msg += invalidPercentMsg;

        }

        

        if (!msg.length) { 

            El.value = sMinus + sWhole + "." + sPart;

        } 

    }



    function typeCurrency(El,sSign, iDec, iFormat) { 

        var s, sDollars, sCents, sMinus;

        var i, j, iPos, iLen; 

        

        sDollars=""; sCents=""; sMinus="";

        El.value = trimString(El.value);

        s = stringUtil(0, El.value,1,0,0,"().+-,"+sSign);

        if (!s.length) {

            if (El.value.charAt(0) == "-" || (El.value.charAt(0) == "(" && El.value.charAt(El.value.length-1) == ")"))

                sMinus = "-"; 

            iPos = El.value.lastIndexOf(".");

            

            if (iPos != -1) 

                iPos = El.value.length - iPos - 1;

            

            sDollars = stringUtil(1, El.value, 0, 0, 0, "().-,"+sSign);

            if (!sDollars.length) return;

            if (iPos != -1) {

                iLen = sDollars.length;

                sCents = sDollars.substring(iLen - iPos, iLen); 

                sDollars = sDollars.substring(0, iLen - iPos); 

            }

            if (!sDollars.length) sDollars = "0"; 

            if (!sCents.length) sCents = "00";

            if (sCents.length > iDec) {

                sCents = sCents.substring(0,iDec) + "." + sCents.substring(iDec,sCents.length);

                sCents = Math.round(sCents)+"";

                if (sCents.length > iDec) {

                    sDollars = eval(sDollars) + eval(sMinus + "1") + "";

                    for (i=0, sCents = ""; i < iDec; i++ , sCents += "0");

                }

            } else {

              for (i=sCents.length; i < iDec; i++) {sCents += "0";}

            }

            j=0;

            for (i=sDollars.length-1; i >= 0; i--, j++) { 

                if (j%3 == 0 && j > 0)

                    sDollars = sDollars.substring(0,i+1) + "," + sDollars.substring(i+1, sDollars.length);

            }

        } else {

            msg = "Invalid currency value. Eg. 1.00";

        }

        

        if (!msg.length) { 

            sDollars = sSign + sDollars + "." + sCents;

            if (!iFormat)

                sDollars = sMinus + sDollars;

            else if (iFormat == 1 && sMinus == "-")

                sDollars = "(" + sDollars + ")";

                

            El.value = sDollars;

        } 

    }



   function domainHtml(El) {

        var i = 1

        var work = El.value

        var strLength = work.length

        var search = "\r"

        var replace = "<br>"

        var hasHtml = "<"

        

        if (work.indexOf(hasHtml) == -1) {

            while (i <= strLength) { 

                pos  = work.indexOf(search,i);

                if (work.substring(pos+1,work.length) != "") {

                    if (pos !=-1) 

                        work = work.substring(0,pos) + replace + work.substring(pos+1,work.length);

                }

                i = pos + 1;

                if (pos == -1) i = 99999;

            }

            El.value = work;

        }

    }



   function showMsg(El,msg) {

        if (msg != "") {

            ignoreEvent = 1;

            lastElement = El.name

            lastElementValue = El.value

            ignoreEvent = 0;

            if (El.type == "text") {

               El.focus();

               El.select(); 

            }

            alert(msg);

        }

    }

  

   function clearSelect(selectElement) {

       var cnt = selectElement.length

       for (var i=0; i < cnt; i++)

            selectElement.options[0] = null;

   }



   function stringUtil(iMode, sString, fNumeric, fUAlpha, fLAlpha, sSpecial) { 

        var iLen, i; 

        var s, c;

        var fFlag=1;

        

        s = ""; c = "";

        iLen = sString.length;

        for (i=0; i < iLen; i++) {

            c = sString.charAt(i); 

            if (fNumeric && c >= "0" && c <= "9")

                fFlag = 1; 

            else if (fUAlpha && c >= "A" && c <= "Z")

                fFlag = 1;

            else if (fLAlpha && c >= "a" && c <= "z")

                fFlag = 1;

            else if (sSpecial.indexOf(c) != -1) 

                fFlag = 1;

            else

                fFlag = 0;

            

            if (!fFlag) {

                if (iMode == 0) 

                    break;

                else  

                    s += c; 

            }

        } 

        if (iMode == 0) {

            if (fFlag)

                s = "";

            else

                s = c; 

        }

        

        return s;  

   }

   

   function getFieldName(El) {

      var sCaption;

      

      if (El.type) 

         sCaption = El.name;

      else

         sCaption = El[0].name; 

                  

      var aName = sCaption.split("_")

      if (aName.length == 3)

         sCaption = aName[2]; 

         

      return sCaption;

   }

   

   function trimString(sString) {

      var i, iLen;

      var sTrim;

      

      sTrim = sString;

      

      iLen = sTrim.length;

      for (i = 0; i < iLen && sTrim.charAt(i) == " "; i++); 

      if (i > 0 && i < iLen) 

         sTrim = sTrim.substring(i, iLen);

         

      iLen = sTrim.length - 1;

      for (i = iLen; i >=0 && sTrim.charAt(i) == " "; i--); 

      if (i < iLen && i >= 0)

         sTrim = sTrim.substring(0, i+1); 



      return sTrim;

   } 

	 
