window.addEvent('domready', function(){
	var error = [];
	
	Element.implement({  
		 //implement show  
		 show: function() { 
			 this.setStyle('display',''); 
			 this.fade('in');  
		 },  
		 
		 //implement hide  
		 hide: function() {
			this.fade('out');
			this.setStyle('display','none');
		 }  
	});

	var validate_form = function() {
		error.empty();	// clear previous errors
		// collect all fields			
		$$('.required').each(function(field){
			switch(field.name){
				case "firstname": case "lastname":
					if(field.value.length < 1){
						error.include("Your full name is required.");
						field.addClass("field_error");
					}
					else
						field.removeClass("field_error");
					break;
				case "emailaddress":
					var regex = new RegExp("^[0-9a-z\\._]+@[0-9a-z]+\\..+$","i");

					if (!regex.test(field.value)){
						error.include("A valid email address is required.");
						field.addClass("field_error");
					}
					else
						field.removeClass("field_error");						
					break;
				case "email_confirm":
					if(field.value.length < 1 || field.value != $('emailaddress').value){
						error.include("Confirm E-mail does not match E-mail.");
						field.addClass("field_error");
					}
					else
						field.removeClass("field_error");
					break;
				case "address_1":
					if(field.value.length < 1){
						error.include("Your mailing address is required.");
						field.addClass("field_error");
					}
					else
						field.removeClass("field_error");
					break;
				case "zip":
					if(isNaN(field.value) || field.value.length < 5){
						error.include("Please enter a valid zip code.");
						field.addClass("field_error");
					}
					else
						field.removeClass("field_error");
					break;
				case "income":
					if(!field.value){
						error.include("Please select your income range.");
						field.addClass("field_error");
					}
					else
						field.removeClass("field_error");
					break;
				case "birth_year":
					if(!field.value){
						error.include("Please select your year of birth.");
						field.addClass("field_error");
					}
					else
						field.removeClass("field_error");
					break;
				case "gender":
					if(!field.value){
						error.include("Please select your gender.");
						field.addClass("field_error");
					}
					else
						field.removeClass("field_error");
					break;
				case "subject":
					if(field.value.length < 1){
						error.include("A subject is required.");
						field.addClass("field_error");
					}
					else
						field.removeClass("field_error");
					break;
				case "comments":
					if(field.value.length < 10){
						error.include("You must write a message.");
						field.addClass("field_error");
					}
					else
						field.removeClass("field_error");
					break;
			}
		});
	}
	
	var find_location = function(zip){
		var options = {}
		
		options['location_lookup'] = 1;
		options['zip'] = zip;
		
		var req = new Request.JSON({
			method: 'get',
			url: "/process/subscriptions/get_loc",
			data: options,
			onComplete: function(jsonObj) { $('state').value = jsonObj.location[0].state; $('city').value = jsonObj.location[0].city; }
		}).send();
	}
	
	var submit_form = function(form) {
		if(error.length == 0)
			$(form).submit();
		else{
			$('error_messages').empty().show();
			error.each(function(msg){
				var error_msg = new Element('p', {'html': msg}).inject($('error_messages'));
			});
		}				
	}

	// set up triggers		
	$$('.required').each(function(field){
		if(field.type == "text" || field.type == "textarea")
			field.addEvent("keyup", function(){ validate_form.run(); } );
		else if(field.type == "select-one")
			field.addEvent("change", function(){ validate_form.run(); } );
	});
	
		
	$('submit_form').addEvent('click', function(e){ e.stop(); validate_form.run(); submit_form.run(this.name); } );

	// no zip field on contact form
	if(document.bridessubscribe){
		$('zip').addEvent('keyup', function(){ find_location.run(this.value); } );	
	}
	
	// post submission message?
	if(typeof(thankyou) != 'undefined'){
		$('error_messages').empty().show();
		var error_msg = new Element('p', {'html': thankyou}).inject($('error_messages'));
	}
		
});
