
// ----------------------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------------------

function trim(str) {
 // skip leading and trailing whitespace
 // and return everything in between
  str=str.replace(/^\s*(.*)/, "$1");
  str=str.replace(/(.*)\s*$/, "$1");
  return str;
}

//function to validate an email address
function validEmail(value) {
   	var format = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/;
	return format.test( value );
}

//function to validate an url
function validURL(value) {
   	var format = /^http(s?):\/\/[a-z0-9|\.|-]+\.+[a-z]{2,3}/i;
	return format.test( value );
}

// test for number, simply reverse isNaN
function validNumber(value) {
  return !isNaN( value )
}

// test for number, is within range
function validNumberRange(value,minValue,maxValue)
{
	minValue = (minValue==null) ? value : minValue;
	maxValue = (maxValue==null) ? value : maxValue;
	return (value>=minValue && value<=maxValue)? true: false;
}

function validMin(value,minValue)
{
	return validNumberRange(value,minValue,null);
}

function validMax(value,maxValue)
{
	return validNumberRange(value,null,maxValue);
}

// test for string length
function isValidLength(value,l) {
  return (value.length>=l)
}

// test for _nederlandse_ mobile number
function validMobileNumber(value)
{
	var format = /^(06\d{8})$/;
	return format.test(trim(value));
}

// test for _nederlandse_ zipcode (postbus)
function validZipcode(value)
{
	var format = /^(postbus\s\d{4,6}|\d{4}\s?[a-zA-Z]{2})$/i;
	return format.test(trim(value));
}

// test for _nederlandse_ bankaccount (elf proef)
function validBankAccount(value)
{
	var value=String(value).replace(/[\s\.]+/ig,"");
	// bankrekening
	if ((value.length == 9) || (value.length == 10))
	{
		var i=1;
		var n=0;
		for (c=value.length-1;c>=0;c--,i++)
		{
			n+=parseInt(value.charAt( c ))*i;
		}
		return (n%11)==0;
	}
	// postbankrekening
	else if ((value.length >= 3) || (value.length <= 7))
	{
		return true;
	}
	return false;
}

function validDate(value,format)
{
	var format = format || "dd-mm-yyyy";
	var currentDate = new Date();
	var seperator = format.replace(/d{1,}|m{1,}|y{2,}/g,"").charAt(0);
	var formatList = format.split(seperator);
	var dateList = value.split(seperator);
	var m,d,y;
	if(dateList.length==3)
	{
		for(var i=0;i<formatList.length;i++)
		{
			switch (formatList[i])
			{
				case "m" :
				case "mm" :
					m = parseInt(dateList[i],10)-1;
					break;
				case "d" :
				case "dd" :
					d = parseInt(dateList[i],10);
					break;
				case "yy" :
					if(dateList[i].length!=2) return false;
					y = parseInt(dateList[i],10);
					y += (y<((currentDate.getFullYear()-2000)+10)) ? 2000 : 1900;
					break;
				case "yyyy" :
					if(dateList[i].length!=4) return false;
					y = parseInt(dateList[i],10);
					break;
			}
		}
		var testDate = new Date(y,m,d);
		return (m==testDate.getMonth() && d==testDate.getDate());
	}
	else
	{
		return false;
	}
}


// ----------------------------------------------------------------------------------------------------

/*

formElmObjList[#form element name#] = {
			"elmCheck":{
				"errorText":"#alert/error text when input element is required#",
				"checkList":[{
					"funct":"#function name for special value checks#(this)",
					"errorText":"alert/error text when a special value in input element is required"
					}
					]
			}

	var formElmObjList = {};

*/

// =============================================================================

var gErrorFound

// display an error alert
function reportError(inputElm,text) {

	if (gErrorFound) return;

	if(inputElm.parentNode.parentNode.tagName=="TR")
	{
		trElm = inputElm.parentNode.parentNode;
		trElm.className += " error";
		add2ErrorList(trElm);
	}

	if(text!=null)
	{
		window.alert(unescape(text));
	}
	if (inputElm!=null && inputElm.type!="hidden"){
		inputElm.focus();
	}
	gErrorFound = true;
}

var errorElmList = []

function add2ErrorList(elm){
	errorElmList[errorElmList.length] = elm;
}


function clearErrorList()
{
	var errorElm;
	for(var i=0;i<errorElmList.length;i++)
	{
		errorElm = errorElmList[i];
		errorElm.className = errorElm.className.replace(/(\serror)|error/ig,"");
	}
	errorElmList = [];
}

// =============================================================================
// check the form
function checkForm(formObj,formElmObjList)
{
	gErrorFound = false;
	clearErrorList();
	if(formElmObjList==null) return true;
	for(var i in formElmObjList)
	{
		formElm = formObj[i];
		if (formElm) checkFormElm(formElm,formElmObjList[i]);
	}
	return !gErrorFound;
}

function checkFormElm(formElm,formElmObj)
{
	var elmValue
	if(formElm){
		// check for type form element
		if(formElm.type)
		{
			var inputElm = formElm;
			var elmValue = formElm.value;
		 	switch(formElm.type)
			{
				// input type="text"
				case "text":
				// input type="password"
				case "password":
				// input type="file"
				case "file":
				// textarea
				case "textarea":
				// change by mike 15/08/2004 - trim value
					if(formElmObj.elmCheck && formElmObj.elmCheck.errorText)
					{
						if(trim(elmValue).length<=0){
							reportError(formElm, formElmObj.elmCheck.errorText);
						}
					}
					break;
				// input type="checkbox"
				case "checkbox":
					if(!formElm.checked)
					{
						reportError(formElm, formElmObj.elmCheck.errorText);
					}
					break;
				// select
				case "select-one":
					if(elmValue.length<=0)
					{
						reportError(formElm,formElmObj.elmCheck.errorText);
					}
					break;
				// select multiple="multiple"
				case "select-multiple":
					if(formElm.selectedIndex<0)
					{
						reportError(formElm,formElmObj.elmCheck.errorText);
					}
					break;
			}
		}
		else
		{
		 	// input type="radio" en type="checkbox" (meerdere keuzes)
			isChecked=false;
			elmValue = "";
		 	for(var j=0;j<formElm.length;j++)
			{
				if(formElm[j].checked)
				{
					isChecked=true;
					elmValue=formElm[j].value;
					formElm = formElm[j];
					break;
				}
			}
			if(!isChecked)
			{
				reportError(formElm[0], formElmObj.elmCheck.errorText);
			}
		}

		if(formElmObj.elmCheck && formElmObj.elmCheck.checkList && elmValue.length)
		{
			for(var j=0;j<formElmObj.elmCheck.checkList.length;j++)
			{
				evalStr = formElmObj.elmCheck.checkList[j].funct.replace(/(this)/ig,"formElm");
				if(!eval(evalStr))
				{
					reportError(formElm, formElmObj.elmCheck.checkList[j].errorText);
				}
			}
		}
	}
}
