var rules = {
	"form.validate" : function( el ) {
		// handle form validation
		el.onsubmit = function() {
			var inputs = el.getElementsByTagName( "input" );
			var textareas = el.getElementsByTagName( "textarea" );
			var selects = el.getElementsByTagName( "select" );
			var form_elements = new Array( inputs, textareas, selects );
			var counter = 0;
			
			for ( var h = 0; h < form_elements.length; h++ ) {
				for ( var i = 0; i < form_elements[h].length; i++ ) {
					if ( !form_elements[h][i].className ) continue;
					var valid = true;
					if ( form_elements[h][i].className.indexOf( "required" ) != -1 ) {
						if ( form_elements[h][i].parentNode.lastChild.nodeName == "IMG" ) {
							form_elements[h][i].parentNode.removeChild( form_elements[h][i].parentNode.lastChild );
						}
						
						if ( form_elements[h][i].getAttribute( "name" ) == "email_address" ) {
							var regExp = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;
							var regExp2 = /(\s+)|(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/;
							if ( ( form_elements[h][i].value.search( regExp ) ) == -1 || form_elements[h][i].value.search( regExp2 ) != -1 )
								valid = false;
						} else if ( form_elements[h][i].getAttribute( "type" ) == "checkbox" ) {
							if ( !form_elements[h][i].checked )
								valid = false;
						} else {
							if ( form_elements[h][i].value.replace( /(^\s+)|(\s+$)/g, '' ).length < 1 )
								valid = false;
						}
						
						if ( !valid ) {
							var img = document.createElement( "img" );
							img.setAttribute( "src", "images/icon-warning.gif" );
							img.className = "validation-error";
							form_elements[h][i].parentNode.appendChild( img );
							counter++;
						}
					}
				}
			}
			
			if ( counter > 0 ) {
				alert( "One or more required fields were not correctly supplied. Please double-check the noted fields." );
				return false;
			}
		}
	},
	
	"span.form-cal" : function( el ) {
		// replace <noscript> tags with calendar image
		var calLink = document.createElement( "a" );
		calLink.setAttribute( "href", "#" );
		calLink.setAttribute( "id", "form-cal-" + i );
		calLink.setAttribute( "name", "form-cal-" + i );
		calLink.setAttribute( "title", "Click to select a date" );
		calLink.onclick = function() {
			var o = this.previousSibling;
			while ( o.nodeType != 1 ) {
				o = o.previousSibling;
			}
			cal.select( o, calLink.id, "MM/dd/yyyy" );
			return false;
		}
		
		var calImg = document.createElement( "img" );
		calImg.setAttribute( "src", "images/icon-cal.gif" );
		calLink.appendChild( calImg );
		
		el.parentNode.appendChild( calLink );
		el.parentNode.removeChild( el );
	}
	
	/*,
	
	"form#booking-form input#arrive" : function( el ) {
		el.onblur = function() {
			var tomorrow = parseDate( el.value );
			tomorrow.setDate( tomorrow.getDate() + 1 );
			document.getElementById( "depart" ).value = formatDate( tomorrow, "MM/dd/yyyy" );
		}
	}*/
};
Behaviour.register( rules );