$(document).ready(function()
{
	// validate signup form on keyup and submit
	var validator = $("#register").validate({
		rules: {
			login: {
				required: true,
				minlength: 4
			},
			pswd_1: {
				pswd_1: "#login"
			},
			pswd_2: {
				required: true,
				equalTo: "#pswd_1"
			},
			email: {
			    required: true,
			    email: true
			},
			state: {
				required: function(element) {
				    return $("#country").val() == "ایران";
				}
			},
			City: {
				required: function(element) {
				    return $("#country").val() == "ایران";
				}
			}
		},
		messages: {
			login: {
				required: "لطفا یک نام‌کاربری انتخاب نمایید",
				minlength: jQuery.format("حداقل باید دارای {0} کاراکتر باشد")
			},
			pswd_2: {
				required: "رمزعبور خود را تکرار کنید",
				equalTo: "رمزعبور خود را عینا مانند بالا تکرار کنید"
			},
			email: {
				required: "وارد کردن یک آدرس ایمیل اجباری است",
				email: "لطفا یک آدرس ایمیل معتبر وارد نمایید"
			},
			state: {
				required: "استان محل اقامت خود را انتخاب نمایید"
			},
			City: {
				required: "شهر محل اقامت خود را انتخاب نمایید"
			}
		},
		// the errorPlacement has to take the table layout into account
		errorPlacement: function(error, element) {
			error.prependTo( element.parent().next() );
		},
		submitHandler: function(form) {
          // do other stuff for a valid form
          form.submit();
        },
		// set this class to error-labels to indicate valid fields
		success: function(label) {
			// set &nbsp; as text for IE
			label.html("&nbsp;").addClass("checked");
		}
	});

	$("#country").change(function()
	{
		$("#register").validate().element( "#state" );
		$("#register").validate().element( "#City" );
	});
	
	$("#login").focus(function()
	{
		$("#msgbox").removeClass().text('');
	});
	// ajax method for checkind username in database
	$("#login").blur(function()
	{
		var lstatus = false;
	    lstatus = $("#register").validate().element( "#login" );
	    
	    if (lstatus==true) {
		//remove all the class add the messagebox classes and start fading
		$("#msgbox").removeClass().addClass('messagebox').text('بررسی ...').fadeIn("slow");
		//check the username exists or not from ajax
		$.post("ajax.php?act=check_username",{ user_name:$(this).val() } ,function(data)
        {
		  if(data=='no') //if username not avaiable
		  {
		  	$("#msgbox").fadeTo(200,0.1,function() //start fading the messagebox
			{ 
			  //add message and change the class of the box and start fading
			  $(this).html('این نام‌کاربری قبلا ثبت شده است').addClass('messageboxerror').fadeTo(900,1);
			});		
          }
		  else
		  {
		  	$("#msgbox").fadeTo(200,0.1,function()  //start fading the messagebox
			{ 
			  //add message and change the class of the box and start fading
			  $(this).html('نام‌کاربری برای ثبت آزاد است').addClass('messageboxok').fadeTo(900,1);	
			});
		  }
				
        });
	    }
	    
	});
	
});

// password strength meter
(function($) {
	
	var LOWER = /[a-z]/,
		UPPER = /[A-Z]/,
		DIGIT = /[0-9]/,
		DIGITS = /[0-9].*[0-9]/,
		SPECIAL = /[^a-zA-Z0-9]/,
		SAME = /^(.)\1+$/;
		
	function rating(rate, message) {
		return {
			rate: rate,
			messageKey: message
		};
	}
	
	function uncapitalize(str) {
		return str.substring(0, 1).toLowerCase() + str.substring(1);
	}
	
	$.validator.passwordRating = function(pswd_1, login) {
		if (!pswd_1 || pswd_1.length < 6)
			return rating(0, "too-short");
		if (login && pswd_1.toLowerCase().match(login.toLowerCase()))
			return rating(0, "similar-to-username");
		if (SAME.test(pswd_1))
			return rating(1, "very-weak");
		
		var lower = LOWER.test(pswd_1),
			upper = UPPER.test(uncapitalize(pswd_1)),
			digit = DIGIT.test(pswd_1),
			digits = DIGITS.test(pswd_1),
			special = SPECIAL.test(pswd_1);
		
		if (lower && upper && digit || lower && digits || upper && digits || special)
			return rating(4, "strong");
		if (lower && upper || lower && digit || upper && digit)
			return rating(3, "good");
		return rating(2, "weak");
	}
	
	$.validator.passwordRating.messages = {
		"similar-to-username": "بیش ازحد شبیه نام‌کاربری",
		"too-short": "بیش ازحد کوتاه",
		"very-weak": "خیلی ضعیف",
		"weak": "ضعیف",
		"good": "قابل قبول",
		"strong": "مستحکم"
	}
	
	$.validator.addMethod("pswd_1", function(value, element, loginField) {
		// use untrimmed value
		var pswd_1 = element.value,
		// get username for comparison, if specified
			login = $(typeof loginField != "boolean" ? loginField : []);
			
		var rating = $.validator.passwordRating(pswd_1, login.val());
		// update message for this field
		
		var meter = $(".password-meter", element.form);
		
		meter.find(".password-meter-bar").removeClass().addClass("password-meter-bar").addClass("password-meter-" + rating.messageKey);
		meter.find(".password-meter-message")
		.removeClass()
		.addClass("password-meter-message")
		.addClass("password-meter-message-" + rating.messageKey)
		.text($.validator.passwordRating.messages[rating.messageKey]);
		// display process bar instead of error message
		
		return rating.rate > 1;
	}, "&nbsp;");
	// manually add class rule, to make username param optional
	$.validator.classRuleSettings.pswd_1 = { pswd_1: true };
	
})(jQuery);