﻿// Contains actions to execute on document ready on every page of the site
(function($) {
    if (!$) { return; }

    // Handle document ready
    $(function() {

        // Set up lightbox for image gallery
        $('#gallery a').lightBox();

        // Set up flash headers
        replaceFieldsetHeaders();
        setupFlashHeaders();

        // Set submenu links to the current page to active
        setCurrentPageLinksActive("#nav");

        // Set up map
        setupMap();

        // Change the cursor to a wait cursor when a results grid link is clicked
        $(".resultsGrid a").live("click", function() {
            $(this).closest(".resultsGrid").add(this).css("cursor", "wait");
        });

        // Microsoft Ajax stuff
        if (typeof (Sys) != "undefined") {
            var prm = Sys.WebForms.PageRequestManager.getInstance();
            if (prm) {

                // Handle the begin request event, and set the updatepanel's cursor to wait to 
                prm.add_beginRequest(function(sender, args) {
                    var $updatePanel = $(args.get_postBackElement()).closest(".updatePanelContent");
                    //$updatePanel.add($updatePanel.find("a, input, select, textarea")).css("cursor", "wait");
                    $updatePanel.append($("<div />").addClass("loading"));
                });

                // Handle page loaded event, and set window position 
                // to the top of the first updated updatepanel
                prm.add_pageLoaded(function(sender, args) {
                    var panels = args.get_panelsUpdated();
                    if (panels.length) {
                        var offset = $(panels[0]).offset();
                        window.scrollTo(offset.left, offset.top);
                    }
                    if (replaceFieldsetHeaders)
                        replaceFieldsetHeaders();
                });
            }
        }
    });

    function replaceFieldsetHeaders() {
        $("fieldset h3:first-child")
            .css({ visiblity: "hidden" })
            .each(function(num) {
                var element = this;
                var $element = $(element);
                var id = element.id = (element.id ? element.id : "fieldset-header-" + num);
                var scale = $element.hasClass("scale");

                swfobject.embedSWF(
                    "/flash/fieldset-header.swf",
                    id,
                    "100%", $element.height() + "px",
                    "9.0.0", "expressInstall.swf",
                    { thetext: $element.text() },
                    {
                        menu: "false",
                        wmode: "transparent",
                        scale: scale ? "scale" : "noScale",
                        salign: "TL"
                    },
                    { id: null, "class": "header" }
                );
            });
    }

    function setupFlashHeaders(context) {
        $(".flashHeader", context).each(function() {
            var element = this;
            var $element = $(element);

            swfobject.embedSWF(
                "/graphics/profileheader.swf",
                element.id,
                $element.width(),
                $element.height(),
                "9.0.0",
                "expressInstall.swf",
                { thetext: $element.text().toUpperCase() },
                { menu: "false", wmode: "transparent" },
                { id: "edittime", name: "edittime" }
            );
        });
    }

    function setCurrentPageLinksActive(context, queryStringParameters) {
        var relativeUrl = document.location.href.replace(/^.*\/{2}[^\/]+/, '');
        if (relativeUrl == "") {
            return;
        }
        $('a[href=' + relativeUrl + ']', context).addClass('active');
    }

    function setupMap() {
        var $map = $("#map.map,#map div.map");
        if ($map.length != 1 || (typeof map_mapPoints == "undefined" && typeof map_userPoint == "undefined")) {
            return;
        }
        if (typeof GMap == "undefined") {
            $map.html('<span style="color:red;">Error: Google Maps API is not defined.</span>');
            return;
        }

        var map = new GMap($map[0]);
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());

        // Add profile markers
        $.each(map_mapPoints, function() {
            var p = this;
            var marker = new GMarker(new GLatLng(p.lat, p.lon), { zIndex: 1 });
            var html = '<div id="descrip" style="width:250px;">' +
                            '<span class="MapFont">' +
                                '<img src="' + p.imageUrl + '" border="0" /><br />' +
                                p.desc + '<br />' +
                                '<a class="mapfont" href="' + p.linkUrl + '">View Profile</a>' +
                            '</span>' +
                            '<br style="clear:both" />' +
                        '</div>';
            GEvent.addListener(marker, 'click', function() { marker.openInfoWindowHtml(html); });
            map.addOverlay(marker);
        });

        // Add user marker
        if (typeof map_userPoint != "undefined") {
            var userLatLng = new GLatLng(map_userPoint.lat, map_userPoint.lon);
            var userIcon = new GIcon(G_DEFAULT_ICON);
            userIcon.image = "http://www.google.com/mapfiles/marker_green.png";
            userIcon.iconSize = new GSize(20, 34);
            var userMarker = new GMarker(userLatLng, { icon: userIcon });
            //            var userMarkerHtml = '<span class="MapFont">You are ' + map_userPoint.postalCode + '</span>';
            //            GEvent.addListener(userMarker, 'click', function() { userMarker.openInfoWindowHtml(userMarkerHtml); });
            map.addOverlay(userMarker);
            var zoomLevel = !isNaN(map_zoomLevel) && map_zoomLevel > -1 ? map_zoomLevel : 7;
            map.centerAndZoom(userLatLng, zoomLevel);
        }
    }

})(jQuery);