// Input validation for every field in application

function hasValue(field)
{
	if(field.value == '')
	{
		alert("Please complete all required fields.");
		field.focus();
		return false;
	}
	return true;
}

function isInteger (s){
	var i;
    for (i = 0; i < s.length; i++){
        var c = s.charAt(i);
        if (!((c >= "0") && (c <= "9"))) return false;
    }
    return true;
}

function isNumber (s){
	var i;
    for (i = 0; i < s.length; i++){
        var c = s.charAt(i);
		if(c != "."){
        	if (!((c >= "0") && (c <= "9"))) return false;
		}
    }
    return true;
}

function stripChars (s, chars){
	var i;
    var returnString = "";
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (chars.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function isEmail(s){
    var i = 1;
    var sLength = s.length;
    while ((i < sLength) && (s.charAt(i) != "@")){
		i++;
	}
    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;
    while ((i < sLength) && (s.charAt(i) != ".")){
		i++;
    }
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}

function validateFields(){
	for(i=0;i<document.forms[0].elements.length;i++){
		if((document.forms[0].elements[i].id.indexOf("required") != -1) && (document.forms[0].elements[i].value == '')){
			alert("Please complete all required fields.");
			document.forms[0].elements[i].focus();
			return false;
		}
	}
	
	for(i=0;i<document.forms[0].elements.length;i++){
		if(document.forms[0].elements[i].id.indexOf("number") != -1){
			if(document.forms[0].elements[i].value != ''){
				if(!isNumber(document.forms[0].elements[i].value)){
					alert("Please enter a valid numeric value.");
					document.forms[0].elements[i].focus();
					return false;
				}
			}
		}
		
		if(document.forms[0].elements[i].id.indexOf("integer") != -1){
			if(document.forms[0].elements[i].value != ''){
				if(!isInteger(document.forms[0].elements[i].value)){
					alert("Please enter a valid whole number.");
					document.forms[0].elements[i].focus();
					return false;
				}
			}
		}

		if(document.forms[0].elements[i].id.indexOf("percentage") != -1){
			if(document.forms[0].elements[i].value != ''){
				var percentageValue = stripChars(document.forms[0].elements[i].value, "% ");
				if(!isNumber(percentageValue)){
					alert("Please enter a valid percentage value.");
					document.forms[0].elements[i].focus();
					return false;
				}
			}
		}
		
		if(document.forms[0].elements[i].id.indexOf("email") != -1){
			if(document.forms[0].elements[i].value != ""){
				if(!isEmail(document.forms[0].elements[i].value)){
					alert("Please enter a valid Email Address.");
					document.forms[0].elements[i].focus();
					return false;
				}
			}
		}
		
		if(document.forms[0].elements[i].id.indexOf("phone") != -1){
			if(document.forms[0].elements[i].value != ""){
				var normalizedPhone = stripChars(document.forms[0].elements[i].value, "()- ");
				if (isInteger(normalizedPhone)){
					document.forms[0].elements[i].value = normalizedPhone;
				}
				else{
					alert("Please enter a valid Phone Number.");
					document.forms[0].elements[i].focus();
					return false;
				}
			}
		}

		if(document.forms[0].elements[i].id.indexOf("dollar") != -1){
			var NewFieldValue = "";
			if(document.forms[0].elements[i].value != ''){
				var amountValue = stripChars(document.forms[0].elements[i].value, "$, ");
				if(isNumber(amountValue)){
					document.forms[0].elements[i].value = amountValue;
				}
				else{
					alert("Please enter a valid dollar value.");
					document.forms[0].elements[i].focus();
					return false;
				}
			}
		}
		
		if((document.forms[0].elements[i].id.indexOf("Date") != -1) || (document.forms[0].elements[i].id.indexOf("date") != -1)){
			if(document.forms[0].elements[i].value != ""){
				FieldName = document.forms[0].elements[i].name;
				FieldValue = document.forms[0].elements[i].value;
				DateArray = FieldValue.split("/");
				if(DateArray.length != 3){
					alert("Please enter a valid date.");
					document.forms[0].elements[i].focus();
					return false;
				}
				MonthPart = DateArray[0];
				DayPart = DateArray[1];
				YearPart = DateArray[2];
				if(isNaN(Number(MonthPart)) || isNaN(Number(DayPart)) || isNaN(Number(YearPart))){
					alert("Please enter a valid numeric date.");
					document.forms[0].elements[i].focus();
					return false;
				}
				if(MonthPart < 0 || Number(MonthPart) > 12){
					alert("Dates must have a month between 1 and 12.");
					document.forms[0].elements[i].focus();
					return false;
				}
				if(DayPart < 0 || DayPart > 31){
					alert("Dates must have a day between 1 and 31.");
					document.forms[0].elements[i].focus();
					return false;
				}
				if(YearPart.length != 4){
					alert("Dates must have a four digit numeric year.");
					document.forms[0].elements[i].focus();
					return false;
				}
			}
		}
	}
	return true;
}

/**
//	This method is the same as above. only difference is that it accepts a form as an argument
// helpful if a page has 2 forms and the 2nd form need to be validated
// Java script does not have function overloading...
**/

function validateFormFields(vForm){
	for(i=0;i<vForm.elements.length;i++){
		if((vForm.elements[i].id.indexOf("required") != -1) && (vForm.elements[i].value == '')){
			alert("Please complete all required fields.");
			vForm.elements[i].focus();
			return false;
		}
	}
	
	for(i=0;i<vForm.elements.length;i++){
		if(vForm.elements[i].id.indexOf("number") != -1){
			if(vForm.elements[i].value != ''){
				if(!isNumber(vForm.elements[i].value)){
					alert("Please enter a valid numeric value.");
					vForm.elements[i].focus();
					return false;
				}
			}
		}
		
		if(vForm.elements[i].id.indexOf("integer") != -1){
			if(vForm.elements[i].value != ''){
				if(!isInteger(vForm.elements[i].value)){
					alert("Please enter a valid whole number.");
					vForm.elements[i].focus();
					return false;
				}
			}
		}

		if(vForm.elements[i].id.indexOf("percentage") != -1){
			if(vForm.elements[i].value != ''){
				var percentageValue = stripChars(vForm.elements[i].value, "% ");
				if(!isNumber(percentageValue)){
					alert("Please enter a valid percentage value.");
					vForm.elements[i].focus();
					return false;
				}
			}
		}
		
		if(vForm.elements[i].id.indexOf("email") != -1){
			if(vForm.elements[i].value != ""){
				if(!isEmail(vForm.elements[i].value)){
					alert("Please enter a valid Email Address.");
					vForm.elements[i].focus();
					return false;
				}
			}
		}
		
		if(vForm.elements[i].id.indexOf("phone") != -1){
			if(vForm.elements[i].value != ""){
				var normalizedPhone = stripChars(vForm.elements[i].value, "()- ");
				if (isInteger(normalizedPhone)){
					vForm.elements[i].value = normalizedPhone;
				}
				else{
					alert("Please enter a valid Phone Number.");
					vForm.elements[i].focus();
					return false;
				}
			}
		}

		if(vForm.elements[i].id.indexOf("dollar") != -1){
			var NewFieldValue = "";
			if(vForm.elements[i].value != ''){
				var amountValue = stripChars(vForm.elements[i].value, "$, ");
				if(isNumber(amountValue)){
					vForm.elements[i].value = amountValue;
				}
				else{
					alert("Please enter a valid dollar value.");
					vForm.elements[i].focus();
					return false;
				}
			}
		}
		
		if(vForm.elements[i].id.indexOf("Date") != -1){
			if(vForm.elements[i].value != ""){
				FieldName = vForm.elements[i].name;
				FieldValue = vForm.elements[i].value;
				DateArray = FieldValue.split("/");
				if(DateArray.length != 3){
					alert("Please enter a valid date.");
					vForm.elements[i].focus();
					return false;
				}
				MonthPart = DateArray[0];
				DayPart = DateArray[1];
				YearPart = DateArray[2];
				if(isNaN(Number(MonthPart)) || isNaN(Number(DayPart)) || isNaN(Number(YearPart))){
					alert("Please enter a valid numeric date.");
					vForm.elements[i].focus();
					return false;
				}
				if(MonthPart < 0 || Number(MonthPart) > 12){
					alert("Dates must have a month between 1 and 12.");
					vForm.elements[i].focus();
					return false;
				}
				if(DayPart < 0 || DayPart > 31){
					alert("Dates must have a day between 1 and 31.");
					vForm.elements[i].focus();
					return false;
				}
				if(YearPart.length != 4){
					alert("Dates must have a four digit numeric year.");
					vForm.elements[i].focus();
					return false;
				}
			}
		}
	}
	return true;
}

function checkDelete(){
	if(confirm("Are you sure you want to Delete this record?"))
		return true;
	else
		return false;
}

function formatCurrency(num) {
	if(num == "") return;
	if(isNaN(num)) return;
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
		num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
		cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+ num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + '$' + num + '.' + cents);
}

