
function validateField(field, pattern, msg) {
	var ptt = resolvePattern(pattern);
	var flag = isValid(field.value, ptt.pattern);
	if (!flag) {
		msg = (msg == null) ?  ptt.msg : msg;
		alert(msg);
		field.focus();
		field.select();
		return false;
	}
	return true;
}

function isValid(text, pattern){
	if (text == "") return true;
	var re = new RegExp(pattern ,"gi");
	return re.test(text);
}

function renderErrorMessages(errorMessages) {
	var errorMsg = null;
	var j = 1;
		errorMsg = "";
		for (var i = 0; i < errorMessages.length; i++) {
			errorMsg += "\n\n" + j + ") " + errorMessages[i] + ";";
			j++;
		}
	return errorMsg;
}

function resolvePattern(pattern) {
	var ptt = new Object();
	ptt.pattern = new Array();
	switch (pattern) {
		case "FORM":
			ptt.alreadySubmitted = "";
			ptt.failedSubmit = "";		
		case "mandatory" :
			ptt.msg = "";
			break;
		case "integer" :
			ptt.pattern[0] = "^\\d*$";
			ptt.msg = "Intero non valido";
			break;
		case "real" :
			ptt.pattern[0] = "((^[\\+|-]?\\d([\\d]*)(\\.|,)?([\\d]*)([Ee][\\+|-]?\\d*)?\\d$)|(^[\\+|-]?\\d$))"; //examples: 1.5; 14,590; 1.06E20;  
			ptt.msg = " ";
			break;
		case "string" :
			ptt.pattern[0] = "^\\w*$";
			ptt.msg = " ";
			break;
		case "text" :
			ptt.pattern[0] = "^[\\w\\s]*$";
			ptt.msg = "";
			break;
		case "letters" :
			ptt.pattern[0] = "^[A-Za-z\\s]*$"; 
			ptt.msg = " ";
			break; 
		case "email" :
			ptt.pattern[0] = "^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$";
			ptt.msg = "L\' email inserita non e\' valida";
			break;
		case "date" :
			ptt.customValidate = "isDate";
			ptt.msg = "La data inserita non e\' valida";
			break;
		case "expiredDate" :
			ptt.customValidate = "isExpiredDate";
			ptt.msg = " ";
			break;
		case "integerInRange" :
			ptt.customValidate = "isIntegerInRange";
			ptt.msg = " ";
			break;
		case "integerLength" :
			ptt.customValidate = "isIntegerLength";
			ptt.msg = "";
			break;
		case "maxLength" :
			ptt.customValidate = "isMaxLength";
			ptt.msg = " ";
			break;
		case "strictLength" :
			ptt.customValidate = "isStrictLength";
			ptt.msg = " ";
			break;
		case "numberInRange" :
			ptt.customValidate = "isNumberInRange";
			ptt.msg = " ";
			break;
		case "birthDate" :
			ptt.customValidate = "isBirthDate";
			ptt.msg = " ";
			break;
	}
	return ptt;
}

function check_date(field) {
	var checkstr = "0123456789";
	var DateField = field;
	var Datevalue = "";
	var DateTemp = "";
	var seperator = "/";
	var day;
	var month;
	var year;
	var leap = 0;
	var err = 0;
	var i;
	var date;
	err = 0;
	DateValue = DateField.value;
	/* Delete all chars except 0..9 */
	for (i = 0; i < DateValue.length; i++) {
		var digit = DateValue.substr(i, 1);  
		if (checkstr.indexOf(digit) >= 0) {
			DateTemp = DateTemp + DateValue.substr(i, 1);
		} else {
			if ((i!=2) && (i!=5))  
				return 98; 
		} 
	}

	if ((DateTemp=="") && (trim(DateValue)!=""))
		return 99;
		
	DateValue = DateTemp;
	/* Always change date to 8 digits - string*/
	/* if year is entered as 2-digit / always assume 20xx */
	if (DateValue.length == 6) {
		DateValue = DateValue.substr(0, 4);// + '20'+DateValue.substr(4, 2);
	}
	if (DateValue.length != 8) {
		err = 19;
	}
	/* year is wrong if year = 0000 */
	year = DateValue.substr(4, 4);
	if (year == 0) {
		err = 20;
	}
	/* Validation of month*/
	month = DateValue.substr(2, 2);
	if ((month < 1) || (month > 12)) {
		err = 21;
	}
	/* Validation of day*/
	day = DateValue.substr(0, 2);
	if (day < 1) {
		err = 22;
	}
	/* Validation leap-year / february / day */
	if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
		leap = 1;
	}
	if ((month == 2) && (leap == 1) && (day > 29)) {
		err = 23;
	}
	if ((month == 2) && (leap != 1) && (day > 28)) {
		err = 24;
	}
	/* Validation of other months */
	if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) {
		err = 25;
	}
	if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) {
		err = 26;
	}
	/* if 00 ist entered, no error, deleting the entry */
	if ((day == 0) && (month == 0) && (year == 00)) {
		err = 0;
		day = "";
		month = "";
		year = "";
		seperator = "";
	}
	/* if no error, write the completed date to Input-Field (e.g. 13.12.2001) */
	if (err == 0) {
		DateField.value = day + seperator + month + seperator + year;
		field.date = new Date(year, month - 1, day);
	}
	return err;
}