var readyForSubmit;
var setFieldFocus;
var hsWebsrvServer="/server/";
var srvForm = "hsutil.asmx";

var submitClicked = false; // is er op versturen gedrukt tijdens een asynchrone controle van gegevens!?
var checkBusy = false; // is de asynchone controle bezig

// FIELD CHECK
function hofFieldCheck(field)
{  
  var toCheckId=-1; //indexOf(fieldsToBeChecked, field.id);
  var ftype = field.getAttribute("hstype");

  if(toCheckId>-1 || ftype){
    var pl = new SOAPClientParameters();
    if(field.value){
      pl.add("fieldName", field.id);	  
	  
	  if (ftype) pl.add("fieldType", ftype);
      //else pl.add("fieldType", fieldsToBeCheckedType[toCheckId]);
	  
      if(field.type&&(field.type=="checkbox")){
      	if(field.checked) {
      		pl.add("fieldValue", field.value);
      	} else {
      		pl.add("fieldValue", "0");
      	}
      } else {
        pl.add("fieldValue", field.value);
      }

	  checkBusy = true;
	  submitClicked = false;
      SOAPClient.invoke(hsWebsrvServer+srvForm, "checkField", pl, true, hofFieldCheckResp);
    }
  } else {
    if(field.value){
	    if(field.type=="radio") {
	      fieldName=field.name;
	    } else {
		  fieldName=field.id;
		}
	    changeClassDelStr(fieldName+"Lbl", "E");
	    hideFieldError(fieldName+"E");
	}
  }
}

function hofFieldCheckResp(r)
{
	if(r == null) {
		alert("Error: de server heeft geen resultaat gestuurd!");
	} else {
	    if(document.getElementById(r.fieldName)) {
		  // status=0, veld is NIET OK!
	      if((r.Result==0)&&!r.errorField){
			// het is mogelijk dat het veld wel gewijzigd is
			if(r.NewValue!=null)document.getElementById(r.fieldName).value=r.NewValue;
	  		changeClassAddStr(r.fieldName+"Lbl", "E");
	  		showFieldError(r.fieldName+"E", "<p>"+r.Error+"</p>");
	      }

	      // status=1, veld is OK, maar gewijzigd.
	      if(r.Result==1){
	        if(r.NewValue!=null)document.getElementById(r.fieldName).value=r.NewValue;
	      }

	      if(r.Result>0){
	        var o=document.getElementById(r.fieldName);
	        if(o.type=="radio") {
	          r.fieldName=o.name;
	        }
	        changeClassDelStr(r.fieldName+"Lbl", "E");
	        hideFieldError(r.fieldName+"E");
	      }
	    }
		
	checkBusy = false;
	if (r.Result!=0 && submitClicked)
	{
		hsSubmit();
	}
   }
   checkBusy = false;
}

function hsSetForms() {
  var x = document.getElementById('hsForm');
  if (!x) x = document.getElementById('hsFormAlg');
  if (!x) x = document.getElementById('hsFormSmall');
  if (!x) return;
  var y = x.getElementsByTagName('input');
  for (var i=0;i<y.length;i++) {
  	switch(y[i].type) {
           case "checkbox":
               y[i].onclick = function() { hofFieldCheck(this); }
               break;
           case "radio":
               y[i].onclick = function() { hofFieldCheck(this); }
               break;
           default:
               y[i].onblur = function() { hofFieldCheck(this); }
        }
  }
  var y = x.getElementsByTagName('select');
  for (var i=0;i<y.length;i++) {
    y[i].onchange = function() { hofFieldCheck(this); }
  }

  // loop the textarea's (used for slotopmerking, medicijnverklaring and ziekteverklaring)
  var y = x.getElementsByTagName('textarea');
  for (var i=0;i<y.length;i++) {
    y[i].onblur = function() { hofFieldCheck(this); }
  }
  
  var o = document.getElementById("hsTelPrive");
  if (o) o.onchange = function() { hideFieldError("hsTelE"); }
  o = document.getElementById("hsTelMobiel");
  if (o) o.onchange = function() { hideFieldError("hsTelE"); }
  o = document.getElementById("hsTelWerk");
  if (o) o.onchange = function() { hideFieldError("hsTelE"); }
}

function fase1Ready() {
	if (!hsCheckFormfieldsInDiv(document.getElementById("hsFase1Div"), 1)) return false;
	return true;
}

function fase2Ready() {  
  if(!fase1Ready())return false;
  if (!hsCheckFormfieldsInDiv(document.getElementById("hsFase2Div"), 2)) return false;
  return true;
}

function hsCheckFormfieldsInDiv(faseDiv, faseId) {
  var attrib;
  attrib = faseDiv.getAttribute("hsonlyone");
  var onlyOne = false;
  if (attrib && attrib=="true") 
  {
	onlyOne = true;
	hideField(faseDiv.id+"E");
  }

  var y = faseDiv.getElementsByTagName('input');
  for (var i=0;i<y.length;i++) {
 if (onlyOne || y[i].parentNode==faseDiv)
 {
	attrib = y[i].getAttribute("hsrequired");
	if (attrib && attrib=="true")
	{
		if (!checkFieldValid(y[i].id, false, faseId, !onlyOne)) 
		{
			if (!onlyOne) return false;
		}
		else if (onlyOne) return true;
	}
}
  }

  var y = faseDiv.getElementsByTagName('select');
  for (var i=0;i<y.length;i++) {
 if (y[i].parentNode==faseDiv)
 {
	attrib = y[i].getAttribute("hsrequired");
	if (attrib && attrib=="true")
	{
		if (!checkFieldValid(y[i].id, false, faseId, !onlyOne)) 
		{
			if (!onlyOne) return false;
		}
		else if (onlyOne) return true;
	}
}
  }

  // loop the textarea's (used for slotopmerking, medicijnverklaring and ziekteverklaring)
  var y = faseDiv.getElementsByTagName('textarea');
  for (var i=0;i<y.length;i++) {
 if (y[i].parentNode==faseDiv)
 {
	attrib = y[i].getAttribute("hsrequired");
	if (attrib && attrib=="true")
	{
		if (!checkFieldValid(y[i].id, false, faseId, !onlyOne)) 
		{
			if (!onlyOne) return false;
		}
		else if (onlyOne) return true;
	}
}
  }

if (onlyOne) 
{
	// toon de bij de div behorende errormessage
	showFieldError(faseDiv.id+"E");
	return false;
}
  
  var y = faseDiv.getElementsByTagName('div');  
  for (var i=0;i<y.length;i++) {
  //alert(y[i].parentElement.parentElement.id);
 if ((y[i].parentNode==faseDiv || y[i].parentNode.parentNode==faseDiv) && !IsOnlyOneDiv(y[i].parentNode))
 {
	if (!hsCheckFormfieldsInDiv(y[i], faseId)) return false;
	else if (onlyOne) return true;
}
  }
  
  return true;
}

function IsOnlyOneDiv(divje)
{
	var attrib = divje.getAttribute("hsonlyone");
	if (attrib && attrib=="true") return true;
	return false;
}

function sortObjectArray(objs)
{
alert('sorting');
	var tab1, tab2, temp;
	
	for (var i=0;i<objs.length;i++)
	{
		for (var j=0;j<objs.length-1;j++)
		{			
			tab1 = parseInt("0"+objs[j].getAttribute("tabindex"));
			tab2 = parseInt("0"+objs[j+1].getAttribute("tabindex"));
			if (tab1 > tab2)
			{
				temp = objs[j];
				objs[j] = objs[j+1];
				objs[j+1] = temp;
			}
		}
	}
	return objs;
}

// FASE MANAGEMENT
var curFase=1;
var arFaseEnabled; // hierin wordt aangegeven of een fase toegestaan is!

function hsNextFase() {
  if(eval("fase"+(curFase)+"Ready()")){
  	changeFase("hsFase"+curFase, "hsFase"+(curFase+1));
  	curFase++;
  }
}

function hsPrevFase() {
	changeFase("hsFase"+curFase, "hsFase"+(curFase-1));
	if(curFase>1)curFase--;
}

function hsGoToFase(nr) {
	if(nr==1||eval("fase"+(nr-1)+"Ready()")){
	  changeFase("hsFase"+curFase, "hsFase"+nr);
	  curFase=nr;
	}
}

function changeFase(oldFase, newFase) {
  var fs_cur=document.getElementById(oldFase+"Div");
  var fs_new=document.getElementById(newFase+"Div");
  if(fs_cur&&fs_new){
  	fs_cur.style.display="none";
  	fs_new.style.display="block";

  	// buttons uit en aan zetten
  	changeClassDelStr(oldFase+"But", "Active");
  	changeClassAddStr(newFase+"But", "Active");
  }
}

function hsFaseAlgGegevens(faseId) {		
	/*if(!checkFieldValid("hsAchternaam", false, faseId))return false;
	if(!checkFieldValid("hsVoorletters", false, faseId))return false;
	if(!checkFieldValid("hsGeslachtV", false, faseId))return false;
	if(!checkFieldValid("hsEmail", false, faseId))return false;
	if(!checkFieldValid("hsStraat", false, faseId))return false;
	if(!checkFieldValid("hsPlaats", false, faseId))return false;
	if(!checkFieldValid("hsPostcode", false, faseId))return false;
	if(!checkFieldValid("hsHuisnummer", false, faseId))return false;
	var tel1=document.getElementById("hsTelPrive");
	var tel2=document.getElementById("hsTelMobiel");
	var tel3=document.getElementById("hsTelWerk");
	if(!tel1.value&&!tel2.value&&!tel3.value){
	  hsGoToFase(2);
	  showFieldError("hsTelE", "<p>Om verder te gaan moet u minimaal 1 telefoonnummer invullen.</p>");
	  return false;
	}*/

/*   if(loggedIn==false){
    if(fieldIsVisible("hsSet70")&&fieldIsVisible("hsSet80"))
	{
		if(!checkFieldValid("hsPostcode", false, faseId))return false;
		if(!checkFieldValid("hsHuisnummer", false, faseId))return false;

		var tel1=document.getElementById("hsTelPrive");
		var tel2=document.getElementById("hsTelMobiel");
		var tel3=document.getElementById("hsTelWerk");
		if(!tel1.value&&!tel2.value&&!tel3.value){
		  hsGoToFase(faseId);
		  showFieldError("hsTelE", "<p>Om verder te gaan moet u minimaal 1 telefoonnummer invullen.</p>");
		  return false;
		}

		var b=document.getElementById("hsBank");
		var g=document.getElementById("hsGiro");
		if(!b.value&&!g.value){
		  hsGoToFase(faseId);
		  showFieldError("hsRekE", "<p>Om verder te gaan moet u minimaal 1 rekeningnummer invullen.</p>");
		  return false;
		}
	}

    if(fieldIsVisible("hsSet180")){
		if(!checkFieldValid("hsWachtwoordNew", false, faseId))return false;
	    if(!checkFieldValid("hsWachtwoordNewCheck", false, faseId))return false;
	}
  }
 */
  return true;
}

function hsSubmit() {
if (checkBusy)
{
	// asynchone controle van gegevens is nog bezig, wacht daar op, kan nog fout gaan!
	submitClicked = true;
	return;
}

  if(fase2Ready()){
	for (var i=0;i<document.forms.length;i++) {
		
		//if(document.forms[i].action=="/submit.asp")
		if(document.forms[i].action.indexOf("/submit.asp") != -1 || document.forms[i].action.indexOf("/Submit.aspx") != -1)
		{
		  document.forms[i].submit();
		}
	}
  }
  submitClicked = false;
}

// FIELD CHECKS

function checkFieldValid(fieldName, allowNul, fasenr, invalid) {

	var o = document.getElementById(fieldName);
	var selectOK=true;
	if(o){
		if(o.type=="select-one"){
			if((o.value==0)&&!allowNul)selectOK=false;
		}
		if(o.type=="radio"){
                        var rg = document.getElementsByName(o.name);
                        if(rg) {
                          selectOK=false;
                          fieldName=o.name;
                          for (var i=0;i<rg.length;i++){
                            if(rg[i].checked)selectOK=true;
                          }
                        }
                }
		if(o.type=="checkbox"){
		  if(!getValueFromCheckbox(document.getElementById(fieldName)))selectOK=false;
		}
		if(o.value&&selectOK){
			var p = document.getElementById(fieldName+"E");
			if(p){
				if(p.style.display=="none"){
					return true;
				}
			} else {
				return true;
			}
		}
	}
    if(fasenr)hsGoToFase(fasenr);
	if (invalid==null || invalid) setFieldInValid(fieldName);
	return false;
}

function setFieldInValid(fieldName) {
	changeClassAddStr(fieldName+"Lbl", "E");
	showFieldError(fieldName+"E", "<p>Om verder te gaan moet dit veld ingevuld worden.</p>");
	setFocus(fieldName);
}

