MSG_MAX_ITEMS = "You cannot select more than LIMIT items.";
MIN_CONTACT_MESSAGE_LENGTH = 10;
MIN_CONTACT_NAME_LENGTH = 2;
MSG_MISSING_CONTACT_NAME = "Please enter your name.";
MSG_MISSING_CONTACT_MESSAGE  = "Please enter your message.";
MSG_BAD_EMAIL = "Please enter a valid email address.";

function check_checkboxes(name) {
	
	/**
	 *		determine if checkbox option is checked
	 *		
	 *		@author	Alec Permison <alecp@webdevgroup.com>
	 *		@param	string $name 		name of html checkbox control
	 *		@return	boolean				true if checkbox is checked
	 */	

	var el = document.getElementsByName(name);
	for(i=0;i<el.length;i++){
		if(el[i].checked){
 				return true;
		}
	}
	return false;
}

function check_contact_form(obj) {
	
	/**
	 *		validate contact form
	 *		
	 *		@author	Alec Permison <alecp@webdevgroup.com>
	 *		@param	object $obj 		form object
	 */	
	 
	if(obj.contact_name.value.length < MIN_CONTACT_NAME_LENGTH) {
		alert(MSG_MISSING_CONTACT_NAME);
		obj.contact_name.focus();
		return false;
	}
	if (!checkEmail(obj.contact_email.value)) {
		alert(MSG_BAD_EMAIL);
		obj.contact_email.focus();
		return false;
	}
	if(obj.contact_message.value.length < MIN_CONTACT_MESSAGE_LENGTH) {
		alert(MSG_MISSING_CONTACT_MESSAGE);
		obj.contact_message.focus();
		return false;
	}
	return true;
}

function check_max_items( name, limit ) {
	
	/**
	 *		limits the number of checked checkboxes
	 *		
	 *		@author	Alec Permison <alecp@webdevgroup.com>
	 *		@param	string $name 	name of checkbox element
	 *		@param 	int $limit			max number of checkboxes
	 *		@return 	boolean			true if limit exceeded
	 */	
	 
	var return_val = false;
	var checked_items = 0;
	var msg = MSG_MAX_ITEMS;
	limit = limit + ""; // convert to string
	rExp = /LIMIT/gi; // search for LIMIT
	var msg = MSG_MAX_ITEMS.replace( rExp, limit ); // replace LIMIT with actual limit
	var element = eval("document.forms[\'search_form\'].elements[\'" + name + "\']");
	for (i=0; i<element.length; i++) { // loop through all checkboxes
		if ( element[i].checked) { // count checked checkboxes
			checked_items++; 
			if ( checked_items > limit ) { return_val = true; } // return true if more than max limit were checked
		}
	}
	if ( checked_items > limit ) { alert( msg ) }; // alert msg
	return return_val;
}

function check_login_form (form, message){
	
	/**
	 *		check if login form is empty
	 *		
	 *		@author	Alec Permison <alecp@webdevgroup.com>
	 *		@param	object $form 			html form object	 
	 *		@param	string $message		error message if form is empty
	 *		@return	boolean					true if form has at least one value set
	 */		
	
	if (strip(form.username.value) == "") { 
		form.username.focus();
		alert(message);
		return false;
	}
	if (strip(form.password.value) == "") { 
		form.password.focus();
		alert(message);
		return false;
	}	
	return true;
}

function check_search_form (form, message) {

	/**
	 *		check if search form is empty
	 *		
	 *		@author	Alec Permison <alecp@webdevgroup.com>
	 *		@param	object $form 			html form object	 
	 *		@param	string $message		error message if search form is empty
	 *		@return	boolean					true if search form has at least one search value set
	 */		

	if (	
		(strip(form.search_fname.value) != "") ||
		(strip(form.search_mname.value) != "") ||
		(strip(form.search_lname.value) != "") ||
		(strip(form.search_city.value) != "") ||
		(form.search_state.selectedIndex > 0) ||
		(strip(form.search_zip.value) != "") ||
		(strip(form.search_county.value) != "") ||
		(check_checkboxes('search_area_exp[]')) ||
		(check_checkboxes('search_theor_orient[]')) ||
		(check_checkboxes('search_spec_board[]')) ||
		(check_checkboxes('search_grp_targ[]')) ||
		(form.search_language.selectedIndex > 0) ||
		(form.search_hsm.selectedIndex > 0)
	) {
		return true;
	} else {
		alert(message);
		return false;		
	}
}

function check_search_form_textonly (form, message) {

	/**
	 *		check if textonly search form is empty
	 *		
	 *		@author	Alec Permison <alecp@webdevgroup.com>
	 *		@param	object $form 			html form object	 
	 *		@param	string $message		error message if search form is empty
	 *		@return	boolean					true if search form has at least one search value set
	 */		
	
	if (	
		(strip(form.search_fname.value) != "") ||
		(strip(form.search_mname.value) != "") ||
		(strip(form.search_lname.value) != "") ||
		(strip(form.search_city.value) != "") ||
		(form.search_state.selectedIndex > 0) ||
		(strip(form.search_zip.value) != "") ||
		(strip(form.search_county.value) != "") ||
		(form.search_area_exp.selectedIndex > 0) ||
		(form.search_theor_orient.selectedIndex > 0) ||
		(form.search_spec_board.selectedIndex > 0) ||
		(form.search_grp_targ.selectedIndex > 0) ||
		(form.search_language.selectedIndex > 0) ||
		(form.search_hsm.selectedIndex > 0)
	) {
		return true;
	} else {
		alert(message);
		return false;		
	}
}

function checkEmail(email) {

	/**
	 *		validate email via reg expression
	 *
	 *		@param	string $email		email to validate
	 */	
	
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email)){
		return true;
	}
		return false;
}

function clear_checkboxes(name) {

	/**
	 *		unchecks all checkboxes in control
	 *		
	 *		@author	Alec Permison <alecp@webdevgroup.com>
	 *		@param	string $name 	name of checkbox element
	 *		@todo		move css classname into html template
	 */	

	var el = document.getElementsByName(name+'[]');
	for(i=0;i<el.length;i++){
			if(el[i].checked){
	   			el[i].checked = false;
	   			var span = 'span'+name+el[i].value;
	   			document.getElementById(span).className = "searchfieldtext_off";
			}
	}
}

function clear_search_form( form ) {

	/**
	 *		reset all values on search form
	 *		
	 *		@author	Alec Permison <alecp@webdevgroup.com>
	 *		@param	object $form 		html form object
	 */	
	
	form.search_fname.value = "";
	form.search_mname.value = "";
	form.search_lname.value = "";
	form.search_city.value = "";
	form.search_state.selectedIndex = 0;
	form.search_zip.value = "";
	clear_checkboxes('search_area_exp');
	document.getElementById('searchfield_control_area_expertise').className='searchfieldcheckbox_control_on';
	document.getElementById('searchfield_area_expertise').className='searchfieldcheckbox_area_off';
	clear_checkboxes('search_theor_orient');
	document.getElementById('searchfield_control_theoretical_orientation').className='searchfieldcheckbox_control_on';
	document.getElementById('searchfield_theoretical_orientation').className='searchfieldcheckbox_area_off';
	clear_checkboxes('search_grp_targ');
	document.getElementById('searchfield_control_grp_targ').className='searchfieldcheckbox_control_on';
	document.getElementById('searchfield_grp_targ').className='searchfieldcheckbox_area_off';
	clear_checkboxes('search_spec_board');
	document.getElementById('searchfield_control_spec_board').className='searchfieldcheckbox_control_on';
	document.getElementById('searchfield_spec_board').className='searchfieldcheckbox_area_off';
	form.search_language.selectedIndex = 0;
	form.search_hsm.selectedIndex = 0;
}

function clear_search_form_textonly ( form ) {
	
	/**
	 *		reset all values on text-only search form
	 *		
	 *		@author	Alec Permison <alecp@webdevgroup.com>
	 *		@param	object $form 		html form object
	 */	
	
	form.search_fname.value = "";
	form.search_mname.value = "";
	form.search_lname.value = "";
	form.search_city.value = "";
	form.search_state.selectedIndex = 0;
	form.search_zip.value = "";
	form.search_area_exp.selectedIndex = 0;
	form.search_theor_orient.selectedIndex = 0;
	form.search_grp_targ.selectedIndex = 0;
	form.search_spec_board.selectedIndex = 0;
	form.search_language.selectedIndex = 0;
	form.search_hsm.selectedIndex = 0;
}

function set_screen_size_vars() {

	/**
	 *		sets the screen size variables to store in the login history
	 *		
	 *		@author	Alec Permison <alecp@webdevgroup.com>
	 *		@todo		take variable names as params
	 */	

	if (document.all||document.getElementById||document.layers) {
		document.login.screen_width.value=screen.width;
		document.login.screen_height.value=screen.height;
	}
}

function strip(str) {
	
	/**
	 *		remove spaces and wildcards from string
	 *		
	 *		@author	Alec Permison <alecp@webdevgroup.com>
	 *		@param	string $str		string
	 *		@return	string 			modified string
	 */	

	str = str.replace(/_+/,"");	// remove sybase wildcard
	str = str.replace(/%+/,"");	// remove sybase wildcard
	str = str.replace(/\s+/,""); // remove spaces
   
   return str;
}
