function mailCheck(elem) {

	var email = elem;

	var emailRegxp = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)*\.\w{2,8}$/;

	if (emailRegxp.test(email) != true) {

		return false;

	} else {

		return true;

	}

}

function zipcodeCheck(elem) {

	var zipcode = elem;

	if (/[0-9]{4}[ ]*[A-Z]{2}/i.test(zipcode)) {

		return true;

	} else {

		return false;

	}

}

function accountnumberCheck(elem) {

	var accountnumber = elem;

	accountnumber = accountnumber.replace (/[^\d]/g, '');
	chars         = accountnumber.length;

	if (chars == 7) {

		return true;

	} else if (chars == 9) {

		var sum = 0;

		for (i = 1; i < 10; i++) {

			number  = accountnumber.charAt (i - 1);
			sum    += number * (10 - i);

		}

		if (sum % 11 == 0) {

			return true;

		} else {

			return false;

		}

	} else {

		return false;

	}

}

function validate() {

	var htmlElements = Array('input', 'textarea');
	var htmlTempArray;
	var valid = true;
	
	for (var i = 0; i < htmlElements.length; i++) {

		htmlTempArray = document.getElementsByTagName(htmlElements[i]);

		for (var j = 0; j < htmlTempArray.length; j++) {

			if (htmlTempArray[j].className == 'required' && htmlTempArray[j].value.length == 0) {

				document.getElementById(htmlTempArray[j].getAttribute('id')).style.backgroundColor = '#FBE3E4';

				valid = false;

			} else if (htmlTempArray[j].className == 'required' && htmlTempArray[j].value.length > 0) {

				document.getElementById(htmlTempArray[j].getAttribute('id')).style.backgroundColor = '#E6EFC2';

			} else if (htmlTempArray[j].className == 'email' && !mailCheck(htmlTempArray[j].value)) {

				document.getElementById(htmlTempArray[j].getAttribute('id')).style.backgroundColor = '#FBE3E4';

				valid = false;

			} else if (htmlTempArray[j].className == 'email' && mailCheck(htmlTempArray[j].value)) {

				document.getElementById(htmlTempArray[j].getAttribute('id')).style.backgroundColor = '#E6EFC2';

			} else if (htmlTempArray[j].className == 'email_repeat' && (!mailCheck(htmlTempArray[j].value) || htmlTempArray[j].value != htmlTempArray[j - 1].value)) {

				document.getElementById(htmlTempArray[j].getAttribute('id')).style.backgroundColor = '#FBE3E4';

				valid = false;

			} else if (htmlTempArray[j].className == 'email_repeat' && mailCheck(htmlTempArray[j].value) && htmlTempArray[j].value == htmlTempArray[j - 1].value) {

				document.getElementById(htmlTempArray[j].getAttribute('id')).style.backgroundColor = '#E6EFC2';

			} else if (htmlTempArray[j].className == 'password' && htmlTempArray[j].value.length < 6) {

				document.getElementById(htmlTempArray[j].getAttribute('id')).style.backgroundColor = '#FBE3E4';

				valid = false;

			} else if (htmlTempArray[j].className == 'password' && htmlTempArray[j].value.length >= 6) {

				document.getElementById(htmlTempArray[j].getAttribute('id')).style.backgroundColor = '#E6EFC2';

			} else if (htmlTempArray[j].className == 'password_repeat' && (htmlTempArray[j].value.length < 6 || htmlTempArray[j].value != htmlTempArray[j - 1].value)) {

				document.getElementById(htmlTempArray[j].getAttribute('id')).style.backgroundColor = '#FBE3E4';

				valid = false;

			} else if (htmlTempArray[j].className == 'password_repeat' && htmlTempArray[j].value.length >= 6 && htmlTempArray[j].value == htmlTempArray[j - 1].value) {

				document.getElementById(htmlTempArray[j].getAttribute('id')).style.backgroundColor = '#E6EFC2';

			} else if (htmlTempArray[j].className == 'zipcode' && !zipcodeCheck(htmlTempArray[j].value)) {

				document.getElementById(htmlTempArray[j].getAttribute('id')).style.backgroundColor = '#FBE3E4';

				valid = false;

			} else if (htmlTempArray[j].className == 'zipcode' && zipcodeCheck(htmlTempArray[j].value)) {

				document.getElementById(htmlTempArray[j].getAttribute('id')).style.backgroundColor = '#E6EFC2';

			} else if (htmlTempArray[j].className == 'accountnumber' && !accountnumberCheck(htmlTempArray[j].value)) {

				document.getElementById(htmlTempArray[j].getAttribute('id')).style.backgroundColor = '#FBE3E4';

				valid = false;

			} else if (htmlTempArray[j].className == 'accountnumber' && accountnumberCheck(htmlTempArray[j].value)) {

				document.getElementById(htmlTempArray[j].getAttribute('id')).style.backgroundColor = '#E6EFC2';

			}

		}

	}

	if (document.getElementById('akkoord')) {

		if (document.getElementById('akkoord').checked != true) {

			valid = false;

		}

	}

	if (valid) {

		return true;

	} else {

		return false;

	}

}

function check_invoice_item(item_number) {

	if (document.getElementById('item' + item_number + '_titel').value.length > 0 && document.getElementById('item' + item_number + '_prijs1').value.length > 0 && document.getElementById('item' + item_number + '_aantal').value.length != 0) {
		
		document.getElementById('item' + parseInt (item_number + 1)).style.display = 'block';
		
	}

}

var locations_show   = false;
var locations_amount = 0;

function add_location() {

	var location = document.getElementById('locatie').value;

	if (locations_amount != document.getElementById('location_table').getElementsByTagName('tbody')[0].rows.length) {

		locations_amount = document.getElementById('location_table').getElementsByTagName('tbody')[0].rows.length;

	}

	if (locations_amount < 5 && location.length != 0) {

		var radius    = document.getElementById('straal').options[document.getElementById('straal').selectedIndex].value;
		var price_min = document.getElementById('minimumprijs').options[document.getElementById('minimumprijs').selectedIndex].value;
		var price_max = document.getElementById('maximumprijs').options[document.getElementById('maximumprijs').selectedIndex].value;
		var type      = document.getElementById('woningtype').options[document.getElementById('woningtype').selectedIndex].value;

		var tbody = document.getElementById('location_table').getElementsByTagName('tbody')[0];
		var row   = document.createElement('tr');
		var td1   = document.createElement('td');
		var td2   = document.createElement('td');
		var td3   = document.createElement('td');
		var td4   = document.createElement('td');
		var td5   = document.createElement('td');
		var td6   = document.createElement('td');

		td6.setAttribute('class', 'delete_search');

		td1.appendChild (document.createTextNode(location));
		td2.appendChild (document.createTextNode((radius == 0 ? '' : '< ') + radius + ' km'));
		td5.appendChild (document.createTextNode(type.substring(0,1).toUpperCase() + type.substring(1)));

		td3.innerHTML = '&euro; ' + price_min + ',-';
		td4.innerHTML = (price_max == 0 ? 'Geen maximum' : '&euro; ' + price_max + ',-');
		td6.innerHTML = '<a href="#" onclick="delete_location(\'' + (locations_amount + 1) + '\'); return false;">Verwijderen</a>';

		row.appendChild(td1);
		row.appendChild(td2);
		row.appendChild(td3);
		row.appendChild(td4);
		row.appendChild(td5);
		row.appendChild(td6);

		if ((locations_amount + 1) % 2 == 0) {

			row.className = 'even';
		
		} else {

			row.className = 'odd';

		}

		document.getElementById('locatie' + (locations_amount + 1)).value      = location;
		document.getElementById('straal' + (locations_amount + 1)).value       = radius;
		document.getElementById('minimumprijs' + (locations_amount + 1)).value = price_min;
		document.getElementById('maximumprijs' + (locations_amount + 1)).value = price_max;
		document.getElementById('woningtype' + (locations_amount + 1)).value   = type;

		tbody.appendChild(row);

		if (locations_show == false) {

			document.getElementById('locaties').style.display = 'block';

		}

		document.getElementById('locatie').value                    = '';
		document.getElementById('straal').options[0].selected       = 'selected';
		document.getElementById('minimumprijs').options[0].selected = 'selected';
		document.getElementById('woningtype').options[0].selected   = 'selected';

		document.getElementById('maximumprijs').options[(document.getElementById('minimumprijs').options.length - 1)].selected = 'selected';

		locations_amount++;

	}

}

function delete_location(item) {

	var rows = document.getElementById('location_table').getElementsByTagName('tbody')[0].rows.length;

	if (locations_amount != rows) {

		locations_amount = rows;

	}

	for (i = 1; i <= rows; i++) {

		document.getElementById('location_table').getElementsByTagName('tbody')[0].deleteRow(0);

	}

	for (i = 1; i <= 5; i++) {

		if (i == item) {

			document.getElementById('locatie' + i).value      = '';
			document.getElementById('straal' + i).value       = '';
			document.getElementById('minimumprijs' + i).value = '';
			document.getElementById('maximumprijs' + i).value = '';
			document.getElementById('woningtype' + i).value = '';

		} else if (i < item) {

			var location  = document.getElementById('locatie' + i).value;
			var radius    = document.getElementById('straal' + i).value;
			var price_min = document.getElementById('minimumprijs' + i).value;
			var price_max = document.getElementById('maximumprijs' + i).value;
			var type      = document.getElementById('woningtype' + i).value;

			var tbody = document.getElementById('location_table').getElementsByTagName('tbody')[0];
			var row   = document.createElement('tr');
			var td1   = document.createElement('td');
			var td2   = document.createElement('td');
			var td3   = document.createElement('td');
			var td4   = document.createElement('td');
			var td5   = document.createElement('td');
			var td6   = document.createElement('td');

			td6.setAttribute('class', 'delete_search');

			td1.appendChild (document.createTextNode(location));
			td2.appendChild (document.createTextNode((radius == 0 ? '' : '< ') + radius + ' km'));
			td5.appendChild (document.createTextNode(type.substring(0,1).toUpperCase() + type.substring(1)));

			td3.innerHTML = '&euro; ' + price_min + ',-';
			td4.innerHTML = (price_max == 0 ? 'Geen maximum' : '&euro; ' + price_max + ',-');
			td6.innerHTML = '<a href="#" onclick="delete_location(\'' + i + '\'); return false;">Verwijderen</a>';

			row.appendChild(td1);
			row.appendChild(td2);
			row.appendChild(td3);
			row.appendChild(td4);
			row.appendChild(td5);
			row.appendChild(td6);

			if (i % 2 == 0) {

				row.setAttribute('class', 'even');
			
			} else {

				row.setAttribute('class', 'odd');

			}

			tbody.appendChild(row);

		} else if (i > item && document.getElementById('locatie' + i).value.length != 0) {

			document.getElementById('locatie' + (i - 1)).value      = document.getElementById('locatie' + i).value;
			document.getElementById('straal' + (i - 1)).value       = document.getElementById('straal' + i).value;
			document.getElementById('minimumprijs' + (i - 1)).value = document.getElementById('minimumprijs' + i).value;
			document.getElementById('maximumprijs' + (i - 1)).value = document.getElementById('maximumprijs' + i).value;
			document.getElementById('woningtype' + (i - 1)).value   = document.getElementById('woningtype' + i).value;

			document.getElementById('locatie' + i).value      = '';
			document.getElementById('straal' + i).value       = '';
			document.getElementById('minimumprijs' + i).value = '';
			document.getElementById('maximumprijs' + i).value = '';
			document.getElementById('woningtype' + i).value = '';

			var location  = document.getElementById('locatie' + (i - 1)).value;
			var radius    = document.getElementById('straal' + (i - 1)).value;
			var price_min = document.getElementById('minimumprijs' + (i - 1)).value;
			var price_max = document.getElementById('maximumprijs' + (i - 1)).value;
			var type      = document.getElementById('woningtype' + (i - 1)).value;

			var tbody = document.getElementById('location_table').getElementsByTagName('tbody')[0];
			var row   = document.createElement('tr');
			var td1   = document.createElement('td');
			var td2   = document.createElement('td');
			var td3   = document.createElement('td');
			var td4   = document.createElement('td');
			var td5   = document.createElement('td');
			var td6   = document.createElement('td');

			td6.setAttribute('class', 'delete_search');

			td1.appendChild (document.createTextNode(location));
			td2.appendChild (document.createTextNode((radius == 0 ? '' : '< ') + radius + ' km'));
			td5.appendChild (document.createTextNode(type.substring(0,1).toUpperCase() + type.substring(1)));

			td3.innerHTML = '&euro; ' + price_min + ',-';
			td4.innerHTML = (price_max == 0 ? 'Geen maximum' : '&euro; ' + price_max + ',-');
			td6.innerHTML = '<a href="#" onclick="delete_location(\'' + (i - 1) + '\'); return false;">Verwijderen</a>';

			row.appendChild(td1);
			row.appendChild(td2);
			row.appendChild(td3);
			row.appendChild(td4);
			row.appendChild(td5);
			row.appendChild(td6);

			if ((i - 1) % 2 == 0) {

				row.setAttribute('class', 'even');
			
			} else {

				row.setAttribute('class', 'odd');

			}

			document.getElementById('locatie' + (i - 1)).value      = location;
			document.getElementById('straal' + (i - 1)).value       = radius;
			document.getElementById('minimumprijs' + (i - 1)).value = price_min;
			document.getElementById('maximumprijs' + (i - 1)).value = price_max;
			document.getElementById('woningtype' + (i - 1)).value   = type;

			tbody.appendChild(row);

		}

	}

	locations_amount--;

	if (locations_amount == 0) {

		document.getElementById('locaties').style.display = 'none';

	}

}

function address_lookup(prefix) {

	if (prefix.length == 0) {

		var postcode = document.getElementById('postcode').value;

	} else {

		var postcode = document.getElementById(prefix + '_postcode').value;

	}

	if (/[0-9]{4}[ ]*[A-Z]{2}/i.test(postcode)) {

		var XMLHTTPObject = createHTTPHandler();

		var xml = '';

		xml += '<?xml version="1.0" encoding="UTF-8"?>\n';
		xml += '<request>\n';
		xml += '\t<method>input</method>\n';
		xml += '\t<criteria>\n';
		xml += '\t\t<postcode><![CDATA[' + postcode + ']]></postcode>\n';
		xml += '\t</criteria>\n';
		xml += '</request>';

		var XMLHTTPObject = createHTTPHandler();

		XMLHTTPObject.open('POST', 'services/adresverrijking.service', false);
		XMLHTTPObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		XMLHTTPObject.setRequestHeader("Content-length", 'request=' + xml.length);
		XMLHTTPObject.setRequestHeader("Connection", "close");
		XMLHTTPObject.send('request=' + xml);

		var response = XMLHTTPObject.responseXML;
		var root     = response.documentElement;
		var results  = root.getElementsByTagName('result');

		if (prefix.length == 0) {

			document.getElementById('straatnaam').value = getNodeValue(results.item(0), 'straatnaam');
			document.getElementById('plaatsnaam').value = getNodeValue(results.item(0), 'plaatsnaam');

		} else {

			document.getElementById(prefix + '_straatnaam').value = getNodeValue(results.item(0), 'straatnaam');
			document.getElementById(prefix + '_plaatsnaam').value = getNodeValue(results.item(0), 'plaatsnaam');

		}

	}

}

function createHTTPHandler() {
	
	var httphandler = false;
	
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5) {
		
		try {
			
			httphandler = new ActiveXObject("Msxml2.XMLHTTP");

		}

		catch (e) {

			try {

				httphandler = new ActiveXObject("Microsoft.XMLHTTP");

			}

			catch (E) {

				httphandler = false;

			}

		}

	}

	@end @*/

	if (!httphandler && typeof XMLHttpRequest != 'undefined') {

		httphandler = new XMLHttpRequest();

	}

	return httphandler;

}

function getNodeValue(obj,tag) {

	if (obj.getElementsByTagName(tag)[0].firstChild != null) {

		return obj.getElementsByTagName(tag)[0].firstChild.nodeValue;

	} else {

		return '';

	}

}
