var rules = {
	"form.validate" : function( el ) {
		// handle form validation
		el.onsubmit = function() {
			var form_fields = getElementsByClassName( "field", "div" );
			var counter = 0;
			var first_error = "";
			
			// loop through each div.field
			for ( var i = 0; i < form_fields.length; i++ ) {
				var elems = form_fields[i].getElementsByTagName( "*" );
				// loop through all elements in each div.field
				for ( var k = 0; k < elems.length; k++ ) {
					if ( !elems[k].className ) continue;
					if ( elems[k].className.indexOf( "required" ) < 0 ) continue;
					if ( elems[k].nodeName == "LABEL" ) continue;
					var valid = true;
					
					if ( elems[k].parentNode.lastChild.nodeName == "IMG" ) {
						elems[k].parentNode.removeChild( elems[k].parentNode.lastChild );
					}
					
					if ( elems[k].getAttribute( "name" ) == "email" ) {
						var regExp = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;
						var regExp2 = /(\s+)|(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/;
						if ( ( elems[k].value.search( regExp ) ) == -1 || elems[k].value.search( regExp2 ) != -1 )
							valid = false;
					} else {
						if ( elems[k].value.replace( /(^\s+)|(\s+$)/g, '' ).length < 1 )
							valid = false;
					}
					
					if ( !valid ) {
						var img = document.createElement( "img" );
						img.setAttribute( "src", "images/icon-warning.gif" );
						img.setAttribute( "class", "validation-error" );
						elems[k].parentNode.appendChild( img );
						if ( first_error == "" ) {
							first_error = elems[k].getAttribute( "id" );
						}
						counter++;
					}
				}
			}
			
			if ( counter > 0 ) {
				alert( "One or more required fields were not correctly supplied. Please double-check the noted fields." );
				document.getElementById( first_error ).focus();
				return false;
			}
		}
	}
};
Behaviour.register( rules );