var Validator = {
	
	init: function(step) {
		if(!step) {
			step = 1;
		} 
		this.step 				= step;
		this.btn_submit 		= $('#btn_submit');
		this.registration_form 	= $('#registration_form');
		this.ajaxCallPending 	= 0;
		this.valid 				= false;
		this.emailPattern		= /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		this.namePattern		= /^[A-Za-z0-9]{6,15}$/;
		this.passwordPattern	= /^[A-Za-z0-9]{6,20}$/;
		this.errorInputClass	= 'txt_input_280_error';
		this.errorSelectClass	= 'txt_select_280_error';
		this.errorClass			= 'error_text';
		this.validateResult 	= false;
		Validator.registration_form.bind('submit', Validator.onSubmit);
	},
	
	onSubmit: function(){
		if(Validator.validateResult) {
			return true;
		} else {
			Validator.validate()
			Validator.submit();
			return false;
		}
	},
	
	submit: function() {
		if(Validator.ajaxCallPending > 0) {
			setTimeout('Validator.submit()', 100);
			return false;
		}
		if(Validator.valid) {
			Validator.validateResult = true;
			Validator.registration_form.submit();
		}
	},
	
	validate: function() {
		switch (Validator.step) {
			case 2:
				Validator.validateStep2();
				break;
			default:
				Validator.validateStep1();
				break;		
		}
	},
	
	validateStep1: function() {
		Validator.valid = true;
		$('.'+Validator.errorClass).remove();
		
		Validator.nameValidation();
		
		Validator.firstNameValidation();
		
		Validator.lastNameValidation();
		
		Validator.emailValidation();
		
		Validator.passwordValidation();
		
		Validator.confirmPasswordValidation();
	},
	
	validateStep2: function() {
		Validator.valid = true;
	},
	
	ajaxValidation: function(responseText, inputObject, errorMessage){
		if(responseText != 'true') {
			Validator.setInvalid(inputObject, errorMessage);
		} else {
			Validator.setValid(inputObject);
		}
	},
	
	nameValidation: function() {
		var inputName = $('#name');
		var name 	= inputName.val();
		if(name) {
			if( !name.match(Validator.namePattern) ) {
				Validator.setInvalid(inputName, __('name_pattern_not_matched'));
			} else {
				Validator.ajaxCallPending ++;
				$.get(webroot+'auth/is_exists_name/'+inputName.val(), function(responseText){
					var errorMessage = __('name_used');
					Validator.ajaxValidation(responseText, inputName, errorMessage);
					Validator.ajaxCallPending --;
				});
			}
		} else {
			Validator.setInvalid(inputName, __('name_not_entered'));
		}
	},
	
	firstNameValidation: function() {
		var firstName = $('#first_name');
		if(!$.trim(firstName.val())) {
			Validator.setInvalid(firstName, 'Enter your first name.');
		} else {
			Validator.setValid(firstName);
		}
	},
	
	lastNameValidation: function() {
		var lastName = $('#last_name');
		if(!$.trim(lastName.val())) {
			Validator.setInvalid(lastName, 'Enter your last name.');
		} else {
			Validator.setValid(lastName);
		}
	},
	
	emailValidation: function() {
		var inputEmail = $('#email');
		var email = inputEmail.val();
		if(email) {
			if(email.match(Validator.emailPattern)) {
				Validator.ajaxCallPending ++;
				$.post(webroot+'auth/is_exists_email','email='+email, function(responseText) {
					Validator.ajaxValidation(responseText, inputEmail, __('email_used'));
					Validator.ajaxCallPending --;
				});
			} else {
				Validator.setInvalid(inputEmail, __('email_pattern_not_matched'));
			}
		} else {
			Validator.setInvalid(inputEmail, __('email_not_entered'));
		}
	},
	
	passwordValidation: function() {
		var inputPassword = $('#password');
		var password = inputPassword.val();
		if(password) {
			if (password.length < 6){
				Validator.setInvalid(inputPassword, __('password_is_too_short'));
			}
			else if(!password.match(Validator.passwordPattern)) {
				Validator.setInvalid(inputPassword, __('password_pattern_not_matched'));
			} else {
				Validator.setValid(inputPassword);
			}
		} else {
			Validator.setInvalid(inputPassword, __('password_not_entered'))
		}
	},
	
	confirmPasswordValidation: function() {
		var inputConfirmPassword = $('#password_confirm');
		var inputPassword = $('#password');
		var password = inputPassword.val();
		var confirmPassword = inputConfirmPassword.val();
		if(confirmPassword) {
			if(confirmPassword != password) {
				Validator.setInvalid(inputConfirmPassword, __('pass_cpass_not_matched'))
			} else {
				Validator.setValid(inputConfirmPassword);
			}
		} else {
			Validator.setInvalid(inputConfirmPassword, __('cpassword_not_entered'))
		}
	},
	
	setInvalid: function(inputObject, errorMessage) {
		Validator.valid = false;
		inputObject.addClass(Validator.errorInputClass);
		inputObject.after('<p class="error_text">'+errorMessage+'</p>');
	},
	setValid: function(inputObject) {
		inputObject.removeClass(Validator.errorInputClass);
	}
}