$(document).ready(function() {
	var regs = /^[\s]*$/;
	var regNVAlpha = /[^a-z0-9_\-\s@\,\.\'а-я]/gi;
	var regNVEmail = /[^a-z0-9_\-@\.]/gi;
	var regNVDigits = /[^0-9]/gi;
	
	var isLoadForm = false;
	var saveRegValues = new Object;
	var registerBlock = null;
	var defaultValues = {"company" : "Leave blank if not applicable"};
	var mustBeHidden = ["visa_groups_hint"];
	
	$("input[id^=apply_button_], a[id^=apply_link_], #form_login_link, #form_register_link, #form_login_link_without_reg, #field_login_link_without_reg, .proceed_application_button").click(function() {
		var isAppendCountry = ($(this).attr("id") == "form_login_link" || $(this).attr("id") == "form_login_link_without_reg" || $(this).attr("id") == "field_login_link_without_reg" || $(this).attr("id") == "form_register_link" || $(this).attr("id") == "submit_application_link") ? false : true;
		var isProceedCountry = $(this).hasClass("proceed_application_button") ? true : false;
		var hlen = mustBeHidden.length;
		for(var i=0; i<hlen; i++) {
			$("#" + mustBeHidden[i]).css("display", "none");
		}
		if(registerBlock) {
			if(isAppendCountry) startWithoutReg();
			else {
				$.prompt(registerBlock, {"closeButton" : false, "buttons" : {}, "prefix" : "registerBlock", "top" : "1%"});
				$("#form_register_user :text").each(function() {
					if(saveRegValues[$(this).attr("id")]) $(this).val(saveRegValues[$(this).attr("id")]);
				});
				registerBlockEventHandlers(isAppendCountry);
			}
		}
		else {
			if(isLoadForm) return false;
			isLoadForm = true;
			$.post("/register.php", {"action" : "default"}, function(data) {
				if(data == "register") {
					if(isProceedCountry) {
						if($("#visa_info_country_proceed").length == 0) {
							$('<form action="' + vhqvars.urlNeg + 'visas.php" method="POST" id="visa_info_country_proceed"><input type="hidden" name="action" value="proceed"></form>').appendTo($("body"));
						}
						$("#visa_info_country_proceed").submit();
					}
					else {
						$("#proceed").val("true");
						$("#visa_info_country").submit();
					}
				}
				else {
					if(isAppendCountry) startWithoutReg();
					else {
						registerBlock = data;
						$.prompt(registerBlock, {"closeButton" : false, "buttons" : {}, "prefix" : "registerBlock", "top" : "1%"});
						registerBlockEventHandlers(isAppendCountry);
					}
				}
				isLoadForm = false;
			});
		}
		return false;
	});
	
	function registerBlockEventHandlers(isAppendCountry) {
		$("#reg_close_button").click(registerCloseClick);
		$("#form_register_user p,#form_register_login p").click(registerFieldClick);
		$("#form_register_user :text, #form_register_user :password, #form_register_login :text, #form_register_login :password").focus(registerFieldFocus).blur(registerFieldBlur);
		$("#form_register_login").submit(function() {return registerLogin(isAppendCountry)});
		$("#form_register_user").submit(function() {return registerUser(isAppendCountry)});
		$("#register_anonreg").click(function() {registerAnonReg(isAppendCountry)});
		$("#form_seekpwd").submit(SeekPwdFormSubmit);
	}
	
	$("#form_logout_link").click(function() {
		$("#form_logout").submit();
		return false;
	});
	
	function startWithoutReg(){
		$('<form action="' + vhqvars.urlNeg + 'register.php" method="POST" id="form_register_anonreg"><input type="hidden" name="action" value="anonreg" /><input type="hidden" name="proceed" value="true" /></form>').appendTo($("body"));
		appendCountryVars("#form_register_anonreg");
		$("#form_register_anonreg").submit();
	}
	
	function SeekPwdFormSubmit() {
		var email = $("#seekpwd_email").val();
		if(email.length >= 5) {
			if(email.indexOf("@") == -1) {
				registerMessage('Warning! Your email address must be a fully qaulified name. Example: YourName@YourISP.Com', false);
				$("#seekpwd_email").focus();
				return false;
			}
			var formElements = $("#form_seekpwd :input").serializeArray();
			$.ajax({
					type : "POST",
					url :  $("#form_seekpwd").attr("action"), 
					data : formElements, 
					dataType: "json",
					success : function(data, msg) {
						if(data['error']) {
							registerMessage(data['error'], false);
							return false;
						}
						if(data['success']) {
							registerMessage(data['success'], true);
							return false;
						}
					}
			});
		}
		else {
			registerMessage('Please enter your email address', false);
			$("#seekpwd_email").focus();
		}
		return false;
	}
	
	function registerFieldClick() {
		$("#form_register_user p,#form_register_login p").removeClass("regvaluebg");
		$(this).addClass("regvaluebg");
	}
	
	function registerAnonReg(isAppendCountry) {
		if(isAppendCountry) appendCountryVars("#form_register_anonreg");
		var date = new Date();
		var verify = MD5(date.getFullYear() + ' -- ' + (date.getMonth()+1) + ' -- ' + date.getDate());
		$("#verify_time").val(verify);
		$("#form_register_anonreg").submit();
	};
	
	function registerLogin(isAppendCountry) {
		var regs = /^[\s]*$/;
		if(regs.test($("#form_register_login #login").val())||regs.test($("#form_register_login #password").val())) {
			registerMessage("Please, enter Your login and password", false);
			return false;
		}
		if(isAppendCountry) appendCountryVars("#form_register_login");
		var formElements = $("#form_register_login :input").serializeArray();
		$.ajax({
				type : "POST",
				url :  $("#form_register_login").attr("action"), 
				data : formElements, 
				dataType: "json",
				success : function(data, msg) {
					if(data['error']) {
						registerMessage(data['error'], false);
						$('#password').val('');
						if(data['captcha'] == 'true') {
							var date = new Date();
							$('#captcha_image').attr('src', vhqvars.urlNeg + 'imagecode.php?' + date.getTime());
							$('#login_captcha').val('');
							$('#login_captcha_place').removeClass('no_display');
							registerBlock = null;
						}
						else {
							$('#login_captcha').val('');
							$('#login_captcha_place').addClass('no_display');
							registerBlock = null;
						}
						return false;
					}
					if(data['page']) {
						$(window).attr("location", data['page']);
					}
				}
		});
		return false;
	}
	
	function registerUser(isAppendCountry) {
		if(isAppendCountry) appendCountryVars("#form_register_user");
		var check = registerBlockSubmit();
		if(check == true) {
			var formElements = $("#form_register_user :input").serializeArray();
			$.ajax({
					type : "POST",
					url :  $("#form_register_user").attr("action"), 
					data : formElements, 
					dataType: "json",
					success : function(data, msg) {
						if(data['error']) {
							registerMessage(data['error'], false);
							return false;
						}
						if(data['page']) {
							$(window).attr("location", data['page']);
						}
					}
			});
		}
		else {
			registerMessage(errorText, false);
			$(errorField).focus();
			return false;
		}
		return false;
	}
	
	function appendCountryVars(formName) {
		$('<input type="hidden" name="cntr_id" value="' + $("#cntr_id").val() + '">').appendTo(formName);
		$('<input type="hidden" name="ctz_id" value="' + $("#ctz_id").val() + '">').appendTo(formName);
		$('<input type="hidden" name="visa_group" value="' + $("#visa_group").val() + '">').appendTo(formName);
		if($("input[type=radio][id^=perm_resident]").length > 0)
			var permResident = $("input[type=radio][id^=perm_resident]:checked").val();
		else
			var permResident = $("#perm_resident").val();
		$('<input type="hidden" name="perm_resident" value="' + permResident + '">').appendTo(formName);
		$('<input type="hidden" name="jurisd_id" value="' + $("#jurisd_id").val() + '">').appendTo(formName);
	}
	
	function registerMessage(message, type) {
		if(type == false) $("#register_message").removeClass("msg_block").addClass("error_block").removeClass("no_display");
		if(type == true) $("#register_message").removeClass("error_block").addClass("msg_block").removeClass("no_display");
		$("#register_message_text").html(message);
	}
	
	function registerFieldFocus() {
		$("#form_register_user p,#form_register_login p").removeClass("regvaluebg");
		$(this).parents("p").addClass("regvaluebg");
		if(defaultValues[$(this).attr("id")] == $(this).val()) {
			$(this).removeClass("defaultvalue").addClass("regfieldN");
			$(this).val("");
		}
	}
	
	function registerFieldBlur() {
		registerFieldValid();
		if(regs.test($(this).val()) && defaultValues[$(this).attr("id")]) {
			$(this).removeClass("regfieldN").addClass("defaultvalue");
			$(this).val(defaultValues[$(this).attr("id")]);
		}
	}
	
	function registerFieldValid() {
		$("#first_name").val($("#first_name").val().replace(regNVAlpha, ''));
		$("#last_name").val($("#last_name").val().replace(regNVAlpha, ''));
		$("#company").val($("#company").val().replace(regNVAlpha, ''));
		$("#phone_area").val($("#phone_area").val().replace(regNVDigits, ''));
		$("#phone_prefix").val($("#phone_prefix").val().replace(regNVDigits, ''));
		$("#phone_suffix").val($("#phone_suffix").val().replace(regNVDigits, ''));
		$("#email").val($("#email").val().replace(regNVEmail, ''));
		$("#rpass").val($("#rpass").val().replace(regNVAlpha, ''));
		$("#login").val($("#login").val().replace(regNVAlpha, ''));
		$("#password").val($("#password").val().replace(regNVAlpha, ''));
	}
	
	function registerBlockSubmit() {
		errorText = null; errorField = null;
		registerFieldValid();
		if(regs.test($("#first_name").val())) {
			errorText = 'Please fill out first name field'; errorField = '#first_name'; return false;
		}
		if(regs.test($("#last_name").val())) {
			errorText = 'Please fill out last name field'; errorField = '#last_name'; return false;
		}
		if(regs.test($("#phone_area").val()) || regs.test($("#phone_prefix").val()) || regs.test($("#phone_suffix").val())) {
			errorText = 'Please enter Your contact phone'; errorField = '#phone_area'; return false;
		}
		if($("#email").val().length < 5) {
			errorText = 'Enter the email on the account - the new password will be emailed to you shortly'; errorField = '#email'; return false;
		} 
		else 
		{
			if (($("#email").val().indexOf ("@")) == -1) {
				errorText = 'Warning! Your email address must be a fully qaulified name. Example: YourName@YourISP.Com'; errorField = '#email'; return false;
			}
		}
		if($("#rpass").val().length < 6) {
			errorText = 'Enter your password (6 to 9 characters long, letters and digits are allowed'; errorField = '#rpass'; return false;
		}
		if($("#rpass").val() != $("#vrfpass").val()) {
			errorText = 'Password and password confirmation do not match'; errorField = '#vrfpass'; return false;
		}
		$("#hash").val(MD5($("#rpass").val()));
		$("#vrfhash").val(MD5($("#vrfpass").val()));
		$("#rpass,#vrfpass").val("");
		return true;
	}
	
	function registerCloseClick() {
		$("#form_register_user :text").not("#rpass,#vrfpass").each(function() {
			saveRegValues[$(this).attr("id")] = $(this).val();
		});
		$.prompt.close();
	};
});

