﻿
// Global Variables
var ucEmailForm = null;


(function($) {
    
    window["load_AutoOwners_AgencyLocator_ucEmailForm"] = function(obj) {
        
        // Properties.
        ucEmailForm = obj;

		var errorCloseTimeout = null;


        // Attach Watermarks.
        $.Artemis.InputMask.Watermark($("input[id$='txtFullName']"), { 
            initialValue: "enter your full name",
            setInitialValue: false
        });
        
        $.Artemis.InputMask.Watermark($("input[id$='txtToAddress']"), { 
            initialValue: "enter your email address",
            setInitialValue: false
        });
        
        $.Artemis.InputMask.Watermark($("input[id$='txtPhoneNumber']"), { 
            initialValue: "enter your phone number",
            setInitialValue: false
        });
        
        $.Artemis.InputMask.Watermark($("input[id$='txtSubjectLine']"), { 
            initialValue: "enter a subject line",
            setInitialValue: false
        });


        
        // Event Handlers.
		$(".email_panel .body_field textarea.body").maxLength(2000, ".character_count");


		// This is an IE7 hack to stop the reCAPTCHA input box from disappearing whenever a blur event 
		// is triggered on any of the watermarked text inputs.
		$(".email_panel input.watermark").blur(function(event) {
			$(".email_panel .recaptcha_input_area").css("display", "inline-block").css("display", "block");
		});


        $("a.close_email").click(function(event) {
            event.preventDefault();
            
            obj.hideEmailForm();
        });

		
		$("a.send_email").click(function(event) {
			event.preventDefault();

			if (ucSearchResultsMap && ucSearchResultsMap.SelectedAgency.ID != null)
            {
				obj.validateFields(function() {
					obj.SendEmail(ucSearchResultsMap.SelectedAgency.ID, {
						onSuccess: function(results) {
							obj.hideLoadingIcon();

							if (results.Result === true)
							{
                                _rts_set_conversion('0.00', 'Agency Locator - Email Me');
								obj.hideEmailForm(true);
							}
							else
							{
								var errorMessage = obj.getState().ErrorMessage;

								if (errorMessage != null && typeof errorMessage === "string" && errorMessage.length > 0)
								{
									obj.showErrorMessage(errorMessage);
									$(".email_panel .recaptcha_input_area").css("display", "inline-block").css("display", "block"); // Another part of the IE7 reCAPTCHA hack.
								}
							}
						},
						onFailure: function() {
							obj.hideLoadingIcon();

							obj.showErrorMessage("An error occurred while trying to send your message to the Agency and a support representative has been notified. Please close this message dialog and try sending your message again later.");
							$(".email_panel .recaptcha_input_area").css("display", "inline-block").css("display", "block"); // Another part of the IE7 reCAPTCHA hack.
						}
					});

					$(".email_panel .recaptcha_input_area").hide(); // Another part of the IE7 reCAPTCHA hack.
					obj.showLoadingIcon();
				});
			}
		});



        // Functions.
        obj.showEmailForm = function() {
            if (ucSearchResultsMap)
            {
                ucSearchResultsMap.disableMap();

                obj.RenderEmailFormControl(ucSearchResultsMap.SelectedAgency.ID, {
                    autoUpdateHtml: true,
                    onSuccess: function(results) {
                        ucSearchResultsMap.hideInfoBox();
                        $("html,body").scrollTop($("#email_form").offset().top - 200);
						
                        var popup = $("#email_popup");
                        popup.fadeIn("medium", function() {
							obj.showCaptcha();
						});
                    }
                });
            }
            
            if (ucAdvancedSearch)
            {
                ucAdvancedSearch.hideSearchOptions();
            }
        };


		obj.hideEmailForm = function(showSuccessMessage) {			
			$("#email_popup").fadeOut("medium", function() {
				$(".email_panel .recaptcha_input_area").css("display", "inline-block").css("display", "block"); // Another part of the IE7 reCAPTCHA hack.
			});

            $("input[id$='txtFromAddress']").val("").blur();
            $("h2.agent_count").show();
            
            if (ucSearchResultsMap)
            {
                ucSearchResultsMap.enableMap();
            }

			if (showSuccessMessage === true)
			{
				$("#print_content .message_banner:first").show().find(".success_message").html("Your message has been sent.");

				setTimeout(function() {
					$("#print_content .message_banner:first").fadeOut(3000);
				}, 3000);
			}

			var emailPanel = $(".email_panel");
			emailPanel.find("input.fullname").val("enter your full name").addClass("watermark");
			emailPanel.find("input.email").val("enter your email address").addClass("watermark");;
			emailPanel.find("input.phone").val("enter your phone number").addClass("watermark");;
			emailPanel.find("input.subject").val("enter a subject line").addClass("watermark");;
			emailPanel.find("textarea.body").val("");

			obj.hideErrorMessage();
		};


		obj.showErrorMessage = function(errorMessage) {
			$(".email_panel .error_banner").show().find(".error_message").html(errorMessage);
			$("a.send_email").hide();

			errorCloseTimeout = setTimeout(function() {
				obj.hideEmailForm();
			}, 60000);
		};


		obj.hideErrorMessage = function() {
			$(".email_panel .error_banner").hide().find(".error_message").html("");
			$("a.send_email").show();

			if (errorCloseTimeout != null)
			{
				clearTimeout(errorCloseTimeout);
			}
		};


		obj.showLoadingIcon = function() {
			$(".email_panel .loading_panel").show();
		};


		obj.hideLoadingIcon = function() {
			$(".email_panel .loading_panel").hide();
		};


        obj.showCaptcha = function() { 
            Recaptcha.create(obj.getState().RecaptchaPublicKey, "captcha_container", { 
				theme: "red", 
				callback: function() { $("#recaptcha_response_field").css("margin", "0"); }
			});
        };


		obj.enableValidators = function() {
			if (obj.getState().Validators != null)
			{
				var validators = obj.getState().Validators;
				
				if (!window.Page_Validators) { window.Page_Validators = []; }
				var validatorElement;

				for (var index = 0; index < validators.length; index ++)
				{
					var validator = (validators[index])["ClientID"];
					
					if (window[validator] && typeof window[validator].dispose === "function")
					{
						window[validator].dispose();

						if (window[validator].parentElement)
						{
							window[validator].parentElement.removeChild(window[validator]);
						}
					}

					validatorElement = eval(validators[index].ArrayDeclaration);

					if (validatorElement)
					{
						window.Page_Validators.push(validatorElement);

						if (validators[index].Expandos)
						{
							for (var expando in validators[index].Expandos)
							{
								validatorElement[expando] = validators[index].Expandos[expando];
							}
						}
					}
				}

				if (typeof ValidatorOnLoad === "function") { ValidatorOnLoad(); }

				delete obj.getState().Validators;
			}
		};


		obj.validateFields = function(onSuccessHandler) {
			var isValid = true;

			if (ValidatorValidate)
			{
				var validators = $(".email_panel .validator");

				for (var i = 0; i < validators.length; i++)
				{
					if (validators[i])
					{
						ValidatorValidate(validators[i]);

						if (validators[i].isvalid === false)
						{
							isValid = false;
						}
					}
				}
			}


			if (isValid === true) // If valid so far...
			{
				$(".email_panel .validation_summary").css("visibility", "hidden");

				var captchaIsValid = this.validateCaptcha(onSuccessHandler);

				if (captchaIsValid === false)
				{
					isValid = false;
				}
			}
			else if (isValid === false)
			{
				$(".email_panel .validation_summary").css("visibility", "visible");
			}

			return isValid;
		};


		obj.validateCaptcha = function(onSuccessHandler) {
			this.ValidateCaptcha({
				onSuccess: function(result) {
					if (result.Result.IsValid === false && result.Result.ErrorMessage != null)
					{
						$(".captcha_error").html("Your input did not match the words provided. Please try again.").show();
						Recaptcha.reload();
					}
					else
					{
						$(".captcha_error").html("").hide();

						if (typeof onSuccessHandler === "function")
						{
							onSuccessHandler();
						}
					}
				}
			});
		};


        // Initialization.
		obj.enableValidators();


    };

})(jQuery.noConflict());
