/**
 * contact page javascript functions
 *
 * Copyright (c) 2008 John Girvin
 * except where indicated otherwise.
 * 
 * Unauthorised duplication, distribution
 * or alteration strictly prohibited.
 *
 */

$(document).ready(function(){
	// hide the help texts
	$('span.help').hide();

	// set up the help texts
	$('#name_help').text('Enter your name (required)');
	$('#email_help').text('Enter a valid contact email address (required)');
	$('#message_help').text('Enter your message (required)');
	$('#submit_help').text('Click to send your message');
	
	// custom validator method: check name for illegal chars
	$.validator.addMethod(
		"namechars",
		function(value) { 
			return !(/[^\w \.\-\']/.test(value));
		},
		'Value entered contains invalid characters!');

	// custom validator method: check message for illegal chars
	$.validator.addMethod(
		"messagechars",
		function(value) { 
			return !(/[^\w\d\n\f\r \.\,\_\*\/\#\+\=\-\!\?\$\&\(\)\@\:\;\"\']/.test(value));
		},
		'Value entered contains invalid characters!');

	// validate the form
	var validator = $('#contact-form').validate({
		// validation rules
		rules: {
			name: {
				required: true,
				namechars: true
			},
			email: {
				required: true,
				email: true
			},
			message: {
				required: true,
				maxlength: 1024,
				messagechars: true
			}
		},

		// validation message overrides	
		messages: {
			name: {
				required: 'A name is required'
			},
			email: {
				email: 'Enter a valid address'
			},
			message: {
				required: 'A message is required'
			}
		},
		
		event: 'keyup',

		// append <br> then error label to field
        errorPlacement: function(error, element) {
			element.after(error).after('<br>');
        },
		
		// unfocus all fields before displaying errors
		showErrors: function(errormap, errorlist) {
			$('#contact-form :input').removeClass('focussed');
			validator.defaultShowErrors();
		},
		
		// remove error class from fields when valid
		success: function(label) {
			label.siblings(':input').removeClass('error');
		}
	});

	// add focus style to fields and display help text
    $('#contact-form :input').focus(function(){
		$(this).addClass('focussed');
		$('span.help').hide();
		$('#' + this.name + '_help').fadeIn('fast');
    });
	
    $('#contact-form :input').blur(function(){
		$(this).removeClass('focussed');
        $('#'+this.name+'_help').hide();
    });

});
