/*-------------------------------------------------------------





---------------------------------------------------------------*/



// area-map-coverage
    //<![CDATA[

    // config vars
    var radius_distance = 20; // in miles
    var distance_allowance = 2; // in miles: Distance outside of the radius, that will be considered
    var map_width  = "585px";
    var map_height = "500px";
    var area_colour = "#336699";
    var home_long  = 51.50284595394508;  
    var home_lat   = -0.5420916442871094;
    var box_info = "<strong>24HourGlass - Langley Glazing</strong>";
    // end config vars

    var p;
    var map;
    var geocoder;
    var user_marker;

    // Create our home marker icon
    var blueIcon = new GIcon(G_DEFAULT_ICON);
    blueIcon.image = "http://www.google.com/intl/en_us/mapfiles/ms/micons/blue-dot.png";
    // Set up our GMarkerOptions object
    blueMarkerOptions = { icon:blueIcon };
    blueIcon.iconSize = new GSize(32, 32);

    function load() {
        if (GBrowserIsCompatible()) {
            map = new GMap2(document.getElementById("map"));
            map.addControl(new GScaleControl());
            map.addControl(new GMapTypeControl());
			map.addControl(new GLargeMapControl());
            p = new GLatLng(home_long,home_lat);
            geocoder = new GClientGeocoder();
            geocoder.setBaseCountryCode('UK')
            map.setCenter(p, 9);
			country = "UK";
	

            // create the home marker
            var marker = new GMarker(p, blueMarkerOptions);
            map.addOverlay(marker);
            map.openInfoWindowHtml(p, box_info);

            // add listener to home marker
            GEvent.addListener(marker, "click", function() {
                map.openInfoWindowHtml(p, box_info);
            });

            // create coverage area overlay
            draw_coverage_area();
        }
    }


    function draw_coverage_area() {
        var polyPoints = Array();

        var mapNormalProj = G_NORMAL_MAP.getProjection();
        var mapZoom = map.getZoom();
        var clickedPixel = mapNormalProj.fromLatLngToPixel(p, mapZoom);
        displaced_pixel = mapNormalProj.fromLatLngToPixel(getRadius(radius_distance,p),  mapZoom);


        var polySmallRadius = clickedPixel.x-displaced_pixel.x;
        var polyNumSides = 360;
        var polySideLength = 1;

        for (var a = 0; a<(polyNumSides+1); a++) {
            var aRad = polySideLength*a*(Math.PI/180);
            var polyRadius = polySmallRadius; 
            var pixelX = clickedPixel.x + polyRadius * Math.cos(aRad);
            var pixelY = clickedPixel.y + polyRadius * Math.sin(aRad);
            var polyPixel = new GPoint(pixelX,pixelY);
            var polyPoint = mapNormalProj.fromPixelToLatLng(polyPixel,mapZoom);
            polyPoints.push(polyPoint);
        }

        var polygon = new GPolygon(polyPoints,"#000000",2,.5,area_colour,.5);
        map.addOverlay(polygon);
     }

    function clear_user_point() {
        if (user_marker) {
            map.removeOverlay(user_marker);
        }
    }

    function getRadius( miles, center ){
         var point = center;
         var lat = point.lat() ;
         var lng = point.lng() ;
         var d2r = Math.PI/180 ;                // degrees to radians
         var r2d = 180/Math.PI ;                // radians to degrees
         var Clat = (miles/3963) * r2d ;       //  using 3963 as earth's radius
         var Clng = Clat/Math.cos(lat*d2r);
         Clng = lng + (Clng * Math.cos(0)) ;
         Clat = lat + (Clat * Math.sin(0)) ;
         return(new GLatLng(Clat,Clng)) ;
     } 


     function addAddressToMap(response) {
        if (!response || response.Status.code != 200) {
            alert("Sorry, we were unable to geocode that address");
         } else {
            clear_user_point();
            place = response.Placemark[0];
            user_point = new GLatLng(place.Point.coordinates[1],
                            place.Point.coordinates[0]);
            user_marker = new GMarker(user_point);
            map.addOverlay(user_marker);
          map.panTo(user_point);
          total_distance_away = ((LatLon.distHaversine(p.lat(),p.lng(),user_point.lat(),user_point.lng()).toPrecision(4))*1000);

          if (total_distance_away <= radius_distance) {
              // within the radius
              var outcome = '<strong style="color:#00a650;">within our coverage area</strong>';
              //alert('We can help you, you are '+total_distance_away+' miles away');
          } else if (total_distance_away <= (radius_distance+distance_allowance)) {
              // will be considered
              var outcome = '<strong style="color:#f68e56;">just outside of our coverage area.</strong><br/>Please contact us to double-check';
              //alert('You are just outside our coverage area: '+total_distance_away+' miles away., contact us etc...');
          } else {
              // too far out
              var outcome = '<strong style="color:#f00;">outside of our coverage area.</strong>';
              //alert('Sorry, you;re too far out! '+total_distance_away+' miles away');
          }

           // feedback info box
            user_marker.openInfoWindowHtml('<strong>Distance: '+ total_distance_away.toPrecision(2) + ' miles</strong>' + '<br />Your address:<br /> '+ place.address + '<br>  appears to be '+ outcome);
            //'<b>Country code:</b> ' + place.AddressDetails.Country.CountryNameCode


        }
    }

    function showLocation() {
        var address = document.forms[0].q.value;
        geocoder.getLocations(address, addAddressToMap);
    }


    function findLocation(address) {
        document.forms[0].q.value = address;
        showLocation();
    }


    // functions required to calculate distance between two points
    Number.prototype.toRad=function(){
        return this*Math.PI/180;
    }

    function LatLon(lat,lon){
        this.lat=lat;
        this.lon=lon;
    }
    
    LatLon.distHaversine=function(lat1,lon1,lat2,lon2){
        var R=6371;
        var dLat=(lat2-lat1).toRad();
        var dLon=(lon2-lon1).toRad();
        lat1=lat1.toRad(),lat2=lat2.toRad();
        var a=Math.sin(dLat/2)*Math.sin(dLat/2)+
        Math.cos(lat1)*Math.cos(lat2)*
        Math.sin(dLon/2)*Math.sin(dLon/2);
        var c=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));
        var d=R*c;
        // return the distance in miles, please!
        return d/1609.344;
    }

    //]]>
