var BGOK = "#ffffff";
var BGERR = "#fff0f0";

function checkEmpty(inputobj, inputname, minlength)
{
	var minlen = 1;
	if ( minlength && minlength > minlen )
		minlen = minlength;

	if ( inputobj.value.length < minlen )
	{
		inputobj.style.backgroundColor = BGERR;
		inputobj.onfocus = function() { this.style.backgroundColor = BGOK; }
		if ( minlen == 1 )
			return "- Geen " + inputname + " ingevuld.\n";
		else
			return "- Het veld '" + inputname + "' is te kort (min. " + minlen + " tekens).\n";
	}

	inputobj.style.backgroundColor = BGOK;
	return "";
}

function checkEmail(inputobj)
{
	var inputname = "E-mailadres";
	var emp = checkEmpty(inputobj, inputname);

	if ( emp.length )
		return emp;

	var re = /^[a-z0-9][a-z0-9_.+-]*@[a-z0-9.-]{2,}\.[a-z]{2,4}$/i;
	if ( !inputobj.value.match(re) )
	{
		inputobj.style.backgroundColor = BGERR;
		inputobj.onfocus = function() { this.style.backgroundColor = BGOK; }
		return "- Ongeldig " + inputname + ".\n";
	}

	return "";
}

function checkDateNL(inputobj, inputname)
{
	var emp = checkEmpty(inputobj, inputname);

	if ( emp.length )
		return emp;

	var re = /^([0-3]?[0-9])-([01]?[0-9])-([12][0-9]{3})$/i;
	if ( inputobj.value.match(re) )
	{
		var nu = new Date();
		var ditjaar = nu.getFullYear();
		var d = parseInt(RegExp.$1, 10);
		var m = parseInt(RegExp.$2, 10);
		var j = parseInt(RegExp.$3, 10);
		if ( d < 1 || d > 31 || m < 1 || m > 12 || j < ditjaar - 200 || j > ditjaar + 100 )
		{
			inputobj.style.backgroundColor = BGERR;
			inputobj.onfocus = function() { this.style.backgroundColor = BGOK; }
			return "- Het veld '" + inputname + "' is geen geldige datum.\n";
		}
		else
		{
			var s = "";
			if ( d < 10 ) s += "0";
			s += d + "-";
			if ( m < 10 ) s += "0";
			s += m + "-" + j;
			inputobj.value = s;
		}
	}
	else
	{
		inputobj.style.backgroundColor = BGERR;
		inputobj.onfocus = function() { this.style.backgroundColor = BGOK; }
		return "- Het veld '" + inputname + "' is niet van de vorm dd-mm-jjjj.\n";
	}

	return "";
}

function reformatPostcode(inputobj)
{
	if ( inputobj.value.length )
	{
		var re = /^ *([1-9][0-9]{3}) *([A-Z]{2})? *$/i;
		if ( inputobj.value.match(re) )
		{
			if ( RegExp.$2 )
				inputobj.value = RegExp.$1 + RegExp.$2.toUpperCase();
			else
				inputobj.value = RegExp.$1;
		}
		else
			inputobj.value = inputobj.value.toUpperCase();
	}
}

function checkPostcode(inputobj, inputname)
{
	if ( !inputname )
		inputname = "Postcode";

	var emp = checkEmpty(inputobj, inputname);
	if ( emp.length )
		return emp;

	reformatPostcode(inputobj);
	return "";
}

function checkIsChecked(checkboxobj, checkboxname)
{
	if ( checkboxobj.checked )
	{
		checkboxobj.style.backgroundColor = BGOK;
		return "";
	}
	else
	{
		checkboxobj.style.backgroundColor = BGERR;
		return "- Geen vinkje gezet bij " + checkboxname + ".\n";
	}
}

function checkOneChecked(radioobj, radioname, selectedindex)
{
	var i, chk = false;
	for ( i = 0; i < radioobj.length; ++i )
		if ( radioobj[i].checked )
		{
			chk = true;
			if ( selectedindex )
				selectedindex.value = i;
		}

	if ( chk )
	{
		for ( i = 0; i < radioobj.length; ++i )
			radioobj[i].style.backgroundColor = BGOK;
	}
	else
	{
		for ( i = 0; i < radioobj.length; ++i )
			radioobj[i].style.backgroundColor = BGERR;
		if ( selectedindex )
			selectedindex.value = -1;
		return "- Geen keuze gemaakt bij " + radioname + ".\n";
	}

	return "";
}

function checkSelected(selectobj, selectname)
{
	var sel = false;
	if ( selectobj.selectedIndex > 0 || selectobj.options[selectobj.selectedIndex].value > 0 )
		sel = true;

	if ( !sel )
	{
		selectobj.style.backgroundColor = BGERR;
		selectobj.onfocus = function() { this.style.backgroundColor = BGOK; }
		return "- Geen " + selectname + " gekozen.\n";
	}

	selectobj.style.backgroundColor = BGOK;
	return "";
}

function checkForm(formobj)
{
	var err = "", msg = "";

	if ( formobj.name == "artikelorder" )
	{
		err += checkEmpty(formobj.aantal, "aantal");
		if ( !err.length )
		{
			var a = parseInt(formobj.aantal.value), amin = parseInt(formobj.minaantal.value);
			if ( a < amin )
			{
				err += "- De minimum bestelling is " + amin + " (u bestelde " + a + ").\n";
				formobj.aantal.style.backgroundColor = BGERR;
				formobj.aantal.onfocus = function() { this.style.backgroundColor = BGOK; }
			}
		}
	}
	else if ( formobj.name == "bestel" )
	{
		err += checkOneChecked(formobj.aanhef, "Aanhef");
		err += checkEmpty(formobj.voornaam, "Voornaam");
		err += checkEmpty(formobj.achternaam, "Achternaam");
		err += checkOneChecked(formobj.isabonnee, "'Bent u abonnee?'");
		var t = new Object();
		t.value = -1;
		err += checkOneChecked(formobj.betaalwijze, "Betaalwijze", t);
		if ( t.value == 0 )
		{
			err += checkIsChecked(formobj.machtiging, "'Ik machtig Uitgeverij Credits Media'");
		}
		err += checkEmpty(formobj.rekeningnr, "Rekeningnummer");
		err += checkIsChecked(formobj.akkoord, "'Ik ga akkoord met de verkoopvoorwaarden'");
		err += checkEmpty(formobj.straat, "Straatnaam");
		err += checkEmpty(formobj.huisnr, "Huisnummer");
		err += checkPostcode(formobj.postcode, "Postcode");
		err += checkEmpty(formobj.plaats, "Plaatsnaam");
		err += checkEmpty(formobj.land, "Land");
		err += checkEmpty(formobj.telefoon, "Telefoonnummer", 10);
		err += checkEmail(formobj.email);
	}
	else if ( formobj.name == "contact" )
	{
		err += checkEmpty(formobj.naam, "Naam", 3);
		err += checkEmail(formobj.email);
		err += checkEmpty(formobj.opm, "Vraag of opmerking", 10);
	}
	else if ( formobj.name == "login" )
	{
		err += checkEmpty(formobj.username, "Gebruikersnaam");
		err += checkEmpty(formobj.password, "Wachtwoord");
	}
	else if ( formobj.name == "cmsrapport" )
	{
		if ( formobj.van.value.length || formobj.tot.value.length )
		{
			if ( formobj.van.value.length )
				err += checkDateNL(formobj.van, "begindatum");
			if ( formobj.tot.value.length )
				err += checkDateNL(formobj.tot, "einddatum");
		}
		else
			err += "- Vul minimaal één datum in.\n";
	}
	else
		msg += "Interne fout: onbekend formulier.\n";

	if ( err.length )
	{
		window.alert("Niet alle gegevens waren correct:\n" + err);
		return false;
	}

	if ( msg.length )
		window.alert(msg);

	return true;
}

