
//------------------------------------------------------------------------------
// Validation style configuration
//------------------------------------------------------------------------------

var val_defaultborder = "1px solid #000";
var val_defaultbgcolor = "#FFF";
var val_defaultfontcolor = "#000";
var val_errorborder = "1px solid #000";
var val_errorbgcolor = "#D00";
var val_errorfontcolor = "#FFF";
var val_confirmedfontcolor = "#888";

var val_bullet = "&#187";

var val_passedmessage = "Formulier wordt verzonden<p />Even geduld alstublieft...";
var val_passedfunction = "sendform()";
var val_failedmessage = "Niet alle velden zijn correct ingevuld:";
var val_button_passedmsg = "gegevens worden verzonden...";

var val_style_fieldname = "font-weight: bold; margin-top: 10px; border-bottom: 1px solid #999;";
var val_style_regexmsg = "margin-top: 3px;";
var val_style_emp = "font-weight: bold;";
var val_style_passedmsg = "font-weight: bold; font-size: 12px;";
var val_style_failedmsg = "font-weight: bold; font-size: 12px;";
var val_style_suggestion = "color: #777; margin: 10px 0px;";

var val_debug = false;

//------------------------------------------------------------------------------
// Regular expression validation types
//------------------------------------------------------------------------------

var RegExEval = new Array()

// Name
RegExEval[0] = new Object();
RegExEval[0].valtype = "name";
RegExEval[0].pattern = /^[a-zA-Z- ]+$/;
RegExEval[0].message = "naam mag alleen uit letters bestaan";

// Email address
RegExEval[1] = new Object();
RegExEval[1].valtype = "email";
RegExEval[1].pattern = /^[a-zA-Z0-9_-]{2,40}\@[a-zA-Z0-9_-]{2,40}\.[a-zA-Z.]{2,5}$/;
RegExEval[1].message = "*VALUE* ongeldig email adres";
RegExEval[1].suggestion = "voorbeeld goed email adres: naam@bedrijf.nl";

// Dutch postal code
RegExEval[2] = new Object();
RegExEval[2].valtype = "postalcode";
RegExEval[2].pattern = /^\d\d\d\d[ a-zA-Z][a-zA-Z]{1,2}$/;
RegExEval[2].message = "*VALUE* ongeldige postcode";
RegExEval[2].suggestion = "voorbeeld goede postcode: 1234 AB";

// Only numbers
RegExEval[3] = new Object();
RegExEval[3].valtype = "onlynumbers";
RegExEval[3].pattern = /^[0-9,.]+$/;
RegExEval[3].message = "mag alleen uit cijfers bestaan";

// Dutch Street address + number
RegExEval[4] = new Object();
RegExEval[4].valtype = "address";
RegExEval[4].pattern = /^[a-zA-Z- ]+[ ][0-9]{1,4}[a-zA-Z]{0,1}$/;
RegExEval[4].message = "*VALUE* ongeldig adres";

// Dutch phone number
RegExEval[5] = new Object();
RegExEval[5].valtype = "phone";
RegExEval[5].pattern = /^0[0-9- ]{9,13}$/;
RegExEval[5].message = "*VALUE* ongeldig telefoonnummer";
RegExEval[5].suggestion = "voorbeeld goed telefoonnummer: 0715123456";

// Dutch city
RegExEval[6] = new Object();
RegExEval[6].valtype = "city";
RegExEval[6].pattern = /^[a-zA-Z- ]+$/;
RegExEval[6].message = "*VALUE* ongeldige woonplaats";

// Dutch mobile phone
RegExEval[7] = new Object();
RegExEval[7].valtype = "mobile";
RegExEval[7].pattern = /^06[ -]{0,1}[0-9 ]{8,10}$/;
RegExEval[7].message = "*VALUE* ongeldig mobiel nummer";
RegExEval[7].suggestion = "voorbeeld goed mobiel nummer: 0612341234";

// Options group
RegExEval[8] = new Object();
RegExEval[8].valtype = "options";
RegExEval[8].pattern = /^[a-zA-Z0-9-_ ]{1,}$/;
RegExEval[8].message = "kies een optie";

// Microsoft SQL GUID / Uniqueidentifier
RegExEval[9] = new Object();
RegExEval[9].valtype = "guid";
RegExEval[9].pattern = /^[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}$/;
RegExEval[9].message = "*VALUE* ongeldige GUID / Uniqueidentifier";
RegExEval[9].suggestion = "voorbeeld goede GUID: FMEAXV2Q-H6TJ-HGYU-34LP-E48KKVHFZFDM";

// Microsoft SQL GUID / Uniqueidentifier
RegExEval[10] = new Object();
RegExEval[10].valtype = "standard";
RegExEval[10].pattern = /^[a-zA-Z0-9_-]+$/;
RegExEval[10].message = "*VALUE* is een ongeldige waarde";

// Microsoft SQL GUID / Uniqueidentifier
RegExEval[11] = new Object();
RegExEval[11].valtype = "file";
RegExEval[11].pattern = /^[a-zA-Z]{0,1}[:]{0,1}[\\]{0,1}[a-zA-Z0-9_\\\-. ]+$/;
RegExEval[11].message = "*VALUE* is een ongeldige bestandsnaam";

//--[GLOBAL VARIABLES - DO NOT ALTER]-------------------------------------------

var val_msg = "";
var valfields = new Array();
var validation = new Object();
var val_local = "nl";
var val_btnsubmit = "";

//------------------------------------------------------------------------------

function initform()
{
  var f = document.forms[0];
  var element = "";
  var e = "";

  if (typeof(f) != "undefined")
  {
    for (var i = 0; i < f.elements.length; i++)
    {
      element = f.elements[i];
      valfields[i] = new valfield(element);
    }

    if (val_debug)
    {
      debug = document.createElement("div");
      debug.id = "debugger";
      debug.setAttribute("style", "position: absolute; z-index: 70; bottom: 0px;");
      debug.innerHTML = "";

      document.body.appendChild(debug);
    }
  }
}

//------------------------------------------------------------------------------

function debugmsg(msg, method)
{
  if (msg != "")
  {
    if (method == "add")
    {
      document.getElementById("debugger").innerHTML += msg + "<br />";
    }
    else
    {
      document.getElementById("debugger").innerHTML = msg;
    }
  }
}

//------------------------------------------------------------------------------

function validateform()
{
  var f = document.forms[0];
  var element = "";
  var e = "";

  validation.passed = true;
  validation.msg = "";

  for (var i = 0; i < f.elements.length; i++)
  {
    valfields[i].value = valfields[i].el.value;
    valfields[i].length = valfields[i].value.length;
    valfields[i].regexmsg = "";
    valfields[i].minmsg = "";
    valfields[i].maxmsg = "";

    e = valfields[i];

    if (val_debug)
    {
      debugmsg(e.value, "add"); 
    }

    if (e.type != "submit")
    {
      if (e.required == true)
      {
        if (e.valtype != null) 
        {
          regexformfield(e);
        }
        
        if ((e.minchars != null) | (e.maxchars != null)) 
        {
          charsformfield(e);
        }
      }
      else
      {
        if (e.length > 0)
        {
          if (e.valtype != null) 
          {
            regexformfield(e);
          }
          
          if ((e.minchars != null) | (e.maxchars != null)) 
          {
            charsformfield(e);
          }
        }
      }

      if ((e.regexmsg != "") | (e.minmsg != "") | (e.maxmsg != ""))
      {
        addvalmessage(e);
        validation.passed = false;
      }
      else
      {
        revertfield(e);
      }
    }
    else
    {
      val_btnsubmit = e.el;
    }
  }

  if (validation.passed)
  {
    if (val_btnsubmit != "")
    {
      val_btnsubmit.style.color = val_confirmedfontcolor;
      val_btnsubmit.value = val_button_passedmsg;
    }

    var formdata = "";
    
    for (i = 0; i < valfields.length; i++)
    {
      if (formdata == "")
      {
        formdata += valfields[i].name + "=" + valfields[i].value;
      }
      else
      {
        formdata += "&" + valfields[i].name + "=" + valfields[i].value;
      }
    }

    if (val_debug)
    {
      debugmsg(formdata, "add")
    }

    f.submit();
    
    return false;
  }
  else
  {
    validation.msg = "<div style=\"" + val_style_failedmsg + "\">" + val_failedmessage + "</div>" + validation.msg;

    if (val_btnsubmit != "")
    {
      val_btnsubmit.disabled = "true";
    }
    
    newdialogbox("", validation.msg);

    return false;
  }
}

//------------------------------------------------------------------------------

function stripstring(string)
{
  var regexhtml = /<\S[^><]*>/g;
  var regexphp = /<\?php/g;

  string = string.replace(regexhtml, "");
  string = string.replace(regexphp, "");

  return string;
}

//------------------------------------------------------------------------------

function valfield(element)
{
  element.value = stripstring(element.value) + "";
  this.el = element;
  this.type = element.getAttribute("type");
  this.value = element.value;
  this.length = this.value.length;
  this.required = true;
  this.name = element.name;

  var classes = "";

  if (element.className != "")
  {
    classes = element.className;
    var classes_array = classes.split(" ");

    for (var iii = 0; iii < classes_array.length; iii++)
    {
      if (classes_array[iii].indexOf("val_minchars_") != -1)
      {
        this.minchars = classes_array[iii].substring(13);
      }
      
      if (classes_array[iii].indexOf("val_notreq") != -1)
      {
        this.required = false;
      }
      
      if (classes_array[iii].indexOf("val_type_") != -1)
      {
        this.valtype = classes_array[iii].substring(9)
      }
    }
  }

  if (element.getAttribute("maxlength") != null)
  {
    this.maxchars = element.getAttribute("maxlength");
  }

  this.regexmsg = "";
  this.minmsg = "";
  this.maxmsg = "";
}

//------------------------------------------------------------------------------

function addvalmessage(e)
{
  validation.msg += "<div style=\"" + val_style_fieldname + "\">" + e.name + "</div>";
  if (e.minmsg != "") {validation.msg += e.minmsg;}
  if (e.maxmsg != "") {validation.msg += e.maxmsg;}
  if (e.regexmsg != "") {validation.msg += e.regexmsg;}

  e.el.style.border = val_errorborder;
  e.el.style.background = val_errorbgcolor;
  e.el.style.color = val_errorfontcolor;
  e.el.onfocus = function()
  {
    this.style.border = val_defaultborder;
    this.style.background = val_defaultbgcolor;
    this.style.color = val_defaultfontcolor;
  }
}

//------------------------------------------------------------------------------

function revertfield(e)
{
  e.el.style.border = val_defaultborder;
  e.el.style.background = val_defaultbgcolor;
  e.el.style.color = val_defaultfontcolor;

  if (e.value != "")
  {
    e.el.style.color = val_confirmedfontcolor;
    e.el.onfocus = function()
    {
      this.style.color = val_defaultfontcolor;
    }
  }
}

//------------------------------------------------------------------------------

function regexformfield(e)
{
  for (var i = 0; i < RegExEval.length; i++)
  {
    if (e.valtype == RegExEval[i].valtype)
    {
      if (!e.value.match(RegExEval[i].pattern))
      {
        e.regexmsg = "<div style=\"" + val_style_regexmsg + "\">" + val_bullet + " " + RegExEval[i].message + "</div>";
        
        if (typeof(RegExEval[i].suggestion) != "undefined")
        {
          e.regexmsg += "<div style=\"" + val_style_suggestion + "\">" + RegExEval[i].suggestion + "</div>";
        }
      }
    }
  }

  if (e.regexmsg == "")
  {
    return true;
  }
  else
  {
    e.regexmsg = e.regexmsg.replace("*VALUE*", "<span style=\"" + val_style_emp + "\">" + e.value + "</span> is een");
    return false;
  }
}

//------------------------------------------------------------------------------

function charsformfield(e)
{
  if (e.minchars != "")
  {
    if (e.length < e.minchars)
    {
      e.minmsg = "<div style=\"" + val_style_regexmsg + "\">" + val_bullet + " moet minimaal " + e.minchars + " karakters bavatten</div>";
    }
  }
  
  if (e.maxchars != "")
  {
    if (e.length > e.maxchars)
    {
      e.maxmsg = "<div style=\"" + val_style_regexmsg + "\">" + val_bullet + " mag maximaal " + e.maxchars + " karakters bavatten</div>";
    }
  }
}

//------------------------------------------------------------------------------

function browserDimension(dimension)
{
  if (self.innerWidth)
  {
    frameWidth = self.innerWidth;
    frameHeight = self.innerHeight;
  }
  else if (document.documentElement && document.documentElement.clientWidth)
  {
    frameWidth = document.documentElement.clientWidth;
    frameHeight = document.documentElement.clientHeight;
  }
  else if (document.body)
  {
    frameWidth = document.body.clientWidth;
    frameHeight = document.body.clientHeight;
  }

  if (dimension == "width")
  {
    return frameWidth;
  }
  else
  {
    return frameHeight;
  }
}

//------------------------------------------------------------------------------

function newdialogbox(title, body)
{
  var dialogbox = document.createElement("div");
  var message = document.createElement("div");
  var close = document.createElement("div");

  dialogbox.id = "dialogbox";

  close.id = "dialogbox_close";
  close.className = "close";
  close.onclick = function()
  {
    document.body.removeChild(document.getElementById("dialogbox"));
    if (val_btnsubmit != "")
    {
      val_btnsubmit.disabled = "";
    }
  }

  message.id = "dialogbox_message";
  message.innerHTML = body;
  
  dialogbox.appendChild(close);
  dialogbox.appendChild(message);

  dialogbox.onmouseover = function()
  { 
    document.getElementById("dialogbox_message").style.border = "5px solid #666";
    document.getElementById("dialogbox_close").style.background = "#666";
    document.getElementById("dialogbox_close").innerHTML = "sluiten";
  }
  dialogbox.onmouseout = function()
  {
    document.getElementById("dialogbox_message").style.border = "5px solid #999";
    document.getElementById("dialogbox_close").style.background = "";
    document.getElementById("dialogbox_close").innerHTML = "";
  }

  document.body.appendChild(dialogbox);
  dialogbox.className = "dialogbox";
  message.className = "dialogbox_message";
  close.className = "dialogbox_close";
  dialogbox.height = dialogbox.offsetHeight;
  dialogbox.width = dialogbox.offsetWidth;
  dialogbox.style.display = "none";

  var scroll = document.documentElement.scrollTop;

  dialogbox.style.top = (browserDimension("height") / 2) + scroll - (dialogbox.height / 2) + "px";
  dialogbox.style.left = (browserDimension("width") / 2) - (dialogbox.width / 2) + "px";

  dialogbox.style.display = "block";

  return false;
}

//------------------------------------------------------------------------------