   var lastElement = ""
   var lastElementValue = "" 
   var msg = ""
   var ignoreEvent = 0 
   var lastTab = 1
      
   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; 
      // <LRB> 09/18/00 replaced document.forms[El.form.name].IBDIRTY.value = 1;
      if (ElementExists(El,"IBDIRTY") == 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 {
        if (sDay.length < 2)
           sDay = '0' + sDay;
        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 {
// Kim 24jul00 allow Canadian postals (eg. K1A 0B1)
            s = stringUtil(1, El.value, 0, 0, 0, " ");
            iLen = s.length;  
            if (iLen == 6) {El.value = s.substring(0,3) + " " + s.substring(3,6) } 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 emailPat=/^(.+)@(.+)$/
      /* The following string represents the pattern for matching all special
      characters.  We don't want to allow special characters in the address. 
      These characters include ( ) < > @ , ; : \ " . [ ]    */
      var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
      /* The following string represents the range of characters allowed in a 
      username or domainname.  It really states which chars aren't allowed. */
      var validChars="\[^\\s" + specialChars + "\]"
      /* The following pattern applies if the "user" is a quoted string (in
      which case, there are no rules about which characters are allowed
      and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
      is a legal e-mail address. */
      var quotedUser="(\"[^\"]*\")"
      /* The following pattern applies for domains that are IP addresses,
      rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
      e-mail address. NOTE: The square brackets are required. */
      var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
      /* The following string represents an atom (basically a series of
      non-special characters.) */
      var atom=validChars + '+'
      /* The following string represents one word in the typical username.
      For example, in john.doe@somewhere.com, john and doe are words.
      Basically, a word is either an atom or quoted string. */
      var word="(" + atom + "|" + quotedUser + ")"
      // The following pattern describes the structure of the user
      var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
      /* The following pattern describes the structure of a normal symbolic
      domain, as opposed to ipDomainPat, shown above. */
      var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
      
      El.value = trimString(El.value);
      if (!El.value.length) return;
      var emailStr = El.value; 
      var matchArray=emailStr.match(emailPat)
      if (matchArray==null) {
         msg = "Invalid Email address.  Please check @ and .'s";
         return false
      }
      var user=matchArray[1]
      var domain=matchArray[2]
      
      // See if "user" is valid 
      if (user.match(userPat)==null) {
         // user is not valid
         msg = "Invalid Email address.  Please check the username.";
         return false
      }
      
      /* if the e-mail address is at an IP address (as opposed to a symbolic
      host name) make sure the IP address is valid. */
      var IPArray=domain.match(ipDomainPat)
      if (IPArray!=null) {
         // this is an IP address
         for (var i=1;i<=4;i++) {
            if (IPArray[i]>255) {
               msg = "Invalid Email address.  Destination IP address is invalid!";
               return false
            }
         }
         return true
      }
      
      // Domain is symbolic name
      var domainArray=domain.match(domainPat)
      if (domainArray==null) {
         msg = "Invalid Email address.  The domain name is invalid.";
         return false
      }
      
      /* domain name seems valid, but now make sure that it ends in a
      three-letter word (like com, edu, gov) or a two-letter word,
      representing country (uk, nl), and that there's a hostname preceding 
      the domain or country. */
      
      /* Now we need to break up the domain to get a count of how many atoms
      it consists of. */
      var atomPat=new RegExp(atom,"g")
      var domArr=domain.match(atomPat)
      var len=domArr.length
      if (domArr[domArr.length-1].length<2 || 
          domArr[domArr.length-1].length>3) {
         // the address must end in a two letter or three letter word.
         msg = "Invalid Email address.  The address must end in a three-letter domain, or two letter country.";
         return false
      }
      
      // Make sure there's a host name preceding the domain.
      if (len<2) {
         msg = "Invalid Email address.  This address is missing a hostname."
         return false
      }
      
      // If we've gotten this far, everything's valid!
      return true;
   }
   

    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;
   } 
   
      function ElementExists(IBThis,IBElement) { 
      var elemLength, found;

      if (IBThis == null) return 0;
      if (IBThis.form == null) return 0;

      elemLength = document.forms[IBThis.form.name].elements.length;
      found = 0;

      while (( found != -1) && (found < elemLength)) {
           valMsg = document.forms[IBThis.form.name].elements[found].name;
      if (valMsg == IBElement) {
      found = -1;
                        return 1;
      } else {
               found = found + 1;
      }
   }
    return 0;
    }
	
	function cloneItem(library,collection,key) {
		newKey = prompt('Enter New ' + collection + ' Key',key)
		location.href = 'me.get?' + library + '.' + collection + '.clone&' + key + '&' + newKey;
	}
	
	function packageItem(urllibrary,library,collection,key,method) {
		ok = confirm('Create a ' + collection + ' ' + key + ' Package' );
		if (ok) {
		   location.href = 'me.get?' + urllibrary + '.' + library + '.package&' + collection + '&' + key + '&' + method;
		}
	}
	
	function showObject(type,name,id){
		for (i=0 ; i != document.all.tags(type).length  ; i++) {
			if (document.all.tags(type)[i].name == name) {
				if (document.all.tags(type)[i].id == id) {
					document.all.tags(type)[i].style.display = "";					  
				} else {
					document.all.tags(type)[i].style.display = "none";
				}
			}
		}
	}
	
	function showDialogTab(form,tab){
		
// Kim 11feb04 Wrong to do this! Instead call showDialogTab from a span, not an anchor's href (which fires onbeforeunload and so checks ibdirty)!
//		FORM1.IBDIRTY.value = 0
		
		for (i=0 ; i != document.all.tags("DIV").length  ; i++) {
			if (document.all.tags("DIV")[i].name == 'form') {
				if (document.all.tags("DIV")[i].id == form) {
					document.all.tags("DIV")[i].style.display = "";
				} else {
					document.all.tags("DIV")[i].style.display = "none";
				}
			}
		}
		for (i=0 ; i != document.all.tags("TD").length  ; i++) {
			if (document.all.tags("TD")[i].name == 'tab') {
				if (document.all.tags("TD")[i].id == tab) {
					document.all.tags("TD")[i].className = "tableRowAlt";
					lastTab = tab
				} else {
					document.all.tags("TD")[i].className = "tableRow";
				}
			}
		}
	}
 