$(function() {

	var hint  = null;
	var delay = 0;
	var run = false;
	var val = null;
	var thisId = null;

	$(".modal-main-signup").find("input.sys-btn").attr('disabled', 'disabled');
	$(".modal-main-signup").find("input:text, input:password").each(function(){
		var counter = setInterval(function(e){
			if(delay > 0){
				delay -= 50;
			}
			if(delay == 0 && run == true){
				validate(val);
				run = false;
			}
		}, 100);	
			
		$(this).focus(function(){
			thisId = $(this).attr('id');
			switch (thisId) {
				case "username":
					hint  = "Create your identity";
					break;
				case "email":
					hint  = "We keep this private";
					break;
				case "password":
					hint  = "Shhh. Don't tell anyone";
					break;
				case "password_confirm":
					hint  = "One more time...";
					break;
			}
			
			var hasClassErr = $(this).parents(".row").find(".message-type, .message-wrap").hasClass("error");
			var hasClassSuc = $(this).parents(".row").find(".message-type, .message-wrap").hasClass("success");
			if(hasClassErr !== true && hasClassSuc !== true) {
				$(this).parents(".row").find(".message-type, .message-wrap").addClass("hint").fadeIn(500);
				$(this).parents(".row").find(".message-text").html(hint);
			}
		}).keydown(function(e){
			if(e.keyCode == 13){ // enter
				event.preventDefault();
				$(this).parents(".row").next().find("input").focus();
			} else if (e.keyCode != 9) { // tab
				$(this).parents(".row").find(".message-type").addClass("loading");
				delay = 1000;
				run = true;
				val = $(this);
			}
		}).blur(function(){
			delay = 0;
			validate($(this));
		});
	});
	
	$(".modal-main-signup input").bind("submit change", function(){
		var results = Array();
		$(".modal-main-signup").find(".message-type").each(function(){
			results.push($(this).hasClass("success"));
		});
		results.push($(".modal-main-signup").find(".checkbox input").is(':checked'));

		if(jQuery.inArray(false, results) === -1){
			$(".modal-main-signup").find("input.sys-btn").removeAttr('disabled');
		} else {
			$(".modal-main-signup").find("input.sys-btn").attr('disabled', 'disabled');
		}
	});
	
});

function validate($this){
	var thisId = $this.attr('id');
	switch (thisId) {
		case "username":
			xhr_validate('username');
			break;
		case "email":
			xhr_validate('email');
			break;
		case "password":
			xhr_validate('password');
			break;
		case "password_confirm":
			var password = $('#password').val();
			var password_confirm = $('#password_confirm').val();
			if(password == password_confirm && password != "") {
				mark_status('password_confirm', 'good');
			} else {
				mark_status('password_confirm', 'alert', 'Passwords don\'t match');
			}
			break;
	}
}

function mark_status(id, status, msg)
{
	$("#"+id).parents(".row").find(".loading").removeClass("loading");
	if(status == "good"){
		$("#"+id).parents(".row").find(".message-type").removeClass("hint error").addClass("success");
		$("#"+id).parents(".row").find(".message-wrap").fadeOut(500);
	}
	if(status == "alert"){
		$("#"+id).parents(".row").find(".message-wrap").fadeIn(500);
		$("#"+id).parents(".row").find(".message-text").html(msg);
		$("#"+id).parents(".row").find(".message-type").removeClass("hint success").addClass("error");
	}
}

var dataStatus = null;

function xhr_validate(id)
{
	var val = $('#' + id).val();
    $.post('/signup/' + id + '_valid/check', {
		val: val,
		json: true
		}, function(data){
			mark_status(id, data.status, data.msg);
	}, 'json');
}
