var emptyMsg = "Please enter information in the required fields before proceeding.";
var noSelectMsg = "Please select from the list.";
var emailMsg = "Please enter email in the correct format, ex: name@domain.com";
var phoneMsg = "Phone number should be in one of the following format: (800) 555-1234 or 1 (800) 555-1234.";
var numMsg = "Number field should only contain characters 0~9."
function validateForm(frmId){
	var frm = document.getElementById(frmId);
	if (!validateFields(frm.getElementsByTagName('INPUT'))) return false;
	if (!validateFields(frm.getElementsByTagName('SELECT'))) return false;
	if (!validateFields(frm.getElementsByTagName('TEXTAREA'))) return false;
	return true;
}
function validateFields(fields){
	for (var i=0; i<fields.length; i++){
		if (!fields[i].attributes) continue; // no attribute, not a field
		if (!checkRequired(fields[i])) return false;
		if (!validateContent(fields[i])) return false;
	}
	return true;
}

function checkRequired(field){
	var isReq = field.attributes.getNamedItem('REQUIRED');
	var msg = field.attributes.getNamedItem('validationmsg');
	if (isReq!=null && (isReq.value == 'true' || isReq.value == 'yes')){
		if (field.nodeName == 'INPUT' || field.nodeName == 'TEXTAREA'){		
			var val = field.value;
			if (val==null || val.length==0){
				if (msg!=null) alert(msg.value);
				else alert(emptyMsg);
				field.focus();
				return false;
			}
		}else if (field.nodeName == 'SELECT'){					
			if (field.selectedIndex ==0){
				if (msg!=null) alert(msg.value);
				else alert(noSelectMsg);
				field.focus();
				return false;
			}
		}
	}
	return true; // not required
}
function validateContent(field){
	var msg = field.attributes.getNamedItem('validationmsg');
	var type = field.attributes.getNamedItem('PARAM');
	var val = field.value;	
	if (type!=null&&val.length>0){				
		if (type.value=='email'){		
			if (!checkEmail(val)){
				if (msg!=null) alert(msg.value);
				else alert(emailMsg);	
				field.focus();
				return false;
			}
		}else if (type.value=='number'){
			if (isNaN(parseInt(val))) {
				if (msg!=null) alert(msg.value);
				else alert(numMsg);
				field.focus();
			   	return false;
			}
		}else if (type.value=='phone'){
			if(!checkPhone(val)){
				if (msg!=null) alert(msg.value);
				else alert(phoneMsg);
				field.focus();
			   	return false;
			}
		}
	}
	return true;
}
function checkEmail(value){
	var apos=value.indexOf("@");
	var dotpos=value.lastIndexOf(".");
	if (apos<1||dotpos-apos<2) return false;
	else return true;
}
function checkPhone(value){
	var stripped = value.replace(/[\(\)\.\-\ ]/g, '');
	if (isNaN(parseInt(stripped))) return false;
	else return true;
}
