﻿
var results = new Object();
var messages = new Object();
var fieldsToValidate = new Array();
var validationTypes = new Array();
var subValidationTypes = new Array();

function validateFields() {
	var cnt = fieldsToValidate.length;
	validationRes = true;
	for (var i = 0; i < cnt; i++) {
		validationRes &= validateField(i);
	}
	if (!validationRes) {
		msgText = "";
		for (var msg in messages) {
			msgText += messages[msg] + "\n";
		}
		alert(msgText);
		messages = new Object();
	}
	return validationRes;
}

function validateField(fieldIdx) {
	var fieldId = fieldsToValidate[fieldIdx][0]
	var isEmptyAllowed = fieldsToValidate[fieldIdx][2]
	var validationType = fieldsToValidate[fieldIdx][1];
	var regex = rules[validationType]["regex"];
	var mainRes = true;
	var obj;
	var src;
	var yearObj;
	var monthObj;
	var dayObj;
	var nameIdx = fieldsToValidate[fieldIdx][3];
	var errMsg = fieldsToValidate[fieldIdx][4];
	if (-1 < validationType.indexOf("date")) {
		yearObj = returnObjById(fieldsToValidate[fieldIdx][5][0]);
		monthObj = returnObjById(fieldsToValidate[fieldIdx][5][1]);
		dayObj = returnObjById(fieldsToValidate[fieldIdx][5][2]);
		src = (monthObj ? monthObj.value : "aa") + "/" + (dayObj ? dayObj.value : "aa") + "/" + (yearObj ? yearObj.value : "aa");
		if (isEmptyAllowed && "//" == src) {
			return true;
		}
	} else if (-1 < validationType.indexOf("combo")) {
		var obj = returnObjById(fieldId);
		if (obj) {
			if (isEmptyAllowed) {
				return true;
			}
			src = obj.options[obj.selectedIndex].value
		}
	} else {
		var obj = returnObjById(fieldId);
		if (obj) {
			src = obj.value;
			if (isEmptyAllowed && (!src || src.length == 0)) {
				return true;
			}
		}
	}
	if (src) {
		result = regex.test(src);
		results[fieldId] = result;
		mainRes &= result;
		if (!result) {
			messages[fieldId] = errMsg + "\n"; 
		} else {
			if (-1 < validationType.indexOf("date") && fieldsToValidate[fieldIdx].length > 4) {
				var currentDate = new Date(yearObj.value, monthObj.value - 1, dayObj.value);
				var newestDate = fieldsToValidate[fieldIdx][6];
				var oldestDate = fieldsToValidate[fieldIdx][7];
				if (currentDate < oldestDate || currentDate > newestDate) {
					messages[fieldId] = fieldsToValidate[fieldIdx][8] + "\n";
					mainRes = false;
				}
			}
		}
	}
	return mainRes;
}

function returnObjById(id) {
	if (document.getElementById)
		var returnVar = document.getElementById(id);
	else if (document.all)
		var returnVar = document.all[id];
	else if (document.layers)
		var returnVar = document.layers[id];
	return returnVar;
}

