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

 // form validation
 $(document).ready(function(){
	// custom validator method: check name for illegal chars
	$.validator.addMethod(
		"namechars",
		function(value) {
			return !(/[^\w \.\-\']/.test(value));
		},
		'Contains invalid characters');

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

	// validate the form, if it exists
	var form = $('#commentform');
	if (form != null && form.length > 0) {
		validator = form.validate({
			// validation rules
			rules: {
				author: {
					required: true,
					namechars: true
				},
				email: {
					email: true
				},
				url: {
					url: true
				},
				comment: {
					required: true,
					messagechars: true
				}
			},

			// validation message overrides
			messages: {
				author: {
					author: 'A name is required'
				},
                email: {
					email: 'Enter a valid address'
				},
				website: {
					url: '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){
				$('#commentform :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
    $('#commentform :input').focus(function(){
		$(this).addClass('focussed');
    });

    $('#commentform :input').blur(function(){
		$(this).removeClass('focussed');
    });

	// add focus style to widget fields
    $('#searchform :input').focus(function(){
		$(this).addClass('focussed');
    });

    $('#searchform :input').blur(function(){
		$(this).removeClass('focussed');
    });

	// add focus style to search widget fields
    $('#archives :input').focus(function(){
		$(this).addClass('focussed');
    });

    $('#archives :input').blur(function(){
		$(this).removeClass('focussed');
    });
});
