/*
 * This pretty much brings the jQuery validator up to where our php
 * server side validation is, see form.classes.php
 *
 * All methods should check first to see if the item is required
 * then validate the statement on return (allows for formatting optional input)
 */
jQuery.validator.addMethod("letterswithbasicpunc", function(value, element) {
	return this.optional(element) || /^[a-z\-\.,\(\)\'\"\s]+$/i.test(value);
}, "Letters or punctuation only");  

jQuery.validator.addMethod("alphanumeric", function(value, element) {
	return this.optional(element) || /^\w+$/i.test(value);
}, "Letters, numbers, spaces or underscores only");  

jQuery.validator.addMethod("lettersonly", function(value, element) {
	return this.optional(element) || /^[a-z]+$/i.test(value);
}, "Letters only"); 

jQuery.validator.addMethod("nowhitespace", function(value, element) {
	return this.optional(element) || /^\S+$/i.test(value);
}, "No white space"); 

jQuery.validator.addMethod("anything", function(value, element) {
	return this.optional(element) || /^.+/i.test(value);
}, "Required"); 

jQuery.validator.addMethod("ignore", function(value, element) {
	return this.optional(element) || /^.+/i.test(value);
}, ""); 

jQuery.validator.addMethod("integer", function(value, element) {
	return this.optional(element) || /^\d+$/i.test(value);
}, "Numbers only");

jQuery.validator.addMethod("float", function(value, element) {
	return this.optional(element) || /^\d+\.*\d*$/i.test(value);
}, "Numbers only");

jQuery.validator.addMethod("phone", function(value, element) {
	return this.optional(element) || /^\d{3}-\d{3}-\d{4}$/.test(value);
}, "Must be XXX-XXX-XXXX");

jQuery.validator.addMethod("zip", function(value, element) {
	return this.optional(element) || /^\d{5}(-\d{4})*$/.test(value);
}, "Must be 99999 with optional: -9999");

jQuery.validator.addMethod("creditcard", function(value, element) {
	return this.optional(element) || /^\d{4}\d{4}\d{4}\d{4}$/.test(value);
}, "Must be XXXXXXXXXXXXXXXX");

jQuery.validator.addMethod("cvv", function(value, element) {
	return this.optional(element) || /^\d+$/i.test(value);
}, "Numbers only");

jQuery.validator.addMethod("social", function(value, element) {
	return this.optional(element) || /^\d{3}-\d{2}-\d{4}$/.test(value);
}, "Must be XXX-XX-XXXX");

jQuery.validator.addMethod("date", function(value, element) {
	return this.optional(element) || /^\d{2}\/\d{2}\/\d{4}$/.test(value);
}, "Must be MM/DD/YYYY");

jQuery.validator.addMethod("month_year", function(value, element) {
	return this.optional(element) || /^\d{2}\/\d{4}$/.test(value);
}, "Must be MM/YYYY");

jQuery.validator.addMethod("password", function(value, element) {
		return this.optional(element) || /^\w+$/i.test(value);
}, "Must be 6-12 characters, no spaces, and contain at least one number or symbol. Must not contain your username or any of the following symbols: ,&$.");

jQuery.validator.addMethod("marlboro_required", function(value, element) {
	return this.optional(element) || /^.+/i.test(value);
}, "Required"); 


/* Add masking in addition to validation */
$().ready(function() {
	if($('input.phone').length) {
		$('input.phone').setMask({mask:'999-999-9999'}); 
	}
	if($('input.creditcard').length) {
		$('input.creditcard').setMask({mask:'9999999999999999'}); 
	}
	if($('input.zip').length) {
		$('input.zip').setMask({mask:'99999-9999'}); 
	}
	if($('input.integer').length) {
		$('input.integer').setMask({mask:'9999999999999999'}); 
	}
	if($('input.month_year').length) {
		$('input.month_year').setMask({mask:'99/9999'}); 
	}
	if($('input.social').length) {
		$('input.social').setMask({mask:'999-99-9999'}); 
	}
});

function placeMarlboroErrors(error, element) {
	// check for custom placement
	if(typeof placeCustomMarlboroErrors == 'function') { 
		placeCustomMarlboroErrors(error, element);
		return;
	}
	var left = element.width();
	error.css("left", left + 20).css('position', 'absolute');
	if(element.is(":checkbox") || element.is(":radio")) {
		left = element.width() + element.next().width();
		error.css("left", left + 20);
	}
	if(element.is("select")) {
		left = element.width() + element.prev().width();
		error.css("left", left + 20);
	}
	if(element.is("textarea")) {
		error.insertAfter(element.prev());
	}
	else {
		error.appendTo(element.parent());		
	}
	var top = element.parent().height() / 2 - error.height() / 2;
	error.css('top', top);
	$('label.error').css('width', '18px');
	$('label.error>span').hide();
	element.bind('focus', function() {
		$('label.error>span').hide();
		$('label.error').css('width', '18px');
		$(this).siblings('label.error').children('span').show();
		$(this).siblings('label.error').css('width', '12em');
	});
	$('input').bind('blur', function() {
		$('label.error>span').hide();
		$('label.error').css('width', '18px');
	});
}

function showMarlboroErrors(errorMap, errorList) {

	//console.log(errorMap);
	//console.log(errorList);
	this.defaultShowErrors();
	//$('label.error').css('width', '20px').css('overflow', 'hidden');

}
