
checkEmailRe = /^([a-zA-Z0-9_.\-])+@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
url1Re = / /g;
url2Re = /[^\-a-z0-9]/gi;
url3Re = /^\s+|\s+$/g;
submitted = false;

function prepareUrl(url){
	return url.replace(url3Re, "").replace(url1Re, "-").replace(url2Re, "").toLowerCase().slice(0, 45);
}

function checkEmail(email) {
	return checkEmailRe.test(email);
}

function validateUrl_cb(data){
	if(data.rs == 1){
		if(data.data[0].m){
			$("#available").show();
			$("#alreadyTaken").hide();
		} else {
			$("#available").hide();
			$("#alreadyTaken").show();
		}
	}	
}

function validateCC(s)
{
	var i, j, k, m, c, a;
	s = s.replace(/\D*/g, "");
	j = s.length / 2;
	if (j < 6.5 || j > 8 || j == 7)
	{
		return false;
	}
	k = Math.floor(j);
	m = Math.ceil(j) - k;
	c = 0;
	for (i=0; i<k; i++)
	{
		a = s.charAt(i*2+m) * 2;
		c += a > 9 ? Math.floor(a/10 + a%10) : a;
	}
	for (i=0; i<k+m; i++)
	{
		c += s.charAt(i*2+1-m) * 1;
	}
	return c%10 === 0;
}


$(function() {

	var url = $("#url"),
		pass1 = $("#password1"),
		pass2 = $("#password2"),
		inputs = $("#signup-procedure input"),
		old = "";
	
	$("#companyName").keyup(function(){
		url
			.val(this.value)
			.keyup();
	});
	
	url.keyup(function(){
		var val = prepareUrl(this.value);
		this.value = val;
		if (val.length && old !== val)
		{
			$.getScript("https://app.theflowr.com/api/find/client/https%3A%2F%2F" + encodeURIComponent(val) + ".theflowr.com/callback/validateUrl_cb");
			old = val;
		}
	});
	
	inputs.blur(function(){
		var el = $(this)
			id = this.id,
			val = el.val(),
			er = !val.length;
		if (id === "email2" && !checkEmail(val)) {
			er = 1;
		} else if (id === "url") {
			er = $("#alreadyTaken").is(":visible");
		} else if (id === "cc") {
			er = !validateCC(val);
		}
		el.toggleClass("error", er);
	});
	
	pass1.add(pass2).blur(function(){
		pass1.add(pass2).toggleClass("error", pass1.val() !== pass2.val() || pass1.val().length < 6);
	});
	
	$('#submit').click(function () {
		if (submitted)
		{
			alert("Please wait.");
			return false;
		}
		inputs.blur();
		var error = inputs.is(".error");
		if (error)
		{
			inputs.filter(".error:first").focus();
		}
		submitted = !error;
		return submitted;
	});	
});

