
//-----------------------------------------------------------------------------
// CustType: 0 = Old, 1 = New
var CurCustType = -1;

function ShowCust(CustType)
{
  if((CustType==1) && Cust.LoggedIn)
  {
    alert('U dient eerst uit te loggen voordat u een nieuwe klant kunt aanmaken');
  }
  else
  {
    for(var i=0; i<2; i++)
    {
      var tab = document.getElementById('ctab_'+i);
      var ext = document.getElementById('cust_'+i);

      if(tab && ext)
      {
        tab.className = CustType == i ? 'act' : '';
        ext.style.display = CustType == i ? '' : 'none';
      }
    }
    CurCustType = CustType;

    var el;
    el = document.getElementById('cust_2');
    if(el) el.style.display = Cust.LoggedIn || CurCustType==1 ? '' : 'none';

    el = document.getElementById('cust_login');
    if(el) el.style.display = !Cust.LoggedIn ? '' : 'none';

    el = document.getElementById('cust_loggedin');
    if(el) el.style.display = Cust.LoggedIn ? '' : 'none';

    el = document.getElementById('li_login');
    if(el) el.style.display = !Cust.LoggedIn ? '' : 'none';

    el = document.getElementById('li_loggedin');
    if(el) el.style.display = Cust.LoggedIn ? '' : 'none';

    el = document.getElementById('mt_login');
    if(el) {el.innerHTML = Cust.LoggedIn ? 'Control Panel' : 'Login'; el.href = Cust.LoggedIn ? '/ControlPanel' : '/Login';}

    el = document.getElementById('a_login');
    if(el) {el.innerHTML = Cust.LoggedIn ? 'control panel' : 'login'; el.href = Cust.LoggedIn ? '/ControlPanel' : '/Login';}

    el = document.getElementById('f_tBankAccount');
    if(el) el.disabled = Cust.LoggedIn;
  }
  return false;
}

//-----------------------------------------------------------------------------

function OnBankAcc(el)
{
  if(el) el.value = el.value.replace(/[^0-9]+/g,'');
}

//-----------------------------------------------------------------------------

function OnName(el, Focus, Type)
{
  var val;

  switch(Type)
  {
    case 0: val = 'voornaam';   break;
    case 1: val = 'tussen';     if(!Focus) return; break;
    case 2: val = 'achternaam'; break;
    default: return;
  }
  if(Focus)
  {
    if(el.value==val)
    {
      el.value='';
    }
  }
  else if(el.value == '')
  {
    el.value=val;
  }
}

//-----------------------------------------------------------------------------
var tmCheckZip = null;
var Streets = new Array();
var Cities  = new Array();
var CurZipEl = null;


function ShowSampleZip() // and set regex
{
  var sel = document.getElementById('f_sCountry');
  var el  = document.getElementById('samplezip');
  if(sel)
  {
    switch(sel.value)
    {
      default:
      case 'Nederland':
        el.innerHTML = '1234 AA';
        Cust.Validate[Cust.PostcodeID] = "^[0-9]{4} ?[a-zA-Z]{2}$";
        Cust.FactValidate[Cust.FactPostcodeID] = "^[0-9]{4} ?[a-zA-Z]{2}$";
        break;
      case 'Belgie'   :
        el.innerHTML = '1234';
        Cust.Validate[Cust.PostcodeID] = "^[0-9]{4}$";
        Cust.FactValidate[Cust.FactPostcodeID] = "^[0-9]{4}$";
        break;
    }
  }
}

function WaitZIP(el)
{
  CurZipEl = el;

  if(tmCheckZip)
  {
    clearTimeout(tmCheckZip);
    tmCheckZip = null;
  }
}

function CheckZIP(Fact)
{
  if(Fact)
  {
    fcnt = document.getElementById('f_sFactCountry');
    fzip = document.getElementById('f_tFactPostalCode');
    fno  = document.getElementById('f_tFactHouseNo');
  }
  else
  {
    fcnt = document.getElementById('f_sCountry');
    fzip = document.getElementById('f_tPostalCode');
    fno  = document.getElementById('f_tHouseNo');
  }

  if(!fcnt || (fcnt.value == 'Nederland') || (fcnt.value == ''))
  {
    if(fzip && fno)
    {
      zip = fzip.value;
      no  = fno .value;

      zip_ok = (/^([0-9]{4}) *([A-Za-z]{2})$/.test(zip));
      no_ok  = (/^\d+$/.test(no));

      fzip.style.borderColor = (zip_ok || (zip.length==0)) ? '' : 'red';
      fno .style.borderColor = (no_ok  || (no .length==0)) ? '' : 'red';

      if(zip_ok && no_ok)
      {
        if(CurZipEl)
        {
          CurZipEl.blur();
        }

        var code = zip+no;
        if(Streets[code] && Cities[code])
        {
          GetZIP(Fact, Streets[code], Cities[code], code);
        }
        else
        {
          if(tmCheckZip) clearTimeout(tmCheckZip);
          tmCheckZip = setTimeout("ADRequest('GetZip', 'postcode\\n"+(Fact?1:0)+"\\n"+code+"', 'zip')", 100);
        }
      }
    }
  }
  else
  {
    fzip.style.borderColor = '';
    fno .style.borderColor = '';
  }
  CurZipEl = null;
}

//---

function GetZIP(Fact, Street, City, Code)
{
  var elStreet, elCity;
  if(Fact)
  {
    elStreet = document.getElementById('f_tFactStreet');
    elCity   = document.getElementById('f_tFactCity');
  }
  else
  {
    elStreet = document.getElementById('f_tStreet');
    elCity   = document.getElementById('f_tCity');
  }

  if(elStreet && elCity)
  {
    elStreet.value = Street;
    elCity.value   = City;
  }

  Streets[Code] = Street;
  Cities[Code]  = City;
}

//---

function NoZIP()
{
  var el;

  alert('Het automatisch postcode opzoek systeem is tijdelijk buiten gebruik.\nVul zelf de straat & woonplaats in a.u.b.');
  el=document.getElementById('trStreet'    ); if(el) el.style.display='';
  el=document.getElementById('trCity'      ); if(el) el.style.display='';

  if(Custs.Data['f_cFactDifferent'])
  {
    el=document.getElementById('trFactStreet'); if(el) el.style.display='';
    el=document.getElementById('trFactCity'  ); if(el) el.style.display='';
  }
}

//-----------------------------------------------------------------------------

function CCust()
{
  this.Invalid  = 0;
  this.Msg      = '';
  this.ID       = -1;
  this.Descr    = new Array('Voornaam'              , 'Tussenvoegsel'        , 'Achternaam'            , 'Bedrijfsnaam'          , 'Postcode'               , 'Huisnummer'  , 'Huisnummer toevoeging'  , 'Straatnaam'            , 'Plaatsnaam'            , 'Land'                  , 'Telefoonnummer'     , 'E-mailadres'                                      , 'Factuur e-mailadres'                                 , 'Banknaam'                    , 'Rekeningnummer', 'Tenaamstelling'        , 'Informatie', 'Administratief contact', 'Akkoord'       );
  this.Fields   = new Array('f_tFirstname'          , 'f_tInfix'             , 'f_tSurname'            , 'f_tName'               , 'f_tPostalCode'          , 'f_tHouseNo'  , 'f_tHouseAdd'            , 'f_tStreet'             , 'f_tCity'               , 'f_sCountry'            , 'f_tTelephone'       , 'f_tEmail'                                         , 'f_tFactEmail'                                        , 'f_tBank'                     , 'f_tBankAccount', 'f_tBankAccName'        , 'f_cMailing', 'f_cFactDifferent'      , 'f_cAcceptTerms');
  this.Validate = new Array("^["+CharSet+"]{1,100}$", "^["+CharSet+"]{0,10}$", "^["+CharSet+"]{2,100}$", "^["+CharSet+"]{0,100}$", "^[0-9]{4} ?[a-zA-Z]{2}$", "^[0-9]{1,5}$", "^[A-Za-z0-9 &.-/]{0,8}$", "^["+CharSet+"]{0,100}$", "^["+CharSet+"]{0,100}$", "^["+CharSet+"]{0,100}$", "^[0-9 +().-]{8,35}$", "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$", "^([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})?$", "^[A-Za-z0-9 '()&`_.-]{2,35}$", "^[0-9]{5,9}$"  , "^["+CharSet+"]{2,100}$", "^[0-1]?$"  , "^[0-1]?$"              , "^[0-1]?$"      );
  this.PostcodeID = 4;

  this.FactDescr    = new Array('Admin Naam'                           , 'Admin Postcode'         , 'Admin Huisnummer', 'Admin Huisnummer toevoeging', 'Admin Straat'          ,'Admin Plaats'           , 'Land'                  );
  this.FactFields   = new Array('f_tFactName'                          , 'f_tFactPostalCode'      , 'f_tFactHouseNo'  , 'f_tFactHouseAdd'            , 'f_tFactStreet'         ,'f_tFactCity'            , 'f_sFactCountry'        );
  this.FactValidate = new Array("^["+CharSetNS+"]+ ["+CharSet+"]{1,100}$", "^[0-9]{4} ?[a-zA-Z]{2}$", "^[0-9]{1,5}$"    , "^[A-Za-z0-9 /&.-]{0,8}$"    , "^["+CharSet+"]{0,100}$", "^["+CharSet+"]{0,100}$", "^["+CharSet+"]{0,100}$");
  this.FactPostcodeID = 1;

  this.Data     = new Array();
  this.Data['f_cMailing'] = true;
  this.LoggedIn = false;
  this.Reseller = false;
  this.AutoSign = false;
  this.AutoOK   = false;
  this.OrgID    = -1;

  //---
  this.Export = function()
  {
    var exp = '\n<customer>';
    var Field;

    var Fields=this.Fields.concat(this.FactFields);

    for(var i in Fields)
    {
      Field = Fields[i];
      if(typeof(this.Data[Field]) != 'undefined') exp += '<'+Field+'>'+encodeURIComponent(this.Data[Field])+'</'+Field+'>\n';
    }
    exp += '</customer>';
    return exp;
  }

  //---
  this.PassExport = function(Type)
  {
    var exp = '\n<passinfo>';
    if(Type == 1) exp += '<pass>'+this.Data['f_tPass']+'</pass>\n';
    if(Type == 2) exp += '<domlogin>'+this.Data['f_cDomLogin']+'</domlogin>\n';
    if(Type == 3) exp += '<autook>'+this.Data['f_cAutoOK']+'</autook>\n';
    exp += '</passinfo>';
    return exp;
  }

  //---
  this.SetForm = function()
  {
    var el, i, field;
    var Fields=this.Fields.concat(this.FactFields);

    for(i in Fields)
    {
      field = Fields[i];
      if(typeof(this.Data[field]) == 'undefined') this.Data[field] = '';
      el = document.getElementById(field);
      if(el)
      {
        switch(el.type)
        {
          case 'checkbox':  el.checked = this.Data[field] ? true : false; break;
          case 'select-one':if(!this.Data[field]) break;
          case 'text':      el.value   = this.Data[field]; break;
        }
        el.style.borderColor = '';
        if(i < 3) OnName(el, 0, i-0);
      }
    }
    ShowFact();
    ShowSampleZip();
/*
    field = (this.Data['f_tName'] ? this.Data['f_tName'].substr(0, 26)+'<br/>' : '')+
            (this.Data['f_tFirstname']+' '+(this.Data['f_tInfix']).trim()+' '+this.Data['f_tSurname']).substr(0, 26).trim();

    field = (this.Data['f_tName'] ? this.Data['f_tName'].substr(0, 26) : ((this.Data['f_tFirstname']+' '+this.Data['f_tInfix']).trim()+' '+this.Data['f_tSurname']).substr(0, 26).trim())+
            '<br/>'+ this.Data['f_tEmail'].substr(0, 26);
*/
    field = (this.Data['f_tName'] ? this.Data['f_tName'] : ((this.Data['f_tFirstname']+' '+this.Data['f_tInfix']).trim()+' '+this.Data['f_tSurname']).trim())+
            '<br/>'+ this.Data['f_tEmail'];

    el = document.getElementById('li_name');   if(el) el.innerHTML = field.replace(/ /g, '&nbsp;');
    el = document.getElementById('li_number'); if(el) el.innerHTML = this.OrgID ? this.OrgID : '-';
    el = document.getElementById('cust_name');   if(el) el.innerHTML = field.replace(/ /g, '&nbsp;');
    el = document.getElementById('cust_number'); if(el) el.innerHTML = this.OrgID ? this.OrgID : '-';
  }

  //---
  this.SetPass = function(SkipPass)
  {
    var el;
    el = document.getElementById('tEmail');   if(el) el.innerHTML = this.Data['f_tEmail'];
    if(!SkipPass) el = document.getElementById('f_tPass');  if(el) el.value     = this.Data['f_tPass'];
    el = document.getElementById('chk_on');   if(el) el.style.display = this.Data['f_cDomLogin'] ? '' : 'none';
    el = document.getElementById('chk_off');  if(el) el.style.display = this.Data['f_cDomLogin'] ? 'none' : '';
    el = document.getElementById('acc_on');   if(el) el.style.display = this.Data['f_cAutoOK']   ? '' : 'none';
    el = document.getElementById('acc_off');  if(el) el.style.display = this.Data['f_cAutoOK']   ? 'none' : '';
  }

  //---
  this.OnLoginKey = function(Type, e)
  {
    var key=e.keyCode || e.which;
    if(key==13)
    {
      this.Login(Type);
    }
  }

  //---
  this.Login = function(Type)
  {
    var usr = document.getElementById(Type ? 'li_user' : 'cust_user');
    var pas = document.getElementById(Type ? 'li_pass' : 'cust_pass');
    if(usr && pas)
    {
      usr.value = usr.value.trim();
      pas.value = pas.value.trim();
           if(usr.value.length == 0) usr.focus();
      else if(pas.value.length == 0) pas.focus();
      else ADRequest('Login', usr.value+'\n'+calcMD5('AD'+pas.value+ADSess));

      pas.value = '';
    }
  }

  //---
  this.Logout = function()
  {
    var usr  = document.getElementById('cust_user');
    var pas = document.getElementById('cust_pass');
    if(usr && pas)
    {
      usr.value = '';
      pas.value = '';
    }
    usr  = document.getElementById('li_user');
    pas = document.getElementById('li_pass');
    if(usr && pas)
    {
      usr.value = '';
      pas.value = '';
    }
    this.ID       = -1;
    this.Data     = new Array();
    this.Data['f_cMailing'] = true;
    this.LoggedIn = false;
    this.SetForm();
    if(typeof(Whos) != 'undefined')
    {
      Whos.Clean();
      SetAllLists();

      if((typeof(StepSet) != 'undefined') &&
         (StepSet > 2))
      {
        StepGo = 2;
        GoStep();
      }
    }
    ShowCust(0);
    ADRequest('Logout');
  }

  //---
  this.CheckCust = function(Quiet)
  {
    if((CurCustType == 0) &&
       !this.LoggedIn)
    {
      if(!Quiet) alert("Log in met uw account gegevens, of kies voor 'Nieuwe Klant'");
      return false;
    }
    if(!Cust.GetForm())
    {
      if(!Quiet) alert(Cust.Msg);
      return false;
    }
    if( typeof(Whos)!='undefined' &&
        Whos &&
       !Whos.Whos[0].Data['w_tName'])
    {
      this.CopyToWho(Whos.Whos[0]);
      SetWhoList();
    }
    return true;
  }

  //---
  this.CheckPass = function()
  {
    var el;
    el = document.getElementById('f_tPass');     if(el) this.Data['f_tPass'] = el.value;
    el = document.getElementById('f_cDomLogin'); if(el) this.Data['f_cDomLogin'] = el.checked ? 1 : 0;

    var reg = new RegExp("^[A-Za-z0-9_.!@-]{3,20}$");
    if(!reg.test(this.Data['f_tPass']))
    {
      alert('Uw wachtwoord voldoet niet. Gebruik minimaal 3, maximaal 20 tekens');
      return false
    }

    return true;
  }

  //---
  this.GetFormData = function(Fact)
  {
    var Fields   = Fact ? this.FactFields   : this.Fields;
    var Validate = Fact ? this.FactValidate : this.Validate;
    var Descr    = Fact ? this.FactDescr    : this.Descr;

    var el, i, field, reg;
    var len = Fields.length;
    var Msg = '';

    for(i=0; i<len; i++)
    {
      field = Fields[i];
      el = document.getElementById(field);
      if(el)
      {
        if(!Fact && (i < 3)) OnName(el, 1, i-0);
        switch(el.type)
        {
          case 'checkbox':  this.Data[field] = el.checked ? 1 : 0; break;
          case 'select-one':
          case 'text':      this.Data[field] = el.value;           break;
        }
        if(!Fact || (this.Data['f_cFactDifferent']))
        {
          reg = new RegExp(Validate[i]);
          if(!reg.test(this.Data[field]))
          {
            if(this.Invalid == 0)
            {
              try
              {
                el.focus();
                el.select();
              }
              catch(e) {}
            };
            this.Invalid++;
            Msg += ' - '+Descr[i]+'\n';
          }
        }
        if(!Fact && (i < 3)) OnName(el, 0, i-0);
      }
    }
    return Msg;
  }

  //---
  this.GetForm = function()
  {
    this.Invalid = 0;
    var Msg = this.GetFormData(false)+this.GetFormData(true);

    if(this.Invalid == 1)
    {
      this.Msg = 'Controleer het volgende veld\n'+Msg;
    }
    else if(this.Invalid > 1)
    {
      this.Msg = 'Controleer de volgende velden\n'+Msg;
    }
    else if(!this.Data['f_cAcceptTerms'])
    {
      this.Invalid = 1;
      this.Msg = 'U dient akkoord te gaan met de algemene voorwaarden.';
    }

    return this.Invalid==0;
  }

  //---
  this.CopyToWho = function(Who)
  {
    Who.Data['ID']            = this.ID;
    Who.Data['w_tName']       = (this.Data['f_tFirstname']+' '+(this.Data['f_tInfix']?this.Data['f_tInfix']:'').trim()+' '+this.Data['f_tSurname']).trim();
    Who.Data['w_tOrg']        = this.Data['f_tName'];
    Who.Data['w_tPostalCode'] = this.Data['f_tPostalCode'];
    Who.Data['w_tHouseNo']    = this.Data['f_tHouseNo'];
    Who.Data['w_tHouseAdd']   = this.Data['f_tHouseAdd'];
    Who.Data['w_tStreet']     = this.Data['f_tStreet'];
    Who.Data['w_tCity']       = this.Data['f_tCity'];
    Who.Data['w_sCountry']    = this.Data['f_sCountry'];
    Who.Data['w_tTelephone']  = this.Data['f_tTelephone'];
    Who.Data['w_tEmail']      = this.Data['f_tEmail'];
  }
}

//---------------------------

var Cust = new CCust();

