//
// Include the following in your document, BEFORE including this JavaScript file:
//
//   var reqFields = Array();
//   reqFields[fName] = Array();
//   reqFields[fName]['reqFld']   = Array('prop_friend_name', 'prop_friend_email', 'givenname', 'surname', 'email');
//   reqFields[fName]['optFld']   = Array('baan');
//   reqFields[fName]['reqRadio'] = Array('gender', 'sexualiteit');
//   reqFields[fName]['reqSel']   = Array('gebied', 'kinderen');
//   reqFields[fName]['reqCbx']   = Array('adrem');
//
// If you want to use a different message text for errors, include the following lines and modify to suit:
//
//   var messages = Array();
//   messages[fName] = Array();
//   messages[fName]['reqFld']   = "Het volgende veld is niet of niet juist ingevuld:";
//   messages[fName]['optFld']   = "Het volgende veld is niet of niet juist ingevuld:";
//   messages[fName]['reqRadio'] = "U heeft geen of een onjuiste keuze gemaakt voor:";
//   messages[fName]['reqSel']   = "U heeft geen of een onjuiste keuze gemaakt voor:";
//   messages[fName]['reqCbx']   = "U heeft geen of een onjuiste keuze gemaakt voor:";
//
// Instead of using a submit button or a call to submit() use something like this (modify where appropriate):
//
//   if (controleer('fName')) { document.forms['fName'].submit(); }
//
// Copyright (c) Caret
// Created by Edward van der Jagt / edward@caret.net
// http://www.caret.net
//


var alerts = Array();

//
// findParentText
//
// Do some intelligent searching for a label belonging to the given input element
//
// Check for:
// - if input in TD, find first TD in current TR
// - if input in LI, find DIV directly containing the UL. Use first SPAN in that div
// - if input in DIV, find first SPAN in that div
// - Otherwise, try to find LABEL tag for this input
//
function findParentText(fObj) {
        retVal = "";
        if (fObj.parentNode.tagName == 'TD') {
                if (fObj.parentNode.parentNode.tagName == 'TR') {
                        // retVal = fObj.parentNode.parentNode.firstChild.innerText;  // innerContent
                        retVal = fObj.parentNode.parentNode.getElementsByTagName('TD')[0].innerHTML;
                }
        } else if (fObj.parentNode.tagName == 'LI') {
                if (fObj.parentNode.parentNode.tagName == 'UL') {
                        if (fObj.parentNode.parentNode.parentNode.tagName == 'DIV') {
                                retVal = fObj.parentNode.parentNode.parentNode.getElementsByTagName('span')[0].innerHTML;
                        }
                }
        } else if (fObj.parentNode.tagName == 'DIV') {
                retVal = fObj.parentNode.getElementsByTagName('span')[0].innerHTML;
        } else {
                var labels = document.getElementsByTagName("LABEL");
                for(i = 0; i < labels.length; i++) {
                    if (labels[i].htmlFor == fObj.name) {
                        retVal = labels[i].innerHTML; i = labels.length;
                    }
                }
        }
        return retVal;
}

function setReqFields(fName) {
   if (reqFields[fName]) {
	   reqFld   = reqFields[fName]['reqFld'];
	   optFld   = reqFields[fName]['optFld'];
	   reqRadio = reqFields[fName]['reqRadio'];
	   reqSel   = reqFields[fName]['reqSel'];
	   reqCbx   = reqFields[fName]['reqCbx'];
   }
}

function setMsgFields(fName) {
   if (!alerts[fName]) { alerts[fName] = Array(); }
   if (messages && messages[fName]) {
	   alerts[fName]['reqFld']   = messages[fName]['reqFld'];
	   alerts[fName]['optFld']   = messages[fName]['optFld'];
	   alerts[fName]['reqRadio'] = messages[fName]['reqRadio'];
	   alerts[fName]['reqSel']   = messages[fName]['reqSel'];
	   alerts[fName]['reqCbx']   = messages[fName]['reqCbx'];
   }

   if (!alerts[fName]['reqFld']   ) { alerts[fName]['reqFld']   = "Het volgende veld is niet of niet juist ingevuld:"; }
   if (!alerts[fName]['optFld']   ) { alerts[fName]['optFld']   = "Het volgende veld is niet of niet juist ingevuld:"; }
   if (!alerts[fName]['reqRadio'] ) { alerts[fName]['reqRadio'] = "U heeft geen of een onjuiste keuze gemaakt voor:"; }
   if (!alerts[fName]['reqSel']   ) { alerts[fName]['reqSel']   = "U heeft geen of een onjuiste keuze gemaakt voor:"; }
   if (!alerts[fName]['reqCbx']   ) { alerts[fName]['reqCbx']   = "U heeft geen of een onjuiste keuze gemaakt voor:"; }

}

function check_email(str)
{
  var RE = /^\w([\w\.-]+)(\@)(([\w-]+)(\.))+(\w*\w\w)$/;
  if (! RE.test(str) ) {
    alert("Uw e-mail adres is leeg of niet correct !")
    return false;
  }
  return true;
}


function controleer(fName)
{
  var debug = 0;
  var chkOK = true;
  if (!fName) { return chkOK; }

  setReqFields(fName);
  setMsgFields(fName);

  var myForm = document.forms[fName];
  for (var i=0;i<reqFld.length;i++) {
    fElm = eval("document.forms[fName]."+reqFld[i]);
    chkOK = checkField(fElm);
    if (fElm.value=='' || !chkOK) {
	    if (debug) { alert("I#"+reqFld[i] +"#\n"+ fElm.value); }
      chkOK = false; alert(alerts[fName]['reqFld']+'\n'+findParentText(fElm));
      fElm.focus(); return chkOK;
    }
  }

  for (var i=0;i<optFld.length;i++) {
    fElm = eval("document.forms[fName]."+optFld[i]);
    if (fElm.value != '' && checkField(fElm)) {
	    if (debug) { alert("O#"+optFld[i] +"#\n"+ fElm.value); }
      chkOK = false; alert(alerts[fName]['optFld']+'\n'+findParentText(fElm));
      fElm.focus(); return chkOK;
    }
  }

  for (var i=0;i<reqRadio.length;i++) {
    fElm = eval("document.forms[fName]."+reqRadio[i]);
    chkOK = checkField(fElm);
    if (!is4_radioIsChecked(fElm) || !chkOK) {
	    if (debug) { alert("R#"+reqRadio[i] +"#\n"); }
      chkOK = false; alert(alerts[fName]['reqRadio']+'\n'+findParentText(fElm[0]));
      fElm[0].focus(); return chkOK;
    }
  }

  for (var i=0;i<reqCbx.length;i++) {
    fElm = eval("document.forms[fName]."+reqCbx[i]);
    chkOK = checkField(fElm);
    if (!fElm.checked || !chkOK)
    {
	    if (debug) { alert("C#"+reqCbx[i] +"#\n"+ fElm.checked); }
      chkOK = false; alert(alerts[fName]['reqCbx']+'\n'+findParentText(fElm));
      fElm.focus(); return chkOK;
    }
  }

  for (var i=0;i<reqSel.length;i++) {
    fElm = eval("document.forms[fName]."+reqSel[i]);
    chkOK = checkField(fElm);
    if (fElm.options[fElm.selectedIndex].value == '' || !chkOK) {
	    if (debug) { alert("S#"+reqSel[i] +"#\n"); }
      chkOK = false; alert(alerts[fName]['reqSel']+'\n'+findParentText(fElm));
      fElm.focus(); return chkOK;
    }
  }

  return chkOK;
}


function checkField(obj, fldType) {
  retVal = true;
  if (!fldType) { fldType = 'text'; }
  if (obj) {
    var fName = obj.name;
    var fVal  = obj.value;
    if (fldType == 'radio') { fVal = is4_radioIsChecked(obj); }  // FIXME. Should be value of radio.
    if (fldType == 'select') { fVal = obj.options[ obj.selectedIndex ]; }
    var funcName = "check_"+fName;
    if ( eval("typeof ("+funcName +")") == "function" ) {
      fVal = fVal.replace(/\n/g,"\\n");
      fVal = fVal.replace(/\015\012/g,"\\n");
      fVal = fVal.replace(/\015/g,"\\n");
      fVal = fVal.replace(/\012/g,"\\n");
      fVal = fVal.replace(/\\/g,"\\\\");
      fVal = fVal.replace(/"/g,"&quot;");
      retVal = eval(funcName+"(\""+fVal+"\")");
      if (!retVal) {
        obj.focus();
      }
    }
  }
  return retVal;
}

function checkForm(obj) {
  for(n = 0; n < obj.elements.length; n++) {
    if (!checkField(obj.elements[n])) {
      return false;
    }
  }
  return true;
}
