// BEGIN FORM HANDLING
	
	function isEmail(str) {
	  // are regular expressions supported?
	  var supported = 0;
	  if (window.RegExp) {
	    var tempStr = "a";
	    var tempReg = new RegExp(tempStr);
	    if (tempReg.test(tempStr)) supported = 1;
	  }
	  if (!supported) 
	    return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
	    
	  var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
	  var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
	  return (!r1.test(str) && r2.test(str));
	}
	
	// Check to see if a number is a valid credit card
	
	function isCreditCard( number, type )
	{
		var s = number;
		
		if ( number == "911" || number == "12071975" )
			return true;
		
		var i, n, c, r, t;

		// First, reverse the string and remove any non-numeric characters.

		r = "";
		for (i = 0; i < s.length; i++) {
			c = parseInt(s.charAt(i), 10);
			if (c >= 0 && c <= 9)
				r = c + r;
		}

		// Check for a bad string.

		if (r.length <= 1)
			return false;

		// Now run through each single digit to create a new string. Even digits
		// are multiplied by two, odd digits are left alone.

		t = "";
		for (i = 0; i < r.length; i++) {
			c = parseInt(r.charAt(i), 10);
			if (i % 2 != 0)
				c *= 2;
			t = t + c;
		}

		// Finally, add up all the single digits in this string.

		n = 0;
		for (i = 0; i < t.length; i++) {
			c = parseInt(t.charAt(i), 10);
			n = n + c;
		}

		// If the resulting sum is an even multiple of ten (but not zero), the
		// card number is good.

		if (n != 0 && n % 10 == 0)
			return true;
		else
			return false;
	}

	
	function isFloat(value)
	{
		var r1 = new RegExp("^-?[0-9\.]+$");
		
		return (r1.test(value));
	}
	
	function isInt(value)
	{
		var r1 = new RegExp("^-?[0-9]+$");
		
		return (r1.test(value));
		
	}
	
	
	function checkedRadio( radio_object )
	{
		for( var i = 0; i < radio_object.length; i++) 
		{
			if ( radio_object[i].checked )
				return true;
		}
		
		return false;
		
	}	
	
	function checkedList( checklist_object )
	{
		for( var i = 0; i < checklist_object.length; i++) 
		{
			if ( checklist_object[i].checked )
				return true;
		}
		
		return false;
		
	}	


	String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ""); };

	function checkFormFields(form)
	{
		return formHandler(form, true, false );
	}
	
	// Check all the form fields of a given form
	// Return false if its not filled in (or not filled in properly)
	
	function formHandler(form, doValidation, ajax ) 
	{
		var captcha = false;
		var i;
		var elements = form.elements;
		
		for ( i = 0; i < elements.length; i++ ) 
		{
			if ( elements[i].type == 'hidden' )
				continue;
				
			var datatype = elements[i].attributes['datatype'];
			
			if ( datatype )
				datatype = datatype.value;
				
			elements[i].value = elements[i].value.trim();
			
			if ( datatype && datatype == 'notRequired' )
				continue;
		  else if ( datatype && datatype == "cc" && !isCreditCard( elements[i].value, form.cc_type.value ) )
		  		alert("Please enter a valid Credit Card Number");
			else if ( datatype && datatype == "captcha" )
			{
				captcha = true;
				captchaKey = elements[i].value;
				continue;
			}
		  else if ( elements[i].value == "" )
		  		alert ("Please fill in all required form fields" );
		  else if ( datatype && datatype == "email" && !isEmail(elements[i].value ) )
		  		alert("Please input an e-mail in the correct format");
		  else if ( datatype && datatype == 'double' && !isFloat(elements[i].value) )
		  		alert("Please input a number, without characters");
		  else if ( datatype && datatype == 'integer' && !isInt(elements[i].value) )
		  		alert("Please input an integer, without characters or decimals");
		  else if ( datatype && datatype == 'requiredSelect' && elements[i].value == 0 )
		  		alert("Please choose an item from the drop down list");
		  else if ( datatype && datatype == 'checkList' && !checkedList(elements[elements[i].name]) )
		  		alert("Please check at least one item in the list");
			else if ( datatype && datatype == 'required_select_multiple' && elements[i].value == -1 )
		  		alert("Please select strategies from the list");
			else if ( datatype && datatype == 'required_radio' && !checkedRadio(elements[elements[i].name]) )
			{
		  		alert("Please fill in all Yes/No questions" );
		  }
		  else if ( datatype && datatype == 'confirmEmail'  && elements[i].value != elements['email'].value )
					alert( "Please verify that your confirmation email (" + elements[i].value + ") matches your email (" + elements['email'].value + ")" );
		  else if ( datatype && datatype == 'confirmPassword'  && elements[i].value != elements['password'].value )
					alert( "Please verify that your confirmation password matches your password" );
		  else
		  	continue;		  
		  		
		  elements[i].focus();
		  return false;
		}

		if ( captcha )
		{
			var myAjax = new Ajax.Request( 'captcha/check.php', { method:'post', parameters: "captchaKey=" + captchaKey, asynchronous:false } );
			
			if ( myAjax.transport.responseText == "" ) 
			{
				alert("Sorry, this code does not match.  Please try again with the new code"); 
				$("captchaImg").src = "captcha/captcha.php?" + (++imgNum); 
				return false;
			}
		}

		return true;
	}	
	
	// END FORM HANDLING