var m_nDBLANGUAGE = 1;

function LZ(x) {return(x<0||x>9?"":"0")+x}

function EAFormat_Percent(p_sVal) {

   try {

      if (typeof p_sVal == "number") { p_sVal = p_sVal.toString()}
      p_sVal = p_sVal.replace(new RegExp("[,]","g"),"")
      p_sVal = p_sVal.replace(new RegExp("[%]","g"),"")
      nVal = parseFloat(p_sVal)

      if (nVal < 1) {
         nVal = nVal * 100
      }
      sVal2 = EAFORMAT_ToLocaleString(nVal)

      return sVal2 + "%"

   } catch(err){return '00%'}

}

function EAFormat_Number(p_sVal) {


   var bIsNegative = 0
   
   try {

      if (typeof p_sVal == "number") { p_sVal = p_sVal.toString()}

      if (p_sVal.indexOf("-",0) > -1 | p_sVal.indexOf("(")==0) {
         bIsNegative=1
      }

      p_sVal = p_sVal.replace(new RegExp("[-]","g"),"")
      p_sVal = p_sVal.replace(new RegExp("[(]","g"),"")
      p_sVal = p_sVal.replace(new RegExp("[)]","g"),"")
      p_sVal = p_sVal.replace(new RegExp("[,]","g"),"")
      p_sVal = p_sVal.replace(new RegExp("[%]","g"),"")
      p_sVal = p_sVal.replace(new RegExp("[$]","g"),"")
      p_sVal = p_sVal.replace(new RegExp("[\xA3]","g"),"")

      if(p_sVal.indexOf(":",0)>-1) {
         p_sVal = EAFormat_Hours(p_sVal)
      }
      nVal = parseFloat(p_sVal)
      sVal2 = EAFORMAT_ToLocaleString(nVal)
      if (bIsNegative==1) { sVal2 = "-" + sVal2 }
      return sVal2
   
   } catch(err) {return '0'}

}

function EAFormat_Hours(p_sVal) {

   try {
      nHrs = parseFloat(p_sVal.slice(0, p_sVal.indexOf(":",0)))
      nMins = parseFloat(p_sVal.slice(p_sVal.indexOf(":",0)+1))
      nMins = parseFloat(nMins/60.0000)
      return nHrs+nMins
   } catch(err) {return p_sVal}

}

function EAFormat_RoundNum(p_nVal,p_nDecimal) {

   nVal = EAFormat_Number(p_nVal)

   try {
      nVal = Math.floor((p_nVal*Math.pow(10,p_nDecimal)))/Math.pow(10,p_nDecimal)
   } catch(err){return p_nVal}

   return nVal;

}

function EAFormat_Currency(p_sVal) {

   var bIsNegative = 0
   
   try {

      if (typeof p_sVal == "number") { p_sVal = p_sVal.toString()}
      if (p_sVal.indexOf("-",0) > -1 | p_sVal.indexOf("(")==0) {
         bIsNegative=1
      }
      p_sVal = p_sVal.replace(new RegExp("[-]","g"),"")
      p_sVal = p_sVal.replace(new RegExp("[(]","g"),"")
      p_sVal = p_sVal.replace(new RegExp("[)]","g"),"")
      p_sVal = p_sVal.replace(new RegExp("[,]","g"),"")
      p_sVal = p_sVal.replace(new RegExp("[%]","g"),"")
      p_sVal = p_sVal.replace(new RegExp("[$]","g"),"")
      p_sVal = p_sVal.replace(new RegExp("[\xA3]","g"),"")
      nVal = parseFloat(p_sVal)
      nVal = Math.round(nVal*100)/100

      if(m_nDBLANGUAGE==1 | m_nDBLANGUAGE==2) {
         sVal2 = "$" + EAFORMAT_ToLocaleString(nVal)
      } else {
         sVal2 = "\xA3" + EAFORMAT_ToLocaleString(nVal)
      }
      if (bIsNegative==1) { sVal2 = "-" + sVal2 }

      return sVal2

   } catch(err) {return '0'}

}

function EAFormat_Trim(p_s) {

   try {
 
      while (p_s.substring(0,1) == ' ') {
         p_s = p_s.substring(1,p_s.length);
      }
      while (p_s.substring(p_s.length-1,p_s.length) == ' ') {
         p_s = p_s.substring(0,p_s.length-1);
      }
   } catch(err) {}

   return p_s;

}

function EAFormat_Date(p_sVal) {

   var sErrLoc = ""
   var dtNow = new Date()
   var aReturnDt = [dtNow.getDate().toString(),parseInt(parseInt(dtNow.getMonth())+1).toString(),parseInt(dtNow.getFullYear()).toString()]
   var aDt

   try {
      sErrLoc = "Inital date parsing"
      try {nDt=0; nDt=p_sVal.getDate()}catch(err){}
      if (nDt!=0) { 
         if(m_nDBLANGUAGE == 1) {
            p_sVal = (parseInt(p_sVal.getMonth())+1)+"/"+p_sVal.getDate()+"/"+p_sVal.getFullYear()
         } else {
            p_sVal = p_sVal.getDate()+"/"+(parseInt(p_sVal.getMonth())+1)+"/"+p_sVal.getFullYear()
         }
      }
 
      //clean up and split user's entry into dd/mm/yyyy
      sErrLoc = "cleanup and split data entry " + p_sVal
      p_sVal = p_sVal.replace(new RegExp("[,\.-]","g"),"/")
      p_sVal = p_sVal.replace(new RegExp("[ ]*","g"),"")

      aDt = p_sVal.split("/",3)
      sErrLoc = "cleanup and split data entry (2)" + p_sVal
      if (aDt[0]) { aReturnDt[0]=aDt[0] }
      if (aDt[1]) { aReturnDt[1]=aDt[1] }
      if (aDt[2]) { aReturnDt[2]=aDt[2] }

      if (aDt.length==1) {
         return ''
      }

      //If the user only entered two values, then the final value is a day or a year
      //assume 2 digits is a day
      sErrLoc = "Cleanup 2 section entries"
      if (aDt.length==2) {
         if (aReturnDt[1].length==4){
            aReturnDt[2]=aReturnDt[1]
            if(m_nDBLANGUAGE == 1) {
               aReturnDt[1]="01"
            } else {
               aReturnDt[1]=aReturnDt[0]
               aReturnDt[0]="01"
            }
         }
      }   

      //If the YEAR value is only 2 digits, then we should assume it's THIS CENTURY 
      //(unless that value is 50 years off, then use last century)
      sErrLoc = "Cleanup 2 missing year or month"
      if (aReturnDt[2].length==2) {
         sYear = dtNow.getFullYear().toString()
         sYear = sYear.substr(0,2)
         nYear = parseInt(sYear + aReturnDt[2])
         if (parseInt(nYear) > (parseInt(dtNow.getFullYear()) + 50)) {
            nYear = nYear - 100
         }
         aReturnDt[2] = parseInt(nYear).toString()
      }

      //If the user has entered the NAME of a month, then 
      //replace it with a NUMBER
      sErrLoc = "Cleanup month NAME"
      if ((m_nDBLANGUAGE == 1 && isNaN(aReturnDt[0])) | (m_nDBLANGUAGE != 1 && isNaN(aReturnDt[1]))) {
         if(m_nDBLANGUAGE == 1) {
            sMth = aReturnDt[0].toUpperCase()
         } else {
            sMth = aReturnDt[1].toUpperCase()
         }
         sMthNbr = sMth
         if (sMth.indexOf("JAN") >= 0){sMthNbr = "01"}
         if (sMth.indexOf("FEB") >= 0){sMthNbr = "02"}
         if (sMth.indexOf("MAR") >= 0){sMthNbr = "03"}
         if (sMth.indexOf("APR") >= 0){sMthNbr = "04"}
         if (sMth.indexOf("MAY") >= 0){sMthNbr = "05"}
         if (sMth.indexOf("JUN") >= 0){sMthNbr = "06"}
         if (sMth.indexOf("JUL") >= 0){sMthNbr = "07"}
         if (sMth.indexOf("AUG") >= 0){sMthNbr = "08"}
         if (sMth.indexOf("SEP") >= 0){sMthNbr = "09"}
         if (sMth.indexOf("OCT") >= 0){sMthNbr = "10"}
         if (sMth.indexOf("NOV") >= 0){sMthNbr = "11"}
         if (sMth.indexOf("DEC") >= 0){sMthNbr = "12"}
         if(m_nDBLANGUAGE == 1) {
            aReturnDt[0] = sMthNbr
         } else {
            aReturnDt[1] = sMthNbr
         }
      }
      //If the user didn't enter a MONTH or a DAY value, then make them 1
      sErrLoc = "cleanup data in return data (no text)"
      aReturnDt[0]=aReturnDt[0].replace(new RegExp("[^0123456789]","g"),"")
      aReturnDt[1]=aReturnDt[1].replace(new RegExp("[^0123456789]","g"),"")
      aReturnDt[2]=aReturnDt[2].replace(new RegExp("[^0123456789]","g"),"")

      sErrLoc = "RETURN date to calling program"
      return aReturnDt[0]+'/'+aReturnDt[1]+'/'+aReturnDt[2]

   } catch(err) {return '';}

}


function EAFormat_Date2(p_sVal,p_nFormat) {

   p_sVal = EAFormat_Date(p_sVal)
   if (p_sVal==""){return "";}
   if (p_nFormat) {} else {p_nFormat=1}

   var sErrLoc = ""
   var aDt
   var sRet = ""

   try {
      sErrLoc = "Inital date parsing"
      aDt = p_sVal.split("/",3)

      sErrLoc = "Cleanup return a specific short date format"
      switch (p_nFormat) {

         case 1:
            sRet = aDt[0] + "/" +  aDt[1]
            break;
         case 2:
            sRet = aDt[0] + "/" +  aDt[1] + "/" + aDt[2].substr(2,2)
            break;
         case 3:
            if(m_nDBLANGUAGE == 1) {
               sRet = aDt[2] + LZ(parseFloat(aDt[0])) + LZ(parseFloat(aDt[1]))
            } else {
               sRet = aDt[2] + LZ(parseFloat(aDt[1])) + LZ(parseFloat(aDt[0]))
            }   
            break;
         case 4:
            sRet = LZ(aDt[0]) + "/" +  LZ(aDt[1]) + "/" + aDt[2]
            break;
         case 5:
            if(m_nDBLANGUAGE == 1) {
               sRet = aDt[2] + "/" + LZ(parseFloat(aDt[0])) + "/" + LZ(parseFloat(aDt[1]))
            } else {
               sRet = aDt[2] + "/" + LZ(parseFloat(aDt[1])) + "/" + LZ(parseFloat(aDt[0]))
            }   
            break;
      }

      return sRet

   } catch(err) {return '';}

}

function EAFormat_DateGet(p_sVal) {

   p_sVal = EAFormat_Date(p_sVal)
   if (p_sVal==""){return "";}

   var sErrLoc = ""
   var aDt
   var aRetDt = ""

   try {
      sErrLoc = "Inital date parsing"
      aDt = p_sVal.split("/",3)

      sErrLoc = "return a date date object"
      if(m_nDBLANGUAGE == 1) {
         aRetDt = new Date(aDt[2] , aDt[0]-1, aDt[1]) 
      } else {
         aRetDt = new Date(aDt[2] , aDt[1]-1, aDt[0]) 
      }
      return aRetDt

   } catch(err) {return '';}

}


function EAFormat_DateSQL(p_sDt) {

   try {

      var nYr = parseInt(p_sDt.substr(0,4),10)
      var nMo = parseInt(p_sDt.substr(4,2),10)
      var nDt = parseInt(p_sDt.substr(6,2),10)
      var Dt = new Date(nYr, nMo-1, nDt)
      return EAFormat_Date(Dt)

   } catch(err) { return '' }

}


function EAFormat_Period(p_sVal) {

   try {

      //First, determine if the user has entered a DATE
      sDt = EAFormat_Date(p_sVal)
      if (sDt=="") {
         return parseInt(p_sVal)
      } else {
         dt = new Date(sDt)
         sDt = dt.getFullYear().toString() 
         if(dt.getMonth() < 9){sDt = sDt + '0'}
         sDt = sDt + parseInt(dt.getMonth()+1).toString()
         return sDt
      }

   } catch(err) {return ''}

}

function EAFormat_Period_ToDate(p_sVal) {

   try {
      if (isNaN(p_sVal)!=true) {
         p_sVal = p_sVal.toString()
      }
      sYr = p_sVal.substr(0,4)
      sMo = p_sVal.substr(4,2)
      return sMo + '/' + sYr

   } catch(err) {return ''}

}

function EAFormat_NumFromString(p_sVal) {

   try {

      if (typeof p_sVal == "number") { p_sVal = p_sVal.toString()}
      p_sVal = p_sVal.replace(new RegExp("[,]","g"),"")
      p_sVal = p_sVal.replace(new RegExp("[%]","g"),"")
      p_sVal = p_sVal.replace(new RegExp("[$]","g"),"")
      p_sVal = p_sVal.replace(new RegExp("[£]","g"),"")
      p_sVal = p_sVal.replace(new RegExp("[ ]","g"),"")
      p_sVal = p_sVal.replace(new RegExp("[(]"),"-")
      p_sVal = p_sVal.replace(new RegExp("[)]"),"")
      if (isNaN(p_sVal) | p_sVal=="") {p_sVal="0"}
 
      nVal = parseFloat(p_sVal)
       
      return nVal
   }  catch(err){}

}

function EAFORMAT_ToLocaleString(p_sVal) {

   sRetVal=""
   nSepCnt=0
   sSep=""

   try {
      //Pre-process the raw value to eliminate non-numeric values
      sRawVal = p_sVal.toString()
      sRawVal = sRawVal.replace(new RegExp("[, -$£()#%]","g"),"")
      sRawVal = parseFloat(sRawVal).toString()
      if (sRawVal == "NaN") { return "" }

      //Separate out the decimal portion of the number
      if (sRawVal.indexOf(".")==-1) {
         sDecVal = ""
      } else {
         sDecVal = sRawVal.substr(sRawVal.indexOf("."))
         sRawVal = sRawVal.substring(0,sRawVal.indexOf("."))
      }
      if (sDecVal.length < 3 && sDecVal!="") { sDecVal=sDecVal+"0" }
      if (sDecVal.length < 3 && sDecVal!="") { sDecVal=sDecVal+"0" }

      //add a thousands separator
      for(iCnt=sRawVal.length-1; iCnt>=0; iCnt--) {
         sRetVal = sRawVal.charAt(iCnt) + sSep + sRetVal
         if (++nSepCnt==3) {
            nSepCnt=0
            sSep = "," 
         } else {
            sSep = "" 
         }

      }

      //Return to the calling program
      if (sDecVal=="") {
         return sRetVal
      } else {
         return sRetVal + sDecVal
      }

   } catch(err) {return "" }

}

