var errorContainer = 'div.errors';

$.validator.setDefaults({
	errorContainer: errorContainer,
	errorElement: 'span',
	errorLabelContainer: errorContainer + ' ul',
	errorPlacement: function(error, element) {
		return false;
	},
	highlight: highlightForm,
	showErrors: showFormErrors,
	unhighlight: unhighlightForm,
	wrapper: 'li'
});

function showFormErrors(errorMap, errorList) {
	var i = 0;
	var currElement;
	var labelText = new Array(this.numberOfInvalids());
	
	$.each(errorMap, function(key, value) {
		var currElement = $('[name^=' + key + ']');
		if (currElement.attr('type') == 'radio' || (currElement.attr('type') == 'checkbox' && !currElement.hasClass('single'))) {
			labelText[i] = currElement.parents('fieldset:first').find('legend').text();
		}
		else {
			labelText[i] = $('label[for=' + key.replace('field_', '') + ']').text();
		}
		i++;
	});
	
	i = 0;
	$.each(errorList, function(index, value) {
		value.message = '<strong>' + labelText[i] + ':</strong> <em>' + value.message + '</em>';
		i++;
	});
	
	this.defaultShowErrors();
}

function highlightForm(element, errorClass, validClass) {
	if (element.type == 'radio' || element.type == 'checkbox') {
		$(element).parents('fieldset:first').find('legend').removeClass(validClass).addClass(errorClass);
		
		$.each($('input[name^=' + element.name + ']'), function(i, j) {
			$(j.form).find('label[for=' + j.id + ']').removeClass(validClass).addClass(errorClass);			
		});
	}
	else {
		$(element).addClass(errorClass).removeClass(validClass);
		$(element.form).find('label[for=' + element.id + ']').addClass(errorClass);
	}
}
function unhighlightForm(element, errorClass, validClass) {
	if (element.type == 'radio' || element.type == 'checkbox') {
		$(element).parents('fieldset:first').find('legend').removeClass(errorClass).addClass(validClass);
		
		$.each($('input[name^=' + element.name + ']'), function(i, j) {
			$(j.form).find('label[for=' + j.id + ']').removeClass(errorClass).addClass(validClass);
		});
	}
	else {
		$(element).removeClass(errorClass).addClass(validClass);
		$(element.form).find('label[for=' + element.id + ']').removeClass(errorClass);
	}
}

$(function() {
	if (!$('ul', errorContainer).length) {
		$(errorContainer).append('<ul></ul>');
	}
	
	$('label.infield').inFieldLabels();
	$('input.date').datepicker();
	
	$('#reservation-request-form').validate();
	$('#owner-referral-form').validate();
	$('#general-contact-form').validate();
	$('#fractional-contact-form').validate();
	$('#management-contact-form').validate();
	$('#discovery-form').validate();
	$('#preauthorized-debit-form').validate();
});
