// Check validation in a form
// Input : form
// DefineArray:	vad_type ('fill','date','double','int','length','same'),
//		vad_type, vad_type_name,
//		vad_int, vad_int_name,
//		vad_double, vad_double_name,
//		vad_length, vad_length_name
function validate(fm) {
	var err_msg = '';
	var err_msg2 = '';
	var err_internal = '';
	for (i = 0; i < vad_type.length; i++) {
		err_msg = '';
		if (vad_type[i] == 'fill') {
			if (vad_fill.length != vad_fill_name.length) { err_internal += vad_type[i] + '\n'; continue; }
			for (j = 0; j < vad_fill.length; j++) {
				//alert(vad_fill[j] + '=' + fm[vad_fill[j]].value);
				if (fm[vad_fill[j]].value == '') err_msg += '- ' + vad_fill_name[j] + '\n';
			}
			if (err_msg.length > 0) err_msg2 += 'You must enter following field(s):\n' + err_msg + '\n';
		} 
		else if (vad_type[i] == 'double') {
			if (vad_double.length != vad_double_name.length) { err_internal += vad_type[i] + '\n'; continue; }
			for (j = 0; j < vad_double.length; j++) {
				if (!isDouble(fm[vad_double[j]].value)) err_msg += '- ' + vad_double_name[j] + '\n';
			}
			if (err_msg.length > 0) err_msg2 += 'You must enter number in following field(s):\n' + err_msg + '\n';
		} 
		else if (vad_type[i] == 'int') {
			if (vad_int.length != vad_int_name.length) { err_internal += vad_type[i] + '\n'; continue; }
			for (j = 0; j < vad_int.length; j++) {
				if (!isInt(fm[vad_int[j]].value)) err_msg += '- ' + vad_int_name[j] + '\n';
			}
			if (err_msg.length > 0) err_msg2 += 'You must enter integer in following field(s):\n' + err_msg + '\n';
		} 
		else if (vad_type[i] == 'date') {
			if ((vad_date.length/3) != vad_date_name.length) { err_internal += vad_type[i] + '\n'; continue; }
			for (j = 0; j < vad_date.length; j=j+3) {
				if (!checkDate(fm[vad_date[j]].value,fm[vad_date[j+1]].value,fm[vad_date[j+2]].value)) {
					err_msg += '- ' + vad_date_name[j/3] + '\n';
				}
			}
			if (err_msg.length > 0) err_msg2 += 'The following date(s) is/are invalid:\n' + err_msg + '\n';
		}
		else if (vad_type[i] == 'length') {
			if ((vad_length.length/2) != vad_length_name.length) { err_internal += vad_type[i] + '\n'; continue; }
			for (j = 0; j < vad_length.length; j=j+2) {
				if (fm[vad_length[j]].value.length > eval(vad_length[j+1])) {
					err_msg += '- ' + vad_length_name[j/2] + ' (Max. ' + vad_length[j+1] + ' characters)\n';
				}
			}
			if (err_msg.length > 0) err_msg2 += 'Maximum length exceeds in following field(s):\n' + err_msg + '\n';
		}
		else if (vad_type[i] == 'same') {
			if (vad_same.length != vad_same_name.length) { err_internal += vad_type[i] + '\n'; continue; }
			for (j = 0; j < vad_same.length; j=j+2) {
				if (fm[vad_same[j]].value != fm[vad_same[j+1]].value) {
					err_msg += '- ' + vad_same_name[j] + ' & ' + vad_same_name[j+1] + '\n';
				}
			}
			if (err_msg.length > 0) err_msg2 += 'Following fields must be the same:\n' + err_msg + '\n';
		}
		else if (vad_type[i] == 'compare') {
			if (vad_compare.length/2 != vad_compare_name.length) { err_internal += vad_type[i] + '\n'; continue; }
			for (j = 0; j < vad_compare.length; j=j+2) {
				if (fm[vad_compare[j]].value != '' && isDouble(fm[vad_compare[j]].value)) {
					if (!eval(fm[vad_compare[j]].value + vad_compare[j+1])) {
						err_msg += '- ' + vad_compare_name[j/2] + ' ' + vad_compare[j+1] + '\n';
					}
				}
			}
			if (err_msg.length > 0) err_msg2 += 'Following condition(s) must be maintain:\n' + err_msg + '\n';
		}
		else if (vad_type[i] == 'email') {
			if (vad_email.length != vad_email_name.length) { err_internal += vad_type[i] + '\n'; continue; }
			for (j = 0; j < vad_email.length; j++) {
				if (!isEmail(fm[vad_email[j]].value)) err_msg += '- ' + vad_email_name[j] + '\n';
			}
			if (err_msg.length > 0) err_msg2 += 'Email in following field(s) is/are invalid:\n' + err_msg + '\n';
		} 
		else if (vad_type[i] == 'other') {
			if (!vad_other(fm)) err_msg2 += vad_other_name[0] + '\n';
		}
	}
	if (err_internal.length > 0) {
		alert('Error validate():\n' + err_internal + '(Array length not match)');
		return false;
	}
	if (err_msg2.length > 0) {
		alert(err_msg2);
		return false;
	}
	return true;
}
function isDouble(val) { 
	var standard_num = ".0123456789";
	var count_comma = 0;
	for (var i = 0; i < val.length; i++) { 
		if (standard_num.indexOf(val.substring(i, i + 1)) < 0) return false;
		if (val.substring(i, i + 1) == ".") count_comma++;
		if (count_comma > 1) return false;
	}
	return true;
}
function isInt(val) { 
	var standard_num = "0123456789";
	for (var i = 0; i < val.length; i++) { 
		if (standard_num.indexOf(val.substring(i, i + 1)) < 0) return false;
	}
	return true;
}
function checkDate (yyyy, mm, dd) {
	if (yyyy == '' && mm == '' && dd == '') return true;
	if (yyyy < 2000 || yyyy > 2010 || mm < 1 || mm > 12 || dd < 1 || dd > 31) return false;
	if (mm==1 || mm==3 || mm==5 || mm==7 || mm==8 || mm==10 || mm==12) {
		if (dd > 31) return false;
	} else if (mm==4 || mm==6 || mm==9 || mm==11) {
		if (dd > 30) return false;
	} else if (mm=2 && yyyy%4 == 0) {
		if (dd > 29) return false;
	} else if (mm=2) {
		if (dd > 28) return false;
	} else {
		return false;
	}
	return true;
}
function isEmail(e) {
	if (e == '') return true;
	var pos = e.indexOf("@");
	if (pos == -1 || pos == 0) {
		return false;
	} else {
		e = e.substring(pos+1);
		pos = e.indexOf(".");
		if (pos == -1 || pos == 0 || pos == e.length - 1) {
			return false;
		}
	}
	return true;
}
// validate(fm) END