var rules = {
	"form.validate" : function( el ) {
		if ( window.CalendarPopup ) {
			// instantiate CalendarPopup and set some params
			var yesterday = new Date();
			yesterday.setDate( yesterday.getDate() - 1 );
			cal = new CalendarPopup( "cp" );
			cal.addDisabledDates( null, formatDate( yesterday, "yyyy-MM-dd" ) );
			
			// create the <div> for calendar popup
			var d = document.createElement( "div" );
			d.id = "cp";
			document.body.appendChild( d );
		}
		
		// handle form validation
		el.onsubmit = function() {
			
			//alert(document.getElementById('hotel_av_service_check').checked);
			//alert(document.getElementById('rfp_av_service_check').checked);
			
			if(document.getElementById('hotel_av_service_check').checked) {
				var form_fields = document.form['rfp-hotel-form'].getElementsByClassName( "field", "div" );
				alert(form_fields.length);
			} else if (document.getElementById('rfp_av_service_check').checked) {
				var form_fields = document.form['rfp-planner-form'].getElementsByClassName( "field", "div" );
				alert(form_fields.length);
			} else {
				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;
			}
		}
	},
	
	"span.form-cal" : function( el ) {
		// replace <span class="form-cal"> tags with calendar image
		var calLink = document.createElement( "a" );
		calLink.href = "#";
		calLink.id = "form-cal-" + i;
		calLink.name = "form-cal-" + i;
		calLink.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.src = "images/icon-cal.gif";
		calLink.appendChild( calImg );
		
		el.parentNode.appendChild( calLink );
		el.parentNode.removeChild( el );
	},
	
	"div.package-wrapper" : function( el ) {
		var toggle_wrapper = document.createElement( "div" );
		toggle_wrapper.className = "package-toggle";
		toggle_wrapper.style.clear = "both";
		
		var is_expandable = el.className.indexOf( "package-expandable" );
		if ( is_expandable != -1 ) {
			var toggle_link = document.createElement( "a" );
			toggle_link.setAttribute( "href", "#" + i );
			var toggle_text = document.createTextNode( "View details" );
			toggle_link.appendChild( toggle_text );
			toggle_wrapper.appendChild( toggle_link );
		}
		
		el.appendChild( toggle_wrapper );
	},
	
	"div.package-expandable div.package-long" : function( el ) {
		el.style.display = "none";
	},
	
	"div.package-toggle a" : function( el ) {
		el.onclick = function() {
			var longtext = getElementsByClassName( "package-long", "div", el.parentNode.parentNode );
			Effect.toggle( longtext[0], "blind", {duration: 0.5} );
			if ( this.lastChild.nodeValue == "View details" ) {
				this.lastChild.nodeValue = "Hide details";
			} else {
				this.lastChild.nodeValue = "View details";
			}
			return false;
		};
	}
};
Behaviour.register( rules );