﻿
	function CheckSuburb() 
	{
        return (document.getElementById('drpSuburb').selectedIndex != 0)
     }
     
     
    //<![CDATA[
    var mapMarkersCtrl;
    var mapMarkers;

    var calMethodCtrl;
    var calMethod;
    var jsonObj;
    var jsonCalMethod;
    
    var map;
    var markers     = [];
    var baseIcon;
    var mgrOptions;
    var mgr;
    var zoom;
    
    var selectedItemIndex           = -1;
    var infoWindowOpenIndex;
    var itemStyles                  = [];       //To store initial styles
    
    //Style sheet classes used in displaying search results
    var gMapSelectedStyle     = "hover";
    var gMapMouseOverStyle    = "hover";
    
    function loadMap() 
    {
		google.load("maps", "2.x");
		google.setOnLoadCallback(initMap);
	}

    function initMap() {
        try
        {
            mapMarkersCtrl  = document.getElementById(hdnMapmarkersID);
            mapMarkers      = mapMarkersCtrl.value;
            
            calMethodCtrl   = document.getElementById(hdnCalcMethodID);
            calMethod       = calMethodCtrl.value;

            if(mapMarkers.length > 0)
            {
                if (google.maps.BrowserIsCompatible()) 
                {
                    setMapVisibility("block");
                    displayMap();
                }
            }
            else
            {
                setMapVisibility("none");
            }
            
            ////////////////////////////Load & Unload functions - Begin///////////////////////////////////////////////

            var nowOnunload = window.onunload;
            window.onunload = function(){
               GUnload;
               if (nowOnunload!=null && typeof(nowOnunload) == 'function')
               {
                    nowOnunload();
               }
            }
            ////////////////////////////Window Load & Unload functions - End///////////////////////////////////////////
        }
        catch(ex)
        {
           alert(ex);
        }
    }
    
    function setMapVisibility(value)
    {
        var mapDiv = document.getElementById("map");
        mapDiv.style.display=value;
    }
    
    function displayMap()
    {
        jsonObj         = Sys.Serialization.JavaScriptSerializer.deserialize(mapMarkers);
        jsonCalMethod   = Sys.Serialization.JavaScriptSerializer.deserialize(calMethod);
        
        map         = new google.maps.Map2(document.getElementById("map"));
    
        var sw      = new google.maps.LatLng(jsonObj.MapParameters.SW.Y,jsonObj.MapParameters.SW.X);
        var ne      = new google.maps.LatLng(jsonObj.MapParameters.NE.Y,jsonObj.MapParameters.NE.X);
        
        var bounds  = new google.maps.LatLngBounds(sw, ne);
        zoom        = map.getBoundsZoomLevel(bounds);

        zoom        = adjustZoomLevel(zoom);

        map.setCenter(new google.maps.LatLng(jsonObj.MapParameters.Centre.Y,jsonObj.MapParameters.Centre.X), zoom);
       
        map.addControl(new google.maps.SmallMapControl());
        //map.addControl(new google.maps.OverviewMapControl()); - Removed because copyright text is overlapping outside the google map.
        map.enableDoubleClickZoom();
        
        //Stopped using Marker Manager since it is giving problem when trying to bring a maker to a visibility region
        //JavaScript error : db is not a function
        //mgrOptions  = { borderPadding: 50, maxZoom: 15, trackMarkers: false };
        //mgr         = new google.maps.MarkerManager(map, mgrOptions);

        //map.addOverlay(new google.maps.Marker(sw));
        //map.addOverlay(new google.maps.Marker(ne));
        //map.addOverlay(new google.maps.Marker(new google.maps.LatLng(jsonObj.MapParameters.Centre.Y,jsonObj.MapParameters.Centre.X)));

        createBaseIcon();
        populateMap();
    }
    
    function adjustZoomLevel(zoom)
    {
        if(jsonObj.MapParameters.CalculationMethod == jsonCalMethod.ByCentreAndPoint)   //If the locality geocode is found
        {
            if(zoom > 1)
            {
                zoom    = zoom - 1;
            }
        }
        else    //If the locality geocode is NOT found
        {
            zoom    = zoom;
        }
        return zoom;
    }

    function createBaseIcon()
    {    
        // Create a base icon for all of our markers that specifies the
        // shadow, icon dimensions, etc.
        baseIcon = new google.maps.Icon();
        baseIcon.shadow = markerShadowImage;
        baseIcon.iconSize = new google.maps.Size(20, 34);
        baseIcon.shadowSize = new google.maps.Size(37, 34);
        baseIcon.iconAnchor = new google.maps.Point(9, 34);
        baseIcon.infoWindowAnchor = new google.maps.Point(9, 2);
        baseIcon.infoShadowAnchor = new google.maps.Point(18, 25);
    }
     
    function populateMap()
    { 
        if( map != undefined )
        { 
            // Lay the map markers down in reverse order so that lower numbers get laid on top of higher numbers
            for(i=jsonObj.CompanyList.length-1;i >= 0;i--)
            {
                var point       = new google.maps.LatLng(jsonObj.CompanyList[i].GeoCode.Y, jsonObj.CompanyList[i].GeoCode.X);
                var tempMarker  = createMarker(point, jsonObj.CompanyList[i]);
                
                map.addOverlay(tempMarker);
                markers.push(tempMarker);
                
                //Storing the already assigned style sheet classes in the repeater
                itemStyles.push(document.getElementById(jsonObj.CompanyList[i].CompanyContainerID).className);
            }
    //        mgr.addMarkers(markers,1,15);
    //        mgr.refresh();
        }
    }
    
    
    // Creates a marker whose info window displays the letter corresponding
    // to the given index.
    function createMarker(point, company) {
        // Create a lettered icon for this point using our icon class
        var icon = new google.maps.Icon(baseIcon);
        icon.image = markerImagePrefix + company.Sequence + '.png';
        var marker = new google.maps.Marker(point, icon);

        var markerIndex = jsonObj.CompanyList.length - company.Sequence;
        google.maps.Event.addListener(marker, "click", function() {
            openInfoWindow(marker, markerIndex);
        });

        google.maps.Event.addListener(marker, "infowindowclose", function() {
            closeInfoWindow(marker, markerIndex);
        });

        google.maps.Event.addListener(marker, "mouseover", function() {
            onMouseOverMarker(marker, markerIndex);
        });

        google.maps.Event.addListener(marker, "mouseout", function() {
            onMouseOutMarker(marker, markerIndex);
        });
        return marker;
    }
    
    function openInfoWindowOnDivClick(sequence)
    {
        var markerIndex = markers.length - sequence;
        if( map != undefined )
        {
            if(markerIndex != selectedItemIndex)
                {
                    openInfoWindow(markers[markerIndex], markerIndex);
                }
            else
                {
                    closeInfoWindow(markers[markerIndex], markerIndex);
                }
        }
    }
    
    //Opening the information window
    function openInfoWindow(marker, markerIndex)
    {
        if( map != undefined )
        {
            //Close the window if one  is already open
            if(selectedItemIndex != -1) closeInfoWindow(markers[selectedItemIndex], selectedItemIndex);
            
            selectedItemIndex = markerIndex;

            map.panTo(marker.getPoint());
            
            //Highlighting the selected contents
            selectItem(marker, markerIndex, gMapSelectedStyle);

            marker.openInfoWindowHtml(generateGoogleBallonContent(markerIndex));
        }
    }
    
    function generateGoogleBallonContent(markerIndex)
    {
        var company = jsonObj.CompanyList[jsonObj.CompanyList.length - markerIndex - 1];
        var displayString;
        displayString = "<div class='googleBalloon'>";
        if (company.Web.length > 0)
        {   
            displayString = displayString + "<a href='" + company.Web + "'>";
            displayString = displayString + "<span class='googleBalloonHeading'>" + company.Name + "</span>";
            displayString = displayString + "</a>";
        }
        else
        {
            displayString = displayString + "<span class='googleBalloonHeading'>" + company.Name + "</span>";
        }
        
        if (company.Address.length > 0)
        {
            if (displayString.length != 0) displayString = displayString + "<br/>" ;
            displayString = displayString + "<span class='googleBalloonAddress'>" + company.Address + "</span>";
        }
        
        if (company.Phone.length > 0)
        {
            if (displayString.length != 0) displayString = displayString + "<br/>" ;
            displayString = displayString + "<span class='googleBalloonPhone'>p: " + company.Phone + "</span>";
        }
        
        displayString = displayString + "</div>";
        return displayString;
    }
    
    //Closing the information window
    function closeInfoWindow(marker, markerIndex)
    {
        if (map != undefined)
        { 
            marker.closeInfoWindow();
            unselectItem(marker, markerIndex, itemStyles[markerIndex]);
            selectedItemIndex = -1;
        }
    }
    
    //To check and see whether current makers is visible
    function isMarkerVisible(markerIndex)
    {
         var currentBounds  = map.getBounds();
         var currentMarker  = markers[markerIndex];
         var markerSW       = currentMarker.getPoint();
         var markerNE       = currentMarker.getPoint();
         
         return currentBounds.containsBounds(new google.maps.LatLngBounds(markerSW, markerNE))
    }   
        
    //to give mouse over effect on the map
    function onMouseOverSequenceImage(sequence)
    {
        if( map != undefined )
        { 
           var marker  = markers[markers.length - sequence];
           onMouseOverMarker(marker, markers.length - sequence);
        }
    }
    
    function onMouseOverMarker(marker, markerIndex)
    {
        if( map != undefined )
        { 
            if(selectedItemIndex != markerIndex)
            {
                selectItem(marker, markerIndex, gMapMouseOverStyle);
            }
        }
    }

    //to give mouse out effect on the map
    function onMouseOutSequenceImage(sequence)
    {
        if( map != undefined )
        { 
            var marker  = markers[markers.length - sequence];
            onMouseOutMarker(marker, markers.length - sequence);
        }
    }
        
    function onMouseOutMarker(marker, markerIndex)
    {
        if( map != undefined )
        { 
            if(selectedItemIndex != markerIndex)  //To prevent the selected item's background color from changing
            {
                unselectItem(marker, markerIndex, itemStyles[markerIndex]);
            }
        }
    }
    
    function selectItem(marker, markerIndex, styleClass)
    {
        var company = jsonObj.CompanyList[jsonObj.CompanyList.length - markerIndex - 1];
        if(isMarkerVisible(markerIndex))
        {
            //Solution  for  'TypeError: c has no properties'.
            //          from http://groups.google.com/group/Google-Maps-API/browse_thread/thread/570f74f55ab543e2/bdef3ad51eba346f?lnk=gst&q=typeerror%3A+c+has+no+properties&rnum=1#
            try { 
                marker.setImage(markerHoverImagePrefix + company.Sequence + '.png');
            } catch (err) { } 
            marker.getIcon().image = markerHoverImagePrefix + company.Sequence + '.png';
        }

        //Highlighting the image
        var img     = document.getElementById(company.ImageControlID);
        img.src     = markerHoverImagePrefix + company.Sequence + '.png';
        
        //Highlighting the contents
        var liItem                     = document.getElementById(company.CompanyContainerID);
        backColorMouseOver             = liItem.className;
        liItem.className               = styleClass;
    }
    
    function unselectItem(marker, markerIndex, styleClass)
    {
        var company = jsonObj.CompanyList[jsonObj.CompanyList.length - markerIndex - 1];
        if(isMarkerVisible(markerIndex))
        {
            try {
                marker.setImage(markerImagePrefix + company.Sequence + '.png');
            } catch (err) { } 
            marker.getIcon().image = markerImagePrefix + company.Sequence + '.png';
        }
        
        //Highlighting the image
        var img     = document.getElementById(company.ImageControlID);
        img.src     = markerImagePrefix + company.Sequence + '.png';
                
        //Highlighting the contents
        var liItem                     = document.getElementById(company.CompanyContainerID);
        backColorMouseOver             = liItem.className;
        liItem.className               = styleClass;
    }
    
    //]]>

