
var NS6=(document.getElementById)?true:false;
var NS4=(document.layers)?true:false;
var IE4=((!NS4)&&(!NS6)&&(document.all))?true:false;

function rmClck(hTxt,iVal) {
   if (window.document.getElementById(hTxt)==null) return true; //quit if no support elementbyid
   if (window.confirm("Are you sure?"))
   { 
       window.document.getElementById(hTxt).value=iVal;
       window.document.getElementsByName("theform")[0].submit(); 
   }
   return false; 
}

function dtField(caption,type,editdata,width,visible,ppp,assertUnique,valpat,valpaterr,allowNull,readonly,titleColSpan,bgcolor,cellwidth) {
   this.caption = caption;
   this.type = type;
   this.editdata = editdata;
   this.width = width;
   this.visible = visible;
   this.ppp = ppp; //pass to popup
   this.valpat = valpat; //regex for validation
   this.valpaterr = valpaterr;
   this.assertUnique = assertUnique;
   this.allowNull = (allowNull==null)?true:allowNull;
   this.readonly = readonly;
   this.titleColSpan =(titleColSpan==null)?1:titleColSpan; //eg 4,0,0,0 or 1,1,1,1
   this.bgcolor = bgcolor;
   this.cellwidth = cellwidth;
}

function dtTable(tName,fields,sepChar,popup,movable,popupwidth) {
   this.fieldlist = fields;
   this.tblName = tName;
   this.sepchar = sepChar;
   this.data = "";
   this.editing = -1;
   this.popup = popup;
   this.movable = ((movable==null)?true:movable);
   this.popupwidth = (popupwidth==null)?500:popupwidth;
   
   this.initTable = function() {
     if ((this.popup!=null)&&(this.popup.length<1)) this.popup = null;
     var str = getObj(this.tblName+"_data").value; 
     var strro = getObj(this.tblName+"_rodata"); 
     if (strro!=null) strro = strro.value;
     var j=0; var rj=0;
     var i = str.indexOf(this.sepchar,j);
     var ri = (strro!=null)?strro.indexOf(this.sepchar,rj):-1;
     if (i>=0) {
       var dataRowCount = str.substring(j,i);
       var ind=0;  
       this.data = new Array();
       if (strro!=null) this.rodata = new Array();
       for (x=0;x<dataRowCount;x++) {
         this.data[x] = new Array();
         if (this.rodata!=null) this.rodata[x] = new Array();
         for (k=0;k<this.fieldlist.length;k++) 
         {
            j = str.indexOf(this.sepchar,i+1);
            if (this.rodata!=null) rj = strro.indexOf(this.sepchar,ri+1);
            if (j<0) break;
            if (this.rodata!=null) 
               this.rodata[x][k] = (strro.substring(ri+1,rj)=='t');
            this.data[x][k] = str.substring(i+1,j);
            i = j;
            ri=rj;
         }
         if (j<0) break;
       }
       if (this.rodata!=null) {
          this.defaultrorow = new Array();
          for (k=0;k<this.fieldlist.length;k++) 
             this.defaultrorow[k] = this.fieldlist[k].readonly;
       }
     }
     this.fillTable();
   }

   this.fillTable = function() { 
      var s = "<table border=0 cellpadding=2 cellspacing=0 class=btable>\n";
      s += "<tr><td class=bcellh>&nbsp;</td>";
      var visibleCols = 0;
      for (var i in this.fieldlist) {  ////var i=0;i<this.fieldlist.length;i++) { 
        var fld = this.fieldlist[i];
        if (!fld.visible || fld.titleColSpan<1) continue;                 
        s += "<td class=bcellh"+((fld.titleColSpan>1)?" COLSPAN="+fld.titleColSpan:"")+">";
        s += fld.caption;
        s += "</td>";
        visibleCols++;
      }
      s += "</tr>\n";

      for (var i=0;i<this.data.length;i++) {
         if (this.editing == i) {
            s += "<tr><td class=bcell nowrap>"
              + "<a href='' onclick='"+this.tblName+".alterTable(\"ud\","+i+"); return false;'><img border=0 src='images/check.gif'></a>"
              + "<a href='' onclick='"+this.tblName+".alterTable(\"ce\","+i+"); return false;'><img border=0 src='images/delete.gif'></a>";
            for (var j=0;j<this.fieldlist.length;j++) {
              var fld = this.fieldlist[j];
              if (!fld.visible) continue;                 
              s += "<td class=bcell"+((fld.bgcolor!=null)?" BGCOLOR=#"+fld.bgcolor:"")+((fld.cellwidth!=null)?" WIDTH="+this.fieldlist[j].cellwidth:"")+">";
              if (fld.readonly || (this.rodata!=null && this.rodata[i][j])) 
                s += this.getTableCellStr(i,j);
              else 
                s += this.getTableCellEditor(i,j); 
              s += "</td>";
            }
            s += "</tr>\n";
         } else {
            s += "<tr><td class=bcell nowrap><a href='' onclick='"+this.tblName+".alterTable(\"de\","+i+"); return false;'><img border=0 src='images/delete.gif'></a>";
            if (this.popup==null) 
               s += "<a href='' onclick='"+this.tblName+".alterTable(\"ed\","+i+"); return false;'><img border=0 src='images/edit.gif'></a>";
            else 
               s += "<a href='' onclick='return "+this.tblName+".openDlg("+i+");'><img border=0 src='images/edit.gif'></a>";
            if (this.movable) {
              s += "<a href='' onclick='"+this.tblName+".alterTable(\"up\","+i+"); return false;'><img border=0 src='images/up.gif'></a>";
              s += "<a href='' onclick='"+this.tblName+".alterTable(\"do\","+i+"); return false;'><img border=0 src='images/down.gif'></a></td>";
            }
            for (var j=0;j<this.fieldlist.length;j++) {
               var fld = this.fieldlist[j];
               if (!fld.visible) continue;                 
               s += "<td class=bcell"+((fld.bgcolor!=null)?" BGCOLOR=#"+fld.bgcolor:"")+((fld.cellwidth!=null)?" WIDTH="+this.fieldlist[j].cellwidth:"")+">";
               var stmp = this.getTableCellStr(i,j);
               if ((stmp==null) || (stmp=="")) stmp = " ";
               s += stmp; 
               s += "</td>";
            }
            s += "</tr>\n";
         }
      }

      //edit row
      if (this.editing==-1) {
        if (this.popup==null) {         
          s += "<tr><td class=bcell nowrap><a href='' onclick='"+this.tblName+".alterTable(\"ud\",-1); return false;'><img border=0 src='images/add.gif'></a>"
          for (var j=0;j<this.fieldlist.length;j++) {
            var fld = this.fieldlist[j];
            if (!fld.visible) continue;                 
            s += "<td class=bcell"+((fld.bgcolor!=null)?" BGCOLOR=#"+fld.bgcolor:"")+">";
            if (fld.readonly) // || (this.rodata!=null && this.rodata[-1][j])) 
                s += "&nbsp;"; //gotta add defaults for row -1
              else 
                s += this.getTableCellEditor(-1,j); 
            s += "</td>";
          }
        } else {
          s += "<tr><td colspan="+(visibleCols+1)+" class=bcell><a href='' onclick='"+this.tblName+".openDlg(-1); return false;'><img border=0 src='images/add.gif'></a></td>"
        }
        s += "</tr>\n";
      }
      s += "</table>\n";
      setInnerHtml(this.tblName+"_root",s);
   }

   this.mkNewRow = function() {
      return new Array();
   }
  
   this.openDlg = function(selRow) {      
      var args = "&sr="+selRow+"&sc="+this.data.length;       
      if (selRow>-1)
       for (var x=0;x<this.fieldlist.length;x++) 
        if (this.fieldlist[x].ppp)
          args += "&f"+x+"="+URLencode(this.data[selRow][x]);
      try {
         window.open(this.popup+args,'dialog'+this.tblName,"TOP=100 LEFT=100 HEIGHT=380,WIDTH="+this.popupwidth+",directories=no,dependent=yes,location=no,menubar=no,resizable=yes,scrollbars=yes,status=yes,toolbar=no");
      } catch (e) {  trace("this.openDlg: "+e);  }
      return false;
   }

   this.getTableCellEditor = function(i,j) {
      var value = "";
      if (i>-1) value = this.data[i][j];
      value=value.replace(/'/g,"&#39;");
      var x = "";
      switch (this.fieldlist[j].type) {
      case "keycombo": x = "<select id='"+this.tblName+"fld"+j+"' size=1 style='{width:"+this.fieldlist[j].width+"px}'>";
                   for (var k=0;k<this.fieldlist[j].editdata.length;k++) {
                      var ted = this.fieldlist[j].editdata[k];
                      var tedKey = ted.substring(0,ted.indexOf(this.sepchar));
                      
                      var skip = false;
                      if (this.fieldlist[j].assertUnique) 
                         for (var n=0;n<this.data.length;n++) 
                            if (n!=i && tedKey==this.data[n][j]){
                               skip=true; break;
                            }
                         
                      if (!skip)
                         x += "<option "+((value==tedKey)?"selected":"")+" id="+ tedKey +">"+ted.substring(ted.indexOf(this.sepchar)+1)+"</option>";
                   }
                   x+="</select>";
                  break;
      case "keyedit":
      case "edit":x = "<input value='"+value+"' id='"+this.tblName+"fld"+j+"' type=edit size="+this.fieldlist[j].width+">";
                  break;
      case "counter": x = ""+value;
                  break;
      case "finderkeyedit":  
                  x = "<input value='"+value+"' id='"+this.tblName+"fld"+j+"' type=edit size="+this.fieldlist[j].width+">"+
                  " &nbsp;<a href='#' onclick='window.open(String(window.location).slice(0,String(window.location).indexOf(\"?\"))+\"?pe=1221&f1="+this.tblName+"fld"+j+"&ctxt=1&f1t="+this.fieldlist[j].editdata+"&cv=\"+URLencode(getEditValue(\""+this.tblName+"fld"+j+"\")),\"finder\",\"TOP=100 LEFT=100 HEIGHT=320,WIDTH=450,directories=no,location=no,menubar=no,resizable=yes,scrollbars=yes,status=yes,toolbar=no\",false); return false;'>(finder)</a>";
                  break;
      case "zoomedit":
                  x = "<input value='"+value+"' id='"+this.tblName+"fld"+j+"' type=edit size="+this.fieldlist[j].width+">"+
                  " &nbsp;<a href='#' onclick='window.open(\"zoom.html?"+this.tblName+"fld"+j+"\",\"ZoomWindow\",\"TOP=100 LEFT=100 HEIGHT=320,WIDTH=450,directories=no,location=no,menubar=no,resizable=yes,scrollbars=yes,status=yes,toolbar=no\",false); return false;'><img src=\"images/edit.gif\" title=\"Zoom\" border=\"0\"></a>";
                  break;
      case "rendition": 
                  var pg = String(window.location).slice(0,String(window.location).indexOf("?"));
                  x = "<input value='"+value+"' id='"+this.tblName+"fld"+j+"' type=edit size="+this.fieldlist[j].width+" onkeyup='window.updateSymbolBox(\""+this.tblName+"fld"+j+"\")' onchange='window.updateSymbolBox(\""+this.tblName+"fld"+j+"\")'>"+
                  " &nbsp;<A href='#' onclick='window.open(\""+pg+"?pe=52&fld="+this.tblName+"fld"+j+"&forcetype="+this.fieldlist[j].editdata+"&cv=\"+URLencode(getEditValue(\""+this.tblName+"fld"+j+"\")),\"Style Editor\",\"TOP=100 LEFT=100 HEIGHT=320,WIDTH=420,directories=no,location=no,menubar=no,resizable=yes,scrollbars=yes,status=yes,toolbar=no\",false); return false;'><img id='"+this.tblName+"fld"+j+"_img' align=top border=0 src=\""+pg+"?pe=20&szh=23&szw=40&fsz=18&bgc=FFFFFF&rval="+value+"\"></a>";
                  break;
      case "coloredit": x = "<table border=0 cellspacing=0 cellpadding=0><td><input value='"+value+"' id='"+this.tblName+"fld"+j+"' type=edit size="+this.fieldlist[j].width+" onkeyup='updateColorBox(\""+this.tblName+"fld"+j+"\")' onchange='updateColorBox(\""+this.tblName+"fld"+j+"\")' > &nbsp;</td><td>"+
                  "<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=0 BGCOLOR=#000000 width=14 height=14><TR><TD id='"+this.tblName+"fld"+j+"_x' bgcolor="+value+"><A HREF='#' title='Choose a new color' onclick='window.open(\"colorpick.html?rfld="+this.tblName+"fld"+j+"\",\"colorchart\",\"width=600,scrollbars=yes\"); return false;'><IMG BORDER=0 SRC='images/transparent_dot.gif' width=14 height=14></A></TD></TR></TABLE></td></table>";
                  break;
      case "checkbox": x = "<input id='"+this.tblName+"fld"+j+"' value=1 type=checkbox "+((value=='t')?"Checked":"")+">";
                  break;
      case "radio": x = "<input id='"+this.tblName+"fld"+j+"' value=1 type=checkbox "+((value=='t')?"Checked":"")+">";
                  break;
      case "image": x = "";
                  break;
      }
      return x;
   }

   this.getTableCellStr = function(i,j) {
     var tmp = this.data[i][j];
     switch (this.fieldlist[j].type) {
     case "keycombo": 
        var ed = this.fieldlist[j].editdata;
        var flag = false;
        for (var x=0;x<ed.length;x++) 
          if (ed[x].substring(0,ed[x].indexOf(this.sepchar))==tmp) {
             tmp = ed[x].substring(ed[x].indexOf(this.sepchar)+1);
             flag=true;
             break;
          }
        if (!flag) tmp = "&nbsp;";
        break;
     case "keyedit": 
     case "finderkeyedit": 
        if (tmp.match(/^[-\d,]+[:](.+)/)) tmp = RegExp.$1;
        break;
     case "rendition":
        var pg = String(window.location).slice(0,String(window.location).indexOf("?"));
        tmp = "<img border=0 src=\""+pg+"?pe=20&szh=23&szw=40&fsz=18&bgc=FFFFFF&rval="+tmp+"\">";
        break;
     case "coloredit": 
        tmp = "<table border=0 cellspacing=0 cellpadding=0 width=100%><td>"+tmp+" &nbsp;</td><td align=right><TABLE BORDER=0 CELLSPACING=1 CELLPADDING=0 BGCOLOR=#000000 width=14 height=14><TR><TD bgcolor="+tmp+"><IMG BORDER=0 SRC='images/transparent_dot.gif' width=14 height=14></TD></TR></TABLE></td></table>";
        break;
     case "checkbox": 
        if (tmp=='t') tmp = "&nbsp; <img border=0 src='images/simplecheck.gif'>";
        else tmp = "&nbsp;";
        break;
     case "radio":
        if (tmp=='t') tmp = "True";
        else tmp = "";
        break;
     case "image":
        tmp = "<img border=0 src='"+tmp+"'>";
        break;
     }
     if ((tmp==null)||(tmp.length==0)) tmp = "&nbsp;";
     return tmp;
   }

   this.alterTable = function(func,row) 
   {
     var shouldSave = true;
     switch (func) {
     case 'de': 
        if (window.confirm("Are you sure?")) {
           this.data = this.data.slice(0,row).concat(this.data.slice(row+1));         
           if (this.rodata!=null) this.rodata = this.rodata.slice(0,row).concat(this.rodata.slice(row+1));     
        } else shouldSave = false;
        break;
     case 'ce':
        this.editing = -1;
        shouldSave = false;
        break;
     case 'ed':
        this.editing = row;
        shouldSave = false;
        break;
     case 'ud':
        var re = new RegExp('['+this.sepchar+'~]',"g");
        var f = new Array (this.fieldlist.length);
        for ( k=0;k<this.fieldlist.length;k++) {
          if (this.fieldlist[k].visible) {
            switch (this.fieldlist[k].type) {
               case "keyedit":
               case "finderkeyedit":
               case "rendition":
               case "zoomedit":
               case "coloredit":
               case "edit": 
                  var tmp = getObj(this.tblName+"fld"+k).value.replace(re,":"); 
                  if (this.fieldlist[k].valpat!=null) 
                     if (!tmp.match(this.fieldlist[k].valpat)) {
                        alert(this.fieldlist[k].valpaterr) 
                        shouldSave = false;
                     }
                  if (shouldSave && this.fieldlist[k].assertUnique)
                     for (var z=0;z<this.data.length;z++) 
                        if ((row!=z)&&(tmp==this.data[z][k])) {
                        alert("Field '"+this.fieldlist[k].caption+"' must be unique");
                        shouldSave = false;
                     }
                  else if (shouldSave && !this.fieldlist[k].allowNull && (tmp==null || tmp=="")) {
                     alert("Field '"+this.fieldlist[k].caption+"' must not be empty");
                     shouldSave = false;
                  }
                     
                  if (shouldSave)
                     f[k] = tmp;
                  break;
               case "counter":
                        if (row>-1)  f[k] = oldrec[k];
                        else {
                           var cnt = 0;
                           for (var z=0;z<this.data.length;z++) 
                              if (parseInt(this.data[z][f])>cnt) cnt = parseInt(this.data[z][f]);
                           f[k] = ""+(cnt + 1);
                        }
                        break;
               case "keycombo": 
               			var o=getObj(this.tblName+"fld"+k);
               			if (o.length>0) 
                           f[k] = o.options[o.selectedIndex].id;
                        else if (!this.fieldlist[k].allowNull)
                           shouldSave = false;
                        break;
               case "checkbox":
                             var obj = getObj(this.tblName+"fld"+k);
                             if (obj!=null)
                                 f[k] = ((obj.checked)?"t":"f");
                             else f[k] = "";
                             break;
               case "radio": var obj = getObj(this.tblName+"fld"+k);
                             if (obj!=null)
                                 f[k] = ((obj.checked)?"t":"f"); 
                             else f[k] = "";
                             if (f[k]=="t") for (var z=0;z<this.data.length;z++) if (row!=z)
                                 this.data[z][k] = "f";
                             break;
            }
          } else if (row==-1) { //invisible new rec - defaults for new records
            switch (this.fieldlist[k].type) {
               case "keyedit":
               case "zoomedit":
               case "edit": 
                  f[k] = " "; break;
               case "keycombo": f[k] = "-1:"; break;
               case "checkbox": f[k] = ((this.fieldlist[k].editdata=="t")?"t":"f"); break;
               case "radio": f[k] = "f"; break;
               case "counter": {
                          var cnt = 0;
                          for (var z=0;z<this.data.length;z++) 
                              if (parseInt(this.data[z][f])>cnt) cnt = parseInt(this.data[z][f]);
                          f[k] = ""+(cnt + 1);
                        }
                        break;
               
            }
          } else { //invisible existing rec
            var oldrec = this.data[row];
            f[k] = oldrec[k];
          }
        }
        if (shouldSave) {
            this.data[(row==-1)?this.data.length:row] = f;
            if (row==-1 && this.rodata!=null) 
               this.rodata[this.rodata.length] = this.defaultrorow;
            this.editing = -1;
        }
        break;
     case 'up':
        if (row==0) {
          this.data = this.data.slice(1).concat(this.data.slice(0,1));
          if (this.rodata!=null) this.rodata = this.rodata.slice(1).concat(this.rodata.slice(0,1));
        } else {
          arrayswap(this.data,row-1,row);
          if (this.rodata!=null) arrayswap(this.rodata,row-1,row);
        }
        break;
     case 'do':
        if (row==(this.data.length-1)) {
           this.data = this.data.slice(row).concat(this.data.slice(0,row));
           if (this.rodata!=null) this.rodata = this.rodata.slice(row).concat(this.rodata.slice(0,row));
        } else {
           arrayswap(this.data,row+1,row);
           if (this.rodata!=null) arrayswap(this.rodata,row+1,row);
        }
        break;
     default: 
        shouldSave=false;
     }

     this.fillTable();
    
     if (shouldSave) {
       var s="";
       for (var j=0;j<this.data.length;j++)
         for (var i=0;i<this.fieldlist.length;i++)
            s += this.data[j][i] + this.sepchar;
       getObj(this.tblName+"_data").value = ""+(this.data.length)+this.sepchar+s+"_";
       if (this.rodata!=null) {
            s="";
			   for (var j=0;j<this.rodata.length;j++)
			     for (var i=0;i<this.fieldlist.length;i++)
			        s += ((this.rodata[j][i])?"t":"") + this.sepchar;
	         getObj(this.tblName+"_rodata").value = ""+(this.rodata.length)+this.sepchar+s+"_";
       }
     }
   }

   this.fillCombo = function(field,pCombo,pDoc) {
      var option;
      var selId = -1;
      var selIndex = -1;
      try {
         selId = pCombo.options.item(pCombo.selectedIndex).value;
      } catch (e) { }
      while (pCombo.options.length>0) pCombo.remove(0);
      for (k=0;k<this.fieldlist[field].editdata.length;k++) {
             var ted = this.fieldlist[field].editdata[k];
             option = pDoc.createElement("OPTION");
             pCombo.options.add(option);
             option.value = ted.substring(0,ted.indexOf(this.sepchar));
             if (option.value==selId) selIndex = k;
             option.text = ted.substring(ted.indexOf(this.sepchar)+1);
      }
      pCombo.selectedIndex = selIndex;
   }

   this.fillComboFromCol = function(field,pCombo,pDoc,excludeRow) {
      var option;
      var selId = "";
      var selIndex = -1;
      try {
         selId = pCombo.options.item(pCombo.selectedIndex).value;
      } catch (e) { }
      while (pCombo.options.length>0) pCombo.remove(0);
      for (k=0;k<this.data.length;k++)
      if (k!=excludeRow) {
             var ted = this.data[k][field];
             option = pDoc.createElement("OPTION");
             pCombo.options.add(option);
             option.value = ted;
             if (option.value==selId) selIndex = k;
             option.text = ted;
      }
      pCombo.selectedIndex = selIndex;
   }

   this.updateRow = function(rowId,trow) {
   
        var re = new RegExp("["+this.sepchar+"~]","g");
        for ( k=0;k<this.fieldlist.length;k++) 
        try {
              trow[k] = trow[k].replace(re,"/");      
        } catch (e) {  trow[k]=""; } 
        for ( k=0;k<this.fieldlist.length;k++) 
           if (this.fieldlist[k].type == "counter") {
                 if (rowId!=-1) trow[k] = this.data[rowId][k];
                 else {
                    var cnt = 0;
                    for (var z=0;z<this.data.length;z++) 
                      if (parseInt(this.data[z][k])>cnt) cnt = parseInt(this.data[z][k]);
                    trow[k] = ""+(cnt + 1);
                }
           }
        this.data[(rowId==-1)?this.data.length:rowId] = trow; 
        var s="";
        for (var j=0;j<this.data.length;j++)
          for (var i=0;i<this.fieldlist.length;i++) {

            s += this.data[j][i] + this.sepchar;
          }
        getObj(this.tblName+"_data").value = ""+(this.data.length)+this.sepchar+s;
   }
} //end of table class



function getObj(objectId,win) {
      if(IE4) {
          eval("return "+objectId);
      } else if(NS4) {
         return document.layers[objectId];
      } else if(NS6) {
         var x;
         if (win!=null) x= win.document.getElementById(objectId);
         else x= document.getElementById(objectId);
         if (x==null) {
           if (win!=null) x= win.document.getElementsByName(objectId)[0];
           else x= document.getElementsByName(objectId)[0];
         }
         return x;
      }
}

function setInnerHtml(objectId,s) {
      if(IE4) {
          eval(objectId+".innerHTML = s;");
      } else if(NS4) {
         var x = document.layers[objectId];
         x.document.open();
         x.document.write(s);
         x.document.close();
      } else if(NS6) {
         document.getElementById(objectId).innerHTML = '';
         document.getElementById(objectId).innerHTML = s;
      }
}

function setComboFromId(pCombo, id) {
    try {
      //var obj = getObj(pCombo);
      for (var i=0;i<pCombo.options.length;i++)  {
         if ((pCombo.options[i].value == id)||(pCombo.options[i].id == id)) {
           pCombo.selectedIndex = i;
           break;
         }
      }
    } catch (e) { trace("setComboFromId: "+e); }
}

function getComboSelId(pCombo) {
    var id = -1;
    try {
       id = getObj(pCombo).options[getObj(pCombo).selectedIndex].value;
    } catch (e) {}
    return id;
}

function getEditValue(pEdit,win) {
   var s = "";
   try {
     s = getObj(pEdit,win).value;
     if (s==null) s = "";
   } catch (e) { trace("getEditValue: "+e); }
   return s;
}
function setEditValue(pEdit,val,win) {
   try {
     getObj(pEdit,win).value = ((val==null)?"":val);
   } catch (e) { trace("setEditValue: "+e); }
}

function arrayswap (ar,x,y) {
  var tmp = ar[x];
  ar[x] = ar[y];
  ar[y] = tmp;
}

function validateEmail(fldId) {
  try {
    var eaddr = getObj(fldId).value;
    if (eaddr.match(/^[\w\d\.]+@[\w\d\.]+\.[\w]{2,3}$/))
       return true;
    else {
       alert("Your email address appears to be invalid");
       return false;
    }
  } catch (e) { trace("validateEmail: "+e);}
  return true;
}
 
function updateColorBox(fieldName) {
   try {
     getObj(fieldName+"_x").bgColor = "#"+(getObj(fieldName)).value; 
   } catch (e) { trace("updateColorBox: "+e); }
}

function getRadioSelect(radioName,basewindow) {
    var radios = basewindow.document.getElementsByName(radioName);
    for (var i=0;i<radios.length;i++){
         if(radios[i].checked)
             return radios[i].value
    }     
}
function getCheckValue(pChk,win) {
   var s = false;
   try {
     s = getObj(pChk,win).checked;
   } catch (e) { trace("getEditValue: "+e); }
   return s;
}
function setCheckValue(pChk,val,win) {
   try {
     getObj(pChk,win).checked = (val==true)||(val=='true');
   } catch (e) { trace("setChkValue: "+e); }
}

function setRadioSelect(radioName,val,basewindow) {
    var radios = basewindow.document.getElementsByName(radioName);
    for (var i=0;i<radios.length;i++){
         if(radios[i].value==val)
             radios[i].checked=true;
    }     
}

function trace(s) {
  // alert(s);
}

function URLencode(sStr) {
    return escape(sStr).replace(/\+/g, '%2C').replace(/\"/g,'%22').replace(/\'/g, '%27');
}

function panman(hidefld,menuspan,thisprop,menuitems) { //panman object
   this.mitems = menuitems;
   this.hfld = hidefld;
   this.lastpan = "";
   this.menuspan = menuspan;
   this.thisprop = thisprop;
   addToInitList("window."+thisprop+".init()");
   
   this.drawMenu = function(curPan) {
      var mspantxt = "<TABLE border=0 cellspacing=2 cellpadding=0 width=100%><TR>";
      for (var i=0;i<this.mitems.length;i++) 
         if (this.mitems[i]==curPan)
            mspantxt += "<TD bgcolor=#CCCCF2 align=center><b>"+this.mitems[i]+"</b></TD>";
         else
            mspantxt += "<TD bgcolor=#EEEEEE align=center><A href='javascript:window."+this.thisprop+".showPanel(\""+this.mitems[i]+"\")'><b>"+this.mitems[i]+"</b></a></TD>";
      setInnerHtml(this.menuspan,mspantxt + "</TR></TABLE>");
   }
   
   this.showPanel = function(s) {  
       this.drawMenu(s);
       if (window.document.getElementById(s)==null) return;
       window.document.getElementById(s).style.display='block';
       window.document.getElementById(this.hfld).value = s;
       if (this.lastpan!="" && this.lastpan!=s)
         window.document.getElementById(this.lastpan).style.display='none';  
       this.lastpan=s;
   }

   this.hidePanels = function() { 
     if (window.document.getElementById(this.mitems[0])==null) return;
     for (var i=0;i<this.mitems.length;i++)
        if (window.document.getElementById(this.mitems[i])!=null)
           window.document.getElementById(this.mitems[i]).style.display='none';
   }

   this.init = function() {
      this.hidePanels();
      this.showPanel(getObj(this.hfld).value);
   }
}

function addToInitList(evalStr) {
   if (window.initlist == null)  window.initlist = new Array(0);
   window.initlist[window.initlist.length] = evalStr;
   if (window.onload==null) window.onload=listinit;
}

function listinit() {
   if (window.initlist!=null)
   for (var i=0; i<window.initlist.length;i++) 
      eval(window.initlist[i]);
}

// Image.prototype.george='something';
//getElementsByTagName('img')[0].getAttribute('src')

