  var gv_themevalues;
  var gv_controlstyles;
  isScriptorApp=true;
  IsRegisteredtobject=false;
  IsRegisteredtdbobject=false;
  IsRegisteredtexception=false;
  IsRegisteredeconverterror=false;
  IsRegisteredthtmlstyler=false;
  IsRegisteredtparameter=false;
  IsRegisteredtparameters=false;
  IsRegisteredtxmlhttprequestwrapper=false;
  IsRegisteredtthread=false;
  IsRegisteredtattachedeventhandler=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;
  IsRegisteredtitemdata=false;
  IsRegisteredtfielddata=false;
  IsRegisteredttabledata=false;
  IsRegisteredtwebservicedatasource=false;
  IsRegisteredtdynamicformtype=false;
  IsRegisteredtbackground=false;
  IsRegisteredtcontrolstyle=false;
  IsRegisteredtpageinfo=false;
  IsRegisteredtcatalog=false;
  IsRegisteredabout=false;
  IsRegisteredformlocation=false;
  IsRegisteredformproducts=false;
  IsRegisteredformproductshome=false;
  IsRegisteredformproductsmedical=false;
  IsRegisteredformshop=false;
  IsRegisteredformsplash=false;
  IsRegisteredwebmethod=false;
  IsRegisteredtgetdatawebmethod=false;
  IsRegisteredtupdatedatawebmethod=false;
  IsRegisteredtdatapage=false;
  IsRegisteredtdataset=false;
  IsRegisteredform=false;
  IsRegisteredtformopener=false;
  IsRegisteredt_webcontrol=false;
  IsRegisteredtdataform=false;
  IsRegisteredtdataformpopup=false;
  IsRegisteredtserializablefieldinfo=false;
  IsRegisteredtserializablemethodparaminfo=false;
  IsRegisteredtserializabletypeinfo=false;
  IsRegisteredtserializableenumtypeinfo=false;
  IsRegisteredtserializablecomplextypeinfo=false;
  IsRegisteredtserializablelistinfo=false;
  IsRegisteredtserializableclassinfo=false;
  IsRegisteredtserializablemethodinfo=false;
  IsRegisteredtserializer=false;
  IsRegisteredtsoapheaderinfo=false;
  IsRegisteredtserializabletypes=false;
  IsRegisteredtsoapclient=false;
  IsRegisteredtcontainerstyle=false;
  IsRegisteredcontainer=false;
  IsRegisteredtnavigationbarvalues=false;
  IsRegisteredtbandstyle=false;
  IsRegisteredtembeddedfielddomhandlearray=false;
  IsRegisteredband=false;
  IsRegisteredtbuttonstyle=false;
  IsRegisteredbutton=false;
  IsRegisteredcheckbox=false;
  IsRegisteredtlistboxstyle=false;
  IsRegisteredlistbox=false;
  IsRegisteredtpartscontainer=false;
  IsRegisteredbuttoneditorstyles=false;
  IsRegisteredbuttoneditor=false;
  IsRegisteredtinplaceedit=false;
  IsRegisteredpopuplistbox=false;
  IsRegisteredcombobox=false;
  IsRegistereddatetimeedit=false;
  IsRegistereddatetimepicker=false;
  IsRegisteredtstyleholdercontainer=false;
  IsRegisteredtstyleholderbutton=false;
  IsRegisteredcalendarheader=false;
  IsRegisteredcalendardaytoday=false;
  IsRegisteredcalendardaythismonth=false;
  IsRegisteredcalendardayothermonth=false;
  IsRegisteredcalendardaynames=false;
  IsRegisteredcalendarprevyear=false;
  IsRegisteredcalendarnextyear=false;
  IsRegisteredcalendarprevmonth=false;
  IsRegisteredcalendarnextmonth=false;
  IsRegisteredlistboxitem=false;
  IsRegisteredcalendar=false;
  IsRegisteredpopupcalendar=false;
  IsRegisteredbuttoneditorpopup=false;
  IsRegistereddatetimeeditpopup=false;
  IsRegisteredcomboboxpopup=false;
  IsRegisteredttexteditstyle=false;
  IsRegisteredtextedit=false;
  IsRegisteredtimagestyle=false;
  IsRegisteredimage=false;
  IsRegisteredtnavimagestyle=false;
  IsRegisterednavimage=false;
  IsRegisteredtextlabel=false;
  IsRegisteredoptionbutton=false;
  IsRegisteredtrectanglestyle=false;
  IsRegisteredrectangle=false;
  IsRegisteredtsubformstyle=false;
  IsRegisteredsubform=false;
  IsRegisteredtabsheet=false;
  IsRegisteredttabcontrolstyle=false;
  IsRegisteredtabcontrol=false;
  IsRegisteredpopupbutton=false;
  IsRegisteredpopuplabel=false;
  IsRegisteredpopupheader=false;
  IsRegisteredpopupoverlay=false;
  IsRegisteredpopupwindowstyle=false;
  IsRegisteredpopupwindow=false;
  IsRegisteredt_controlstyles=false;
  IsRegisteredvendorsrecord=false;
  IsRegisteredtuniformityservicemethod=false;
  IsRegisteredtgetvendors=false;
  IsRegisteredtupdatevendors=false;
  IsRegistereduniformityxapp=false;
  IsRegisteredcontent=false;
  IsRegisteredhome=false;


function RegClasses(){
  Register_tobject();
  Register_tdbobject();
  Register_texception();
  Register_econverterror();
  Register_thtmlstyler();
  Register_tparameter();
  Register_tparameters();
  Register_txmlhttprequestwrapper();
  Register_tthread();
  Register_tattachedeventhandler();
  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_titemdata();
  Register_tfielddata();
  Register_ttabledata();
  Register_twebservicedatasource();
  Register_tdynamicformtype();
  Register_tbackground();
  Register_tcontrolstyle();
  Register_tpageinfo();
  Register_tcatalog();
  Register_webmethod();
  Register_tgetdatawebmethod();
  Register_tupdatedatawebmethod();
  Register_tdatapage();
  Register_tdataset();
  Register_form();
  Register_tformopener();
  Register_t_webcontrol();
  Register_tdataform();
  Register_tdataformpopup();
  Register_tserializablefieldinfo();
  Register_tserializablemethodparaminfo();
  Register_tserializabletypeinfo();
  Register_tserializableenumtypeinfo();
  Register_tserializablecomplextypeinfo();
  Register_tserializablelistinfo();
  Register_tserializableclassinfo();
  Register_tserializablemethodinfo();
  Register_tserializer();
  Register_tsoapheaderinfo();
  Register_tserializabletypes();
  Register_tsoapclient();
  Register_tcontainerstyle();
  Register_container();
  Register_tnavigationbarvalues();
  Register_tbandstyle();
  Register_tembeddedfielddomhandlearray();
  Register_band();
  Register_tbuttonstyle();
  Register_button();
  Register_checkbox();
  Register_tlistboxstyle();
  Register_listbox();
  Register_tpartscontainer();
  Register_buttoneditorstyles();
  Register_buttoneditor();
  Register_tinplaceedit();
  Register_popuplistbox();
  Register_combobox();
  Register_datetimeedit();
  Register_datetimepicker();
  Register_tstyleholdercontainer();
  Register_tstyleholderbutton();
  Register_calendarheader();
  Register_calendardaytoday();
  Register_calendardaythismonth();
  Register_calendardayothermonth();
  Register_calendardaynames();
  Register_calendarprevyear();
  Register_calendarnextyear();
  Register_calendarprevmonth();
  Register_calendarnextmonth();
  Register_listboxitem();
  Register_calendar();
  Register_popupcalendar();
  Register_buttoneditorpopup();
  Register_datetimeeditpopup();
  Register_comboboxpopup();
  Register_ttexteditstyle();
  Register_textedit();
  Register_timagestyle();
  Register_image();
  Register_tnavimagestyle();
  Register_navimage();
  Register_textlabel();
  Register_optionbutton();
  Register_trectanglestyle();
  Register_rectangle();
  Register_tsubformstyle();
  Register_subform();
  Register_tabsheet();
  Register_ttabcontrolstyle();
  Register_tabcontrol();
  Register_popupbutton();
  Register_popuplabel();
  Register_popupheader();
  Register_popupoverlay();
  Register_popupwindowstyle();
  Register_popupwindow();
  Register_t_controlstyles();
  Register_vendorsrecord();
  Register_tuniformityservicemethod();
  Register_tgetvendors();
  Register_tupdatevendors();
  Register_uniformityxapp();
}

function JMain(){
  RegClasses();
  datetimeoptions.converttoutctime=false;
  datetimeoptions.defaultformat=3;
  datetimeoptions.defaultmode=1;
  __suspendedthreads=CreateList(null,null,Create_tthread,tobject_create);
  __runningthreads=CreateList(null,null,Create_tthread,tobject_create);
  __mainthread=Create_tthread().create();
  uniformityservicesrlzregister();
  createmoduleformfunction=docreatemoduleform;
  getwebmethodfunction=dogetwebmethod;
  loadtablescatalogdata();
  loadqueriescatalogdata();
  loadgenericitemscatalogdata();
  loadpagescatalogdata();
  x=Create_uniformityxapp().create();
  xapp=x;
  if(gvmainformid == ""){
    gvmainformid="Content";
  }
  _initxapp();
}
function GetVal(p){
  if(p==null)return p;
  if(p["v"]!=void(0)){
    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=new Object();
    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,a1){
  if(w){
    var p=new Object();
    var q=p.v=new Array();
    p.v.Size=a1;
    for(var i=2;i<=arguments.length-1;i++){
      p.v[arguments[i]]=1
    }
  } else {
    var p=new Array();
    p.Size=a1;
    for(var i=2;i<=arguments.length-1;i++){
      p[arguments[i]]=1
    }
  }
  return p
}

function _DSet(w,d){
  d=GetVal(d);
  var p=_ISet(w,d.Size);
  _SSet(d,p);
  return p
}

function _SSet(d,p){
  p=GetVal(p);
  for(var i=0;i<=d.Size-1;i++){
    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 _InSet(m,s){
  s=GetVal(s);
  return s[m]==1
}

function _DiffSet(d,p){
  p=GetVal(p);
  d=GetVal(d);
  var u=_ISet(false,d.Size);
  for(var i=0;i<=d.Size-1;i++){
    if((d[i]==1)&&(p[i]!=1))u[i]=1
  }
  return u
}

function _UnionSet(d,p){
  p=GetVal(p);
  d=GetVal(d);
  var u=_DSet(false,d);
  for(var i=0;i<=d.Size-1;i++){
    if(p[i]==1)u[i]=1
  }
  return u
}

function _IntSet(d,p){
  p=GetVal(p);
  d=GetVal(d);
  var u=_ISet(false,d.Size);
  for(var i=0;i<=d.Size-1;i++){
    if((p[i]==1)&&(d[i]==1))u[i]=1
  }
  return u
}

function _SubSet(d,p){
  p=GetVal(p);
  d=GetVal(d);
  for(var i=0;i<=d.Size-1;i++){
    if((d[i]==1)&&(p[i]!=1))return false
  }
  return true
}

function _SupSet(d,p){
  return _SubSet(p,d)
}

function _EquSet(d,p){
  p=GetVal(p);
  d=GetVal(d);
  if(p.Size!=d.Size)return false;
  for(var i=0;i<=p.Size-1;i++){
    if(p[i]!=d[i])return false
  }
  return true
}

function Init_tfontstyles(w,d){
  var p=_ISet(w,4);
  if(d!=void(0)){
    _SSet(d,p);
  }
  return p
}

function Init_thtmlbordersides(w,d){
  var p=_ISet(w,4);
  if(d!=void(0)){
    _SSet(d,p);
  }
  return p
}

function Init_tfont(w,d){
  if(w){
    var p=AddWrapper(new Object());
    var q=p.v;
  } else {
    var p=new Object();
    var q=p;
  }
  q.name=null;
  q.height=null;
  q.style=Init_tfontstyles(false);
  q.color=null;
  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));
  _SSet(GetVal(d.style),p.style);
  p.color=SetVal(p.color,GetVal(d.color));
}

function tobject(){}
function Register_tobject(){
  if(IsRegisteredtobject)return;
  var p=new Object();  p.zb="tobject";
  p.zc=tobject;
  p.ParentClass=null;
  p.create=tobject_create;
  p.destroy=tobject_destroy;
  p.free=tobject_free;
  p.classtype=tobject_classtype;
  p.classname=tobject_classname;
  p.autoinitialize=tobject_autoinitialize;
  p.autofinalize=tobject_autofinalize;
  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 tdbobject(){}
function Register_tdbobject(){
  if(IsRegisteredtdbobject)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tdbobject";
  p.zc=tdbobject;
  p.ParentClass=tobject;
  p.autoinitialize=tdbobject_autoinitialize;
  tdbobject.prototype=p;
  IsRegisteredtdbobject=true;
}
function Create_tdbobject(p){
  Register_tdbobject();
  if(p==void(0))var p=new tdbobject();
  p=Create_tobject(p);
  p.zb="tdbobject";
  p.status_1=Init_data(true);
  p.updatestatus=Init_data(true);
  return p
}

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=null;
  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();
}

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_up;vk_up=0x26;
var vk_down;vk_down=0x28;
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 nilstring;nilstring="#255" + "NIL" + "#255";
var nilinteger;nilinteger=0x80000000;
var nilreal;nilreal=-1.17e38;
var nilboolean;nilboolean=255;
var nildatetime;nildatetime=null;
function destroyobject(obj){

  obj.free();
  return null;
}

function tobject_create(){
  var self=this;
  self.autoinitialize();
  return self;
}

function tobject_destroy(){
  var self=this;
  self.autofinalize();
}

function tobject_autoinitialize(){

}

function tobject_autofinalize(){

}

function tobject_free(){
  var self=this;
  self.destroy();
}

function tdbobject_autoinitialize(){
  var self=this;
  tobject.prototype.autoinitialize.call(self);
}

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 inc(a){  a.v++;
}

function dec(a){  a.v--;
}

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=null;
  p.value=null;
  p.defvalue=null;
  p.inout=null;
  return p
}

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.destroy=tparameters_destroy;
  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=null;
  return p
}

function _IMthod(w,d){
  if(w){
    var p=AddWrapper(null);
    p.v._o=null;
    p.v._p="";
  }else{
    var p=new Object();
    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_responsexml=txmlhttprequestwrapper_getproperty_responsexml;
  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.create=txmlhttprequestwrapper_create;
  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;
  p.threadid=null;
  return p
}

function tthread(){}
function Register_tthread(){
  if(IsRegisteredtthread)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tthread";
  p.zc=tthread;
  p.ParentClass=tobject;
  p.create=tthread_create;
  p.destroy=tthread_destroy;
  p.executenext=tthread_executenext;
  p.resume=tthread_resume;
  tthread.prototype=p;
  IsRegisteredtthread=true;
}
function Create_tthread(p){
  Register_tthread();
  if(p==void(0))var p=new tthread();
  p=Create_tobject(p);
  p.zb="tthread";
  p.threadid=null;
  p.callerthreadid=null;
  p.executionindex=null;
  return p
}

var __mainthreadid=0,__lastthreadid=0;var __suspendedthreads;var __runningthreads,__currentthread=null,__mainthread=null;
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;
  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=CreateList(null,null,Create_tparameter,tobject_create);
  return self;
}

function tparameters_destroy(){
  var self=this;
  freeobjectlist(self.items);
  tobject.prototype.destroy.call(self);
}

function tparameters_clear(){
  var self=this;
  var i;
  for(i=self.items.fcount - 1;i>=0;i--){
    self.items.get(i).free();
  }
  self.items.clear();
}

function tparameters_copyto(parameters){
  var self=this;
  var i;
  parameters.clear();
  for(i=self.items.fcount - 1;i>=0;i--){
    parameters.items.add(self.items.get(i).replicate());
  }
}

function tparameters_getparambyname(s){
  var self=this;

  var i;
  for(i=self.items.fcount - 1;i>=0;i--){
    if(stringsequal(self.items.get(i).name,s)){
      return self.items.get(i);
    }
  }
  return null;
}

function tparameters_getparamvalue(s){
  var self=this;
  var result;
  var p;
  result="";
  p=self.getparambyname(s);
  if(p != null){
    return p.value;
  }
  return result;
}

function tparameters_addlist(paramstr){
  var self=this;

  var i,l,name,value;
  function trim(s){
    var result;
    var i=Init_data(true);
    var j=Init_data(true);
    result=s;
    i.v=1;
    while((i.v <= lEngTH(s)) && (s.charAt(i.v-1) == " ")){
      inc(i);
    }
    j.v=lEngTH(s);
    while((j.v > 0) && (s.charAt(j.v-1) == " ")){
      dec(j);
    }
    return copy(s,i.v,j.v - i.v + 1);
  }
  function skipseperatorchars(){    while((i <= l) && (paramstr.charAt(i-1) == " ")){
      i++;
    }
  }
  function parampos(c,paramstr,index){
    var result;
    result=jpos(c,paramstr,index - 1);
    while((result > 1) && (paramstr.charAt(result - 1-1) == "\\")){
      result=jpos(c,paramstr,result);
    }
    return result;
  }
  function getnextdelimitedtoken(c){
    var result;
    var j;
    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);
  while(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;
  result=self.getparambyname(name);
  if(result == null){
    result=Create_tparameter().create(name,value);
    self.items.add(result);
  }else 
    result.value=value;
  return result;
}

function tparameters_define(name,defvalue,inout){
  var self=this;
  var result;
  result=self.getparambyname(name);
  if(result == null){
    result=Create_tparameter().create(name,defvalue);
    self.items.add(result);
  }
  result.defvalue=defvalue;
  result.inout=inout;
  return result;
}

function tparameters_remove(param){
  var self=this;
  var inx;
  inx=self.items.indexof(param);
  if(inx != -1){
    self.items.delete_(inx);
  }
}

function tparameters_asstring(){
  var self=this;
  var result;
  var i;
  result="";
  for(i=self.items.fcount - 1;i>=0;i--){
    if(result != ""){
      result+=",";
    }
    result+='"' + self.items.get(i).name + "=" + encodeparameter(self.items.get(i).value) + '"';
  }
  return result;
}

function tparameters_asuristring(){
  var self=this;
  var result;
  var i;
  result="";
  for(i=self.items.fcount - 1;i>=0;i--){
    with(self.items.get(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_responsexml(){
  var self=this;

  return self.fxmlhttprequest.responseXML;
}

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_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){
    self.fxmlhttprequest.onreadystatechange=(bRoWsEr.engineid == "MS")?nop:null;
    self.fxmlhttprequest=null;
  }
  tobject.prototype.destroy.call(self);
}

function __resumethread(threadid){  var i,t;
  for(i=0;i<=__suspendedthreads.fcount - 1;i++){
    t=__suspendedthreads.get(i);
    if(t.threadid == threadid){
      __suspendedthreads.delete_(i);
      if(!t.resume()){
        t.free();
      }
      return;
    }
  }
}

function __continuethread(threadid,fn){  setcurrentthread(threadid);
  eval(fn);
}

function __getthread(threadid){

  var i;
  for(i=0;i<=__runningthreads.fcount - 1;i++){
    if(__runningthreads.get(i).threadid == threadid){
      return __runningthreads.get(i);
    }
  }
  return null;
}

function getcurrentthreadid(){

  return (__currentthread != null)?__currentthread.threadid:__mainthreadid;
}

function setcurrentthread(threadid){  var t;
  t=__getthread(threadid);
  if(t != null){
    __currentthread=t;
  }
}

function settimeout(fn,delay){

  fn=functionname(__continuethread) + "(" + inttostr(getcurrentthreadid()) + "," + fn + ")";
  return window.setTimeout(fn,delay);
}

function resumethread(threadid){  if(threadid == -1){
    return;
  }
  window.setTimeout(functionname(__resumethread) + '("' + threadid + '")',0);
}

function tthread_create(){
  var self=this;
  tobject.prototype.create.call(self);
  __runningthreads.add(self);
  __suspendedthreads.add(self);
  self.threadid=__lastthreadid;
  __lastthreadid++;
  self.callerthreadid=getcurrentthreadid();
  self.executionindex=-1;
  return self;
}

function tthread_destroy(){
  var self=this;
  resumethread(self.callerthreadid);
  tobject.prototype.destroy.call(self);
  __suspendedthreads.remove(self);
  __runningthreads.remove(self);
}

function tthread_executenext(){
  var self=this;
  var result;
  result=0;
  self.executionindex=-1;
  return result;
}

function tthread_resume(){
  var self=this;
  var result;
  var aes;
  __currentthread=self;
  result=true;
  do{
    try{
      aes=self.executenext();
    }catch(ExceptObject){
      return result;
    }
    if(self.executionindex != -1){
      self.executionindex++;
      if(aes == 1){
        __suspendedthreads.add(self);
        return result;
      }
    }else 
      result=false;
  }while(!(!result));
  return result;
}

_lddmods["SystemClasses"]=true;
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=null;
  p.func=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.create=tdomhandlearray_create;
  p.destroy=tdomhandlearray_destroy;
  p.add=tdomhandlearray_add;
  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;
  p.cleanup=tdomhandlearray_cleanup;
  p.getproperty_count=tdomhandlearray_getproperty_count;
  p.setproperty_count=tdomhandlearray_setproperty_count;
  p.getproperty_handle=tdomhandlearray_getproperty_handle;
  p.getproperty_propvalue=tdomhandlearray_getproperty_propvalue;
  p.setproperty_propvalue=tdomhandlearray_setproperty_propvalue;
  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.handles=null;
  p.fattachedeventhandlers=null;
  p.fdynamicallycreated=null;
  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=null;
  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.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=null;
  p.left=null;
  p.top=null;
  p.width=null;
  p.height=null;
  p.font=Init_tfont(false);
  p.color=null;
  p.disablevalue=null;
  p.borderstyle=null;
  p.bordersides=Init_thtmlbordersides(false);
  p.bordercolor=null;
  p.borderwidth=null;
  p.visibility=null;
  p.cursor=null;
  p.zindex=null;
function Init__textendedattrs(w,d){
  if(w){
    var p=new Object();
    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=null;
  p.taborder=null;
  p.datafield=null;
  p.datatype=null;
  p.alignment=null;
  p.horizontalplacement=null;
  p.verticalplacement=null;
  p.opacity=null;
  p.tag=null;
  p.padding=null;
  p.controlid=null;
  p.eventhandlers=null;
  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.setupdomeventhandlers=tabstractcontrol_setupdomeventhandlers;
  p.attachdomeventhandlers=tabstractcontrol_attachdomeventhandlers;
  p.detachdomeventhandlers=tabstractcontrol_detachdomeventhandlers;
  p.attacheventhandlers=tabstractcontrol_attacheventhandlers;
  p.setowner=tabstractcontrol_setowner;
  p.handlecreated=tabstractcontrol_handlecreated;
  p.create0=tabstractcontrol_create0;
  p.destroy=tabstractcontrol_destroy;
  p.deactivate=tabstractcontrol_deactivate;
  p.activate=tabstractcontrol_activate;
  p.childcount=tabstractcontrol_childcount;
  p.addcontrol=tabstractcontrol_addcontrol;
  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.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.fownerform=null;
  p.fproxycaller=null;
  p.name=null;
  p.owner=null;
  p.childctrls=null;
  p.bandindex=null;
  p.domhandlearray=null;
  p.fasthandles=null;
  p.themedprops=null;
  p.attrs=Init_data(true);
  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.handletimerevent=timer_handletimerevent;
  p.suspend=timer_suspend;
  p.resume=timer_resume;
  p.setowner=timer_setowner;
  p.create0=timer_create0;
  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=null;
  p.timerid=null;
  p.interval=null;
  p.ontimer=_IMthod(false);
  p.callcount=null;
  p.suspended=null;
  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.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.preloadimagesforie6=tcontrolstyles_preloadimagesforie6;
  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.destroy=tcontrolstyles_destroy;
  p.initstyles=tcontrolstyles_initstyles;
  p.initsystemstyles=tcontrolstyles_initsystemstyles;
  p.applystyle=tcontrolstyles_applystyle;
  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=null;
  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.placementrequired=twebcontrol_placementrequired;
  p.getproperty_serverdisabled=twebcontrol_getproperty_serverdisabled;
  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_fontcolor=twebcontrol_getproperty_fontcolor;
  p.setproperty_fontcolor=twebcontrol_setproperty_fontcolor;
  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_canshoweffect=twebcontrol_getproperty_canshoweffect;
  p.getproperty_isfocused=twebcontrol_getproperty_isfocused;
  p.getproperty_canfocus=twebcontrol_getproperty_canfocus;
  p.getproperty_inputhandlearray=twebcontrol_getproperty_inputhandlearray;
  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.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.istabsheet=twebcontrol_istabsheet;
  p.islistcontrol=twebcontrol_islistcontrol;
  p.isinactivetabsheet=twebcontrol_isinactivetabsheet;
  p.ispanel=twebcontrol_ispanel;
  p.hastextcaption=twebcontrol_hastextcaption;
  p.highlight=twebcontrol_highlight;
  p.applydeltay_tosiblings=twebcontrol_applydeltay_tosiblings;
  p.setupcontrolsoverflowproperty=twebcontrol_setupcontrolsoverflowproperty;
  p.createcontrolstyle=twebcontrol_createcontrolstyle;
  p.allowcontrolstyles=twebcontrol_allowcontrolstyles;
  p.getstylestring=twebcontrol_getstylestring;
  p.setdisplaynone=twebcontrol_setdisplaynone;
  p.isinplace=twebcontrol_isinplace;
  p.handleeffect=twebcontrol_handleeffect;
  p.attachdomeventhandlers=twebcontrol_attachdomeventhandlers;
  p.attacheffecteventhandlers=twebcontrol_attacheffecteventhandlers;
  p.recalculateplacement=twebcontrol_recalculateplacement;
  p.dorecalculateplacement=twebcontrol_dorecalculateplacement;
  p.dogroworshrink=twebcontrol_dogroworshrink;
  p.updatecontrolstate=twebcontrol_updatecontrolstate;
  p.updatecurrentstyle=twebcontrol_updatecurrentstyle;
  p.initcurrentstyle=twebcontrol_initcurrentstyle;
  p.disabledomhandles=twebcontrol_disabledomhandles;
  p.getbackgroundstylestring=twebcontrol_getbackgroundstylestring;
  p.initparts=twebcontrol_initparts;
  p.create2=twebcontrol_create2;
  p.create0=twebcontrol_create0;
  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.isrelationshipfield=twebcontrol_isrelationshipfield;
  p.fieldkind=twebcontrol_fieldkind;
  p.focus=twebcontrol_focus;
  p.absleft=twebcontrol_absleft;
  p.abstop=twebcontrol_abstop;
  p.contentheight=twebcontrol_contentheight;
  p.getpart=twebcontrol_getpart;
  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.fshowhaseffect=null;
  p.onbeforegroworshrink=_IMthod(false);
  p.onaftergroworshrink=_IMthod(false);
  p.onbeforepushedorpulled=_IMthod(false);
  p.onafterpushedorpulled=_IMthod(false);
  p.onhyperlinkclick=_IMthod(false);
  p.internalgrowshrinkoverride=null;
  p.controlstyle=null;
  p.backgroundhandlearray=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.savestate=twebpopupcontrol_savestate;
  p.restorestate=twebpopupcontrol_restorestate;
  p.create0=twebpopupcontrol_create0;
  p.deactivate=twebpopupcontrol_deactivate;
  p.createdomobject=twebpopupcontrol_createdomobject;
  p.run=twebpopupcontrol_run;
  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.fcloseonleave=null;
  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.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.isdetailsform=tabstractform_isdetailsform;
  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.attachdomeventhandlers=tabstractform_attachdomeventhandlers;
  p.setupdomeventhandlers=tabstractform_setupdomeventhandlers;
  p.setupcontrolhandles=tabstractform_setupcontrolhandles;
  p.setupcontrolevents=tabstractform_setupcontrolevents;
  p.evaluatesubformparameters=tabstractform_evaluatesubformparameters;
  p.setupformfromdfm=tabstractform_setupformfromdfm;
  p.createformcontrols=tabstractform_createformcontrols;
  p.activecontrol=tabstractform_activecontrol;
  p.reopenallembeddedsubforms=tabstractform_reopenallembeddedsubforms;
  p.reopenwithparameters=tabstractform_reopenwithparameters;
  p.isfloating=tabstractform_isfloating;
  p.openform=tabstractform_openform;
  p.openpage=tabstractform_openpage;
  p.openwindow=tabstractform_openwindow;
  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.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.getproperty_instancename=tabstractform_getproperty_instancename;
  p.getproperty_viewmode=tabstractform_getproperty_viewmode;
  p.setproperty_viewmode=tabstractform_setproperty_viewmode;
  p.getproperty_columncount=tabstractform_getproperty_columncount;
  p.dohandleclick=tabstractform_dohandleclick;
  p.dohandlekeydown=tabstractform_dohandlekeydown;
  p.dohandlemousemove=tabstractform_dohandlemousemove;
  p.domhandle=tabstractform_domhandle;
  p.domstyle=tabstractform_domstyle;
  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=null;
  p.modulename=null;
  p.winwidth=null;
  p.winheight=null;
  p.navigationctrls=null;
  p.recordnumedit=null;
  p.openparameters=null;
  p.originalparameters=null;
  p.returnedparameters=null;
  p.currentparameters=null;
  p.popup=null;
  p.ownersubform=null;
  p.encryptdata=null;
  p.autoscroll=null;
  p.infilterdefine=null;
  p.documentheader=Init_data(true);
  p.detail=Init_data(true);
  p.documentfooter=Init_data(true);
  p.ownersubformdomhandle=null;
  p.formopener=null;
  p.clearhtmlonclose=null;
  p.neveractivated=null;
  p.browserhistory=null;
  p.generatedatruntime=null;
  p.ownerthreadid=null;
  p.styledata=null;
  p.waitforchildforms=null;
  p.timers=null;
  p.fboundcontrols=null;
  p.fcurrentrecordindex=null;
  p.finstancename=null;
  p.fformreadystate=null;
  p.templookuphandles=null;
  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_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_currentform=tabstractwindow_getproperty_currentform;
  p.getproperty_content=tabstractwindow_getproperty_content;
  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.closequery=tabstractwindow_closequery;
  p.create0=tabstractwindow_create0;
  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;
  p.fstylename=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.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=null;
  p.forminstancename=null;
  p.targetformname=null;
  p.targetsubformname=null;
  p.params=null;
  p.location=null;
  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.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=null;
  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=null;
  p.id=null;
  return p
}

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.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.showpopup=txapp_showpopup;
  p.openpage=txapp_openpage;
  p.openform=txapp_openform;
  p.opendataform=txapp_opendataform;
  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.handleformopenerror=txapp_handleformopenerror;
  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=null;
  p.runningmodules=null;
  p.onbeginload=null;
  p.onendload=null;
  p.loadcounter=null;
  p.rootsubform=null;
  p.states=null;
  p.iebackforwardiframe=null;
  p.automaticstatetracking=null;
  p.startupfinalized=null;
  p.statereconstructor=null;
  p.statedetectorenabled=null;
  p.statedetectorexpectedstate=null;
  p.initialstate=null;
  p.releasememoryonclose=null;
  p.floatingwindows=null;
  p.growshrinkqueue=null;
  p.originaldomain=null;
  p.allowdomainswitching=null;
  p.waitforchildforms=null;
  p.frootdomain=null;
  p.resizetimer=null;
  p.lastviewwidth=null;
  p.lastviewheight=null;
  p.fopenformbatchid=null;
  p.factivepopups=null;
  return p
}

var xapp,createmoduleformfunction=null,gv_topzindex=Init_data(true);gv_topzindex.v=6000000;
var gvautoidcounter=1,gv_ModuleOnLoad=null,fregisteredtimers=null,lasttimername=0;
var cpagenameparam;cpagenameparam="PageName";
var copenformbatchidparam;copenformbatchidparam="BatchID";
var cviewmodeparam;cviewmodeparam="ViewMode";
var callbordersides;callbordersides=_ISet(false,4,0,1,2,3);
var cthemeprefix;cthemeprefix="`";
function topx(value){

  return inttostr(value) + "px";
}

function frompx(value){

  value=Init_data(true,value);
  var p;
  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){

  while(childhandle != null){
    if(childhandle == parenthandle){
      return true;
    }
    childhandle=childhandle.parentNode;
  }
  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;
  while(theme_isthemedvalue(result)){
    result=theme_getthemedvalue(result);
  }
  return result;
}

function resolvethemedcolorvalue(value,def){
  var result;
  result=strtointdef(resolvethemedvalue(value),cnocolorspecified);
  if(result == cnocolorspecified){
    return def;
  }
  return result;
}

function composeimageurl(image){

  return (isScriptorApp)?"Images/System/" + image:gvBaseURL + image;
}

function isexternalurl(s){

  var us;
  us=__string_toupper(s);
  return __string_startswith(us,"HTTP://") || __string_startswith(us,"HTTPS://") || __string_startswith(us,"FTP://");
}

function composeresourceurl(resid){

  if(isexternalurl(resid)){
    return resid;
  }else 
  return (isScriptorApp)?"Images/System/" + resid:gvBaseURL + resid + "?cls=res&xid=" + xappguid;
}

function preloadimage(handle,src,data,onload,onerror){  var img;
  function LoadImage(Img,Data,OnLoad,OnError){    
            Img.userData = Data;
            Img.onload = function()
            {
                if (OnLoad != null)
                    OnLoad(Data);
                Img.onload = null;
                Img.oneror = null;
                Img.parentNode.removeChild(Img);
            };
            Img.onerror = function()
            {
                if (OnError != null)
                    OnError(Data);
                Img.onload = null;
                Img.oneror = 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;
  window=Create_popupwindow().create2(xapp.mainform);
  window.fformname=formname;
  window.fparameters=parameters;
  window.run();
  return window;
}

function setfontstyle(style,fst){  fst=Init_tfontstyles(false,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){  bordersides=Init_thtmlbordersides(false,bordersides);
  var lighter,darker,cl,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){
  var self=this;
  tobject.prototype.create.call(self);
  self.name=aname;
  self.func=afunc;
  return self;
}

function tdomhandlearray_create(){
  var self=this;
  tobject.prototype.create.call(self);
  self.handles=Create_TArray();
  self.fattachedeventhandlers=Create_TArray();
  self.fdynamicallycreated=false;
  return self;
}

function tdomhandlearray_destroy(){
  var self=this;
  self.cleanup();
  self.handles.length=0;
  self.handles=null;
  self.fattachedeventhandlers.length=0;
  self.fattachedeventhandlers=null;
  tobject.prototype.destroy.call(self);
}

function tdomhandlearray_detacheventhandlers(){
  var self=this;
  var i,eventhandler;
  for(i=0;i<=self.fattachedeventhandlers.length - 1;i++){
    eventhandler=self.fattachedeventhandlers[i];
    self.detacheventhandler(eventhandler.name,eventhandler.func);
    eventhandler.free();
    eventhandler=null;
  }
  self.fattachedeventhandlers.length=0;
}

function tdomhandlearray_cleanup(){
  var self=this;
  var h,i;
  for(i=self.handles.length - 1;i>=0;i--){
    h=self.handles[i];
    if(assigned(h)){
      if(assigned(h.wrapper)){
        h.wrapper=null;
      }
      if(assigned(h.props)){
        h.props.length=0;
        h.props=null;
      }
    }
  }
  self.detacheventhandlers();
}

function tdomhandlearray_getproperty_propvalue(binx,propname){
  var self=this;

  var h;
  h=self.getproperty_handle(binx);
  return ((h != null) && assigned(h.props))?h.props[propname]:null;
}

function tdomhandlearray_setproperty_propvalue(binx,propname,value){
  var self=this;
  var h;
  h=self.getproperty_handle(binx);
  if(h != null){
    if(!assigned(h.props)){
      h.props=Create_TArray();
    }
    h.props[propname]=value;
  }
}

function tdomhandlearray_add(h){
  var self=this;
  self.handles.push(h);
}

function tdomhandlearray_setup(id,aform){
  var self=this;
  var h,i,doc,s,sid,dyn;
  self.handles.length=0;
  if(id == ""){
    return;
  }
  doc=window.document;
  s=(aform != null)?aform.getproperty_instancename() + "_" + id:id;
  i=1;
  dyn=self.fdynamicallycreated || (aform == null) || !assigned(aform.templookuphandles);
  do{
    sid=(i == 1)?s:s + "_" + inttostr(i);
    h=(dyn)?doc.getElementById(sid):aform.templookuphandles[sid];
    if(h != null){
      h.bandindex=i - 1;
      if(dyn){
        h.id="x" + h.id;
      }
      self.handles.push(h);
      i++;
    }
  }while(!(h == null));
}

function tdomhandlearray_attacheventhandler(eventname,eventhandler){
  var self=this;
  var i;
  for(i=self.handles.length - 1;i>=0;i--){
    xb_attacheventhandler(self.handles[i],eventname,eventhandler);
    self.fattachedeventhandlers.push(Create_tattachedeventhandler().create(eventname,eventhandler));
  }
}

function tdomhandlearray_detacheventhandler(eventname,eventhandler){
  var self=this;
  var i;
  for(i=self.handles.length - 1;i>=0;i--){
    xb_detacheventhandler(self.handles[i],eventname,eventhandler);
  }
}

function tdomhandlearray_appendwrapperproperty(propvalue){
  var self=this;
  var h,i;
  for(i=self.handles.length - 1;i>=0;i--){
    h=self.handles[i];
    h.wrapper=propvalue;
  }
}

function tdomhandlearray_getproperty_count(){
  var self=this;

  return self.handles.length;
}

function tdomhandlearray_setproperty_count(k){
  var self=this;
  self.handles.length=k;
}

function tdomhandlearray_getproperty_handle(binx){
  var self=this;
  var result;
  result=null;
  if(self.handles.length == 0){
    return result;
  }
  if(binx < 0){
    binx=0;
  }
  if((binx >= 0) && (binx < self.handles.length)){
    return self.handles[binx];
  }
  return result;
}

function tdomhandlearray_destroydomhandles(){
  var self=this;
  var domnode,i;
  for(i=0;i<=self.handles.length - 1;i++){
    domnode=self.handles[i];
    if(domnode.parentNode != null){
      domnode.parentNode.removeChild(domnode);
    }
  }
}

function tdomhandlearray_attacheffectseventhandler(eventhandler){
  var self=this;
  self.attacheventhandler("click",eventhandler);
  self.attacheventhandler("mouseover",eventhandler);
  self.attacheventhandler("mousedown",eventhandler);
  self.attacheventhandler("mouseup",eventhandler);
  self.attacheventhandler("mouseout",eventhandler);
  self.attacheventhandler("focus",eventhandler);
  self.attacheventhandler("blur",eventhandler);
}

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;
  _SSet(callbordersides,self.bordersides);
  self.alignment=0;
  self.visibility="visible";
  self.cursor="default";
  self.zindex=gv_topzindex.v;
  gv_topzindex.v++;
  self.disablevalue="";
  self.font.name="MS Sans Serif";
  self.font.height=8;
  self.font.color=cnocolorspecified;
  _SSet(_ISet(false,0),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=Create_TArray();
  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;
  _SSet(attrs.bordersides,self.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;
  _SSet(attrs.font.style,self.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;
  handler=self.getcreationattrseventhandler(name);
  return (handler != null)?handler.func:null;
}

function tcreationattrs_getcreationattrseventhandler(name){
  var self=this;
  var result;
  var i;
  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;
  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_setowner(aowner){
  var self=this;
  self.owner=aowner;
  self.owner.addcontrol(self);
}

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.fasthandles=self.domhandlearray.handles;
  self.bandindex=-1;
  self.themedprops=Create_TArray();
  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;
  self.domhandlearray.free();
  self.domhandlearray=null;
  self.fasthandles=null;
  if(self.owner != null){
    if(self.owner.childcount() > 0){
      self.owner.childctrls.remove(self);
    }
  }
  if(self.childctrls != null){
    while(self.childctrls.fcount > 0){
      self.childctrls.get(0).free();
    }
    self.childctrls.free();
    self.childctrls=null;
  }
  self.owner=null;
  self.fownerform=null;
  self.attrs.v.free();
  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_childcount(){
  var self=this;
  var result;
  result=0;
  if(self.childctrls != null){
    return self.childctrls.fcount;
  }
  return result;
}

function tabstractcontrol_addcontrol(ctrl){
  var self=this;
  if(self.childctrls == null){
    self.childctrls=CreateList(null,null,Create_tabstractcontrol,tobject_create);
  }
  self.childctrls.add(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;
  bsides=Init_thtmlbordersides(false,bsides);
  fs=Init_tfontstyles(false,fs);
  var themevalue;
  with(self.attrs.v){
    text=c;
    left=l;
    top=t;
    width=w;
    height=h;
    borderstyle=bs;
    bordercolor=bc;
    borderwidth=bw;
    _SSet(bsides,bordersides);
    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;
    _SSet(fs,font.style);
    transparent=atransparent;
    taborder=ataborder;
    datafield=adatafield;
    datatype=adatatype;
    horizontalplacement=ahorizontalplacement;
    verticalplacement=averticalplacement;
    opacity=aopacity;
    controlid=acontrolid;
  }
}

function tabstractcontrol_attacheventhandlers(handlearray){
  var self=this;
  var i,handler,callerobj;
  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));
  }
}

function tabstractcontrol_attachdomeventhandlers(){
  var self=this;
  self.attacheventhandlers(self.domhandlearray);
}

function tabstractcontrol_detachdomeventhandlers(){
  var self=this;
  self.domhandlearray.detacheventhandlers();
}

function tabstractcontrol_setupdomeventhandlers(){
  var self=this;
  if(self.domhandlecreated()){
    self.attachdomeventhandlers();
  }
}

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.fasthandles.length > 0);
}

function tabstractcontrol_domhandle(){
  var self=this;

  return (self.bandindex <= 0)?self.fasthandles[0]:self.fasthandles[self.bandindex];
}

function tabstractcontrol_domstyle(){
  var self=this;

  return (self.bandindex <= 0)?self.fasthandles[0].style:self.fasthandles[self.bandindex].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_calldomeventhandler(eh,event){
  var self=this;
  if(eh == null){
    return;
  }
  self.fproxycaller=eh;
  self.fproxycaller(event);
}

function tabstractcontrol_handlecreated(){

}

function tabstractcontrol_setupdomhandle(){
  var self=this;
  if(self.domhandlecreated()){
    return;
  }
  if(self.name == ""){
    return;
  }
  self.domhandlearray.setup(self.name,self.getproperty_ownerform());
  self.domhandlearray.appendwrapperproperty(self);
}

function tcontrolstyles_create(aowner){
  var self=this;
  tobject.prototype.create.call(self);
  self.items=Create_TArray();
  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_applycontrolstyle(style,handle){

  var domstyle;
  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;
  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,offsetx,offsety;
  function updatecssstyle(handle){    var background;
    if(catalog().isie6 && image.ispngimage()){
      if(image.imageloaded){
        handle.style.filter=image.getproperty_filter();
      }
    }else {
      background=image.getproperty_style();
      handle.style.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){

  if(style.color != cnocolorspecified){
    handle.style.backgroundColor=colortohtmlhex(style.color);
  }
}

function tcontrolstyles_applybackgroundstyle(style,handle,updatesize){
  var self=this;
  self.applybackgroundimage(style,style.getproperty_image(),handle,updatesize);
}

function tcontrolstyles_updatebackgroundsize(){


  return true;
}

function tcontrolstyles_isresizeable(style){
  var self=this;

  return (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;
  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;
  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);
}

function tcontrolstyles_initstyles(){
  var self=this;
  var form;
  form=self.owner.getproperty_ownerform();
  if(form != null){
    controlstyles_getcontrolstyles(form.styledata,self.owner.name,currenttheme,self.items);
  }
}

function tcontrolstyles_isactivebackground(style,background){


  return style.getproperty_image() == background;
}

function tcontrolstyles_handlebackgroundonload(background){
  var self=this;
  var handle,i,style;
  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.fasthandles.length - 1;i++){
      handle=self.getbackgroundhandle(i);
      if(handle != null){
        self.applybackgroundstyle(style,handle,false);
      }
    }
  }
}

function tcontrolstyles_preloadimagesforie6(){
  var self=this;
  self.preloadimages(self.getbackgroundhandle(self.owner.bandindex));
}

function tcontrolstyles_preloadimages(handle){
  var self=this;
  var style,i,onload,astyle;
  function processstyle(handle,style,onload){    var i,background,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<=__tarray_count(self.items) - 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){
  var self=this;

  return ((self.owner != null) && (self.owner.backgroundhandlearray != null))?self.owner.backgroundhandlearray.getproperty_handle(abandindex):null;
}

function tcontrolstyles_getinnerhandle(abandindex){
  var self=this;

  return self.getcontrolhandle(abandindex);
}

function tcontrolstyles_getcontrolhandle(abandindex){
  var self=this;

  if(self.owner != null){
    return (abandindex < 0)?self.owner.domhandle():self.owner.fasthandles[abandindex];
  }else 
    return null;
}

function tcontrolstyles_getproperty_activestyle(){
  var self=this;

  return self.owner.domhandlearray.getproperty_propvalue(self.owner.bandindex,"ActiveStyle");
}

function tcontrolstyles_setproperty_activestyle(value){
  var self=this;
  self.owner.domhandlearray.setproperty_propvalue(self.owner.bandindex,"ActiveStyle",value);
}

function tcontrolstyles_getproperty_hasbackground(){
  var self=this;

  var i,images;
  for(i=0;i<=__tarray_count(self.items) - 1;i++){
    images=self.items[i].images;
    if(images.length > 0){
      return true;
    }
  }
  return false;
}

function tcontrolstyles_getproperty_currentstyle(){
  var self=this;
  var result;
  result=self.getproperty_activestyle();
  if(result == null){
    return self.getproperty_controlstyle("");
  }
  return result;
}

function tcontrolstyles_getproperty_controlstyle(state){
  var self=this;
  var result;
  var i;
  for(i=0;i<=__tarray_count(self.items) - 1;i++){
    result=self.items[i];
    if(stringsequal(result.state,state)){
      return result;
    }
  }
  return null;
}

function tcontrolstyles_getstylename(abandindex){
  var self=this;
  var result;
  var style,props;
  function trystyle(condition,stylename){
    var result;
    result=condition && (self.getproperty_controlstyle(stylename) != null);
    if(result){
      style=stylename;
    }
    return result;
  }
  function isdisabled(){

    var h;
    h=(self.owner.getproperty_inputhandlearray() != null)?self.owner.getproperty_inputhandlearray().getproperty_handle(abandindex):null;
    if((h == null) && self.owner.domhandlecreated()){
      h=self.owner.domhandlearray.getproperty_handle(abandindex);
    }
    return (h != null)?h.disabled:!self.owner.getproperty_enabled();
  }
  result="";
  if(isdisabled() && trystyle(true,"disabled")){
    return style;
  }
  props=self.owner.domhandlearray.getproperty_handle(abandindex).props;
  if((props != null) && (trystyle(props["MouseDown"],"mousedown") || trystyle(props["Focused"],"focused") || trystyle(props["MouseOver"],"mouseover"))){
    return style;
  }
  return result;
}

function tcontrolstyles_boundschanged(){

}

function tcontrolstyles_getcurrentstyle(abandindex){
  var self=this;
  var result;
  result=self.getproperty_controlstyle(self.getstylename(abandindex));
  if(result == null){
    return self.getproperty_controlstyle("");
  }
  return result;
}

function tcontrolstyles_updatecurrentstyle(abandindex,forceupdate){
  var self=this;
  var style;
  style=self.getcurrentstyle(abandindex);
  if(forceupdate || (self.getproperty_activestyle() != style)){
    self.applystyle(abandindex,style);
  }
}

function tcontrolstyles_applystyle(abandindex,style){
  var self=this;
  var handle,needcolor;
  if(style == null){
    return;
  }
  self.owner.domhandlearray.setproperty_propvalue(abandindex,"ActiveStyle",style);
  handle=self.getbackgroundhandle(abandindex);
  needcolor=handle == null;
  if(handle != null){
    self.applybackgroundstyle(style,handle,self.updatebackgroundsize());
  }
  handle=self.getcontrolhandle(abandindex);
  if(handle != null){
    if(needcolor){
      self.applycolorstyle(style,handle);
    }
    self.applyborderstyle(style,handle);
    handle.style.cursor=style.cursor;
  }
  handle=self.getinnerhandle(abandindex);
  if(handle != null){
    self.applycontrolstyle(style,handle);
  }
}

function tresizeablecontrolstyles_updatebackgroundsize(){
  var self=this;

  var style;
  style=self.getproperty_controlstyle("");
  return (style == null) || !self.isresizeable(style);
}

function tresizeablecontrolstyles_findslice(nodelist,slicename){

  var result;
  var i,h;
  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,image,slice,i,images;
  if(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,handle;
  function updateheight(handle,recursive){    var nodelist,i;
    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);
      if(handle != null){
        updateheight(handle,true);
      }
    }
  }
}

function tresizeablecontrolstyles_getbackgroundinnerhtml(style){
  var self=this;
  var result;
  var slice,left,right,top,bottom;
  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,slice2,size1;
    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.owner.getproperty_cangrow() == 0) || style.getproperty_resizeable())){
    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;
  style=self.getproperty_controlstyle("");
  return ((style != null) && ((self.owner.getproperty_cangrow() == 0) || style.getproperty_resizeable()))?'<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.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();
  if(self.backgroundhandlearray != null){
    self.backgroundhandlearray.destroydomhandles();
  }
  self.free();
}

function twebcontrol_destroy(){
  var self=this;
  self.controlstyle.free();
  self.controlstyle=null;
  if(self.backgroundhandlearray != null){
    self.backgroundhandlearray.free();
    self.backgroundhandlearray=null;
  }
  tabstractcontrol.prototype.destroy.call(self);
}

function twebcontrol_initcurrentstyle(){
  var self=this;
  self.updatecurrentstyle(self.bandindex,false);
}

function twebcontrol_initparts(){

}

function twebcontrol_initcontrolstyles(){
  var self=this;
  if(catalog().isie6){
    self.controlstyle.preloadimagesforie6();
  }
  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;
  htmlstyler=Create_thtmlstyler().create();
  __thtmlstyler_settoattrs(htmlstyler,self.attrs);
  result="position:absolute;" + htmlstyler.content;
  htmlstyler.free();
  return result;
}

function twebcontrol_getctrlhtmlid(){
  var self=this;
  var result;
  result=(self.getproperty_ownerform() != null)?self.getproperty_ownerform().getproperty_instancename() + "_" + self.name:self.name;
  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.name + s + "_" + inttostr(self.bandindex + 1):self.getproperty_ownerform().getproperty_instancename() + "_" + self.name + 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(){
  var self=this;
  var style;
  style=self.domstyle();
  if(style != null){
    style.opacity=floattostr(self.attrs.v.opacity / 100);
    style.MozOpacity=floattostr(self.attrs.v.opacity / 100);
    if(bRoWsEr.engineid == "MS"){
      style.filter="alpha(opacity=" + inttostr(self.attrs.v.opacity) + ")";
    }
  }
}

function twebcontrol_attachdomeventhandlers(){
  var self=this;
  function needcontrolstyles(){

    var style;
    if(__tarray_count(self.controlstyle.items) > 1){
      return true;
    }else 
    if(__tarray_count(self.controlstyle.items) == 1){
      style=self.controlstyle.items[0];
      return style.state != "";
    }else 
      return false;
  }
  tabstractcontrol.prototype.attachdomeventhandlers.call(self);
  if(needcontrolstyles()){
    self.attacheffecteventhandlers();
  }
}

function twebcontrol_disabledomhandles(forceupdate){
  var self=this;
  var i,h;
  if(self.getproperty_inputhandlearray() != null){
    for(i=0;i<=self.getproperty_inputhandlearray().handles.length - 1;i++){
      h=self.getproperty_inputhandlearray().handles[i];
      h.disabled=true;
      self.updatecurrentstyle(i,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.controlstyle.getproperty_hasbackground()){
    if(self.backgroundhandlearray == null){
      self.backgroundhandlearray=Create_tdomhandlearray().create();
    }
    self.backgroundhandlearray.setup(self.name + "Background",self.getproperty_ownerform());
    self.backgroundhandlearray.appendwrapperproperty(self);
  }
  if(self.attrs.v.opacity != 100){
    self.setopacity();
  }
  self.initcontrolstyles();
  if(self.attrs.v.disablevalue != "disabled"){
    self.setupdomeventhandlers();
  }else {
    self.disabledomhandles(true);
    self.setproperty_enabled(false);
  }
}

function twebcontrol_createdomobject(){
  var self=this;
  var i,k;
  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.fasthandles.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.domhandlearray.fdynamicallycreated=true;
  self.setupdomhandle();
}

function getarrayitem(anarray,name){

  var value;
  value=anarray[name];
  return (assigned(value))?value:"";
}

function twebcontrol_attacheffecteventhandlers(){
  var self=this;
  self.domhandlearray.attacheffectseventhandler(getMethodPointer(self,self.dohandleeffect));
}

function twebcontrol_allowcontrolstyles(){


  return true;
}

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;
  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.backgroundhandlearray != null)?self.backgroundhandlearray.getproperty_handle(self.bandindex):null;
}

function twebcontrol_updatecurrentstyle(abandindex,forceupdate){
  var self=this;
  if(!(self.allowcontrolstyles() && self.domhandlecreated())){
    return;
  }
  self.controlstyle.updatecurrentstyle(abandindex,forceupdate);
}

function twebcontrol_updatecontrolstate(effectkind,abandindex){
  var self=this;
  var h;
  h=self.domhandlearray;
  if(h.getproperty_count() == 0){
    return;
  }
  if(effectkind == "focus"){
    h.setproperty_propvalue(abandindex,"Focused",true);
  }else 
  if(effectkind == "blur"){
    h.setproperty_propvalue(abandindex,"Focused",false);
  }else 
  if(effectkind == "mouseover"){
    h.setproperty_propvalue(abandindex,"MouseOver",true);
  }else 
  if(effectkind == "mouseout"){
    h.setproperty_propvalue(abandindex,"MouseOver",false);
    h.setproperty_propvalue(abandindex,"MouseDown",false);
  }else 
  if(effectkind == "mousedown"){
    h.setproperty_propvalue(abandindex,"MouseDown",true);
  }else 
  if((effectkind == "mouseup") || (effectkind == "mouse")){
    h.setproperty_propvalue(abandindex,"MouseDown",false);
  }
}

function twebcontrol_handleeffect(typ,abandindex){
  var self=this;
  var style;
  style=self.controlstyle.getcurrentstyle(abandindex);
  self.updatecontrolstate(typ,abandindex);
  if(style != self.controlstyle.getcurrentstyle(abandindex)){
    self.updatecurrentstyle(abandindex,true);
  }
}

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_canshoweffect(){
  var self=this;

  return self.getproperty_enabled() && self.fshowhaseffect;
}

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.getproperty_inputhandlearray() != null)?self.getproperty_inputhandlearray().getproperty_handle(self.bandindex):null;
}

function twebcontrol_getproperty_inputhandlearray(){


  return null;
}

function twebcontrol_getproperty_isfocused(){
  var self=this;

  return self.domhandlearray.getproperty_propvalue(self.bandindex,"Focused");
}

function twebcontrol_setproperty_isfocused(value){
  var self=this;
  self.domhandlearray.setproperty_propvalue(self.bandindex,"Focused",value);
}

function twebcontrol_serialize(serializer){

}

function twebcontrol_deserialize(serializer){

}

function twebcontrol_isrelationshipfield(){
  var self=this;
  var result;
  var itemdata,fielddata;
  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;
  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_islistcontrol(){


  return false;
}

function twebcontrol_istabsheet(){


  return false;
}

function twebcontrol_ispanel(){


  return false;
}

function twebcontrol_hastextcaption(){


  return false;
}

function twebcontrol_highlight(ahighlight){

}

function twebcontrol_applydeltay_tosiblings(actrl,threshold,deltay){

}

function twebcontrol_setupcontrolsoverflowproperty(){

}

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_serverdisabled(){
  var self=this;

  var s;
  s=(self.domhandlecreated())?self.domhandle().getAttribute("serverdisabled",false):"";
  return (s != null) && (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.attachdomeventhandlers();
    }else 
      self.detachdomeventhandlers();
    self.updatecurrentstyle(self.bandindex,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_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,activeform,i,k;
  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){
        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.get(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,i,k,activeform;
  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.get(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;

  return (self.domhandlecreated())?self.domstyle().visibility != "hidden":self.attrs.v.visibility != "hidden";
}

function twebcontrol_setproperty_visible(b){
  var self=this;
  if(self.domhandlecreated()){
    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;
  var c;
  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=Init_thtmlbordersides(false);
  if(self.domhandlecreated()){
    if(self.domstyle().border != ""){
      _SSet(callbordersides,result);
    }else {
      _SSet(_ISet(false,0),result);
      if(self.domstyle().borderLeft != ""){
        _SSet(_UnionSet(result,_ISet(false,4,0)),result);
      }
      if(self.domstyle().borderTop != ""){
        _SSet(_UnionSet(result,_ISet(false,4,1)),result);
      }
      if(self.domstyle().borderRight != ""){
        _SSet(_UnionSet(result,_ISet(false,4,2)),result);
      }
      if(self.domstyle().borderBottom != ""){
        _SSet(_UnionSet(result,_ISet(false,4,3)),result);
      }
    }
    if((self.domstyle().border == "") && (_EquSet(result,_ISet(false,0)))){
      _SSet(self.attrs.v.bordersides,result);
    }
  }else 
    _SSet(self.attrs.v.bordersides,result);
  return result;
}

function twebcontrol_setproperty_bordersides(bs){
  var self=this;
  bs=Init_thtmlbordersides(false,bs);
  if(self.domhandlecreated()){
    setborder(self.domstyle(),self.getproperty_borderstyle(),bs,self.getproperty_bordercolor(),self.getproperty_borderwidth());
  }else 
    _SSet(bs,self.attrs.v.bordersides);
}

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_getproperty_fontcolor(){
  var self=this;

  return (self.domhandlecreated())?htmlhextocolor(self.domstyle().color):self.attrs.v.font.color;
}

function twebcontrol_setproperty_fontcolor(fc){
  var self=this;
  if(self.domhandlecreated()){
    self.domstyle().color=colortohtmlhex(fc);
  }else 
    self.attrs.v.font.color=fc;
}

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_dohandleeffect(event){
  var self=this;
  function isvalidbandindex(event){
    var result;
    var source;
    result=true;
    if(assigned(event.srcElement)){
      source=event.srcElement.wrapper;
      while(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)){
      self.handleeffect(event.type,geteventbandindex(event,self.bandindex));
    }else 
      self.handleeffect(event.type,self.bandindex);
  }
}

function twebcontrol_placementrequired(hori,vert){
  var self=this;

  var c;
  c=self;
  if(_IS(c,band)){
    c=self.owner;
  }
  return (hori && (c.getproperty_horizontalplacement() != 0)) || (vert && (c.getproperty_verticalplacement() != 0));
}

function twebcontrol_recalculateplacement(hori,vert){
  var self=this;

    self.dorecalculateplacement(hori,vert);
}

function twebcontrol_dorecalculateplacement(hori,vert){
  var self=this;
  var ownerwidth,ownerheight,originalownerwidth,originalownerheight,l,t,w,h;
  function clientheight(){
    var result;
    var header;
    result=ownerheight;
    if(self.getproperty_ownerform().documentheader.v != null){
      header=self.getproperty_ownerform().documentheader.v;
      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.v != null){
      header=self.getproperty_ownerform().documentfooter.v;
      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);
  }
  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=self.owner.attrs.v.width;
    l=self.getproperty_left();
    w=self.getproperty_width();
    switch(self.getproperty_horizontalplacement()){
      case 1:
      l=self.attrs.v.left;
      break;
      case 2:
      l=ownerwidth - (originalownerwidth - self.attrs.v.left);
      break;
      case 3:
      l=self.attrs.v.left;
      w=ownerwidth - (originalownerwidth - self.attrs.v.width);
      if(_InSet(0,self.getproperty_bordersides())){
        w-=self.getproperty_borderwidth();
      }
      if(_InSet(2,self.getproperty_bordersides())){
        w-=self.getproperty_borderwidth();
      }
      if((self.getproperty_ownerform().getproperty_columncount() > 1) && (self == self.getproperty_ownerform().detail.v)){
        w=w / self.getproperty_ownerform().getproperty_columncount();
      }
      break;
      case 4:
      l=(ownerwidth - self.attrs.v.width) / 2;
      break;
      case 5:
      if(ownerwidth > originalownerwidth){
        l=(self.attrs.v.left / originalownerwidth) * ownerwidth;
      }
    }
    if(l != self.getproperty_left()){
      self.setproperty_left(l);
    }
    if(w != self.getproperty_width()){
      self.setproperty_width(w);
    }
  }
  if(vert){
    ownerheight=self.owner.getproperty_height();
    originalownerheight=self.owner.attrs.v.height;
    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=self.attrs.v.top;
        break;
        case 2:
        t=ownerheight - (originalownerheight - self.attrs.v.top);
        break;
        case 3:
        t=self.attrs.v.top;
        h=ownerheight - (originalownerheight - self.attrs.v.height);
        if(_InSet(1,self.getproperty_bordersides())){
          h-=self.getproperty_borderwidth();
        }
        if(_InSet(3,self.getproperty_bordersides())){
          h-=self.getproperty_borderwidth();
        }
        break;
        case 4:
        t=(ownerheight - self.attrs.v.height) / 2;
        break;
        case 5:
        if(ownerheight > originalownerheight){
          t=(self.attrs.v.top / originalownerheight) * ownerheight;
        }
      }
    if(t != self.getproperty_top()){
      self.setproperty_top(t);
    }
    if(h != self.getproperty_height()){
      self.setproperty_height(h);
    }
  }
}

function twebcontrol_groworshrink(deltay,resizeownersubform){
  var self=this;

    self.dogroworshrink(deltay,resizeownersubform);
}

function limitshrinktocontentheight(ctrl,deltay){
  var result;
  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=Init_data(true,deltay);
  var threshold,savebandindex1;
  function isvalidsibling(ctrl){

    return (ctrl != self) && ((ctrl.getproperty_verticalplacement() == 0) || (ctrl.getproperty_verticalplacement() == 1));
  }
  function getdeltayforaffectedcontrols(d){
    var result;
    var originalmargin,currentmargin,i,ctrl,savebandindex,minthreshold;
    if(self.istabsheet()){
      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.get(i);
      savebandindex=ctrl.bandindex;
      ctrl.bandindex=self.bandindex;
      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;
    }
    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.get(i);
        savebandindex=ctrl.bandindex;
        ctrl.bandindex=self.bandindex;
        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;
      }
      for(i=0;i<=self.owner.childcount() - 1;i++){
        ctrl=self.owner.childctrls.get(i);
        savebandindex=ctrl.bandindex;
        ctrl.bandindex=self.bandindex;
        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;
      }
    }
    result=d;
    if(result == -1){
      return 0;
    }
    return result;
  }
  function applydeltay_tocontrol(){
    var result;
    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.istabsheet()){
      return;
    }
    self.owner.applydeltay_tosiblings(self,threshold,deltay.v);
  }
  function applydeltay_tocontrolparent(){    var d;

      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;
    self.owner.bandindex=self.bandindex;
    deltay.v=getdeltayforaffectedcontrols(deltay.v);
    if(deltay.v != 0){
      applydeltay_tocontrolsiblings();
      applydeltay_tocontrolparent();
    }
    self.owner.bandindex=savebandindex1;
  }
  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;
  var i,ctrl;
  for(i=0;i<=self.childcount() - 1;i++){
    ctrl=self.childctrls.get(i);
    if(_IS(ctrl,childclass)){
      return ctrl;
    }
    result=ctrl.getpart(childclass);
    if(result != null){
      return result;
    }
  }
  return null;
}

function twebcontrol_isinplace(){


  return false;
}

function twebcontrol_setdisplaynone(){
  var self=this;
  var i;
  if(self.domhandlecreated()){
    for(i=0;i<=__tarray_count(self.fasthandles) - 1;i++){
      self.fasthandles[i].style.display="none";
    }
  }
}

function twebpopupcontrol_create0(aid,aowner){
  var self=this;
  self.fpopupcontrol=aowner;
  twebcontrol.prototype.create0.call(self, aid,xapp.mainform);
  return self;
}

function twebpopupcontrol_deactivate(){
  var self=this;
  var parentnode,idx=Init_data(true);
  var saveindex;
  twebcontrol.prototype.deactivate.call(self);
  saveindex=self.fpopupcontrol.bandindex;
  idx.v=saveindex;
  self.restorestate(idx);
  try{
    self.fpopupcontrol.bandindex=idx.v;
    self.fpopupcontrol.deactivate();
  }finally{
    self.fpopupcontrol.bandindex=saveindex;
  }
  if(self.domhandlecreated()){
    parentnode=self.domhandle().parentNode;
    if(parentnode != null){
      parentnode.removeChild(self.domhandle());
    }
  }
}

function twebpopupcontrol_createdomobject(){
  var self=this;
  XB_insertAdjacentHTML(window.document.body,"BeforeEnd",self.getcontrolhtml());
  self.setupdomhandle();
  if(self.domhandlecreated()){
    gv_topzindex.v++;
    self.domstyle().zIndex=inttostr(gv_topzindex.v);
  }
}

function twebpopupcontrol_handleonmousemove(event){
  var self=this;
  if(self.fcloseonleave){
    xapp.deactivepopup0(event);
  }
}

function twebpopupcontrol_handleonclick(event){

  xapp.deactivepopup0(event);
}

function twebpopupcontrol_savestate(){

}

function twebpopupcontrol_restorestate(abandindex){

}

function twebpopupcontrol_reposition(aleft,atop){
  var self=this;
  var style,bw,sides=Init_thtmlbordersides(false);
  style=self.fpopupcontrol.controlstyle.getproperty_currentstyle();
  if(style != null){
    bw=style.borderwidth;
    _SSet(style.bordersides,sides);
  }else {
    bw=self.getproperty_borderwidth();
    _SSet(self.getproperty_bordersides(),sides);
  }
  if(_InSet(1,sides)){
    atop+=bw;
  }
  if(_InSet(3,sides)){
    atop+=bw;
  }
  if(_InSet(0,sides)){
    aleft+=bw;
  }
  self.setproperty_left(aleft);
  self.setproperty_top(atop);
}

function twebpopupcontrol_popupat(aleft,atop,acloseonleave){
  var self=this;
  self.fcloseonleave=acloseonleave;
  if(acloseonleave){
    self.domhandlearray.attacheventhandler("mousemove",getMethodPointer(self,self.handleonmousemove));
  }
  self.domhandlearray.attacheventhandler("click",getMethodPointer(self,self.handleonclick));
  self.reposition(aleft,atop);
  self.fpopupcontrol.activate();
  self.domstyle().display="";
}

function twebpopupcontrol_run(){
  var self=this;
  var aleft,atop,awidth,dstyle;
  aleft=self.fpopupcontrol.absleft() + self.fpopupcontrol.getproperty_width();
  awidth=0;
  dstyle=self.currentdomstyle();
  if(dstyle != null){
    awidth=frompx(dstyle.width);
  }
  if((awidth == 0) && (self.domhandle() != null)){
    dstyle=self.domhandle().currentStyle;
    if(dstyle != null){
      awidth=frompx(dstyle.width);
    }
  }
  aleft-=awidth;
  atop=self.fpopupcontrol.abstop() + self.fpopupcontrol.getproperty_height() + 1;
  xapp.showpopup(self,aleft,atop,false);
}

function tabstractform_initcompositecontrols(){
  var self=this;
  function processcontrol(parentctrl){    var i,ctrl;
    for(i=parentctrl.childcount() - 1;i>=0;i--){
      ctrl=parentctrl.childctrls.get(i);
      if(ctrl.childcount() > 0){
        ctrl.initparts();
        processcontrol(ctrl);
      }
    }
  }
  processcontrol(self);
}

function tabstractform_create1(aparameters){
  var self=this;
  aparameters=Init_data(true,aparameters);
  var i,ctrl,paramlist;
  function comparectrls(c1,c2){
    var result;
    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;
  }
  function dospatialsort(ctrl){    var i;
    if(ctrl.childcount() == 0){
      return self;
    }
    for(i=ctrl.childcount() - 1;i>=0;i--){
      dospatialsort(ctrl.childctrls.get(i));
    }
    ctrl.childctrls.sort(comparectrls);
  }
  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=Create_TArray();
  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=CreateList(null,null,Create_twebcontrol,tobject_create);
  self.recordnumedit=null;
  self.infilterdefine=false;
  self.fcurrentrecordindex=0;
  self.popup=null;
  self.fformreadystate=0;
  self.clearhtmlonclose=false;
  self.formopener=null;
  self.styledata=null;
  self.neveractivated=true;
  self.browserhistory=true;
  self.generatedatruntime=false;
  self.ownerthreadid=getcurrentthreadid();
  self.setupformfromdfm();
  paramlist=Create_tparameters().create();
  paramlist.addlist(aparameters.v);
  for(i=paramlist.items.fcount - 1;i>=0;i--){
    self.currentparameters.update(paramlist.items.get(i).name,paramlist.items.get(i).value);
  }
  paramlist.free();
  self.styledata=controlstyles_styledatabyname(self.name);
  self.createformcontrols();
  dospatialsort(self);
  for(i=self.childcount() - 1;i>=0;i--){
    ctrl=self.childctrls.get(i);
    if(_IS(ctrl,band)){
      if(_InSet(ctrl.bandtype,_ISet(false,25,0,24))){
        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,p;
  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){
    self.popup.free();
    self.popup=null;
  }
  if(self.fboundcontrols != null){
    self.fboundcontrols.free();
    self.fboundcontrols=null;
  }
  self.navigationctrls.free();
  self.originalparameters.free();
  self.originalparameters=null;
  self.currentparameters.free();
  self.currentparameters=null;
  self.returnedparameters.free();
  self.returnedparameters=null;
  twebcontrol.prototype.destroy.call(self);
}

function tabstractform_getformhtml(){


  return "";
}

function tabstractform_close(){
  var self=this;
  var i,floatsubform;
  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;
  var p1,p2,i,s=Init_data(true);
  var pl;
  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.fcount - 1;i>=0;i--){
    p1=pl.items.get(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.fcount - 1;i>=0;i--){
    p1=self.originalparameters.items.get(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)){
    pl.free();
  }
  return true;
}

function tabstractform_getparametervalue(paramname){
  var self=this;

  var param;
  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;
  fs=self.ownersubform.floatingwindow;
  if(fs != null){
    fs.setproperty_title(s);
  }
}

function tabstractform_getproperty_caption(){
  var self=this;
  var result;
  var fs;
  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,i,h;
  for(i=self.currentparameters.items.fcount - 1;i>=0;i--){
    param=self.currentparameters.items.get(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;
  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;
    var i;
    result=null;
    if(stringsequal(c.name,n)){
      return c;
    }
    for(i=c.childcount() - 1;i>=0;i--){
      result=processcontrol(c.childctrls.get(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,pagename,openformbatchid;
  function doupdate(c,pagename,openformbatchid){    var i,ctrl;
    for(i=c.childcount() - 1;i>=0;i--){
      ctrl=c.childctrls.get(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);
  paramlist.free();
  if(pagename == ""){
    return;
  }
  if(openformbatchid == ""){
    openformbatchid=xapp.getuniqueopenformbatchid();
  }
  doupdate(self,pagename,openformbatchid);
}

function tabstractform_handlehyperlinkclick(domelement,cleanurl){
  var self=this;
  var ctrl,handled=Init_data(true);
  var url=Init_data(true);
  function getassociatedhyperlinkedcontrol(h){
    var result;
    var childhandle;
    result=null;
    if(!assigned(h)){
      return result;
    }
    if(assigned(h.wrapper)){
      return h.wrapper;
    }
    childhandle=h.firstChild;
    while(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,"_Blank","");
      }else 
        self.openpage(url.v,"");
    }
  }catch(e){
  }
}

function tabstractform_setupcontrolhandles(){
  var self=this;
  var i;
  function processctrl(c){    var i;
    if(c.name.indexOf("mfk_int") != -1){
      return;
    }
    if(!c.domhandlecreated()){
      c.setupdomhandle();
    }
    for(i=c.childcount() - 1;i>=0;i--){
      processctrl(c.childctrls.get(i));
    }
    c.handlecreated();
  }
  function setuptemplookuphandles(){    function recursivelyprocessdomhandle(h){      var childhandle;
      if(assigned(h.id)){
        if(!__string_isempty(h.id)){
          self.templookuphandles[h.id]=h;
        }
      }
      childhandle=h.firstChild;
      while(assigned(childhandle)){
        recursivelyprocessdomhandle(childhandle);
        childhandle=childhandle.nextSibling;
      }
    }
    if(self.generatedatruntime){
      return;
    }
    self.templookuphandles=Create_TArray();
    recursivelyprocessdomhandle(self.domhandle());
  }
  hookupallhyperlinkevents(self.domhandle(),getMethodPointer(self,self.handlehyperlinkclick));
  setuptemplookuphandles();
  for(i=self.childcount() - 1;i>=0;i--){
    processctrl(self.childctrls.get(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 tabstractform_dohandleclick(event){

  xapp.deactivepopup0(event);
}

function tabstractform_dohandlemousemove(event){

  xapp.deactivepopup0(event);
}

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_dohandlekeydown(event){

  var keycode;
  keycode=event.keyCode;
  if(strtoint(keycode) == vk_escape){
    xapp.deactivepopup();
  }
}

function tabstractform_domhandle(){
  var self=this;

  return self.fasthandles[0];
}

function tabstractform_domstyle(){
  var self=this;

  return self.domhandle().style;
}

function tabstractform_handlemainformunload(){
  var self=this;
  if(self.ismainform() && xapp.releasememoryonclose){
    twebcontrol.prototype.free.call(self);
    if(xapp.openforms.fcount > 0){
      showmessage("Internal Error: " + inttostr(xapp.openforms.fcount) + " forms are not properly disposed.");
    }
    xapp.free();
    xapp=null;
  }
}

function tabstractform_cloneownersubformdomhandle(targetbandindex){
  var self=this;
  var result;
  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;
  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;
  for(i=0;i<=__tarray_count(self.timers) - 1;i++){
    self.timers[i].resume();
  }
}

function tabstractform_suspendalltimercontrols(){
  var self=this;
  var i;
  for(i=0;i<=__tarray_count(self.timers) - 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;

  var table,row;
  if(self.domhandlecreated()){
    table=self.domhandle();
    if((table == null) || !assigned(table.rows) || (table.rows.length == 0)){
      return 1;
    }
    row=(table.rows.length > 1)?table.rows[1]:table.rows[0];
    return row.cells.length;
  }else 
    return 0;
}

function tabstractform_isdetailsform(){
  var self=this;
  var result;
  result=false;
  if(self.isrootform()){
    return result;
  }
  if(self.ownersubform.subformattrs.masterdatafield == ""){
    return result;
  }
  if(self.ownersubform.subformattrs.childdatafield == ""){
    return result;
  }
  return true;
}

function tabstractform_setupcontrolsoverflowproperty(){
  var self=this;
  function doprocesstextlabels(ctrl){    var i;
    if(!(_IS(ctrl,twebcontrol))){
      return;
    }
    for(i=0;i<=ctrl.childcount() - 1;i++){
      doprocesstextlabels(ctrl.childctrls.get(i));
    }
    if(ctrl.getproperty_canshrink() || (ctrl.getproperty_cangrow() == 0)){
      if((_IS(ctrl,textlabel)) || (_IS(ctrl,checkbox)) || (_IS(ctrl,optionbutton))){
        with(ctrl){
          for(i=0;i<=fasthandles.length - 1;i++){
            bandindex=i;
            ctrl.setupcontrolsoverflowproperty();
            groworshrink(-1,false);
          }
        }
        ctrl.bandindex=-1;
      }
    }
  }
  function doprocesscontainers(ctrl){    var i;
    for(i=0;i<=ctrl.childcount() - 1;i++){
      doprocesscontainers(ctrl.childctrls.get(i));
    }
    if(_IS(ctrl,band)){
      return;
    }
    if(_IS(ctrl,tabcontrol)){
      return;
    }
    if(_IS(ctrl,tabsheet)){
      return;
    }
    if((_IS(ctrl,container)) && !ctrl.getproperty_visible()){
      if(ctrl.containerattrs.shrinkonhide){
        with(ctrl){
          for(i=0;i<=fasthandles.length - 1;i++){
            bandindex=i;
            groworshrink(-1,false);
          }
        }
        ctrl.bandindex=-1;
      }
    }
  }
  doprocesstextlabels(self);
  doprocesscontainers(self);
}

function tabstractform_contentheight(){
  var self=this;

  return (self.domhandlecreated())?self.domhandle().scrollHeight:0;
}

function tabstractform_contentwidth(){
  var self=this;

  return (self.domhandlecreated())?self.domhandle().scrollWidth:0;
}

function tabstractform_setupdomhandleto(h){
  var self=this;
  if(self.domhandlecreated()){
    return;
  }
  if(h == null){
    return;
  }
  self.domhandlearray.handles.push(h);
  self.domhandlearray.appendwrapperproperty(self);
  self.setupdomeventhandlers();
}

function tabstractform_attachdomeventhandlers(){
  var self=this;
  var i,handler,callerobj;
  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));
  }
  self.domhandlearray.attacheventhandler("click",getMethodPointer(self,self.dohandleclick));
  self.domhandlearray.attacheventhandler("keydown",getMethodPointer(self,self.dohandlekeydown));
  self.domhandlearray.attacheventhandler("mousemove",getMethodPointer(self,self.dohandlemousemove));
}

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));
  }
}

function tabstractform_activecontrol(){
  var self=this;
  var result;
  function getfoucscontrol(control){
    var result;
    var i,ctrl;
    if(control.getproperty_isfocused()){
      return control;
    }else {
      result=null;
      for(i=0;i<=control.childcount() - 1;i++){
        ctrl=control.childctrls.get(i);
        if(_IS(ctrl,twebcontrol)){
          result=getfoucscontrol(ctrl);
          if(result != null){
            return result;
          }
        }
      }
    }
    return result;
  }
  function getinputcontrol(control){
    var result;
    var i,ctrl;
    if(control.getproperty_canfocus()){
      return control;
    }else {
      result=null;
      for(i=0;i<=control.childcount() - 1;i++){
        ctrl=control.childctrls.get(i);
        if(_IS(ctrl,twebcontrol)){
          result=getinputcontrol(ctrl);
          if(result != null){
            return result;
          }
        }
      }
    }
    return result;
  }
  result=getfoucscontrol(self);
  if(result == null){
    return getinputcontrol(self);
  }
  return result;
}

function tabstractform_openpage(cleanurl,overrideparams){

  xapp.openpage(cleanurl,overrideparams);
}

function tabstractform_openform(formname,target,parameters){
  var self=this;
  var s1,s2,k,paramlist;
  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();
    }
    paramlist.free();
  }
  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_openwindow(formname,parameters){

  doopenwindow(formname,parameters);
}

function tabstractform_recalculateplacement(hori,vert){
  var self=this;
  var webcontrol,i,j,savebandindex;
  for(i=self.childcount() - 1;i>=0;i--){
    webcontrol=self.childctrls.get(i);
    if(_IS(webcontrol,twebcontrol)){
      savebandindex=webcontrol.bandindex;
      for(j=webcontrol.fasthandles.length - 1;j>=0;j--){
        webcontrol.bandindex=j;
        webcontrol.recalculateplacement(hori,vert);
      }
      webcontrol.bandindex=savebandindex;
    }
  }
}

function tabstractform_groworshrink(deltay,resizeownersubform){
  var self=this;
  var savebandindex,context,ctrl,i;
  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_getproperty_title(){


  return "";
}

function tabstractwindow_closequery(){
  var self=this;
  var result;
  result=true;
  if(assigned(self.fonclosequery)){
    return self.fonclosequery(self);
  }
  return result;
}

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_currentform(){


  return null;
}

function tabstractwindow_create0(aid,aowner){
  var self=this;
  twebpopupcontrol.prototype.create0.call(self, aid,aowner);
  self.fstylename="";
  return self;
}

function tabstractwindow_activate(){
  var self=this;
  self.setproperty_visible(true);
}

function tabstractwindow_close(){

}

function tabstractwindow_getproperty_content(){


  return null;
}

function tabstractwindow_getproperty_center(){


  return false;
}

function tabstractwindow_setproperty_center(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_noborder(){


  return false;
}

function tabstractwindow_setproperty_noborder(value){

}

function tstate_create(formstate){
  var self=this;
  var s,k;
  function getnextelement(){
    var result;
    var k;
    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){
    self.paramlist.free();
    self.paramlist=null;
  }
  tobject.prototype.destroy.call(self);
}

function tstate_execute(){
  var self=this;
  var frm,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;
  var frm;
  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;
  urifragment=Init_data(true,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=Create_TArray();
  self.buildlist(urifragment,"");
  self.currentstate=null;
  return self;
}

function tstatereconstructor_destroy(){
  var self=this;
  var i;
  if(self.statelist != null){
    for(i=0;i<=self.statelist.length - 1;i++){
      self.statelist[i].free();
      self.statelist[i]=null;
    }
    self.statelist=null;
  }
  tobject.prototype.destroy.call(self);
}

function tstatereconstructor_buildlist(urifragment){
  var self=this;
  var s=Init_data(true);
  var d,k,openformparams;
  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,i;
  with(xapp){
    if((self.currentstate == null) || self.currentstate.isdone()){
      nextstate=self.getnextstate();
      if(nextstate == null){
        self.free();
        xapp.statereconstructor=null;
        enablestatechangedetector();
        return;
      }else {
        if(self.currentstate != null){
          self.currentstate.free();
          self.currentstate=null;
        }
        self.currentstate=nextstate;
        i=self.statelist.indexOf(self.currentstate,0);
        if(i >= 0){
          self.statelist.remove(i,i);
        }
        self.currentstate.execute();
      }
    }
  }
  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=CreateList(null,null,Create_tabstractform,tobject_create);
    self.floatingwindows=CreateList(null,null,Create_tobject,tobject_create);
    self.waitforchildforms=false;
    self.runningmodules=createfastlist();
    self.growshrinkqueue=createfastlist();
    self.loadcounter=0;
    self.startupfinalized=false;
    self.automaticstatetracking=true;
    self.statereconstructor=null;
    self.statedetectorenabled=true;
    self.statedetectorexpectedstate="";
    self.initialstate="";
    self.states=Create_TArray();
    self.iebackforwardiframe=null;
    self.releasememoryonclose=false;
    self.resizetimer=null;
    self.lastviewwidth=-1;
    self.lastviewheight=-1;
    self.frootdomain="";
    self.allowdomainswitching=false;
    self.factivepopups=Create_TArray();
    window.onresize=getMethodPointer(self,self.dohandleresize);
  }
  return self;
}

function txapp_destroy(){
  var self=this;
  self.mainform=null;
  if(self.resizetimer != null){
    self.resizetimer.free();
    self.resizetimer=null;
  }
  self.openforms.free();
  self.openforms=null;
  self.runningmodules.clear();
  self.runningmodules=null;
  self.rootsubform.free();
  self.rootsubform=null;
  tobject.prototype.destroy.call(self);
}

function txapp_setmsiebackforwardiframe(){

  var iframe,idoc;
  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=""}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,decodedparams,ispage;
  function getpreviewparamvalue(paramsstr){
    var result;
    var paramlist;
    paramlist=Create_tparameters().create();
    paramlist.addlist(paramsstr);
    result=paramlist.getparamvalue("preview");
    paramlist.free();
    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.openpage(gvmainformid,decodedparams);
    }else 
      self.openform(gvmainformid,"",decodedparams);
  }
  statechangedetectorloop();
}

function txapp_finalizestartup(){

  var h;
  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_deactivatepopupsbyhandle(elementtokeep){
  var self=this;
  var i,popup;
  for(i=self.factivepopups.length - 1;i>=0;i--){
    popup=self.factivepopups[i];
    if((elementtokeep != null) && hasasparenthandle(elementtokeep,popup.domhandle())){
      return;
    }
    self.factivepopups.remove(i,i);
    popup.deactivate();
  }
}

function txapp_deactivatepopups(ctrltokeep){
  var self=this;
  var ctrlhandle;
  ctrlhandle=(ctrltokeep != null)?ctrltokeep.domhandle():null;
  self.deactivatepopupsbyhandle(ctrlhandle);
}

function txapp_showpopup(popupctrl,x,y,closeonleave){
  var self=this;
  popupctrl.savestate();
  self.deactivatepopups(popupctrl.fpopupcontrol);
  self.factivepopups.push(popupctrl);
  popupctrl.popupat(x,y,closeonleave);
}

function txapp_deactivepopup0(event){
  var self=this;
  var ctrl,handle,canclose;
  ctrl=self.getproperty_activepopup();
  switch(event.type){
    case "mousemove":
    canclose=(ctrl != null) && (_IS(ctrl,twebpopupcontrol)) && ctrl.fcloseonleave;
    break;
    case "click":
    canclose=ctrl != null;
    break;
  default:
    canclose=false;
  }
  if(canclose){
    handle=geteventelement(event);
    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;
  popup=self.getproperty_activepopup();
  if(popup != null){
    self.factivepopups.remove(self.factivepopups.length - 1,self.factivepopups.length - 1);
    popup.deactivate();
  }
}

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;
  for(i=self.openforms.fcount - 1;i>=0;i--){
    if(stringsequal(self.openforms.get(i).getproperty_instancename(),n)){
      return self.openforms.get(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(threadid,modulename){  var webmodule;
  setcurrentthread(threadid);
  webmodule=xapp.getproperty_module(modulename);
  if(webmodule == null){
    return;
  }
  webmodule._loaded=true;
  xapp.doendload();
  CallModuleOnLoadHandler(modulename);
}

function txapp_loadmodule(modulename,onload){
  var self=this;
  var webmodule;
  function getmoduleurl(){
    var result;
    var paramlist;
    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) + "(" + inttostr(getcurrentthreadid()) + ",'" + modulename + "')");
      result=buildurl(modulename + ".js",paramlist,"");
      paramlist.free();
    }
    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;
  var i;
  n+="_ID";
  for(i=self.runningmodules.fcount - 1;i>=0;i--){
    if(stringsequal(self.runningmodules.get(i).id,n)){
      return self.runningmodules.get(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.add(result);
  }else 
    self.runningmodules.add(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;
  var i,frm;
  result=null;
  frm=xapp.getproperty_webform(formname);
  if(frm == null){
    return result;
  }
  i=self.indexoffloatingsubform(frm.ownersubform);
  if(i >= 0){
    return self.floatingwindows.get(i);
  }
  return result;
}

function txapp_getuniqueopenformbatchid(){
  var self=this;

  self.fopenformbatchid=self.fopenformbatchid + 1;
  return __integer_tostring(self.fopenformbatchid);
}

function txapp_indexoffloatingsubform(form){
  var self=this;
  var result;
  var i;
  result=-1;
  for(i=self.floatingwindows.fcount - 1;i>=0;i--){
    if(self.floatingwindows.get(i).getproperty_content() == form){
      return i;
    }
  }
  return result;
}

function txapp_openpage(pageurl,overrideparams){
  var self=this;
  pageurl=Init_data(true,pageurl);
  var parameters,pageparams=Init_data(true);
  var urlparams,pagename=Init_data(true);
  var states,state,params,pageinfo,cleanurl,paramarr,k,i;
  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();
  parameters.free();
  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(overrideparams == ""){
    self.addstatetobrowserhistory(pageurl.v);
  }
}

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_opendataform(target,openformparameters){

  doopendataform("TDataForm" + gvautoidcounter + ":TDataForm",target,openformparameters);
  gvautoidcounter++;
}

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 getlastpos(c,s){

  var i=Init_data(true);
  i.v=__string_length(s);
  while(i.v > 0){
    if(s.charAt(i.v-1) == c){
      return i.v;
    }
    dec(i);
  }
  return 0;
}

function txapp_reconstructstate(state){
  var self=this;
  var stateindex,i;
  function getstateindex(astate){
    var result;
    var i,s;
    result=-1;
    if(self.states.length == 0){
      return result;
    }
    i=getlastpos(":",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();
    }
  }
  stateindex=getstateindex(state);
  i=getlastpos(":",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_handleformopenerror(errormsg,handled){

}

function txapp_getstatebyid(id){
  var self=this;

  var i;
  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,state,statestring,curfragment;
  function constructstatestring(){
    var result;
    var statearray;
    function addstatestring(ctrl){      var i,j,s,op=Init_data(true);
      var frm,subfrm;
      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.add("(" + s + ")");
        }
      }
      for(i=ctrl.childcount() - 1;i>=0;i--){
        if(_IS(ctrl.childctrls.get(i),subform)){
          subfrm=ctrl.childctrls.get(i);
          for(j=subfrm.fasthandles.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.add("(!" + s + "!)");
            }
          }
        }
        addstatestring(ctrl.childctrls.get(i));
      }
    }
    statearray=createJArray();
    addstatestring(self.mainform);
    result=encodeURIComponent(statearray.join("I"));
    statearray.clear();
    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=getlastpos(":",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;
  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=CreateList();
  }
  return fregisteredtimers;
}

function getrunningtimerbyid(id){
  var result;
  var i,tmr;
  result=null;
  for(i=registeredtimers().fcount - 1;i>=0;i--){
    tmr=registeredtimers().get(i);
    if(stringsequal(tmr.name,id)){
      return tmr;
    }
  }
  return result;
}

function timercallback(id){  var tmr;
  tmr=getrunningtimerbyid(id);
  if(assigned(tmr)){
    tmr.timerid=-1;
    if(tmr.suspended){
      return;
    }
    if(tmr.fenabled){
      tmr.handletimerevent();
    }
    if(tmr.fenabled){
      tmr.setupnexttimeout();
    }
  }
}

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;
  registeredtimers().add(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;
  self.owner=self.fownerform;
  if(self.fownerform != null){
    __tarray_add(self.fownerform.timers,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=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]();
    }
  }
}

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;
  var fm;
  result=null;
  fm=xapp.getproperty_webform(formname);
  if(fm != null){
    return fm.getcontrolbyname(controlname);
  }
  return result;
}

function GetScriptContext(xappid){
  var result;
  function checkdomwindow(p){
    var result;
    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;
    var p;
    result=null;
    p=window;
    do{
      if(checkdomwindow(p)){
        return p;
      }
      if(p == p.parent){
        return result;
      }
      p=p.parent;
      while(!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;
    var doc,l,i;
    function checkiframe(f){
      var result;
      var win,temp,doc,l,i;
      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;
    var win;
    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;
        while(!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;
  var i;
  function dogetsubform(ctrl){
    var result;
    var i;
    if(_IS(ctrl,subform)){
      if(ctrl.getexternaldocumenttitle() == winhandle.document.title){
        return ctrl;
      }
    }
    for(i=ctrl.childcount() - 1;i>=0;i--){
      result=dogetsubform(ctrl.childctrls.get(i));
      if(result != null){
        return result;
      }
    }
    return null;
  }
  for(i=xapp.openforms.fcount - 1;i>=0;i--){
    result=dogetsubform(xapp.openforms.get(i));
    if(result != null){
      return result;
    }
  }
  return null;
}

function ResizeSubForm(asubform,newheight){

  return asubform.groworshrink(newheight,true);
}

function ContextHeight(){

  var e;
  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;
  var fm;
  result=false;
  fm=xapp.getproperty_webform(formname);
  if(fm != null){
    return fm.fformreadystate == 4;
  }
  return result;
}

function geteventelement(domevent){
  var result;
  result=null;
  if(!assigned(domevent)){
    domevent=window.event;
  }
  if(assigned(domevent)){
    return (assigned(domevent.target))?domevent.target:domevent.srcElement;
  }
  return result;
}

function geteventbandindex(Event,Bnx){  
      return Event.bandindex != null ? Event.bandindex : Bnx;
  
}

function geteventsource(domevent){

  var el;
  el=geteventelement(domevent);
  while(assigned(el) && !assigned(el.wrapper)){
    el=el.parentNode;
  }
  return (assigned(el))?el.wrapper:null;
}

function switchbandindexbyctrl(ctrl){
  var result;
  var binx,p;
  function doswitchbandindex(p){    var i;
    if(!p.isinplace()){
      p.bandindex=binx;
      for(i=0;i<=p.childcount() - 1;i++){
        doswitchbandindex(p.childctrls.get(i));
      }
    }
  }
  result=-1;
  if(ctrl == null){
    return result;
  }
  binx=ctrl.bandindex;
  p=ctrl;
  while((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,ctl,serializer,s=Init_data(true);
  result="";
  frm=xapp.getproperty_webform(formname);
  if(frm == null){
    return result;
  }
  ctl=frm.getcontrolbyname(ctrlname);
  if(ctl == null){
    return result;
  }
  serializer=Create_tserializer().create(null,"result",serializabletypes().gettypeinfox("string"));
  serializer.bind(s);
  ctl.serialize(serializer);
  serializer.free();
  return s.v;
}

function _runxapp(){  xapp.run();
}

function _initxapp(){  if(window.document.getElementById("__Root") == null){
    settimeout(functionname(_initxapp) + "()",100);
  }else {
    if(!assigned(xapp)){
      xapp=Create_txapp().create();
    }
    if(bRoWsEr.engineid == "MS"){
      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);
  }
}

function ishtmlattrset(h,attrname){

  return (h != null) && assigned(h.getAttribute) && assigned(h.getAttribute(attrname));
}

function __tarray_count(__self){
  var result;
  with(__self){
    result=__self.length;
  }
  return result;
}

function __tarray_add(__self,p){  with(__self){
    __self.push(p);
  }
}

_lddmods["SystemControls"]=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=null;
  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;
  p.create=tfielddata_create;
  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=null;
  p.fieldrelationshipkind=null;
  p.relatedtable=null;
  p.relatedkeyfield=null;
  p.relatedlabelfield=null;
  return p
}

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.destroy=ttabledata_destroy;
  p.addfield=ttabledata_addfield;
  p.getfielddata=ttabledata_getfielddata;
  p.getrelationshipfields=ttabledata_getrelationshipfields;
  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=null;
  return p
}

function twebservicedatasource(){}
function Register_twebservicedatasource(){
  if(IsRegisteredtwebservicedatasource)return;
  Register_titemdata();
  var p=new titemdata();
  p.zb="twebservicedatasource";
  p.zc=twebservicedatasource;
  p.ParentClass=titemdata;
  p.create=twebservicedatasource_create;
  twebservicedatasource.prototype=p;
  IsRegisteredtwebservicedatasource=true;
}
function Create_twebservicedatasource(p){
  Register_twebservicedatasource();
  if(p==void(0))var p=new twebservicedatasource();
  p=Create_titemdata(p);
  p.zb="twebservicedatasource";
  p.createdblistfn=null;
  p.useproxyserver=null;
  p.datasourcename=null;
  p.recordtypename=null;
  p.serviceurl=null;
  return p
}

function tdynamicformtype(){}
function Register_tdynamicformtype(){
  if(IsRegisteredtdynamicformtype)return;
  Register_titemdata();
  var p=new titemdata();
  p.zb="tdynamicformtype";
  p.zc=tdynamicformtype;
  p.ParentClass=titemdata;
  p.create=tdynamicformtype_create;
  tdynamicformtype.prototype=p;
  IsRegisteredtdynamicformtype=true;
}
function Create_tdynamicformtype(p){
  Register_tdynamicformtype();
  if(p==void(0))var p=new tdynamicformtype();
  p=Create_titemdata(p);
  p.zb="tdynamicformtype";
  p.type_=null;
  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=null;
  p.slice=null;
  p.src=null;
  p.bundle=null;
  p.imgrepeat=null;
  p.position=null;
  p.color=null;
  p.left=null;
  p.top=null;
  p.right=null;
  p.bottom=null;
  p.width=null;
  p.height=null;
  p.offsetx=null;
  p.offsety=null;
  p.useborder=null;
  p.usetext=null;
  p.imageloaded=null;
  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=null;
  p.theme=null;
  p.state=null;
  p.color=null;
  p.cursor=null;
  p.borderwidth=null;
  p.borderstyle=null;
  p.bordersides=Init_thtmlbordersides(false);
  p.bordercolor=null;
  p.fontname=null;
  p.fontheight=null;
  p.fontstyle=Init_tfontstyles(false);
  p.fontcolor=null;
  p.images=null;
  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=null;
  p.url=null;
  p.params=null;
  p.states=null;
  p.overrideparams=null;
  return p
}

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_dynamicformtype=tcatalog_getproperty_dynamicformtype;
  p.getproperty_baseurl=tcatalog_getproperty_baseurl;
  p.create=tcatalog_create;
  p.destroy=tcatalog_destroy;
  p.getwebservicedatasource=tcatalog_getwebservicedatasource;
  p.getitembyname=tcatalog_getitembyname;
  p.additemdata=tcatalog_additemdata;
  p.addtabledata=tcatalog_addtabledata;
  p.adddynamicformdata=tcatalog_adddynamicformdata;
  p.createmoduleform=tcatalog_createmoduleform;
  p.createdblist=tcatalog_createdblist;
  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=null;
  p.httpport=null;
  p.httpsport=null;
  p.webpagealignment=null;
  p.pagemarginleft=null;
  p.pagemargintop=null;
  p.pagemarginright=null;
  p.pagemarginbottom=null;
  p.defaulttheme=null;
  p.resourcespackaged=null;
  p.pageinfos=null;
  p.isie6=null;
  p.fdynamicformtypes=null;
  return p
}

function Create_TStyleDataArray(p){
  return new Array();
}

var getwebmethodfunction=null,createdblistfunction=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 tfielddata_create(aname,afieldrelationshipkind,arelatedtable,arelatedkeyfield,arelatedlabelfield,adatatype){
  var self=this;
  titemdata.prototype.create.call(self);
  self.name=aname;
  self.fieldrelationshipkind=afieldrelationshipkind;
  self.relatedtable=arelatedtable;
  self.relatedkeyfield=arelatedkeyfield;
  self.relatedlabelfield=arelatedlabelfield;
  self.datatype=adatatype;
  return self;
}

function ttabledata_create(){
  var self=this;
  titemdata.prototype.create.call(self);
  self.fields=CreateList(null,null,Create_tfielddata,tobject_create);
  return self;
}

function ttabledata_destroy(){
  var self=this;
  self.fields.free();
  titemdata.prototype.destroy.call(self);
}

function ttabledata_addfield(aname,afieldrelationshipkind,arelatedtable,arelatedkeyfield,arelatedlabelfield,adatatype){
  var self=this;
  var result;
  result=Create_tfielddata().create(aname,afieldrelationshipkind,arelatedtable,arelatedkeyfield,arelatedlabelfield,adatatype);
  self.fields.add(result);
  return result;
}

function ttabledata_getfielddata(aname){
  var self=this;

  var i;
  for(i=0;i<=self.fields.fcount - 1;i++){
    if(stringsequal(self.fields.get(i).name,aname)){
      return self.fields.get(i);
    }
  }
  return null;
}

function ttabledata_getrelationshipfields(){
  var self=this;
  var result;
  var i;
  result=Create_TArray();
  for(i=0;i<=self.fields.fcount - 1;i++){
    if(self.fields.get(i).fieldrelationshipkind != 0){
      result.push(self.fields.get(i).name);
    }
  }
  return result;
}

function twebservicedatasource_create(aname,adatasourcename,arecordname){
  var self=this;
  titemdata.prototype.create.call(self);
  self.name=aname;
  self.createdblistfn=null;
  self.useproxyserver=false;
  self.datasourcename=adatasourcename;
  self.recordtypename=arecordname;
  self.serviceurl="";
  catalog().items.add(self);
  return self;
}

function controlstyles_styledatabyname(name){
  var result;
  var i,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){  var i,style;
  if(data != null){
    for(i=0;i<=data.length - 1;i++){
      style=data[i]["_style"];
      if((style != null) && (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"];
  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=Init_tfontstyles(false);
    _SSet(_ISet(false,0),result);
    if((style & 1) != 0){
      _SSet(_UnionSet(result,_ISet(false,4,0)),result);
    }
    if((style & 2) != 0){
      _SSet(_UnionSet(result,_ISet(false,4,1)),result);
    }
    if((style & 4) != 0){
      _SSet(_UnionSet(result,_ISet(false,4,2)),result);
    }
    if((style & 8) != 0){
      _SSet(_UnionSet(result,_ISet(false,4,3)),result);
    }
    return result;
  }
  function getbordersides(style){
    var result=Init_thtmlbordersides(false);
    _SSet(_ISet(false,0),result);
    if((style & 1) != 0){
      _SSet(_UnionSet(result,_ISet(false,4,0)),result);
    }
    if((style & 2) != 0){
      _SSet(_UnionSet(result,_ISet(false,4,1)),result);
    }
    if((style & 4) != 0){
      _SSet(_UnionSet(result,_ISet(false,4,2)),result);
    }
    if((style & 8) != 0){
      _SSet(_UnionSet(result,_ISet(false,4,3)),result);
    }
    return result;
  }
  function initimages(){    var img,i;
    img=props["images"];
    if(assigned(img)){
      for(i=0;i<=__tarray_count(img) - 1;i++){
        self.images.push(Create_tbackground().create(self,img[i]));
      }
    }
  }
  tobject.prototype.create.call(self);
  self.images=Create_TArray();
  self.name=props["name"];
  self.theme=props["theme"];
  self.state=props["state"];
  self.cursor=props["cursor"];
  self.color=props["color"];
  self.borderwidth=props["bwidth"];
  _SSet(getbordersides(props["bsides"]),self.bordersides);
  self.borderstyle=props["bstyle"];
  self.bordercolor=props["bcolor"];
  self.fontname=props["fname"];
  self.fontheight=props["fheight"];
  self.fontcolor=props["fcolor"];
  _SSet(getfontstyle(props["fstyle"]),self.fontstyle);
  initimages();
  return self;
}

function tcontrolstyle_getproperty_image(){
  var self=this;
  var result;
  var i;
  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;
  img=self.getproperty_image();
  return (img == null) || !img.useborder;
}

function tcontrolstyle_getproperty_resizeable(){
  var self=this;
  var result;
  var i;
  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;
  var i;
  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=CreateList(null,null,Create_titemdata,tobject_create);
  self.fdynamicformtypes=CreateList(null,null,Create_tdynamicformtype,tobject_create);
  self.httpport=80;
  self.httpsport=443;
  self.webpagealignment=0;
  self.resourcespackaged=true;
  self.defaulttheme="";
  self.isie6=(bRoWsEr.engineid == "MS") && (bRoWsEr.version <= 6);
  self.pageinfos=Create_TArray();
  return self;
}

function tcatalog_destroy(){
  var self=this;
  self.fdynamicformtypes.FreeOnClear;
  self.items.FreeOnClear;
  self.fdynamicformtypes=destroyobject(self.fdynamicformtypes);
  self.items=destroyobject(self.items);
  tobject.prototype.destroy.call(self);
}

function tcatalog_getwebservicedatasource(name,datasourcename){
  var self=this;
  var result;
  var i;
  for(i=0;i<=self.items.fcount - 1;i++){
    result=self.items.get(i);
    if((_IS(result,twebservicedatasource)) && stringsequal(result.name,name)){
      if(stringsequal(result.datasourcename,datasourcename)){
        return result;
      }
    }
  }
  return null;
}

function tcatalog_getitembyname(name){
  var self=this;

  var item,itmename,i;
  for(i=0;i<=self.items.fcount - 1;i++){
    item=self.items.get(i);
    if(stringsequal(item.name,name)){
      return item;
    }
  }
  for(i=0;i<=self.items.fcount - 1;i++){
    item=self.items.get(i);
    itmename=replacestring(item.name," ","_");
    if(stringsequal(itmename,name)){
      return item;
    }
  }
  return null;
}

function tcatalog_additemdata(name){
  var self=this;
  var result;
  result=Create_titemdata().create();
  result.name=name;
  self.items.add(result);
  return result;
}

function tcatalog_addtabledata(name){
  var self=this;
  var result;
  result=Create_ttabledata().create();
  result.name=name;
  self.items.add(result);
  return result;
}

function tcatalog_adddynamicformdata(name,formclass){
  var self=this;
  self.fdynamicformtypes.add(Create_tdynamicformtype().create(name,formclass));
}

function tcatalog_createmoduleform(modulename,initialparameters){

  var result;
  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,shortname,shortnamelen;
  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),_ISet(false,256,"/","?"))))){
        return true;
      }
    }
  }
  return false;
}

function tcatalog_gettableorquerybyname(name){


  var i;
  function namesmatch(s1,s2){

    s1=replacestring(s1," ","_");
    s2=replacestring(s2," ","_");
    return __string_equals(s1,s2);
  }
  for(i=0;i<=catalog().items.fcount - 1;i++){
    if(namesmatch(catalog().items.get(i).name,name)){
      if(_IS(catalog().items.get(i),ttabledata)){
        return catalog().items.get(i);
      }
    }
  }
  return null;
}

function tcatalog_getfieldbyname(fieldname,datasourcename){
  var self=this;
  var result;
  var i,tabledata;
  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.fcount - 1;i++){
    if(namesmatch(tabledata.fields.get(i).name,fieldname)){
      result=tabledata.fields.get(i);
    }
  }
  return result;
}

function tcatalog_addpageinfo(aname,aurl,aparams){
  var self=this;
  var pageinfo;
  pageinfo=Create_tpageinfo().create();
  pageinfo.name=aname;
  pageinfo.url=aurl;
  pageinfo.params=aparams;
  self.pageinfos.push(pageinfo);
}

function tcatalog_getstateslistforpage(cleanurl){
  var self=this;

  var info;
  info=self.getpageinfobycleanurl(cleanurl);
  return (info == null)?null:info.states;
}

function tcatalog_getformstateinpage(cleanurl,subformname){
  var self=this;
  var result;
  var i,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,reconstructor,pageinfo;
  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;
    reconstructor.free();
  }
}

function tcatalog_getpageinfobycleanurl(cleanurl){
  var self=this;
  var result;
  var i,shortname,cleanurllen,shortnamelen,maxmatch,pageinfo;
  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,shortnamelen,paramsvaluesstr,paramsnames,paramsvalues,pageinfo;
  function getparamsstr(){
    var result;
    var i;
    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_createdblist(name){

  var result;
  result=null;
  if(!assigned(createdblistfunction)){
    return result;
  }
  return createdblistfunction(name);
}

function tcatalog_getproperty_baseurl(){


  return gvBaseURL;
}

function tcatalog_getproperty_dynamicformtype(n){
  var self=this;
  var result;
  var i;
  for(i=0;i<=self.fdynamicformtypes.fcount - 1;i++){
    result=self.fdynamicformtypes.get(i);
    if(stringsequal(result.name,n)){
      return result;
    }
  }
  return null;
}

function tdynamicformtype_create(aname,formclass){
  var self=this;
  titemdata.prototype.create.call(self);
  self.type_=formclass;
  self.name=aname;
  return self;
}

_lddmods["SystemCatalog"]=true;
function tgetdatawebmethod(){}
function Register_tgetdatawebmethod(){
  if(IsRegisteredtgetdatawebmethod)return;
  Register_tsoapclient();
  var p=new tsoapclient();
  p.zb="tgetdatawebmethod";
  p.zc=tgetdatawebmethod;
  p.ParentClass=tsoapclient;
  p.create=tgetdatawebmethod_create;
  p.handleresponse=tgetdatawebmethod_handleresponse;
  p.execute=tgetdatawebmethod_execute;
  p.getmethodurl=tgetdatawebmethod_getmethodurl;
  tgetdatawebmethod.prototype=p;
  IsRegisteredtgetdatawebmethod=true;
}
function Create_tgetdatawebmethod(p){
  Register_tgetdatawebmethod();
  if(p==void(0))var p=new tgetdatawebmethod();
  p=Create_tsoapclient(p);
  p.zb="tgetdatawebmethod";
  p.datapage=null;
  return p
}

function tupdatedatawebmethod(){}
function Register_tupdatedatawebmethod(){
  if(IsRegisteredtupdatedatawebmethod)return;
  Register_tsoapclient();
  var p=new tsoapclient();
  p.zb="tupdatedatawebmethod";
  p.zc=tupdatedatawebmethod;
  p.ParentClass=tsoapclient;
  p.create=tupdatedatawebmethod_create;
  p.handleresponse=tupdatedatawebmethod_handleresponse;
  p.execute=tupdatedatawebmethod_execute;
  p.getmethodurl=tupdatedatawebmethod_getmethodurl;
  tupdatedatawebmethod.prototype=p;
  IsRegisteredtupdatedatawebmethod=true;
}
function Create_tupdatedatawebmethod(p){
  Register_tupdatedatawebmethod();
  if(p==void(0))var p=new tupdatedatawebmethod();
  p=Create_tsoapclient(p);
  p.zb="tupdatedatawebmethod";
  p.datapage=null;
  return p
}

function tdatapage(){}
function Register_tdatapage(){
  if(IsRegisteredtdatapage)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tdatapage";
  p.zc=tdatapage;
  p.ParentClass=tobject;
  p.create=tdatapage_create;
  p.destroy=tdatapage_destroy;
  p.prepare=tdatapage_prepare;
  p.cleardblist=tdatapage_cleardblist;
  p.clearsubmitlist=tdatapage_clearsubmitlist;
  p.refresh=tdatapage_refresh;
  p.submit=tdatapage_submit;
  tdatapage.prototype=p;
  IsRegisteredtdatapage=true;
}
function Create_tdatapage(p){
  Register_tdatapage();
  if(p==void(0))var p=new tdatapage();
  p=Create_tobject(p);
  p.zb="tdatapage";
  p.ownerdataset=null;
  p.dblist=Init_data(true);
  p.dbsubmitlist=Init_data(true);
  p.sqlfilter=Init_data(true);
  p.startingoffset=Init_data(true);
  p.pagesize=Init_data(true);
  p.recordcount=Init_data(true);
  p.pageparameters=Init_data(true);
  p.forcesubmit=Init_data(true);
  p.getdata=null;
  p.updatedata=null;
  p.canbestopped=null;
  return p
}

function tdataset(){}
function Register_tdataset(){
  if(IsRegisteredtdataset)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tdataset";
  p.zc=tdataset;
  p.ParentClass=tobject;
  p.create=tdataset_create;
  p.destroy=tdataset_destroy;
  p.requestpage=tdataset_requestpage;
  p.handlerequestpage=tdataset_handlerequestpage;
  p.handlesubmitpage=tdataset_handlesubmitpage;
  p.getpagecount=tdataset_getpagecount;
  p.getcurrentpage=tdataset_getcurrentpage;
  p.getcurrentrecord=tdataset_getcurrentrecord;
  p.getpagerecordcount=tdataset_getpagerecordcount;
  p.firstrecord=tdataset_firstrecord;
  p.previousrecord=tdataset_previousrecord;
  p.nextrecord=tdataset_nextrecord;
  p.lastrecord=tdataset_lastrecord;
  p.firstpage=tdataset_firstpage;
  p.previouspage=tdataset_previouspage;
  p.nextpage=tdataset_nextpage;
  p.lastpage=tdataset_lastpage;
  p.newrecord=tdataset_newrecord;
  p.deleterecord=tdataset_deleterecord;
  p.submitpage=tdataset_submitpage;
  p.refreshpage=tdataset_refreshpage;
  p.markrecord=tdataset_markrecord;
  p.getproperty_dbrecordserializer=tdataset_getproperty_dbrecordserializer;
  p.setcurrentrecord=tdataset_setcurrentrecord;
  p.getproperty_sqlfilter=tdataset_getproperty_sqlfilter;
  p.setproperty_sqlfilter=tdataset_setproperty_sqlfilter;
  p.getproperty_pagesize=tdataset_getproperty_pagesize;
  p.setproperty_pagesize=tdataset_setproperty_pagesize;
  p.getproperty_startingoffset=tdataset_getproperty_startingoffset;
  p.setproperty_startingoffset=tdataset_setproperty_startingoffset;
  p.getproperty_recordcount=tdataset_getproperty_recordcount;
  p.setproperty_recordcount=tdataset_setproperty_recordcount;
  p.getproperty_countrecordsexactly=tdataset_getproperty_countrecordsexactly;
  p.setproperty_countrecordsexactly=tdataset_setproperty_countrecordsexactly;
  p.getproperty_parameters=tdataset_getproperty_parameters;
  p.createdblist=tdataset_createdblist;
  p.createdatapage=tdataset_createdatapage;
  p.createcurrentdatapage=tdataset_createcurrentdatapage;
  tdataset.prototype=p;
  IsRegisteredtdataset=true;
}
function Create_tdataset(p){
  Register_tdataset();
  if(p==void(0))var p=new tdataset();
  p=Create_tobject(p);
  p.zb="tdataset";
  p.ownerform=null;
  p.currentdatapage=null;
  p.pagelist=null;
  p.datasource=null;
  p.webservicename=null;
  p.serviceurl=null;
  p.useproxyserver=null;
  p.recordtypename=null;
  p.onsubmitreturn=_IMthod(false);
  p.onrefreshreturn=_IMthod(false);
  p.createdblistfn=null;
  p.fdbrecordserializer=null;
  p.fpagesize=null;
  p.fsqlfilter=null;
  p.fstartingoffset=null;
  p.frecordcount=null;
  p.ffirstreconpagerequest=null;
  p.fparameters=null;
  return p
}

function form(){}
function Register_form(){
  if(IsRegisteredform)return;
  Register_tabstractform();
  var p=new tabstractform();
  p.zb="form";
  p.zc=form;
  p.ParentClass=tabstractform;
  p.getboundcontrols=form_getboundcontrols;
  p.getpagecount=form_getpagecount;
  p.getcurrentpage=form_getcurrentpage;
  p.getcurrentrecord=form_getcurrentrecord;
  p.getpagerecordcount=form_getpagerecordcount;
  p.getproperty_currentdatapage=form_getproperty_currentdatapage;
  p.displaylistcontrols=form_displaylistcontrols;
  p.getstate=form_getstate;
  p.getdatachanged=form_getdatachanged;
  p.setstate=form_setstate;
  p.getproperty_countrecordsexactly=form_getproperty_countrecordsexactly;
  p.setproperty_countrecordsexactly=form_setproperty_countrecordsexactly;
  p.addchildbinder=form_addchildbinder;
  p.moveto=form_moveto;
  p.pagenumbereditonkeydown=form_pagenumbereditonkeydown;
  p.recordnumbereditonkeydown=form_recordnumbereditonkeydown;
  p.masterdatafield=form_masterdatafield;
  p.childdatafield=form_childdatafield;
  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.highlightnavbtn=form_highlightnavbtn;
  p.enablenavbtn=form_enablenavbtn;
  p.dobeforedbnavigate=form_dobeforedbnavigate;
  p.doafterdbnavigate=form_doafterdbnavigate;
  p.dobeforedatachange=form_dobeforedatachange;
  p.doafterdatachange=form_doafterdatachange;
  p.continuousform_initializefieldeditors=form_continuousform_initializefieldeditors;
  p.continuousform_finalizefieldeditors=form_continuousform_finalizefieldeditors;
  p.continuousform_bindcontrols=form_continuousform_bindcontrols;
  p.continuousform_createserializers=form_continuousform_createserializers;
  p.continuousform_getembeddedvalues=form_continuousform_getembeddedvalues;
  p.continuousform_setstartingrecord=form_continuousform_setstartingrecord;
  p.continuousform_navigate=form_continuousform_navigate;
  p.continuousform_checkbrowsermode=form_continuousform_checkbrowsermode;
  p.continuousform_cancelrecordchanges=form_continuousform_cancelrecordchanges;
  p.continuousform_deleterecord=form_continuousform_deleterecord;
  p.continuousform_showinsertband=form_continuousform_showinsertband;
  p.continuousform_hideinsertband=form_continuousform_hideinsertband;
  p.continuousform_handleonclick=form_continuousform_handleonclick;
  p.continuousform_handleonkeydown=form_continuousform_handleonkeydown;
  p.setcurrentrecord=form_setcurrentrecord;
  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.defineorapplyfilter=form_defineorapplyfilter;
  p.create1=form_create1;
  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.reopenwithparameters=form_reopenwithparameters;
  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.childdatabinders=null;
  p.masterdatabinder=null;
  p.dataset=null;
  p.fdatamode=null;
  p.tempcreatedcontrols=null;
  p.tempenabledcontrols=null;
  p.onbeforedatachange=_IMthod(false);
  p.onafterdatachange=_IMthod(false);
  p.onbeforedbnavigate=_IMthod(false);
  p.onafterdbnavigate=_IMthod(false);
  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.destroy=tformopener_destroy;
  p.handleformopenerror=tformopener_handleformopenerror;
  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=null;
  p.newform=null;
  p.formclassname=null;
  p.forminstancename=null;
  p.targetbandindex=null;
  p.targetsubform=null;
  p.xmlhttprequest=null;
  p.onreadytimer=null;
  p.onreadyperiod=null;
  p.activate=null;
  p.successfullycompleted=null;
  p.currentpagename=null;
  p.batchid=null;
  return p
}

function t_webcontrol(){}
function Register_t_webcontrol(){
  if(IsRegisteredt_webcontrol)return;
  Register_twebcontrol();
  var p=new twebcontrol();
  p.zb="t_webcontrol";
  p.zc=t_webcontrol;
  p.ParentClass=twebcontrol;
  t_webcontrol.prototype=p;
  IsRegisteredt_webcontrol=true;
}
function Create_t_webcontrol(p){
  Register_t_webcontrol();
  if(p==void(0))var p=new t_webcontrol();
  p=Create_twebcontrol(p);
  p.zb="t_webcontrol";
  return p
}

function deserealizelistctrl(ctrl,dbfield,dbserializer,dblist){  var serializer,i,p=Init_data(true);
  if(dbfield != ""){
    ctrl.clearvalue();
    for(i=0;i<=dblist.fcount - 1;i++){
      p.v=dblist.get(i);
      if(p.v != null){
        dbserializer.bind(p);
      }else 
        dbserializer.data=null;
      if(dbserializer.data != null){
        serializer=dbserializer.getproperty_child(dbfield);
        if(serializer != null){
          ctrl.deserialize(serializer);
        }
      }
    }
  }
}

function tgetdatawebmethod_create(adatapage){
  var self=this;
  self.datapage=adatapage;
  tsoapclient.prototype.create.call(self, "Get" + self.datapage.ownerdataset.datasource);
  self.useproxyserver=self.datapage.ownerdataset.useproxyserver;
  self.serviceurl=self.datapage.ownerdataset.serviceurl;
  self.soapaction=self.methodname;
  return self;
}

function tgetdatawebmethod_handleresponse(){
  var self=this;
  if(self.datapage.ownerdataset.ownerform != null){
    self.datapage.ownerdataset.ownerform.ownersubform.endbusy(null);
  }
  self.datapage.ownerdataset.handlerequestpage(self);
  if(assigned(self.datapage.ownerdataset.onrefreshreturn)){
    self.datapage.ownerdataset.onrefreshreturn._o[self.datapage.ownerdataset.onrefreshreturn._p](self.datapage);
  }
}

function tgetdatawebmethod_execute(){
  var self=this;
  self.datapage.prepare();
  with(self.datapage){
    self.bind("DataPage",dblist);
    self.bind("SQLFilter",sqlfilter);
    self.bind("Parameters",pageparameters);
    self.bind("StartingOffset",startingoffset);
    self.bind("PageSize",pagesize);
    self.bind("RecordCount",recordcount);
  }
  if(self.datapage.ownerdataset.ownerform != null){
    self.datapage.ownerdataset.ownerform.ownersubform.beginbusy();
  }
  tsoapclient.prototype.execute.call(self);
}

function tgetdatawebmethod_getmethodurl(){
  var self=this;

  return (isScriptorApp)?"system/" + self.methodname + ".xml":tsoapclient.prototype.getmethodurl.call(self);
}

function tupdatedatawebmethod_create(adatapage){
  var self=this;
  self.datapage=adatapage;
  tsoapclient.prototype.create.call(self, "Update" + self.datapage.ownerdataset.datasource);
  self.useproxyserver=self.datapage.ownerdataset.useproxyserver;
  self.serviceurl=self.datapage.ownerdataset.serviceurl;
  self.soapaction=self.methodname;
  return self;
}

function tupdatedatawebmethod_handleresponse(){
  var self=this;
  if(self.datapage.ownerdataset.ownerform != null){
    self.datapage.ownerdataset.ownerform.ownersubform.endbusy(null);
  }
  self.datapage.ownerdataset.handlesubmitpage(self);
  if(assigned(self.datapage.ownerdataset.onsubmitreturn)){
    self.datapage.ownerdataset.onsubmitreturn._o[self.datapage.ownerdataset.onsubmitreturn._p](self.datapage);
  }
}

function tupdatedatawebmethod_execute(){
  var self=this;
  self.datapage.prepare();
  with(self.datapage){
    self.bind("DataPage",dbsubmitlist);
    self.bind("ForceSubmit",forcesubmit);
  }
  if(self.datapage.ownerdataset.ownerform != null){
    self.datapage.ownerdataset.ownerform.ownersubform.beginbusy();
  }
  tsoapclient.prototype.execute.call(self);
}

function tupdatedatawebmethod_getmethodurl(){
  var self=this;

  return (isScriptorApp)?"system/" + self.methodname + ".xml":tsoapclient.prototype.getmethodurl.call(self);
}

function tdatapage_create(aownerdataset){
  var self=this;
  tobject.prototype.create.call(self);
  self.ownerdataset=aownerdataset;
  self.dblist.v=self.ownerdataset.createdblist();
  self.dbsubmitlist.v=CreateList();
  self.forcesubmit.v=false;
  self.getdata=Create_tgetdatawebmethod().create(self);
  self.updatedata=Create_tupdatedatawebmethod().create(self);
  self.canbestopped=true;
  return self;
}

function tdatapage_destroy(){
  var self=this;
  self.cleardblist(true);
  self.clearsubmitlist(true);
  self.getdata.free();
  self.getdata=null;
  self.updatedata.free();
  self.updatedata=null;
  tobject.prototype.destroy.call(self);
}

function tdatapage_prepare(){
  var self=this;
  self.sqlfilter.v=self.ownerdataset.getproperty_sqlfilter();
  self.startingoffset.v=self.ownerdataset.getproperty_startingoffset();
  self.pagesize.v=self.ownerdataset.getproperty_pagesize();
  self.recordcount.v=self.ownerdataset.getproperty_recordcount();
  self.ownerdataset.setproperty_countrecordsexactly(self.ownerdataset.getproperty_countrecordsexactly());
  self.pageparameters.v=self.ownerdataset.getproperty_parameters().asuristring();
}

function tdatapage_cleardblist(destroylist){
  var self=this;
  var i;
  if(self.dblist.v != null){
    for(i=self.dblist.v.fcount - 1;i>=0;i--){
      self.dblist.v.get(i).free();
    }
    if(destroylist){
      self.dblist.v.free();
    }else 
      self.dblist.v.clear();
  }
}

function tdatapage_clearsubmitlist(destroylist){
  var self=this;
  var i;
  if(self.dbsubmitlist.v != null){
    for(i=self.dbsubmitlist.v.fcount - 1;i>=0;i--){
      self.dbsubmitlist.v.get(i).free();
    }
    if(destroylist){
      self.dbsubmitlist.v.free();
    }else 
      self.dbsubmitlist.v.clear();
  }
}

function tdatapage_refresh(){
  var self=this;
  var cancel=Init_data(true);
  if((self.ownerdataset.ownerform != null) && assigned(self.ownerdataset.ownerform.onbeforerefresh)){
    cancel.v=false;
    self.ownerdataset.ownerform.onbeforerefresh._o[self.ownerdataset.ownerform.onbeforerefresh._p](cancel);
    if(cancel.v){
      return;
    }
  }
  self.cleardblist(false);
  if(self.getdata != null){
    self.getdata.execute();
  }
}

function tdatapage_submit(){
  var self=this;
  var p,k,cancel=Init_data(true);
  for(k=self.dblist.v.fcount - 1;k>=0;k--){
    p=self.dblist.v.get(k);
    if(_InSet(p.status_1.v,_ISet(false,4,0,2))){
      self.dbsubmitlist.v.add(p);
    }
  }
  if((self.ownerdataset.ownerform != null) && assigned(self.ownerdataset.ownerform.onbeforesubmit)){
    cancel.v=false;
    self.ownerdataset.ownerform.onbeforesubmit._o[self.ownerdataset.ownerform.onbeforesubmit._p](cancel);
    if(cancel.v){
      self.clearsubmitlist(false);
      return;
    }
  }
  if(self.dbsubmitlist.v.fcount == 0){
    showmessage("Nothing to submit");
    return;
  }
  self.canbestopped=false;
  self.updatedata.execute();
}

function tdataset_create(aownerform,adatasource){
  var self=this;
  var wsds,k;
  tobject.prototype.create.call(self);
  self.ownerform=aownerform;
  self.currentdatapage=null;
  self.fdbrecordserializer=null;
  self.ffirstreconpagerequest=0;
  self.fparameters=null;
  self.fpagesize=10;
  self.fsqlfilter="";
  self.fstartingoffset=0;
  self.frecordcount=0;
  self.serviceurl="";
  self.useproxyserver=false;
self.onsubmitreturn._o=null;self.onsubmitreturn._p="null";
self.onrefreshreturn._o=null;self.onrefreshreturn._p="null";
  adatasource=replacestring(adatasource," ","_");
  adatasource=replacestring(adatasource,"\\$","_");
  k=pos(".",adatasource);
  if(k == 0){
    adatasource="SystemInternalServices." + adatasource;
  }
  k=pos(".",adatasource);
  if(k != 0){
    self.webservicename=copy(adatasource,1,k - 1);
    self.datasource=copy(adatasource,k + 1,lEngTH(adatasource));
    self.recordtypename=self.datasource + "Record";
    wsds=catalog().getwebservicedatasource(self.webservicename,self.datasource);
    if(wsds != null){
      self.createdblistfn=wsds.createdblistfn;
      self.useproxyserver=wsds.useproxyserver;
      self.recordtypename=wsds.recordtypename;
      self.serviceurl=wsds.serviceurl;
    }else 
      showmessage('"' + self.webservicename + "." + self.datasource + '" not defined');
  }else {
    self.webservicename="";
    self.datasource=adatasource;
    self.recordtypename=adatasource + "Record";
  }
  self.pagelist=CreateList(null,null,Create_tdatapage,tobject_create);
  return self;
}

function tdataset_destroy(){
  var self=this;
  if(self.fdbrecordserializer != null){
    self.fdbrecordserializer.free();
  }
  if(self.fparameters != null){
    self.fparameters.free();
  }
  freeobjectlist(self.pagelist);
  self.pagelist=null;
  tobject.prototype.destroy.call(self);
}

function tdataset_getproperty_dbrecordserializer(){
  var self=this;

  if(self.fdbrecordserializer == null){
    self.fdbrecordserializer=Create_tserializer().create(null,"Record",serializabletypes().gettypeinfox(self.recordtypename));
  }
  return self.fdbrecordserializer;
}

function tdataset_getcurrentrecord(){
  var self=this;

  return (self.currentdatapage != null)?self.currentdatapage.dblist.v.fitemindex:0;
}

function tdataset_setcurrentrecord(i){
  var self=this;
  if(self.currentdatapage == null){
    return;
  }
  if(i >= self.currentdatapage.dblist.v.fcount){
    i=self.currentdatapage.dblist.v.fcount - 1;
  }
  if(i < 0){
    i=0;
  }
  if(i != self.currentdatapage.dblist.v.fitemindex){
    self.currentdatapage.dblist.v.first();
    if(self.currentdatapage.dblist.v.fcount > 0){
      while(self.currentdatapage.dblist.v.fitemindex != i){
        self.currentdatapage.dblist.v.next();
      }
    }
  }
}

function tdataset_getproperty_sqlfilter(){
  var self=this;
  var result;
  var serializer,s;
  if(self.ownerform != null){
    result="";
    if(self.ownerform != null){
      if(self.ownerform.masterdatabinder != null){
        serializer=self.ownerform.masterdatabinder.dataset.getproperty_dbrecordserializer().getproperty_child(self.ownerform.masterdatafield());
        if(serializer != null){
          result='"' + self.ownerform.childdatafield() + '"=';
          s=serializer.readstring();
          if(_InSet(serializer.typeinfo.kind,_ISet(false,16,7,3,6))){
            s="'" + s + "'";
          }
          result+=s;
        }
      }
    }
    if(self.ownerform.getproperty_sqlfilter() != ""){
      return (result == "")?self.ownerform.getproperty_sqlfilter():result + " and " + self.ownerform.getproperty_sqlfilter();
    }
  }else 
    return self.fsqlfilter;
  return result;
}

function tdataset_setproperty_sqlfilter(v){
  var self=this;
  self.fsqlfilter=v;
  if(self.ownerform != null){
    self.ownerform.setproperty_sqlfilter(v);
  }
}

function tdataset_setproperty_pagesize(v){
  var self=this;
  self.fpagesize=v;
  if(self.ownerform != null){
    self.ownerform.setproperty_pagesize(v);
  }
}

function tdataset_getproperty_pagesize(){
  var self=this;

  return (self.ownerform != null)?self.ownerform.getproperty_pagesize():self.fpagesize;
}

function tdataset_getproperty_startingoffset(){
  var self=this;

  return (self.ownerform != null)?self.ownerform.getproperty_startingoffset():self.fstartingoffset;
}

function tdataset_setproperty_startingoffset(v){
  var self=this;
  self.fstartingoffset=v;
  if(self.ownerform != null){
    self.ownerform.setproperty_startingoffset(v);
  }
}

function tdataset_getproperty_recordcount(){
  var self=this;

  return (self.ownerform != null)?self.ownerform.getproperty_recordcount():self.frecordcount;
}

function tdataset_setproperty_recordcount(v){
  var self=this;
  self.frecordcount=v;
  if(self.ownerform != null){
    self.ownerform.setproperty_recordcount(v);
  }
}

function tdataset_getproperty_countrecordsexactly(){
  var self=this;
  var result;
  result=stringsequal(self.getproperty_parameters().getparamvalue("CountRecordsExactly"),"True");
  if(self.ownerform != null){
    return self.ownerform.getproperty_countrecordsexactly();
  }
  return result;
}

function tdataset_setproperty_countrecordsexactly(v){
  var self=this;
  if(v){
    self.getproperty_parameters().update("CountRecordsExactly","True");
  }else 
    self.getproperty_parameters().update("CountRecordsExactly","False");
}

function tdataset_getproperty_parameters(){
  var self=this;

  if(self.ownerform != null){
    return self.ownerform.currentparameters;
  }else {
    if(self.fparameters == null){
      self.fparameters=Create_tparameters().create();
    }
    return self.fparameters;
  }
}

function tdataset_createdblist(){
  var self=this;
  var result;
  if(assigned(self.createdblistfn)){
    result=self.createdblistfn(self.datasource);
    if(result == null){
      showmessage('"' + self.datasource + '" not defined!');
    }
  }else 
    return catalog().createdblist(self.datasource);
  return result;
}

function tdataset_createcurrentdatapage(){
  var self=this;

  if(self.currentdatapage != null){
    if(self.currentdatapage.canbestopped){
      self.pagelist.remove(self.currentdatapage);
      self.currentdatapage.free();
      self.currentdatapage=null;
    }
  }
  self.currentdatapage=self.createdatapage();
  self.pagelist.add(self.currentdatapage);
  return self.currentdatapage;
}

function tdataset_requestpage(newpage,newrecpos){
  var self=this;
  self.ffirstreconpagerequest=newrecpos;
  self.setproperty_startingoffset(newpage * self.getproperty_pagesize());
  if(self.getproperty_startingoffset() < 0){
    self.setproperty_startingoffset(0);
  }
  self.createcurrentdatapage().refresh();
}

function tdataset_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 tdataset_createdatapage(){
  var self=this;

  return Create_tdatapage().create(self);
}

function tdataset_getcurrentpage(){
  var self=this;

  return ceil(self.getproperty_startingoffset() / self.getproperty_pagesize());
}

function tdataset_getpagerecordcount(){
  var self=this;

  return self.currentdatapage.dblist.v.fcount;
}

function tdataset_firstrecord(){
  var self=this;
  if(self.ownerform != null){
    if(!self.ownerform.dobeforedbnavigate(0)){
      return;
    }
    if(!self.ownerform.getstate()){
      return;
    }
  }
  if(self.getcurrentpage() > 0){
    self.setproperty_startingoffset(0);
    self.requestpage(0,0);
  }else {
    self.setcurrentrecord(0);
    if(self.ownerform != null){
      self.ownerform.setstate(true);
      self.ownerform.doafterdbnavigate(0);
    }
  }
}

function tdataset_previousrecord(){
  var self=this;
  var result;
  result=false;
  if(self.ownerform != null){
    if(!self.ownerform.dobeforedbnavigate(1)){
      return result;
    }
    if(!self.ownerform.getstate()){
      return result;
    }
  }
  if(self.getcurrentrecord() == 0){
    if(self.getcurrentpage() == 0){
      return result;
    }
    self.requestpage(self.getcurrentpage() - 1,self.getproperty_pagesize() - 1);
    return true;
  }else {
    self.setcurrentrecord(self.getcurrentrecord() - 1);
    if(self.ownerform != null){
      self.ownerform.setstate(true);
      self.ownerform.doafterdbnavigate(1);
    }
    return true;
  }
}

function tdataset_nextrecord(){
  var self=this;
  var result;
  result=false;
  if(self.ownerform != null){
    if(!self.ownerform.dobeforedbnavigate(2)){
      return result;
    }
    if(!self.ownerform.getstate()){
      return result;
    }
  }
  if(self.getcurrentrecord() >= (self.getpagerecordcount() - 1)){
    if(self.getcurrentpage() >= (self.getpagecount() - 1)){
      return result;
    }
    self.requestpage(self.getcurrentpage() + 1,0);
    return true;
  }else {
    self.setcurrentrecord(self.getcurrentrecord() + 1);
    if(self.ownerform != null){
      self.ownerform.setstate(true);
      self.ownerform.doafterdbnavigate(2);
    }
    return true;
  }
}

function tdataset_lastrecord(){
  var self=this;
  if(self.ownerform != null){
    if(!self.ownerform.dobeforedbnavigate(3)){
      return;
    }
    if(!self.ownerform.getstate()){
      return;
    }
  }
  if(self.getcurrentpage() < (self.getpagecount() - 1)){
    self.requestpage(self.getpagecount() - 1,1000000);
  }else {
    self.setcurrentrecord(self.getpagerecordcount() - 1);
    if(self.ownerform != null){
      self.ownerform.setstate(true);
      self.ownerform.doafterdbnavigate(3);
    }
  }
}

function tdataset_firstpage(){
  var self=this;
  if(self.getproperty_startingoffset() == 0){
    return;
  }
  if(self.ownerform != null){
    if(!self.ownerform.dobeforedbnavigate(4)){
      return;
    }
    if(!self.ownerform.getstate()){
      return;
    }
  }
  self.setproperty_startingoffset(0);
  self.requestpage(0,0);
  if(self.ownerform != null){
    self.ownerform.doafterdbnavigate(4);
  }
}

function tdataset_previouspage(){
  var self=this;
  if(self.getproperty_startingoffset() == 0){
    return;
  }
  if(self.ownerform != null){
    if(!self.ownerform.dobeforedbnavigate(5)){
      return;
    }
    if(!self.ownerform.getstate()){
      return;
    }
  }
  self.requestpage(self.getcurrentpage() - 1,self.getproperty_pagesize() - 1);
  if(self.ownerform != null){
    self.ownerform.doafterdbnavigate(5);
  }
}

function tdataset_nextpage(){
  var self=this;
  if(self.ownerform != null){
    if(!self.ownerform.dobeforedbnavigate(6)){
      return;
    }
    if(!self.ownerform.getstate()){
      return;
    }
  }
  self.requestpage(self.getcurrentpage() + 1,0);
  if(self.ownerform != null){
    self.ownerform.doafterdbnavigate(6);
  }
}

function tdataset_lastpage(){
  var self=this;
  var pno;
  if(self.ownerform != null){
    if(!self.ownerform.dobeforedbnavigate(7)){
      return;
    }
    if(!self.ownerform.getstate()){
      return;
    }
  }
  pno=((self.getproperty_recordcount() / self.getproperty_pagesize())|0);
  if((pno * self.getproperty_pagesize()) == self.getproperty_recordcount()){
    pno--;
  }
  self.requestpage(pno,self.getproperty_recordcount() % self.getproperty_pagesize());
  if(self.ownerform != null){
    self.ownerform.doafterdbnavigate(7);
  }
}

function tdataset_newrecord(){
  var self=this;
  var p=Init_data(true);
  var mv,dv;
  if(self.ownerform != null){
    if(self.ownerform.infilterdefine){
      return;
    }
    if(!self.ownerform.getstate()){
      return;
    }
    if(!self.ownerform.dobeforedatachange(0)){
      return;
    }
  }
  self.currentdatapage.dblist.v.addnewitem();
  self.currentdatapage.dblist.v.last();
  p.v=self.currentdatapage.dblist.v.currentitem();
  if(p.v != null){
    p.v.status_1.v=2;
    if(self.ownerform != null){
      if(self.ownerform.masterdatabinder != null){
        self.getproperty_dbrecordserializer().bind(p);
        mv=self.ownerform.masterdatabinder.dataset.getproperty_dbrecordserializer().getproperty_child(self.ownerform.masterdatafield());
        dv=self.getproperty_dbrecordserializer().getproperty_child(self.ownerform.childdatafield());
        if((mv != null) && (dv != null)){
          dv.writestring(mv.readstring());
        }
      }
      self.ownerform.setstate(true);
      self.ownerform.doafterdatachange(0);
    }
  }
}

function tdataset_deleterecord(){
  var self=this;
  var p,saveitemindex;
  if(self.ownerform != null){
    if(!self.ownerform.generatedatruntime){
      if(self.ownerform.infilterdefine){
        return;
      }
      if(!self.ownerform.getstate()){
        return;
      }
      if(!self.ownerform.dobeforedatachange(1)){
        return;
      }
    }
  }
  saveitemindex=self.getcurrentrecord();
  p=self.currentdatapage.dblist.v.currentitem();
  self.currentdatapage.dblist.v.delete_(saveitemindex);
  if(self.getcurrentrecord() >= (self.currentdatapage.dblist.v.fcount - 1)){
    self.currentdatapage.dblist.v.last();
  }
  if(p.status_1.v == 2){
    p.free();
    p=null;
  }else {
    p.status_1.v=1;
    self.currentdatapage.dbsubmitlist.v.add(p);
  }
  if(self.ownerform != null){
    if(self.ownerform.getproperty_viewmode() == 2){
      self.ownerform.continuousform_deleterecord();
    }else {
      self.ownerform.setstate(true);
      self.ownerform.doafterdatachange(1);
    }
  }
}

function tdataset_submitpage(){
  var self=this;
  self.currentdatapage.forcesubmit.v=false;
  self.currentdatapage.submit();
}

function tdataset_refreshpage(){
  var self=this;
  self.requestpage(self.getcurrentpage(),self.getcurrentrecord());
}

function tdataset_markrecord(status){
  var self=this;
  var pdbobj=Init_data(true);
  function checkstatus(status1,status2){

    return status1.v == status2;
  }
  pdbobj.v=self.getproperty_dbrecordserializer().data;
  if(pdbobj.v.v != null){
    if(checkstatus(pdbobj.v.v.status_1,3)){
      pdbobj.v.v.status_1.v=status;
    }
  }
}

function tdataset_handlerequestpage(getdata){
  var self=this;
  if(getdata.faultcode != ""){
    if((self.ownerform != null) && assigned(self.ownerform.onafterrefresh)){
      self.ownerform.onafterrefresh._o[self.ownerform.onafterrefresh._p](true);
    }else 
      showmessage("Error:" + getdata.faultdetails);
  }else {
    try{
      self.currentdatapage=getdata.datapage;
      self.setproperty_startingoffset(getdata.datapage.startingoffset.v);
      self.setproperty_pagesize(getdata.datapage.pagesize.v);
      self.setproperty_recordcount(getdata.datapage.recordcount.v);
      if(self.ffirstreconpagerequest >= getdata.datapage.dblist.v.fcount){
        self.ffirstreconpagerequest=getdata.datapage.dblist.v.fcount - 1;
      }
      if(self.ffirstreconpagerequest < 0){
        self.ffirstreconpagerequest=0;
      }
      if(self.ffirstreconpagerequest != getdata.datapage.dblist.v.fitemindex){
        getdata.datapage.dblist.v.first();
        if(getdata.datapage.dblist.v.fcount > 0){
          while(getdata.datapage.dblist.v.fitemindex != self.ffirstreconpagerequest){
            getdata.datapage.dblist.v.next();
          }
        }
      }
      if(self.ownerform != null){
        if(self.ownerform.recordnumedit != null){
          self.ownerform.recordnumedit.setproperty_visible(true);
        }
        self.ownerform.displaylistcontrols();
        self.ownerform.setstate(_InSet(self.ownerform.fformreadystate,_ISet(false,6,3,4)));
      }
      self.ffirstreconpagerequest=0;
      getdata.datapage.clearsubmitlist(false);
      if((self.ownerform != null) && assigned(self.ownerform.onafterrefresh)){
        self.ownerform.onafterrefresh._o[self.ownerform.onafterrefresh._p](false);
      }
    }catch(e){
    }
    if(self.ownerform != null){
      if(!(_InSet(self.ownerform.fformreadystate,_ISet(false,6,3,4)))){
        self.ownerform.setproperty_formreadystate(2);
        if(self.ownerform.formopener != null){
          self.ownerform.formopener.checkformready(null);
        }
      }
    }
  }
}

function tdataset_handlesubmitpage(updatedata){
  var self=this;
  if(updatedata.faultcode != ""){
    if((self.ownerform != null) && assigned(self.ownerform.onaftersubmit)){
      self.ownerform.onaftersubmit._o[self.ownerform.onaftersubmit._p](true);
    }else 
      showmessage("Error:" + updatedata.faultdetails);
    updatedata.datapage.dbsubmitlist.v.clear();
  }else {
    if((self.ownerform != null) && assigned(self.ownerform.onaftersubmit)){
      self.ownerform.onaftersubmit._o[self.ownerform.onaftersubmit._p](false);
    }
    updatedata.datapage.canbestopped=true;
    if((self.ownerform != null) && (self.ownerform.ownersubform != null) && (self.ownerform.getproperty_viewmode() == 2)){
      self.ownerform.refreshpage(null);
    }else {
      self.ffirstreconpagerequest=self.getcurrentrecord();
      updatedata.datapage.refresh();
    }
  }
}

function form_requestpage(newpage,newrecpos){
  var self=this;
  self.setproperty_startingoffset(newpage * self.getproperty_pagesize());
  if(self.getproperty_startingoffset() < 0){
    self.setproperty_startingoffset(0);
  }
  if(_InSet(self.getproperty_viewmode(),_ISet(false,3,1,2))){
    self.currentparameters.update("OpenMode","Refresh");
    self.openform(self.instancefullref(),self.ownersubformtargetref(),self.currentparameters.asuristring());
    return;
  }
  if(self.getproperty_datasource() != ""){
    if(self.dataset != null){
      self.dataset.requestpage(newpage,newrecpos);
    }
  }
}

function form_changefilter(newfilter){
  var self=this;
  self.setproperty_sqlfilter(newfilter);
  self.requestpage(0,0);
}

function form_continuousform_handleonclick(event){
  var self=this;
  var idx;
  idx=geteventbandindex(event,self.bandindex);
  if(idx != self.getcurrentrecord()){
    self.continuousform_navigate(event,8,idx);
    self.canceleventbubble(event);
  }
}

function form_continuousform_handleonkeydown(event){
  var self=this;
  if((__string_tointeger(event.keyCode) == vk_escape) && (_InSet(self.getproperty_datamode(),_ISet(false,4,3,2)))){
    self.cancelrecordchanges(event);
    self.canceleventbubble(event);
  }
}

function form_continuousform_createserializers(status){
  var self=this;
  var result;
  var page,p=Init_data(true);
  result=(self.dataset != null) && (self.dataset.getproperty_dbrecordserializer() != null);
  if(!result){
    return result;
  }
  page=self.dataset.currentdatapage;
  if(page == null){
    page=self.dataset.createcurrentdatapage();
  }
  page.cleardblist(false);
  page.dblist.v.addnewitem();
  page.dblist.v.last();
  p.v=page.dblist.v.currentitem();
  p.v.status_1.v=status;
  self.dataset.getproperty_dbrecordserializer().bind(p);
  return self.dataset.getproperty_dbrecordserializer().data != null;
}

function form_continuousform_setstartingrecord(newrecpos){
  var self=this;
  self.setproperty_startingrecordindex((newrecpos != nilinteger)?newrecpos:-1);
}

function form_continuousform_checkbrowsermode(event,offset,newrecpos){
  var self=this;
  var result;
  result=!(_InSet(self.getproperty_datamode(),_ISet(false,4,3,2)));
  if(result){
    return result;
  }
  self.detail.v.bandindex=self.getcurrentrecord();
  switchbandindexbyctrl(self.detail.v);
  result=!self.datasetchanged();
  if(result){
    self.setproperty_datamode(1);
  }else {
    if(offset != nilinteger){
      self.setproperty_startingoffset(offset);
    }
    self.continuousform_setstartingrecord(newrecpos);
    self.submitpage(event);
  }
  return result;
}

function form_continuousform_navigate(event,action,newrecpos){
  var self=this;
  var offset;
  offset=nilinteger;
  switch(action){
    case 0:
    if(self.getcurrentpage() > 0){
      offset=0;
    }else 
      newrecpos=0;
    break;
    case 1:
    if(self.getcurrentrecord() == 0){
      offset=self.getproperty_startingoffset() - self.getproperty_pagesize();
      newrecpos=self.getproperty_pagesize();
    }else 
      newrecpos=self.getcurrentrecord() - 1;
    break;
    case 2:
    if(self.getcurrentrecord() >= (self.getpagerecordcount() - 1)){
      offset=self.getproperty_startingoffset() + self.getproperty_pagesize();
    }else 
      newrecpos=self.getcurrentrecord() + 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.getcurrentrecord();
    }
    break;
    case 5:
    if(self.getproperty_startingoffset() > 0){
      offset=self.getproperty_startingoffset() - self.getproperty_pagesize();
      newrecpos=self.getcurrentrecord();
    }
    break;
    case 6:
    offset=self.getproperty_startingoffset() + self.getproperty_pagesize();
    newrecpos=self.getcurrentrecord();
    break;
    case 7:
    offset=(self.generatedatruntime)?self.getproperty_pagesize() * (ceil(self.getproperty_recordcount() / self.getproperty_pagesize()) - 1):-1000;
    newrecpos=self.getcurrentrecord();
  }
  if((offset == nilinteger) && (newrecpos == nilinteger)){
    return;
  }
  if(self.dobeforedbnavigate(action)){
    if(self.getproperty_viewmode() == 2){
      if(!self.continuousform_checkbrowsermode(event,offset,newrecpos)){
        return;
      }
    }
    if(offset != nilinteger){
      self.setproperty_startingoffset(offset);
      if(self.getproperty_viewmode() == 2){
        self.continuousform_setstartingrecord(newrecpos);
      }
      self.openform(self.instancefullref(),self.ownersubformtargetref(),self.currentparameters.asuristring());
    }else {
      newrecpos=min(newrecpos,self.getpagerecordcount() - 1);
      if(newrecpos >= 0){
        self.setcurrentrecord(newrecpos);
      }
    }
    self.doafterdbnavigate(action);
  }
}

function form_submitpage(event){
  var self=this;
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(_InSet(self.getproperty_viewmode(),_ISet(false,3,0,2))){
    if((self.dataset != null) && (self.dataset.currentdatapage != null)){
      if(self.getstate()){
        self.dataset.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.getcurrentrecord());
}

function form_firstrecord(event){
  var self=this;
  self.highlightnavbtn(geteventsource(event),false);
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(_InSet(self.getproperty_viewmode(),_ISet(false,3,1,2))){
    self.continuousform_navigate(event,0,nilinteger);
  }else 
  if(self.dataset != null){
    self.dataset.firstrecord();
  }
}

function form_previousrecord(event){
  var self=this;
  self.highlightnavbtn(geteventsource(event),false);
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(_InSet(self.getproperty_viewmode(),_ISet(false,3,1,2))){
    self.continuousform_navigate(event,1,nilinteger);
  }else 
  if(self.dataset != null){
    self.dataset.previousrecord();
  }
}

function form_nextrecord(event){
  var self=this;
  self.highlightnavbtn(geteventsource(event),false);
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(_InSet(self.getproperty_viewmode(),_ISet(false,3,1,2))){
    self.continuousform_navigate(event,2,nilinteger);
  }else 
  if(self.dataset != null){
    self.dataset.nextrecord();
  }
}

function form_lastrecord(event){
  var self=this;
  self.highlightnavbtn(geteventsource(event),false);
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(_InSet(self.getproperty_viewmode(),_ISet(false,3,1,2))){
    self.continuousform_navigate(event,3,nilinteger);
  }else 
  if(self.dataset != null){
    self.dataset.lastrecord();
  }
}

function form_firstpage(event){
  var self=this;
  self.highlightnavbtn(geteventsource(event),false);
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(_InSet(self.getproperty_viewmode(),_ISet(false,3,1,2))){
    self.continuousform_navigate(event,4,nilinteger);
  }else 
  if(self.dataset != null){
    self.dataset.firstpage();
  }
}

function form_previouspage(event){
  var self=this;
  self.highlightnavbtn(geteventsource(event),false);
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(_InSet(self.getproperty_viewmode(),_ISet(false,3,1,2))){
    self.continuousform_navigate(event,5,nilinteger);
  }else 
  if(self.dataset != null){
    self.dataset.previouspage();
  }
}

function form_nextpage(event){
  var self=this;
  self.highlightnavbtn(geteventsource(event),false);
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(_InSet(self.getproperty_viewmode(),_ISet(false,3,1,2))){
    self.continuousform_navigate(event,6,nilinteger);
  }else 
  if(self.dataset != null){
    self.dataset.nextpage();
  }
}

function form_lastpage(event){
  var self=this;
  self.highlightnavbtn(geteventsource(event),false);
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(_InSet(self.getproperty_viewmode(),_ISet(false,3,1,2))){
    self.continuousform_navigate(event,7,nilinteger);
  }else 
  if(self.dataset != null){
    self.dataset.lastpage();
  }
}

function form_newrecord(event){
  var self=this;
  if(self.infilterdefine){
    return;
  }
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  switch(self.getproperty_viewmode()){
    case 0:
    if(self.dataset != null){
      self.dataset.newrecord();
      self.setproperty_recordcount(self.getproperty_recordcount() + 1);
      self.updatenavigator();
    }
    break;
    case 2:
    self.setproperty_datamode(3);
  }
}

function form_deleterecord(event){
  var self=this;
  if(self.infilterdefine){
    return;
  }
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(_InSet(self.getproperty_viewmode(),_ISet(false,3,0,2))){
    if(self.dataset != null){
      if((self.getproperty_viewmode() == 2) && !((_InSet(self.getproperty_datamode(),_ISet(false,4,3,2))))){
        self.continuousform_createserializers(1);
      }
      self.dataset.deleterecord();
    }
  }
}

function form_editrecord(event){
  var self=this;
  if(self.infilterdefine){
    return;
  }
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  switch(self.getproperty_viewmode()){
    case 0:
    self.getstate();
    break;
    case 2:
    self.setproperty_datamode(2);
  }
}

function form_cancelrecordchanges(event){
  var self=this;
  if(geteventsource(event) != null){
    if(!geteventsource(event).getproperty_enabled()){
      return;
    }
  }
  if(self.getproperty_viewmode() == 2){
    self.continuousform_cancelrecordchanges();
  }else 
  if(self.infilterdefine){
    self.clearfilter(event);
  }else 
  if(self.datasetchanged()){
    self.setstate(false);
  }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;
    ctrl.clearvalue();
    for(i=ctrl.childcount() - 1;i>=0;i--){
      doclearctrl(ctrl.childctrls.get(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;
    while((arg.v != "") && (arg.v.charAt(1-1) == " ")){
      delete_(arg,1,1);
    }
    op.v="";
    while((arg.v != "") && (arg.v.charAt(1-1) != " ")){
      op.v+=arg.v.charAt(1-1);
      delete_(arg,1,1);
    }
    while((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,op=Init_data(true);
    var arg=Init_data(true);
    var i;
    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.get(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,navctrl,i;
  recno=(self.getcurrentpage() * self.getproperty_pagesize()) + self.getcurrentrecord() + 1;
  for(i=self.navigationctrls.fcount - 1;i>=0;i--){
    navctrl=self.navigationctrls.get(i);
    if((pos("RecordCount",navctrl.name) != 0) && (_IS(navctrl,textlabel))){
      navctrl.setproperty_caption((self.getpagerecordcount() > 0)?inttostr(self.getproperty_recordcount()):"0");
    }else 
    if((pos("PageCount",navctrl.name) != 0) && (_IS(navctrl,textlabel))){
      navctrl.setproperty_caption((self.getpagerecordcount() > 0)?inttostr(self.getpagecount()):"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,navigationbarvalues,buttons,i,buttonid,uniqid;
  function getctrlid(id,ctl){
    var result;
    result=id;
    result=(navigationbarvalues.smallimages)?"S" + result:"L" + result;
    return (bandctrl.bandtype == 24)?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,id;
    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;
    result=Create_textlabel().create0(getctrlid(id,"Lbl"),navigatorpanel);
    self.navigationctrls.add(result);
    return result;
  }
  function createedit(id,buttonid){
    var result;
    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.add(result);
    return result;
  }
  function getcolorid(){

    var temp=Init_data(true);
    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;
    var attrs;
    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.add(result);
    return result;
  }
  navigationbarvalues=Create_tnavigationbarvalues().create();
  try{
    navigationbarvalues.readfromstring(bandctrl.navigationbar);
    if(navigationbarvalues.visible){
      navigatorpanel=(bandctrl.bandtype == 24)?Create_container().create0(self.name + "__NavigationPanel",bandctrl):Create_container().create0(self.name + "__HNavigationPanel",bandctrl);
      self.navigationctrls.add(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{
    navigationbarvalues.free();
  }
}

function form_continuousform_initializefieldeditors(){
  var self=this;
  function needsediting(ctrl){

    var cblobfields;cblobfields=_ISet(false,28,18,19,20,21,22,23,24);
    var cunsupportedfields;cunsupportedfields=_ISet(false,28,26,15,16,9,10,11,12,13);
    return (_IS(ctrl,textlabel)) && (ctrl.attrs.v.datafield != "") && !((ctrl.isrelationshipfield() || (_InSet(ctrl.fieldkind(),cblobfields)) || (_InSet(ctrl.fieldkind(),cunsupportedfields))));
  }
  function needsenabling(ctrl){

    return !ctrl.getproperty_enabled() && (ctrl.attrs.v.datafield != "") && (ctrl.getproperty_inputhandle() != null);
  }
  function createinplaceedit(alabel){
    var result;
    function textlabel_(){}
    function Register_textlabel_(){
      if(IsRegisteredtextlabel_)return;
      Register_textlabel();
      var p=new textlabel();
      p.zb="textlabel_";
      p.zc=textlabel_;
      p.ParentClass=textlabel;
      textlabel_.prototype=p;
      IsRegisteredtextlabel_=true;
    }
    function Create_textlabel_(p){
      Register_textlabel_();
      if(p==void(0))var p=new textlabel_();
      p=Create_textlabel(p);
      p.zb="textlabel_";
      return p
    }

    var attrs;
    var chorizontalpadding;chorizontalpadding=0;
    var cverticalpadding;cverticalpadding=2;
    result=Create_tinplaceedit().create0(alabel.getctrlhtmlidext("_InplaceEdit"),self.detail.v);
    attrs=result.attrs.v;
    attrs.color=cnocolorspecified;
    attrs.left=alabel.absleft() - self.detail.v.absleft();
    attrs.top=alabel.abstop() - self.detail.v.abstop();
    attrs.width=alabel.getproperty_width() + chorizontalpadding;
    attrs.height=alabel.getproperty_height() + cverticalpadding;
    attrs.datafield=alabel.attrs.v.datafield;
    attrs.font.color=alabel.attrs.v.font.color;
    attrs.font.height=alabel.attrs.v.font.height;
    attrs.font.name=alabel.attrs.v.font.name;
    _SSet(alabel.attrs.v.font.style,attrs.font.style);
    attrs.zindex=alabel.attrs.v.zindex + 1;
    attrs.visibility=alabel.attrs.v.visibility;
    attrs.text="";
    result.bandindex=self.getcurrentrecord();
    result.createdomobject();
    result.setproperty_text((alabel.ishyperlink())?decodeURIComponent(alabel.getproperty_link()):decodeURIComponent(alabel.getproperty_caption()));
    return result;
  }
  function processcontrols(acontrol){    var i,edit;
    if(needsediting(acontrol)){
      acontrol.bandindex=self.getcurrentrecord();
      self.detail.v.bandindex=self.getcurrentrecord();
      edit=createinplaceedit(acontrol);
      if(self.tempcreatedcontrols == null){
        self.tempcreatedcontrols=Create_TArray();
      }
      __tarray_add(self.tempcreatedcontrols,edit);
    }else 
    if((_IS(acontrol,twebcontrol)) && needsenabling(acontrol)){
      acontrol.bandindex=self.getcurrentrecord();
      acontrol.setproperty_enabled(true);
      if(self.tempenabledcontrols == null){
        self.tempenabledcontrols=Create_TArray();
      }
      __tarray_add(self.tempenabledcontrols,acontrol);
    }
    for(i=0;i<=acontrol.childcount() - 1;i++){
      processcontrols(acontrol.childctrls.get(i));
    }
  }
  processcontrols(self.detail.v);
  if((self.tempcreatedcontrols != null) || (self.tempenabledcontrols != null)){
    if(self.fboundcontrols != null){
      self.fboundcontrols.free();
      self.fboundcontrols=null;
    }
  }
}

function form_continuousform_finalizefieldeditors(){
  var self=this;
  var i,ctrl;
  if((self.tempcreatedcontrols == null) && (self.tempenabledcontrols == null)){
    return;
  }
  if(self.tempcreatedcontrols != null){
    for(i=0;i<=self.tempcreatedcontrols.length - 1;i++){
      ctrl=self.tempcreatedcontrols[i];
      ctrl.freedom();
    }
    self.tempcreatedcontrols.length=0;
    self.tempcreatedcontrols=null;
  }
  if(self.tempenabledcontrols != null){
    for(i=0;i<=self.tempenabledcontrols.length - 1;i++){
      ctrl=self.tempenabledcontrols[i];
      ctrl.setproperty_enabled(false);
    }
    self.tempenabledcontrols.length=0;
    self.tempenabledcontrols=null;
  }
  if(self.fboundcontrols != null){
    self.fboundcontrols.free();
    self.fboundcontrols=null;
  }
}

function form_continuousform_bindcontrols(status){
  var self=this;
  var serializer,ctrl,i;
  for(i=self.getboundcontrols().fcount - 1;i>=0;i--){
    ctrl=self.getboundcontrols().get(i);
    if(!(_IS(ctrl,textlabel))){
      serializer=(self.dataset.getproperty_dbrecordserializer().data != null)?self.dataset.getproperty_dbrecordserializer().getproperty_child(ctrl.attrs.v.datafield):null;
      if(serializer != null){
        if(status == 2){
          ctrl.deserialize(serializer);
        }else 
          ctrl.serialize(serializer);
      }
    }
  }
}

function form_continuousform_showinsertband(){
  var self=this;
  self.detail.v.bandindex=__tarray_count(self.detail.v.domhandlearray.handles) - 1;
  self.detail.v.domhandle().style.visibility="visible";
  if(self.detail.v.domhandle().parentNode != null){
    self.detail.v.domhandle().parentNode.style.display="";
  }
  self.setcurrentrecord(self.detail.v.bandindex);
  self.updatenavigator();
  self.groworshrink(-1,true);
  self.recalculateplacement(true,true);
}

function form_continuousform_hideinsertband(){
  var self=this;
  self.detail.v.bandindex=__tarray_count(self.detail.v.domhandlearray.handles) - 1;
  self.detail.v.domhandle().style.visibility="hidden";
  self.setcurrentrecord(max(self.detail.v.bandindex - 1,0));
  if(self.detail.v.domhandle().parentNode != null){
    self.detail.v.domhandle().parentNode.style.display="none";
  }
  self.updatenavigator();
  self.groworshrink(-1,true);
  self.recalculateplacement(true,true);
}

function form_continuousform_getembeddedvalues(){
  var self=this;
  var fieldname,fieldvalue,i;
  self.detail.v.bandindex=self.getcurrentrecord();
  switchbandindexbyctrl(self.detail.v);
  if(self.getproperty_datamode() != 3){
    with(self.detail.v){
      for(i=0;i<=embeddedfieldcount() - 1;i++){
        fieldname=getproperty_embeddedfieldname(i);
        fieldvalue=getproperty_embeddedfieldvalue(i);
        self.dataset.getproperty_dbrecordserializer().getproperty_child(fieldname).writestring(decodeURIComponent(fieldvalue));
      }
    }
  }
}

function form_continuousform_deleterecord(){
  var self=this;
  if(self.getproperty_datamode() == 3){
    self.continuousform_cancelrecordchanges();
  }else 
  if(self.dataset != null){
    self.dataset.submitpage();
  }
}

function form_continuousform_cancelrecordchanges(){
  var self=this;
  if(self.getproperty_datamode() == 3){
    self.continuousform_hideinsertband();
  }
  self.setproperty_datamode(1);
}

function form_getproperty_datamode(){
  var self=this;

  return ((self.getproperty_datasource() != "") && (self.getproperty_viewmode() == 2))?self.fdatamode:0;
}

function form_setproperty_datamode(value){
  var self=this;
  if((value == self.fdatamode) || (self.getproperty_datasource() == "") || (self.getproperty_viewmode() != 2)){
    return;
  }
  if((_InSet(value,_ISet(false,4,2,3))) && (_InSet(self.fdatamode,_ISet(false,4,2,3)))){
    return;
  }
  switch(value){
    case 1:
    self.continuousform_finalizefieldeditors();
    break;
    case 2:
    if(self.continuousform_createserializers(3)){
      self.continuousform_initializefieldeditors();
      self.continuousform_bindcontrols(3);
    }
    self.setproperty_startingrecordindex(self.getcurrentrecord());
    break;
    case 3:
    if(self.continuousform_createserializers(2)){
      self.continuousform_showinsertband();
      self.continuousform_initializefieldeditors();
      self.continuousform_bindcontrols(2);
    }
    self.setproperty_startingrecordindex(self.getcurrentrecord());
  }
  self.fdatamode=value;
  self.detail.v.updatecurrentstyle(self.getcurrentrecord(),false);
}

function form_getproperty_currentdatapage(){
  var self=this;

  return (self.dataset != null)?self.dataset.currentdatapage:null;
}

function form_displaylistcontrols(){
  var self=this;
  var i,ctrl;
  if(self.dataset == null){
    return;
  }
  for(i=self.getboundcontrols().fcount - 1;i>=0;i--){
    ctrl=self.getboundcontrols().get(i);
    if(ctrl.islistcontrol()){
      deserealizelistctrl(ctrl,ctrl.attrs.v.datafield,self.dataset.getproperty_dbrecordserializer(),self.dataset.currentdatapage.dblist.v);
    }
  }
}

function form_create1(aparameters){
  var self=this;
  self.infilterdefine=false;
  self.childdatabinders=CreateList(null,null,Create_form,tobject_create);
  self.masterdatabinder=null;
  self.fboundcontrols=null;
  self.fcurrentrecordindex=0;
  self.fdatamode=1;
  tabstractform.prototype.create1.call(self, aparameters);
  return self;
}

function form_destroy(){
  var self=this;
  self.setproperty_datamode(1);
  if(self.tempcreatedcontrols != null){
    self.tempcreatedcontrols.length=0;
    self.tempcreatedcontrols=null;
  }
  if(self.tempenabledcontrols != null){
    self.tempenabledcontrols.length=0;
    self.tempenabledcontrols=null;
  }
  if(self.dataset != null){
    self.dataset.free();
    self.dataset=null;
  }
  self.childdatabinders.free();
  tabstractform.prototype.destroy.call(self);
}

function form_addchildbinder(achildbinder){
  var self=this;
  self.childdatabinders.add(achildbinder);
  achildbinder.masterdatabinder=self;
}

function form_setstate(updatechildbinders){
  var self=this;
  var ctrl,i,serializer,p=Init_data(true);
  var childdatabinder;
  self.updatenavigator();
  if(self.getproperty_viewmode() == 1){
    return;
  }
  if(self.dataset == null){
    return;
  }
  p.v=self.dataset.currentdatapage.dblist.v.currentitem();
  if(p.v != null){
    self.dataset.getproperty_dbrecordserializer().bind(p);
  }else 
    self.dataset.getproperty_dbrecordserializer().data=null;
  for(i=self.getboundcontrols().fcount - 1;i>=0;i--){
    ctrl=self.getboundcontrols().get(i);
    if(self.getproperty_viewmode() == 0){
      serializer=(self.dataset.getproperty_dbrecordserializer().data != null)?self.dataset.getproperty_dbrecordserializer().getproperty_child(ctrl.attrs.v.datafield):null;
      if(serializer != null){
        ctrl.deserialize(serializer);
      }
    }
    ctrl.setproperty_enabled(!ctrl.getproperty_serverdisabled() && (self.dataset.getproperty_dbrecordserializer().data != null));
  }
  if(updatechildbinders){
    for(i=self.childdatabinders.fcount - 1;i>=0;i--){
      childdatabinder=self.childdatabinders.get(i);
      childdatabinder.getstate();
      childdatabinder.requestpage(0,0);
    }
  }
}

function form_getdatachanged(restorestate,silent){
  var self=this;
  var result;
  var ctrl,i,serializer,savevalue;
  function needserialize(ctrl){

    switch(self.getproperty_viewmode()){
      case 0:;
      case 2:
      return (ctrl.attrs.v.datafield != "") && !((_IS(ctrl,textlabel)));
    default:
      return false;
    }
  }
  result=false;
  if((self.dataset == null) || (self.dataset.getproperty_dbrecordserializer() == null) || (self.dataset.getproperty_dbrecordserializer().data == null)){
    return result;
  }
  for(i=self.getboundcontrols().fcount - 1;i>=0;i--){
    ctrl=self.getboundcontrols().get(i);
    if(needserialize(ctrl)){
      serializer=self.dataset.getproperty_dbrecordserializer().getproperty_child(ctrl.attrs.v.datafield);
      if(serializer != null){
        savevalue=serializer.readstring();
        ctrl.serialize(serializer);
        result=result || (savevalue != serializer.readstring());
        if(restorestate){
          serializer.writestring(savevalue);
        }
      }else 
      if(!silent){
        showmessage(ctrl.attrs.v.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;
  var ischanged;
  if(self.getproperty_viewmode() == 1){
    return true;
  }
  result=false;
  if(self.dataset == null){
    return result;
  }
  if(self.dataset.getproperty_dbrecordserializer() == null){
    return result;
  }
  if(self.dataset.getproperty_dbrecordserializer().data == null){
    return true;
  }
  if(!self.dobeforedatachange(2)){
    return result;
  }
  try{
    if(self.getproperty_viewmode() == 2){
      self.continuousform_getembeddedvalues();
    }
    ischanged=self.getdatachanged(false,false);
    if(ischanged){
      self.dataset.markrecord(0);
    }
    result=true;
    if(ischanged){
      self.doafterdatachange(2);
    }
  }catch(ExceptObject){
    result=false;
  }
  return result;
}

function form_adddataboundctrltolist(p){
  var self=this;
  var ctrl,i;
  if(_IS(p,twebcontrol)){
    if(p.attrs.v.datafield != ""){
      self.fboundcontrols.add(p);
    }
    for(i=p.childcount() - 1;i>=0;i--){
      ctrl=p.childctrls.get(i);
      self.adddataboundctrltolist(ctrl);
    }
  }
}

function form_getboundcontrols(){
  var self=this;

  var i;
  if(self.fboundcontrols == null){
    self.fboundcontrols=CreateList(null,null,Create_twebcontrol,tobject_create);
    for(i=self.childcount() - 1;i>=0;i--){
      self.adddataboundctrltolist(self.childctrls.get(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_getcurrentrecord(){
  var self=this;

  if(_InSet(self.getproperty_viewmode(),_ISet(false,3,1,2))){
    return self.fcurrentrecordindex;
  }else 
  return (self.dataset != null)?self.dataset.getcurrentrecord():-1;
}

function form_setcurrentrecord(i){
  var self=this;
  var idx;
  if(_InSet(self.getproperty_viewmode(),_ISet(false,3,1,2))){
    idx=self.fcurrentrecordindex;
    self.fcurrentrecordindex=i;
    self.updatenavigator();
    if(self.getproperty_viewmode() == 2){
      if(idx >= 0){
        self.detail.v.updatecurrentstyle(idx,true);
      }
      self.detail.v.updatecurrentstyle(self.fcurrentrecordindex,true);
    }
  }else 
  if(self.dataset != null){
    self.dataset.setcurrentrecord(i);
  }
}

function form_getpagerecordcount(){
  var self=this;
  var result;
  if(_InSet(self.getproperty_viewmode(),_ISet(false,3,1,2))){
    result=self.detail.v.fasthandles.length;
    if((self.getproperty_viewmode() == 2) && (result > 0)){
      return result - 1;
    }
  }else 
  return (self.dataset != null)?self.dataset.currentdatapage.dblist.v.fcount:0;
  return result;
}

function form_getproperty_countrecordsexactly(){
  var self=this;
  var result;
  var i,ctrl;
  result=true;
  if((self.getproperty_pagesize() == -1) || self.generatedatruntime){
    return result;
  }
  for(i=0;i<=self.navigationctrls.fcount - 1;i++){
    ctrl=self.navigationctrls.get(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_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);
  }else {
    self.setcurrentrecord(rno);
    self.setstate(true);
  }
}

function form_getproperty_datasource(){
  var self=this;

  return (self.dataset != null)?self.dataset.datasource:"";
}

function form_setproperty_datasource(s){
  var self=this;
  if((s == "") && (self.dataset == null)){
    return;
  }
  if((s != "") && (self.dataset != null) && stringsequal(self.dataset.datasource,s)){
    return;
  }
  if(self.dataset != null){
    self.dataset.free();
    self.dataset=null;
  }
  if(_InSet(self.getproperty_viewmode(),_ISet(false,3,0,2))){
    if(s != ""){
      self.dataset=Create_tdataset().create(self,s);
    }
  }
}

function form_highlightnavbtn(btn,highlight){

  var result;
  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,ctl;
  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,s,pcnt,rcnt,editctl;
  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_masterdatafield(){
  var self=this;
  var result;
  result="";
  if(self.isrootform()){
    return result;
  }
  return self.ownersubform.subformattrs.masterdatafield;
}

function form_childdatafield(){
  var self=this;
  var result;
  result="";
  result="";
  if(self.isrootform()){
    return result;
  }
  return self.ownersubform.subformattrs.childdatafield;
}

function form_dobeforedbnavigate(action){
  var self=this;
  var result;
  var cancel=Init_data(true);
  result=false;
  if(self.infilterdefine){
    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;
  if(assigned(self.onafterdbnavigate)){
    self.onafterdbnavigate._o[self.onafterdbnavigate._p](action,false);
  }
}

function form_dobeforedatachange(action){
  var self=this;

  var cancel=Init_data(true);
  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;
  if(assigned(self.onafterdatachange)){
    self.onafterdatachange._o[self.onafterdatachange._p](action,false);
  }
}

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"),-1);
}

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_reopenwithparameters(aparameters){
  var self=this;
  var paramlist,value;
  tabstractform.prototype.reopenwithparameters.call(self, aparameters);
  if(self.getproperty_viewmode() == 2){
    paramlist=Create_tparameters().create();
    try{
      paramlist.addlist(aparameters);
      value=paramlist.getparamvalue("StartingRecordIndex");
      if(value != ""){
        self.setcurrentrecord(max(min(strtointdef(value,0),self.getpagerecordcount() - 1),0));
      }
    }finally{
      paramlist.free();
    }
  }
}

function form_initializeafteropen(){
  var self=this;
  if(self.isdetailsform()){
    if(_IS(self.getproperty_ownerform(),form)){
      self.getproperty_ownerform().addchildbinder(self);
    }
  }
  switch(self.getproperty_viewmode()){
    case 1:
    self.setcurrentrecord(0);
    self.updatenavigator();
    break;
    case 2:
    self.setcurrentrecord(max(min(self.getproperty_startingrecordindex(),self.getpagerecordcount() - 1),0));
    self.updatenavigator();
    self.detail.v.domhandlearray.attacheventhandler("click",getMethodPointer(self,self.continuousform_handleonclick));
    self.domhandlearray.attacheventhandler("keydown",getMethodPointer(self,self.continuousform_handleonkeydown));
  }
}

function form_updateparametersfromhiddenhtmlfields(){
  var self=this;
  var h;
  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.dataset.currentdatapage == null){
    if(!self.isdetailsform() || (_InSet(self.masterdatabinder.fformreadystate,_ISet(false,6,3,4)))){
      formopener.resetformreadytimer();
      self.requestpage(0,0);
    }else 
    if(formopener.activate){
      formopener.setformreadytimer(0);
    }else 
      formopener.setformreadytimer(200);
  }
}

function tformopener_create(aformclassname,aforminstancename,atargetsubform,atargetbandindex,aopenformparameters,aactivate){
  var self=this;
  function getpagenameandopenformid(){    var paramlist,param;
    paramlist=Create_tparameters().create();
    paramlist.addlist(aopenformparameters);
    self.currentpagename=paramlist.getparamvalue(cpagenameparam);
    param=paramlist.getparambyname(copenformbatchidparam);
    self.batchid=(param != null)?param.value:xapp.getuniqueopenformbatchid();
    paramlist.free();
  }
  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.add(self);
  self.targetsubform.beginbusy();
  getpagenameandopenformid();
  if(catalog().getproperty_dynamicformtype(aformclassname) == null){
    xapp.loadmodule(self.formclassname,getMethodPointer(self,self.createform));
  }else 
    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;
    self.newform.free();
    self.newform=null;
  }
  if(self.xmlhttprequest != null){
    self.xmlhttprequest.free();
    self.xmlhttprequest=null;
  }
  if(self.onreadytimer != null){
    self.onreadytimer.free();
    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_handleformopenerror(errormsg){
  var self=this;
  var handled=Init_data(true);
  handled.v=false;
  xapp.handleformopenerror(errormsg,handled);
  if(!handled.v){
    self.targetsubform.domhandle().innerHTML=errormsg;
  }
  self.targetsubform.endbusy(self.newform);
  self.targetsubform.setproperty_activeforms(self.targetbandindex,null);
  if(assigned(self.newform)){
    self.newform.free();
    self.newform=null;
  }
  self.free();
}

function tformopener_createform(){
  var self=this;
  var paramlist,item,type_;
  try{
    item=catalog().getproperty_dynamicformtype(self.formclassname);
    if(item != null){
      type_=item.type_;
      self.newform=eval("Create_"+type_.prototype.zb)().create1(self.openformparameters);
      self.newform.generatedatruntime=true;
    }else 
      self.newform=catalog().createmoduleform(self.formclassname,self.openformparameters);
    if(!assigned(self.newform)){
      self.handleformopenerror('<div style="width:500px;font-family:arial;color:silver">' + "  <h3>" + "     Error in Opening Form '" + self.formclassname + "'!" + "     <hr width=100% size=1 color=silver>" + "  </h3>" + "  <span>" + "    Cannot create '" + self.formclassname + "' form object!<br>" + "    Parameters: " + self.openformparameters + "<br>" + "  </span>" + "</div>");
      return;
    }
    self.newform.formopener=self;
    self.newform.ownersubform=self.targetsubform;
    self.newform.finstancename=self.forminstancename;
    self.newform.bandindex=self.targetbandindex;
  }catch(ExceptObject){
    self.free();
    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.newform.generatedatruntime){
    self.xmlhttprequest=Create_txmlhttprequestwrapper().create();
    self.xmlhttprequest.threadid=getcurrentthreadid();
    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();
  paramlist.free();
}

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,subfrm;
  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.get(i));
    }
}

function tformopener_opensiblingsubformsinrepeatedbands(){
  var self=this;
  var i,defaultclassref,defaultinstanceref;
  if(self.newform.isrootform()){
    return;
  }
  if(self.newform.ownersubform.fasthandles.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=fasthandles.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,s;
  h=self.newform.cloneownersubformdomhandle(self.targetbandindex);
  if(!isScriptorApp && !self.newform.generatedatruntime){
    s=self.xmlhttprequest.getproperty_responsetext();
    if(__string_startswith(s,cserverexceptionmarker)){
      self.handleformopenerror(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.add(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;
  var i;
  result=true;
  for(i=c.formopeners.fcount - 1;i>=0;i--){
    if((c.formopeners.get(i) == null) || (formopener == null) || (c.formopeners.get(i) != formopener)){
      if(c.formopeners.get(i).activate){
        return result;
      }
    }
  }
  return false;
}

function tformopener_subformsareloaded(c){
  var self=this;
  var result;
  var i;
  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.get(i))){
        return result;
      }
    }
  return true;
}

function tformopener_checkformready(){
  var self=this;
  var readyflag=Init_data(true);
  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,3,1,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);
    }
    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.add(self.newform);
          self.successfullycompleted=true;
          resumethread(getcurrentthreadid());
        }finally{
          self.free();
        }
      }else 
      if(self.activate){
        self.setformreadytimer(0);
      }else 
        self.setformreadytimer(200);
    }
  }
}

function doopenform(formref,target,openformparameters){  var targetforminstancename,targetsubformcontainer,targetbandindex,targetsubform,frm,arr;
  function handlespecialcases(formref,target,openformparameters){
    var result;
    var paramlist,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");
      }
      paramlist.free();
      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;
// (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 joinStringList   (l){return l.fastMembers.join("")}
function getMSFrame       (w,fn){return w.frames[fn]}
function getModalDlgArg   (a1,a2){var a = new Object(); a.parent=a1; a.form=a2; return a}
function createRegExp     (s,f){return new RegExp(s,f)}
function defined          (c){return typeof(c)!="undefined";}
function moveHistory      (w,i){w.history.go(i);}
function debuggerBreak    (){debugger}
function createHash       (){var r = {}; return r;}

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 createJArray(){
   var a = new Array ();
   a.add = function(s){this[this.length]=s};
   a.clear = function(){this.length=0};
   return a
}

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;

                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.wrapper))
                   if(assigned(source.wrapper.bandindex))
                      if(source.id.toLowerCase().search('maindiv')==-1)
                        source.wrapper.bandindex=bi;

                //firefox
                if(arguments.length>0){
                   if(arguments[0]!=null)
                      arguments[0].bandindex=bi;
                   return m.apply(o,arguments);
                }
                else
                //IE
                if (assigned(window.event)){
                   window.event.bandindex=bi;
                   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'  )!=-1) this.platform = 'WIN'; else
    if (UA.indexOf ('MAC'  )!=-1) this.platform = 'MAC'; else
    if (UA.indexOf ('LINUX')!=-1) 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');
}
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.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 Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
  var rest = this.slice((to || from) + 1 || this.length);
  this.length = from < 0 ? this.length + from : from;
  return this.push.apply(this, rest);
};

// 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"
	]
};
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=new Object();
    var q=p;
  }
  q.defaultmode=null;
  q.defaultformat=null;
  q.converttoutctime=null;
  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_length(__self){

  return __self.length;
}

function __string_substring(__self,astartindex,alength){

  return __self.substring(astartindex - 1,astartindex - 1 + alength);
}

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_indexof(__self,astring){
  var result;
  result=0;
  if(astring != ""){
    return __self.indexOf(astring,0) + 1;
  }
  return result;
}

function __string_tointeger(__self){

  return ___integer_fromstring(__self);
}

function _Chr(Code){  
      return String.fromCharCode(Code);
  
}

function __integer_tochar(__self){

  return _Chr(__self);
}

function __integer_tostring(__self){

  return "" + __self;
}

function ___integer_fromstring(astring){

  var temp=Init_data(true);
  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;
  var temp;
  temp=parseInt(astring,10);
  result=!isNaN(temp);
  if(result){
    aresult.v=temp;
  }
  return result;
}

function __tjdate_day(__self){
  var result;
  with(__self){
    result=__self.getDate();
  }
  return result;
}

function __tjdate_month(__self){
  var result;
  with(__self){
    result=__self.getMonth();
  }
  return result;
}

function __tjdate_year(__self){
  var result;
  with(__self){
    result=__self.getFullYear();
  }
  return result;
}

_lddmods["SystemHelperMethods"]=true;
var dom_node_element_node;dom_node_element_node=1;
_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.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=null;
  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;
  sides=Init_thtmlbordersides(false,sides);
  var lighter,darker,cl,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";
  }
  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"));
                       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=new Object();
    var q=p;
  }
  q.saturation=null;
  q.hue=null;
  q.lum=null;
  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=new Object();
    var q=p;
  }
  q.red=null;
  q.green=null;
  q.blue=null;
  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 booltostr(b){

  return (b)?"true":"false";
}

function strtobool(s){

  return stringsequal(s,"True");
}

function inttostr(i){

  return "" + i;
}

function floattostr(i){

  return "" + i;
}

function showmessage(message){  alert(message);
}

function confirmaction(msg){

  return window.confirm(msg);
}

function stringsequal(s1,s2){
  var result;
  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 replacestring(s,fromstr,tostr){
  var result;
  try{
    result=s.replace(createRegExp(fromstr,"g"),tostr);
  }catch(ExceptObject){
    result=s;
  }
  return result;
}

function pos(s1,s2){
  var result;
  result=-1;
  try{
    if(assigned(s2.indexOf)){
      result=s2.indexOf(s1,0) + 1;
    }
  }catch(e){
  }
  return result;
}

function backpos(s1,s2){
  var result;
  result=-1;
  try{
    if(assigned(s2.lastIndexOf)){
      result=s2.lastIndexOf(s1) + 1;
    }
  }catch(e){
  }
  return result;
}

function jpos(s1,s2,startinx){
  var result;
  result=-1;
  try{
    if(assigned(s2.indexOf)){
      result=s2.indexOf(s1,startinx) + 1;
    }
  }catch(e){
  }
  return result;
}

function copy(s,inx,count){
  var result;
  result=s;
  try{
    if(assigned(s.slice)){
      result=s.slice(inx - 1,inx - 1 + count);
    }
  }catch(e){
  }
  return result;
}

function delete_(s,inx,count){  try{
    if(assigned(s.v.slice)){
      s.v=s.v.slice(0,inx - 1) + s.v.slice(inx - 1 + count,s.v.length);
    }
  }catch(e){
  }
}

function strtoint(s){
  var result;
  result=parseInt(s,10);
  if(isNaN(result)){
    throw Create_texception().create("Error invalid number:" + s);
  }
  return result;
}

function strtointdef(s,adefault){
  var result;
  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 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){

  switch(d){
    case 0:
    if(format == 1){
      return "Sun";
    }else 
    return (format == 0)?"Sunday":"S";
    case 1:
    if(format == 1){
      return "Mon";
    }else 
    return (format == 0)?"Monday":"M";
    case 2:
    if(format == 1){
      return "Tue";
    }else 
    return (format == 0)?"Tuesday":"T";
    case 3:
    if(format == 1){
      return "Wed";
    }else 
    return (format == 0)?"Wednesday":"W";
    case 4:
    if(format == 1){
      return "Thu";
    }else 
    return (format == 0)?"Thursday":"T";
    case 5:
    if(format == 1){
      return "Fri";
    }else 
    return (format == 0)?"Friday":"F";
    case 6:
    if(format == 1){
      return "Sat";
    }else 
    return (format == 0)?"Saturday":"S";
  default:
    return "";
  }
}

function getmonthstr(m,format){

  var isshort;
  isshort=(format == 2) || (format == 3);
  switch(m){
    case 1:
    return (isshort)?"Jan":"January";
    case 2:
    return (isshort)?"Feb":"February";
    case 3:
    return (isshort)?"Mar":"March";
    case 4:
    return (isshort)?"Apr":"April";
    case 5:
    return (isshort)?"May":"May";
    case 6:
    return (isshort)?"Jun":"June";
    case 7:
    return (isshort)?"Jul":"July";
    case 8:
    return (isshort)?"Aug":"August";
    case 9:
    return (isshort)?"Sep":"September";
    case 10:
    return (isshort)?"Oct":"October";
    case 11:
    return (isshort)?"Nov":"November";
    case 12:
    return (isshort)?"Dec":"December";
  default:
    return "";
  }
}

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 encodedate(y,m,d){

  return encodedatetime(y,m,d,0,0,0,0);
}

function encodetime(h,mt,s,ms){

  return encodedatetime(0,0,0,h,mt,s,ms);
}

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 dayofweek(datetime){

  return (datetime == nildatetime)?0:datetime.getDay();
}

function utcdatetimetolocal(datetime){
  var result;
  var jdt,y,m,d,h,u,s,i;
  if(datetime == nildatetime){
    return nildatetime;
  }
  y=year(datetime);
  m=month(datetime);
  d=day(datetime);
  h=hour(datetime);
  u=minute(datetime);
  s=second(datetime);
  i=millisecond(datetime);
  jdt=CreateDateTimeObj();
  if(y != -1){
    jdt.setUTCFullYear(y);
  }
  if(m != -1){
    jdt.setUTCMonth(m - 1);
  }
  if(d != -1){
    jdt.setUTCDate(d);
  }
  if(h != -1){
    jdt.setUTCHours(h);
  }
  if(u != -1){
    jdt.setUTCMinutes(u);
  }
  if(s != -1){
    jdt.setUTCSeconds(s);
  }
  if(i != -1){
    jdt.setUTCMilliseconds(i);
  }
  if((y == -1) && (m == -1) && (d == -1)){
    result=encodetime(jdt.getHours(),jdt.getMinutes(),jdt.getSeconds(),jdt.getMilliseconds());
  }else 
  result=((h == -1) && (u == -1) && (s == -1) && (i == -1))?encodedate(jdt.getFullYear(),jdt.getMonth() + 1,jdt.getDate()):encodedatetime(jdt.getFullYear(),jdt.getMonth() + 1,jdt.getDate(),jdt.getHours(),jdt.getMinutes(),jdt.getSeconds(),jdt.getMilliseconds());
  jdt=null;
  return result;
}

function localdatetimetoutc(datetime){
  var result;
  var jdt,y,m,d,h,u,s,i;
  if(datetime == nildatetime){
    return nildatetime;
  }
  y=year(datetime);
  m=month(datetime);
  d=day(datetime);
  h=hour(datetime);
  u=minute(datetime);
  s=second(datetime);
  i=millisecond(datetime);
  jdt=CreateDateTimeObj();
  if(y != -1){
    jdt.setYear(y);
  }
  if(m != -1){
    jdt.setMonth(m - 1);
  }
  if(d != -1){
    jdt.setDate(d);
  }
  if(h != -1){
    jdt.setHours(h);
  }
  if(u != -1){
    jdt.setMinutes(u);
  }
  if(s != -1){
    jdt.setSeconds(s);
  }
  if(i != -1){
    jdt.setMilliseconds(i);
  }
  if((y == -1) && (m == -1) && (d == -1)){
    result=encodetime(jdt.getUTCHours(),jdt.getUTCMinutes(),jdt.getUTCSeconds(),jdt.getUTCMilliseconds());
  }else 
  result=((h == -1) && (u == -1) && (s == -1) && (i == -1))?encodedate(jdt.getUTCFullYear(),jdt.getUTCMonth() + 1,jdt.getUTCDate()):encodedatetime(jdt.getUTCFullYear(),jdt.getUTCMonth() + 1,jdt.getUTCDate(),jdt.getUTCHours(),jdt.getUTCMinutes(),jdt.getUTCSeconds(),jdt.getUTCMilliseconds());
  jdt=null;
  return result;
}

function datetimetostring(datetime,format,mode,converttolocaltime){
  var result;
  var y,m,d,h,u,s,ampm,date,time;
  function inttotimestr(k){
    var result;
    result=inttostr(k);
    if(lEngTH(result) == 1){
      return "0" + result;
    }
    return result;
  }
  if(datetime == nildatetime){
    return "Invalid Date or Time";
  }
  result="";
  date="";
  time="";
  if(converttolocaltime){
    datetime=utcdatetimetolocal(datetime);
  }
  if(_InSet(mode,_ISet(false,3,1,0))){
    y=year(datetime);
    m=month(datetime);
    d=day(datetime);
    if(y != -1){
      switch(format){
        case 0:
        date+=getweekdaystr(dayofweek(datetime),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,3,2,0))){
    h=hour(datetime);
    u=minute(datetime);
    s=second(datetime);
    time="";
    if(h != -1){
      if(_InSet(format,_ISet(false,4,0,1))){
        ampm="AM";
        if(h >= 12){
          ampm="PM";
          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 stringtodatetime(s,format,mode,converttoutctime){
  var result;
  s=Init_data(true,s);
  var k;
  function preprocessdatetimestring(){    var s1,s2,i;
    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();
  result.setFullYear(1970,0,1);
  result.setTime(0);
  result.setDate(floor(k / (1000 * 60 * 60 * 24)));
  result.setTime(k);
  if(converttoutctime){
    return localdatetimetoutc(result);
  }
  return result;
}

function now(){

  return CreateDateTimeObj();
}

function gettimezoneoffset(){
  var result;
  var jdt;
  jdt=CreateDateTimeObj();
  result=jdt.getTimezoneOffset();
  jdt=null;
  return result;
}

function isleapyear(y){

  return (((y % 4) == 0) && ((y % 100) != 0)) || ((y % 400) == 0);
}

function daysofmonth(date){
  var result;
  result=0;
  if(date == nildatetime){
    return result;
  }
  switch(month(date)){
    case 1:;
    case 3:;
    case 5:;
    case 7:;
    case 8:;
    case 10:;
    case 12:
    return 31;
    case 4:;
    case 6:;
    case 9:;
    case 11:
    return 30;
    case 2:
    return (isleapyear(year(date)))?29:28;
  }
  return result;
}

function nextyear(date){

  return encodedatetime(year(date) + 1,month(date),day(date),hour(date),minute(date),second(date),millisecond(date));
}

function previousyear(date){

  return encodedatetime(year(date) - 1,month(date),day(date),hour(date),minute(date),second(date),millisecond(date));
}

function nextmonth(date){

  var m,y;
  if(date == nildatetime){
    return nildatetime;
  }
  y=year(date);
  m=month(date) + 1;
  if(m > 12){
    m=1;
    y++;
  }
  return encodedatetime(y,m,day(date),hour(date),minute(date),second(date),millisecond(date));
}

function prevmonth(date){

  var m,y;
  if(date == nildatetime){
    return nildatetime;
  }
  y=year(date);
  m=month(date) - 1;
  if(m == 0){
    m=12;
    y--;
  }
  return encodedatetime(y,m,day(date),hour(date),minute(date),second(date),millisecond(date));
}

function timetoxml(dt){

  if(dt == nildatetime){
    return "0";
  }
  return inttostrext(hour(dt),2) + ":" + inttostrext(minute(dt),2) + ":" + inttostrext(second(dt),2) + "." + inttostrext(millisecond(dt),3);
}

function datetoxml(dt){

  if(dt == nildatetime){
    return "0";
  }
  return inttostrext(year(dt),4) + "-" + inttostrext(month(dt),2) + "-" + inttostrext(day(dt),2);
}

function datetimetoxml(dt){

  if(dt == nildatetime){
    return "0";
  }
  return datetoxml(dt) + "T" + timetoxml(dt);
}

function xmltodate(xml){
  var result;
  xml=Init_data(true,xml);
  var y,m,d;
  if(lEngTH(xml.v) > 0){
    try{
      y=strtoint(parsech(xml,"-"));
      m=strtoint(parsech(xml,"-"));
      d=strtoint(xml.v);
      result=encodedate(y,m,d);
    }catch(ExceptObject){
      result=now();
    }
  }else 
    return now();
  return result;
}

function xmltotime(xml){
  var result;
  xml=Init_data(true,xml);
  var h,m,s,ms,digits=Init_data(true);
  if(lEngTH(xml.v) > 0){
    try{
      h=strtoint(parsech(xml,":"));
      m=strtoint(parsech(xml,":"));
      s=strtoint(parsech(xml,"."));
      digits.v=0;
      ms=0;
      while((lEngTH(xml.v) > 0) && (_InSet(xml.v.charAt(1-1),_ISet(false,256,"0")))){
        ms=(ms * 10) + (strtoint(xml.v.charAt(1-1)) - strtoint("0"));
        delete_(xml,1,1);
        inc(digits);
      }
      while(digits.v > 3){
        ms=((ms / 10)|0);
        dec(digits);
      }
      while(digits.v < 3){
        ms*=10;
        inc(digits);
      }
      result=encodetime(h,m,s,ms);
    }catch(ExceptObject){
      result=now();
    }
  }else 
    return now();
  return result;
}

function xmltodatetime(xml){
  var result;
  xml=Init_data(true,xml);
  var s,s1;
  s1=xml.v;
  s=parsech(xml,"T");
  if(pos("-",s) > 0){
    result=xmltodate(s);
    if(lEngTH(xml.v) > 0){
      with(xmltotime(xml.v)){
        result.setHours(getHours());
        result.setMinutes(getMinutes());
        result.setSeconds(getSeconds());
        result.setMilliseconds(getMilliseconds());
      }
    }
  }else 
    return xmltotime(s);
  return result;
}

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 inttostrext(i,s){
  var result;
  result=inttostr(i);
  while(lEngTH(result) < s){
    result="0" + result;
  }
  return result;
}

function parsech(s,delim){
  var result;
  var p;
  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 extractname(qualifiedname){

  qualifiedname=Init_data(true,qualifiedname);
  var ns;
  ns=parsech(qualifiedname,":");
  return (qualifiedname.v == "")?ns:qualifiedname.v;
}

function extractext(qualifiedname){

  var p;
  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;
    var temp=Init_data(true);
    temp.v=color;
    delete_(temp,1,1);
    result=hextoint(temp.v);
    if(isNaN(result)){
      return def;
    }
    return result;
  }
  function htmltocolor(color,def){
    var result;
    var temp=Init_data(true);
    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;
  result=a;
  if(b > result){
    result=b;
  }
  if(c > result){
    return c;
  }
  return result;
}

function minimum(a,b,c){
  var result;
  result=a;
  if(b < result){
    result=b;
  }
  if(c < result){
    return c;
  }
  return result;
}

function valore(n1,n2,hue){
  var result;
  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,c2,c3,delta,kmin,kmax;
  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,c2,c3,m1,m2;
  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,domain,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,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="";
  for(i=parameters.items.fcount - 1;i>=0;i--){
    if(result != ""){
      result+="&";
    }
    result+=parameters.items.get(i).name + "=" + encodeURIComponent(parameters.items.get(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;
  try{
    if(l == null){
      return;
    }
    for(i=l.fcount - 1;i>=0;i--){
      if(l.get(i) != null){
        try{
          l.get(i).free();
        }catch(e){
        }
        l.put(i,null);
      }
    }
    l.clear();
    l.free();
  }catch(e){
  }
}

function strtoxmldocument(xmlstring){
  var result;
  var parser,doc;
  function CreateParser(){    
            return new DOMParser();
        
  }
  result=null;
  if(bRoWsEr.engineid == "MS"){
    doc=createactivex("Microsoft.XMLDOM");
    doc.async="false";
    if(doc.loadXML(xmlstring)){
      result=doc;
    }
  }else {
    parser=CreateParser();
    result=parser.parseFromString(xmlstring,"text/xml");
    if(stringsequal(result.firstChild.nodeName,"parsererror")){
      result=null;
    }
  }
  if(result == null){
    throw Create_texception().create("Can not load xml string.");
  }
  return result;
}

function computeposition(view,element,x,y){  var node,style,offset,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.scrollTop)
                      y += document.documentElement.scrollTop;
                    else
                    if (document.body.scrollTop)
                      y += document.body.scrollTop;
                    return [x, y];
                }
                catch(e)
                {
                }
                return null;
            }
        
  }
  function getstyle(){
    var result;
    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);
  while(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;
  while(node != null){
    x.v-=node.scrollLeft;
    y.v-=node.scrollTop;
    node=node.offsetParent;
  }
}

function getelementabsoluteleft(element){

  var x=Init_data(true);
  var y=Init_data(true);
  computeposition(document.defaultView,element,x,y);
  return x.v;
}

function getelementabsolutetop(element){

  var x=Init_data(true);
  var y=Init_data(true);
  computeposition(document.defaultView,element,x,y);
  return y.v;
}

function encodeparameter(s){
  var result;
  var i;
  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,len;
  result="";
  i=1;
  len=lEngTH(s);
  while(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;
}

function formatdatetime(format,dt){

  return jsFormatDateTime(dt,format);
}

_lddmods["SystemUtilities"]=true;
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);
}

function OpenDataForm(target,parameters){  doopendataform("TDataForm",target,parameters);
}

_lddmods["SystemActions"]=true;
function webmethod(){}
function Register_webmethod(){
  if(IsRegisteredwebmethod)return;
  Register_tsoapclient();
  var p=new tsoapclient();
  p.zb="webmethod";
  p.zc=webmethod;
  p.ParentClass=tsoapclient;
  p.create=webmethod_create;
  webmethod.prototype=p;
  IsRegisteredwebmethod=true;
}
function Create_webmethod(p){
  Register_webmethod();
  if(p==void(0))var p=new webmethod();
  p=Create_tsoapclient(p);
  p.zb="webmethod";
  return p
}

function webmethod_create(amethodname){
  var self=this;
  tsoapclient.prototype.create.call(self, amethodname);
  return self;
}

_lddmods["SystemWebMethod"]=true;
function tdataform(){}
function Register_tdataform(){
  if(IsRegisteredtdataform)return;
  Register_form();
  var p=new form();
  p.zb="tdataform";
  p.zc=tdataform;
  p.ParentClass=form;
  p.getstate=tdataform_getstate;
  p.getproperty_showsysfields=tdataform_getproperty_showsysfields;
  p.getproperty_canedit=tdataform_getproperty_canedit;
  p.editctrlclick=tdataform_editctrlclick;
  p.primaryclick=tdataform_primaryclick;
  p.colheaderclick=tdataform_colheaderclick;
  p.rellinkclick=tdataform_rellinkclick;
  p.tblheaderclick=tdataform_tblheaderclick;
  p.lookupclick=tdataform_lookupclick;
  p.htmltable=tdataform_htmltable;
  p.createheaderctrls=tdataform_createheaderctrls;
  p.createeditctrls=tdataform_createeditctrls;
  p.createnavigationctrls=tdataform_createnavigationctrls;
  p.setproperty_width=tdataform_setproperty_width;
  p.handle_oncreate=tdataform_handle_oncreate;
  p.handle_onformready=tdataform_handle_onformready;
  p.handle_onrefreshreturn=tdataform_handle_onrefreshreturn;
  p.handle_lookupcombochange=tdataform_handle_lookupcombochange;
  p.rendersinglemodehtml=tdataform_rendersinglemodehtml;
  p.rendercontenthtml=tdataform_rendercontenthtml;
  p.assignevents=tdataform_assignevents;
  p.fillcombobox=tdataform_fillcombobox;
  p.getcomboboxdata=tdataform_getcomboboxdata;
  p.getfielddata=tdataform_getfielddata;
  p.getprimarycell=tdataform_getprimarycell;
  p.sortpagebycell=tdataform_sortpagebycell;
  p.swaptablerows=tdataform_swaptablerows;
  p.quicksortcell=tdataform_quicksortcell;
  p.comparecells=tdataform_comparecells;
  p.getfieldcount=tdataform_getfieldcount;
  p.getlookupvalues=tdataform_getlookupvalues;
  p.processlookupvalues=tdataform_processlookupvalues;
  p.createrelationshipsubforms=tdataform_createrelationshipsubforms;
  p.encodesourcename=tdataform_encodesourcename;
  p.getproperty_datasource=tdataform_getproperty_datasource;
  p.setproperty_datasource=tdataform_setproperty_datasource;
  p.create1=tdataform_create1;
  p.createdomobject=tdataform_createdomobject;
  p.setupformfromdfm=tdataform_setupformfromdfm;
  p.setupcontrolevents=tdataform_setupcontrolevents;
  p.getformhtml=tdataform_getformhtml;
  p.createformcontrols=tdataform_createformcontrols;
  p.checkdataformready=tdataform_checkdataformready;
  p.updatenavigator=tdataform_updatenavigator;
  tdataform.prototype=p;
  IsRegisteredtdataform=true;
}
function Create_tdataform(p){
  Register_tdataform();
  if(p==void(0))var p=new tdataform();
  p=Create_form(p);
  p.zb="tdataform";
  p.targetbindex=null;
  p.ftable=null;
  p.ftype=null;
  p.fieldcount=null;
  p.navigatorcontainer=null;
  p.editcontainer=null;
  p.relationshipsfcontainer=null;
  p.dataclassinfo=null;
  return p
}

function tdataformpopup(){}
function Register_tdataformpopup(){
  if(IsRegisteredtdataformpopup)return;
  Register_twebpopupcontrol();
  var p=new twebpopupcontrol();
  p.zb="tdataformpopup";
  p.zc=tdataformpopup;
  p.ParentClass=twebpopupcontrol;
  p.create=tdataformpopup_create;
  p.destroy=tdataformpopup_destroy;
  p.getcontrolhtml=tdataformpopup_getcontrolhtml;
  p.handleclick=tdataformpopup_handleclick;
  p.run=tdataformpopup_run;
  p.menuopendataform=tdataformpopup_menuopendataform;
  p.menuchangedatasource=tdataformpopup_menuchangedatasource;
  tdataformpopup.prototype=p;
  IsRegisteredtdataformpopup=true;
}
function Create_tdataformpopup(p){
  Register_tdataformpopup();
  if(p==void(0))var p=new tdataformpopup();
  p=Create_twebpopupcontrol(p);
  p.zb="tdataformpopup";
  p.ctrlhandle=null;
  p.tablelist=null;
  p.forminst=null;
  return p
}

var dataformregistered=false;
function setclass(el,val){  el.setAttribute("class",val);
  el.setAttribute("className",val);
}

function getclass(el){

  return (bRoWsEr.engineid == "MS")?el.getAttribute("className"):el.getAttribute("class");
}

function getthemedcolor(color,def){

  return resolvethemedcolorvalue("`" + color,def);
}

function ccontrollight(){

  return getthemedcolor("Colors.Color3.0",0xffffff);
}

function cborder(){

  return getthemedcolor("Colors.Color3.2",0x000000);
}

function cheaderfont(){

  return getthemedcolor("Colors.Color3.2",0x808080);
}

function tdataform_create1(aparameters){
  var self=this;
  form.prototype.create1.call(self, aparameters);
  self.generatedatruntime=true;
  with(self.documentheader.v.attrs.v){
    borderstyle=0;
    borderwidth=0;
    bordercolor=cborder();
    color=ccontrollight();
    width=320;
    height=50;
    left=0;
    top=0;
    zindex=0;
    visibility="visible";
  }
  with(self.detail.v.attrs.v){
    borderstyle=0;
    borderwidth=0;
    bordercolor=cborder();
    color=ccontrollight();
    width=320;
    height=300;
    left=0;
    top=0;
    zindex=0;
    visibility="visible";
  }
  with(self.documentfooter.v.attrs.v){
    borderstyle=0;
    borderwidth=0;
    bordercolor=cborder();
    color=ccontrollight();
    width=320;
    height=50;
    left=0;
    top=0;
    zindex=0;
    visibility="visible";
  }
  return self;
}

function tdataform_createdomobject(){
  var self=this;
  var h;
  h=self.cloneownersubformdomhandle(self.targetbindex);
  self.ownersubformdomhandle.innerHTML=self.getformhtml();
  h=window.document.getElementById(self.getproperty_instancename());
  h.id="x" + h.id;
  self.setupdomhandleto(h);
  self.setupcontrolhandles();
  self.setupdomeventhandlers();
  xapp.openforms.add(self);
  self.setproperty_formreadystate(3);
}

function tdataform_getformhtml(){
  var self=this;
  var result;
  var hstyler,dstyler,fstyler;
  hstyler=Create_thtmlstyler().create();
  dstyler=Create_thtmlstyler().create();
  fstyler=Create_thtmlstyler().create();
  try{
    __thtmlstyler_settoattrs(hstyler,self.documentheader.v.attrs);
    hstyler.addstring("position","relative");
    hstyler.addstring("overflow","hidden");
    __thtmlstyler_settoattrs(dstyler,self.detail.v.attrs);
    dstyler.addstring("position","relative");
    dstyler.addstring("overflow","hidden");
    __thtmlstyler_settoattrs(fstyler,self.documentfooter.v.attrs);
    fstyler.addstring("position","relative");
    fstyler.addstring("overflow","hidden");
    result='<table id="' + self.getproperty_instancename() + '" style="visibility:hidden" border="0px" cellspacing="0px" cellpadding="0px">' + "<tr>" + "  <td>" + '    <div id="' + self.getproperty_instancename() + '_DocumentHeader" ' + hstyler.get() + ">" + "    </div>" + "  </td>" + "</tr>" + "<tr>" + "  <td>" + '    <div id="' + self.getproperty_instancename() + '_Detail" ' + dstyler.get() + ">" + "    </div>" + "  </td>" + "</tr>" + "<tr>" + "  <td>" + '    <div id="' + self.getproperty_instancename() + '_DocumentFooter" ' + fstyler.get() + ">" + "    </div>" + "  </td>" + "</tr>" + "</table>" + "<div></div>";
  }finally{
    hstyler=destroyobject(hstyler);
    dstyler=destroyobject(dstyler);
    fstyler=destroyobject(fstyler);
  }
  return result;
}

function tdataform_createformcontrols(){
  var self=this;
  self.documentheader.v=Create_band().create0("DocumentHeader",self);
  self.documentfooter.v=Create_band().create0("DocumentFooter",self);
  self.detail.v=Create_band().create0("Detail",self);
  self.documentheader.v.setattrs("",0,0,320,50,false,0,_ISet(false,0),0,0,0,"","default",0xffffff,"MS Sans Serif",8,0xffffff,_ISet(false,0),0,false,-1,"","",0,0,100,"");
  self.documentfooter.v.setattrs("",0,0,320,300,false,0,_ISet(false,0),0,0,0,"","default",0xffffff,"MS Sans Serif",8,0xffffff,_ISet(false,0),0,false,-1,"","",0,0,100,"");
  self.detail.v.setattrs("",0,0,320,50,false,0,_ISet(false,0),0,0,0,"","default",0xffffff,"MS Sans Serif",8,0xffffff,_ISet(false,0),0,false,-1,"","",0,0,100,"");
  self.documentheader.v.setupbandattrs("",0,"",0,true);
  self.documentfooter.v.setupbandattrs("",24,"",0,true);
  self.detail.v.setupbandattrs("",12,"",0,true);
}

function tdataform_setproperty_width(w){
  var self=this;
  self.attrs.v.width=w;
  self.documentheader.v.attrs.v.width=w;
  self.documentheader.v.setproperty_width(w);
  self.documentfooter.v.attrs.v.width=w;
  self.documentfooter.v.setproperty_width(w);
  self.detail.v.attrs.v.width=w;
  self.detail.v.setproperty_width(w);
  if(self.navigatorcontainer == null){
    return;
  }
  self.navigatorcontainer.attrs.v.width=w;
  self.navigatorcontainer.setproperty_width(w);
}

function tdataformpopup_create(srchandle){
  var self=this;
  var i;
  self.ctrlhandle=srchandle;
  self.tablelist=CreateList();
  for(i=0;i<=catalog().items.fcount - 1;i++){
    if(_IS(catalog().items.get(i),ttabledata)){
      self.tablelist.add(catalog().items.get(i).name);
    }
  }
  twebpopupcontrol.prototype.create0.call(self, "Popup",xapp.mainform);
  self.createdomobject();
  return self;
}

function tdataformpopup_destroy(){
  var self=this;
  self.tablelist.clear();
  self.tablelist.free();
  self.tablelist=null;
  twebpopupcontrol.prototype.destroy.call(self);
}

function tdataformpopup_getcontrolhtml(){
  var self=this;
  var result;
  var ss;
  ss=Create_thtmlstyler().create();
  inc(gv_topzindex);
  ss.addstring("Position","Absolute");
  ss.addstring("cursor","Pointer");
  ss.addstring("overflow","visible");
  ss.addinteger("z-Index",gv_topzindex.v);
  ss.addcolor("background",ccontrollight());
  ss.addstring("border","1px solid " + colortohtmlhex(getthemedcolor("Colors.Color2.2",0x6094b0)));
  ss.addstring("padding","1px");
  result='<div id="' + self.getctrlhtmlid() + '" ' + ss.get() + "></div>";
  ss.free();
  return result;
}

function tdataformpopup_handleclick(event){
  var self=this;
  var h,item,frm;
  function handlelookupselect(){    var val;
    val=frm.getlookupvalues(self.ctrlhandle.parentNode.parentNode);
    frm.processlookupvalues(val);
  }
  function dosort(sortdesc){    var el;
    el=self.ctrlhandle.getElementsByTagName("span")[0];
    if(sortdesc){
      el.setAttribute("curr_order","desc");
    }else 
      el.setAttribute("curr_order","asce");
    frm.sortpagebycell(el);
  }
  function getsqlstring(){

    var guid;
    guid=self.ctrlhandle.parentNode.parentNode.getAttribute("guid");
    return 'EqualGUIDs("' + frm.getproperty_datasource() + '".MFK$GUID, ' + "'" + guid + "') = 1";
  }
  function deletereccontinuous(){    var i,dp,p=Init_data(true);
    var dbrecserializer,serializer,guid,s;
    guid=self.ctrlhandle.parentNode.parentNode.getAttribute("guid");
    dp=frm.getproperty_currentdatapage();
    dp.dblist.v.first();
    dbrecserializer=frm.dataset.getproperty_dbrecordserializer();
    for(i=0;i<=dp.dblist.v.fcount - 1;i++){
      p.v=dp.dblist.v.get(i);
      if(p.v != null){
        dbrecserializer.bind(p);
      }else 
        dbrecserializer.data=null;
      serializer=(dbrecserializer.data != null)?dbrecserializer.getproperty_child("MFK_GUID"):null;
      if(serializer != null){
        s=serializer.readstring();
        if(stringsequal(s,guid)){
          p.v.status_1.v=1;
          dp.dbsubmitlist.v.add(p.v);
          dp.ownerdataset.submitpage();
          return;
        }
      }
    }
  }
  h=geteventelement(event);
  if(h == null){
    return;
  }
  frm=self.forminst;
  while(h.nodeName != "TR"){
    h=h.parentNode;
  }
  item=h.getElementsByTagName("span")[0].innerHTML;
  xapp.deactivepopup();
  switch(item){
    case "Sort Ascending":
    dosort(false);
    break;
    case "Sort Descending":
    dosort(true);
    break;
    case "Clear Filter":
    self.menuopendataform(false,'"ViewMode=vmContinuous"');
    break;
    case "Select Record":
    handlelookupselect();
    break;
    case "View Record":
    self.menuopendataform(false,'"ViewMode=vmSingle",' + '"CanEdit=False"    ,' + '"SQLFilter=' + encodeparameter(getsqlstring()) + '"');
    break;
    case "Edit Record":
    if(frm.getproperty_viewmode() == 0){
      self.menuopendataform(true,'"CanEdit=True"');
    }else 
      self.menuopendataform(false,'"ViewMode=vmSingle",' + '"CanEdit=True"     ,' + '"SQLFilter=' + encodeparameter(getsqlstring()) + '"');
    break;
    case "View All":
    self.menuopendataform(false,'"ViewMode=vmContinuous"');
    break;
    case "Refresh":
    self.menuopendataform(true,"");
    break;
    case "Switch To":
    self.menuchangedatasource(frm.getproperty_datasource());
    break;
    case "New Record":
    self.menuopendataform(false,'"ViewMode=vmSingle","CanEdit=True","NewRecord=True"');
    break;
    case "Delete Record":
    if(confirmaction("Delete this Record?")){
      if(frm.getproperty_viewmode() == 0){
        frm.deleterecord(null);
        frm.submitpage(null);
      }else 
        deletereccontinuous();
      self.menuopendataform(false,'"ViewMode=vmContinuous"');
    }
    break;
  default:
    self.menuchangedatasource(item);
  }
}

function tdataformpopup_run(frm){
  var self=this;
  var c,w,l,t,i,s,items;  var html;
  function itemhtml(txt,img){

    return '<tr><td><table class="itm" border="0" cellspacing="0" cellpadding="0"><tr>' + '<td class="ico"><img src="' + composeresourceurl(img) + '"></td>' + '<td class="txt"><span>' + txt + "</span></td></tr></table></td></tr>";
  }
  self.forminst=frm;
  html=createfastlist();
  w=max(146,self.ctrlhandle.offsetWidth - 4);
  s=getclass(self.ctrlhandle);
  switch(s){
    case "tblhdr":
    for(i=0;i<=self.tablelist.fcount - 1;i++){
      html.add(itemhtml(self.tablelist.get(i),"blank.gif"));
    }
    break;
    case "tblopt":
    html.add(itemhtml("Refresh","blank.gif"));
    if(self.forminst.getproperty_viewmode() == 0){
      html.add(itemhtml("Edit Record","blank.gif"));
    }
    if(!self.forminst.getproperty_canedit()){
      html.add(itemhtml("New Record","blank.gif"));
    }
    break;
    case "colhdr":
    html.add(itemhtml("Sort Ascending","sortasc.gif"));
    html.add(itemhtml("Sort Descending","sortdesc.gif"));
    break;
    case "pcell":
    html.add(itemhtml("View Record","blank.gif"));
    html.add(itemhtml("Edit Record","blank.gif"));
    html.add(itemhtml("Delete Record","blank.gif"));
  }
  self.domhandle().innerHTML='<table class="tblpop" border="0" cellspacing="0" cellpadding="0" style="width:' + w + 'px">' + joinStringList(html) + "</table>";
  html.free();
  items=self.domhandle().getElementsByTagName("table");
  for(i=0;i<=items.length - 1;i++){
    c=items[i];
    if(getclass(c) == "itm"){
      c.wrapper=self;
      c.onclick=getMethodPointer(self,self.handleclick);
    }
  }
  l=0;
  t=0;
  c=self.ctrlhandle;
  while(c != null){
    if((c.nodeName != "TR") && (c.nodeName != "TBODY")){
      if(assigned(c.offsetLeft)){
        l+=c.offsetLeft;
      }
      if(assigned(c.offsetTop)){
        t+=c.offsetTop;
      }
    }
    c=c.offsetParent;
  }
  self.setproperty_left(l);
  self.setproperty_top(t + self.ctrlhandle.offsetHeight);
}

function tdataformpopup_menuopendataform(includecurrent,params){
  var self=this;
  var paramlist,frm;
  function updateparam(p){    paramlist.update(p,frm.currentparameters.getparamvalue(p));
  }
  frm=self.forminst;
  paramlist=Create_tparameters().create();
  try{
    updateparam("DataSource");
    updateparam("ViewMode");
    updateparam("PageSize");
    updateparam("ShowSysFields");
    updateparam("SortDesc");
    updateparam("SortField");
    if(includecurrent){
      updateparam("SQLFilter");
      updateparam("StartingOffset");
    }
    paramlist.addlist(params);
    paramlist.update("OpenMode","Refresh");
    if(stringsequal("TDataForm",frm.getproperty_ownerform().name)){
      xapp.opendataform(frm.getproperty_ownerform().ownersubformtargetref(),paramlist.asuristring());
    }else 
      xapp.opendataform(frm.ownersubformtargetref(),paramlist.asuristring());
  }finally{
    paramlist.free();
    paramlist=null;
  }
}

function tdataformpopup_menuchangedatasource(ds){
  var self=this;
  var target,frm;
  frm=self.forminst;
  target=(stringsequal("TDataForm",frm.getproperty_ownerform().name))?frm.getproperty_ownerform().ownersubformtargetref():frm.ownersubformtargetref();
  xapp.opendataform(target,'"DataSource=' + ds + '",' + '"ShowSysFields=' + booltostr(frm.getproperty_showsysfields()) + '",' + '"PageSize=' + frm.getproperty_pagesize() + '",' + '"OpenMode=Refresh"');
}

function tdataform_getproperty_showsysfields(){
  var self=this;

  return strtobool(self.getparametervalue("ShowSysFields"));
}

function tdataform_getproperty_canedit(){
  var self=this;

  return strtobool(self.getparametervalue("CanEdit"));
}

function tdataform_colheaderclick(event){
  var self=this;
  var el,popup;
  el=geteventelement(event);
  if(el.nodeName == "SPAN"){
    self.sortpagebycell(el);
    return;
  }
  self.canceleventbubble(event);
  xapp.deactivepopup();
  while(el.nodeName != "TABLE"){
    el=el.parentNode;
  }
  popup=Create_tdataformpopup().create(el);
  popup.run(self);
}

function tdataform_tblheaderclick(event){
  var self=this;
  var el,s,popup;
  el=geteventelement(event);
  if((el.nodeName == "SPAN") && (el.getAttribute("opt") == null)){
    s=(stringsequal("TDataForm",self.getproperty_ownerform().name))?self.getproperty_ownerform().ownersubformtargetref():self.ownersubformtargetref();
    xapp.opendataform(s,'"DataSource=' + el.innerHTML + '",' + '"ShowSysFields=' + booltostr(self.getproperty_showsysfields()) + '",' + '"PageSize=' + self.getproperty_pagesize() + '",' + '"OpenMode=Refresh"');
    return;
  }
  self.canceleventbubble(event);
  xapp.deactivepopup();
  while(el.nodeName != "TABLE"){
    el=el.parentNode;
  }
  if(getclass(el) != "tbltxt"){
    popup=Create_tdataformpopup().create(el);
    popup.run(self);
  }
}

function tdataform_primaryclick(event){
  var self=this;
  var el,popup;
  function handlerecordclick(element){    var guid,sql,target,s;
    while(element.nodeName != "TABLE"){
      element=element.parentNode;
    }
    guid=element.parentNode.parentNode.getAttribute("guid");
    sql='EqualGUIDs("' + self.getproperty_datasource() + '".MFK$GUID, ' + "'" + guid + "') = 1";
    if(self.isfloating()){
      s=self.getlookupvalues(element.parentNode.parentNode);
      self.processlookupvalues(s);
      return;
    }
    target=(stringsequal("TDataForm",self.getproperty_ownerform().name))?self.getproperty_ownerform().ownersubformtargetref():self.ownersubformtargetref();
    xapp.opendataform(target,'"DataSource=' + self.getproperty_datasource() + '",' + '"ShowSysFields=' + booltostr(self.getproperty_showsysfields()) + '",' + '"PageSize=' + self.getproperty_pagesize() + '",' + '"SQLFilter=' + encodeparameter(sql) + '",' + '"ViewMode=vmSingle","OpenMode=Refresh"');
  }
  el=geteventelement(event);
  if(el.nodeName == "SPAN"){
    handlerecordclick(el);
    return;
  }
  self.canceleventbubble(event);
  xapp.deactivepopup();
  while(el.nodeName != "TABLE"){
    el=el.parentNode;
  }
  popup=Create_tdataformpopup().create(el);
  popup.run(self);
}

function tdataform_rellinkclick(event){
  var self=this;
  var guid,el,fd,sql,target;
  el=geteventelement(event);
  guid=el.parentNode.parentNode.getAttribute("guid");
  fd=self.getfielddata(el.getAttribute("col_name"));
  if(fd == null){
    return;
  }
  target=(stringsequal("TDataForm",self.getproperty_ownerform().name))?self.getproperty_ownerform().ownersubformtargetref():self.ownersubformtargetref();
  sql='"' + fd.relatedtable + '"."' + fd.relatedkeyfield + '"=' + el.getAttribute("rel_value");
  xapp.opendataform(target,'"DataSource=' + fd.relatedtable + '",' + '"ShowSysFields=' + booltostr(self.getproperty_showsysfields()) + '",' + '"PageSize=' + self.getproperty_pagesize() + '",' + '"SQLFilter=' + encodeparameter(sql) + '",' + '"ViewMode=vmSingle","OpenMode=Refresh"');
}

function tdataform_editctrlclick(event){
  var self=this;
  var h,params;
  h=geteventelement(event);
  if(stringsequal("Submit",h.innerHTML)){
    self.submitpage(event);
  }else 
    self.cancelrecordchanges(event);
  params='"DataSource=' + self.getproperty_datasource() + '",' + '"PageSize=' + self.getproperty_pagesize() + '",' + '"ShowSysFields=' + booltostr(self.getproperty_showsysfields()) + '",' + '"ViewMode=vmContinuous","OpenMode=Refresh"';
  xapp.opendataform(self.ownersubformtargetref(),params);
}

function tdataform_lookupclick(event){
  var self=this;
  var fname,fd;
  fname=geteventelement(event).getAttribute("lookup");
  fd=self.getfielddata(fname);
  if(fd == null){
    return;
  }
  xapp.opendataform("Popup",'"DataSource=' + fd.relatedtable + '",' + '"RelatedKey=' + fd.relatedkeyfield + '",' + '"RelatedLabel=' + fd.relatedlabelfield + '",' + '"Parent=' + self.detail.v.domhandle().id + '",' + '"FName=' + fname + '",' + '"PageSize=' + self.getproperty_pagesize() + '",' + '"Title=' + fd.relatedtable + '",' + '"Modal=True","OpenMode=Refresh"');
}

function tdataform_htmltable(){
  var self=this;

  if(self.ftable == null){
    self.ftable=self.detail.v.domhandle().getElementsByTagName("table")[0];
  }
  return self.ftable;
}

function tdataform_setupformfromdfm(){
  var self=this;
  self.name="TDataForm";
  self.modulename="TDataForm";
  self.attrs.v.width=320;
  self.attrs.v.height=400;
  self.winwidth=320;
  self.winheight=400;
  self.cursor="default";
  self.attrs.v.horizontalplacement=0;
  self.attrs.v.verticalplacement=0;
  self.browserhistory=true;
  self.setproperty_datasource("");
  self.currentparameters.define("ViewMode","vmContinuous","In");
}

function tdataform_setupcontrolevents(){
  var self=this;
self.oncreate._o=self;self.oncreate._p="handle_oncreate";
self.onready._o=self;self.onready._p="handle_onformready";
}

function tdataform_handle_oncreate(){

  var node,css;
  function GetDataFormCss(ss){    
            ss.type = 'text/css';
            if (ss.styleSheet)
              ss.styleSheet.cssText = _getdataformcss();
            else
            {
              var node = document.createTextNode(_getdataformcss());
              ss.appendChild(node);
            }
        
  }
  function createlink(){
    var result;
    result=document.createElement("link");
    result.href="dataform.css" + "?cls=dfcss&xid=" + xappguid;
    result.rel="stylesheet";
    return result;
  }
  function createstyle(){
    var result;
    result=document.createElement("style");
    GetDataFormCss(result);
    return result;
  }
  if(document.getElementById("tdataform_style") != null){
    return;
  }
  css=(isScriptorApp)?createstyle():createlink();
  css.id="tdataform_style";
  node=document.getElementsByTagName("head")[0];
  node.appendChild(css);
}

function tdataform_handle_onformready(){
  var self=this;
  var ds,defaultds;
  self.documentheader.v.attrs.v.height=25;
  self.documentheader.v.setproperty_height(25);
  self.documentfooter.v.attrs.v.height=60;
  self.documentfooter.v.setproperty_height(60);
  self.detail.v.attrs.v.height=100;
  self.detail.v.setproperty_height(100);
  self.detail.v.setproperty_cangrow(0);
  self.detail.v.setproperty_canshrink(true);
  self.createheaderctrls();
  defaultds=self.getproperty_datasource();
  self.dataclassinfo=serializabletypes().gettypeinfox(self.encodesourcename(defaultds) + "Record");
  self.fieldcount=self.getfieldcount();
  ds=Create_tdataset().create(self,defaultds);
ds.onrefreshreturn._o=self;ds.onrefreshreturn._p="handle_onrefreshreturn";
  ds.refreshpage();
  self.createeditctrls();
  self.createnavigationctrls();
}

function tdataform_handle_onrefreshreturn(datapage){
  var self=this;
  var newrec,sh,h,frm;
  self.dataset=datapage.ownerdataset;
self.dataset.onrefreshreturn._o=null;self.dataset.onrefreshreturn._p="null";
  newrec=strtobool(self.getparametervalue("NewRecord"));
  if(self.isfloating()){
    frm=xapp.getfloatingsubform(self.getproperty_instancename());
    if(frm != null){
      self.setproperty_width(650);
      frm.getproperty_content().domstyle().width="650px";
      frm.getproperty_center();
    }
  }
  if((datapage.recordcount.v == 0) && !newrec){
    with(Create_textlabel().create2(self.detail.v)){
      textlabelattrs.cangrow=0;
      attrs.v.left=5;
      attrs.v.top=10;
      attrs.v.width=owner.getproperty_width() - 10;
      attrs.v.height=14;
      attrs.v.text="No Records Found!";
      createdomobject();
      setproperty_fontcolor(cheaderfont());
    }
    self.navigatorcontainer.setproperty_visible(false);
    return;
  }
  if(self.getproperty_viewmode() == 0){
    self.editcontainer.setproperty_visible(self.getproperty_canedit());
    self.navigatorcontainer.setproperty_visible(false);
    self.detail.v.domhandle().innerHTML=self.rendersinglemodehtml();
    if(!self.getproperty_canedit()){
      self.createrelationshipsubforms();
    }
  }else 
    self.detail.v.domhandle().innerHTML=self.rendercontenthtml();
  self.assignevents();
  sh=self.detail.v.domhandle().scrollHeight;
  h=self.detail.v.getproperty_height();
  if(sh == h){
    self.detail.v.setproperty_height(self.htmltable().offsetHeight + 2);
    self.ownersubform.groworshrink(-1,true);
  }else 
    self.detail.v.groworshrink(sh - h,true);
  self.updatenavigator();
}

function tdataform_handle_lookupcombochange(event){

  var slct,opt,inpt;
  slct=geteventelement(event);
  opt=slct.options[slct.selectedIndex];
  inpt=slct.nextSibling;
  inpt.value=opt.value + ":" + opt.text;
}

function tdataform_rendersinglemodehtml(){
  var self=this;
  var result;
  var tabledata,i,fieldcount;  var fields;  var lookups,html,fname,fdata,arry,newrec,value,serializer,p=Init_data(true);
  var guid;
  tabledata=catalog().getitembyname(self.dataset.datasource);
  fields=tabledata.fields;
  fieldcount=fields.fcount;
  serializer=self.dataset.getproperty_dbrecordserializer();
  newrec=strtobool(self.getparametervalue("NewRecord"));
  lookups=CreateList(null,null,Create_tserializablefieldinfo,tobject_create);
  try{
    if(newrec){
      if(self.dataset != null){
        self.dataset.currentdatapage.cleardblist(false);
        self.dataset.ownerform=null;
        self.dataset.newrecord();
        self.dataset.ownerform=self;
      }
    }
    p.v=self.dataset.currentdatapage.dblist.v.get(0);
    if(p.v != null){
      self.dataset.getproperty_dbrecordserializer().bind(p);
    }else 
      self.dataset.getproperty_dbrecordserializer().data=null;
    serializer=(serializer.data != null)?self.dataset.getproperty_dbrecordserializer().getproperty_child("MFK_GUID"):null;
    html=Create_TArray();
    guid=(serializer != null)?serializer.readstring():"";
    html.push('<div id="dataform_table"><table guid="' + guid + '" border="0" cellpadding="0" cellspacing="0">');
    for(i=0;i<=fieldcount - 1;i++){
      fname=tabledata.fields.get(i).name;
      fdata=tabledata.fields.get(i);
      if(fdata == null){
        continue;
      }
      p.v=self.dataset.currentdatapage.dblist.v.get(0);
      if(p.v != null){
        self.dataset.getproperty_dbrecordserializer().bind(p);
      }else 
        self.dataset.getproperty_dbrecordserializer().data=null;
      serializer=(serializer.data != null)?self.dataset.getproperty_dbrecordserializer().getproperty_child(fname):null;
      if(!self.getproperty_showsysfields()){
        if(fname.indexOf("MFK$") > -1){
          continue;
        }
      }
      html.push('<tr><td class="s_col">' + fields.get(i).name + '</td><td class="s_data">');
      value=serializer.readstring();
      if(self.getproperty_canedit()){
        switch(fdata.fieldrelationshipkind){
          case 2:
          arry=value.split(":");
          html.push('<select disabled="true" fsource="' + fdata.relatedtable + '" fname="' + fname + '" >');
          if(value != ""){
            html.push('<option selected="selected" value="' + arry[1] + '">' + arry[1] + "</option>)");
          }
          html.push('</select><input fname="' + fname + '" type="hidden" value="' + value + '"/>');
          lookups.add(fields.get(i));
          break;
          case 1:
          if(newrec){
            html.push('<span></span><span lookup="' + fname + '" class="lookup">lookup</span><input fname="' + fname + '" type="hidden" value=""/>');
          }else {
            arry=value.split(":");
            html.push("<span>" + arry[1] + '</span><span lookup="' + fname + '" class="lookup">lookup</span><input fname="' + fname + '" type="hidden" value="' + arry[0] + '"/>');
          }
          break;
          case 0:
          html.push('<input type="text" value="' + value + '" fname="' + fname + '"/>');
        }
      }else 
        html.push('<span fname="' + fname + '">' + value + "</span>");
      html.push("</td></tr>");
    }
    html.push("</table></div>");
    result=html.join("");
    for(i=0;i<=lookups.fcount - 1;i++){
      fdata=tabledata.getfielddata(lookups.get(i).name);
      self.getcomboboxdata(fdata.relatedtable);
    }
  }finally{
    lookups.FreeOnClear=false;
    lookups.free();
    lookups=null;
  }
  return result;
}

function tdataform_rendercontenthtml(){
  var self=this;

  var tablefields;
  function gettablehead(){
    var result;
    var fname,s,typename,i,count;
    result="<thead><tr>";
    count=self.dataclassinfo.fields.fcount - 1;
    s="";
    for(i=0;i<=count;i++){
      typename=self.dataclassinfo.fields.get(i).typename;
      fname=self.dataclassinfo.fields.get(i).name;
      if(s != ""){
        s+="|";
      }
      if(!self.getproperty_showsysfields()){
        if(fname.indexOf("MFK_") != -1){
          continue;
        }
      }
      result+='<th hdr="1">';
      result+='<table class="colhdr" border="0" cellspacing="0" cellpadding="0"><tr>';
      result+='<td class="txt"><span ftype="' + typename + '" curr_order="">' + fname + "</span></td>";
      result+='<td class="srt"><img src="' + composeresourceurl("blank.gif") + '"></td>';
      result+='<td class="arw" fname="' + fname + '"><img src="' + composeresourceurl("arrow.gif") + '"/></td>';
      result+="</tr></table></th>";
      s+=fname;
    }
    tablefields=s.split("|");
    return result + "</tr></thead>";
  }
  function gettablebody(){
    var result;
    var dbrecserializer,serializer;    var dblist,i,j,p=Init_data(true);
    var rel,relfields,itemdata,primarycolumn,guid;
    dbrecserializer=self.dataset.getproperty_dbrecordserializer();
    dblist=self.dataset.currentdatapage.dblist.v;
    itemdata=catalog().getitembyname(self.dataset.datasource);
    relfields=itemdata.getrelationshipfields();
    result="<tbody>";
    primarycolumn=self.getprimarycell();
    for(i=0;i<=dblist.fcount - 1;i++){
      p.v=dblist.get(i);
      if(p.v != null){
        dbrecserializer.bind(p);
      }else 
        dbrecserializer.data=null;
      serializer=dbrecserializer.getproperty_child("MFK_GUID");
      guid=(serializer != null)?serializer.readstring():"";
      result+='<tr guid="' + guid + '">';
      for(j=0;j<=tablefields.length - 1;j++){
        serializer=(dbrecserializer.data != null)?dbrecserializer.getproperty_child(tablefields[j]):null;
        if(serializer != null){
          if(relfields.indexOf(tablefields[j],0) != -1){
            rel=serializer.readstring().split(":");
            result+='<td class="txt"><span class="link" lnk="1" col_name="' + tablefields[j] + '" rel_value="' + rel[0] + '">' + rel[1] + "</span></td>";
          }else 
          if(tablefields[j] == primarycolumn){
            result+='<td attrs="ref">';
            result+='<table class="pcell" border="0" cellspacing="0" cellpadding="0"><tr pri="1">';
            result+='<td class="txt"><span>' + serializer.readstring() + "</span></td>";
            result+='<td class="arw"><img src="' + composeresourceurl("arrow.gif") + '"/></td>';
            result+="</tr></tbody></table></td>";
          }else {
            result+='<td class="txt"><span>' + serializer.readstring() + "</span></td>";
          }
        }
      }
      result+="</tr>";
    }
    return result + "</tbody>";
  }
  return '<div id="dataform_table"><table cellspacing="0" cellpadding="0" border="0">' + gettablehead() + gettablebody() + "</table></div>";
}

function tdataform_assignevents(){
  var self=this;
  var elements,el,i;
  elements=self.htmltable().getElementsByTagName("th");
  for(i=0;i<=elements.length - 1;i++){
    el=elements[i];
    if(el.getAttribute("hdr") != null){
      el.onclick=getMethodPointer(self,self.colheaderclick);
    }
  }
  elements=self.htmltable().getElementsByTagName("tr");
  for(i=0;i<=elements.length - 1;i++){
    el=elements[i];
    if(el.getAttribute("pri") != null){
      el.onclick=getMethodPointer(self,self.primaryclick);
    }
  }
  elements=self.htmltable().getElementsByTagName("span");
  for(i=0;i<=elements.length - 1;i++){
    el=elements[i];
    if(el.getAttribute("lnk") != null){
      el.onclick=getMethodPointer(self,self.rellinkclick);
    }
    if(el.getAttribute("lookup") != null){
      el.onclick=getMethodPointer(self,self.lookupclick);
    }
  }
  elements=self.documentheader.v.domhandle().getElementsByTagName("tr");
  for(i=0;i<=elements.length - 1;i++){
    el=elements[i];
    if(el.getAttribute("hdr") != null){
      el.onclick=getMethodPointer(self,self.tblheaderclick);
    }
  }
}

function tdataform_createeditctrls(){
  var self=this;
  var s,items,i;
  if(self.editcontainer != null){
    return;
  }
  self.editcontainer=Create_container().create0("EditContainer",self.documentfooter.v);
  with(self.editcontainer){
    attrs.v.borderstyle=0;
    attrs.v.top=20;
    attrs.v.height=14;
    attrs.v.width=150;
    attrs.v.color=ccontrollight();
    attrs.v.horizontalplacement=4;
    createdomobject();
    setproperty_visible(false);
  }
  s='<table class="ctrls" border="0" cellspacing="0" cellpadding="0" style="width:150px"><tr>';
  s+='<td class="enabled"><span>' + "Submit" + "</span></td>";
  s+='<td class="enabled"><span>' + "Cancel" + "</span></td>";
  s+="</tr></table>";
  self.editcontainer.domhandle().innerHTML=s;
  items=self.editcontainer.domhandle().getElementsByTagName("span");
  for(i=0;i<=items.length - 1;i++){
    items[i].onclick=getMethodPointer(self,self.editctrlclick);
  }
}

function tdataform_createnavigationctrls(){
  var self=this;
  var s;
  if(self.navigatorcontainer != null){
    return;
  }
  self.navigatorcontainer=Create_container().create0("NavContainer",self.documentfooter.v);
  with(self.navigatorcontainer){
    attrs.v.borderstyle=0;
    attrs.v.top=20;
    attrs.v.height=14;
    attrs.v.width=320;
    attrs.v.color=ccontrollight();
    attrs.v.horizontalplacement=4;
    createdomobject();
  }
  s='<table class="ctrls" border="0" cellspacing="0" cellpadding="0" style="width:300px"><tr>';
  s+='<td class="enabled"><span>' + "First" + "</span></td>";
  s+='<td class="enabled"><span>' + "Prev" + "</span></td>";
  s+='<td class="count">  <span>' + "(# of #)" + "</span></td>";
  s+='<td class="enabled"><span>' + "Next" + "</span></td>";
  s+='<td class="enabled"><span>' + "Last" + "</span></td>";
  s+="</tr></table>";
  self.navigatorcontainer.domhandle().innerHTML=s;
}

function tdataform_updatenavigator(){
  var self=this;
  var clickmethod,enabled,ctrls;
  function enablectrl(c,p){    if(enabled){
      c.onclick=p;
      setclass(c.parentNode,"enabled");
    }else {
      c.onclick=null;
      setclass(c.parentNode,"");
    }
  }
  if(self.navigatorcontainer == null){
    return;
  }
  ctrls=self.navigatorcontainer.domhandle().getElementsByTagName("span");
  if(self.getproperty_viewmode() == 0){
    enabled=((self.getcurrentpage() * self.getproperty_pagesize()) + self.getcurrentrecord()) > 0;
    clickmethod=getMethodPointer(self,self.firstrecord);
  }else {
    enabled=self.getcurrentpage() > 0;
    clickmethod=getMethodPointer(self,self.firstpage);
  }
  enablectrl(ctrls[0],clickmethod,enabled);
  if(self.getproperty_viewmode() == 0){
    enabled=((self.getcurrentpage() * self.getproperty_pagesize()) + self.getcurrentrecord()) > 0;
    clickmethod=getMethodPointer(self,self.previousrecord);
  }else {
    enabled=(self.getproperty_startingoffset() - self.getproperty_pagesize()) >= 0;
    clickmethod=getMethodPointer(self,self.previouspage);
  }
  enablectrl(ctrls[1],clickmethod,enabled);
  if(self.getproperty_viewmode() == 0){
    enabled=((self.getcurrentpage() * self.getproperty_pagesize()) + self.getcurrentrecord() + 1) < self.getproperty_recordcount();
    clickmethod=getMethodPointer(self,self.nextrecord);
  }else {
    enabled=self.getcurrentpage() < (self.getpagecount() - 1);
    clickmethod=getMethodPointer(self,self.nextpage);
  }
  enablectrl(ctrls[3],clickmethod,enabled);
  if(self.getproperty_viewmode() == 0){
    enabled=((self.getcurrentpage() * self.getproperty_pagesize()) + self.getcurrentrecord() + 1) < self.getproperty_recordcount();
    clickmethod=getMethodPointer(self,self.lastrecord);
  }else {
    enabled=self.getcurrentpage() < (self.getpagecount() - 1);
    clickmethod=getMethodPointer(self,self.lastpage);
  }
  enablectrl(ctrls[4],clickmethod,enabled);
  ctrls[2].innerHTML=(self.getproperty_viewmode() == 0)?"( " + inttostr((self.getcurrentpage() * self.getproperty_pagesize()) + self.getcurrentrecord() + 1) + " of " + inttostr(self.getproperty_recordcount()) + " )":"( " + inttostr(self.getcurrentpage() + 1) + " of " + inttostr(self.getpagecount()) + " )";
}

function tdataform_createheaderctrls(){
  var self=this;
  var s,showcb;
  function getheaderhtml(){
    var result;
    if(!showcb){
      result='<td style="width:50%;vertical-align:middle">';
      result+='<table class="tbltxt" border="0" cellspacing="0" cellpadding="0"><tr hdr="1">';
      result+='<td class="txt"><span>' + self.getproperty_datasource() + "</span></td>";
      return result + "</tr></table></td>";
    }else {
      result='<td style="width:50%;vertical-align:middle">';
      result+='<table class="tblhdr" border="0" cellspacing="0" cellpadding="0"><tr hdr="1">';
      result+='<td class="txt"><span>' + self.getproperty_datasource() + "</span></td>";
      result+='<td class="arw"><img src="' + composeresourceurl("arrow.gif") + '"/></td>';
      return result + "</tr></table></td>";
    }
  }
  function getoptionshtml(){
    var result;
    result='<td style="width:50%;vertical-align:middle">';
    result+='<table class="tblopt" border="0" cellspacing="0" cellpadding="0"><tr hdr="1">';
    result+='<td><span opt="1">Options</span><img src="' + composeresourceurl("arrow.gif") + '"/></td>';
    return result + "</tr></table></td>";
  }
  s="";
  showcb=!stringsequal("TDataForm",self.getproperty_ownerform().name);
  if(self.isfloating()){
    self.documentheader.v.setproperty_height(0);
  }else {
    s+='<div id="dataform_header">';
    s+='<table border="0" cellpadding="0" cellspacing="0"><tr>';
    s+=getheaderhtml() + getoptionshtml();
    s+="</tr></table></div>";
    self.documentheader.v.domhandle().innerHTML=s;
  }
}

function tdataform_getcomboboxdata(source){
  var self=this;
  var ds;
  ds=Create_tdataset().create(null,source);
  ds.setproperty_pagesize(15);
ds.onrefreshreturn._o=self;ds.onrefreshreturn._p="fillcombobox";
  ds.refreshpage();
}

function tdataform_fillcombobox(datapage){
  var self=this;
  var combo,p=Init_data(true);
  var i,skey,slabel,fd,print,akey=Init_data(true);
  var alabel=Init_data(true);
  function getcombobox(){
    var result;
    var ctrllist,i;
    ctrllist=self.htmltable().getElementsByTagName("select");
    for(i=0;i<=ctrllist.length - 1;i++){
      if(ctrllist[i].getAttribute("fsource") == datapage.ownerdataset.datasource){
        result=ctrllist[i];
        ctrllist=null;
        return result;
      }
    }
    return result;
  }
  combo=getcombobox();
  if(combo == null){
    return;
  }
  fd=self.getfielddata(combo.getAttribute("fname"));
  if(fd == null){
    return;
  }
  self.parsekeyvalue(combo.nextSibling.value,akey,alabel);
  for(i=0;i<=datapage.dblist.v.fcount - 1;i++){
    p.v=datapage.dblist.v.get(i);
    if(p.v != null){
      datapage.ownerdataset.getproperty_dbrecordserializer().bind(p);
    }else 
      datapage.ownerdataset.getproperty_dbrecordserializer().data=null;
    slabel=null;
    skey=null;
    if(datapage.ownerdataset.getproperty_dbrecordserializer().data != null){
      skey=datapage.ownerdataset.getproperty_dbrecordserializer().getproperty_child(fd.relatedkeyfield);
      slabel=datapage.ownerdataset.getproperty_dbrecordserializer().getproperty_child(fd.relatedlabelfield);
    }
    if((skey != null) && (slabel != null)){
      print=true;
      if((akey.v == skey.readstring()) && (alabel.v == slabel.readstring())){
        print=false;
      }
      if(print){
        combo.options.add(document.createElement("option"),combo.options.length);
        with(combo.options[combo.options.length - 1]){
          text=slabel.readstring();
          value=skey.readstring();
        }
      }
    }
  }
  combo.disabled=false;
  combo.onchange=getMethodPointer(self,self.handle_lookupcombochange);
}

function tdataform_getfielddata(fname){
  var self=this;

  var tbl;
  tbl=catalog().getitembyname(self.getproperty_datasource());
  if(tbl != null){
    return tbl.getfielddata(fname);
  }else 
    return null;
}

function tdataform_getprimarycell(){
  var self=this;

  var i,fd;
  for(i=0;i<=self.dataclassinfo.fields.fcount - 1;i++){
    fd=self.getfielddata(self.dataclassinfo.fields.get(i).name);
    if(fd != null){
      if(fd.fieldrelationshipkind == 0){
        return fd.name;
      }
    }
  }
  return "";
}

function tdataform_getfieldcount(){
  var self=this;
  var result;
  var i,count;
  count=self.dataclassinfo.fields.fcount;
  result=count;
  if(!self.getproperty_showsysfields()){
    for(i=0;i<=count - 1;i++){
      if(pos("MFK_",self.dataclassinfo.fields.get(i).name) > 0){
        result--;
      }
    }
  }
  return result;
}

function tdataform_getlookupvalues(row){
  var self=this;

  var elements,el,i,k,l,key,lbl;
  function getvalue(inx){

    return row.getElementsByTagName("span")[inx].innerHTML;
  }
  elements=self.htmltable().getElementsByTagName("th");
  key=self.getparametervalue("RelatedKey");
  lbl=self.getparametervalue("RelatedLabel");
  k=-1;
  l=-1;
  for(i=0;i<=elements.length - 1;i++){
    el=elements[i].getElementsByTagName("span")[0];
    if(el.innerHTML == key){
      k=i;
    }
    if(el.innerHTML == lbl){
      l=i;
    }
  }
  return ((k != -1) && (l != -1))?getvalue(k) + ":" + getvalue(l):"";
}

function tdataform_processlookupvalues(val){
  var self=this;
  var key=Init_data(true);
  var lbl=Init_data(true);
  var fname,parent,tbl,el,elements,i;
  self.parsekeyvalue(val,key,lbl);
  fname=self.getparametervalue("FName");
  parent=self.getparametervalue("Parent");
  tbl=window.document.getElementById(parent).getElementsByTagName("table")[0];
  elements=tbl.getElementsByTagName("input");
  for(i=0;i<=elements.length - 1;i++){
    el=elements[i];
    if(el.getAttribute("FName") == fname){
      el.setAttribute("Value",key.v);
      el.parentNode.getElementsByTagName("span")[0].innerHTML=lbl.v;
      self.close();
      return;
    }
  }
}

function tdataform_createrelationshipsubforms(){
  var self=this;
  var table,icount,fcount,i,j;
  function getkeyvalue(fname,isguid){
    var result;
    var inputlist,ctrl,i;
    inputlist=self.htmltable().getElementsByTagName("span");
    result="";
    for(i=0;i<=inputlist.length - 1;i++){
      ctrl=inputlist[i];
      if(stringsequal(ctrl.getAttribute("fname"),fname)){
        result=ctrl.innerHTML;
        break;
      }
    }
    isguid.v=result.indexOf("{") != -1;
    return result;
  }
  function opensubform(ds,field){    var sql,target,kv,isguid=Init_data(true);
    target=self.getproperty_instancename() + ":" + newsubform();
    kv=getkeyvalue(field.relatedkeyfield,isguid);
    sql=(isguid.v)?'EqualGUIDs("' + ds + '"."' + field.name + '", ' + "'" + kv + "') = 1":'"' + ds + '"."' + field.name + '" = ' + kv;
    xapp.opendataform(target,'"DataSource=' + ds + '",' + '"SQLFilter=' + encodeparameter(sql) + '",' + '"PageSize=' + self.getproperty_pagesize() + '",' + '"ViewMode=vmContinuous","OpenMode=Refresh"');
  }
  function newsubform(){
    var result;
    var sub;
    sub=Create_subform().create2(self.relationshipsfcontainer);
    sub.attrs.v.top=self.relationshipsfcontainer.childcount() * 10;
    sub.attrs.v.width=self.relationshipsfcontainer.getproperty_width();
    sub.attrs.v.height=5;
    sub.createdomobject();
    result=sub.name;
    self.relationshipsfcontainer.attrs.v.height=self.relationshipsfcontainer.childcount() * 20;
    self.documentfooter.v.attrs.v.height=self.relationshipsfcontainer.attrs.v.height + 40;
    return result;
  }
  self.relationshipsfcontainer=Create_container().create0("RelationshipSFContainer",self.documentfooter.v);
  with(self.relationshipsfcontainer){
    containerattrs.cangrow=0;
    containerattrs.canshrink=true;
    attrs.v.width=self.documentfooter.v.getproperty_width();
    attrs.v.top=35;
    attrs.v.height=10;
    attrs.v.borderstyle=0;
    attrs.v.color=ccontrollight();
    createdomobject();
  }
  icount=catalog().items.fcount - 1;
  for(i=0;i<=icount;i++){
    if(_IS(catalog().items.get(i),ttabledata)){
      table=catalog().items.get(i);
      fcount=table.fields.fcount;
      for(j=0;j<=fcount - 1;j++){
        if(table.fields.get(j).relatedtable == self.getproperty_datasource()){
          opensubform(table.name,table.fields.get(j));
        }
      }
    }
  }
}

function tdataform_sortpagebycell(colheader){
  var self=this;
  var columninx,currorder,high,i,el,nodes;
  function getinx(){
    var result;
    var nodes,tbl,j,k;
    result=-1;
    k=0;
    nodes=self.htmltable().getElementsByTagName("th");
    tbl=colheader.parentNode.parentNode.parentNode.parentNode.parentNode;
    for(j=0;j<=nodes.length - 1;j++){
      if(nodes[j].parentNode == tbl.parentNode){
        k++;
        if(nodes[j] == tbl){
          return k - 1;
        }
      }
    }
    return result;
  }
  self.ftype=colheader.getAttribute("ftype");
  if(self.ftype == null){
    return;
  }
  columninx=getinx();
  if(columninx == -1){
    return;
  }
  if(self.dataset.getproperty_recordcount() == 0){
    return;
  }
  currorder=colheader.getAttribute("curr_order") == "desc";
  high=self.htmltable().childNodes[1].rows.length;
  self.quicksortcell(columninx,1,high,currorder);
  nodes=self.htmltable().getElementsByTagName("thead")[0].getElementsByTagName("span");
  for(i=0;i<=nodes.length - 1;i++){
    el=nodes[i];
    if(el == colheader){
      if(currorder){
        el.parentNode.nextSibling.firstChild.setAttribute("src",composeresourceurl("ArrowDown.gif"));
        el.setAttribute("curr_order","asce");
      }else {
        el.parentNode.nextSibling.firstChild.setAttribute("src",composeresourceurl("ArrowUp.gif"));
        el.setAttribute("curr_order","desc");
      }
    }else {
      el.parentNode.nextSibling.firstChild.setAttribute("src",composeresourceurl("Blank.gif"));
      el.setAttribute("curr_order","");
    }
  }
}

function tdataform_quicksortcell(columninx,low,high,desc){
  var self=this;
  var i,j,p;
  do{
    i=low;
    j=high;
    p=high >> 1;
    p=(low + high) >> 1;
    do{
      while(self.comparecells(columninx,i - 1,p - 1,desc) < 0){
        i++;
      }
      while(self.comparecells(columninx,j - 1,p - 1,desc) > 0){
        j--;
      }
      if(i <= j){
        self.swaptablerows(i - 1,j - 1);
        if(p == i){
          p=j;
        }else 
        if(p == j){
          p=i;
        }
        i++;
        j--;
      }
    }while(!(i > j));
    if(low < j){
      self.quicksortcell(columninx,low,j,desc);
    }
    low=i;
  }while(!(i >= high));
}

function tdataform_comparecells(inx,binx1,binx2,desc){
  var self=this;
  var result;
  var row1,row2,s1,s2,table;
  table=self.htmltable().childNodes[1];
  row1=table.rows[binx1];
  row2=table.rows[binx2];
  if(row1.cells[inx].firstChild.nodeName != "TABLE"){
    s1=row1.cells[inx].firstChild.innerHTML;
    s2=row2.cells[inx].firstChild.innerHTML;
  }else {
    s1=row1.cells[inx].getElementsByTagName("span")[0].innerHTML;
    s2=row2.cells[inx].getElementsByTagName("span")[0].innerHTML;
  }
  result=0;
  switch(self.ftype){
    case "integer":;
    case "longint":;
    case "smallint":;
    case "int":
    result=strtoint(s1) - strtoint(s2);
    break;
    case "double":;
    case "single":;
    case "real":
    result=ceil(strtofloat(s1) - strtofloat(s2));
    break;
  default:
    if(s1 < s2){
      result=-1;
    }else 
    result=(s1 > s2)?1:0;
  }
  if(desc){
    return -result;
  }
  return result;
}

function tdataform_swaptablerows(binx1,binx2){
  var self=this;
  var row1,row2,ref,parent,table;
  table=self.htmltable().childNodes[1];
  row1=table.rows[binx1];
  row2=table.rows[binx2];
  ref=row2.nextSibling;
  parent=row1.parentNode;
  parent.insertBefore(row2,row1);
  parent.insertBefore(row1,ref);
}

function tdataform_getstate(){
  var self=this;
  var result;
  var saved,nodes,fname,srlz,i,ischanged;
  try{
    ischanged=false;
    nodes=self.htmltable().getElementsByTagName("input");
    for(i=0;i<=nodes.length - 1;i++){
      fname=nodes[i].getAttribute("fname");
      if(fname == null){
        continue;
      }
      srlz=self.dataset.getproperty_dbrecordserializer().getproperty_child(fname);
      if(srlz != null){
        saved=srlz.readstring();
        if(nodes[i].value != saved){
          ischanged=true;
          srlz.writestring(nodes[i].value);
        }
      }
    }
    if(ischanged){
      self.dataset.markrecord(0);
    }
    result=true;
  }catch(ExceptObject){
    result=false;
  }
  return result;
}

function tdataform_checkdataformready(formopener){
  var self=this;
  self.setproperty_formreadystate(2);
  formopener.checkformready(null);
}

function tdataform_encodesourcename(src){

  var result;
  result=src;
  result=replacestring(result," ","_");
  return replacestring(result,"\\$","_");
}

function tdataform_getproperty_datasource(){
  var self=this;
  var result;
  var i;
  result=self.currentparameters.getparamvalue("DataSource");
  if(result == ""){
    for(i=0;i<=catalog().items.fcount - 1;i++){
      if(_IS(catalog().items.get(i),ttabledata)){
        result=catalog().items.get(i).name;
        self.currentparameters.update("DataSource",result);
        return result;
      }
    }
  }
  return result;
}

function tdataform_setproperty_datasource(s){

}

function doopendataform(formref,target,openformparameters){  if(!dataformregistered){
    catalog().adddynamicformdata("TDataForm",tdataform);
    dataformregistered=true;
  }
  xapp.openform(formref,target,openformparameters);
}

_lddmods["SystemDataForm"]=true;
function tserializablefieldinfo(){}
function Register_tserializablefieldinfo(){
  if(IsRegisteredtserializablefieldinfo)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tserializablefieldinfo";
  p.zc=tserializablefieldinfo;
  p.ParentClass=tobject;
  p.create=tserializablefieldinfo_create;
  p.typeinfo=tserializablefieldinfo_typeinfo;
  tserializablefieldinfo.prototype=p;
  IsRegisteredtserializablefieldinfo=true;
}
function Create_tserializablefieldinfo(p){
  Register_tserializablefieldinfo();
  if(p==void(0))var p=new tserializablefieldinfo();
  p=Create_tobject(p);
  p.zb="tserializablefieldinfo";
  p.name=null;
  p.typename=null;
  p.ftypeinfo=null;
  return p
}

function tserializablemethodparaminfo(){}
function Register_tserializablemethodparaminfo(){
  if(IsRegisteredtserializablemethodparaminfo)return;
  Register_tserializablefieldinfo();
  var p=new tserializablefieldinfo();
  p.zb="tserializablemethodparaminfo";
  p.zc=tserializablemethodparaminfo;
  p.ParentClass=tserializablefieldinfo;
  p.create=tserializablemethodparaminfo_create;
  tserializablemethodparaminfo.prototype=p;
  IsRegisteredtserializablemethodparaminfo=true;
}
function Create_tserializablemethodparaminfo(p){
  Register_tserializablemethodparaminfo();
  if(p==void(0))var p=new tserializablemethodparaminfo();
  p=Create_tserializablefieldinfo(p);
  p.zb="tserializablemethodparaminfo";
  p.paramtype=null;
  return p
}

function tserializabletypeinfo(){}
function Register_tserializabletypeinfo(){
  if(IsRegisteredtserializabletypeinfo)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tserializabletypeinfo";
  p.zc=tserializabletypeinfo;
  p.ParentClass=tobject;
  p.create=tserializabletypeinfo_create;
  p.createserializer=tserializabletypeinfo_createserializer;
  p.xmltype=tserializabletypeinfo_xmltype;
  p.xmltag=tserializabletypeinfo_xmltag;
  tserializabletypeinfo.prototype=p;
  IsRegisteredtserializabletypeinfo=true;
}
function Create_tserializabletypeinfo(p){
  Register_tserializabletypeinfo();
  if(p==void(0))var p=new tserializabletypeinfo();
  p=Create_tobject(p);
  p.zb="tserializabletypeinfo";
  p.kind=null;
  p.typename=null;
  return p
}

function tserializableenumtypeinfo(){}
function Register_tserializableenumtypeinfo(){
  if(IsRegisteredtserializableenumtypeinfo)return;
  Register_tserializabletypeinfo();
  var p=new tserializabletypeinfo();
  p.zb="tserializableenumtypeinfo";
  p.zc=tserializableenumtypeinfo;
  p.ParentClass=tserializabletypeinfo;
  p.create=tserializableenumtypeinfo_create;
  p.xmltag=tserializableenumtypeinfo_xmltag;
  tserializableenumtypeinfo.prototype=p;
  IsRegisteredtserializableenumtypeinfo=true;
}
function Create_tserializableenumtypeinfo(p){
  Register_tserializableenumtypeinfo();
  if(p==void(0))var p=new tserializableenumtypeinfo();
  p=Create_tserializabletypeinfo(p);
  p.zb="tserializableenumtypeinfo";
  p.enumnameproc=null;
  p.enumvalueproc=null;
  return p
}

function tserializablecomplextypeinfo(){}
function Register_tserializablecomplextypeinfo(){
  if(IsRegisteredtserializablecomplextypeinfo)return;
  Register_tserializabletypeinfo();
  var p=new tserializabletypeinfo();
  p.zb="tserializablecomplextypeinfo";
  p.zc=tserializablecomplextypeinfo;
  p.ParentClass=tserializabletypeinfo;
  p.create=tserializablecomplextypeinfo_create;
  p.addfield=tserializablecomplextypeinfo_addfield;
  tserializablecomplextypeinfo.prototype=p;
  IsRegisteredtserializablecomplextypeinfo=true;
}
function Create_tserializablecomplextypeinfo(p){
  Register_tserializablecomplextypeinfo();
  if(p==void(0))var p=new tserializablecomplextypeinfo();
  p=Create_tserializabletypeinfo(p);
  p.zb="tserializablecomplextypeinfo";
  p.fields=null;
  p.attrs=null;
  return p
}

function tserializablelistinfo(){}
function Register_tserializablelistinfo(){
  if(IsRegisteredtserializablelistinfo)return;
  Register_tserializablecomplextypeinfo();
  var p=new tserializablecomplextypeinfo();
  p.zb="tserializablelistinfo";
  p.zc=tserializablelistinfo;
  p.ParentClass=tserializablecomplextypeinfo;
  p.create=tserializablelistinfo_create;
  p.getlistmembertypeinfo=tserializablelistinfo_getlistmembertypeinfo;
  tserializablelistinfo.prototype=p;
  IsRegisteredtserializablelistinfo=true;
}
function Create_tserializablelistinfo(p){
  Register_tserializablelistinfo();
  if(p==void(0))var p=new tserializablelistinfo();
  p=Create_tserializablecomplextypeinfo(p);
  p.zb="tserializablelistinfo";
  return p
}

function tserializableclassinfo(){}
function Register_tserializableclassinfo(){
  if(IsRegisteredtserializableclassinfo)return;
  Register_tserializablecomplextypeinfo();
  var p=new tserializablecomplextypeinfo();
  p.zb="tserializableclassinfo";
  p.zc=tserializableclassinfo;
  p.ParentClass=tserializablecomplextypeinfo;
  p.create=tserializableclassinfo_create;
  p.ancestortypeinfo=tserializableclassinfo_ancestortypeinfo;
  p.xmltag=tserializableclassinfo_xmltag;
  tserializableclassinfo.prototype=p;
  IsRegisteredtserializableclassinfo=true;
}
function Create_tserializableclassinfo(p){
  Register_tserializableclassinfo();
  if(p==void(0))var p=new tserializableclassinfo();
  p=Create_tserializablecomplextypeinfo(p);
  p.zb="tserializableclassinfo";
  p.bindproc=null;
  p.xmlnamespacealias=null;
  p.xmlnamespace=null;
  p.encoded=null;
  p.ancestor=null;
  p.fancestortypeinfo=null;
  return p
}

function tserializablemethodinfo(){}
function Register_tserializablemethodinfo(){
  if(IsRegisteredtserializablemethodinfo)return;
  Register_tserializablecomplextypeinfo();
  var p=new tserializablecomplextypeinfo();
  p.zb="tserializablemethodinfo";
  p.zc=tserializablemethodinfo;
  p.ParentClass=tserializablecomplextypeinfo;
  p.create=tserializablemethodinfo_create;
  p.xmltag=tserializablemethodinfo_xmltag;
  p.addfield=tserializablemethodinfo_addfield;
  tserializablemethodinfo.prototype=p;
  IsRegisteredtserializablemethodinfo=true;
}
function Create_tserializablemethodinfo(p){
  Register_tserializablemethodinfo();
  if(p==void(0))var p=new tserializablemethodinfo();
  p=Create_tserializablecomplextypeinfo(p);
  p.zb="tserializablemethodinfo";
  p.requestnamespacealias=null;
  p.requestnamespace=null;
  p.replynamespacealias=null;
  p.replynamespace=null;
  p.requestencoded=null;
  p.replyencoded=null;
  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;
  p.create=tserializer_create;
  p.destroy=tserializer_destroy;
  p.dataisnull=tserializer_dataisnull;
  p.getparamtype=tserializer_getparamtype;
  p.bind=tserializer_bind;
  p.binddynalist=tserializer_binddynalist;
  p.bindchild=tserializer_bindchild;
  p.serialize=tserializer_serialize;
  p.deserialize=tserializer_deserialize;
  p.serializeattr=tserializer_serializeattr;
  p.deserializeattr=tserializer_deserializeattr;
  p.readdatetime=tserializer_readdatetime;
  p.writedatetime=tserializer_writedatetime;
  p.readboolean=tserializer_readboolean;
  p.writeboolean=tserializer_writeboolean;
  p.readstring=tserializer_readstring;
  p.writestring=tserializer_writestring;
  p.getproperty_child=tserializer_getproperty_child;
  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.name=null;
  p.typeinfo=null;
  p.headerinfo=null;
  p.parent=null;
  p.data=null;
  p.children=null;
  p.attrs=null;
  return p
}

function tsoapheaderinfo(){}
function Register_tsoapheaderinfo(){
  if(IsRegisteredtsoapheaderinfo)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tsoapheaderinfo";
  p.zc=tsoapheaderinfo;
  p.ParentClass=tobject;
  tsoapheaderinfo.prototype=p;
  IsRegisteredtsoapheaderinfo=true;
}
function Create_tsoapheaderinfo(p){
  Register_tsoapheaderinfo();
  if(p==void(0))var p=new tsoapheaderinfo();
  p=Create_tobject(p);
  p.zb="tsoapheaderinfo";
  p.headernamespace=null;
  return p
}

function tserializabletypes(){}
function Register_tserializabletypes(){
  if(IsRegisteredtserializabletypes)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tserializabletypes";
  p.zc=tserializabletypes;
  p.ParentClass=tobject;
  p.create=tserializabletypes_create;
  p.gettypeinfox=tserializabletypes_gettypeinfox;
  tserializabletypes.prototype=p;
  IsRegisteredtserializabletypes=true;
}
function Create_tserializabletypes(p){
  Register_tserializabletypes();
  if(p==void(0))var p=new tserializabletypes();
  p=Create_tobject(p);
  p.zb="tserializabletypes";
  p.types=null;
  p.soapheaderinfos=null;
  return p
}

function tsoapclient(){}
function Register_tsoapclient(){
  if(IsRegisteredtsoapclient)return;
  Register_tobject();
  var p=new tobject();
  p.zb="tsoapclient";
  p.zc=tsoapclient;
  p.ParentClass=tobject;
  p.create=tsoapclient_create;
  p.destroy=tsoapclient_destroy;
  p.resetfault=tsoapclient_resetfault;
  p.setdefaultvalues=tsoapclient_setdefaultvalues;
  p.syshandleresponse=tsoapclient_syshandleresponse;
  p.xmlhttprequesthandleresponse=tsoapclient_xmlhttprequesthandleresponse;
  p.handleresponse=tsoapclient_handleresponse;
  p.getmethodurl=tsoapclient_getmethodurl;
  p.writeln=tsoapclient_writeln;
  p.write=tsoapclient_write;
  p.bind=tsoapclient_bind;
  p.loadxmlfault=tsoapclient_loadxmlfault;
  p.deserialize=tsoapclient_deserialize;
  p.serialize=tsoapclient_serialize;
  p.execute=tsoapclient_execute;
  tsoapclient.prototype=p;
  IsRegisteredtsoapclient=true;
}
function Create_tsoapclient(p){
  Register_tsoapclient();
  if(p==void(0))var p=new tsoapclient();
  p=Create_tobject(p);
  p.zb="tsoapclient";
  p.inputstream=null;
  p.outputstream=null;
  p.xmldom=null;
  p.status=null;
  p.soapheader=null;
  p.soapmessage=null;
  p.soapbody=null;
  p.soapenvolope=null;
  p.serializer=null;
  p.requestheaderserializers=null;
  p.replyheaderserializers=null;
  p.serviceurl=null;
  p.proxyurl=null;
  p.methodname=null;
  p.soapaction=null;
  p.useproxyserver=null;
  p.faultcode=null;
  p.faultstring=null;
  p.faultactor=null;
  p.faultdetails=null;
  p.onwebmethodreturn=_IMthod(false);
  p.xmlhttprequest=null;
  return p
}

var fserializabletypes=null;
var cxmlheader;cxmlheader='<?xml version="1.0" encoding="utf-8"?>';
var cxmlsoapuri;cxmlsoapuri="http://schemas.xmlsoap.org/soap/envelope/";
var cxmlschemauri;cxmlschemauri="http://www.w3.org/2001/XMLSchema";
var cxmlschemainstanceuri;cxmlschemainstanceuri="http://www.w3.org/2001/XMLSchema-instance";
var cxmlhttprequestsucceeded;cxmlhttprequestsucceeded=0;
var cxmlhttprequestinprogress;cxmlhttprequestinprogress=1;
var cschemansa;cschemansa="xsd";
var cschemainstancensa;cschemainstancensa="xsi";
var csoapenvelopnsa;csoapenvelopnsa="SOAP-ENV";
function serializabletypes(){

  if(fserializabletypes == null){
    fserializabletypes=Create_tserializabletypes().create();
  }
  return fserializabletypes;
}

function firstchildelement(xmlnode){
  var result;
  result=null;
  if(xmlnode == null){
    return result;
  }
  result=xmlnode.firstChild;
  while((result != null) && (result.nodeType != 1)){
    result=result.nextSibling;
  }
  return result;
}

function enquote(s){
  var result;
  result=s;
  if(result == ""){
    return result;
  }
  result=replacestring(result,"&","&amp;");
  result=replacestring(result,"<","&lt;");
  return replacestring(result,">","&gt;");
}

function dequote(s){
  var result;
  result=s;
  if(result == ""){
    return result;
  }
  result=replacestring(result,"&amp;","&");
  result=replacestring(result,"&lt;","<");
  result=replacestring(result,"&gt;",">");
  result=replacestring(result,"&apos;","'");
  return replacestring(result,"&quot;",'"');
}

function tserializablefieldinfo_create(aname,atypename){
  var self=this;
  tobject.prototype.create.call(self);
  self.name=aname;
  self.typename=atypename;
  self.ftypeinfo=null;
  return self;
}

function tserializablefieldinfo_typeinfo(){
  var self=this;

  if(self.ftypeinfo == null){
    self.ftypeinfo=serializabletypes().gettypeinfox(self.typename);
  }
  return self.ftypeinfo;
}

function tserializabletypeinfo_create(atypename,akind){
  var self=this;
  tobject.prototype.create.call(self);
  self.kind=akind;
  self.typename=atypename;
  serializabletypes().types.add(self);
  return self;
}

function tserializablemethodparaminfo_create(aname,atypename,aparamtype){
  var self=this;
  tserializablefieldinfo.prototype.create.call(self, aname,atypename);
  self.paramtype=aparamtype;
  return self;
}

function tserializabletypeinfo_createserializer(aparent,aname){
  var self=this;

  return Create_tserializer().create(aparent,aname,self);
}

function tserializabletypeinfo_xmltype(){
  var self=this;

  switch(self.kind){
    case 0:
    return "boolean";
    case 1:
    return "int";
    case 2:
    return "short";
    case 3:
    return "string";
    case 4:
    return (stringsequal(self.typename,"boolean"))?"boolean":"";
    case 5:
    return "float";
    case 6:
    return "string";
    case 7:
    return "dateTime";
    case 8:
    return "date";
    case 9:
    return "time";
    case 10:
    return "double";
    case 11:
    return "double";
    case 12:
    return "double";
  default:
    return self.classname();
  }
}

function tserializabletypeinfo_xmltag(serializer,endtag,encoded){
  var self=this;
  var result;
  if(endtag){
    return serializer.name;
  }else {
    result=(encoded)?serializer.name + ' xsi:type="xsd:' + self.xmltype() + '"':serializer.name;
    if(serializer.headerinfo != null){
      if(serializer.headerinfo.headernamespace != ""){
        return result + ' xmlns="' + serializer.headerinfo.headernamespace + '"';
      }
    }
  }
  return result;
}

function tserializableenumtypeinfo_create(atypename,aenumnameproc,aenumvalueproc){
  var self=this;
  tserializabletypeinfo.prototype.create.call(self, atypename,4);
  self.enumnameproc=aenumnameproc;
  self.enumvalueproc=aenumvalueproc;
  return self;
}

function tserializableenumtypeinfo_xmltag(serializer,endtag,encoded){
  var self=this;
  var result;
  result=(stringsequal(self.typename,"boolean"))?tserializabletypeinfo.prototype.xmltag.call(self, serializer,endtag,encoded):serializer.name;
  if(serializer.headerinfo != null){
    if(serializer.headerinfo.headernamespace != ""){
      return result + ' xmlns="' + serializer.headerinfo.headernamespace + '"';
    }
  }
  return result;
}

function tserializablecomplextypeinfo_create(atypename,akind){
  var self=this;
  tserializabletypeinfo.prototype.create.call(self, atypename,akind);
  self.fields=CreateList(null,null,Create_tserializablefieldinfo,tobject_create);
  self.attrs=CreateList(null,null,Create_tserializablefieldinfo,tobject_create);
  return self;
}

function tserializablecomplextypeinfo_addfield(aname,atypename){
  var self=this;
  self.fields.add(Create_tserializablefieldinfo().create(aname,atypename));
}

function tserializableclassinfo_create(atypename,aancestor,abindproc){
  var self=this;
  tserializablecomplextypeinfo.prototype.create.call(self, atypename,13);
  self.ancestor=aancestor;
  self.bindproc=abindproc;
  self.fancestortypeinfo=null;
  self.xmlnamespacealias="";
  self.encoded=false;
  self.xmlnamespace="";
  return self;
}

function tserializableclassinfo_ancestortypeinfo(){
  var self=this;

  if(self.fancestortypeinfo != null){
    return self.fancestortypeinfo;
  }else 
  if(self.ancestor != ""){
    self.fancestortypeinfo=serializabletypes().gettypeinfox(self.ancestor);
    return self.fancestortypeinfo;
  }else 
    return null;
}

function tserializableclassinfo_xmltag(serializer,endtag,encoded){
  var self=this;
  var result;
  if(self.xmlnamespace != ""){
    if(endtag){
      return self.xmlnamespacealias + ":" + serializer.name;
    }else {
      result=(encoded)?self.xmlnamespacealias + ":" + serializer.name + ' xsi:type="xsd:' + self.xmltype() + '" xmlns:' + self.xmlnamespacealias + '="' + self.xmlnamespace + '"':self.xmlnamespacealias + ":" + serializer.name + " xmlns:" + self.xmlnamespacealias + '="' + self.xmlnamespace + '"';
      if(serializer.headerinfo != null){
        if(serializer.headerinfo.headernamespace != ""){
          return result + ' xmlns="' + serializer.headerinfo.headernamespace + '"';
        }
      }
    }
  }else 
    return tserializablecomplextypeinfo.prototype.xmltag.call(self, serializer,endtag,encoded);
  return result;
}

function tserializablelistinfo_create(atypename){
  var self=this;
  tserializablecomplextypeinfo.prototype.create.call(self, atypename,15);
  return self;
}

function tserializablelistinfo_getlistmembertypeinfo(){
  var self=this;

  return (self.fields.fcount == 0)?null:self.fields.get(0).typeinfo();
}

function tserializablemethodinfo_create(atypename){
  var self=this;
  tserializablecomplextypeinfo.prototype.create.call(self, atypename,14);
  self.requestnamespacealias="";
  self.requestnamespace="";
  self.replynamespacealias="";
  self.replynamespace="";
  self.requestencoded=false;
  self.replyencoded=false;
  return self;
}

function tserializablemethodinfo_xmltag(serializer,endtag,encoded){
  var self=this;

  var ns1,ns2;
  if(self.requestnamespace != ""){
    if(self.requestnamespacealias != ""){
      ns1=self.requestnamespacealias + ":";
      ns2=":" + self.requestnamespacealias;
    }else {
      ns1="";
      ns2="";
    }
    return (endtag)?ns1 + serializer.name:ns1 + serializer.name + " xmlns" + ns2 + '="' + self.requestnamespace + '"';
  }else 
    return tserializablecomplextypeinfo.prototype.xmltag.call(self, serializer,endtag,encoded);
}

function tserializablemethodinfo_addfield(aname,atypename,aparamtype){
  var self=this;
  self.fields.add(Create_tserializablemethodparaminfo().create(aname,atypename,aparamtype));
}

function tserializer_create(aparent,aname,atypeinfo){
  var self=this;
  var i,mti,classtypeinfo,methodtypeinfo,tf;
  function initmembers(){    self.children=createfastlist();
    self.attrs=createfastlist();
  }
  function addchildren(fields,children){    var i,tf,mti,v;
    for(i=fields.fcount - 1;i>=0;i--){
      tf=fields.get(i);
      mti=tf.typeinfo();
      if(mti != null){
        v=mti.createserializer(self,tf.name);
        children.add(v);
      }
    }
  }
  tobject.prototype.create.call(self);
  self.parent=aparent;
  self.name=aname;
  self.typeinfo=atypeinfo;
  self.headerinfo=null;
  self.data=null;
  switch(self.typeinfo.kind){
    case 15:
    initmembers();
    break;
    case 13:
    initmembers();
    classtypeinfo=self.typeinfo;
    while(classtypeinfo != null){
      addchildren(classtypeinfo.fields,self.children);
      addchildren(classtypeinfo.attrs,self.attrs);
      classtypeinfo=classtypeinfo.ancestortypeinfo();
    }
    break;
    case 14:
    initmembers();
    methodtypeinfo=self.typeinfo;
    for(i=methodtypeinfo.fields.fcount - 1;i>=0;i--){
      tf=methodtypeinfo.fields.get(i);
      mti=tf.typeinfo();
      if(mti != null){
        self.children.add(mti.createserializer(self,tf.name));
      }
    }
  }
  return self;
}

function tserializer_destroy(){
  var self=this;
  function destroychildrenlist(children){    var i;
    if(children != null){
      for(i=children.fcount - 1;i>=0;i--){
        children.get(i).free();
      }
      children.free();
    }
  }
  destroychildrenlist(self.children);
  destroychildrenlist(self.attrs);
  self.name=null;
  self.typeinfo=null;
  self.data=null;
  tobject.prototype.destroy.call(self);
}

function tserializer_dataisnull(){
  var self=this;
  var result;
  result=true;
  if(self.data == null){
    return result;
  }
  if(!assigned(self.data.v)){
    return result;
  }
  switch(self.typeinfo.kind){
    case 9:;
    case 8:;
    case 7:
    if(self.data.v == nildatetime){
      return result;
    }
    break;
    case 6:
    if(self.data.v == nilstring){
      return result;
    }
    break;
    case 3:
    if(self.data.v == nilstring){
      return result;
    }
    break;
    case 2:;
    case 1:
    if((self.data.v == nilinteger) || isNaN(self.data.v)){
      return result;
    }
    break;
    case 11:
    if((self.data.v == nilreal) || isNaN(self.data.v)){
      return result;
    }
    break;
    case 10:
    if((self.data.v == nilreal) || isNaN(self.data.v)){
      return result;
    }
    break;
    case 12:
    if((self.data.v == nilreal) || isNaN(self.data.v)){
      return result;
    }
    break;
    case 5:
    if((self.data.v == nilreal) || isNaN(self.data.v)){
      return result;
    }
  }
  return false;
}

function tserializer_getparamtype(){
  var self=this;
  var result;
  var i;
  result=2;
  if(self.parent == null){
    return result;
  }
  if(!(_IS(self.parent.typeinfo,tserializablemethodinfo))){
    return result;
  }
  for(i=0;i<=self.parent.typeinfo.fields.fcount - 1;i++){
    if(stringsequal(self.name,self.parent.typeinfo.fields.get(i).name)){
      return self.parent.typeinfo.fields.get(i).paramtype;
    }
  }
  return result;
}

function isxmldatetime(xml){

  return (pos("T",xml) != 0) || (pos("Z",xml) != 0);
}

function tserializer_readdatetime(){
  var self=this;
  var result;
  result=null;
  if(self.data == null){
    return result;
  }
  if(_InSet(self.typeinfo.kind,_ISet(false,16,9,8,7))){
    return self.data.v;
  }
  return result;
}

function tserializer_writedatetime(d){
  var self=this;
  if(self.data == null){
    return;
  }
  if(_InSet(self.typeinfo.kind,_ISet(false,16,9,8,7))){
    self.data.v=d;
  }
}

function tserializer_readboolean(){
  var self=this;
  var result;
  result=nilboolean;
  if(self.data == null){
    return result;
  }
  if(self.typeinfo.kind == 0){
    return self.data.v;
  }
  return result;
}

function tserializer_writeboolean(b){
  var self=this;
  if(self.data == null){
    return;
  }
  if(self.typeinfo.kind == 0){
    self.data.v=b;
  }
}

function tserializer_writestring(s){
  var self=this;
  if(self.data == null){
    return;
  }
  switch(self.typeinfo.kind){
    case 9:
    self.data.v=(isxmldatetime(s))?xmltotime(s):null;
    break;
    case 8:
    self.data.v=(isxmldatetime(s))?xmltodate(s):null;
    break;
    case 7:
    self.data.v=(isxmldatetime(s))?xmltodatetime(s):null;
    break;
    case 6:
    self.data.v=s;
    break;
    case 0:
    self.data.v=stringsequal(s,"true") || stringsequal(s,"1");
    break;
    case 3:
    self.data.v=(s != "")?s.charAt(1-1):"\0";
    break;
    case 2:;
    case 1:
    self.data.v=strtoint(s);
    break;
    case 11:
    self.data.v=strtofloat(s);
    break;
    case 10:
    self.data.v=strtofloat(s);
    break;
    case 12:
    self.data.v=strtofloat(s);
    break;
    case 5:
    self.data.v=strtofloat(s);
    break;
    case 4:
    self.data.v=self.typeinfo.enumvalueproc(s);
  }
}

function tserializer_readstring(){
  var self=this;
  var result;
  result="";
  if(self.data == null){
    return result;
  }
  if(!assigned(self.data.v)){
    return result;
  }
  switch(self.typeinfo.kind){
    case 9:
    return timetoxml(self.data.v);
    case 8:
    return datetoxml(self.data.v);
    case 7:
    return datetimetoxml(self.data.v);
    case 6:
    return self.data.v;
    case 0:
    return (self.data.v)?"true":"false";
    case 3:
    return self.data.v;
    case 2:;
    case 1:
    return inttostr(self.data.v);
    case 11:
    return floattostr(self.data.v);
    case 12:
    return floattostr(self.data.v);
    case 10:
    return floattostr(self.data.v);
    case 5:
    return floattostr(self.data.v);
    case 4:
    return self.typeinfo.enumnameproc(self.data.v);
  }
  return result;
}

function tserializer_deserialize(currentxmlnode){
  var self=this;
  var xmlnode,serializer,i,inx=Init_data(true);
  var s;
  switch(self.typeinfo.kind){
    case 9:;
    case 8:;
    case 7:;
    case 6:;
    case 0:;
    case 3:;
    case 2:;
    case 1:;
    case 12:;
    case 11:;
    case 10:;
    case 5:;
    case 4:
    self.name=currentxmlnode.tagName;
    s="";
    for(i=0;i<=currentxmlnode.childNodes.length - 1;i++){
      if(assigned(currentxmlnode.childNodes.item(i))){
        s+=currentxmlnode.childNodes.item(i).nodeValue;
      }
    }
    self.writestring(dequote(s));
    break;
    case 13:;
    case 14:;
    case 15:
    if(self.typeinfo.kind == 15){
      self.binddynalist(currentxmlnode);
    }
    inx.v=0;
    for(i=0;i<=currentxmlnode.attributes.length - 1;i++){
      serializer=self.getproperty_child(currentxmlnode.attributes.item(i).nodeName);
      if(serializer != null){
        serializer.deserializeattr(currentxmlnode.attributes.item(i).nodeValue);
      }
    }
    for(i=0;i<=currentxmlnode.childNodes.length - 1;i++){
      xmlnode=currentxmlnode.childNodes[i];
      if(xmlnode.nodeType == dom_node_element_node){
        serializer=(self.typeinfo.kind == 15)?self.children.get(inx.v):self.getproperty_child(xmlnode.tagName);
        if(serializer != null){
          if((self.typeinfo.kind != 14) || (_InSet(serializer.getparamtype(),_ISet(false,3,1,2)))){
            serializer.deserialize(xmlnode);
          }
          inc(inx);
        }
      }
    }
  }
}

function tserializer_deserializeattr(value){
  var self=this;
  self.writestring(dequote(value));
}

function tserializer_serializeattr(soapclient,encoded){
  var self=this;
  switch(self.typeinfo.kind){
    case 9:;
    case 8:;
    case 7:;
    case 6:;
    case 0:;
    case 3:;
    case 2:;
    case 1:;
    case 11:;
    case 12:;
    case 10:;
    case 5:;
    case 4:
    if(!self.dataisnull()){
      soapclient.write(" " + self.typeinfo.xmltag(self,false,encoded) + '="' + enquote(self.readstring()) + '"');
    }
  }
}

function tserializer_serialize(soapclient,encoded){
  var self=this;
  var i,indent,serializer;
  function getindentstr(){
    var result;
    var p;
    result="        ";
    p=self;
    while(p.parent != null){
      result+="    ";
      p=p.parent;
    }
    return result;
  }
  indent=getindentstr();
  switch(self.typeinfo.kind){
    case 9:;
    case 8:;
    case 7:
    if(self.data != null){
      if(assigned(self.data.v)){
        soapclient.writeln(indent + "<" + self.typeinfo.xmltag(self,false,encoded) + ">" + self.readstring() + "</" + self.typeinfo.xmltag(self,true,encoded) + ">");
      }
    }
    break;
    case 6:;
    case 0:;
    case 3:;
    case 2:;
    case 1:;
    case 11:;
    case 12:;
    case 10:;
    case 5:;
    case 4:
    if(!self.dataisnull()){
      soapclient.writeln(indent + "<" + self.typeinfo.xmltag(self,false,encoded) + ">" + enquote(self.readstring()) + "</" + self.typeinfo.xmltag(self,true,encoded) + ">");
    }
    break;
    case 13:;
    case 14:;
    case 15:
    if(self.typeinfo.kind == 15){
      self.binddynalist(null);
    }
    soapclient.write(indent + "<" + self.typeinfo.xmltag(self,false,encoded));
    for(i=0;i<=self.attrs.fcount - 1;i++){
      serializer=self.attrs.get(i);
      serializer.serializeattr(soapclient,encoded);
    }
    soapclient.writeln(">");
    for(i=self.children.fcount - 1;i>=0;i--){
      serializer=self.children.get(i);
      if((self.typeinfo.kind != 14) || (_InSet(serializer.getparamtype(),_ISet(false,3,0,2)))){
        serializer.serialize(soapclient,encoded);
      }
    }
    soapclient.writeln(indent + "</" + self.typeinfo.xmltag(self,true,encoded) + ">");
  }
}

function tserializer_bind(p){
  var self=this;
  var cti;
  self.data=p;
  switch(self.typeinfo.kind){
    case 13:
    if((self.data != null) && (self.data.v != null)){
      cti=self.typeinfo;
      while(cti != null){
        cti.bindproc(self,p);
        cti=cti.ancestortypeinfo();
      }
    }
  }
}

function tserializer_binddynalist(currentxmlnode){
  var self=this;
  var l,i,ti,xmlnode,subitemname;
  if(self.data == null){
    return;
  }
  l=self.data.v;
  ti=self.typeinfo.getlistmembertypeinfo();
  subitemname=(self.typeinfo.fields.fcount > 0)?self.typeinfo.fields.get(0).name:"item";
  if(currentxmlnode != null){
    l.clear();
    self.children.clear();
    for(i=0;i<=currentxmlnode.childNodes.length - 1;i++){
      xmlnode=currentxmlnode.childNodes[i];
      if(xmlnode.nodeType == dom_node_element_node){
        l.addnewitem();
        self.children.add(ti.createserializer(self,subitemname));
      }
    }
  }else {
    self.children.clear();
    for(i=0;i<=l.fcount - 1;i++){
      self.children.add(ti.createserializer(self,subitemname));
    }
  }
  for(i=0;i<=self.children.fcount - 1;i++){
    self.children.get(i).bind(l.addressof(i));
  }
}

function tserializer_bindchild(fieldname,p){
  var self=this;
  var serializer;
  serializer=self.getproperty_child(fieldname);
  if(serializer != null){
    serializer.bind(p);
  }
}

function tserializer_getproperty_child(aname){
  var self=this;

  var i;
  aname=replacestring(aname," ","_");
  aname=replacestring(aname,"\\$","_");
  for(i=self.children.fcount - 1;i>=0;i--){
    if(stringsequal(self.children.get(i).name,aname)){
      return self.children.get(i);
    }
  }
  for(i=self.attrs.fcount - 1;i>=0;i--){
    if(stringsequal(self.attrs.get(i).name,aname)){
      return self.attrs.get(i);
    }
  }
  return null;
}

function tserializabletypes_create(){
  var self=this;
  tobject.prototype.create.call(self);
  fserializabletypes=self;
  self.types=CreateList(null,null,Create_tserializabletypeinfo,tobject_create);
  self.soapheaderinfos=CreateList(null,null,Create_tsoapheaderinfo,tobject_create);
  Create_tserializabletypeinfo().create("string",6);
  Create_tserializabletypeinfo().create("Smallint",2);
  Create_tserializabletypeinfo().create("Integer",1);
  Create_tserializabletypeinfo().create("Int",1);
  Create_tserializabletypeinfo().create("longint",1);
  Create_tserializabletypeinfo().create("Char",3);
  Create_tserializabletypeinfo().create("Boolean",0);
  Create_tserializabletypeinfo().create("Bool",0);
  Create_tserializabletypeinfo().create("Single",5);
  Create_tserializabletypeinfo().create("Real",5);
  Create_tserializabletypeinfo().create("Double",10);
  Create_tserializabletypeinfo().create("Extended",12);
  Create_tserializabletypeinfo().create("Currency",11);
  Create_tserializabletypeinfo().create("TDate",8);
  Create_tserializabletypeinfo().create("TTime",9);
  Create_tserializabletypeinfo().create("TDateTime",7);
  return self;
}

function tserializabletypes_gettypeinfox(typename){
  var self=this;

  var i;
  for(i=self.types.fcount - 1;i>=0;i--){
    if(stringsequal(self.types.get(i).typename,typename)){
      return self.types.get(i);
    }
  }
  return null;
}

function tsoapclient_create(amethodname){
  var self=this;
  var typeinfo;
  tobject.prototype.create.call(self);
  self.inputstream="";
  self.outputstream="";
  self.xmldom=null;
  self.serviceurl="";
  self.proxyurl="";
  self.methodname=replacestring(amethodname," ","_");
  self.useproxyserver=false;
  self.soapaction="";
  self.faultcode="";
  self.faultstring="";
  self.faultactor="";
  self.faultdetails="";
  self.xmlhttprequest=null;
  self.soapheader=null;
  self.soapmessage=null;
  self.soapbody=null;
  self.soapenvolope=null;
  self.requestheaderserializers=CreateList(null,null,Create_tserializer,tobject_create);
  self.replyheaderserializers=CreateList(null,null,Create_tserializer,tobject_create);
  typeinfo=serializabletypes().gettypeinfox(self.methodname);
  self.serializer=(typeinfo != null)?typeinfo.createserializer(null,self.methodname):null;
  self.setdefaultvalues();
  return self;
}

function tsoapclient_destroy(){
  var self=this;
  var i;
  for(i=0;i<=self.requestheaderserializers.fcount - 1;i++){
    self.requestheaderserializers.get(i).free();
  }
  self.requestheaderserializers.clear();
  self.requestheaderserializers.free();
  for(i=0;i<=self.replyheaderserializers.fcount - 1;i++){
    self.replyheaderserializers.get(i).free();
  }
  self.replyheaderserializers.clear();
  self.replyheaderserializers.free();
  if(self.serializer != null){
    self.serializer.free();
  }
  self.xmldom=null;
  if(self.xmlhttprequest != null){
    self.xmlhttprequest.free();
    self.xmlhttprequest=null;
  }
  tobject.prototype.destroy.call(self);
}

function tsoapclient_resetfault(){
  var self=this;
  self.faultcode="";
  self.faultstring="";
  self.faultactor="";
  self.faultdetails="";
}

function tsoapclient_setdefaultvalues(){

}

function tsoapclient_syshandleresponse(){
  var self=this;
  self.deserialize();
  try{
    self.handleresponse();
  }catch(e){
  }
  self.soapheader=null;
  self.soapmessage=null;
  self.soapbody=null;
  self.soapenvolope=null;
}

function tsoapclient_handleresponse(){
  var self=this;
  if(assigned(self.onwebmethodreturn)){
    self.onwebmethodreturn._o[self.onwebmethodreturn._p](self);
  }
}

function tsoapclient_write(s){
  var self=this;
  self.outputstream+=s;
}

function tsoapclient_writeln(s){
  var self=this;
  self.outputstream+=s + "\r\n";
}

function tsoapclient_bind(aname,p){
  var self=this;
  self.serializer.bindchild(aname,p);
}

function tsoapclient_loadxmlfault(faultelement){
  var self=this;
  var xmlnode,i,s;
  for(i=faultelement.childNodes.length - 1;i>=0;i--){
    xmlnode=faultelement.childNodes[i];
    if(xmlnode.nodeType == dom_node_element_node){
      s=(assigned(xmlnode.firstChild))?xmlnode.firstChild.nodeValue:"";
      if(stringsequal(extractname(xmlnode.nodeName),"FaultCode")){
        self.faultcode=s;
      }else 
      if(stringsequal(extractname(xmlnode.nodeName),"FaultString")){
        self.faultstring=s;
      }else 
      if(stringsequal(extractname(xmlnode.nodeName),"FaultActor")){
        self.faultactor=s;
      }else 
      if(stringsequal(extractname(xmlnode.nodeName),"FaultDetail")){
        self.faultdetails=s;
      }
    }
  }
}

function tsoapclient_deserialize(){
  var self=this;
  var i,xmlnode,xmlelement;
  xmlelement=self.xmldom.documentElement;
  if(extractname(xmlelement.tagName) == "Envelope"){
    self.soapenvolope=xmlelement;
    xmlnode=self.soapenvolope.firstChild;
    do{
      if(xmlnode.nodeType == 1){
        xmlelement=xmlnode;
        if(extractname(xmlelement.tagName) == "Body"){
          self.soapbody=xmlelement;
          self.soapmessage=firstchildelement(self.soapbody);
        }else 
        if(extractname(xmlelement.tagName) == "Header"){
          self.soapheader=xmlelement;
        }
      }
      xmlnode=xmlnode.nextSibling;
    }while(!(xmlnode == null));
    if(self.soapheader != null){
      i=0;
      xmlnode=self.soapheader.firstChild;
      do{
        if(xmlnode.nodeType == 1){
          xmlelement=xmlnode;
          if(i < self.replyheaderserializers.fcount){
            self.replyheaderserializers.get(i).deserialize(xmlelement);
          }
          i++;
        }
        xmlnode=xmlnode.nextSibling;
      }while(!(xmlnode == null));
    }
    if(self.soapbody != null){
      if(stringsequal(extractname(self.soapmessage.tagName),"Fault")){
        self.loadxmlfault(self.soapmessage);
      }else 
        self.serializer.deserialize(self.soapmessage);
    }
  }
}

function tsoapclient_serialize(){
  var self=this;
  var i;
  self.outputstream="";
  self.writeln(cxmlheader);
  self.writeln("<" + csoapenvelopnsa + ":Envelope ");
  self.writeln("    xmlns:" + cschemansa + '="' + cxmlschemauri + '"');
  self.writeln("    xmlns:" + cschemainstancensa + '="' + cxmlschemainstanceuri + '"');
  self.writeln("    xmlns:" + csoapenvelopnsa + '="' + cxmlsoapuri + '">');
  if(self.requestheaderserializers.fcount > 0){
    self.writeln("    <" + csoapenvelopnsa + ":Header>");
    for(i=0;i<=self.requestheaderserializers.fcount - 1;i++){
      self.requestheaderserializers.get(i).serialize(self,self.serializer.typeinfo.encoded);
    }
    self.writeln("    </" + csoapenvelopnsa + ":Header>");
  }
  self.writeln("    <" + csoapenvelopnsa + ":Body>");
  if(self.serializer != null){
    self.serializer.serialize(self,self.serializer.typeinfo.requestencoded);
  }
  self.writeln("    </" + csoapenvelopnsa + ":Body>");
  self.writeln("</" + csoapenvelopnsa + ":Envelope>");
}

function tsoapclient_xmlhttprequesthandleresponse(){
  var self=this;
  function getxmldom(){

    return (bRoWsEr.engineid == "GK")?strtoxmldocument(self.inputstream):self.xmlhttprequest.getproperty_responsexml();
  }
  if(self.xmlhttprequest != null){
    if(self.xmlhttprequest.getproperty_readystate() == 4){
      if(self.xmlhttprequest.getproperty_status() < 500){
        setcurrentthread(self.xmlhttprequest.threadid);
        self.inputstream=self.xmlhttprequest.getproperty_responsetext();
        self.xmldom=getxmldom();
        self.status=cxmlhttprequestsucceeded;
        xapp.doendload();
        self.syshandleresponse();
        if(self.xmlhttprequest != null){
          self.xmlhttprequest.free();
          self.xmlhttprequest=null;
        }
        resumethread(getcurrentthreadid());
      }
    }
  }
}

function tsoapclient_getmethodurl(){
  var self=this;

  return self.methodname + ".htm";
}

function tsoapclient_execute(){
  var self=this;
  var paramlist,ptcl,s,url;
  self.resetfault();
  self.serialize();
  self.status=cxmlhttprequestinprogress;
  paramlist=Create_tparameters().create();
  s=self.methodname;
  if(pos("_",s) == lEngTH(s)){
    s=copy(s,lEngTH(s),1);
  }
  paramlist.update("sid",securityid);
  paramlist.update("lng",currentlanguage);
  paramlist.update("xid",xappguid);
  ptcl="";
  if(self.useproxyserver){
    paramlist.update("cls","spxy");
    paramlist.update("serviceurl",self.serviceurl);
    paramlist.update("soapaction",self.soapaction);
    url=(self.proxyurl == "")?buildurl(self.getmethodurl(),paramlist,ptcl):self.proxyurl;
  }else 
  if(self.serviceurl == ""){
    paramlist.update("cls","soap");
    url=buildurl(self.getmethodurl(),paramlist,ptcl);
  }else 
    url=self.serviceurl;
  try{
    self.xmlhttprequest=Create_txmlhttprequestwrapper().create();
    self.xmlhttprequest.threadid=getcurrentthreadid();
    self.xmlhttprequest.setproperty_onreadystatechange(getMethodPointer(self,self.xmlhttprequesthandleresponse));
    self.xmlhttprequest.open("POST",url,true,"","");
    self.xmlhttprequest.send(self.outputstream);
    xapp.dobeginload();
  }catch(ExceptObject){
    showmessage(ExceptObject);
  }
}

_lddmods["SystemRPC"]=true;
function Init_tcontainercreationattrs(w,d){
  if(w){
    var p=AddWrapper(new Object());
    var q=p.v;
  } else {
    var p=new Object();
    var q=p;
  }
  q.cangrow=null;
  q.canshrink=null;
  q.shrinkonhide=null;
  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));
}

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.setupcontrolsoverflowproperty=container_setupcontrolsoverflowproperty;
  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.create0=container_create0;
  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=null;
  p.alignment=null;
  p.spacing=null;
  p.margin=null;
  p.offset=null;
  p.buttons=null;
  p.borderstyle=null;
  p.borderwidth=null;
  p.bordercolor=null;
  p.color=null;
  p.parentcolor=null;
  p.smallimages=null;
  p.buttonstyle=null;
  p.fontcolor=null;
  p.fontsize=null;
  p.fontname=null;
  p.fontstyle=Init_tfontstyles(false);
  p.autofont=null;
  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.applycolorstyle=tbandstyle_applycolorstyle;
  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 tembeddedfielddomhandlearray(){}
function Register_tembeddedfielddomhandlearray(){
  if(IsRegisteredtembeddedfielddomhandlearray)return;
  Register_tdomhandlearray();
  var p=new tdomhandlearray();
  p.zb="tembeddedfielddomhandlearray";
  p.zc=tembeddedfielddomhandlearray;
  p.ParentClass=tdomhandlearray;
  tembeddedfielddomhandlearray.prototype=p;
  IsRegisteredtembeddedfielddomhandlearray=true;
}
function Create_tembeddedfielddomhandlearray(p){
  Register_tembeddedfielddomhandlearray();
  if(p==void(0))var p=new tembeddedfielddomhandlearray();
  p=Create_tdomhandlearray(p);
  p.zb="tembeddedfielddomhandlearray";
  p.fieldname=null;
  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.getlayouttablerow=band_getlayouttablerow;
  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.create0=band_create0;
  p.destroy=band_destroy;
  p.freedom=band_freedom;
  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.fembeddedfieldlist=null;
  p.bandtype=null;
  p.navigationbar=null;
  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 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.getproperty_fontcolor=button_getproperty_fontcolor;
  p.setproperty_fontcolor=button_setproperty_fontcolor;
  p.createcontrolstyle=button_createcontrolstyle;
  p.getproperty_inputhandlearray=button_getproperty_inputhandlearray;
  p.allowcontrolstyles=button_allowcontrolstyles;
  p.updateexclusive=button_updateexclusive;
  p.handleeffect=button_handleeffect;
  p.attacheffecteventhandlers=button_attacheffecteventhandlers;
  p.create0=button_create0;
  p.destroy=button_destroy;
  p.freedom=button_freedom;
  p.setupdomhandle=button_setupdomhandle;
  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=null;
  p.fdown=null;
  p.fgroupindex=null;
  p.fbtnhandlearray=null;
  return p
}

function Init_tcheckboxcreationattrs(w,d){
  if(w){
    var p=AddWrapper(new Object());
    var q=p.v;
  } else {
    var p=new Object();
    var q=p;
  }
  q.cangrow=null;
  q.canshrink=null;
  q.checked=null;
  q.caption=null;
  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 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_inputhandlearray=checkbox_getproperty_inputhandlearray;
  p.setupcontrolsoverflowproperty=checkbox_setupcontrolsoverflowproperty;
  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.attachdomeventhandlers=checkbox_attachdomeventhandlers;
  p.detachdomeventhandlers=checkbox_detachdomeventhandlers;
  p.create0=checkbox_create0;
  p.destroy=checkbox_destroy;
  p.freedom=checkbox_freedom;
  p.getcontrolhtml=checkbox_getcontrolhtml;
  p.setupdomhandle=checkbox_setupdomhandle;
  p.contentheight=checkbox_contentheight;
  p.serialize=checkbox_serialize;
  p.deserialize=checkbox_deserialize;
  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.fcheckboxhandlearray=null;
  p.fcaptionhandlearray=null;
  p.checkboxattrs=Init_tcheckboxcreationattrs(false);
  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 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.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.attachdomeventhandlers=listbox_attachdomeventhandlers;
  p.islistcontrol=listbox_islistcontrol;
  p.clearvalue=listbox_clearvalue;
  p.create0=listbox_create0;
  p.destroy=listbox_destroy;
  p.freedom=listbox_freedom;
  p.setupdomhandle=listbox_setupdomhandle;
  p.getcontrolhtml=listbox_getcontrolhtml;
  p.serialize=listbox_serialize;
  p.deserialize=listbox_deserialize;
  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=null;
  p.flistitemstyleobj=null;
  p.fitems=null;
  p.fvalues=null;
  p.fitemindex=null;
  p.flisthandlearray=null;
  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 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.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.getproperty_inputhandlearray=buttoneditor_getproperty_inputhandlearray;
  p.setproperty_enabled=buttoneditor_setproperty_enabled;
  p.handleeffect=buttoneditor_handleeffect;
  p.attachdomeventhandlers=buttoneditor_attachdomeventhandlers;
  p.dropdown=buttoneditor_dropdown;
  p.isdroppeddown=buttoneditor_isdroppeddown;
  p.setupdomhandle=buttoneditor_setupdomhandle;
  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=null;
  return p
}

function tinplaceedit(){}
function Register_tinplaceedit(){
  if(IsRegisteredtinplaceedit)return;
  Register_textedit();
  var p=new textedit();
  p.zb="tinplaceedit";
  p.zc=tinplaceedit;
  p.ParentClass=textedit;
  p.isinplace=tinplaceedit_isinplace;
  tinplaceedit.prototype=p;
  IsRegisteredtinplaceedit=true;
}
function Create_tinplaceedit(p){
  Register_tinplaceedit();
  if(p==void(0))var p=new tinplaceedit();
  p=Create_textedit(p);
  p.zb="tinplaceedit";
  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;
  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=null;
  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.create0=combobox_create0;
  p.destroy=combobox_destroy;
  p.indexof=combobox_indexof;
  p.deserialize=combobox_deserialize;
  p.serialize=combobox_serialize;
  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=null;
  p.fautocomplete=null;
  p.fautodropdown=null;
  p.fautocompletedelay=null;
  p.fstyle=null;
  p.fautocompleteintervalid=null;
  p.flastkey=null;
  p.flookupsource=null;
  p.flookupfield=null;
  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.utctime=datetimeedit_utctime;
  p.create0=datetimeedit_create0;
  p.serialize=datetimeedit_serialize;
  p.deserialize=datetimeedit_deserialize;
  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=null;
  p.fformat=null;
  p.showcheckbox=null;
  p.checked=null;
  return p
}

function datetimepicker(){}
function Register_datetimepicker(){
  if(IsRegistereddatetimepicker)return;
  Register_twebcontrol();
  var p=new twebcontrol();
  p.zb="datetimepicker";
  p.zc=datetimepicker;
  p.ParentClass=twebcontrol;
  p.setproperty_datetime=datetimepicker_setproperty_datetime;
  p.update=datetimepicker_update;
  p.updatedaystyle=datetimepicker_updatedaystyle;
  p.setupdaystyle=datetimepicker_setupdaystyle;
  p.applystyletoelement=datetimepicker_applystyletoelement;
  p.attachdomeventhandlers=datetimepicker_attachdomeventhandlers;
  p.getinnerhtml=datetimepicker_getinnerhtml;
  p.setupeventhandlers=datetimepicker_setupeventhandlers;
  p.getelementbyid=datetimepicker_getelementbyid;
  p.handleonclick=datetimepicker_handleonclick;
  p.handlemouseover=datetimepicker_handlemouseover;
  p.handlemouseout=datetimepicker_handlemouseout;
  p.create0=datetimepicker_create0;
  p.setupdomhandle=datetimepicker_setupdomhandle;
  p.getctrlhtmlstyle=datetimepicker_getctrlhtmlstyle;
  p.nextyear=datetimepicker_nextyear;
  p.previousyear=datetimepicker_previousyear;
  p.nextmonth=datetimepicker_nextmonth;
  p.previousmonth=datetimepicker_previousmonth;
  datetimepicker.prototype=p;
  IsRegistereddatetimepicker=true;
}
function Create_datetimepicker(p){
  Register_datetimepicker();
  if(p==void(0))var p=new datetimepicker();
  p=Create_twebcontrol(p);
  p.zb="datetimepicker";
  p.fdatetime=null;
  p.fuseabsoluteposition=null;
  p.fheaderstyleobj=null;
  p.fdaythismonthstyleobj=null;
  p.fdayothermonthstyleobj=null;
  p.fdaynamesstyleobj=null;
  p.ftodaystyleobj=null;
  p.fprevyearobj=null;
  p.fprevmonthobj=null;
  p.fnextyearobj=null;
  p.fnextmonthobj=null;
  p.headercolor=null;
  p.headerforecolor=null;
  p.headerbordercolor=null;
  p.daysforecolor=null;
  p.mouseovercolor=null;
  p.selectedcolor=null;
  p.selectedbordercolor=null;
  p.disabledforecolor=null;
  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;
  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 calendarheader(){}
function Register_calendarheader(){
  if(IsRegisteredcalendarheader)return;
  Register_tstyleholdercontainer();
  var p=new tstyleholdercontainer();
  p.zb="calendarheader";
  p.zc=calendarheader;
  p.ParentClass=tstyleholdercontainer;
  calendarheader.prototype=p;
  IsRegisteredcalendarheader=true;
}
function Create_calendarheader(p){
  Register_calendarheader();
  if(p==void(0))var p=new calendarheader();
  p=Create_tstyleholdercontainer(p);
  p.zb="calendarheader";
  return p
}

function calendardaytoday(){}
function Register_calendardaytoday(){
  if(IsRegisteredcalendardaytoday)return;
  Register_tstyleholdercontainer();
  var p=new tstyleholdercontainer();
  p.zb="calendardaytoday";
  p.zc=calendardaytoday;
  p.ParentClass=tstyleholdercontainer;
  calendardaytoday.prototype=p;
  IsRegisteredcalendardaytoday=true;
}
function Create_calendardaytoday(p){
  Register_calendardaytoday();
  if(p==void(0))var p=new calendardaytoday();
  p=Create_tstyleholdercontainer(p);
  p.zb="calendardaytoday";
  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 calendardaynames(){}
function Register_calendardaynames(){
  if(IsRegisteredcalendardaynames)return;
  Register_tstyleholderbutton();
  var p=new tstyleholderbutton();
  p.zb="calendardaynames";
  p.zc=calendardaynames;
  p.ParentClass=tstyleholderbutton;
  calendardaynames.prototype=p;
  IsRegisteredcalendardaynames=true;
}
function Create_calendardaynames(p){
  Register_calendardaynames();
  if(p==void(0))var p=new calendardaynames();
  p=Create_tstyleholderbutton(p);
  p.zb="calendardaynames";
  return p
}

function calendarprevyear(){}
function Register_calendarprevyear(){
  if(IsRegisteredcalendarprevyear)return;
  Register_tstyleholderbutton();
  var p=new tstyleholderbutton();
  p.zb="calendarprevyear";
  p.zc=calendarprevyear;
  p.ParentClass=tstyleholderbutton;
  calendarprevyear.prototype=p;
  IsRegisteredcalendarprevyear=true;
}
function Create_calendarprevyear(p){
  Register_calendarprevyear();
  if(p==void(0))var p=new calendarprevyear();
  p=Create_tstyleholderbutton(p);
  p.zb="calendarprevyear";
  return p
}

function calendarnextyear(){}
function Register_calendarnextyear(){
  if(IsRegisteredcalendarnextyear)return;
  Register_tstyleholderbutton();
  var p=new tstyleholderbutton();
  p.zb="calendarnextyear";
  p.zc=calendarnextyear;
  p.ParentClass=tstyleholderbutton;
  calendarnextyear.prototype=p;
  IsRegisteredcalendarnextyear=true;
}
function Create_calendarnextyear(p){
  Register_calendarnextyear();
  if(p==void(0))var p=new calendarnextyear();
  p=Create_tstyleholderbutton(p);
  p.zb="calendarnextyear";
  return p
}

function calendarprevmonth(){}
function Register_calendarprevmonth(){
  if(IsRegisteredcalendarprevmonth)return;
  Register_tstyleholderbutton();
  var p=new tstyleholderbutton();
  p.zb="calendarprevmonth";
  p.zc=calendarprevmonth;
  p.ParentClass=tstyleholderbutton;
  calendarprevmonth.prototype=p;
  IsRegisteredcalendarprevmonth=true;
}
function Create_calendarprevmonth(p){
  Register_calendarprevmonth();
  if(p==void(0))var p=new calendarprevmonth();
  p=Create_tstyleholderbutton(p);
  p.zb="calendarprevmonth";
  return p
}

function calendarnextmonth(){}
function Register_calendarnextmonth(){
  if(IsRegisteredcalendarnextmonth)return;
  Register_tstyleholderbutton();
  var p=new tstyleholderbutton();
  p.zb="calendarnextmonth";
  p.zc=calendarnextmonth;
  p.ParentClass=tstyleholderbutton;
  calendarnextmonth.prototype=p;
  IsRegisteredcalendarnextmonth=true;
}
function Create_calendarnextmonth(p){
  Register_calendarnextmonth();
  if(p==void(0))var p=new calendarnextmonth();
  p=Create_tstyleholderbutton(p);
  p.zb="calendarnextmonth";
  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 calendar(){}
function Register_calendar(){
  if(IsRegisteredcalendar)return;
  Register_tpartscontainer();
  var p=new tpartscontainer();
  p.zb="calendar";
  p.zc=calendar;
  p.ParentClass=tpartscontainer;
  p.updatedatetimepickerstyle=calendar_updatedatetimepickerstyle;
  p.setdatetime=calendar_setdatetime;
  p.getdatetime=calendar_getdatetime;
  p.handledatetimepickerchange=calendar_handledatetimepickerchange;
  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.datetimepickerpart=null;
  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.handledatetimepickerchange=popupcalendar_handledatetimepickerchange;
  p.isinplace=popupcalendar_isinplace;
  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 buttoneditorpopup(){}
function Register_buttoneditorpopup(){
  if(IsRegisteredbuttoneditorpopup)return;
  Register_twebpopupcontrol();
  var p=new twebpopupcontrol();
  p.zb="buttoneditorpopup";
  p.zc=buttoneditorpopup;
  p.ParentClass=twebpopupcontrol;
  p.geteditcontrol=buttoneditorpopup_geteditcontrol;
  p.updateafterdrop=buttoneditorpopup_updateafterdrop;
  p.create0=buttoneditorpopup_create0;
  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_twebpopupcontrol(p);
  p.zb="buttoneditorpopup";
  p.ffixedwith=null;
  p.fpopupctrl=null;
  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;
  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 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.clearvalue=textedit_clearvalue;
  p.getvalue=textedit_getvalue;
  p.setvalue=textedit_setvalue;
  p.getproperty_fontsize=textedit_getproperty_fontsize;
  p.setproperty_fontsize=textedit_setproperty_fontsize;
  p.getproperty_fontcolor=textedit_getproperty_fontcolor;
  p.setproperty_fontcolor=textedit_setproperty_fontcolor;
  p.createcontrolstyle=textedit_createcontrolstyle;
  p.allowcontrolstyles=textedit_allowcontrolstyles;
  p.getproperty_inputhandlearray=textedit_getproperty_inputhandlearray;
  p.handleeffect=textedit_handleeffect;
  p.attacheffecteventhandlers=textedit_attacheffecteventhandlers;
  p.handlechange=textedit_handlechange;
  p.attachdomeventhandlers=textedit_attachdomeventhandlers;
  p.detachdomeventhandlers=textedit_detachdomeventhandlers;
  p.create0=textedit_create0;
  p.destroy=textedit_destroy;
  p.getcontrolhtml=textedit_getcontrolhtml;
  p.freedom=textedit_freedom;
  p.setupdomhandle=textedit_setupdomhandle;
  p.setuptexteditattrs=textedit_setuptexteditattrs;
  p.serialize=textedit_serialize;
  p.deserialize=textedit_deserialize;
  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=null;
  p.fmaxlength=null;
  p.fispassword=null;
  p.fselectonfocus=null;
  p.fedithandlearray=null;
  return p
}

function Init_timagecreationattrs(w,d){
  if(w){
    var p=AddWrapper(new Object());
    var q=p.v;
  } else {
    var p=new Object();
    var q=p;
  }
  q.pic=null;
  q.stretch=null;
  q.bundled=null;
  q.stretchmode=null;
  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.preloadimagesforie6=timagestyle_preloadimagesforie6;
  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 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.create0=image_create0;
  p.destroy=image_destroy;
  p.freedom=image_freedom;
  p.getcontrolhtml=image_getcontrolhtml;
  p.contentheight=image_contentheight;
  p.setupdomhandle=image_setupdomhandle;
  p.setupimageattrs=image_setupimageattrs;
  p.deserialize=image_deserialize;
  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.imgvisiblearray=null;
  p.fimghandlearray=null;
  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=null;
  return p
}

function Init_ttextlabelcreationattrs(w,d){
  if(w){
    var p=AddWrapper(new Object());
    var q=p.v;
  } else {
    var p=new Object();
    var q=p;
  }
  q.cangrow=null;
  q.canshrink=null;
  q.ishyperlink=null;
  q.wordwrap=null;
  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 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.setupvaluesarray=textlabel_setupvaluesarray;
  p.hastextcaption=textlabel_hastextcaption;
  p.allowcontrolstyles=textlabel_allowcontrolstyles;
  p.setupcontrolsoverflowproperty=textlabel_setupcontrolsoverflowproperty;
  p.format=textlabel_format;
  p.isdatetimefield=textlabel_isdatetimefield;
  p.formatdatetimefield=textlabel_formatdatetimefield;
  p.create0=textlabel_create0;
  p.destroy=textlabel_destroy;
  p.getcontrolhtml=textlabel_getcontrolhtml;
  p.ishyperlink=textlabel_ishyperlink;
  p.contentheight=textlabel_contentheight;
  p.freedom=textlabel_freedom;
  p.setupdomhandle=textlabel_setupdomhandle;
  p.serialize=textlabel_serialize;
  p.deserialize=textlabel_deserialize;
  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.fhiddendomhandlearray=null;
  p.fvaluearray=null;
  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=new Object();
    var q=p;
  }
  q.cangrow=null;
  q.canshrink=null;
  q.checked=null;
  q.caption=null;
  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 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_inputhandlearray=optionbutton_getproperty_inputhandlearray;
  p.setupcontrolsoverflowproperty=optionbutton_setupcontrolsoverflowproperty;
  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.attachdomeventhandlers=optionbutton_attachdomeventhandlers;
  p.detachdomeventhandlers=optionbutton_detachdomeventhandlers;
  p.create0=optionbutton_create0;
  p.destroy=optionbutton_destroy;
  p.freedom=optionbutton_freedom;
  p.getcontrolhtml=optionbutton_getcontrolhtml;
  p.setupdomhandle=optionbutton_setupdomhandle;
  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.foptionbtnhandlearray=null;
  p.fcaptionhandlearray=null;
  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 Init_tsubformcreationattrs(w,d){
  if(w){
    var p=AddWrapper(new Object());
    var q=p.v;
  } else {
    var p=new Object();
    var q=p;
  }
  q.defaultformref=null;
  q.masterdatafield=null;
  q.childdatafield=null;
  q.formbufferlimit=null;
  q.ispopup=null;
  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.masterdatafield=SetVal(p.masterdatafield,GetVal(d.masterdatafield));
  p.childdatafield=SetVal(p.childdatafield,GetVal(d.childdatafield));
  p.formbufferlimit=SetVal(p.formbufferlimit,GetVal(d.formbufferlimit));
  p.ispopup=SetVal(p.ispopup,GetVal(d.ispopup));
}

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 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.create0=subform_create0;
  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=null;
  p.fiframehandlearray=null;
  p.femptyhandlearray=null;
  p.fformbeingrefreshed=null;
  p.subformattrs=Init_tsubformcreationattrs(false);
  p.floatingwindow=null;
  p.formopeners=null;
  p.inactiveforms=null;
  p.destructorcalled=null;
  p.ondestroy=_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.istabsheet=tabsheet_istabsheet;
  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 tabcontrol(){}
function Register_tabcontrol(){
  if(IsRegisteredtabcontrol)return;
  Register_container();
  var p=new container();
  p.zb="tabcontrol";
  p.zc=tabcontrol;
  p.ParentClass=container;
  p.setproperty_height=tabcontrol_setproperty_height;
  p.allowcontrolstyles=tabcontrol_allowcontrolstyles;
  p.createcontrolstyle=tabcontrol_createcontrolstyle;
  p.getactivetabsheet=tabcontrol_getactivetabsheet;
  p.create0=tabcontrol_create0;
  p.destroy=tabcontrol_destroy;
  p.contentheight=tabcontrol_contentheight;
  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=null;
  p.activepagename=null;
  p.hidetabs=null;
  p.tabheight=null;
  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.initcurrentstyle=popupbutton_initcurrentstyle;
  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.initcurrentstyle=popuplabel_initcurrentstyle;
  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.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.reposition=popupheader_reposition;
  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";
  p.fbutton=null;
  p.flabel=null;
  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.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=Crea