// Copyright 2004 and onwards  Zucchetti Spa.

function TestReady() {
  if (typeof document.readyState != 'undefined' && document.readyState!='complete') {
    event.cancelBubble=true
    event.returnValue=false
    if (typeof m_bAlreadySubmitted == 'undefined' || !m_bAlreadySubmitted) {
      var msg='Prego attendere il completo caricamento della pagina'
      if (typeof m_cLanguage!='undefined') {
        switch(m_cLanguage) {
          case 'ENG':
            msg='Please wait page loading completion'
            break
          default:
        }
      }
      alert(msg)
    } else {
      alert(Translate('MSG_SERVER_DATA'))
    }
  }
}

function InstTR() {
  document.onmousedown=TestReady
  document.onkeydown=TestReady
}

var c_cIE='IE', c_cNetscape="Netscape", c_cOpera="Opera", c_cMozilla="Mozilla", c_cIE_MAC='IE_MAC'

var decSep
var milSep
if(!window.m_cLanguage){window.m_cLanguage='ita';}

SetNumberSettings()

function getBrowserType() {
  if(navigator.userAgent.toLowerCase().indexOf('netscape')!=-1) return c_cNetscape
  if(navigator.userAgent.toLowerCase().indexOf('opera')!=-1) return c_cOpera
  if(navigator.userAgent.toLowerCase().indexOf('gecko')!=-1) return c_cMozilla
  return c_cIE
}

function IsIE() {
  if (typeof(m_cBrowser)=='undefined') {m_cBrowser=getBrowserType()}
  return Eq(m_cBrowser,c_cIE)
}

function IsNetscape() {
  if (typeof(m_cBrowser)=='undefined') {m_cBrowser=getBrowserType()}
  return Eq(m_cBrowser,c_cNetscape)
}

function IsOpera() {
  if (typeof(m_cBrowser)=='undefined') {m_cBrowser=getBrowserType()}
  return Eq(m_cBrowser,c_cOpera)
}

function IsMozilla() {
  if (typeof(m_cBrowser)=='undefined') {m_cBrowser=getBrowserType()}
  return Eq(m_cBrowser,c_cMozilla)
}

function IsIE_Mac() {
  return Eq(m_cBrowser,c_cIE_MAC)
}

LibJavascript = {
ToDate : function(p_cDate) {
if (Empty(p_cDate)) return NullDate();
var date = p_cDate;
var day=p_cDate.substring(0,date.indexOf('-'))-0
date=date.substring(date.indexOf('-')+1);
var month=(date.substring(0,date.indexOf('-'))-0)-1
date=date.substring(date.indexOf('-')+1);
var year=date.substring(0)-0
return new Date(year,month,day,0,0,0,0)
},
ToDateTime : function(p_cDateTime) {
if (Empty(p_cDateTime)) return NullDateTime();
var date = p_cDateTime;
var day=p_cDateTime.substring(0,date.indexOf('-'))-0
date=date.substring(date.indexOf('-')+1);
var month=(date.substring(0,date.indexOf('-'))-0)-1
date=date.substring(date.indexOf('-')+1);
var year=date.substring(0,date.indexOf(' '))-0
date=date.substring(date.indexOf(' ')+1);
var hour=date.substring(0,date.indexOf(':'))-0
date=date.substring(date.indexOf(':')+1);
var minute=date.substring(0,date.indexOf(':'))-0
date=date.substring(date.indexOf(':')+1);
var second=date.substring(0)-0
return new Date(year,month,day,hour,minute,second,0)
},
Split : function(p_cS) {
var t=p_cS.split('\n')
for(var i=0;i<t.length;i++) {
if (Right(t[i],1)=='\r') t[i]=Left(t[i],Len(t[i])-1);
}
return t
},
ReadGetData:function(){
var res={};
var getDataString=new String(window.location);
var questionMarkLocation=getDataString.search(/\?/);
if(questionMarkLocation!=-1){
getDataString=getDataString.substr(questionMarkLocation+1);
var getDataArray=getDataString.split(/&/g);
for(var i=0;i<getDataArray.length;i++){
var nameValuePair=getDataArray[i].split(/=/);
res[unescape(nameValuePair[0])]=unescape(nameValuePair[1]);
}
}
return res;
}
}

function JavaHttpRequest() {
this.open=function(method,url,synch) {
var u=java.net.URL(url)
this.cn=u.openConnection()
this.cn.setDoOutput(true)
this.cn.setUseCaches(false)
this.cn.setAllowUserInteraction(false)
}
this.setRequestHeader=function(header, value ){
this.cn.setRequestProperty(header,value)
}
this.send=function(data) {
var out=java.io.PrintWriter(this.cn.getOutputStream())
if (data!=null){
out.print(data)
}
out.close()
var is=this.cn.getInputStream()
var r=0,i=0
var read=is.read,fromCharCode=String.fromCharCode
this.responseText=[]
while((r=read())!=-1) {
this.responseText[i]=fromCharCode(r)
i++
}//while
this.responseText=this.responseText.join('')
is.close()
}//send
}

function JSURL(srv,p_bNoCache) {
var msg
if (p_bNoCache==null) p_bNoCache=false
this.http=null
if (IsIE() || IsIE_Mac()) {
if (!p_bNoCache) {
// Microsoft Knowledge Base Article - 208427
if (srv.length>1500) p_bNoCache=true
}
var msxmll={'Msxml2.XMLHTTP':'','Microsoft.XMLHTTP':''}
for(var msxml in msxmll) {
try {
this.http=new ActiveXObject(msxml)
break
} catch (e) {
this.http=false
}
}
} else {
try {
this.http = new XMLHttpRequest()
} catch (e) {
if (IsOpera()) {
try {
this.http = new JavaHttpRequest()
} catch (E) {
this.http=false
}
}else {
this.http=false
}
}
}
if(p_bNoCache) {
var p=srv.indexOf('?')
if (p!=-1){
this.prm=srv.substr(p+1)
srv=Left(srv,p)
} else
this.prm=null
this.http.open('POST', srv, false)
this.http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
}else{
this.http.open('GET', srv, false)
this.prm=null
}
this.http.setRequestHeader("User-Agent", navigator.userAgent )
if (typeof document != 'undefined' && typeof document.location !='undefined') {
this.http.setRequestHeader("Referer", ''+document.location+'')
}
this.Response = function() {
try {
return this.__response()
}catch(e){
return ''
}
}
this.__response = function() {
this.msg=''
this.http.send(this.prm)
try {
this.msg=this.http.getResponseHeader("JSURL-Message")
} catch(e) {
}
return this.http.responseText.toString()
}
this.ResponseXML = function() {
this.Response()
return this.http.responseXML
}
this.FailedLogin = function() {
return Left(this.msg,8)=='cp_login' ? eval(Substr(this.msg,9)) : ''
}
this.FailedAccess = function() {
return Left(this.msg,9)=='SPServlet' ? eval(Substr(this.msg,10)) : ''
}
}

jsapplets=new Array()

function AutonumberJavascript(p_documentloc) {
this.reset = function() {
this.names=new Array();
this.values=new Array();
this.ops=new Array();
this.types=new Array();
this.lens=new Array();
this.decs=new Array();
this.tables=new Array();
}
this.composeName = function(par) {
var file2=par
if (file2.lastIndexOf('?')>-1)
  file2=file2.substring(0,file2.indexOf('?'));
if (Right(file2,5)==".aspx")
  file2=file2.substring(0,file2.lastIndexOf('/'))+"/SPUpdateAutonumber.aspx";
else
  file2=file2.substring(0,file2.lastIndexOf('/'))+"/SPUpdateAutonumber";
return file2;
}
this.reset()
this.documentloc=p_documentloc
this.m_url = new JSURL(this.composeName(this.documentloc),true)
this.toUpdate=false
this.ok=false

this.GetFromResponse=function(res) {
var l;
var stop=false;
var i=0,p;
var text=LibJavascript.Split(res)
var line=0
for(line=0;line<text.length && !stop;line++) {
l=text[line]
i=i+1;
stop=(l=="-->")
if (i==2){
this.ok=l=="Ok"
this.errmsg=l;
} else if (i>2 && !stop) {
p=l.indexOf('=');
if (p!=-1) {
this.rdvar[l.substring(0,p).toLowerCase()]=l.substring(p+1)
}
}
}
}
this.SetETName=function(etname) {this.etname=etname}
this.doUpdate=function() {
var urle="?";
try {
var fixed=1;
for(var name in this.names) {
if (!IsA(this.names[name],'F')) {
var idx=this.names[name]
urle=urle+"Name"+fixed+"="+URLenc(idx)+"&";
urle=urle+"Value"+fixed+"="+URLenc(this.values[idx])+"&";
urle=urle+"Type"+fixed+"="+URLenc(this.types[idx])+"&";
urle=urle+"Len"+fixed+"="+URLenc(this.lens[idx])+"&";
urle=urle+"Dec"+fixed+"="+URLenc(this.decs[idx])+"&";
urle=urle+"Op"+fixed+"="+URLenc(this.ops[idx])+"&";
++fixed;
}
}
var row=1;
for(var tablename in this.tables) {
if (!IsA(this.tables[tablename],'F')) {
urle=urle+"Tablename"+row+"="+URLenc(tablename)+"&";
urle=urle+"Autonumber"+row+"="+URLenc(this.tables[tablename])+"&";
++row;
}
}
if(this.etname!=null)urle=urle+"ETName"+row+"="+URLenc(this.etname)+"&";
urle=urle.substring(0,urle.length-1);
this.rdvar=new Array();
var file=this.documentloc
file=this.composeName(file);
var url=new JSURL(file+urle,true);
this.GetFromResponse(url.__response());
} catch(e) {
this.ok=false;
}
this.reset();
}
this.checkUpdate=function() {
if (this.toUpdate) {
this.doUpdate()
this.toUpdate=false
this.etname=null
}
}
this.GetAutonumberString=function(p_cName) {
this.checkUpdate();
p_cName=p_cName.toLowerCase();
if (this.rdvar[p_cName] != null){
return this.rdvar[p_cName]
} else
return "";
}
this.GetAutonumberDouble=function(p_cField) {
this.checkUpdate();
p_cField=p_cField.toLowerCase();
if (this.rdvar[p_cField] != null) {
try {
return this.rdvar[p_cField]
} catch (e) {
return 0;
}
} else
return 0;
}
this.SetProg=function(name,value,op,type,len,dec) {
this.toUpdate=true;
var ln=name.toLowerCase();
this.names=this.names.concat(ln);
this.values[ln]=value
this.types[ln]=type
this.ops[ln]=op
this.lens[ln]=len+''
this.decs[ln]=dec+''
}
this.SetFixedProg=function() {
var name,value,type,len,dec
name=arguments[0]
value=arguments[1]
if (arguments.lenght==6) {
op=arguments[2]
type=arguments[3]
len=arguments[4]
dec=arguments[5]
} else {
if (typeof value=='number') {
op='0'
} else {
op=''
}
type=arguments[2]
len=arguments[3]
dec=arguments[4]
}
this.SetProg(name,value+'',op+"",type,len,dec);
}
this.SetAutonumber=function(auto,table) {
this.toUpdate=true;
this.tables[table.toLowerCase()]=auto.toLowerCase()
}
}

function TrsJavascript(SetValueNameFirst) {
this.p = {}
this.m_bUpdatedFlag = false
this.m_bLoadedFlag = false
this.m_bSetValueNameFirst=SetValueNameFirst==null?false:SetValueNameFirst
this.asString = function() {
var strrep=new Array(),val,vo=this.p,key
if (this.m_bUpdatedFlag) strrep[strrep.length]='#\\m_bUpdated\n';
if (this.m_bLoadedFlag) strrep[strrep.length]='#\\m_bLoaded\n';
for (key in vo) {
val = vo[key]
if (!IsA(val,'C')) val=val.join('\n')
key = this.saveConvert(key, true)
val = this.saveConvert(val, false)
strrep[strrep.length]= key + '=' + val + '\n'
}
return strrep.join('')
}

this.currRow=null

this.setRow = function(i) {
this.SetRow(i)
}
this.SetRow = function(i) {
this.currRow=i+''
this.p["Rows"]=this.currRow
}

this.setValue = function(id,value) {
var sr
if (id=='m_bUpdated' && value=='true') this.m_bUpdatedFlag=true;
if (id=='m_bLoaded' && value=='true') this.m_bLoadedFlag=true;
if(this.m_bSetValueNameFirst){
sr=this.p[id]
if(sr==null) {sr=[];this.p[id]=sr}
sr[sr.length]=this.currRow+"#="+this.saveConvert(value,false)
}else
this.p[this.currRow+"#"+id]=value;
}

this.setDeleted = function(x) {
this.p[x+"#m_nRowStatus"]="3"
}

this.getValue = function(id) {
var v=this.p[this.currRow+"#"+id]
if (Empty(v)) v=""
return v
}

this.reset = function() {
this.p={}
}

this.getRows = function() {
var v=this.p["Rows"]
if (v==null) v=this.p["0#Rows"]
try {
return v - 0
} catch (e) {
return 0
}
}

this.Append = function(s) {
var name="";
var l_prop=new TrsJavascript();
try {
l_prop.BuildProperties(s)
for(var name in l_prop.p) {
if (!IsA(l_prop.p[name],'F'))
this.p[name]=l_prop.p[name]
}
} catch (e) {
}
}


this.BuildProperties = function(s) {
this.reset()
var text=LibJavascript.Split(s),line
var i=0
for(i=0;i<text.length;i++) {
  line=text[i]
  if (typeof line != 'function' && line.length > 0) {
    var firstChar = line.charAt(0)
    if ((firstChar != '#') && (firstChar != '!')) {
      while (this.continueLine(line)) {
        i++
        var nextLine = text[i];
                        //if(nextLine == null)
                            //nextLine = "";
        var loppedLine = line.substring(0, line.length-1);
        var startIndex=0
        for(startIndex=0; startIndex<nextLine.length; startIndex++)
          if (this.whiteSpaceChars.indexOf(nextLine.charAt(startIndex)) == -1)
            break;
        nextLine = nextLine.substring(startIndex,nextLine.length);
        line = loppedLine+nextLine
      }
      var len = line.length
      var keyStart
      for(keyStart=0; keyStart<len; keyStart++) {
        if(this.whiteSpaceChars.indexOf(line.charAt(keyStart)) == -1)
          break;
      }
      if (keyStart == len)
        continue;
      var separatorIndex;
      for(separatorIndex=keyStart; separatorIndex<len; separatorIndex++) {
        var currentChar = line.charAt(separatorIndex)
        if (currentChar == '\\')
          separatorIndex++
        else if(this.keyValueSeparators.indexOf(currentChar) != -1)
          break
      }
      var valueIndex
      for (valueIndex=separatorIndex; valueIndex<len; valueIndex++)
        if (this.whiteSpaceChars.indexOf(line.charAt(valueIndex)) == -1)
          break;
      if (valueIndex < len)
        if (this.strictKeyValueSeparators.indexOf(line.charAt(valueIndex)) != -1)
          valueIndex++
      while (valueIndex < len) {
        if (this.whiteSpaceChars.indexOf(line.charAt(valueIndex)) == -1)
          break
        valueIndex++
      }
      var key = line.substring(keyStart, separatorIndex)
      var value = (separatorIndex < len) ? line.substring(valueIndex, len) : ""
      key = this.loadConvert(key)
      value = this.loadConvert(value)
      this.p[key]=value
    }//if
  }//if
} //for
} //BuildProperties

this.continueLine = function (line) {
var slashCount = 0
var index = line.length - 1
while((index >= 0) && (line.charAt(index--) == '\\'))
  slashCount++
return (slashCount % 2 == 1)
}


this.loadConvert = function (theString) {
theString=Strtran(theString,"'","'+String.fromCharCode(39)+'")
return eval("'"+theString+"'")
}

this.whiteSpaceChars = " \t\r\n\f"
this.keyValueSeparators = "=: \t\r\n\f"
this.strictKeyValueSeparators = "=:"
this.hexDigit = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
this.SP=' '.charCodeAt(0)
this.BSL = '\\'.charCodeAt(0)
this.LF = '\n'.charCodeAt(0)
this.CR = '\r'.charCodeAt(0)
this.TAB = '\t'.charCodeAt(0)
this.FF = '\f'.charCodeAt(0)
this.specialSaveChars=new Array()
this.specialSaveChars['='.charCodeAt(0)]=true
this.specialSaveChars[':'.charCodeAt(0)]=true
//this.specialSaveChars[this.SP]=true
//this.specialSaveChars[this.TAB]=true
//this.specialSaveChars[this.CR]=true
//this.specialSaveChars[this.LF]=true
//this.specialSaveChars[this.FF]=true
this.specialSaveChars['#'.charCodeAt(0)]=true
this.specialSaveChars['!'.charCodeAt(0)]=true

this.saveConvert = function(theString,escapeSpace) {
var len = theString.length,asciiChar,toHex=this.hexDigit,specialSaveChars=this.specialSaveChars,x=0
var theChars=theString.split('')
var SP=this.SP,BSL=this.BSL,TAB=this.TAB,LF=this.LF,CR=this.CR,FF=this.FF
while(x<len) {
asciiChar = theChars[x].charCodeAt(0)
switch(asciiChar) {
case SP:
if (x == 0 || escapeSpace) {
theChars[x]='\\ '
} else {
theChars[x]=' '
}
break;
case BSL:
theChars[x]='\\\\'
break;
case TAB:
theChars[x]='\\t'
break;
case LF:
theChars[x]='\\n'
break;
case CR:
theChars[x]='\\r'
break;
case FF:
theChars[x]='\\f'
break;
default:
if ((asciiChar < 0x0020) || (asciiChar > 0x007e)) {
theChars[x]='\\u'+toHex[(asciiChar >> 12) & 0xF]+toHex[(asciiChar >>  8) & 0xF]+toHex[(asciiChar >>  4) & 0xF]+toHex[ asciiChar & 0xF]
} else {
if (specialSaveChars[asciiChar]) {
theChars[x]='\\'+String.fromCharCode(asciiChar)
}
}
}//switch
x++
}//while
return theChars.join('')
}
}


function LinkJavascript(p_documentloc) {

this.composeName = function(par) {
var file2=par
if (file2.lastIndexOf('?')>-1)
  file2=file2.substring(0,file2.indexOf('?'));
if (Right(file2,5)==".aspx")
  file2=file2.substring(0,file2.lastIndexOf('/'))+"/SPLinker.aspx";
else
  file2=file2.substring(0,file2.lastIndexOf('/'))+"/SPLinker";
return file2;
}
this.documentloc=p_documentloc
var par=this.composeName(this.documentloc)
this.m_url=new JSURL(par,true)
this.m_cKey=""
this.m_cConfigName=""
this.m_cSearchingFunction=""
this.m_bFillEmptyKey=false
this.m_cConfigParms=""
this.m_cRdfields = ""
this.m_cRdtypes = ""
this.m_cAutozoom=""
this.m_cTable=""
this.m_bLooselyLinked=false
this.m_cDefaultsFunction=""

this.SetDoubleKey = function(keyFieldName,keyFieldValue,len,dec) {
this.m_bEmptyKey=keyFieldValue==0;
if (this.m_bFillEmptyKey) {
if (Empty(keyFieldValue)) {
keyFieldValue=''
}
}
this.m_cKey = this.m_cKey+","+keyFieldName+","+keyFieldValue
}
this.SetStringKey = function(keyFieldName,keyFieldValue,len,dec) {
this.m_bEmptyKey=keyFieldValue=="";
if (this.m_bFillEmptyKey) {
if (Empty(keyFieldValue)) {
keyFieldValue=''
} else {
keyFieldValue="'"+Strtran(keyFieldValue,"'","''")+"'"
}
} else {
keyFieldValue="'"+Strtran(keyFieldValue,"'","''")+"'"
}
this.m_cKey = this.m_cKey+","+keyFieldName+","+keyFieldValue
}
this.SetDateKey = function(keyFieldName,keyFieldValue,len,dec) {
this.m_bEmptyKey=(keyFieldValue=="0100-01-01")
if (this.m_bFillEmptyKey) {
if (Empty(keyFieldValue)) {
keyFieldValue=''
} else {
keyFieldValue="{d '"+keyFieldValue+"'}"
}
} else {
keyFieldValue="{d '"+keyFieldValue+"'}"
}
this.m_cKey = this.m_cKey+","+keyFieldName+","+keyFieldValue
}
this.SetDateTimeKey = function(keyFieldName,keyFieldValue,len,dec) {
this.m_bEmptyKey=(keyFieldValue=="0100-01-01 00:00:00")
if (this.m_bFillEmptyKey) {
if (Empty(keyFieldValue)) {
keyFieldValue=''
} else {
keyFieldValue="{ts '"+keyFieldValue+"'}"
}
} else {
keyFieldValue="{ts '"+keyFieldValue+"'}"
}
this.m_cKey = this.m_cKey+","+keyFieldName+","+keyFieldValue
}
this.SetFields = function(rd_fields) {
this.m_cRdfields = rd_fields
}
this.SetTypes = function(rd_types) {
this.m_cRdtypes = rd_types
}
this.SetLinkzoom = function(autozoom) {
this.m_cAutozoom = autozoom
}
this.LinkTable = function(p_cTableName) {
this.m_cTable=p_cTableName
}
this.SetConfigName = function(p_cConfigName) {
this.m_cConfigName=p_cConfigName
}
this.SetSearchingFunction = function(p_cSearchingFunction) {
this.m_cSearchingFunction=p_cSearchingFunction
}
this.FillEmptyKey = function() {
this.m_bFillEmptyKey=true
}
this.SetConfigParms = function(p_cConfigParms) {
this.m_cConfigParms=p_cConfigParms
}
this.SetDefaultsFunction = function(p_cDefaultsFunction) {
this.m_bLooselyLinked=true
this.m_cDefaultsFunction=p_cDefaultsFunction
}


this.DoLink = function(m_nKmode) {
this.m_cWhereFieldExpr="";
this.m_cWhereFixedExpr="";
this.m_nDefaultRoutineResult=1;
this.rdvar=new Array();
var noconn=false;
try{
if (!this.m_bEmptyKey){
  var urle="?";
  if (this.m_cKey.charAt(0)==',') this.m_cKey=this.m_cKey.substring(1);
  urle=urle+"Table="+this.m_cTable+"&";
  urle=urle+"Kfld="+URLenc(this.m_cKey)+"&";
  urle=urle+"Rdfld="+URLenc(this.m_cRdfields)+"&";
  urle=urle+"Rdtypes="+URLenc(this.m_cRdtypes)+"&";
  urle=urle+"Kmode="+m_nKmode+"&";
  urle=urle+"Autozoom="+this.m_cAutozoom+"&";
  urle=urle+"ConfigName="+this.m_cConfigName+"&";
  urle=urle+"SearchingFunction="+this.m_cSearchingFunction+"&";
  urle=urle+"FillEmptyKey="+this.m_bFillEmptyKey+"&";
  urle=urle+"LooselyLinked="+this.m_bLooselyLinked+"&";
  urle=urle+"DefaultsFunction="+this.m_cDefaultsFunction+"&";
  urle=urle+this.m_cConfigParms;
  var file=this.documentloc
  file=this.composeName(file);
  var url=new JSURL(file+urle,true);
  try {
    this.GetFromResponse(url.__response());
  } catch(e) {
if(e && url.http.status!=200){alert('errore interno:'+e.message);noconn=true;this.ok=false}
  }
} else {
  this.ok=true;
  this.askZoom=false;
}
if (this.ok) {
  if (this.askZoom) {
    return 2;
  } else
    return 1;
} else
  if (noconn) return -1;
  else return 0;
}finally{
this.m_cConfigName=""
this.m_cSearchingFunction=""
this.m_bFillEmptyKey=false
this.m_cConfigParms=""
this.m_bLooselyLinked=false
this.m_cDefaultsFunction=""
this.m_cAutozoom=""
this.m_cKey=""
}
}

this.GetFromResponse = function(res) {
var l;
var stop=false;
var i=0,p;
this.askZoom=false;
var text=LibJavascript.Split(res)
for(var line=0;i<text.length && !stop;line++) {
l=text[line]
i=i+1;
stop=(l=="-->")
if (i==2){
  this.ok=l=="Ok"
  this.errmsg=l;
} else if (i>2 && !stop) {
  if ("More data"==l)
    this.askZoom=true;
  else if (Left(l,15)=="WhereFieldExpr:")
    this.m_cWhereFieldExpr=l.substring(15);
  else if (Left(l,15)=="WhereFixedExpr:")
    this.m_cWhereFixedExpr=l.substring(15);
  else if (Left(l,21)=="DefaultRoutineResult:")
    this.m_nDefaultRoutineResult=eval(l.substring(21));
  else {
    p=l.indexOf('=');
    if (p!=-1) {
      this.rdvar[l.substring(0,p)]=eval(l.substring(p+1))
    }
  }
}
}//for
}

this.GetStringValue = function(p_cField,p_nLen,p_nDec) {
if (this.rdvar[p_cField]!=null){
return RTrim(this.rdvar[p_cField])
} else
return "";
}
this.GetDateValue = function(p_cField,p_nLen,p_nDec) {
if (!Empty(this.rdvar[p_cField])){
var date=this.rdvar[p_cField];
var year=date.substring(0,date.indexOf('-'))-0
date=date.substring(date.indexOf('-')+1);
var month=date.substring(0,date.indexOf('-'))-0
date=date.substring(date.indexOf('-')+1)+' ';
var day=date.substring(0,date.indexOf(' '))-0
return new Date(year,month-1,day,0,0,0,0)
} else
return NullDate();
}
this.GetDateTimeValue = function(p_cField,p_nLen,p_nDec) {
if (!Empty(this.rdvar[p_cField])){
var date = this.rdvar[p_cField];
var year=date.substring(0,date.indexOf('-'))-0
date=date.substring(date.indexOf('-')+1);
var month=date.substring(0,date.indexOf('-'))-0
date=date.substring(date.indexOf('-')+1);
var day=date.substring(0,date.indexOf(' '))-0
date=date.substring(date.indexOf(' ')+1);
var hour=date.substring(0,date.indexOf(':'))-0
date=date.substring(date.indexOf(':')+1);
var minute=date.substring(0,date.indexOf(':'))-0
date=date.substring(date.indexOf(':')+1);
var second=date.substring(0,date.indexOf('.'))-0
return new Date(year,month-1,day,hour,minute,second,0)
} else
return NullDateTime();
}
this.GetDoubleValue = function(p_cField,p_nLen,p_nDec) {
if (this.rdvar[p_cField]!=null) {
try {
return this.rdvar[p_cField]-0
} catch (e) {
return 0;
}
} else
return 0;
}

this.GetBooleanValue= function(p_cField,p_nLen,p_nDec) {
if (this.rdvar[p_cField]!=null)
return true==this.rdvar[p_cField];
else
return false;
}

this.GetWhereExpr = function(){
return URLenc(this.m_cWhereFieldExpr)
}

this.GetWhereFieldExprUnencoded= function(){
return this.m_cWhereFieldExpr
}

this.GetWhereFixedExprUnencoded= function(){
return this.m_cWhereFixedExpr
}

this.GetDefaultRoutineResult= function(){
return this.m_nDefaultRoutineResult
}


}

function BatchJavascript(p_documentloc) {
this.rdvar
this.retval
this.errmsg

this.params=new Array()
this.detectAspx=function() {
var file2=this.documentloc;
if (file2.lastIndexOf('?')!=-1)
  file2=file2.substring(0,file2.lastIndexOf('?'));
if(Right(file2,5)==".aspx")
  this.m_cExtension=".aspx";
this.documentloc=file2;
}
this.documentloc=p_documentloc
this.m_cExtension="";
this.detectAspx()

this.SetParameterString = function(name,value) {
if (name==null) return;
if (value==null) value="";
this.params[name]=value
}

this.SetParameterNumber=function(name,value) {
if (name==null) return;
this.params[name]=value+''
}
this.SetCallerStringVar=function(name,value) {
if (name==null) return;
if (value==null) value="";
this.params[name]=value
}
this.SetCallerNumberVar=function(name,value) {
if (name==null) return;
this.params[name]=value+''
}
this.GetDoubleVar=function(name) {
if (name==null) return 0;
var r=this.rdvar[name]
if (r==null) return 0;
try {
return r-0
} catch (e) {
return 0;
}
}
this.GetCallerStringVar=function(name) {
if (name==null) return "";
var r=this.rdvar[name]
if (r==null) return "";
return r;
}
this.GetCallerDoubleVar=function(name) {
if (name==null) return 0;
return this.ToDouble(this.rdvar[name])
}
this.GetCallerDateVar=function(name) {
if (name==null) return null;
return LibJavascript.ToDate(this.rdvar[name]);
}
this.GetCallerDateTimeVar=function(name) {
if (name==null) return null;
return LibJavascript.ToDateTime(this.rdvar[name]);
}
this.GetCallerBooleanVar=function(name) {
if (name==null) return false;
return this.ToBoolean(this.rdvar[name]);
}
this.GetString=function() {
return this.retval;
}
this.GetDouble=function() {
return this.ToDouble(this.retval);
}
this.ToDouble=function(p_cNumber) {
if (p_cNumber==null) return 0;
try {
return p_cNumber-0
} catch (e) {
return 0;
}
}
this.GetDate=function() {
return LibJavascript.ToDate(this.retval);
}
this.GetDateTime=function() {
return LibJavascript.ToDateTime(this.retval);
}
this.GetBoolean=function() {
return this.ToBoolean(this.retval);
}
this.ToBoolean=function(p_cBoolean) {
if (p_cBoolean==null) return false;
return "true"==(p_cBoolean.toLowerCase());
}


this.GetFromResponse=function(s) {
var l
var stop=false
var i=0,p,end
this.rdvar=new Array()
this.retval=""
this.errmsg=""
var text=LibJavascript.Split(s)
for(var line=0;line<text.length && !stop;line++) {
l=text[line]
i++
stop=(l=="-->")
end = Right(l,1)==";" ? l.length-1 : l.length
if (Left(l,22)=="Function return value:") {
this.retval=l.substring(22,end)
while(line<text.length && !stop) {
line++
l=text[line]
stop=(LRTrim(l)=='-->')
if (!stop) {
this.retval+='\n'+l
}
}
} else if(Left(l,14)=="Error message:") {
if(this.errmsg!="")this.errmsg+='\n'
this.errmsg+=Substr(l,15,Len(l)-14)
} else if(Left(l,6)=="Fault:") {
this._fault=eval(Substr(l,7,Len(l)-6))
if(!confirm(this._fault[0]))alert(this._fault[1])
} else {
p=l.indexOf('=')
if (p!=-1) {
this.rdvar[Trim(l.substring(0,p))]=Trim(l.substring(p+1,end))
}
}
}
}
this.CallServlet=function(p_cSrvltName) {
p_cSrvltName+=this.m_cExtension
var name=""
var urle=""
try {
var URLbase=this.documentloc
URLbase=URLbase.substring(0,URLbase.lastIndexOf('/'))
urle="/"+p_cSrvltName+"?"
for (name in this.params) {
if (!IsA(this.params[name],'F')) {
urle=urle+name+"="+URLenc(this.params[name])+"&"
}
}
this.params=new Array()
var url=new JSURL(URLbase+urle,true)
this.GetFromResponse(url.__response())
} catch (e) {
return -1
}
return 0
}
}

function InitWvApplet() {
  var l_oWv = WvApplet()
  l_oWv.reset()
  l_oWv.SetRow(0)
  return l_oWv
}

function WvApplet() {
  return jsapplets.WvApplet
}

function BatchApplet() {
  return jsapplets.BatchApplet
}

function SettingsApplet() {
  return jsapplets.SettingsApplet
}

function HParApplet() {
  return jsapplets.HParApplet
}

function TrsApplet() {
return jsapplets.TrsApplet
}

function LinkApplet() {
  return jsapplets.LinkApplet
}

function AutonumberApplet() {
  return jsapplets.AutonumberApplet
}

function AppletTag(name,appletclass,SetValueNameFirst) {
  var napp
  switch(name) {
    case 'Trs': case 'Wv': case 'HPar': case 'Settings':
      napp = new TrsJavascript(SetValueNameFirst)
      break
    case 'Link':
      napp = new LinkJavascript(location.toString())
      break
    case 'Batch':
      napp = new BatchJavascript(location.toString())
      break
    case 'Autonumber':
      napp = new AutonumberJavascript(location.toString())
      break
    default:
  }
  jsapplets[name+'Applet']=napp
}

//Controlo se il tasto premuto può far parte di una data
function CheckDateChar(e) {
  var keyCode, res
  keyCode=GetKeyCode(e) //ottiene il codice ASCII del tasto digitato

  if (IsNetscape() || IsMozilla()) {
    if (Eq(keyCode,0) || Eq(keyCode,8) || Eq(keyCode,13)) {
      return true
    }
  }
  //32-->Space ascii code, 45-->Minus ascii code, 46-->Point ascii code, 47-->/ ascii code, 58-->: ascii code
  res = (keyCode>47 && keyCode<58) || keyCode==32 || keyCode==45 || keyCode==46 || keyCode==47 || keyCode==58
  return(res)
}

//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)
}

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 eng = m_cLanguage=='eng';
  var day = strDate.substr( (eng ? 3 : 0), 2)-0;
  var month = strDate.substr( (eng ? 0 : 3), 2)-0;
  var year = strDate.substr(6,4)-0;
  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 eng = m_cLanguage=='eng';
  var day = strDate.substr( (eng ? 3 : 0), 2)-0;
  var month = strDate.substr( (eng ? 0 : 3), 2)-0;
  var year = strDate.substr(6,4)-0;
  var h=strDate.substr(11,2)-0;
  var m=strDate.substr(14,2)-0;
  var s=strDate.substr(17)-0;
  var objDate= new Date(year,month-1,day,h,m,s)
  return objDate
}

function FormatChar(workvar,len,picture) {
  if (picture!=null)
    if ('!'==picture.substr(0,1))
      workvar=workvar.toUpperCase()
    else if('9'==picture.substr(0,1) && ''!=workvar)
      workvar=FormatNumber(Strtran(workvar.toString(),decSep,"."),len,0,picture)
  return workvar
}

function FormatBoolean(workvar,picture) {
  return (workvar ? 'true' : 'false')
}

function FormatNumber(number, len, dec, picture) {
  if (isNaN(number)) number=0;
  if (picture==null) { picture='' }
  if (len==null) { len=0 }
  if (dec==null) { dec=0 }

  var decimals = dec, integers
  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 TranslatePicture(pict){
  if(m_cLanguage.match(/eng/i))
    return pict.replace(/(DD)(.*)(MM)/g, "$3$2$1");
  return pict;
}

function FormatDate(objDate,picture) {
  if (compareDate(objDate,new Date(100,0,1,0,0,0,0))) {
    return('')
  } else {
    var DD=ZeroPad(objDate.getDate().toString(),2);
    var MM=ZeroPad((objDate.getMonth()+1).toString(),2);
    var YYYY=ZeroPad(objDate.getFullYear().toString(),4);
    var dateStr = m_cLanguage.match(/eng/i)  && picture!='D' ? MM+DD+YYYY : DD+MM+YYYY ;
    return ApplyPictureToDate(dateStr,picture)
  }
}

function FormatDateTime(objDateTime,picture) {
  if (compareDate(objDateTime,new Date(100,0,1,0,0,0,0))) {
    return('')
  } else {
    var DD=ZeroPad(objDateTime.getDate().toString(),2);
    var MM=ZeroPad((objDateTime.getMonth()+1).toString(),2);
    var YYYY=ZeroPad(objDateTime.getFullYear().toString(),4);
    var dateStr = m_cLanguage.match(/eng/i) && picture!='D' ?  MM+DD+YYYY : DD+MM+YYYY ;
    return ApplyPictureToDateTime(dateStr+
                   ZeroPad(objDateTime.getHours().toString(),2) +
                   ZeroPad(objDateTime.getMinutes().toString(),2) +
                   ZeroPad(objDateTime.getSeconds().toString(),2)
                   ,picture)
  }
}

//Formattazione delle Date a seconda dello stato di editing
function ApplyPictureToDate(str,format,ctrl) {
  //ctrl e' l' UID del control
  var dayString='',monthString='',yearString=''
  var hasFormat=Len(str)>8
  var res,picture

  if(format=='D' || format=='')
    picture='DD-MM-YYYY'
  else if(format=='N')
    picture='DDMMYYYY'
  else
    picture=format

  var tmpPict="";

  if(hasFormat){
    tmpPict=picture.replace(/(DD|MM)(\W)?(DD|MM)(\W)?(\w*)/g,"$1-$3-$5");//espande la picture
    dayString=str.substr(tmpPict.indexOf("DD"), 2);
    monthString=str.substr(tmpPict.indexOf("MM"), 2);
    yearString=str.substr(tmpPict.indexOf("YY"), 4);
  }else{
    tmpPict=picture.replace(/(DD|MM)(\W)?(DD|MM)(\W)?(\w*)/g,"$1$3$5");//contrae la picture
    dayString=str.substr(tmpPict.indexOf("DD"), 2)
    monthString=str.substr(tmpPict.indexOf("MM"),2);
    yearString=str.substr(tmpPict.indexOf("YY"), 4);
    if(Len(yearString)==2) {
      yearString=iif(Val(yearString)>50, '19', '20')+yearString;
    }
  }
  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))

    //Se la picture contiene anche l'ora: DD-MM-YYYY hh:mm:ss
    if(At('h',picture)>0)
      picture=LRTrim(Substr(picture,1,At('h',picture)-1))
    str=picture
  }
  else {
    if((dayString+monthString+yearString)!='' && ctrl!=null) {
      alert(Translate('MSG_WRONG_DATE'))
      str=''
      SetControlFocus(ctrl)
    }
  }
  return(str)
}
function ApplyPictureToDateTime(str,format,ctrl) {
  var dayString='',monthString='',yearString='',hourString='',minuteString='',secondString=''
  var hasFormat=Len(str)>14 || At('-',str)>0 || At('/',str)>0 || At(':',str)>0
  var res,picture

  if(format=='D' || format=='')
    picture='DD-MM-YYYY hh:mm:ss'
  else if(format=='N')
    picture='DDMMYYYYhhmmss'
  else
    picture=format

  if(!Empty(str)) {
    //picture = TranslatePicture(picture);

    var tmpPict="";

    if(hasFormat){
      tmpPict=picture.replace(/(DD|MM)(\W)?(DD|MM)(\W)?(YYYY)(\W)?(hh)(\W)?(mm)(\W)?(ss)/g,"$1-$3-$5 $7:$9:$11");//espande la picture
      dayString=str.substr(tmpPict.indexOf("DD"), 2);
      monthString=str.substr(tmpPict.indexOf("MM"), 2);
      yearString=str.substr(tmpPict.indexOf("YYYY"), 4);
      hourString=str.substr(tmpPict.indexOf("hh"), 2) || '00';
      minuteString=str.substr(tmpPict.indexOf("mm"), 2) || '00';
      secondString=str.substr(tmpPict.indexOf("ss"), 2) || '00';
    }else{
      tmpPict=picture.replace(/(DD|MM)(\W)?(DD|MM)(\W)?(YYYY)(\W)?(hh)(\W)?(mm)(\W)?(ss)/g,"$1$3$5$7$9$11");//contrae la picture
      dayString=str.substr(tmpPict.indexOf("DD"), 2)
      monthString=str.substr(tmpPict.indexOf("MM"),2);
      yearString=str.substr(tmpPict.indexOf("YYYY"), 4);
      hourString=str.substr(tmpPict.indexOf("hh"), 2) || '00';
      minuteString=str.substr(tmpPict.indexOf("mm"), 2) || '00';
      secondString=str.substr(tmpPict.indexOf("ss"), 2) || '00';
    }
    res=CheckDateTime(Val(dayString),Val(monthString),Val(yearString),Val(hourString),Val(minuteString),Val(secondString))

    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));
      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 ((dayString+monthString+yearString+hourString+secondString+minuteString)!='' && ctrl!=null) {
        alert(Translate('MSG_WRONG_DATE'))
        str=''
        SetControlFocus(ctrl)
      }
    }
  }
  return(str)
}

function sqlDate(value) {
  return ZeroPad(''+value.getFullYear(),4)+'-'+ZeroPad(''+(value.getMonth()+1),2)+'-'+ZeroPad(''+value.getDate(),2)
}

function sqlDateTime(value) {
  return sqlDate(value) + ' ' + ZeroPad('' + value.getHours(),2) + ':' +
         ZeroPad('' + (value.getMinutes()), 2) + ':' + ZeroPad('' + 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 + " = '" + Strtran(value,"'","''") + "'"
      } else {
        w = name + " like '" + Strtran(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) {
  for (var i=0 ; i<RadioCtrl.length; i++) {
    if (Eq(HtW(RadioCtrl[i].value, type), val)) {
      RadioCtrl[i].checked = true
      return
    }
  }
}

function getRadioValue(RadioCtrl) {
  for (var i=0 ; i<RadioCtrl.length; i++) {
    if (RadioCtrl[i].checked) {
      return RadioCtrl[i].value
    }
  }
  return ''
}

//Gestione combo
function selectCombo(ComboboxCtrl,val,type) {
  if(ComboboxCtrl.type=='select-one') {
    var ComboOptions=ComboboxCtrl.options
    for (var 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(e) {
  var ctrl=GetEventSrcElement(e);
  if (ctrl!=null) {
    if (link_index(ctrl)>-1) {
      var id = ctrl.id;
      if (At('_ZOOM', id) != 0) {
        ctrl.onclick();
      } else {
        if("function"==eval("typeof("+id+"_Valid)") && eval(id+"_Valid(null)")) {
          id = Left(id,10)+'_ZOOM'+Substr(id,11);
          ctrl = Ctrl(id);
          if (ctrl != null)
            ctrl.onclick();
        }
      }
    }
  }
}

function GetEventSrcElement(e) {
  if(typeof(e)=='undefined')
    e=window.event
  if (IsNetscape() || IsMozilla())
    return e.target
  else
    return e.srcElement
}

function ManageKeys(e,p_bQuery,p_bBody,p_bOnlyLink,p_bIsDate) {
  //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;
  if (p_bIsDate==null) p_bIsDate=false;

  if (!IsNetscape() && !IsMozilla())
    e = window.event
  keyCode = GetKeyCode(e)
  if(typeof(hideCalendar)=='function') {
    hideCalendar()
  }
  if (e.altKey && keyCode!=123) return;

  if ((keyCode>111 && keyCode<124) || keyCode==8 || keyCode==9 || keyCode==27 || keyCode==33 || keyCode==34 || keyCode==38 || keyCode==40 || keyCode==46) {
    if (typeof m_cFunction!='undefined' && m_cFunction=='view') {
      switch (keyCode) {
        case 121://F10
          window.setTimeout("SendData('discard')",1);
        break;
      }
    } else {
      if (p_bOnlyLink) {
        switch (keyCode) {
          case 8: //BackSpace
            if(IsIE() || IsIE_Mac())
              ManageNumericDel(e, keyCode)
            return //Devo fermarmi
          case 9: //TAB
            CallEventModifyCheck(e)
            return //Devo fermarmi
          case 27: //ESC
            if (window.opener!=null && typeof m_cFunction!='undefined' && m_cFunction=='dialog') {
              //Per compatibilità Mozilla 1.2 e Netscape 7.0.2
              window.setTimeout("SendData('discard')",1);
            }
            break;
          case 38: //Freccia su
            return;
          case 40: //Freccia giù
            return;
          case 46: //Canc
            ManageNumericDel(e, keyCode)
            return //Devo fermarmi
          case 120://F9
            if (!p_bQuery) {
              if (p_bIsDate && link_index(GetEventSrcElement(e))<0)
                LaunchCalendar(GetEventSrcElement(e),TranslatePicture("DDMMYYYY"));
              else
                DoZoomOnLink(e);
            }
            break;
          case 121://F10
            if (typeof SendData!='undefined' && !p_bQuery && CallEventModifyCheck(e)) SendData('save');
            break;
          case 123: //ALT+F12
            if (e.altKey) RunSecurity();
            break;
        }
      } else
      if (p_bQuery) {
        switch (keyCode) {
          case 9: //TAB
            return
          case 27: //ESC
            if (window.opener!=null && typeof(m_nChildStatus)!='undefined' && m_nChildStatus==1)
              window.close()
            break
          case 112: //F1
            break
          case 113: //F2
            if(typeof(PrintPrg)!='undefined') PrintPrg()
            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 (!e.altKey) {
              if (typeof detailed_database_error!="undefined")
                alert(detailed_database_error)
            } else {
              RunSecurity()
            }
            break
        }
      } else {
        switch (keyCode) {
          case 8: //BackSpace
            if(IsIE() || IsIE_Mac())
              ManageNumericDel(e, keyCode)
            return //Devo fermarmi
          case 9: //TAB
            CallEventModifyCheck(e)
            return //Devo fermarmi
          case 27: //ESC
            if (typeof SendData!='undefined' && CallEventModifyCheck(e)) {
              //Per compatibilità Mozilla 1.2 e Netscape 7.0.2
              window.setTimeout("SendData('moveto')",1);
            }
            break
          case 38: //Freccia su
            if(p_bBody) {
              if (CallEventModifyCheck(e)) {
                ActivatePreviousRow(e)
              }
            } else {
              return
            }
            break
          case 40: //Freccia giu'
            if(p_bBody) {
              if (CallEventModifyCheck(e)) {
                if (!ActivateNextRow(e)) return
              }
            } else {
              return
            }
            break
          case 46: //Canc
            ManageNumericDel(e, keyCode)
            return //Devo fermarmi
          case 112: //F1
            break
          case 117: //F6
            if(p_bBody) F6Ops()
            break
          case 120: //F9
            if (!p_bQuery) {
              if (p_bIsDate && link_index(GetEventSrcElement(e))<0)
                LaunchCalendar(GetEventSrcElement(e),TranslatePicture("DDMMYYYY"));
              else
                DoZoomOnLink(e);
            }
            break
          case 121: //F10
            if (typeof SendData!='undefined' && CallEventModifyCheck(e))
              SendData('save')
            break
          case 123: //F12
            if(!e.altKey){
              if (typeof detailed_database_error!="undefined")
                alert(detailed_database_error)
            }
            break
        }
      }
    }
    if(keyCode==8 || keyCode==46) return;
    if(keyCode!=112 && (IsIE() || IsIE_Mac())){try{e.keyCode=0}catch(e){e.keyCode=null}}
    if((keyCode==33 || keyCode==34) && e.ctrlKey){
      if(keyCode==33)cp_StandardFunction("PgDn");
      if(keyCode==34)cp_StandardFunction("PgUp");
    }
    e.cancelBubble=true
    e.returnValue=false
  }
}

function GetKeyCode(e) {
  if (IsNetscape() || IsMozilla())
    return e.which
  else
    return window.event.keyCode
}

function F6Ops() {
  if(typeof(m_bStateNoDeleteRows)!="undefined" && m_bStateNoDeleteRows)
        return;
  Dataoperations('Delete', Ctrl('GridTable'))
  NotifyEvent('Row deleted')
  if ('undefined'!=typeof(DisableChainedLinks))
    EnableControlsUnderCondition_WhenReady()
  FocusFirstDetailComponent()
}

function CancelHelp() {
   event.cancelBubble=true
   event.returnValue=false
   Help()
}

function CallEventModifyCheck(e){
var bRes=true
var srcControl=GetEventSrcElement(e)
if (srcControl.name!=null && srcControl.name!='' && srcControl.type!='button') {
var hlist=['onblur','onchange','onclick']
var handler
for(var i=0;handler==null && i<hlist.length;i++)
if (srcControl[hlist[i]]!=null && At("_Valid",srcControl[hlist[i]].toString())>0)
if(!(srcControl.onkeypress && At("CheckDateChar",srcControl.onkeypress.toString())>0))
handler=srcControl[hlist[i]]
if (handler!=null)
try {
srcControl[hlist[i-1]]=function(){}
bRes = handler(e)
} finally {
srcControl[hlist[i-1]]=handler
}
}
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)
        PageButtonClick(m_nCurrentPage,m_nPageNumbers)
      break
    case 'PgDn':
      if (m_nCurrentPage>1)
        PageButtonClick(m_nCurrentPage-2,m_nPageNumbers)
      break
    case 'ZoomPrev':  case 'ZoomNext':
      //da fare
      break
    case 'Back':
      history.back()
      break
    case 'Forward':
      history.forward()
      break
    case 'Refresh':
      location.reload()
      break
    default:
      if(Left(cCmd,11)=="OrderDetail"){
        eval(cCmd)
        return
      }
  }
  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 workvar ? 'true' : 'false'
      break
    break
    case 'C': case 'M' :
      return workvar
      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,'DD-MM-YYYY'))
      break
    case 'T':
      return HtmlToWork_DateTime(ApplyPictureToDateTime(obj,'DD-MM-YYYY hh:mm:ss'))
      break
  }
}

var last_focused_comp=null
function EnsureControlFocus() {
  if (typeof(HideTrsOrizzontalScrollBar)=='function') HideTrsOrizzontalScrollBar()
  if (last_focused_comp!=null && !last_focused_comp.disabled && last_focused_comp.style.display!='none') {
    try {
      last_focused_comp.focus()
    } catch(e) {
    }
    last_focused_comp=null
  }
}

function SetControlFocus(str) {
  //try {
    //if (typeof(window.m_nChildStatus)!='undefined' && window.m_nChildStatus==2) {
      //for(var childframe in window.opener.frames) {
        //if (childframe.contentWindow==window) window.parent.SetControlFocus(childframe.id)
      //}
    //}
  //}catch(e){}
  var org = Ctrl(str)
  if (org!=null) {
    var nCtrlPage = ControlPage(org)
    if (m_nCurrentPage != nCtrlPage) PageButtonClick(nCtrlPage-1,m_nPageNumbers)
    //Solo per i control RADIO prendo il primo elemento nell'array
    if (org.length!=null && org.length>0 && org.type!='select-one')
      org=org[0]
    if (!org.disabled && org.style.display!='none') {
      try {
        org.focus()
        last_focused_comp=org
      } catch(e) {}
    }
  }
}

function ToResource(src) {
  if (At(':', src) == 0 && Left(src, 1) != '.' && src!='') {
    src = '../'+src
  }
  return CompleteWithRegionalSettings(src)
}

function ToHTag(p_cValue) {
  var p=p_cValue.indexOf("<html>")
  var s=''
  while(p!=-1){
    s+=Strtran(Strtran(Left(p_cValue,p-1),"\r\n","<BR>"),"\n","<BR>")
    p_cValue=Substr(p_cValue,p+7)
    p=p_cValue.indexOf("</html>")
    if (p==-1){
      s+=p_cValue
      p_cValue=''
      p=-1
    }else{
      s+=Left(p_cValue,p)
      p_cValue=Substr(p_cValue,p+8)
      p=p_cValue.indexOf("<html>")
    }
  }
  s+=Strtran(Strtran(p_cValue,"\r\n","<BR>"),"\n","<BR>")
  return(s)
}

function RecSeek(action) {
  if (typeof(m_nChildStatus)=='undefined' || (typeof(m_nChildStatus)!='undefined' && m_nChildStatus==0)) {
    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 (!this.value)
    this.value=Ctrl("pos").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(e) {
  if(!e) e=window.event
  if (13==GetKeyCode(e)) SelectRecord()
}

function CheckNum(e) { //BUG in mozilla o netscape: evidezia e digita. Non cancella. Inserisce
  var keyCode, res, v, field

  if(typeof(e)=='undefined')
    e=window.event

  keyCode=GetKeyCode(e)         //ottiene il codice ASCII del tasto digitato
  field=GetEventSrcElement(e)   //ottiene l'elemento che ha generato l'evento

  if (IsNetscape() || IsMozilla()) {
    if (Eq(keyCode,0) || Eq(keyCode,8) || Eq(keyCode,13)) {
      return true
    }
  }
  v = field.value
  res = IsNumber(keyCode)
  if (keyCode == 44 || keyCode == 46) {
    res = (At(decSep, v) == 0 ? true : false)
    if (res) {
      if (IsIE() || IsIE_Mac()) {
        e.keyCode = decSep.charCodeAt(0)
      }
      else {
        e.preventDefault()              //fermo l'evento
        field.value=field.value+decSep  //scrivo il separatore nel input
      }
    }
  }
  return(res)
}
function CheckNumWithPict(e,mod_dec,dec) {
  if (typeof(dec)=='undefined') {
    var mod=mod_dec[0]
    dec=mod_dec[1]
  } else {
   var mod=mod_dec
  }
  var keyCode, res, v, field
  if (typeof(e)!='undefined' && typeof(e.rootEvent) != 'undefined') {
    keyCode = e.keyCode
    e = e.rootEvent
  } else {
    if(typeof(e)=='undefined' && (IsIE() || IsIE_Mac())) {
      e=window.event
    }
  }
  if (typeof(keyCode)=='undefined') {
    keyCode = GetKeyCode(e)
  }
  field = GetEventSrcElement(e)
  if (IsNetscape() || IsMozilla()) {
    if (Eq(keyCode,0)) {
      return true
    }
  }
  v = field.value
  var selStart = getSelectionStart(field)
  var selEnd = getSelectionEnd(field)
  var numb = Strtran(v, milSep, '')
  var numbLen = numb.length
  var commaPos = At(decSep, numb)
  var minusPos = At('-', numb)
  if (IsDigit(keyCode)) {
    if (selEnd ==  selStart) {
      if (commaPos == 0) {
        if ((numbLen - minusPos) < mod) {
          return true
        } else if (dec > 0){
          if (selStart == numbLen) {
            addText(field,decSep)
          } else {
            setSelection(field,mod-1,mod-1)
            addText(field,decSep)
            setSelection(field,selStart,selStart)
          }
          return true
        } else {
          return false
        }
      } else if (selStart < commaPos) {
        if ((commaPos - minusPos - 1) < mod) {
          return true
        } else if ((numbLen-minusPos-commaPos) < dec){
          if (selStart == commaPos - 1) {
            setSelection(field,commaPos,commaPos)
          } else {
            field.value = Strtran(field.value,decSep,'')
            setSelection(field,commaPos-2,commaPos-2)
            addText(field,decSep)
            setSelection(field,selStart,selStart)
          }
          return true
        } else {
          return false
        }
      } else {
        return (numbLen - commaPos) < dec
      }
    } else if (selStart == 0 && selEnd == numbLen) {
      return true
    } else if (commaPos == 0) {
      return true
    } else if (selStart < commaPos && selEnd >= commaPos) {
      return (numbLen - minusPos - selEnd + selStart) < mod
    } else if (selStart < commaPos) {
      return true
    } else {
      return (numbLen - commaPos) <= dec
    }
  } else if (dec > 0 && (keyCode == 44 || keyCode == 46)) {
    var res
    var zero = ''
    if (selEnd == selStart) {
      if (commaPos == 0 && selStart == minusPos) {
        zero = '0'
        res = true
      } else {
        res = commaPos == 0
      }
    } else if (selStart == 0 && selEnd == numbLen) {
      zero = '0'
      field.value=''
      res = true
    } else {
      res = commaPos == 0 || (selStart < commaPos && selEnd >= commaPos)
      if (selStart == 0) {
        zero = '0'
      }
    }
    if (res) {
      addText(field, zero+decSep)
      field.value = field.value.substr(0,selStart) + field.value.substr(selEnd)
      setSelection(field,selStart+1,selStart+1)
      if (IsIE() || IsIE_Mac()) {
        e.keyCode = null
      } else {
        e.preventDefault()
      }
    }
    return res
  } else if (keyCode ==  45) {
    if (selEnd == selStart) {
      if (selStart-minusPos > 0 && typeof(mod_dec[2])=='undefined') {
        ShowPopUpCalculator(field,keyCode,mod,dec)
      } else {
        ChangeMarkField(field,selStart,selEnd)
      }
      return false
    } else if (selStart == 0 && selEnd == numbLen) {
      return true
    } else {
      return minusPos == 0 && selStart == 0
    }
  } else if (keyCode == -1 || keyCode == 8) {
    var block = false
    var delFrom = 0, delTo = 0
    var toInsert = ''
    var caretPos = 0
    if (commaPos != 0) {
      if (selStart == 0) {
        if (selEnd == numbLen) {
          block = false
        } else if (selEnd >= commaPos) {
          if (numbLen - minusPos - selEnd + selStart <= mod) {
            block = false
          } else {
            block= true
            delFrom = selStart
            delTo = selEnd
            toInsert = '0'+decSep
            caretPos = 0
          }
        } else if (selEnd == (commaPos - 1)) {
          block = true
          delFrom = selStart
          delTo = selEnd
          toInsert = '0'
          caretPos = 0
        } else if (selEnd == selStart) {
          block = false
        } else {
          block = true
          delFrom = selStart
          delTo = selEnd
        }
      } else if (selEnd == numbLen) {
        block = false
      } else if (minusPos == 1 && selStart == minusPos && selEnd == commaPos-1) {
        block = true
        delFrom = selStart
        delTo = selEnd
        toInsert = '0'
        caretPos = 1
      } else if (selStart < commaPos-1) {
        if (selEnd <= commaPos-1) {
          block = false
        } else {
          if (numbLen-minusPos-selEnd+selStart > mod) {
            block = true
            delFrom = selStart
            delTo = selEnd
            caretPos = selStart
            toInsert = decSep
          }
        }
      } else if (selStart == commaPos-1 ) {
        var wantToDelComma = true
        if (selStart == selEnd)
          keyCode == -1 ? selEnd += 1 : wantToDelComma = false
        if (wantToDelComma && numbLen-minusPos-selEnd+selStart > mod) {
          block = true
          delFrom = selStart
          delTo = selEnd
          caretPos = selStart
          toInsert = decSep
        }
      } else if (selStart == commaPos && keyCode == 8 && selStart == selEnd) {
        selStart -= 1
        if (numbLen-minusPos-selEnd+selStart > mod) {
          block = true
          caretPos = selEnd
        }
      } else {
        block = false
      }
    }
    if (block) {
      field.value = field.value.substr(0,delFrom) + field.value.substr(delTo)
      setSelection(field,selStart,selStart)
      addText(field,toInsert)
      setSelection(field,caretPos,caretPos)
      if (IsIE() || IsIE_Mac()) {
        e.keyCode = null
      } else {
        if (keyCode == -1){
          addText(field,' ')
          setSelection(field,caretPos,caretPos)
        }
        e.preventDefault()
        return false
      }
    }
  } else if (keyCode == 42 || keyCode == 43 || keyCode == 47 ) {
    ShowPopUpCalculator(field,keyCode,mod,dec)
    return false
  } else {
    return false
  }
}
function addText(input,insText) {
 input.focus();
 if(input.createTextRange) { //IE
   document.selection.createRange().text += insText
 } else if(input.setSelectionRange) { //MOZ
   var len = input.selectionEnd
   input.value=input.value.substr(0,len) + insText + input.value.substr(len)
   input.setSelectionRange(len+insText.length, len+insText.length)
 } else {}
}
function getSelectionStart(input) {
  if (input.createTextRange) { // IE
    selectedRange = document.selection.createRange().duplicate()
    selectedRange.moveEnd("character",input.value.length)
    pos = input.value.lastIndexOf(selectedRange.text)
    if (selectedRange.text == "")
      pos = input.value.length
    return pos
  } else // MOZ
    return input.selectionStart
}
function getSelectionEnd(input) {
  if (input.createTextRange) { // IE
    selectedRange = document.selection.createRange().duplicate()
    selectedRange.moveStart("character",-input.value.length)
    pos = selectedRange.text.length
    return pos
  } else //MOZ
    return input.selectionEnd
}
function setSelection(input,selectionStart,selectionEnd) {
  if (input.createTextRange) { // IE
    var range = input.createTextRange();
    range.collapse(true);
    range.moveEnd('character', selectionStart);
    range.moveStart('character', selectionEnd);
    range.select();
  } else //MOZ
    input.setSelectionRange(selectionStart,selectionEnd)
}
function ChangeMarkField(field,selStart,selEnd) {
  selStart = typeof(selStart)=='undefined' ? getSelectionStart(field) : selStart
  selEnd = typeof(selEnd)=='undefined' ? getSelectionEnd(field) : selEnd
  if (At('-', field.value) == 0) {
    field.value = '-' + field.value
    setSelection(field,selStart+1,selEnd+1)
  } else {
    field.value = Substr(field.value,2)
    setSelection(field,selStart-1,selEnd-1)
  }
}
function CheckUpper(e) { //BUG in mozilla o netscape: evidezia e digita. Non cancella. Inserisce
  var keyCode, field

  if(typeof(e)=='undefined') {
    e=window.event
  }
  keyCode=GetKeyCode(e)         //ottiene il codice ASCII del tasto digitato
  field=GetEventSrcElement(e)   //ottiene l'elemento che ha generato l'evento
  if (IsNetscape() || IsMozilla()) {
    if (Eq(keyCode,0) || Eq(keyCode,8) || Eq(keyCode,13)) {
      return true
    }
  }
  if(IsAlpha(keyCode)) {
    if(keyCode>96 && keyCode<123) {  //e una lettera minuscola
      if (IsIE() || IsIE_Mac()) {
        e.keyCode=keyCode-32 //scrivo la lettera maiuscola
      } else {
        e.preventDefault() //fermo l'evento
        field.value=field.value+String.fromCharCode(keyCode-32) //scrivo la lettera maiuscola
      }
    }
  }
  return true
}

function CheckAlpha(e) { //BUG in mozilla o netscape: evidezia e digita. Non cancella. Inserisce
  var keyCode, field

  if(typeof(e)=='undefined') {
    e=window.event
  }
  keyCode=GetKeyCode(e)         //ottiene il codice ASCII del tasto digitato
  field=GetEventSrcElement(e)   //ottiene l'elemento che ha generato l'evento
  if (IsNetscape() || IsMozilla()) {
    if (Eq(keyCode,0) || Eq(keyCode,8) || Eq(keyCode,13)) {
      return true
    }
  }
  return IsAlpha(keyCode)
}

function ManageNumericDel(e, keyCode) {
  var field = GetEventSrcElement(e)
  try {
    var x = new MyEvent(e,keyCode)
    return eval(field.id+'_CheckNumWithPict(x)') //non so se serve il return...
  }catch(ex){}
}
MyEvent = function(e,code) {
  if (code==46)
    code=-1
  this.rootEvent=e
  this.keyCode=code
  this.which=code
}

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,targetdoc) {
if (typeof(document.FSender)!='undefined' &&
    typeof(document.FSender.m_cRegionalSettings)!='undefined') {
if (targetdoc==null) {
if (url.indexOf('?')==-1) {
url+='?'
} else {
url+='&'
}
url+="m_cRegionalSettings="+URLenc(document.FSender.m_cRegionalSettings.value)
}else{
targetdoc.write("<input type=hidden name=m_cRegionalSettings value="+ToHTMLValue(document.FSender.m_cRegionalSettings.value)+"></input>")
}
}
return url
}

function SetLocationHref(l,url,fn) {
try {
if(l==null){
if(frames[fn]==null){
if(parent.SetLocationHref)
parent.SetLocationHref(null,url,fn)
else
l=parent.frames[fn].location
}else l=frames[fn].location}
if(l)l.href=CompleteWithRegionalSettings(url)
}catch(e){}
}

function windowOpenForeground(url, name, args, varnames, varvalues, doc) {
if (url==null) return null
var popupWin,d
if (varnames==null && url.length<=1500/*Microsoft Knowledge Base Article - 208427*/) {
url=CompleteWithRegionalSettings(url)
popupWin = window.open(url,name,args)
} else {
if (varnames==null){
var p=url.indexOf('?')
if (p!=-1){
varnames=url.substr(p+1).split('&')
varvalues=[]
var eq
for(var n=0;n<varnames.length;n++){
eq=varnames[n].indexOf('=')
varvalues[n]=unescape(Strtran(varnames[n].substr(eq+1),'%80','%u20AC'))
varnames[n]=Left(varnames[n],eq)
}
url=Left(url,p)
} else {
varnames=[]
varvalues=[]
}
}
if (doc==null) {
popupWin = window.open('',name,args)
d=popupWin.document
}else{
d=doc
}
d.close()
d.open()
d.write("<HTML><form name=sender method=post action=")
d.write(url)
d.write(">")
for(var n=0;n<varnames.length;n++) {
d.write("<input type=hidden name=")
d.write(varnames[n])
d.write(" value=")
d.write(ToHTMLValue(varvalues[n]))
d.write(">")
}
CompleteWithRegionalSettings(null,d)
d.write("</form></HTML>")
d.close()
d.sender.submit()
}
if (doc==null) {
popupWin.focus()
return popupWin
}
}

function PageClick(num,childAction){
if(m_nPageNumbers>1){
for(var idx=1;idx<=m_nPageNumbers;idx++){
if(idx!=num) Ctrl('page_'+idx).style.display='none'
}
Ctrl('page_'+num).style.display='block'
m_nCurrentPage=num
last_focused_comp=null
if(typeof(LoadChildrenInPage)=='function'){
LoadChildrenInPage(num,childAction)
}
}
}

function TogglePage(num,childAction){
if(m_nPageNumbers>1){
Ctrl('page_'+num).style.display=Ctrl('page_'+num).style.display=='none'?'block':'none'
m_nCurrentPage=num
last_focused_comp=null
if(typeof(LoadChildrenInPage)=='function'){
LoadChildrenInPage(num,childAction)
}
}
}

function ControlPage(ctrl) {
  if (ctrl.length!=null && ctrl.length>0)
    ctrl=ctrl[0].parentNode
  if (ctrl.parentNode != null && m_nPageNumbers > 1 && Left(ctrl.parentNode.id, 5) == 'page_')
    return Val(Substr(ctrl.parentNode.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) {
      obj=document.getElementById(id)
      return obj?obj:null
      //In IE, se l'elemento con id non esiste, ritorna null "strano".
      //document.getElementById("x") instanceof Object da errore
    } else
     return obj
  }
}
var Ctrl=CtrlById

function CtrlByName(name) {
  return CtrlById(name)
}

function ReloadMenu() {
  var f=window.parent.frames.menu
  if (f==null)
    f = window.parent.parent.frames.menu;
  if (f != null) {
    if ((f.m_nUserCode!=null && f.m_nUserCode != m_nUserCode) ||
        (f.m_cLanguage!=null && f.m_cLanguage != m_cLanguage) ||
        (f.m_cCompany!=null && f.m_cCompany != m_cCompany) ||
        (f.m_cThemePath!=null && Strtran(f.m_cThemePath,'../','') != m_cThemePath)
       ) {
      f.location.reload(true)
      if (window.parent.winList) window.parent.location.reload(true)
    }
  }
}

function SetRegionalSettings() {
  var a = 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){
  var outmessage = TransDict[message]
  if (outmessage == null) {
    outmessage = message
  }
  if (!Empty(parm1)) {
    outmessage =Strtran(outmessage,"%1",parm1)
    if (!Empty(parm2)) {
      outmessage =Strtran(outmessage,"%2",parm2)
    }
  }
  return outmessage
}

function GetFrameIdx(framename) {
  var i = 0
  var idx
  var frm = window.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 window.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 = HParApplet()
  a.SetRow(0)
  a.setValue(name, value)
}

function ToHTMLValue(p_cVar) {
  return "'"+ToHTML(p_cVar)+"'"
}
function ToHTML(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,"\r","&#13;");
  p_cVar=Strtran(p_cVar,"\n","&#10;");
  p_cVar=Strtran(p_cVar,"\u20ac","&euro;");
  return  p_cVar
}

function IsNamedParameters(arg) {
  return (typeof(arg) =='object' && arg.constructor!=Date)
}

function GetProperty(p_trs, name, type) {
return AtW(p_trs.getValue(name), type);
}
function GetTrsProps() {
var p_wh=arguments[0]
var p_trs=arguments[1],row
for(var i=2;i<arguments.length;i++) {
p_wh[arguments[i]]=new TrsJavascript()
row=p_trs.p["0#"+arguments[i]]
if(row==null)row=p_trs.p[arguments[i]]
p_wh[arguments[i]].BuildProperties(row==null?'':row)
}
}

function AtExitValue() {
var frm=CtrlByName('FSender')
if (frm==null || typeof(frm) == 'undefined' || typeof(frm['m_cAtExit'])=='undefined') {
return ''
} else {
return frm.m_cAtExit.value
}
}

function AutozoomParms() {
var frm=CtrlByName('FSender')
var r=''
if (frm!=null)
if (typeof(frm.m_cAtExit)!='undefined') {
r='&m_cAtExit='+frm.m_cAtExit.value
}
if (typeof(frm.m_cDecoration)!='undefined') {
r+='&m_cDecoration='+frm.m_cDecoration.value
}
return r
}

function AlertErrorMessage(p_cMessage) {
var mess=''
p_cMessage=Translate(p_cMessage)
if (typeof m_cErrorFromRoutine != 'undefined' && m_cErrorFromRoutine!=null) {mess=m_cErrorFromRoutine}
else {mess=Translate('MSG_VALUE_NOT_ALLOWED')}
p_cMessage=Strtran(p_cMessage,'%ERRORMESSAGE%',mess)
m_cErrorFromRoutine=''
return p_cMessage;
}

function RunSecurity() {
if (typeof m_cProgName=='undefined') return
var p='SPManageProcedureSecurity'
if (typeof PlatformPathStart == 'function') p=PlatformPathStart(p)
windowOpenForeground(p+'?progname='+m_cProgName,'','toolbar=0,menubar=0,directories=0,width=524,height=400,resizable=1')
}
function CreatePortlet(){
if (typeof m_cProgName=='undefined') return;
windowOpenForeground(ToResource('visualweb/editor.htm'+'?servlet='+URLenc('true')+'&id='+URLenc(m_cProgName)+'')+'&m_cAction=start&m_cAtExit=close&m_cMode=hyperlink','','toolbar=0,menubar=0,directories=0,width='+(100+m_nPreferredWidth)+',height='+(10+m_nPreferredHeight)+',resizable=1')
}
function ExtendTable(){
if (typeof m_cProgName=='undefined') return;
windowOpenForeground(ToResource('spextender/index.htm?table='+URLenc(m_cVirtName)),'','toolbar=0,menubar=0,directories=0,width=625,height=465,resizable=1')
}

function SetDisplay(c,h) {
if (typeof c == 'string') c=Ctrl(c)
if (c!=null){
if (typeof(IsTabstrip)=='function' && IsTabstrip(c.id)){
SetDisplayTabstrip(c.id,h)
return
}
if (typeof c.length=='undefined' || c.tagName=='SELECT'){
if('TABLE'==c.tagName){
c.style.display=(h?'none':'')
}else if('IFRAME'==c.tagName){
c.style.visibility=(h?'hidden':'')
}else{
c.style.display=(h?'none':'inline')
}
if('LABEL'==c.tagName && 'SPAN'==c.parentNode.tagName){
c.parentNode.style.display=h?'none':'block'
}
}else{
for(var i=0;i<c.length;i++) {
c[i].style.display=h?'none':'inline'
if('LABEL'==c[i].tagName && 'SPAN'==c[i].parentNode.tagName){
c[i].parentNode.style.display=h?'none':'block'
}
}
}
}
}
function SetDisabled(c,d) {
if (typeof c == 'string') c=Ctrl(c)
if (c!=null){
if (typeof c.length=='undefined' || c.tagName=='SELECT'){
var p=c.tagName=='TEXTAREA'?'readOnly':'disabled'
c[p]=d
if(typeof IsTabstrip=='function' && IsTabstrip(c.id)){
return SetDisabledTabstrip(c.id,d)
}else if (At('_ZOOM', c.id) != 0) {
if(Left(c.className,10)=='ZoomButton'){
var s='ZoomButton'+(d?'Disabled':'Enabled')
if(s!=c.className)c.className=s
}else if(Left(c.className,14)=='CalendarButton'){
var s='CalendarButton'+(d?'Disabled':'Enabled')
if(s!=c.className)c.className=s
}else{
if(d){
var s=Strtran(Strtran(c.style.backgroundImage,'zoom_enabled','zoom_disabled'),'zoom_calendar_enabled','zoom_calendar_disabled')
if (s!=c.style.backgroundImage)c.style.backgroundImage=s
}else{
var s=Strtran(Strtran(c.style.backgroundImage,'zoom_disabled','zoom_enabled'),'zoom_calendar_disabled','zoom_calendar_enabled')
if (s!=c.style.backgroundImage)c.style.backgroundImage=s
}
}
}
}else{for(var i=0;i<c.length;i++) c[i].disabled=d}
}
}
function IsWndAccessible(op) {
if (typeof op=='string') op=window[op]
try {
return op!=null && op.constructor!=Date
}catch(e){
return false
}
}
function SetWindowPreferredSize(reduce,autoCenter) {
  //Il paramtero reduce indice se la funziona dovrebbe anche diminuire la dimesione della finestra
  var tbWidth=Ctrl("toolbarTR")?Ctrl("toolbarTR").offsetWidth+5:0;
  var tbHeight=Ctrl("toolbarTR")?Ctrl("toolbarTR").offsetHeight:0;
  var titHeight=Ctrl("titleTable")?Ctrl("titleTable").offsetHeight+2:0;
  var nWidth=parent.document.body.offsetWidth;
  var nHeight=document.body.offsetHeight;
  if(reduce==null) reduce=false;
  if(autoCenter==null) autoCenter=false;
  if(Max(m_nPreferredWidth+20,tbWidth)>nWidth || reduce){
    nWidth=Max(m_nPreferredWidth+20,tbWidth)+12;
    parent.window.resizeTo(nWidth, parent.document.body.offsetHeight);
  }
  if(m_nPreferredHeight>nHeight || reduce){
    nHeight=Max(m_nPreferredHeight+titHeight+tbHeight+90+(parent.document.body.offsetHeight-document.body.offsetHeight),200);
    parent.window.resizeTo(parent.document.body.offsetWidth, nHeight);
  }
  if(autoCenter){
    moveTo((screen.availWidth-nWidth)/2>0 ? (screen.availWidth-nWidth)/2 : 0, (screen.availHeight-nHeight)/2>0 ? (screen.availHeight-nHeight)/2 : 0);
  }
}
function GetWindowPreferredSize() {
  var tbWidth=Ctrl("toolbarTR")?Ctrl("toolbarTR").offsetWidth+5:0;
  var tbHeight=Ctrl("toolbarTR")?Ctrl("toolbarTR").offsetHeight:0;
  var titHeight=Ctrl("titleTable")?Ctrl("titleTable").offsetHeight+2:0;
  var nWidth=parent.document.body.offsetWidth;
  var nHeight=document.body.offsetHeight;
  return {h:m_nPreferredHeight+titHeight+tbHeight,w:Max(m_nPreferredWidth+20,tbWidth)+12}
}
var dragObj = new Object()
//dragObj.zOrder = 1000
function dragToolbar(e,obj) {
  e = (e) ? e : window.event
  obj = Ctrl(obj)
  if (obj) dragObj.css = obj.style
  if (!e || !dragObj.css) return
  // Save mousedown location
  dragObj.downX = (e.layerX)? e.layerX: (e.offsetX)? e.offsetX: 0
  dragObj.downY = (e.layerY)? e.layerY: (e.offsetY)? e.offsetY: 0
  if (arguments.length = 3 && document.all)
    dragObj.downX = dragObj.downX + arguments[2]
  if (arguments.length = 4 && document.all)
    dragObj.downY = dragObj.downY + arguments[3]
  // bring to top of stack
  //dragObj.css.zIndex = ++dragObj.zOrder; //nasconde la scelta di anni e mesi nel calendario
	if (document.addEventListener) {
    document.addEventListener("mousemove",dragStart,true)
    document.addEventListener("mouseup",dragEnd,true)
    e.preventDefault()
	} else if (document.attachEvent) {
    document.attachEvent("onmousemove",dragStart)
    document.attachEvent("onmouseup",dragEnd)
    return false
  }
}
function dragStart(e) {
  e = (e)? e: window.event
  var x = (e.pageX)? e.pageX: (e.clientX)? e.clientX + document.documentElement.scrollLeft + document.body.scrollLeft: 0
  var y = (e.pageY)? e.pageY: (e.clientY)? e.clientY + document.documentElement.scrollTop + document.body.scrollTop: 0
  // Move drag element by the amount the cursor has moved.
  var newX = (x - dragObj.downX)
  var newY = (y - dragObj.downY)
  if (newX<0) newX = 0
  if (newY<0) newY = 0
  dragObj.css.left = newX + "px"
  dragObj.css.top  = newY + "px"
  if (e.preventDefault) e.preventDefault()
  else return false
}
function dragEnd(e) {
  // Stop capturing mousemove and mouseup events.
  if (document.removeEventListener) {
    document.removeEventListener("mousemove",dragStart,true)
    document.removeEventListener("mouseup",dragEnd,true)
  } else if (document.detachEvent) {
    document.detachEvent("onmousemove",dragStart)
    document.detachEvent("onmouseup",dragEnd)
  }
}
function documentAddClick(funct) {
  if (document.addEventListener)
    document.addEventListener("click",funct,true)
  else if (document.attachEvent) {
    document.attachEvent("onclick",funct)
    return false
  }
}
function documentRemoveClick(funct) {
  if (document.removeEventListener)
    document.removeEventListener("click",funct,true)
  else if (document.detachEvent)
    document.detachEvent("onclick",funct)
}
function LaunchCalendar(ctrl, getPicture) {
  if(typeof(ctrl)=="string")
    ctrl=Ctrl(ctrl)
  if(getPicture==null)
    getPicture="DD-MM-YYYY"

  if (ctrl.length) {
    for (var i=0; i<ctrl.length; i++){
      if ((ctrl[i].type) && 'text'==(ctrl[i].type)) {
        ctrl=ctrl[i]
        break
      }
    }
  }
  ShowPopUpCalendar(ctrl,TranslatePicture(getPicture),TranslatePicture("DD-MM-YYYY"))
}
function DoLinkZoom(uid,value){
  if(typeof window.opener.ReportLinkValue != 'undefined'){
    window.opener.ReportLinkValue(uid,value)
    window.opener.focus()
    self.close()
  }else{
    alert("Impossibile riportare il valore selezionato")
  }
}
function EntityStatus() {
if (typeof m_cFunction=='undefined')
return " "
else switch (m_cFunction) {
case 'query':return "Q"
case 'edit':return "E"
case 'new':return "N"
case 'view':return "V"
case 'dialog':return "D"
default:return " "
}
}
function GetModDecPict(pict){
var s=Strtran(pict,',','')
var intPart,decPart
var decSepPos=At('.',s)
if (decSepPos==0) return [s.length,0]
if (decSepPos==s.length) return [decSepPos-1,0]
return [decSepPos-1,s.length-decSepPos]
}
function SubmitForm(formaction,url,data) {
var bSubmit=true
if (m_bAlreadySubmitted) {
alert(Translate('MSG_SERVER_DATA'))
return
}
if (typeof m_bFieldsUpdated!='undefined' && m_bFieldsUpdated && formaction!='save') {
bSubmit = window.confirm(Translate('MSG_LEAVE_MOD'))
}
if (bSubmit) {
var Frm = document.FSender
if (Frm.StartRow && formaction!='next' && formaction!='previous'
    && (typeof m_bResetOnSave=='undefined' || formaction!='save')) {
Frm.StartRow.value = '1'
Frm.m_nRows.value = '0'
}
if (Frm.m_bQuery && (formaction=='query' || formaction=='save')) {
Frm.m_bQuery.value='true'
}
Frm.m_cWv.value=PrepareSubmitData(data)
if (url!=null) {
Frm.action = url
}
Frm.m_cAction.value = formaction
Frm.submit()
m_bAlreadySubmitted = true
InstTR()
}
}
function PrepareSubmitData(data) {
FillWv()
if (data!=null) {
WvApplet().Append(data)
}
return WvApplet().asString()
}
function SetWindowObject(needsregionalsettings) {
var f=NameForCaller()
if (IsWndAccessible(window[f])) {
l_oWnd=new Function('v,d','return typeof '+f+'[v] == \'undefined\' ? d : '+f+'[v]')
if (Ne(typeof(window[f].FrmMain),'undefined')) {
if (needsregionalsettings) {
if (Ne(typeof(window[f].FSender),'undefined') && Ne(typeof(window[f].FSender.m_cRegionalSettings),'undefined')) {
l_oWv.setValue(m_cRegionalSettings,window[f].FSender.m_cRegionalSettings.value)
}
}
}
} else {
l_oWnd=new Function('v,d','return d')
}
}
function NameForCaller() {
var f='opener'
if (IsWndAccessible(window.opener)) {
f='opener'
} else if (IsWndAccessible(window.parent)) {
f='parent'
}
return f
}
function IsDisabledByStateDriver(id){
return typeof(IsDisabled)=='undefined'?false:IsDisabled(id)
}
function IsHiddenByStateDriver(id){
return typeof(IsHidden)=='undefined'?false:IsHidden(id)
}
function DisableInputsInContainer(container,disable){
  container=typeof(container)=='string'?Ctrl(container):container
  var children=container!=null?container.childNodes:new Array()
  var itm
  for (var i=0; i<children.length; i++){
    itm=children.item(i)
    switch(itm.tagName){
      case 'INPUT':
      SetDisabled(itm,disable)
      break
    case 'DIV': case 'SPAN':
      DisableInputsInContainer(itm,disable)
      break
    case 'TABLE':
      DisableInputsInTable(itm,disable)
    default:
      //alert(itm.tagName+' '+itm.id)
    }
  }
}
function DisableInputsInTable(table,disable){
  table=typeof(table)=='string'?Ctrl(table):table
  var i,ii
  for(i=0; i<table.rows.length; i++){
    for(ii=0; ii<table.rows[i].cells.length; ii++){
      DisableInputsInContainer(table.rows[i].cells[ii],disable)
    }
  }
}
function TransferBetweenWindows(srcWnd,sourceName,varName,funcName) {
var o=srcWnd[sourceName]
if (o.getFullYear && o.getMonth && o.getDate && o.getHours && o.getMinutes && o.getSeconds && o.getMilliseconds) {
//o potrebbe essere garbage collected in seguito, inoltre o.constructor!=Date
o=new Date(o.getFullYear(),o.getMonth(),o.getDate(),o.getHours(),o.getMinutes(),o.getSeconds(),o.getMilliseconds())
}
if(varName==null){
window[funcName](o)
}else{
window[varName]=o
}
}
function _CopyCallers(v){
if(IsWndAccessible(opener)){var n
for(var i=0;i<v.length;i++){
n='w_'+v[i]
if(eval('Empty('+n+') && Ne(opener.'+n+',null)'))TransferBetweenWindows(opener,n,n)
}}}
_CPVr=_CopyCallers
function CopyWorkVar(dest,dstNames,srcNames,checkDep) {
var mustUpdate=false,srcName,dstName,destRow
if(typeof dest.TrsRow != "undefined") destRow=dest.TrsRowSample();
for(var i=0; i<srcNames.length; i++) {
srcName=srcNames[i]
if(!checkDep || Ne(window['o_'+srcName],window['w_'+srcName])) {
dstName=dstNames[i]
if (dest['Set_'+dstName]==null) {
dest.TransferBetweenWindows(window,'w_'+srcName,'w_'+dstName)
dest.SetModified(destRow!=null && typeof destRow[dstName]!="undefined")
mustUpdate=true
} else {
dest.TransferBetweenWindows(window,'w_'+srcName,null,'Set_'+dstName)
mustUpdate=false
}
}
}
if(mustUpdate)dest.DoUpdate(true)
}
function TrsRowSample() {
return new TrsRow(2)
}
function ChildToLoad(id) {
return Ctrl(id).src=='javascript:[].join()'
}
function AdjustFontSize(ratio){
 if(document.styleSheets){
  var styleSheetRules,currentFontSize,currentFontSizeNum,currentDimension;
  //Ciclo su tutti i fogli di stile corrente
  for(i=0;i<document.styleSheets.length;i++){
   if(IsIE()) styleSheetRules=document.styleSheets[i].rules;
   if(IsNetscape() || IsMozilla()) styleSheetRules=document.styleSheets[i].cssRules;
   //Ciclo sugli elementi dello stile corrente
   for(j=0;j<styleSheetRules.length;j++){
    currentFontSize=styleSheetRules[j].style.fontSize;
    currentFontSizeNum=parseInt(currentFontSize);
    currentDimension="";
    //Controllo sulla dimensione utiizzata
    if(Right(LRTrim(currentFontSize),2)=="pt" || Right(LRTrim(currentFontSize),2)=="px"){
     currentDimension=Right(LRTrim(currentFontSize),2);
     if(currentFontSizeNum>2) styleSheetRules[j].style.fontSize=LRTrim(Str(currentFontSizeNum/ratio,4,2))+currentDimension;
    }
   }
  }
 }
}
//funzioni per stati
function DriveUI(){
DisableUI()
HideUI()
}
function DisableUI(){
if(typeof m_aStateDisabledFields!='undefined') DisableFields(m_aStateDisabledFields);
//DisablePages(m_cStateDisabledPages)
if(typeof m_aStateDisabledTabs!='undefined') DisableTabs(m_aStateDisabledTabs);
//DisableChildren(m_cStateDisabledChildren.split(','))
}
function HideUI(){
if(typeof m_aStateHiddenFields!='undefined') HideFields(m_aStateHiddenFields);
if(typeof m_aStateHiddenTabs!='undefined') HideTabs(m_aStateHiddenTabs);
//if(m_cStateHiddenChildren!='')
//HideChildren(m_cStateHiddenChildren.split(','))
}
function DisableFields(fields){
  for (var i=0; i<fields.length; i++){
    SetDisabled(fields[i],true)
  }
}
function HideFields(fields){
  for (var i=0; i<fields.length; i++){
    SetDisplay(fields[i],true)
  }
}
function DisablePages(pages){
  for (var i=0; i<pages.length; i++){
    DisableInputsInContainer(pages[i],true)
  }
}
function HideTabs(tabs){
  for (var i=0; i<tabs.length; i++){
    SetDisplay(tabs[i].replace(/ /g,'_')+'_TAB',true)
  }
}
function DisableTabs(tabs){
  for (var i=0; i<tabs.length; i++){
    SetDisabledTabstrip(tabs[i].replace(/ /g,'_')+'_TAB',true)
  }
}
/*function DisableChildren(children){
  for (var i=0; i<children.length; i++){
    if (IsWndAccessible(FrameRef(Lower(children[i]))) && Ne(typeof(FrameRef(Lower(children[i])).DisableInputsInContainer),'undefined')) {
      FrameRef(Lower(children[i])).DisableInputsInContainer('mainTD',true);
    }else{
      SetDisabled(children[i],true)
    }
  }
}
function HideChildren(children){
  for (var i=0; i<children.length; i++){
    SetDisplay(children[i],true)
  }
}*/
function IsDisabled(id,detail){
  return (typeof(m_aStateDisabledFields)!='undefined' && LibJavascript.Array.indexOf(m_aStateDisabledFields,id)!=-1) ||
         (typeof(m_aStateDisabledTabs)!='undefined' && LibJavascript.Array.indexOf(m_aStateDisabledTabs,id)!=-1) || IsInDisabledPages(id,detail)// || m_cStateDisabledChildren.indexOf(id)!=-1
}
function IsHidden(id){
  return (typeof(m_aStateHiddenFields)!='undefined' && LibJavascript.Array.indexOf(m_aStateHiddenFields,id)!=-1) ||
         (typeof(m_aStateHiddenTabs)!='undefined' && LibJavascript.Array.indexOf(m_aStateHiddenTabs,id)!=-1)// || m_cStateHiddenChildren.indexOf(id)!=-1
}
function IsInDisabledPages(id,detail){
  if(typeof m_cStateDisabledPages!='undefined'){
    for (var i=0; i<m_cStateDisabledPages.length; i++){
      if(FindInputInContainer(id,Ctrl(m_cStateDisabledPages[i]),detail))
        return true
    }
  }
  return false
}
function FindInputInContainer(id,container,detail){
  var children=container.childNodes
  var itm
  for (var i=0; i<children.length; i++){
    itm=children.item(i)
    switch(itm.tagName){
    case 'INPUT':
      if(itm.id==id || itm.name==id || (detail && itm.className==id))
        return true
      break
    case 'DIV': case 'SPAN':
      if(FindInputInContainer(id,itm,detail))
        return true
      break
    case 'TABLE':
      if(FindInputInTable(id,itm,detail))
        return true
      break
    default:
      //alert(itm.tagName)
    }
  }
  return false
}
function FindInputInTable(id,table,detail){
  var i,ii
  for(i=0; i<table.rows.length; i++){
    for(ii=0; ii<table.rows[i].cells.length; ii++){
      if(FindInputInContainer(id,table.rows[i].cells[ii],detail)){
        return true
      }
    }
  }
  return false
}
function _ResetTracker(){
if(typeof _tracker=='undefined' || !_tracker.askwrn){
_tracker={ctrl:null,badValue:null,askwrn:false,
goon:function(p_ctrl,p_badValue){return (Ne(this.ctrl,p_ctrl) || Ne(this.badValue,p_badValue)) && !this.askwrn}
}}}
function _modifyandopen(page,zopt,detail){
if(detail!=null && typeof SetModified=='function')SetModified(detail)
windowOpenForeground(page,'',zopt)}

