/* --------------------------------------- /*
	checks all form elements passed in by
	required_fields. required_fields is an 
	array set on every form page that requires
	validation. This function checks for 
	blank values, and incorrect email formatting
	in email fields. an email field must be
	specified by having the word "email" in the
	field id. run on the onSubmit event.
/* --------------------------------------- */
function sf_validate(form)
{	
	var form 		= eval('window.document.'+form);
	var count 		= form.length;
	var errors		= 0;
	var err_txt 	= '';
	var blank_set 	= false;
	var email_set	= false;
	var date_set	= false;
	var default_bdr = 'solid 1px #AAAAAA';
	var error_bdr	= 'solid 1px #FF0000';
	
	for(i=0;i<count;i++)
	{
		var element			= form[i];
		var req				= required_fields.toString().indexOf(element.name);
		
		/* exclude any hidden, submit, or reset elements */
		if(req != -1 && element.type != 'hidden' && element.type != 'submit' && element.type != 'reset' && element.disabled == false)
		{
			var e_value 	= element.value;
			var e_name		= element.name;
			var e_atsym 	= e_value.indexOf('@');
			var e_lstat 	= e_value.lastIndexOf('@');
			var e_dot		= e_value.indexOf('.');
			var bad_chars 	= new Array(',',';',':','/','\\','&','#','!','$','%','*','<','>','?');
			
			/* check if empty or the address2 field */
			if(e_value == '')
			{
				// change border to red on error
				element.style.border = error_bdr;
				if(!blank_set)
				{
					errors++;
					err_txt += 'Please make sure all enabled fields are filled in correctly.\n';
					blank_set = true;
				}
				continue;
			}
			// reset border on error fix or no error
			else element.style.border = default_bdr;
			
			/* check email addresses */
			if(e_name.indexOf('email') != -1)
			{
				/* CHECK IF CORRECTLY FORMATTED ----------- */
				// if no @ symbol  -OR-  more than one @ symbol  -OR-  no dot 
				if(e_atsym == -1 || (e_atsym != e_lstat) || e_dot == -1)
				{
					element.style.border = error_bdr;
					if(!email_set)
					{
						errors++;
						err_txt += 'Please check email address\n';
						email_set = true;
					}
				}
				else element.style.border = default_bdr;
				/* --------------------------------------- */
				
				/* CHECK IF VALID STRING FOR EMAIL ADDRESS ---- */				
				if(!email_set) // if still no errors  AKA  email is formatted correctly  ... check for bad characters
				{
					for(c=0;c<=bad_chars.length;c++) 
					{
						// if bad character found
						if(e_value.indexOf(bad_chars[c]) != -1)
						{	
							// change border color to red		
							element.style.border = error_bdr;
							errors++;
							err_txt += 'You have entered an invalid email address format\n';
							email_set = true;
						}
						else element.style.border = default_bdr;
					}
				}
				/* --------------------------------------------- */
				continue;
			}
			
			/* CHECK DATES --------------- */
			if(e_name.indexOf('date') != -1)
			{
				// if date is not formatted correctly (mm/dd/yyyy or more than 10 chars)
				if(e_value.indexOf('/') != 2 || e_value.lastIndexOf('/') != 5 || e_value.length != 10)
				{
					// change border to red
					element.style.border = error_bdr;
					if(!date_set)
					{
						errors++;
						err_txt += 'Please format date: mm/dd/yyyy\n';
						date_set = true;
					}
				}
				
				// change border to default
				else element.style.border = default_bdr;
				continue;
			}
			/* --------------------------- */
		}
	}
	
	if(errors)
	{
		alert(err_txt);
		return false;
	}
	else return true;
}





/* --------------------------------------- /*
	checks to make sure that if an admin is
	going to reposition or remove entries, that
	a position was changed or a remove checkbox
	was selected before proceeding. Checked on
	the onSubmit event.	
/* --------------------------------------- */
function check_rem_count()
{
	db_action = document.getElementById('action').value;
	switch(db_action)
	{
		case 'rem_verify':
			check_count = document.getElementById('rem_id_list').value.length;
			count_alert = 'you must select at least one to remove';
			break;
		
		case 'db_repos':
			check_count = document.getElementById('upd_id_list').value.length;
			count_alert = 'You must change at least one value to reposition';
			break;
	}
	
	if(!check_count){ alert(count_alert); return false;	}
	else return true;
}




/* --------------------------------------- /*
	works in conjunction with a confirm text
	field. if the value in the confirm field
	is not the same as the value in the field
	with the id being passed, then an alert is
	displayed to the user. Works on the onChange
	event.	
/* --------------------------------------- */
function confirm_password(id)
{
	other_field 	= document.getElementById(id);
	conf_field 		= document.getElementById('confirm_'+id);
	if(other_field.value != conf_field.value) alert('Password Fields Do Not Match!');
}





/* --------------------------------------- /*
	checks to make sure that the value being
	entered is a valid number type. this also
	includes dashes, dots, parenthesis, and 
	the letters 'e','x', and 't' to allow
	the admin flexibility in how they layout
	the numbers.
	555-555-5555 vs. 555.555.5555 vs. (555) 555-5555
/* --------------------------------------- */
function check_number_only(field_id)
{
	element 		= document.getElementById(field_id);
	valid_chars		= '0123456789.,/-+';
	
	for(i=0;i<element.value.length;i++)
	{
		ex_char = element.value.substring(i,i+1);
		if(valid_chars.indexOf(ex_char) == -1)
		{
			alert('Only Numbers Here');		
			element.value = '';
			element.style.border = 'solid 1px #F0F';
		}
		else element.style.border = '';

	}
}
