/*
 * Version: $Revision: 1.49 $
 * Author: BeSite <info@besite.nl>
 * Copyright 2005-2006 BeSite
 */

var _checkForms = new Array();
var _checkFormsInt = new Array();
var _checkFormsFloat = new Array();
var _checkFormsString = new Array();
var _checkFormsFile = new Array();
var _checkFormsBslFile = new Array();
var _checkFormsBslFileNoNull = new Array();
var _checkFormsZipFile = new Array();
var _checkFormsEmail = new Array();
var _checkFormsEmailOrNull = new Array();
var _checkFormsImage = new Array();
var _checkFormsImageNoNull = new Array();
var _checkFormsHours = new Array();
var _checkFormsMinutes = new Array();
var _checkFormsBox = new Array();
var _checkFormsRadio = new Array();
var _checkFormsPassword = new Array();
var _checkFormsPasswordMatch = new Array();
var _checkFormsSelect = new Array();
var _checkFormsSelectMultiple = new Array();
var _checkFormsAccountNr = new Array();
var _checkFormsMobileNr = new Array();
var _checkFormsMobileNrOrNull = new Array();
var _checkFormsPostalcodeNl = new Array();
var _checkFormsLink = new Array();
var _checkFormsLinkOrNull = new Array();
var _checkFormsAlphaNumericId = new Array();
var _checkFormsAlphaNumericIdOrNull = new Array();
var _checkFormsRegexp = new Array();
var _checkFormsFunction = new Array();
var _checkFormErrorMsg = "";
var _checkFormErrorElement = "";
var _checkFormFocussed = false;
var _checkFormsChecks = new Array();
var _borderColor = '';

function AddForm( id, name )
{
	_checkForms[id] = name;
	_checkFormsInt[id] = new Array();
	_checkFormsFloat[id] = new Array();
	_checkFormsString[id] = new Array();
	_checkFormsFile[id] = new Array();
	_checkFormsBslFile[id] = new Array();
	_checkFormsBslFileNoNull[id] = new Array();
	_checkFormsZipFile[id] = new Array();
	_checkFormsEmail[id] = new Array();
	_checkFormsEmailOrNull[id] = new Array();
	_checkFormsImage[id] = new Array();
	_checkFormsImageNoNull[id] = new Array();
	_checkFormsHours[id] = new Array();
	_checkFormsMinutes[id] = new Array();
	_checkFormsBox[id] = new Array();
	_checkFormsRadio[id] = new Array();
	_checkFormsPassword[id] = new Array();
	_checkFormsPasswordMatch[id] = new Array();
	_checkFormsSelect[id] = new Array();
	_checkFormsSelectMultiple[id] = new Array();
	_checkFormsAccountNr[id] = new Array();
	_checkFormsMobileNr[id] = new Array();
	_checkFormsMobileNrOrNull[id] = new Array();
	_checkFormsPostalcodeNl[id] = new Array();
	_checkFormsLink[id] = new Array();
	_checkFormsLinkOrNull[id] = new Array();
	_checkFormsAlphaNumericId[id] = new Array();
	_checkFormsAlphaNumericIdOrNull[id] = new Array();
	_checkFormsRegexp[id] = new Array();
	_checkFormsFunction[id] = new Array();
	_checkFormsChecks[id] = new Array();
}

function AddCheck( form_id, type, field )
{
	var arr = null;
	switch( type )
	{
		case "Int":
			arr = _checkFormsInt;
			break;
		case "Float":
			arr = _checkFormsFloat;
			break;
		case "String":
			arr = _checkFormsString;
			break;
		case "File":
			arr = _checkFormsFile;
			break;
		case "BslFile":
			arr = _checkFormsBslFile;
			break;
		case "BslFileNoNull":
			arr = _checkFormsBslFileNoNull;
			break;
		case "ZipFile":
			arr = _checkFormsZipFile;
			break;
		case "Email":
			arr = _checkFormsEmail;
			break;
		case "EmailOrNull":
			arr = _checkFormsEmailOrNull;
			break;
		case "Image":
			arr = _checkFormsImage;
			break;
		case "ImageNoNull":
			arr = _checkFormsImageNoNull;
			break;
		case "Hours":
			arr = _checkFormsHours;
			break;
		case "Minutes":
			arr = _checkFormsMinutes;
			break;
		case "Box":
			arr = _checkFormsBox;
			break;
		case "Radio":
			arr = _checkFormsRadio;
			break;
		case "Password":
			arr = _checkFormsPassword;
			break;
		case "PasswordMatch":
			arr = _checkFormsPasswordMatch;
			break;
		case "Select":
			arr = _checkFormsSelect;
			break;
		case "SelectMultiple":
			arr = _checkFormsSelectMultiple;
			break;
		case "AccountNr":
			arr = _checkFormsAccountNr;
			break;
		case "MobileNr":
			arr = _checkFormsMobileNr;
			break;
		case "MobileNrOrNull":
			arr = _checkFormsMobileNrOrNull;
			break;
		case "PostalcodeNl":
			arr = _checkFormsPostalcodeNl;
			break;
		case "Link":
			arr = _checkFormsLink;
			break;
		case "LinkOrNull":
			arr = _checkFormsLinkOrNull;
			break;
		case "AlphaNumericId":
			arr = _checkFormsAlphaNumericId;
			break;
		case "AlphaNumericIdOrNull":
			arr = _checkFormsAlphaNumericIdOrNull;
			break;
		case "Regexp":
			arr = _checkFormsRegexp;
			break;
		case "Function":
			arr = _checkFormsFunction;
			break;
		default:
			return false;
	}
	_checkFormsChecks[form_id][_checkFormsChecks[form_id].length] = new Array( field, type );
	arr[form_id][arr[form_id].length]=field;
	return true;
}

function _elementFocus( element )
{
	if ( _checkFormFocussed )
	{
		return;
	}
	// IE only when scrolling is on div!
	if ( document.body.id != 'IE' || document.body.style.overflow == "hidden" )
	{
		var offset = 0;
		var e = element;
		// calc total offset from top
		while ( e != null )
		{
			offset += e.offsetTop;
			e = e.offsetParent;
		}
		var scrollTop = document.body.scrollTop;
		// IE fixed layout scroll on div instead of body
		if ( document.body.id == 'IE' && document.body.style.overflow == "hidden" )
		{
			scrollTop = document.getElementById('Contents').scrollTop;
		}
		// under tractare header?
		if ( ( offset - scrollTop ) < 125 )
		{
			var newScroll = offset - 125;
			// IE fixed layout scroll on div instead of body
			if ( document.body.id == 'IE' && document.body.style.overflow == "hidden" )
			{
				document.getElementById('Contents').scrollTop = newScroll;
			}
			else
			{
				document.body.scrollTop = newScroll;
			}
		}
	}
	try
	{
		element.focus();
	}
	catch( er )
	{
	}
	_checkFormFocussed = true;
}

function _elementDisabled( element, disabled )
{
	// if element is disabled, disable the formcheck for PHP validation too
	for ( var i = 0; i < element.form.elements.length; i++ )
	{
		if ( element.form.elements[i].name.indexOf("_formcheck") == 0 && element.form.elements[i].value == element.name )
		{
			element.form.elements[i].disabled = disabled;
		}
	}
	return true;
}

function _markValid( eElement )
{
	eElement.style.borderColor = '';
	eElement.style.borderWidth = '';
	eElement.style.borderStyle = '';
}

function _markInvalid( eElement )
{
	eElement.style.borderColor = 'red';
	if ( eElement.style.borderWidth == '0' || eElement.style.borderWidth == '0px' )
	{
		eElement.style.borderWidth = '1px';
	}
	eElement.style.borderStyle = 'solid';
}

function _checkInt( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	element.value = trim( element.value );
	if( isNaN( parseInt( element.value ) ) )
	{
		_elementFocus( element );
		_showAlert( msgInt, element.name );
		_markInvalid( element );
		return false;
	}
	_markValid( element );
	return true;
}

function _checkFloat( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	element.value = trim( element.value );
	if( isNaN( parseFloat( element.value ) ) )
	{
		_elementFocus( element );
		_showAlert( msgFloat, element.name );
		_markInvalid( element );
		return false;
	}
	_markValid( element );
	return true;
}

function _checkString( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	element.value = trim( element.value );
	if( element.value.length < 1 )
	{
		_elementFocus( element );
		_showAlert( msgString, element.name );
		_markInvalid( element );
		return false;
	}
	_markValid( element );
	return true;
}

function _checkFile( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	if( element.value.length < 1 )
	{
		_elementFocus( element );
		_showAlert( msgFile, element.name );
		_markInvalid( element );
		return false;
	}
	_markValid( element );
	return true;
}

function _checkBslFile( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	var filename = element.value.toLowerCase();
	if( filename != '' )
	{
		// always true??
	}
	_markValid( element );
	return true;
}

function _checkBslFileNoNull( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	var filename = element.value.toLowerCase();
	if( filename != '' )
	{
		// alway true?
	}
	else // we need file!
	{
		_elementFocus( element );
		_showAlert( msgBslFile, element.name );
		_markInvalid( element );
		return false;
	}
	_markValid( element );
	return true;
}

function _checkZipFile( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	filename = element.value.toLowerCase();
	res = true;
	if( filename != '' )
	{
		if ( filename.indexOf(".zip") == -1  )
		{
			res = false;
		}
	}
	else
	{
		res = false;
	}
	if ( !res )
	{
		_elementFocus( element );
		_showAlert( msgZipFile, element.name );
		_markInvalid( element );
		return false;
	}
	_markValid( element );
	return res;
}

function _checkPassword( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	element.value = trim( element.value );
	if( element.value.length < 4 )
	{
		_elementFocus( element );
		_showAlert( msgPassword, element.name );
		_markInvalid( element );
		return false;
	}
	_markValid( element );
	return true;
}

function _checkEmail( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	element.value = trim( element.value );
	if( !validEmail( element ) )
	{
		_elementFocus( element );
		_showAlert( msgEmail, element.name );
		_markInvalid( element );
		return false;
	}
	_markValid( element );
	return true;
}

function _checkEmailOrNull( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	element.value = trim( element.value );
	if( element.value.length > 0 && !validEmail( element ) )
	{
		_elementFocus( element );
		_showAlert( msgEmailOrNull, element.name );
		_markInvalid( element );
		return false;
	}
	_markValid( element );
	return true;
}

function _checkImage( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	var filename = element.value.toLowerCase();
	if( filename != '' )
	{
		if( filename.indexOf(".jpg") == -1 && filename.indexOf(".jpeg") == -1 &&
			filename.indexOf(".gif") == -1 && filename.indexOf(".png") == -1  )
		{
			_elementFocus( element );
			_showAlert( msgImage, element.name );
			_markInvalid( element );
			return false;
		}
	}
	_markValid( element );
	return true;
}

function _checkImageNoNull( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	var filename = element.value.toLowerCase();
	if( filename != '' )
	{
		if( filename.indexOf(".jpg") == -1 && filename.indexOf(".jpeg") == -1 &&
			filename.indexOf(".gif") == -1 && filename.indexOf(".png") == -1  )
		{
			_elementFocus( element );
			_showAlert( msgImage, element.name );
			_markInvalid( element );
			return false;
		}
	}
	else // we need image!
	{
		_elementFocus( element );
		_showAlert( msgImage, element.name );
		_markInvalid( element );
		return false;
	}
	_markValid( element );
	return true;
}

function _checkHours( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	element.value = trim( element.value );
	var val = parseInt( element.value );
	if( isNaN( val ) || val < 0 || val > 23 )
	{
		_elementFocus( element );
		_showAlert( msgHours, element.name );
		_markInvalid( element );
		return false;
	}
	_markValid( element );
	return true;
}

function _checkMinutes( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	element.value = trim( element.value );
	var val = parseInt( element.value );
	if( isNaN( val ) || val < 0 || val > 59 )
	{
		_elementFocus( element );
		_showAlert( msgMinutes, element.name );
		_markInvalid( element );
		return false;
	}
	_markValid( element );
	return true;
}

function _checkBox( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	if( !element.checked )
	{
		_elementFocus( element );
		_showAlert( msgBox, element.name );
		//_markInvalid( element );
		return false;
	}
	//_markValid( element );
	return true;
}

function _checkRadio( element )
{
	var focusElement = element;
	if( isNaN( element.length ) )
	{
		if( element.checked )
		{
			return true;
		}
	}
	else
	{
		focusElement = element[0];
		for( var ii = 0; ii < element.length; ii++ )
		{
			if ( element[ii].disabled ) return _elementDisabled( element[ii], true );
			_elementDisabled( element[ii], false );
			if( element[ii].checked )
			{
				if( element.style ) element.style.border = '';
				return true;
			}
		}
	}
	_elementFocus( focusElement );
	_showAlert( msgRadio, focusElement.name );
	return false;
}

function _checkSelect( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	if( element.value.length < 1 )
	{
		_elementFocus( element );
		_showAlert( msgSelect, element.name );
		_markInvalid( element );
		return false;
	}
	_markValid( element );
	return true;
}

function _checkSelectMultiple( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	for ( var ii = 0; ii < element.length; ii++ )
	{
		if ( element[ii].selected == true )
		{
			_markValid( element );
			return true;
		}
	}
	_elementFocus( element );
	_showAlert( msgSelectMultiple, element.name );
	_markInvalid( element );
	return false;
}

function _checkAccountNr( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	if ( element.value.length < 9 ) return true;
	var total = 0;
	for( var ii = element.value.length; ii > 0; ii-- )
	{
		var number = parseInt( element.value.charAt( ii - 1 ) );
		if( isNaN( number ) )
		{
			_elementFocus( element );
			_showAlert( msgAccountNr, element.name );
			_markInvalid( element );
			return false;
		}
		total += number * ( 10 - ii );
	}
	var totalten = new String( total / 11 * 10 );
	if( totalten.substr( totalten.length - 1, 1 ) != '0' )
	{
		_elementFocus( element );
		_showAlert( msgAccountNr, element.name );
		_markInvalid( element );
		return false;
	}
	_markValid( element );
	return true;
}

function _checkMobileNr( element, bNullAllowed )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	onMobileNrChange( element );
	if ( bNullAllowed && element.value == '' )
	{
		// null allowed!
	}
	else
	{
		if( !validMobileNrString( element.value ) )
		{
			_elementFocus( element );
			_showAlert( bNullAllowed ? msgMobileNrOrNull : msgMobileNr, element.name );
			_markInvalid( element );
			return false;
		}
	}
	_markValid( element );
	return true;
}

function validMobileNrString( sNumber )
{
	// NL | DE | BE
    var regExp = /^\+(316([0-9]{8})|49(15|16|17)([0-9]{8,9})|32(472|473|474|475|476|477|478|479|484|485|486|494|495|496|497|498|499)([0-9]{5}))$/;
	if( regExp.test( new String( sNumber ) ) )
	{
		return true;
	}
	return false;
}

function onMobileNrChange( element )
{
	element.value = trim( element.value );
	element.value = element.value.replace( /[^0-9\+]/g, '' );
	// NL 06123456789 => +31612345678
	if( /^06([0-9]{8})$/.test( element.value ) )
	{
		element.value = '+31' + element.value.substr(1,9);
		return;
	}
	// DE 01512345678 => +491512345678
	if( /^0(15|16|17)([0-9]{8,9})$/.test( element.value ) )
	{
		element.value = '+49' + element.value.substr(1,11);
		return;
	}
	// BE 047512345 => +3247512345
	if( /^0(472|473|474|475|476|477|478|479|484|485|486|494|495|496|497|498|499)([0-9]{5})$/.test( element.value ) )
	{
		element.value = '+32' + element.value.substr(1,8);
		return;
	}
}

function CheckPostalcodeNlString( sPostalCode )
{
	sPostalCode = sPostalCode.replace( /[^0-9a-zA-Z]/g, '' );
	var regExp = /^[1-9]{1}[0-9]{3}[a-zA-Z]{2}$/;
	if( !regExp.test( sPostalCode ) )
	{
		return false;
	}
	return true;
}

function _checkPostalcodeNl( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	element.value = trim( element.value );
	
	if ( !CheckPostalcodeNlString( element.value ) )
	{
		_elementFocus( element );
		_showAlert( msgPostalcodeNl, element.name );
		_markInvalid( element );
		return false;
	}
	_markValid( element );
	return true;
}

function _checkLink( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	element.value = trim( element.value );
	
	var regExp = /^(http\:\/\/|https\:\/\/)(.{4,})$/;
	if( !regExp.test( element.value ) )
	{
		_elementFocus( element );
		_showAlert( msgLink, element.name );
		_markInvalid( element );
		return false;
	}
	_markValid( element );
	return true;
}

function _checkLinkOrNull( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	element.value = trim( element.value );
	
	var regExp = /^(http\:\/\/|https\:\/\/)(.{4,})$/;
	if( element.value.length > 0 && !regExp.test( element.value ) )
	{
		_elementFocus( element );
		_showAlert( msgLinkOrNull, element.name );
		_markInvalid( element );
		return true;
	}
	_markValid( element );
	return true;
}

function _checkAlphaNumericId( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	
	var regExp = /^[A-Za-z0-9][A-Za-z0-9\-_]*$/;
	if( !regExp.test( element.value ) )
	{
		_elementFocus( element );
		_showAlert( msgAlphaNumericId, element.name );
		_markInvalid( element );
		return false;
	}
	_markValid( element );
	return true;
}

function _checkAlphaNumericIdOrNull( element )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	
	var regExp = /^[A-Za-z0-9][A-Za-z0-9\-_]*$/;
	if( element.value.length > 0 && !regExp.test( element.value ) )
	{
		_elementFocus( element );
		_showAlert( msgAlphaNumericIdOrNull, element.name );
		_markInvalid( element );
		return false;
	}
	_markValid( element );
	return true;
}

function _checkRegexp( element, regexp, msg )
{
	if ( element.disabled ) return _elementDisabled( element, true );
	_elementDisabled( element, false );
	element.value = trim( element.value );
	
	var reg = new RegExp( regexp.substr( 1, regexp.length - 2 ) ); // cut of begin and end "/"
	
	if( reg.exec( element.value ) == null )
	{
		_elementFocus( element );
		_showAlert( msg, element.name );
		_markInvalid( element );
		return false;
	}
	_markValid( element );
	return true;
}

// show alert if no other alert is shown
function _showAlert( sMsg, sElementName )
{
	if ( _checkFormErrorMsg == "" )
	{
		_checkFormErrorMsg = sMsg;
		_checkFormErrorElement = sElementName;
	}
}

function checkForm( form )
{
	_checkFormFocussed = false;
	_checkFormErrorMsg = "";
	_checkFormErrorElement = "";
	var id = -1;
	var i;
	for( i = 0; i < _checkForms.length; i++ )
	{
		if ( _checkForms[i] == form._formname.value )
		{
			id = i;
		}
	}
	if ( id == -1 )
	{
		return true;
	}
	var checkFormRes = true;
	// CHECK INT
	for( i = 0; i < _checkFormsInt[id].length; i++ )
	{
		if ( !_checkInt( form.elements[_checkFormsInt[id][i]] ) ) { checkFormRes = false; }
	}
	// CHECK FLOAT
	for( i = 0; i < _checkFormsFloat[id].length; i++ )
	{
		if ( !_checkFloat( form.elements[_checkFormsFloat[id][i]] ) ) { checkFormRes = false; }
	}
	// CHECK STRING
	for( i = 0; i < _checkFormsString[id].length; i++ )
	{
		if ( !_checkString( form.elements[_checkFormsString[id][i]] ) ) { checkFormRes = false; }
	}
	// CHECK FILE
	for( i = 0; i < _checkFormsFile[id].length; i++ )
	{
		if ( !_checkFile( form.elements[_checkFormsFile[id][i]] ) ) { checkFormRes = false; }
	}
	// CHECK BSLFILE
	for( i = 0; i < _checkFormsBslFile[id].length; i++ )
	{
		if ( !_checkBslFile( form.elements[_checkFormsBslFile[id][i]] ) ) { checkFormRes = false; }
	}
	// CHECK BSLFILE NO NULL
	for( i = 0; i < _checkFormsBslFileNoNull[id].length; i++ )
	{
		if ( !_checkBslFileNoNull( form.elements[_checkFormsBslFileNoNull[id][i]] ) ) { checkFormRes = false; }
	}
	// CHECK ZIPFILE
	for( i = 0; i < _checkFormsZipFile[id].length; i++ )
	{
		if ( !_checkZipFile( form.elements[_checkFormsZipFile[id][i]] ) ) { checkFormRes = false; }
	}
	// CHECK EMAIL
	for( i = 0; i < _checkFormsEmail[id].length; i++ )
	{
		if ( !_checkEmail( form.elements[_checkFormsEmail[id][i]] ) ) { checkFormRes = false; }
	}
	// CHECK EMAIL OR NULL
	for( i = 0; i < _checkFormsEmailOrNull[id].length; i++ )
	{
		if ( !_checkEmailOrNull( form.elements[_checkFormsEmailOrNull[id][i]] ) ) { checkFormRes = false; }
	}
	// CHECK IMAGE
	for( i = 0; i < _checkFormsImage[id].length; i++ )
	{
		if ( !_checkImage( form.elements[_checkFormsImage[id][i]] ) ) { checkFormRes = false; }
	}
	// CHECK IMAGE NO NULL
	for( i = 0; i < _checkFormsImageNoNull[id].length; i++ )
	{
		if ( !_checkImageNoNull( form.elements[_checkFormsImageNoNull[id][i]] ) ) { checkFormRes = false; }
	}
	// CHECK HOURS
	for( i = 0; i < _checkFormsHours[id].length; i++ )
	{
		if ( !_checkHours( form.elements[_checkFormsHours[id][i]] ) ) { checkFormRes = false; }
	}
	// CHECK MINUTES
	for( i = 0; i < _checkFormsMinutes[id].length; i++ )
	{
		if ( !_checkMinutes( form.elements[_checkFormsMinutes[id][i]] ) ) { checkFormRes = false; }
	}
	// CHECKBOX CHECKED?
	for( i = 0; i < _checkFormsBox[id].length; i++ )
	{
		if ( !_checkBox( form.elements[_checkFormsBox[id][i]] ) ) { checkFormRes = false; }
	}
	// RADIO BUTTON CHECKED?
	for( i = 0; i < _checkFormsRadio[id].length; i++ )
	{
		if ( !_checkRadio( form.elements[_checkFormsRadio[id][i]] ) ) { checkFormRes = false; }
	}
	// CHECK PASSWORD
	for( i = 0; i < _checkFormsPassword[id].length; i++ )
	{
		if ( !_checkPassword( form.elements[_checkFormsPassword[id][i]] ) ) { checkFormRes = false; }
	}
	// CHECK PASSWORD MATCH
	for( i = 0; i < _checkFormsPasswordMatch[id].length; i++ )
	{
		if ( !_checkPassword( form.elements[_checkFormsPasswordMatch[id][i]] ) ) { checkFormRes = false; }
	}
	// now check if they match
	if ( _checkFormsPasswordMatch[id].length > 1 )
	{
		for( j = 1; j < _checkFormsPasswordMatch[id].length; j++ )
		{
			if ( ( form.elements[_checkFormsPasswordMatch[id][0]].value ) != ( form.elements[_checkFormsPasswordMatch[id][j]].value ) )
			{
				form.elements[_checkFormsPasswordMatch[id][0]].focus();
				_showAlert( msgPasswordMatch );
				checkFormRes = false;
			}
		}
	}
	// CHECK SELECT
	for( i = 0; i < _checkFormsSelect[id].length; i++ )
	{
		if ( !_checkSelect( form.elements[_checkFormsSelect[id][i]] ) ) { checkFormRes = false; }
	}
	// CHECK SELECT MULTIPLE
	for( i = 0; i < _checkFormsSelectMultiple[id].length; i++ )
	{
		if ( !_checkSelectMultiple( form.elements[_checkFormsSelectMultiple[id][i]] ) ) { checkFormRes = false; }
	}
	// CHECK ACCOUNT NR
	for( i = 0; i < _checkFormsAccountNr[id].length; i++ )
	{
		if ( !_checkAccountNr( form.elements[_checkFormsAccountNr[id][i]] ) ) { checkFormRes = false; }
	}
	// CHECK MOBILE NR
	for( i = 0; i < _checkFormsMobileNr[id].length; i++ )
	{
		if ( !_checkMobileNr( form.elements[_checkFormsMobileNr[id][i]] ) ) { checkFormRes = false; }
	}
	// CHECK MOBILE NR OR NULL
	for( i = 0; i < _checkFormsMobileNrOrNull[id].length; i++ )
	{
		if ( !_checkMobileNr( form.elements[_checkFormsMobileNrOrNull[id][i]], true ) ) { checkFormRes = false; }
	}
	// CHECK POSTALCODE NL
	for( i = 0; i < _checkFormsPostalcodeNl[id].length; i++ )
	{
		if ( !_checkPostalcodeNl( form.elements[_checkFormsPostalcodeNl[id][i]], true ) ) { checkFormRes = false; }
	}
	// CHECK LINK
	for( i = 0; i < _checkFormsLink[id].length; i++ )
	{
		if ( !_checkLink( form.elements[_checkFormsLink[id][i]], true ) ) { checkFormRes = false; }
	}
	// CHECK LINK OR NULL
	for( i = 0; i < _checkFormsLinkOrNull[id].length; i++ )
	{
		if ( !_checkLinkOrNull( form.elements[_checkFormsLinkOrNull[id][i]], true ) ) { checkFormRes = false; }
	}
	// CHECK ALPHANUMERIC ID
	for( i = 0; i < _checkFormsAlphaNumericId[id].length; i++ )
	{
		if ( !_checkAlphaNumericId( form.elements[_checkFormsAlphaNumericId[id][i]], true ) ) { checkFormRes = false; }
	}
	// CHECK ALPHANUMERIC ID OR NULL
	for( i = 0; i < _checkFormsAlphaNumericIdOrNull[id].length; i++ )
	{
		if ( !_checkAlphaNumericIdOrNull( form.elements[_checkFormsAlphaNumericIdOrNull[id][i]], true ) ) { checkFormRes = false; }
	}
	// CHECK regexp
	for( i = 0; i < _checkFormsRegexp[id].length; i++ )
	{
		var arr = _checkFormsRegexp[id][i].split( "###" );
		if ( !_checkRegexp( form.elements[arr[0]], arr[1], arr[2] ) ) { checkFormRes = false; }
	}
	// CHECK FUNCTIONS
	for( i = 0; i < _checkFormsFunction[id].length; i++ )
	{
		func = _checkFormsFunction[id][i];
		if ( !func( form ) ) checkFormRes = false;
	}
	if ( !checkFormRes )
	{
		alert( _checkFormErrorMsg + ( Debug() ? " [" + _checkFormErrorElement + "]" : "" ) );
	}
	return checkFormRes;
}

function validEmail( mail )
{
	if( validEmailString( mail.value ) )
	{
		return true;
	}
	mail.focus();
	return false;
}

function validEmailString( mailString )
{
    var regExp = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if( regExp.test( mailString ) )
	{
		return true;
	}
	return false;
}

function setDisableAllContainingFields( eElement, bDisabled )
{
	if ( eElement && eElement.hasChildNodes() )
	{
		for( var i = 0; i < eElement.childNodes.length; i++ )
		{
			switch( eElement.childNodes[i].nodeName )
			{
				case "#text":
					// ignore
					break;
				case "INPUT":
				case "SELECT":
				case "TEXTAREA":
					eElement.childNodes[i].disabled = bDisabled;
					break;
				default:
					if ( eElement.childNodes[i].hasChildNodes() )
					{
						setDisableAllContainingFields( eElement.childNodes[i], bDisabled );
					}
			}
		}
	}
}

function setCheckedAllContainingCheckBoxes( eElement, bChecked )
{
	if ( eElement && eElement.hasChildNodes() )
	{
		for( var i = 0; i < eElement.childNodes.length; i++ )
		{
			switch( eElement.childNodes[i].nodeName )
			{
				case "INPUT":
					if( eElement.childNodes[i].type == 'checkbox' )
					{
						eElement.childNodes[i].checked = bChecked;
						break;
					}
				case "#text":
				case "SELECT":
				case "TEXTAREA":
					// ignore
					break;
				default:
					if ( eElement.childNodes[i].hasChildNodes() )
					{
						setCheckedAllContainingCheckBoxes( eElement.childNodes[i], bChecked );
					}
			}
		}
	}
}

function checkContainingFields( iFormId, eElement, bFirst )
{
	if ( bFirst )
	{
		_checkFormFocussed = false;
		_checkFormErrorMsg = "";
		_checkFormErrorElement = "";
	}
	var checkFormRes = true;
	if ( eElement.hasChildNodes() )
	{
		for( var i = 0; i < eElement.childNodes.length; i++ )
		{
			switch( eElement.childNodes[i].nodeName )
			{
				case "#text":
					// ignore
					break;
				case "INPUT":
				case "SELECT":
				case "TEXTAREA":
					for ( var j = 0; j < _checkFormsChecks[iFormId].length; j++ )
					{
						var name = _checkFormsChecks[iFormId][j][0];
						var arr = null;
						if ( _checkFormsChecks[iFormId][j][1] == 'Regexp' )
						{
							// name is joined array thingy
							arr = name.split( "###" );
							name = arr[0];
						}
						if ( name == eElement.childNodes[i].name )
						{
							//alert( "Check: " + eElement.childNodes[i].name );
							checkFormRes = _check( eElement.childNodes[i], _checkFormsChecks[iFormId][j][1], arr ) && checkFormRes;
							break;
						}
					}
					break;
				default:
					if ( eElement.childNodes[i].hasChildNodes() )
					{
						checkFormRes = checkContainingFields( iFormId, eElement.childNodes[i], false ) && checkFormRes;
					}
			}
		}
	}
	if ( bFirst && !checkFormRes )
	{
		alert( _checkFormErrorMsg + ( Debug() ? " [" + _checkFormErrorElement + "]" : "" ) );
	}
	return checkFormRes;
}

function _check( eElement, sCheckType, aRegexpArray )
{
	switch( sCheckType )
	{
		case "Int":
			if ( !_checkInt( eElement ) ) { return false; }
			break;
		case "Float":
			if ( !_checkFloat( eElement ) ) { return false; }
			break;
		case "String":
			if ( !_checkString( eElement ) ) { return false; }
			break;
		case "File":
			if ( !_checkFile( eElement ) ) { return false; }
			break;
		case "BslFile":
			if ( !_checkBslFile( eElement ) ) { return false; }
			break;
		case "BslFileNoNull":
			if ( !_checkBslFileNoNull( eElement ) ) { return false; }
			break;
		case "ZipFile":
			if ( !_checkZipFile( eElement ) ) { return false; }
			break;
		case "Email":
			if ( !_checkEmail( eElement ) ) { return false; }
			break;
		case "EmailOrNull":
			if ( !_checkEmailOrNull( eElement ) ) { return false; }
			break;
		case "Image":
			if ( !_checkImage( eElement ) ) { return false; }
			break;
		case "ImageNoNull":
			if ( !_checkImageNoNull( eElement ) ) { return false; }
			break;
		case "Hours":
		if ( !_checkHours( eElement ) ) { return false; }
			break;
		case "Minutes":
			if ( !_checkMinutes( eElement ) ) { return false; }
			break;
		case "Box":
			if ( !_checkBox( eElement ) ) { return false; }
			break;
		case "Radio":
			if ( !_checkRadio( eElement ) ) { return false; }
			break;
		case "Password":
			if ( !_checkPassword( eElement ) ) { return false; }
			break;
		case "PasswordMatch":
			if ( Debug() )
			{
				alert( "Checktype 'PasswordMatch' can NOT check if passwords match with _check()!" );
			}
			if ( !_checkPassword( eElement ) ) { return false; }
			break;
		case "Select":
			if ( !_checkSelect( eElement ) ) { return false; }
			break;
		case "SelectMultiple":
			if ( !_checkSelectMultiple( eElement ) ) { return false; }
			break;
		case "AccountNr":
			if ( !_checkAccountNr( eElement ) ) { return false; }
			break;
		case "MobileNr":
			if ( !_checkMobileNr( eElement ) ) { return false; }
			break;
		case "MobileNrOrNull":
			if ( !_checkMobileNr( eElement, true ) ) { return false; }
			break;
		case "PostalcodeNl":
			if ( !_checkPostalcodeNl( eElement ) ) { return false; }
			break;
		case "Link":
			if ( !_checkLink( eElement ) ) { return false; }
			break;
		case "LinkOrNull":
			if ( !_checkLinkOrNull( eElement ) ) { return false; }
			break;
		case "AlphaNumericId":
			if ( !_checkAlphaNumericId( eElement ) ) { return false; }
			break;
		case "AlphaNumericIdOrNull":
			if ( !_checkAlphaNumericIdOrNull( eElement ) ) { return false; }
			break;
		case "Regexp":
			if ( !_checkRegexp( eElement, aRegexpArray[1], aRegexpArray[2] ) ) { return false; }
			break;
		case "Function":
			if ( Debug() )
			{
				alert( "Checktype 'Function' is NOT supported with _check()!" );
			}
			break;
		default:
			if ( Debug() )
			{
				alert( "Unknown checktype (" + sCheckType + ")!" );
			}
	}
	return true;
}

function OnSelectUpdate( eSelect )
{
	if ( eSelect.value != "" && eSelect.options[0].value == "" )
	{
		eSelect.options[0] = null;
	}
}

function getRadioCheckedValue( radioObj ) 
{
	if( !radioObj )
	{
		return "";
	}
	var radioLength = radioObj.length;
	if( isNaN( radioLength ) )
	{
		if( radioObj.checked )
		{
			return radioObj.value;
		}
		else
		{
			return "";
		}
	}
	else
	{
		for( i = 0; i < radioLength; i++ ) 
		{
			if( radioObj[i].checked ) 
			{
				return radioObj[i].value;
			}
		}
	}
	return "";
}


function setRadioCheckedValue( radioObj, newValue ) 
{
	if( !radioObj )
	{
		return;
	}
	var radioLength = radioObj.length;
	if( isNaN( radioLength ) ) 
	{
		radioObj.checked = ( radioObj.value == newValue.toString() );
	}
	else
	{
		for( i = 0; i < radioLength; i++ ) 
		{
			radioObj[i].checked = false;
			if( radioObj[i].value == newValue.toString() )
			{
				radioObj[i].checked = true;
			}
		}
	}
}

