/* Autogenerated javascript */

var zipRegex = /^[1-9][0-9]{3} ?[a-zA-Z]{2}$/;
var birthdayRegex = /^(0[1-9]|[1-3][0-9])\-(0[1-9]|[1-3][0-9])\-(18|19)[0-9]{2}/;
var alphabetFreeRegex = /#[a-z]#/;
var dateInFutureRegex = /^[0-9]{1,2}\/[0-9]{1,2}\/(18|19|20)[0-9]{2}/;
var dateInFutureNewRegex = /^(0[1-9]|[1-3][0-9])\-(0[1-9]|1[0-2])\-(20)[0-9]{2}$/;
var dateRegex = /^(0[1-9]|[1-3][0-9])\-(0[1-9]|1[0-2])\-(20)[0-9]{2}$/;
var debtorNumberRegex = /^[0-9]([0-9]*\.?[0-9]+)*$/;
var emailRegexOld = /^([a-zA-Z0-9-_\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
var emailRegex = /^[a-zA-Z0-9!#$%&'*+=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$/;
var functionRegex = /^[\w][\w\s]+$/;
var initialsRegex = /^[a-zA-Zà-üÀ-Ü'` \.ß]+$/;
var kvkRegex = /^[1-9][0-9]{7}(\s?[0-9]{4})?$/;
var nameRegex = /^[0-9a-zA-Zà-üÀ-Ü'` ß-]+$/;
var firstnameRegex = /^[0-9a-zA-Zà-üÀ-Ü'` ß-]+$/;
var positiveIntegerValueRegex = /^[1-9]\d*$/;
var phone3Regex = /^(00[\d]{11})|(0[1-9][0-9]{8})$/;
var phoneRegex = /^[\d+-.()\s]+$/;
var phone1Regex = /(^06[\- ][1-9]{1}[0-9]{7}$)|(^0[1-9]{1}[0-9]{1}[\- ][1-9]{1}[0-9]{6}$)|(^0[1-9]{1}[0-9]{2}[\- ][1-9]{1}[0-9]{5}$)|(^0[1-9]{1}[0-9]{8}$)/;
var postfixRegex = /^[\w-\/]+$/;
var prefixRegex = /^[a-zA-Z'`][a-zA-Z\.\s'`-]+$/;
var taxNumberRegex = /^NL[0-9]{9}B[0-9][1-9]$/;
var moneyRegex = /^[0-9]([0-9]*)?([,.][0-9]{2})?$/;
var floatRegex = /^([0-9]+)([.][0-9]+)?$/;
var streetRegex = /^[0-9a-zA-Zà-üÀ-Ü'` ß-]+$/;
var cityRegex = /^[0-9a-zA-Zà-üÀ-Ü'` ß-]+$/;

function checkZip (fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(zipRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkBirthday (fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(birthdayRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkAlphabetFree (fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(alphabetFreeRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkDateInFuture (fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(dateInFutureRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkDateInFutureNew (fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(dateInFutureNewRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkEmail (fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(emailRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkFunction (fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(functionRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkInitials (fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(initialsRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkKvk (fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(kvkRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkName (fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(nameRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkFirstname (fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(firstnameRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkPositiveIntegerValue (fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(positiveIntegerValueRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkPhone (fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(phoneRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkPhone2 (fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(phone2Regex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkPostfix (fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(postfixRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkPrefix (fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(prefixRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkTaxNumber (fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(taxNumberRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkMoney (fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(moneyRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkFloat (fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(floatRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkStreet (fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(streetRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkCity (fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(cityRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

/* ========================================================================================================= */
/* 				Place the manual override methods here 														 */
/* ========================================================================================================= */

/**
 * 
 * Reimplementation of the inputchecker bank check.
 * Checks if banknumber is valid (according to the 11 test)
 * Valid bankaccounts are:
 * 							p<numbers> (a postbank account)
 * 							<numbers> (any bank account number)
 * 							<number>.<number> (<numbers> with dots in between)
 */
function checkBank(fieldId) {
	field = document.getElementById(fieldId);
	
	bankNumber = field.value;
	bankLength = bankNumber.length;
	
	bankRegex = "^[0-9]+$";
	
	// Check if bankNumber is only digits (0 to 9)
	if (!bankNumber.match(bankRegex)) {
		highlightField(fieldId, fieldId, fieldId, false);
		return false;
	}

	// Bank can be any account, verify that its a valid bankaccountnumber
	// Check if bankNumberlength is greater than 1;
	if (bankLength <= 1) {
		highlightField(fieldId, fieldId, fieldId, false);
		return false;
	}
	
	sum = 0;
	
	// Only do the 11 test if bankLenght is between 7 and 10
	if (bankLength > 7 && bankLength <= 10) {
		for(i = 0; i < bankLength; i++) {
			sum += (bankLength - i) * bankNumber.substring(i,i+1);
		}
		if (sum%11 != 0) {
			highlightField(fieldId, fieldId, fieldId, false);
			return false;
		}
	}
	
	// No error yet, so we can make the field normal again	
	highlightField(fieldId, fieldId, fieldId, true);
	return true;
}

function checkEmptyString(fieldId) {
	field = document.getElementById(fieldId);
	
	if (field.value == '') {
		highlightField(fieldId, fieldId, fieldId, false);
		return false;
	} else {
		highlightField(fieldId, fieldId, fieldId, true);
		return true;
	}
}

function checkNumber(fieldId) {
	return checkPositiveIntegerValue(fieldId);
}

function checkTitle(fieldId) {
	fieldMale = document.getElementById(fieldId+1);
	fieldFemale = document.getElementById(fieldId+0);
	
	if (fieldMale.checked || fieldFemale.checked) {
		highlightField(fieldId+0, fieldId, fieldId, true);
		highlightField(fieldId+1, fieldId, fieldId, true);
		return true;
	} else {
		highlightField(fieldId+0, fieldId, fieldId, false);
		highlightField(fieldId+1, fieldId, fieldId, false);
		return false;
	}
}

// Checks if a given date string is in
// one of the valid formats:
// b) M-D-YYYY format
function checkDate(dateString)
{
	// make sure it is in the expected format
	if (dateString.search(/^\d{1,2}[\-]\d{1,2}[\-]\d{4}/g) != 0) {
		return false;
	}
	
	// remove other separators that are not valid with the Date class
	dateString = dateString.replace(/[\-|]/g, "/");
	
	// convert it into a date instance
	var dt = new Date(Date.parse(dateString));
	
	// check the components of the date
	// since Date instance automatically rolls over each component
	var arrDateParts = dateString.split("/");
	
	return (
		dt.getMonth() == arrDateParts[0]-1 &&
		dt.getDate() == arrDateParts[1] &&
		dt.getFullYear() == arrDateParts[2]
	);
} 

function checkFax(fieldId) {
	field = document.getElementById(fieldId);

	if (field.value.match(phoneRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkCompanyName(fieldId) {
	return checkEmptyString(fieldId);
}

function checkDebtorNumber(fieldId) {
	field = document.getElementById(fieldId);
	
	if (field.value.length < 4 || field.value.length > 10) {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}

	if (field.value.match(debtorNumberRegex)) {
		highlightField(field.id, field.id, field.id, true);
		return true;
	} else {
		highlightField(field.id, field.id, field.id, false);
		return false;
	}
}

function checkNameLandlord(fieldId) {
	return checkName(fieldId);
}

function checkPhoneLandlord(fieldId) {
	return checkPhone(fieldId);
}

function checkPostfixLandlord(fieldId) {
	return checkPostfix(fieldId);
}

function checkPostfixTemporaryMailAddress(fieldId) {
	return checkPostfix(fieldId);
}

function checkFirstName(fieldId) {
	return checkName(fieldId);
}

function checkLastName(fieldId) {
	return checkName(fieldId);
}

function checkContactreason(fieldId) {
	return checkEmptyString(fieldId);
}

function checkGas(fieldId) {
	return checkNumber(fieldId);
}
function checkElec(fieldId) {
	return checkNumber(fieldId);
}
