var okColor    = '#000';
var erColor    = '#f00';

function validate_field( field_type, field_id, error_msg, label_id ){
	var field_valid = false;
	// set label_id = lbl_field_id unless specified otherwise.
	if( label_id == null ) label_id = 'lbl_'+field_id;

	// switch on field type & call appropriate validation functions...
	switch( field_type ){
		case 'text':
  		field_valid = validate_text_field( field_id );
			break;
		case 'mobile_phone':
	  	field_valid = validate_mobile_phone( field_id );
			break;
		case 'email':
	  	field_valid = validate_email( field_id );
			break;
		case 'checkbox':
	  	field_valid = validate_checkbox( field_id );
			break;
    case 'num_only':
  		field_valid = validate_text_field( field_id );
			if( field_valid ) field_valid = validate_digits( field_id );
			break;
		case 'cc_exp_set':
			field_valid = validate_cc_exp_set( field_id );
			break;
		case 'select':
  		field_valid = validate_select_field( field_id );
			break;
		case 'radio_group':
			field_valid = validate_radio_group( field_id );
			break;
		case 'radio':
  		field_valid = validate_radio( field_id );
			break;
		case 'verified':
			field_valid = validate_verified( field_id );
			if( field_valid ){
				if( !document.getElementById('verify_'+label_id) ){
					alert('Could not find label id: verify_'+label_id);
				}else{
					document.getElementById('verify_'+label_id).style.color = okColor;
				}
			}else{
				if( !document.getElementById('verify_'+label_id) ){
					alert('Could not find label id: verify_'+label_id);
				}else{
					document.getElementById('verify_'+label_id).style.color = erColor;
				}
			}
			break;
	}
	
	if( field_valid ){
		if( !document.getElementById(label_id) ){
			alert('Could not find label id: '+label_id);
		}else{
			document.getElementById(label_id).style.color = okColor;
		}
		return "";
	}else{
		if( !document.getElementById(label_id) ){
			alert('Could not find label id: '+label_id);
		}else{
			document.getElementById(label_id).style.color = erColor;
		}
		return error_msg;
	}
}

function validate_text_field( field_id ){
	//alert('validate text field: '+field_id);
	if( !document.getElementById(field_id) ){	alert('Could not find field id: '+field_id); return false; }
	if(  document.getElementById(field_id).value == "") { return false; }else{ return true; }
}

function validate_basic_email( field_id ) {
	if( validate_text_field( field_id ) ){
		var str = document.getElementById(field_id).value;
		return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
	}else{
		return false;
	}
}

function validate_mobile_phone( field_id ){
	if( !document.getElementById(field_id) ){	alert('Could not find field id: '+field_id); return false; }
	if(  document.getElementById(field_id).value == "") { 
		return false; 
	}else{ 
		if( document.getElementById(field_id).value.length == 10 ){
			return true;
		}else{
			return false; 
		}
	}
}

function validate_basic_email( field_id ) {
	if( validate_text_field( field_id ) ){
		var str = document.getElementById(field_id).value;
		return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
	}else{
		return false;
	}
}

function validate_email ( field_id ) {
	var email = document.getElementById( field_id ).value;
	var filter = /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i;
	if( filter.test( email ) ) {
		return true;
	}else{
		return false;
	}
}

function validate_email_alt ( field_id ) {
	if( validate_text_field( field_id ) ){
		var str  = document.getElementById(field_id).value;
		var at   = "@";
		var dot  = ".";
		var lat  = str.indexOf(at);
		var lstr = str.length;
		var ldot = str.indexOf(dot);
		
		if (str.indexOf(at)==-1)
			return false;
		
		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr ) 
			return false;
		
		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr) 
			return false;
		
		if (str.indexOf(at,(lat+1))!=-1)
			return false;
		
		if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot)
			return false;
		
		if (str.indexOf(dot,(lat+2))==-1)
			return false;
		
		if (str.indexOf(" ")!=-1)
			return false;
				
		return true;
	}else{
		return false;
	}
}

function validate_verified( field_id ){
	//alert('validate verified field: '+field_id);
	if( !document.getElementById(field_id) ){	alert('Could not find field id: '+field_id); return false; }
	if(  document.getElementById(field_id).value == "") return false;
	
	if( !document.getElementById('verify_'+field_id) ){	alert('Could not find field id: verify_'+field_id); return false; }
	if(  document.getElementById('verify_'+field_id).value == "") return false;
	
	if(  document.getElementById(field_id).value != document.getElementById('verify_'+field_id).value ) return false;
	return true;
}

function validate_checkbox( field_id ){
	//alert('validate text field: '+field_id);
	if( !document.getElementById(field_id) ){	alert('Could not find field id: '+field_id); return false; }
	if(  document.getElementById(field_id).checked == false ) { return false; }else{ return true; }
}

function validate_select_field( field_id ){
	//alert('validate select field: '+field_id);
	if( !document.getElementById(field_id) ){	alert('Could not find field id: '+field_id); return false; }
	if(  document.getElementById(field_id).selectedIndex == 0) { return false; }else{ return true; }
}

function validate_digits( field_id ){
	//alert('validate select field: '+field_id);
	if( !document.getElementById(field_id) ){	alert('Could not find field id: '+field_id); return false; }
	if(  document.getElementById(field_id).value == "") { return false; }else{ return true; }
	return false;
}

function validate_radio_group ( group_name ) {
	//alert('validate radio group (by name)');
	if( !document.getElementsByName(group_name) ){	alert('Could not find field group: '+group_name); return false; }
	radios = document.getElementsByName(group_name);
	for (i = 0; i < radios.length; i++) {
		if (radios[i].checked) return true;
	}
  return false;
}

function validate_radio ( field_id ) {
	if( !document.getElementById(field_id) ){	alert('Could not find field id: '+field_id); return false; }
	if(  document.getElementById(field_id).checked ) { return true; }else{ return false; }
	return false;
}

function is_numeric(evt){
	var charCode = (evt.which) ? evt.which : event.keyCode;
	if(charCode > 31 && (charCode < 48 || charCode > 57)) return false;
	return true;
}

function is_phone_char(evt){
	var charCode = (evt.which) ? evt.which : event.keyCode;
	//alert(charCode);
	if( charCode == 32  ) { return true; } // space
	if( charCode == 43  ) { return true; } // plus
	if( charCode == 45  ) { return true; } //minus
	if( charCode == 120 ) { return true; } // lower x
	if( charCode == 88  ) { return true; } // upper x
	if(charCode > 31 && ( charCode < 48 || charCode > 57 )) { return false; } // invalid chars
	return true;
}

function alert_char_code(evt){
	var charCode = (evt.which) ? evt.which : event.keyCode;
	alert(charCode);
	return true;
}


function validate_donation_form(){
	var error_msg       = '';
	error_msg += validate_field('text',         'first_name',   'Please Enter Your First Name\n');
	error_msg += validate_field('text',         'last_name',    'Please Enter Your Last Name\n');
	error_msg += validate_field('email',        'email',        'Please Enter Your Email Address\n');
	error_msg += validate_field('mobile_phone', 'mobile_phone', 'Please Enter Your 10 digit Mobile Phone\n');
	
	if( error_msg == '' ){
		return true;
	}else{
		error_msg = 'There were problems with the information you submitted.\n\n' + error_msg;
		alert( error_msg );
		return false;
	}
}

function validate_t_and_c_form(){
	var error_msg       = '';
	error_msg += validate_field('checkbox', 'verify_t_and_c', 'You must agree to the terms and conditions to continue.\n');
	
	if( error_msg == '' ){
		return true;
	}else{
		alert( error_msg );
		return false;
	}
}
