var common_owneridcode = 900;
var common_path = './common/';

var nodate = -2209161600*1000; //=30-12-1899
var nodateString = '30-12-1899';

var defaulteinddatum = new Date(Date.UTC(2037,11,31,0,0,0,0));

var ladenmededeling = "De gegevens worden geladen. Even geduld a.u.b. ...";

var secsperhour = 3600;
var secsperday = 24*secsperhour; //=86400;

var languagelijst   = 'nl=Nederlands|en=Engels';
var defaultlanguage = 'nl';
var language        = defaultlanguage;

var cookienaam = 'cvg';

var esList = 0;
var esView = 1;
var esEdit = 2;
var esNew  = 3;

function Record(id) {
  this.id=id;
  this.data='';
  this.tag=0;
}


//veldtype-constantes
var vtString          =  0;
var vtGetal           =  1;
var vtGetalNiet0      =  2;
var vtValuta          =  3; //echte waarde is dbwaarde/1000
var vtValutaNiet0     =  4;
var vtDatum           =  5; //dd-mm-jjjj
var vtDatumDag        =  6; //wd dd-mm-jjjj
var vtDatumTijd       =  7; //dd-mm-jjjj hh:nn:ss
var vtDatumMinuut     =  8; //dd-mm-jjjj hh:nn
var vtDatumNiet0      =  9; //dd-mm-jjjj tenzij =0, dan leeg
var vtTijd            = 10; //hh:nn:ss
var vtTijdMinuut      = 11; //hh:nn
var vtTijdMinuutNiet0 = 12; //hh:nn tenzij =0, dan leeg
var vtGeo             = 13; //geografische lengte/breedte; echte waarde is dbwaarde/1000000
var vtTekst           = 14; //decimalen bevat aantal regels
var vtLijst           = 15;
var vtLijst2          = 16;
var vtFunction        = 17;
var vtTaal            = 18;

var voNiet  =-1; //
var voIs    = 0; //is
var voTekst = 1; //o.a. %str%
var voGetal = 2; //> <
var voBevat = 3; //%str%

var vrKleinGroot = 0;
var vrGrootKlein = 1;

var veld_language = 'nl';

///////////////////////////////////////////////////////////////////////// Cookie

function Cookie(name) {
  this.cookiename=cookienaam+'_'+name;
  this.id='';
  this.editstatus=esList;
  
  this.value=''; //hier wordt het gegevens-object aan toegewezen
}
Cookie.prototype.checkcookie = function() {
  var c = getcookie(this.cookiename);
  if ((c==null)||(c=='null')) c='';
//getid('txt').innerHTML+='<br>checkcookie='+c;
  if (c=='') {
    this.id='';
    this.editstatus=esList;
  } else {
    var a=c.split('@');
    this.id=a[0];
    this.editstatus=a[1];
  }
}
Cookie.prototype.maakcookie = function() {
  return setcookie(this.cookiename,this.id+"@"+this.editstatus,cookieduration);
}

/////////////////////////////////////////////////////////////////////////// Veld

function Veld(type,decimalen,breedte,naam,kolomtitel,veldnaam,operator,lijst,tabelnaam,veldconstructor,veldjoin,veldgroup) {
  this.type=type;
  this.decimalen=decimalen;
  this.breedte=breedte;
  this.editbreedte=breedte;
  this.naam=naam;
  if (kolomtitel=='') this.kolomtitel=naam;
                 else this.kolomtitel=kolomtitel;
  this.veldnaam=veldnaam;
  this.operator=operator;
  this.lijst=lijst;
  this.tabelnaam=tabelnaam;
  this.veldconstructor=veldconstructor;
  this.veldjoin=veldjoin;
  this.veldgroup=veldgroup;
  
  this.functionname='';
  this.tag=0;
}

Veld.prototype.maakvalue = function(s) {
  var st2=decode_special(assignValue(s,this.veldnaam));
  switch(this.type) {
  // case vtString :
  //   break;
    case vtGetal :
      st2+='&nbsp;&nbsp;';
      break;
    case vtGetalNiet0 :
      if (st2=='0') st2='';
      st2+='&nbsp;&nbsp;';
      break;
    case vtValuta :
      st2=valutainteger(st2,this.decimalen);
      st2+='&nbsp;&nbsp;';
      break;
    case vtValutaNiet0 :
      if (st2=='0') st2='';
               else st2=valutainteger(st2,this.decimalen);
      st2+='&nbsp;&nbsp;';
      break;
    case vtGeo :
      st2=geointeger(st2);
      st2+='&nbsp;&nbsp;';
      break;
    case vtDatum :
      st2=dateString(st2*1000,'dmy',(this.decimalen==1));
      break;
    case vtDatumDag :
      st2=dateString(st2*1000,'wdmy',(this.decimalen==1));
      st2+='&nbsp;&nbsp;';
      break;
    case vtDatumNiet0 :
//      if (st2=='0') st2=''; else
      st2=dateString(st2*1000,'zdmy',(this.decimalen==1));
      break;
    case vtDatumTijd :
//      if (st2=='0') st2=''; else
      st2=dateString(st2*1000,'zdmyhns',(this.decimalen==1));
      break;
    case vtDatumMinuut :
//      if (st2=='0') st2=''; else
      st2=dateString(st2*1000,'zdmyhn',(this.decimalen==1));
      break;
    case vtTijd :
      st2=timeString(st2);
      break;
    case vtTijdMinuut :
      st2=timeString_hm(st2);
      break;
    case vtTijdMinuutNiet0 :
      if (st2=='0') st2='';
               else st2=timeString_hm(st2);
      break;
    case vtTekst :
      st2='<textarea style="width:'+this.breedte+'px; height:'+(this.decimalen*16)+'px; border:0px solid #000000;" readonly>'+st2+'</textarea>';
//      st2='<textarea style="border:0px solid #000000;" cols="'+Math.floor((this.breedte-26)/5)+'" rows="'+this.decimalen+'" readonly onfocus="allowenter()" onblur="disallowenter()">'+st2+'</textarea>';
      break;
    case vtLijst :
      st2=veldlijstWaarde(this.lijst,st2);
      break;
    case vtLijst2 :
      var ar=this.lijst.split('|');
      var sx=s0=s1=tt='';
      var ii=0;
      for (var i=0; i<ar.length; i++) {
        sx=ar[i]; ii=sx.indexOf('='); s0=sx.substring(0,ii); s1=sx.substring(ii+1);
        if (st2.indexOf(s0)>=0) { if (tt!='') tt+=', '; tt+=s1; }
      }
      st2=tt;
      break;
    case vtFunction :
      if (this.functionname!='')
      st2=eval(this.functionname+"('"+st2+"')");
      break;
    case vtTaal :
      st2=decode_special(veldlijstWaarde(st2,veld_language));
      if (st2==veld_language) st2='';
      break;
  }
  return st2;
}

Veld.prototype.maaktdcolspan = function(s,colspan) {
  var st1='';
  switch(this.type) {
    case vtGetal :
    case vtGetalNiet0 :
    case vtValuta :
    case vtValutaNiet0 :
    case vtGeo :
    case vtDatumDag :
      st1=' text-align:right;';
      break;
  }
  st2=this.maakvalue(s);
  if (colspan>1) return '<td style="vertical-align:top;'+st1+'" colspan="'+colspan+'">'+st2+'</td>';
            else return '<td style="vertical-align:top;'+st1+'">'+st2+'</td>';
}

Veld.prototype.maaktd = function(s) {
 return this.maaktdcolspan(s,1);
}

Veld.prototype.maakcsv = function(s) {
  var st2=decode_special(assignValue(s,this.veldnaam));
  switch(this.type) {
  // case vtString :
  //   break;
    case vtGetal :
      break;
    case vtGetalNiet0 :
      if (st2=='0') st2='';
      break;
    case vtValuta :
      st2=(st2/1000).toFixed(this.decimalen);
      break;
    case vtValutaNiet0 :
      if (st2=='0') st2='';
               else st2=(st2/1000).toFixed(this.decimalen);
      break;
    case vtGeo :
      st2=(st2/1000000).toFixed(6);
      break;
    case vtDatum :
      st2=dateString(st2*1000,'dmy',(this.decimalen==1));
      break;
    case vtDatumDag :
      st2=dateString(st2*1000,'wdmy',(this.decimalen==1));
      break;
    case vtDatumNiet0 :
      if (st2=='0') st2='';
               else st2=dateString(st2*1000,'dmy',(this.decimalen==1));
      break;
    case vtDatumTijd :
      if (st2=='0') st2='';
               else st2=dateString(st2*1000,'dmyhns',(this.decimalen==1));
      break;
    case vtDatumMinuut :
      if (st2=='0') st2='';
               else st2=dateString(st2*1000,'dmyhn',(this.decimalen==1));
      break;
    case vtTijd :
      st2=timeString(st2);
      break;
    case vtTijdMinuut :
      st2=timeString_hm(st2);
      break;
    case vtTijdMinuutNiet0 :
      if (st2=='0') st2='';
               else st2=timeString_hm(st2);
      break;
    case vtTekst :
      break;
    case vtLijst :
      st2=veldlijstWaarde(this.lijst,st2);
      break;
    case vtLijst2 :
      var ar=this.lijst.split('|');
      var sx=s0=s1=tt='';
      var ii=0;
      for (var i=0; i<ar.length; i++) {
        sx=ar[i]; ii=sx.indexOf('='); s0=sx.substring(0,ii); s1=sx.substring(ii+1);
        if (st2.indexOf(s0)>=0) { if (tt!='') tt+=', '; tt+=s1; }
      }
      st2=tt;
      break;
    case vtFunction :
      if (this.functionname!='')
      st2=eval(this.functionname+"('"+st2+"')");
      break;
    case vtTaal :
      st2=veldlijstWaarde(st2,veld_language);
      if (st2==veld_language) st2='';
      break;
  }
  return st2;
}

/////////////////////////////////////////////////////////////////// Veldvolgorde

function Veldvolgorde(idx) {
  this.idx=idx;
  this.editidx=idx;
}
Veldvolgorde.prototype.zichtbaar = function() { //boolean
  return (this.editidx>0);
}
Veldvolgorde.prototype.setzichtbaar = function(truefalse) { //boolean zichtbaar
  if (truefalse) this.editidx=Math.abs(this.editidx);
            else this.editidx=-Math.abs(this.editidx);
  return (this.editidx>0);
}
Veldvolgorde.prototype.getindex = function() { //boolean zichtbaar
  return this.idx;
}

////////////////////////////////////////////////////////////////// Veldsortering

function Veldsortering(tabelnaam,veldnaam,richting) {
  this.tabelnaam=tabelnaam;
  this.veldnaam=veldnaam;
  this.richting=richting;
}

