/*******************************************************************************
FILE NAME    :formvalidate.js
DEPENDENCIES :none
********************************************************************************
____________________________ API DOCUMENTATION BEGIN ___________________________
````````````````````````````````````````````````````````````````````````````````
Functions for client side form validation

````````````````````````````````````````````````````````````````````````````````
_____________________________ API DOCUMENTATION END ____________________________
*******************************************************************************/

//-- functions begin -----------------------------------------------------------

//FUNCTION-- trims all fields of type text, textarea and password in a form
function _trimTextFields(formObj) {
 for(var i=0;i<formObj.elements.length;i++)//if document has a form with elements
 {
  if(formObj.elements[i].type=="text" || formObj.elements[i].type=="textarea" || formObj.elements[i].type=="password") //only trim text, textarea or password form elements
  formObj.elements[i].value=trim_string(formObj.elements[i].value);
 }
}

//FUNCTION-- checks if text, textarea or password field contains data
function _hasData(formObj, message) {
 if(formObj.value.length==0) return validate_alert(formObj, message);
 return true;
}

//FUNCTION-- provides loose validation for email address
function validate_email_address(text_obj) {
 if(text_obj.value.length <= 5) 
 return validate_alert(text_obj, "This is not a valid length for an email address.");
 		
 if(text_obj.value.length > 0 && text_obj.value.indexOf("@") == 0)
 return validate_alert(text_obj, "An email address cannot start with \"@\".");
 
 if(text_obj.value.length > 0 && text_obj.value.indexOf(".") == 0)
 return validate_alert(text_obj, "An email address cannot start with a period.");
 
 if(text_obj.value.length > 0 && text_obj.value.indexOf("@.") > 0)
 return validate_alert(text_obj, "The \"second-level domain\" is missing from your email address.");
 
 if(text_obj.value.length > 0 && text_obj.value.indexOf(".") == text_obj.value.length-1)
 return validate_alert(text_obj, "The \"top-level domain\" is missing from you email address.");
 
 if(text_obj.value.length > 0 && text_obj.value.indexOf("@") < 0)
 return validate_alert(text_obj, "You are missing \"@\" in your email address.");
 
 if(text_obj.value.length > 0 && text_obj.value.indexOf(".") < 0)
 return validate_alert(text_obj, "You are missing a \".\" (period) in your email address.");
 
 if(_hasSpaces(text_obj))
 return validate_alert(text_obj, "Please remove any spaces within your email address.");
 
 return true; //return true is we make it this far
}

//FUNCTION-- checks if a checkbox was selected
function is_checked(checkbox_obj, message)
{
 if(checkbox_obj.checked) return true; 
 return validate_alert(checkbox_obj, message);
}

//FUNCTION-- checks if a radio button in a group was selected
function is_button_group(radio_obj, message)
{
 for(var i=0; i < radio_obj.length; i++)//loops through radio buttons array
 {
	if(radio_obj[i].checked) return true; 
 }
 return validate_alert(radio_obj[0], message);//targets the first button in the group
}

//FUNCTION-- displays alert message, focus then select form object and returns false
function validate_alert(form_obj, message) {
 alert(message);
 form_obj.focus( );
 if(form_obj.type=="text" || 
    form_obj.type=="textarea" || 
    form_obj.type=="password") form_obj.select( );
 return false;
}

//FUNCTION-- focuses on a form object
function object_focus(form_obj) {
 form_obj.focus( );
}

//FUNCTION-- selects a form object
function object_select(form_obj) {
 if(form_obj.type=="text" || form_obj.type=="textarea" || form_obj.type=="password") form_obj.select( );
}

//FUNCTION-- checks if text, contains any white space(s)
function _hasSpaces(formObj) {
 if(formObj.value.length > 0 && formObj.type=="text") {
  for(var i=0;i<formObj.value.length;i++) {
   if(formObj.value.charAt(i) == " ") return true;
  }
 }
 return false;
}

//FUNCTION-- checks if an item was selected in a pull down menu
function has_selected(menu_obj, message, index_offset)
{
 //checks against value of element not its indexed number
 if(menu_obj.options.selectedIndex > index_offset && menu_obj.options[menu_obj.options.selectedIndex].value != " ") return true;
 return validate_alert(menu_obj, message);
}

//FUNCTION-- trims white space from beginning and end of text if any
function trim_string(str) {
 while(str.length > 0 && str.charAt(0) == " ") //trim beginning of text
 {
	str1 = str.substring(1);
	str = str1;
 }

 while(str.length > 0 && str.charAt(str.length -1) == " ") //trim end of text
 {
  str1 = str.substring(0, str.length -1);
  str = str1;
 }
 return str;
}

//-- functions end -------------------------------------------------------------