/* VALIDATE FORM (ONSUBMIT)
------------------------------------------------------------------- *
	checks all form elements passed in by required_fields.
	
	required_fields is an array set on every form page. It contains
	all the fields that need to be validated (does not use get element by id)
	
	First part makes sure the field isn't blank.
	Second, the 2 email fields are checked, field_1@field_2, no wierd characters
	Third, 
/* ------------------------------------------------------------------- */ 
function sf_validate(form)
{	
		
	var form 		= document.forms[form];
	var count 		= form.length;
	var errors		= 0;
	var err_txt 	= '';
	var blank_set 	= false;
	var email_set	= false;
	var date_set	= false;
	
	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_type		= element.type;
			var e_atsym 	= e_value.indexOf('@');
			var e_lstat 	= e_value.lastIndexOf('@');
			var e_dot		= e_value.indexOf('.');
			var bad_chars 	= new Array(',',';',':','/','\\','&','#','!','$','%','*','<','>','?');
			
			
			
			/* EMPTY FIELDS
			--------------------------------------------- */
			if(e_value == '')
			{
				// change border to red on error
				element.style.border = error_bdr;
				element.style.background = error_bg;
				
				if(!blank_set)
				{
					errors++;
					err_txt += 'Please make sure all enabled fields are filled in correctly.\n';
					blank_set = true;
				}
				
				continue;
			}
			else
			{
				element.style.border 		= default_bdr;
				element.style.background 	= default_bg;
			}
			/* --------------------------------------------- */
			
			
			
			/* EMAIL ADDRESS VERIFICATION
				checks email address in either a single field
				or an array field
			--------------------------------------------- */
			if(e_name.indexOf('email') != -1)
			{
				
				/* CHECKING EMAIL ARRAY FIELD
				--------------------------------------------- *
				if(isArray(element))
				{
				*/
					
					/* EMAIL FORMATTING
						if no @ symbol, because we are already supplying it for them.
					--------------------------------------------- */
					if(e_atsym == -1)
					{
						element.style.border 		= default_bdr;
						element.style.background 	= default_bg;
					}
					else
					{
						element.style.border 		= error_bdr;
						element.style.background 	= error_bg;
						if(!email_set)
						{
							errors++;
							err_txt += 'Please check email address\n';
							email_set = true;
						}	
					}
				//}
				
				
				/* CHECKING SINGLE EMAIL FIELD
				--------------------------------------------- *
				else
				{	
					/* EMAIL FORMATTING
						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;
						element.style.background 	= default_bg;
					}
				}
				
				/* BAD CHARACTERS
				--------------------------------------------- */
				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;
							element.style.background 	= default_bg;
						}
					}
				}
				
				continue;
			}
			/* --------------------------------------------- */
			
			
			
			/** DEPRECATED **\
			The use of javascript calendars and readonly fields
			eliminate the user entering invalid info
			/* 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 dates: MM / DD / YYYY\n';
						date_set = true;
					}
				}
				else
				{
					element.style.border 		= default_bdr;
					element.style.background 	= default_bg;
				}
				
				continue;
			}
			/* --------------------------------------------- */
			
			
			
			/** DEPRECATED **\
			This function is done on the fields onchange event
			not on submission.
			/* PASSWORD CONFIRMATION
			--------------------------------------------- *
			if(e_type == 'password' && e_name.indexOf('confirm_') == -1)
			{
				$pass_conf = confirm_password(e_name,'val');
				if(!$pass_conf)
				{
					errors++;
					err_txt += 'Password fields do not match';	
				}
			}
			/* --------------------------------------------- */
			
		}
	}
	
	if(errors)
	{
		alert(err_txt);
		return false;
	}
	else return true;
}
/* ------------------------------------------------------------------- */






/* CHECK POSITIONING AND REMOVE COUNT
------------------------------------------------------------------- *
	checks whether any rows have been selected or if the positions have changed. if not, 
	it lets the user know that they must either change a position or select rows to remove 
	in order to use this button.
/* ------------------------------------------------------------------- */
function check_rem_count()
{
	/* get the quickedit forms action
	-------------------------------------- */
	db_action = document.getElementById('act').value;
	
	/* based on the action, send an output
	-------------------------------------- */
	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 no rows are being updated or selected, 
	then stop the form from posting
	-------------------------------------- */
	if(!check_count){ alert(count_alert); return false;	}
	else return true;
}
/* ------------------------------------------------------------------- */






/* CONFIRM TEXT FIELD
------------------------------------------------------------------- *
	uses the id of the original field, and then determies the name of
	the confirm field. The confirm field name should be the name of the 
	original field, with a "confirm_" in front. "original_field" becomes 
	"confirm_original_field"
	
	if the fields do not match, an alert is sent out
/* ------------------------------------------------------------------- */
function confirm_textfield(id,type)
{
	/* get the original, and confirm field
	-------------------------------------- */
	var original_field 	= document.getElementById(id);
	var confirm_field 	= document.getElementById('confirm_'+id);
	
	/* let the user know
	-------------------------------------- */
	if(original_field.value != confirm_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 Are Allowed Here!');		
			element.value = '';
			element.style.border = 'solid 1px #F0F';
		}
		else element.style.border = '';

	}
}