function isValidField(field, str) {
	switch(field) {
		case 'not_empty':
			var validPattern = /.+/;
			break;
		case 'number':
			var validPattern = /^[0-9]+$/;
			break;
		case 'float':
			var validPattern = /^[0-9]*(\.[0-9]*)?$/;
			break;
		case 'name':
			var validPattern = /^[a-zA-Zא-ת0-9\-\'\"\.\s]+$/;
			break;
		case 'email':
			var validPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
			break;
		case 'phone':
			var validPattern = /^[0-9\-\s]{7,}$/;
			break;
		case 'password':
			var validPattern = /^[a-zA-Zא-ת0-9\-_!%\?\.\~\^]*$/;
			break;
		case 'url':
			var validPattern = /^[a-zA-Zא-ת0-9\-_]*$/;
			break;
		default:
	}
	return validPattern.test(str);
}

function regularChars(str) {
	str = str.replace(/&amp;/g, '&');
	str = str.replace(/&gt;/g, '>');
	str = str.replace(/&lt;/g, '<');
	str = str.replace(/&quot;/g, '"');
	str = str.replace(/&#039;/g, "'");
	return str;
}

function validForm(formObj, checkList) {
	var firstErrObject = null;

	// we can't put this clean up inside the next loop, since the element may be the same and we don't want to clean previous sets
	for (i = 0; i < checkList.length; i++) {
		if (checkList[i][2] != '') {
			document.getElementById(checkList[i][2]).innerHTML = '';
		}
	}

	for (i = 0; i < checkList.length; i++) {
		var objInput = eval('formObj.' + checkList[i][0]);
		if (!isValidField(checkList[i][1], objInput.value)) {
			if (!firstErrObject) { firstErrObject = objInput; }
			if (checkList[i][2] != '') {
				document.getElementById(checkList[i][2]).innerHTML += checkList[i][3] + '<br />';
			} else {
				alert(regularChars(checkList[i][3]));
				break;
			}
		}
	}

	if (firstErrObject != null) {
		firstErrObject.focus();
		return false;
	}

	window.onbeforeunload = null;
	return true;
}

function charCount(obj, lengthId, maxLen) {
	if (obj.value.length > maxLen) {
		obj.value = obj.value.substring(0, maxLen);
	}
	document.getElementById(lengthId).innerHTML = maxLen + ' / ' + obj.value.length;
}

