  var gv_themevalues;
  var gv_controlstyles;
  var gv_invariantlocale;
  var gv_currentlocale;
  var gv_enableanimations;
  var gv_enablescreendimming;
  isScriptorApp=true;
  IsRegisteredtobject=false;
  IsRegisteredtexception=false;
  IsRegisteredeconverterror=false;
  IsRegisteredthtmlstyler=false;
  IsRegisteredtparameter=false;
  IsRegisteredtparameters=false;
  IsRegisteredtxmlhttprequestwrapper=false;
  IsRegisteredrepsitesmainxapp=false;
  IsRegisteredtitemdata=false;
  IsRegisteredtfielddata=false;
  IsRegisteredttabledata=false;
  IsRegisteredtbackground=false;
  IsRegisteredtcontrolstyle=false;
  IsRegisteredtpageinfo=false;
  IsRegisteredtdatasourceinfo=false;
  IsRegisteredtcatalog=false;
  IsRegisteredformblend=false;
  IsRegisteredformbuy=false;
  IsRegisteredformfaqs2=false;
  IsRegisteredformkosher=false;
  IsRegisteredformmicroactive=false;
  IsRegisteredformmicroemv=false;
  IsRegisteredformmicroemvlite=false;
  IsRegisteredformmicroessentials=false;
  IsRegisteredformmicrommun=false;
  IsRegisteredformmicropulse=false;
  IsRegisteredformproductsemv=false;
  IsRegisteredformproductsemvabout=false;
  IsRegisteredformproductsemvhome=false;
  IsRegisteredformproductsfruits=false;
  IsRegisteredformproductshome=false;
  IsRegisteredformrvl=false;
  IsRegisteredindex2=false;
  IsRegisteredpopupvideos=false;
  IsRegisteredpopupvideosbd=false;
  IsRegisteredsubform1=false;
  IsRegistereduserinfo=false;
  IsRegisteredtdatetimelocale=false;
  IsRegisteredtnumericlocale=false;
  IsRegisteredtlocaleinfo=false;
  IsRegisteredtdatetimepattern=false;
  IsRegisteredtdatetimerec=false;
  IsRegisteredtnumericrec=false;
  IsRegisteredwebmethod=false;
  IsRegisteredform=false;
  IsRegisteredtformdatalink=false;
  IsRegisteredtformopener=false;
  IsRegisteredt_webband=false;
  IsRegisteredtcontainerstyle=false;
  IsRegisteredcontainer=false;
  IsRegisteredtnavigationbarvalues=false;
  IsRegisteredtbandstyle=false;
  IsRegisteredtbandbandinfo=false;
  IsRegisteredband=false;
  IsRegisteredtbuttonstyle=false;
  IsRegisteredtbuttonbandinfo=false;
  IsRegisteredbutton=false;
  IsRegisteredtcheckboxbandinfo=false;
  IsRegisteredcheckbox=false;
  IsRegisteredtpartscontainer=false;
  IsRegisteredtlistboxstyle=false;
  IsRegisteredtlistboxbandinfo=false;
  IsRegisteredlistbox=false;
  IsRegisteredbuttoneditorstyles=false;
  IsRegisteredbuttoneditor=false;
  IsRegisteredtpopuplistboxbandinfo=false;
  IsRegisteredpopuplistbox=false;
  IsRegisteredcombobox=false;
  IsRegistereddatetimeedit=false;
  IsRegisteredtstyleholdercontainer=false;
  IsRegisteredtstyleholderbutton=false;
  IsRegisteredlistboxitem=false;
  IsRegisteredtcalendarbandinfo=false;
  IsRegisteredcalendar=false;
  IsRegisteredtcalendarheaderbandinfo=false;
  IsRegisteredcalendarheader=false;
  IsRegisteredcalendardaytoday=false;
  IsRegisteredcalendarprevyear=false;
  IsRegisteredcalendarnextyear=false;
  IsRegisteredcalendarprevmonth=false;
  IsRegisteredcalendarnextmonth=false;
  IsRegisteredcalendardaythismonth=false;
  IsRegisteredcalendardayothermonth=false;
  IsRegisteredpopupcalendar=false;
  IsRegisteredtcontrolpopup=false;
  IsRegistereddropdownpopup=false;
  IsRegisteredbuttoneditorpopup=false;
  IsRegistereddatetimeeditpopup=false;
  IsRegisteredcomboboxpopup=false;
  IsRegisteredttexteditstyle=false;
  IsRegisteredttexteditbandinfo=false;
  IsRegisteredtextedit=false;
  IsRegisteredtimagestyle=false;
  IsRegisteredtimagebandinfo=false;
  IsRegisteredimage=false;
  IsRegisteredtnavimagestyle=false;
  IsRegisterednavimage=false;
  IsRegisteredttextlabelbandinfo=false;
  IsRegisteredtextlabel=false;
  IsRegisteredtoptionbuttonbandinfo=false;
  IsRegisteredoptionbutton=false;
  IsRegisteredtrectanglestyle=false;
  IsRegisteredrectangle=false;
  IsRegisteredtdropdownstyle=false;
  IsRegistereddropdown=false;
  IsRegistereddropcontainer=false;
  IsRegisteredtdropbuttonstyle=false;
  IsRegistereddropbutton=false;
  IsRegisteredtsplitbuttonstyle=false;
  IsRegisteredsplitbutton=false;
  IsRegisteredtsubformstyle=false;
  IsRegisteredtsubformbandinfo=false;
  IsRegisteredsubform=false;
  IsRegisteredtabsheet=false;
  IsRegisteredttabcontrolstyle=false;
  IsRegisteredtabcontrol=false;
  IsRegisteredttabbuttonstyle=false;
  IsRegisteredtabbutton=false;
  IsRegisteredpopupbutton=false;
  IsRegisteredpopuplabel=false;
  IsRegisteredpopupheader=false;
  IsRegisteredpopupoverlay=false;
  IsRegisteredpopupwindow=false;
  IsRegisteredtfloatingwindow=false;
  IsRegisteredt_controlstyles=false;
  IsRegisteredtanimationeffect=false;
  IsRegisteredtanimationeffects=false;
  IsRegisteredtstyleanimationeffects=false;
  IsRegisteredtanimationtimer=false;
  IsRegisteredtgetdatajsonrequest=false;
  IsRegisteredtupdatedatajsonrequest=false;
  IsRegisteredtlookupdatawebmethod=false;
  IsRegisteredtdatapage=false;
  IsRegisteredtdatalink=false;
  IsRegisteredtdatalinks=false;
  IsRegisteredtdataset=false;
  IsRegisteredtjsonclient=false;
  IsRegisteredtrepsitesmainservicemethod=false;
  IsRegisteredttgetdatajsonrequest=false;
  IsRegisteredttlookupdatawebmethod=false;
  IsRegisteredttupdatedatajsonrequest=false;
  IsRegisteredtattachedeventhandler=false;
  IsRegisteredtcontrolbandinfo=false;
  IsRegisteredtwebcontrolbandinfo=false;
  IsRegisteredtoldhandles=false;
  IsRegisteredtdomhandlearray=false;
  IsRegisteredtcreationattrseventhandler=false;
  IsRegisteredtcreationattrs=false;
  IsRegisteredtabstractcontrol=false;
  IsRegisteredtimer=false;
  IsRegisteredtcontrolstyles=false;
  IsRegisteredtresizeablecontrolstyles=false;
  IsRegisteredtwebcontrol=false;
  IsRegisteredtwebpopupcontrol=false;
  IsRegisteredtabstractform=false;
  IsRegisteredtabstractwindow=false;
  IsRegisteredtstate=false;
  IsRegisteredtstatereconstructor=false;
  IsRegisteredtxappstate=false;
  IsRegisteredtxapp=false;
  IsRegisteredtserializer=false;
  IsRegisteredtvaluewrapper=false;
  IsRegisteredformthescience2=false;
  IsRegisteredformthescience=false;
  IsRegisteredformwhylegacy=false;
  IsRegisteredformacavie=false;
  IsRegisteredformaboutacaicopy=false;
  IsRegisteredformevents=false;
  IsRegisteredformfaqs=false;
  IsRegisteredformfivestaropportunity=false;
  IsRegisteredformhome=false;
  IsRegisteredformproducts=false;
  IsRegisteredformwhymonaviecopy=false;
  IsRegisteredindex=false;


function RegClasses(){
  Register_tobject();
  Register_texception();
  Register_econverterror();
  Register_thtmlstyler();
  Register_tparameter();
  Register_tparameters();
  Register_txmlhttprequestwrapper();
  Register_repsitesmainxapp();
  Register_titemdata();
  Register_tfielddata();
  Register_ttabledata();
  Register_tbackground();
  Register_tcontrolstyle();
  Register_tpageinfo();
  Register_tdatasourceinfo();
  Register_tcatalog();
  Register_tdatetimelocale();
  Register_tnumericlocale();
  Register_tlocaleinfo();
  Register_tdatetimepattern();
  Register_tdatetimerec();
  Register_tnumericrec();
  Register_webmethod();
  Register_form();
  Register_tformdatalink();
  Register_tformopener();
  Register_t_webband();
  Register_tcontainerstyle();
  Register_container();
  Register_tnavigationbarvalues();
  Register_tbandstyle();
  Register_tbandbandinfo();
  Register_band();
  Register_tbuttonstyle();
  Register_tbuttonbandinfo();
  Register_button();
  Register_tcheckboxbandinfo();
  Register_checkbox();
  Register_tpartscontainer();
  Register_tlistboxstyle();
  Register_tlistboxbandinfo();
  Register_listbox();
  Register_buttoneditorstyles();
  Register_buttoneditor();
  Register_tpopuplistboxbandinfo();
  Register_popuplistbox();
  Register_combobox();
  Register_datetimeedit();
  Register_tstyleholdercontainer();
  Register_tstyleholderbutton();
  Register_listboxitem();
  Register_tcalendarbandinfo();
  Register_calendar();
  Register_tcalendarheaderbandinfo();
  Register_calendarheader();
  Register_calendardaytoday();
  Register_calendarprevyear();
  Register_calendarnextyear();
  Register_calendarprevmonth();
  Register_calendarnextmonth();
  Register_calendardaythismonth();
  Register_calendardayothermonth();
  Register_popupcalendar();
  Register_tcontrolpopup();
  Register_dropdownpopup();
  Register_buttoneditorpopup();
  Register_datetimeeditpopup();
  Register_comboboxpopup();
  Register_ttexteditstyle();
  Register_ttexteditbandinfo();
  Register_textedit();
  Register_timagestyle();
  Register_timagebandinfo();
  Register_image();
  Register_tnavimagestyle();
  Register_navimage();
  Register_ttextlabelbandinfo();
  Register_textlabel();
  Register_toptionbuttonbandinfo();
  Register_optionbutton();
  Register_trectanglestyle();
  Register_rectangle();
  Register_tdropdownstyle();
  Register_dropdown();
  Register_dropcontainer();
  Register_tdropbuttonstyle();
  Register_dropbutton();
  Register_tsplitbuttonstyle();
  Register_splitbutton();
  Register_tsubformstyle();
  Register_tsubformbandinfo();
  Register_subform();
  Register_tabsheet();
  Register_ttabcontrolstyle();
  Register_tabcontrol();
  Register_ttabbuttonstyle();
  Register_tabbutton();
  Register_popupbutton();
  Register_popuplabel();
  Register_popupheader();
  Register_popupoverlay();
  Register_popupwindow();
  Register_tfloatingwindow();
  Register_t_controlstyles();
  Register_tanimationeffect();
  Register_tanimationeffects();
  Register_tstyleanimationeffects();
  Register_tanimationtimer();
  Register_tgetdatajsonrequest();
  Register_tupdatedatajsonrequest();
  Register_tlookupdatawebmethod();
  Register_tdatapage();
  Register_tdatalink();
  Register_tdatalinks();
  Register_tdataset();
  Register_tjsonclient();
  Register_trepsitesmainservicemethod();
  Register_ttgetdatajsonrequest();
  Register_ttlookupdatawebmethod();
  Register_ttupdatedatajsonrequest();
  Register_tattachedeventhandler();
  Register_tcontrolbandinfo();
  Register_twebcontrolbandinfo();
  Register_toldhandles();
  Register_tdomhandlearray();
  Register_tcreationattrseventhandler();
  Register_tcreationattrs();
  Register_tabstractcontrol();
  Register_timer();
  Register_tcontrolstyles();
  Register_tresizeablecontrolstyles();
  Register_twebcontrol();
  Register_twebpopupcontrol();
  Register_tabstractform();
  Register_tabstractwindow();
  Register_tstate();
  Register_tstatereconstructor();
  Register_txappstate();
  Register_txapp();
  Register_tserializer();
}

function JMain(){
  RegClasses();
  datetimeoptions.converttoutctime=false;
  datetimeoptions.defaultformat=3;
  datetimeoptions.defaultmode=1;
  x=Create_repsitesmainxapp().create();
  xapp=x;
  invariantlocale=Create_tlocaleinfo().create(gv_invariantlocale);
  initcurrentlocale();
  initanimations();
  createmoduleformfunction=docreatemoduleform;
  getwebmethodfunction=dogetwebmethod;
  loadtablescatalogdata();
  loadqueriescatalogdata();
  loadgenericitemscatalogdata();
  loadpagescatalogdata();
  registerdatasources();
  if(gvmainformid == ''){
    gvmainformid='Home';
  }
  _initxapp();
}
function GetVal(p){
  if(p==null)return p;
  if(p["v"]!=void(0)){
    return p.v
  }else{
    return p
  }
}


function GetSetVal(p){
  if(p==null)return p;
  if(typeof p["v"]=="object"){
    return p.v
  }else{
    return p
  }
}


function SetVal(p,v){
  if(p==null)return v;
  if(p["v"]!=void(0)){
    p.v=v;
    return p
  } else {
    return v
  }
}


var _IWR=false;
function _twrapper(){}
function AddWrapper(v){
  if(!_IWR){
    _twrapper.prototype=q={};
    q.v=null;
    _IWR=true;
  }
  p=new _twrapper();
  if(v!=void(0)){p.v=v}
  return p
}


var _lddmods = new Array();
function IsModuleLoaded(m){
   return (typeof(_lddmods[m])!="undefined")
}
function Init_data(w,d){
  if(w){
    var p=AddWrapper(null);
    if(d!= void(0)){
      p.v=d
    }
    return p
  }else{
    if(d!=void(0)){
      return d
    }else{
      return null
    }
  }
}

function _ISet(w){
  if(w){
    var p={};
    var q=p.v={};
    for(var i=1;i<=arguments.length-1;i+=2){
      for(var k=arguments[i];k<=arguments[i+1];k++)
      {p.v[k]=1;}
    }
  } else {
    var p={};
    for(var i=1;i<=arguments.length-1;i+=2){
      for(var k=arguments[i];k<=arguments[i+1];k++)
      {p[k]=1;}
    }
  }
  return p
}

function _ISetC(w){
  if(w){
    var p={};
    var q=p.v={};
    for(var i=1;i<=arguments.length-1;i+=2){
      for(var k=arguments[i].charCodeAt(0);k<=arguments[i+1].charCodeAt(0);k++)
      {p.v[String.fromCharCode(k)]=1;}
    }
  } else {
    var p={};
    for(var i=1;i<=arguments.length-1;i+=2){
      for(var k=arguments[i].charCodeAt(0);k<=arguments[i+1].charCodeAt(0);k++)
      {p[String.fromCharCode(k)]=1;}
    }
  }
  return p
}

function _DSet(w,d){
  d=GetSetVal(d);
  var p=_ISet(w);
  _SSet(d,p);
  return p
}

function _SSet(d,p){
  p=GetSetVal(p);
  for(var i in p){delete p[i]}
  for(var i in d){
    p[i]=d[i];
  }
}

function _IS(t,s){
  if(t==null)return false;
  while(t.zc!=s){
    if(t.ParentClass==null)return false;
    t=t.ParentClass.prototype;
  }
  return true
}

function _AS(t,s){
  if(!_IS(t,s))throw "Invalid class typecast";
}

function _InSet(m,s){
  s=GetSetVal(s);
  return s[m]==1
}

function _DiffSet(d,p){
  p=GetSetVal(p);
  d=GetSetVal(d);
  var u=_ISet(false);
  for(var i in d){
    if((d[i]==1)&&(p[i]!=1))u[i]=1
  }
  return u
}

function _UnionSet(d,p){
  p=GetSetVal(p);
  d=GetSetVal(d);
  var u=_DSet(false,d);
  for(var i in p){
    if(p[i]==1)u[i]=1
  }
  return u
}

function _IntSet(d,p){
  p=GetSetVal(p);
  d=GetSetVal(d);
  var u=_ISet(false);
  for(var i in d){
    if((p[i]==1)&&(d[i]==1))u[i]=1
  }
  return u
}

function _SubSet(d,p){
  p=GetSetVal(p);
  d=GetSetVal(d);
  for(var i in d){
    if((d[i]==1)&&(p[i]!=1))return false
  }
  return true
}

function _SupSet(d,p){
  return _SubSet(p,d)
}

function _EquSet(d,p){
  p=GetSetVal(p);
  d=GetSetVal(d);
  for(var i in p){
    if(p[i]!=d[i])return false
  }
  for(var i in d){
    if(d[i]!=p[i])return false
  }
  return true
}

function Init_tpoint(w,d){
  if(w){
    var p=AddWrapper(new Object());
    var q=p.v;
  } else {
    var p={};
    var q=p;
  }
  q.x=0;
  q.y=0;
  if(d != void(0)){
    SetVal_tpoint(d,p);
  }
  return p
}

function SetVal_tpoint(d,p){
  p=GetVal(p);
  p.x=SetVal(p.x,GetVal(d.x));
  p.y=SetVal(p.y,GetVal(d.y));
}

function Init_tfont(w,d){
  if(w){
    var p=AddWrapper(new Object());
    var q=p.v;
  } else {
    var p={};
    var q=p;
  }
  q.name="";
  q.height=0;
  q.style={};
  q.color=0;
  if(d != void(0)){
    SetVal_tfont(d,p);
  }
  return p
}

function SetVal_tfont(d,p){
  p=GetVal(p);
  p.name=SetVal(p.name,GetVal(d.name));
  p.height=SetVal(p.height,GetVal(d.height));
  p.style=SetVal(p.style,GetVal(d.style));
  p.color=SetVal(p.color,GetVal(d.color));
}

function tobject(){}
function Register_tobject(){
  if(IsRegisteredtobject)return;
  var p={};  p.zb="tobject";
  p.zc=tobject;
  p.ParentClass=null;
  p.create=tobject_create;
  p.zd=p.destroy=tobject_destroy;
  p.free=tobject_free;
  p.classtype=tobject_classtype;
  p.classname=tobject_classname;
  tobject.prototype=p;
  IsRegisteredtobject=true;
}
function Create_tobject(p){
  Register_tobject();
  if(p==void(0))var p=new tobject();
  p.zb="tobject";
  return p
}

function SetVal_data(d,p){
  p=SetVal(p,d);
}


function texception(){}
function Register_texception(){
  if(IsRegisteredtexception)return;
  Register_tobject();
  var p=new tobject();
  p.zb="texception";
  p.zc=texception;
  p.ParentClass=tobject;
  p.create=texception_create;
  texception.prototype=p;
  IsRegisteredtexception=true;
}
function Create_texception(p){
  Register_texception();
  if(p==void(0))var p=new texception();
  p=Create_tobject(p);
  p.zb="texception";
  p.msg="";
  return p
}

function Create_TJObject(p){
  return new Object();
}

function Create_TArray(p){
  return new Array();
}

function Create_TJDate(p){
  return new Date();
}

function Create_TRegExp(p){
  return new RegExp();
}

function Create_TString(p){
  return new String();
}

function Create_TStringArray(p){
  return new Array();
}

var gvServerException="";gvServerException='';
var vk_back;vk_back=0x08;
var vk_tab;vk_tab=0x09;
var vk_return;vk_return=0x0d;
var vk_escape;vk_escape=0x1b;
var vk_prior;vk_prior=0x21;
var vk_next;vk_next=0x22;
var vk_end;vk_end=0x23;
var vk_home;vk_home=0x24;
var vk_left;vk_left=0x25;
var vk_up;vk_up=0x26;
var vk_right;vk_right=0x27;
var vk_down;vk_down=0x28;
var vk_insert;vk_insert=0x2d;
var vk_delete;vk_delete=0x2e;
var vk_numpad0;vk_numpad0=0x60;
var vk_divide;vk_divide=0x6f;
var cnocolorspecified;cnocolorspecified=0x1fffffff;
var cnofontsizespecified;cnofontsizespecified=-1;
var nilinteger;nilinteger=0x80000000;
var nildatetime;nildatetime=null;
var maxinteger;maxinteger=0x7fffffff;
function tobject_create(){
  var self=this;
  return self;
}

function tobject_destroy(){

}

function tobject_free(){
  var self=this;
  self.destroy();
}

function tobject_classtype(){
  var self=this;

  return getclasstype(self);
}

function tobject_classname(){
  var self=this;

  return getclassname(self);
}

function texception_create(amsg){
  var self=this;
  self.msg=amsg;
  return self;
}

function geturitheme(){  
     try{
         var s = window.location.search.split("&");
         if(s!="")
           for(var i=0; i<s.length; i++){
              var p=s[i].split("=");
              if ((p[0]=="thm")||(p[0]=="?thm"))
                 return decodeURIComponent(p[1]);
           }
         return "";
     }
     catch(e){
        return "";
     }
  
}

function geturilanguage(){  
     try{
         var s = window.location.search.split("&");
         if(s!="")
           for(var i=0; i<s.length; i++){
              var p=s[i].split("=");
              if ((p[0]=="lng")||(p[0]=="?lng"))
                 return decodeURIComponent(p[1]);
           }
         return "";
     }
     catch(e){
        return "";
     }
  
}

_lddmods["System"]=true;
function tparameter(){}
function Register_tparameter(){
  if(IsRegisteredtparameter)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tparameter";
  p.zc=tparameter;
  p.ParentClass=tobject;
  p.create=tparameter_create;
  p.replicate=tparameter_replicate;
  tparameter.prototype=p;
  IsRegisteredtparameter=true;
}
function Create_tparameter(p){
  Register_tparameter();
  if(p==void(0))var p=new tparameter();
  p=Create_tobject(p);
  p.zb="tparameter";
  p.name="";
  p.value="";
  p.defvalue="";
  p.inout="";
  return p
}

function Create_TParameterArray(p){
  return new Array();
}

function tparameters(){}
function Register_tparameters(){
  if(IsRegisteredtparameters)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tparameters";
  p.zc=tparameters;
  p.ParentClass=tobject;
  p.create=tparameters_create;
  p.clear=tparameters_clear;
  p.copyto=tparameters_copyto;
  p.getparambyname=tparameters_getparambyname;
  p.getparamvalue=tparameters_getparamvalue;
  p.addlist=tparameters_addlist;
  p.update=tparameters_update;
  p.define=tparameters_define;
  p.remove=tparameters_remove;
  p.asstring=tparameters_asstring;
  p.asuristring=tparameters_asuristring;
  tparameters.prototype=p;
  IsRegisteredtparameters=true;
}
function Create_tparameters(p){
  Register_tparameters();
  if(p==void(0))var p=new tparameters();
  p=Create_tobject(p);
  p.zb="tparameters";
  p.items=[];
  return p
}

function _IMthod(w,d){
  if(w){
    var p=AddWrapper(null);
    p.v._o=null;
    p.v._p="";
  }else{
    var p={};
    p._o=null;
    p._p="";
  }
  if(d != void(0)){
    _SMthod(d,p);
  }
  return p
}

function _SMthod(d,p){
  p=GetVal(p);
  p._o=d._o;
  p._p=d._p;
}

function txmlhttprequestwrapper(){}
function Register_txmlhttprequestwrapper(){
  if(IsRegisteredtxmlhttprequestwrapper)return;
  Register_tobject();
  var p=new tobject();
  p.zb="txmlhttprequestwrapper";
  p.zc=txmlhttprequestwrapper;
  p.ParentClass=tobject;
  p.getproperty_responsetext=txmlhttprequestwrapper_getproperty_responsetext;
  p.getproperty_onreadystatechange=txmlhttprequestwrapper_getproperty_onreadystatechange;
  p.setproperty_onreadystatechange=txmlhttprequestwrapper_setproperty_onreadystatechange;
  p.getproperty_readystate=txmlhttprequestwrapper_getproperty_readystate;
  p.getproperty_status=txmlhttprequestwrapper_getproperty_status;
  p.open=txmlhttprequestwrapper_open;
  p.send=txmlhttprequestwrapper_send;
  p.setrequestheader=txmlhttprequestwrapper_setrequestheader;
  p.create=txmlhttprequestwrapper_create;
  p.zd=p.destroy=txmlhttprequestwrapper_destroy;
  txmlhttprequestwrapper.prototype=p;
  IsRegisteredtxmlhttprequestwrapper=true;
}
function Create_txmlhttprequestwrapper(p){
  Register_txmlhttprequestwrapper();
  if(p==void(0))var p=new txmlhttprequestwrapper();
  p=Create_tobject(p);
  p.zb="txmlhttprequestwrapper";
  p.fxmlhttprequest=null;
  return p
}

var cxmlhttprequestsucceeded;cxmlhttprequestsucceeded=0;
var cxmlhttprequestinprogress;cxmlhttprequestinprogress=1;
var cserverexceptionmarker;cserverexceptionmarker='####';
function tparameter_create(aname,avalue){
  var self=this;
  tobject.prototype.create.call(self);
  self.name=aname;
  self.value=avalue;
  self.defvalue='@#!$';
  self.inout='InOut';
  return self;
}

function tparameter_replicate(){
  var self=this;
  var result=null;
  result=Create_tparameter().create(self.name,self.value);
  result.defvalue=self.defvalue;
  result.inout=self.inout;
  return result;
}

function tparameters_create(){
  var self=this;
  tobject.prototype.create.call(self);
  self.items=[];
  return self;
}

function tparameters_clear(){
  var self=this;
  self.items.length=0;
}

function tparameters_copyto(parameters){
  var self=this;
  var i=0;
  parameters.clear();
  for(i=self.items.length - 1;i>=0;i--){
    parameters.items.push(self.items[i].replicate());
  }
}

function tparameters_getparambyname(s){
  var self=this;

  var i=0;
  for(i=self.items.length - 1;i>=0;i--){
    if(stringsequal(self.items[i].name,s)){
      return self.items[i];
    }
  }
  return null;
}

function tparameters_getparamvalue(s){
  var self=this;
  var result="";
  var p=null;
  result='';
  p=self.getparambyname(s);
  if(p != null){
    return p.value;
  }
  return result;
}

function tparameters_addlist(paramstr){
  var self=this;

  var i=0;
  var l=0;
  var name="";
  var value="";
  function trim(s){
    var result="";
    var i=0;
    var j=0;
    result=s;
    i=1;
    for(;(i <= lEngTH(s)) && (s.charAt(i-1) == ' ');){
      i++;
    }
    j=lEngTH(s);
    for(;(j > 0) && (s.charAt(j-1) == ' ');){
      j--;
    }
    return copy(s,i,j - i + 1);
  }
  function skipseperatorchars(){    for(;(i <= l) && (paramstr.charAt(i-1) == ' ');){
      i++;
    }
  }
  function parampos(c,paramstr,index){
    var result=0;
    result=jpos(c,paramstr,index - 1);
    for(;(result > 1) && (paramstr.charAt(result - 1-1) == '\\');){
      result=jpos(c,paramstr,result);
    }
    return result;
  }
  function getnextdelimitedtoken(c){
    var result="";
    var j=0;
    result='';
    j=parampos(c,paramstr,i);
    if(j == 0){
      return result;
    }
    result=trim(copy(paramstr,i,j - i));
    i=j + 1;
    return result;
  }
  i=1;
  l=lEngTH(paramstr);
  for(;i <= l;){
    skipseperatorchars();
    if((i <= l) && (paramstr.charAt(i-1) != '\"')){
      return false;
    }else 
      i++;
    name=getnextdelimitedtoken('=');
    value=decodeparameter(getnextdelimitedtoken('\"'));
    self.update(name,value);
    skipseperatorchars();
    if((i <= l) && (paramstr.charAt(i-1) != ',')){
      return false;
    }else 
      i++;
  }
  return true;
}

function tparameters_update(name,value){
  var self=this;
  var result=null;
  result=self.getparambyname(name);
  if(result == null){
    result=Create_tparameter().create(name,value);
    self.items.push(result);
  }else 
    result.value=value;
  return result;
}

function tparameters_define(name,defvalue,inout){
  var self=this;
  var result=null;
  result=self.getparambyname(name);
  if(result == null){
    result=Create_tparameter().create(name,defvalue);
    self.items.push(result);
  }
  result.defvalue=defvalue;
  result.inout=inout;
  return result;
}

function tparameters_remove(param){
  var self=this;
  var inx=0;
  inx=self.items.indexOf(param);
  if(inx != -1){
    self.items.splice(inx,1);
  }
}

function tparameters_asstring(){
  var self=this;
  var result="";
  var i=0;
  result='';
  for(i=self.items.length - 1;i>=0;i--){
    if(result != ''){
      result+=',';
    }
    result+='\"' + self.items[i].name + '=' + encodeparameter(self.items[i].value) + '\"';
  }
  return result;
}

function tparameters_asuristring(){
  var self=this;
  var result="";
  var i=0;
  result='';
  for(i=self.items.length - 1;i>=0;i--){
    with(self.items[i]){
      if(!stringsequal(inout,'Out') && (defvalue != value)){
        if(result != ''){
          result+=',';
        }
        result+='\"' + name + '=' + encodeparameter(value) + '\"';
      }
    }
  }
  return result;
}

function txmlhttprequestwrapper_getproperty_responsetext(){
  var self=this;

  return self.fxmlhttprequest.responseText;
}

function txmlhttprequestwrapper_getproperty_onreadystatechange(){
  var self=this;

  return self.fxmlhttprequest.onreadystatechange;
}

function txmlhttprequestwrapper_setproperty_onreadystatechange(value){
  var self=this;
  self.fxmlhttprequest.onreadystatechange=value;
}

function txmlhttprequestwrapper_getproperty_readystate(){
  var self=this;

  return self.fxmlhttprequest.readyState;
}

function txmlhttprequestwrapper_getproperty_status(){
  var self=this;

  return self.fxmlhttprequest.status;
}

function txmlhttprequestwrapper_open(method,url,async,user,password){
  var self=this;
  self.fxmlhttprequest.open(method,url,async,user,password);
}

function txmlhttprequestwrapper_send(body){
  var self=this;
  self.fxmlhttprequest.send(body);
}

function txmlhttprequestwrapper_setrequestheader(headername,headervalue){
  var self=this;
  self.fxmlhttprequest.setRequestHeader(headername,headervalue);
}

function txmlhttprequestwrapper_create(){
  var self=this;
  tobject.prototype.create.call(self);
  self.fxmlhttprequest=createXMLHTTPRequest();
  return self;
}

function txmlhttprequestwrapper_destroy(){
  var self=this;
  function nop(){  }
  if(self.fxmlhttprequest != null){
    if(bRoWsEr.engineid == 'MS'){
      self.fxmlhttprequest.onreadystatechange=nop;
    }else 
      self.fxmlhttprequest.onreadystatechange=null;
    self.fxmlhttprequest=null;
  }
  tobject.prototype.destroy.call(self);
}

_lddmods["SystemClasses"]=true;
function titemdata(){}
function Register_titemdata(){
  if(IsRegisteredtitemdata)return;
  Register_tobject();
  var p=new tobject();
  p.zb="titemdata";
  p.zc=titemdata;
  p.ParentClass=tobject;
  p.create=titemdata_create;
  titemdata.prototype=p;
  IsRegisteredtitemdata=true;
}
function Create_titemdata(p){
  Register_titemdata();
  if(p==void(0))var p=new titemdata();
  p=Create_tobject(p);
  p.zb="titemdata";
  p.name="";
  return p
}

function tfielddata(){}
function Register_tfielddata(){
  if(IsRegisteredtfielddata)return;
  Register_titemdata();
  var p=new titemdata();
  p.zb="tfielddata";
  p.zc=tfielddata;
  p.ParentClass=titemdata;
  tfielddata.prototype=p;
  IsRegisteredtfielddata=true;
}
function Create_tfielddata(p){
  Register_tfielddata();
  if(p==void(0))var p=new tfielddata();
  p=Create_titemdata(p);
  p.zb="tfielddata";
  p.datatype=0;
  p.fieldrelationshipkind=0;
  return p
}

function Create_TFieldDataArray(p){
  return new Array();
}

function Create_TPackagesConfig(p){
  return new Array();
}

function ttabledata(){}
function Register_ttabledata(){
  if(IsRegisteredttabledata)return;
  Register_titemdata();
  var p=new titemdata();
  p.zb="ttabledata";
  p.zc=ttabledata;
  p.ParentClass=titemdata;
  p.create=ttabledata_create;
  p.getfielddata=ttabledata_getfielddata;
  ttabledata.prototype=p;
  IsRegisteredttabledata=true;
}
function Create_ttabledata(p){
  Register_ttabledata();
  if(p==void(0))var p=new ttabledata();
  p=Create_titemdata(p);
  p.zb="ttabledata";
  p.fields=[];
  p.parameters=[];
  return p
}

function tbackground(){}
function Register_tbackground(){
  if(IsRegisteredtbackground)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tbackground";
  p.zc=tbackground;
  p.ParentClass=tobject;
  p.getproperty_url=tbackground_getproperty_url;
  p.getproperty_filter=tbackground_getproperty_filter;
  p.getproperty_usecolor=tbackground_getproperty_usecolor;
  p.getproperty_positionstyle=tbackground_getproperty_positionstyle;
  p.getproperty_sizestyle=tbackground_getproperty_sizestyle;
  p.getproperty_style=tbackground_getproperty_style;
  p.create=tbackground_create;
  p.getbackgroundstyle=tbackground_getbackgroundstyle;
  p.getbackgroundpath=tbackground_getbackgroundpath;
  p.hasrepeat=tbackground_hasrepeat;
  p.ispngimage=tbackground_ispngimage;
  tbackground.prototype=p;
  IsRegisteredtbackground=true;
}
function Create_tbackground(p){
  Register_tbackground();
  if(p==void(0))var p=new tbackground();
  p=Create_tobject(p);
  p.zb="tbackground";
  p.owner=null;
  p.image="";
  p.slice="";
  p.src="";
  p.bundle="";
  p.imgrepeat="";
  p.position="";
  p.color=0;
  p.left=0;
  p.top=0;
  p.right=0;
  p.bottom=0;
  p.width=0;
  p.height=0;
  p.offsetx=0;
  p.offsety=0;
  p.useborder=0;
  p.usetext=0;
  p.hasimage=0;
  p.imageloaded=0;
  return p
}

function tcontrolstyle(){}
function Register_tcontrolstyle(){
  if(IsRegisteredtcontrolstyle)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tcontrolstyle";
  p.zc=tcontrolstyle;
  p.ParentClass=tobject;
  p.getproperty_image=tcontrolstyle_getproperty_image;
  p.getproperty_resizeable=tcontrolstyle_getproperty_resizeable;
  p.getproperty_hasborder=tcontrolstyle_getproperty_hasborder;
  p.create=tcontrolstyle_create;
  p.findimage=tcontrolstyle_findimage;
  tcontrolstyle.prototype=p;
  IsRegisteredtcontrolstyle=true;
}
function Create_tcontrolstyle(p){
  Register_tcontrolstyle();
  if(p==void(0))var p=new tcontrolstyle();
  p=Create_tobject(p);
  p.zb="tcontrolstyle";
  p.name="";
  p.theme="";
  p.state="";
  p.color=0;
  p.cursor="";
  p.borderwidth=0;
  p.borderstyle=0;
  p.bordersides={};
  p.bordercolor=0;
  p.fontname="";
  p.fontheight=0;
  p.fontstyle={};
  p.fontcolor=0;
  p.images=[];
  return p
}

function tpageinfo(){}
function Register_tpageinfo(){
  if(IsRegisteredtpageinfo)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tpageinfo";
  p.zc=tpageinfo;
  p.ParentClass=tobject;
  tpageinfo.prototype=p;
  IsRegisteredtpageinfo=true;
}
function Create_tpageinfo(p){
  Register_tpageinfo();
  if(p==void(0))var p=new tpageinfo();
  p=Create_tobject(p);
  p.zb="tpageinfo";
  p.name="";
  p.title="";
  p.url="";
  p.params="";
  p.states=[];
  p.overrideparams="";
  return p
}

function tdatasourceinfo(){}
function Register_tdatasourceinfo(){
  if(IsRegisteredtdatasourceinfo)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tdatasourceinfo";
  p.zc=tdatasourceinfo;
  p.ParentClass=tobject;
  tdatasourceinfo.prototype=p;
  IsRegisteredtdatasourceinfo=true;
}
function Create_tdatasourceinfo(p){
  Register_tdatasourceinfo();
  if(p==void(0))var p=new tdatasourceinfo();
  p=Create_tobject(p);
  p.zb="tdatasourceinfo";
  p.createrecordfunc=null;
  return p
}

function Create_TItemDataArray(p){
  return new Array();
}

function tcatalog(){}
function Register_tcatalog(){
  if(IsRegisteredtcatalog)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tcatalog";
  p.zc=tcatalog;
  p.ParentClass=tobject;
  p.getproperty_baseurl=tcatalog_getproperty_baseurl;
  p.create=tcatalog_create;
  p.getitembyname=tcatalog_getitembyname;
  p.additemdata=tcatalog_additemdata;
  p.createmoduleform=tcatalog_createmoduleform;
  p.getfullpageurl=tcatalog_getfullpageurl;
  p.addpageinfo=tcatalog_addpageinfo;
  p.parsepages=tcatalog_parsepages;
  p.getstateslistforpage=tcatalog_getstateslistforpage;
  p.getformstateinpage=tcatalog_getformstateinpage;
  p.getpageinfobycleanurl=tcatalog_getpageinfobycleanurl;
  p.ispagename=tcatalog_ispagename;
  p.gettableorquerybyname=tcatalog_gettableorquerybyname;
  p.getfieldbyname=tcatalog_getfieldbyname;
  tcatalog.prototype=p;
  IsRegisteredtcatalog=true;
}
function Create_tcatalog(p){
  Register_tcatalog();
  if(p==void(0))var p=new tcatalog();
  p=Create_tobject(p);
  p.zb="tcatalog";
  p.items=[];
  p.httpport=0;
  p.httpsport=0;
  p.webpagealignment=0;
  p.pagemarginleft=0;
  p.pagemargintop=0;
  p.pagemarginright=0;
  p.pagemarginbottom=0;
  p.defaulttheme="";
  p.resourcespackaged=0;
  p.pageinfos=[];
  p.datasources=[];
  p.packagesconfig=[];
  p.isie6=0;
  return p
}

function Create_TStyleDataArray(p){
  return new Array();
}

var getwebmethodfunction=null;getwebmethodfunction=null;
var fcatalog=null;fcatalog=null;
var csystemstyles;csystemstyles='System_Styles';
var cnavigatorstyles;cnavigatorstyles='Navigator_Styles';
function catalog(){

  if(fcatalog == null){
    fcatalog=Create_tcatalog().create();
  }
  return fcatalog;
}

function titemdata_create(){
  var self=this;
  tobject.prototype.create.call(self);
  self.name='';
  return self;
}

function ttabledata_create(){
  var self=this;
  titemdata.prototype.create.call(self);
  self.fields=[];
  self.parameters=[];
  return self;
}

function ttabledata_getfielddata(aname){
  var self=this;

  var i=0;
  for(i=0;i<=self.fields.length - 1;i++){
    if(stringsequal(self.fields[i].name,aname)){
      return self.fields[i];
    }
  }
  return null;
}

function controlstyles_styledatabyname(name){
  var result=[];
  var i=0;
  var style=[];
  result=gv_controlstyles[name];
  if(assigned(result) && !result['_init']){
    for(i=0;i<=result.length - 1;i++){
      style=result[i];
      style['_style']=Create_tcontrolstyle().create(style);
    }
    result['_init']=true;
  }
  return result;
}

function controlstyles_systemdata(){

  return controlstyles_styledatabyname(csystemstyles);
}

function controlstyles_navigatordata(){

  return controlstyles_styledatabyname(cnavigatorstyles);
}

function controlstyles_getcontrolstyles(data,aname,atheme,styles,casesensitive){  var i=0;
  var style=null;
  if(data != null){
    for(i=0;i<=data.length - 1;i++){
      style=data[i]['_style'];
      if((style != null) && (((casesensitive && (style.name == aname)) || (!casesensitive && stringsequal(style.name,aname))) && ((style.theme == '') || stringsequal(style.theme,atheme)))){
        styles.push(style);
      }
    }
  }
}

function tbackground_create(aowner,props){
  var self=this;
  tobject.prototype.create.call(self);
  self.owner=aowner;
  self.image=props['image'];
  self.slice=props['slice'];
  self.src=props['src'];
  self.bundle=props['bundle'];
  self.imgrepeat=props['repeat'];
  self.position=props['position'];
  self.color=props['color'];
  self.left=props['left'];
  self.top=props['top'];
  self.right=props['right'];
  self.bottom=props['bottom'];
  self.width=props['width'];
  self.height=props['height'];
  self.offsetx=props['offsetx'];
  self.offsety=props['offsety'];
  self.useborder=props['useborder'];
  self.usetext=props['usetext'];
  self.hasimage=props['hasimage'];
  return self;
}

function tbackground_getbackgroundpath(bundled){
  var self=this;
  var result="";
  result=(bundled)?self.bundle:self.src;
  if((result != '') && (self.owner != null)){
    if(self.owner.theme != ''){
      result=self.owner.theme + '/' + result;
    }
    return composeresourceurl(result);
  }
  return result;
}

function tbackground_getproperty_url(){
  var self=this;
  var result="";
  result=self.getbackgroundpath(true);
  if(result != ''){
    return 'url(\'' + result + '\')';
  }
  return result;
}

function tbackground_hasrepeat(){
  var self=this;

  var s="";
  s=self.imgrepeat;
  return (s != '') && !stringsequal(s,'no-repeat');
}

function tbackground_getproperty_filter(){
  var self=this;

  var method="";
  method=(self.hasrepeat())?'scale':'crop';
  return 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + self.getbackgroundpath(false) + '\', sizingMethod=\'' + method + '\')';
}

function tbackground_getproperty_positionstyle(){


  return 'position:absolute;overflow:hidden;';
}

function tbackground_getproperty_usecolor(){
  var self=this;

  return (self.color != cnocolorspecified) && ((self.slice == '') || stringsequal(self.slice,'C3') || stringsequal(self.slice,'C2') || stringsequal(self.slice,'C4') || stringsequal(self.slice,'B3') || stringsequal(self.slice,'D3'));
}

function tbackground_getproperty_sizestyle(){
  var self=this;

  switch(self.imgrepeat){
    case 'repeat-x':
    return 'height:' + topx(self.height) + ';width:100%;';
    case 'repeat-y':
    return 'height:100%;width:' + topx(self.width) + ';';
    case 'repeat':
    return 'height:100%;width:100%;';
  default:
    return 'height:' + topx(self.height) + ';width:' + topx(self.width) + ';';
  }
}

function tbackground_ispngimage(){
  var self=this;

  return stringsequal(extractext(self.src),'.png');
}

function tbackground_getproperty_style(){
  var self=this;
  var result="";
  result=self.getproperty_url();
  if(result != ''){
    if(self.imgrepeat != ''){
      result+=' ' + self.imgrepeat;
    }
    if(self.position != ''){
      return result + ' ' + self.position;
    }
  }
  return result;
}

function tbackground_getbackgroundstyle(usecolor){
  var self=this;
  var result="";
  var s="";
  result='';
  result=(usecolor && (self.color != cnocolorspecified))?'background-color:' + colortohtmlhex(self.color) + ';':'background-color:transparent;';
  if(!(catalog().isie6 && self.ispngimage())){
    s=self.getproperty_url();
    if(s != ''){
      result+='background-image:' + s + ';';
      if(self.imgrepeat != ''){
        result+='background-repeat:' + self.imgrepeat + ';';
      }
      if(self.position != ''){
        return result + 'background-position:' + self.position + ';';
      }
    }
  }
  return result;
}

function tcontrolstyle_create(props){
  var self=this;
  function getfontstyle(style){
    var result={};
    result={};
    if((style & 1) != 0){
      result=_UnionSet(result,_ISet(false,0,0));
    }
    if((style & 2) != 0){
      result=_UnionSet(result,_ISet(false,1,1));
    }
    if((style & 4) != 0){
      result=_UnionSet(result,_ISet(false,2,2));
    }
    if((style & 8) != 0){
      return _UnionSet(result,_ISet(false,3,3));
    }
    return result;
  }
  function getbordersides(style){
    var result={};
    result={};
    if((style & 1) != 0){
      result=_UnionSet(result,_ISet(false,0,0));
    }
    if((style & 2) != 0){
      result=_UnionSet(result,_ISet(false,1,1));
    }
    if((style & 4) != 0){
      result=_UnionSet(result,_ISet(false,2,2));
    }
    if((style & 8) != 0){
      return _UnionSet(result,_ISet(false,3,3));
    }
    return result;
  }
  function initimages(){    var img=[];
    var i=0;
    img=props['images'];
    if(assigned(img)){
      for(i=0;i<=img.length - 1;i++){
        self.images.push(Create_tbackground().create(self,img[i]));
      }
    }
  }
  tobject.prototype.create.call(self);
  self.images=[];
  self.name=props['name'];
  self.theme=props['theme'];
  self.state=props['state'];
  self.cursor=props['cursor'];
  self.color=props['color'];
  self.borderwidth=props['bwidth'];
  self.bordersides=getbordersides(props['bsides']);
  self.borderstyle=props['bstyle'];
  self.bordercolor=props['bcolor'];
  self.fontname=props['fname'];
  self.fontheight=props['fheight'];
  self.fontcolor=props['fcolor'];
  self.fontstyle=getfontstyle(props['fstyle']);
  initimages();
  return self;
}

function tcontrolstyle_getproperty_image(){
  var self=this;
  var result=null;
  var i=0;
  for(i=0;i<=self.images.length - 1;i++){
    result=self.images[i];
    if(result.slice == ''){
      return result;
    }
  }
  return null;
}

function tcontrolstyle_getproperty_hasborder(){
  var self=this;

  var img=null;
  img=self.getproperty_image();
  return (img == null) || !img.useborder;
}

function tcontrolstyle_getproperty_resizeable(){
  var self=this;
  var result=0;
  var i=0;
  for(i=0;i<=self.images.length - 1;i++){
    result=self.images[i].slice != '';
    if(result){
      return result;
    }
  }
  return false;
}

function tcontrolstyle_findimage(aimage,aslice){
  var self=this;
  var result=null;
  var i=0;
  for(i=0;i<=self.images.length - 1;i++){
    result=self.images[i];
    if(((aimage == '') || stringsequal(result.image,aimage)) && stringsequal(aslice,result.slice)){
      return result;
    }
  }
  return null;
}

function tcatalog_create(){
  var self=this;
  tobject.prototype.create.call(self);
  self.items=[];
  self.httpport=80;
  self.httpsport=443;
  self.webpagealignment=0;
  self.resourcespackaged=true;
  self.defaulttheme='';
  self.isie6=(bRoWsEr.engineid == 'MS') && (bRoWsEr.version <= 6);
  self.pageinfos=[];
  self.datasources=[];
  self.packagesconfig=[];
  return self;
}

function tcatalog_getitembyname(name){
  var self=this;

  var item=null;
  var itmename="";
  var i=0;
  for(i=0;i<=self.items.length - 1;i++){
    item=self.items[i];
    if(stringsequal(item.name,name)){
      return item;
    }
  }
  for(i=0;i<=self.items.length - 1;i++){
    item=self.items[i];
    itmename=replacestring(item.name,' ','_');
    if(stringsequal(itmename,name)){
      return item;
    }
  }
  return null;
}

function tcatalog_additemdata(name){
  var self=this;
  var result=null;
  result=Create_titemdata().create();
  result.name=name;
  self.items.push(result);
  return result;
}

function tcatalog_createmoduleform(modulename,initialparameters){

  var result=null;
  result=null;
  if(!assigned(createmoduleformfunction)){
    return result;
  }
  return createmoduleformfunction(modulename,initialparameters);
}

function removehash(s){

  if((s != '') && (s.charAt(1-1) == '/')){
    s=copy(s,2,__string_length(s) - 1);
  }
  return ((s != '') && (s.charAt(1-1) == '#'))?copy(s,2,__string_length(s) - 1):s;
}

function tcatalog_ispagename(name){
  var self=this;

  var i=0;
  var shortname="";
  var shortnamelen=0;
  name=removehash(name);
  for(i=0;i<=self.pageinfos.length - 1;i++){
    shortname=self.pageinfos[i].name;
    shortnamelen=__string_length(shortname);
    if(__string_startswith(name,shortname)){
      if((__string_length(name) == shortnamelen) || ((__string_length(name) > shortnamelen) && (_InSet(name.charAt(shortnamelen + 1-1),_ISetC(false,'/','/','?','?'))))){
        return true;
      }
    }
  }
  return false;
}

function tcatalog_gettableorquerybyname(name){


  var i=0;
  function namesmatch(s1,s2){

    s1=replacestring(s1,' ','_');
    s2=replacestring(s2,' ','_');
    return __string_equals(s1,s2);
  }
  for(i=0;i<=catalog().items.length - 1;i++){
    if(namesmatch(catalog().items[i].name,name)){
      if(_IS(catalog().items[i],ttabledata)){
        return catalog().items[i];
      }
    }
  }
  return null;
}

function tcatalog_getfieldbyname(fieldname,datasourcename){
  var self=this;
  var result=null;
  var i=0;
  var tabledata=null;
  function namesmatch(s1,s2){

    s1=replacestring(s1,' ','_');
    s2=replacestring(s2,' ','_');
    return __string_equals(s1,s2);
  }
  result=null;
  tabledata=self.gettableorquerybyname(datasourcename);
  if(tabledata == null){
    return result;
  }
  for(i=0;i<=tabledata.fields.length - 1;i++){
    if(namesmatch(tabledata.fields[i].name,fieldname)){
      result=tabledata.fields[i];
    }
  }
  return result;
}

function tcatalog_addpageinfo(aname,atitle,aurl,aparams){
  var self=this;
  var pageinfo=null;
  pageinfo=Create_tpageinfo().create();
  pageinfo.name=aname;
  pageinfo.title=atitle;
  pageinfo.url=aurl;
  pageinfo.params=aparams;
  self.pageinfos.push(pageinfo);
}

function tcatalog_getstateslistforpage(cleanurl){
  var self=this;

  var info=null;
  info=self.getpageinfobycleanurl(cleanurl);
  return (info == null)?null:info.states;
}

function tcatalog_getformstateinpage(cleanurl,subformname){
  var self=this;
  var result=null;
  var i=0;
  var stateslist=[];
  cleanurl=removehash(cleanurl);
  stateslist=self.getstateslistforpage(cleanurl);
  if(stateslist == null){
    return null;
  }
  for(i=0;i<=stateslist.length - 1;i++){
    result=stateslist[i];
    if(stringsequal(result.location,subformname)){
      return result;
    }
  }
  return null;
}

function tcatalog_parsepages(){
  var self=this;
  var i=0;
  var reconstructor=null;
  var pageinfo=null;
  for(i=0;i<=self.pageinfos.length - 1;i++){
    pageinfo=self.pageinfos[i];
    reconstructor=Create_tstatereconstructor().create(pageinfo.url);
    pageinfo.states=reconstructor.statelist;
    reconstructor.statelist=null;
    free(reconstructor);
  }
}

function tcatalog_getpageinfobycleanurl(cleanurl){
  var self=this;
  var result=null;
  var i=0;
  var shortname="";
  var cleanurllen=0;
  var shortnamelen=0;
  var maxmatch=0;
  var pageinfo=null;
  cleanurl=removehash(cleanurl);
  result=null;
  maxmatch=0;
  for(i=0;i<=self.pageinfos.length - 1;i++){
    pageinfo=self.pageinfos[i];
    shortname=pageinfo.name;
    cleanurllen=__string_length(cleanurl);
    shortnamelen=__string_length(shortname);
    if(__string_startswith(cleanurl,shortname)){
      if((cleanurllen == shortnamelen) || ((cleanurllen > shortnamelen) && (cleanurl.charAt(shortnamelen + 1-1) == '/'))){
        if(shortnamelen > maxmatch){
          result=pageinfo;
          maxmatch=shortnamelen;
        }
      }
    }
  }
  return result;
}

function tcatalog_getfullpageurl(cleanurl,pagename,pageparams){
  var self=this;

  var shortname="";
  var shortnamelen=0;
  var paramsvaluesstr="";
  var paramsnames=[];
  var paramsvalues=[];
  var pageinfo=null;
  function getparamsstr(){
    var result="";
    var i=0;
    result='';
    for(i=0;i<=paramsvalues.length - 1;i++){
      if(result != ''){
        result+=',';
      }
      result+='\"' + paramsnames[i] + '=' + paramsvalues[i] + '\"';
    }
    return result;
  }
  cleanurl=removehash(cleanurl);
  pageinfo=self.getpageinfobycleanurl(cleanurl);
  pageparams.v='';
  pagename.v='';
  if(pageinfo != null){
    pagename.v=pageinfo.name;
    shortname=pageinfo.name;
    shortnamelen=__string_length(shortname);
    paramsvaluesstr=copy(cleanurl,shortnamelen + 2,__string_length(cleanurl) - shortnamelen - 1);
    if(paramsvaluesstr != ''){
      paramsvalues=__string_split(paramsvaluesstr,'/');
      paramsnames=__string_split(pageinfo.params,'`');
      pageparams.v=getparamsstr();
    }
    return pageinfo.url;
  }else 
    return cleanurl;
}

function tcatalog_getproperty_baseurl(){


  return gvBaseURL;
}

_lddmods["SystemCatalog"]=true;
function form(){}
function Register_form(){
  if(IsRegisteredform)return;
  Register_tabstractform();
  var p=new tabstractform();
  p.zb="form";
  p.zc=form;
  p.ParentClass=tabstractform;
  p.getproperty_currentrecord=form_getproperty_currentrecord;
  p.setproperty_currentrecord=form_setproperty_currentrecord;
  p.getproperty_countrecordsexactly=form_getproperty_countrecordsexactly;
  p.setproperty_countrecordsexactly=form_setproperty_countrecordsexactly;
  p.getproperty_isformfocused=form_getproperty_isformfocused;
  p.setproperty_isformfocused=form_setproperty_isformfocused;
  p.getproperty_sqlfilter=form_getproperty_sqlfilter;
  p.setproperty_sqlfilter=form_setproperty_sqlfilter;
  p.getproperty_pagesize=form_getproperty_pagesize;
  p.setproperty_pagesize=form_setproperty_pagesize;
  p.getproperty_startingoffset=form_getproperty_startingoffset;
  p.setproperty_startingoffset=form_setproperty_startingoffset;
  p.getproperty_startingrecordindex=form_getproperty_startingrecordindex;
  p.setproperty_startingrecordindex=form_setproperty_startingrecordindex;
  p.getproperty_recordcount=form_getproperty_recordcount;
  p.setproperty_recordcount=form_setproperty_recordcount;
  p.getproperty_datalink=form_getproperty_datalink;
  p.getboundcontrols=form_getboundcontrols;
  p.getpagecount=form_getpagecount;
  p.getcurrentpage=form_getcurrentpage;
  p.getpagerecordcount=form_getpagerecordcount;
  p.displaylistcontrols=form_displaylistcontrols;
  p.getstate=form_getstate;
  p.getdatachanged=form_getdatachanged;
  p.setstate=form_setstate;
  p.shouldserialize=form_shouldserialize;
  p.pagenumbereditonkeydown=form_pagenumbereditonkeydown;
  p.recordnumbereditonkeydown=form_recordnumbereditonkeydown;
  p.defineorapplyfilter=form_defineorapplyfilter;
  p.highlightnavbtn=form_highlightnavbtn;
  p.enablenavbtn=form_enablenavbtn;
  p.dobeforedbnavigate=form_dobeforedbnavigate;
  p.doafterdbnavigate=form_doafterdbnavigate;
  p.dobeforedatachange=form_dobeforedatachange;
  p.doafterdatachange=form_doafterdatachange;
  p.dobeforedatamodechange=form_dobeforedatamodechange;
  p.doafterdatamodechange=form_doafterdatamodechange;
  p.dobeforerefresh=form_dobeforerefresh;
  p.doafterrefresh=form_doafterrefresh;
  p.dobeforesubmit=form_dobeforesubmit;
  p.doaftersubmit=form_doaftersubmit;
  p.continuousform_init=form_continuousform_init;
  p.continuousform_setstate=form_continuousform_setstate;
  p.continuousform_adddetail=form_continuousform_adddetail;
  p.continuousform_hideeditband=form_continuousform_hideeditband;
  p.continuousform_showeditband=form_continuousform_showeditband;
  p.continuousform_updatecurrentrecord=form_continuousform_updatecurrentrecord;
  p.continuousform_putfocus=form_continuousform_putfocus;
  p.continuousform_navigate=form_continuousform_navigate;
  p.continuousform_deletedetail=form_continuousform_deletedetail;
  p.deserializectrl=form_deserializectrl;
  p.getproperty_datasource=form_getproperty_datasource;
  p.setproperty_datasource=form_setproperty_datasource;
  p.buildnavigator=form_buildnavigator;
  p.getproperty_datamode=form_getproperty_datamode;
  p.setproperty_datamode=form_setproperty_datamode;
  p.setproperty_dataset=form_setproperty_dataset;
  p.createdataset=form_createdataset;
  p.destroydataset=form_destroydataset;
  p.checkbrowsemode=form_checkbrowsemode;
  p.continuousform_handleonclick=form_continuousform_handleonclick;
  p.continuousform_handleondblclick=form_continuousform_handleondblclick;
  p.continuousform_handleonkeydown=form_continuousform_handleonkeydown;
  p.continuousform_focus=form_continuousform_focus;
  p.continuousform_blur=form_continuousform_blur;
  p.setupdomeventhandlers=form_setupdomeventhandlers;
  p.create1=form_create1;
  p.zd=p.destroy=form_destroy;
  p.updatenavigator=form_updatenavigator;
  p.checkdataformready=form_checkdataformready;
  p.adddataboundctrltolist=form_adddataboundctrltolist;
  p.updateparametersfromhiddenhtmlfields=form_updateparametersfromhiddenhtmlfields;
  p.initializeafteropen=form_initializeafteropen;
  p.beforeshow=form_beforeshow;
  p.aftershow=form_aftershow;
  p.moveto=form_moveto;
  p.buildfilteronctrlvalues=form_buildfilteronctrlvalues;
  p.firstpage=form_firstpage;
  p.previouspage=form_previouspage;
  p.firstrecord=form_firstrecord;
  p.previousrecord=form_previousrecord;
  p.nextrecord=form_nextrecord;
  p.lastrecord=form_lastrecord;
  p.nextpage=form_nextpage;
  p.lastpage=form_lastpage;
  p.newrecord=form_newrecord;
  p.deleterecord=form_deleterecord;
  p.editrecord=form_editrecord;
  p.cancelrecordchanges=form_cancelrecordchanges;
  p.definefilter=form_definefilter;
  p.applyfilter=form_applyfilter;
  p.clearfilter=form_clearfilter;
  p.requestpage=form_requestpage;
  p.changefilter=form_changefilter;
  p.submitpage=form_submitpage;
  p.refreshpage=form_refreshpage;
  p.datasetchanged=form_datasetchanged;
  form.prototype=p;
  IsRegisteredform=true;
}
function Create_form(p){
  Register_form();
  if(p==void(0))var p=new form();
  p=Create_tabstractform(p);
  p.zb="form";
  p.fcurrentrecordindex=0;
  p.fdatamode=0;
  p.fdatalinks=null;
  p.fdatalink=null;
  p.fdataset=null;
  p.frequirecountrecordsexactly=0;
  p.onbeforedatachange=_IMthod(false);
  p.onafterdatachange=_IMthod(false);
  p.onbeforedbnavigate=_IMthod(false);
  p.onafterdbnavigate=_IMthod(false);
  p.onbeforedatamodechange=_IMthod(false);
  p.onafterdatamodechange=_IMthod(false);
  return p
}

function tformdatalink(){}
function Register_tformdatalink(){
  if(IsRegisteredtformdatalink)return;
  Register_tdatalink();
  var p=new tdatalink();
  p.zb="tformdatalink";
  p.zc=tformdatalink;
  p.ParentClass=tdatalink;
  p.create=tformdatalink_create;
  p.beginbusy=tformdatalink_beginbusy;
  p.endbusy=tformdatalink_endbusy;
  p.beforerefresh=tformdatalink_beforerefresh;
  p.afterrefresh=tformdatalink_afterrefresh;
  p.beforesubmit=tformdatalink_beforesubmit;
  p.aftersubmit=tformdatalink_aftersubmit;
  p.beforedbnavigate=tformdatalink_beforedbnavigate;
  p.afterdbnavigate=tformdatalink_afterdbnavigate;
  p.beforedatachange=tformdatalink_beforedatachange;
  p.afterdatachange=tformdatalink_afterdatachange;
  tformdatalink.prototype=p;
  IsRegisteredtformdatalink=true;
}
function Create_tformdatalink(p){
  Register_tformdatalink();
  if(p==void(0))var p=new tformdatalink();
  p=Create_tdatalink(p);
  p.zb="tformdatalink";
  p.fform=null;
  p.fsaverecordindex=0;
  return p
}

function tformopener(){}
function Register_tformopener(){
  if(IsRegisteredtformopener)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tformopener";
  p.zc=tformopener;
  p.ParentClass=tobject;
  p.create=tformopener_create;
  p.zd=p.destroy=tformopener_destroy;
  p.handleerror=tformopener_handleerror;
  p.setformreadytimer=tformopener_setformreadytimer;
  p.resetformreadytimer=tformopener_resetformreadytimer;
  p.handlehtml=tformopener_handlehtml;
  p.subformsareloaded=tformopener_subformsareloaded;
  p.createform=tformopener_createform;
  p.openembeddedsubforms=tformopener_openembeddedsubforms;
  p.opensiblingsubformsinrepeatedbands=tformopener_opensiblingsubformsinrepeatedbands;
  p.initializeform=tformopener_initializeform;
  p.checkformready=tformopener_checkformready;
  tformopener.prototype=p;
  IsRegisteredtformopener=true;
}
function Create_tformopener(p){
  Register_tformopener();
  if(p==void(0))var p=new tformopener();
  p=Create_tobject(p);
  p.zb="tformopener";
  p.openformparameters="";
  p.newform=null;
  p.formclassname="";
  p.forminstancename="";
  p.targetbandindex=0;
  p.targetsubform=null;
  p.xmlhttprequest=null;
  p.onreadytimer=null;
  p.onreadyperiod=0;
  p.activate=0;
  p.successfullycompleted=0;
  p.currentpagename="";
  p.batchid="";
  return p
}

function t_webband(){}
function Register_t_webband(){
  if(IsRegisteredt_webband)return;
  Register_band();
  var p=new band();
  p.zb="t_webband";
  p.zc=t_webband;
  p.ParentClass=band;
  t_webband.prototype=p;
  IsRegisteredt_webband=true;
}
function Create_t_webband(p){
  Register_t_webband();
  if(p==void(0))var p=new t_webband();
  p=Create_band(p);
  p.zb="t_webband";
  return p
}

function tformdatalink_create(aform){
  var self=this;
  tdatalink.prototype.create.call(self);
  self.fform=aform;
  return self;
}

function tformdatalink_beginbusy(){
  var self=this;
  self.fform.beginbusy();
}

function tformdatalink_endbusy(){
  var self=this;
  self.fform.endbusy();
}

function tformdatalink_beforerefresh(){
  var self=this;
  var result=0;
  with(self.fform){
    if(fdataset != null){
      setproperty_startingoffset(fdataset.getproperty_startingoffset());
      setproperty_startingrecordindex(fdataset.getproperty_startingrecordindex());
    }
    result=dobeforerefresh();
    if(result && (fdataset != null)){
      currentparameters.copyto(fdataset.parameters);
      fdataset.setproperty_countrecordsexactly(getproperty_countrecordsexactly());
    }
    if(getproperty_viewmode() == 2){
      currentparameters.update('OpenMode','Refresh');
      openform(instancefullref(),ownersubformtargetref(),currentparameters.asuristring());
      result=false;
    }
  }
  return result;
}

function tformdatalink_afterrefresh(failed,error){
  var self=this;
  with(self.fform){
    if(!failed){
      if(fdataset != null){
        setproperty_startingoffset(fdataset.getproperty_startingoffset());
        setproperty_pagesize(fdataset.getproperty_pagesize());
        setproperty_recordcount(fdataset.getproperty_recordcount());
      }
      if(recordnumedit != null){
        recordnumedit.setproperty_visible(true);
      }
      displaylistcontrols();
      setstate();
    }
    self.fform.doafterrefresh(failed,error);
    if(!(_InSet(fformreadystate,_ISet(false,3,3,4,4)))){
      setproperty_formreadystate(2);
      if(formopener != null){
        formopener.checkformready(null);
      }
    }
  }
}

function tformdatalink_beforesubmit(){
  var self=this;

  return self.fform.dobeforesubmit();
}

function tformdatalink_aftersubmit(failed,error){
  var self=this;
  self.fform.doaftersubmit(failed,error);
}

function tformdatalink_beforedbnavigate(action){
  var self=this;
  var result=0;
  result=false;
  with(self.fform){
    if(infilterdefine){
      return result;
    }
    result=dobeforedbnavigate(action);
    if(result){
      switch(getproperty_viewmode()){
        case 0:
        result=getstate();
        break;
        case 2:
        checkbrowsemode();
      }
    }
  }
  return result;
}

function tformdatalink_afterdbnavigate(action){
  var self=this;
  with(self.fform){
    switch(getproperty_viewmode()){
      case 0:
      setstate();
      break;
      case 2:
      continuousform_updatecurrentrecord();
      updatenavigator();
    }
    doafterdbnavigate(action);
  }
}

function tformdatalink_beforedatachange(action){
  var self=this;
  var result=0;
  result=false;
  with(self.fform){
    if(infilterdefine){
      return result;
    }
    if(!getstate()){
      return result;
    }
    result=dobeforedatachange(action);
    if(result){
      checkbrowsemode();
    }
    self.fsaverecordindex=getproperty_currentrecord();
  }
  return result;
}

function tformdatalink_afterdatachange(action){
  var self=this;
  with(self.fform){
    switch(action){
      case 0:
      setproperty_recordcount(getproperty_recordcount() + 1);
      break;
      case 1:
      setproperty_recordcount(getproperty_recordcount() - 1);
    }
    switch(getproperty_viewmode()){
      case 0:
      setstate();
      break;
      case 2:
      switch(action){
        case 0:
        setproperty_datamode(3);
        break;
        case 1:
        setproperty_datamode(1);
        continuousform_deletedetail(self.fsaverecordindex);
      }
    }
    doafterdatachange(action);
  }
}

function form_requestpage(newpage,newrecpos,submitchanges){
  var self=this;
  self.setproperty_startingrecordindex(newrecpos);
  self.setproperty_startingoffset(newpage * self.getproperty_pagesize());
  if(self.getproperty_startingoffset() < 0){
    self.setproperty_startingoffset(0);
  }
  if(self.getproperty_viewmode() == 1){
    self.currentparameters.update('OpenMode','Refresh');
    self.openform(self.instancefullref(),self.ownersubformtargetref(),self.currentparameters.asuristring());
    return;
  }
  if(self.fdataset != null){
    self.fdataset.requestpage(newpage,newrecpos,submitchanges);
  }
}

function form_changefilter(newfilter){
  var self=this;
  self.setproperty_sqlfilter(newfilter);
  self.requestpage(0,0,false);
}

function form_continuousform_updatecurrentrecord(){
  var self=this;
  var idx=0;
  var oldidx=0;
  idx=self.getproperty_currentrecord();
  oldidx=self.detail.currentrecordindex;
  self.detail.currentrecordindex=idx;
  if((oldidx >= 0) && (oldidx < self.detail.bandinfos.length)){
    self.detail.updatecurrentstyle(oldidx,0,true,false);
  }
  if((idx >= 0) && (idx != oldidx)){
    self.detail.updatecurrentstyle(idx,0,true,false);
  }
}

function form_continuousform_init(){
  var self=this;
  function deserializeband(rec,aband){    var i=0;
    var fieldname="";
    var fieldvalue="";
    for(i=0;i<=aband.embeddedfieldcount() - 1;i++){
      fieldname=aband.getproperty_embeddedfieldname(i);
      fieldvalue=aband.getproperty_embeddedfieldvalue(i);
      if(rec.Fields.hasOwnProperty(fieldname)){
        rec.Fields[fieldname]=decodeURIComponent(fieldvalue);
      }
    }
  }
  function endofdocument(){

    return (self.detail.bandinfos.length == 1) && !self.detail.getproperty_visible();
  }
  function initdatasource(){    var page=null;
    var i=0;
    var rec=null;
    if(self.fdataset == null){
      return;
    }
    page=self.fdataset.createcurrentdatapage();
    page.cleardblist(false);
    if(!endofdocument()){
      for(i=0;i<=self.detail.bandinfos.length - 1;i++){
        page.addnewrecord();
        page.last();
        rec=page.getcurrentrecord();
        rec.Status=3;
        self.detail.bandindex=i;
        deserializeband(rec,self.detail);
      }
    }
    self.currentparameters.copyto(self.fdataset.parameters);
    self.fdataset.setproperty_currentrecord(self.getproperty_startingrecordindex());
  }
  function enablekeyevents(){    if(!self.domhandlecreated()){
      return;
    }
    self.domhandle().tabIndex=0;
    self.domstyle().outline='none';
  }
  initdatasource();
  enablekeyevents();
  self.detail.currentrecordindex=self.getproperty_currentrecord();
  self.detail.updatestyles();
}

function form_deserializectrl(ctrl,rec){

  var fieldname="";
  var serializer=null;
  fieldname=ctrl.attrs.v.datafield;
  if(rec.Fields.hasOwnProperty(fieldname)){
    serializer=Create_tserializer().create();
    serializer.datarecord=rec.Fields;
    serializer.fieldname=fieldname;
    ctrl.deserialize(serializer);
  }
}

function form_continuousform_setstate(){
  var self=this;
  var rec=null;
  var ctrl=null;
  var i=0;
  function needserialize(ctrl){
    var result=0;
    result=true;
    for(;ctrl != null;){
      result=ctrl != self.detaileditable;
      if(!result){
        break;
      }
      ctrl=ctrl.owner;
    }
    return result;
  }
  if(self.fdataset == null){
    return;
  }
  self.detail.bandindex=self.getproperty_currentrecord();
  switchbandindexbyctrl(self.detail);
  rec=self.fdataset.currentdatapage.getcurrentrecord();
  if(rec == null){
    return;
  }
  for(i=self.getboundcontrols().length - 1;i>=0;i--){
    ctrl=self.getboundcontrols()[i];
    if(needserialize(ctrl)){
      self.deserializectrl(ctrl,rec);
    }
  }
}

function form_continuousform_showeditband(){
  var self=this;
  if(!self.detail.domhandlecreated()){
    return;
  }
  self.detail.bandindex=self.getproperty_currentrecord();
  switchbandindexbyctrl(self.detail);
  self.detail.domstyle().display='none';
  self.detaileditable.moveto(self.detail);
  self.detaileditable.setproperty_visible(true);
  self.setstate();
  self.groworshrink(-1,true);
  self.recalculateplacement(true,true);
}

function form_continuousform_hideeditband(){
  var self=this;
  if(!self.detail.domhandlecreated()){
    return;
  }
  xapp.deactivatepopups(null);
  self.detail.bandindex=self.getproperty_currentrecord();
  switchbandindexbyctrl(self.detail);
  self.detail.domstyle().display='';
  self.detaileditable.restore();
  self.detaileditable.setproperty_visible(false);
  self.groworshrink(-1,true);
  self.recalculateplacement(true,true);
}

function form_continuousform_adddetail(){
  var self=this;
  if((self.detail.bandinfos.length == 1) && !self.detail.getproperty_visible()){
    self.detail.setproperty_visible(true);
  }else 
    self.detail.clone();
}

function form_continuousform_deletedetail(abandindex){
  var self=this;
  if(!self.detail.domhandlecreated()){
    return;
  }
  self.detail.bandindex=abandindex;
  if(self.detail.bandinfos.length == 1){
    self.detail.setproperty_visible(false);
  }else 
    self.detail.delete_();
  self.detail.bandindex=self.getproperty_currentrecord();
  self.detail.currentrecordindex=self.getproperty_currentrecord();
  switchbandindexbyctrl(self.detail);
  self.detail.updatestyles();
  self.recalculateplacement(true,true);
}

function form_continuousform_navigate(event,action){
  var self=this;
  var offset=0;
  var newrecpos=0;
  offset=nilinteger;
  newrecpos=nilinteger;
  switch(action){
    case 0:
    if(self.getcurrentpage() > 0){
      offset=0;
    }else 
      newrecpos=0;
    break;
    case 1:
    if(self.getproperty_currentrecord() == 0){
      offset=self.getproperty_startingoffset() - self.getproperty_pagesize();
      newrecpos=self.getproperty_pagesize();
    }else 
      newrecpos=self.getproperty_currentrecord() - 1;
    break;
    case 2:
    if(self.getproperty_currentrecord() >= (self.getpagerecordcount() - 1)){
      offset=self.getproperty_startingoffset() + self.getproperty_pagesize();
    }else 
      newrecpos=self.getproperty_currentrecord() + 1;
    break;
    case 3:
    if(self.getcurrentpage() < (self.getpagecount() - 1)){
      offset=-1000;
    }else 
      newrecpos=self.getpagerecordcount() - 1;
    newrecpos=self.getproperty_pagesize();
    break;
    case 4:
    if(self.getproperty_startingoffset() > 0){
      offset=0;
      newrecpos=self.getproperty_currentrecord();
    }
    break;
    case 5:
    if(self.getproperty_startingoffset() > 0){
      offset=self.getproperty_startingoffset() - self.getproperty_pagesize();
      newrecpos=self.getproperty_currentrecord();
    }
    break;
    case 6:
    offset=self.getproperty_startingoffset() + self.getproperty_pagesize();
    newrecpos=self.getproperty_currentrecord();
    break;
    case 7:
    offset=-1000;
    newrecpos=self.getproperty_currentrecord();
  }
  if((offset == nilinteger) && (newrecpos == nilinteger)){
    return;
  }
  if(self.dobeforedbnavigate(action)){
    if(offset != nilinteger){
      self.setproperty_startingoffset(offset);
      self.openform(self.instancefullref(),self.ownersubformtargetref(),self.currentparameters.asuristring());
    }else {
      newrecpos=min(newrecpos,self.getpagerecordcount() - 1);
      if(newrecpos >= 0){
        self.setproperty_currentrecord(newrecpos);
      }
    }
    self.doafterdbnavigate(action);
  }
}

function form_continuousform_putfocus(){
  var self=this;
  var handle=null;
  var ctrl=null;
  if(self.getproperty_datamode() == 1){
    handle=self.domhandle();
    if(assigned(handle.focus)){
      handle.focus();
    }
  }else {
    ctrl=self.getinputcontrol(self.detaileditable);
    if(ctrl != null){
      ctrl.focus();
    }
  }
}

function form_continuousform_handleonclick(event){
  var self=this;
  var idx=0;
  idx=geteventbandindex(event,self.bandindex);
  if((idx >= 0) && (self.getproperty_currentrecord() != idx)){
    if(self.getproperty_datamode() != 1){
      if(!self.getstate()){
        return;
      }
    }
    self.checkbrowsemode();
    self.setproperty_currentrecord(idx);
  }
}

function form_continuousform_handleondblclick(event){
  var self=this;
  var result=0;
  result=true;
  if(self.getproperty_viewmode() != 2){
    return result;
  }
  if(self.fdataset == null){
    return result;
  }
  if(self.getproperty_datamode() != 1){
    return result;
  }
  if(geteventbandindex(event,self.bandindex) >= 0){
    if(self.getpagerecordcount() > 0){
      self.editrecord(null);
      result=false;
    }
  }
  if(!result){
    if(assigned(event.preventDefault)){
      event.preventDefault();
    }
    self.canceleventbubble(event);
  }
  return result;
}

function form_continuousform_handleonkeydown(event){
  var self=this;
  var result=0;
  var count=0;
  result=true;
  if(self.getproperty_viewmode() != 2){
    return result;
  }
  if(self.fdataset == null){
    return result;
  }
  switch(__string_tointeger(event.keyCode)){
    case vk_escape:
    if(_InSet(self.getproperty_datamode(),_ISet(false,3,3,2,2))){
      self.cancelrecordchanges(event);
      self.continuousform_putfocus();
      result=false;
    }
    break;
    case vk_insert:
    if(event.ctrlKey && (self.getproperty_datamode() == 1)){
      self.fdataset.newrecord();
      self.continuousform_putfocus();
      result=false;
    }
    break;
    case vk_return:
    if(self.getproperty_datamode() == 1){
      if(self.getpagerecordcount() > 0){
        self.editrecord(null);
        self.continuousform_putfocus();
        result=false;
      }
    }else 
    if(event.ctrlKey && self.getstate()){
      self.checkbrowsemode();
      self.continuousform_putfocus();
      result=false;
    }
    break;
    case vk_delete:
    if(event.ctrlKey && (self.getproperty_datamode() == 1)){
      self.fdataset.deleterecord();
      result=false;
    }
    break;
    case vk_down:;
    case vk_up:;
    case vk_prior:;
    case vk_next:
    if(self.getproperty_datamode() == 1){
      count=self.getpagerecordcount();
      if(count > 0){
        switch(__string_tointeger(event.keyCode)){
          case vk_down:
          self.fdataset.nextrecord();
          result=false;
          break;
          case vk_up:
          self.fdataset.previousrecord();
          result=false;
          break;
          case vk_prior:
          if(self.getproperty_currentrecord() > 0){
            self.setproperty_currentrecord(0);
          }else 
            self.fdataset.previouspage();
          result=false;
          break;
          case vk_next:
          if((count > 0) && (self.getproperty_currentrecord() < (count - 1))){
            self.setproperty_currentrecord(count - 1);
          }else 
            self.fdataset.nextpage();
          result=false;
        }
      }
    }
  }
  if(!result){
    if(assigned(event.preventDefault)){
      event.preventDefault();
    }
    self.canceleventbubble(event);
  }
  return result;
}

function form_continuousform_focus(event){
  var self=this;
  self.setproperty_isformfocused(true);
}

function form_continuousform_blur(event){
  var self=this;
  self.setproperty_isformfocused(false);
}

function form_submitpage(event){
  var self=this;
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(_InSet(self.getproperty_viewmode(),_ISet(false,0,0,2,2))){
    if((self.fdataset != null) && (self.fdataset.currentdatapage != null)){
      if(self.getstate()){
        self.fdataset.submitpage();
      }
    }
  }
}

function form_refreshpage(event){
  var self=this;
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  self.setproperty_datamode(1);
  self.requestpage(self.getcurrentpage(),self.getproperty_currentrecord(),false);
}

function form_firstrecord(event){
  var self=this;
  self.highlightnavbtn(geteventsource(event),false);
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(self.getproperty_viewmode() == 1){
    self.continuousform_navigate(event,0);
  }else 
  if(self.fdataset != null){
    self.fdataset.firstrecord();
  }
}

function form_previousrecord(event){
  var self=this;
  self.highlightnavbtn(geteventsource(event),false);
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(self.getproperty_viewmode() == 1){
    self.continuousform_navigate(event,1);
  }else 
  if(self.fdataset != null){
    self.fdataset.previousrecord();
  }
}

function form_nextrecord(event){
  var self=this;
  self.highlightnavbtn(geteventsource(event),false);
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(self.getproperty_viewmode() == 1){
    self.continuousform_navigate(event,2);
  }else 
  if(self.fdataset != null){
    self.fdataset.nextrecord();
  }
}

function form_lastrecord(event){
  var self=this;
  self.highlightnavbtn(geteventsource(event),false);
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(self.getproperty_viewmode() == 1){
    self.continuousform_navigate(event,3);
  }else 
  if(self.fdataset != null){
    self.fdataset.lastrecord();
  }
}

function form_firstpage(event){
  var self=this;
  self.highlightnavbtn(geteventsource(event),false);
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(self.getproperty_viewmode() == 1){
    self.continuousform_navigate(event,4);
  }else 
  if(self.fdataset != null){
    self.fdataset.firstpage();
  }
}

function form_previouspage(event){
  var self=this;
  self.highlightnavbtn(geteventsource(event),false);
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(self.getproperty_viewmode() == 1){
    self.continuousform_navigate(event,5);
  }else 
  if(self.fdataset != null){
    self.fdataset.previouspage();
  }
}

function form_nextpage(event){
  var self=this;
  self.highlightnavbtn(geteventsource(event),false);
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(self.getproperty_viewmode() == 1){
    self.continuousform_navigate(event,6);
  }else 
  if(self.fdataset != null){
    self.fdataset.nextpage();
  }
}

function form_lastpage(event){
  var self=this;
  self.highlightnavbtn(geteventsource(event),false);
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(self.getproperty_viewmode() == 1){
    self.continuousform_navigate(event,7);
  }else 
  if(self.fdataset != null){
    self.fdataset.lastpage();
  }
}

function form_newrecord(event){
  var self=this;
  if(self.infilterdefine){
    return;
  }
  if(self.fdataset == null){
    return;
  }
  if(self.getproperty_viewmode() == 1){
    return;
  }
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  self.fdataset.newrecord();
}

function form_deleterecord(event){
  var self=this;
  if(self.infilterdefine){
    return;
  }
  if(self.fdataset == null){
    return;
  }
  if(self.getproperty_viewmode() == 1){
    return;
  }
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  self.fdataset.deleterecord();
}

function form_editrecord(event){
  var self=this;
  if(self.infilterdefine){
    return;
  }
  if(self.fdataset == null){
    return;
  }
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  switch(self.getproperty_viewmode()){
    case 0:;
    case 2:
    if(self.getstate()){
      self.setproperty_datamode(2);
      self.updatenavigator();
    }
  }
}

function form_cancelrecordchanges(event){
  var self=this;
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(self.getproperty_viewmode() == 2){
    if(self.getproperty_datamode() == 3){
      self.deleterecord(null);
    }
    self.setproperty_datamode(1);
  }else 
  if(self.infilterdefine){
    self.clearfilter(event);
  }else 
  if(self.datasetchanged()){
    self.setstate();
  }else 
    self.clearfilter(event);
}

function form_defineorapplyfilter(event){
  var self=this;
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(self.infilterdefine){
    self.applyfilter(event);
  }else 
    self.definefilter(event);
}

function form_definefilter(event){
  var self=this;
  function doclearctrl(ctrl){    var i=0;
    ctrl.clearvalue();
    for(i=ctrl.childcount() - 1;i>=0;i--){
      doclearctrl(ctrl.childctrls[i]);
    }
  }
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(self.infilterdefine){
    return;
  }
  self.newrecord(event);
  doclearctrl(self);
  self.infilterdefine=true;
  self.updatenavigator();
}

function form_buildfilteronctrlvalues(){
  var self=this;

  var filter="";
  function getoperatorarg(v,op,arg){    arg.v=v;
    for(;(arg.v != '') && (arg.v.charAt(1-1) == ' ');){
      delete_(arg,1,1);
    }
    op.v='';
    for(;(arg.v != '') && (arg.v.charAt(1-1) != ' ');){
      op.v+=arg.v.charAt(1-1);
      delete_(arg,1,1);
    }
    for(;(arg.v != '') && (arg.v.charAt(1-1) == ' ');){
      delete_(arg,1,1);
    }
    if((op.v != '=') && (op.v != '<') && (op.v != '>') && (op.v != '<=') && (op.v != '>=') && (op.v != '<>') && !stringsequal(op.v,'Containing') && !stringsequal(op.v,'Starting')){
      op.v='';
      arg.v=v;
    }
  }
  function dobuildfilter(ctrl){    var v="";
    var op={v:""};
    var arg={v:""};
    var i=0;
    if((_IS(ctrl,textedit)) || (_IS(ctrl,combobox))){
      v=getcontrolvalue(self.getproperty_instancename(),ctrl.name);
      if(v != ''){
        if(ctrl.attrs.v.datafield != ''){
          getoperatorarg(v,op,arg);
          if(stringsequal(ctrl.attrs.v.datatype,'string')){
            arg.v='\'' + replacestring(arg.v,'\'','\'' + '\'') + '\'';
            if(op.v == ''){
              op.v='Containing';
            }
          }else 
          if(stringsequal(ctrl.attrs.v.datatype,'Boolean') || stringsequal(ctrl.attrs.v.datatype,'Integer')){
            if(op.v == ''){
              op.v='=';
            }
            arg.v=(stringsequal(arg.v,'True'))?'1':'0';
          }else 
          if(op.v == ''){
            op.v='=';
          }
          filter=(filter != '')?filter + ' AND \"' + ctrl.attrs.v.datafield + '\" ' + op.v + arg.v:'\"' + ctrl.attrs.v.datafield + '\" ' + op.v + arg.v;
        }
      }
    }
    for(i=ctrl.childcount() - 1;i>=0;i--){
      dobuildfilter(ctrl.childctrls[i]);
    }
  }
  filter='';
  dobuildfilter(self);
  return filter;
}

function form_applyfilter(event){
  var self=this;
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(!self.infilterdefine){
    return;
  }
  self.infilterdefine=false;
  self.changefilter(self.buildfilteronctrlvalues());
}

function form_clearfilter(event){
  var self=this;
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  self.infilterdefine=false;
  self.changefilter('');
}

function form_updatenavigator(){
  var self=this;
  var recno=0;
  var navctrl=null;
  var i=0;
  recno=(self.getcurrentpage() * self.getproperty_pagesize()) + self.getproperty_currentrecord() + 1;
  for(i=self.navigationctrls.length - 1;i>=0;i--){
    navctrl=self.navigationctrls[i];
    if((pos('RecordCount',navctrl.name) != 0) && (_IS(navctrl,textlabel))){
      if(self.getpagerecordcount() > 0){
        navctrl.setproperty_caption(inttostr(self.getproperty_recordcount()));
      }else 
        navctrl.setproperty_caption('0');
    }else 
    if((pos('PageCount',navctrl.name) != 0) && (_IS(navctrl,textlabel))){
      if(self.getpagerecordcount() > 0){
        navctrl.setproperty_caption(inttostr(self.getpagecount()));
      }else 
        navctrl.setproperty_caption('0');
    }else {
      if(self.infilterdefine){
        if((pos('Menu',navctrl.name) != 0) || (pos('Cancel',navctrl.name) != 0)){
        }else {
          if(((pos('CurrentRecord',navctrl.name) != 0) || (pos('CurrentPage',navctrl.name) != 0)) && (_IS(navctrl,textedit))){
            navctrl.clearvalue();
          }
          self.enablenavbtn(navctrl,false);
        }
      }else 
      if((pos('CurrentRecord',navctrl.name) != 0) && (_IS(navctrl,textedit))){
        if(self.getpagerecordcount() > 0){
          navctrl.setvalue(inttostr(recno));
        }else 
          navctrl.setvalue('');
        self.enablenavbtn(navctrl,true);
      }else 
      if((pos('CurrentPage',navctrl.name) != 0) && (_IS(navctrl,textedit))){
        if(self.getpagerecordcount() > 0){
          navctrl.setvalue(inttostr(self.getcurrentpage() + 1));
        }else 
          navctrl.setvalue('');
        self.enablenavbtn(navctrl,true);
      }else 
      if((pos('FirstRecord',navctrl.name) != 0) || (pos('PreviousRecord',navctrl.name) != 0)){
        self.enablenavbtn(navctrl,recno > 1);
      }else 
      if((pos('NextRecord',navctrl.name) != 0) || (pos('LastRecord',navctrl.name) != 0)){
        self.enablenavbtn(navctrl,recno < self.getproperty_recordcount());
      }else 
      if((pos('FirstPage',navctrl.name) != 0) || (pos('PreviousPage',navctrl.name) != 0)){
        self.enablenavbtn(navctrl,self.getcurrentpage() > 0);
      }else 
      if((pos('NextPage',navctrl.name) != 0) || (pos('LastPage',navctrl.name) != 0)){
        self.enablenavbtn(navctrl,self.getcurrentpage() < (self.getpagecount() - 1));
      }else 
        self.enablenavbtn(navctrl,true);
    }
  }
}

function form_buildnavigator(bandctrl){
  var self=this;
  var navigatorpanel=null;
  var navigationbarvalues=null;
  var buttons=[];
  var i=0;
  var buttonid="";
  var uniqid="";
  function getctrlid(id,ctl){
    var result="";
    result=id;
    result=(navigationbarvalues.smallimages)?'S' + result:'L' + result;
    return (bandctrl.bandtype == 25)?self.name + '__F' + ctl + result:self.name + '__H' + ctl + result;
  }
  function imageresourceid(buttonid){
    var result="";
    if(stringsequal(buttonid,'Space')){
      return '';
    }else {
      result=buttonid + '_' + navigationbarvalues.buttonstyle + '_' + getcolorid();
      result=(navigationbarvalues.smallimages)?'S' + result:'L' + result;
      return result + '.png';
    }
  }
  function getuniqueid(buttonid,index){

    var i=0;
    var id=0;
    id=0;
    for(i=0;i<=index - 1;i++){
      if(stringsequal(buttons[i],buttonid)){
        id++;
      }
    }
    return (id == 0)?buttonid:buttonid + inttostr(id);
  }
  function createlabel(id){
    var result=null;
    result=Create_textlabel().create0(getctrlid(id,'Lbl'),navigatorpanel);
    self.navigationctrls.push(result);
    return result;
  }
  function createedit(id,buttonid){
    var result=null;
    result=Create_textedit().create0(getctrlid(id,'Edt'),navigatorpanel);
    result.setproperty_maxlength(50);
    result.fselectonfocus=true;
    if(stringsequal(buttonid,'CurrentRecord')){
      result.attrs.v.adddomeventhandler('keydown',self.recordnumbereditonkeydown,null);
    }
    if(stringsequal(buttonid,'CurrentPage')){
      result.attrs.v.adddomeventhandler('keydown',self.pagenumbereditonkeydown,null);
    }
    self.navigationctrls.push(result);
    return result;
  }
  function getcolorid(){

    var temp={v:""};
    temp.v=colortohtmlhex(navigationbarvalues.color);
    if((temp.v != '') && (temp.v.charAt(1-1) == '#')){
      delete_(temp,1,1);
    }
    return temp.v;
  }
  function createimage(id,buttonid){
    var result=null;
    var attrs=null;
    result=Create_navimage().create0(getctrlid(id,'Img'),navigatorpanel);
    result.imageattrs.bundled=true;
    result.resourceid=imageresourceid(buttonid);
    if(result.resourceid != ''){
      result.imageattrs.pic=composeimageurl(currenttheme + '/' + result.resourceid);
    }
    attrs=result.attrs.v;
    if(stringsequal(buttonid,'FirstPage')){
      attrs.adddomeventhandler('click',self.firstpage,null);
    }else 
    if(stringsequal(buttonid,'PreviousPage')){
      attrs.adddomeventhandler('click',self.previouspage,null);
    }else 
    if(stringsequal(buttonid,'NextPage')){
      attrs.adddomeventhandler('click',self.nextpage,null);
    }else 
    if(stringsequal(buttonid,'LastPage')){
      attrs.adddomeventhandler('click',self.lastpage,null);
    }else 
    if(stringsequal(buttonid,'FirstRecord')){
      attrs.adddomeventhandler('click',self.firstrecord,null);
    }else 
    if(stringsequal(buttonid,'PreviousRecord')){
      attrs.adddomeventhandler('click',self.previousrecord,null);
    }else 
    if(stringsequal(buttonid,'NextRecord')){
      attrs.adddomeventhandler('click',self.nextrecord,null);
    }else 
    if(stringsequal(buttonid,'LastRecord')){
      attrs.adddomeventhandler('click',self.lastrecord,null);
    }else 
    if(stringsequal(buttonid,'Refresh')){
      attrs.adddomeventhandler('click',self.refreshpage,null);
    }else 
    if(stringsequal(buttonid,'Submit')){
      attrs.adddomeventhandler('click',self.submitpage,null);
    }else 
    if(stringsequal(buttonid,'NewRecord')){
      attrs.adddomeventhandler('click',self.newrecord,null);
    }else 
    if(stringsequal(buttonid,'DeleteRecord')){
      attrs.adddomeventhandler('click',self.deleterecord,null);
    }else 
    if(stringsequal(buttonid,'EditRecord')){
      attrs.adddomeventhandler('click',self.editrecord,null);
    }else 
    if(stringsequal(buttonid,'Cancel')){
      attrs.adddomeventhandler('click',self.cancelrecordchanges,null);
    }else 
    if(stringsequal(buttonid,'Menu')){
      attrs.adddomeventhandler('click',self.defineorapplyfilter,null);
    }
    self.navigationctrls.push(result);
    return result;
  }
  navigationbarvalues=Create_tnavigationbarvalues().create();
  try{
    navigationbarvalues.readfromstring(bandctrl.navigationbar);
    if(navigationbarvalues.visible){
      navigatorpanel=(bandctrl.bandtype == 25)?Create_container().create0(self.name + '__NavigationPanel',bandctrl):Create_container().create0(self.name + '__HNavigationPanel',bandctrl);
      self.navigationctrls.push(navigatorpanel);
      buttons=__string_split(navigationbarvalues.buttons,',');
      if(assigned(buttons)){
        for(i=0;i<=buttons.length - 1;i++){
          buttonid=buttons[i];
          if(imageresourceid(buttonid) != ''){
            uniqid=getuniqueid(buttonid,i);
            createimage(uniqid,buttonid);
            if(stringsequal(buttonid,'RecordCount')){
              createlabel(uniqid);
            }else 
            if(stringsequal(buttonid,'CurrentRecord')){
              createedit(uniqid,buttonid);
            }else 
            if(stringsequal(buttonid,'PageCount')){
              createlabel(uniqid);
            }else 
            if(stringsequal(buttonid,'CurrentPage')){
              createedit(uniqid,buttonid);
            }
          }
        }
      }
    }
  }finally{
    free(navigationbarvalues);
  }
}

function form_getproperty_datamode(){
  var self=this;

  return ((self.getproperty_datasource() != '') && (self.getproperty_viewmode() == 2))?self.fdatamode:0;
}

function form_checkbrowsemode(){
  var self=this;
  if(self.getproperty_datamode() == 1){
    return;
  }
  if(self.fdataset == null){
    return;
  }
  if(self.getproperty_viewmode() == 2){
    self.continuousform_setstate();
  }
  self.setproperty_datamode(1);
}

function form_setproperty_datamode(value){
  var self=this;
  if(value == self.fdatamode){
    return;
  }
  if(self.getproperty_viewmode() != 2){
    return;
  }
  if(self.fdataset == null){
    return;
  }
  if((_InSet(value,_ISet(false,2,2,3,3))) && (_InSet(self.fdatamode,_ISet(false,2,2,3,3)))){
    return;
  }
  if(self.dobeforedatamodechange(value)){
    switch(value){
      case 1:
      self.continuousform_hideeditband();
      break;
      case 2:
      self.continuousform_showeditband();
      break;
      case 3:
      self.continuousform_adddetail();
      self.continuousform_setstate();
      self.continuousform_showeditband();
    }
    self.fdatamode=value;
    self.continuousform_updatecurrentrecord();
    self.doafterdatamodechange(value);
  }
}

function form_displaylistcontrols(){
  var self=this;
  var i=0;
  var ctrl=null;
  if(self.fdataset == null){
    return;
  }
  for(i=self.getboundcontrols().length - 1;i>=0;i--){
    ctrl=self.getboundcontrols()[i];
    if(_IS(ctrl,listbox)){
      ctrl.deserializelist(self.fdataset.currentdatapage.dblist,ctrl.attrs.v.datafield,'');
    }
  }
}

function form_create1(aparameters){
  var self=this;
  self.infilterdefine=false;
  self.fboundcontrols=null;
  self.fcurrentrecordindex=0;
  self.fdatamode=1;
  self.fdatalinks=Create_tdatalinks().create();
  tabstractform.prototype.create1.call(self, aparameters);
  return self;
}

function form_destroy(){
  var self=this;
  self.setproperty_datamode(1);
  self.destroydataset();
  free(self.fdatalinks);
  tabstractform.prototype.destroy.call(self);
}

function form_destroydataset(){
  var self=this;
  if(self.fdataset != null){
    free(self.fdataset);
    self.fdataset=null;
  }
  if(self.fdatalink != null){
    free(self.fdatalink);
    self.fdatalink=null;
  }
}

function form_setupdomeventhandlers(){
  var self=this;
  tabstractform.prototype.setupdomeventhandlers.call(self);
  if(self.getproperty_viewmode() == 2){
    self.detail.attrs.v.adddomeventhandler('click',self.continuousform_handleonclick,self);
    self.detail.attrs.v.adddomeventhandler('dblclick',self.continuousform_handleondblclick,self);
    self.domhandlearray.attacheventhandler('keydown',getMethodPointer(self,self.continuousform_handleonkeydown),null,null);
    self.domhandlearray.attacheventhandler('focus',getMethodPointer(self,self.continuousform_focus),null,null);
    self.domhandlearray.attacheventhandler('blur',getMethodPointer(self,self.continuousform_blur),null,null);
  }
}

function form_shouldserialize(ctrl){
  var self=this;

  function iseditablecontrol(ctrl){
    var result=0;
    result=false;
    for(;ctrl != null;){
      result=ctrl == self.detaileditable;
      if(result){
        break;
      }
      ctrl=ctrl.owner;
    }
    return result;
  }
  return (ctrl.attrs.v.datafield != '') && ((self.getproperty_viewmode() == 0) || ((self.getproperty_viewmode() == 2) && self.detaileditable.getproperty_visible() && iseditablecontrol(ctrl)));
}

function form_setstate(){
  var self=this;
  var ctrl=null;
  var i=0;
  var rec=null;
  if(self.getproperty_viewmode() == 1){
    return;
  }
  if(self.fdataset == null){
    return;
  }
  rec=self.fdataset.currentdatapage.getcurrentrecord();
  for(i=self.getboundcontrols().length - 1;i>=0;i--){
    ctrl=self.getboundcontrols()[i];
    if((rec != null) && self.shouldserialize(ctrl)){
      self.deserializectrl(ctrl,rec);
    }
    ctrl.setproperty_enabled(!ctrl.wasdisabled() && (rec != null));
  }
  self.updatenavigator();
}

function form_getdatachanged(restorestate,silent){
  var self=this;
  var result=0;
  var ctrl=null;
  var i=0;
  var savevalue=null;
  var rec=null;
  var field=null;
  var datafield="";
  var serializer=null;
  result=false;
  if((self.fdataset == null) || (self.fdataset.currentdatapage == null)){
    return result;
  }
  rec=self.fdataset.currentdatapage.getcurrentrecord();
  for(i=self.getboundcontrols().length - 1;i>=0;i--){
    ctrl=self.getboundcontrols()[i];
    if(!((_IS(ctrl,textlabel))) && self.shouldserialize(ctrl)){
      datafield=ctrl.attrs.v.datafield;
      if(rec.Fields.hasOwnProperty(datafield)){
        field=rec.Fields[datafield];
        savevalue=field;
        serializer=Create_tserializer().create();
        serializer.datarecord=rec.Fields;
        serializer.fieldname=datafield;
        ctrl.serialize(serializer);
        result=result || (savevalue != rec.Fields[datafield]);
        if(restorestate){
          rec.Fields[datafield]=savevalue;
        }
      }else 
      if(!silent){
        showmessage(datafield + ' does not exist!');
      }
    }
  }
  return result;
}

function form_datasetchanged(){
  var self=this;

  return self.getdatachanged(true,true);
}

function form_getstate(){
  var self=this;
  var result=0;
  var ischanged=0;
  var currentrec=null;
  if(self.getproperty_viewmode() == 1){
    return true;
  }
  result=false;
  if(self.fdataset == null){
    return result;
  }
  if(self.fdataset.currentdatapage == null){
    return result;
  }
  currentrec=self.fdataset.currentdatapage.getcurrentrecord();
  if(currentrec == null){
    return true;
  }
  if(!self.dobeforedatachange(2)){
    return result;
  }
  try{
    ischanged=self.getdatachanged(false,false);
    if(ischanged){
      if(currentrec.Status == 3){
        currentrec.Status=0;
      }
    }
    result=true;
    if(ischanged){
      self.doafterdatachange(2);
    }
  }catch(ExceptObject){
    result=false;
  }
  return result;
}

function form_adddataboundctrltolist(p){
  var self=this;
  var ctrl=null;
  var i=0;
  if(_IS(p,twebcontrol)){
    if(p.attrs.v.datafield != ''){
      self.fboundcontrols.push(p);
    }
    for(i=p.childcount() - 1;i>=0;i--){
      ctrl=p.childctrls[i];
      self.adddataboundctrltolist(ctrl);
    }
  }
}

function form_getboundcontrols(){
  var self=this;

  var i=0;
  if(self.fboundcontrols == null){
    self.fboundcontrols=[];
    for(i=self.childcount() - 1;i>=0;i--){
      self.adddataboundctrltolist(self.childctrls[i]);
    }
  }
  return self.fboundcontrols;
}

function form_getpagecount(){
  var self=this;

  if(self.getproperty_pagesize() == -1){
    return (self.getproperty_recordcount() > 0)?1:0;
  }
  return ceil(self.getproperty_recordcount() / self.getproperty_pagesize());
}

function form_getcurrentpage(){
  var self=this;

  return ceil(self.getproperty_startingoffset() / self.getproperty_pagesize());
}

function form_getproperty_currentrecord(){
  var self=this;

  if(self.getproperty_viewmode() == 1){
    return self.fcurrentrecordindex;
  }else 
  return (self.fdataset != null)?self.fdataset.getproperty_currentrecord():-1;
}

function form_setproperty_currentrecord(i){
  var self=this;
  if(self.getproperty_viewmode() == 1){
    self.fcurrentrecordindex=i;
  }else 
  if(self.fdataset != null){
    self.fdataset.moveto(i);
  }
}

function form_getpagerecordcount(){
  var self=this;

  if(self.getproperty_viewmode() == 1){
    return self.detail.bandinfos.length;
  }else 
  return (self.fdataset != null)?self.fdataset.currentdatapage.dblist.length:0;
}

function form_getproperty_countrecordsexactly(){
  var self=this;
  var result=0;
  var i=0;
  var ctrl=null;
  result=true;
  if(self.getproperty_pagesize() == -1){
    return result;
  }
  result=self.frequirecountrecordsexactly;
  if(result){
    return result;
  }
  result=true;
  for(i=0;i<=self.navigationctrls.length - 1;i++){
    ctrl=self.navigationctrls[i];
    if(pos('recordcount',lowercase(ctrl.name)) > 0){
      return result;
    }
    if(pos('pagecount',lowercase(ctrl.name)) > 0){
      return result;
    }
    if(pos('lastpage',lowercase(ctrl.name)) > 0){
      return result;
    }
    if(pos('lastrecord',lowercase(ctrl.name)) > 0){
      return result;
    }
  }
  return false;
}

function form_setproperty_countrecordsexactly(v){
  var self=this;
  if(v){
    self.currentparameters.update('CountRecordsExactly','True');
  }else 
    self.currentparameters.update('CountRecordsExactly','False');
}

function form_getproperty_isformfocused(){
  var self=this;

  return stringsequal(self.currentparameters.getparamvalue('Focused'),'True');
}

function form_setproperty_isformfocused(v){
  var self=this;
  if(v){
    self.currentparameters.update('Focused','True');
  }else 
    self.currentparameters.update('Focused','False');
}

function form_moveto(pno,rno){
  var self=this;
  if(pno == -1){
    pno=self.getcurrentpage();
  }
  if(pno >= self.getpagecount()){
    pno=self.getpagecount() - 1;
  }
  if(pno < 0){
    pno=0;
  }
  if(pno != self.getcurrentpage()){
    self.requestpage(pno,rno,true);
  }else {
    self.setproperty_currentrecord(rno);
    switch(self.getproperty_viewmode()){
      case 0:
      self.setstate();
      break;
      case 2:
      self.continuousform_updatecurrentrecord();
      self.updatenavigator();
    }
  }
}

function form_getproperty_datasource(){
  var self=this;

  return (self.fdataset != null)?self.fdataset.datasource:'';
}

function form_getproperty_datalink(){
  var self=this;

  if(self.fdatalink == null){
    self.fdatalink=Create_tformdatalink().create(self);
  }
  return self.fdatalink;
}

function form_setproperty_dataset(value){
  var self=this;
  if(self.fdataset != value){
    if(self.fdataset != null){
      self.fdataset.unregisterdatalink(self.getproperty_datalink());
    }
    self.fdataset=value;
    if(self.fdataset != null){
      self.fdataset.registerdatalink(self.getproperty_datalink());
    }
  }
}

function form_createdataset(s){
  var self=this;

  switch(self.getproperty_viewmode()){
    case 0:;
    case 2:
    return Create_tdataset().create(s);
  default:
    return null;
  }
}

function form_setproperty_datasource(s){
  var self=this;
  if((s == '') && (self.fdataset == null)){
    return;
  }
  if((s != '') && (self.fdataset != null) && stringsequal(self.fdataset.datasource,s)){
    return;
  }
  self.destroydataset();
  if((s != '') && (_InSet(self.getproperty_viewmode(),_ISet(false,0,0,2,2)))){
    self.setproperty_dataset(self.createdataset(s));
  }
}

function form_highlightnavbtn(btn,highlight){

  var result=0;
  result=btn != null;
  if(!result){
    return result;
  }
  btn.highlight(highlight);
  return result;
}

function form_enablenavbtn(btn,enabled){

  btn.setproperty_enabled(enabled);
}

function form_pagenumbereditonkeydown(event){
  var self=this;
  var keycode="";
  var ctl=null;
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  ctl=geteventsource(event);
  keycode=event.keyCode;
  if(strtoint(keycode) == vk_return){
    self.moveto(strtointdef(ctl.getvalue(),0) - 1,0);
  }
}

function form_recordnumbereditonkeydown(event){
  var self=this;
  var keycode="";
  var s="";
  var pcnt=0;
  var rcnt=0;
  var editctl=null;
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  editctl=geteventsource(event);
  keycode=event.keyCode;
  if(strtoint(keycode) == vk_return){
    s=editctl.getvalue();
    pcnt=((strtointdef(s,0) / self.getproperty_pagesize())|0);
    rcnt=strtointdef(s,0) % self.getproperty_pagesize();
    self.moveto(pcnt,rcnt - 1);
  }
}

function form_dobeforedbnavigate(action){
  var self=this;
  var result=0;
  var cancel={v:0};
  result=self.fdatalinks.beforedbnavigate(action);
  if(!result){
    return result;
  }
  if(assigned(self.onbeforedbnavigate)){
    cancel.v=false;
    self.onbeforedbnavigate._o[self.onbeforedbnavigate._p](action,cancel);
    return !cancel.v;
  }else 
    return true;
}

function form_doafterdbnavigate(action){
  var self=this;
  self.fdatalinks.afterdbnavigate(action);
  if(assigned(self.onafterdbnavigate)){
    self.onafterdbnavigate._o[self.onafterdbnavigate._p](action,false);
  }
}

function form_dobeforedatamodechange(mode){
  var self=this;

  var cancel={v:0};
  if(assigned(self.onbeforedatamodechange)){
    cancel.v=false;
    self.onbeforedatamodechange._o[self.onbeforedatamodechange._p](mode,cancel);
    return !cancel.v;
  }else 
    return true;
}

function form_doafterdatamodechange(mode){
  var self=this;
  if(assigned(self.onafterdatamodechange)){
    self.onafterdatamodechange._o[self.onafterdatamodechange._p](mode);
  }
}

function form_dobeforedatachange(action){
  var self=this;
  var result=0;
  var cancel={v:0};
  result=self.fdatalinks.beforedatachange(action);
  if(!result){
    return result;
  }
  if(assigned(self.onbeforedatachange)){
    cancel.v=false;
    self.onbeforedatachange._o[self.onbeforedatachange._p](action,cancel);
    return !cancel.v;
  }else 
    return true;
}

function form_doafterdatachange(action){
  var self=this;
  self.fdatalinks.afterdatachange(action);
  if(assigned(self.onafterdatachange)){
    self.onafterdatachange._o[self.onafterdatachange._p](action,false);
  }
}

function form_dobeforerefresh(){
  var self=this;
  var result=0;
  var cancel={v:0};
  result=self.fdatalinks.beforerefresh();
  if(!result){
    return result;
  }
  if(assigned(self.onbeforerefresh)){
    cancel.v=false;
    self.onbeforerefresh._o[self.onbeforerefresh._p](cancel);
    return !cancel.v;
  }else 
    return true;
}

function form_doafterrefresh(failed,error){
  var self=this;
  self.fdatalinks.afterrefresh(failed,error);
  if(assigned(self.onafterrefresh)){
    self.onafterrefresh._o[self.onafterrefresh._p](failed,error);
  }else 
  if(failed){
    showmessage('Error:' + error);
    return;
  }
}

function form_dobeforesubmit(){
  var self=this;
  var result=0;
  var cancel={v:0};
  result=self.fdatalinks.beforesubmit();
  if(!result){
    return result;
  }
  if(assigned(self.onbeforesubmit)){
    cancel.v=false;
    self.onbeforesubmit._o[self.onbeforesubmit._p](cancel);
    return !cancel.v;
  }else 
    return true;
}

function form_doaftersubmit(failed,error){
  var self=this;
  self.fdatalinks.aftersubmit(failed,error);
  if(assigned(self.onaftersubmit)){
    self.onaftersubmit._o[self.onaftersubmit._p](failed,error);
  }else 
  if(failed){
    showmessage('Error:' + error);
  }
}

function form_getproperty_sqlfilter(){
  var self=this;

  return self.getparametervalue('SQLFilter');
}

function form_setproperty_sqlfilter(v){
  var self=this;
  self.setparametervalue('SQLFilter',v);
}

function form_getproperty_pagesize(){
  var self=this;

  return strtointdef(self.getparametervalue('PageSize'),10);
}

function form_setproperty_pagesize(v){
  var self=this;
  self.setparametervalue('PageSize',inttostr(v));
}

function form_getproperty_startingoffset(){
  var self=this;

  return strtointdef(self.getparametervalue('StartingOffset'),0);
}

function form_setproperty_startingoffset(v){
  var self=this;
  self.setparametervalue('StartingOffset',inttostr(v));
}

function form_getproperty_startingrecordindex(){
  var self=this;

  return strtointdef(self.getparametervalue('StartingRecordIndex'),0);
}

function form_setproperty_startingrecordindex(v){
  var self=this;
  self.setparametervalue('StartingRecordIndex',inttostr(v));
}

function form_getproperty_recordcount(){
  var self=this;

  return strtointdef(self.getparametervalue('RecordCount'),0);
}

function form_setproperty_recordcount(v){
  var self=this;
  self.setparametervalue('RecordCount',inttostr(v));
}

function form_beforeshow(show){
  var self=this;
  show.v=self.fdatalinks.beforeshow();
  tabstractform.prototype.beforeshow.call(self, show);
}

function form_aftershow(){
  var self=this;
  if((self.getproperty_viewmode() == 2) && self.getproperty_isformfocused()){
    self.continuousform_putfocus();
  }
  self.fdatalinks.aftershow();
  tabstractform.prototype.aftershow.call(self);
}

function form_initializeafteropen(){
  var self=this;
  switch(self.getproperty_viewmode()){
    case 1:
    self.setproperty_currentrecord(0);
    self.updatenavigator();
    break;
    case 2:
    self.continuousform_init();
    self.updatenavigator();
  }
}

function form_updateparametersfromhiddenhtmlfields(){
  var self=this;
  var h=null;
  h=window.document.getElementById(self.getproperty_instancename() + '_PMStartingOffset');
  if(assigned(h)){
    self.setproperty_startingoffset(strtoint(h.value));
    h.id='x' + h.id;
  }
  h=window.document.getElementById(self.getproperty_instancename() + '_PMRecordCount');
  if(assigned(h)){
    self.setproperty_recordcount(strtoint(h.value));
    h.id='x' + h.id;
  }
  tabstractform.prototype.updateparametersfromhiddenhtmlfields.call(self);
}

function form_checkdataformready(formopener){
  var self=this;
  if(self.fdataset.currentdatapage == null){
    formopener.resetformreadytimer();
    self.requestpage(0,0,false);
  }
}

function tformopener_create(aformclassname,aforminstancename,atargetsubform,atargetbandindex,aopenformparameters,aactivate){
  var self=this;
  function getpagenameandopenformid(){    var paramlist=null;
    var param=null;
    paramlist=Create_tparameters().create();
    paramlist.addlist(aopenformparameters);
    self.currentpagename=paramlist.getparamvalue(cpagenameparam);
    param=paramlist.getparambyname(copenformbatchidparam);
    self.batchid=(param != null)?param.value:xapp.getuniqueopenformbatchid();
    free(paramlist);
  }
  tobject.prototype.create.call(self);
  self.openformparameters=aopenformparameters;
  self.formclassname=aformclassname;
  self.forminstancename=aforminstancename;
  self.targetsubform=atargetsubform;
  self.targetbandindex=atargetbandindex;
  self.newform=null;
  self.xmlhttprequest=null;
  self.onreadytimer=null;
  self.onreadyperiod=0;
  self.activate=aactivate;
  self.successfullycompleted=false;
  self.targetsubform.formopeners.push(self);
  self.targetsubform.beginbusy();
  getpagenameandopenformid();
  xapp.loadmodule(self.formclassname,getMethodPointer(self,self.createform));
  return self;
}

function tformopener_destroy(){
  var self=this;
  if(self.successfullycompleted){
    if(self.newform != null){
      self.newform.formopener=null;
    }
    self.targetsubform.formopeners.remove(self);
  }else 
  if(self.newform != null){
    self.newform.formopener=null;
    free(self.newform);
    self.newform=null;
  }
  if(self.xmlhttprequest != null){
    free(self.xmlhttprequest);
    self.xmlhttprequest=null;
  }
  if(self.onreadytimer != null){
    free(self.onreadytimer);
    self.onreadytimer=null;
  }
  tobject.prototype.destroy.call(self);
}

function tformopener_setformreadytimer(interval){
  var self=this;
  if(self.onreadytimer == null){
    self.onreadytimer=Create_timer().create0(self.newform.getproperty_instancename() + 'OnReadyTimer',self.newform);
    self.onreadytimer.interval=interval;
self.onreadytimer.ontimer._o=self;self.onreadytimer.ontimer._p="checkformready";
    self.onreadytimer.setenable(true);
  }else {
    self.onreadytimer.setenable(true);
    self.onreadytimer.interval=interval;
  }
}

function tformopener_resetformreadytimer(){
  var self=this;
  if(self.onreadytimer != null){
    self.onreadytimer.setenable(false);
  }
}

function tformopener_handleerror(errormsg){
  var self=this;
  var handled={v:0};
  gvServerException='';
  self.targetsubform.endbusy(self.newform);
  handled.v=false;
  xapp.handleerror(errormsg,handled);
  if(!handled.v){
    showmessage(errormsg);
  }
  self.targetsubform.setproperty_activeforms(self.targetbandindex,null);
  if(assigned(self.newform)){
    free(self.newform);
    self.newform=null;
  }
  free(self);
}

function tformopener_createform(){
  var self=this;
  var paramlist=null;
  try{
    if(!__string_isempty(gvServerException)){
      self.handleerror(gvServerException);
      return;
    }
    try{
      self.newform=catalog().createmoduleform(self.formclassname,self.openformparameters);
    }catch(ExceptObject){
      self.newform=null;
    }
    if(!assigned(self.newform)){
      self.handleerror('Cannot create form object of class type \"' + self.formclassname + '\"!');
      return;
    }
    self.newform.formopener=self;
    self.newform.ownersubform=self.targetsubform;
    self.newform.finstancename=self.forminstancename;
    self.newform.bandindex=self.targetbandindex;
  }catch(ExceptObject){
    free(self);
    return;
  }
  if(xapp.rootsubform == self.targetsubform){
    window.isTopLvl=0;
    if(self.activate){
      xapp.mainform=self.newform;
    }
  }
  if(self.targetsubform.owner != null){
    self.newform.attrs.v.color=self.targetsubform.owner.attrs.v.color;
  }
  paramlist=Create_tparameters().create();
  self.newform.currentparameters.copyto(paramlist);
  paramlist.update('cls','form');
  paramlist.update('sid',securityid);
  paramlist.update('xid',xappguid);
  paramlist.update('ins',self.forminstancename);
  paramlist.update('tzo',inttostr(gettimezoneoffset()));
  paramlist.update('thm',currenttheme);
  paramlist.update('lng',currentlanguage);
  if(xapp.rootsubform == self.targetsubform){
    paramlist.update('sbd','2');
  }else 
    paramlist.update('sbd','1');
  if(!isScriptorApp){
    self.xmlhttprequest=Create_txmlhttprequestwrapper().create();
    self.xmlhttprequest.setproperty_onreadystatechange(getMethodPointer(self,self.handlehtml));
    self.xmlhttprequest.open('Post',buildurl(self.formclassname + '.htm',paramlist,''),true,'','');
    self.xmlhttprequest.send('');
    xapp.dobeginload();
  }else 
    self.initializeform();
  free(paramlist);
}

function tformopener_handlehtml(){
  var self=this;
  if((self.xmlhttprequest.getproperty_readystate() == 4) && (self.xmlhttprequest.getproperty_status() < 500)){
    self.initializeform();
    xapp.doendload();
  }
}

function tformopener_openembeddedsubforms(c){
  var self=this;
  var i=0;
  var subfrm=null;
  if(_IS(c,subform)){
    subfrm=c;
    subfrm.openformforpage(self.currentpagename,self.batchid);
  }else 
    for(i=c.childcount() - 1;i>=0;i--){
      self.openembeddedsubforms(c.childctrls[i]);
    }
}

function tformopener_opensiblingsubformsinrepeatedbands(){
  var self=this;
  var i=0;
  var defaultclassref="";
  var defaultinstanceref="";
  if(self.newform.isrootform()){
    return;
  }
  if(self.newform.ownersubform.bandinfos.length <= 1){
    return;
  }
  with(self.newform.ownersubform){
    if(activeformscount() == 1){
      i=pos(':',subformattrs.defaultformref);
      if(i == 0){
        defaultclassref=subformattrs.defaultformref;
        defaultinstanceref=subformattrs.defaultformref;
      }else {
        defaultinstanceref=copy(subformattrs.defaultformref,1,i - 1);
        defaultclassref=copy(subformattrs.defaultformref,i + 1,lEngTH(subformattrs.defaultformref));
      }
      for(i=bandinfos.length - 1;i>=1;i--){
        xapp.openform(defaultinstanceref + inttostr(i) + ':' + defaultclassref,getproperty_ownerform().getproperty_instancename() + ':' + name + '(' + inttostr(i) + ')','');
      }
    }
  }
}

function tformopener_initializeform(){
  var self=this;
  var h=null;
  var s="";
  h=self.newform.cloneownersubformdomhandle(self.targetbandindex);
  if(!isScriptorApp){
    s=self.xmlhttprequest.getproperty_responsetext();
    if(__string_startswith(s,cserverexceptionmarker)){
      self.handleerror(copy(s,5,lEngTH(s) - 3));
      return;
    }
  }else 
    s=self.newform.getformhtml();
  self.newform.ownersubformdomhandle.innerHTML=s;
  self.newform.ownersubformdomhandle.style.visibility='hidden';
  h=window.document.getElementById(self.newform.getproperty_instancename());
  h.id='x' + h.id;
  self.newform.setupdomhandleto(h);
  self.newform.updateparametersfromhiddenhtmlfields();
  self.opensiblingsubformsinrepeatedbands();
  self.newform.setupcontrolhandles();
  xapp.openforms.push(self.newform);
  self.newform.setproperty_formreadystate(1);
  self.newform.initializeafteropen();
  self.openembeddedsubforms(self.newform);
  if(self.newform.autoscroll){
    xapp.scrolltotop();
  }
  self.checkformready(null);
}

function isloadingform(c,formopener){
  var result=0;
  var i=0;
  var fo=null;
  result=true;
  for(i=c.formopeners.length - 1;i>=0;i--){
    fo=c.formopeners[i];
    if((fo == null) || (formopener == null) || (fo != formopener)){
      if(fo.activate){
        return result;
      }
    }
  }
  return false;
}

function tformopener_subformsareloaded(c){
  var self=this;
  var result=0;
  var i=0;
  result=false;
  if(_IS(c,subform)){
    if(isloadingform(c,self)){
      return result;
    }
  }else 
    for(i=c.childcount() - 1;i>=0;i--){
      if(!self.subformsareloaded(c.childctrls[i])){
        return result;
      }
    }
  return true;
}

function tformopener_checkformready(){
  var self=this;
  var readyflag={v:0};
  var newformowner=null;
  function needtowaitforchildforms(){

    return !xapp.waitforchildforms || !self.newform.waitforchildforms || (self.onreadyperiod > 20000) || self.subformsareloaded(self.newform);
  }
  switch(self.newform.fformreadystate){
    case 0:;
    case 1:
    if((_InSet(self.newform.getproperty_viewmode(),_ISet(false,1,1,2,2))) || (self.newform.getproperty_datasource() == '')){
      self.newform.setproperty_formreadystate(2);
      self.checkformready(null);
    }else 
      self.newform.checkdataformready(self);
    break;
    case 2:
    readyflag.v=true;
    if(assigned(self.newform.onready)){
      self.newform.onready._o[self.newform.onready._p](readyflag);
    }
    newformowner=self.newform.ownersubform;
    if(newformowner != null){
      if(assigned(newformowner.onformready)){
        newformowner.onformready._o[newformowner.onformready._p](newformowner);
      }
    }
    if(readyflag.v){
      self.newform.setproperty_formreadystate(3);
      self.setformreadytimer(0);
    }else 
    if(self.activate){
      self.setformreadytimer(0);
    }else 
      self.setformreadytimer(200);
    break;
    case 3:
    self.onreadyperiod=(self.activate)?self.onreadyperiod + 1:self.onreadyperiod + 200;
    if(xapp.statereconstructor == null){
      if(needtowaitforchildforms()){
        self.newform.setproperty_formreadystate(4);
        self.resetformreadytimer();
        self.targetsubform.endbusy(self.newform);
        try{
          if(self.activate){
            self.targetsubform.activateform(self.newform,self.targetbandindex);
          }else 
            self.targetsubform.inactiveforms.push(self.newform);
          self.successfullycompleted=true;
        }finally{
          free(self);
        }
      }else 
      if(self.activate){
        self.setformreadytimer(0);
      }else 
        self.setformreadytimer(200);
    }
  }
}

function doopenform(formref,target,openformparameters){  var targetforminstancename="";
  var targetsubformcontainer="";
  var targetbandindex=0;
  var targetsubform=null;
  var frm=null;
  var arr=[];
  function handlespecialcases(formref,target,openformparameters){
    var result=0;
    var paramlist=null;
    var url="";
    result=false;
    if(stringsequal(target,'blank') || stringsequal(target,'same') || stringsequal(target,'top')){
      result=true;
      paramlist=Create_tparameters().create();
      paramlist.addlist(openformparameters);
      if(pos('://',formref) != 0){
        url=buildurl(formref,paramlist,'');
      }else {
        paramlist.update('sid',securityid);
        paramlist.update('xid',xappguid);
        paramlist.update('tzo',inttostr(gettimezoneoffset()));
        paramlist.update('thm',currenttheme);
        paramlist.update('lng',currentlanguage);
        url=buildurl(formref + '.htm',paramlist,'http');
      }
      free(paramlist);
      if(stringsequal(target,'blank')){
        window.open(url,'','');
      }else 
      if(stringsequal(target,'same') || stringsequal(target,'top')){
        window.location.href=url;
      }
    }
    return result;
  }
  if(handlespecialcases(formref,target,openformparameters)){
    return;
  }
  targetforminstancename=target;
  targetsubformcontainer='';
  targetsubform=null;
  targetbandindex=0;
  if((xapp.mainform == null) || (target == '')){
    targetsubform=xapp.rootsubform;
  }else {
    arr=target.split(':');
    if((arr != null) && (arr.length > 0)){
      targetforminstancename=arr[0];
      targetsubformcontainer=arr[1];
      arr=targetsubformcontainer.split('(');
      if(arr.length > 1){
        targetsubformcontainer=arr[0];
        targetbandindex=strtoint(arr[1].replace(')',''));
      }
      arr=null;
      frm=xapp.getproperty_webform(targetforminstancename);
      if(frm == null){
        showmessage('Form \"' + targetforminstancename + '\" does not exist!');
        return;
      }
      targetsubform=frm.getcontrolbyname(targetsubformcontainer);
      if(targetsubform == null){
        showmessage('SubForm container \"' + targetsubformcontainer + '\"  does not exist!');
        return;
      }
    }else 
      showmessage('Could not open \"' + formref + '\"!');
  }
  if(targetsubform != null){
    targetsubform.openformext(formref,targetbandindex,openformparameters);
  }
}

_lddmods["SystemForm"]=true;
function Create_TWebControlArray(p){
  return new Array();
}

function tattachedeventhandler(){}
function Register_tattachedeventhandler(){
  if(IsRegisteredtattachedeventhandler)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tattachedeventhandler";
  p.zc=tattachedeventhandler;
  p.ParentClass=tobject;
  p.create=tattachedeventhandler_create;
  tattachedeventhandler.prototype=p;
  IsRegisteredtattachedeventhandler=true;
}
function Create_tattachedeventhandler(p){
  Register_tattachedeventhandler();
  if(p==void(0))var p=new tattachedeventhandler();
  p=Create_tobject(p);
  p.zb="tattachedeventhandler";
  p.name="";
  p.func=null;
  p.gethandlefunc=null;
  return p
}

function tcontrolbandinfo(){}
function Register_tcontrolbandinfo(){
  if(IsRegisteredtcontrolbandinfo)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tcontrolbandinfo";
  p.zc=tcontrolbandinfo;
  p.ParentClass=tobject;
  p.setupdomhandles=tcontrolbandinfo_setupdomhandles;
  p.processhandles=tcontrolbandinfo_processhandles;
  p.getinputhandle=tcontrolbandinfo_getinputhandle;
  p.create0=tcontrolbandinfo_create0;
  tcontrolbandinfo.prototype=p;
  IsRegisteredtcontrolbandinfo=true;
}
function Create_tcontrolbandinfo(p){
  Register_tcontrolbandinfo();
  if(p==void(0))var p=new tcontrolbandinfo();
  p=Create_tobject(p);
  p.zb="tcontrolbandinfo";
  p.owner=null;
  p.handle=null;
  p.repeaterbands=[];
  return p
}

function twebcontrolbandinfo(){}
function Register_twebcontrolbandinfo(){
  if(IsRegisteredtwebcontrolbandinfo)return;
  Register_tcontrolbandinfo();
  var p=new tcontrolbandinfo();
  p.zb="twebcontrolbandinfo";
  p.zc=twebcontrolbandinfo;
  p.ParentClass=tcontrolbandinfo;
  p.setupdomhandles=twebcontrolbandinfo_setupdomhandles;
  p.processhandles=twebcontrolbandinfo_processhandles;
  twebcontrolbandinfo.prototype=p;
  IsRegisteredtwebcontrolbandinfo=true;
}
function Create_twebcontrolbandinfo(p){
  Register_twebcontrolbandinfo();
  if(p==void(0))var p=new twebcontrolbandinfo();
  p=Create_tcontrolbandinfo(p);
  p.zb="twebcontrolbandinfo";
  p.backgroundhandle=null;
  p.mouseover=0;
  p.mousedown=0;
  p.focused=0;
  p.activestyle=null;
  return p
}

function toldhandles(){}
function Register_toldhandles(){
  if(IsRegisteredtoldhandles)return;
  Register_tobject();
  var p=new tobject();
  p.zb="toldhandles";
  p.zc=toldhandles;
  p.ParentClass=tobject;
  p.gethandle=toldhandles_gethandle;
  toldhandles.prototype=p;
  IsRegisteredtoldhandles=true;
}
function Create_toldhandles(p){
  Register_toldhandles();
  if(p==void(0))var p=new toldhandles();
  p=Create_tobject(p);
  p.zb="toldhandles";
  p.fdomhandlearray=null;
  return p
}

function tdomhandlearray(){}
function Register_tdomhandlearray(){
  if(IsRegisteredtdomhandlearray)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tdomhandlearray";
  p.zc=tdomhandlearray;
  p.ParentClass=tobject;
  p.cleanup=tdomhandlearray_cleanup;
  p.getproperty_count=tdomhandlearray_getproperty_count;
  p.getproperty_handle=tdomhandlearray_getproperty_handle;
  p.append=tdomhandlearray_append;
  p.remove=tdomhandlearray_remove;
  p.create=tdomhandlearray_create;
  p.zd=p.destroy=tdomhandlearray_destroy;
  p.clearbandinfos=tdomhandlearray_clearbandinfos;
  p.setup=tdomhandlearray_setup;
  p.attacheventhandler=tdomhandlearray_attacheventhandler;
  p.detacheventhandler=tdomhandlearray_detacheventhandler;
  p.attacheffectseventhandler=tdomhandlearray_attacheffectseventhandler;
  p.appendwrapperproperty=tdomhandlearray_appendwrapperproperty;
  p.destroydomhandles=tdomhandlearray_destroydomhandles;
  p.detacheventhandlers=tdomhandlearray_detacheventhandlers;
  tdomhandlearray.prototype=p;
  IsRegisteredtdomhandlearray=true;
}
function Create_tdomhandlearray(p){
  Register_tdomhandlearray();
  if(p==void(0))var p=new tdomhandlearray();
  p=Create_tobject(p);
  p.zb="tdomhandlearray";
  p.fbandinfos=[];
  p.fallbandinfos=[];
  p.fattachedeventhandlers=[];
  p.fowner=null;
  p.foldhandles=null;
  p.fdynamicallycreated=0;
  return p
}

function tcreationattrseventhandler(){}
function Register_tcreationattrseventhandler(){
  if(IsRegisteredtcreationattrseventhandler)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tcreationattrseventhandler";
  p.zc=tcreationattrseventhandler;
  p.ParentClass=tobject;
  p.create=tcreationattrseventhandler_create;
  tcreationattrseventhandler.prototype=p;
  IsRegisteredtcreationattrseventhandler=true;
}
function Create_tcreationattrseventhandler(p){
  Register_tcreationattrseventhandler();
  if(p==void(0))var p=new tcreationattrseventhandler();
  p=Create_tobject(p);
  p.zb="tcreationattrseventhandler";
  p.name="";
  p.func=null;
  p.caller=null;
  return p
}

function tcreationattrs(){}
function Register_tcreationattrs(){
  if(IsRegisteredtcreationattrs)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tcreationattrs";
  p.zc=tcreationattrs;
  p.ParentClass=tobject;
  p.create=tcreationattrs_create;
  p.zd=p.destroy=tcreationattrs_destroy;
  p.assign=tcreationattrs_assign;
  p.adddomeventhandler=tcreationattrs_adddomeventhandler;
  p.getdomeventhandler=tcreationattrs_getdomeventhandler;
  p.getcreationattrseventhandler=tcreationattrs_getcreationattrseventhandler;
  p.setcreationattrseventhandler=tcreationattrs_setcreationattrseventhandler;
  tcreationattrs.prototype=p;
  IsRegisteredtcreationattrs=true;
}
function Create_tcreationattrs(p){
  Register_tcreationattrs();
  if(p==void(0))var p=new tcreationattrs();
  p=Create_tobject(p);
  p.zb="tcreationattrs";
  p.text="";
  p.left=0;
  p.top=0;
  p.width=0;
  p.height=0;
  p.font=Init_tfont(false);
  p.color=0;
  p.disablevalue="";
  p.borderstyle=0;
  p.bordersides={};
  p.bordercolor=0;
  p.borderwidth=0;
  p.visibility="";
  p.cursor="";
  p.zindex=0;
function Init__textendedattrs(w,d){
  if(w){
    var p={};
    p.v=new Array();
  } else {
    var p=new Array();
  }
  if(d != void(0)){
    SetVal__textendedattrs(d,p);
  }
  return p
}

function SetVal__textendedattrs(d,p){
  p=GetVal(p);
  setlength(p,d.length);
  for(var i=0;i<d.length;i++){
    p[i]=d[i]
  }
}

  p.extendedattrs=Init__textendedattrs(false);
  p.transparent=0;
  p.taborder=0;
  p.datafield="";
  p.datatype="";
  p.alignment=0;
  p.horizontalplacement=0;
  p.verticalplacement=0;
  p.opacity=0;
  p.tag="";
  p.padding=0;
  p.controlid="";
  p.eventhandlers=[];
  return p
}

function tabstractcontrol(){}
function Register_tabstractcontrol(){
  if(IsRegisteredtabstractcontrol)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tabstractcontrol";
  p.zc=tabstractcontrol;
  p.ParentClass=tobject;
  p.getproperty_ownerform=tabstractcontrol_getproperty_ownerform;
  p.setproperty_ownerform=tabstractcontrol_setproperty_ownerform;
  p.addchildtimer=tabstractcontrol_addchildtimer;
  p.removechildtimer=tabstractcontrol_removechildtimer;
  p.setupdomeventhandlers=tabstractcontrol_setupdomeventhandlers;
  p.attachdomeventhandlers0=tabstractcontrol_attachdomeventhandlers0;
  p.attachdomeventhandlers0=tabstractcontrol_attachdomeventhandlers0;
  p.attachdomeventhandlers=tabstractcontrol_attachdomeventhandlers;
  p.detachdomeventhandlers=tabstractcontrol_detachdomeventhandlers;
  p.attacheventhandlers=tabstractcontrol_attacheventhandlers;
  p.setowner=tabstractcontrol_setowner;
  p.handlecreated=tabstractcontrol_handlecreated;
  p.domhandleid=tabstractcontrol_domhandleid;
  p.calleventhandler=tabstractcontrol_calleventhandler;
  p.createbandinfo=tabstractcontrol_createbandinfo;
  p.appenddomhandle=tabstractcontrol_appenddomhandle;
  p.removedomhandle=tabstractcontrol_removedomhandle;
  p.finddomhandle=tabstractcontrol_finddomhandle;
  p.isflow=tabstractcontrol_isflow;
  p.detachfromdom=tabstractcontrol_detachfromdom;
  p.attachtodom=tabstractcontrol_attachtodom;
  p.create0=tabstractcontrol_create0;
  p.zd=p.destroy=tabstractcontrol_destroy;
  p.deactivate=tabstractcontrol_deactivate;
  p.activate=tabstractcontrol_activate;
  p.childcount=tabstractcontrol_childcount;
  p.addcontrol=tabstractcontrol_addcontrol;
  p.removecontrol=tabstractcontrol_removecontrol;
  p.setattrs=tabstractcontrol_setattrs;
  p.getthemedvalue=tabstractcontrol_getthemedvalue;
  p.setupdomhandle=tabstractcontrol_setupdomhandle;
  p.canceleventbubble=tabstractcontrol_canceleventbubble;
  p.domhandlecreated=tabstractcontrol_domhandlecreated;
  p.domhandle=tabstractcontrol_domhandle;
  p.domstyle=tabstractcontrol_domstyle;
  p.bandinfo=tabstractcontrol_bandinfo;
  p.getbandinfo=tabstractcontrol_getbandinfo;
  p.currentdomstyle=tabstractcontrol_currentdomstyle;
  p.calldomeventhandler=tabstractcontrol_calldomeventhandler;
  tabstractcontrol.prototype=p;
  IsRegisteredtabstractcontrol=true;
}
function Create_tabstractcontrol(p){
  Register_tabstractcontrol();
  if(p==void(0))var p=new tabstractcontrol();
  p=Create_tobject(p);
  p.zb="tabstractcontrol";
  p.fdomhandledynamicallycreated=0;
  p.fchildtimers=[];
  p.fownerform=null;
  p.fproxycaller=null;
  p.name="";
  p.owner=null;
  p.childctrls=[];
  p.bandindex=0;
  p.repeaterindex=0;
  p.domhandlearray=null;
  p.bandinfos=[];
  p.fasthandles=null;
  p.themedprops=[];
  p.attrs={v:null};
  return p
}

function timer(){}
function Register_timer(){
  if(IsRegisteredtimer)return;
  Register_tabstractcontrol();
  var p=new tabstractcontrol();
  p.zb="timer";
  p.zc=timer;
  p.ParentClass=tabstractcontrol;
  p.setupnexttimeout=timer_setupnexttimeout;
  p.clearnexttimeout=timer_clearnexttimeout;
  p.setenable=timer_setenable;
  p.suspend=timer_suspend;
  p.resume=timer_resume;
  p.handletimerevent=timer_handletimerevent;
  p.setowner=timer_setowner;
  p.create0=timer_create0;
  p.zd=p.destroy=timer_destroy;
  timer.prototype=p;
  IsRegisteredtimer=true;
}
function Create_timer(p){
  Register_timer();
  if(p==void(0))var p=new timer();
  p=Create_tabstractcontrol(p);
  p.zb="timer";
  p.fenabled=0;
  p.timerid=0;
  p.fownerctrl=null;
  p.interval=0;
  p.ontimer=_IMthod(false);
  p.callcount=0;
  p.suspended=0;
  p.freeonterminate=0;
  return p
}

function tcontrolstyles(){}
function Register_tcontrolstyles(){
  if(IsRegisteredtcontrolstyles)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tcontrolstyles";
  p.zc=tcontrolstyles;
  p.ParentClass=tobject;
  p.getproperty_controlstyle=tcontrolstyles_getproperty_controlstyle;
  p.getproperty_currentstyle=tcontrolstyles_getproperty_currentstyle;
  p.getproperty_hasbackground=tcontrolstyles_getproperty_hasbackground;
  p.preloadimages=tcontrolstyles_preloadimages;
  p.getproperty_activestyle=tcontrolstyles_getproperty_activestyle;
  p.setproperty_activestyle=tcontrolstyles_setproperty_activestyle;
  p.getbackgroundhandle=tcontrolstyles_getbackgroundhandle;
  p.getcontrolhandle=tcontrolstyles_getcontrolhandle;
  p.getinnerhandle=tcontrolstyles_getinnerhandle;
  p.getbackgroundstyle=tcontrolstyles_getbackgroundstyle;
  p.isresizeable=tcontrolstyles_isresizeable;
  p.supportsresizing=tcontrolstyles_supportsresizing;
  p.init=tcontrolstyles_init;
  p.updatebackgroundsize=tcontrolstyles_updatebackgroundsize;
  p.getbackgroundhtml=tcontrolstyles_getbackgroundhtml;
  p.applybackgroundimage=tcontrolstyles_applybackgroundimage;
  p.getstylename=tcontrolstyles_getstylename;
  p.getcurrentstyle=tcontrolstyles_getcurrentstyle;
  p.boundschanged=tcontrolstyles_boundschanged;
  p.preloadimagesforie=tcontrolstyles_preloadimagesforie;
  p.handlebackgroundonload=tcontrolstyles_handlebackgroundonload;
  p.isactivebackground=tcontrolstyles_isactivebackground;
  p.applybackgroundstyle=tcontrolstyles_applybackgroundstyle;
  p.applyborderstyle=tcontrolstyles_applyborderstyle;
  p.applycontrolstyle=tcontrolstyles_applycontrolstyle;
  p.applycolorstyle=tcontrolstyles_applycolorstyle;
  p.create=tcontrolstyles_create;
  p.zd=p.destroy=tcontrolstyles_destroy;
  p.initstyles=tcontrolstyles_initstyles;
  p.initsystemstyles=tcontrolstyles_initsystemstyles;
  p.clear=tcontrolstyles_clear;
  p.applystyle0=tcontrolstyles_applystyle0;
  p.applystyle0=tcontrolstyles_applystyle0;
  p.updatecurrentstyle=tcontrolstyles_updatecurrentstyle;
  tcontrolstyles.prototype=p;
  IsRegisteredtcontrolstyles=true;
}
function Create_tcontrolstyles(p){
  Register_tcontrolstyles();
  if(p==void(0))var p=new tcontrolstyles();
  p=Create_tobject(p);
  p.zb="tcontrolstyles";
  p.owner=null;
  p.items=[];
  return p
}

function tresizeablecontrolstyles(){}
function Register_tresizeablecontrolstyles(){
  if(IsRegisteredtresizeablecontrolstyles)return;
  Register_tcontrolstyles();
  var p=new tcontrolstyles();
  p.zb="tresizeablecontrolstyles";
  p.zc=tresizeablecontrolstyles;
  p.ParentClass=tcontrolstyles;
  p.findslice=tresizeablecontrolstyles_findslice;
  p.getbackgroundinnerhtml=tresizeablecontrolstyles_getbackgroundinnerhtml;
  p.updatebackgroundsize=tresizeablecontrolstyles_updatebackgroundsize;
  p.getbackgroundhtml=tresizeablecontrolstyles_getbackgroundhtml;
  p.boundschanged=tresizeablecontrolstyles_boundschanged;
  p.isactivebackground=tresizeablecontrolstyles_isactivebackground;
  p.applybackgroundstyle=tresizeablecontrolstyles_applybackgroundstyle;
  tresizeablecontrolstyles.prototype=p;
  IsRegisteredtresizeablecontrolstyles=true;
}
function Create_tresizeablecontrolstyles(p){
  Register_tresizeablecontrolstyles();
  if(p==void(0))var p=new tresizeablecontrolstyles();
  p=Create_tcontrolstyles(p);
  p.zb="tresizeablecontrolstyles";
  return p
}

function twebcontrol(){}
function Register_twebcontrol(){
  if(IsRegisteredtwebcontrol)return;
  Register_tabstractcontrol();
  var p=new tabstractcontrol();
  p.zb="twebcontrol";
  p.zc=twebcontrol;
  p.ParentClass=tabstractcontrol;
  p.dohandleeffect=twebcontrol_dohandleeffect;
  p.shouldhandleeffect=twebcontrol_shouldhandleeffect;
  p.placementrequired=twebcontrol_placementrequired;
  p.getproperty_enabled=twebcontrol_getproperty_enabled;
  p.setproperty_enabled=twebcontrol_setproperty_enabled;
  p.getproperty_caption=twebcontrol_getproperty_caption;
  p.setproperty_caption=twebcontrol_setproperty_caption;
  p.getproperty_left=twebcontrol_getproperty_left;
  p.setproperty_left=twebcontrol_setproperty_left;
  p.getproperty_top=twebcontrol_getproperty_top;
  p.setproperty_top=twebcontrol_setproperty_top;
  p.getproperty_width=twebcontrol_getproperty_width;
  p.setproperty_width=twebcontrol_setproperty_width;
  p.getproperty_height=twebcontrol_getproperty_height;
  p.setproperty_height=twebcontrol_setproperty_height;
  p.getproperty_visible=twebcontrol_getproperty_visible;
  p.setproperty_visible=twebcontrol_setproperty_visible;
  p.getproperty_color=twebcontrol_getproperty_color;
  p.setproperty_color=twebcontrol_setproperty_color;
  p.getproperty_transparent=twebcontrol_getproperty_transparent;
  p.setproperty_transparent=twebcontrol_setproperty_transparent;
  p.getproperty_borderstyle=twebcontrol_getproperty_borderstyle;
  p.setproperty_borderstyle=twebcontrol_setproperty_borderstyle;
  p.getproperty_bordercolor=twebcontrol_getproperty_bordercolor;
  p.setproperty_bordercolor=twebcontrol_setproperty_bordercolor;
  p.getproperty_borderwidth=twebcontrol_getproperty_borderwidth;
  p.setproperty_borderwidth=twebcontrol_setproperty_borderwidth;
  p.getproperty_bordersides=twebcontrol_getproperty_bordersides;
  p.setproperty_bordersides=twebcontrol_setproperty_bordersides;
  p.getproperty_fontsize=twebcontrol_getproperty_fontsize;
  p.setproperty_fontsize=twebcontrol_setproperty_fontsize;
  p.getproperty_cangrow=twebcontrol_getproperty_cangrow;
  p.setproperty_cangrow=twebcontrol_setproperty_cangrow;
  p.getproperty_canshrink=twebcontrol_getproperty_canshrink;
  p.setproperty_canshrink=twebcontrol_setproperty_canshrink;
  p.getproperty_horizontalplacement=twebcontrol_getproperty_horizontalplacement;
  p.setproperty_horizontalplacement=twebcontrol_setproperty_horizontalplacement;
  p.getproperty_verticalplacement=twebcontrol_getproperty_verticalplacement;
  p.setproperty_verticalplacement=twebcontrol_setproperty_verticalplacement;
  p.getproperty_isfocused=twebcontrol_getproperty_isfocused;
  p.getproperty_canfocus=twebcontrol_getproperty_canfocus;
  p.getproperty_inputhandle=twebcontrol_getproperty_inputhandle;
  p.setproperty_isfocused=twebcontrol_setproperty_isfocused;
  p.getproperty_cursor=twebcontrol_getproperty_cursor;
  p.setproperty_cursor=twebcontrol_setproperty_cursor;
  p.getproperty_tag=twebcontrol_getproperty_tag;
  p.setproperty_tag=twebcontrol_setproperty_tag;
  p.getctrlhtmlidext=twebcontrol_getctrlhtmlidext;
  p.getctrlbackgroundhtml=twebcontrol_getctrlbackgroundhtml;
  p.getinnerhtml=twebcontrol_getinnerhtml;
  p.parsekeyvalue=twebcontrol_parsekeyvalue;
  p.clearvalue=twebcontrol_clearvalue;
  p.setvalue=twebcontrol_setvalue;
  p.getvalue=twebcontrol_getvalue;
  p.isinactivetabsheet=twebcontrol_isinactivetabsheet;
  p.ispanel=twebcontrol_ispanel;
  p.hastextcaption=twebcontrol_hastextcaption;
  p.highlight=twebcontrol_highlight;
  p.applydeltay_tosiblings=twebcontrol_applydeltay_tosiblings;
  p.createcontrolstyle=twebcontrol_createcontrolstyle;
  p.allowcontrolstyles=twebcontrol_allowcontrolstyles;
  p.getstylestring=twebcontrol_getstylestring;
  p.setdisplaynone=twebcontrol_setdisplaynone;
  p.isinplace=twebcontrol_isinplace;
  p.wasdisabled=twebcontrol_wasdisabled;
  p.handleanimationstop=twebcontrol_handleanimationstop;
  p.supportsanimation=twebcontrol_supportsanimation;
  p.startanimation=twebcontrol_startanimation;
  p.stopanimation=twebcontrol_stopanimation;
  p.createbandinfo=twebcontrol_createbandinfo;
  p.handleeffect=twebcontrol_handleeffect;
  p.handleupdatestyle=twebcontrol_handleupdatestyle;
  p.attachdomeventhandlers0=twebcontrol_attachdomeventhandlers0;
  p.attacheffecteventhandlers=twebcontrol_attacheffecteventhandlers;
  p.appenddomhandle=twebcontrol_appenddomhandle;
  p.removedomhandle=twebcontrol_removedomhandle;
  p.sortctrls=twebcontrol_sortctrls;
  p.handlecreated=twebcontrol_handlecreated;
  p.recalculateplacement=twebcontrol_recalculateplacement;
  p.dorecalculateplacement=twebcontrol_dorecalculateplacement;
  p.dogroworshrink=twebcontrol_dogroworshrink;
  p.updatehorzplacement=twebcontrol_updatehorzplacement;
  p.updatevertplacement=twebcontrol_updatevertplacement;
  p.updatecontrolstate=twebcontrol_updatecontrolstate;
  p.updatecurrentstyle=twebcontrol_updatecurrentstyle;
  p.initcurrentstyle=twebcontrol_initcurrentstyle;
  p.disabledomhandles=twebcontrol_disabledomhandles;
  p.disabledomhandle=twebcontrol_disabledomhandle;
  p.getbackgroundstylestring=twebcontrol_getbackgroundstylestring;
  p.initparts=twebcontrol_initparts;
  p.readlocalestring=twebcontrol_readlocalestring;
  p.writelocalestring=twebcontrol_writelocalestring;
  p.create2=twebcontrol_create2;
  p.create0=twebcontrol_create0;
  p.zd=p.destroy=twebcontrol_destroy;
  p.freedom=twebcontrol_freedom;
  p.initcontrolstyles=twebcontrol_initcontrolstyles;
  p.getctrlhtmlstyle=twebcontrol_getctrlhtmlstyle;
  p.getctrlhtmlid=twebcontrol_getctrlhtmlid;
  p.getcontrolhtml=twebcontrol_getcontrolhtml;
  p.setupdomhandle=twebcontrol_setupdomhandle;
  p.createdomobject=twebcontrol_createdomobject;
  p.serialize=twebcontrol_serialize;
  p.deserialize=twebcontrol_deserialize;
  p.getdatavalue=twebcontrol_getdatavalue;
  p.setdatavalue=twebcontrol_setdatavalue;
  p.isrelationshipfield=twebcontrol_isrelationshipfield;
  p.fieldkind=twebcontrol_fieldkind;
  p.focus=twebcontrol_focus;
  p.absleft=twebcontrol_absleft;
  p.abstop=twebcontrol_abstop;
  p.contentheight=twebcontrol_contentheight;
  p.contentwidth=twebcontrol_contentwidth;
  p.getpart=twebcontrol_getpart;
  p.getsubcontrolbyid=twebcontrol_getsubcontrolbyid;
  p.groworshrink=twebcontrol_groworshrink;
  p.backgroundhandle=twebcontrol_backgroundhandle;
  p.setopacity=twebcontrol_setopacity;
  twebcontrol.prototype=p;
  IsRegisteredtwebcontrol=true;
}
function Create_twebcontrol(p){
  Register_twebcontrol();
  if(p==void(0))var p=new twebcontrol();
  p=Create_tabstractcontrol(p);
  p.zb="twebcontrol";
  p.fanimationeffects=null;
  p.fwasdisabled=null;
  p.fisinternalcontainer=0;
  p.onbeforegroworshrink=_IMthod(false);
  p.onaftergroworshrink=_IMthod(false);
  p.onbeforepushedorpulled=_IMthod(false);
  p.onafterpushedorpulled=_IMthod(false);
  p.onhyperlinkclick=_IMthod(false);
  p.internalgrowshrinkoverride=0;
  p.controlstyle=null;
  return p
}

function twebpopupcontrol(){}
function Register_twebpopupcontrol(){
  if(IsRegisteredtwebpopupcontrol)return;
  Register_twebcontrol();
  var p=new twebcontrol();
  p.zb="twebpopupcontrol";
  p.zc=twebpopupcontrol;
  p.ParentClass=twebcontrol;
  p.handleonmousemove=twebpopupcontrol_handleonmousemove;
  p.handleonclick=twebpopupcontrol_handleonclick;
  p.reposition=twebpopupcontrol_reposition;
  p.separateborder=twebpopupcontrol_separateborder;
  p.deactivatepopupcontrol=twebpopupcontrol_deactivatepopupcontrol;
  p.supportsanimation=twebpopupcontrol_supportsanimation;
  p.handleanimationclose=twebpopupcontrol_handleanimationclose;
  p.handleanimationstop=twebpopupcontrol_handleanimationstop;
  p.create0=twebpopupcontrol_create0;
  p.createdomobject=twebpopupcontrol_createdomobject;
  p.run=twebpopupcontrol_run;
  p.canclose=twebpopupcontrol_canclose;
  p.close=twebpopupcontrol_close;
  p.activate=twebpopupcontrol_activate;
  p.deactivate=twebpopupcontrol_deactivate;
  p.popupat=twebpopupcontrol_popupat;
  twebpopupcontrol.prototype=p;
  IsRegisteredtwebpopupcontrol=true;
}
function Create_twebpopupcontrol(p){
  Register_twebpopupcontrol();
  if(p==void(0))var p=new twebpopupcontrol();
  p=Create_twebcontrol(p);
  p.zb="twebpopupcontrol";
  p.fpopupcontrol=null;
  p.fneedclose=0;
  p.fcloseonleave=0;
  return p
}

function tabstractform(){}
function Register_tabstractform(){
  if(IsRegisteredtabstractform)return;
  Register_twebcontrol();
  var p=new twebcontrol();
  p.zb="tabstractform";
  p.zc=tabstractform;
  p.ParentClass=twebcontrol;
  p.create1=tabstractform_create1;
  p.zd=p.destroy=tabstractform_destroy;
  p.close=tabstractform_close;
  p.iskeyparameter=tabstractform_iskeyparameter;
  p.matchbyparameters=tabstractform_matchbyparameters;
  p.getcontrolbyname=tabstractform_getcontrolbyname;
  p.handlemainformunload=tabstractform_handlemainformunload;
  p.cloneownersubformdomhandle=tabstractform_cloneownersubformdomhandle;
  p.ownersubformtargetref=tabstractform_ownersubformtargetref;
  p.instancefullref=tabstractform_instancefullref;
  p.setcolorbyname=tabstractform_setcolorbyname;
  p.isrootform=tabstractform_isrootform;
  p.ismainform=tabstractform_ismainform;
  p.istopmostform=tabstractform_istopmostform;
  p.resumealltimercontrols=tabstractform_resumealltimercontrols;
  p.suspendalltimercontrols=tabstractform_suspendalltimercontrols;
  p.contentheight=tabstractform_contentheight;
  p.contentwidth=tabstractform_contentwidth;
  p.setupcontrolsoverflowproperty=tabstractform_setupcontrolsoverflowproperty;
  p.setupdomhandleto=tabstractform_setupdomhandleto;
  p.setupcontrolhandles=tabstractform_setupcontrolhandles;
  p.setupcontrolevents=tabstractform_setupcontrolevents;
  p.evaluatesubformparameters=tabstractform_evaluatesubformparameters;
  p.setupformfromdfm=tabstractform_setupformfromdfm;
  p.createformcontrols=tabstractform_createformcontrols;
  p.reopenallembeddedsubforms=tabstractform_reopenallembeddedsubforms;
  p.reopenwithparameters=tabstractform_reopenwithparameters;
  p.beginbusy=tabstractform_beginbusy;
  p.endbusy=tabstractform_endbusy;
  p.isfloating=tabstractform_isfloating;
  p.openform=tabstractform_openform;
  p.openpage=tabstractform_openpage;
  p.getformhtml=tabstractform_getformhtml;
  p.getproperty_ownerform=tabstractform_getproperty_ownerform;
  p.getparametervalue=tabstractform_getparametervalue;
  p.setparametervalue=tabstractform_setparametervalue;
  p.initcompositecontrols=tabstractform_initcompositecontrols;
  p.handlehyperlinkclick=tabstractform_handlehyperlinkclick;
  p.setproperty_caption=tabstractform_setproperty_caption;
  p.getproperty_caption=tabstractform_getproperty_caption;
  p.getproperty_horizontalplacement=tabstractform_getproperty_horizontalplacement;
  p.getproperty_verticalplacement=tabstractform_getproperty_verticalplacement;
  p.buildnavigator=tabstractform_buildnavigator;
  p.doiskeyparameter=tabstractform_doiskeyparameter;
  p.handleonclick=tabstractform_handleonclick;
  p.handleonmousemove=tabstractform_handleonmousemove;
  p.handleonkeydown=tabstractform_handleonkeydown;
  p.getinputcontrol=tabstractform_getinputcontrol;
  p.setproperty_formreadystate=tabstractform_setproperty_formreadystate;
  p.getproperty_datasource=tabstractform_getproperty_datasource;
  p.setproperty_datasource=tabstractform_setproperty_datasource;
  p.getproperty_visible=tabstractform_getproperty_visible;
  p.setproperty_visible=tabstractform_setproperty_visible;
  p.attachdomeventhandlers0=tabstractform_attachdomeventhandlers0;
  p.setupdomeventhandlers=tabstractform_setupdomeventhandlers;
  p.getproperty_instancename=tabstractform_getproperty_instancename;
  p.getproperty_viewmode=tabstractform_getproperty_viewmode;
  p.setproperty_viewmode=tabstractform_setproperty_viewmode;
  p.getproperty_columncount=tabstractform_getproperty_columncount;
  p.getproperty_contentlayout=tabstractform_getproperty_contentlayout;
  p.domhandle=tabstractform_domhandle;
  p.domstyle=tabstractform_domstyle;
  p.beforeshow=tabstractform_beforeshow;
  p.aftershow=tabstractform_aftershow;
  p.recalculateplacement=tabstractform_recalculateplacement;
  p.groworshrink=tabstractform_groworshrink;
  p.updateparametersfromhiddenhtmlfields=tabstractform_updateparametersfromhiddenhtmlfields;
  p.initializeafteropen=tabstractform_initializeafteropen;
  p.checkdataformready=tabstractform_checkdataformready;
  tabstractform.prototype=p;
  IsRegisteredtabstractform=true;
}
function Create_tabstractform(p){
  Register_tabstractform();
  if(p==void(0))var p=new tabstractform();
  p=Create_twebcontrol(p);
  p.zb="tabstractform";
  p.oncreate=_IMthod(false);
  p.ondestroy=_IMthod(false);
  p.onclose=_IMthod(false);
  p.onready=_IMthod(false);
  p.onbeforeshow=_IMthod(false);
  p.onaftershow=_IMthod(false);
  p.onwritehistory=_IMthod(false);
  p.onreadhistory=_IMthod(false);
  p.onbeforesubmit=_IMthod(false);
  p.onaftersubmit=_IMthod(false);
  p.onbeforerefresh=_IMthod(false);
  p.onafterrefresh=_IMthod(false);
  p.cursor="";
  p.modulename="";
  p.winwidth=0;
  p.winheight=0;
  p.navigationctrls=[];
  p.recordnumedit=null;
  p.openparameters="";
  p.originalparameters=null;
  p.returnedparameters=null;
  p.currentparameters=null;
  p.popup=null;
  p.ownersubform=null;
  p.encryptdata=0;
  p.autoscroll=0;
  p.infilterdefine=0;
  p.documentheader=null;
  p.detail=null;
  p.detaileditable=null;
  p.documentfooter=null;
  p.ownersubformdomhandle=null;
  p.formopener=null;
  p.clearhtmlonclose=0;
  p.neveractivated=0;
  p.browserhistory=0;
  p.styledata=[];
  p.waitforchildforms=0;
  p.timers=[];
  p.fboundcontrols=[];
  p.finstancename="";
  p.fformreadystate=0;
  p.templookuphandles=[];
  return p
}

function tabstractwindow(){}
function Register_tabstractwindow(){
  if(IsRegisteredtabstractwindow)return;
  Register_twebpopupcontrol();
  var p=new twebpopupcontrol();
  p.zb="tabstractwindow";
  p.zc=tabstractwindow;
  p.ParentClass=twebpopupcontrol;
  p.getproperty_currentform=tabstractwindow_getproperty_currentform;
  p.getproperty_content=tabstractwindow_getproperty_content;
  p.getproperty_title=tabstractwindow_getproperty_title;
  p.setproperty_title=tabstractwindow_setproperty_title;
  p.getproperty_draggable=tabstractwindow_getproperty_draggable;
  p.setproperty_draggable=tabstractwindow_setproperty_draggable;
  p.getproperty_closable=tabstractwindow_getproperty_closable;
  p.setproperty_closable=tabstractwindow_setproperty_closable;
  p.getproperty_center=tabstractwindow_getproperty_center;
  p.setproperty_center=tabstractwindow_setproperty_center;
  p.getproperty_modal=tabstractwindow_getproperty_modal;
  p.setproperty_modal=tabstractwindow_setproperty_modal;
  p.getproperty_nofadein=tabstractwindow_getproperty_nofadein;
  p.setproperty_nofadein=tabstractwindow_setproperty_nofadein;
  p.getproperty_noborder=tabstractwindow_getproperty_noborder;
  p.setproperty_noborder=tabstractwindow_setproperty_noborder;
  p.getproperty_stylename=tabstractwindow_getproperty_stylename;
  p.setproperty_stylename=tabstractwindow_setproperty_stylename;
  p.closequery=tabstractwindow_closequery;
  p.activate=tabstractwindow_activate;
  p.close=tabstractwindow_close;
  tabstractwindow.prototype=p;
  IsRegisteredtabstractwindow=true;
}
function Create_tabstractwindow(p){
  Register_tabstractwindow();
  if(p==void(0))var p=new tabstractwindow();
  p=Create_twebpopupcontrol(p);
  p.zb="tabstractwindow";
  p.fonclosequery=null;
  return p
}

function tstate(){}
function Register_tstate(){
  if(IsRegisteredtstate)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tstate";
  p.zc=tstate;
  p.ParentClass=tobject;
  p.create=tstate_create;
  p.zd=p.destroy=tstate_destroy;
  p.isdone=tstate_isdone;
  p.execute=tstate_execute;
  tstate.prototype=p;
  IsRegisteredtstate=true;
}
function Create_tstate(p){
  Register_tstate();
  if(p==void(0))var p=new tstate();
  p=Create_tobject(p);
  p.zb="tstate";
  p.formclassname="";
  p.forminstancename="";
  p.targetformname="";
  p.targetsubformname="";
  p.params="";
  p.location="";
  p.paramlist=null;
  return p
}

function tstatereconstructor(){}
function Register_tstatereconstructor(){
  if(IsRegisteredtstatereconstructor)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tstatereconstructor";
  p.zc=tstatereconstructor;
  p.ParentClass=tobject;
  p.buildlist=tstatereconstructor_buildlist;
  p.create=tstatereconstructor_create;
  p.zd=p.destroy=tstatereconstructor_destroy;
  p.getnextstate=tstatereconstructor_getnextstate;
  p.run=tstatereconstructor_run;
  tstatereconstructor.prototype=p;
  IsRegisteredtstatereconstructor=true;
}
function Create_tstatereconstructor(p){
  Register_tstatereconstructor();
  if(p==void(0))var p=new tstatereconstructor();
  p=Create_tobject(p);
  p.zb="tstatereconstructor";
  p.statelist=[];
  p.currentstate=null;
  return p
}

function txappstate(){}
function Register_txappstate(){
  if(IsRegisteredtxappstate)return;
  Register_tobject();
  var p=new tobject();
  p.zb="txappstate";
  p.zc=txappstate;
  p.ParentClass=tobject;
  txappstate.prototype=p;
  IsRegisteredtxappstate=true;
}
function Create_txappstate(p){
  Register_txappstate();
  if(p==void(0))var p=new txappstate();
  p=Create_tobject(p);
  p.zb="txappstate";
  p.state="";
  p.id="";
  return p
}

function Create_TAbstractFormArray(p){
  return new Array();
}

function txapp(){}
function Register_txapp(){
  if(IsRegisteredtxapp)return;
  Register_tobject();
  var p=new tobject();
  p.zb="txapp";
  p.zc=txapp;
  p.ParentClass=tobject;
  p.create=txapp_create;
  p.zd=p.destroy=txapp_destroy;
  p.setmsiebackforwardiframe=txapp_setmsiebackforwardiframe;
  p.run=txapp_run;
  p.finalizestartup=txapp_finalizestartup;
  p.deactivepopup0=txapp_deactivepopup0;
  p.deactivepopup0=txapp_deactivepopup0;
  p.deactivepopup=txapp_deactivepopup;
  p.isactivepopup=txapp_isactivepopup;
  p.showpopup=txapp_showpopup;
  p.openpage=txapp_openpage;
  p.openform=txapp_openform;
  p.reconstructform=txapp_reconstructform;
  p.scrolltotop=txapp_scrolltotop;
  p.dobeginload=txapp_dobeginload;
  p.doendload=txapp_doendload;
  p.loadmodule=txapp_loadmodule;
  p.reconstructstate=txapp_reconstructstate;
  p.addcurrentstatetobrowserhistory=txapp_addcurrentstatetobrowserhistory;
  p.addstatetobrowserhistory=txapp_addstatetobrowserhistory;
  p.enablestatechangedetector=txapp_enablestatechangedetector;
  p.disablestatechangedetector=txapp_disablestatechangedetector;
  p.getfloatingsubform=txapp_getfloatingsubform;
  p.indexoffloatingsubform=txapp_indexoffloatingsubform;
  p.getuniqueopenformbatchid=txapp_getuniqueopenformbatchid;
  p.getstatebyid=txapp_getstatebyid;
  p.handleerror=txapp_handleerror;
  p.deactivatepopups=txapp_deactivatepopups;
  p.deactivatepopupsbyhandle=txapp_deactivatepopupsbyhandle;
  p.dohandleresize=txapp_dohandleresize;
  p.dohandleresizetimerevent=txapp_dohandleresizetimerevent;
  p.getproperty_rootdomain=txapp_getproperty_rootdomain;
  p.setproperty_rootdomain=txapp_setproperty_rootdomain;
  p.getproperty_webform=txapp_getproperty_webform;
  p.getproperty_module=txapp_getproperty_module;
  p.getproperty_viewheight=txapp_getproperty_viewheight;
  p.getproperty_viewwidth=txapp_getproperty_viewwidth;
  p.getproperty_vscrollposition=txapp_getproperty_vscrollposition;
  p.getproperty_hscrollposition=txapp_getproperty_hscrollposition;
  p.getproperty_activepopup=txapp_getproperty_activepopup;
  txapp.prototype=p;
  IsRegisteredtxapp=true;
}
function Create_txapp(p){
  Register_txapp();
  if(p==void(0))var p=new txapp();
  p=Create_tobject(p);
  p.zb="txapp";
  p.mainform=null;
  p.openforms=[];
  p.runningmodules=[];
  p.onbeginload=null;
  p.onendload=null;
  p.loadcounter=0;
  p.rootsubform=null;
  p.states=[];
  p.iebackforwardiframe=null;
  p.automaticstatetracking=0;
  p.startupfinalized=0;
  p.statereconstructor=null;
  p.statedetectorenabled=0;
  p.statedetectorexpectedstate="";
  p.initialstate="";
  p.releasememoryonclose=0;
  p.floatingwindows=[];
  p.growshrinkqueue=[];
  p.originaldomain="";
  p.allowdomainswitching=0;
  p.waitforchildforms=0;
  p.frootdomain="";
  p.resizetimer=null;
  p.lastviewwidth=0;
  p.lastviewheight=0;
  p.fopenformbatchid=0;
  p.factivepopups=[];
  p.fforceaddpagetohistory=0;
  return p
}

function tserializer(){}
function Register_tserializer(){
  if(IsRegisteredtserializer)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tserializer";
  p.zc=tserializer;
  p.ParentClass=tobject;
  tserializer.prototype=p;
  IsRegisteredtserializer=true;
}
function Create_tserializer(p){
  Register_tserializer();
  if(p==void(0))var p=new tserializer();
  p=Create_tobject(p);
  p.zb="tserializer";
  p.datarecord=null;
  p.fieldname="";
  return p
}

function Create_tvaluewrapper(p){
  return {v:""};
}

var xapp=null;
var createmoduleformfunction=null;createmoduleformfunction=null;
var gv_topzindex=0;gv_topzindex=6000000;
var gvautoidcounter=0;gvautoidcounter=1;
var gv_ModuleOnLoad=[];gv_ModuleOnLoad=null;
var fregisteredtimers=[];fregisteredtimers=null;
var lasttimername=0;lasttimername=0;
var cpagenameparam;cpagenameparam='PageName';
var copenformbatchidparam;copenformbatchidparam='BatchID';
var cviewmodeparam;cviewmodeparam='ViewMode';
var ccolumncountparam;ccolumncountparam='ColumnCount';
var ccontentlayoutparam;ccontentlayoutparam='ContentLayout';
var callbordersides;callbordersides=_ISet(false,0,0,1,1,2,2,3,3);
var cthemeprefix;cthemeprefix='`';
function topx(value){

  return inttostr(value) + 'px';
}

function frompx(value){

  value={v:value};
  var p=0;
  p=pos('px',value.v);
  if(p != 0){
    delete_(value,p,2);
  }
  return strtointdef(value.v,0);
}

function isie7orlower(){

  return (bRoWsEr.engineid == 'MS') && (bRoWsEr.version <= 7);
}

function hasasparenthandle(childhandle,parenthandle){

  for(;childhandle != null;){
    if(childhandle == parenthandle){
      return true;
    }
    try{
      childhandle=childhandle.parentNode;
    }catch(ExceptObject){
      childhandle=null;
    }
  }
  return false;
}

function theme_isthemedvalue(valuename){

  return (valuename != '') && (valuename.charAt(1-1) == cthemeprefix);
}

function theme_getthemedvalue(valuename){

  return (valuename == '')?'':getarrayitem(gv_themevalues,copy(valuename,2,lEngTH(valuename) - 1));
}

function resolvethemedvalue(value){
  var result="";
  result=value;
  for(;theme_isthemedvalue(result);){
    result=theme_getthemedvalue(result);
  }
  return result;
}

function resolvethemedcolorvalue(value,def){
  var result=0;
  result=strtointdef(resolvethemedvalue(value),cnocolorspecified);
  if(result == cnocolorspecified){
    return def;
  }
  return result;
}

function composeimageurl(image){

  return (isScriptorApp)?'Images/System/' + image:gvBaseURL + image;
}

function isfullurl(s){

  var us="";
  us=__string_toupper(s);
  return __string_startswith(us,'HTTP://') || __string_startswith(us,'HTTPS://') || __string_startswith(us,'FTP://');
}

function isexternaldomain(s){
  var result=0;
  var domain="";
  result=isfullurl(s);
  if(!result){
    return result;
  }
  with(window.location){
    domain=(__string_equals(protocol,'https'))?protocol + '//' + hostname + ':' + inttostr(catalog().httpport):host;
  }
  return !__string_startswith(__string_tolower(s),__string_tolower(domain));
}

function composeresourceurl(resid){

  if(isfullurl(resid)){
    return resid;
  }else 
  return (isScriptorApp)?'Images/System/' + resid:gvBaseURL + resid + '?cls=res&xid=' + xappguid;
}

function preloadimage(handle,src,data,onload,onerror){  var img=null;
  function LoadImage(Img,Data,OnLoad,OnError){    
            Img.userData = Data;
            Img.onload = function()
            {
                if (OnLoad != null)
                    OnLoad(Data);
                Img.onload  = null;
                Img.onerror = null;
                Img.parentNode.removeChild(Img);
            };
            Img.onerror = function()
            {
                if (OnError != null)
                    OnError(Data);
                Img.onload  = null;
                Img.onerror = null;
                Img.parentNode.removeChild(Img);
            }
        
  }
  img=document.createElement('IMG');
  img.style.display='none';
  LoadImage(img,data,onload,onerror);
  handle.appendChild(img);
  img.src=src;
}

function doopenwindow(formname,parameters){

  var window=null;
  window=Create_tfloatingwindow().create2(xapp.mainform);
  window.fformname=formname;
  window.fparameters=parameters;
  window.run();
  return window;
}

function setfontstyle(style,fst){  style.fontStyle=(_InSet(1,fst))?'italic':'normal';
  style.fontWeight=(_InSet(0,fst))?'bolder':'normal';
  if((_InSet(2,fst)) && (_InSet(3,fst))){
    style.textDecoration='underline line-through';
  }else 
  if(_InSet(2,fst)){
    style.textDecoration='underline';
  }else 
  style.textDecoration=(_InSet(3,fst))?'line-through':'';
}

function setborder(style,borderstyle,bordersides,bordercolor,borderwidth){  var lighter="";
  var darker="";
  var cl="";
  var s="";
  if(bordercolor != cnocolorspecified){
    darker=colortohtmlhex(changecolorbrightness(bordercolor,-40));
    lighter=colortohtmlhex(changecolorbrightness(bordercolor,40));
    cl=colortohtmlhex(bordercolor);
  }else {
    cl='transparent';
    darker=cl;
    lighter=cl;
  }
  switch(borderstyle){
    case 0:
    style.border='';
    if(_InSet(0,bordersides)){
      style.borderLeft='';
    }
    if(_InSet(3,bordersides)){
      style.borderBottom='';
    }
    if(_InSet(2,bordersides)){
      style.borderRight='';
    }
    if(_InSet(1,bordersides)){
      style.borderTop='';
    }
    break;
    case 1:
    s=cl + ' ' + inttostr(borderwidth) + 'px solid';
    if(_InSet(0,bordersides)){
      style.borderLeft=s;
    }
    if(_InSet(3,bordersides)){
      style.borderBottom=s;
    }
    if(_InSet(2,bordersides)){
      style.borderRight=s;
    }
    if(_InSet(1,bordersides)){
      style.borderTop=s;
    }
    break;
    case 3:
    s=' ' + inttostr(borderwidth) + 'px solid';
    if(_InSet(0,bordersides)){
      style.borderLeft=lighter + s;
    }
    if(_InSet(3,bordersides)){
      style.borderBottom=darker + s;
    }
    if(_InSet(2,bordersides)){
      style.borderRight=darker + s;
    }
    if(_InSet(1,bordersides)){
      style.borderTop=lighter + s;
    }
    break;
    case 2:
    s=' ' + inttostr(borderwidth) + 'px solid';
    if(_InSet(0,bordersides)){
      style.borderLeft=darker + s;
    }
    if(_InSet(3,bordersides)){
      style.borderBottom=lighter + s;
    }
    if(_InSet(2,bordersides)){
      style.borderRight=lighter + s;
    }
    if(_InSet(1,bordersides)){
      style.borderTop=darker + s;
    }
    break;
    case 4:
    s=cl + ' ' + inttostr(borderwidth) + 'px dotted';
    if(_InSet(0,bordersides)){
      style.borderLeft=s;
    }
    if(_InSet(3,bordersides)){
      style.borderBottom=s;
    }
    if(_InSet(2,bordersides)){
      style.borderRight=s;
    }
    if(_InSet(1,bordersides)){
      style.borderTop=s;
    }
    break;
    case 5:
    s=cl + ' ' + inttostr(borderwidth) + 'px dashed';
    if(_InSet(0,bordersides)){
      style.borderLeft=s;
    }
    if(_InSet(3,bordersides)){
      style.borderBottom=s;
    }
    if(_InSet(2,bordersides)){
      style.borderRight=s;
    }
    if(_InSet(1,bordersides)){
      style.borderTop=s;
    }
  }
}

function tattachedeventhandler_create(aname,afunc,agethandlefunc){
  var self=this;
  tobject.prototype.create.call(self);
  self.name=aname;
  self.func=afunc;
  self.gethandlefunc=agethandlefunc;
  return self;
}

function tcontrolbandinfo_create0(){
  var self=this;
  self.repeaterbands=[];
  return self;
}

function tcontrolbandinfo_getinputhandle(){


  return null;
}

function tcontrolbandinfo_processhandles(processfunc){
  var self=this;
  processfunc(self.handle);
}

function tcontrolbandinfo_setupdomhandles(getdomhandlefunc){

}

function twebcontrolbandinfo_setupdomhandles(getdomhandlefunc){
  var self=this;
  tcontrolbandinfo.prototype.setupdomhandles.call(self, getdomhandlefunc);
  self.backgroundhandle=getdomhandlefunc('Background');
}

function twebcontrolbandinfo_processhandles(processfunc){
  var self=this;
  tcontrolbandinfo.prototype.processhandles.call(self, processfunc);
  processfunc(self.backgroundhandle);
}

function toldhandles_gethandle(i){
  var self=this;

  return self.fdomhandlearray.getproperty_handle(i);
}

function tdomhandlearray_create(aowner){
  var self=this;
  tobject.prototype.create.call(self);
  self.foldhandles=Create_toldhandles().create();
  self.foldhandles.fdomhandlearray=self;
  self.fowner=aowner;
  self.fbandinfos=[];
  self.fallbandinfos=[];
  self.fattachedeventhandlers=[];
  return self;
}

function tdomhandlearray_clearbandinfos(){
  var self=this;
  self.cleanup();
  self.fbandinfos.length=0;
  self.fallbandinfos.length=0;
}

function tdomhandlearray_destroy(){
  var self=this;
  self.clearbandinfos();
  self.fbandinfos=null;
  self.fallbandinfos=null;
  self.fattachedeventhandlers.length=0;
  self.fattachedeventhandlers=null;
  tobject.prototype.destroy.call(self);
}

function tdomhandlearray_detacheventhandlers(abandinfo){
  var self=this;
  var i=0;
  var eventhandler=null;
  for(i=0;i<=self.fattachedeventhandlers.length - 1;i++){
    eventhandler=self.fattachedeventhandlers[i];
    self.detacheventhandler(eventhandler.name,eventhandler.func,abandinfo,null);
    free(eventhandler);
    eventhandler=null;
  }
  self.fattachedeventhandlers.length=0;
}

function tdomhandlearray_cleanup(){
  var self=this;
  var bandinfo=null;
  var i=0;
  function clearwrapper(h){    if(assigned(h)){
      if(assigned(h.wrapper)){
        h.wrapper=null;
      }
    }
  }
  for(i=self.fallbandinfos.length - 1;i>=0;i--){
    bandinfo=self.fallbandinfos[i];
    bandinfo.processhandles(clearwrapper);
  }
  self.detacheventhandlers(null);
}

function tdomhandlearray_setup(id,aform){
  var self=this;
  var h=null;
  var i=0;
  var k=0;
  var doc=null;
  var s="";
  var sid="";
  var isdynamic=0;
  var bandinfo=null;
  var firstinfoinband=null;
  function getdomhandle(suffix,dynamicallycreated){
    var result=null;
    sid=(i == 1)?s + suffix:s + suffix + '_' + inttostr(i);
    if(k > 1){
      sid+='__' + inttostr(k);
    }
    result=(isdynamic || dynamicallycreated)?doc.getElementById(sid):aform.templookuphandles[sid];
    if(result != null){
      result.bandindex=i - 1;
      result.repeaterindex=k - 1;
      if(isdynamic || dynamicallycreated){
        result.id='x' + result.id;
      }
    }
    return result;
  }
  self.fbandinfos.length=0;
  self.fallbandinfos.length=0;
  if(id == ''){
    return;
  }
  doc=window.document;
  s=(aform != null)?aform.getproperty_instancename() + '_' + id:id;
  isdynamic=(aform == null) || !assigned(aform.templookuphandles);
  i=1;
  do{
    firstinfoinband=null;
    k=1;
    do{
      h=getdomhandle('',self.fowner.fdomhandledynamicallycreated || self.fdynamicallycreated);
      if(h != null){
        bandinfo=self.fowner.createbandinfo();
        bandinfo.owner=self.fowner;
        bandinfo.handle=h;
        bandinfo.setupdomhandles(getdomhandle);
        if(k == 1){
          firstinfoinband=bandinfo;
          self.fbandinfos.push(bandinfo);
        }
        firstinfoinband.repeaterbands.push(bandinfo);
        self.fallbandinfos.push(bandinfo);
        k++;
      }else 
      if(k == 1){
        return;
      }else 
        break;
    }while(!(false));
    i++;
  }while(!(false));
}

function tdomhandlearray_append(id,aform,handle){
  var self=this;
  var s="";
  function getdomhandle(suffix){
    var result=null;
    var sid="";
    sid=s + suffix;
    result=self.fowner.finddomhandle(handle,sid);
    if(result != null){
      result.bandindex=self.fbandinfos.length;
    }
    return result;
  }
  function createband(handle){
    var result=null;
    result=self.fowner.createbandinfo();
    result.owner=self.fowner;
    result.handle=handle;
    handle.bandindex=self.fbandinfos.length;
    handle.repeaterindex=0;
    result.setupdomhandles(getdomhandle);
    self.fbandinfos.push(result);
    self.fallbandinfos.push(result);
    return result;
  }
  s=(aform != null)?aform.getproperty_instancename() + '_' + id:id;
  createband(handle);
}

function tdomhandlearray_remove(abandinfo){
  var self=this;
  var idx=0;
  var i=0;
  var info=null;
  idx=self.fbandinfos.indexOf(abandinfo,0);
  if(idx >= 0){
    for(i=idx + 1;i<=self.fbandinfos.length - 1;i++){
      info=self.fbandinfos[i];
      if(info.handle != null){
        info.handle.bandindex=i - 1;
      }
    }
    self.fbandinfos.splice(idx,1);
  }
  idx=self.fallbandinfos.indexOf(abandinfo,0);
  if(idx >= 0){
    self.fallbandinfos.splice(idx,1);
  }
  free(abandinfo);
}

function tdomhandlearray_attacheventhandler(eventname,eventhandler,abandinfo,gethandlefunc){
  var self=this;
  var i=0;
  function attachevent(bandinfo){    var handle=null;
    handle=(assigned(gethandlefunc))?gethandlefunc(bandinfo):bandinfo.handle;
    if(handle == null){
      return;
    }
    xb_attacheventhandler(handle,eventname,eventhandler);
    self.fattachedeventhandlers.push(Create_tattachedeventhandler().create(eventname,eventhandler,gethandlefunc));
  }
  if(abandinfo != null){
    attachevent(abandinfo);
  }else 
    for(i=self.fallbandinfos.length - 1;i>=0;i--){
      attachevent(self.fallbandinfos[i]);
    }
}

function tdomhandlearray_detacheventhandler(eventname,eventhandler,abandinfo,gethandlefunc){
  var self=this;
  var i=0;
  function detachevent(bandinfo){    var handle=null;
    handle=(assigned(gethandlefunc))?gethandlefunc(bandinfo):bandinfo.handle;
    xb_detacheventhandler(handle,eventname,eventhandler);
  }
  if(abandinfo != null){
    detachevent(abandinfo);
  }else 
    for(i=self.fallbandinfos.length - 1;i>=0;i--){
      detachevent(self.fallbandinfos[i]);
    }
}

function tdomhandlearray_appendwrapperproperty(propvalue){
  var self=this;
  var i=0;
  function setwrapper(h){    if(assigned(h)){
      h.wrapper=propvalue;
    }
  }
  for(i=self.fallbandinfos.length - 1;i>=0;i--){
    self.fallbandinfos[i].processhandles(setwrapper);
  }
}

function tdomhandlearray_getproperty_count(){
  var self=this;

  return self.fallbandinfos.length;
}

function tdomhandlearray_getproperty_handle(binx){
  var self=this;
  var result=null;
  result=null;
  if(self.fallbandinfos.length == 0){
    return result;
  }
  if(binx < 0){
    binx=0;
  }
  if((binx >= 0) && (binx < self.fallbandinfos.length)){
    return self.fallbandinfos[binx].handle;
  }
  return result;
}

function tdomhandlearray_destroydomhandles(){
  var self=this;
  var i=0;
  function detachdomnode(h){    if(assigned(h)){
      if(h.parentNode != null){
        h.parentNode.removeChild(h);
      }
    }
  }
  for(i=0;i<=self.fallbandinfos.length - 1;i++){
    self.fallbandinfos[i].processhandles(detachdomnode);
  }
}

function tdomhandlearray_attacheffectseventhandler(eventhandler,abandinfo,gethandlefunc){
  var self=this;
  self.attacheventhandler('click',eventhandler,abandinfo,gethandlefunc);
  self.attacheventhandler('mousedown',eventhandler,abandinfo,gethandlefunc);
  self.attacheventhandler('mouseup',eventhandler,abandinfo,gethandlefunc);
  if(!bRoWsEr.IsMobileSafari){
    self.attacheventhandler('mouseover',eventhandler,abandinfo,gethandlefunc);
    self.attacheventhandler('mouseout',eventhandler,abandinfo,gethandlefunc);
  }
  self.attacheventhandler('focus',eventhandler,abandinfo,gethandlefunc);
  self.attacheventhandler('blur',eventhandler,abandinfo,gethandlefunc);
}

function tcreationattrseventhandler_create(aname,afunc,acaller){
  var self=this;
  tobject.prototype.create.call(self);
  self.name=aname;
  self.func=afunc;
  self.caller=acaller;
  return self;
}

function tcreationattrs_create(){
  var self=this;
  tobject.prototype.create.call(self);
  self.text=self.classname();
  self.left=0;
  self.top=0;
  self.width=90;
  self.height=20;
  self.color=cnocolorspecified;
  self.borderstyle=0;
  self.bordercolor=0;
  self.borderwidth=1;
  self.bordersides=callbordersides;
  self.alignment=0;
  self.visibility='visible';
  self.cursor='default';
  self.zindex=gv_topzindex;
  gv_topzindex++;
  self.disablevalue='';
  self.font.name='MS Sans Serif';
  self.font.height=8;
  self.font.color=cnocolorspecified;
  self.font.style={};
  self.transparent=false;
  self.taborder=-1;
  self.datafield='';
  self.datatype='string';
  self.opacity=100;
  self.padding=0;
  self.horizontalplacement=0;
  self.verticalplacement=0;
  self.controlid='';
  self.eventhandlers=[];
  self.tag='';
  return self;
}

function tcreationattrs_destroy(){
  var self=this;
  self.eventhandlers.length=0;
  self.eventhandlers=null;
  setlength(self.extendedattrs,0);
  tobject.prototype.destroy.call(self);
}

function tcreationattrs_assign(attrs){
  var self=this;
  self.text=attrs.text;
  self.left=attrs.left;
  self.top=attrs.top;
  self.width=attrs.width;
  self.height=attrs.height;
  self.color=attrs.color;
  self.borderstyle=attrs.borderstyle;
  self.bordercolor=attrs.bordercolor;
  self.borderwidth=attrs.borderwidth;
  self.bordersides=attrs.bordersides;
  self.alignment=attrs.alignment;
  self.visibility=attrs.visibility;
  self.cursor=attrs.cursor;
  self.zindex=attrs.zindex;
  self.disablevalue=attrs.disablevalue;
  self.font.name=attrs.font.name;
  self.font.height=attrs.font.height;
  self.font.color=attrs.font.color;
  self.font.style=attrs.font.style;
  self.transparent=attrs.transparent;
  self.taborder=attrs.taborder;
  self.datafield=attrs.datafield;
  self.datatype=attrs.datatype;
  self.opacity=attrs.opacity;
  self.padding=attrs.padding;
  self.horizontalplacement=attrs.horizontalplacement;
  self.verticalplacement=attrs.verticalplacement;
  self.controlid=attrs.controlid;
}

function tcreationattrs_adddomeventhandler(name,func,caller){
  var self=this;
  self.setcreationattrseventhandler(name,func,caller);
}

function tcreationattrs_getdomeventhandler(name){
  var self=this;

  var handler=null;
  handler=self.getcreationattrseventhandler(name);
  return (handler != null)?handler.func:null;
}

function tcreationattrs_getcreationattrseventhandler(name){
  var self=this;
  var result=null;
  var i=0;
  for(i=self.eventhandlers.length - 1;i>=0;i--){
    result=self.eventhandlers[i];
    if(__string_equals(result.name,name)){
      return result;
    }
  }
  return null;
}

function tcreationattrs_setcreationattrseventhandler(name,func,caller){
  var self=this;
  var handler=null;
  handler=self.getcreationattrseventhandler(name);
  if(handler != null){
    handler.func=func;
    handler.caller=caller;
  }else 
    self.eventhandlers.push(Create_tcreationattrseventhandler().create(name,func,caller));
}

function tabstractcontrol_detachfromdom(){

}

function tabstractcontrol_attachtodom(){

}

function tabstractcontrol_setowner(aowner){
  var self=this;
  if(self.owner == aowner){
    return;
  }
  if(self.owner != null){
    self.owner.removecontrol(self);
  }
  self.owner=aowner;
  if(self.owner != null){
    self.owner.addcontrol(self);
  }
}

function tabstractcontrol_addchildtimer(atimer){
  var self=this;
  self.fchildtimers.push(atimer);
}

function tabstractcontrol_removechildtimer(atimer){
  var self=this;
  self.fchildtimers.remove(atimer);
}

function tabstractcontrol_create0(aid,aowner){
  var self=this;
  tobject.prototype.create.call(self);
  self.name=aid;
  self.childctrls=null;
  self.fownerform=null;
  self.owner=null;
  self.domhandlearray=Create_tdomhandlearray().create(self);
  self.fasthandles=self.domhandlearray.foldhandles;
  self.bandinfos=self.domhandlearray.fbandinfos;
  self.bandindex=-1;
  self.repeaterindex=-1;
  self.themedprops=[];
  self.attrs.v=Create_tcreationattrs().create();
  if(_IS(self,tabstractform)){
    return self;
  }
  if(aowner != null){
    self.fownerform=(_IS(aowner,tabstractform))?aowner:aowner.fownerform;
    self.setowner(aowner);
  }
  return self;
}

function tabstractcontrol_destroy(){
  var self=this;
  setlength(self.themedprops,0);
  self.themedprops=null;
  free(self.domhandlearray);
  self.domhandlearray=null;
  self.bandinfos=null;
  if(self.owner != null){
    if(self.owner.childcount() > 0){
      self.owner.childctrls.remove(self);
    }
  }
  if(self.childctrls != null){
    for(;self.childctrls.length > 0;){
      free(self.childctrls[0]);
    }
    self.childctrls.length=0;
    self.childctrls=null;
  }
  self.owner=null;
  self.fownerform=null;
  free(self.attrs.v);
  self.attrs.v=null;
  tobject.prototype.destroy.call(self);
}

function tabstractcontrol_getthemedvalue(name){
  var self=this;
  var result="";
  result=getarrayitem(self.themedprops,name);
  return resolvethemedvalue(result);
}

function tabstractcontrol_deactivate(){

}

function tabstractcontrol_activate(){

}

function tabstractcontrol_getproperty_ownerform(){
  var self=this;

  return self.fownerform;
}

function tabstractcontrol_setproperty_ownerform(frm){
  var self=this;
  self.fownerform=frm;
}

function tabstractcontrol_createbandinfo(){


  return Create_tcontrolbandinfo().create0();
}

function tabstractcontrol_childcount(){
  var self=this;
  var result=0;
  result=0;
  if(self.childctrls != null){
    return self.childctrls.length;
  }
  return result;
}

function tabstractcontrol_addcontrol(ctrl){
  var self=this;
  if(self.childctrls == null){
    self.childctrls=[];
  }
  self.childctrls.push(ctrl);
}

function tabstractcontrol_removecontrol(ctrl){
  var self=this;
  if(self.childctrls != null){
    self.childctrls.remove(ctrl);
  }
}

function tabstractcontrol_setattrs(c,l,t,w,h,adisable,bs,bsides,bc,bw,ta,avisible,acursor,acolor,fn,fh,fc,fs,aalign,atransparent,ataborder,adatafield,adatatype,ahorizontalplacement,averticalplacement,aopacity,acontrolid){
  var self=this;
  var themevalue="";
  with(self.attrs.v){
    text=c;
    left=l;
    top=t;
    width=w;
    height=h;
    borderstyle=bs;
    bordercolor=bc;
    borderwidth=bw;
    bordersides=bsides;
    alignment=ta;
    visibility=(avisible != '')?avisible:'inherit';
    cursor=acursor;
    themevalue=self.getthemedvalue('Color');
    color=(themevalue != '')?strtointdef(themevalue,0):acolor;
    if(adisable){
      disablevalue='disabled';
    }
    themevalue=self.getthemedvalue('Font.Name');
    if(themevalue != ''){
      font.name=themevalue;
    }else 
    if(fn != ''){
      font.name=fn;
    }
    themevalue=self.getthemedvalue('Font.Size');
    if(themevalue != ''){
      font.height=strtointdef(themevalue,8);
    }else 
    if(fh != cnofontsizespecified){
      font.height=fh;
    }
    themevalue=self.getthemedvalue('Font.Color');
    font.color=(themevalue != '')?strtointdef(themevalue,0):fc;
    font.style=fs;
    transparent=atransparent;
    taborder=ataborder;
    datafield=adatafield;
    datatype=adatatype;
    horizontalplacement=ahorizontalplacement;
    verticalplacement=averticalplacement;
    opacity=aopacity;
    controlid=acontrolid;
  }
}

function tabstractcontrol_attacheventhandlers(handlearray,abandinfo){
  var self=this;
  var i=0;
  var handler=null;
  var callerobj=null;
  for(i=self.attrs.v.eventhandlers.length - 1;i>=0;i--){
    handler=self.attrs.v.eventhandlers[i];
    callerobj=(handler.caller != null)?handler.caller:self.fownerform;
    handlearray.attacheventhandler(handler.name,getMethodPointer(callerobj,handler.func),abandinfo,null);
  }
}

function tabstractcontrol_calleventhandler(eventname,event){
  var self=this;
  var handler=null;
  var ctrl=null;
  handler=self.attrs.v.getcreationattrseventhandler(eventname);
  if(handler != null){
    ctrl=(handler.caller == null)?self.getproperty_ownerform():handler.caller;
    if(ctrl == null){
      return;
    }
    ctrl.calldomeventhandler(handler.func,event);
    if(event != null){
      self.canceleventbubble(event);
    }
  }
}

function tabstractcontrol_attachdomeventhandlers0(abandinfo){
  var self=this;
  self.attacheventhandlers(self.domhandlearray,abandinfo);
  self.attachdomeventhandlers();
}

function tabstractcontrol_attachdomeventhandlers(){

}

function tabstractcontrol_detachdomeventhandlers(abandinfo){
  var self=this;
  self.domhandlearray.detacheventhandlers(abandinfo);
}

function tabstractcontrol_setupdomeventhandlers(){
  var self=this;
  if(self.domhandlecreated()){
    self.attachdomeventhandlers0(null);
  }
}

function tabstractcontrol_canceleventbubble(event){

  if(assigned(event.stopPropagation)){
    event.stopPropagation();
  }else 
    event.cancelBubble=true;
}

function tabstractcontrol_domhandlecreated(){
  var self=this;

  return (self.domhandlearray != null) && (self.bandinfos.length > 0);
}

function tabstractcontrol_getbandinfo(abandindex,arepeaterindex){
  var self=this;
  var result=null;
  var index=0;
  index=abandindex;
  if(index < 0){
    index=0;
  }
  result=self.bandinfos[index];
  if((arepeaterindex > 0) && (arepeaterindex < result.repeaterbands.length)){
    return result.repeaterbands[arepeaterindex];
  }
  return result;
}

function tabstractcontrol_bandinfo(){
  var self=this;

  return self.getbandinfo(self.bandindex,self.repeaterindex);
}

function tabstractcontrol_domhandle(){
  var self=this;

  return self.bandinfo().handle;
}

function tabstractcontrol_domstyle(){
  var self=this;

  return self.domhandle().style;
}

function tabstractcontrol_currentdomstyle(){
  var self=this;

  if(_IS(self,tabstractform)){
    return (assigned(window.getComputedStyle))?window.getComputedStyle(window.document.body,''):window.document.body.currentStyle;
  }else {
    if(assigned(window.getComputedStyle)){
      return window.getComputedStyle(self.domhandle(),'');
    }else 
    return (self.domhandlecreated())?self.domhandle().currentStyle:null;
  }
}

function tabstractcontrol_isflow(){


  return false;
}

function tabstractcontrol_finddomhandle(handle,id){


  function find(handle,id){
    var result=null;
    var i=0;
    result=null;
    if(handle.id == id){
      return handle;
    }else 
    if(handle.hasChildNodes()){
      for(i=0;i<=handle.childNodes.length - 1;i++){
        result=find(handle.childNodes[i],id);
        if(result != null){
          break;
        }
      }
    }
    return result;
  }
  return (assigned(id) && (id != ''))?find(handle,id):null;
}

function tabstractcontrol_calldomeventhandler(eh,event){
  var self=this;
  if(eh == null){
    return;
  }
  self.fproxycaller=eh;
  self.fproxycaller(event);
}

function tabstractcontrol_handlecreated(){

}

function tabstractcontrol_domhandleid(){
  var self=this;

  return self.name;
}

function tabstractcontrol_setupdomhandle(){
  var self=this;
  if(self.domhandlecreated()){
    return;
  }
  if(self.domhandleid() == ''){
    return;
  }
  self.domhandlearray.setup(self.domhandleid(),self.getproperty_ownerform());
  self.domhandlearray.appendwrapperproperty(self);
}

function tabstractcontrol_appenddomhandle(handle){
  var self=this;
  if(!self.domhandlecreated()){
    return;
  }
  if(self.domhandleid() == ''){
    return;
  }
  self.domhandlearray.append(self.domhandleid(),self.getproperty_ownerform(),handle);
  handle.wrapper=self;
}

function tabstractcontrol_removedomhandle(){
  var self=this;
  self.domhandlearray.remove(self.bandinfo());
}

function tcontrolstyles_create(aowner){
  var self=this;
  tobject.prototype.create.call(self);
  self.items=[];
  self.owner=aowner;
  return self;
}

function tcontrolstyles_destroy(){
  var self=this;
  self.items.length=0;
  self.items=null;
  tobject.prototype.destroy.call(self);
}

function tcontrolstyles_clear(){
  var self=this;
  var i=0;
  self.items.length=0;
  for(i=0;i<=self.owner.domhandlearray.getproperty_count() - 1;i++){
    self.owner.bandinfos[i].activestyle=null;
  }
}

function tcontrolstyles_applycontrolstyle(style,handle){

  var domstyle=null;
  domstyle=handle.style;
  if(style.fontname != ''){
    domstyle.fontFamily=style.fontname;
  }
  if(style.fontheight != cnofontsizespecified){
    domstyle.fontSize=inttostr(style.fontheight) + 'pt';
  }
  setfontstyle(domstyle,style.fontstyle);
  if(style.fontcolor != cnocolorspecified){
    domstyle.color=colortohtmlhex(style.fontcolor);
  }
}

function tcontrolstyles_applyborderstyle(style,handle){

  var image=null;
  image=style.getproperty_image();
  if((image != null) && image.useborder){
    if(!catalog().isie6){
      handle.style.borderColor='transparent';
    }else 
      setborder(handle.style,0,callbordersides,cnocolorspecified,0);
  }else 
    setborder(handle.style,style.borderstyle,style.bordersides,style.bordercolor,style.borderwidth);
}

function tcontrolstyles_applybackgroundimage(style,image,handle,updatesize){

  var domstyle=null;
  var offsetx=0;
  var offsety=0;
  function supportsfilter(){

    return image.ispngimage() && (bRoWsEr.engineid == 'MS') && catalog().isie6;
  }
  function updatecssstyle(handle){    var background="";
    var cssstyle=null;
    cssstyle=handle.style;
    if(supportsfilter()){
      if(!catalog().isie6 || image.imageloaded){
        cssstyle.background='transparent';
        cssstyle.filter=image.getproperty_filter();
      }
    }else {
      background=image.getproperty_style();
      cssstyle.background=(background != '')?background:'transparent';
    }
  }
  domstyle=handle.style;
  if(image != null){
    if(updatesize){
      switch(image.imgrepeat){
        case 'repeat-x':
        domstyle.width='100%';
        domstyle.height=topx(image.height);
        break;
        case 'repeat-y':
        domstyle.width=topx(image.width);
        domstyle.height='100%';
        break;
        case 'repeat':
        domstyle.width='100%';
        domstyle.height='100%';
        break;
      default:
        domstyle.width=topx(image.width);
        domstyle.height=topx(image.height);
      }
      offsetx=image.left;
      offsety=image.top;
      domstyle.left=topx(-offsetx);
      domstyle.top=topx(-offsety);
    }
    updatecssstyle(handle);
    domstyle.backgroundColor=(image.getproperty_usecolor())?colortohtmlhex(image.color):'transparent';
  }else {
    domstyle.background='transparent';
    if(updatesize){
      domstyle.left=topx(0);
      domstyle.top=topx(0);
      domstyle.width='100%';
      domstyle.height='100%';
    }
    if(style.color != cnocolorspecified){
      domstyle.backgroundColor=colortohtmlhex(style.color);
    }
  }
}

function tcontrolstyles_applycolorstyle(style,handle){

  handle.style.backgroundColor=(style.color != cnocolorspecified)?colortohtmlhex(style.color):'transparent';
}

function tcontrolstyles_applybackgroundstyle(style,handle,updatesize){
  var self=this;
  self.applybackgroundimage(style,style.getproperty_image(),handle,updatesize);
}

function tcontrolstyles_updatebackgroundsize(){


  return true;
}

function tcontrolstyles_supportsresizing(){


  return true;
}

function tcontrolstyles_isresizeable(style){
  var self=this;

  return self.supportsresizing() && ((self.owner.getproperty_cangrow() == 0) || (self.owner.getproperty_horizontalplacement() == 3) || (self.owner.getproperty_verticalplacement() == 3) || style.getproperty_resizeable());
}

function tcontrolstyles_getbackgroundstyle(style){
  var self=this;
  var result="";
  var image=null;
  result='';
  image=style.getproperty_image();
  if(image == null){
    return result;
  }
  result='border:none;cursor:default;line-height:0px;';
  result+=image.getproperty_positionstyle() + 'left:' + topx(-image.left) + ';top:' + topx(-image.top) + ';';
  if(self.isresizeable(style)){
    if(isie7orlower()){
      result+='width:expression(parentNode.clientWidth + ' + inttostr(image.left + image.right) + ');';
      result+='height:expression(parentNode.clientHeight + ' + inttostr(image.top + image.bottom) + ');';
    }else 
      result+='right:' + topx(-image.right) + ';bottom:' + topx(-image.bottom) + ';';
  }else 
    result+=image.getproperty_sizestyle();
  return result + image.getbackgroundstyle(image.getproperty_usecolor());
}

function tcontrolstyles_getbackgroundhtml(){
  var self=this;

  var style=null;
  style=self.getproperty_controlstyle('');
  return ((style != null) && (style.getproperty_image() != null))?'<div id=\"' + self.owner.getctrlhtmlidext('Background') + '\" style=\"' + self.getbackgroundstyle(style) + '\"></div>':'';
}

function tcontrolstyles_initsystemstyles(stylename){
  var self=this;
  var style="";
  style=self.owner.classname();
  if(stylename != ''){
    style+='_' + stylename;
  }
  controlstyles_getcontrolstyles(controlstyles_systemdata(),style,currenttheme,self.items,true);
}

function tcontrolstyles_initstyles(){
  var self=this;
  var form=null;
  form=self.owner.getproperty_ownerform();
  if(form != null){
    controlstyles_getcontrolstyles(form.styledata,self.owner.name,currenttheme,self.items,false);
  }
}

function tcontrolstyles_isactivebackground(style,background){


  return style.getproperty_image() == background;
}

function tcontrolstyles_handlebackgroundonload(background){
  var self=this;
  var handle=null;
  var i=0;
  var k=0;
  var style=null;
  var info=null;
  if(!(self.owner.allowcontrolstyles() && self.owner.domhandlecreated() && (background != null))){
    return;
  }
  background.imageloaded=true;
  style=self.getproperty_activestyle();
  if((style != null) && self.isactivebackground(style,background)){
    for(i=0;i<=self.owner.bandinfos.length - 1;i++){
      info=self.owner.bandinfos[i];
      for(k=0;k<=info.repeaterbands.length - 1;k++){
        handle=self.getbackgroundhandle(i,k);
        if(handle != null){
          self.applybackgroundstyle(style,handle,false);
        }
      }
    }
  }
}

function tcontrolstyles_preloadimagesforie(){
  var self=this;
  var info=null;
  var i=0;
  info=self.owner.bandinfos[self.owner.bandindex];
  if(info != null){
    for(i=0;i<=info.repeaterbands.length - 1;i++){
      self.preloadimages(self.getbackgroundhandle(self.owner.bandindex,i));
    }
  }else 
    self.preloadimages(self.getbackgroundhandle(self.owner.bandindex,0));
}

function tcontrolstyles_preloadimages(handle){
  var self=this;
  var style=null;
  var i=0;
  var onload=null;
  var astyle=null;
  function processstyle(handle,style,onload){    var i=0;
    var background=null;
    var images=[];
    images=style.images;
    for(i=0;i<=images.length - 1;i++){
      background=style.images[i];
      if(stringsequal(extractext(background.src),'.png')){
        if(!background.imageloaded){
          preloadimage(handle,background.getbackgroundpath(false),background,onload,null);
        }else 
          self.handlebackgroundonload(background);
      }
    }
  }
  if(handle != null){
    onload=getMethodPointer(self,self.handlebackgroundonload);
    astyle=self.getproperty_activestyle();
    if(astyle != null){
      processstyle(handle,astyle,onload);
    }
    for(i=0;i<=self.items.length - 1;i++){
      style=self.items[i];
      if(style != astyle){
        processstyle(handle,style,onload);
      }
    }
  }
}

function tcontrolstyles_init(){
  var self=this;
  self.initstyles();
  self.setproperty_activestyle(self.getproperty_controlstyle(''));
}

function tcontrolstyles_getbackgroundhandle(abandindex,arepeaterindex){
  var self=this;

  return (self.owner != null)?self.owner.getbandinfo(abandindex,arepeaterindex).backgroundhandle:null;
}

function tcontrolstyles_getinnerhandle(abandindex,arepeaterindex){
  var self=this;

  return self.getcontrolhandle(abandindex,arepeaterindex);
}

function tcontrolstyles_getcontrolhandle(abandindex,arepeaterindex){
  var self=this;

  if(self.owner != null){
    return (abandindex < 0)?self.owner.domhandle():self.owner.getbandinfo(abandindex,arepeaterindex).handle;
  }else 
    return null;
}

function tcontrolstyles_getproperty_activestyle(){
  var self=this;

  return (self.owner.domhandlecreated())?self.owner.bandinfo().activestyle:null;
}

function tcontrolstyles_setproperty_activestyle(value){
  var self=this;
  self.owner.bandinfo().activestyle=value;
}

function tcontrolstyles_getproperty_hasbackground(){
  var self=this;

  var i=0;
  var images=[];
  for(i=0;i<=self.items.length - 1;i++){
    images=self.items[i].images;
    if(images.length > 0){
      return true;
    }
  }
  return false;
}

function tcontrolstyles_getproperty_currentstyle(){
  var self=this;
  var result=null;
  result=self.getproperty_activestyle();
  if(result == null){
    return self.getproperty_controlstyle('');
  }
  return result;
}

function tcontrolstyles_getproperty_controlstyle(state){
  var self=this;
  var result=null;
  var i=0;
  for(i=0;i<=self.items.length - 1;i++){
    result=self.items[i];
    if(stringsequal(result.state,state)){
      return result;
    }
  }
  return null;
}

function tcontrolstyles_getstylename(abandindex,arepeaterindex){
  var self=this;
  var result="";
  var style="";
  var bandinfo=null;
  function trystyle(condition,stylename){
    var result=0;
    result=condition && (self.getproperty_controlstyle(stylename) != null);
    if(result){
      style=stylename;
    }
    return result;
  }
  function isdisabled(){

    var h=null;
    h=self.owner.getproperty_inputhandle();
    if((h == null) && self.owner.domhandlecreated()){
      h=bandinfo.handle;
    }
    return (h != null)?h.disabled:!self.owner.getproperty_enabled();
  }
  result='';
  bandinfo=self.owner.getbandinfo(abandindex,arepeaterindex);
  if(bandinfo == null){
    return result;
  }
  if(isdisabled() && trystyle(true,'disabled')){
    return style;
  }
  if(trystyle(bandinfo.mousedown,'mousedown') || trystyle(bandinfo.focused,'focused') || trystyle(bandinfo.mouseover,'mouseover')){
    return style;
  }
  return result;
}

function tcontrolstyles_boundschanged(){

}

function tcontrolstyles_getcurrentstyle(abandindex,arepeaterindex){
  var self=this;
  var result=null;
  result=self.getproperty_controlstyle(self.getstylename(abandindex,arepeaterindex));
  if(result == null){
    return self.getproperty_controlstyle('');
  }
  return result;
}

function tcontrolstyles_updatecurrentstyle(abandindex,arepeaterindex,forceupdate,inanimation){
  var self=this;
  var style=null;
  style=self.getcurrentstyle(abandindex,arepeaterindex);
  if(forceupdate || (self.getproperty_activestyle() != style)){
    self.applystyle0(abandindex,arepeaterindex,style,inanimation);
  }
}

function tcontrolstyles_applystyle0(abandindex,arepeaterindex,style,inanimation){
  var self=this;
  var handle=null;
  var needcolor=0;
  var info=null;
  if(style == null){
    return;
  }
  info=self.owner.getbandinfo(abandindex,arepeaterindex);
  info.activestyle=style;
  handle=self.getbackgroundhandle(abandindex,arepeaterindex);
  needcolor=handle == null;
  if(handle != null){
    self.applybackgroundstyle(style,handle,self.updatebackgroundsize());
  }
  handle=self.getcontrolhandle(abandindex,arepeaterindex);
  if(handle != null){
    if(needcolor){
      self.applycolorstyle(style,handle);
    }
    if(!inanimation || style.getproperty_hasborder()){
      self.applyborderstyle(style,handle);
    }
    handle.style.cursor=style.cursor;
  }
  handle=self.getinnerhandle(abandindex,arepeaterindex);
  if(handle != null){
    self.applycontrolstyle(style,handle);
  }
}

function tresizeablecontrolstyles_updatebackgroundsize(){
  var self=this;

  var style=null;
  style=self.getproperty_controlstyle('');
  return (style == null) || !self.isresizeable(style);
}

function tresizeablecontrolstyles_findslice(nodelist,slicename){

  var result=null;
  var i=0;
  var h=null;
  result=null;
  for(i=0;i<=nodelist.length - 1;i++){
    h=nodelist.item(i);
    if(stringsequal(h.id,slicename)){
      return h;
    }
  }
  return result;
}

function tresizeablecontrolstyles_applybackgroundstyle(style,handle,updatesize){
  var self=this;
  var nodelist=null;
  var image=null;
  var slice=null;
  var i=0;
  var images=[];
  if(self.supportsresizing() && style.getproperty_resizeable()){
    nodelist=handle.getElementsByTagName('div');
    images=style.images;
    for(i=0;i<=images.length - 1;i++){
      image=images[i];
      slice=self.findslice(nodelist,image.slice);
      if(image.slice == ''){
        self.owner.domstyle().backgroundColor=(image.color != cnocolorspecified)?colortohtmlhex(image.color):'transparent';
      }
      if(slice != null){
        self.applybackgroundimage(style,image,slice,updatesize);
      }
    }
  }else 
    tcontrolstyles.prototype.applybackgroundstyle.call(self, style,handle,updatesize);
}

function tresizeablecontrolstyles_isactivebackground(style,background){


  var images=[];
  images=style.images;
  return images.indexOf(background,0) >= 0;
}

function tresizeablecontrolstyles_boundschanged(){
  var self=this;
  var style=null;
  var handle=null;
  function updateheight(handle,recursive){    var nodelist=null;
    var i=0;
    if((handle.style.top != '') && (handle.style.bottom != '')){
      handle.style.height=topx(handle.parentNode.clientHeight - (frompx(handle.style.top) + frompx(handle.style.bottom)));
    }
    if(recursive){
      nodelist=handle.getElementsByTagName('div');
      for(i=0;i<=nodelist.length - 1;i++){
        updateheight(nodelist.item(i),false);
      }
    }
  }
  tcontrolstyles.prototype.boundschanged.call(self);
  if(bRoWsEr.engineid == 'OP'){
    style=self.getproperty_currentstyle();
    if((style != null) && self.isresizeable(style)){
      handle=self.getbackgroundhandle(self.owner.bandindex,self.owner.repeaterindex);
      if(handle != null){
        updateheight(handle,true);
      }
    }
  }
}

function tresizeablecontrolstyles_getbackgroundinnerhtml(style){
  var self=this;
  var result="";
  var slice=null;
  var left=0;
  var right=0;
  var top=0;
  var bottom=0;
  function getid(id){

    return 'id=\"' + id + '\"';
  }
  function gethorz(slice,left,right,top,height,usecolor,opposite){

    var style="";
    style='left:' + topx(left) + ';height:' + topx(height) + ';';
    style=(opposite)?style + 'bottom:' + topx(top) + ';':style + 'top:' + topx(top) + ';';
    style=(isie7orlower())?style + 'width:expression(parentNode.clientWidth - ' + inttostr(left + right) + ');':style + 'right:' + topx(right) + ';';
    return '<div ' + getid(slice.slice) + ' style=\"' + slice.getproperty_positionstyle() + style + slice.getbackgroundstyle(usecolor) + '\"></div>';
  }
  function getvert(slice,top,bottom,left,width,usecolor,opposite){

    var style="";
    style='top:' + topx(top) + ';width:' + topx(width) + ';';
    style=(opposite)?style + 'right:' + topx(left) + ';':style + 'left:' + topx(left) + ';';
    style=(isie7orlower())?style + 'height:expression(parentNode.clientHeight - ' + inttostr(top + bottom) + ');':style + 'bottom:' + topx(bottom) + ';';
    return '<div ' + getid(slice.slice) + ' style=\"' + slice.getproperty_positionstyle() + style + slice.getbackgroundstyle(usecolor) + '\"></div>';
  }
  function getcenter(slice,left,right,top,bottom){

    var style="";
    style='left:' + topx(left) + ';top:' + topx(top) + ';';
    if(isie7orlower()){
      style+='width:expression(parentNode.clientWidth - ' + inttostr(left + right) + ');';
      style+='height:expression(parentNode.clientHeight - ' + inttostr(top + bottom) + ');';
    }else 
      style+='right:' + topx(right) + ';bottom:' + topx(bottom) + ';';
    return '<div ' + getid(slice.slice) + ' style=\"' + slice.getproperty_positionstyle() + style + slice.getbackgroundstyle(true) + '\"></div>';
  }
  function getcellbackground(img1,img2,left,right,size,horz,opposite){
    var result="";
    var slice1=null;
    var slice2=null;
    var size1=0;
    result='';
    slice1=style.findimage('',img1);
    slice2=style.findimage('',img2);
    if(horz){
      if(slice1 != null){
        size1=slice1.height;
        result=gethorz(slice1,left,right,0,size1,false,opposite);
      }else 
        size1=0;
      if(slice2 != null){
        return result + gethorz(slice2,left,right,size1,size - size1,true,opposite);
      }
    }else {
      if(slice1 != null){
        size1=slice1.width;
        result=getvert(slice1,left,right,0,size1,false,opposite);
      }else 
        size1=0;
      if(slice2 != null){
        return result + getvert(slice2,left,right,size1,size - size1,true,opposite);
      }
    }
    return result;
  }
  result='';
  if((style != null) && self.isresizeable(style)){
    left=0;
    right=0;
    top=0;
    bottom=0;
    slice=style.findimage('','B2');
    if(slice != null){
      left=slice.width;
      top=slice.height;
      result+='<div ' + getid('B2') + ' style=\"left:0px;top:0px;' + slice.getbackgroundstyle(false) + slice.getproperty_positionstyle() + slice.getproperty_sizestyle() + '\"></div>';
    }else {
      slice=style.findimage('','D2');
      if(slice != null){
        left=slice.width;
      }
    }
    slice=style.findimage('','B4');
    if(slice != null){
      right=slice.width;
      result+='<div ' + getid('B4') + ' style=\"right:0px;top:0px;' + slice.getbackgroundstyle(false) + slice.getproperty_positionstyle() + slice.getproperty_sizestyle() + '\"></div>';
    }else {
      slice=style.findimage('','D4');
      if(slice != null){
        right=slice.width;
      }
    }
    result+=getcellbackground('A3','B3',left,right,top,true,false);
    slice=style.findimage('','D2');
    if(slice != null){
      bottom=slice.height;
    }
    result+=getcellbackground('C1','C2',top,bottom,left,false,false);
    result+=getcellbackground('C5','C4',top,bottom,right,false,true);
    slice=style.findimage('','C3');
    if(slice != null){
      result+=getcenter(slice,left,right,top,bottom);
    }
    slice=style.findimage('','D2');
    if(slice != null){
      result+='<div ' + getid('D2') + ' style=\"left:0px;bottom:0px;' + slice.getbackgroundstyle(false) + slice.getproperty_positionstyle() + slice.getproperty_sizestyle() + '\"></div>';
    }
    slice=style.findimage('','D4');
    if(slice != null){
      result+='<div ' + getid('D4') + ' style=\"right:0px;bottom:0px;' + slice.getbackgroundstyle(false) + slice.getproperty_positionstyle() + slice.getproperty_sizestyle() + '\"></div>';
    }
    result+=getcellbackground('E3','D3',left,right,bottom,true,true);
    return result + '</div>';
  }else 
    return tcontrolstyles.prototype.getbackgroundhtml.call(self);
}

function tresizeablecontrolstyles_getbackgroundhtml(){
  var self=this;

  var style=null;
  style=self.getproperty_controlstyle('');
  return ((style != null) && (self.isresizeable(style) && (style.getproperty_image() != null)))?'<div id=\"' + self.owner.getctrlhtmlidext('Background') + '\" style=\"' + self.getbackgroundstyle(style) + '\">' + self.getbackgroundinnerhtml(style) + '</div>':tcontrolstyles.prototype.getbackgroundhtml.call(self);
}

function twebcontrol_create0(aid,aowner){
  var self=this;
  tabstractcontrol.prototype.create0.call(self, aid,aowner);
  self.controlstyle=self.createcontrolstyle();
  self.fanimationeffects=null;
  self.internalgrowshrinkoverride=false;
  return self;
}

function twebcontrol_create2(aowner){
  var self=this;
  self.create0('WebControl' + inttostr(gvautoidcounter),aowner);
  gvautoidcounter++;
  return self;
}

function twebcontrol_createcontrolstyle(){
  var self=this;

  return Create_tcontrolstyles().create(self);
}

function twebcontrol_freedom(){
  var self=this;
  self.domhandlearray.destroydomhandles();
  free(self);
}

function twebcontrol_destroy(){
  var self=this;
  self.stopanimation();
  free(self.controlstyle);
  self.controlstyle=null;
  tabstractcontrol.prototype.destroy.call(self);
}

function twebcontrol_initcurrentstyle(){
  var self=this;
  var info=null;
  var i=0;
  if(self.domhandlecreated()){
    info=self.bandinfo();
    for(i=0;i<=info.repeaterbands.length - 1;i++){
      self.updatecurrentstyle(self.bandindex,i,false,false);
    }
  }else 
    self.updatecurrentstyle(self.bandindex,0,false,false);
}

function twebcontrol_initparts(){

}

function twebcontrol_writelocalestring(value,format){
  var self=this;

  switch(self.fieldkind()){
    case 5:;
    case 6:;
    case 7:
    return localestringtofloat(value,format);
    case 8:
    return localestringtocurrency(value,format);
    case 9:
    return localestringtodatetime(value,1,1,false,format);
    case 11:
    return localestringtodatetime(value,1,2,true,format);
    case 10:
    return localestringtodatetime(value,1,0,true,format);
    case 12:
    return localestringtodatetime(value,1,0,false,format);
    case 13:
    return localestringtodatetime(value,1,2,false,format);
  default:
    return value;
  }
}

function twebcontrol_readlocalestring(value,format){
  var self=this;

  switch(self.fieldkind()){
    case 5:;
    case 6:;
    case 7:
    return floattolocalestring(value,format);
    case 8:
    return currencytolocalestring(value,format);
    case 9:
    return (typeof(value) == 'string')?datetimetolocalestring(xmltodate(value),1,1,false,format):datetimetolocalestring(value,1,1,false,format);
    case 11:
    return (typeof(value) == 'string')?datetimetolocalestring(xmltodatetime(value),1,2,false,format):datetimetolocalestring(value,1,2,true,format);
    case 10:
    return (typeof(value) == 'string')?datetimetolocalestring(xmltodatetime(value),1,0,true,format):datetimetolocalestring(value,1,0,true,format);
    case 12:
    return (typeof(value) == 'string')?datetimetolocalestring(xmltodatetime(value),1,0,false,format):datetimetolocalestring(value,1,0,false,format);
    case 13:
    return (typeof(value) == 'string')?datetimetolocalestring(xmltodatetime(value),1,2,false,format):datetimetolocalestring(value,1,2,false,format);
  default:
    return value;
  }
}

function twebcontrol_initcontrolstyles(){
  var self=this;
  if((bRoWsEr.engineid == 'MS') && catalog().isie6){
    self.controlstyle.preloadimagesforie();
  }
  self.initcurrentstyle();
}

function twebcontrol_getctrlbackgroundhtml(){
  var self=this;

  return self.controlstyle.getbackgroundhtml();
}

function __thtmlstyler_settoattrs(__self,attrs){  with(__self){
    with(__self){
    with(attrs.v){
      setalignment(alignment);
      addcoord('left',left,'px');
      addcoord('top',top,'px');
      addcolor('background-color',color);
      setborder(bordercolor,borderwidth,borderstyle,bordersides);
      setfont(font);
      addstring('cursor',cursor);
      addinteger('z-Index',zindex);
      if(visibility != ''){
        addstring('visibility',visibility);
      }
      if(height != -1){
        addheightcoord(height,borderwidth);
      }
      if(width != -1){
        addwidthcoord(width,borderwidth);
      }
    }    }
  }
}

function twebcontrol_getctrlhtmlstyle(){
  var self=this;
  var result="";
  var htmlstyler=null;
  htmlstyler=Create_thtmlstyler().create();
  __thtmlstyler_settoattrs(htmlstyler,self.attrs);
  result='position:absolute;' + htmlstyler.content;
  free(htmlstyler);
  return result;
}

function twebcontrol_getctrlhtmlid(){
  var self=this;
  var result="";
  result=(self.getproperty_ownerform() != null)?self.getproperty_ownerform().getproperty_instancename() + '_' + self.domhandleid():self.domhandleid();
  if(self.bandindex > 0){
    return result + '_' + inttostr(self.bandindex + 1);
  }
  return result;
}

function twebcontrol_getctrlhtmlidext(s){
  var self=this;

  return (self.bandindex > 0)?self.getproperty_ownerform().getproperty_instancename() + '_' + self.domhandleid() + s + '_' + inttostr(self.bandindex + 1):self.getproperty_ownerform().getproperty_instancename() + '_' + self.domhandleid() + s;
}

function twebcontrol_getinnerhtml(){


  return '';
}

function twebcontrol_getcontrolhtml(){
  var self=this;

  return '<div id=\"' + self.getctrlhtmlid() + '\" style=\"' + self.getctrlhtmlstyle() + '\">' + self.getctrlbackgroundhtml() + self.getinnerhtml() + '</div>';
}

function twebcontrol_setopacity(bandinfo){
  var self=this;
  var i=0;
  var k=0;
  if(!self.domhandlecreated()){
    return;
  }
  if(bandinfo == null){
    for(i=0;i<=self.bandinfos.length - 1;i++){
      bandinfo=self.bandinfos[i];
      for(k=0;k<=bandinfo.repeaterbands.length - 1;k++){
        setcssopacity(self.getbandinfo(i,k).handle.style,self.attrs.v.opacity);
      }
    }
  }else 
    setcssopacity(bandinfo.handle.style,self.attrs.v.opacity);
}

function twebcontrol_attachdomeventhandlers0(abandinfo){
  var self=this;
  function needcontrolstyles(){

    var style=null;
    if(self.controlstyle.items.length > 1){
      return true;
    }else 
    if(self.controlstyle.items.length == 1){
      style=self.controlstyle.items[0];
      return style.state != '';
    }else 
      return false;
  }
  tabstractcontrol.prototype.attachdomeventhandlers0.call(self, abandinfo);
  if(needcontrolstyles()){
    self.attacheffecteventhandlers(abandinfo);
  }
}

function twebcontrol_disabledomhandle(abandindex,arepeaterindex,forceupdate){
  var self=this;
  var info=null;
  info=self.getbandinfo(abandindex,arepeaterindex);
  if(info.getinputhandle() != null){
    info.getinputhandle().disabled=true;
  }
  self.updatecurrentstyle(abandindex,arepeaterindex,forceupdate,false);
}

function twebcontrol_disabledomhandles(forceupdate){
  var self=this;
  var i=0;
  var k=0;
  var bandinfo=null;
  for(i=0;i<=self.bandinfos.length - 1;i++){
    bandinfo=self.bandinfos[i];
    for(k=0;k<=bandinfo.repeaterbands.length - 1;k++){
      self.disabledomhandle(i,k,forceupdate);
    }
  }
}

function twebcontrol_setupdomhandle(){
  var self=this;
  if(self.domhandlecreated()){
    return;
  }
  tabstractcontrol.prototype.setupdomhandle.call(self);
  if(!self.domhandlecreated()){
    return;
  }
  self.controlstyle.init();
  if(self.attrs.v.opacity != 100){
    self.setopacity(null);
  }
  self.initcontrolstyles();
}

function twebcontrol_handlecreated(){
  var self=this;
  tabstractcontrol.prototype.handlecreated.call(self);
  if(self.attrs.v.disablevalue != 'disabled'){
    self.setupdomeventhandlers();
  }else {
    self.disabledomhandles(true);
    self.setproperty_enabled(false);
  }
}

function twebcontrol_removedomhandle(){
  var self=this;
  if(!self.domhandlecreated()){
    return;
  }
  self.detachdomeventhandlers(self.bandinfo());
  tabstractcontrol.prototype.removedomhandle.call(self);
}

function twebcontrol_appenddomhandle(handle){
  var self=this;
  if(!self.domhandlecreated()){
    return;
  }
  if(self.domhandleid() == ''){
    return;
  }
  tabstractcontrol.prototype.appenddomhandle.call(self, handle);
  if(self.getproperty_enabled()){
    self.attachdomeventhandlers0(self.getbandinfo(self.bandinfos.length - 1,0));
  }
}

function twebcontrol_supportsanimation(){


  return gv_enableanimations && gvanimationpreferences.styleanimation && (bRoWsEr.engineid != 'MS');
}

function twebcontrol_createdomobject(){
  var self=this;
  var i=0;
  var k=0;
  if((self.owner == null) || !self.owner.domhandlecreated()){
    return;
  }
  if(_IS(self.owner,tabstractform)){
    if(self.owner.ismainform()){
      XB_insertAdjacentHTML(window.document.body,'beforeEnd',self.getcontrolhtml());
    }else 
      XB_insertAdjacentHTML(self.owner.domhandle(),'beforeEnd',self.getcontrolhtml());
  }else {
    k=self.owner.bandindex;
    if(self.bandindex == -1){
      for(i=0;i<=self.owner.bandinfos.length - 1;i++){
        self.bandindex=i;
        self.owner.bandindex=i;
        XB_insertAdjacentHTML(self.owner.domhandle(),'beforeEnd',self.getcontrolhtml());
      }
    }else {
      self.owner.bandindex=self.bandindex;
      self.bandindex=0;
      XB_insertAdjacentHTML(self.owner.domhandle(),'beforeEnd',self.getcontrolhtml());
    }
    self.owner.bandindex=k;
  }
  self.fdomhandledynamicallycreated=true;
  self.setupdomhandle();
  self.handlecreated();
}

function getarrayitem(anarray,name){

  var value=null;
  value=anarray[name];
  return (assigned(value))?value:'';
}

function twebcontrol_attacheffecteventhandlers(abandinfo){
  var self=this;
  self.domhandlearray.attacheffectseventhandler(getMethodPointer(self,self.dohandleeffect),abandinfo,null);
}

function twebcontrol_allowcontrolstyles(){


  return true;
}

function twebcontrol_createbandinfo(){


  return Create_twebcontrolbandinfo().create0();
}

function twebcontrol_getstylestring(){
  var self=this;

  return self.getbackgroundstylestring() + ' ' + self.domstyle().border + ' ' + self.domstyle().font;
}

function twebcontrol_getbackgroundstylestring(){
  var self=this;
  var result="";
  var handle=null;
  result=null;
  if(!self.domhandlecreated()){
    return result;
  }
  handle=self.backgroundhandle();
  return (handle != null)?handle.style.background:self.domstyle().background;
}

function twebcontrol_backgroundhandle(){
  var self=this;

  return (self.bandinfo() != null)?self.bandinfo().backgroundhandle:null;
}

function twebcontrol_updatecurrentstyle(abandindex,arepeaterindex,forceupdate,inanimation){
  var self=this;
  if(!(self.allowcontrolstyles() && self.domhandlecreated())){
    return;
  }
  self.controlstyle.updatecurrentstyle(abandindex,arepeaterindex,forceupdate,inanimation);
}

function twebcontrol_updatecontrolstate(effectkind,abandindex,arepeaterindex){
  var self=this;
  var bandinfo=null;
  if(abandindex < 0){
    return;
  }
  if(self.domhandlearray.getproperty_count() == 0){
    return;
  }
  bandinfo=self.getbandinfo(abandindex,arepeaterindex);
  if(effectkind == 'focus'){
    bandinfo.focused=true;
  }else 
  if(effectkind == 'blur'){
    bandinfo.focused=false;
  }else 
  if(effectkind == 'mouseover'){
    bandinfo.mouseover=true;
  }else 
  if(effectkind == 'mouseout'){
    bandinfo.mouseover=false;
    bandinfo.mousedown=false;
  }else 
  if(effectkind == 'mousedown'){
    bandinfo.mousedown=true;
  }else 
  if((effectkind == 'mouseup') || (effectkind == 'mouse')){
    bandinfo.mousedown=false;
  }
}

function twebcontrol_handleanimationstop(sender){
  var self=this;
  var effects=null;
  if(sender == null){
    if(self.fanimationeffects != null){
      effects=self.fanimationeffects;
      self.fanimationeffects=null;
      if(effects.needupdate){
        self.updatecurrentstyle(effects.bandinx,effects.repeaterinx,true,false);
      }
    }
  }
}

function twebcontrol_startanimation(handle,abandindex,arepeaterindex,aeffecttype){
  var self=this;
  var effects=null;
  var effecttype=0;
  var cssstyle=null;
  var fromstyle=null;
  var tostyle=null;
  var w=0;
  var h=0;
  var neww=0;
  var newh=0;
  var hasborder=0;
  cssstyle=handle.style;
  w=strtointdef(cssstyle.width,0);
  h=strtointdef(cssstyle.height,0);
  effects=Create_tstyleanimationeffects().create(handle,abandindex,arepeaterindex);
  fromstyle=self.controlstyle.getproperty_currentstyle();
  hasborder=(fromstyle != null) && fromstyle.getproperty_hasborder();
  self.updatecurrentstyle(abandindex,arepeaterindex,true,true);
  tostyle=self.controlstyle.getproperty_currentstyle();
  if(tostyle == fromstyle){
    free(effects);
    return;
  }
  if(!assigned(aeffecttype)){
    neww=strtointdef(cssstyle.width,0);
    newh=strtointdef(cssstyle.height,0);
    effecttype=((tostyle == null) || (tostyle.getproperty_image() == null) || (tostyle.color == cnocolorspecified) || ((neww < w) && (newh <= h)) || ((neww <= w) && (newh < h)))?0:1;
  }else 
    effecttype=aeffecttype;
  effects.init(effecttype);
  self.fanimationeffects=effects;
  effects.needupdate=(tostyle != null) && (hasborder != tostyle.getproperty_hasborder());
  animate(effects,null,getMethodPointer(self,self.handleanimationstop),null);
}

function twebcontrol_stopanimation(){
  var self=this;
  if(self.fanimationeffects != null){
    self.fanimationeffects.terminate();
  }
  self.fanimationeffects=null;
}

function twebcontrol_handleeffect(event,abandindex,arepeaterindex){
  var self=this;
  var style=null;
  if(abandindex < 0){
    abandindex=0;
  }
  style=self.controlstyle.getcurrentstyle(abandindex,arepeaterindex);
  self.handleupdatestyle(event.type,style,abandindex,arepeaterindex,null);
}

function twebcontrol_handleupdatestyle(eventtype,style,abandindex,arepeaterindex,aeffecttype){
  var self=this;
  var handle=null;
  self.updatecontrolstate(eventtype,abandindex,arepeaterindex);
  if(self.allowcontrolstyles() && (style != self.controlstyle.getcurrentstyle(abandindex,arepeaterindex))){
    if(self.supportsanimation()){
      self.stopanimation();
    }
    if(self.supportsanimation() && self.controlstyle.getproperty_hasbackground()){
      handle=self.controlstyle.getbackgroundhandle(abandindex,arepeaterindex);
      if(handle != null){
        self.startanimation(handle,abandindex,arepeaterindex,aeffecttype);
        return;
      }
    }
    self.updatecurrentstyle(abandindex,arepeaterindex,true,false);
  }
}

function twebcontrol_getproperty_cangrow(){


  return 1;
}

function twebcontrol_setproperty_cangrow(a){

}

function twebcontrol_getproperty_canshrink(){


  return false;
}

function twebcontrol_setproperty_canshrink(b){

}

function twebcontrol_getproperty_horizontalplacement(){
  var self=this;

  return self.attrs.v.horizontalplacement;
}

function twebcontrol_setproperty_horizontalplacement(h){
  var self=this;
  self.attrs.v.horizontalplacement=h;
  if(self.domhandlecreated()){
    self.recalculateplacement(true,false);
  }
}

function twebcontrol_getproperty_verticalplacement(){
  var self=this;

  return self.attrs.v.verticalplacement;
}

function twebcontrol_setproperty_verticalplacement(v){
  var self=this;
  self.attrs.v.verticalplacement=v;
  if(self.domhandlecreated()){
    self.recalculateplacement(false,true);
  }
}

function twebcontrol_getproperty_canfocus(){
  var self=this;

  return self.domhandlecreated() && self.getproperty_visible() && self.getproperty_enabled() && (self.getproperty_inputhandle() != null);
}

function twebcontrol_getproperty_inputhandle(){
  var self=this;

  return (self.bandinfo() != null)?self.bandinfo().getinputhandle():null;
}

function twebcontrol_getproperty_isfocused(){
  var self=this;

  return self.bandinfo().focused;
}

function twebcontrol_setproperty_isfocused(value){
  var self=this;
  self.bandinfo().focused=value;
}

function twebcontrol_getdatavalue(){

  var result=null;
  return result;
}

function twebcontrol_setdatavalue(value){

}

function twebcontrol_serialize(serializer){
  var self=this;
  serializer.datarecord[serializer.fieldname]=self.getdatavalue();
}

function twebcontrol_deserialize(serializer){
  var self=this;
  self.setdatavalue(serializer.datarecord[serializer.fieldname]);
}

function twebcontrol_isrelationshipfield(){
  var self=this;
  var result=0;
  var itemdata=null;
  var fielddata=null;
  result=false;
  if(self.getproperty_ownerform() == null){
    return result;
  }
  itemdata=catalog().getitembyname(self.getproperty_ownerform().getproperty_datasource());
  if(!(_IS(itemdata,ttabledata))){
    return result;
  }
  fielddata=itemdata.getfielddata(self.attrs.v.datafield);
  if(fielddata == null){
    return result;
  }
  return fielddata.fieldrelationshipkind != 0;
}

function twebcontrol_fieldkind(){
  var self=this;

  var fielddata=null;
  fielddata=(self.getproperty_ownerform() != null)?catalog().getfieldbyname(self.attrs.v.datafield,self.getproperty_ownerform().getproperty_datasource()):null;
  return (fielddata != null)?fielddata.datatype:1;
}

function twebcontrol_clearvalue(){

}

function twebcontrol_getvalue(){


  return '';
}

function twebcontrol_setvalue(s){

}

function twebcontrol_ispanel(){


  return false;
}

function twebcontrol_hastextcaption(){


  return false;
}

function twebcontrol_highlight(ahighlight){

}

function twebcontrol_applydeltay_tosiblings(actrl,threshold,deltay){

}

function twebcontrol_isinactivetabsheet(){


  return false;
}

function twebcontrol_parsekeyvalue(s,key,display){

  if(pos(':',s) > 0){
    key.v=copy(s,1,pos(':',s) - 1);
    display.v=copy(s,pos(':',s) + 1,lEngTH(s));
  }else {
    key.v=s;
    display.v=s;
  }
}

function twebcontrol_getproperty_enabled(){
  var self=this;

  if(self.domhandlecreated()){
    return (self.getproperty_inputhandle() != null)?!self.getproperty_inputhandle().disabled:!self.domhandle().disabled;
  }else 
    return self.attrs.v.disablevalue != 'disabled';
}

function twebcontrol_setproperty_enabled(b){
  var self=this;
  if(self.getproperty_enabled() == b){
    return;
  }
  if(self.domhandlecreated()){
    if(self.getproperty_inputhandle() != null){
      self.getproperty_inputhandle().disabled=!b;
    }else 
      self.domhandle().disabled=!b;
    if(b){
      self.attachdomeventhandlers0(self.bandinfo());
    }else 
      self.detachdomeventhandlers(self.bandinfo());
    self.updatecurrentstyle(self.bandindex,self.repeaterindex,false,false);
  }else {
    self.attrs.v.disablevalue=(b)?'':'disabled';
  }
}

function twebcontrol_getproperty_caption(){
  var self=this;

  return (self.domhandlecreated())?self.domhandle().innerHTML:self.attrs.v.text;
}

function twebcontrol_setproperty_caption(s){
  var self=this;
  if(self.domhandlecreated()){
    self.domhandle().innerHTML=s;
  }else 
    self.attrs.v.text=s;
}

function twebcontrol_getproperty_cursor(){
  var self=this;

  return (self.domhandlecreated())?self.domstyle().cursor:self.attrs.v.cursor;
}

function twebcontrol_setproperty_cursor(value){
  var self=this;
  if(self.domhandlecreated()){
    self.domstyle().cursor=value;
  }else 
    self.attrs.v.cursor=value;
}

function twebcontrol_getproperty_tag(){
  var self=this;

  return self.attrs.v.tag;
}

function twebcontrol_setproperty_tag(value){
  var self=this;
  self.attrs.v.tag=value;
}

function twebcontrol_getproperty_left(){
  var self=this;

  return (self.domhandlecreated())?strtointdef(self.domstyle().left,0):self.attrs.v.left;
}

function twebcontrol_setproperty_left(l){
  var self=this;
  if(self.domhandlecreated()){
    self.domstyle().left=inttostr(l) + 'px';
  }else 
    self.attrs.v.left=l;
}

function twebcontrol_getproperty_top(){
  var self=this;

  return (self.domhandlecreated())?strtointdef(self.domstyle().top,0):self.attrs.v.top;
}

function twebcontrol_setproperty_top(t){
  var self=this;
  if(self.domhandlecreated()){
    self.domstyle().top=inttostr(t) + 'px';
  }else 
    self.attrs.v.top=t;
}

function twebcontrol_getproperty_width(){
  var self=this;

  if(_IS(self,tabstractform)){
    if(self.isrootform()){
      return (self.getproperty_horizontalplacement() == 3)?xapp.getproperty_viewwidth():window.document.body.clientWidth;
    }else 
      return self.ownersubform.getproperty_width();
  }else 
  return (self.domhandlecreated())?strtointdef(self.domstyle().width,0):self.attrs.v.width;
}

function twebcontrol_setproperty_width(w){
  var self=this;
  var webcontrol=null;
  var activeform=null;
  var i=0;
  var k=0;
  function flowlayoutrequired(frm){

    return (frm.getproperty_viewmode() != 0) && (frm.getproperty_contentlayout() == 4);
  }
  if((_IS(self,tabstractform)) && self.isrootform()){
  }else 
  if(self.domhandlecreated()){
    if(self.getproperty_width() == w){
      return;
    }
    self.domstyle().width=inttostr(w) + 'px';
    if(_IS(self,subform)){
      k=self.bandindex;
      if(k == -1){
        k=0;
      }
      activeform=self.getproperty_activeforms(k);
      if(activeform != null){
        if(flowlayoutrequired(activeform)){
          activeform.groworshrink(-1,true);
        }
        activeform.recalculateplacement(true,false);
      }
    }else 
    if(self.hastextcaption()){
      if((self.getproperty_cangrow() == 0) || self.getproperty_canshrink()){
        self.groworshrink(-1,true);
      }
    }else 
      for(i=self.childcount() - 1;i>=0;i--){
        webcontrol=self.childctrls[i];
        if(_IS(webcontrol,twebcontrol)){
          k=webcontrol.bandindex;
          webcontrol.bandindex=self.bandindex;
          webcontrol.recalculateplacement(true,false);
          webcontrol.bandindex=k;
        }
      }
  }else 
    self.attrs.v.width=w;
}

function twebcontrol_getproperty_height(){
  var self=this;

  if(_IS(self,tabstractform)){
    if(self.isrootform()){
      return (self.getproperty_verticalplacement() == 3)?xapp.getproperty_viewheight():window.document.body.clientHeight;
    }else 
      return self.ownersubform.getproperty_height();
  }else 
  return (self.domhandlecreated())?strtointdef(self.domstyle().height,0):self.attrs.v.height;
}

function twebcontrol_setproperty_height(h){
  var self=this;
  var webcontrol=null;
  var i=0;
  var k=0;
  var activeform=null;
  if((_IS(self,tabstractform)) && self.isrootform()){
  }else 
  if(self.domhandlecreated()){
    if(self.getproperty_height() == h){
      return;
    }
    self.domstyle().height=inttostr(h) + 'px';
    if(_IS(self,subform)){
      k=self.bandindex;
      if(k == -1){
        k=0;
      }
      activeform=self.getproperty_activeforms(k);
      if(activeform != null){
        activeform.recalculateplacement(false,true);
      }
    }else 
      for(i=self.childcount() - 1;i>=0;i--){
        webcontrol=self.childctrls[i];
        if(_IS(webcontrol,twebcontrol)){
          k=webcontrol.bandindex;
          webcontrol.bandindex=self.bandindex;
          webcontrol.recalculateplacement(false,true);
          webcontrol.bandindex=k;
        }
      }
    self.controlstyle.boundschanged();
  }else 
    self.attrs.v.height=h;
}

function twebcontrol_getproperty_visible(){
  var self=this;

  if(self.domhandlecreated()){
    return ((self.owner != null) && self.owner.isflow())?self.domstyle().display != 'none':self.domstyle().visibility != 'hidden';
  }else 
    return self.attrs.v.visibility != 'hidden';
}

function twebcontrol_setproperty_visible(b){
  var self=this;
  if(self.domhandlecreated()){
    if((self.owner != null) && self.owner.isflow()){
      self.domstyle().display=(b)?'':'none';
    }else {
      self.domstyle().visibility=(b)?'inherit':'hidden';
    }
  }else {
    self.attrs.v.visibility=(b)?'inherit':'hidden';
  }
}

function twebcontrol_getproperty_color(){
  var self=this;

  return (self.domhandlecreated())?htmlhextocolor(self.domstyle().backgroundColor):self.attrs.v.color;
}

function twebcontrol_setproperty_color(c){
  var self=this;
  if(self.domhandlecreated()){
    self.domstyle().backgroundColor=colortohtmlhex(c);
  }else 
    self.attrs.v.color=c;
}

function twebcontrol_getproperty_transparent(){
  var self=this;

  return (self.domhandlecreated())?stringsequal(self.domstyle().backgroundColor,'transparent'):self.attrs.v.transparent;
}

function twebcontrol_setproperty_transparent(t){
  var self=this;
  if(self.domhandlecreated()){
    if(t){
      self.domstyle().backgroundColor='transparent';
    }else 
      self.setproperty_color(self.attrs.v.color);
  }else 
    self.attrs.v.transparent=t;
}

function twebcontrol_getproperty_borderstyle(){
  var self=this;
  var result=0;
  var c=0;
  result=0;
  if(self.domhandlecreated()){
    with(self.domstyle()){
      if(pos('none',borderStyle) != 0){
        result=0;
      }else 
      if(pos('dotted',borderStyle) != 0){
        result=4;
      }else 
      if(pos('dashed',borderStyle) != 0){
        result=5;
      }else 
      if(pos('solid',borderStyle) != 0){
        result=1;
        if(borderTopColor == borderBottomColor){
          return result;
        }
        c=changecolorbrightness(htmlhextocolor(borderTopColor),-80);
        result=(c == htmlhextocolor(borderBottomColor))?3:2;
      }
    }
  }else 
    return self.attrs.v.borderstyle;
  return result;
}

function twebcontrol_setproperty_borderstyle(b){
  var self=this;
  if(self.domhandlecreated()){
    setborder(self.domstyle(),b,self.getproperty_bordersides(),self.getproperty_bordercolor(),self.getproperty_borderwidth());
  }else 
    self.attrs.v.borderstyle=b;
}

function twebcontrol_getproperty_bordercolor(){
  var self=this;

  return (self.domhandlecreated())?htmlhextocolor(self.domstyle().borderColor):self.attrs.v.bordercolor;
}

function twebcontrol_setproperty_bordercolor(bc){
  var self=this;
  if(self.domhandlecreated()){
    setborder(self.domstyle(),self.getproperty_borderstyle(),self.getproperty_bordersides(),bc,self.getproperty_borderwidth());
  }else 
    self.attrs.v.bordercolor=bc;
}

function twebcontrol_getproperty_borderwidth(){
  var self=this;

  return (self.domhandlecreated())?strtointdef(self.domstyle().borderWidth,0):self.attrs.v.borderwidth;
}

function twebcontrol_setproperty_borderwidth(bw){
  var self=this;
  if(self.domhandlecreated()){
    setborder(self.domstyle(),self.getproperty_borderstyle(),self.getproperty_bordersides(),self.getproperty_bordercolor(),bw);
  }else 
    self.attrs.v.borderwidth=bw;
}

function twebcontrol_getproperty_bordersides(){
  var self=this;
  var result={};
  if(self.domhandlecreated()){
    if(self.domstyle().border != ''){
      result=callbordersides;
    }else {
      result={};
      if(self.domstyle().borderLeft != ''){
        result=_UnionSet(result,_ISet(false,0,0));
      }
      if(self.domstyle().borderTop != ''){
        result=_UnionSet(result,_ISet(false,1,1));
      }
      if(self.domstyle().borderRight != ''){
        result=_UnionSet(result,_ISet(false,2,2));
      }
      if(self.domstyle().borderBottom != ''){
        result=_UnionSet(result,_ISet(false,3,3));
      }
    }
    if((self.domstyle().border == '') && (_EquSet(result,{}))){
      return self.attrs.v.bordersides;
    }
  }else 
    return self.attrs.v.bordersides;
  return result;
}

function twebcontrol_setproperty_bordersides(bs){
  var self=this;
  if(self.domhandlecreated()){
    setborder(self.domstyle(),self.getproperty_borderstyle(),bs,self.getproperty_bordercolor(),self.getproperty_borderwidth());
  }else 
    self.attrs.v.bordersides=bs;
}

function twebcontrol_getproperty_fontsize(){
  var self=this;

  return (self.domhandlecreated())?strtointdef(self.domstyle().fontSize,0):self.attrs.v.font.height;
}

function twebcontrol_setproperty_fontsize(fs){
  var self=this;
  if(self.domhandlecreated()){
    self.domstyle().fontSize=inttostr(fs) + 'pt';
  }else 
    self.attrs.v.font.height=fs;
}

function twebcontrol_focus(){
  var self=this;
  if(self.getproperty_canfocus()){
    try{
      self.getproperty_inputhandle().focus();
    }catch(e){
    }
  }
}

function twebcontrol_absleft(){
  var self=this;

  return (self.domhandlecreated())?getelementabsoluteleft(self.domhandle()):self.attrs.v.left;
}

function twebcontrol_abstop(){
  var self=this;

  return (self.domhandlecreated())?getelementabsolutetop(self.domhandle()):self.attrs.v.top;
}

function twebcontrol_contentheight(){
  var self=this;

  return self.getproperty_height();
}

function twebcontrol_contentwidth(){
  var self=this;

  return self.getproperty_width();
}

function twebcontrol_shouldhandleeffect(event){
  var self=this;

  switch(event.type){
    case 'mouseout':
    return !hasasparenthandle(geteventtargetelement(event),self.domhandle());
  default:
    return true;
  }
}

function twebcontrol_dohandleeffect(event){
  var self=this;
  var idx=0;
  var ridx=0;
  function isvalidbandindex(event){
    var result=0;
    var source=null;
    result=true;
    if(assigned(event.srcElement)){
      source=event.srcElement.wrapper;
      for(;source != null;){
        if((source == self) || !((_IS(source,twebcontrol)))){
          return result;
        }
        if(_IS(source,band)){
          return false;
        }
        source=source.owner;
      }
    }
    return result;
  }
  if(self.attrs.v != null){
    if(isvalidbandindex(event)){
      idx=geteventbandindex(event,self.bandindex);
      ridx=geteventrepeaterindex(event,self.repeaterindex);
    }else {
      idx=self.bandindex;
      ridx=self.repeaterindex;
    }
    if(self.shouldhandleeffect(event)){
      self.handleeffect(event,idx,ridx);
    }
  }
}

function twebcontrol_placementrequired(hori,vert){
  var self=this;

  var c=null;
  c=self;
  if(_IS(c,band)){
    c=self.owner;
  }
  return (hori && (c.getproperty_horizontalplacement() != 0)) || (vert && (c.getproperty_verticalplacement() != 0));
}

function twebcontrol_sortctrls(){
  var self=this;
  function comparectrls(c1,c2){
    var result=0;
    result=0;
    if(!(_IS(c1,twebcontrol))){
      return result;
    }
    if(!(_IS(c2,twebcontrol))){
      return result;
    }
    if((c1.attrs.v.top + c1.attrs.v.height) > (c2.attrs.v.top + c2.attrs.v.height)){
      return 1;
    }else 
    return ((c1.attrs.v.top + c1.attrs.v.height) < (c2.attrs.v.top + c2.attrs.v.height))?-1:0;
  }
  self.childctrls.sort(comparectrls);
}

function twebcontrol_recalculateplacement(hori,vert){
  var self=this;

    self.dorecalculateplacement(hori,vert);
}

function twebcontrol_updatehorzplacement(l,w){
  var self=this;
  if(l != self.getproperty_left()){
    self.setproperty_left(l);
  }
  if(w != self.getproperty_width()){
    self.setproperty_width(w);
  }
}

function twebcontrol_updatevertplacement(t,h){
  var self=this;
  if(t != self.getproperty_top()){
    self.setproperty_top(t);
  }
  if(h != self.getproperty_height()){
    self.setproperty_height(h);
  }
}

function twebcontrol_dorecalculateplacement(hori,vert){
  var self=this;
  var ownerwidth=0;
  var ownerheight=0;
  var originalownerwidth=0;
  var originalownerheight=0;
  var l=0;
  var t=0;
  var w=0;
  var h=0;
  function clientheight(){
    var result=0;
    var header=null;
    result=ownerheight;
    if(self.getproperty_ownerform().documentheader != null){
      header=self.getproperty_ownerform().documentheader;
      result-=header.getproperty_height();
      if(_InSet(1,header.getproperty_bordersides())){
        result-=header.getproperty_borderwidth();
      }
      if(_InSet(3,header.getproperty_bordersides())){
        result-=header.getproperty_borderwidth();
      }
    }
    if(self.getproperty_ownerform().documentfooter != null){
      header=self.getproperty_ownerform().documentfooter;
      result-=header.getproperty_height();
      if(_InSet(1,header.getproperty_bordersides())){
        result-=header.getproperty_borderwidth();
      }
      if(_InSet(3,header.getproperty_bordersides())){
        result-=header.getproperty_borderwidth();
      }
    }
    if(_InSet(1,self.getproperty_bordersides())){
      result-=self.getproperty_borderwidth();
    }
    if(_InSet(3,self.getproperty_bordersides())){
      result-=self.getproperty_borderwidth();
    }
    return max(result,0);
  }
  function gethtmlleft(ctrl){
    var result=0;
    result=ctrl.attrs.v.left;
    if((ctrl.owner != null) && (_InSet(0,ctrl.owner.getproperty_bordersides()))){
      return result - ctrl.owner.getproperty_borderwidth();
    }
    return result;
  }
  function gethtmltop(ctrl){
    var result=0;
    result=ctrl.attrs.v.top;
    if((ctrl.owner != null) && (_InSet(1,ctrl.owner.getproperty_bordersides()))){
      return result - ctrl.owner.getproperty_borderwidth();
    }
    return result;
  }
  function gethtmlwidth(ctrl){
    var result=0;
    result=ctrl.attrs.v.width;
    if(_InSet(0,ctrl.getproperty_bordersides())){
      result-=ctrl.getproperty_borderwidth();
    }
    if(_InSet(2,ctrl.getproperty_bordersides())){
      return result - ctrl.getproperty_borderwidth();
    }
    return result;
  }
  function gethtmlheight(ctrl){
    var result=0;
    result=ctrl.attrs.v.height;
    if(_InSet(1,ctrl.getproperty_bordersides())){
      result-=ctrl.getproperty_borderwidth();
    }
    if(_InSet(3,ctrl.getproperty_bordersides())){
      return result - ctrl.getproperty_borderwidth();
    }
    return result;
  }
  if(!self.placementrequired(hori,vert)){
    return;
  }
  if(self.owner == null){
    return;
  }
  if(!(_IS(self.owner,twebcontrol))){
    return;
  }
  if(hori){
    ownerwidth=self.owner.getproperty_width();
    originalownerwidth=gethtmlwidth(self.owner);
    l=self.getproperty_left();
    w=self.getproperty_width();
    switch(self.getproperty_horizontalplacement()){
      case 1:
      l=gethtmlleft(self);
      break;
      case 2:
      l=ownerwidth - (originalownerwidth - gethtmlleft(self));
      break;
      case 3:
      l=gethtmlleft(self);
      w=ownerwidth - (originalownerwidth - gethtmlwidth(self));
      break;
      case 4:
      l=(ownerwidth - gethtmlwidth(self)) / 2;
      break;
      case 5:
      if(ownerwidth > originalownerwidth){
        l=(gethtmlleft(self) / originalownerwidth) * ownerwidth;
      }
    }
    self.updatehorzplacement(l,w);
  }
  if(vert){
    ownerheight=self.owner.getproperty_height();
    originalownerheight=gethtmlheight(self.owner);
    t=self.getproperty_top();
    h=self.getproperty_height();
    if(_IS(self,band)){
      if(self.getproperty_verticalplacement() == 3){
        h=clientheight();
      }
    }else 
      switch(self.getproperty_verticalplacement()){
        case 1:
        t=gethtmltop(self);
        break;
        case 2:
        t=ownerheight - (originalownerheight - gethtmltop(self));
        break;
        case 3:
        t=self.attrs.v.top;
        h=ownerheight - (originalownerheight - gethtmlheight(self));
        break;
        case 4:
        t=(ownerheight - gethtmlheight(self)) / 2;
        break;
        case 5:
        if(ownerheight > originalownerheight){
          t=(gethtmltop(self) / originalownerheight) * ownerheight;
        }
      }
    self.updatevertplacement(t,h);
  }
}

function twebcontrol_groworshrink(deltay,resizeownersubform){
  var self=this;

    self.dogroworshrink(deltay,resizeownersubform);
}

function limitshrinktocontentheight(ctrl,deltay){
  var result=0;
  result=deltay;
  if(result >= 0){
    return result;
  }
  with(ctrl){
    if((getproperty_height() + deltay) <= contentheight()){
      result=contentheight() - getproperty_height();
    }
  }
  return result;
}

function twebcontrol_dogroworshrink(deltay,resizeownersubform){
  var self=this;
  deltay={v:deltay};
  var threshold=0;
  var savebandindex1=0;
  var saverepeaterindex1=0;
  function isvalidsibling(ctrl){

    return (ctrl != self) && ((ctrl.getproperty_verticalplacement() == 0) || (ctrl.getproperty_verticalplacement() == 1));
  }
  function getdeltayforaffectedcontrols(d){
    var result=0;
    var originalmargin=0;
    var currentmargin=0;
    var i=0;
    var ctrl=null;
    var savebandindex=0;
    var saverepeaterindex=0;
    var minthreshold=0;
    if(self.fisinternalcontainer){
      return d;
    }
    result=0;
    originalmargin=self.owner.attrs.v.height - (self.attrs.v.top + self.attrs.v.height);
    currentmargin=self.owner.getproperty_height() - (self.getproperty_top() + self.getproperty_height());
    for(i=0;i<=self.owner.childcount() - 1;i++){
      ctrl=self.owner.childctrls[i];
      savebandindex=ctrl.bandindex;
      saverepeaterindex=ctrl.repeaterindex;
      ctrl.bandindex=self.bandindex;
      ctrl.repeaterindex=self.repeaterindex;
      if(isvalidsibling(ctrl) && (ctrl.attrs.v.top >= (self.attrs.v.top + self.attrs.v.height))){
        if((ctrl.attrs.v.top - (self.attrs.v.top + self.attrs.v.height)) < originalmargin){
          originalmargin=ctrl.attrs.v.top - (self.attrs.v.top + self.attrs.v.height);
          currentmargin=ctrl.getproperty_top() - (self.getproperty_top() + self.getproperty_height());
        }
      }
      ctrl.bandindex=savebandindex;
      ctrl.repeaterindex=saverepeaterindex;
    }
    if(originalmargin < 0){
      return result;
    }
    if((d > 0) && (originalmargin > currentmargin)){
      if(d > (originalmargin - currentmargin)){
        d=originalmargin - currentmargin;
      }
    }else 
    if((d < 0) && (originalmargin < currentmargin)){
      if(d < (originalmargin - currentmargin)){
        d=originalmargin - currentmargin;
      }
    }else 
      return result;
    if(d < 0){
      minthreshold=0;
      for(i=0;i<=self.owner.childcount() - 1;i++){
        ctrl=self.owner.childctrls[i];
        savebandindex=ctrl.bandindex;
        saverepeaterindex=ctrl.repeaterindex;
        ctrl.bandindex=self.bandindex;
        ctrl.repeaterindex=self.repeaterindex;
        if(isvalidsibling(ctrl) && (ctrl.getproperty_top() < threshold)){
          if(minthreshold < (ctrl.getproperty_top() + ctrl.getproperty_height())){
            minthreshold=ctrl.getproperty_top() + ctrl.getproperty_height();
          }
        }
        ctrl.bandindex=savebandindex;
        ctrl.repeaterindex=saverepeaterindex;
      }
      for(i=0;i<=self.owner.childcount() - 1;i++){
        ctrl=self.owner.childctrls[i];
        savebandindex=ctrl.bandindex;
        saverepeaterindex=ctrl.repeaterindex;
        ctrl.bandindex=self.bandindex;
        ctrl.repeaterindex=self.repeaterindex;
        if(isvalidsibling(ctrl) && (ctrl.getproperty_top() >= threshold)){
          if(ctrl.getproperty_top() < minthreshold){
            d=0;
          }else 
          if((ctrl.getproperty_top() + d) < minthreshold){
            d=minthreshold - ctrl.getproperty_top();
          }
        }
        ctrl.bandindex=savebandindex;
        ctrl.repeaterindex=saverepeaterindex;
      }
    }
    result=d;
    if(result == -1){
      return 0;
    }
    return result;
  }
  function applydeltay_tocontrol(){
    var result=0;
    result=true;
    if(self.getproperty_canshrink() && ((self.getproperty_height() + deltay.v) <= 0)){
      deltay.v=-self.getproperty_height();
    }else 
    if(!self.getproperty_canshrink() && self.getproperty_visible() && ((self.getproperty_height() + deltay.v) < self.attrs.v.height)){
      deltay.v=self.attrs.v.height - self.getproperty_height();
    }else 
    if((self.getproperty_cangrow() == 1) && ((self.getproperty_height() + deltay.v) > self.attrs.v.height)){
      deltay.v=self.attrs.v.height - self.getproperty_height();
    }
    result=(deltay.v != 0) && (deltay.v != -1);
    if(!result){
      return result;
    }
    threshold=self.getproperty_top() + self.getproperty_height();
    self.setproperty_height(self.getproperty_height() + deltay.v);
    return result;
  }
  function applydeltay_tocontrolsiblings(){    if(self.fisinternalcontainer){
      return;
    }
    self.owner.applydeltay_tosiblings(self,threshold,deltay.v);
  }
  function applydeltay_tocontrolparent(){    var d=0;

      d=limitshrinktocontentheight(self.owner,deltay.v);
      self.owner.groworshrink(d,resizeownersubform);
  }
  if(self.internalgrowshrinkoverride){
    return;
  }
  if(self.isinactivetabsheet()){
    return;
  }
  if(!self.getproperty_canshrink() && (self.getproperty_cangrow() != 0)){
    return;
  }
  if(deltay.v == -1){
    deltay.v=self.contentheight() - self.getproperty_height();
  }
  if(deltay.v == 0){
    return;
  }
  if(assigned(self.onbeforegroworshrink)){
    self.onbeforegroworshrink._o[self.onbeforegroworshrink._p](deltay);
  }
  if(deltay.v == 0){
    return;
  }
  if(!applydeltay_tocontrol()){
    return;
  }
  if((_IS(self.owner,twebcontrol)) && self.owner.ispanel()){
    savebandindex1=self.owner.bandindex;
    saverepeaterindex1=self.owner.repeaterindex;
    self.owner.bandindex=self.bandindex;
    self.owner.repeaterindex=self.repeaterindex;
    deltay.v=getdeltayforaffectedcontrols(deltay.v);
    if(deltay.v != 0){
      applydeltay_tocontrolsiblings();
      applydeltay_tocontrolparent();
    }
    self.owner.bandindex=savebandindex1;
    self.owner.repeaterindex=saverepeaterindex1;
  }
  if(assigned(self.onaftergroworshrink)){
    self.onaftergroworshrink._o[self.onaftergroworshrink._p](deltay.v);
  }
  if(self.getproperty_ownerform() != null){
    if(resizeownersubform){
      self.getproperty_ownerform().groworshrink(-1,resizeownersubform);
    }
  }
}

function twebcontrol_getpart(childclass){
  var self=this;
  var result=null;
  var i=0;
  var ctrl=null;
  for(i=0;i<=self.childcount() - 1;i++){
    ctrl=self.childctrls[i];
    if(_IS(ctrl,childclass)){
      result=ctrl;
      result.bandindex=self.bandindex;
      return result;
    }
    result=ctrl.getpart(childclass);
    if(result != null){
      result.bandindex=self.bandindex;
      return result;
    }
  }
  return null;
}

function twebcontrol_getsubcontrolbyid(acontrolid,recursive){
  var self=this;
  var result=null;
  var i=0;
  var ctrl=null;
  for(i=0;i<=self.childcount() - 1;i++){
    ctrl=self.childctrls[i];
    if(stringsequal(ctrl.attrs.v.controlid,acontrolid)){
      return ctrl;
    }
    if(recursive){
      result=ctrl.getsubcontrolbyid(acontrolid,recursive);
      if(result != null){
        return result;
      }
    }
  }
  for(i=0;i<=self.fchildtimers.length - 1;i++){
    if(stringsequal(self.fchildtimers[i].attrs.v.controlid,acontrolid)){
      return self.fchildtimers[i];
    }
  }
  return null;
}

function twebcontrol_isinplace(){


  return false;
}

function twebcontrol_wasdisabled(){
  var self=this;

  if(!assigned(self.fwasdisabled)){
    self.fwasdisabled=!self.getproperty_enabled();
  }
  return self.fwasdisabled;
}

function twebcontrol_setdisplaynone(){
  var self=this;
  var i=0;
  if(self.domhandlecreated()){
    for(i=0;i<=self.bandinfos.length - 1;i++){
      self.bandinfos[i].handle.style.display='none';
    }
  }
}

function twebpopupcontrol_create0(aid,aowner){
  var self=this;
  self.fpopupcontrol=aowner;
  self.fneedclose=false;
  twebcontrol.prototype.create0.call(self, aid,xapp.mainform);
  return self;
}

function twebpopupcontrol_supportsanimation(){


  return gv_enableanimations && gvanimationpreferences.popupanimation && (bRoWsEr.engineid != 'MS');
}

function twebpopupcontrol_close(){
  var self=this;
  if(self.supportsanimation()){
    self.fneedclose=true;
    if(self.fanimationeffects == null){
      hidewithanimation(self.domhandle(),fadetransition,gvanimationpreferences.styleduration,null,getMethodPointer(self,self.handleanimationclose),null);
    }
  }else 
    self.deactivate();
}

function twebpopupcontrol_deactivate(){
  var self=this;
  var parentnode=null;
  twebcontrol.prototype.deactivate.call(self);
  self.deactivatepopupcontrol();
  if(self.domhandlecreated()){
    parentnode=self.domhandle().parentNode;
    if(parentnode != null){
      parentnode.removeChild(self.domhandle());
    }
    self.freedom();
  }else 
    free(self);
}

function twebpopupcontrol_deactivatepopupcontrol(){
  var self=this;
  self.fpopupcontrol.deactivate();
}

function twebpopupcontrol_createdomobject(){
  var self=this;
  XB_insertAdjacentHTML(window.document.body,'BeforeEnd',self.getcontrolhtml());
  self.setupdomhandle();
  self.handlecreated();
  if(self.domhandlecreated()){
    gv_topzindex++;
    self.domstyle().zIndex=inttostr(gv_topzindex);
  }
}

function twebpopupcontrol_canclose(){
  var self=this;

  return self.fcloseonleave && !self.fneedclose;
}

function twebpopupcontrol_handleonmousemove(event){
  var self=this;
  if(self.canclose()){
    xapp.deactivepopup0(event);
  }
}

function twebpopupcontrol_handleonclick(event){

  xapp.deactivepopup0(event);
}

function twebpopupcontrol_separateborder(){


  return true;
}

function twebpopupcontrol_reposition(aleft,atop){
  var self=this;
  var style=null;
  var bw=0;
  var sides={};
  style=self.fpopupcontrol.controlstyle.getproperty_currentstyle();
  if(style != null){
    bw=style.borderwidth;
    sides=style.bordersides;
  }else {
    bw=self.getproperty_borderwidth();
    sides=self.getproperty_bordersides();
  }
  if(_InSet(1,sides)){
    atop+=bw;
  }
  if(self.separateborder()){
    if(_InSet(3,sides)){
      atop+=bw;
    }
  }
  if(_InSet(0,sides)){
    aleft+=bw;
  }
  self.setproperty_left(aleft);
  self.setproperty_top(atop);
}

function twebpopupcontrol_activate(){
  var self=this;
  self.domstyle().display='';
}

function twebpopupcontrol_popupat(aleft,atop,acloseonleave){
  var self=this;
  self.fcloseonleave=acloseonleave;
  if(acloseonleave){
    self.domhandlearray.attacheventhandler('mousemove',getMethodPointer(self,self.handleonmousemove),null,null);
  }
  self.domhandlearray.attacheventhandler('click',getMethodPointer(self,self.handleonclick),null,null);
  self.reposition(aleft,atop);
  self.fpopupcontrol.activate();
  self.activate();
  if(self.supportsanimation()){
    self.fanimationeffects=showwithanimation(self.domhandle(),fadetransition,gvanimationpreferences.styleduration,null,getMethodPointer(self,self.handleanimationstop),null);
  }
}

function twebpopupcontrol_handleanimationstop(sender){
  var self=this;
  twebcontrol.prototype.handleanimationstop.call(self, sender);
  if((sender == null) && self.fneedclose){
    self.deactivate();
  }
}

function twebpopupcontrol_handleanimationclose(sender){
  var self=this;
  if(sender == null){
    self.deactivate();
  }
}

function twebpopupcontrol_run(){
  var self=this;
  var aleft=0;
  var atop=0;
  var awidth=0;
  var style=null;
  aleft=self.fpopupcontrol.absleft() + self.fpopupcontrol.getproperty_width();
  style=self.currentdomstyle();
  awidth=(style != null)?frompx(style.width):0;
  if((awidth == 0) && self.domhandlecreated()){
    style=self.domhandle().currentStyle;
    if(style != null){
      awidth=frompx(style.width);
    }
  }
  aleft-=awidth;
  atop=self.fpopupcontrol.abstop() + self.fpopupcontrol.getproperty_height() + 1;
  self.activate();
  xapp.showpopup(self,aleft,atop,false);
}

function tabstractform_initcompositecontrols(){
  var self=this;
  function processcontrol(parentctrl){    var i=0;
    var ctrl=null;
    for(i=parentctrl.childcount() - 1;i>=0;i--){
      ctrl=parentctrl.childctrls[i];
      if(ctrl.childcount() > 0){
        ctrl.initparts();
        processcontrol(ctrl);
      }
    }
  }
  processcontrol(self);
}

function tabstractform_create1(aparameters){
  var self=this;
  aparameters={v:aparameters};
  var i=0;
  var ctrl=null;
  var paramlist=null;
  function dospatialsort(ctrl){    var i=0;
    if(ctrl.childcount() == 0){
      return self;
    }
    for(i=ctrl.childcount() - 1;i>=0;i--){
      dospatialsort(ctrl.childctrls[i]);
    }
    ctrl.sortctrls();
  }
  twebcontrol.prototype.create0.call(self, '',self);
  if(xapp.statereconstructor != null){
    if(assigned(self.onreadhistory)){
      self.onreadhistory._o[self.onreadhistory._p](aparameters);
    }
  }
  self.openparameters=aparameters.v;
  self.originalparameters=Create_tparameters().create();
  self.returnedparameters=Create_tparameters().create();
  self.currentparameters=Create_tparameters().create();
  self.timers=[];
  self.cursor='default';
  self.ownersubformdomhandle=null;
  self.finstancename='';
  self.modulename='';
  self.autoscroll=false;
  self.waitforchildforms=false;
  self.ownersubform=null;
  self.encryptdata=0;
  self.winwidth=400;
  self.winheight=300;
  self.navigationctrls=[];
  self.recordnumedit=null;
  self.infilterdefine=false;
  self.popup=null;
  self.fformreadystate=0;
  self.clearhtmlonclose=false;
  self.formopener=null;
  self.styledata=null;
  self.neveractivated=true;
  self.browserhistory=true;
  self.setupformfromdfm();
  paramlist=Create_tparameters().create();
  paramlist.addlist(aparameters.v);
  for(i=paramlist.items.length - 1;i>=0;i--){
    self.currentparameters.update(paramlist.items[i].name,paramlist.items[i].value);
  }
  free(paramlist);
  self.styledata=controlstyles_styledatabyname(self.name);
  self.createformcontrols();
  dospatialsort(self);
  for(i=self.childcount() - 1;i>=0;i--){
    ctrl=self.childctrls[i];
    if(_IS(ctrl,band)){
      if(_InSet(ctrl.bandtype,_ISet(false,0,0,25,25))){
        self.buildnavigator(ctrl);
      }
    }
  }
  self.setupcontrolevents();
  self.initcompositecontrols();
  if(assigned(self.oncreate)){
    self.oncreate._o[self.oncreate._p]();
    self.currentparameters.addlist(self.openparameters);
  }
  self.currentparameters.copyto(self.originalparameters);
  return self;
}

function tabstractform_destroy(){
  var self=this;
  var i=0;
  var p=null;
  if(assigned(self.ondestroy)){
    self.ondestroy._o[self.ondestroy._p]();
  }
  if(!self.ownersubform.destructorcalled){
    self.ownersubform.inactiveforms.remove(self);
    for(i=self.ownersubform.activeformscount() - 1;i>=0;i--){
      if(self.ownersubform.getproperty_activeforms(i) == self){
        self.ownersubform.setproperty_activeforms(i,null);
      }
    }
  }
  if(self.fformreadystate != 5){
    self.ownersubform.bandindex=self.bandindex;
    switchbandindexbyctrl(self.ownersubform);
  }
  if(self.ownersubformdomhandle != null){
    unhookallhyperlinkevents(self.ownersubformdomhandle);
    self.ownersubformdomhandle.innerHTML='';
    p=self.ownersubformdomhandle.parentNode;
    if(assigned(p)){
      p.removeChild(self.ownersubformdomhandle);
    }
    self.ownersubformdomhandle.wrapper=null;
    self.ownersubformdomhandle=null;
  }
  self.styledata=null;
  self.ownersubform=null;
  self.timers=null;
  if(xapp.openforms.indexOf(self) != -1){
    xapp.openforms.remove(self);
  }
  if(self.ismainform()){
    xapp.mainform=null;
  }
  if(self.popup != null){
    free(self.popup);
    self.popup=null;
  }
  if(self.fboundcontrols != null){
    self.fboundcontrols.length=0;
    self.fboundcontrols=null;
  }
  self.navigationctrls.length=0;
  free(self.originalparameters);
  self.originalparameters=null;
  free(self.currentparameters);
  self.currentparameters=null;
  free(self.returnedparameters);
  self.returnedparameters=null;
  twebcontrol.prototype.destroy.call(self);
}

function tabstractform_getformhtml(){


  return '';
}

function tabstractform_close(){
  var self=this;
  var i=0;
  var floatsubform=null;
  floatsubform=xapp.getfloatingsubform(self.getproperty_instancename());
  if(floatsubform == null){
    with(self.ownersubform){
      for(i=activeformscount() - 1;i>=0;i--){
        if(getproperty_activeforms(i) == self){
          bandindex=i;
          if(bandindex == 0){
            bandindex=-1;
          }
        }
      }
    }
    self.openform('',self.ownersubformtargetref(),'');
  }else 
    floatsubform.close();
}

function tabstractform_doiskeyparameter(parameter){


  return (parameter != cpagenameparam) && (parameter != copenformbatchidparam);
}

function tabstractform_iskeyparameter(parameter){
  var self=this;

  return self.doiskeyparameter(parameter);
}

function tabstractform_matchbyparameters(l){
  var self=this;
  var result=0;
  var p1=null;
  var p2=null;
  var i=0;
  var s={v:""};
  var pl=null;
  result=false;
  if((xapp.statereconstructor != null) && assigned(self.onreadhistory)){
    pl=Create_tparameters().create();
    s.v=l.asstring();
    self.onreadhistory._o[self.onreadhistory._p](s);
    pl.addlist(s.v);
  }else 
    pl=l;
  for(i=pl.items.length - 1;i>=0;i--){
    p1=pl.items[i];
    if(self.iskeyparameter(p1.name)){
      p2=self.originalparameters.getparambyname(p1.name);
      if((p2 == null) || !stringsequal(p1.value,p2.value)){
        return result;
      }
    }
  }
  for(i=self.originalparameters.items.length - 1;i>=0;i--){
    p1=self.originalparameters.items[i];
    if(self.iskeyparameter(p1.name)){
      if(!stringsequal(p1.inout,'Out') && (p1.defvalue != p1.value)){
        p2=pl.getparambyname(p1.name);
        if((p2 == null) || !stringsequal(p1.value,p2.value)){
          return result;
        }
      }
    }
  }
  if((xapp.statereconstructor != null) && assigned(self.onreadhistory)){
    free(pl);
  }
  return true;
}

function tabstractform_getparametervalue(paramname){
  var self=this;

  var param=null;
  param=self.currentparameters.getparambyname(paramname);
  return (param != null)?param.value:'';
}

function tabstractform_setparametervalue(paramname,v){
  var self=this;
  self.currentparameters.update(paramname,v);
}

function tabstractform_setproperty_caption(s){
  var self=this;
  var fs=null;
  fs=self.ownersubform.floatingwindow;
  if(fs != null){
    fs.setproperty_title(s);
  }
}

function tabstractform_getproperty_caption(){
  var self=this;
  var result="";
  var fs=null;
  result='';
  fs=self.ownersubform.floatingwindow;
  if(fs != null){
    return fs.getproperty_title();
  }
  return result;
}

function tabstractform_getproperty_horizontalplacement(){
  var self=this;

  if(self.isrootform()){
    switch(catalog().webpagealignment){
      case 0:
      return 0;
      case 1:
      return 0;
      case 2:
      return 0;
      case 3:
      return 3;
      case 4:
      return 3;
    default:
      return 0;
    }
  }else 
  return (self.isfloating() || (self.ownersubform.getproperty_cangrow() == 2))?0:3;
}

function tabstractform_getproperty_datasource(){


  return '';
}

function tabstractform_setproperty_datasource(s){

}

function tabstractform_getproperty_visible(){
  var self=this;

  return (self.domhandlecreated())?self.domhandle().style.visibility != 'hidden':twebcontrol.prototype.getproperty_visible.call(self);
}

function tabstractform_setproperty_visible(b){
  var self=this;
  if(self.domhandlecreated()){
    self.domhandle().style.visibility=(b)?'':'hidden';
  }else 
    twebcontrol.prototype.setproperty_visible.call(self, b);
}

function tabstractform_buildnavigator(bandctrl){

}

function tabstractform_initializeafteropen(){

}

function tabstractform_checkdataformready(formopener){

}

function tabstractform_updateparametersfromhiddenhtmlfields(){
  var self=this;
  var param=null;
  var i=0;
  var h=null;
  for(i=self.currentparameters.items.length - 1;i>=0;i--){
    param=self.currentparameters.items[i];
    h=window.document.getElementById(self.getproperty_instancename() + '_PM' + param.name);
    if(assigned(h)){
      param.value=h.value;
      h.id='x' + h.id;
    }
  }
  self.currentparameters.copyto(self.returnedparameters);
}

function tabstractform_getproperty_verticalplacement(){
  var self=this;
  var result=0;
  if(self.isrootform()){
    result=0;
    if(self.getproperty_viewmode() == 0){
      if(catalog().webpagealignment == 3){
        return 3;
      }
    }
  }else {
    return ((self.getproperty_viewmode() == 0) && (self.ownersubform.getproperty_cangrow() != 0))?3:0;
  }
  return result;
}

function tabstractform_getcontrolbyname(n){
  var self=this;

  function processcontrol(c){
    var result=null;
    var i=0;
    result=null;
    if(stringsequal(c.name,n)){
      return c;
    }
    for(i=c.childcount() - 1;i>=0;i--){
      result=processcontrol(c.childctrls[i]);
      if(result != null){
        return result;
      }
    }
    return result;
  }
  return (n == '')?null:processcontrol(self);
}

function tabstractform_setupformfromdfm(){

}

function tabstractform_evaluatesubformparameters(asubform){


  return '';
}

function tabstractform_createformcontrols(){

}

function tabstractform_setupcontrolevents(){

}

function tabstractform_reopenwithparameters(aparameters){
  var self=this;
  self.reopenallembeddedsubforms(aparameters);
}

function tabstractform_reopenallembeddedsubforms(aparameters){
  var self=this;
  var paramlist=null;
  var pagename="";
  var openformbatchid="";
  function doupdate(c,pagename,openformbatchid){    var i=0;
    var ctrl=null;
    for(i=c.childcount() - 1;i>=0;i--){
      ctrl=c.childctrls[i];
      if(_IS(ctrl,subform)){
        ctrl.openformforpage(pagename,openformbatchid);
      }else 
        doupdate(ctrl,pagename,openformbatchid);
    }
  }
  pagename='';
  paramlist=Create_tparameters().create();
  paramlist.addlist(aparameters);
  pagename=paramlist.getparamvalue(cpagenameparam);
  openformbatchid=paramlist.getparamvalue(copenformbatchidparam);
  free(paramlist);
  if(pagename == ''){
    return;
  }
  if(openformbatchid == ''){
    openformbatchid=xapp.getuniqueopenformbatchid();
  }
  doupdate(self,pagename,openformbatchid);
}

function tabstractform_beginbusy(){
  var self=this;
  if(assigned(self.ownersubform)){
    self.ownersubform.beginbusy();
  }
}

function tabstractform_endbusy(){
  var self=this;
  if(assigned(self.ownersubform)){
    self.ownersubform.endbusy(null);
  }
}

function tabstractform_handlehyperlinkclick(domelement,cleanurl,target){
  var self=this;
  var ctrl=null;
  var handled={v:0};
  var url={v:""};
  function getassociatedhyperlinkedcontrol(h){
    var result=null;
    var childhandle=null;
    result=null;
    if(!assigned(h)){
      return result;
    }
    if(assigned(h.wrapper)){
      return h.wrapper;
    }
    childhandle=h.firstChild;
    for(;assigned(childhandle);){
      result=getassociatedhyperlinkedcontrol(childhandle);
      if(result != null){
        return result;
      }
      childhandle=childhandle.nextSibling;
    }
    return result;
  }
  function converturltorelative(aurl){
    var result="";
    var baseurl="";
    result=decodeURIComponent(aurl);
    baseurl=window.location.protocol + '//' + window.location.host;
    if(__string_indexof(result,baseurl) == 1){
      return __string_substring(result,__string_length(baseurl) + 1,__string_length(result));
    }
    return result;
  }
  try{
    ctrl=getassociatedhyperlinkedcontrol(domelement);
    handled.v=false;
    url.v=converturltorelative(cleanurl);
    if(ctrl != null){
      if(assigned(ctrl.onhyperlinkclick)){
        ctrl.onhyperlinkclick._o[ctrl.onhyperlinkclick._p](url,handled);
      }
    }
    if(!handled.v){
      if(__string_indexof(url.v,'://') > 0){
        window.open(url.v,target,'');
      }else {
        if(assigned(target) && __string_equals(target,'_blank')){
          window.open(url.v,'','');
        }else 
          self.openpage(url.v,'');
      }
    }
  }catch(e){
  }
}

function tabstractform_setupcontrolhandles(){
  var self=this;
  var i=0;
  function processctrl(c){    var i=0;
    if(c.name.indexOf('mfk_int') != -1){
      return;
    }
    if(!c.domhandlecreated()){
      c.setupdomhandle();
    }
    for(i=c.childcount() - 1;i>=0;i--){
      processctrl(c.childctrls[i]);
    }
    c.handlecreated();
  }
  function setuptemplookuphandles(){    function recursivelyprocessdomhandle(h){      var childhandle=null;
      if(assigned(h.id)){
        if(!__string_isempty(h.id)){
          self.templookuphandles[h.id]=h;
        }
      }
      childhandle=h.firstChild;
      for(;assigned(childhandle);){
        recursivelyprocessdomhandle(childhandle);
        childhandle=childhandle.nextSibling;
      }
    }
    self.templookuphandles=[];
    recursivelyprocessdomhandle(self.domhandle());
  }
  hookupallhyperlinkevents(self.domhandle(),getMethodPointer(self,self.handlehyperlinkclick));
  setuptemplookuphandles();
  for(i=self.childcount() - 1;i>=0;i--){
    processctrl(self.childctrls[i]);
  }
  self.templookuphandles=null;
}

function tabstractform_setcolorbyname(n){
  var self=this;
  self.attrs.v.color=n;
}

function tabstractform_ismainform(){
  var self=this;

  return xapp.mainform == self;
}

function tabstractform_isrootform(){
  var self=this;

  return (self.ownersubform == xapp.rootsubform) || self.ismainform();
}

function tabstractform_istopmostform(){
  var self=this;

  return self.ismainform() && (window == window.top);
}

function txapp_dohandleresizetimerevent(){
  var self=this;
  if(self.mainform != null){
    if(self.mainform.formopener == null){
      self.mainform.recalculateplacement(true,true);
    }
  }
}

function txapp_dohandleresize(){
  var self=this;
  if(bRoWsEr.engineid == 'MS'){
    if((self.lastviewwidth == self.getproperty_viewwidth()) && (self.lastviewheight == self.getproperty_viewheight())){
      return;
    }
    self.lastviewwidth=self.getproperty_viewwidth();
    self.lastviewheight=self.getproperty_viewheight();
  }
  self.dohandleresizetimerevent(null);
}

function tabstractform_domhandle(){
  var self=this;

  return self.bandinfos[0].handle;
}

function tabstractform_domstyle(){
  var self=this;

  return self.domhandle().style;
}

function tabstractform_handlemainformunload(){
  var self=this;
  if(self.ismainform() && xapp.releasememoryonclose){
    free(self);
    if(xapp.openforms.length > 0){
      showmessage('Internal Error: ' + inttostr(xapp.openforms.length) + ' forms are not properly disposed.');
    }
    free(xapp);
    xapp=null;
  }
}

function tabstractform_handleonkeydown(event){

  var keycode="";
  keycode=event.keyCode;
  if(strtoint(keycode) == vk_escape){
    xapp.deactivepopup();
  }
}

function tabstractform_beforeshow(show){
  var self=this;
  if(assigned(self.onbeforeshow)){
    self.onbeforeshow._o[self.onbeforeshow._p](show);
  }
}

function tabstractform_aftershow(){
  var self=this;
  if(assigned(self.onaftershow)){
    self.onaftershow._o[self.onaftershow._p]();
  }
}

function tabstractform_handleonmousemove(event){

  xapp.deactivepopup0(event);
}

function tabstractform_handleonclick(event){

  xapp.deactivepopup0(event);
}

function tabstractform_cloneownersubformdomhandle(targetbandindex){
  var self=this;
  var result=null;
  result=self.ownersubform.getproperty_emptyhandle(targetbandindex);
  self.ownersubformdomhandle=result.cloneNode(false);
  self.ownersubformdomhandle.bandindex=result.bandindex;
  self.ownersubformdomhandle.wrapper=result.wrapper;
  result.parentNode.appendChild(self.ownersubformdomhandle);
  return result;
}

function tabstractform_getproperty_ownerform(){
  var self=this;
  var result=null;
  result=null;
  if(self.isrootform()){
    return result;
  }
  return self.ownersubform.getproperty_ownerform();
}

function tabstractform_ownersubformtargetref(){
  var self=this;
  var result="";
  if(self.isrootform()){
    return 'self:_';
  }else {
    result=self.getproperty_ownerform().getproperty_instancename() + ':' + self.ownersubform.name;
    if(self.ownersubform.bandindex != -1){
      return result + '(' + inttostr(self.ownersubform.bandindex) + ')';
    }
  }
  return result;
}

function tabstractform_resumealltimercontrols(){
  var self=this;
  var i=0;
  for(i=0;i<=self.timers.length - 1;i++){
    self.timers[i].resume();
  }
}

function tabstractform_suspendalltimercontrols(){
  var self=this;
  var i=0;
  for(i=0;i<=self.timers.length - 1;i++){
    self.timers[i].suspend();
  }
}

function tabstractform_instancefullref(){
  var self=this;

  return (self.name != self.getproperty_instancename())?self.getproperty_instancename() + ':' + self.name:self.name;
}

function tabstractform_setproperty_formreadystate(rs){
  var self=this;
  switch(rs){
    case 0:
    return;
    case 1:
    if(self.fformreadystate != 0){
      return;
    }
    break;
    case 2:
    if(self.fformreadystate != 1){
      return;
    }
    break;
  }
  self.fformreadystate=rs;
}

function tabstractform_getproperty_viewmode(){
  var self=this;

  var s="";
  s=self.getparametervalue(cviewmodeparam);
  if(stringsequal(s,'vmSingle')){
    return 0;
  }else 
  return (stringsequal(s,'vmContinuousEditable'))?2:1;
}

function tabstractform_setproperty_viewmode(v){
  var self=this;
  switch(v){
    case 0:
    self.setparametervalue(cviewmodeparam,'vmSingle');
    break;
    case 1:
    self.setparametervalue(cviewmodeparam,'vmContinuous');
    break;
    case 2:
    self.setparametervalue(cviewmodeparam,'vmContinuousEditable');
  }
}

function tabstractform_getproperty_columncount(){
  var self=this;

  return strtointdef(self.getparametervalue(ccolumncountparam),1);
}

function tabstractform_getproperty_contentlayout(){
  var self=this;

  var s="";
  s=self.getparametervalue(ccontentlayoutparam);
  if(stringsequal(s,'clVertical')){
    return 2;
  }else 
  if(stringsequal(s,'clHorizontalFixed')){
    return 1;
  }else 
  if(stringsequal(s,'clVerticalFixed')){
    return 3;
  }else 
  return (stringsequal(s,'clFlow'))?4:0;
}

function tabstractform_setupcontrolsoverflowproperty(){
  var self=this;
  function doprocesstextlabels(ctrl){    var i=0;
    var k=0;
    var info=null;
    if(!(_IS(ctrl,twebcontrol))){
      return;
    }
    for(i=0;i<=ctrl.childcount() - 1;i++){
      doprocesstextlabels(ctrl.childctrls[i]);
    }
    if(ctrl.getproperty_canshrink() || (ctrl.getproperty_cangrow() == 0)){
      if((_IS(ctrl,textlabel)) || (_IS(ctrl,checkbox)) || (_IS(ctrl,optionbutton))){
        for(i=0;i<=ctrl.bandinfos.length - 1;i++){
          info=ctrl.bandinfos[i];
          ctrl.bandindex=i;
          for(k=0;k<=info.repeaterbands.length - 1;k++){
            ctrl.repeaterindex=k;
            ctrl.groworshrink(-1,false);
          }
        }
        ctrl.bandindex=-1;
        ctrl.repeaterindex=-1;
      }
    }
  }
  function doprocesscontainers(ctrl){    var i=0;
    for(i=0;i<=ctrl.childcount() - 1;i++){
      doprocesscontainers(ctrl.childctrls[i]);
    }
    if(_IS(ctrl,band)){
      return;
    }
    if(_IS(ctrl,tabcontrol)){
      return;
    }
    if(_IS(ctrl,tabsheet)){
      return;
    }
    if(ctrl.isinplace()){
      return;
    }
    if((_IS(ctrl,container)) && !ctrl.getproperty_visible()){
      if(ctrl.containerattrs.shrinkonhide){
        for(i=0;i<=ctrl.bandinfos.length - 1;i++){
          ctrl.bandindex=i;
          ctrl.groworshrink(-1,false);
        }
        ctrl.bandindex=-1;
      }
    }
  }
  doprocesstextlabels(self);
  doprocesscontainers(self);
}

function tabstractform_contentheight(){
  var self=this;
  var result=0;
  var overflow="";
  if(self.domhandlecreated()){
    overflow=self.domhandle().style.overflow;
    try{
      self.domhandle().style.overflow='hidden';
      result=self.domhandle().scrollHeight;
    }finally{
      self.domhandle().style.overflow=overflow;
    }
  }else 
    return 0;
  return result;
}

function tabstractform_contentwidth(){
  var self=this;
  var result=0;
  var overflow="";
  if(self.domhandlecreated()){
    overflow=self.domhandle().style.overflow;
    try{
      self.domhandle().style.overflow='hidden';
      result=self.domhandle().scrollWidth;
    }finally{
      self.domhandle().style.overflow=overflow;
    }
  }else 
    return 0;
  return result;
}

function tabstractform_setupdomhandleto(h){
  var self=this;
  var bandinfo=null;
  if(self.domhandlecreated()){
    return;
  }
  if(h == null){
    return;
  }
  bandinfo=self.createbandinfo();
  bandinfo.owner=self;
  bandinfo.handle=h;
  self.domhandlearray.fbandinfos.push(bandinfo);
  self.domhandlearray.fallbandinfos.push(bandinfo);
  self.setupdomeventhandlers();
}

function tabstractform_attachdomeventhandlers0(abandinfo){
  var self=this;
  var i=0;
  var handler=null;
  var callerobj=null;
  for(i=self.attrs.v.eventhandlers.length - 1;i>=0;i--){
    handler=self.attrs.v.eventhandlers[i];
    callerobj=(handler.caller != null)?handler.caller:self;
    self.domhandlearray.attacheventhandler(handler.name,getMethodPointer(callerobj,handler.func),abandinfo,null);
  }
}

function tabstractform_setupdomeventhandlers(){
  var self=this;
  if(!self.domhandlecreated()){
    return;
  }
  twebcontrol.prototype.setupdomeventhandlers.call(self);
  if(self.ismainform()){
    xb_attacheventhandler(window.document.body,'unload',getMethodPointer(self,self.handlemainformunload));
    xb_attacheventhandler(window.document.body,'click',getMethodPointer(self,self.handleonclick));
    xb_attacheventhandler(window.document.body,'keydown',getMethodPointer(self,self.handleonkeydown));
    xb_attacheventhandler(window.document.body,'mousemove',getMethodPointer(self,self.handleonmousemove));
  }
}

function tabstractform_getinputcontrol(control){
  var self=this;
  var result=null;
  var i=0;
  var ctrl=null;
  if(control.getproperty_canfocus()){
    return control;
  }else {
    result=null;
    for(i=0;i<=control.childcount() - 1;i++){
      ctrl=control.childctrls[i];
      if(_IS(ctrl,twebcontrol)){
        result=self.getinputcontrol(ctrl);
        if(result != null){
          return result;
        }
      }
    }
  }
  return result;
}

function tabstractform_openpage(cleanurl,overrideparams){

  xapp.openpage(cleanurl,overrideparams);
}

function tabstractform_openform(formname,target,parameters){
  var self=this;
  var s1="";
  var s2="";
  var k=0;
  var paramlist=null;
  function isbeingopenedbypage(){

    return (self.formopener != null) && (self.formopener.currentpagename != '');
  }
  if(isbeingopenedbypage()){
    return;
  }
  if((self.formopener != null) && (self.formopener.batchid != '')){
    paramlist=Create_tparameters().create();
    paramlist.addlist(parameters);
    if(paramlist.getparambyname(copenformbatchidparam) == null){
      paramlist.update(copenformbatchidparam,self.formopener.batchid);
      parameters=paramlist.asstring();
    }
    free(paramlist);
  }
  k=pos(':',target);
  if(k != 0){
    s1=copy(target,1,k - 1);
    s2=copy(target,k + 1,lEngTH(target));
    if(stringsequal(s1,'self')){
      if(s2 == '_'){
        if(!self.ismainform()){
          target=self.getproperty_ownerform().getproperty_instancename() + ':' + self.ownersubform.name;
          if(self.ownersubform.bandindex != -1){
            target+='(' + inttostr(self.ownersubform.bandindex) + ')';
          }
        }else {
          target='';
        }
      }else 
        target=self.getproperty_instancename() + ':' + s2;
      xapp.openform(formname,target,parameters);
    }else 
    if(stringsequal(s1,'parent') && (self.getproperty_ownerform() != null)){
      self.getproperty_ownerform().openform(formname,'self:' + s2,parameters);
    }else 
    if(stringsequal(s1,'top') && (s2 != '_')){
      self.getproperty_ownerform().openform(formname,xapp.mainform.getproperty_instancename() + ':' + s2,parameters);
    }else 
      xapp.openform(formname,target,parameters);
  }else 
    xapp.openform(formname,target,parameters);
}

function tabstractform_recalculateplacement(hori,vert){
  var self=this;
  var webcontrol=null;
  var i=0;
  var j=0;
  var k=0;
  var savebandindex=0;
  var saverepeaterindex=0;
  var info=null;
  if(self.domhandlecreated() && (self.getproperty_horizontalplacement() == 3)){
    if((self.getproperty_viewmode() != 0) && (self.getproperty_columncount() > 1) && (_InSet(self.getproperty_contentlayout(),_ISet(false,0,0,2,2)))){
      self.domstyle().width=inttostr(self.getproperty_width()) + 'px';
    }
  }
  for(i=self.childcount() - 1;i>=0;i--){
    webcontrol=self.childctrls[i];
    if(_IS(webcontrol,twebcontrol)){
      savebandindex=webcontrol.bandindex;
      saverepeaterindex=webcontrol.repeaterindex;
      for(j=webcontrol.bandinfos.length - 1;j>=0;j--){
        webcontrol.bandindex=j;
        info=webcontrol.bandinfos[j];
        for(k=0;k<=info.repeaterbands.length - 1;k++){
          webcontrol.repeaterindex=k;
          webcontrol.recalculateplacement(hori,vert);
        }
      }
      webcontrol.bandindex=savebandindex;
      webcontrol.repeaterindex=saverepeaterindex;
    }
  }
}

function tabstractform_groworshrink(deltay,resizeownersubform){
  var self=this;
  var savebandindex=0;
  var context=null;
  var ctrl=null;
  var i=0;
  if(!self.ismainform()){
    savebandindex=self.ownersubform.bandindex;
    for(i=0;i<=self.ownersubform.activeformscount() - 1;i++){
      if(self.ownersubform.getproperty_activeforms(i) == self){
        self.ownersubform.bandindex=i;
      }
    }
    self.ownersubform.groworshrink(deltay,true);
    self.ownersubform.bandindex=savebandindex;
  }else {
    try{
      context=GetScriptContext('parent');
      if(context == window){
        return;
      }
      ctrl=(context != null)?context.GetSubFormByWindow(window):null;
      if(ctrl != null){
        context.ResizeSubForm(ctrl,deltay);
      }
    }catch(e){
    }
  }
}

function tabstractform_getproperty_instancename(){
  var self=this;

  return (self.finstancename != '')?self.finstancename:self.name;
}

function tabstractform_isfloating(){
  var self=this;

  return (self.ownersubform != null) && self.ownersubform.subformattrs.ispopup;
}

function tabstractwindow_closequery(){
  var self=this;
  var result=0;
  result=true;
  if(assigned(self.fonclosequery)){
    return self.fonclosequery(self);
  }
  return result;
}

function tabstractwindow_getproperty_title(){


  return '';
}

function tabstractwindow_setproperty_title(value){

}

function tabstractwindow_getproperty_draggable(){


  return false;
}

function tabstractwindow_setproperty_draggable(value){

}

function tabstractwindow_getproperty_closable(){


  return false;
}

function tabstractwindow_setproperty_closable(value){

}

function tabstractwindow_getproperty_modal(){


  return false;
}

function tabstractwindow_setproperty_modal(value){

}

function tabstractwindow_getproperty_nofadein(){


  return false;
}

function tabstractwindow_setproperty_nofadein(value){

}

function tabstractwindow_getproperty_center(){


  return false;
}

function tabstractwindow_setproperty_center(value){

}

function tabstractwindow_getproperty_noborder(){


  return false;
}

function tabstractwindow_setproperty_noborder(value){

}

function tabstractwindow_getproperty_stylename(){


  return '';
}

function tabstractwindow_setproperty_stylename(value){

}

function tabstractwindow_getproperty_currentform(){


  return null;
}

function tabstractwindow_activate(){
  var self=this;
  self.setproperty_visible(true);
}

function tabstractwindow_close(){

}

function tabstractwindow_getproperty_content(){


  return null;
}

function tstate_create(formstate){
  var self=this;
  var s="";
  var k=0;
  function getnextelement(){
    var result="";
    var k=0;
    k=pos('!',formstate);
    if(k != 0){
      result=copy(formstate,1,k - 1);
      formstate=copy(formstate,k + 1,lEngTH(formstate));
    }else {
      result=formstate;
      formstate='';
    }
    return result;
  }
  tobject.prototype.create.call(self);
  self.formclassname='';
  self.forminstancename='';
  self.targetformname='';
  self.targetsubformname='';
  self.params='';
  s=getnextelement();
  k=pos(':',s);
  if(k != 0){
    self.forminstancename=copy(s,1,k - 1);
    self.formclassname=copy(s,k + 1,lEngTH(s));
  }else {
    self.forminstancename=s;
    self.formclassname=s;
  }
  if((formstate != '') && (formstate.charAt(lEngTH(formstate)-1) == ')')){
    formstate=copy(formstate,1,lEngTH(formstate) - 1);
  }
  self.location=getnextelement();
  self.paramlist=Create_tparameters().create();
  self.paramlist.addlist(formstate);
  self.params=self.paramlist.asstring();
  return self;
}

function tstate_destroy(){
  var self=this;
  if(self.paramlist != null){
    free(self.paramlist);
    self.paramlist=null;
  }
  tobject.prototype.destroy.call(self);
}

function tstate_execute(){
  var self=this;
  var frm=null;
  var s="";
  frm=xapp.getproperty_webform(self.forminstancename);
  if((frm == null) || !frm.ismainform() || !frm.matchbyparameters(self.paramlist) || ((self.targetsubformname != '') && !stringsequal(frm.ownersubform.name,self.targetsubformname))){
    s=(self.forminstancename != self.formclassname)?self.forminstancename + ':' + self.formclassname:self.formclassname;
    xapp.reconstructform(s,self.location,self.params);
  }
}

function tstate_isdone(){
  var self=this;
  var result=0;
  var frm=null;
  function formisready(frm){

    return (frm.fformreadystate == 3) || (frm.fformreadystate == 4);
  }
  result=true;
  if(self.forminstancename != ''){
    frm=xapp.getproperty_webform(self.forminstancename);
    if(frm == null){
      return false;
    }else 
    if(!formisready(frm)){
      return false;
    }
  }
  return result;
}

function geturifragmenttype(urifragment){
  var result=0;
  urifragment={v:urifragment};
  result=0;
  if(urifragment.v.charAt(1-1) == '#'){
    delete_(urifragment,1,1);
  }
  if((pos('I(',urifragment.v) != 0) || catalog().ispagename(urifragment.v)){
    return 1;
  }
  return result;
}

function tstatereconstructor_create(urifragment){
  var self=this;
  tobject.prototype.create.call(self);
  self.statelist=[];
  self.buildlist(urifragment,'');
  self.currentstate=null;
  return self;
}

function tstatereconstructor_destroy(){
  var self=this;
  var i=0;
  var state=null;
  if(self.statelist != null){
    for(i=0;i<=self.statelist.length - 1;i++){
      state=self.statelist[i];
      free(state);
      self.statelist[i]=null;
    }
    self.statelist=null;
  }
  tobject.prototype.destroy.call(self);
}

function tstatereconstructor_buildlist(urifragment){
  var self=this;
  var s={v:""};
  var d="";
  var k=0;
  var openformparams=null;
  s.v=decodeURIComponent(urifragment);
  do{
    k=pos('(',s.v);
    if(k != 0){
      delete_(s,1,k);
    }
    k=pos(')I(',s.v);
    if(k != 0){
      d=copy(s.v,1,k - 1);
      s.v=copy(s.v,k + 1,lEngTH(s.v));
    }else {
      d=s.v;
      s.v='';
    }
    openformparams=Create_tstate().create(d);
    self.statelist.push(openformparams);
  }while(!(s.v == ''));
}

function tstatereconstructor_getnextstate(){
  var self=this;

  return (self.statelist.length > 0)?self.statelist[0]:null;
}

function rerunstatereconstructor(){  if(xapp.statereconstructor != null){
    xapp.statereconstructor.run();
  }
}

function tstatereconstructor_run(){
  var self=this;
  var nextstate=null;
  var i=0;
  with(xapp){
    if((self.currentstate == null) || self.currentstate.isdone()){
      nextstate=self.getnextstate();
      if(nextstate == null){
        free(self);
        xapp.statereconstructor=null;
        enablestatechangedetector();
        return;
      }else {
        if(self.currentstate != null){
          free(self.currentstate);
          self.currentstate=null;
        }
        self.currentstate=nextstate;
        i=self.statelist.indexOf(self.currentstate,0);
        if(i >= 0){
          self.statelist.splice(i,1);
        }
        self.currentstate.execute();
      }
    }
  }
  window.setTimeout(functionname(rerunstatereconstructor) + '()',0);
}

function txapp_create(){
  var self=this;
  if(xapp != null){
    tobject.prototype.create.call(self);
    self.allowdomainswitching=xapp.allowdomainswitching;
    self.waitforchildforms=xapp.waitforchildforms;
    self.onbeginload=xapp.onbeginload;
    self.onendload=xapp.onendload;
    self.mainform=xapp.mainform;
    self.openforms=xapp.openforms;
    self.floatingwindows=xapp.floatingwindows;
    self.runningmodules=xapp.runningmodules;
    self.growshrinkqueue=xapp.growshrinkqueue;
    self.rootsubform=xapp.rootsubform;
    self.states=xapp.states;
    self.iebackforwardiframe=xapp.iebackforwardiframe;
    self.loadcounter=xapp.loadcounter;
    self.automaticstatetracking=xapp.automaticstatetracking;
    self.startupfinalized=xapp.startupfinalized;
    self.statereconstructor=xapp.statereconstructor;
    self.statedetectorenabled=xapp.statedetectorenabled;
    self.statedetectorexpectedstate=xapp.statedetectorexpectedstate;
    self.initialstate=xapp.initialstate;
    self.releasememoryonclose=xapp.releasememoryonclose;
    self.resizetimer=xapp.resizetimer;
    self.lastviewwidth=xapp.lastviewwidth;
    self.lastviewheight=xapp.lastviewheight;
    self.frootdomain=xapp.frootdomain;
    self.factivepopups=xapp.factivepopups;
  }else {
    tobject.prototype.create.call(self);
    self.mainform=null;
    self.openforms=[];
    self.floatingwindows=[];
    self.waitforchildforms=false;
    self.runningmodules=[];
    self.growshrinkqueue=[];
    self.loadcounter=0;
    self.startupfinalized=false;
    self.automaticstatetracking=true;
    self.statereconstructor=null;
    self.statedetectorenabled=true;
    self.statedetectorexpectedstate='';
    self.initialstate='';
    self.states=[];
    self.iebackforwardiframe=null;
    self.releasememoryonclose=false;
    self.resizetimer=null;
    self.lastviewwidth=-1;
    self.lastviewheight=-1;
    self.frootdomain='';
    self.allowdomainswitching=false;
    self.factivepopups=[];
    window.onresize=getMethodPointer(self,self.dohandleresize);
  }
  return self;
}

function txapp_destroy(){
  var self=this;
  self.mainform=null;
  if(self.resizetimer != null){
    free(self.resizetimer);
    self.resizetimer=null;
  }
  free(self.openforms);
  self.openforms=null;
  self.runningmodules.length=0;
  self.runningmodules=null;
  free(self.rootsubform);
  self.rootsubform=null;
  tobject.prototype.destroy.call(self);
}

function txapp_setmsiebackforwardiframe(){

  var iframe=null;
  var idoc=null;
  iframe=document.createElement('iframe');
  iframe.setAttribute('frameborder','0');
  iframe.setAttribute('height','0');
  iframe.setAttribute('width','0');
  iframe.setAttribute('style','overflow:hidden');
  iframe.setAttribute('name','_BAKFWD');
  iframe.setAttribute('id','_BAKFWD');
  iframe.setAttribute('src','');
  document.body.appendChild(iframe);
  idoc=(assigned(iframe.contentWindow))?iframe.contentWindow.document:iframe.contentDocument.parentWindow.document;
  idoc.open();
  idoc.write('<html><head>');
  idoc.write('<script language=\"javascript\">');
  idoc.write('function setHash(){');
  if(xapp.allowdomainswitching && (xapp.getproperty_rootdomain() != '')){
    idoc.write('      document.domain = \"' + xapp.getproperty_rootdomain() + '\";');
  }
  idoc.write('      try{ if(top.location.hash!=\"\")top.location.hash=\"' + window.location.hash + '\"}catch(ExceptObject){}');
  idoc.write('}');
  idoc.write('</script>');
  idoc.write('</head>');
  idoc.write('<body onload=\"setHash()\"></body>');
  idoc.write('</html>');
  idoc.close();
  xapp.iebackforwardiframe=iframe;
}

function txapp_run(){
  var self=this;
  var hashpart="";
  var decodedparams="";
  var ispage=0;
  function getpreviewparamvalue(paramsstr){
    var result="";
    var paramlist=null;
    paramlist=Create_tparameters().create();
    paramlist.addlist(paramsstr);
    result=paramlist.getparamvalue('preview');
    free(paramlist);
    return result;
  }
  hashpart=window.location.hash;
  if(geturifragmenttype(hashpart) == 1){
    self.initialstate=hashpart;
    self.reconstructstate(self.initialstate);
  }else {
    decodedparams=decodeURIComponent(gvStartingParameters);
    ispage=!__string_equals(getpreviewparamvalue(decodedparams),'form') && catalog().ispagename(gvmainformid);
    if(ispage){
      self.fforceaddpagetohistory=true;
      self.openpage(gvmainformid,decodedparams);
    }else 
      self.openform(gvmainformid,'',decodedparams);
  }
  statechangedetectorloop();
}

function txapp_finalizestartup(){

  var h=null;
  h=window.document.getElementById('__LoadingText');
  if(assigned(h)){
    h.style.position='absolute';
    h.style.visibility='hidden';
    h.parentNode.removeChild(h);
  }
}

function txapp_getproperty_activepopup(){
  var self=this;

  return (self.factivepopups.length > 0)?self.factivepopups[self.factivepopups.length - 1]:null;
}

function txapp_isactivepopup(ctrl){
  var self=this;
  var result=0;
  var i=0;
  var popup=null;
  result=false;
  for(i=self.factivepopups.length - 1;i>=0;i--){
    popup=self.factivepopups[i];
    result=(_IS(popup,twebpopupcontrol)) && (popup.fpopupcontrol == ctrl);
    if(result){
      return result;
    }
  }
  return result;
}

function txapp_deactivatepopupsbyhandle(elementtokeep){
  var self=this;
  var i=0;
  var popup=null;
  for(i=self.factivepopups.length - 1;i>=0;i--){
    popup=self.factivepopups[i];
    if((elementtokeep != null) && hasasparenthandle(elementtokeep,popup.domhandle())){
      return;
    }
    self.factivepopups.splice(i,1);
    popup.close();
  }
}

function txapp_deactivatepopups(ctrltokeep){
  var self=this;
  var ctrlhandle=null;
  ctrlhandle=(ctrltokeep != null)?ctrltokeep.domhandle():null;
  self.deactivatepopupsbyhandle(ctrlhandle);
}

function txapp_showpopup(popupctrl,x,y,closeonleave){
  var self=this;
  self.deactivatepopups(popupctrl.fpopupcontrol);
  self.factivepopups.push(popupctrl);
  popupctrl.popupat(x,y,closeonleave);
}

function txapp_deactivepopup0(event){
  var self=this;
  var ctrl=null;
  var handle=null;
  var canclose=0;
  function getactivepopup(handle){

    for(;assigned(handle);){
      if(assigned(handle.wrapper) && (_IS(handle.wrapper,twebpopupcontrol)) && !((_IS(handle.wrapper,tabstractwindow)))){
        return handle.wrapper;
      }
      handle=handle.parentNode;
    }
    return self.getproperty_activepopup();
  }
  handle=geteventelement(event);
  ctrl=getactivepopup(handle);
  if(ctrl == null){
    return;
  }
  switch(event.type){
    case 'mousemove':
    canclose=(ctrl != null) && (_IS(ctrl,twebpopupcontrol)) && ctrl.canclose();
    break;
    case 'click':
    canclose=ctrl != null;
    break;
  default:
    canclose=false;
  }
  if(canclose){
    if((handle == null) || !((hasasparenthandle(handle,ctrl.domhandle()) || ((_IS(ctrl,twebpopupcontrol)) && (ctrl.fpopupcontrol != null) && hasasparenthandle(handle,ctrl.fpopupcontrol.domhandle()))))){
      self.deactivatepopupsbyhandle(handle);
    }
  }
}

function txapp_deactivepopup(){
  var self=this;
  var popup=null;
  popup=self.getproperty_activepopup();
  if(popup != null){
    self.factivepopups.splice(self.factivepopups.length - 1,1);
    popup.close();
  }
}

function txapp_getproperty_rootdomain(){
  var self=this;

  if(self.frootdomain == ''){
    self.frootdomain=getSafeDomain(document.domain);
  }
  return self.frootdomain;
}

function txapp_setproperty_rootdomain(s){
  var self=this;
  self.frootdomain=s;
}

function txapp_getproperty_webform(n){
  var self=this;

  var i=0;
  for(i=self.openforms.length - 1;i>=0;i--){
    if(stringsequal(self.openforms[i].getproperty_instancename(),n)){
      return self.openforms[i];
    }
  }
  return null;
}

function AddModuleOnLoadHandler(ModuleName,OnLoad){  
      if (gv_ModuleOnLoad == null)
          gv_ModuleOnLoad = {};
      var arr = gv_ModuleOnLoad[ModuleName];
      if (typeof(arr)=="undefined")
      {
          arr = new Array();
          gv_ModuleOnLoad[ModuleName] = arr;
      }
      arr.push(OnLoad);
  
}

function CallModuleOnLoadHandler(ModuleName){  
      if (gv_ModuleOnLoad != null)
      {
          var arr = gv_ModuleOnLoad[ModuleName];
          if (typeof(arr)!="undefined")
          {
              for (var i = 0; i < arr.length; i++) {
                  arr[i]();
                  arr[i] = null;
              }
              delete gv_ModuleOnLoad[ModuleName];
          }
      }
  
}

function _ModuleLoadCallBack(modulename){  var webmodule=null;
  webmodule=xapp.getproperty_module(modulename);
  if(webmodule == null){
    return;
  }
  if(__string_isempty(gvServerException)){
    webmodule._loaded=true;
  }else {
    xapp.runningmodules.remove(webmodule);
    window.document.body.removeChild(webmodule);
    webmodule=null;
  }
  xapp.doendload();
  CallModuleOnLoadHandler(modulename);
  gvServerException='';
}

function txapp_loadmodule(modulename,onload){
  var self=this;
  var webmodule=null;
  function getmoduleurl(){
    var result="";
    var paramlist=null;
    if(isScriptorApp){
      return 'Scripts/System/' + modulename + '.js';
    }else {
      paramlist=Create_tparameters().create();
      paramlist.update('cls','code');
      paramlist.update('sid',securityid);
      paramlist.update('xid',xappguid);
      paramlist.update('cbf',functionname(_ModuleLoadCallBack) + '(\'' + modulename + '\')');
      paramlist.update('lng',currentlanguage);
      result=buildurl(modulename + '.js',paramlist,'');
      free(paramlist);
    }
    return result;
  }
  if(IsModuleLoaded(modulename)){
    onload();
    return;
  }
  webmodule=self.getproperty_module(modulename);
  if(webmodule == null){
    return;
  }
  if(webmodule.src == ''){
    AddModuleOnLoadHandler(modulename,onload);
    webmodule._loaded=false;
    webmodule.src=getmoduleurl();
    xapp.dobeginload();
  }else 
  if(defined(webmodule._loaded)){
    if(webmodule._loaded){
      onload();
    }else 
      AddModuleOnLoadHandler(modulename,onload);
  }
}

function txapp_getproperty_module(n){
  var self=this;
  var result=null;
  var i=0;
  n+='_ID';
  for(i=self.runningmodules.length - 1;i>=0;i--){
    if(stringsequal(self.runningmodules[i].id,n)){
      return self.runningmodules[i];
    }
  }
  result=window.document.getElementById(n);
  if(result == null){
    result=window.document.createElement('script');
    result.setAttribute('type','text/javascript');
    result.setAttribute('charset',gvCharset);
    result.id=n;
    window.document.body.appendChild(result);
    self.runningmodules.push(result);
  }else 
    self.runningmodules.push(result);
  return result;
}

function txapp_dobeginload(){
  var self=this;
  if(self.loadcounter == 0){
    if(assigned(self.onbeginload)){
      self.onbeginload();
    }
  }
  self.loadcounter=1;
}

function txapp_doendload(){
  var self=this;
  if(self.loadcounter == 1){
    if(assigned(self.onendload)){
      self.onendload();
    }
  }
  self.loadcounter=0;
}

function txapp_getproperty_viewheight(){


  return document.documentElement.clientHeight;
}

function txapp_getproperty_viewwidth(){


  return document.documentElement.clientWidth;
}

function txapp_getproperty_vscrollposition(){


  return document.documentElement.scrollTop;
}

function txapp_getproperty_hscrollposition(){


  return document.documentElement.scrollLeft;
}

function txapp_getfloatingsubform(formname){
  var self=this;
  var result=null;
  var i=0;
  var frm=null;
  result=null;
  frm=xapp.getproperty_webform(formname);
  if(frm == null){
    return result;
  }
  i=self.indexoffloatingsubform(frm.ownersubform);
  if(i >= 0){
    return self.floatingwindows[i];
  }
  return result;
}

function txapp_getuniqueopenformbatchid(){
  var self=this;

  self.fopenformbatchid++;
  return __integer_tostring(self.fopenformbatchid);
}

function txapp_indexoffloatingsubform(form){
  var self=this;
  var result=0;
  var i=0;
  result=-1;
  for(i=self.floatingwindows.length - 1;i>=0;i--){
    if(self.floatingwindows[i].getproperty_content() == form){
      return i;
    }
  }
  return result;
}

function txapp_openpage(pageurl,overrideparams){
  var self=this;
  pageurl={v:pageurl};
  var parameters=null;
  var pageparams={v:""};
  var urlparams="";
  var pagename={v:""};
  var states=[];
  var state=null;
  var params="";
  var pageinfo=null;
  var cleanurl="";
  var paramarr=[];
  var k=0;
  var i=0;
  var alwaysaddtohistory=0;
  alwaysaddtohistory=self.fforceaddpagetohistory;
  self.fforceaddpagetohistory=false;
  if(__string_startswith(pageurl.v,gvBaseURL)){
    delete_(pageurl,1,__string_length(gvBaseURL));
  }
  urlparams='';
  k=pos('?',pageurl.v);
  if(k > 0){
    cleanurl=__string_substring(pageurl.v,1,k - 1);
    paramarr=__string_split(__string_substring(pageurl.v,k + 1,__string_length(pageurl.v)),'&');
    for(i=0;i<=paramarr.length - 1;i++){
      if(!__string_isempty(urlparams)){
        urlparams+=', ';
      }
      urlparams+='\"' + paramarr[i] + '\"';
    }
    paramarr=null;
  }else 
    cleanurl=pageurl.v;
  catalog().getfullpageurl(cleanurl,pagename,pageparams);
  parameters=Create_tparameters().create();
  parameters.addlist(pageparams.v);
  parameters.addlist(urlparams);
  parameters.addlist(overrideparams);
  pageparams.v=parameters.asstring();
  free(parameters);
  pageinfo=catalog().getpageinfobycleanurl(pagename.v);
  if(pageinfo == null){
    return;
  }
  pageinfo.overrideparams=pageparams.v;
  states=catalog().getstateslistforpage(pagename.v);
  if(states == null){
    return;
  }
  state=states[0];
  params=state.params;
  if(params != ''){
    params+=',';
  }
  params+='\"' + cpagenameparam + '=' + pagename.v + '\",' + pageparams.v;
  self.disablestatechangedetector();
  try{
    self.openform(state.formclassname,'',params);
  }finally{
    self.enablestatechangedetector();
  }
  if(alwaysaddtohistory || (overrideparams == '')){
    self.addstatetobrowserhistory(pageurl.v);
  }
  window.document.title=pageinfo.title;
}

function txapp_openform(formref,target,openformparameters){
  var self=this;
  if(self.statereconstructor != null){
    return;
  }
  if(stringsequal(target,'Popup') || stringsequal(target,'Float')){
    doopenwindow(formref,openformparameters);
  }else 
    doopenform(formref,target,openformparameters);
}

function txapp_reconstructform(formref,target,openformparameters){

  if(stringsequal(target,'Popup') || stringsequal(target,'Float')){
    doopenwindow(formref,openformparameters);
  }else 
    doopenform(formref,target,openformparameters);
}

function txapp_scrolltotop(){
  var self=this;
  if(self.mainform != null){
    if(self.mainform.istopmostform()){
      window.scrollTo(0,0);
    }
  }
}

function txapp_reconstructstate(state){
  var self=this;
  var stateindex=0;
  var i=0;
  function getstateindex(astate){
    var result=0;
    var i=0;
    var s="";
    result=-1;
    if(self.states.length == 0){
      return result;
    }
    i=__string_lastindexof(astate,':');
    if(i == 0){
      return result;
    }
    s=copy(astate,i + 1,__string_length(astate) - i);
    result=strtointdef(s,-1);
    if(result > self.states.length){
      return -1;
    }
    return result;
  }
  function doreconstructstate(astate){    if(self.statereconstructor != null){
      return;
    }
    if(self.loadcounter == 1){
      self.doendload();
    }
    self.disablestatechangedetector();
    try{
      self.statereconstructor=Create_tstatereconstructor().create(astate);
      self.statereconstructor.run();
    }catch(ExceptObject){
      self.enablestatechangedetector();
    }
  }
  state=decodeURIComponent(state);
  stateindex=getstateindex(state);
  i=__string_lastindexof(state,':');
  if(i > 0){
    state=copy(state,1,i - 1);
  }
  if((stateindex <= 0) && catalog().ispagename(state)){
    self.openpage(state,'');
  }else {
    if(stateindex >= 0){
      doreconstructstate(self.states[stateindex - 1].state);
    }else 
    if((state != '') && (state != '#')){
      doreconstructstate(state);
    }
  }
}

function txapp_handleerror(errormsg,handled){

}

function txapp_getstatebyid(id){
  var self=this;

  var i=0;
  for(i=0;i<=self.states.length - 1;i++){
    if(self.states[i].id == id){
      return self.states[i];
    }
  }
  return null;
}

function txapp_addcurrentstatetobrowserhistory(stateid){
  var self=this;
  var i=0;
  var state=null;
  var statestring="";
  var curfragment="";
  function constructstatestring(){
    var result="";
    var statearray=[];
    function addstatestring(ctrl){      var i=0;
      var j=0;
      var s="";
      var op={v:""};
      var frm=null;
      var subfrm=null;
      if(ctrl == null){
        return result;
      }
      if(_IS(ctrl,tabstractform)){
        with(ctrl){
          if(!browserhistory || isfloating()){
            return result;
          }
          s=(getproperty_instancename() == name)?name + '!':getproperty_instancename() + ':' + name + '!';
          if(getproperty_ownerform() != null){
            s+=getproperty_ownerform().getproperty_instancename() + ':' + ownersubform.name;
            if(bandindex != 0){
              s+='(' + inttostr(bandindex) + ')';
            }
          }
          s+='!';
          op.v=openparameters;
          if(assigned(onwritehistory)){
            onwritehistory._o[onwritehistory._p](op);
          }
          s+=op.v;
          statearray.push('(' + s + ')');
        }
      }
      for(i=ctrl.childcount() - 1;i>=0;i--){
        if(_IS(ctrl.childctrls[i],subform)){
          subfrm=ctrl.childctrls[i];
          for(j=subfrm.bandinfos.length - 1;j>=0;j--){
            frm=subfrm.getproperty_activeforms(j);
            if(frm != null){
              addstatestring(frm);
            }else {
              s=subfrm.getproperty_ownerform().getproperty_instancename() + ':' + subfrm.name;
              if(j != 0){
                s+='(' + inttostr(j) + ')';
              }
              statearray.push('(!' + s + '!)');
            }
          }
        }
        addstatestring(ctrl.childctrls[i]);
      }
    }
    statearray=[];
    addstatestring(self.mainform);
    result=encodeURIComponent(statearray.join('I'));
    statearray=null;
    return result;
  }
  statestring=constructstatestring();
  state=self.getstatebyid(stateid);
  if(state != null){
    state.state=statestring;
    return;
  }
  state=Create_txappstate().create();
  state.state=statestring;
  state.id=stateid;
  self.states.push(state);
  curfragment=window.location.hash;
  i=__string_lastindexof(curfragment,':');
  curfragment=(i > 0)?copy(curfragment,1,i):curfragment + ':';
  curfragment+=inttostr(self.states.length);
  self.addstatetobrowserhistory(curfragment);
}

function getcurrenthash(){
  var result="";
  result=window.location.hash;
  if(__string_startswith(result,'#')){
    return __string_substring(result,2,__string_length(result));
  }
  return result;
}

function txapp_addstatetobrowserhistory(state){
  var self=this;
  var doc=null;
  if(!cdbg_bckfwd){
    return;
  }
  if(self.statereconstructor != null){
    return;
  }
  if(window.top != window){
    return;
  }
  if(__string_equals(getcurrenthash(),state)){
    return;
  }
  self.disablestatechangedetector();
  try{
    if(__string_equals(state,gvmainformid)){
      self.initialstate=gvmainformid;
      if(__string_isempty(getcurrenthash())){
        return;
      }
    }
    if(assigned(self.iebackforwardiframe)){
      doc=(assigned(self.iebackforwardiframe.contentWindow))?self.iebackforwardiframe.contentWindow.document:self.iebackforwardiframe.contentDocument.parentWindow.document;
      doc.open();
      doc.write('<html><head>');
      doc.write('<script language=\"javascript\">');
      doc.write('function setHash(){');
      if(xapp.allowdomainswitching && (xapp.getproperty_rootdomain() != '')){
        doc.write('      document.domain = \"' + xapp.getproperty_rootdomain() + '\";');
      }
      if(!__string_equals(state,gvmainformid)){
        doc.write('      try{                          top.location.hash=\"' + state + '\" }catch(ExceptObject){}');
      }else 
        doc.write('      try{ if(top.location.hash!=\"\")top.location.hash=\"' + state + '\" }catch(ExceptObject){}');
      doc.write('}');
      doc.write('</script>');
      doc.write('</head>');
      doc.write('<body onload=\"setHash()\"></body>');
      doc.write('</html>');
      doc.close();
    }else 
      window.location.hash=state;
  }finally{
    self.enablestatechangedetector();
  }
}

function statechangedetectorloop(){  try{
    if(xapp.statedetectorenabled){
      if(window.location.hash != xapp.statedetectorexpectedstate){
        if(__string_isempty(getcurrenthash())){
          xapp.reconstructstate(xapp.initialstate);
        }else 
          xapp.reconstructstate(getcurrenthash());
      }
    }
  }catch(e){
  }
  window.setTimeout(statechangedetectorloop,250);
}

function txapp_enablestatechangedetector(){
  var self=this;
  if(self.statedetectorenabled){
    return;
  }
  if(self.statereconstructor != null){
    return;
  }
  self.statedetectorexpectedstate=window.location.hash;
  self.statedetectorenabled=true;
}

function txapp_disablestatechangedetector(){
  var self=this;
  self.statedetectorenabled=false;
}

function registeredtimers(){

  if(fregisteredtimers == null){
    fregisteredtimers=[];
  }
  return fregisteredtimers;
}

function getrunningtimerbyid(id){
  var result=null;
  var i=0;
  var tmr=null;
  result=null;
  for(i=registeredtimers().length - 1;i>=0;i--){
    tmr=registeredtimers()[i];
    if(stringsequal(tmr.name,id)){
      return tmr;
    }
  }
  return result;
}

function timercallback(id){  var tmr=null;
  tmr=getrunningtimerbyid(id);
  if(assigned(tmr)){
    tmr.timerid=-1;
    if(tmr.suspended){
      return;
    }
    if(tmr.fenabled){
      tmr.handletimerevent();
    }
    if(tmr.fenabled){
      tmr.setupnexttimeout();
    }else 
    if(tmr.freeonterminate){
      free(tmr);
    }
  }
}

function timer_create0(aid,aowner){
  var self=this;
  tabstractcontrol.prototype.create0.call(self, aid,aowner);
  self.name='L' + inttostr(lasttimername);
  lasttimername++;
  self.fenabled=false;
self.ontimer._o=null;self.ontimer._p="null";
  self.timerid=-1;
  self.interval=1000;
  self.callcount=0;
  self.suspended=false;
  self.freeonterminate=false;
  registeredtimers().push(self);
  return self;
}

function timer_destroy(){
  var self=this;
  self.setenable(false);
  registeredtimers().remove(self);
  tabstractcontrol.prototype.destroy.call(self);
}

function timer_setowner(aowner){
  var self=this;
  if(self.fownerctrl != null){
    self.fownerctrl.removechildtimer(self);
  }
  self.owner=self.fownerform;
  if(self.fownerform != null){
    self.fownerform.timers.push(self);
  }
  if(aowner != null){
    aowner.addchildtimer(self);
  }
}

function timer_resume(){
  var self=this;
  self.suspended=false;
  if(self.fenabled){
    self.setupnexttimeout();
  }
}

function timer_suspend(){
  var self=this;
  self.suspended=true;
}

function timer_setupnexttimeout(){
  var self=this;
  self.timerid=window.setTimeout(functionname(timercallback) + '(\"' + self.name + '\")',self.interval);
}

function timer_clearnexttimeout(){
  var self=this;
  if(self.timerid != -1){
    window.clearTimeout(self.timerid);
    self.timerid=-1;
  }
}

function timer_handletimerevent(){
  var self=this;
  if(assigned(self.ontimer)){
    if(assigned(window)){
      self.ontimer._o[self.ontimer._p](self);
    }
  }
}

function timer_setenable(b){
  var self=this;
  if(b == self.fenabled){
    return;
  }
  self.fenabled=b;
  if(self.fenabled){
    self.setupnexttimeout();
  }else 
    self.clearnexttimeout();
}

function Forms(formname){

  return xapp.getproperty_webform(formname);
}

function GetControlByName(formname,controlname){
  var result=null;
  var fm=null;
  result=null;
  fm=xapp.getproperty_webform(formname);
  if(fm != null){
    return fm.getcontrolbyname(controlname);
  }
  return result;
}

function GetScriptContext(xappid){
  var result=null;
  function checkdomwindow(p){
    var result=0;
    result=false;
    if(!assigned(p.isTopLvl)){
      return result;
    }
    if(p.isTopLvl == 1){
      return result;
    }
    if(!assigned(p.xappname)){
      return result;
    }
    return stringsequal(p.xappname,xappid);
  }
  function checkdirectparents(){
    var result=null;
    var p=null;
    result=null;
    p=window;
    do{
      if(checkdomwindow(p)){
        return p;
      }
      if(p == p.parent){
        return result;
      }
      p=p.parent;
      for(;!assigned(p.isTopLvl) && assigned(p.parent) && (p != p.parent);){
        p=p.parent;
      }
      if(!assigned(p.isTopLvl) && assigned(p.opener) && (p.opener != p)){
        p=p.opener;
      }
    }while(!(false));
    return result;
  }
  function checkall(){
    var result=null;
    var doc=null;
    var l=null;
    var i=0;
    function checkiframe(f){
      var result=null;
      var win=null;
      var temp=null;
      var doc=null;
      var l=null;
      var i=0;
      try{
        result=null;
        temp=f;
        if(assigned(temp.contentWindow)){
          win=temp.contentWindow;
          doc=temp.contentWindow.document;
        }else {
          win=temp.contentDocument.parentWindow;
          doc=temp.contentDocument;
        }
        if(checkdomwindow(win)){
          result=win;
          return result;
        }
        l=doc.getElementsByTagName('iframe');
        for(i=l.length - 1;i>=0;i--){
          result=checkiframe(l.item(i));
          if(result != null){
            return result;
          }
        }
      }catch(ExceptObject){
        result=null;
      }
      return result;
    }
    result=null;
    doc=document;
    l=doc.getElementsByTagName('iframe');
    for(i=l.length - 1;i>=0;i--){
      result=checkiframe(l.item(i));
      if(result != null){
        return result;
      }
    }
    return result;
  }
  function checkspecialcontexts(){
    var result=null;
    var win=null;
    result=null;
    win=window;
    if(stringsequal(xappid,'Top')){
      if(win != window.top){
        return window.top;
      }
    }else 
    if(stringsequal(xappid,'Parent')){
      if(win != win.parent){
        win=win.parent;
        for(;!assigned(win.isTopLvl) && assigned(win.parent) && (win != win.parent);){
          win=win.parent;
        }
        if(!assigned(win.isTopLvl) && assigned(win.opener) && (win.opener != win)){
          win=win.opener;
        }
        return win;
      }
    }
    return result;
  }
  if(stringsequal(xappid,'Parent') || stringsequal(xappid,'Top')){
    return checkspecialcontexts();
  }
  result=checkdirectparents();
  if(result != null){
    return result;
  }
  return checkall();
}

function GetSubFormByWindow(winhandle){
  var result=null;
  var i=0;
  function dogetsubform(ctrl){
    var result=null;
    var i=0;
    if(_IS(ctrl,subform)){
      if(ctrl.getexternaldocumenttitle() == winhandle.document.title){
        return ctrl;
      }
    }
    for(i=ctrl.childcount() - 1;i>=0;i--){
      result=dogetsubform(ctrl.childctrls[i]);
      if(result != null){
        return result;
      }
    }
    return null;
  }
  for(i=xapp.openforms.length - 1;i>=0;i--){
    result=dogetsubform(xapp.openforms[i]);
    if(result != null){
      return result;
    }
  }
  return null;
}

function ResizeSubForm(asubform,newheight){

  return asubform.groworshrink(newheight,true);
}

function ContextHeight(){

  var e=null;
  switch(bRoWsEr.engineid){
    case 'MS':
    return window.document.body.offsetHeight;
    case 'SF':
    return window.document.documentElement.scrollHeight;
    case 'OP':
    e=window.document.getElementById('__Root');
    return e.scrollHeight;
  default:
    return window.document.documentElement.offsetHeight;
  }
}

function IsFormReady(formname){
  var result=0;
  var fm=null;
  result=false;
  fm=xapp.getproperty_webform(formname);
  if(fm != null){
    return fm.fformreadystate == 4;
  }
  return result;
}

function geteventelement(domevent){
  var result=null;
  result=null;
  if(!assigned(domevent)){
    domevent=window.event;
  }
  if(assigned(domevent)){
    return (assigned(domevent.target))?domevent.target:domevent.srcElement;
  }
  return result;
}

function geteventtargetelement(domevent){
  var result=null;
  result=null;
  if(!assigned(domevent)){
    domevent=window.event;
  }
  if(assigned(domevent)){
    if(assigned(domevent.toElement)){
      return domevent.toElement;
    }else 
      try{
        if(assigned(domevent.relatedTarget)){
          result=domevent.relatedTarget;
        }
      }catch(e){
      }
  }
  return result;
}

function geteventbandindex(Event,Bnx){  
      return Event.bandindex != null ? Event.bandindex : Bnx;
  
}

function geteventrepeaterindex(Event,Rnx){  
      return Event.repeaterindex != null ? Event.repeaterindex : Rnx;
  
}

function geteventsource(domevent){

  var el=null;
  el=geteventelement(domevent);
  for(;assigned(el) && !assigned(el.wrapper);){
    el=el.parentNode;
  }
  return (assigned(el))?el.wrapper:null;
}

function switchbandindexbyctrl(ctrl){
  var result=0;
  var binx=0;
  var p=null;
  function doswitchbandindex(p){    var i=0;
    if(!p.isinplace()){
      p.bandindex=binx;
      for(i=0;i<=p.childcount() - 1;i++){
        doswitchbandindex(p.childctrls[i]);
      }
    }
  }
  result=-1;
  if(ctrl == null){
    return result;
  }
  binx=ctrl.bandindex;
  p=ctrl;
  for(;(p != null) && !((_IS(p,band)));){
    p=p.owner;
  }
  if(p != null){
    doswitchbandindex(p);
    return binx;
  }
  return result;
}

function getcontrolvalue(formname,ctrlname){
  var result="";
  var frm=null;
  var ctl=null;
  var valuewrapper=null;
  var serializer=null;
  result='';
  frm=xapp.getproperty_webform(formname);
  if(frm == null){
    return result;
  }
  ctl=frm.getcontrolbyname(ctrlname);
  if(ctl == null){
    return result;
  }
  valuewrapper=Create_tvaluewrapper();
  serializer=Create_tserializer().create();
  serializer.datarecord=valuewrapper;
  serializer.fieldname='v';
  ctl.serialize(serializer);
  return valuewrapper.v;
}

function _runxapp(){  xapp.run();
}

function _initxapp(){  if(window.document.getElementById('__Root') == null){
    window.setTimeout(functionname(_initxapp) + '()',100);
  }else {
    if(!assigned(xapp)){
      xapp=Create_txapp().create();
    }
    if((bRoWsEr.engineid == 'MS') && (bRoWsEr.version <= 7)){
      xapp.setmsiebackforwardiframe();
    }
    xapp.originaldomain=document.domain;
    if(xapp.allowdomainswitching){
      if(xapp.getproperty_rootdomain() != ''){
        document.domain=xapp.getproperty_rootdomain();
      }
    }
    xapp.rootsubform=Create_subform().create0('__Root',null);
    xapp.rootsubform.setupdomhandle();
    if(geturilanguage() != ''){
      currentlanguage=geturilanguage();
    }
    if(geturitheme() != ''){
      currenttheme=geturitheme();
    }
    xapp.loadmodule(currenttheme,_runxapp);
    if(currentlanguage != ''){
      xapp.loadmodule(currentlanguage,initcurrentlocale);
    }
  }
}

function ishtmlattrset(h,attrname){

  return (h != null) && assigned(h.getAttribute) && assigned(h.getAttribute(attrname));
}

_lddmods["SystemControls"]=true;
// (C) Copyright 2000 - 2007 Morfik Technology

function geteventtype     (a){return a.type}
function runscript        (a){eval(a)}
function lEngTH           (a){return a.length}
function createactivex    (c){try{return new ActiveXObject(c)}catch(e){return null}}
function createNSXMLDoc   (d) {return d.implementation.createDocument("", "", null)}
function canCreateNSXMLDoc(d) {return (d.implementation && d.implementation.createDocument) }
function getclasstype     (a){return a.zc}
function getclassname     (a){return a.zb}
function parseDate        (s){var m=Date.parse(s); if(isNaN(m))m=-1; return m}
function CreateDateTimeObj(){return new Date()}
function createRegExp     (s,f){return new RegExp(s,f)}
function defined          (c){return typeof(c)!="undefined";}
function debuggerBreak    (){debugger}
function createHash       (){var r = {}; return r;}

function free(o){if (typeof(o)=="object"&&o&&o.zd)o.zd();}

function getSafeDomain(d){
   var k = d.split(".");
   var b = false;
   for(var i = k.length - 1; i >= 0; i--){
      if(i == k.length - 1){
         d = k[i]
      }else{
         d = k[i] + "." + d;
      }
      if(!b){
         b=(".com.org.net.co.biz".search(k[i]) != -1);
      }else{
         return d;
      }
   }
   return d;
}

function assigned(c){
   if(typeof(c)=="undefined")return false;
   if(c!=void(0)){
      if(typeof(c._o)=="undefined")return true;
      return(c._o&&c._p);
   }else return false;
}

//using the amazing javascript closure technique!!
function getMethodPointer(o,m){
     if(m&&o)
      return function(){
                var bi=-1,ri=-1;

                var source=this;
                if (assigned(window.event))
                   if(assigned(window.event.srcElement))
                      source=window.event.srcElement;

                if (assigned(source.bandindex))
                   bi=source.bandindex

                if (assigned(source.repeaterindex))
                   ri=source.repeaterindex

                if (assigned(source.wrapper))
                   if(assigned(source.wrapper.bandindex))
                      if(source.id.toLowerCase().search('maindiv')==-1)
                        {source.wrapper.bandindex=bi;source.wrapper.repeaterindex=ri;}

                //firefox
                if(arguments.length>0){
                   if(arguments[0]!=null)
                      {arguments[0].bandindex=bi;arguments[0].repeaterindex=ri;}
                   return m.apply(o,arguments);
                }
                else
                //IE
                if (assigned(window.event)){
                   window.event.bandindex=bi;window.event.repeaterindex=ri;
                   return m.apply(o,[window.event]);
                }
                else
                   return m.apply(o,[this]);
             }
     else
      return null;
}


function createXMLHTTPRequest(){
   if (window.XMLHttpRequest)
       return new XMLHttpRequest();
   if (window.ActiveXObject)
       return new ActiveXObject('Microsoft.XMLHTTP');
   return null;
}

function getEvt(t,e){
    if(e)return e;
    function WE(w){if(!w)return null;return w.event}   
    e=WE(t.ownerwin); 
    if(!e)e=WE(t.parentWindow); 
    if(!e)if(t.document!=void(0))e=WE(t.document.parentWindow);
    if(!e)e=WE(_mw());
    return e;
}

function TBrowser(){
    var n=0;var majv=0;var minv=0;
    var UA=navigator.userAgent.toUpperCase();
    this.engine       = '';
    this.engineid     = '';
    this.version      = 0;
    this.minorVersion = 0;
    this.platform     = '';

    function readVersion(m){
        var a,b;
        while ((n<UA.length)&&                    (" ./"       .indexOf(UA.charAt(n))!=-1)) n+=1; a=n; 
        while ((n<UA.length)&&((m==-1)||(n-a<m))&&("0123456789".indexOf(UA.charAt(n))!=-1)) n+=1;
        if((m!=-1)&&(n-a>m))b=a+m; else b=n;
        try {return parseInt(UA.slice(a,b));} catch(x) {return 0;}    
    } 

    function checkEngine(s,m1,m2) {
        n = UA.indexOf(s);
        if(n==-1) return false;
        n = n + s.length + 1;
        majv = readVersion(m1);
        minv = readVersion(m2);
        return true;
    }

    if (UA.indexOf ('WIN'  )>0) this.platform = 'WIN'; else
    if (UA.indexOf ('MAC'  )>0) this.platform = 'MAC'; else
    if (UA.indexOf ('LINUX')>0) this.platform = 'LNX';
    if (checkEngine('SAFARI'   ,-1,-1)){this.engine = 'SAFARI';   this.engineid = 'SF';} else
    if (checkEngine('OPERA'    ,-1,-1)){this.engine = 'OPERA';    this.engineid = 'OP';} else
    if (checkEngine('MSIE'     ,-1,-1)){this.engine = 'MSIE';     this.engineid = 'MS';} else
    if (checkEngine('KONQUEROR',-1,-1)){this.engine = 'KONQUEROR';this.engineid = 'KQ';} else
    if (checkEngine('GECKO'    ,4 ,2 )){this.engine = 'GECKO';    this.engineid = 'GK';}
    this.version  = majv;
    this.minorVersion = minv;
    this.identifier = this.engine + '(' + this.engineid + ') ' + this.version + '.' + this.minorVersion + ' ' + this.platform;

    this.IsIE     = (this.engineid == 'MS');
    this.IsGecko  = (this.engineid == 'GK');
    this.IsOpera  = (this.engineid == 'OP');
    this.IsSafari = (this.engineid == 'SF');
    this.IsChrome = UA.indexOf("CHROME")>0;
    var p = navigator.platform?navigator.platform:"";
    this.IsiPad   = (p == "iPad");
    this.IsiPod   = (p == "iPod");
    this.IsiPhone = (p == "iPhone");  
    this.IsMobileSafari = this.IsSafari && (UA.indexOf('MOBILE')>0);
}
var bRoWsEr=new TBrowser();

function dbgEval(o,f){
  var s=""; 
  for(k in o){
      if(typeof(o[k])=="function"){
         if(f){s += k + "~~function\n"}
      }else{
         s += k + "~~" + o[k] + "\n"
      }
  } 
  return s;
}

function functionname(a){
  if(typeof(a)!="function"){return ""}
  var i=0;var d=" \r\n";
  var s=a.toString().split("(")[0];
  while(d.search(s.charAt(0))!=-1)s=s.slice(1);
  while(d.search(s.charAt(0))==-1)s=s.slice(1);
  while(d.search(s.charAt(0))!=-1)s=s.slice(1);
  while(d.search(s.charAt(i))==-1){i++}
  return s.slice(0,i);
}


var IsListRegistered=false;
function tlist(){}
function CreateList(InitFn,AssignFn,CreateFn,ConstructFn,IsDual){
    if (!IsListRegistered){
       tlist.prototype=q=new Object();
       q.grow        =tlgrow;
       q.setcapacity =tlsetcapacity;
       q.setcount    =tlsetcount;
       q.put         =tlput1;
       q.get         =tlget1;
       q.add         =tladd;
       q.checkindex  =tlcheckindex;
       q.clear       =tlclear;
       q.Destroy     =tldestroy;
       q.free        =tlfree;
       q.delete_     =tldelete;
       q.indexof     =tlindexof;
       q.insert      =tlinsert;
       q.pack        =tlpack;
       q.remove      =tlremove;
       q.sort        =tlsort;
       q.find        =tlfind;
       q.addnewitem  =tladdnewitem;
       q.EOF         =tlEOF;
       q.first       =tlfirst;
       q.last        =tllast;
       q.next        =tlnext;
       q.previous    =tlprevious;
       q.currentitem =tlcurrentitem;
       q.addressof   =tladdressof;

       q.fcapacity          = 0;
       q.fcount             = 0;
       q.fitemindex         = -1;
       q.fmemberInit        = null;
       q.fmemberAssign      = null;
       q.fmemberCreate      = null;
       q.fmemberConstructor = null;
       q.fIsDual            = true;
       q.fastMembers        = null;
       q.members            = null;

       IsListRegistered=true;
    }

    var p = new tlist();

    p.fcapacity          = 0;
    p.fcount             = 0;
    p.fitemindex         = -1;

    p.fmemberInit        = null;
    p.fmemberAssign      = null;
    p.fmemberCreate      = null;
    p.fmemberConstructor = null;
    p.fIsDual            = true;

    p.members            = new Object();
    p.members.v          = new Array ();
    p.fastMembers        = p.members.v;
    if(InitFn     !=void(0)){p.fmemberInit        =InitFn}
    if(AssignFn   !=void(0)){p.fmemberAssign      =AssignFn}
    if(CreateFn   !=void(0)){p.fmemberCreate      =CreateFn}
    if(ConstructFn!=void(0)){p.fmemberConstructor =ConstructFn}
    if(IsDual     !=void(0)){p.fIsDual            =IsDual}
    if(!p.fIsDual){
        p.put=tlput2;
        p.get=tlget2;
    }
    return p
}

function createfastlist(){
   return CreateList(null,null,null,null,false);
}

function setlength(a,l,InitFn,dual){
  var lth=a.length;
  if(l==lth)return;

  if(dual==void(0))dual=false;

  if(InitFn!=void(0)){
     for(var i=lth;i<l;i++){
        a[i]=InitFn(dual);
     }
     return
  }

  if(dual){
     for(var i=lth;i<l;i++){
           a[i]  =new Object();
           a[i].v=null;//new Object();
     }
     return
  }

  a.length=l;
}

function tlsetcapacity(newCapacity){
    if(newCapacity<this.fcount)return
    if(newCapacity!=this.fcapacity){
        setlength(this.fastMembers,newCapacity,this.fmemberInit,this.fIsDual);
        this.fcapacity=newCapacity;
    }
}

function tlgrow(){
    this.setcapacity(this.fcapacity+1);
}

function tlsetcount(newCount){
    if(newCount == this.fcount   )return
    if(newCount <  0             )return
    if(newCount >  this.fcapacity){this.setcapacity(newCount)}
//    this.fastMembers.length=newCount
    if(newCount < this.fcount){
       for(var i=newCount;i<this.fcount;i++){
          this.put(i,null);
       }
    }
    this.fcount = newCount;
}

function tlput1(Inx,Item){
    if (this.fmemberAssign!=null){this.fmemberAssign(Item,this.fastMembers[Inx])}
                            else {this.fastMembers[Inx].v=Item}
}

function tlget1(Inx){
    return this.fastMembers[Inx].v
}

function tlput2(Inx,Item){
   if (this.fmemberAssign!=null){this.fmemberAssign(Item,this.fastMembers[Inx])}
                           else {this.fastMembers[Inx]=Item}
}

function tlget2(Inx){
   return this.fastMembers[Inx]
}

function tladd(Item){
    with(this){
        if(fcount==fcapacity)grow()
        if(fmemberAssign!=null){fmemberAssign(Item,get(fcount))}
                          else {put(fcount,Item)}
        fcount+=1;
    }
}

function tlcheckindex(i){
    return ((i >= 0) && (i < this.fcount));
}

function tlclear(){
    this.setcount(0);
}

function tlfree(){
  this.clear();
  this.Destroy();
}

function tldestroy(){
//     if(this.fmemberAssign!=null){for(var i=0;i<this.fcapacity;i++){this.fmemberAssign(null,this.fmemberAssign[i]);}} 
//                            else {for(var i=0;i<this.fcapacity;i++){this.fastMembers[i].v=null;}}
     this.fastMembers   = null;
     this.members.v     = null;
     this.members       = null;
}

function tldelete(Inx){
    if(!this.checkindex(Inx)){return}

    if (this.fitemindex >= Inx){
       this.fitemindex--;
    }

    while(Inx < this.fcount-1){
       if (this.fmemberAssign!=null)
          this.fmemberAssign(this.fastMembers[Inx+1],this.fastMembers[Inx])
       else
       if (this.fIsDual)
           this.fastMembers[Inx].v = this.fastMembers[Inx+1].v;
       else
           this.fastMembers[Inx] = this.fastMembers[Inx+1];
       Inx=Inx+1;
    }
    this.fcount=this.fcount-1;
}

function tlindexof(Item){
    var result=null;
    result=0;
    while((result < this.fcount) && (this.get(result) != Item)){
        result=result + 1;
    }
    if(result == this.fcount){
        result=-1;
    }
    return result;
}

function tlinsert(Inx,Item){
    var i=null;
    if((Inx < 0) || (Inx > this.fcount)){
        return;
    }
    if(this.fcount == this.fcapacity){
        this.grow();
    }
    if(Inx < this.fcount){
        i=this.fcount;
        while(i > Inx){
            this.put(i,this.get(i-1));
            i=i-1;
        }
    }
    if (this.fmemberAssign!=null){this.fmemberAssign(Item,this.get(Inx))}
                            else {this.put(Inx,Item)}

    this.fcount=this.fcount + 1;
}

function tlpack(){
    var arrayhasholes=false;
    var i=0;
    while(i < this.fcount){
        if(this.fastMembers[i] == null){
            arrayhasholes=true;
            if(i < this.fcount - 1){
/*
                  if (this.fmemberAssign!=null){
                    this.fmemberAssign(this.get(i+1),this.get(i  ));
                    this.fmemberAssign(null         ,this.get(i+1));
                  } else {
                    this.put(i,this.get(i+1));
                    this.put(i+1,null);
                  }
*/
                  this.put(i,this.get(i+1));
                  this.put(i+1,null);
            }
        }
        i=i + 1;
    }
    if(!arrayhasholes){
        return;
    }
    i=0;
    while(i < this.fcount){
        if(this.get(i) == null){
            this.fcount=i;
            return;
        }else
            i=i + 1;
    }
}

function tlremove(Item){
    var result=null;
    result=this.indexof(Item);
    this.delete_(result);
    return result;
}


function tlsort(compare){
    function dosort(a,l,r){
        var i,j,k,p,t=null;
        do{
            i=l;
            j=r;
            k=(l+r) >> 1;
            p=a.get(k);
            do{
                while(compare(a.get(i),p) < 0){
                    i=i+1;
                }
                while(compare(a.get(j),p) > 0){
                    j=j-1;
                }
                if(i<=j){
                    t=a.get(i);
                    a.put(i,a.get(j));
                    a.put(j,t);
                    i=i+1;
                    j=j-1;
                }
            }while(!(i>j))
            if(l<j){
                dosort(a,l,j);
            }
            l=i;
        }while(!(i>=r))
    }

    if(this.fcount > 0){
        dosort(this,0,(this.fcount - 1));
    }
}

function tlfind(Item,compare,Inx){
    var L,H,I,C=null;
    L      = 0;
    H      = this.fcount - 1;
    while(L<=H){
        I = (L + H) >> 1;
        C = compare(this.get(I), Item);
        if(C<0){
           L=I+1
        } else {
            H=I-1;
            if(C==0){
              L     =I;
              Inx.v =I;
              return true;
            }
        }
    }
    Inx.v = L;
    return false;
}


function tladdnewitem(){
   if(this.fcount == this.fcapacity){this.grow()}
   if (this.fmemberCreate !=null){
      var m=this.fmemberCreate();
      if (this.fmemberConstructor!=null){
         m.x = this.fmemberConstructor;
         m.x();
         m.x=null;
      }
      this.add(m)
   } else{
      this.setcount(this.fcount+1);
   }
}

function tlEOF(){
    if (this.fcount==0){
      return true;
    }
    if (this.fitemindex >= this.fcount){
      return true;
    }
    return false;
}

function tlfirst(){
    if (this.fcount==0){
      this.fitemindex = -1;
      return;
    }
    this.fitemindex = 0;
}

function tllast(){
    if (this.fcount==0){
      this.fitemindex = -1;
      return;
    }
    this.fitemindex = this.fcount-1;
}

function tlnext(){
    if (this.fcount==0){
      this.fitemindex = -1;
      return;
    }
    this.fitemindex = this.fitemindex+1;
}

function tlprevious(){
    if (this.fcount==0){
      this.fitemindex = -1;
      return;
    }
    this.fitemindex = this.fitemindex-1;
    if (this.fitemindex<0){
      this.fitemindex=0;
    }
}

function tlcurrentitem(){
    if (this.fcount==0){
      return null;
    }
    return this.get(this.fitemindex);
}

function tladdressof(Inx){
    return this.fastMembers[Inx]
}

function XB_insertAdjacentHTML(element,position,html){

   if (element.insertAdjacentHTML!=void(0)){
       element.insertAdjacentHTML(position,html);
   }
   else
   if (document.createRange!=void(0)){
       var fragment;
       var parent;
       var range;
       var s;

       range = document.createRange();
       range.selectNode(element);

       fragment = range.createContextualFragment(html);
       parent   = element.parentNode;
       s        = position.toLowerCase();

       if (s == 'beforebegin'){return parent .insertBefore(fragment,element              )}
       if (s == 'afterbegin' ){return element.insertBefore(fragment,element.childNodes[0])}
       if (s == 'beforeend'  ){return element.appendChild (fragment                      )}
       if (s == 'afterend'   ){return parent .insertBefore(fragment,element.nextSibling  )}
   }
}

function getDomainSuffix(d){
   var k=d.split("."); var b=false;
   for(var i=k.length-1;i>=0;i--){
      if(i==k.length-1){d=k[i]}else{d=k[i]+"."+d};
      if(!b){b=(".com.org.net.co.biz".search(k[i])!=-1)}else{return d}}
   return d
}

if (!Array.prototype.filter)
{
  Array.prototype.filter = function(fun /*, thisp*/)
  {
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var res = new Array();
    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this)
      {
        var val = this[i]; // in case fun mutates this
        if (fun.call(thisp, val, i, this))
          res.push(val);
      }
    }

    return res;
  };
}

if (!Array.prototype.every)
{
  Array.prototype.every = function(fun /*, thisp*/)
  {
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this &&
          !fun.call(thisp, this[i], i, this))
        return false;
    }

    return true;
  };
}

if (!Array.prototype.forEach)
{
  Array.prototype.forEach = function(fun /*, thisp*/)
  {
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this)
        fun.call(thisp, this[i], i, this);
    }
  };
}

if (!Array.prototype.lastIndexOf)
{
  Array.prototype.lastIndexOf = function(elt /*, from*/)
  {
    var len = this.length;

    var from = Number(arguments[1]);
    if (isNaN(from))
    {
      from = len - 1;
    }
    else
    {
      from = (from < 0)
           ? Math.ceil(from)
           : Math.floor(from);
      if (from < 0)
        from += len;
      else if (from >= len)
        from = len - 1;
    }

    for (; from > -1; from--)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

if (!Array.prototype.map)
{
  Array.prototype.map = function(fun /*, thisp*/)
  {
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var res = new Array(len);
    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this)
        res[i] = fun.call(thisp, this[i], i, this);
    }

    return res;
  };
}

if (!Array.prototype.some)
{
  Array.prototype.some = function(fun /*, thisp*/)
  {
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this &&
          fun.call(thisp, this[i], i, this))
        return true;
    }

    return false;
  };
}

if (!Array.indexOf)
   Array.prototype.indexOf = function(obj,from){
      var len = this.length;
      for (var i = (from < 0) ? Math.max(0, len + from) : from || 0; i < len; i++){
          if (this[i] === obj) return i;
      }
      return -1;
   }

var SWFUpload;

Array.prototype.remove = 
function(a,b){if(typeof(b)=='undefined'){var i=this.indexOf(a);if(i>=0)this.splice(i,1);}else{this.splice(a,b-a+1);}}

// By Douglas Crockford
String.prototype.supplant = function (o) {
    return this.replace(/{([^{}]*)}/g,
        function (a, b) {
            var r = o[b];
            return typeof r === 'string' || typeof r === 'number' ? r : a;
        }
    );
};


/*
 * Date Format 1.2.2
 * (c) 2007-2008 Steven Levithan <stevenlevithan.com>
 * MIT license
 * Includes enhancements by Scott Trenda <scott.trenda.net> and Kris Kowal <cixar.com/~kris.kowal/>
 *
 * Accepts a date, a mask, or a date and a mask.
 * Returns a formatted version of the given date.
 * The date defaults to the current date/time.
 * The mask defaults to dateFormat.masks.default.
 */
var jsFormatDateTime = function () {
        var     token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
                timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
                timezoneClip = /[^-+\dA-Z]/g,
                pad = function (val, len) {
                        val = String(val);
                        len = len || 2;
                        while (val.length < len) val = "0" + val;
                        return val;
                };

        // Regexes and supporting functions are cached through closure
        return function (date, mask, utc) {
                var dF = jsFormatDateTime;

                // You can't provide utc if you skip other args (use the "UTC:" mask prefix)
                if (arguments.length == 1 && (typeof date == "string" || date instanceof String) && !/\d/.test(date)) {
                        mask = date;
                        date = undefined;
                }

                // Passing date through Date applies Date.parse, if necessary
                date = date ? new Date(date) : new Date();
                if (isNaN(date)) throw new SyntaxError("invalid date");

                mask = String(dF.masks[mask] || mask || dF.masks["default"]);

                // Allow setting the utc argument via the mask
                if (mask.slice(0, 4) == "UTC:") {
                        mask = mask.slice(4);
                        utc = true;
                }

                var     _ = utc ? "getUTC" : "get",
                        d = date[_ + "Date"](),
                        D = date[_ + "Day"](),
                        m = date[_ + "Month"](),
                        y = date[_ + "FullYear"](),
                        H = date[_ + "Hours"](),
                        M = date[_ + "Minutes"](),
                        s = date[_ + "Seconds"](),
                        L = date[_ + "Milliseconds"](),
                        o = utc ? 0 : date.getTimezoneOffset(),
                        flags = {
                                d:    d,
                                dd:   pad(d),
                                ddd:  dF.i18n.dayNames[D],
                                dddd: dF.i18n.dayNames[D + 7],
                                m:    m + 1,
                                mm:   pad(m + 1),
                                mmm:  dF.i18n.monthNames[m],
                                mmmm: dF.i18n.monthNames[m + 12],
                                yy:   String(y).slice(2),
                                yyyy: y,
                                h:    H % 12 || 12,
                                hh:   pad(H % 12 || 12),
                                H:    H,
                                HH:   pad(H),
                                M:    M,
                                MM:   pad(M),
                                s:    s,
                                ss:   pad(s),
                                l:    pad(L, 3),
                                L:    pad(L > 99 ? Math.round(L / 10) : L),
                                t:    H < 12 ? "a"  : "p",
                                tt:   H < 12 ? "am" : "pm",
                                T:    H < 12 ? "A"  : "P",
                                TT:   H < 12 ? "AM" : "PM",
                                Z:    utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
                                o:    (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
                                S:    ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
                        };

                return mask.replace(token, function ($0) {
                        return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
                });
        };
}();

// Some common format strings
jsFormatDateTime.masks = {
        "default":      "ddd mmm dd yyyy HH:MM:ss",
        shortDate:      "m/d/yy",
        mediumDate:     "mmm d, yyyy",
        longDate:       "mmmm d, yyyy",
        fullDate:       "dddd, mmmm d, yyyy",
        shortTime:      "h:MM TT",
        mediumTime:     "h:MM:ss TT",
        longTime:       "h:MM:ss TT Z",
        isoDate:        "yyyy-mm-dd",
        isoTime:        "HH:MM:ss",
        isoDateTime:    "yyyy-mm-dd'T'HH:MM:ss",
        isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};

// Internationalization strings
jsFormatDateTime.i18n = {
        dayNames: [
                "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
                "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
        ],
        monthNames: [
                "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
                "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
        ]
};

//from http://www.json.org/json2.js
if(!this.JSON){this.JSON={}}(function(){function f(n){return n<10?'0'+n:n}if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+'-'+f(this.getUTCMonth()+1)+'-'+f(this.getUTCDate())+'T'+f(this.getUTCHours())+':'+f(this.getUTCMinutes())+':'+f(this.getUTCSeconds())+'Z':null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==='string'?c:'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key)}if(typeof rep==='function'){value=rep.call(holder,key,value)}switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null'}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==='[object Array]'){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||'null'}v=partial.length===0?'[]':gap?'[\n'+gap+partial.join(',\n'+gap)+'\n'+mind+']':'['+partial.join(',')+']';gap=mind;return v}if(rep&&typeof rep==='object'){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==='string'){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v)}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v)}}}}v=partial.length===0?'{}':gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+mind+'}':'{'+partial.join(',')+'}';gap=mind;return v}}if(typeof JSON.stringify!=='function'){JSON.stringify=function(value,replacer,space){var i;gap='';indent='';if(typeof space==='number'){for(i=0;i<space;i+=1){indent+=' '}}else if(typeof space==='string'){indent=space}rep=replacer;if(replacer&&typeof replacer!=='function'&&(typeof replacer!=='object'||typeof replacer.length!=='number')){throw new Error('JSON.stringify');}return str('',{'':value})}}if(typeof JSON.parse!=='function'){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==='object'){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+text+')');return typeof reviver==='function'?walk({'':j},''):j}throw new SyntaxError('JSON.parse');}}}());

function jsonDateReviver(key, value)
{
    var a;
    if (typeof value === 'string') 
    {
        a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
        if (a) 
        {
            return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]));
        }
    }
    return value;
};
function econverterror(){}
function Register_econverterror(){
  if(IsRegisteredeconverterror)return;
  Register_texception();
  var p=new texception();
  p.zb="econverterror";
  p.zc=econverterror;
  p.ParentClass=texception;
  econverterror.prototype=p;
  IsRegisteredeconverterror=true;
}
function Create_econverterror(p){
  Register_econverterror();
  if(p==void(0))var p=new econverterror();
  p=Create_texception(p);
  p.zb="econverterror";
  return p
}

function Init_tdatetimeoptions(w,d){
  if(w){
    var p=AddWrapper(new Object());
    var q=p.v;
  } else {
    var p={};
    var q=p;
  }
  q.defaultmode=0;
  q.defaultformat=0;
  q.converttoutctime=0;
  if(d != void(0)){
    SetVal_tdatetimeoptions(d,p);
  }
  return p
}

function SetVal_tdatetimeoptions(d,p){
  p=GetVal(p);
  p.defaultmode=SetVal(p.defaultmode,GetVal(d.defaultmode));
  p.defaultformat=SetVal(p.defaultformat,GetVal(d.defaultformat));
  p.converttoutctime=SetVal(p.converttoutctime,GetVal(d.converttoutctime));
}

var datetimeoptions=Init_tdatetimeoptions(false);
function __string_split(__self,separator){

  return __self.split(separator);
}

function __string_equals(__self,astring){

  return (__string_length(__self) == __string_length(astring)) && (__string_toupper(__self) == __string_toupper(astring));
}

function __string_toupper(__self){

  return __self.toUpperCase();
}

function __string_tolower(__self){

  return __self.toLowerCase();
}

function __string_charat(__self,aindex){

  return __self.charAt(aindex-1);
}

function __string_length(__self){

  return __self.length;
}

function __string_substring(__self,astartindex,alength){

  return __self.substring(astartindex - 1,astartindex - 1 + alength);
}

function __string_startswith0(__self,astring,pos){

  return ((__string_length(astring) + pos - 1) <= __string_length(__self)) && (__string_toupper(astring) == __string_toupper(__string_substring(__self,pos,__string_length(astring))));
}

function __string_startswith(__self,astring){

  return (__string_length(astring) <= __string_length(__self)) && (__string_toupper(astring) == __string_toupper(__string_substring(__self,1,__string_length(astring))));
}

function __string_isempty(__self){

  return __self == '';
}

function __string_endswith(__self,astring){

  return (__string_length(astring) <= __string_length(__self)) && (__string_toupper(astring) == __string_toupper(__string_substring(__self,__string_length(__self) - __string_length(astring) + 1,__string_length(astring))));
}

function __string_indexof(__self,astring){
  var result=0;
  result=0;
  if(astring != ''){
    return __self.indexOf(astring,0) + 1;
  }
  return result;
}

function __string_lastindexof(__self,astring){
  var result=0;
  result=0;
  if(astring != ''){
    return __self.lastIndexOf(astring) + 1;
  }
  return result;
}

function __string_tointeger(__self){

  return ___integer_fromstring(__self);
}

function _TrimEnd(aString){  
      return aString.replace(/\s+$/, "");
  
}

function _IsAlpha(aString){  
      return /^[a-zA-Z]+$/.test(aString);
  
}

function _IsAlphaNum(aString){  
      return /^[a-zA-Z0-9]+$/.test(aString);
  
}

function _Chr(Code){  
      return String.fromCharCode(Code);
  
}

function __string_trimend(__self){

  return _TrimEnd(__self);
}

function __char_asccode(__self){

  return __self.charCodeAt(0);
}

function __char_isalpha(__self){

  return _IsAlpha(__self);
}

function __char_isalphanum(__self){

  return _IsAlphaNum(__self);
}

function ___char_tolower(achar){

  return lowercase(achar).charAt(1-1);
}

function ___char_toupper(achar){

  return uppercase(achar).charAt(1-1);
}

function __char_iswhitespace(__self){

  var r=null;
  r=createRegExp('\\s','');
  return r.test(__self);
}

function __char_isdigit(__self){

  var r=null;
  r=createRegExp('\\d','');
  return r.test(__self);
}

function __integer_tochar(__self){

  return _Chr(__self);
}

function __integer_tostring(__self){

  return '' + __self;
}

function ___integer_fromstring(astring){

  var temp={v:0};
  if(!___integer_tryparse(astring,temp)){
    throw Create_econverterror().create(astring + ' is not a valid integer value.');
  }
  return temp.v;
}

function ___integer_tryparse(astring,aresult){
  var result=0;
  var temp=0;
  temp=parseInt(astring,10);
  result=!isNaN(temp);
  if(result){
    aresult.v=temp;
  }
  return result;
}

function __double_isinfinity(__self){

  return !isFinite(__self);
}

_lddmods["SystemHelperMethods"]=true;
_lddmods["SystemDOM"]=true;
function thtmlstyler(){}
function Register_thtmlstyler(){
  if(IsRegisteredthtmlstyler)return;
  Register_tobject();
  var p=new tobject();
  p.zb="thtmlstyler";
  p.zc=thtmlstyler;
  p.ParentClass=tobject;
  p.create=thtmlstyler_create;
  p.zd=p.destroy=thtmlstyler_destroy;
  p.addstring=thtmlstyler_addstring;
  p.addinteger=thtmlstyler_addinteger;
  p.addcoord=thtmlstyler_addcoord;
  p.addcolor=thtmlstyler_addcolor;
  p.addheightcoord=thtmlstyler_addheightcoord;
  p.addwidthcoord=thtmlstyler_addwidthcoord;
  p.setborder=thtmlstyler_setborder;
  p.setfont=thtmlstyler_setfont;
  p.setalignment=thtmlstyler_setalignment;
  p.get=thtmlstyler_get;
  thtmlstyler.prototype=p;
  IsRegisteredthtmlstyler=true;
}
function Create_thtmlstyler(p){
  Register_thtmlstyler();
  if(p==void(0))var p=new thtmlstyler();
  p=Create_tobject(p);
  p.zb="thtmlstyler";
  p.content="";
  return p
}

function thtmlstyler_create(){
  var self=this;
  tobject.prototype.create.call(self);
  self.content='';
  return self;
}

function thtmlstyler_destroy(){
  var self=this;
  self.content='';
  tobject.prototype.destroy.call(self);
}

function thtmlstyler_addstring(n,v){
  var self=this;
  if(v != ''){
    self.content=(self.content != '')?self.content + ';' + n + ':' + v:n + ':' + v;
  }
}

function thtmlstyler_addinteger(n,v){
  var self=this;
  self.addstring(n,__integer_tostring(v));
}

function thtmlstyler_addcoord(n,v,u){
  var self=this;
  self.addstring(n,__integer_tostring(v) + u);
}

function thtmlstyler_addcolor(n,c){
  var self=this;
  if(c == cnocolorspecified){
    return;
  }
  self.addstring(n,colortohtmlhex(c));
}

function thtmlstyler_addheightcoord(v,borderwidth){
  var self=this;
  v-=(borderwidth * 2);
  if(v < 0){
    v=0;
  }
  self.addcoord('height',v,'px');
}

function thtmlstyler_addwidthcoord(v,borderwidth){
  var self=this;
  v-=(borderwidth * 2);
  if(v < 0){
    v=0;
  }
  self.addcoord('width',v,'px');
}

function thtmlstyler_setborder(color,width,borderstyle,sides){
  var self=this;
  var lighter="";
  var darker="";
  var cl="";
  var s="";
  if(color != cnocolorspecified){
    darker=colortohtmlhex(changecolorbrightness(color,-40));
    lighter=colortohtmlhex(changecolorbrightness(color,40));
    cl=colortohtmlhex(color);
  }else {
    cl='transparent';
    darker=cl;
    lighter=cl;
  }
  switch(borderstyle){
    case 0:
    return;
    case 1:
    s=cl + ' ' + inttostr(width) + 'px solid';
    if(_InSet(0,sides)){
      self.addstring('BORDER-LEFT',s);
    }
    if(_InSet(3,sides)){
      self.addstring('BORDER-BOTTOM',s);
    }
    if(_InSet(2,sides)){
      self.addstring('BORDER-RIGHT',s);
    }
    if(_InSet(1,sides)){
      self.addstring('BORDER-TOP',s);
    }
    break;
    case 3:
    s=' ' + inttostr(width) + 'px solid';
    if(_InSet(0,sides)){
      self.addstring('BORDER-LEFT',lighter + s);
    }
    if(_InSet(3,sides)){
      self.addstring('BORDER-BOTTOM',darker + s);
    }
    if(_InSet(2,sides)){
      self.addstring('BORDER-RIGHT',darker + s);
    }
    if(_InSet(1,sides)){
      self.addstring('BORDER-TOP',lighter + s);
    }
    break;
    case 6:
    self.addstring('BORDER-STYLE','inset');
    self.addstring('BORDER-WIDTH','2');
    break;
    case 2:
    s=' ' + inttostr(width) + 'px solid';
    if(_InSet(0,sides)){
      self.addstring('BORDER-LEFT',s);
    }
    if(_InSet(3,sides)){
      self.addstring('BORDER-BOTTOM',s);
    }
    if(_InSet(2,sides)){
      self.addstring('BORDER-RIGHT',s);
    }
    if(_InSet(1,sides)){
      self.addstring('BORDER-TOP',s);
    }
    break;
    case 4:
    s=cl + ' ' + inttostr(width) + 'px dotted';
    if(_InSet(0,sides)){
      self.addstring('BORDER-LEFT',s);
    }
    if(_InSet(3,sides)){
      self.addstring('BORDER-BOTTOM',s);
    }
    if(_InSet(2,sides)){
      self.addstring('BORDER-RIGHT',s);
    }
    if(_InSet(1,sides)){
      self.addstring('BORDER-TOP',s);
    }
    break;
    case 5:
    s=cl + ' ' + inttostr(width) + 'px dashed';
    if(_InSet(0,sides)){
      self.addstring('BORDER-LEFT',s);
    }
    if(_InSet(3,sides)){
      self.addstring('BORDER-BOTTOM',s);
    }
    if(_InSet(2,sides)){
      self.addstring('BORDER-RIGHT',s);
    }
    if(_InSet(1,sides)){
      self.addstring('BORDER-TOP',s);
    }
  }
}

function thtmlstyler_setfont(font){
  var self=this;
  font=Init_tfont(false,font);
  self.addstring('font-family',font.name);
  self.addcolor('color',font.color);
  if(font.height != cnofontsizespecified){
    self.addstring('font-size',inttostr(font.height) + 'pt');
  }
  if(_InSet(1,font.style)){
    self.addstring('font-style','italic');
  }else 
    self.addstring('font-style','normal');
  if(_InSet(0,font.style)){
    self.addstring('font-weight','bolder');
  }else 
    self.addstring('font-weight','normal');
  if((_InSet(2,font.style)) && (_InSet(3,font.style))){
    self.addstring('text-decoration','underline line-through');
  }else 
  if(_InSet(2,font.style)){
    self.addstring('text-decoration','underline');
  }else 
  if(_InSet(3,font.style)){
    self.addstring('text-decoration','line-through');
  }else 
    self.addstring('text-decoration','none');
}

function thtmlstyler_setalignment(alignment){
  var self=this;
  var ta="";
  switch(alignment){
    case 0:
    ta='left';
    break;
    case 1:
    ta='center';
    break;
    case 2:
    ta='right';
    break;
    case 3:
    ta='justify';
  }
  if(ta != ''){
    self.addstring('text-align',ta);
  }
}

function thtmlstyler_get(){
  var self=this;

  return 'style=\"' + self.content + '\"';
}

function xb_attacheventhandler(h,eventname,eventhandler){  if(assigned(h.addEventListener)){
    h.addEventListener(eventname,eventhandler,false);
  }else 
  if(assigned(h.attachEvent)){
    h.attachEvent('on' + eventname,eventhandler);
  }
}

function xb_detacheventhandler(h,eventname,eventhandler){  if(assigned(h.removeEventListener)){
    h.removeEventListener(eventname,eventhandler,false);
  }else 
  if(assigned(h.detachEvent)){
    h.detachEvent('on' + eventname,eventhandler);
  }
}

function hookupallhyperlinkevents(h,p){  
     if (h.getElementsByTagName) {
         var links = h.getElementsByTagName("a");
         for (var i=0; i < links.length; i++) {
            if (links[i].className.match("HijaxLink")) {
                links[i].onclick = function() {
                       p(this, this.getAttribute("href"), this.getAttribute("target"));
                       return false;
               };
           }
         }
     }
  
}

function unhookallhyperlinkevents(h){  
     if (h.getElementsByTagName) {
         var links = h.getElementsByTagName("a");
         for (var i=0; i < links.length; i++) {
             if (links[i].className.match("HijaxLink" )) {
                 links[i].onclick = null;
             }
         }
     }
  
}

_lddmods["SystemDOMHtml"]=true;
function Init_vxhslcolor(w,d){
  if(w){
    var p=AddWrapper(new Object());
    var q=p.v;
  } else {
    var p={};
    var q=p;
  }
  q.saturation=0.0;
  q.hue=0.0;
  q.lum=0.0;
  if(d != void(0)){
    SetVal_vxhslcolor(d,p);
  }
  return p
}

function SetVal_vxhslcolor(d,p){
  p=GetVal(p);
  p.saturation=SetVal(p.saturation,GetVal(d.saturation));
  p.hue=SetVal(p.hue,GetVal(d.hue));
  p.lum=SetVal(p.lum,GetVal(d.lum));
}

function Init_vxrgbcolor(w,d){
  if(w){
    var p=AddWrapper(new Object());
    var q=p.v;
  } else {
    var p={};
    var q=p;
  }
  q.red=0;
  q.green=0;
  q.blue=0;
  if(d != void(0)){
    SetVal_vxrgbcolor(d,p);
  }
  return p
}

function SetVal_vxrgbcolor(d,p){
  p=GetVal(p);
  p.red=SetVal(p.red,GetVal(d.red));
  p.green=SetVal(p.green,GetVal(d.green));
  p.blue=SetVal(p.blue,GetVal(d.blue));
}

function nan(){  
      return Number.NaN;
  
}

function strtobool(s){

  return stringsequal(s,'True');
}

function inttostr(i){

  return '' + i;
}

function floattostr(i){

  return '' + i;
}

function floattolocalestring(i,format){
  var result="";
  if(currentlocale != null){
    with(currentlocale.numericlocale){
      if(format == ''){
        format='g';
      }
      result=tostring(i,getnumericformat(format),'');
    }
  }else 
    return floattostr(i);
  return result;
}

function localestringtofloat(s,format){
  var result=0.0;
  var value={v:0.0};
  if(currentlocale != null){
    with(currentlocale.numericlocale){
      if(format == ''){
        format='g';
      }
      result=(tryparse(s,getnumericformat(format),value,''))?value.v:nan();
    }
  }else 
    return strtofloat(s);
  return result;
}

function localestringtocurrency(s,format){
  var result=0.0;
  var value={v:0.0};
  if(currentlocale != null){
    with(currentlocale.numericlocale){
      if(format == ''){
        format='c';
      }
      result=(tryparse(s,getnumericformat(format),value,''))?value.v:nan();
    }
  }else 
    return strtofloat(s);
  return result;
}

function currencytolocalestring(i,format){
  var result="";
  if(currentlocale != null){
    with(currentlocale.numericlocale){
      if(format == ''){
        format='c';
      }
      result=tostring(i,getnumericformat(format),'');
    }
  }else 
    return floattostr(i);
  return result;
}

function showmessage(message){  alert(message);
}

function stringsequal(s1,s2){
  var result=0;
  try{
    result=(s1.length == s2.length) && (s1.toUpperCase() == s2.toUpperCase());
  }catch(ExceptObject){
    result=false;
  }
  return result;
}

function lowercase(s){
  var result="";
  try{
    result=s.toLowerCase();
  }catch(ExceptObject){
    result=s;
  }
  return result;
}

function uppercase(s){
  var result="";
  try{
    result=s.toUpperCase();
  }catch(ExceptObject){
    result=s;
  }
  return result;
}

function escaperegexp(S){  
  return S.replace(/([-.*+?^${}()|[\]\/\\])/g, '\\$1');
  
}

function replacestring(s,fromstr,tostr){

  return s.replace(createRegExp(escaperegexp(fromstr),'g'),tostr);
}

function pos(s1,s2){

  return s2.indexOf(s1,0) + 1;
}

function backpos(s1,s2){

  return s2.lastIndexOf(s1) + 1;
}

function jpos(s1,s2,startinx){

  return s2.indexOf(s1,startinx) + 1;
}

function copy(s,inx,count){

  return s.slice(inx - 1,inx - 1 + count);
}

function delete_(s,inx,count){  s.v=s.v.slice(0,inx - 1) + s.v.slice(inx - 1 + count,s.v.length);
}

function insert(source,s,index){  s.v=s.v.substr(0,index - 1) + source + s.v.slice(index - 1);
}

function strtoint(s){
  var result=0;
  result=parseInt(s,10);
  if(isNaN(result)){
    throw Create_texception().create('Error invalid number:' + s);
  }
  return result;
}

function strtointdef(s,adefault){
  var result=0;
  result=parseInt(s,10);
  if(isNaN(result)){
    return adefault;
  }
  return result;
}

function strtofloat(s){

  return parseFloat(s);
}

function floor(x){

  return Math.floor(x);
}

function round(x){

  return Math.round(x);
}

function ceil(x){

  return Math.ceil(x);
}

function min(a,b){

  return (a < b)?a:b;
}

function max(a,b){

  return (a > b)?a:b;
}

function hextoint(hex){

  return parseInt(hex,16);
}

function getweekdaystr(d,format){
  var result="";
  result='';
  if((d >= 0) && (d < 7)){
    switch(format){
      case 2:
      if(currentlocale != null){
        return currentlocale.datetimelocale.abbreviateddaynames[d];
      }else {
        switch(d){
          case 0:
          return 'S';
          case 1:
          return 'M';
          case 2:
          return 'T';
          case 3:
          return 'W';
          case 4:
          return 'T';
          case 5:
          return 'F';
          case 6:
          return 'S';
        }
      }
      break;
      case 1:
      if(currentlocale != null){
        return currentlocale.datetimelocale.shortdaynames[d];
      }else {
        switch(d){
          case 0:
          return 'Sun';
          case 1:
          return 'Mon';
          case 2:
          return 'Tue';
          case 3:
          return 'Wed';
          case 4:
          return 'Thu';
          case 5:
          return 'Fri';
          case 6:
          return 'Sat';
        }
      }
      break;
    default:
      if(currentlocale != null){
        return currentlocale.datetimelocale.daynames[d];
      }else {
        switch(d){
          case 0:
          return 'Sunday';
          case 1:
          return 'Monday';
          case 2:
          return 'Tuesday';
          case 3:
          return 'Wednesday';
          case 4:
          return 'Thursday';
          case 5:
          return 'Friday';
          case 6:
          return 'Saturday';
        }
      }
    }
  }
  return result;
}

function getmonthstr(m,format){
  var result="";
  result='';
  if((m >= 1) && (m <= 12)){
    if((format == 2) || (format == 3)){
      if(currentlocale != null){
        return currentlocale.datetimelocale.shortmonthnames[m - 1];
      }else 
        switch(m){
          case 1:
          return 'Jan';
          case 2:
          return 'Feb';
          case 3:
          return 'Mar';
          case 4:
          return 'Apr';
          case 5:
          return 'May';
          case 6:
          return 'Jun';
          case 7:
          return 'Jul';
          case 8:
          return 'Aug';
          case 9:
          return 'Sep';
          case 10:
          return 'Oct';
          case 11:
          return 'Nov';
          case 12:
          return 'Dec';
        }
    }else {
      if(currentlocale != null){
        return currentlocale.datetimelocale.monthnames[m - 1];
      }else 
        switch(m){
          case 1:
          return 'January';
          case 2:
          return 'February';
          case 3:
          return 'March';
          case 4:
          return 'April';
          case 5:
          return 'May';
          case 6:
          return 'June';
          case 7:
          return 'July';
          case 8:
          return 'August';
          case 9:
          return 'September';
          case 10:
          return 'October';
          case 11:
          return 'November';
          case 12:
          return 'December';
        }
    }
  }
  return result;
}

function year(date){

  return (date == nildatetime)?0:date.getFullYear();
}

function month(date){

  return (date == nildatetime)?0:date.getMonth() + 1;
}

function day(date){

  return (date == nildatetime)?0:date.getDate();
}

function hour(time){

  return (time == nildatetime)?0:time.getHours();
}

function minute(time){

  return (time == nildatetime)?0:time.getMinutes();
}

function second(time){

  return (time == nildatetime)?0:time.getSeconds();
}

function millisecond(time){

  return (time == nildatetime)?0:time.getMilliseconds();
}

function encodedatetime(Y,M,D,H,Mt,S,Ms){  var d=new Date();d.setHours(H,Mt,S,Ms);d.setFullYear(Y,M-1,D);return d;
}

function encodeutcdate(y,m,d){

  return encodeutcdatetime(y,m,d,0,0,0,0);
}

function encodeutctime(H,Mt,S,Ms){  var d=new Date();d.setUTCHours(H,Mt,S,Ms);return d;
}

function encodeutcdatetime(Y,M,D,H,Mt,S,Ms){  var d=new Date();d.setUTCHours(H,Mt,S,Ms);d.setUTCFullYear(Y,M-1,D);return d;
}

function datetimetolocalestring(datetime,format,mode,aslocaltime,pattern){

  var loc=null;
  if(currentlocale != null){
    loc=currentlocale.datetimelocale;
    if(pattern == ''){
      switch(mode){
        case 1:
        pattern=loc.dateformats[format];
        break;
        case 2:
        pattern=loc.timeformats[format];
        break;
      default:
        pattern=loc.dateformats[format] + ' ' + loc.timeformats[format];
      }
    }
    return loc.tostring(datetime,pattern,aslocaltime);
  }else 
    return datetimetostring(datetime,format,mode,aslocaltime);
}

function datetimetostring(datetime,format,mode,converttolocaltime){
  var result="";
  var y=0;
  var m=0;
  var d=0;
  var h=0;
  var u=0;
  var s=0;
  var dayofweek=0;
  var ampm="";
  var date="";
  var time="";
  function inttotimestr(k){
    var result="";
    result=inttostr(k);
    if(lEngTH(result) == 1){
      return '0' + result;
    }
    return result;
  }
  if(datetime == nildatetime){
    return '';
  }
  result='';
  date='';
  time='';
  if(_InSet(mode,_ISet(false,1,1,0,0))){
    if(converttolocaltime){
      y=datetime.getFullYear();
      m=datetime.getMonth() + 1;
      d=datetime.getDate();
      dayofweek=datetime.getDay();
    }else {
      y=datetime.getUTCFullYear();
      m=datetime.getUTCMonth() + 1;
      d=datetime.getUTCDate();
      dayofweek=datetime.getUTCDay();
    }
    if(y != -1){
      switch(format){
        case 0:
        date+=getweekdaystr(dayofweek,0) + ', ';
        date+=inttostr(d);
        date+=' ' + getmonthstr(m,2);
        date+=' ';
        date+=inttostr(y);
        break;
        case 1:
        date+=inttostr(d);
        date+=' ' + getmonthstr(m,2);
        date+=' ';
        date+=inttostr(y);
        break;
        case 2:
        date+=inttostr(d);
        date+='/' + inttostr(m);
        date+='/';
        date+=inttostr(y);
        break;
        case 3:
        date+=inttostr(m);
        date+='/' + inttostr(d);
        date+='/';
        date+=inttostr(y);
      }
    }
    result=date;
  }
  if(_InSet(mode,_ISet(false,2,2,0,0))){
    if(converttolocaltime){
      h=datetime.getHours();
      u=datetime.getMinutes();
      s=datetime.getSeconds();
    }else {
      h=datetime.getUTCHours();
      u=datetime.getUTCMinutes();
      s=datetime.getUTCSeconds();
    }
    time='';
    if(h != -1){
      if(_InSet(format,_ISet(false,0,0,1,1))){
        ampm='AM';
        if(h >= 12){
          ampm='PM';
          if(h > 12){
            h-=12;
          }
        }
      }
      time+=inttotimestr(h) + ':' + inttotimestr(u);
      if(format == 0){
        time+=':' + inttotimestr(s) + ' ' + ampm;
      }else 
      if(format == 1){
        time+=' ' + ampm;
      }
    }
    return (result != '')?result + ' ' + time:time;
  }
  return result;
}

function localestringtodatetime(s,format,mode,islocaltime,pattern){

  var loc=null;
  var datetime={v:null};
  if(currentlocale != null){
    loc=currentlocale.datetimelocale;
    if(pattern == ''){
      switch(mode){
        case 1:
        pattern=loc.dateformats[format];
        break;
        case 2:
        pattern=loc.timeformats[format];
        break;
      default:
        pattern=loc.dateformats[format] + ' ' + loc.timeformats[format];
      }
    }
    return (loc.tryparse(s,pattern,datetime,islocaltime,false))?datetime.v:null;
  }else 
    return stringtodatetime(s,format,mode,!islocaltime);
}

function stringtodatetime(s,format,mode,converttoutctime){
  var result=null;
  s={v:s};
  var k=0;
  function preprocessdatetimestring(){    var s1="";
    var s2="";
    var i=0;
    switch(format){
      case 2:
      i=pos('/',s.v);
      if(i > 0){
        s1=copy(s.v,1,i - 1);
        delete_(s,1,i);
      }else 
        s1='';
      i=pos('/',s.v);
      if(i > 0){
        s2=copy(s.v,1,i - 1);
        delete_(s,1,i);
      }else 
        s2='';
      i=parseInt(s2,10);
      if((i >= 1) && (i <= 12)){
        s2=getmonthstr(i,2);
      }
      s.v=s1 + ' ' + s2 + ' ' + s.v;
      break;
      case 3:
      i=pos('/',s.v);
      if(i > 0){
        s1=copy(s.v,1,i - 1);
        delete_(s,1,i);
      }else 
        s1='';
      i=pos('/',s.v);
      if(i > 0){
        s2=copy(s.v,1,i - 1);
        delete_(s,1,i);
      }else 
        s2='';
      i=parseInt(s1,10);
      if((i >= 1) && (i <= 12)){
        s1=getmonthstr(i,2);
      }
      s.v=s2 + ' ' + s1 + ' ' + s.v;
    }
  }
  preprocessdatetimestring();
  k=parseDate(s.v);
  if(k == -1){
    return null;
  }
  result=CreateDateTimeObj();
  if(converttoutctime){
    k-=(result.getTimezoneOffset() * 1000 * 60);
  }
  result.setFullYear(1970,0,1);
  result.setTime(0);
  result.setDate(floor(k / (1000 * 60 * 60 * 24)));
  result.setTime(k);
  return result;
}

function now(){

  return CreateDateTimeObj();
}

function gettimezoneoffset(){
  var result=0;
  var jdt=null;
  jdt=CreateDateTimeObj();
  result=jdt.getTimezoneOffset();
  jdt=null;
  return result;
}

function nextyear(date,utctime){

  if(date == nildatetime){
    return nildatetime;
  }else 
  return (utctime)?encodeutcdatetime(date.getUTCFullYear() + 1,date.getUTCMonth() + 1,date.getUTCDate(),date.getUTCHours(),date.getUTCMinutes(),date.getUTCSeconds(),date.getUTCMilliseconds()):encodedatetime(year(date) + 1,month(date),day(date),hour(date),minute(date),second(date),millisecond(date));
}

function previousyear(date,utctime){

  if(date == nildatetime){
    return nildatetime;
  }else 
  return (utctime)?encodeutcdatetime(date.getUTCFullYear() - 1,date.getUTCMonth() + 1,date.getUTCDate(),date.getUTCHours(),date.getUTCMinutes(),date.getUTCSeconds(),date.getUTCMilliseconds()):encodedatetime(year(date) - 1,month(date),day(date),hour(date),minute(date),second(date),millisecond(date));
}

function nextmonth(date,utctime){

  var m=0;
  var y=0;
  if(date == nildatetime){
    return nildatetime;
  }
  if(utctime){
    y=date.getUTCFullYear();
    m=date.getUTCMonth() + 2;
  }else {
    y=year(date);
    m=month(date) + 1;
  }
  if(m > 12){
    m=1;
    y++;
  }
  return (utctime)?encodeutcdatetime(y,m,date.getUTCDate(),date.getUTCHours(),date.getUTCMinutes(),date.getUTCSeconds(),date.getUTCMilliseconds()):encodedatetime(y,m,day(date),hour(date),minute(date),second(date),millisecond(date));
}

function prevmonth(date,utctime){

  var m=0;
  var y=0;
  if(date == nildatetime){
    return nildatetime;
  }
  if(utctime){
    y=date.getUTCFullYear();
    m=date.getUTCMonth();
  }else {
    y=year(date);
    m=month(date) - 1;
  }
  if(m == 0){
    m=12;
    y--;
  }
  return (utctime)?encodeutcdatetime(y,m,date.getUTCDate(),date.getUTCHours(),date.getUTCMinutes(),date.getUTCSeconds(),date.getUTCMilliseconds()):encodedatetime(y,m,day(date),hour(date),minute(date),second(date),millisecond(date));
}

function parsexmldate(xml,y,m,d){
  var result=0;
  xml={v:xml};
  y.v=0;
  m.v=0;
  d.v=0;
  result=lEngTH(xml.v) > 0;
  if(result){
    y.v=strtointdef(parsech(xml,'-'),0);
    m.v=strtointdef(parsech(xml,'-'),0);
    d.v=strtointdef(xml.v,0);
  }
  return result;
}

function parsexmltime(xml,h,m,s,ms){
  var result=0;
  xml={v:xml};
  var digits=0;
  h.v=0;
  m.v=0;
  s.v=0;
  ms.v=0;
  result=lEngTH(xml.v) > 0;
  if(result){
    h.v=strtointdef(parsech(xml,':'),0);
    m.v=strtointdef(parsech(xml,':'),0);
    s.v=strtointdef(parsech(xml,'.'),0);
    ms.v=0;
    digits=0;
    for(;(lEngTH(xml.v) > 0) && (_InSet(xml.v.charAt(1-1),_ISetC(false,'0','9')));){
      ms.v=(ms.v * 10) + (strtoint(xml.v.charAt(1-1)) - strtoint('0'));
      delete_(xml,1,1);
      digits++;
    }
    for(;digits > 3;){
      ms.v=((ms.v / 10)|0);
      digits--;
    }
    for(;digits < 3;){
      ms.v*=10;
      digits++;
    }
  }
  return result;
}

function xmltodate(xml){
  var result=null;
  var y={v:0};
  var m={v:0};
  var d={v:0};
  if(parsexmldate(xml,y,m,d)){
    try{
      result=encodeutcdate(y.v,m.v,d.v);
    }catch(ExceptObject){
      result=nildatetime;
    }
  }else 
    return nildatetime;
  return result;
}

function xmltotime(xml){
  var result=null;
  var h={v:0};
  var m={v:0};
  var s={v:0};
  var ms={v:0};
  if(parsexmltime(xml,h,m,s,ms)){
    try{
      result=encodeutctime(h.v,m.v,s.v,ms.v);
    }catch(ExceptObject){
      result=nildatetime;
    }
  }else 
    return nildatetime;
  return result;
}

function xmltodatetime(xml){

  xml={v:xml};
  var s="";
  var y={v:0};
  var m={v:0};
  var d={v:0};
  var hh={v:0};
  var mm={v:0};
  var ss={v:0};
  var ms={v:0};
  s=parsech(xml,'T');
  if(pos('-',s) > 0){
    if(parsexmldate(s,y,m,d)){
      return (parsexmltime(xml.v,hh,mm,ss,ms))?encodeutcdatetime(y.v,m.v,d.v,hh.v,mm.v,ss.v,ms.v):encodeutcdate(y.v,m.v,d.v);
    }else 
      return nildatetime;
  }else 
    return xmltotime(s);
}

function getbvalue(color){

  return (color >> 16) & 255;
}

function getgvalue(color){

  return (color >> 8) & 255;
}

function getrvalue(color){

  return color & 255;
}

function rgb(r,g,b){

  return (b * 256 * 256) + (g * 256) + r;
}

function parsech(s,delim){
  var result="";
  var p=0;
  p=pos(delim,s.v);
  if(p > 0){
    result=copy(s.v,1,p - 1);
    delete_(s,1,p);
  }else {
    result=s.v;
    s.v='';
  }
  return result;
}

function extractext(qualifiedname){

  var p=0;
  p=backpos('.',qualifiedname);
  return (p > 0)?copy(qualifiedname,p,lEngTH(qualifiedname) - p + 1):'';
}

function ByteToHex(b){  
      return b<16?"0"+b.toString(16):b.toString(16);
  
}

function colortohtmlhex(color){

  return (color == cnocolorspecified)?'':'#' + ByteToHex(getrvalue(color)) + ByteToHex(getgvalue(color)) + ByteToHex(getbvalue(color));
}

function htmlhextocolor(color){

  function RgbToColor(Color,Def){    
           var bits = /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/.exec(Color);
           return (bits != null) ? bits[3] * 256 * 256 +  bits[2] * 256 + bits[1] * 1 : Def;
       
  }
  function hextocolor(color,def){
    var result=0;
    var temp={v:""};
    temp.v=color;
    delete_(temp,1,1);
    result=hextoint(temp.v);
    if(isNaN(result)){
      return def;
    }
    return result;
  }
  function htmltocolor(color,def){
    var result=0;
    var temp={v:""};
    temp.v=color;
    if(temp.v.charAt(1-1) == '#'){
      delete_(temp,1,1);
    }
    result=hextoint(temp.v);
    return (isNaN(result))?def:(getrvalue(result) * 256 * 256) + (getgvalue(result) * 256) + getbvalue(result);
  }
  if((color == '') || stringsequal(color,'transparent')){
    return cnocolorspecified;
  }else 
  if(pos('rgb(',color) > 0){
    return RgbToColor(color,cnocolorspecified);
  }else 
  return (color.charAt(1-1) == '$')?hextocolor(color,cnocolorspecified):htmltocolor(color,cnocolorspecified);
}

function maximum(a,b,c){
  var result=0.0;
  result=a;
  if(b > result){
    result=b;
  }
  if(c > result){
    return c;
  }
  return result;
}

function minimum(a,b,c){
  var result=0.0;
  result=a;
  if(b < result){
    result=b;
  }
  if(c < result){
    return c;
  }
  return result;
}

function valore(n1,n2,hue){
  var result=0.0;
  result=0;
  if(hue >= 360){
    hue-=360;
  }else 
  if(hue < 0){
    hue+=360;
  }
  if(hue >= 240){
    result=n1;
  }
  if(hue < 240){
    result=n1 + ((n2 - n1) * (240 - hue) / 60);
  }
  if(hue < 180){
    result=n2;
  }
  if(hue < 60){
    return n1 + ((n2 - n1) * hue / 60);
  }
  return result;
}

function rgbtohsl(rgbrec,hslrec){  rgbrec=Init_vxrgbcolor(false,rgbrec);
  var c1=0.0;
  var c2=0.0;
  var c3=0.0;
  var delta=0.0;
  var kmin=0.0;
  var kmax=0.0;
  c1=rgbrec.red / 255;
  c2=rgbrec.green / 255;
  c3=rgbrec.blue / 255;
  kmin=minimum(c1,c2,c3);
  kmax=maximum(c1,c2,c3);
  hslrec.v.lum=(kmax + kmin) / 2;
  if(kmax == kmin){
    hslrec.v.saturation=0;
    hslrec.v.hue=0;
  }else {
    hslrec.v.saturation=(hslrec.v.lum <= 0.5)?(kmax - kmin) / (kmax + kmin):(kmax - kmin) / (2 - kmax - kmin);
    delta=kmax - kmin;
    if(kmax == c1){
      hslrec.v.hue=(c2 - c3) / delta;
    }
    if(kmax == c2){
      hslrec.v.hue=2 + ((c3 - c1) / delta);
    }
    if(kmax == c3){
      hslrec.v.hue=4 + ((c1 - c2) / delta);
    }
    hslrec.v.hue*=60;
    if(hslrec.v.hue < 0){
      hslrec.v.hue+=360;
    }
  }
  with(hslrec.v){
    hue*=255;
    saturation*=255;
    lum*=255;
  }
}

function hsltorgb(hslrec,rgbrec){  hslrec=Init_vxhslcolor(false,hslrec);
  var c1=0.0;
  var c2=0.0;
  var c3=0.0;
  var m1=0.0;
  var m2=0.0;
  with(hslrec){
    hue=hue / 255;
    saturation=saturation / 255;
    lum=lum / 255;
  }
  m2=(hslrec.lum <= 0.5)?hslrec.lum * (1 + hslrec.saturation):hslrec.lum + (hslrec.saturation * (1 - hslrec.lum));
  m1=(2 * hslrec.lum) - m2;
  c1=valore(m1,m2,hslrec.hue + 120);
  c2=valore(m1,m2,hslrec.hue);
  c3=valore(m1,m2,hslrec.hue - 120);
  if((hslrec.saturation == 0) && (hslrec.hue == 0)){
    c1=hslrec.lum;
    c2=hslrec.lum;
    c3=hslrec.lum;
  }
  rgbrec.v.red=floor(c1 * 255);
  rgbrec.v.green=floor(c2 * 255);
  rgbrec.v.blue=floor(c3 * 255);
}

function changecolorbrightness(color,delta){

  var rgbrec=Init_vxrgbcolor(true);
  var hslrec=Init_vxhslcolor(true);
  rgbrec.v.red=getrvalue(color);
  rgbrec.v.green=getgvalue(color);
  rgbrec.v.blue=getbvalue(color);
  rgbtohsl(rgbrec.v,hslrec);
  hslrec.v.lum=max(min(hslrec.v.lum + delta,255),0);
  hsltorgb(hslrec.v,rgbrec);
  return rgb(rgbrec.v.red,rgbrec.v.green,rgbrec.v.blue);
}

function buildurl(docname,parameters,ptcl){
  var result="";
  var i=0;
  var domain="";
  var s="";
  function addslash(s){

    return ((s != '') && (s.charAt(__string_length(s)-1) != '/'))?s + '/':s;
  }
  function deslash(s){
    var result="";
    result=s;
    if((result != '') && (result.charAt(1-1) == '/')){
      result=__string_substring(result,2,__string_length(result) - 1);
    }
    if((result != '') && (result.charAt(__string_length(result)-1) == '/')){
      return __string_substring(result,1,__string_length(result) - 1);
    }
    return result;
  }
  function geturlpath(){
    var result="";
    var k=0;
    var rooturl="";
    result=decodeURIComponent(window.location.pathname);
    k=pos(__string_tolower(gvmainformid),__string_tolower(result));
    if(k != 0){
      result=__string_substring(result,1,k - 1);
    }
    result=deslash(result);
    rooturl=deslash(catalog().getproperty_baseurl());
    if(!__string_startswith(result,rooturl)){
      return rooturl + result;
    }
    return result;
  }
  result='';
  if(parameters != null){
    for(i=parameters.items.length - 1;i>=0;i--){
      if(result != ''){
        result+='&';
      }
      result+=parameters.items[i].name + '=' + encodeURIComponent(parameters.items[i].value);
    }
  }
  result=(result != '')?docname + '?' + result:docname;
  if(isScriptorApp){
    return result;
  }
  if(__string_indexof(result,'://') > 0){
    return result;
  }
  ptcl=(__string_isempty(ptcl))?window.location.protocol:ptcl + ':';
  domain=(__string_equals(ptcl,'https'))?window.location.hostname + ':' + inttostr(catalog().httpport):window.location.host;
  s=ptcl + '//' + addslash(domain) + addslash(geturlpath());
  return s + result;
}

function freeobjectlist(l){  var i=0;
  var obj=null;
  if(l == null){
    return;
  }
  try{
    for(i=l.length - 1;i>=0;i--){
      try{
        obj=l[i];
        free(obj);
      }catch(e){
      }
    }
    l.length=0;
  }catch(e){
  }
}

function computeposition(view,element,x,y){  var node=null;
  var style=null;
  var offset=0;
  var pos=[];
  function ComputeExactPosition(Element){    
            if (Element.getBoundingClientRect)
            {
                var x = NaN;
                var y = NaN;
                try
                {
                    var rect = Element.getBoundingClientRect();
                    x = rect.left;
                    y = rect.top;
                    if (document.documentElement.scrollLeft)
                      x += document.documentElement.scrollLeft;
                    else
                    if (document.body.scrollLeft)
                      x += document.body.scrollLeft;
                    if (document.documentElement.clientLeft)
                      x -= document.documentElement.clientLeft;
                    else
                    if (document.body.clientLeft)
                      x -= document.body.clientLeft;
                    if (document.documentElement.scrollTop)
                      y += document.documentElement.scrollTop;
                    else
                    if (document.body.scrollTop)
                      y += document.body.scrollTop;
                    if (document.documentElement.clientTop)
                      y -= document.documentElement.clientTop;
                    else
                    if (document.body.clientTop)
                      y -= document.body.clientTop;
                    return [x, y];
                }
                catch(e)
                {
                }
                return null;
            }
        
  }
  function getstyle(){
    var result=null;
    result=(view != null)?view.getComputedStyle(node,null):null;
    if(result == null){
      return node.style;
    }
    return result;
  }
  pos=ComputeExactPosition(element);
  if(assigned(pos)){
    x.v=pos[0];
    y.v=pos[1];
    return;
  }
  x.v=0;
  y.v=0;
  node=element;
  style=getstyle(element);
  for(;node != null;){
    x.v+=node.offsetLeft;
    y.v+=node.offsetTop;
    if((node != element) && bRoWsEr.IsGecko){
      offset=parseInt(style.borderLeftWidth,10);
      if(!isNaN(offset)){
        x.v+=offset;
      }
      if(style.overflow != 'visible'){
        x.v+=offset;
      }
      offset=parseInt(style.borderTopWidth,10);
      if(!isNaN(offset)){
        y.v+=offset;
      }
      if(style.overflow != 'visible'){
        y.v+=offset;
      }
    }
    node=node.offsetParent;
    if(node != null){
      style=getstyle(node);
    }
  }
  node=element.offsetParent;
  for(;node != null;){
    x.v-=node.scrollLeft;
    y.v-=node.scrollTop;
    node=node.offsetParent;
  }
}

function getelementabsoluteleft(element){

  var x={v:0};
  var y={v:0};
  computeposition(document.defaultView,element,x,y);
  return x.v;
}

function getelementabsolutetop(element){

  var x={v:0};
  var y={v:0};
  computeposition(document.defaultView,element,x,y);
  return y.v;
}

function encodeparameter(s){
  var result="";
  var i=0;
  result='';
  for(i=1;i<=lEngTH(s);i++){
    result=((s.charAt(i-1) == '\"') || (s.charAt(i-1) == '='))?result + '\\' + s.charAt(i-1):result + s.charAt(i-1);
  }
  return result;
}

function decodeparameter(s){
  var result="";
  var i=0;
  var len=0;
  result='';
  i=1;
  len=lEngTH(s);
  for(;i <= len;){
    if((i < len) && (s.charAt(i-1) == '\\') && ((s.charAt(i + 1-1) == '\"') || (s.charAt(i + 1-1) == '='))){
      result+=s.charAt(i + 1-1);
      i++;
    }else 
      result+=s.charAt(i-1);
    i++;
  }
  return result;
}

_lddmods["SystemUtilities"]=true;
function closeform(formname){  var frm=null;
  frm=xapp.getproperty_webform(formname);
  if(frm == null){
    return;
  }
  frm.close();
}

function openwebsite(siteurl){  xapp.openform(siteurl,'Blank','');
}

function OpenForm(formname,target,parameters){  xapp.openform(formname,target,parameters);
}

function RequestForm(formname,target,parameters){  OpenForm(formname,target,parameters);
}

_lddmods["SystemActions"]=true;
function createflvplayerbd(ctrl){  var flashvar=[];
  function CreateFLVPlayerJS(DOMHAndle,FlashVars){    
           var s1 = new SWFObject('images/player.swf?cls=res','mpl',875,480,'9');
           s1.addParam('allowfullscreen'  , 'True'  );
           s1.addParam('allowscriptaccess', 'always' );
           //s1.addParam ('Title'           , 'Black Diamond Documentaries');
           s1.addParam('wmode'            , 'opaque' );
           s1.addParam('flashvars'        , FlashVars);
           s1.write(DOMHAndle.id);
        
  }
  flashvar=[];
  flashvar.push('Controlbar=none');
  flashvar.push('playlistfile=../RSS/BlackDiamonds.xml');
  flashvar.push('plugins=basic-1');
  flashvar.push('basic.focus_distance=10');
  flashvar.push('basic.titles_position=Bottom');
  flashvar.push('basic.glow=true');
  flashvar.push('basic.horizontalmargin=50');
  flashvar.push('basic.fade_titles=false');
  flashvar.push('Dock=True');
  flashvar.push('backcolor=#000000');
  flashvar.push('frontcolor=#ffffff');
  flashvar.push('lightcolor=#7030A0');
  flashvar.push('screencolor=#000000');
  CreateFLVPlayerJS(ctrl.domhandle(),flashvar.join('&'));
  flashvar=null;
}

function clearvids(){  var nlist=null;
  var node=null;
  var frm=null;
  var i=0;
  function getform(anode){

    return (assigned(anode.wrapper) && (anode.wrapper != null))?anode.wrapper.getproperty_ownerform():getform(anode.parentNode);
  }
  nlist=document.getElementsByTagName('embed');
  if(nlist.length == 0){
    nlist=document.getElementsByTagName('object');
  }
  for(i=0;i<=nlist.length - 1;i++){
    node=nlist[0].parentNode;
    frm=getform(node);
    if((frm != null) && (frm.domhandle() != null)){
      frm.freedom();
    }
  }
}

_lddmods["SupportModule"]=true;
_lddmods["WelcomePlayer"]=true;
function tdatetimelocale(){}
function Register_tdatetimelocale(){
  if(IsRegisteredtdatetimelocale)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tdatetimelocale";
  p.zc=tdatetimelocale;
  p.ParentClass=tobject;
  p.createpattern=tdatetimelocale_createpattern;
  p.destroypattern=tdatetimelocale_destroypattern;
  p.isnumericpattern=tdatetimelocale_isnumericpattern;
  p.create=tdatetimelocale_create;
  p.init=tdatetimelocale_init;
  p.tryparse=tdatetimelocale_tryparse;
  p.tostring=tdatetimelocale_tostring;
  tdatetimelocale.prototype=p;
  IsRegisteredtdatetimelocale=true;
}
function Create_tdatetimelocale(p){
  Register_tdatetimelocale();
  if(p==void(0))var p=new tdatetimelocale();
  p=Create_tobject(p);
  p.zb="tdatetimelocale";
  p.eranames=[];
  p.shorteranames=[];
  p.daynames=[];
  p.shortdaynames=[];
  p.abbreviateddaynames=[];
  p.monthnames=[];
  p.shortmonthnames=[];
  p.abbreviatedmonthnames=[];
  p.ampmdesignators=[];
  p.dateformats=[];
  p.timeformats=[];
  p.firstdayoftheweek=0;
  return p
}

function tnumericlocale(){}
function Register_tnumericlocale(){
  if(IsRegisteredtnumericlocale)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tnumericlocale";
  p.zc=tnumericlocale;
  p.ParentClass=tobject;
  p.createpattern=tnumericlocale_createpattern;
  p.create=tnumericlocale_create;
  p.init=tnumericlocale_init;
  p.getnumericformat=tnumericlocale_getnumericformat;
  p.tryparse=tnumericlocale_tryparse;
  p.tostring=tnumericlocale_tostring;
  tnumericlocale.prototype=p;
  IsRegisteredtnumericlocale=true;
}
function Create_tnumericlocale(p){
  Register_tnumericlocale();
  if(p==void(0))var p=new tnumericlocale();
  p=Create_tobject(p);
  p.zb="tnumericlocale";
  p.percent="";
  p.permill="";
  p.plussign="";
  p.minussign="";
  p.zerodigit="";
  p.decimalseparator="";
  p.groupingseparator="";
  p.monetaryseparator="";
  p.monetarygroupingseparator="";
  p.exponentialsymbol="";
  p.notnumber="";
  p.infinity="";
  p.currencycode="";
  p.decimalformat="";
  p.scientificformat="";
  p.percentformat="";
  p.currencyformat="";
  p.generalformat="";
  return p
}

function tlocaleinfo(){}
function Register_tlocaleinfo(){
  if(IsRegisteredtlocaleinfo)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tlocaleinfo";
  p.zc=tlocaleinfo;
  p.ParentClass=tobject;
  p.create=tlocaleinfo_create;
  p.zd=p.destroy=tlocaleinfo_destroy;
  p.init=tlocaleinfo_init;
  tlocaleinfo.prototype=p;
  IsRegisteredtlocaleinfo=true;
}
function Create_tlocaleinfo(p){
  Register_tlocaleinfo();
  if(p==void(0))var p=new tlocaleinfo();
  p=Create_tobject(p);
  p.zb="tlocaleinfo";
  p.datetimelocale=null;
  p.numericlocale=null;
  return p
}

function tdatetimepattern(){}
function Register_tdatetimepattern(){
  if(IsRegisteredtdatetimepattern)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tdatetimepattern";
  p.zc=tdatetimepattern;
  p.ParentClass=tobject;
  p.create=tdatetimepattern_create;
  tdatetimepattern.prototype=p;
  IsRegisteredtdatetimepattern=true;
}
function Create_tdatetimepattern(p){
  Register_tdatetimepattern();
  if(p==void(0))var p=new tdatetimepattern();
  p=Create_tobject(p);
  p.zb="tdatetimepattern";
  p.text="";
  p.count=0;
  p.start=0;
  p.formatted=0;
  return p
}

function tdatetimerec(){}
function Register_tdatetimerec(){
  if(IsRegisteredtdatetimerec)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tdatetimerec";
  p.zc=tdatetimerec;
  p.ParentClass=tobject;
  p.create=tdatetimerec_create;
  tdatetimerec.prototype=p;
  IsRegisteredtdatetimerec=true;
}
function Create_tdatetimerec(p){
  Register_tdatetimerec();
  if(p==void(0))var p=new tdatetimerec();
  p=Create_tobject(p);
  p.zb="tdatetimerec";
  p.year=0;
  p.month=0;
  p.day=0;
  p.era=0;
  p.hour=0;
  p.minute=0;
  p.second=0;
  p.millisecond=0;
  p.ampm=0;
  p.tzoffset=0;
  p.ambyear=0;
  p.dayofweek=0;
  return p
}

function tnumericrec(){}
function Register_tnumericrec(){
  if(IsRegisteredtnumericrec)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tnumericrec";
  p.zc=tnumericrec;
  p.ParentClass=tobject;
  p.create=tnumericrec_create;
  tnumericrec.prototype=p;
  IsRegisteredtnumericrec=true;
}
function Create_tnumericrec(p){
  Register_tnumericrec();
  if(p==void(0))var p=new tnumericrec();
  p=Create_tobject(p);
  p.zb="tnumericrec";
  p.negativeprefix="";
  p.positiveprefix="";
  p.negativesuffix="";
  p.positivesuffix="";
  p.exponential=0;
  p.currencyformat=0;
  p.decimalvisible=0;
  p.multiplier=0;
  p.groupingsize=0;
  p.maxintegerdigits=0;
  p.minintegerdigits=0;
  p.exponentdigits=0;
  p.maxfractiondigits=0;
  p.minfractiondigits=0;
  p.currencycode="";
  p.currencysymbol="";
  return p
}

var defaultcurrencycode="";defaultcurrencycode='USD';
var currentlocale=null;currentlocale=null;
var invariantlocale=null;invariantlocale=null;
var gv_currencylist=[];gv_currencylist=null;
var numericchars;numericchars='MydhHmsSk';
var patternchars;patternchars='dMyghHmsfza';
var gmtstring;gmtstring='GMT';
var yearcenturywindow;yearcenturywindow=80;
var minutesperhour;minutesperhour=60;
function tdatetimerec_create(){
  var self=this;
  self.month=-1;
  self.day=-1;
  self.era=-1;
  self.hour=-1;
  self.minute=-1;
  self.second=-1;
  self.millisecond=-1;
  self.ampm=-1;
  self.dayofweek=-1;
  self.year=nilinteger;
  self.tzoffset=nilinteger;
  self.ambyear=false;
  return self;
}

function tnumericrec_create(currcode){
  var self=this;
  tobject.prototype.create.call(self);
  self.negativeprefix='-';
  self.positiveprefix='';
  self.negativesuffix='';
  self.positivesuffix='';
  self.exponential=false;
  self.currencyformat=false;
  self.decimalvisible=false;
  self.multiplier=1;
  self.groupingsize=3;
  self.maxintegerdigits=40;
  self.minintegerdigits=1;
  self.exponentdigits=0;
  self.maxfractiondigits=3;
  self.minfractiondigits=0;
  self.currencycode=currcode;
  self.currencysymbol=currencylist()[self.currencycode];
  if(self.currencysymbol == null){
    self.currencysymbol='';
  }
  return self;
}

function intdiv(a,b){

  return (a - (a % b)) / b;
}

function ShiftChar(S,Index,Delta){  
      return String.fromCharCode(S.charCodeAt(Index) + Delta);
  
}

function Positive_Infinity(){  
      return Number.POSITIVE_INFINITY;
  
}

function tdatetimepattern_create(atext,acount,aformatted){
  var self=this;
  tobject.prototype.create.call(self);
  self.text=atext;
  self.count=acount;
  self.formatted=aformatted;
  return self;
}

function tdatetimelocale_create(props){
  var self=this;
  tobject.prototype.create.call(self);
  self.init(props);
  return self;
}

function tdatetimelocale_init(props){
  var self=this;
  function DecodeProp(S){    
            return S.replace(/\\,/g, ",").replace(/^\s+|\s+$/g, "");
        
  }
  function getarrayprop(s){
    var result=[];
    var i=0;
    var p=0;
    result=[];
    p=0;
    for(i=0;i<=lEngTH(s) - 1;i++){
      if((__string_charat(s,i + 1) == ',') && ((i == 0) || (__string_charat(s,i) != '\\'))){
        result.push(DecodeProp(__string_substring(s,p + 1,i - p)));
        p=i + 1;
      }
    }
    if(p != 0){
      result.push(DecodeProp(__string_substring(s,p + 1,lEngTH(s) - p)));
    }
    return result;
  }
  if(props != null){
    self.monthnames=getarrayprop(props['MonthNames']);
    self.shortmonthnames=getarrayprop(props['ShortMonthNames']);
    self.abbreviatedmonthnames=getarrayprop(props['AbbreviatedMonthNames']);
    self.daynames=getarrayprop(props['DayNames']);
    self.shortdaynames=getarrayprop(props['ShortDayNames']);
    self.abbreviateddaynames=getarrayprop(props['AbbreviatedDayNames']);
    self.ampmdesignators=getarrayprop(props['AMPMDesignators']);
    self.eranames=getarrayprop(props['EraNames']);
    self.shorteranames=getarrayprop(props['ShortEraNames']);
    self.dateformats=getarrayprop(props['DateFormats']);
    self.timeformats=getarrayprop(props['TimeFormats']);
    self.firstdayoftheweek=props['FirstDayOfTheWeek'];
  }
}

function tdatetimelocale_isnumericpattern(part){


  var i=0;
  if(part.count <= 0){
    return false;
  }else {
    i=__string_indexof(numericchars,__string_charat(part.text,1));
    return (i > 1) || ((i == 1) && (part.count < 3));
  }
}

function tdatetimelocale_createpattern(format){
  var self=this;
  var result=[];
  var quote=0;
  var len=0;
  var i=0;
  var j=0;
  var ch="";
  var text="";
  function identifystart(){    var start=0;
    var i=0;
    var len=0;
    var part=null;
    start=false;
    len=result.length;
    for(i=0;i<=len - 1;i++){
      part=result[i];
      if(self.isnumericpattern(part)){
        if(!start && ((i + 1) < len) && self.isnumericpattern(result[i + 1])){
          start=true;
          part.start=true;
        }
      }else 
        start=false;
    }
  }
  function addpattern(pos,formatted){    if(text != ''){
      result.push(Create_tdatetimepattern().create(text,pos,formatted));
      text='';
    }
  }
  result=[];
  quote=false;
  len=__string_length(format);
  text='';
  for(i=0;i<=len - 1;i++){
    ch=__string_charat(format,i + 1);
    if(ch == ' '){
      addpattern(0,false);
      text=' ';
      addpattern(0,false);
      for(;((i + 1) < len) && (__string_charat(format,i + 2) == ' ');){
        i++;
      }
      continue;
    }
    if(quote){
      if(ch == '\''){
        if(((i + 1) < len) && (__string_charat(format,i + 2) == '\'')){
          text+=ch;
          i++;
        }else {
          quote=false;
          addpattern(0,false);
        }
      }else 
        text+=ch;
      continue;
    }
    if(__string_indexof(patternchars,ch) > 0){
      addpattern(0,false);
      text=ch;
      j=i + 1;
      for(;(j < len) && (__string_charat(format,j + 1) == ch);){
        j++;
      }
      addpattern(j - i,true);
      i=j - 1;
      continue;
    }
    if(ch == '\''){
      if(((i + 1) < len) && (__string_charat(format,i + 2) == ch)){
        text+=ch;
        i++;
      }else 
        quote=true;
    }else 
      text+=ch;
  }
  addpattern(0,false);
  identifystart();
  return result;
}

function tdatetimelocale_destroypattern(pattern){

  var i=0;
  var obj=null;
  for(i=0;i<=pattern.length - 1;i++){
    obj=pattern[i];
    free(obj);
  }
  pattern.length=0;
}

function tdatetimelocale_tryparse(s,format,datetime,islocaltime,strict){
  var self=this;
  var result=0;
  var pattern=[];
  var part=null;
  var i=0;
  var pat=0;
  var pass=0;
  var count=0;
  var pos={v:0};
  var p=0;
  var rec=null;
  function skipspace(text,pos){    function iswhitespace(ch){

      return (ch == ' ') || (ch == '\t');
    }
    for(;(pos.v < __string_length(text)) && iswhitespace(__string_charat(text,pos.v + 1));){
      pos.v++;
    }
  }
  function subparse(text,pos,rec,part,count){
    var result=0;
    var start=0;
    var value=0;
    var ch="";
    function parseint(text,pos){
      var result=0;
      var p=0;
      var len=0;
      var ch="";
      result=0;
      p=pos.v;
      ch=__string_charat(text,p + 1);
      len=__string_length(text);
      for(;(ch >= '0') && (ch <= '9');){
        result=(result * 10) + (ch - '0');
        p++;
        if(p >= len){
          break;
        }
        ch=__string_charat(text,p + 1);
      }
      if(p > pos.v){
        pos.v=p;
      }else 
        return -1;
      return result;
    }
    function matchstring(text,start,data,pos){
      var result=0;
      var i=0;
      var lower="";
      var maxlen=0;
      var len=0;
      maxlen=0;
      result=-1;
      lower=__string_tolower(__string_substring(text,start + 1,lEngTH(text) - start));
      for(i=0;i<=data.length - 1;i++){
        len=__string_length(data[i]);
        if((len > maxlen) && __string_startswith(lower,__string_tolower(data[i]))){
          result=i;
          maxlen=len;
        }
      }
      if(result >= 0){
        pos.v=start + maxlen;
      }
      return result;
    }
    function parseyear(text,value,start,pos){
      var result=0;
      var ch="";
      result=false;
      ch=' ';
      if(value < 0){
        ch=__string_charat(text,pos.v + 1);
        if((ch != '+') && (ch != '-')){
          return result;
        }
        pos.v++;
        value=parseint(text,pos);
        if(value < 0){
          return result;
        }
        if(ch == '-'){
          value=-value;
        }
      }
      rec.ambyear=(ch == ' ') && ((pos.v - start) == 2) && (part.count == 2);
      rec.year=value;
      return true;
    }
    function parsemonth(text,value,start,pos){
      var result=0;
      result=true;
      if(value < 0){
        value=matchstring(text,start,self.monthnames,pos);
        if(value < 0){
          value=matchstring(text,start,self.shortmonthnames,pos);
        }
        if(value < 0){
          return false;
        }else 
          rec.month=value;
      }else 
      if(value > 0){
        rec.month=value - 1;
      }else 
        return false;
      return result;
    }
    function parseday(text,value,start,pos){
      var result=0;
      result=true;
      if(value < 0){
        value=matchstring(text,start,self.daynames,pos);
        if(value < 0){
          value=matchstring(text,start,self.shortdaynames,pos);
        }
        if(value < 0){
          return false;
        }else 
          rec.dayofweek=value;
      }else 
      if(value > 0){
        rec.day=value;
      }else 
        return false;
      return result;
    }
    function parseera(text,start,pos){
      var result=0;
      var value=0;
      result=true;
      value=matchstring(text,start,self.eranames,pos);
      if(value < 0){
        value=matchstring(text,start,self.shorteranames,pos);
      }
      if(value < 0){
        return false;
      }else 
        rec.era=value;
      return result;
    }
    function parseshorthour(value){
      var result=0;
      result=value >= 0;
      if(result){
        if(value == 12){
          value=0;
        }
        rec.hour=value;
      }
      return result;
    }
    function parselonghour(value){
      var result=0;
      result=value >= 0;
      if(result){
        rec.hour=value;
      }
      return result;
    }
    function parseminute(value){
      var result=0;
      result=value >= 0;
      if(result){
        rec.minute=value;
      }
      return result;
    }
    function parsesecond(value){
      var result=0;
      result=value >= 0;
      if(result){
        rec.second=value;
      }
      return result;
    }
    function parsefractionalsecond(value,start,pos){
      var result=0;
      var i=0;
      var s=0;
      result=value >= 0;
      if(result){
        i=pos.v - start;
        for(;i < 3;){
          value*=10;
          i++;
        }
        s=1;
        for(;i > 3;){
          s*=10;
          i--;
        }
        value=(((value + (s >> 1)) / s)|0);
        rec.millisecond=value;
      }
      return result;
    }
    function parseampm(text,start,pos){
      var result=0;
      var value=0;
      result=true;
      value=matchstring(text,start,self.ampmdesignators,pos);
      if(value < 0){
        return false;
      }else 
        rec.ampm=value;
      return result;
    }
    function parsetimezoneoffset(text,start,pos){
      var result=0;
      var negative=0;
      var offset=0;
      var p=0;
      result=true;
      if(__string_startswith0(text,gmtstring,start + 1)){
        pos.v+=lEngTH(gmtstring);
      }
      if(pos.v >= __string_length(text)){
        rec.tzoffset=0;
        return result;
      }
      switch(__string_charat(text,pos.v + 1)){
        case '+':
        negative=false;
        break;
        case '-':
        negative=true;
        break;
      default:
        rec.tzoffset=0;
        return result;
      }
      pos.v++;
      p=pos.v;
      value=parseint(text,pos);
      if((value == 0) && (p == pos.v)){
        return false;
      }
      if((pos.v < __string_length(text)) && (__string_charat(text,pos.v + 1) == ':')){
        offset=value * minutesperhour;
        pos.v++;
        p=pos.v;
        value=parseint(text,pos);
        if((value == 0) && (p == pos.v)){
          return false;
        }
        offset+=value;
      }else {
        offset=value;
        offset=((offset < 24) && ((pos.v - p) <= 2))?offset * minutesperhour:(offset % 100) + (intdiv(offset,100) * minutesperhour);
      }
      if(negative){
        offset=-offset;
      }
      rec.tzoffset=-offset;
      return result;
    }
    result=false;
    skipspace(text,pos);
    start=pos.v;
    ch=__string_charat(part.text,1);
    value=-1;
    if(self.isnumericpattern(part)){
      if(count > 0){
        if((start + count) > __string_length(text)){
          return result;
        }
        value=parseint(__string_substring(text,1,start + count),pos);
      }else 
        value=parseint(text,pos);
    }
    switch(ch){
      case 'd':
      return parseday(text,value,start,pos);
      case 'M':
      return parsemonth(text,value,start,pos);
      case 'y':
      return parseyear(text,value,start,pos);
      case 'g':
      return parseera(text,start,pos);
      case 'h':
      return parseshorthour(value);
      case 'H':
      return parselonghour(value);
      case 'm':
      return parseminute(value);
      case 's':
      return parsesecond(value);
      case 'f':
      return parsefractionalsecond(value,start,pos);
      case 'z':
      return parsetimezoneoffset(text,start,pos);
      case 'a':
      return parseampm(text,start,pos);
    }
    return result;
  }
  function calculatedate(rec,strict){
    var result=null;
    var value=0;
    function checkdate(datetime){

      return (islocaltime)?((rec.year == nilinteger) || (rec.year == datetime.getFullYear())) && ((rec.month < 0) || (rec.month == datetime.getMonth())) && ((rec.day < 0) || (rec.day == datetime.getDate())):((rec.year == nilinteger) || (rec.year == datetime.getUTCFullYear())) && ((rec.month < 0) || (rec.month == datetime.getUTCMonth())) && ((rec.day < 0) || (rec.day == datetime.getUTCDate()));
    }
    function checktime(){

      return (rec.hour < 24) || (rec.minute < 60) || (rec.second < 60) || (rec.millisecond < 1000);
    }
    result=CreateDateTimeObj();
    value=(islocaltime)?result.getFullYear():result.getUTCFullYear();
    result.setFullYear(0);
    result.setMonth(0);
    result.setDate(0);
    result.setTime(0);
    if((rec.era == 0) && (rec.year > 0)){
      rec.year=-rec.year;
    }else 
    if(rec.ambyear){
      value-=yearcenturywindow;
      rec.year+=(intdiv(value,100) * 100);
      if(rec.year < value){
        rec.year+=100;
      }
    }
    if(rec.year != nilinteger){
      if(islocaltime){
        result.setFullYear(rec.year);
      }else 
        result.setUTCFullYear(rec.year);
    }
    if(islocaltime){
      value=result.getDate();
      result.setDate(1);
    }else {
      value=result.getUTCDate();
      result.setUTCDate(1);
    }
    if(rec.month >= 0){
      if(islocaltime){
        result.setMonth(rec.month);
      }else 
        result.setUTCMonth(rec.month);
    }
    if(islocaltime){
      if(rec.day >= 0){
        result.setDate(rec.day);
      }else 
        result.setDate(value);
    }else {
      if(rec.day >= 0){
        result.setUTCDate(rec.day);
      }else 
        result.setUTCDate(value);
    }
    if(rec.hour < 0){
      rec.hour=(islocaltime)?result.getHours():result.getUTCHours();
    }
    if((rec.ampm > 0) && (rec.hour < 12)){
      rec.hour+=12;
    }
    if(islocaltime){
      result.setHours(rec.hour);
    }else 
      result.setUTCHours(rec.hour);
    if(rec.minute >= 0){
      if(islocaltime){
        result.setMinutes(rec.minute);
      }else 
        result.setUTCMinutes(rec.minute);
    }
    if(rec.second >= 0){
      if(islocaltime){
        result.setSeconds(rec.second);
      }else 
        result.setUTCSeconds(rec.second);
    }
    if(rec.millisecond >= 0){
      result.setTime((result.getTime() / 1000 * 1000) + rec.millisecond);
    }
    if(strict && !((checkdate(result) && checktime()))){
      return null;
    }
    if(islocaltime && (rec.tzoffset != nilinteger)){
      result.setTime(result.getTime() + ((rec.tzoffset - result.getTimezoneOffset()) * 60 * 1000));
    }
    return result;
  }
  result=false;
  pos.v=0;
  pattern=self.createpattern(format);
  rec=Create_tdatetimerec().create();
  try{
    pat=-1;
    pass=0;
    for(i=0;i<=pattern.length - 1;i++){
      part=pattern[i];
      if(part.count > 0){
        if((pat < 0) && part.start){
          pat=i;
          pass=0;
        }
        if(pat >= 0){
          count=part.count;
          if(i == pat){
            count-=pass;
            pass++;
            if(count == 0){
              return result;
            }
          }
          if(!subparse(s,pos,rec,part,count)){
            i=pat - 1;
            pos.v=0;
            continue;
          }
        }else {
          pat=-1;
          if(!subparse(s,pos,rec,part,0)){
            return result;
          }
        }
      }else {
        pat=-1;
        if(__string_charat(part.text,1) == ' '){
          p=pos.v;
          skipspace(s,pos);
          if(pos.v > p){
            continue;
          }
        }else 
        if(__string_startswith0(s,part.text,pos.v + 1)){
          pos.v+=__string_length(part.text);
          continue;
        }
        return result;
      }
    }
    datetime.v=calculatedate(rec,strict);
    result=datetime.v != null;
  }finally{
    self.destroypattern(pattern);
    free(rec);
  }
  return result;
}

function tdatetimelocale_tostring(datetime,format,aslocaltime){
  var self=this;
  var result="";
  var i=0;
  var time=null;
  var pattern=[];
  var part=null;
  function getday(datetime){

    return (aslocaltime)?datetime.getDay():datetime.getUTCDay();
  }
  function getmonth(datetime){

    return (aslocaltime)?datetime.getMonth():datetime.getUTCMonth();
  }
  function getfullyear(datetime){

    return (aslocaltime)?datetime.getFullYear():datetime.getUTCFullYear();
  }
  function gethours(datetime){

    return (aslocaltime)?datetime.getHours():datetime.getUTCHours();
  }
  function getminutes(datetime){

    return (aslocaltime)?datetime.getMinutes():datetime.getUTCMinutes();
  }
  function getseconds(datetime){

    return (aslocaltime)?datetime.getSeconds():datetime.getUTCSeconds();
  }
  function getdate(datetime){

    return (aslocaltime)?datetime.getDate():datetime.getUTCDate();
  }
  function hasformat(ch){

    var i=0;
    var part=null;
    for(i=0;i<=pattern.length - 1;i++){
      part=pattern[i];
      if(part.formatted && (__string_charat(part.text,1) == ch)){
        return true;
      }
    }
    return false;
  }
  function subformat(ch,len,date,time){

    function paddingnumber(value,minwidth){
      var result="";
      var basevalue=0;
      var i=0;
      result='';
      basevalue=10;
      for(i=0;i<=minwidth - 2;i++){
        if(Math.abs(value) < basevalue){
          result+='0';
        }
        basevalue*=10;
      }
      return result + __integer_tostring(value);
    }
    function formatday(len,date){

      switch(len){
        case 3:
        return self.shortdaynames[getday(date)];
        case 4:
        return self.daynames[getday(date)];
      default:
        return paddingnumber(getdate(date),len);
      }
    }
    function formatmonth(len,date){

      var value=0;
      value=getmonth(date);
      switch(len){
        case 3:
        return self.shortmonthnames[value];
        case 4:
        return self.monthnames[value];
      default:
        return paddingnumber(value + 1,len);
      }
    }
    function formatyear(len,date){

      var value=0;
      value=getfullyear(date);
      if((value < 0) && hasformat('g')){
        value=-value;
      }
      switch(len){
        case 1:;
        case 2:
        return paddingnumber(value % 100,len);
      default:
        return __integer_tostring(value);
      }
    }
    function formatera(len,date){

      var value=0;
      value=(getfullyear(date) < 0)?0:1;
      return (len > 1)?self.eranames[value]:self.shorteranames[value];
    }
    function formatshorthours(len,date){

      var value=0;
      value=gethours(date) % 12;
      return (value == 0)?paddingnumber(12,len):paddingnumber(value,len);
    }
    function formatlonghours(len,date){

      return paddingnumber(gethours(date),len);
    }
    function formatminutes(len,date){

      return paddingnumber(getminutes(date),len);
    }
    function formatseconds(len,date){

      return paddingnumber(getseconds(date),len);
    }
    function formatfractionalseconds(len,date){
      var result="";
      var value=0;
      value=date.getTime() % 1000;
      switch(len){
        case 1:
        value=(((value + 50) / 100)|0);
        return __integer_tostring(value);
        case 2:
        value=(((value + 5) / 10)|0);
        return paddingnumber(value,2);
      default:
        result=paddingnumber(value,3);
        if(len > 3){
          return result + paddingnumber(0,len - 3);
        }
      }
      return result;
    }
    function getgmtoffset(datetime){
      var result="";
      var offset=0;
      if(!aslocaltime){
        return '';
      }
      offset=-datetime.getTimezoneOffset();
      if(offset < 0){
        offset=-offset;
        result='-';
      }else 
        result='+';
      return result + __integer_tostring(intdiv(intdiv(offset,60),10)) + __integer_tostring(intdiv(offset,60) % 10) + __integer_tostring(intdiv(offset % 60,10)) + __integer_tostring(offset % 10);
    }
    function formattimezoneoffset(len,date){

      return (len < 2)?getgmtoffset(date):gmtstring + getgmtoffset(date);
    }
    function formatampm(len,date){

      var hours=0;
      hours=gethours(date);
      return ((hours >= 12) && (hours < 24))?self.ampmdesignators[1]:self.ampmdesignators[0];
    }
    switch(ch){
      case 'd':
      return formatday(len,date);
      case 'M':
      return formatmonth(len,date);
      case 'y':
      return formatyear(len,date);
      case 'g':
      return formatera(len,date);
      case 'h':
      return formatshorthours(len,time);
      case 'H':
      return formatlonghours(len,time);
      case 'm':
      return formatminutes(len,time);
      case 's':
      return formatseconds(len,time);
      case 'f':
      return formatfractionalseconds(len,time);
      case 'z':
      return formattimezoneoffset(len,time);
      case 'a':
      return formatampm(len,time);
    default:
      return '';
    }
  }
  function CreateDate(date){    
            return new Date(date.getTime());
        
  }
  result='';
  if(datetime == nildatetime){
    return result;
  }
  pattern=self.createpattern(format);
  try{
    time=CreateDate(datetime);
    for(i=0;i<=pattern.length - 1;i++){
      part=pattern[i];
      result=(part.formatted)?result + subformat(part.text,part.count,datetime,time):result + part.text;
    }
  }finally{
    self.destroypattern(pattern);
  }
  return result;
}

function tnumericlocale_create(props){
  var self=this;
  tobject.prototype.create.call(self);
  self.init(props);
  return self;
}

function tnumericlocale_init(props){
  var self=this;
  if(props != null){
    self.percent=props['Percent'];
    self.permill=props['PerMill'];
    self.plussign=props['PlusSign'];
    self.minussign=props['MinusSign'];
    self.zerodigit=props['ZeroDigit'];
    self.decimalseparator=props['DecimalSeparator'];
    self.groupingseparator=props['GroupingSeparator'];
    self.monetaryseparator=props['MonetarySeparator'];
    self.monetarygroupingseparator=props['MonetaryGroupingSeparator'];
    self.exponentialsymbol=props['ExponentialSymbol'];
    self.currencycode=props['CurrencyCode'];
    self.notnumber=props['NotNumber'];
    self.infinity=props['Infinity'];
    self.decimalformat=props['DecimalFormat'];
    self.scientificformat=props['ScientificFormat'];
    self.percentformat=props['PercentFormat'];
    self.currencyformat=props['CurrencyFormat'];
    self.generalformat=props['GeneralFormat'];
  }
}

function tnumericlocale_getnumericformat(format){
  var self=this;
  var result="";
  result=format;
  if((result == 'c') || (result == 'C')){
    return self.currencyformat;
  }else 
  if((result == 'd') || (result == 'D')){
    return self.decimalformat;
  }else 
  if((result == 'e') || (result == 'E')){
    return self.scientificformat;
  }else 
  if((result == 'g') || (result == 'G')){
    return self.generalformat;
  }
  return result;
}

function tnumericlocale_createpattern(format,currcode){
  var self=this;

  var pos={v:0};
  var success={v:0};
  var rec=null;
  function parseaffix(start,success,isnegative){
    var result="";
    var quote=0;
    var len=0;
    var i=0;
    var ch="";
    result='';
    quote=false;
    len=__string_length(format);
    i=start.v;
    for(;i < len;){
      ch=__string_charat(format,i + 1);
      if(ch == '\''){
        if(((i + 1) < len) && (__string_charat(format,i + 2) == ch)){
          i++;
          result+=ch;
        }else 
          quote=false;
        i++;
        continue;
      }
      if(quote){
        result+=ch;
      }else 
        switch(ch){
          case '#':;
          case '0':;
          case ',':;
          case '.':;
          case ';':
          start.v=i;
          return result;
          case '%':
          if(!isnegative){
            if(rec.multiplier != 1){
              success.v=false;
            }
            rec.multiplier=100;
          }
          result+=self.percent;
          break;
        default:
          if(__char_asccode(ch) == 0x00a4){
            rec.currencyformat=true;
            if(((i + 1) < len) && (__string_charat(format,i + 2) == ch)){
              i++;
              result+=rec.currencycode;
            }else 
              result+=rec.currencysymbol;
          }else 
          if(__char_asccode(ch) == 0x2030){
            if(!isnegative){
              if(rec.multiplier != 1){
                success.v=false;
              }
              rec.multiplier=1000;
            }
            result+=self.permill;
          }else 
            result+=ch;
        }
      i++;
    }
    start.v=len;
    return result;
  }
  function parsetrunk(start,success,ignorepattern){    var decimalpos=0;
    var digitleftcount=0;
    var zerodigitcount=0;
    var digitrightcount=0;
    var groupingcount=0;
    var len=0;
    var i=0;
    var digits=0;
    var totaldigits=0;
    var ch="";
    var loop=0;
    decimalpos=-1;
    digitleftcount=0;
    zerodigitcount=0;
    digitrightcount=0;
    groupingcount=-1;
    len=__string_length(format);
    i=start.v;
    loop=true;
    for(;(i < len) && loop;){
      ch=__string_charat(format,i + 1);
      switch(ch){
        case '#':
        if(zerodigitcount > 0){
          digitrightcount++;
        }else 
          digitleftcount++;
        if((groupingcount >= 0) && (decimalpos < 0)){
          groupingcount++;
        }
        break;
        case '0':
        if(digitrightcount > 0){
          success.v=false;
        }
        zerodigitcount++;
        if((groupingcount >= 0) && (decimalpos < 0)){
          groupingcount++;
        }
        break;
        case ',':
        groupingcount=0;
        break;
        case '.':
        if(decimalpos >= 0){
          success.v=false;
        }
        decimalpos=digitleftcount + zerodigitcount + digitrightcount;
        break;
        case 'E':
        if(!ignorepattern){
          if(rec.exponential){
            success.v=false;
          }
          rec.exponential=true;
          rec.exponentdigits=0;
        }
        for(;((i + 1) < len) && (__string_charat(format,i + 2) == '0');){
          i++;
          if(!ignorepattern){
            rec.exponentdigits++;
          }
        }
        if(!ignorepattern && (((digitleftcount + zerodigitcount) < 1) || (rec.exponentdigits < 1))){
          success.v=false;
        }
        i--;
        loop=false;
        break;
      default:
        i--;
        loop=false;
      }
      i++;
    }
    if((zerodigitcount == 0) && (digitleftcount > 0) && (decimalpos >= 0)){
      digits=decimalpos;
      if(digits == 0){
        digits=1;
      }
      digitrightcount=digitleftcount - digits;
      digitleftcount=digits - 1;
      zerodigitcount=1;
    }
    if(((decimalpos < 0) && (digitrightcount > 0)) || (groupingcount == 0) || ((decimalpos >= 0) && ((decimalpos < digitleftcount) || (decimalpos > (digitleftcount + zerodigitcount))))){
      success.v=false;
    }
    if(!ignorepattern){
      totaldigits=digitleftcount + zerodigitcount + digitrightcount;
      if(decimalpos >= 0){
        rec.maxfractiondigits=totaldigits - decimalpos;
        rec.minfractiondigits=digitleftcount + zerodigitcount - decimalpos;
        if(rec.minfractiondigits < 0){
          rec.minfractiondigits=0;
        }
      }else 
        rec.maxfractiondigits=0;
      digits=(decimalpos > 0)?decimalpos:totaldigits;
      rec.minintegerdigits=digits - digitleftcount;
      if(rec.exponential){
        rec.maxintegerdigits=digitleftcount + rec.minintegerdigits;
        if((rec.maxfractiondigits == 0) && (rec.minintegerdigits == 0)){
          rec.minintegerdigits=1;
        }
      }
      rec.groupingsize=(groupingcount > 0)?groupingcount:0;
      rec.decimalvisible=(decimalpos == 0) || (decimalpos == totaldigits);
    }
    start.v=i;
  }
  rec=Create_tnumericrec().create(currcode);
  pos.v=0;
  success.v=true;
  rec.positiveprefix=parseaffix(pos,success,false);
  parsetrunk(pos,success,false);
  rec.positivesuffix=parseaffix(pos,success,false);
  if((pos.v < __string_length(format)) && (__string_charat(format,pos.v + 1) == ';')){
    pos.v++;
    rec.negativeprefix=parseaffix(pos,success,true);
    parsetrunk(pos,success,true);
    rec.negativesuffix=parseaffix(pos,success,true);
  }else {
    rec.negativeprefix=self.minussign + rec.positiveprefix;
    rec.negativesuffix=rec.positivesuffix;
  }
  if(success.v){
    return rec;
  }else {
    free(rec);
    return null;
  }
}

function tnumericlocale_tryparse(s,format,value,currcode){
  var self=this;
  var result=0;
  var haspositiveprefix=0;
  var hasnegativeprefix=0;
  var haspositivesuffix=0;
  var hasnegativesuffix=0;
  var positive=0;
  var negative=0;
  var valueonly="";
  var pos=0;
  var rec=null;
  function getdigit(ch){
    var result=0;
    var code=0;
    var digit=0;
    result=-1;
    if((ch >= '0') && (ch <= '9')){
      return ch - '0';
    }else 
    if(self.zerodigit != '0'){
      code=ch.charCodeAt(0);
      digit=self.zerodigit.charCodeAt(0);
      if((code >= digit) && (code <= (digit + 9))){
        return code - digit;
      }
    }
    return result;
  }
  function parsenumber(text){
    var result=0.0;
    var hasdecimal=0;
    var hasexponent=0;
    var hasdigit=0;
    var scale=0;
    var groups="";
    var decimals="";
    var ch="";
    var digit=0;
    var normaltext="";
    var pos=0;
    hasdecimal=false;
    hasexponent=false;
    hasdigit=false;
    normaltext='';
    scale=1;
    if(rec.currencyformat){
      groups=self.monetarygroupingseparator;
      decimals=self.monetaryseparator;
    }else {
      groups=self.groupingseparator;
      decimals=self.decimalseparator;
    }
    pos=0;
    for(;pos < __string_length(text);){
      ch=__string_charat(text,pos + 1);
      digit=getdigit(ch);
      if((digit >= 0) && (digit <= 9)){
        normaltext+=__integer_tostring(digit);
        hasdigit=true;
      }else 
      if(ch == decimals){
        if(hasdecimal || hasexponent){
          break;
        }
        normaltext+='.';
        hasdecimal=true;
      }else 
      if(ch == groups){
        if(hasdecimal || hasexponent){
          break;
        }
        pos++;
        continue;
      }else 
      if(ch == self.exponentialsymbol){
        if(hasexponent){
          break;
        }
        normaltext+='E';
        hasexponent=true;
      }else 
      if((ch == '+') || (ch == '-')){
        normaltext+=ch;
      }else 
      if(ch == self.percent){
        if(scale != 1){
          break;
        }
        scale=100;
        if(hasdigit){
          pos++;
          break;
        }
      }else 
      if(ch == self.permill){
        if(scale != 1){
          break;
        }
        scale=1000;
        if(hasdigit){
          pos++;
          break;
        }
      }else 
        break;
      pos++;
    }
    result=parseFloat(normaltext);
    if(!isNaN(result)){
      return result / scale;
    }
    return result;
  }
  value.v=0.0;
  pos=0;
  if(currcode == ''){
    currcode=self.currencycode;
  }
  if(currcode == ''){
    currcode=defaultcurrencycode;
  }
  rec=self.createpattern(format,currcode);
  result=rec != null;
  if(result){
    try{
      haspositiveprefix=__string_startswith(s,rec.positiveprefix);
      hasnegativeprefix=__string_startswith(s,rec.negativeprefix);
      haspositivesuffix=__string_endswith(s,rec.positivesuffix);
      hasnegativesuffix=__string_endswith(s,rec.negativesuffix);
      positive=haspositiveprefix && haspositivesuffix;
      negative=hasnegativeprefix && hasnegativesuffix;
      if(positive && negative){
        if(__string_length(rec.positiveprefix) > __string_length(rec.negativeprefix)){
          negative=false;
        }else 
        if(__string_length(rec.positiveprefix) < __string_length(rec.negativeprefix)){
          positive=false;
        }else 
        if(__string_length(rec.positivesuffix) >= __string_length(rec.negativesuffix)){
          negative=false;
        }else 
          positive=false;
      }else 
      if(!(positive || negative)){
        result=false;
        return result;
      }
      valueonly=null;
      if(positive){
        pos+=__string_length(rec.positiveprefix);
        valueonly=__string_substring(s,pos + 1,__string_length(s) - __string_length(rec.positivesuffix));
      }else {
        pos+=__string_length(rec.negativeprefix);
        valueonly=__string_substring(s,pos + 1,__string_length(s) - __string_length(rec.negativesuffix));
      }
      if(__string_equals(valueonly,self.infinity)){
        pos+=__string_length(self.infinity);
        value.v=Positive_Infinity();
      }else 
      if(__string_equals(valueonly,self.notnumber)){
        pos+=__string_length(self.notnumber);
        value.v=nan();
      }else 
        value.v=parsenumber(valueonly);
      if(negative){
        value.v=-value.v;
      }
    }finally{
      free(rec);
    }
  }
  return result;
}

function tnumericlocale_tostring(value,format,currcode){
  var self=this;
  var result="";
  var isnegative=0;
  var rec=null;
  function formatint(value){

    return floattostr(value);
  }
  function formatfixed(value,digits){
    var result="";
    var power=0.0;
    var intvalue=0.0;
    var frac=0.0;
    var hasfractional=0;
    var s="";
    var groups="";
    var decimals="";
    var i=0;
    var delta=0;
    var digitlen=0;
    result='';
    power=Math.pow(10,rec.maxfractiondigits);
    intvalue=Math.floor(value);
    frac=Math.floor(((value - intvalue) * power) + 0.5);
    if(frac >= power){
      intvalue+=1.0;
      frac-=power;
    }
    hasfractional=(rec.minfractiondigits > 0) || (frac > 0);
    s=formatint(intvalue);
    if(rec.currencyformat){
      groups=self.monetarygroupingseparator;
      decimals=self.monetaryseparator;
    }else {
      groups=self.groupingseparator;
      decimals=self.decimalseparator;
    }
    delta=self.zerodigit.charCodeAt(0) - '0'.charCodeAt(0);
    digitlen=__string_length(s);
    if((intvalue >= 0) && (digits > 0)){
      for(i=digitlen;i<=digits - 1;i++){
        result+=self.zerodigit;
      }
      for(i=0;i<=digitlen - 1;i++){
        result+=ShiftChar(s,i,delta);
        if(((digitlen - i) > 1) && (rec.groupingsize > 0) && (((digitlen - i) % rec.groupingsize) == 1)){
          result+=groups;
        }
      }
    }else 
    if(!hasfractional){
      result+=self.zerodigit;
    }
    if(rec.decimalvisible || hasfractional){
      result+=decimals;
    }
    s=formatint(Math.floor(frac + power + 0.5));
    digitlen=__string_length(s);
    for(;(__string_charat(s,digitlen) == '0') && (digitlen > (rec.minfractiondigits + 1));){
      digitlen--;
    }
    for(i=1;i<=digitlen - 1;i++){
      result+=ShiftChar(s,i,delta);
    }
    return result;
  }
  function formatexponent(exponent){
    var result="";
    var s="";
    var len=0;
    var delta=0;
    var i=0;
    result=self.exponentialsymbol;
    if(exponent < 0){
      exponent=-exponent;
      result+=self.minussign;
    }
    s=formatint(exponent);
    len=__string_length(s);
    for(i=len;i<=rec.exponentdigits - 1;i++){
      result+=self.zerodigit;
    }
    delta=self.zerodigit.charCodeAt(0) - '0'.charCodeAt(0);
    for(i=0;i<=len - 1;i++){
      result+=ShiftChar(s,i,delta);
    }
    return result;
  }
  function formatexponential(value){

    var exponent=0;
    var digits=0;
    var i=0;
    if(value == 0.0){
      return formatfixed(value,rec.minintegerdigits) + formatexponent(0);
    }else {
      exponent=Math.floor(Math.log(value) / Math.log(10));
      value=value / Math.pow(10,exponent);
      digits=rec.minintegerdigits;
      if((rec.maxintegerdigits > 1) && (rec.maxintegerdigits > rec.minintegerdigits)){
        for(;(exponent % rec.maxintegerdigits) != 0;){
          value*=10;
          exponent--;
        }
        digits=1;
      }else 
      if(rec.minintegerdigits < 1){
        exponent++;
        value=value / 10;
      }else {
        for(i=1;i<=rec.minintegerdigits - 1;i++){
          value*=10;
          exponent--;
        }
      }
      return formatfixed(value,digits) + formatexponent(exponent);
    }
  }
  if(isNaN(value)){
    return self.notnumber;
  }
  if(currcode == ''){
    currcode=self.currencycode;
  }
  if(currcode == ''){
    currcode=defaultcurrencycode;
  }
  rec=self.createpattern(format,currcode);
  result='';
  if(rec != null){
    try{
      isnegative=(value < 0.0) || ((value == 0.0) && ((1 / value) < 0.0));
      result=(isnegative)?result + rec.negativeprefix:result + rec.positiveprefix;
      if(__double_isinfinity(value)){
        result+=self.infinity;
      }else {
        if(isnegative){
          value=-value;
        }
        value*=rec.multiplier;
        result=(rec.exponential)?result + formatexponential(value):result + formatfixed(value,rec.minintegerdigits);
        result=(isnegative)?result + rec.negativesuffix:result + rec.positivesuffix;
      }
    }finally{
      free(rec);
    }
  }
  return result;
}

function tlocaleinfo_create(props){
  var self=this;
  tobject.prototype.create.call(self);
  self.datetimelocale=Create_tdatetimelocale().create(null);
  self.numericlocale=Create_tnumericlocale().create(null);
  self.init(props);
  return self;
}

function tlocaleinfo_init(props){
  var self=this;
  var childprops=[];
  childprops=(props != null)?props['DateTimeLocale']:null;
  self.datetimelocale.init(childprops);
  childprops=(props != null)?props['NumericLocale']:null;
  self.numericlocale.init(childprops);
}

function tlocaleinfo_destroy(){
  var self=this;
  free(self.numericlocale);
  free(self.datetimelocale);
  tobject.prototype.destroy.call(self);
}

function initcurrentlocale(){  currentlocale=null;
  if(typeof(gv_currentlocale) != 'undefined'){
    currentlocale=Create_tlocaleinfo().create(gv_currentlocale);
  }
}

function InitCurrencyList(){  
    return {USD : "$", AED : "Dh", ARS : "$", AWG : "\u0192", AUD : "$", BSD : "$", BBD : "$", BEF : "\u20A3",
            BZD : "$", BMD : "$", BOB : "$", BRL : "R$", BRC : "\u20A2", GBP : "\u00A3", BND : "$", KHR : "\u17DB",
            CAD : "$", KYD : "$", CLP : "$", CNY : "\u5143", COP : "\u20B1", CRC : "\u20A1", CUP : "\u20B1", CYP : "\u00A3",
            DKK : "kr", DOP : "\u20B1", XCD : "$", EGP : "\u00A3", SVC : "\u20A1", EUR : "\u20AC", XEU : "\u20A0",
            FKP : "\u00A3", FJD : "$", FRF : "\u20A3", GIP : "\u00A3", GRD : "\u20AF", GGP : "\u00A3", GYD : "$", NLG : "\u0192",
            HKD : "$", INR : "\u20A8", IRR : "\uFDFC", IEP : "\u00A3", IMP : "\u00A3", ILS : "\u20AA", ITL : "\u20A4",
            JMD : "$", JPY : "\u00A5", JEP : "\u00A3", KPW : "\u20A9", KRW : "\u20A9", LAK : "\u20AD", LBP : "\u00A3", LRD : "$",
            LUF : "\u20A3", MTL : "\u20A4", MUR : "\u20A8", MXN : "$", MNT : "\u20AE", NAD : "$", NPR : "\u20A8", ANG : "\u0192",
            NZD : "$", OMR : "\uFDFC", PKR : "\u20A8", PEN : "S/.", PHP : "\u20B1", QAR : "\uFDFC", RUB : "\u0440\u0443\u0431",
            SHP : "\u00A3", SAR : "\uFDFC", SCR : "\u20A8", SGD : "$", SBD : "$", ZAR : "R", ESP : "\u20A7", LKR : "\u20A8",
            SEK : "kr", SRD : "$", SYP : "\u00A3", TWD : "\u5143", THB : "\u0E3F", TTD : "$", TRY : "\u20A4", TRL : "\u20A4",
            TVD : "$", UYU : "\u20B1", VAL : "\u20A4", VND : "\u20AB", YER : "\uFDFC", ZWD : "$"};
  
}

function currencylist(){

  if(gv_currencylist == null){
    gv_currencylist=InitCurrencyList();
  }
  return gv_currencylist;
}

_lddmods["SystemGlobalization"]=true;
function webmethod(){}
function Register_webmethod(){
  if(IsRegisteredwebmethod)return;
  Register_tjsonclient();
  var p=new tjsonclient();
  p.zb="webmethod";
  p.zc=webmethod;
  p.ParentClass=tjsonclient;
  p.createrequestobject=webmethod_createrequestobject;
  p.parseresponse=webmethod_parseresponse;
  p.create=webmethod_create;
  p.execute=webmethod_execute;
  p.handlejsonresponse=webmethod_handlejsonresponse;
  p.handleresponse=webmethod_handleresponse;
  webmethod.prototype=p;
  IsRegisteredwebmethod=true;
}
function Create_webmethod(p){
  Register_webmethod();
  if(p==void(0))var p=new webmethod();
  p=Create_tjsonclient(p);
  p.zb="webmethod";
  p.methodname="";
  p.onwebmethodreturn=_IMthod(false);
  return p
}

function webmethod_create(amethodname){
  var self=this;
  tjsonclient.prototype.create.call(self);
  self.methodname=amethodname;
  return self;
}

function webmethod_execute(){
  var self=this;
  self.sendrequest(self.methodname,self.createrequestobject());
}

function webmethod_createrequestobject(){


  return Create_TJObject();
}

function webmethod_parseresponse(response){

}

function webmethod_handlejsonresponse(response){
  var self=this;
  if(response != null){
    self.parseresponse(response);
  }
  self.handleresponse();
}

function webmethod_handleresponse(){
  var self=this;
  if(assigned(self.onwebmethodreturn)){
    self.onwebmethodreturn._o[self.onwebmethodreturn._p](self);
  }
}

_lddmods["SystemWebMethod"]=true;
function Init_tcontainercreationattrs(w,d){
  if(w){
    var p=AddWrapper(new Object());
    var q=p.v;
  } else {
    var p={};
    var q=p;
  }
  q.cangrow=0;
  q.canshrink=0;
  q.shrinkonhide=0;
  q.layout=0;
  if(d != void(0)){
    SetVal_tcontainercreationattrs(d,p);
  }
  return p
}

function SetVal_tcontainercreationattrs(d,p){
  p=GetVal(p);
  p.cangrow=SetVal(p.cangrow,GetVal(d.cangrow));
  p.canshrink=SetVal(p.canshrink,GetVal(d.canshrink));
  p.shrinkonhide=SetVal(p.shrinkonhide,GetVal(d.shrinkonhide));
  p.layout=SetVal(p.layout,GetVal(d.layout));
}

function tcontainerstyle(){}
function Register_tcontainerstyle(){
  if(IsRegisteredtcontainerstyle)return;
  Register_tresizeablecontrolstyles();
  var p=new tresizeablecontrolstyles();
  p.zb="tcontainerstyle";
  p.zc=tcontainerstyle;
  p.ParentClass=tresizeablecontrolstyles;
  tcontainerstyle.prototype=p;
  IsRegisteredtcontainerstyle=true;
}
function Create_tcontainerstyle(p){
  Register_tcontainerstyle();
  if(p==void(0))var p=new tcontainerstyle();
  p=Create_tresizeablecontrolstyles(p);
  p.zb="tcontainerstyle";
  return p
}

function container(){}
function Register_container(){
  if(IsRegisteredcontainer)return;
  Register_twebcontrol();
  var p=new twebcontrol();
  p.zb="container";
  p.zc=container;
  p.ParentClass=twebcontrol;
  p.applydeltay_tosiblings=container_applydeltay_tosiblings;
  p.ispanel=container_ispanel;
  p.createcontrolstyle=container_createcontrolstyle;
  p.getproperty_cangrow=container_getproperty_cangrow;
  p.setproperty_cangrow=container_setproperty_cangrow;
  p.getproperty_canshrink=container_getproperty_canshrink;
  p.setproperty_canshrink=container_setproperty_canshrink;
  p.setproperty_visible=container_setproperty_visible;
  p.sortctrls=container_sortctrls;
  p.isflow=container_isflow;
  p.create0=container_create0;
  p.zd=p.destroy=container_destroy;
  p.setupdomhandle=container_setupdomhandle;
  p.setupgrowshrinkhelper=container_setupgrowshrinkhelper;
  p.setupcontainerattrs=container_setupcontainerattrs;
  p.contentheight=container_contentheight;
  container.prototype=p;
  IsRegisteredcontainer=true;
}
function Create_container(p){
  Register_container();
  if(p==void(0))var p=new container();
  p=Create_twebcontrol(p);
  p.zb="container";
  p.containerattrs=Init_tcontainercreationattrs(false);
  return p
}

function tnavigationbarvalues(){}
function Register_tnavigationbarvalues(){
  if(IsRegisteredtnavigationbarvalues)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tnavigationbarvalues";
  p.zc=tnavigationbarvalues;
  p.ParentClass=tobject;
  p.create=tnavigationbarvalues_create;
  p.readfromstring=tnavigationbarvalues_readfromstring;
  tnavigationbarvalues.prototype=p;
  IsRegisteredtnavigationbarvalues=true;
}
function Create_tnavigationbarvalues(p){
  Register_tnavigationbarvalues();
  if(p==void(0))var p=new tnavigationbarvalues();
  p=Create_tobject(p);
  p.zb="tnavigationbarvalues";
  p.visible=0;
  p.alignment=0;
  p.spacing=0;
  p.margin=0;
  p.offset=0;
  p.buttons="";
  p.borderstyle=0;
  p.borderwidth=0;
  p.bordercolor=0;
  p.color=0;
  p.parentcolor=0;
  p.smallimages=0;
  p.buttonstyle="";
  p.fontcolor=0;
  p.fontsize=0;
  p.fontname="";
  p.fontstyle={};
  p.autofont=0;
  return p
}

function tbandstyle(){}
function Register_tbandstyle(){
  if(IsRegisteredtbandstyle)return;
  Register_tcontainerstyle();
  var p=new tcontainerstyle();
  p.zb="tbandstyle";
  p.zc=tbandstyle;
  p.ParentClass=tcontainerstyle;
  p.getstylename=tbandstyle_getstylename;
  p.applycontrolstyle=tbandstyle_applycontrolstyle;
  p.applyborderstyle=tbandstyle_applyborderstyle;
  tbandstyle.prototype=p;
  IsRegisteredtbandstyle=true;
}
function Create_tbandstyle(p){
  Register_tbandstyle();
  if(p==void(0))var p=new tbandstyle();
  p=Create_tcontainerstyle(p);
  p.zb="tbandstyle";
  return p
}

function tbandbandinfo(){}
function Register_tbandbandinfo(){
  if(IsRegisteredtbandbandinfo)return;
  Register_twebcontrolbandinfo();
  var p=new twebcontrolbandinfo();
  p.zb="tbandbandinfo";
  p.zc=tbandbandinfo;
  p.ParentClass=twebcontrolbandinfo;
  p.setupdomhandles=tbandbandinfo_setupdomhandles;
  p.processhandles=tbandbandinfo_processhandles;
  tbandbandinfo.prototype=p;
  IsRegisteredtbandbandinfo=true;
}
function Create_tbandbandinfo(p){
  Register_tbandbandinfo();
  if(p==void(0))var p=new tbandbandinfo();
  p=Create_twebcontrolbandinfo(p);
  p.zb="tbandbandinfo";
  p.fembeddedfieldhandles=[];
  return p
}

function band(){}
function Register_band(){
  if(IsRegisteredband)return;
  Register_container();
  var p=new container();
  p.zb="band";
  p.zc=band;
  p.ParentClass=container;
  p.getlayoutdiv=band_getlayoutdiv;
  p.setupfieldnames=band_setupfieldnames;
  p.getproperty_left=band_getproperty_left;
  p.getproperty_top=band_getproperty_top;
  p.createcontrolstyle=band_createcontrolstyle;
  p.getproperty_visible=band_getproperty_visible;
  p.setproperty_visible=band_setproperty_visible;
  p.getproperty_horizontalplacement=band_getproperty_horizontalplacement;
  p.getproperty_verticalplacement=band_getproperty_verticalplacement;
  p.getproperty_embeddedfieldname=band_getproperty_embeddedfieldname;
  p.getproperty_embeddedfieldvalue=band_getproperty_embeddedfieldvalue;
  p.setproperty_embeddedfieldvalue=band_setproperty_embeddedfieldvalue;
  p.updatehorzplacement=band_updatehorzplacement;
  p.createbandinfo=band_createbandinfo;
  p.sortctrls=band_sortctrls;
  p.clone=band_clone;
  p.delete_=band_delete_;
  p.moveto=band_moveto;
  p.restore=band_restore;
  p.updatestyles=band_updatestyles;
  p.domchanging=band_domchanging;
  p.domchanged=band_domchanged;
  p.create0=band_create0;
  p.setupbandattrs=band_setupbandattrs;
  p.setupdomhandle=band_setupdomhandle;
  p.embeddedfieldcount=band_embeddedfieldcount;
  band.prototype=p;
  IsRegisteredband=true;
}
function Create_band(p){
  Register_band();
  if(p==void(0))var p=new band();
  p=Create_container(p);
  p.zb="band";
  p.fsavelayoutdiv=null;
  p.fembeddedfieldnames=[];
  p.bandtype=0;
  p.currentrecordindex=0;
  p.navigationbar="";
  return p
}

function tbuttonstyle(){}
function Register_tbuttonstyle(){
  if(IsRegisteredtbuttonstyle)return;
  Register_tcontrolstyles();
  var p=new tcontrolstyles();
  p.zb="tbuttonstyle";
  p.zc=tbuttonstyle;
  p.ParentClass=tcontrolstyles;
  p.getinnerhandle=tbuttonstyle_getinnerhandle;
  p.getstylename=tbuttonstyle_getstylename;
  tbuttonstyle.prototype=p;
  IsRegisteredtbuttonstyle=true;
}
function Create_tbuttonstyle(p){
  Register_tbuttonstyle();
  if(p==void(0))var p=new tbuttonstyle();
  p=Create_tcontrolstyles(p);
  p.zb="tbuttonstyle";
  return p
}

function tbuttonbandinfo(){}
function Register_tbuttonbandinfo(){
  if(IsRegisteredtbuttonbandinfo)return;
  Register_twebcontrolbandinfo();
  var p=new twebcontrolbandinfo();
  p.zb="tbuttonbandinfo";
  p.zc=tbuttonbandinfo;
  p.ParentClass=twebcontrolbandinfo;
  p.setupdomhandles=tbuttonbandinfo_setupdomhandles;
  p.processhandles=tbuttonbandinfo_processhandles;
  p.getinputhandle=tbuttonbandinfo_getinputhandle;
  tbuttonbandinfo.prototype=p;
  IsRegisteredtbuttonbandinfo=true;
}
function Create_tbuttonbandinfo(p){
  Register_tbuttonbandinfo();
  if(p==void(0))var p=new tbuttonbandinfo();
  p=Create_twebcontrolbandinfo(p);
  p.zb="tbuttonbandinfo";
  p.btnhandle=null;
  return p
}

function button(){}
function Register_button(){
  if(IsRegisteredbutton)return;
  Register_twebcontrol();
  var p=new twebcontrol();
  p.zb="button";
  p.zc=button;
  p.ParentClass=twebcontrol;
  p.setproperty_down=button_setproperty_down;
  p.setproperty_groupindex=button_setproperty_groupindex;
  p.setproperty_width=button_setproperty_width;
  p.setproperty_height=button_setproperty_height;
  p.getproperty_caption=button_getproperty_caption;
  p.setproperty_caption=button_setproperty_caption;
  p.getproperty_fontsize=button_getproperty_fontsize;
  p.setproperty_fontsize=button_setproperty_fontsize;
  p.createcontrolstyle=button_createcontrolstyle;
  p.allowcontrolstyles=button_allowcontrolstyles;
  p.updateexclusive=button_updateexclusive;
  p.handleeffect=button_handleeffect;
  p.attacheffecteventhandlers=button_attacheffecteventhandlers;
  p.createbandinfo=button_createbandinfo;
  p.create0=button_create0;
  p.setupbuttonattrs=button_setupbuttonattrs;
  p.getcontrolhtml=button_getcontrolhtml;
  p.buttonhandle=button_buttonhandle;
  button.prototype=p;
  IsRegisteredbutton=true;
}
function Create_button(p){
  Register_button();
  if(p==void(0))var p=new button();
  p=Create_twebcontrol(p);
  p.zb="button";
  p.fdefault=0;
  p.fdown=0;
  p.fgroupindex=0;
  return p
}

function Init_tcheckboxcreationattrs(w,d){
  if(w){
    var p=AddWrapper(new Object());
    var q=p.v;
  } else {
    var p={};
    var q=p;
  }
  q.cangrow=0;
  q.canshrink=0;
  q.checked=0;
  q.caption="";
  if(d != void(0)){
    SetVal_tcheckboxcreationattrs(d,p);
  }
  return p
}

function SetVal_tcheckboxcreationattrs(d,p){
  p=GetVal(p);
  p.cangrow=SetVal(p.cangrow,GetVal(d.cangrow));
  p.canshrink=SetVal(p.canshrink,GetVal(d.canshrink));
  p.checked=SetVal(p.checked,GetVal(d.checked));
  p.caption=SetVal(p.caption,GetVal(d.caption));
}

function tcheckboxbandinfo(){}
function Register_tcheckboxbandinfo(){
  if(IsRegisteredtcheckboxbandinfo)return;
  Register_twebcontrolbandinfo();
  var p=new twebcontrolbandinfo();
  p.zb="tcheckboxbandinfo";
  p.zc=tcheckboxbandinfo;
  p.ParentClass=twebcontrolbandinfo;
  p.setupdomhandles=tcheckboxbandinfo_setupdomhandles;
  p.processhandles=tcheckboxbandinfo_processhandles;
  p.getinputhandle=tcheckboxbandinfo_getinputhandle;
  tcheckboxbandinfo.prototype=p;
  IsRegisteredtcheckboxbandinfo=true;
}
function Create_tcheckboxbandinfo(p){
  Register_tcheckboxbandinfo();
  if(p==void(0))var p=new tcheckboxbandinfo();
  p=Create_twebcontrolbandinfo(p);
  p.zb="tcheckboxbandinfo";
  p.checkboxhandle=null;
  p.captionhandle=null;
  return p
}

function checkbox(){}
function Register_checkbox(){
  if(IsRegisteredcheckbox)return;
  Register_twebcontrol();
  var p=new twebcontrol();
  p.zb="checkbox";
  p.zc=checkbox;
  p.ParentClass=twebcontrol;
  p.handleoncaptionclick=checkbox_handleoncaptionclick;
  p.getproperty_caption=checkbox_getproperty_caption;
  p.setproperty_caption=checkbox_setproperty_caption;
  p.setproperty_cangrow=checkbox_setproperty_cangrow;
  p.setproperty_canshrink=checkbox_setproperty_canshrink;
  p.getproperty_cangrow=checkbox_getproperty_cangrow;
  p.getproperty_canshrink=checkbox_getproperty_canshrink;
  p.getproperty_checked=checkbox_getproperty_checked;
  p.setproperty_checked=checkbox_setproperty_checked;
  p.attachdomeventhandlers0=checkbox_attachdomeventhandlers0;
  p.detachdomeventhandlers=checkbox_detachdomeventhandlers;
  p.createbandinfo=checkbox_createbandinfo;
  p.create0=checkbox_create0;
  p.zd=p.destroy=checkbox_destroy;
  p.getcontrolhtml=checkbox_getcontrolhtml;
  p.contentheight=checkbox_contentheight;
  p.getdatavalue=checkbox_getdatavalue;
  p.setdatavalue=checkbox_setdatavalue;
  p.checkboxhandle=checkbox_checkboxhandle;
  p.captionhandle=checkbox_captionhandle;
  checkbox.prototype=p;
  IsRegisteredcheckbox=true;
}
function Create_checkbox(p){
  Register_checkbox();
  if(p==void(0))var p=new checkbox();
  p=Create_twebcontrol(p);
  p.zb="checkbox";
  p.checkboxattrs=Init_tcheckboxcreationattrs(false);
  return p
}

function tpartscontainer(){}
function Register_tpartscontainer(){
  if(IsRegisteredtpartscontainer)return;
  Register_container();
  var p=new container();
  p.zb="tpartscontainer";
  p.zc=tpartscontainer;
  p.ParentClass=container;
  p.getpartwithdomhandle=tpartscontainer_getpartwithdomhandle;
  p.allowcontrolstyles=tpartscontainer_allowcontrolstyles;
  tpartscontainer.prototype=p;
  IsRegisteredtpartscontainer=true;
}
function Create_tpartscontainer(p){
  Register_tpartscontainer();
  if(p==void(0))var p=new tpartscontainer();
  p=Create_container(p);
  p.zb="tpartscontainer";
  return p
}

function tlistboxstyle(){}
function Register_tlistboxstyle(){
  if(IsRegisteredtlistboxstyle)return;
  Register_tcontrolstyles();
  var p=new tcontrolstyles();
  p.zb="tlistboxstyle";
  p.zc=tlistboxstyle;
  p.ParentClass=tcontrolstyles;
  p.getinnerhandle=tlistboxstyle_getinnerhandle;
  tlistboxstyle.prototype=p;
  IsRegisteredtlistboxstyle=true;
}
function Create_tlistboxstyle(p){
  Register_tlistboxstyle();
  if(p==void(0))var p=new tlistboxstyle();
  p=Create_tcontrolstyles(p);
  p.zb="tlistboxstyle";
  return p
}

function tlistboxbandinfo(){}
function Register_tlistboxbandinfo(){
  if(IsRegisteredtlistboxbandinfo)return;
  Register_twebcontrolbandinfo();
  var p=new twebcontrolbandinfo();
  p.zb="tlistboxbandinfo";
  p.zc=tlistboxbandinfo;
  p.ParentClass=twebcontrolbandinfo;
  p.setupdomhandles=tlistboxbandinfo_setupdomhandles;
  p.processhandles=tlistboxbandinfo_processhandles;
  p.getinputhandle=tlistboxbandinfo_getinputhandle;
  tlistboxbandinfo.prototype=p;
  IsRegisteredtlistboxbandinfo=true;
}
function Create_tlistboxbandinfo(p){
  Register_tlistboxbandinfo();
  if(p==void(0))var p=new tlistboxbandinfo();
  p=Create_twebcontrolbandinfo(p);
  p.zb="tlistboxbandinfo";
  p.listhandle=null;
  p.focuseditem=null;
  p.highlighteditem=null;
  p.anchorindex=0;
  p.currentitemindex=0;
  p.mouseselecting=0;
  return p
}

function listbox(){}
function Register_listbox(){
  if(IsRegisteredlistbox)return;
  Register_tpartscontainer();
  var p=new tpartscontainer();
  p.zb="listbox";
  p.zc=listbox;
  p.ParentClass=tpartscontainer;
  p.setitemattr=listbox_setitemattr;
  p.indexofitemstartingwith=listbox_indexofitemstartingwith;
  p.islistboxhandle=listbox_islistboxhandle;
  p.islistboxitemhandle=listbox_islistboxitemhandle;
  p.updatelistboxitemstyle=listbox_updatelistboxitemstyle;
  p.handlekey=listbox_handlekey;
  p.handlemousedown=listbox_handlemousedown;
  p.handlemouseup=listbox_handlemouseup;
  p.handlemousemove=listbox_handlemousemove;
  p.handleclick=listbox_handleclick;
  p.handlekeydown=listbox_handlekeydown;
  p.handlekeypress=listbox_handlekeypress;
  p.handlemouseover=listbox_handlemouseover;
  p.handlemouseout=listbox_handlemouseout;
  p.isitemselected=listbox_isitemselected;
  p.getitemhandle=listbox_getitemhandle;
  p.getproperty_items=listbox_getproperty_items;
  p.setproperty_items=listbox_setproperty_items;
  p.getproperty_itemvalue=listbox_getproperty_itemvalue;
  p.setproperty_itemvalue=listbox_setproperty_itemvalue;
  p.getproperty_selected=listbox_getproperty_selected;
  p.setproperty_selected=listbox_setproperty_selected;
  p.getproperty_focuseditem=listbox_getproperty_focuseditem;
  p.setproperty_focuseditem=listbox_setproperty_focuseditem;
  p.getproperty_highlighteditem=listbox_getproperty_highlighteditem;
  p.setproperty_highlighteditem=listbox_setproperty_highlighteditem;
  p.getproperty_anchorindex=listbox_getproperty_anchorindex;
  p.setproperty_anchorindex=listbox_setproperty_anchorindex;
  p.getproperty_mouseselecting=listbox_getproperty_mouseselecting;
  p.setproperty_mouseselecting=listbox_setproperty_mouseselecting;
  p.getproperty_count=listbox_getproperty_count;
  p.getproperty_itemindex=listbox_getproperty_itemindex;
  p.setproperty_itemindex=listbox_setproperty_itemindex;
  p.getproperty_text=listbox_getproperty_text;
  p.setproperty_text=listbox_setproperty_text;
  p.getitemslisthandle=listbox_getitemslisthandle;
  p.getitemslist=listbox_getitemslist;
  p.getitemindex=listbox_getitemindex;
  p.scrollitemintoview=listbox_scrollitemintoview;
  p.scrollfocuseditemintoview=listbox_scrollfocuseditemintoview;
  p.getpagesize=listbox_getpagesize;
  p.setallitemsselected=listbox_setallitemsselected;
  p.selectrange=listbox_selectrange;
  p.processclick=listbox_processclick;
  p.createcontrolstyle=listbox_createcontrolstyle;
  p.setproperty_enabled=listbox_setproperty_enabled;
  p.attachdomeventhandlers0=listbox_attachdomeventhandlers0;
  p.clearvalue=listbox_clearvalue;
  p.deserializepair=listbox_deserializepair;
  p.createbandinfo=listbox_createbandinfo;
  p.disabledomhandle=listbox_disabledomhandle;
  p.create0=listbox_create0;
  p.setupdomhandle=listbox_setupdomhandle;
  p.getcontrolhtml=listbox_getcontrolhtml;
  p.getdatavalue=listbox_getdatavalue;
  p.setdatavalue=listbox_setdatavalue;
  p.deserializelist=listbox_deserializelist;
  p.clear=listbox_clear;
  p.additemwithvalue=listbox_additemwithvalue;
  p.indexof=listbox_indexof;
  p.indexofvalue=listbox_indexofvalue;
  p.clearselection=listbox_clearselection;
  listbox.prototype=p;
  IsRegisteredlistbox=true;
}
function Create_listbox(p){
  Register_listbox();
  if(p==void(0))var p=new listbox();
  p=Create_tpartscontainer(p);
  p.zb="listbox";
  p.fmultiselect=0;
  p.flistitemstyleobj=null;
  p.fitems=[];
  p.fvalues=[];
  p.fitemindex=0;
  return p
}

function buttoneditorstyles(){}
function Register_buttoneditorstyles(){
  if(IsRegisteredbuttoneditorstyles)return;
  Register_tcontrolstyles();
  var p=new tcontrolstyles();
  p.zb="buttoneditorstyles";
  p.zc=buttoneditorstyles;
  p.ParentClass=tcontrolstyles;
  p.getinnerhandle=buttoneditorstyles_getinnerhandle;
  buttoneditorstyles.prototype=p;
  IsRegisteredbuttoneditorstyles=true;
}
function Create_buttoneditorstyles(p){
  Register_buttoneditorstyles();
  if(p==void(0))var p=new buttoneditorstyles();
  p=Create_tcontrolstyles(p);
  p.zb="buttoneditorstyles";
  return p
}

function buttoneditor(){}
function Register_buttoneditor(){
  if(IsRegisteredbuttoneditor)return;
  Register_tpartscontainer();
  var p=new tpartscontainer();
  p.zb="buttoneditor";
  p.zc=buttoneditor;
  p.ParentClass=tpartscontainer;
  p.gettext=buttoneditor_gettext;
  p.settext=buttoneditor_settext;
  p.handlekeydown=buttoneditor_handlekeydown;
  p.handlechange=buttoneditor_handlechange;
  p.setreadonly=buttoneditor_setreadonly;
  p.updatepartsstate=buttoneditor_updatepartsstate;
  p.changetext=buttoneditor_changetext;
  p.geteditpart=buttoneditor_geteditpart;
  p.getbuttonpart=buttoneditor_getbuttonpart;
  p.createcontrolstyle=buttoneditor_createcontrolstyle;
  p.handlecreated=buttoneditor_handlecreated;
  p.setproperty_width=buttoneditor_setproperty_width;
  p.getpopupcontrol=buttoneditor_getpopupcontrol;
  p.initpopupcontrol=buttoneditor_initpopupcontrol;
  p.updatepopupcontrolafterdrop=buttoneditor_updatepopupcontrolafterdrop;
  p.updatepopupcontrolbeforedrop=buttoneditor_updatepopupcontrolbeforedrop;
  p.createpopupwindow=buttoneditor_createpopupwindow;
  p.processkeydown=buttoneditor_processkeydown;
  p.updatetext=buttoneditor_updatetext;
  p.iseditpartreadonly=buttoneditor_iseditpartreadonly;
  p.setproperty_enabled=buttoneditor_setproperty_enabled;
  p.handleeffect=buttoneditor_handleeffect;
  p.attachdomeventhandlers0=buttoneditor_attachdomeventhandlers0;
  p.disabledomhandle=buttoneditor_disabledomhandle;
  p.dropdown=buttoneditor_dropdown;
  p.isdroppeddown=buttoneditor_isdroppeddown;
  buttoneditor.prototype=p;
  IsRegisteredbuttoneditor=true;
}
function Create_buttoneditor(p){
  Register_buttoneditor();
  if(p==void(0))var p=new buttoneditor();
  p=Create_tpartscontainer(p);
  p.zb="buttoneditor";
  p.freadonly=0;
  p.fdroppeddownbandindex=0;
  p.fdroppeddownrepeaterindex=0;
  return p
}

function tpopuplistboxbandinfo(){}
function Register_tpopuplistboxbandinfo(){
  if(IsRegisteredtpopuplistboxbandinfo)return;
  Register_tlistboxbandinfo();
  var p=new tlistboxbandinfo();
  p.zb="tpopuplistboxbandinfo";
  p.zc=tpopuplistboxbandinfo;
  p.ParentClass=tlistboxbandinfo;
  p.getinputhandle=tpopuplistboxbandinfo_getinputhandle;
  tpopuplistboxbandinfo.prototype=p;
  IsRegisteredtpopuplistboxbandinfo=true;
}
function Create_tpopuplistboxbandinfo(p){
  Register_tpopuplistboxbandinfo();
  if(p==void(0))var p=new tpopuplistboxbandinfo();
  p=Create_tlistboxbandinfo(p);
  p.zb="tpopuplistboxbandinfo";
  return p
}

function popuplistbox(){}
function Register_popuplistbox(){
  if(IsRegisteredpopuplistbox)return;
  Register_listbox();
  var p=new listbox();
  p.zb="popuplistbox";
  p.zc=popuplistbox;
  p.ParentClass=listbox;
  p.setfilter=popuplistbox_setfilter;
  p.processclick=popuplistbox_processclick;
  p.createbandinfo=popuplistbox_createbandinfo;
  popuplistbox.prototype=p;
  IsRegisteredpopuplistbox=true;
}
function Create_popuplistbox(p){
  Register_popuplistbox();
  if(p==void(0))var p=new popuplistbox();
  p=Create_listbox(p);
  p.zb="popuplistbox";
  p.ffilter="";
  return p
}

function combobox(){}
function Register_combobox(){
  if(IsRegisteredcombobox)return;
  Register_buttoneditor();
  var p=new buttoneditor();
  p.zb="combobox";
  p.zc=combobox;
  p.ParentClass=buttoneditor;
  p.cancelautocomplete=combobox_cancelautocomplete;
  p.processautocompleteandfilter=combobox_processautocompleteandfilter;
  p.performsearch=combobox_performsearch;
  p.istextkey=combobox_istextkey;
  p.updatefromlistboxselection=combobox_updatefromlistboxselection;
  p.popuplistboxcontrol=combobox_popuplistboxcontrol;
  p.processkey=combobox_processkey;
  p.processpopupkey=combobox_processpopupkey;
  p.selectprevious=combobox_selectprevious;
  p.selectnext=combobox_selectnext;
  p.getcount=combobox_getcount;
  p.listboxinuse=combobox_listboxinuse;
  p.getitem=combobox_getitem;
  p.setitem=combobox_setitem;
  p.getitemindex=combobox_getitemindex;
  p.setitemindex=combobox_setitemindex;
  p.getitemvalue=combobox_getitemvalue;
  p.setitemvalue=combobox_setitemvalue;
  p.setstyle=combobox_setstyle;
  p.getpopupcontrol=combobox_getpopupcontrol;
  p.createpopupwindow=combobox_createpopupwindow;
  p.processkeydown=combobox_processkeydown;
  p.initpopupcontrol=combobox_initpopupcontrol;
  p.updatepopupcontrolafterdrop=combobox_updatepopupcontrolafterdrop;
  p.iseditpartreadonly=combobox_iseditpartreadonly;
  p.create0=combobox_create0;
  p.zd=p.destroy=combobox_destroy;
  p.indexof=combobox_indexof;
  p.indexofvalue=combobox_indexofvalue;
  p.setdatavalue=combobox_setdatavalue;
  p.getdatavalue=combobox_getdatavalue;
  combobox.prototype=p;
  IsRegisteredcombobox=true;
}
function Create_combobox(p){
  Register_combobox();
  if(p==void(0))var p=new combobox();
  p=Create_buttoneditor(p);
  p.zb="combobox";
  p.fautofilter=0;
  p.fautocomplete=0;
  p.fautodropdown=0;
  p.fautocompletedelay=0;
  p.fstyle=0;
  p.fautocompleteintervalid=0;
  p.flastkey=0;
  p.flookupsource="";
  p.flookuptextfield="";
  p.flookupdatafield="";
  p.flookupmethod=null;
  p.ontextchange=null;
  return p
}

function datetimeedit(){}
function Register_datetimeedit(){
  if(IsRegistereddatetimeedit)return;
  Register_buttoneditor();
  var p=new buttoneditor();
  p.zb="datetimeedit";
  p.zc=datetimeedit;
  p.ParentClass=buttoneditor;
  p.initpopupcontrol=datetimeedit_initpopupcontrol;
  p.getpopupcontrol=datetimeedit_getpopupcontrol;
  p.createpopupwindow=datetimeedit_createpopupwindow;
  p.updatepopupcontrolbeforedrop=datetimeedit_updatepopupcontrolbeforedrop;
  p.create0=datetimeedit_create0;
  p.getdatavalue=datetimeedit_getdatavalue;
  p.setdatavalue=datetimeedit_setdatavalue;
  p.getdatetime=datetimeedit_getdatetime;
  p.setdatetime=datetimeedit_setdatetime;
  datetimeedit.prototype=p;
  IsRegistereddatetimeedit=true;
}
function Create_datetimeedit(p){
  Register_datetimeedit();
  if(p==void(0))var p=new datetimeedit();
  p=Create_buttoneditor(p);
  p.zb="datetimeedit";
  p.fdatetime=null;
  p.fmode=0;
  p.fformat=0;
  p.fislocaltime=0;
  p.showcheckbox=0;
  p.checked=0;
  return p
}

function tstyleholdercontainer(){}
function Register_tstyleholdercontainer(){
  if(IsRegisteredtstyleholdercontainer)return;
  Register_container();
  var p=new container();
  p.zb="tstyleholdercontainer";
  p.zc=tstyleholdercontainer;
  p.ParentClass=container;
  p.create0=tstyleholdercontainer_create0;
  p.setupdomhandle=tstyleholdercontainer_setupdomhandle;
  p.allowcontrolstyles=tstyleholdercontainer_allowcontrolstyles;
  tstyleholdercontainer.prototype=p;
  IsRegisteredtstyleholdercontainer=true;
}
function Create_tstyleholdercontainer(p){
  Register_tstyleholdercontainer();
  if(p==void(0))var p=new tstyleholdercontainer();
  p=Create_container(p);
  p.zb="tstyleholdercontainer";
  return p
}

function tstyleholderbutton(){}
function Register_tstyleholderbutton(){
  if(IsRegisteredtstyleholderbutton)return;
  Register_button();
  var p=new button();
  p.zb="tstyleholderbutton";
  p.zc=tstyleholderbutton;
  p.ParentClass=button;
  p.setupdomhandle=tstyleholderbutton_setupdomhandle;
  p.getproperty_inputhandle=tstyleholderbutton_getproperty_inputhandle;
  tstyleholderbutton.prototype=p;
  IsRegisteredtstyleholderbutton=true;
}
function Create_tstyleholderbutton(p){
  Register_tstyleholderbutton();
  if(p==void(0))var p=new tstyleholderbutton();
  p=Create_button(p);
  p.zb="tstyleholderbutton";
  return p
}

function listboxitem(){}
function Register_listboxitem(){
  if(IsRegisteredlistboxitem)return;
  Register_tstyleholderbutton();
  var p=new tstyleholderbutton();
  p.zb="listboxitem";
  p.zc=listboxitem;
  p.ParentClass=tstyleholderbutton;
  listboxitem.prototype=p;
  IsRegisteredlistboxitem=true;
}
function Create_listboxitem(p){
  Register_listboxitem();
  if(p==void(0))var p=new listboxitem();
  p=Create_tstyleholderbutton(p);
  p.zb="listboxitem";
  return p
}

function tcalendarbandinfo(){}
function Register_tcalendarbandinfo(){
  if(IsRegisteredtcalendarbandinfo)return;
  Register_twebcontrolbandinfo();
  var p=new twebcontrolbandinfo();
  p.zb="tcalendarbandinfo";
  p.zc=tcalendarbandinfo;
  p.ParentClass=twebcontrolbandinfo;
  p.setupdomhandles=tcalendarbandinfo_setupdomhandles;
  p.processhandles=tcalendarbandinfo_processhandles;
  p.create0=tcalendarbandinfo_create0;
  p.zd=p.destroy=tcalendarbandinfo_destroy;
  tcalendarbandinfo.prototype=p;
  IsRegisteredtcalendarbandinfo=true;
}
function Create_tcalendarbandinfo(p){
  Register_tcalendarbandinfo();
  if(p==void(0))var p=new tcalendarbandinfo();
  p=Create_twebcontrolbandinfo(p);
  p.zb="tcalendarbandinfo";
  p.daynameshandles=[];
  p.dayshandles=[];
  p.dayshandle=null;
  p.todayhandle=null;
  p.datetime=null;
  return p
}

function calendar(){}
function Register_calendar(){
  if(IsRegisteredcalendar)return;
  Register_tpartscontainer();
  var p=new tpartscontainer();
  p.zb="calendar";
  p.zc=calendar;
  p.ParentClass=tpartscontainer;
  p.getproperty_datetime=calendar_getproperty_datetime;
  p.setproperty_datetime=calendar_setproperty_datetime;
  p.getproperty_startdate=calendar_getproperty_startdate;
  p.getdatetime=calendar_getdatetime;
  p.setupdaystyle=calendar_setupdaystyle;
  p.update=calendar_update;
  p.adddays=calendar_adddays;
  p.getmonth=calendar_getmonth;
  p.getyear=calendar_getyear;
  p.getdate=calendar_getdate;
  p.setdate=calendar_setdate;
  p.getstartdate=calendar_getstartdate;
  p.createbandinfo=calendar_createbandinfo;
  p.attachdomeventhandlers0=calendar_attachdomeventhandlers0;
  p.handletodayclick=calendar_handletodayclick;
  p.handledayclick=calendar_handledayclick;
  p.handledaymouseover=calendar_handledaymouseover;
  p.handledaymouseout=calendar_handledaymouseout;
  p.create0=calendar_create0;
  p.setupdomhandle=calendar_setupdomhandle;
  calendar.prototype=p;
  IsRegisteredcalendar=true;
}
function Create_calendar(p){
  Register_calendar();
  if(p==void(0))var p=new calendar();
  p=Create_tpartscontainer(p);
  p.zb="calendar";
  p.fdaythismonthstyleobj=null;
  p.fdayothermonthstyleobj=null;
  p.fdatetime=null;
  p.fislocaltime=0;
  return p
}

function tcalendarheaderbandinfo(){}
function Register_tcalendarheaderbandinfo(){
  if(IsRegisteredtcalendarheaderbandinfo)return;
  Register_twebcontrolbandinfo();
  var p=new twebcontrolbandinfo();
  p.zb="tcalendarheaderbandinfo";
  p.zc=tcalendarheaderbandinfo;
  p.ParentClass=twebcontrolbandinfo;
  p.setupdomhandles=tcalendarheaderbandinfo_setupdomhandles;
  p.processhandles=tcalendarheaderbandinfo_processhandles;
  tcalendarheaderbandinfo.prototype=p;
  IsRegisteredtcalendarheaderbandinfo=true;
}
function Create_tcalendarheaderbandinfo(p){
  Register_tcalendarheaderbandinfo();
  if(p==void(0))var p=new tcalendarheaderbandinfo();
  p=Create_twebcontrolbandinfo(p);
  p.zb="tcalendarheaderbandinfo";
  p.monthhandle=null;
  p.yearhandle=null;
  return p
}

function calendarheader(){}
function Register_calendarheader(){
  if(IsRegisteredcalendarheader)return;
  Register_container();
  var p=new container();
  p.zb="calendarheader";
  p.zc=calendarheader;
  p.ParentClass=container;
  p.update=calendarheader_update;
  p.handlenextyearclick=calendarheader_handlenextyearclick;
  p.handleprevyearclick=calendarheader_handleprevyearclick;
  p.handlenextmonthclick=calendarheader_handlenextmonthclick;
  p.handleprevmonthclick=calendarheader_handleprevmonthclick;
  p.createbandinfo=calendarheader_createbandinfo;
  p.setupdomhandle=calendarheader_setupdomhandle;
  calendarheader.prototype=p;
  IsRegisteredcalendarheader=true;
}
function Create_calendarheader(p){
  Register_calendarheader();
  if(p==void(0))var p=new calendarheader();
  p=Create_container(p);
  p.zb="calendarheader";
  return p
}

function calendardaytoday(){}
function Register_calendardaytoday(){
  if(IsRegisteredcalendardaytoday)return;
  Register_container();
  var p=new container();
  p.zb="calendardaytoday";
  p.zc=calendardaytoday;
  p.ParentClass=container;
  calendardaytoday.prototype=p;
  IsRegisteredcalendardaytoday=true;
}
function Create_calendardaytoday(p){
  Register_calendardaytoday();
  if(p==void(0))var p=new calendardaytoday();
  p=Create_container(p);
  p.zb="calendardaytoday";
  return p
}

function calendarprevyear(){}
function Register_calendarprevyear(){
  if(IsRegisteredcalendarprevyear)return;
  Register_button();
  var p=new button();
  p.zb="calendarprevyear";
  p.zc=calendarprevyear;
  p.ParentClass=button;
  calendarprevyear.prototype=p;
  IsRegisteredcalendarprevyear=true;
}
function Create_calendarprevyear(p){
  Register_calendarprevyear();
  if(p==void(0))var p=new calendarprevyear();
  p=Create_button(p);
  p.zb="calendarprevyear";
  return p
}

function calendarnextyear(){}
function Register_calendarnextyear(){
  if(IsRegisteredcalendarnextyear)return;
  Register_button();
  var p=new button();
  p.zb="calendarnextyear";
  p.zc=calendarnextyear;
  p.ParentClass=button;
  calendarnextyear.prototype=p;
  IsRegisteredcalendarnextyear=true;
}
function Create_calendarnextyear(p){
  Register_calendarnextyear();
  if(p==void(0))var p=new calendarnextyear();
  p=Create_button(p);
  p.zb="calendarnextyear";
  return p
}

function calendarprevmonth(){}
function Register_calendarprevmonth(){
  if(IsRegisteredcalendarprevmonth)return;
  Register_button();
  var p=new button();
  p.zb="calendarprevmonth";
  p.zc=calendarprevmonth;
  p.ParentClass=button;
  calendarprevmonth.prototype=p;
  IsRegisteredcalendarprevmonth=true;
}
function Create_calendarprevmonth(p){
  Register_calendarprevmonth();
  if(p==void(0))var p=new calendarprevmonth();
  p=Create_button(p);
  p.zb="calendarprevmonth";
  return p
}

function calendarnextmonth(){}
function Register_calendarnextmonth(){
  if(IsRegisteredcalendarnextmonth)return;
  Register_button();
  var p=new button();
  p.zb="calendarnextmonth";
  p.zc=calendarnextmonth;
  p.ParentClass=button;
  calendarnextmonth.prototype=p;
  IsRegisteredcalendarnextmonth=true;
}
function Create_calendarnextmonth(p){
  Register_calendarnextmonth();
  if(p==void(0))var p=new calendarnextmonth();
  p=Create_button(p);
  p.zb="calendarnextmonth";
  return p
}

function calendardaythismonth(){}
function Register_calendardaythismonth(){
  if(IsRegisteredcalendardaythismonth)return;
  Register_tstyleholdercontainer();
  var p=new tstyleholdercontainer();
  p.zb="calendardaythismonth";
  p.zc=calendardaythismonth;
  p.ParentClass=tstyleholdercontainer;
  calendardaythismonth.prototype=p;
  IsRegisteredcalendardaythismonth=true;
}
function Create_calendardaythismonth(p){
  Register_calendardaythismonth();
  if(p==void(0))var p=new calendardaythismonth();
  p=Create_tstyleholdercontainer(p);
  p.zb="calendardaythismonth";
  return p
}

function calendardayothermonth(){}
function Register_calendardayothermonth(){
  if(IsRegisteredcalendardayothermonth)return;
  Register_tstyleholdercontainer();
  var p=new tstyleholdercontainer();
  p.zb="calendardayothermonth";
  p.zc=calendardayothermonth;
  p.ParentClass=tstyleholdercontainer;
  calendardayothermonth.prototype=p;
  IsRegisteredcalendardayothermonth=true;
}
function Create_calendardayothermonth(p){
  Register_calendardayothermonth();
  if(p==void(0))var p=new calendardayothermonth();
  p=Create_tstyleholdercontainer(p);
  p.zb="calendardayothermonth";
  return p
}

function popupcalendar(){}
function Register_popupcalendar(){
  if(IsRegisteredpopupcalendar)return;
  Register_calendar();
  var p=new calendar();
  p.zb="popupcalendar";
  p.zc=popupcalendar;
  p.ParentClass=calendar;
  p.handlechange=popupcalendar_handlechange;
  p.isinplace=popupcalendar_isinplace;
  p.create0=popupcalendar_create0;
  p.setupdomhandle=popupcalendar_setupdomhandle;
  popupcalendar.prototype=p;
  IsRegisteredpopupcalendar=true;
}
function Create_popupcalendar(p){
  Register_popupcalendar();
  if(p==void(0))var p=new popupcalendar();
  p=Create_calendar(p);
  p.zb="popupcalendar";
  return p
}

function tcontrolpopup(){}
function Register_tcontrolpopup(){
  if(IsRegisteredtcontrolpopup)return;
  Register_twebpopupcontrol();
  var p=new twebpopupcontrol();
  p.zb="tcontrolpopup";
  p.zc=tcontrolpopup;
  p.ParentClass=twebpopupcontrol;
  p.deactivatepopupcontrol=tcontrolpopup_deactivatepopupcontrol;
  p.create0=tcontrolpopup_create0;
  p.activate=tcontrolpopup_activate;
  p.deactivate=tcontrolpopup_deactivate;
  tcontrolpopup.prototype=p;
  IsRegisteredtcontrolpopup=true;
}
function Create_tcontrolpopup(p){
  Register_tcontrolpopup();
  if(p==void(0))var p=new tcontrolpopup();
  p=Create_twebpopupcontrol(p);
  p.zb="tcontrolpopup";
  p.fpopupctrl=null;
  p.fdrophandle=null;
  p.fdropparent=null;
  p.dropindex=0;
  return p
}

function dropdownpopup(){}
function Register_dropdownpopup(){
  if(IsRegistereddropdownpopup)return;
  Register_tcontrolpopup();
  var p=new tcontrolpopup();
  p.zb="dropdownpopup";
  p.zc=dropdownpopup;
  p.ParentClass=tcontrolpopup;
  p.separateborder=dropdownpopup_separateborder;
  p.handleonclick=dropdownpopup_handleonclick;
  p.close=dropdownpopup_close;
  p.create0=dropdownpopup_create0;
  dropdownpopup.prototype=p;
  IsRegistereddropdownpopup=true;
}
function Create_dropdownpopup(p){
  Register_dropdownpopup();
  if(p==void(0))var p=new dropdownpopup();
  p=Create_tcontrolpopup(p);
  p.zb="dropdownpopup";
  return p
}

function buttoneditorpopup(){}
function Register_buttoneditorpopup(){
  if(IsRegisteredbuttoneditorpopup)return;
  Register_tcontrolpopup();
  var p=new tcontrolpopup();
  p.zb="buttoneditorpopup";
  p.zc=buttoneditorpopup;
  p.ParentClass=tcontrolpopup;
  p.geteditcontrol=buttoneditorpopup_geteditcontrol;
  p.updateafterdrop=buttoneditorpopup_updateafterdrop;
  p.create0=buttoneditorpopup_create0;
  p.activate=buttoneditorpopup_activate;
  p.getctrlhtmlstyle=buttoneditorpopup_getctrlhtmlstyle;
  buttoneditorpopup.prototype=p;
  IsRegisteredbuttoneditorpopup=true;
}
function Create_buttoneditorpopup(p){
  Register_buttoneditorpopup();
  if(p==void(0))var p=new buttoneditorpopup();
  p=Create_tcontrolpopup(p);
  p.zb="buttoneditorpopup";
  p.ffixedwith=0;
  return p
}

function datetimeeditpopup(){}
function Register_datetimeeditpopup(){
  if(IsRegistereddatetimeeditpopup)return;
  Register_buttoneditorpopup();
  var p=new buttoneditorpopup();
  p.zb="datetimeeditpopup";
  p.zc=datetimeeditpopup;
  p.ParentClass=buttoneditorpopup;
  datetimeeditpopup.prototype=p;
  IsRegistereddatetimeeditpopup=true;
}
function Create_datetimeeditpopup(p){
  Register_datetimeeditpopup();
  if(p==void(0))var p=new datetimeeditpopup();
  p=Create_buttoneditorpopup(p);
  p.zb="datetimeeditpopup";
  return p
}

function comboboxpopup(){}
function Register_comboboxpopup(){
  if(IsRegisteredcomboboxpopup)return;
  Register_buttoneditorpopup();
  var p=new buttoneditorpopup();
  p.zb="comboboxpopup";
  p.zc=comboboxpopup;
  p.ParentClass=buttoneditorpopup;
  comboboxpopup.prototype=p;
  IsRegisteredcomboboxpopup=true;
}
function Create_comboboxpopup(p){
  Register_comboboxpopup();
  if(p==void(0))var p=new comboboxpopup();
  p=Create_buttoneditorpopup(p);
  p.zb="comboboxpopup";
  return p
}

function ttexteditstyle(){}
function Register_ttexteditstyle(){
  if(IsRegisteredttexteditstyle)return;
  Register_tcontrolstyles();
  var p=new tcontrolstyles();
  p.zb="ttexteditstyle";
  p.zc=ttexteditstyle;
  p.ParentClass=tcontrolstyles;
  p.getinnerhandle=ttexteditstyle_getinnerhandle;
  p.getstylename=ttexteditstyle_getstylename;
  ttexteditstyle.prototype=p;
  IsRegisteredttexteditstyle=true;
}
function Create_ttexteditstyle(p){
  Register_ttexteditstyle();
  if(p==void(0))var p=new ttexteditstyle();
  p=Create_tcontrolstyles(p);
  p.zb="ttexteditstyle";
  return p
}

function ttexteditbandinfo(){}
function Register_ttexteditbandinfo(){
  if(IsRegisteredttexteditbandinfo)return;
  Register_twebcontrolbandinfo();
  var p=new twebcontrolbandinfo();
  p.zb="ttexteditbandinfo";
  p.zc=ttexteditbandinfo;
  p.ParentClass=twebcontrolbandinfo;
  p.setupdomhandles=ttexteditbandinfo_setupdomhandles;
  p.processhandles=ttexteditbandinfo_processhandles;
  p.getinputhandle=ttexteditbandinfo_getinputhandle;
  p.create0=ttexteditbandinfo_create0;
  ttexteditbandinfo.prototype=p;
  IsRegisteredttexteditbandinfo=true;
}
function Create_ttexteditbandinfo(p){
  Register_ttexteditbandinfo();
  if(p==void(0))var p=new ttexteditbandinfo();
  p=Create_twebcontrolbandinfo(p);
  p.zb="ttexteditbandinfo";
  p.savetext="";
  p.saved=0;
  p.text="";
  p.direction=0;
  p.edithandle=null;
  return p
}

function textedit(){}
function Register_textedit(){
  if(IsRegisteredtextedit)return;
  Register_twebcontrol();
  var p=new twebcontrol();
  p.zb="textedit";
  p.zc=textedit;
  p.ParentClass=twebcontrol;
  p.getproperty_text=textedit_getproperty_text;
  p.setproperty_text=textedit_setproperty_text;
  p.getproperty_maxlength=textedit_getproperty_maxlength;
  p.setproperty_maxlength=textedit_setproperty_maxlength;
  p.getproperty_readonly=textedit_getproperty_readonly;
  p.setproperty_readonly=textedit_setproperty_readonly;
  p.setproperty_charcase=textedit_setproperty_charcase;
  p.setproperty_emptychar=textedit_setproperty_emptychar;
  p.setproperty_maskemptychar=textedit_setproperty_maskemptychar;
  p.setproperty_edittext=textedit_setproperty_edittext;
  p.getproperty_displaytext=textedit_getproperty_displaytext;
  p.getproperty_edittext=textedit_getproperty_edittext;
  p.setproperty_mask=textedit_setproperty_mask;
  p.getproperty_ismasked=textedit_getproperty_ismasked;
  p.getedittext=textedit_getedittext;
  p.charincase=textedit_charincase;
  p.isselectionempty=textedit_isselectionempty;
  p.getselectionstart=textedit_getselectionstart;
  p.getselectionend=textedit_getselectionend;
  p.getselectionrange=textedit_getselectionrange;
  p.clearselection=textedit_clearselection;
  p.clearselectionat=textedit_clearselectionat;
  p.isvalidchar=textedit_isvalidchar;
  p.textpostomask=textedit_textpostomask;
  p.maskpostotext=textedit_maskpostotext;
  p.applymask=textedit_applymask;
  p.removemask=textedit_removemask;
  p.seeknext=textedit_seeknext;
  p.removelastmaskchar=textedit_removelastmaskchar;
  p.checkpaste=textedit_checkpaste;
  p.needsavestate=textedit_needsavestate;
  p.updatetext=textedit_updatetext;
  p.updatedisplaytext=textedit_updatedisplaytext;
  p.clearvalue=textedit_clearvalue;
  p.getvalue=textedit_getvalue;
  p.setvalue=textedit_setvalue;
  p.isemptytext=textedit_isemptytext;
  p.ismaskchar=textedit_ismaskchar;
  p.insertchar=textedit_insertchar;
  p.insertmaskchar=textedit_insertmaskchar;
  p.parsemask=textedit_parsemask;
  p.getproperty_fontsize=textedit_getproperty_fontsize;
  p.setproperty_fontsize=textedit_setproperty_fontsize;
  p.getproperty_internalmask=textedit_getproperty_internalmask;
  p.createcontrolstyle=textedit_createcontrolstyle;
  p.allowcontrolstyles=textedit_allowcontrolstyles;
  p.handleeffect=textedit_handleeffect;
  p.attacheffecteventhandlers=textedit_attacheffecteventhandlers;
  p.handlechange=textedit_handlechange;
  p.handlekeydown=textedit_handlekeydown;
  p.handlekeypress=textedit_handlekeypress;
  p.handlecut=textedit_handlecut;
  p.handlepaste=textedit_handlepaste;
  p.handlefocus=textedit_handlefocus;
  p.handleblur=textedit_handleblur;
  p.casechanged=textedit_casechanged;
  p.maskchanged=textedit_maskchanged;
  p.restorestate=textedit_restorestate;
  p.savestate=textedit_savestate;
  p.moveprev=textedit_moveprev;
  p.movenext=textedit_movenext;
  p.movehome=textedit_movehome;
  p.moveend=textedit_moveend;
  p.selectprev=textedit_selectprev;
  p.selectnext=textedit_selectnext;
  p.selecthome=textedit_selecthome;
  p.selectend=textedit_selectend;
  p.deletetext=textedit_deletetext;
  p.deletenext=textedit_deletenext;
  p.deleteprev=textedit_deleteprev;
  p.deletetoend=textedit_deletetoend;
  p.deletetohome=textedit_deletetohome;
  p.attachdomeventhandlers0=textedit_attachdomeventhandlers0;
  p.detachdomeventhandlers=textedit_detachdomeventhandlers;
  p.createbandinfo=textedit_createbandinfo;
  p.create0=textedit_create0;
  p.getcontrolhtml=textedit_getcontrolhtml;
  p.setupdomhandle=textedit_setupdomhandle;
  p.getdatavalue=textedit_getdatavalue;
  p.setdatavalue=textedit_setdatavalue;
  p.select=textedit_select;
  p.selectrange=textedit_selectrange;
  p.edithandle=textedit_edithandle;
  textedit.prototype=p;
  IsRegisteredtextedit=true;
}
function Create_textedit(p){
  Register_textedit();
  if(p==void(0))var p=new textedit();
  p=Create_twebcontrol(p);
  p.zb="textedit";
  p.fmultiline=0;
  p.fmaxlength=0;
  p.fispassword=0;
  p.fselectonfocus=0;
  p.fformat="";
  p.femptychar="";
  p.fmaskemptychar="";
  p.fcharcase=0;
  p.fmask="";
  p.femptytext="";
  return p
}

function Init_timagecreationattrs(w,d){
  if(w){
    var p=AddWrapper(new Object());
    var q=p.v;
  } else {
    var p={};
    var q=p;
  }
  q.pic="";
  q.stretch=0;
  q.bundled=0;
  q.stretchmode=0;
  if(d != void(0)){
    SetVal_timagecreationattrs(d,p);
  }
  return p
}

function SetVal_timagecreationattrs(d,p){
  p=GetVal(p);
  p.pic=SetVal(p.pic,GetVal(d.pic));
  p.stretch=SetVal(p.stretch,GetVal(d.stretch));
  p.bundled=SetVal(p.bundled,GetVal(d.bundled));
  p.stretchmode=SetVal(p.stretchmode,GetVal(d.stretchmode));
}

function timagestyle(){}
function Register_timagestyle(){
  if(IsRegisteredtimagestyle)return;
  Register_tcontrolstyles();
  var p=new tcontrolstyles();
  p.zb="timagestyle";
  p.zc=timagestyle;
  p.ParentClass=tcontrolstyles;
  p.downloadifneeded=timagestyle_downloadifneeded;
  p.getbackgroundhandle=timagestyle_getbackgroundhandle;
  p.preloadimagesforie=timagestyle_preloadimagesforie;
  p.applybackgroundstyle=timagestyle_applybackgroundstyle;
  p.applyborderstyle=timagestyle_applyborderstyle;
  p.applycontrolstyle=timagestyle_applycontrolstyle;
  p.isactivebackground=timagestyle_isactivebackground;
  timagestyle.prototype=p;
  IsRegisteredtimagestyle=true;
}
function Create_timagestyle(p){
  Register_timagestyle();
  if(p==void(0))var p=new timagestyle();
  p=Create_tcontrolstyles(p);
  p.zb="timagestyle";
  return p
}

function timagebandinfo(){}
function Register_timagebandinfo(){
  if(IsRegisteredtimagebandinfo)return;
  Register_twebcontrolbandinfo();
  var p=new twebcontrolbandinfo();
  p.zb="timagebandinfo";
  p.zc=timagebandinfo;
  p.ParentClass=twebcontrolbandinfo;
  p.setupdomhandles=timagebandinfo_setupdomhandles;
  p.processhandles=timagebandinfo_processhandles;
  timagebandinfo.prototype=p;
  IsRegisteredtimagebandinfo=true;
}
function Create_timagebandinfo(p){
  Register_timagebandinfo();
  if(p==void(0))var p=new timagebandinfo();
  p=Create_twebcontrolbandinfo(p);
  p.zb="timagebandinfo";
  p.imghandle=null;
  p.imgvisible=0;
  return p
}

function image(){}
function Register_image(){
  if(IsRegisteredimage)return;
  Register_twebcontrol();
  var p=new twebcontrol();
  p.zb="image";
  p.zc=image;
  p.ParentClass=twebcontrol;
  p.getproperty_imagehandle=image_getproperty_imagehandle;
  p.getproperty_picture=image_getproperty_picture;
  p.setproperty_picture=image_setproperty_picture;
  p.handleonload=image_handleonload;
  p.handleonerror=image_handleonerror;
  p.extractsource=image_extractsource;
  p.downloadimage=image_downloadimage;
  p.ispngimage=image_ispngimage;
  p.isbundled=image_isbundled;
  p.handleonupdate=image_handleonupdate;
  p.getimagehandle=image_getimagehandle;
  p.getproperty_visible=image_getproperty_visible;
  p.setproperty_visible=image_setproperty_visible;
  p.highlight=image_highlight;
  p.downloadimageforie6=image_downloadimageforie6;
  p.getinnerhtml=image_getinnerhtml;
  p.setupdomeventhandlers=image_setupdomeventhandlers;
  p.createcontrolstyle=image_createcontrolstyle;
  p.getproperty_width=image_getproperty_width;
  p.getproperty_height=image_getproperty_height;
  p.createbandinfo=image_createbandinfo;
  p.supportsanimation=image_supportsanimation;
  p.create0=image_create0;
  p.zd=p.destroy=image_destroy;
  p.getcontrolhtml=image_getcontrolhtml;
  p.contentheight=image_contentheight;
  p.setupdomhandle=image_setupdomhandle;
  p.setupimageattrs=image_setupimageattrs;
  p.setdatavalue=image_setdatavalue;
  p.getdatavalue=image_getdatavalue;
  image.prototype=p;
  IsRegisteredimage=true;
}
function Create_image(p){
  Register_image();
  if(p==void(0))var p=new image();
  p=Create_twebcontrol(p);
  p.zb="image";
  p.imageattrs=Init_timagecreationattrs(false);
  p.onupdate=null;
  return p
}

function tnavimagestyle(){}
function Register_tnavimagestyle(){
  if(IsRegisteredtnavimagestyle)return;
  Register_timagestyle();
  var p=new timagestyle();
  p.zb="tnavimagestyle";
  p.zc=tnavimagestyle;
  p.ParentClass=timagestyle;
  p.downloadifneeded=tnavimagestyle_downloadifneeded;
  p.initstyles=tnavimagestyle_initstyles;
  tnavimagestyle.prototype=p;
  IsRegisteredtnavimagestyle=true;
}
function Create_tnavimagestyle(p){
  Register_tnavimagestyle();
  if(p==void(0))var p=new tnavimagestyle();
  p=Create_timagestyle(p);
  p.zb="tnavimagestyle";
  return p
}

function navimage(){}
function Register_navimage(){
  if(IsRegisterednavimage)return;
  Register_image();
  var p=new image();
  p.zb="navimage";
  p.zc=navimage;
  p.ParentClass=image;
  p.createcontrolstyle=navimage_createcontrolstyle;
  p.downloadimageforie6=navimage_downloadimageforie6;
  navimage.prototype=p;
  IsRegisterednavimage=true;
}
function Create_navimage(p){
  Register_navimage();
  if(p==void(0))var p=new navimage();
  p=Create_image(p);
  p.zb="navimage";
  p.resourceid="";
  return p
}

function Init_ttextlabelcreationattrs(w,d){
  if(w){
    var p=AddWrapper(new Object());
    var q=p.v;
  } else {
    var p={};
    var q=p;
  }
  q.cangrow=0;
  q.canshrink=0;
  q.ishyperlink=0;
  q.wordwrap=0;
  if(d != void(0)){
    SetVal_ttextlabelcreationattrs(d,p);
  }
  return p
}

function SetVal_ttextlabelcreationattrs(d,p){
  p=GetVal(p);
  p.cangrow=SetVal(p.cangrow,GetVal(d.cangrow));
  p.canshrink=SetVal(p.canshrink,GetVal(d.canshrink));
  p.ishyperlink=SetVal(p.ishyperlink,GetVal(d.ishyperlink));
  p.wordwrap=SetVal(p.wordwrap,GetVal(d.wordwrap));
}

function ttextlabelbandinfo(){}
function Register_ttextlabelbandinfo(){
  if(IsRegisteredttextlabelbandinfo)return;
  Register_twebcontrolbandinfo();
  var p=new twebcontrolbandinfo();
  p.zb="ttextlabelbandinfo";
  p.zc=ttextlabelbandinfo;
  p.ParentClass=twebcontrolbandinfo;
  p.setupdomhandles=ttextlabelbandinfo_setupdomhandles;
  p.processhandles=ttextlabelbandinfo_processhandles;
  ttextlabelbandinfo.prototype=p;
  IsRegisteredttextlabelbandinfo=true;
}
function Create_ttextlabelbandinfo(p){
  Register_ttextlabelbandinfo();
  if(p==void(0))var p=new ttextlabelbandinfo();
  p=Create_twebcontrolbandinfo(p);
  p.zb="ttextlabelbandinfo";
  p.hiddenvaluehandle=null;
  p.value="";
  return p
}

function textlabel(){}
function Register_textlabel(){
  if(IsRegisteredtextlabel)return;
  Register_twebcontrol();
  var p=new twebcontrol();
  p.zb="textlabel";
  p.zc=textlabel;
  p.ParentClass=twebcontrol;
  p.getproperty_link=textlabel_getproperty_link;
  p.setproperty_link=textlabel_setproperty_link;
  p.getproperty_value=textlabel_getproperty_value;
  p.setproperty_value=textlabel_setproperty_value;
  p.setproperty_cangrow=textlabel_setproperty_cangrow;
  p.setproperty_canshrink=textlabel_setproperty_canshrink;
  p.getproperty_cangrow=textlabel_getproperty_cangrow;
  p.getproperty_canshrink=textlabel_getproperty_canshrink;
  p.getproperty_caption=textlabel_getproperty_caption;
  p.setproperty_caption=textlabel_setproperty_caption;
  p.hastextcaption=textlabel_hastextcaption;
  p.allowcontrolstyles=textlabel_allowcontrolstyles;
  p.format=textlabel_format;
  p.createbandinfo=textlabel_createbandinfo;
  p.supportsanimation=textlabel_supportsanimation;
  p.create0=textlabel_create0;
  p.zd=p.destroy=textlabel_destroy;
  p.getcontrolhtml=textlabel_getcontrolhtml;
  p.ishyperlink=textlabel_ishyperlink;
  p.contentheight=textlabel_contentheight;
  p.setupdomhandle=textlabel_setupdomhandle;
  p.getctrlhtmlstyle=textlabel_getctrlhtmlstyle;
  p.getdatavalue=textlabel_getdatavalue;
  p.setdatavalue=textlabel_setdatavalue;
  p.setuptextlabelattrs=textlabel_setuptextlabelattrs;
  textlabel.prototype=p;
  IsRegisteredtextlabel=true;
}
function Create_textlabel(p){
  Register_textlabel();
  if(p==void(0))var p=new textlabel();
  p=Create_twebcontrol(p);
  p.zb="textlabel";
  p.textlabelattrs=Init_ttextlabelcreationattrs(false);
  return p
}

function Init_toptionbuttoncreationattrs(w,d){
  if(w){
    var p=AddWrapper(new Object());
    var q=p.v;
  } else {
    var p={};
    var q=p;
  }
  q.cangrow=0;
  q.canshrink=0;
  q.checked=0;
  q.caption="";
  if(d != void(0)){
    SetVal_toptionbuttoncreationattrs(d,p);
  }
  return p
}

function SetVal_toptionbuttoncreationattrs(d,p){
  p=GetVal(p);
  p.cangrow=SetVal(p.cangrow,GetVal(d.cangrow));
  p.canshrink=SetVal(p.canshrink,GetVal(d.canshrink));
  p.checked=SetVal(p.checked,GetVal(d.checked));
  p.caption=SetVal(p.caption,GetVal(d.caption));
}

function toptionbuttonbandinfo(){}
function Register_toptionbuttonbandinfo(){
  if(IsRegisteredtoptionbuttonbandinfo)return;
  Register_twebcontrolbandinfo();
  var p=new twebcontrolbandinfo();
  p.zb="toptionbuttonbandinfo";
  p.zc=toptionbuttonbandinfo;
  p.ParentClass=twebcontrolbandinfo;
  p.setupdomhandles=toptionbuttonbandinfo_setupdomhandles;
  p.processhandles=toptionbuttonbandinfo_processhandles;
  p.getinputhandle=toptionbuttonbandinfo_getinputhandle;
  toptionbuttonbandinfo.prototype=p;
  IsRegisteredtoptionbuttonbandinfo=true;
}
function Create_toptionbuttonbandinfo(p){
  Register_toptionbuttonbandinfo();
  if(p==void(0))var p=new toptionbuttonbandinfo();
  p=Create_twebcontrolbandinfo(p);
  p.zb="toptionbuttonbandinfo";
  p.optionbtnhandle=null;
  p.captionhandle=null;
  return p
}

function optionbutton(){}
function Register_optionbutton(){
  if(IsRegisteredoptionbutton)return;
  Register_twebcontrol();
  var p=new twebcontrol();
  p.zb="optionbutton";
  p.zc=optionbutton;
  p.ParentClass=twebcontrol;
  p.handleoncaptionclick=optionbutton_handleoncaptionclick;
  p.getproperty_caption=optionbutton_getproperty_caption;
  p.setproperty_caption=optionbutton_setproperty_caption;
  p.setproperty_cangrow=optionbutton_setproperty_cangrow;
  p.setproperty_canshrink=optionbutton_setproperty_canshrink;
  p.getproperty_cangrow=optionbutton_getproperty_cangrow;
  p.getproperty_canshrink=optionbutton_getproperty_canshrink;
  p.getproperty_checked=optionbutton_getproperty_checked;
  p.setproperty_checked=optionbutton_setproperty_checked;
  p.attachdomeventhandlers0=optionbutton_attachdomeventhandlers0;
  p.detachdomeventhandlers=optionbutton_detachdomeventhandlers;
  p.createbandinfo=optionbutton_createbandinfo;
  p.create0=optionbutton_create0;
  p.zd=p.destroy=optionbutton_destroy;
  p.getcontrolhtml=optionbutton_getcontrolhtml;
  p.contentheight=optionbutton_contentheight;
  p.optionbuttonhandle=optionbutton_optionbuttonhandle;
  p.captionhandle=optionbutton_captionhandle;
  optionbutton.prototype=p;
  IsRegisteredoptionbutton=true;
}
function Create_optionbutton(p){
  Register_optionbutton();
  if(p==void(0))var p=new optionbutton();
  p=Create_twebcontrol(p);
  p.zb="optionbutton";
  p.optionbuttonattrs=Init_toptionbuttoncreationattrs(false);
  return p
}

function trectanglestyle(){}
function Register_trectanglestyle(){
  if(IsRegisteredtrectanglestyle)return;
  Register_tresizeablecontrolstyles();
  var p=new tresizeablecontrolstyles();
  p.zb="trectanglestyle";
  p.zc=trectanglestyle;
  p.ParentClass=tresizeablecontrolstyles;
  trectanglestyle.prototype=p;
  IsRegisteredtrectanglestyle=true;
}
function Create_trectanglestyle(p){
  Register_trectanglestyle();
  if(p==void(0))var p=new trectanglestyle();
  p=Create_tresizeablecontrolstyles(p);
  p.zb="trectanglestyle";
  return p
}

function rectangle(){}
function Register_rectangle(){
  if(IsRegisteredrectangle)return;
  Register_twebcontrol();
  var p=new twebcontrol();
  p.zb="rectangle";
  p.zc=rectangle;
  p.ParentClass=twebcontrol;
  p.createcontrolstyle=rectangle_createcontrolstyle;
  p.create0=rectangle_create0;
  rectangle.prototype=p;
  IsRegisteredrectangle=true;
}
function Create_rectangle(p){
  Register_rectangle();
  if(p==void(0))var p=new rectangle();
  p=Create_twebcontrol(p);
  p.zb="rectangle";
  return p
}

function tdropdownstyle(){}
function Register_tdropdownstyle(){
  if(IsRegisteredtdropdownstyle)return;
  Register_tcontainerstyle();
  var p=new tcontainerstyle();
  p.zb="tdropdownstyle";
  p.zc=tdropdownstyle;
  p.ParentClass=tcontainerstyle;
  p.getstylename=tdropdownstyle_getstylename;
  p.getinnerhandle=tdropdownstyle_getinnerhandle;
  p.supportsresizing=tdropdownstyle_supportsresizing;
  tdropdownstyle.prototype=p;
  IsRegisteredtdropdownstyle=true;
}
function Create_tdropdownstyle(p){
  Register_tdropdownstyle();
  if(p==void(0))var p=new tdropdownstyle();
  p=Create_tcontainerstyle(p);
  p.zb="tdropdownstyle";
  return p
}

function dropdown(){}
function Register_dropdown(){
  if(IsRegistereddropdown)return;
  Register_container();
  var p=new container();
  p.zb="dropdown";
  p.zc=dropdown;
  p.ParentClass=container;
  p.getproperty_down=dropdown_getproperty_down;
  p.setproperty_down=dropdown_setproperty_down;
  p.setproperty_enabled=dropdown_setproperty_enabled;
  p.getproperty_caption=dropdown_getproperty_caption;
  p.setproperty_caption=dropdown_setproperty_caption;
  p.handlebuttonclick=dropdown_handlebuttonclick;
  p.handlesplitbuttonclick=dropdown_handlesplitbuttonclick;
  p.handlemouseover=dropdown_handlemouseover;
  p.handlesplitbuttonmouseover=dropdown_handlesplitbuttonmouseover;
  p.updateexclusive=dropdown_updateexclusive;
  p.activechanged=dropdown_activechanged;
  p.updatepartsstate=dropdown_updatepartsstate;
  p.createcontrolstyle=dropdown_createcontrolstyle;
  p.initcurrentstyle=dropdown_initcurrentstyle;
  p.createpopupwindow=dropdown_createpopupwindow;
  p.disabledomhandle=dropdown_disabledomhandle;
  p.beforedrop=dropdown_beforedrop;
  p.afterdrop=dropdown_afterdrop;
  p.buttonid=dropdown_buttonid;
  p.splitbuttonid=dropdown_splitbuttonid;
  p.containerid=dropdown_containerid;
  p.updatecurrentstyle=dropdown_updatecurrentstyle;
  p.handlecreated=dropdown_handlecreated;
  p.attachdomeventhandlers0=dropdown_attachdomeventhandlers0;
  p.shouldhandleeffect=dropdown_shouldhandleeffect;
  p.create0=dropdown_create0;
  p.setupdropdownattrs=dropdown_setupdropdownattrs;
  p.isdroppeddown=dropdown_isdroppeddown;
  p.drop=dropdown_drop;
  p.closedropped=dropdown_closedropped;
  p.setupdomhandle=dropdown_setupdomhandle;
  p.activate=dropdown_activate;
  p.deactivate=dropdown_deactivate;
  p.contentheight=dropdown_contentheight;
  p.contentwidth=dropdown_contentwidth;
  dropdown.prototype=p;
  IsRegistereddropdown=true;
}
function Create_dropdown(p){
  Register_dropdown();
  if(p==void(0))var p=new dropdown();
  p=Create_container(p);
  p.zb="dropdown";
  p.fbutton=null;
  p.fsplitbutton=null;
  p.fdropcontainer=null;
  p.fpopup=null;
  p.fbuttontype=0;
  p.fdroponmouseover=0;
  p.ffloating=0;
  p.fdown=0;
  p.fpopupposition=0;
  p.fpopupalignment=0;
  p.fonbeforedrop=_IMthod(false);
  p.fonafterdrop=_IMthod(false);
  p.fonactivechanged=_IMthod(false);
  return p
}

function dropcontainer(){}
function Register_dropcontainer(){
  if(IsRegistereddropcontainer)return;
  Register_container();
  var p=new container();
  p.zb="dropcontainer";
  p.zc=dropcontainer;
  p.ParentClass=container;
  p.setproperty_width=dropcontainer_setproperty_width;
  p.setproperty_height=dropcontainer_setproperty_height;
  dropcontainer.prototype=p;
  IsRegistereddropcontainer=true;
}
function Create_dropcontainer(p){
  Register_dropcontainer();
  if(p==void(0))var p=new dropcontainer();
  p=Create_container(p);
  p.zb="dropcontainer";
  return p
}

function tdropbuttonstyle(){}
function Register_tdropbuttonstyle(){
  if(IsRegisteredtdropbuttonstyle)return;
  Register_tbuttonstyle();
  var p=new tbuttonstyle();
  p.zb="tdropbuttonstyle";
  p.zc=tdropbuttonstyle;
  p.ParentClass=tbuttonstyle;
  p.getstylename=tdropbuttonstyle_getstylename;
  tdropbuttonstyle.prototype=p;
  IsRegisteredtdropbuttonstyle=true;
}
function Create_tdropbuttonstyle(p){
  Register_tdropbuttonstyle();
  if(p==void(0))var p=new tdropbuttonstyle();
  p=Create_tbuttonstyle(p);
  p.zb="tdropbuttonstyle";
  return p
}

function dropbutton(){}
function Register_dropbutton(){
  if(IsRegistereddropbutton)return;
  Register_button();
  var p=new button();
  p.zb="dropbutton";
  p.zc=dropbutton;
  p.ParentClass=button;
  p.createcontrolstyle=dropbutton_createcontrolstyle;
  p.getproperty_canfocus=dropbutton_getproperty_canfocus;
  dropbutton.prototype=p;
  IsRegistereddropbutton=true;
}
function Create_dropbutton(p){
  Register_dropbutton();
  if(p==void(0))var p=new dropbutton();
  p=Create_button(p);
  p.zb="dropbutton";
  return p
}

function tsplitbuttonstyle(){}
function Register_tsplitbuttonstyle(){
  if(IsRegisteredtsplitbuttonstyle)return;
  Register_tbuttonstyle();
  var p=new tbuttonstyle();
  p.zb="tsplitbuttonstyle";
  p.zc=tsplitbuttonstyle;
  p.ParentClass=tbuttonstyle;
  p.getstylename=tsplitbuttonstyle_getstylename;
  tsplitbuttonstyle.prototype=p;
  IsRegisteredtsplitbuttonstyle=true;
}
function Create_tsplitbuttonstyle(p){
  Register_tsplitbuttonstyle();
  if(p==void(0))var p=new tsplitbuttonstyle();
  p=Create_tbuttonstyle(p);
  p.zb="tsplitbuttonstyle";
  return p
}

function splitbutton(){}
function Register_splitbutton(){
  if(IsRegisteredsplitbutton)return;
  Register_dropbutton();
  var p=new dropbutton();
  p.zb="splitbutton";
  p.zc=splitbutton;
  p.ParentClass=dropbutton;
  p.createcontrolstyle=splitbutton_createcontrolstyle;
  splitbutton.prototype=p;
  IsRegisteredsplitbutton=true;
}
function Create_splitbutton(p){
  Register_splitbutton();
  if(p==void(0))var p=new splitbutton();
  p=Create_dropbutton(p);
  p.zb="splitbutton";
  return p
}

function Init_tsubformcreationattrs(w,d){
  if(w){
    var p=AddWrapper(new Object());
    var q=p.v;
  } else {
    var p={};
    var q=p;
  }
  q.defaultformref="";
  q.formbufferlimit=0;
  q.ispopup=0;
  q.showbusyoverlay=0;
  if(d != void(0)){
    SetVal_tsubformcreationattrs(d,p);
  }
  return p
}

function SetVal_tsubformcreationattrs(d,p){
  p=GetVal(p);
  p.defaultformref=SetVal(p.defaultformref,GetVal(d.defaultformref));
  p.formbufferlimit=SetVal(p.formbufferlimit,GetVal(d.formbufferlimit));
  p.ispopup=SetVal(p.ispopup,GetVal(d.ispopup));
  p.showbusyoverlay=SetVal(p.showbusyoverlay,GetVal(d.showbusyoverlay));
}

function tsubformstyle(){}
function Register_tsubformstyle(){
  if(IsRegisteredtsubformstyle)return;
  Register_tcontainerstyle();
  var p=new tcontainerstyle();
  p.zb="tsubformstyle";
  p.zc=tsubformstyle;
  p.ParentClass=tcontainerstyle;
  p.applycolorstyle=tsubformstyle_applycolorstyle;
  tsubformstyle.prototype=p;
  IsRegisteredtsubformstyle=true;
}
function Create_tsubformstyle(p){
  Register_tsubformstyle();
  if(p==void(0))var p=new tsubformstyle();
  p=Create_tcontainerstyle(p);
  p.zb="tsubformstyle";
  return p
}

function tsubformbandinfo(){}
function Register_tsubformbandinfo(){
  if(IsRegisteredtsubformbandinfo)return;
  Register_twebcontrolbandinfo();
  var p=new twebcontrolbandinfo();
  p.zb="tsubformbandinfo";
  p.zc=tsubformbandinfo;
  p.ParentClass=twebcontrolbandinfo;
  p.setupdomhandles=tsubformbandinfo_setupdomhandles;
  tsubformbandinfo.prototype=p;
  IsRegisteredtsubformbandinfo=true;
}
function Create_tsubformbandinfo(p){
  Register_tsubformbandinfo();
  if(p==void(0))var p=new tsubformbandinfo();
  p=Create_twebcontrolbandinfo(p);
  p.zb="tsubformbandinfo";
  p.iframehandle=null;
  p.emptyhandle=null;
  return p
}

function Create_TWebFormArray(p){
  return new Array();
}

function subform(){}
function Register_subform(){
  if(IsRegisteredsubform)return;
  Register_container();
  var p=new container();
  p.zb="subform";
  p.zc=subform;
  p.ParentClass=container;
  p.getproperty_activeforms=subform_getproperty_activeforms;
  p.setproperty_activeforms=subform_setproperty_activeforms;
  p.setproperty_formbufferlimit=subform_setproperty_formbufferlimit;
  p.getproperty_formbufferlimit=subform_getproperty_formbufferlimit;
  p.getproperty_emptyhandle=subform_getproperty_emptyhandle;
  p.createinternaliframe=subform_createinternaliframe;
  p.limitinactiveformsbuffer=subform_limitinactiveformsbuffer;
  p.switchhandles=subform_switchhandles;
  p.closeformat=subform_closeformat;
  p.deactivatependingformopeners=subform_deactivatependingformopeners;
  p.createcontrolstyle=subform_createcontrolstyle;
  p.handleeffect=subform_handleeffect;
  p.createbandinfo=subform_createbandinfo;
  p.create0=subform_create0;
  p.zd=p.destroy=subform_destroy;
  p.getcontrolhtml=subform_getcontrolhtml;
  p.setupdomhandle=subform_setupdomhandle;
  p.contentheight=subform_contentheight;
  p.getexternaldocumenttitle=subform_getexternaldocumenttitle;
  p.openformext=subform_openformext;
  p.openformforpage=subform_openformforpage;
  p.activateform=subform_activateform;
  p.beginbusy=subform_beginbusy;
  p.endbusy=subform_endbusy;
  p.activeformscount=subform_activeformscount;
  p.deactivateformat=subform_deactivateformat;
  p.setupsubformattrs=subform_setupsubformattrs;
  subform.prototype=p;
  IsRegisteredsubform=true;
}
function Create_subform(p){
  Register_subform();
  if(p==void(0))var p=new subform();
  p=Create_container(p);
  p.zb="subform";
  p.highlightdiv=null;
  p.factiveforms=[];
  p.fformbeingrefreshed=null;
  p.subformattrs=Init_tsubformcreationattrs(false);
  p.floatingwindow=null;
  p.formopeners=[];
  p.inactiveforms=[];
  p.destructorcalled=0;
  p.ondestroy=_IMthod(false);
  p.onformready=_IMthod(false);
  return p
}

function tabsheet(){}
function Register_tabsheet(){
  if(IsRegisteredtabsheet)return;
  Register_container();
  var p=new container();
  p.zb="tabsheet";
  p.zc=tabsheet;
  p.ParentClass=container;
  p.isinactivetabsheet=tabsheet_isinactivetabsheet;
  p.getproperty_cangrow=tabsheet_getproperty_cangrow;
  p.setproperty_cangrow=tabsheet_setproperty_cangrow;
  p.getproperty_canshrink=tabsheet_getproperty_canshrink;
  p.setproperty_canshrink=tabsheet_setproperty_canshrink;
  p.setproperty_visible=tabsheet_setproperty_visible;
  p.setproperty_height=tabsheet_setproperty_height;
  p.create0=tabsheet_create0;
  p.setupdomhandle=tabsheet_setupdomhandle;
  p.isactivepage=tabsheet_isactivepage;
  p.pagecontrol=tabsheet_pagecontrol;
  tabsheet.prototype=p;
  IsRegisteredtabsheet=true;
}
function Create_tabsheet(p){
  Register_tabsheet();
  if(p==void(0))var p=new tabsheet();
  p=Create_container(p);
  p.zb="tabsheet";
  return p
}

function ttabcontrolstyle(){}
function Register_ttabcontrolstyle(){
  if(IsRegisteredttabcontrolstyle)return;
  Register_tcontainerstyle();
  var p=new tcontainerstyle();
  p.zb="ttabcontrolstyle";
  p.zc=ttabcontrolstyle;
  p.ParentClass=tcontainerstyle;
  p.updatecurrentstyle=ttabcontrolstyle_updatecurrentstyle;
  ttabcontrolstyle.prototype=p;
  IsRegisteredttabcontrolstyle=true;
}
function Create_ttabcontrolstyle(p){
  Register_ttabcontrolstyle();
  if(p==void(0))var p=new ttabcontrolstyle();
  p=Create_tcontainerstyle(p);
  p.zb="ttabcontrolstyle";
  return p
}

function Create_TTabSheetArray(p){
  return new Array();
}

function tabcontrol(){}
function Register_tabcontrol(){
  if(IsRegisteredtabcontrol)return;
  Register_container();
  var p=new container();
  p.zb="tabcontrol";
  p.zc=tabcontrol;
  p.ParentClass=container;
  p.getproperty_activepage=tabcontrol_getproperty_activepage;
  p.setproperty_activepage=tabcontrol_setproperty_activepage;
  p.setproperty_height=tabcontrol_setproperty_height;
  p.allowcontrolstyles=tabcontrol_allowcontrolstyles;
  p.createcontrolstyle=tabcontrol_createcontrolstyle;
  p.getactivetabsheet=tabcontrol_getactivetabsheet;
  p.setactivetabsheet=tabcontrol_setactivetabsheet;
  p.updatetabbutton=tabcontrol_updatetabbutton;
  p.create0=tabcontrol_create0;
  p.zd=p.destroy=tabcontrol_destroy;
  p.setuptabcontrolattrs=tabcontrol_setuptabcontrolattrs;
  p.contentheight=tabcontrol_contentheight;
  p.gettabbutton=tabcontrol_gettabbutton;
  tabcontrol.prototype=p;
  IsRegisteredtabcontrol=true;
}
function Create_tabcontrol(p){
  Register_tabcontrol();
  if(p==void(0))var p=new tabcontrol();
  p=Create_container(p);
  p.zb="tabcontrol";
  p.activepages=[];
  p.activepagename="";
  p.hidetabs=0;
  p.tabheight=0;
  return p
}

function ttabbuttonstyle(){}
function Register_ttabbuttonstyle(){
  if(IsRegisteredttabbuttonstyle)return;
  Register_tcontainerstyle();
  var p=new tcontainerstyle();
  p.zb="ttabbuttonstyle";
  p.zc=ttabbuttonstyle;
  p.ParentClass=tcontainerstyle;
  p.getstylename=ttabbuttonstyle_getstylename;
  ttabbuttonstyle.prototype=p;
  IsRegisteredttabbuttonstyle=true;
}
function Create_ttabbuttonstyle(p){
  Register_ttabbuttonstyle();
  if(p==void(0))var p=new ttabbuttonstyle();
  p=Create_tcontainerstyle(p);
  p.zb="ttabbuttonstyle";
  return p
}

function tabbutton(){}
function Register_tabbutton(){
  if(IsRegisteredtabbutton)return;
  Register_button();
  var p=new button();
  p.zb="tabbutton";
  p.zc=tabbutton;
  p.ParentClass=button;
  p.handleonclick=tabbutton_handleonclick;
  p.getproperty_isfocused=tabbutton_getproperty_isfocused;
  p.attachdomeventhandlers0=tabbutton_attachdomeventhandlers0;
  p.detachdomeventhandlers=tabbutton_detachdomeventhandlers;
  p.createcontrolstyle=tabbutton_createcontrolstyle;
  p.setuptabbuttonattrs=tabbutton_setuptabbuttonattrs;
  p.setupdomhandle=tabbutton_setupdomhandle;
  p.pagecontrol=tabbutton_pagecontrol;
  tabbutton.prototype=p;
  IsRegisteredtabbutton=true;
}
function Create_tabbutton(p){
  Register_tabbutton();
  if(p==void(0))var p=new tabbutton();
  p=Create_button(p);
  p.zb="tabbutton";
  p.ftabname="";
  return p
}

function popupbutton(){}
function Register_popupbutton(){
  if(IsRegisteredpopupbutton)return;
  Register_button();
  var p=new button();
  p.zb="popupbutton";
  p.zc=popupbutton;
  p.ParentClass=button;
  p.initfromstyle=popupbutton_initfromstyle;
  p.create0=popupbutton_create0;
  p.createdomobject=popupbutton_createdomobject;
  popupbutton.prototype=p;
  IsRegisteredpopupbutton=true;
}
function Create_popupbutton(p){
  Register_popupbutton();
  if(p==void(0))var p=new popupbutton();
  p=Create_button(p);
  p.zb="popupbutton";
  return p
}

function popuplabel(){}
function Register_popuplabel(){
  if(IsRegisteredpopuplabel)return;
  Register_textlabel();
  var p=new textlabel();
  p.zb="popuplabel";
  p.zc=popuplabel;
  p.ParentClass=textlabel;
  p.allowcontrolstyles=popuplabel_allowcontrolstyles;
  p.initfromstyle=popuplabel_initfromstyle;
  p.create0=popuplabel_create0;
  p.createdomobject=popuplabel_createdomobject;
  popuplabel.prototype=p;
  IsRegisteredpopuplabel=true;
}
function Create_popuplabel(p){
  Register_popuplabel();
  if(p==void(0))var p=new popuplabel();
  p=Create_textlabel(p);
  p.zb="popuplabel";
  return p
}

function popupheader(){}
function Register_popupheader(){
  if(IsRegisteredpopupheader)return;
  Register_container();
  var p=new container();
  p.zb="popupheader";
  p.zc=popupheader;
  p.ParentClass=container;
  p.getproperty_button=popupheader_getproperty_button;
  p.getproperty_label=popupheader_getproperty_label;
  p.createbutton=popupheader_createbutton;
  p.createlabel=popupheader_createlabel;
  p.allowcontrolstyles=popupheader_allowcontrolstyles;
  p.createcontrolstyle=popupheader_createcontrolstyle;
  p.getproperty_cangrow=popupheader_getproperty_cangrow;
  p.initcurrentstyle=popupheader_initcurrentstyle;
  p.initfromstyle=popupheader_initfromstyle;
  p.create0=popupheader_create0;
  p.createdomobject=popupheader_createdomobject;
  popupheader.prototype=p;
  IsRegisteredpopupheader=true;
}
function Create_popupheader(p){
  Register_popupheader();
  if(p==void(0))var p=new popupheader();
  p=Create_container(p);
  p.zb="popupheader";
  return p
}

function popupoverlay(){}
function Register_popupoverlay(){
  if(IsRegisteredpopupoverlay)return;
  Register_container();
  var p=new container();
  p.zb="popupoverlay";
  p.zc=popupoverlay;
  p.ParentClass=container;
  p.getproperty_height=popupoverlay_getproperty_height;
  p.resizemodaloverlay=popupoverlay_resizemodaloverlay;
  p.keymodaloverlay=popupoverlay_keymodaloverlay;
  p.create0=popupoverlay_create0;
  p.createdomobject=popupoverlay_createdomobject;
  p.freedom=popupoverlay_freedom;
  popupoverlay.prototype=p;
  IsRegisteredpopupoverlay=true;
}
function Create_popupoverlay(p){
  Register_popupoverlay();
  if(p==void(0))var p=new popupoverlay();
  p=Create_container(p);
  p.zb="popupoverlay";
  p.resizemodaloverlaymethodptr=null;
  p.keymodaloverlaymethodptr=null;
  p.nofadein=0;
  p.ownerwindow=null;
  return p
}

function popupwindow(){}
function Register_popupwindow(){
  if(IsRegisteredpopupwindow)return;
  Register_tpartscontainer();
  var p=new tpartscontainer();
  p.zb="popupwindow";
  p.zc=popupwindow;
  p.ParentClass=tpartscontainer;
  p.getproperty_header=popupwindow_getproperty_header;
  p.getproperty_cangrow=popupwindow_getproperty_cangrow;
  p.createheader=popupwindow_createheader;
  p.updatecursor=popupwindow_updatecursor;
  p.supportsanimation=popupwindow_supportsanimation;
  p.create0=popupwindow_create0;
  p.createdomobject=popupwindow_createdomobject;
  p.initfromstyle=popupwindow_initfromstyle;
  popupwindow.prototype=p;
  IsRegisteredpopupwindow=true;
}
function Create_popupwindow(p){
  Register_popupwindow();
  if(p==void(0))var p=new popupwindow();
  p=Create_tpartscontainer(p);
  p.zb="popupwindow";
  p.fstylename="";
  p.isdynamic=0;
  return p
}

function Create_TWebControlArray(p){
  return new Array();
}

function tfloatingwindow(){}
function Register_tfloatingwindow(){
  if(IsRegisteredtfloatingwindow)return;
  Register_tabstractwindow();
  var p=new tabstractwindow();
  p.zb="tfloatingwindow";
  p.zc=tfloatingwindow;
  p.ParentClass=tabstractwindow;
  p.startdrag=tfloatingwindow_startdrag;
  p.stopdrag=tfloatingwindow_stopdrag;
  p.dragmove=tfloatingwindow_dragmove;
  p.readparameters=tfloatingwindow_readparameters;
  p.inittaborder=tfloatingwindow_inittaborder;
  p.getproperty_cangrow=tfloatingwindow_getproperty_cangrow;
  p.getproperty_content=tfloatingwindow_getproperty_content;
  p.getproperty_currentform=tfloatingwindow_getproperty_currentform;
  p.getproperty_center=tfloatingwindow_getproperty_center;
  p.setproperty_center=tfloatingwindow_setproperty_center;
  p.getproperty_draggable=tfloatingwindow_getproperty_draggable;
  p.setproperty_draggable=tfloatingwindow_setproperty_draggable;
  p.getproperty_title=tfloatingwindow_getproperty_title;
  p.setproperty_title=tfloatingwindow_setproperty_title;
  p.getproperty_closable=tfloatingwindow_getproperty_closable;
  p.setproperty_closable=tfloatingwindow_setproperty_closable;
  p.getproperty_noborder=tfloatingwindow_getproperty_noborder;
  p.setproperty_noborder=tfloatingwindow_setproperty_noborder;
  p.getproperty_modal=tfloatingwindow_getproperty_modal;
  p.setproperty_modal=tfloatingwindow_setproperty_modal;
  p.getproperty_nofadein=tfloatingwindow_getproperty_nofadein;
  p.setproperty_nofadein=tfloatingwindow_setproperty_nofadein;
  p.getproperty_stylename=tfloatingwindow_getproperty_stylename;
  p.setproperty_stylename=tfloatingwindow_setproperty_stylename;
  p.createcontent=tfloatingwindow_createcontent;
  p.createmodaloverlay=tfloatingwindow_createmodaloverlay;
  p.createpopupwindow=tfloatingwindow_createpopupwindow;
  p.supportsanimation=tfloatingwindow_supportsanimation;
  p.closewindow=tfloatingwindow_closewindow;
  p.aftergroworshrink=tfloatingwindow_aftergroworshrink;
  p.putfocus=tfloatingwindow_putfocus;
  p.bringtofront=tfloatingwindow_bringtofront;
  p.showmodaloverlay=tfloatingwindow_showmodaloverlay;
  p.showanimated=tfloatingwindow_showanimated;
  p.hideanimated=tfloatingwindow_hideanimated;
  p.attachevents=tfloatingwindow_attachevents;
  p.detachevents=tfloatingwindow_detachevents;
  p.handleanimationclose=tfloatingwindow_handleanimationclose;
  p.doactivate=tfloatingwindow_doactivate;
  p.create0=tfloatingwindow_create0;
  p.zd=p.destroy=tfloatingwindow_destroy;
  p.freedom=tfloatingwindow_freedom;
  p.run=tfloatingwindow_run;
  p.activate=tfloatingwindow_activate;
  p.reposition0=tfloatingwindow_reposition0;
  p.close=tfloatingwindow_close;
  p.resize=tfloatingwindow_resize;
  tfloatingwindow.prototype=p;
  IsRegisteredtfloatingwindow=true;
}
function Create_tfloatingwindow(p){
  Register_tfloatingwindow();
  if(p==void(0))var p=new tfloatingwindow();
  p=Create_tabstractwindow(p);
  p.zb="tfloatingwindow";
  p.fformname="";
  p.fparameters="";
  p.fcenter=0;
  p.fmodal=0;
  p.fnofadein=0;
  p.fcloseable=0;
  p.fnoborder=0;
  p.ftitle="";
  p.fstylename="";
  p.fdraggable=0;
  p.fdragging=0;
  p.fdragposx=0;
  p.fdragposy=0;
  p.fdragoffsetx=0;
  p.fdragoffsety=0;
  p.fcontent=null;
  p.foverlay=null;
  p.fpopupwindow=null;
  p.fctrllist=[];
  p.fcontenttop=0;
  p.fsavemousemove=null;
  return p
}

function t_controlstyles(){}
function Register_t_controlstyles(){
  if(IsRegisteredt_controlstyles)return;
  Register_tcontrolstyles();
  var p=new tcontrolstyles();
  p.zb="t_controlstyles";
  p.zc=t_controlstyles;
  p.ParentClass=tcontrolstyles;
  t_controlstyles.prototype=p;
  IsRegisteredt_controlstyles=true;
}
function Create_t_controlstyles(p){
  Register_t_controlstyles();
  if(p==void(0))var p=new t_controlstyles();
  p=Create_tcontrolstyles(p);
  p.zb="t_controlstyles";
  return p
}

var ctabbuttonheight;ctabbuttonheight=24;
var cpopupheaderheight;cpopupheaderheight=25;
var cpopupclosebuttonsize;cpopupclosebuttonsize=13;
var cdefaultautocompletedelay;cdefaultautocompletedelay=100;
var cdefaultmodalopacity;cdefaultmodalopacity=80;
var cdefaultmodalcolor;cdefaultmodalcolor=0;
var clistitemvalue;clistitemvalue='itemvalue';
var clistitemselected;clistitemselected='selected';
var cstartofweek;cstartofweek=0;
var cmaskcharacters;cmaskcharacters='L0A&?9aC#<>';
function dequote(s){
  var result="";
  result=s;
  if(result == ''){
    return result;
  }
  result=replacestring(result,'&amp;','&');
  result=replacestring(result,'&lt;','<');
  return replacestring(result,'&gt;','>');
}

function getcontentheight(cangrow,handle){
  var result=0;
  var saveheight="";
  var state="";
  var style=null;
  if((cangrow == 0) && (bRoWsEr.engineid != 'MS')){
    style=handle.style;
    saveheight=style.height;
    state=style.overflow;
    try{
      style.height='0px';
      style.overflow='scroll';
      result=handle.scrollHeight;
    }finally{
      style.overflow=state;
      style.height=saveheight;
    }
  }else 
    return handle.scrollHeight;
  return result;
}

function hasasparent(ctrl,parent){

  for(;ctrl != null;){
    if(ctrl == parent){
      return true;
    }
    ctrl=ctrl.owner;
  }
  return false;
}

function updateelementwithstyle(handle,styleobj,stylename){  var style=null;
  var styles=null;
  if(styleobj == null){
    return;
  }
  styles=styleobj.controlstyle;
  style=styles.getproperty_controlstyle(stylename);
  if(style == null){
    style=styles.getproperty_controlstyle('');
  }
  if(style == null){
    return;
  }
  styles.applybackgroundstyle(style,handle,false);
  styles.applyborderstyle(style,handle);
  styles.applycontrolstyle(style,handle);
}

function container_create0(aid,aowner){
  var self=this;
  twebcontrol.prototype.create0.call(self, aid,aowner);
  self.attrs.v.color=0xeeeeee;
  self.attrs.v.borderstyle=2;
  self.attrs.v.bordercolor=0xcccccc;
  self.attrs.v.borderwidth=1;
  with(self.containerattrs){
    cangrow=0;
    canshrink=false;
    shrinkonhide=true;
    layout=0;
  }
  return self;
}

function container_destroy(){
  var self=this;
  self.containerattrs=null;
  twebcontrol.prototype.destroy.call(self);
}

function container_setupdomhandle(){
  var self=this;
  var savebandindex=0;
  var saverepeaterindex=0;
  var i=0;
  var k=0;
  var info=null;
  twebcontrol.prototype.setupdomhandle.call(self);
  if(self.attrs.v.transparent){
    savebandindex=self.bandindex;
    saverepeaterindex=self.repeaterindex;
    for(i=0;i<=self.bandinfos.length - 1;i++){
      self.bandindex=i;
      info=self.bandinfos[i];
      for(k=0;k<=info.repeaterbands.length - 1;k++){
        self.setproperty_transparent(true);
      }
    }
    self.bandindex=savebandindex;
    self.repeaterindex=saverepeaterindex;
  }
  if(self.classtype() == container){
    self.setupgrowshrinkhelper();
  }
}

function container_setupgrowshrinkhelper(){
  var self=this;
  with(Create_twebcontrol().create0(self.name + 'mfk_int',self)){
    attrs.v.borderwidth=0;
    attrs.v.height=0;
    attrs.v.width=0;
    attrs.v.left=0;
    attrs.v.top=self.attrs.v.height;
    if(_InSet(1,self.attrs.v.bordersides)){
      attrs.v.top-=self.attrs.v.borderwidth;
    }
    if(_InSet(3,self.attrs.v.bordersides)){
      attrs.v.top-=self.attrs.v.borderwidth;
    }
    createdomobject();
  }
}

function container_setupcontainerattrs(acangrow,acanshrink,ashrinkonhide,alayout){
  var self=this;
  self.containerattrs.cangrow=acangrow;
  self.containerattrs.canshrink=acanshrink;
  self.containerattrs.shrinkonhide=ashrinkonhide;
  self.containerattrs.layout=alayout;
}

function container_getproperty_cangrow(){
  var self=this;
  var result=0;
  result=self.containerattrs.cangrow;
  if((result == 0) && (self.getproperty_verticalplacement() != 0)){
    if((self.owner != null) && (_IS(self.owner,container)) && (self.getproperty_verticalplacement() == 3)){
      return result;
    }
    if(self.domhandlecreated()){
      self.domstyle().overflow='auto';
    }
    return 2;
  }
  return result;
}

function container_getproperty_canshrink(){
  var self=this;

  return self.containerattrs.canshrink && (self.getproperty_verticalplacement() == 0);
}

function container_setproperty_cangrow(a){
  var self=this;
  self.containerattrs.cangrow=a;
}

function container_setproperty_canshrink(b){
  var self=this;
  self.containerattrs.canshrink=b;
}

function container_contentheight(){
  var self=this;
  var result=0;
  var i=0;
  var b=0;
  function getctrlbottom(ctrl){
    var result=0;
    var savebandindex=0;
    var saverepeaterindex=0;
    result=0;
    savebandindex=ctrl.bandindex;
    saverepeaterindex=ctrl.repeaterindex;
    ctrl.bandindex=self.bandindex;
    ctrl.repeaterindex=self.repeaterindex;
    if(_InSet(ctrl.getproperty_verticalplacement(),_ISet(false,0,0,1,1))){
      if(_IS(ctrl,subform)){
        result=ctrl.getproperty_top() + ctrl.getproperty_height();
      }else 
      result=(_IS(ctrl,textlabel))?ctrl.getproperty_top() + ctrl.getproperty_height():ctrl.getproperty_top() + ctrl.contentheight();
      if((ctrl.attrs.v.top + ctrl.attrs.v.height) > self.attrs.v.height){
        result=0;
      }
    }
    ctrl.bandindex=savebandindex;
    ctrl.repeaterindex=saverepeaterindex;
    return result;
  }
  result=0;
  if(self.classtype() == container){
    if(!self.getproperty_visible()){
      return result;
    }
  }
  for(i=0;i<=self.childcount() - 1;i++){
    if((_IS(self.childctrls[i],twebcontrol)) && !self.childctrls[i].isinplace()){
      b=getctrlbottom(self.childctrls[i]);
      if(result < b){
        result=b;
      }
    }
  }
  return result;
}

function container_setproperty_visible(b){
  var self=this;
  if(b == self.getproperty_visible()){
    return;
  }
  twebcontrol.prototype.setproperty_visible.call(self, b);
  if(self.containerattrs.shrinkonhide){
    self.groworshrink(-1,true);
  }
}

function container_isflow(){
  var self=this;

  return self.containerattrs.layout != 0;
}

function container_sortctrls(){
  var self=this;
  if(self.containerattrs.layout != 0){
    return;
  }
  twebcontrol.prototype.sortctrls.call(self);
}

function container_ispanel(){


  return true;
}

function container_createcontrolstyle(){
  var self=this;

  return Create_tcontainerstyle().create(self);
}

function container_applydeltay_tosiblings(actrl,threshold,deltay){
  var self=this;
  var i=0;
  var d={v:0};
  var savebandindex=0;
  var saverepeaterindex=0;
  var ctrl=null;
  for(i=0;i<=self.childcount() - 1;i++){
    ctrl=self.childctrls[i];
    savebandindex=ctrl.bandindex;
    saverepeaterindex=ctrl.repeaterindex;
    ctrl.bandindex=self.bandindex;
    ctrl.repeaterindex=self.repeaterindex;
    if((ctrl != actrl) && (ctrl.getproperty_top() >= threshold) && !ctrl.internalgrowshrinkoverride){
      d.v=deltay;
      if(assigned(ctrl.onbeforepushedorpulled)){
        ctrl.onbeforepushedorpulled._o[ctrl.onbeforepushedorpulled._p](d);
      }

        ctrl.setproperty_top(ctrl.getproperty_top() + d.v);
      if(assigned(ctrl.onafterpushedorpulled)){
        ctrl.onafterpushedorpulled._o[ctrl.onafterpushedorpulled._p](d.v);
      }
    }
    ctrl.bandindex=savebandindex;
    ctrl.repeaterindex=saverepeaterindex;
  }
}

function tnavigationbarvalues_create(){
  var self=this;
  tobject.prototype.create.call(self);
  self.visible=false;
  self.alignment=1;
  self.spacing=5;
  self.margin=2;
  self.offset=2;
  self.buttons='';
  self.borderstyle=1;
  self.borderwidth=1;
  self.bordercolor=0;
  self.color=0xffffff;
  self.parentcolor=true;
  self.smallimages=true;
  self.buttonstyle='Round';
  self.fontcolor=0;
  self.fontsize=9;
  self.fontname='Arial';
  self.fontstyle={};
  self.autofont=true;
  return self;
}

function tnavigationbarvalues_readfromstring(s){
  var self=this;
  var param="";
  var attr="";
  var val="";
  var k=0;
  var i=0;
  function stringtobool(s){

    return stringsequal(s,'true');
  }
  function stringtoborderstyle(s){

    if(stringsequal(s,'bsNone')){
      return 0;
    }else 
    if(stringsequal(s,'bsDotted')){
      return 4;
    }else 
    if(stringsequal(s,'bsDashed')){
      return 5;
    }else 
    if(stringsequal(s,'bsSingle')){
      return 1;
    }else 
    if(stringsequal(s,'bsInSet')){
      return 2;
    }else 
    if(stringsequal(s,'bsOutSet')){
      return 3;
    }else 
    if(stringsequal(s,'bbs3D')){
      return 2;
    }else 
    return (stringsequal(s,'bbsFlat'))?1:0;
  }
  function stringtoalignment(s){
    var result=0;
    if(stringsequal(s,'taLeftJustify')){
      return 0;
    }else 
    if(stringsequal(s,'taCenter')){
      return 1;
    }else 
    if(stringsequal(s,'taJustify')){
      return 3;
    }else 
    if(stringsequal(s,'taRightJustify')){
      return 2;
    }
    return result;
  }
  function stringtofontstyle(s){
    var result={};
    result={};
    if(pos('bold',s) != 0){
      result=_UnionSet(result,_ISet(false,0,0));
    }
    if(pos('italic',s) != 0){
      result=_UnionSet(result,_ISet(false,1,1));
    }
    if(pos('underline',s) != 0){
      result=_UnionSet(result,_ISet(false,2,2));
    }
    if(pos('strikeout',s) != 0){
      return _UnionSet(result,_ISet(false,3,3));
    }
    return result;
  }
  i=1;
  try{
    for(;i <= lEngTH(s);){
      k=jpos(';',s,i);
      if(k == 0){
        k=lEngTH(s);
      }
      param=copy(s,i,k - i);
      i=k + 1;
      if(param != ''){
        k=pos(':',param);
        if(k != 0){
          attr=copy(param,1,k - 1);
          val=copy(param,k + 1,lEngTH(pa
