// JavaScript Document for validating input fields
function validateFields(page,formField){
	//establish the variable field arrays for each of the pages that require validation
	var errors = 'No';
	//initiate field array with the success and unsuccess errors
	var fieldArray = new Array(
		'Success',
		'UnSuccess'
		);
	switch(page){
		case "Donation":
			//page description
			fieldArray[2] = 'Name';		
			fieldArray[3] = 'Phone_1';		
			fieldArray[4] = 'Phone_2';		
			fieldArray[5] = 'Phone_3';		
			fieldArray[6] = 'Street';		
			fieldArray[7] = 'City';		
			fieldArray[8] = 'State';		
			fieldArray[9] = 'Zip';		
			fieldArray[10] = 'Email';		
			fieldArray[11] = 'Card_Type';			
			fieldArray[12] = 'Card_Nbr';			
			fieldArray[13] = 'Card_Month';			
			fieldArray[14] = 'Card_Year';			
			fieldArray[15] = 'CVC';
			fieldArray[16] = 'Amt';
		break;
	}
	//loop through the field array and remove all the errors. set them all to display none
	for(i=0; i<fieldArray.length; i++){
		switch(fieldArray[i]){
			case "Card_Month":
				if(document.getElementById('Card_Date_ERROR')){
					document.getElementById('Card_Date_ERROR').style.display = 'none';
				}
			break;
			case "Card_Year":
				if(document.getElementById('Card_Date_ERROR')){
					document.getElementById('Card_Date_ERROR').style.display = 'none';
				}
			break;
			case "Phone_1":
				if(document.getElementById('Phone_ERROR')){
					document.getElementById('Phone_ERROR').style.display = 'none';
				}
			break;
			case "Phone_2":
				if(document.getElementById('Phone_ERROR')){
					document.getElementById('Phone_ERROR').style.display = 'none';
				}
			break;
			case "Phone_3":
				if(document.getElementById('Phone_ERROR')){
					document.getElementById('Phone_ERROR').style.display = 'none';
				}
			break;
			default:
				if(document.getElementById(fieldArray[i]+'_ERROR')){
					document.getElementById(fieldArray[i]+'_ERROR').style.display = 'none';
				}
			break;
		}
	}
	//loop through the various fields to make sure that they are actually there
	for(i=0; i<fieldArray.length; i++){
		if(document.getElementById(fieldArray[i])){
			//use a switch statement to determine how to validate each individual field
			switch (fieldArray[i]){
				case "Email":
					if(!isFieldEmail(fieldArray[i])){
						var errors = 'Yes';
						displayError(fieldArray[i]);
					}else{
						if(document.getElementById('EmailC')){
							//there is a email confirm field
							if(document.getElementById('EmailC').value != document.getElementById('Email').value){
								var errors = 'Yes';
								displayError('EmailC');
							}
						}
					}
				break;
				case "Phone_1":
					if(!isFieldNbr(fieldArray[i])){
						var errors = 'Yes';
						displayError('Phone');
					}
				break;
				case "Phone_2":
					if(!isFieldNbr(fieldArray[i])){
						var errors = 'Yes';
						displayError('Phone');
					}
				break;
				case "Phone_3":
					if(!isFieldNbr(fieldArray[i])){
						var errors = 'Yes';
						displayError('Phone');
					}
				break;
				case "Name":
					if(!isFieldValid(fieldArray[i])){
						var errors = 'Yes';
						displayError(fieldArray[i]);
					}
				break;
				case "Card_Type":
					if(!isItemSelected(fieldArray[i])){
						var errors = 'Yes';
						displayError(fieldArray[i]);
					}
				break;
				case "Card_Nbr":
					if(!isCreditCardNbr(fieldArray[i])){
						var errors = 'Yes';
						displayError(fieldArray[i]);
					}
				break;
				case "Card_Month":
					if(!isFieldMonth(fieldArray[i])){
						var errors = 'Yes';
						displayError('Card_Date');
					}
				break;
				case "Card_Year":
					if(!isFieldNbr(fieldArray[i])){
						var errors = 'Yes';
						displayError('Card_Date');
					}
				break;
				case "CVC":
					if(!isFieldCVC(fieldArray[i])){
						var errors = 'Yes';
						displayError(fieldArray[i]);
					}
				break;
				case "Street":
					if(!isFieldValid(fieldArray[i])){
						var errors = 'Yes';
						displayError(fieldArray[i]);
					}
				break;
				case "City":
					if(!isFieldCity(fieldArray[i])){
						var errors = 'Yes';
						displayError(fieldArray[i]);
					}
				break;
				case "State":
					if(!isItemSelected(fieldArray[i])){
						var errors = 'Yes';
						displayError(fieldArray[i]);
					}
				break;
				case "Zip":
					if(!isFieldZip(fieldArray[i])){
						var errors = 'Yes';
						displayError(fieldArray[i]);
					}
				break;
				case "Amt":
					if(!isFieldAmt(fieldArray[i])){
						var errors = 'Yes';
						displayError(fieldArray[i]);
					}
				break;
			}
		}
	}
	if(errors == 'No'){
		document.getElementById(formField).submit();
	}
}
//function for displaying an error
function displayError(field){
	if(document.getElementById(field+'_ERROR')){
		document.getElementById(field+'_ERROR').style.display = 'block';
	}
}
//function for checking to see if a field is empty
function isFieldEmpty(field){							
	if(document.getElementById(field)){
		var value = document.getElementById(field).value;			
		//remove all spaces, dashes and other bad characters
		var chars = /\s/g;
		var testValue = value.replace(chars,"");
		if(testValue == ''){
			return false;
		}else{
			return true;
		}
	}else{
		return false;
	}
}
//function for checking for a properly formatted email address
function isFieldEmail(field){
	if(isFieldEmpty(field)){
		var value = document.getElementById(field).value;			
		var emailPattern = /\w+@\w+\.\w{1,3}/;
		if(!emailPattern.test(value)){
			return false;
		}else{
			return true;	
		}
	}else{
		return false;
	}	
}
//function for checking the state dropdown menu
function isItemSelected(field){
	if(document.getElementById(field)){
		var value_index = document.getElementById(field).selectedIndex;
		var value = document.getElementById(field).options[value_index].value;
		if(field != 'ShippingType'){
			if(value == '0' || value == ''){
				return false;
			}else{
				return true;
			}
		}else{
			if(value == ''){
				return false;
			}else{
				return true;
			}
		}
	}else{
		return false;
	}
}
//function for checking the city field
function isFieldCity(field){
	if(document.getElementById(field)){
		if(!isFieldEmpty(field)){
			return false;
		}else{
			var chars = /[\d]/;
			var value = document.getElementById(field).value;
			if(chars.test(value)){
				return false;
			}else{
				return true;
			}
		}
	}else{
		return false;
	}
}
//function for checking a zip code
function isFieldZip(field){
	if(document.getElementById(field)){
		var value = document.getElementById(field).value;
		var chars = /(^\d{5}-\d{4}$)|(^\d{5}$)|(^\d{9}$)/;
		if(!chars.test(value)){
			return false;
		}else{
			return true;
		}
	}else{
		return false;
	}
}
//function for checking a dollar amount
function isFieldAmt(field){
	if(document.getElementById(field)){
		if(!isFieldEmpty(field)){
			return false;
		}else{
			value = document.getElementById(field).value;
			var chars = /(^\d{1,}\.\d{2}$)|(^\.\d{2}$)|(^\d{1,}$)/;
			if(!chars.test(value)){
				return false;
			}else{
				return true;
			}
		}
	}else{
		return false;
	}
}
//function for checking a credit card month
function isFieldMonth(field){
	if(document.getElementById(field)){
		if(!isFieldEmpty(field)){
			return false;
		}else{
			var value = document.getElementById(field).value;
			var months = new Array('01','02','03','04','05','06','07','08','09','10','11','12');
			for(k=0; k<months.length; k++){
				if(value == months[k]){
					return true;
				}
			}
			return false;
		}
	}else{
		return false;
	}
}
//function for checking a number
function isFieldNbr(field){
	if(document.getElementById(field)){
		if(!isFieldEmpty(field)){
			return false;
		}else{
			value = document.getElementById(field).value;
			var chars = /\D/g;
			if(chars.test(value)){
				return false;
			}else{
				return true;
			}
		}
	}else{
		return false;
	}
}
//function for checking a credit card number
function isCreditCardNbr(field){
	if(document.getElementById(field)){
		if(!isFieldEmpty(field)){
			return false;
		}else{
			var value = document.getElementById(field).value;
			var chars = /\D/;
			if(chars.test(value)){
				return false;
			}else{
				var slength = value.length;
				if(slength > 12 && slength < 20){
					return true;
				}else{
					return false;
				}
			}
		}
	}else{
		return false;
	}
}
//function for checking a credit card cvc number
function isFieldCVC(field){
	if(document.getElementById(field)){
		if(!isFieldEmpty(field)){
			return false;
		}else{
			var value = document.getElementById(field).value;
			var chars = /^\d{3,4}$/;
			if(!chars.test(value)){
				return false;
			}else{
				return true;
			}
		}
	}else{
		return false;
	}
}
//function for checking first name, last name, street address fields
function isFieldValid(field){
	if(document.getElementById(field)){
		if(!isFieldEmpty(field)){
			return false;
		}else{
			/*
			var value = document.getElementById(field).value;
			var chars = /[^\w' #-]/;
			if(chars.test(value)){
				return false;
			}else{
				return true;
			}
			*/
			return true;
		}			
	}else{
		return false;
	}
}
