﻿
// Global Variables.    
var ucDirections = null;

(function($) {

    window["load_AutoOwners_AgencyLocator_ucDirections"] = function(obj) {
        
        // Variables.
        ucDirections = obj;
        ucDirections.PrintLink = null;
        ucDirections.PrintMediaLink = null;
        ucDirections.ShowingPrintView = false;
        
        
        $.Artemis.InputMask.Watermark($("input[id$='txtFromAddress']"), { 
            initialValue: "Address, City, State/Province or Zip Code",
            setInitialValue: false
        });
        
        
        // Attach Event Handlers.
        $("input[id$='txtFromAddress']").keydown(function(event) {
            if (event.which == 13)
            {
                event.preventDefault();
                event.stopPropagation();
                
                $("#btnGetDirections").click();
            }
        }).blur(function(event) {
            ucDirections.validateAddressPanel();
        });
        
        
        $("a.close_directions").click(function(event) {
            event.preventDefault();
            
            $("#directions_popup").fadeOut("medium");
            $("input[id$='txtFromAddress']").val("").blur();
            $("h2.agent_count").show();
            
            if (ucSearchResultsMap)
            {
                ucSearchResultsMap.removeDirections();
                ucSearchResultsMap.enableMap();
            }
        });
        
        
        $("a.print").click(function(event) {
            event.preventDefault();
            
            if (typeof ucDirections.ShowingPrintView !== "undefined" && ucDirections.ShowingPrintView === true)
            {
                window.print();
            }
            else
            {
                ucDirections.showPrintView();
            }
        });
        
        
        $("a.close_print").click(function(event) {
            event.preventDefault();
            ucDirections.hidePrintView();
        });
        
        
        $("#btnGetDirections").click(function(event) { 
            event.preventDefault();
            
            if (ucDirections.validateAddressPanel() && ucSearchResultsMap)
            {
                obj.RenderDirections($("input[id$='txtFromAddress']").val(), ucSearchResultsMap.SelectedAgency.ID, {
                    autoUpdateHtml: true,
                    onSuccess: function(result) { 
                        _rts_set_conversion('0.00', 'Agency Locator - Get Directions');
                        ucDirections.showDirectionsOnMap(); 
                    }
                });
            }
        });
        
        
        if (typeof ValidatorUpdateDisplay === "function") 
        {
            $(".address_panel .validator").each(function(i) {
                this.isvalid = true;
                ValidatorUpdateDisplay(this);
            });
        }
        
        
        // Functions.
        ucDirections.validateAddressPanel = function() {
            if (typeof Page_ClientValidate === "function" && Page_ClientValidate("Directions"))
            {
                $(".address_panel .validator").each(function(i) {
                    this.isvalid = true;
                    ValidatorUpdateDisplay(this);
                });
                
                return true;
            }
            else
            {
                $(".address_panel .validator").each(function(i) {
                    this.isvalid = false;
                    ValidatorUpdateDisplay(this);
                });
                
                return false;
            }
        };
        
        
        ucDirections.createPrintCssLink = function() {
            var link = document.createElement("link");
            
            link.setAttribute("id", "print_link");
            link.setAttribute("rel", "stylesheet");
            link.setAttribute("type", "text/css");
            link.setAttribute("href", "print.css");
            
            return link;
        };
        
        
        ucDirections.createPrintMediaCssLink = function() {
            var link = document.createElement("link");
            
            link.setAttribute("id", "print_media_link");
            link.setAttribute("rel", "stylesheet");
            link.setAttribute("type", "text/css");
            link.setAttribute("href", "printmedia.css");
            link.setAttribute("media", "print");
            
            return link;
        };
        
        
        ucDirections.showPrintView = function() {
            if (!ucDirections.PrintLink)
            {
                ucDirections.PrintLink = ucDirections.createPrintCssLink();
            }
            
            if (!ucDirections.PrintMediaLink)
            {
                ucDirections.PrintMediaLink = ucDirections.createPrintMediaCssLink();
            }
            
            ucDirections.ShowingPrintView = true;
            
            $("head")[0].appendChild(ucDirections.PrintLink);
            $("head")[0].appendChild(ucDirections.PrintMediaLink);
            $("html,body").scrollTop(0);
            
            ucDirections.detachStepItemHandlers();
            
            if (ucSearchResultsMap)
            {
                ucSearchResultsMap.resetSize(648, 552);
                ucSearchResultsMap.centerDirections();
                ucSearchResultsMap.disableMap();
            }
        };
        
        
        ucDirections.hidePrintView = function() {
            var head = $("head")[0];
            var siteStyleSheetClone = $("link[id$='siteStyleSheet']")[0].cloneNode(false);
            
            head.removeChild($("link[id$='siteStyleSheet']")[0]);
            
            if (ucDirections.PrintLink)
            {
                head.removeChild(ucDirections.PrintLink);
            }
            
            if (ucDirections.PrintMediaLink)
            {
                head.removeChild(ucDirections.PrintMediaLink);
            }
            
            ucDirections.PrintLink = null;
            ucDirections.PrintMediaLink = null;
            
            head.appendChild(siteStyleSheetClone);
            
            ucDirections.ShowingPrintView = false;
            
            ucDirections.attachStepItemHandlers();
            
            if (ucSearchResultsMap)
            {
                ucSearchResultsMap.resetSize(433, 552);
                ucSearchResultsMap.enableMap();
                ucSearchResultsMap.detachMapEvents();
            }
        };
        
        
        ucDirections.attachStepItemHandlers = function() {
            $("#step_list li").mouseenter(function(event) {
                var self = $(this);
                
                if (self[0].Shape)
                {
                    self[0].Shape.Show();
                }
            }).mouseleave(function(event) {
                var self = $(this);
                
                if (self[0].Shape)
                {
                    self[0].Shape.Hide();
                }
            });
        };
        
        
        ucDirections.detachStepItemHandlers = function() {
            $("#step_list li").unbind();
        };
        
        
        ucDirections.showDirectionsOnMap = function() {
            var directions = obj.getState()["Directions"];
            
            if (ucSearchResultsMap && directions)
            {
                ucSearchResultsMap.showDirections(directions);
                ucDirections.attachStepItemHandlers();
            }
        };
    };
    
})(jQuery.noConflict());
