function CancelDefaultAction() {
   //This function prevents the screen's default submit action from activating.
   //The default submit action is usually the CANCEL button.
   //****** This works for IE. Does not work for Mozzilla. *******
   event.returnValue=false;
   event.cancel=true;
}

function RemoveBlanks(s1) {
   //Returns string s1 with all leading, trailing & embded blanks remmoved.
   var s2 = new String();
   var s3 = new String();
   for (i=0; i<s1.length; i++) {
      s2 = s1.substr(i,1);
      if (s2 != " ")
         s3 = s3 + s2;
   }
   return s3;
}

function FixPeriod(obj) {
   obj.value = j_CvtPeriod_InpToDsp(obj.value);
}

function FixDate(obj) {
   obj.value = j_CvtDate_InpToDsp(obj.value);
}

function FixTime(obj) {
   obj.value = j_CvtTime_InpToDsp(obj.value);
}

//vvvvvvvvvvvvvvvvvvvvvv
function j_CvtPeriod_InpToDsp(InputPeriod) {
   var s1 = new String(Trim(InputPeriod));
   if (isValidDspPeriod(s1)) return s1;
   
   //If it looks like a YYYYMM period without delimiters then attempt to insert delimiters
   if (s1.length==6 && !isNaN(s1))  {
      var s2 = s1.substr(0,4) + "/" + s1.substr(4,2);
      if (isValidDspPeriod(s2)) return s2;
   }

   //If it looks like a YYMM period without delimiters then attempt to insert delimiters
   if (s1.length==4 && !isNaN(s1))  {
      var s2 = new String();
      if (s1.substr(0,2) < "50") 
         s2 = "20" + s1.substr(0,2) + "/" + s1.substr(2,2);
      else
         s2 = "19" + s1.substr(0,2) + "/" + s1.substr(2,2);
      if (isValidDspPeriod(s2)) return s2;
   }
   
   // Not recognised as a period so just return the original string
   return s1;
}
//vvvvvvvvvvvvvvvvvvvvvv

function j_CvtDate_InpToDsp(InputDate) {
   var s1 = new String(Trim(InputDate));
   if (isValidDspDate(s1)) return s1;
   
   //If it looks like a DDMMYYYY date without delimiters then attempt to insert delimiters
   if (s1.length==8 && !isNaN(s1))  {
      var s2 = s1.substr(0,2) + "/" + s1.substr(2,2) + "/" + s1.substr(4,4);
      if (s2 == "00000000") return "00/00/0000";
      if (s2 == "99999999") return "99/99/9999";
      if (isValidDspDate(s2)) return s2;
   }

   //If it looks like a DDMMYY date without delimiters then attempt to insert delimiters
   if (s1.length==6 && !isNaN(s1))  {
      if (s1 == "000000") return "00/00/0000";
      if (s1 == "999999") return "99/99/9999";
      var s2 = new String();
      if (s1.substr(4,2) < "50") 
         s2 = s1.substr(0,2) + "/" + s1.substr(2,2) + "/20" + s1.substr(4,2);
      else
         s2 = s1.substr(0,2) + "/" + s1.substr(2,2) + "/19" + s1.substr(4,2);
      if (isValidDspDate(s2)) return s2;
   }

   //If it looks like DD/MM/YY then attempt to insert the extra YY
   if (s1.length==8 && !isNaN(s1.substr(0,2) + s1.substr(3,2) + s1.substr(6,2)) 
      && s1.substr(2,1)=="/" && s1.substr(5,1)=="/") {
      if (s1 == "00/00/00") return "00/00/0000";   // 01234567
      if (s1 == "99/99/99") return "99/99/9999";   // dd/mm/yy
      var s2 = new String();
      if (s1.substr(6,2) < "50")
         s2 = s1.substr(0,6) + "20" + s1.substr(6,2);
      else
         s2 = s1.substr(0,6) + "19" + s1.substr(6,2);
      if (isValidDspDate(s2)) return s2;
   }

   //If it looks like D/MM/YYYY then insert a '0' in place of the missing D
   //This type of date might be copied from an excel spreadsheet.
   if (s1.length==9 && !isNaN(s1.substr(0,1) + s1.substr(2,2) + s1.substr(5,4)) 
      && s1.substr(1,1)=="/" && s1.substr(4,1)=="/") {
      if (s1 == "0/00/00") return "00/00/0000";   // 01234567
      return '0' + s1;
   }

   //If it looks like YYYY/MM/DD then rearrange to DD/MM/YYYY
   if (s1.length==10 && !isNaN(s1.substr(0,4) + s1.substr(5,2) + s1.substr(8,2)) 
      && s1.substr(4,1)=="/" && s1.substr(7,1)=="/") {
      return s1.substr(8,2) + "/" + s1.substr(5,2) + "/" + s1.substr(0,4);
   }

   // Not recognised as a date so just return the original string
   return s1;
}

function j_CvtTime_InpToDsp(InputTime) {
   var s1 = new String(Trim(InputTime));
   if (isValidDspTime(s1)) return s1;
   
   //If it looks like HHMM without delimiters then attempt to insert delimiters
   if (s1.length==4 && !isNaN(s1))  {
      var s2 = s1.substr(0,2) + ":" + s1.substr(2,2);
      if (s1 == "0000") return "00:00";
      if (s1 == "9999") return "99:99";
      if (isValidDspTime(s2)) return s2;
   }

   //If it looks like HHxMM then replace the delimiter (the middle char) with ':'
   if (s1.length==5 && !isNaN(s1.substr(0,2) + s1.substr(3,2)) && isNaN(s1.substr(2,1)) ) {
      s2 = s1.substr(0,2) + ":" + s1.substr(3,2);
      if (isValidDspTime(s2)) return s2;
   }

   // Not recognised as a Time so just return the original string
   return s1;
}

function isValidDspPeriod(DspPeriod) {     //0123456
   // Returns true only if DspPeriod is like yyyy/mm
   if (DspPeriod.length!=7) return false;
   if (DspPeriod.substr(4,1)!="/") return false;
   if (isNaN(DspPeriod.substr(0,4))) return false;
   if (isNaN(DspPeriod.substr(5,2))) return false;
   if ((DspPeriod.substr(0,4)<"1000") || (DspPeriod.substr(0,4)>"3000"))  return false;
   if (DspPeriod.substr(5,2)<"01" || (DspPeriod.substr(5,2)>"12"))  return false;
   return true;
}
function isValidDspDate(DspDate) {       //0123456789
   // Returns true only if DspDate is like dd/mm/yyyy
   // Allows "00" or "99" for dd or mm.
   // Allows "0000" or "9999" for yyyy.
   if (DspDate.length!=10) return false;
   if (DspDate.substr(2,1)!="/" || DspDate.substr(5,1)!="/") return false;
   if (isNaN(DspDate.substr(0,2))) return false;
   if (isNaN(DspDate.substr(3,2))) return false;
   if (isNaN(DspDate.substr(6,4))) return false;
   if (DspDate.substr(0,2)<"00" || (DspDate.substr(0,2)>"31") && DspDate.substr(0,2)!="99")  return false;
   if (DspDate.substr(3,2)<"00" || (DspDate.substr(3,2)>"12") && DspDate.substr(3,2)!="99")  return false;
   if ((DspDate.substr(6,4)<"1000" && DspDate.substr(6,4)!="0000") || (DspDate.substr(6,4)>"3000" && DspDate.substr(6,4)!="9999"))  return false;
   return true;
}

function isValidDspTime(DspTime) { 
   // Returns true only if DspTime is like hh:mm
   if (DspTime.length!=5) return false;
   if (DspTime.substr(2,1)!=":") return false;
   if (isNaN(DspTime.substr(0,2))) return false;
   if (isNaN(DspTime.substr(3,2))) return false;
   if (DspTime.substr(0,2)<"00" || DspTime.substr(0,2)>"24") return false;
   if (DspTime.substr(3,2)<"00" || DspTime.substr(3,2)>"59") return false;
   return true;
}

function Trim(STRING){
   STRING = LTrim(STRING);
   return RTrim(STRING);
}

function RTrim(STRING){
   while(STRING.charAt((STRING.length -1))==" "){
      STRING = STRING.substring(0,STRING.length-1);
   }
   return STRING;
}

function LTrim(STRING){
   while(STRING.charAt(0)==" "){
      STRING = STRING.replace(STRING.charAt(0),"");
   }
   return STRING;
}

function FilterNameList(listCtrl,listSrc,listDstn) {
   var selectedCompanyID = Trim(listCtrl.options[listCtrl.selectedIndex].value);
   listDstn.options.length = 0;
   listDstn.options[listDstn.options.length] = new Option("","");
   for (i=0; i<listSrc.length; i++) {
      var split = listSrc.options[i].value.split("|");
      var companyID  = Trim(split[0]);
      var personID = Trim(split[1]);
      if (companyID == selectedCompanyID || selectedCompanyID=="*") {
         var txt = listSrc.options[i].text;
         listDstn.options[listDstn.options.length] = new Option(txt,personID);
      }
   }
}

function LoadNameListAll(listSrc,listDstn) {
   //Load listDstn with entries from listSrc.
   //Set listDstn's selected value to match the string stored in listDstn.DataMember

   listDstn.options.length = 0;
   listDstn.options[listDstn.options.length] = new Option("","");
   for (i=0; i<listSrc.length; i++) {
      var split = listSrc.options[i].value.split("|");
      var companyID  = Trim(split[0]);
      var personID = Trim(split[1]);
      var txt = listSrc.options[i].text;
      listDstn.options[listDstn.options.length] = new Option(txt,personID);
   }
}

function FormatRevisionNumber(rawVal) {
  var retval = Trim(rawVal).toUpperCase();
  var s = retval;
  if (!isNaN(s)) {  //Do not format if rawVal contains non-digits
     if (s.length==1) retval = "00" + s;
     if (s.length==2) retval = "0" + s;
  }
  return retval;
}

