function isDefined(x)
{
	return x != null && typeof(x) != 'undefined';
}

function notEmpty(x)
{
	return isDefined(x) && x.length > 0;
}

$(document).ready(function()
{
	if($('form.auth-form').size() == 0)
	{
		return;
	}
	
	if(ajaxReg)
	{
		$('form.auth-form').attr('action', locale.login.quick_login_url);
		prepareAjaxForms();
	}
	else
	{
		$('form.auth-form').attr('action', locale.login.login_url);
		prepareForms();
	}

	$('input[name=iAgree]').click(function()
	{
		checkIAgree(this);
	});
	checkIAgree();
	
	$("#reg_details_pic").bind("mouseover mouseout",function(){
		$("#reg_details_msg").toggleClass("hidden");
	});
});

function prepareForms()
{
	$('form.auth-form').submit(function()
	{
		var form = this;
		$("span.loader", form).removeClass("hidden");
		username = $('input[name=j_username]', form).val();
		if(username != null && username.length > 0)
		{
			$('input[type=submit]', form).attr('disabled', true);
			return true;
		}
		return false;
	});
	
	$('form.account-form').submit(function()
	{
		var form = this;
		$("span.loader", form).removeClass("hidden");
		var check = checkForm(form);
		if (check){
			$('input[type=submit]', form).attr('disabled', true);
			return true;
		}
		$("span.loader", form).addClass("hidden");
		return false;
	});
}

function prepareAjaxForms()
{
	$('form.auth-form').ajaxForm({
		clearForm: false,
		beforeSubmit:function(arr, form)
		{
			username = $('input[name=j_username]', form).val();
			if(username != null && username.length > 0)
			{
				$('input[type=submit]', form).attr('disabled', true);
				$('.loader', form).removeClass('hidden');
				return true;
			}
			return false;
		},
		success: function(data, statusText, x, form)
		{
			$('.loader', form).addClass('hidden');
			if (data == "ERROR" || data == "DISABLED")
			{
				loginError(data);
			}
			else if (locale.reload_after_auth)
			{
				window.location.reload();
			} 
			else 
			{
				updateAuthPanel(data);
			}
		},
		error: function(data, statusText, x, form)
		{
			$('.loader', form).addClass('hidden');
			loginError("ERROR");
		}
	});
	
	$('form.account-form').ajaxForm({
		clearForm: false,
		data: {'dataType': 'json'},	// AJAX request flag
		beforeSubmit: function(arr, form)
		{
			var check = checkForm(form);
			if (check){
				$('.loader', form).removeClass('hidden');
				$('input[type=submit]', form).attr('disabled', true);
				return true;
			}
			return false;
		},
		success: function(data, statusText, x, form)
		{
			$('.loader', form).addClass('hidden');
			var parts = data.split(" ");
			if (parts.length > 1 && parts[0] == "ERROR")
			{
				registerError(parts[1]);
			}
			else
			{
				if (wmReg)
				{
					window.location.href = locale.register.registered_url;
				}
				else
				{
					updateAuthPanel(data);
				}
			}
		},
		error: function(data, statusText, x, form)
		{
			$('.loader', form).addClass('hidden');
			registerError();
		}
	});
}

function loginError(msg)
{
	$('form.auth-form input[type=submit]').attr('disabled', false);
	$('form.auth-form .j_username_error_msg span').addClass('hidden');
	var spanClass = msg == "DISABLED" ? "d" : "error"; 
	$('form.auth-form .j_username_error_msg span.' + spanClass).removeClass('hidden');
}

function registerError(error)
{
	$('form.account-form input[type=submit]').attr('disabled', false);
	var msg = (error && error == "FAIL") ? locale.register.error_fail : locale.register.error_unique;
	$('.email_error_msg').html('<span class="red">' + msg + '</span>');
}

function updateAuthPanel(data)
{
	$('div.userinfo').html(data);
	$('#quick-auth').addClass('hidden');
	$('#upload-more').removeClass('hidden');
	$('#payForm').removeClass('hidden');
}

function checkForm(form)
{
	return (checkUsername(form) & checkPassword(form) & checkPasswordConfirmation(form) & checkEmail(form) & checkBirthDate(form) & checkIAgree($('input[name=iAgree]', form)));
}

function checkShortForm(form)
{
	return (checkUsername(form) & checkPassword(form) & checkPasswordConfirmation(form) & checkEmail(form));
}

function error_message(base, message, form)
{
	$('.' + base + '_error_msg', form).html('<span class="red">' + message + '</span>');
}

function clear_message(base, form)
{
	$('.' + base + '_error_msg', form).html('');
}

function checkIAgree(el)
{
	if(isDefined(el))
	{
		var form = $(el).parents('form')[0];
		var checked = $(el)[0].checked;
		$('input[type=submit]', form).attr('disabled', !checked);
		return checked;
	}
	else
	{
		$('form.account-form').each(function(i, form)
		{
			iAgree = $('input[name=iAgree]', form);
			if(isDefined(iAgree) && iAgree.size() > 0)
			{
				var checked = iAgree[0].checked;
				$('input[type=submit]', form).attr('disabled', !checked);
			}
		});
	}
}

function checkPassword(form)
{
	var password = $('input[name=password]', form).val();
	if (password == '')
	{
		error_message('password', locale.register.error_empty, form);
		clear_message('passwordConfirmation', form);
	}
	else if (password.length < 6 || password.length > 128)
	{
		error_message('password', locale.register.password_error_length, form);
		clear_message('passwordConfirmation', form);
	}
	else
	{
		clear_message('password', form);
		return true;
	}
	return false;
}

function checkPasswordConfirmation(form)
{
	if ($('input[name=password]', form).val() != $('input[name=passwordConfirmation]', form).val())
	{
		error_message('passwordConfirmation', locale.register.error_password_confirmation, form);
		return false;
	}
	else
	{
		clear_message('passwordConfirmation', form);
		return true;
	}
}

function checkUsername(form)
{
	if($('input[name=username]', form).size() == 0)
	{
		return true;
	}
	var username = $('input[name=username]', form).val();
	if (username == '')
	{
		error_message('username', locale.register.error_empty, form);
	}
	else
	{
		clear_message('username', form);
		return true;
	}
	return false;
}

function checkEmail(form)
{
	var email = $('input[name=email]', form).val();
	if (email == '')
	{
		error_message('email', locale.register.error_empty, form);
	}
	else
	{
		if (EmailChecker.check(email))
		{
			clear_message('email', form);
			return true;
		}
		else
		{
			error_message('email', locale.register.error_email, form);
		}
	}
	return false;
}

function checkBirthDate(form)
{
	if($('select[name=reg_birth_day]').size() == 0)
	{
		return true;
	}
	var day = $('select[name=reg_birth_day]', form).val();
	var month = $('select[name=reg_birth_month]', form).val();
	var year = $('select[name=reg_birth_year]', form).val();
	if (notEmpty(day) && notEmpty(month) && notEmpty(year))
	{
		clear_message('date', form);
		return true;
	}
	else
	{
		error_message('date', locale.register.error_date, form);
	}
	return false;
}

