function contactForm (formId, action) {

	var self				= this;
	var _base				= document.getElementById(formId);
	var _tagNamesArray		= new Array();
	var _typeNamesArray 	= new Array();
	var _validationTypes	= new Array();
	var _inputsArray		= new Array();
	var action				= action;

	_tagNamesArray[_tagNamesArray.length] = 'input';
	_tagNamesArray[_tagNamesArray.length] = 'textarea';
	_tagNamesArray[_tagNamesArray.length] = 'select';

	_typeNamesArray[_typeNamesArray.length] = 'text';
	_typeNamesArray[_typeNamesArray.length] = 'password';
	_typeNamesArray[_typeNamesArray.length] = 'radio';
	_typeNamesArray[_typeNamesArray.length] = 'checkbox';
	_typeNamesArray[_typeNamesArray.length] = 'file';
	_typeNamesArray[_typeNamesArray.length] = 'hidden';

	_validationTypes[_validationTypes.length] = 'vText';
	_validationTypes[_validationTypes.length] = 'vMail';
	_validationTypes[_validationTypes.length] = 'vTel';
	_validationTypes[_validationTypes.length] = 'vSelect';
	_validationTypes[_validationTypes.length] = 'vZipCode';
	_validationTypes[_validationTypes.length] = 'vNo';


	var _init = function () {
		if (_base === undefined || _base == null) {
			return false;
		}

		_formLoop(_base);

	};

	var _formLoop = function (object) {
		for ( var i = 0; i < object.children.length; i++ ) {

			if (in_array(object.children[i].tagName.toLowerCase(), _tagNamesArray)) {
				_setActions(object.children[i]);
			} else {
				if (object.children[i].children.length > 0)
					_formLoop(object.children[i]);
			}

		}
		return;
	};

	var _setActions = function (object) {
		if (object.tagName.toLowerCase() == 'input') {
			if (in_array(object.type.toLowerCase(), _typeNamesArray)) {
				var validationType = object.className.split(' ');
				if (validationType.length == 2) {
					validationType = validationType[1];
					for ( var i = 0; i < _validationTypes.length; i++ ) {
						if (validationType == _validationTypes[i]) {
							_inputsArray[_inputsArray.length] = object;
							eval('_set' + _validationTypes[i] + '(object)');
						}
					}
				} else {
					for ( var i = 0; i < _validationTypes.length; i++ ) {
						if (object.className == _validationTypes[i]) {
							_inputsArray[_inputsArray.length] = object;
							eval('_set' + _validationTypes[i] + '(object)');
						}
					}
				}
			} else {
				var validationType = object.className.split(' ');
				if (validationType.length == 2) {
					if (validationType[1] == 'SEND') {
						_setSubmitAction(object);
					}
				} else {
					if (object.className == 'SEND') {
						_setSubmitAction(object);
					}
				}
			}
		} else if (object.tagName.toLowerCase() == 'textarea') {
			var validationType = object.className.split(' ');
			if (validationType.length == 2) {
				validationType = validationType[1];
				for ( var i = 0; i < _validationTypes.length; i++ ) {
					if (validationType == _validationTypes[i]) {
						_inputsArray[_inputsArray.length] = object;
						eval('_set' + _validationTypes[i] + '(object)');
					}
				}
			} else {
				for ( var i = 0; i < _validationTypes.length; i++ ) {
					if (object.className == _validationTypes[i]) {
						_inputsArray[_inputsArray.length] = object;
						eval('_set' + _validationTypes[i] + '(object)');
					}
				}
			}
		} else if (object.tagName.toLowerCase() == 'select') {
			var validationType = object.className.split(' ');
			if (validationType.length == 2) {
				validationType = validationType[1];
				for ( var i = 0; i < _validationTypes.length; i++ ) {
					if (validationType == _validationTypes[i]) {
						_inputsArray[_inputsArray.length] = object;
						eval('_set' + _validationTypes[i] + '(object)');
					}
				}
			} else {
				for ( var i = 0; i < _validationTypes.length; i++ ) {
					if (object.className == _validationTypes[i]) {
						_inputsArray[_inputsArray.length] = object;
						eval('_set' + _validationTypes[i] + '(object)');
					}
				}
			}
		} else {
			var validationType = object.className.split(' ');
			if (validationType.length == 2) {
				if (validationType[1] == 'SEND') {
					_setSubmitAction(object);
				}
			} else {
				if (object.className == 'SEND') {
					_setSubmitAction(object);
				}
			}
		}
	};

	var _setvText = function (object) {
		_addFlush(object);

		object.onchange = function () {
			self.vText(this);
		};
	};

	var _setvMail = function (object) {
		_addFlush(object);

		object.onchange = function () {
			self.vMail(this);
		};
	};

	var _setvSelect = function (object) {
		object.onchange = function () {
			self.vSelect(this);
		};
	};

	var _setvTel = function (object) {
		_addFlush(object);

		object.onchange = function () {
			self.vTel(this);
		};
	};

	var _setvZipCode = function (object) {
		_addFlush(object);

		object.onchange = function () {
			self.vZipCode(this);
		};
	};

	var _setvNo = function (object) {
		_addFlush(object);
	};

	var _setSubmitAction = function (object) {
		object.onclick = function () {
			self.send();
			return false;
		};
	};

	var _addFlush = function (object) {
		object.style.fontStyle = 'italic';
		object.onfocus = function () {
			if (this.value == this.defaultValue) {
				this.value = '';
				this.style.fontStyle = '';
			}
			this.className	= this.className.replace('invalid ', '');
		};
		object.onblur = function () {
			if (this.value == '') {
				this.value = this.defaultValue;
				this.style.fontStyle = 'italic';
			}
		};
		return;
	};

	// onchange Validation functies
	this.vText = function (object) {
		if (object.type != 'hidden') {
			if (object.value != object.defaultValue) {

				if (object.value.length > 1) {
					valid(object);
				} else {
					invalid(object);
				}

			} else {
				invalid(object);
			}
		}
	};

	this.vSelect = function (object) {
		if (object.selectedIndex == 0) {
			invalid(object);
		} else {
			valid(object);
		}
	};

	this.vMail = function (object) {
		if (object.value != object.defaultValue) {
			var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
			if(reg.test(object.value)) {
				valid(object);
			} else {
				invalid(object);
			}
		} else {
			invalid(object);
		}
	};

	this.vTel = function (object) {
		if (object.value != object.defaultValue) {
			var reg = /^([0-9_\-\_\(\_\)\.])/;
			if (object.value.length > 9) {
				if (reg.test(object.value)) {
					valid(object);
				} else {
					invalid(object);
				}
			} else {
				invalid(object);
			}
		} else {
			invalid(object);
		}
	};

	this.vZipCode = function (object) {
		if (object.value != object.defaultValue) {
			var splitter = object.value.split(' ');
			if (splitter.length == 2) {
				var reg = /^([0-9])/;
				if(reg.test(splitter[0]) && splitter[0].length == 4) {
					var reg = /^([A-Z])/;
					if (reg.test(splitter[1]) && splitter[1].length == 2) {
						valid(object);
					} else {
						invalid(object);
					}
				} else {
					invalid(object);
				}
 			} else {
 				invalid(object);
 			}
		} else {
			invalid(object);
		}
	};

	this.vNo = function (object) {
		valid(object);
		return;
	};

	// Invalid & valid Functies
	var invalid = function (object) {
		var splitter = object.className.split(' ');
		var classname = '';
		var check = false;
		for ( var i in splitter) {
			if (splitter[i] != 'valid') {
				classname += splitter[i] + ' ';
			}
			if (splitter[i] == 'invalid') {
				check = true;
			}
		}

		if (!check) {
			object.className = 'invalid ' + classname;
		}
		return;
	};

	var valid = function (object) {
		var splitter = object.className.split(' ');
		var classname = '';
		var check = false;
		for ( var i in splitter) {
			if (splitter[i] != 'invalid') {
				classname += splitter[i] + ' ';
			}
			if (splitter[i] == 'valid') {
				check = true;
			}
		}

		if (!check) {
			object.className = 'valid ' + classname;
		}
		return;
	};


	// Send functie
	this.send = function () {
		_validateForm(_base);
		if (_checkForm(_base)) {
			var post = _getPostData();

			_base.innerHTML = '';

			var image = document.createElement('img');
				image.src = baseUrl + 'source/img/contactformLoader.gif';
				image.alt = 'Uw bericht wordt verzonden';
				image.title = 'Uw bericht wordt verzonden';
				_base.appendChild(image);

			var ajax = new ajaxcall(siteUrl + action, post);
				ajax.onload = function (data) {
					data = ajax.toJSON(data);
					_base.removeChild(image);
					if (data.length > 0) {
						_succes();
					} else {
						_error();
					}
				};

		} else {
			return false;
		}
	};

	var _validateForm = function (object) {
		for ( var i = 0; i < _inputsArray.length; i++ ) {
			var validationType = _inputsArray[i].className.split(' ');
			if (validationType.length == 2) {
				validationType = validationType[1];
				for ( var i2 = 0; i2 < _validationTypes.length; i2++ ) {
					if (validationType == _validationTypes[i2])
						eval('self.' + _validationTypes[i2] + '(_inputsArray[i])');
				}
			} else {
				for ( var i2 = 0; i2 < _validationTypes.length; i2++ ) {
					if (_inputsArray[i].className == _validationTypes[i2]) {
						eval('self.' + _validationTypes[i2] + '(_inputsArray[i])');
					}
				}
			}
		}
		return;
	};

	var _checkForm = function () {
		for ( var i = 0; i < _inputsArray.length; i++ ) {
			var validationType = _inputsArray[i].className.split(' ');
			for ( var i2 = 0; i2 < validationType.length; i2++) {
				if (validationType[i2] == 'invalid') {
					return false;
				}
			}
		}

		return true;
	};

	var _getPostData = function () {
		var url = '';
		for ( var i = 0; i < _inputsArray.length; i++ ) {
			url += _inputsArray[i].name + '=' + _inputsArray[i].value.replace('&', '&amp;');
			if (i != (_inputsArray.length - 1)) {
				url += '&';
			}
		}
		return url;
	};


	var _succes = function () {
		var comment 			= document.createElement('span');
			comment.className 	= 'comment';
			comment.innerHTML 	= 'Uw e-mailbericht is verzonden en wordt zo spoedig mogelijk in behandeling genomen.<br />';
			_base.appendChild(comment);
	};

	var _error = function () {
		var comment 			= document.createElement('span');
			comment.className 	= 'comment';
			comment.innerHTML 	= 	'Er is een fout opgetreden tijdens het verzenden van het contactformulier. <br />' +
									'Probeert u het later nog eens.';
			_base.appendChild(comment);
	};

	_init();
};
if (document.getElementById('contact')) {
	new contactForm('contact', 'contact/verzenden/');
}
