/*
Form validation functions
Copyright (c) 2004 Ylab, Utrecht, NL
Author: Yohan Creemers
version 1.4.dotime
2004-01-27:YC:valid phonenumber required
2004-10-20:YC:date validations
2005-04-15:YC:extension for quotation
2005-08-31:YC:added ignoreNonNumKey
*/
var undefined;
function validateForm(frm){
  var request = frm.action.value;
  if (request == "leverancier" && frm.supplier_exists && frm.supplier_exists[0].checked){
    return true;
  }
  if (request == "mail" || request == "offerte" || request == "folder"){
		if (!isNotNull(frm.name, request == "offerte" ? "Contactpersoon" : "Naam")) return false;
	}
  if (request == "acquisitie"){
		if (!isNotNull(frm.organisation, "Organisatie")) return false;
		if (!isNotNull(frm.contact, "Contactpersoon")) return false;
  }
  //validate email address
  if (request == "mail" || request == "offerte" || request == "leverancier" || request == "acquisitie"){
  	if (!isNotNull(frm.email, "E-mailadres")) return false;
    if (!isEmail (frm.email, "E-mailadres")) return false;
  }
  if (request == "mail" || request == "offerte"){
	  if (!isNotNull(frm.telephone, "Telefoonnummer")) return false;
	  if (!isPhone (frm.telephone, "Telefoonnummer")) return false;
  }
  //validate address in case of 'folder' and 'offerte'
  if (request == "folder" || request == "offerte"){
	  if (!isNotNull(frm.street, "Straat en huisnummer")) return false;
	  if (!isNotNull(frm.zipcode, "Postcode")) return false;
	}
  //validate product and quantity in case of 'offerte'
  if (request == "offerte"){
	  if (!isNotNull(frm.eventure, "Arrangement")) return false;
	  if (!isNotNull(frm.adults, "Aantal volwassen deelnemers")) return false;
	}
  //validate subject in case of 'mail'
  if (request == "mail"){
  	if (!isNotNull(frm.subject, "Onderwerp")) return false;
  }
  if (request == "leverancier"){
  	if (!isNotNull(frm.password, "Wachtwoord")) return false;
  }
  if (frm.btnSubmit != undefined){frm.btnSubmit.disabled = true;}
	return true;
}

function validateSubcription(frm){
	if (!isNotNull(frm.email, "E-mailadres")) return false;
  if (!isEmail (frm.email, "E-mailadres")) return false;

	return true;
}

function errormsg(errorcode, guiName, val){
	switch (errorcode)	{
		case 1: alert('Het veld ' + guiName + ' moet ingevuld zijn.'); break;
		case 2: alert('Het e-mailadres is onvolledig.'); break;
		case 3: alert('Het telefoonnummer is onvolledig.\nVul een tiencijferig telefoonnummer in.'); break;
		case 6: alert('In het veld ' + guiName + ' is geen geldige datum ingevuld.\nGebruik het formaat dd-mm-jjjj om een datum in te voeren.'); break;
		case 7: alert('In het veld ' + guiName + ' is geen geldige datum ingevuld.\nDe datum moet na ' + val + ' liggen.'); break;
		default: alert('Ongedefineerde foutcode: ' + errorcode); break;
  }
}

function isNotNull(field, guiName){
	if (!field) return true;
	//validates if a field contains a value
  //field: input element text|hidden
  //guiName: fieldname to communicate with user
	if ( (!field.value) || (field.value == "") )	{
		errormsg(1, guiName);
		setFocus(field);
		return false;
	}
	return true;
}

function isEmail (field, guiName){
	//validates if a textbox contains a valid email address
	var str = field.value;
	if (!str) return true;
	var at = str.indexOf('@');
	if ( (at < 2) || (str.indexOf('.',at+1) < 4) )	{
		errormsg(2, guiName)
		setFocus(field);
		return false;
	}
	return true;
}

function isPhone (field, guiName){
	//validates if a textbox contains a valid ten+ digit phone number
	var str = field.value;
	var num = "";

	if (!str){return true;}
  if (str.charAt(0)=="+"){return true;} //international

	var ar = str.match(/\d+/g);
  if (ar){
  	num = ar.join('');
  }
  if (num.charAt(0)=="0" && num.charAt(1)=="0" && num.length >= 8){return true;} //international
	if (num.charAt(0)!="0" || num.length != 10)	{
		errormsg(3, guiName)
		setFocus(field);
		return false;
	}
	return true;
}

function isDate(field, guiName){
  if (!field.value) return true;
  d = strToDate(field.value);
  if (!d){
    errormsg(6, guiName);
    setFocus(field);
    return false;
  }
  return true;
}

function isAfterDate(field, guiName, refDate){
  if (!field.value) return true;//don't validate empty fields
  d = strToDate(field.value);
  if (typeof refDate != Date){refDate = new Date();}
  if (d <= refDate){
    errormsg(7, guiName, refDate.getDate() + '-' + (refDate.getMonth()+1) + '-' +refDate.getFullYear());
    setFocus(field);
    return false;
  }
  return true;
}

function strToDate(s){
  //dates are expected as dd-mm-yyyy or yyyy-dd-mm
  var dmY = new RegExp("([0-3]?[0-9]{1})[^[0-9]]*([0-1]?[0-9]{1})[^[0-9]]*([0-9]{4})");
  var Ymd = new RegExp("([0-9]{4})[^[0-9]]*([0-1]?[0-9]{1})[^[0-9]]*([0-3]?[0-9]{1})");
  if (result = s.match(dmY)){
    if (result[1] > 31){return false;}
    if (result[2] > 12){return false;}
    return (new Date(result[3], result[2]-1, result[1]));
  }
  else if (result = s.match(Ymd)){
    if (result[3] > 31){return false;}
    if (result[2] > 12){return false;}
    return (new Date(result[1], result[2]-1, result[3]));
  }
  return false;
}

function setFocus(field, f){
  try{
    if (f){f = new Function(f); f();}
    field.focus();
  }
  catch(ex){}
}

function ignoreNonNumKey(allowNeg, allowFrac, allowColon){
  //will only work for IE
  try{
    //allways use . instead of ,
    if (event.keyCode == 44){event.keyCode = 46;}
    //accept '-'
    if (allowNeg && event.keyCode == 45){return;}
    //accept '.'
    if (allowFrac && event.keyCode == 46){return;}
    //accept ':'
    if (allowColon && event.keyCode == 58){return;}
    //accept 0::9
    if (event.keyCode < 48 || event.keyCode > 57){event.returnValue = false;}
  }
  catch(ex){}
}
