var c_cIE = 'IE', c_cNetscape="Netscape", c_cOpera="Opera"
var enteredInDate = null;
var decSep
var milSep

SetNumberSettings()

function IsIE() {
  return Eq(m_cBrowser,c_cIE)
}

function IsNetscape() {
  return Eq(m_cBrowser,c_cNetscape)
}

function IsOpera() {
  return Eq(m_cBrowser,c_cOpera)
}

//Validazione della data
function CheckDate(N_day,N_month,N_year) {
  var objDate
  var day,month,year
  if (isNaN(N_day) || isNaN(N_month) || isNaN(N_year)) {
    return(false)
  }
  else {
    objDate=new Date(N_year,N_month-1,N_day)
    day=objDate.getDate()
    month=objDate.getMonth()+1
    year=objDate.getFullYear()
    if (day==N_day && month==N_month && year==N_year) {
      return(true)
    }
    else {
      return(false)
    }
  }
}

//Validazione della data ora
function CheckDateTime(N_day,N_month,N_year,N_hour,N_minute,N_second) {
  var res = CheckDate(N_day,N_month,N_year)
  if (res) {
    var objDate
    var hour,minute,second
    if (isNaN(N_hour) || isNaN(N_minute) || isNaN(N_second)) {
      res = false
    } else {
      objDate=new Date(N_year,N_month-1,N_day,N_hour,N_minute,N_second)
      hour=objDate.getHours()
      minute=objDate.getMinutes()
      second=objDate.getSeconds()
      if (hour!=N_hour || minute!=N_minute || second!=N_second) {
        res = false
      }
    }
  }
  return(res)
}

//Validazione dell' ora
function CheckTime(N_hour,N_minute,N_second) {
  var res = true
  var objDate
  var hour,minute,second
  objDate=new Date(1990,0,1,N_hour,N_minute,N_second)
  hour=objDate.getHours()
  minute=objDate.getMinutes()
  second=objDate.getSeconds()
  if ((hour!=N_hour || minute!=N_minute || second!=N_second) && !(minute == 0 && second == 0 && hour == 0 && N_hour == 24 && N_minute == 0 && N_second == 0)) {
    res = false
  }
  return(res)
}

function WtH(workvar,type,len,dec,picture) {
  if (picture==null) { picture='' }
  if (len==null) { len=0 }
  if (dec==null) { dec=0 }
  switch (type) {
    case 'L':
      return FormatBoolean(workvar,picture)
      break
    break
    case 'C': case 'M' :
      return FormatChar(workvar,len,picture)
      break
    case 'N':
      if (len==0 && dec==0 && picture=='')
        return Strtran(workvar.toString(),".",decSep)
      else
        return FormatNumber(workvar,len,dec,picture)
      break
    case 'D':
      return FormatDate(workvar,picture)
      break
    case 'T':
      return FormatDateTime(workvar,picture)
      break
  }
}

function HtW(obj,type) {
  switch (type) {
    case 'L':
      return CharToBool(obj)
      break
    break
    case 'C': case 'M' :
      return Trim(obj)
      break
    case 'N':
      return Val(Strtran(Strtran(obj, milSep, ''), decSep, '.'))
      break
    case 'D':
      return HtmlToWork_Date(obj)
      break
    case 'T':
      return HtmlToWork_DateTime(obj)
      break
  }
}

function HtmlToWork_Date(strDate) {
  if (strDate=='' || strDate=='  -  -') {
      return new Date(100,0,1,0,0,0,0)
  }
  var day=strDate.substr(0,2)
  var month=strDate.substr(3,2)
  var year=strDate.substr(6)
  var objDate= new Date(year,month-1,day)
  return objDate
}

function HtmlToWork_DateTime(strDate) {
  if (strDate=='' || strDate=='  -  -') {
      return new Date(100,0,1,0,0,0,0)
  }
  var day=strDate.substr(0,2)
  var month=strDate.substr(3,2)
  var year=strDate.substr(6,4)
  var h=strDate.substr(11,2)
  var m=strDate.substr(14,2)
  var s=strDate.substr(17)
  var objDate= new Date(year,month-1,day,h,m,s)
  return objDate
}

function FormatChar(workvar,len,picture) {
  return workvar
}

function FormatBoolean(workvar,picture) {
  return (workvar ? 'true' : 'false')
}

function FormatNumber(number, len, dec, picture) {
  if (picture==null) { picture='' }
  if (len==null) { len=0 }
  if (dec==null) { dec=0 }
  var decimals = dec
  var i, stringLen = picture.length, j
  var stringNumber = Str(number), integerValue, aux, decimalValue = ''
  var bNeg = false;

  if (number < 0) {
      bNeg = true
      stringNumber = Str(Math.abs(number))
  }

  if (stringLen > 0) {
    for(i = 0; i < stringLen; i++)
      if ((picture.charAt(i) == ".")) break;
    if (i == stringLen)
      decimals = 0;
    else
      decimals = stringLen-i-1;
  }
  stringNumber = FormatDecimals(Math.abs(number), decimals)
  j = stringNumber.length-decimals
  if (decimals > 0) {
    decimalValue = decSep + Substr(stringNumber,stringNumber.length-decimals+1);
    j--
  }
  aux = integerValue = Left(stringNumber,j)
  if (aux=='') {
   integerValue=aux="0"
  }

  if (At(",", picture) > 0) {
    if (decimals > 0)
      picture = Left(picture, stringLen - decimals - 1);

    // aggiunta del separatore delle migliaia
    aux = ''
    stringLen = integerValue.length
    for(i = 0; i < stringLen; i++) {
      aux = integerValue.charAt(stringLen-i-1) + aux
      if ((i+1) % 3 == 0 && i != (stringLen - 1)) aux = milSep + aux
    }
  }
  if (bNeg) {
    return ('-'+aux+decimalValue)
  }
  else {
    return (aux+decimalValue)
  }
}

function FormatDecimals(number, dec) {
  if (dec == 0)
    return(Math.round(number).toString())
  if (number == 0)
    return "."+"0000000000000".substr(0,dec)
  var mult = 1
  for (i = 0; i < dec; i++) {
    mult = mult * 10
  }
  var r = (Math.round(number * mult)).toString()
  r = ZeroPad(r,dec)
  var l = r.length
  var decimals = r.substr(l-dec,dec)
  if (decimals != '')
    return r.substr(0,l-dec)+"."+r.substr(l-dec,dec)
  else
    return r.substr(0,l-dec)
}

function FormatDate(objDate,picture) {
  if (compareDate(objDate,new Date(100,0,1,0,0,0,0))) {
    return('')
  } else {
    return(ApplyPictureToDate(ZeroPad(objDate.getDate().toString(),2) +
                   ZeroPad((objDate.getMonth()+1).toString(),2) +
                   ZeroPad(objDate.getFullYear().toString(),4),picture))
  }
}

function FormatDateTime(objDateTime,picture) {
  if (compareDate(objDateTime,new Date(100,0,1,0,0,0,0))) {
    return('')
  } else {
    return(ApplyPictureToDate(ZeroPad(objDateTime.getDate().toString(),2) +
                   ZeroPad((objDateTime.getMonth()+1).toString(),2) +
                   ZeroPad(objDateTime.getFullYear().toString(),4) +
                   ZeroPad(objDateTime.getHours().toString(),2) +
                   ZeroPad(objDateTime.getMinutes().toString(),2) +
                   ZeroPad(objDateTime.getSeconds().toString(),2)
                   ,picture))
  }
}

function FormatTime(objDateTime,picture) {
  if (compareDate(objDateTime,new Date(100,0,1,0,0,0,0))) {
    return('')
  } else {
    return(ApplyPictureToTime(ZeroPad(objDateTime.getHours().toString(),2) +
                   ZeroPad(objDateTime.getMinutes().toString(),2) +
                   ZeroPad(objDateTime.getSeconds().toString(),2)
                   ,picture))
  }
}

//Formattazione della data diversa a seconda dello stato di editing
function ApplyPictureToDate(str,format,ctrl) {
  /*ctrl e' l' UID del control*/
  var yearString, hourString = '', minuteString = '', secondString = ''
  var hasTime = Len(str) > 8
  var dayString = str.substr(0, 2)
  var monthString = str.substr(2, 2)
  var res, picture
  if (format=='D')
    picture = 'DD-MM-YYYY hh:mm:ss'
  else if (format=='N')
    picture = 'DDMMYYYYhhmmss'
  else
    picture = format

  if (hasTime) {
    yearString = str.substr(4, 4)
    hourString = str.substr(8, 2)
    minuteString = str.substr(10, 2)
    secondString = str.substr(12)
    res = CheckDateTime(Val(dayString), Val(monthString), Val(yearString), Val(hourString), Val(minuteString), Val(secondString))
  } else {
    yearString = str.substr(4)
    res = CheckDate(Val(dayString), Val(monthString), Val(yearString))
  }

  if (res) {
    picture = Strtran(picture, "DD", dayString);
    picture = Strtran(picture, "D", iif(Left(dayString, 1)=="0", Right(dayString, 1), dayString));
    picture = Strtran(picture, "MM", monthString);
    picture = Strtran(picture, "M", iif(Left(monthString, 1)=="0", Right(monthString, 1), monthString));
    picture = Strtran(picture, "YYYY", yearString);
    picture = Strtran(picture, "YY", Right(yearString, 2));
    if (hasTime) {
      picture = Strtran(picture, "hh", hourString);
      picture = Strtran(picture, "h", iif(Left(hourString, 1)=="0", Right(hourString, 1), hourString));
      picture = Strtran(picture, "mm", minuteString);
      picture = Strtran(picture, "m", iif(Left(minuteString, 1)=="0", Right(minuteString, 1), minuteString));
      picture = Strtran(picture, "ss", secondString);
      picture = Strtran(picture, "s", iif(Left(secondString, 1)=="0", Right(secondString, 1), secondString));
    } else {
      if(At('h',picture)>0)
        picture = LRTrim(Substr(picture,1,At('h',picture)-1))
    }
    str = picture
  }
  else {
    if ((dayString + monthString + yearString + hourString + secondString + minuteString) != '' && ctrl != null) {
      alert(Translate("Data non valida"))
      str = ''
      SetControlFocus(ctrl)
    }
  }
  return(str)
}

//Formattazione della data diversa a seconda dello stato di editing
function ApplyPictureToTime(str,format,ctrl) {
  /*ctrl e' l' UID del control*/
  var hourString = '', minuteString = '', secondString = ''
  var res, picture
  if ( Val(Left(str, 1)) > 2  ) {
    str = "0" + str;
  }
  if ( Len(str) <= 4 ) {
    str += "00";
  }
  if (format=='D')
    picture = 'hh:mm:ss'
  else if (format=='N')
    picture = 'hhmmss'
  else
    picture = format

  hourString = str.substr(0, 2)
  minuteString = str.substr(2, 2)
  secondString = str.substr(4)
  res = CheckTime(Val(hourString), Val(minuteString), Val(secondString))

  if (res) {
    picture = Strtran(picture, "hh", hourString);
    picture = Strtran(picture, "h", iif(Left(hourString, 1)=="0", Right(hourString, 1), hourString));
    picture = Strtran(picture, "mm", minuteString);
    picture = Strtran(picture, "m", iif(Left(minuteString, 1)=="0", Right(minuteString, 1), minuteString));
    picture = Strtran(picture, "ss", secondString);
    picture = Strtran(picture, "s", iif(Left(secondString, 1)=="0", Right(secondString, 1), secondString));
    str = picture
  }
  else {
    if ((hourString + secondString + minuteString) != '' && ctrl != null) {
      alert(Translate("Ora non valida"))
      str = ''
      SetControlFocus(ctrl)
    }
  }
  return(str)
}

function sqlDate(value) {
  return zeroFill(''+value.getFullYear(),4)+'-'+zeroFill(''+(value.getMonth()+1),2)+'-'+zeroFill(''+value.getDate(),2)
}

function sqlDateTime(value) {
  return sqlDate(value) + ' ' + zeroFill('' + value.getHours(),2) + ':' +
         zeroFill('' + (value.getMinutes()), 2) + ':' + zeroFill('' + value.getSeconds(),2)
}

function toSQL(name,value,type,nolike) {
  if (nolike==null) nolike=false;
  var w = ''
  switch (type) {
    case 'C': case 'M':
      if (nolike) {
        w = name + " = '" + value + "'"
      } else {
        w = name + " like '" + value + "%'"
      }
      break
    case 'N':
      w = name + ' = ' + value
      break
    case 'D':
      w = name + " = {d '" + sqlDate(value) + "'}"
      break
    case 'T':
      w = name + " = {ts '" + sqlDateTime(value) + "'}"
      break
    case 'L':
      w = name + ' = ' + value
      break
  }
  return w
}

// Gestione checkbox
function ChkboxCheckUncheck(ChkboxCtrl,TValue,workValue) {
  if (Eq(TValue,workValue)) {
    ChkboxCtrl.checked=true
  } else {
    ChkboxCtrl.checked=false
  }
}

function ChkboxValueAssign(ChkboxCtrl,TValue,FValue,type,len,dec,picture) {
  if (picture==null) { picture='' }
  if (len==null) { len=0 }
  if (dec==null) { dec=0 }
  if (ChkboxCtrl.checked) {
    ChkboxCtrl.value = WtH(TValue,type,len,dec,picture)
    return TValue
  } else {
    ChkboxCtrl.value = WtH(FValue,type,len,dec,picture)
    return FValue
  }
}

//Gestione radio
function selectRadio(RadioCtrl, val, type) {
  var i
  for (i=0 ; i<RadioCtrl.length; i++) {
    if (Eq(HtW(RadioCtrl[i].value, type), val)) {
      RadioCtrl[i].checked = true
      return
    }
  }
}

function getRadioValue(RadioCtrl) {
  var i
  for (i=0 ; i<RadioCtrl.length; i++) {
    if (RadioCtrl[i].checked) {
      return RadioCtrl[i].value
    }
  }
  return ''
}

//Gestione combo
function selectCombo(ComboboxCtrl,val,type) {
  var i
  var ComboOptions=ComboboxCtrl.options
  for (i=0;i<ComboOptions.length;i++) {
    if (Eq(HtW(ComboOptions[i].value,type),val)) {
      ComboboxCtrl.selectedIndex=i
      return
    }
  }
  ComboboxCtrl.value=''
}

function getComboValue(ComboboxCtrl) {
  if (ComboboxCtrl.selectedIndex == -1) {
    //un combo puo' presentare un valore '' che non e' un'option del combo stesso
    return ''
  } else {
    return ComboboxCtrl.options[ComboboxCtrl.selectedIndex].value
  }
}

function DoZoomOnLink() {
  if (event.srcElement !=null) {
    if (link_index(event.srcElement)>-1) {
      var l = Len(event.srcElement.id), id = event.srcElement.id, ctrl;
      if (At('_ZOOM', id) != 0) {
        event.srcElement.onclick();
      } else {
        id = Left(id,10)+'_ZOOM'+Substr(id,11);
        ctrl = CtrlByName(id);
        if (ctrl != null)
          CtrlByName(id).onclick();
      }
    }
  }
}

function ManageKeys(e,p_bQuery,p_bBody,p_bOnlyLink) {
  //per controlli in detail il default e' edit

  if (p_bQuery==null) p_bQuery=false;
  if (p_bBody==null) p_bBody=true;
  if (p_bOnlyLink==null) p_bOnlyLink=false;
  //e=window.event
  //var keyCode=e.keyCode

  if (IsNetscape()) {
    keyCode = e.which
  } else {
    e = window.event
    keyCode = window.event.keyCode
  }

  var altKey = IsNetscape() ? e.altKey : window.event.altKey;

  if (e.altKey && keyCode!=123) return;
  if ((keyCode > 111 && keyCode < 124) || keyCode == 27 || keyCode == 40 || keyCode == 38) {
    if (p_bOnlyLink) {
      switch (keyCode) {
        case 27: //ESC
          if (window.opener!=null && m_cFunction=='dialog') {
            SendData('moveto');
          }
          break;
        case 120://F9
          if (!p_bQuery) {
            DoZoomOnLink();
          }
          break;
        case 121://F10
          if (!p_bQuery && CallEventModifyCheck(e)) {
            SendData('save');
          }
          break;
      }
    } else
    if (p_bQuery) {
      switch (keyCode) {
        case 27: //ESC
          if (window.opener!=null && typeof(m_nChildStatus)!='undefined' && m_nChildStatus==1) {
            window.close();
          }
          break;
        case 112: //F1
          break
        case 114: //F3
          SubmitListenerForm('edit')
          break
        case 115: //F4
          SubmitListenerForm('new')
          break
        case 116: //F5
          SubmitListenerForm('delete')
          break
        case 118: //F7
          RecSeek('previous')
          break
        case 119: //F8
          RecSeek('next')
          break
        case 120: //F9
          Zoom()
          break
        case 123: //F12
          if (typeof detailed_database_error != "undefined") {
            alert(detailed_database_error)
          }
          break
      }
    } else {
      switch (keyCode) {
        case 112: //F1
          break
        case 117: //F6
          if(p_bBody) {
            Dataoperations('Delete', CtrlById('GridTable'))
            NotifyEvent('Row deleted')
            FocusFirstDetailComponent()
          } else {
            //return
          }
          break
        case 120: //F9
          DoZoomOnLink()
          break
        case 121: //F10
          if (CallEventModifyCheck(e)) {
            SendData('save')
          }
          break
        case 123: //F12
          if (typeof detailed_database_error != "undefined") {
            alert(detailed_database_error)
          }
          break
        case 27: //ESC
          if (CallEventModifyCheck()) {
            SendData('moveto')
          }
          break
        case 40: //Freccia giu'
          if(p_bBody) {
            if (CallEventModifyCheck()) {
              if (!ActivateNextRow()) return
            }
          } else {
            return
          }
          break
        case 38: //Freccia su
          if(p_bBody) {
            if (CallEventModifyCheck()) {
              ActivatePreviousRow()
            }
          } else {
            return
          }
          break
      }
    }
    if (keyCode!=112 && IsIE()) {e.keyCode = 0}

    e.cancelBubble=true
    e.returnValue=false
   }

}

function CancelHelp() {
   event.cancelBubble=true
   event.returnValue=false
   Help()
}

function CallEventModifyCheck(e){
  var bRes = true
  var srcControl = IsIE() ? window.event.srcElement : e.target
  if (srcControl.name != null) {
    if (srcControl.name != '' && srcControl.type != 'button') {
      eval('bRes = '+srcControl.id+'_Valid()')
    }
  }
  return bRes
}

function compareDate(objData1,objData2) {
  if (( objData1.getDate()==objData2.getDate()   ) &&
      ( objData1.getMonth()==objData2.getMonth() ) &&
      ( objData1.getFullYear()==objData2.getFullYear()   )) {
    return true
  } else {
    return false
  }
}

function cp_StandardFunction(cCmd) {
  switch (cCmd) {
    case 'Query':
      if (CtrlByName('FSender') == null) {
        SendData('moveto')
      }
      break
    case 'Edit':
      SubmitListenerForm('edit')
      break
    case 'Delete':
      SubmitListenerForm('delete')
      break
    case 'Load':
      SubmitListenerForm('new')
      break
    case 'Save':
      if (CtrlByName('FSender') == null) {
        SendData('save')
      }
      break
    case 'Quit':
      if (CtrlByName('FSender') == null) {
        SendData('moveto')
      }
      break
    case 'Help':
      //da fare
      break
    case 'PgUp':
      if (m_nCurrentPage < m_nPageNumbers)
        PageClick(m_nCurrentPage+1)
      break
    case 'PgDn':
      if (m_nCurrentPage > 1)
        PageClick(m_nCurrentPage-1)
      break
    case 'ZoomPrev':  case 'ZoomNext':
      //da fare
      break
    case 'Back':
      history.back()
      break
    case 'Forward':
      history.forward()
      break
    case 'Refresh':
      location.reload()
      break
  }
  return
}

function AsControlValue(any) {
  switch (typeof(any)) {
    case 'string':
      return any
      break
    case 'number':
      return WtH(any,'N',0,0,'');
      break
    case 'boolean':
      return ''+any
      break
    case 'object':
      if (any.constructor==Date) {
        if (any.getHours() > 0 || any.getMinutes() > 0 || any.getSeconds() > 0)
          return FormatDateTime(any,'D')
        else
          return FormatDate(any,'D')
      }
      break
  }
  return ''
}

function AsAppletValue(any) {
  switch (typeof(any)) {
    case 'string':
      return WtA(any, 'C')
      break
    case 'number':
      return WtA(any, 'N')
      break
    case 'boolean':
      return WtA(any, 'L')
      break
    case 'object':
      if (any.constructor==Date) {
        if (any.getHours() > 0 || any.getMinutes() > 0 || any.getSeconds() > 0)
          return WtA(any, 'T')
        else
          return WtA(any, 'D')
      }
      break
  }
  return ''
}

// WorkToApplet
function WtA(workvar,type) {
  switch (type) {
    case 'L':
      return FormatBoolean(workvar)
      break
    break
    case 'C': case 'M' :
      return FormatChar(workvar,0)
      break
    case 'N':
      return workvar.toString()
    case 'D':
      return FormatDate(workvar,'D')
      break
    case 'T':
      return FormatDateTime(workvar,'D')
      break
  }
}

// AppletToWork
function AtW(obj,type) {
  switch (type) {
    case 'L':
      return CharToBool(obj)
      break
    break
    case 'C': case 'M' :
      return Trim(obj)
      break
    case 'N':
      return Val(obj)
    case 'D':
      return HtmlToWork_Date(ApplyPictureToDate(obj,'N'))
      break
    case 'T':
      return HtmlToWork_DateTime(ApplyPictureToDate(obj,'N'))
      break
  }
}

var last_focused_comp=null
function EnsureControlFocus() {
  if (last_focused_comp!=null && !last_focused_comp.disabled && last_focused_comp.style.display!='none') {
    last_focused_comp.focus()
    last_focused_comp=null
  }
}

function SetControlFocus(str) {
  var org = CtrlById(str)
  var nCtrlPage = ControlPage(org)
  if (m_nCurrentPage != nCtrlPage) PageClick(nCtrlPage)
  if (org!=null) {
    if (org.length!=null && org.length>0)
      org=org[0]
    if (!org.disabled && org.style.display!='none') {
      last_focused_comp=org
      org.focus()
    }
  }
}

function ToResource(src) {
  if (At(':', src) == 0 && Left(src, 1) != '.' && src!='') {
    src = '../'+src
  }
  return CompleteWithRegionalSettings(src)
}

function ToHTag(p_cValue) {
  return Strtran(Strtran(p_cValue,"\r\n","<BR>"),"\n","<BR>")
}

function RecSeek(action) {
  var Frm = document.FSender
  Frm.m_cAction.value = action
  Frm.submit()
}

function SelectRecord() {
  var Frm = document.FSender
  var last = Val(document.FrmToolbar.last.value)
  if (Lt(Val(this.value),1) && Gt(last,0)) {
    this.value = 1
  } else if (Gt(Val(this.value),last)) {
    this.value = document.FrmToolbar.last.value
  }
  if (Ne(Frm.m_nRecPos.value,this.value)) {
    Frm.m_cAction.value = 'moveto'
    Frm.m_nRecPos.value = this.value
    Frm.submit()
  }
}

function RecPositionInput() {
  var keyCode=window.event.keyCode;
  if (keyCode==13) SelectRecord();
}

function CheckNum_(e) {
  var keyCode
  if (IsIE()) {
    keyCode = window.event.keyCode
  } else {
    keyCode = e.which
    if (Eq(keyCode,8) || Eq(keyCode,13)) {
      return true
    }
  }
  return(IsNumber(keyCode))
}

function CheckNum(e) {
  var keyCode, res, v, field
  if (IsIE()) {
    keyCode = window.event.keyCode
    field = window.event.srcElement
  } else {
    keyCode = e.which
    field = e.target
    if (Eq(keyCode,8) || Eq(keyCode,13) || Eq(keyCode,0)) {
      return true
    }
  }
  v = field.value
  res = IsNumber(keyCode)
  if (keyCode == 44 || keyCode == 46) {
    res = (At(decSep, v) == 0 ? true : false)
    if (res) {
      window.event.keyCode = decSep.charCodeAt(0)
    }
  }
  return(res)
}

function CheckPhone(e) {
  var keyCode
  if (IsIE()) {
    keyCode = window.event.keyCode
  } else {
    keyCode = e.which
    if (Eq(keyCode,8) || Eq(keyCode,13) || Eq(keyCode,0)) {
      return true
    }
  }
  return (keyCode >47 && keyCode <58) || keyCode == 43 || keyCode == 32 || keyCode == 35 || keyCode == 42;
}

function ValidNum(v, picture) {
  var p_dec = 0
  if (At('.', picture) > 0) p_dec = Len(Substr(picture, At('.', picture) + 1))
  return(Round(v, p_dec))
}

function CompleteWithRegionalSettings(url) {
if (typeof(document.FSender)!='undefined') {
if (typeof(document.FSender.m_cRegionalSettings)!='undefined') {
if (url.indexOf('?')==-1) {
url+='?'
} else {
url+='&'
}
url+="m_cRegionalSettings="+escape(document.FSender.m_cRegionalSettings.value)
}
}
return url
}

function SetLocationHref(location,url) {
location.href=CompleteWithRegionalSettings(url)
}

function windowOpenForeground(url, name, args, varnames, varvalues) {
var popupWin
//if (typeof(popupWin) != "object"){
if (varnames==null) {
url=CompleteWithRegionalSettings(url)
popupWin = window.open(url,name,args);
} else {
popupWin = window.open('',name,args);
popupWin.document.clear()
popupWin.document.write("<HTML>")
popupWin.document.write("<form method=post action="+url+">")
for(var n=0;n<varnames.length;n++) {
alert("<input type=hidden name="+varnames[n]+" value=\""+varvalues[n]+"\"></input>")
popupWin.document.write("<input type=hidden name="+varnames[n]+" value=\""+varvalues[n]+"\"></input>")
}
popupWin.document.write("</form>")
popupWin.document.write("</HTML>")
popupWin.document.forms[0].submit()
}
//} else {
//if (!popupWin.closed){
//popupWin.location.href = url;
//} else {
//popupWin = window.open(url, name,args);
//}
//}
popupWin.focus();
return popupWin;
}

function PageClick(num) {
  if (m_nPageNumbers > 1 && m_nCurrentPage != num) {
    for(var idx=1; idx <= m_nPageNumbers; idx++) {
      //if (idx != num) CtrlById('page_'+idx).style.visibility = 'hidden'
      if (idx != num) CtrlById('page_'+idx).style.display = 'none'
    }
    //CtrlById('page_'+num).style.visibility = 'visible'
    CtrlById('page_'+num).style.display = 'block'
    m_nCurrentPage = num
    last_focused_comp=null
  }
}

function ControlPage(ctrl) {
  if (ctrl.length!=null && ctrl.length>0)
    ctrl=ctrl[0].parentElement
  if (ctrl.parentElement != null && m_nPageNumbers > 1 && Left(ctrl.parentElement.id, 5) == 'page_')
    return Val(Substr(ctrl.parentElement.id, 6))
  else
    return 1
}

function CtrlById(id) {
  /*
  var obj = document.getElementsByName(id)
  if (obj.length == 1)
    return obj[0]
  else {
    if (obj.length == 0)
      return null
    else
     return obj
  } */
  return document.getElementById(id)
}

function CtrlByName(name) {
  var obj = document.getElementsByName(name)
  if (obj.length == 1)
    return obj[0]
  else {
    if (obj.length == 0)
      return null
    else
     return obj
  }
  //return CtrlById(name)
}

function WritePagesTabs(doc, pageTitles) {
  doc.writeln("<TABLE border=0 cellPadding=0 cellSpacing=0><TR>");
  for(var idx=0; idx < pageTitles.length; idx++) {
    doc.writeln("<TD height=20><a href='javascript:PageClick("+(idx+1)+")' tabindex=1>" +
                "<span class=FormDefault>"+pageTitles[idx]+
                "</span></a></TD>");
    doc.writeln("<TD width=20><TD>");
  }
  doc.writeln("</TR></TABLE>");
}

function ReloadMenu() {
  var f;
  for (var i=0;i<window.parent.frames.length;i++) {
    if (window.parent.frames[i].name == 'menu')
      f = window.parent.frames[i];
  }
  if (f != null && f.m_nUserCode != null) {
    if (f.m_nUserCode != m_nUserCode) {
      f.location.reload(true)
    } else if (f.m_cLanguage != null) {
      if (f.m_cLanguage != m_cLanguage) {
        f.location.reload(true)
      } else {
        ReloadNoUser(f)
      }
    } else {
      ReloadNoUser(f)
    }
  }
}

function ReloadNoUser(f) {
  //Permette di ricaricare il menu (cambio tema) anche quando non ci sono utenti
  if (f.m_cThemePath != null){
    f.m_cThemePath=Strtran(f.m_cThemePath,'../','')
    if (f.m_cThemePath != m_cThemePath) {
      f.location.reload(true)
    }
  }
}

function SetRegionalSettings() {
  var a = document.applets.SettingsApplet
  a.setRow(0)
  a.setValue("decimalSeparator",decSep)
  a.setValue("thousandSeparator",milSep)
  a.setValue("dataFormat","dd/mm/aaaa")
  document.FSender.m_cRegionalSettings.value = a.asString()
}

function SetNumberSettings() {
  try {
    var s = (1.2).toLocaleString()
    decSep = s.substr(1,1)
    milSep = decSep == ',' ? '.' : ','
  } catch(except) {
    decSep = '.'
    milSep = ','
  }
}

function Translate(message,parm1,parm2){
  if (typeof(TransDict) =='undefined')
    outmessage = message
  else {
    var outmessage = TransDict[message]
    if (outmessage == null) {
      outmessage = message
    }
    if (parm1 != '') {
      outmessage =Strtran(outmessage,"%1",parm1)
      if (parm2 != '') {
        outmessage =Strtran(outmessage,"%2",parm2)
      }
    }
  }
  return outmessage
}// function end.

function GetFrameIdx(framename) {
  var i = 0
  var idx
  var frm = document.frames
  while (i<frm.length && idx==null)
  {
    if (frm[i].name == framename) idx = i
    i++;
  }
  return idx;
}

function FrameRef(framename) {
  var idx = GetFrameIdx(framename)
  if (idx != null) return document.frames[idx]
}

function FetchDate(objDate) {
  var day=objDate.getDate()
  var month=objDate.getMonth()
  var year=objDate.getFullYear()
  return new Date(year,month,day)
}

function FetchDateTime(objDate) {
  var day=objDate.getDate()
  var month=objDate.getMonth()
  var year=objDate.getFullYear()
  var hour=objDate.getHours()
  var minute=objDate.getMinutes()
  var second=objDate.getSeconds()
  return new Date(year,month,day,hour,minute,second)
}

function SetHypPar(name, value) {
  var a = document.applets.HParApplet
  a.setRow(0)
  a.setValue(name, value)
}

function WvApplet() {
  var l_oWv = document.applets.WvApplet
  l_oWv.reset()
  l_oWv.setRow(0)
  return l_oWv
}

function ToHTMLValue(p_cVar) {
  p_cVar=Strtran(p_cVar,"&","&amp;");
  p_cVar=Strtran(p_cVar,"\\","&#092;");
  p_cVar=Strtran(p_cVar,"<","&lt;");
  p_cVar=Strtran(p_cVar,">","&gt;");
  p_cVar=Strtran(p_cVar,"\"","&quot;");
  p_cVar=Strtran(p_cVar,"'","&#39;");
  p_cVar=Strtran(p_cVar,"\u20ac","&euro;");
  return  "'"+p_cVar+"'"
}

function IsNamedParameters(arg) {
  return (typeof(arg) =='object' && arg.constructor!=Date)
}

function GetProperty(p_cWv, name, type) {
  return AtW(p_cWv.getValue(name), type);
}

function Obligatory(ctrl, defa, msg)
{
  var bRes = true;
  var v = ctrl.value;
  if ( ctrl.length > 0 ) {
    switch (ctrl[0].type) {
      case "radio":
        v = getRadioValue(ctrl);
        break;
      case "select-one":
        v = getComboValue(ctrl);
        break;
    }
  }
  if ( defa == null ) {
    defa = "";
  }
  if ( msg == null || EmptyString(msg) ) {
    msg = "Dato obbligatorio";
  }
  switch (typeof(defa)) {
    case 'number':
      v = HtW(v,'N',10,2);
      break;
    case 'boolean':
      v = HtW(v, "L");
      break;
  }
  if ( ctrl!= null && v == defa) {
    errorMsg = msg;
    focusVar = ctrl;
    return false;
  } else
    return true;
}

function Check_Email(ctrl)
{
  var bRes = true;
  if ( ctrl.value == "" )
    return bRes;
  var re;
  re = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
  if (re.test(ctrl.value) == false) {
    bRes = false;
    errorMsg = "L'e-mail non è corretta";
    focusVar = ctrl;
  }
  return bRes;
}

function LimitAttach(form, file, extArray) {
  if (extArray==null) {
    extArray = new Array(".gif", ".jpg", ".png");
  }
  allowSubmit = false;
  if (!file) return true;
  while (file.indexOf("\\") != -1)
    file = file.slice(file.indexOf("\\") + 1);
    ext = file.slice(file.indexOf(".")).toLowerCase();
    for (var i = 0; i < extArray.length; i++) {
    if (extArray[i] == ext) { allowSubmit = true; break; }
  }
  if (!allowSubmit) {
    /*alert("Please only upload files that end in types:  "
           + (extArray.join("  ")) + "\nPlease select a new "
           + "file to upload and submit again.");
    */
    alert("Selezionare solo file che abbiano estensione:  "
           + (extArray.join("  ")) + ".");

  }
  return allowSubmit;
}

function GetTrsProp(v, prop, row) {
  var p, res = "", s, ty = "C"
  if ( row == null ) row = -1

  prop = prop+"="
  if ( row >= 0 ) {
    prop = ""+row+"\\#"+prop
  }

  p = At(prop,v);
  if ( p > 0 ) {
    ty = Substr(v, p+Len(prop) + 1, 1)
    s = Substr(v, p+Len(prop) + 3)
    p = At("\\#",s);
    if ( p>0) {
      res = Left(s, p-1)
    } else
      res = s
  }
  if ( ty == "N" ) {
    res = Val(s)
  }
  return res;
}

function SetTrsProp(prop, value, row, ty) {
  if ( row == null ) row = -1
  if ( ty == null ) ty = "C"
  prop = prop+"=["+ty+"]"
  if ( row >= 0 ) {
    prop = ""+row+"\\#"+prop
  }
  return "\\#"+prop+value;
}

/* In base all'indirizzo URL passato, aggiunge il protocollo. Questa funzione aggiunge i protocolli http://; ftp:// e riconosce le e-mail.
   $addr: stringa da analizzare */
function AddPrt(addr) {
  //elaboro addr, solo se è diverso da "" e non è già stato inserito nessun protocollo
  if(addr != "" && addr.search("http://") == -1 && addr.search("ftp://") == -1 && addr.search("mailto:") == -1) {
    if(addr.search("@") > 0) { //se contiene il carattere "@" è sicuramente un'email
      addr = "mailto:"+addr;
    } else {
      type = addr.substr(0, addr.indexOf('.'));
      switch(type) {
        case "ftp":
          addr = "ftp://"+addr;
          break;
        case "www":
        default:
          addr = "http://"+addr;
      }
    }
  }

  return addr;
} // Fine function AddPrt()
