//<SCRIPT>

var UIRules = new _UIRules();

function _UIRules() {
   this.ApolloInitialSetup = _ApolloInitialSetup;
   this.ApolloValidatePage = _ApolloValidatePage;

   this.ApolloSetInitialize = _EmptyFunction;
   this.ApolloSetFieldUIRules = _EmptyFunction;
   this.ApolloSetNotifyFields = _EmptyFunction;
   this.MyValidatePage = _EmptyFunction;

   this.ApolloNotifyItem = _ApolloNotifyItem;
   this.ApolloNotifyIntItem = _ApolloNotifyIntItem;
   this.ApolloNotifyDblItem = _ApolloNotifyDblItem;
   this.ApolloNotifyDatItem = _ApolloNotifyDatItem;
   this.ApolloNotifyTxtItem = _ApolloNotifyTxtItem;
   this.ApolloNotifySltItem = _ApolloNotifySltItem;
   this.ApolloNotifyOptItem = _ApolloNotifyOptItem;
   this.ApolloNotifyChkItem = _ApolloNotifyChkItem;

   this.ApolloNotifyField = _ApolloNotifyField;
   this.ApolloNotifyIntField = _ApolloNotifyTxtField;
   this.ApolloNotifyDblField = _ApolloNotifyTxtField;
   this.ApolloNotifyDatField = _ApolloNotifyDatField;
   this.ApolloNotifyTxtField = _ApolloNotifyTxtField;
   this.ApolloNotifySltField = _ApolloNotifySltField;
   this.ApolloNotifyOptField = _ApolloNotifyOptField;
   this.ApolloNotifyChkField = _ApolloNotifyChkField;
}

function _EmptyFunction() {

}

function _Property(param) {
   var aFieldName = param[0].split("_");
   this.fieldType = aFieldName[0]
   this.level = parseInt(aFieldName[2],10);
   if (isNaN(this.level)) {
      this.level = aFieldName[2];
   }
   this.fieldCode = parseInt(aFieldName[1],10);
   if (isNaN(this.fieldCode)) {
      this.fieldCode = aFieldName[1];
   }
   if (this.fieldType=="txt") {
      this.value = param[1][0].toString();
   } else if (this.fieldType=="dbl") {
      this.value = NullZero(parseFloat(param[1][0],10));
      this.min = parseFloat(param[1][1],10);
      this.max = parseFloat(param[1][2],10);
      this.dft = NullZero(parseFloat(param[1][3],10));
      this.minusable = 0
   } else {
      this.value = NullZero(parseInt(param[1][0],10));
      this.min = parseInt(param[1][1],10);
      this.max = parseInt(param[1][2],10);
      this.dft = NullZero(parseInt(param[1][3],10));
      this.minusable = 0
   }
   this.digits = NullZero(parseInt(param[1][4],10));
   this.available = NullZero(parseInt(param[1][5],10));
   this.list = param[1][6];
   this.fullList = param[1][7];
   this.errcode = parseInt(param[1][8]);
   if (this.available & RC_UNAVAILABLE_ALWAYS) {
      this.alwaysDisabled = true;
   }
   if (this.errcode) {
      var fld = document.all("ErrMsg_"+this.fieldCode+"_"+this.errcode);
      if (fld) {
         fld.style.display = "block"
         document.all("HTMLDirtyPage").value = 2;
      }
      else {
         alert("Error: "+this.fieldCode+"; "+this.errcode);
      }
   }
}

function _ApolloInitialSetup(arrProp) {
   EnableKeyCheck();
   
   var len = arrProp.length;
   var oParam;

   if (len==0) return;
   var PropertyArray = new Array(len-1);
   for(var i=0; i<=len-1; i++) {
      PropertyArray[i] = new _Property(arrProp[i]);
      var fld = FindObj(arrProp[i][0]);
      if (fld) {
         fld.Property = PropertyArray[i];
         if (fld.length) {
            for (var j=0; j<fld.length; j++)
               fld[j].Property = PropertyArray[i];
         }
         _initOneField(fld);
         UIRules.ApolloNotifyField(fld);
      }
   }
   UIRules.PropertyArray = PropertyArray;
   UIRules.ApolloSetInitialize();
}

function _initOneField(fld) {
   switch (fld.Property.fieldType) {
      case "slt":
         if (!fld.onchange) 
            fld.onchange = _EditValidate;
         break;
      case "opt":
         if (fld.length) {
            for (var i=0;i<fld.length;i++) {
               if (!fld.item(i).onclick) 
                  fld.item(i).onclick = _EditValidate;
            }
         } else {
            if (!fld.onclick) 
               fld.onclick = _EditValidate;
         }
         break;
      case "chk":
         if (!fld.onclick) 
            fld.onclick = _EditValidate;
         fld.value = 1;
         break;
      case "dat":
         fld.onfocus = _FieldOnFocus;
         if (!fld.onblur) 
            fld.onblur = _EditValidate;
         break;
      case "dbl":
         fld.onfocus = _FieldOnFocus;
         if (!fld.onblur) 
            fld.onblur = _EditValidate;
         break;
      case "int":
         fld.onfocus = _FieldOnFocus;
         if (!fld.onblur) 
            fld.onblur = _EditValidate;
         break;
      case "txt":
         fld.onfocus = _FieldOnFocus;
         if (!fld.onblur) 
            fld.onblur = _EditValidate;
         break;
      default:
         break;
   }
}

function _EditValidate() {
   var fld = this;
   
   document.all("HTMLDirtyPage").value=1
   
   switch (fld.Property.fieldType) {
      case "slt":
      _sltEditValidate(fld);
        break;
      case "opt":
        _optEditValidate(fld);
        break;
      case "chk":
      _chkEditValidate(fld);
        break;
      case "dat":
      _datEditValidate(fld);
        break;
      case "dbl":
      _dblEditValidate(fld);
        break;
      case "int":
      _intEditValidate(fld);
        break;
      case "txt":
      _txtEditValidate(fld);
        break;
      default:
        break;
   }
}

function _ApolloValidatePage() {
   var retVar;
   if (UIRules.currField) {
      retVar = UIRules.currField.onblur;
      if (retVar & RC_INVALID) return retvar;
      if (UIRules.currField) {
         UIRules.currField.blur();
      }
   }
   if (UIRules.PropertyArray==null) {
      return false;
   }
   for (var i=0; i<UIRules.PropertyArray.length; i++) {
      var oProp = UIRules.PropertyArray[i];
      if (oProp.required) {
         if (oProp.value == 0 && !(oProp.available & (RC_NOEDIT | RC_UNAVAILABLE))) {			                        
			alert("ÇëÌîÐ´±¾À¼×ÊÁÏ!");          
			var fld = FindObj(oProp.fieldType + "_" + oProp.fieldCode + "_" + oProp.level + "_");
            if(oProp.fieldType != "slt" && fld.length>1) fld=fld[0];
            if (fld) fld.focus();
            return true;
         }
      }
   }
   fld = FindObj("DefaultFields");
   if (fld) {
      fld.value = "";
      for (var i=0; i<UIRules.PropertyArray.length; i++) {
         var oProp = UIRules.PropertyArray[i];
         if (!(oProp.available & (RC_NOEDIT | RC_UNAVAILABLE))) {
            if (((oProp.fieldType=="chk" || oProp.fieldType=="opt") && oProp.value == 0) || 
               ((oProp.fieldType=="txt" || oProp.fieldType=="dat") && oProp.value == "") ||
               (oProp.fieldType=="slt" && oProp.value == -1)) {
               fld.value += (oProp.fieldType + "_" + oProp.fieldCode + "_" + oProp.level + "_" + ";");
            }
         }
      }  
   }
   return UIRules.MyValidatePage();
}

function Param(data, action, internal, retValue, errMsg){
   this.data = data;
   this.action = action;
   this.internal = internal;
   this.retValue = retValue;
   this.errMsg = errMsg;
}


function FindProperty(sFieldCode, lLevel) {
   for (var i=0; i<UIRules.PropertyArray.length; i++) {
      if (UIRules.PropertyArray[i].level==lLevel && UIRules.PropertyArray[i].fieldCode==sFieldCode) {
         return UIRules.PropertyArray[i];
      }
   }
   return null;
}

function FindField(sFieldCode, lLevel) {
   var prop = FindProperty(sFieldCode, lLevel);
   if (prop) {
      var fld = FindObj(prop.fieldType + "_" + sFieldCode + "_" + lLevel + "_");
      if (fld) return fld;
      return FindObj(prop.fieldType + "_" + sFieldCode + "_" + lLevel);
   }
   return null;
}

function EnableAllFieldsExcept(lEnable, sFieldCode) {
   for (var i=0; i<UIRules.PropertyArray.length; i++) {
      var prop = UIRules.PropertyArray[i];
      var fld = FindObj(prop.fieldType + "_" + prop.fieldCode + "_" + prop.level + "_");
      if (fld && prop.fieldCode != sFieldCode)
         if (prop.fieldType!="opt")
            fld.disabled = (lEnable) ? (prop.alwaysDisabled || (prop.available & (RC_UNAVAILABLE | RC_NOEDIT))) : true;
         else
            for (var j=0; j<fld.length; j++)
               fld.item(j).disabled = (lEnable) ? (prop.alwaysDisabled || (prop.available & (RC_UNAVAILABLE | RC_NOEDIT))) : true;
   }
   return null;
}

function _FieldOnFocus() {
   var fld = this;
   var oProp = fld.Property;
   UIRules.currField = fld;
   if (oProp.fieldType=="dbl" || oProp.fieldType=="int") {
      if (oProp.value == 0 && (oProp.displayFormat & DISPLAY_FORMAT_NOSHOWZERO))
         fld.value = "";
      else
         fld.value = fld.Property.value;
   }
   fld.select();
}

function _intEditValidate(fld) {
   //var fld = this;
   var value = parseInt(fld.value, 10);
   if (isNaN(value)) value = 0;
   var param = new Param(value, MC_SETITEM, false);
   UIRules.ApolloNotifyIntItem(fld, param);

   fld.value = fld.Property.value;
   if (param.retValue & RC_INVALID) {
         alert(param.errMsg);
         fld.focus(); 
   } else {
      var oProp = fld.Property;
      if (oProp.value == 0 && (oProp.displayFormat & DISPLAY_FORMAT_NOSHOWZERO))
         fld.value = "";
//      else if (oProp.value == -1024)
//         fld.value = "N/A";
      else if (oProp.displayFormat & DISPLAY_FORMAT_NOCOMMA)
         fld.value = oProp.value;
      else
         fld.value = FormatDouble(NullZero(oProp.value),0);
      UIRules.currField = null;
   }
}

function _txtEditValidate(fld) {
   //var fld = this;
   value = fld.value;
   var param = new Param(value, MC_SETITEM, false);
   UIRules.ApolloNotifyTxtItem(fld, param);

   fld.value = fld.Property.value;
   if (param.retValue & RC_INVALID) {
         alert(param.errMsg);
         fld.focus(); 
   } else {
      UIRules.currField = null;
   }
}

function _datEditValidate(fld) {
   //var fld = this;
   var value = ConvertDateStringToLong(fld.value);
   var param = new Param(value, MC_SETITEM, false);
   UIRules.ApolloNotifyDatItem(fld, param);

   fld.value = ConvertLongToDateString(fld.Property.value);
   if (param.retValue & RC_INVALID) {
         alert(param.errMsg);
         fld.focus(); 
   } else {
      UIRules.currField = null;
   }
}

function _dblEditValidate(fld) {
   //var fld = this;
   var value = parseFloat(trim(fld.value));
   if (isNaN(value)) value = 0;
   var param = new Param(value, MC_SETITEM, false);
   UIRules.ApolloNotifyDblItem(fld, param);  
   if (param.retValue & RC_INVALID) {
         fld.value = fld.Property.value;
           alert(param.errMsg);
         fld.focus(); 
   } else {
//      if (fld.Property.value == -1024 || fld.Property.value == -102400)
//         fld.value = "N/A"
//      else
         fld.value = FormatDouble(fld.Property.value,fld.Property.digits);
      UIRules.currField = null;
   }
}

function _chkEditValidate(fld) {   
   var value = fld.checked?1:0;
   var param = new Param(value, MC_SETITEM, false);
   UIRules.ApolloNotifyChkItem(fld, param);
}

function _sltEditValidate(fld) { 
   var value = 0;
   if (fld.selectedIndex != -1){
      value = fld.value; //options[oField.selectedIndex].value;
   }
   var param = new Param(value, MC_SETITEM, false);
   UIRules.ApolloNotifySltItem(fld, param);
}

function _optEditValidate(fld) {   
   var value = fld.value;
   var param = new Param(value, MC_SETITEM, false);
   UIRules.ApolloNotifyOptItem(fld, param);
}

function _ApolloNotifyItem(fld, param) {
   if (!fld.Property) {
      if (fld.length && fld[0].Property) {
         fld.Property = fld[0].Property;
      } else {
         return true;
      }
   }
   switch (fld.Property.fieldType) {
      case "txt":
         UIRules.ApolloNotifyTxtItem(fld, param);
         break;
      case "int":
         UIRules.ApolloNotifyIntItem(fld, param);
         break;
      case "dbl":
         UIRules.ApolloNotifyDblItem(fld, param);
         break;
      case "dat":
         UIRules.ApolloNotifyDatItem(fld, param);
         break;
      case "slt":
         UIRules.ApolloNotifySltItem(fld, param);
         break;
      case "opt":
         UIRules.ApolloNotifyOptItem(fld, param);
         break;
      case "chk":
         UIRules.ApolloNotifyChkItem(fld, param);
         break;
   }
}

function _ApolloNotifyIntItem(fld, param) {
   UIRules.ApolloSetFieldUIRules(fld);
   var oProp = fld.Property;
   var value, save, available;
   
   param.retValue = 0;
   value = oProp.value;
   save = value;
   available = oProp.available;

   if (available & RC_UNAVAILABLE) {//Disable and no value
      if (value != 0) {
         value = 0;
         oProp.value = value;
         param.retValue |= RC_MODIFIED;
      }
   } else {
      if(param.action & MC_SETITEM) {
         if(param.action & MC_DFLTITEM) {
            if (oProp.dft!=null) {
               value = oProp.dft;
            } else {
               value = 0;
            }
         } else if (param.data != null) {
            value = param.data;
         }
         
         if (oProp.checkMinMax) {
         value = oProp.checkMinMax(value, save, param);
         } else {
         if (!isNaN(oProp.min) && value < oProp.min) {
            value = (save>oProp.min) ? save : oProp.min;
            param.retValue = RC_INVALID;
            param.errMsg = "The minimum value is " + oProp.min;
         } else if (!isNaN(oProp.max) && value > oProp.max) {
            value = (save<oProp.max) ? save : oProp.max;
            param.retValue = RC_INVALID;
            param.errMsg = "The maximum value is " + oProp.max;
         }
       }
         if (value != save) {
            oProp.value = value;
            param.retValue |= RC_MODIFIED;
         }
      }
   } 
   param.data = value;

   if((param.action & MC_NOSETCHILD) == 0) {
      if (param.retValue & RC_MODIFIED) {
         UIRules.ApolloSetNotifyFields(fld, param);
      }
   }
   
   if (param.action & MC_NOTIFY) {
      UIRules.ApolloNotifyIntField(fld);
   }
}

function _ApolloNotifyDblItem(fld, param) {
   UIRules.ApolloSetFieldUIRules(fld);
   var oProp = fld.Property;
   var value, save, available;

   param.retValue = 0;
   value = oProp.value;
   save = value;
   available = oProp.available;

   if (available & RC_UNAVAILABLE) {//Disable and no value
      if (value != 0) {
         value = 0;
         oProp.value = value;
         param.retValue |= RC_MODIFIED;
      }
   } else {
      if (param.action & MC_SETITEM) {
         if (param.action & MC_DFLTITEM) {
            if (oProp.dft!=null) {
               value = oProp.dft;
            } else {
               value = 0;
            }
         } else if (param.data != null) {
            value = RoundDouble(param.data,oProp.digits);
         }
         if (oProp.checkMinMax) {
         value = oProp.checkMinMax(value, save, param);
         } else {
         if (!isNaN(oProp.min) && value < oProp.min) {
            value = (save>oProp.min) ? save : oProp.min;
            param.retValue = RC_INVALID;
            param.errMsg = "The minimum value is " + FormatDouble(oProp.min, oProp.digits);
         } else if (!isNaN(oProp.max) && value > oProp.max) {
            value = (save<oProp.max) ? save : oProp.max;
            param.retValue = RC_INVALID;
            param.errMsg = "The maximum value is " + FormatDouble(oProp.max, oProp.digits);
         }
       }
         if (value != save) {
            oProp.value = value;
            param.retValue |= RC_MODIFIED;
         }
      }
   } 
   param.data = value;

   if ((param.action & MC_NOSETCHILD) == 0) {
      if (param.retValue & RC_MODIFIED) {
         UIRules.ApolloSetNotifyFields(fld, param);
      }     
   }
   
   if (param.action & MC_NOTIFY) {
      UIRules.ApolloNotifyDblField(fld);
   }
}

function _ApolloNotifySltItem(fld,param) {
   UIRules.ApolloSetFieldUIRules(fld);
   var oProp = fld.Property;
   var value, save, available, list;
   
   param.retValue = 0;
   
   value = oProp.value;
   save = value;
   
   available = oProp.available;
   if (available & RC_UNAVAILABLE) {//Disable and no value
      if(value != 0) {
         value = 0;
         oProp.value = value;
         param.retValue |= RC_MODIFIED;
      }
   } else {
      if (param.action & MC_SETITEM) {
         if (param.action & MC_DFLTITEM) {
            value = oProp.dft;
         } else if (param.data != null) {
            value = param.data;
         }
         list = fld.Property.list;
         if (list.length && isInList(list,value)<0) value = list[0][0]; 

         if (value != save) {
            oProp.value = value;
            param.retValue |= RC_MODIFIED;
         }
      }
   } 
   param.data = value;

   if ((param.action & MC_NOSETCHILD) == 0) {
      if (param.retValue & RC_MODIFIED) {
         UIRules.ApolloSetNotifyFields(fld, param);
      }
   }

   if (param.action & MC_NOTIFY) {
      UIRules.ApolloNotifySltField(fld);
   }
}

function _ApolloNotifyDatItem(fld, param) {
   UIRules.ApolloSetFieldUIRules(fld);
   var oProp = fld.Property;
   var value, save, available;

   param.retValue = 0;
   value = NullZero(oProp.value);        
   save = value;
   available = oProp.available;
   if (available & RC_UNAVAILABLE) {//Disable and no value
      if (value != 0) {
         value = 0;
         oProp.value = 0;
         param.retValue |= RC_MODIFIED;
      }
   } else {
      if (param.action & MC_SETITEM) {
         if (param.action & MC_DFLTITEM) {
            if (oProp.dft!=null) {
               value = oProp.dft;
            } else {
               value = 0;
            }
         } else if (param.data != null) {       
         value = param.data;
         }
         var minDate = oProp.min;
         var maxDate = oProp.max;
         if (!isNaN(oProp.min) && value < minDate && value > 0) {
            value = (save>minDate) ? save : minDate;
            param.retValue = RC_INVALID;
            param.errMsg = "The earliest date is " + ConvertLongToDateString(oProp.min);
         } else if (!isNaN(oProp.max) && value > maxDate) {
            value = (save<maxDate) ? save : maxDate;
            param.retValue = RC_INVALID;
            param.errMsg = "The latest date is " + ConvertLongToDateString(oProp.max);
         }
         if (value != save) {
            oProp.value = value;
            param.retValue |= RC_MODIFIED;
         }
      }
   } 
   param.data = value;

   if ((param.action & MC_NOSETCHILD) == 0) {
      if (param.retValue & RC_MODIFIED) {
         UIRules.ApolloSetNotifyFields(fld, param);
      }     
   }
   
   if (param.action & MC_NOTIFY) {
      UIRules.ApolloNotifyDatField(fld);
   }
}

function _ApolloNotifyOptItem(fld, param) {
   UIRules.ApolloSetFieldUIRules(fld);
   var oProp = fld.Property;
   var value, save, available;
   
   param.retValue = 0;
   value = oProp.value;
   save = value;
   available = oProp.available;

   if (available & RC_UNAVAILABLE) {//Disable and no value
      if (value) {
         value = 0;
         oProp.value = value;
         param.retValue |= RC_MODIFIED;
      }
   } else {
      if (param.action & MC_SETITEM) {
         if (param.action & MC_DFLTITEM) {
            if (oProp.dft!=null) {
               value = oProp.dft;
            } else if (fld.length) {
               value = fld[0].value;
            } else {
               value = fld.value;
            }
         } else if(param.data != null) {
            value = param.data;
         }
         var list = fld.Property.list;
         if (list && list.length && isInList(list,value)<0) value = list[0][0]; 
         
         if (value != save) {
            oProp.value = value;
            param.retValue |= RC_MODIFIED;
         }
      }
   } 
   param.data = value;

   if ((param.action & MC_NOSETCHILD) == 0) {
      if (param.retValue & RC_MODIFIED) {
         UIRules.ApolloSetNotifyFields(fld, param);
      }     
   }
   
   if (param.action & MC_NOTIFY) {
      UIRules.ApolloNotifyOptField(fld);
   }
}

function _ApolloNotifyTxtItem(fld, param) {
   UIRules.ApolloSetFieldUIRules(fld);
   var oProp = fld.Property;
   var value, save, available;
   
   param.retValue = 0;
   value = oProp.value;
   save = value;
   available = oProp.available;

   if (available & RC_UNAVAILABLE) {//Disable and no value
      if (value) {
         value = "";
         oProp.value = value;
         param.retValue |= RC_MODIFIED;
      }
   } else {
      if (param.action & MC_SETITEM) {
         if (param.action & MC_DFLTITEM) {
            if (oProp.dft!=null) {
               value = oProp.dft;
            } else {
               value = "";
            }
         } else if (param.data != null) {
            value = param.data;
         }
         
         if (value != save) {
            oProp.value = value;
            param.retValue |= RC_MODIFIED;
         }
      }
   } 
   param.data = value;

   if ((param.action & MC_NOSETCHILD) == 0) {
      if (param.retValue & RC_MODIFIED) {
         UIRules.ApolloSetNotifyFields(fld, param);
      }     
   }
   
   if (param.action & MC_NOTIFY) {
      UIRules.ApolloNotifyField(fld);
   }

}

function _ApolloNotifyChkItem(fld, param) {
   UIRules.ApolloSetFieldUIRules(fld);
   var oProp = fld.Property;
   var value, save, available;
   
   param.retValue = 0;
   value = oProp.value;
   save = value;
   available = oProp.available;

   if (available & RC_UNAVAILABLE) {//Disable and no value
      if (value) {
         value = 0;
         oProp.value = value;
         param.retValue |= RC_MODIFIED;
      }
   } else {
      if (param.action & MC_SETITEM) {
         if (param.action & MC_DFLTITEM) {
            if (oProp.dft!=null) {
               value = oProp.dft;
            } else {
               value = 0;
            }
         } else if(param.data != null) {
            value = param.data;
         }
         
         if (value != save) {
            oProp.value = value;
            param.retValue |= RC_MODIFIED;
         }
      }
   } 
   param.data = value;

   if ((param.action & MC_NOSETCHILD) == 0) {
      if (param.retValue & RC_MODIFIED) {
         UIRules.ApolloSetNotifyFields(fld, param);
      }     
   }
   
   if (param.action & MC_NOTIFY) {
      UIRules.ApolloNotifyChkField(fld);
   }

}

function _ApolloNotifyField(fld) {
   switch (fld.Property.fieldType) {
      case "txt":
         UIRules.ApolloNotifyTxtField(fld);
         break;
      case "int":
         UIRules.ApolloNotifyIntField(fld);
         break;
      case "dbl":
         UIRules.ApolloNotifyDblField(fld);
         break;
      case "dat":
         UIRules.ApolloNotifyDatField(fld);
         break;
      case "slt":
         UIRules.ApolloNotifySltField(fld);
         break;
      case "opt":
         UIRules.ApolloNotifyOptField(fld);
         break;
      case "chk":
         UIRules.ApolloNotifyChkField(fld);
         break;
   }
}

function NotifyBuddy(fld,j) {
	var oBuddy = FindObj("lbl"+fld.name.substring(3));

	if(oBuddy) {
		if(NotifyBuddy.arguments.length>=2) {
			oBuddy[j].disabled = fld.disabled;
		} else {
			oBuddy.disabled = fld.disabled;
		}
	}
}

function _ApolloNotifyDatField(fld) {
   var oProp = fld.Property;
   if (oProp.alwaysDisabled || (oProp.available & RC_UNAVAILABLE)) {
      fld.value = "";
   } else {
      fld.value = ConvertLongToDateString(oProp.value);
   }
   fld.disabled = (oProp.alwaysDisabled || (oProp.available & (RC_UNAVAILABLE | RC_NOEDIT)));
   NotifyBuddy(fld);
}

function _ApolloNotifyTxtField(fld) {
   var oProp = fld.Property;
   if (oProp.alwaysDisabled || (oProp.available & RC_UNAVAILABLE)) {
      fld.value = "";
   } else if (oProp.fieldType=="dbl") {
      if (oProp.value == -1024 || oProp.value == -102400)
         fld.value = "N/A"
      else
         fld.value = FormatDouble(oProp.value, oProp.digits);
   } else if (oProp.fieldType=="int") {
      if (oProp.value == 0 && (oProp.displayFormat & DISPLAY_FORMAT_NOSHOWZERO))
         fld.value = "";
      else if (oProp.value == -1024)
         fld.value = "N/A";
      else if (oProp.displayFormat & DISPLAY_FORMAT_NOCOMMA)
         fld.value = oProp.value;
      else
         fld.value = FormatDouble(NullZero(oProp.value),0);
   } else {
      fld.value = oProp.value;
   }
   fld.disabled = (oProp.alwaysDisabled || (oProp.available & (RC_UNAVAILABLE | RC_NOEDIT)));
   NotifyBuddy(fld);
}

function _ApolloNotifyOptField(fld) {
   if (fld.length) {
      for(var j=0; j<fld.length; j++){
         _ApolloNotifyOptField(fld[j]);
         NotifyBuddy(fld[j],j);
      }
   } else {
      var oProp = fld.Property;
      if (oProp.alwaysDisabled || (oProp.available & RC_UNAVAILABLE)) {
         fld.checked = false;
      } else {
         fld.checked = (fld.value == oProp.value);
      }
      if (oProp.alwaysDisabled || (oProp.available & (RC_UNAVAILABLE | RC_NOEDIT))) {
         fld.disabled = true;
      } else if (oProp.list && oProp.list.length) {
         fld.disabled = isInList(oProp.list, fld.value) < 0;
      } else {
         fld.disabled = false;
      }      
   }
}

function _ApolloNotifyChkField(fld) {
   var oProp = fld.Property;
   if (oProp.alwaysDisabled || (oProp.available & RC_UNAVAILABLE)) {
      fld.checked = false;
   } else {
      fld.checked = (fld.value == oProp.value);
   }
   fld.disabled = (oProp.alwaysDisabled || (oProp.available & (RC_UNAVAILABLE | RC_NOEDIT)));
   NotifyBuddy(fld);
}

function _ApolloNotifySltField(fld) {
   var oProp = fld.Property;
   if (oProp.alwaysDisabled || (oProp.available & RC_UNAVAILABLE)) {
      fld.length = 0;
   } else {
      //PopulateList(fld, oProp.list);
      selectItemFromList(fld, oProp.value);
   }
   fld.disabled = (oProp.alwaysDisabled || (oProp.available & (RC_UNAVAILABLE |  RC_NOEDIT)));
   NotifyBuddy(fld);
}

function EnableKeyCheck() {
   if (document.layers) {
      document.captureEvents(Event.MOUSEMOVE);
      document.captureEvents(Event.KEYPRESS);
   }
   document.onkeypress = _KeyPressHandler;
}

function _KeyPressHandler(e) {
   var bIsIE = (document.all)? true:false;
   var kCode = (bIsIE)? window.event.keyCode : e.which;
   if (kCode == 8) return;    // back
   var fld = (bIsIE)? window.event.srcElement : e.target;
   if (fld.Property==null) return;
   var strValue = fld.value;

   switch (fld.Property.fieldType) {
      case "int":
         if ((kCode < 48 || kCode > 57) && 
            !(fld.Property.minusable && kCode == 45)) { // 0 to 9
            return IgnoreKeyStroke();
         }
         break;
      case "dbl":
         if ((kCode < 48 || kCode > 57) &&
            !(fld.Property.minusable && kCode == 45) &&
            !(kCode == 46 && strValue.indexOf(".") == -1)) { // dot: 46
            return IgnoreKeyStroke();
         }
         break;
      case "dat":
         if (kCode != 45 && (kCode < 47 || kCode > 57)) {// "-": 45, "/": 47
            return IgnoreKeyStroke();
         }
         break;
   }
}

function IgnoreKeyStroke() {
   var bIsIE = (document.all)? true:false;
   if (bIsIE) window.event.keyCode = 0; 
   return false;
}

function colorMe(whatObj){
   whatObj.bgColor = "#FFFF99";
    whatObj.cells[0].borderColor = "#FFFF99";
    whatObj.cells[1].borderColor = "#FFFF99";
}
function unColorMe(whatObj){
   whatObj.bgColor = "#CCCC99";
    whatObj.cells[0].borderColor = "#CCCC99";
    whatObj.cells[1].borderColor = "#CCCC99";
}

function isInSet(params) {
    
    if (arguments.length < 2) {return false};
    for (var ptr=1; ptr <= arguments.length; ptr++) {
		if (arguments[0] == arguments[ptr]){
			return true;
		}
	}
	return false;
}

