/****************************************************************************
 ****************************************************************************/

/*verwacht een validate functie in fld.xta: isNotEmpty, etc*/
/* dateParts.parseInt(); hoeft niet 31 is int dus wordt dateParts[0] 
gecast naar int*/
function isValidDate(fld,ftitle,begin,end){with(fld){
  if(value=="" && !begin && !end){return true;} /*if empty and IS OK dan true*/
  if(!isNotEmpty(fld,ftitle)){return false;}

  var dateParts = value.split('-');
  var str = "Je hebt in '"+ftitle+"' een ongeldige datum opgegeven.\nHet geldige format is dd-mm-jjjj.\nBijv: 31-03-1950";
  if(dateParts.length != 3){
    alert(str); return false;
  }
  if(dateParts[2].length != 4){
    alert("'Jaar' is fout.\n" + str);
    return false;
  }
  if(dateParts[0] > 31 || dateParts[0] <1){  
    alert("'Dag' is fout.\n" + str); 
    return false;
  }
  if(dateParts[1] > 12 || dateParts[1] <1){
    alert("'Maand' is fout.\n" + str);
    return false;
  }
  if(begin!=0 && (dateCmp(value,begin)  == -1)){
     alert("Je "+ftitle+" valt voor de begindatum.\nHet geldige domein is van "+begin+" tot "+end);
    return false;
  }
  if(end!=0 && (dateCmp(end,value)  == -1)){
     alert("Je "+ftitle+" valt na de einddatum.\nHet geldige domein is van "+begin+" tot "+end);
    return false;
  }
  return true;
}}
function isValidTime(fld,ftitle,begin,end){with(fld){
  if(value=="" && !begin && !end){return true;} /*if empty and IS OK dan true*/
  if(!isNotEmpty(fld,ftitle)){return false;}
 
  var timeParts = value.split(':');
  var str = "Je hebt in '"+ftitle+"' een ongeldige tijd opgegeven.\nHet geldige format is hh:mm.\nBijv. 13:13 ";
  if(timeParts.length != 2){alert(str); return false;}
  if(timeParts[0] > 23 || timeParts[0] <0){alert("'Uren' zijn fout.\n" + str); return false;}
  if(timeParts[1] > 59 || timeParts[1] <0){alert("'Minuten' zijn fout\n" + str); return false;}

  if(begin!=0 && (timeCmp(value,begin)  == -1)){
     alert("Je "+ftitle+" is voor de begintijd.\nHet geldige domein is "+bgin+" tot "+end);
    return false;
  }
  if(end!=0 && (timeCmp(end,value)  == -1)){
     alert("Je "+ftitle+" is na de eindtijd.\nHet geldige domein is "+begin+" tot "+end);
    return false;
  }
  return true;
}}
function isValidYear(fld,ftitle,begin,end){with(fld){
    if(value=="" && !begin && !end){return true;} /*if empty and IS OK dan true*/
    if(!isNotEmpty(fld,ftitle)){return false;}
    
    var str = "Je hebt in '"+ftitle+"' een ongeldig jaar opgegeven.\nHet geldige format is jjjj.\nBijv. 1978 ";

    if( !fld.value.match(/[0-9]{4}/) ){
	alert(str);
	return false;
    }

    return true;
}}

function isValidInterval(date1,date2,time1,time2){
  if(date1=="" || date2==""){
    ret=timeCmp(time1.value,time2.value);
    if(ret==1){
      alert("Je '"+time2.name.replace(/.*\[(.*)\]/,"$1").replace(/_/," ")+"' is voor '"+
	    time1.name.replace(/.*\[(.*)\]/,"$1").replace(/_/," ")+"'" );
      return false;
    }
  }
  else if(time1=="" || date2==""){
    ret=dateCmp(date1.value,date2.value);
    if(ret==1){
      alert("Je '"+date2.name.replace(/.*\[(.*)\]/,"$1").replace(/_/," ")+"' is voor '"+
	    date1.name.replace(/.*\[(.*)\]/,"$1").replace(/_/," ")+"'" );
      return false;
    }
  }
  else{ ret=timeDateCmp(time1.value,date1.value,time2.value,date2.value); }
  if(ret==1){
    alert("Je '"+date2.name.replace(/.*\[(.*)\]/,"$1").replace(/_/," ")+"' en '"+
	  time2.name.replace(/.*\[(.*)\]/,"$1").replace(/_/," ")+"' zijn voor '"+
	  date1.name.replace(/.*\[(.*)\]/,"$1").replace(/_/," ")+"' en '"+
	  time1.name.replace(/.*\[(.*)\]/,"$1").replace(/_/," ")+"'" );
    return false;
  }
  return true;
}

function isValidPw(fld,ftitle){ 
  if( !isNotEmpty(fld,ftitle) ){return false;}  
//  if( !isValidWord(fld) ){return false;}  
  if( fld.value.length < 7){  
    alert(ftitle+" Moet ten minste 7 cijfers/letters lang zijn.");
    fld.focus();
    return false;
  }
  if( !fld.value.match(/[^A-Za-z_]+/) ){
    alert(ftitle+" bestaat alleen uit letters, dat is een te makelijk wachtwoord.\nGebruik ook cijfers en/of leestekens.");
    fld.focus();
    return false;
  }
  return true;
}

function isEqual(fld1,ftitle1,fld2,ftitle2){ 
	if(fld1.value != fld2.value){
	alert(ftitle1+" en "+ftitle2+" zijn niet gelijk!");
		fld1.value=fld2.value='';
		fld1.focus();
		return false;	}
	return true;
}

function isValidEmail (fld,ftitle){ with(fld){
  if(value==""){return true;}
  if(value.split('@').length != 2){
    alert("Het aantal '@' in e-mailadres "+ftitle+" is niet gelijk aan 1.\nDat kan niet goed zijn.");
    fld.focus();
    return false;
  }
  return true;
}}

function isValidPhonenumber (fld,ftitle){ with(fld){
  if(value==""){return true;}
  if(!value.match(/^\+{0,1}[\d -]+$/)){
    alert(ftitle+" is niet een geldig telefoon nummer. Een telefoonnummer bestaat uit cijfers, spaties en eventueel een + om aan te geven dat de internationale toegangscode moet worden toegevoegd.");
    fld.focus();     
    return false;
  }
  return true;
}}

function isValidWord(fld,ftitle){ with(fld){
  if( isEmpty(fld) ){return true;} 
  if(value.match(/[\W]+/)){  /* \W is niet alfanummeriek & _*/
    alert("Het veld "+ftitle+" kan alleen cijfers, letters en _ bevatten .\nDus bijvoorbeeld 'jan_3' is OK, maar niet 'abc*ds'");
    focus();
    return false;
  }
  return true;
}}
function isValidHtml(fld,ftitle){ with(fld){
  if( isEmpty(fld) ){return true;}
  if( !(tagStack=checkHtmlSyntax(fld,ftitle)) ){
     focus();
     return false;
  } else if ( tagStack.length!=0 ){ /* Er is nog een tag op de stack*/
    alert("Het veld "+ftitle+" is geen geldige html. Een of meerdere tags ("+tagStack.toString()+") zijn niet gesloten.");
    focus();
    return false;
  }
  return true;
}}
function isNumeric(fld,ftitle){with(fld){
  if(value==""){return true;}
  if(!value.match(/^(-|\+|)[\d]*(\.[\d]*){0,1}((e|E)(-|\+|)[\d]+){0,1}$/)){
    alert("Het veld "+ftitle+" mag alleen een getal bevatten.\nDus '-1.23' is goed, maar ook wetenschapelijke notatie, '10.5E-10', is toegestaan. Let op: het decimaal-scheidingsteken is een . (punt) en niet een , (komma).");
    focus();
    return false;
  }
 return true;
}}

function isInteger(fld,ftitle){with(fld){
  if(value==""){return true;}
  if(value.match(/[\D]+/)){
    alert("Het veld "+ftitle+" mag alleen een geheel getal bevatten.\nDus bijvoorbeeld '13' is goed, maar '10.5' niet");
    focus();
    return false;
  }
 return true;
}}

function isNotEmpty(fld,ftitle){ with(fld){
  if(value == ""){
    alert("Het veld: "+ftitle+" is leeg.\nDat mag niet.");
    focus();
    return false;
  }
  return true;
}}

function isEmpty(fld){ with(fld){
    if(value==""){return true;} else {return false;}
}}

/****************************************************************************
 ****************************************************************************
 Tijd en datum vergelijkings functies
 */

/*dateX heeft dd-mm-jjjj format, returned 1 als date1 > date2, 0 bij == en -1 bij < */
function dateCmp(date1,date2){
  dateParts1 = arrayParseInt( date1.split('-') );
  dateParts2 = arrayParseInt( date2.split('-') );

  if(dateParts1[2]==dateParts2[2]){
    if(dateParts1[1]==dateParts2[1]){
      if(dateParts1[0]==dateParts2[0]){
        return 0;}
      else{ return 2*( dateParts1[0]>dateParts2[0] ) -1;}
    }
    else{ return 2*( dateParts1[1]>dateParts2[1] ) -1;}
  }
  else{ return 2*( dateParts1[2]>dateParts2[2] ) -1;}
}

/*timeX heeft uu:mm format, returned 1 als time1 > time2, 0 bij == en -1 bij < */
function timeCmp(time1,time2){
  timeParts1 = arrayParseInt( time1.split(':') );
  timeParts2 = arrayParseInt( time2.split(':') );

  if(timeParts1[0]==timeParts2[0]){
    if(timeParts1[1]==timeParts2[1]){
      return 0;}
    else{ return 2*( timeParts1[1]>timeParts2[1] ) -1;}
  }
  else{ 
return 2*( timeParts1[0]>timeParts2[0] ) -1;}
}

/*	timeX heeft uu:mm format, dateX heeft dd-mm-jjjj format.
 *	Vergelijkt date1+time1 met date2+time2. Als date2=="" dan 
 *	time1 met time2. Als time1=="" of time2=="" dan returned functie -1.
 *	date1 == "" is niet toegestaan.
 *	returned: 1 bij  > , 0 bij == en -1 bij <  */
function timeDateCmp(time1,date1,time2,date2){
  var dc;
  if( date2=="" || !(dc = dateCmp(date1,date2)) ){
    if(time1!="" && time2!=""){
      return  timeCmp(time1,time2);
    }
    else{ return -1;}	
  }
  else{ return dc;}	
}



/****************************************************************************
 ****************************************************************************
 Handige functie
 */
function arrayParseInt(arr){
  //for(var i in arr)  arr[i] = parseInt(arr[i],10); 
  for(var i=0;i<arr.length;i++)  arr[i] = parseInt(arr[i],10); 
  return arr;
}

function mkUsername(targetFld,sourceFldnm){
  targetFld.value=targetFld.form.elements[sourceFldnm].value.replace(/\W/g,"").substr(0,20).toLowerCase();
}

/*function arrayParseInt(){
// for(var i in this)  this[i] = parseInt(this[i],10); 
 for(var i=0;i<this.length;i++)  this[i] = parseInt(this[i],10); 
}
Array.prototype.parseInt = arrayParseInt;
*/
