jQuery().ready(function() {  
	// display password strength meter. 
	PWStrength(trimAll(jQuery('input#UserPasswd').val())); 
	 
	// set focus on first name field.
	jQuery("input#UserFirstName").focus();
	 
	// ajax username check on username field change.
	/*jQuery("input#UserUsername").change(function(){	  
		usernameChecker();
	}); */
	
	// validate fields.
	jQuery("form#signupForm").submit(function(){		 
		var errors = 0; 
		var first_error_field = '';
		
		// validate first name.
		var first_name = trimAll(jQuery('input#UserFirstName').val());
		if(first_name==''){
			errors++;
			jQuery('#UserFirstName_error').show();  
			jQuery("input#UserFirstName").addClass('formFieldErrors');
			
			first_error_field = 'UserFirstName';
		}else{
			jQuery('#UserFirstName_error').hide(); 
			jQuery("input#UserFirstName").removeClass('formFieldErrors'); 
		} 
		jQuery('input#UserFirstName').val(first_name);
		
		// validate last name.
		var last_name = trimAll(jQuery('input#UserLastName').val());
		if(last_name==''){
			errors++;
			jQuery('#UserLastName_error').show();  
			jQuery("input#UserLastName").addClass('formFieldErrors'); 
			
			if(first_error_field == ''){
				first_error_field = 'UserLastName';
			}
		}else{
			jQuery('#UserLastName_error').hide(); 
			jQuery("input#UserLastName").removeClass('formFieldErrors'); 
		} 
		jQuery('input#UserLastName').val(last_name);
		 
		// validate login username. 
		var username = trimAll(jQuery('input#UserUsername').val());
		var username_filter  = /^([a-zA-Z0-9])+([a-zA-Z0-9\s])*([a-zA-Z0-9])+$/;
		if(username==''){
			errors++;	

			jQuery('#UserUsername_error').html("Please enter a username.");
            jQuery('#UserUsername_error').show();
            jQuery("input#UserUsername").addClass('formFieldErrors');
            jQuery('div#message').empty();	
            
            if(first_error_field == ''){
				first_error_field = 'UserUsername';
			}
		}else if (username.length < 3 || username.length > 16) {
			// username should be minium 3 characters and max 16 characters.
			errors++;
			 
			jQuery('#UserUsername_error').html("Username must be between 3 and 16 characters long.");
			jQuery('#UserUsername_error').show();
			jQuery("input#UserUsername").addClass('formFieldErrors');
			jQuery('div#message').empty();
			
			if(first_error_field == ''){
				first_error_field = 'UserUsername';
			}
		}else if(!username_filter.test(username)){
			// username should be a-zA-Z0-9 and spaces between characters, but leading/trailing space. 
			errors++;
			 
			jQuery('#UserUsername_error').html("Username should contain only letters, numbers and spaces (no leading or trailing).");
			jQuery('#UserUsername_error').show();
			jQuery("input#UserUsername").addClass('formFieldErrors');
			jQuery('div#message').empty();
			
			if(first_error_field == ''){
				first_error_field = 'UserUsername';
			}
		}else{ 
			jQuery('#UserUsername_error').hide(); 
			jQuery("input#UserUsername").removeClass('formFieldErrors');
 
			usernameChecker();
		} 
		jQuery("input#UserUsername").val(username);
		
		// validate email.
		var email = trimAll(jQuery('input#UserEmail').val());
		var email_filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		if(email==''){
			errors++;
			jQuery('#UserEmail_error').show();
			jQuery("input#UserEmail").addClass('formFieldErrors');	
			
			if(first_error_field == ''){
				first_error_field = 'UserEmail';
			}
		}else if (!email_filter.test(email)){
			errors++;	
			jQuery('#UserEmail_error').html('Please enter a valid Email address.');
			jQuery('#UserEmail_error').show(); 
			jQuery("input#UserEmail").addClass('formFieldErrors');
			
			if(first_error_field == ''){
				first_error_field = 'UserEmail';
			}
		}else{
			jQuery('#UserEmail_error').html('Email is required.');
			jQuery('#UserEmail_error').hide(); 	
			jQuery("input#UserEmail").removeClass('formFieldErrors'); 
		}
		jQuery('input#UserEmail').val(email); 
		
		// validate password.  
		var passwd = jQuery('input#UserPasswd').val(); 
		var passwd_filter  = /^(\S)+$/
		if(passwd.length == 0){
			errors++; 	
			jQuery('#UserPasswd_error').show(); 	
			jQuery("input#UserPasswd").addClass('formFieldErrors'); 
			
			if(first_error_field == ''){
				first_error_field = 'UserPasswd';
			}
		}else if(!passwd_filter.test(passwd)){
			// check password contains any white space.
			errors++; 
			jQuery('#UserPasswd_error').html('No white space characters are allowed in Password.');
			jQuery('#UserPasswd_error').show(); 	
			jQuery("input#UserPasswd").addClass('formFieldErrors');  
			
			if(first_error_field == ''){
				first_error_field = 'UserPasswd';
			}
		}else if(passwd.length < 6){
			errors++;
			jQuery('#UserPasswd_error').html('Password must be at least 6 characters long.');
			jQuery('#UserPasswd_error').show(); 	
			jQuery("input#UserPasswd").addClass('formFieldErrors');  
			
			if(first_error_field == ''){
				first_error_field = 'UserPasswd';
			}
		}else{
			// validate confirm password.
			jQuery('#UserPasswd_error').html('Password is required.');
			jQuery('#UserPasswd_error').hide(); 	
			jQuery("input#UserPasswd").removeClass('formFieldErrors');
			
			var confirm_passwd = jQuery('input#UserConfirmPasswd').val(); 
			if(confirm_passwd.length == 0){
				errors++; 
				jQuery('#UserConfirmPasswd_error').show(); 	
				jQuery("input#UserConfirmPasswd").addClass('formFieldErrors');
				
				if(first_error_field == ''){
					first_error_field = 'UserConfirmPasswd';
				}
			}else{  
				if(confirm_passwd!=passwd){
					errors++;  
					jQuery('#UserConfirmPasswd_error').html("Password doesn't match! CAPS might be on! Please re-enter your password to confirm.");
					jQuery('#UserConfirmPasswd_error').show(); 	
					jQuery("input#UserConfirmPasswd").addClass('formFieldErrors');
					
					if(first_error_field == ''){
						first_error_field = 'UserConfirmPasswd';
					}
				}else{ 
					jQuery('#UserConfirmPasswd_error').html('Please confirm your password.');
					jQuery('#UserConfirmPasswd_error').hide(); 	
					jQuery("input#UserConfirmPasswd").removeClass('formFieldErrors');
				}
			}
		} 
		
		// validate term agreement.  
		var agreement_checked = jQuery('input#UserTermAgreement').attr("checked");
		if(agreement_checked==false){
			errors++;	
			jQuery('#UserTermAgreement_error').show();
			jQuery("input#UserTermAgreement").addClass('formFieldErrors');
		}else{
			jQuery('#UserTermAgreement_error').hide();
			jQuery("input#UserTermAgreement").removeClass('formFieldErrors');
		} 
		
		// if validation is successful,
		if(errors > 0){ 
			if(first_error_field != ''){
				jQuery("input#"+first_error_field).focus();
			}
			return false;
		}else{ 
			// submit form.
			return true;
		}					 
	}); 
});