
$(document).ready(function() {
		
	$.validator.addMethod("alphanumericNyc", function(value, element) {
		return this.optional(element) || /^[a-zA-Z0-9-._@\s]+$/i.test(value);						
	}, "Please allow alphanumeric AND the following characters:");  
	
	$.validator.addMethod("phone", function(phone_number, element) {
		var digits = "0123456789";
		var phoneNumberDelimiters = "()- ext.";
		var validWorldPhoneChars = phoneNumberDelimiters + "+";
		var minDigitsInIPhoneNumber = 10;
		var maxDigitsInIPhoneNumber = 12;		
		s=stripCharsInBag(phone_number,validWorldPhoneChars);
		return this.optional(element) || isInteger(s) && s.length >= minDigitsInIPhoneNumber && s.length <= maxDigitsInIPhoneNumber;
	}, "Please enter a valid numeric phone number");	
	
	$.validator.addMethod("n_user_pick", function(value, element) {
		var bStat = true;		
		$('select[id=n_user_pick]').each(function(i){			
			if ($(this).next().val().length && $(this).val() == 'null'){
				bStat = false;						
			}						
		});		 		
		return this.optional(element) || bStat;		
	}, "Please choose from the Bests list");	

	var validator = $('#accountInfo').validate({
		// rules
		rules: {
			prof_screenname: 'required',
		
			emailaddress: {
				required: true,
				email: true
			},
		
			password: {
				required: false,
				minlength: 6
			},
		
			passconfirm: {
				required: false,
				minlength: 6,
				equalTo: '#prof_password'
			},
			
			prof_countrycode: {
				required: true,
				digits: true
			},
			
			prof_gender: 'required',
			
			website: {	
				url:true
			},
			
			phone: {
				phone: true				
			},
			
			n_user_pick: {				
				n_user_pick: true
			}			
		},
	
		// messages
		messages: {
			prof_screenname: 'screenname field cannot be left blank',
		
			emailaddress: {
				required: 'email field cannot be left blank',
				email: 'please enter a valid email address'
			},
		
			password: {
				required: 'password field cannot be left blank',
				rangelength: jQuery.format('please enter at least {0} characters')
			},
			
			passconfirm: {
				required: 'confirm password field cannot be left blank',
				minlength: jQuery.format('please enter at least {0} characters'),
				equalTo: "Passwords don't match"
			},			
			
			prof_countrycode: {
				required: 'country code field cannot be left blank',
				digits: 'please use digits (0-9) only'
			},
			
			prof_agree: 'You must agree to the terms &amp; conditions',
			
			prof_gender: 'Gender field cannot be left blank',
			
			website: 'Please enter a valid url',
			
			phone: 'Please enter a valid numeric phone number',
			
			n_user_pick: 'Please select from the Bests list'			
			
		},
		
		event: 'submit',
		
		// error
		errorClass: 'formErrorClass',
		errorElement: 'span',
		errorLabelContainer: $('.formErrorDisplay'),
		highlight: function(element, errorClass) {
			$(element).addClass(errorClass);
			$(element.form).find('label[for=' + element.id + ']').addClass(errorClass);
		},
		unhighlight: function(element, errorClass) {
			$(element).removeClass(errorClass);
			$(element.form).find('label[for=' + element.id + ']').removeClass(errorClass);
		}
	});
});

function isInteger(s){ 
	var i;
	for (i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);	// Check that current character is number.
		if (((c < "0") || (c > "9"))) return false;
	}

	return true; 	// All characters are numbers.
}

function stripCharsInBag(s, bag){ 
	var i;
	var returnString = "";
	// Search through string's characters one by one.
	// If character is not in bag, append to returnString.
	for (i = 0; i < s.length; i++)
	{
		// Check that current character isn't whitespace.
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1) returnString += c;
	}
	
	return returnString;
}