var lstrFonText = "The Wi-Fi signal at this location is subject to the BT Fon owner continuing to make the hotspot available. BT does not have any control over this availability.";
var lintMarkerCount = 0;

function getURLVar(urlVarName) {
    //divide the URL in half at the '?'
    var urlHalves = String(document.location).split('?');
    var urlVarValue = '';
    if(urlHalves[1]){
        //load all the name/value pairs into an array
        var urlVars = urlHalves[1].split('&');
        //loop over the list, and find the specified url variable
        for(i=0; i<=(urlVars.length); i++){
            if(urlVars[i]){
                //load the name/value pair into an array
                var urlVarPair = urlVars[i].split('=');
                if (urlVarPair[0] && urlVarPair[0] == urlVarName) {
                    //I found a variable that matches, load it's value into the return variable
                    urlVarValue = urlVarPair[1];
                }
            }
        }
    }
    return urlVarValue;   
}

function getMarkerIcon() {
    icon = new GIcon();
    icon.image = "images/orange_marker.png";
    icon.iconSize = new GSize(38, 42);
    icon.iconAnchor = new GPoint(19, 42);
    icon.infoWindowAnchor = new GPoint(19, 0);
    return icon;
}
//non-BTOZ marker
function getPartnerIcon() {
    partnerIcon = new GIcon();
    partnerIcon.image = "images/orange_marker.png";
    partnerIcon.iconSize = new GSize(38, 42);
    partnerIcon.iconAnchor = new GPoint(19, 42);
    partnerIcon.infoWindowAnchor = new GPoint(19, 0);
    return partnerIcon;
}

function getDistributionIcon(zoom) {
    zoomIcon = new GIcon();
    iconImage = new Array("marker_zoom.png",30,30);
        
    zoomIcon.image = "http://bt-staging.connect-spot.com/images/"+iconImage[0];
    zoomIcon.iconSize = new GSize(iconImage[1], iconImage[2]);
    zoomIcon.iconAnchor = new GPoint(5, 5);
    zoomIcon.infoWindowAnchor = new GPoint(5, 5);
    return zoomIcon;
}

// Z-Index functions for different marker types

function order_wc(marker,b) {
    return 1050
}
        
function order_bt(marker,b) {
    return 1000
}
        
function order_partner(marker,b) {
    return 100;
}


function createClickableMarker(point,icon,site_id,site_name) {
    var markerOptions = {icon: icon, title: site_name};
    var marker = new GMarker(point,markerOptions);
    GEvent.addListener(marker,"click",function() {
        document.location.href='details.php?site_id=' + site_id;
    });
    return marker;
}

function getOrangeCount(minLon,maxLon,minLat,maxLat,zoom) {
    siteCount = 0;
    latDiff=maxLat-minLat;
    lonDiff=maxLon-minLon;
    
    var newCenter = myGoogleMap.getCenter();
    var lat = newCenter.lat();
    var lon = newCenter.lng();
    
    var urlParams = '?zoom='+zoom+'&minLon='+minLon+'&maxLon='+maxLon+'&minLat='+minLat+'&maxLat='+maxLat+'&count=1';
        
    var xmlURL = 'getOrangeDistribution.php'+urlParams.toString();
    //prompt('url:', xmlURL);
    
    GDownloadUrl(xmlURL, function(data, responseCode){
        //alert(data);
        siteCount = data;
        myGoogleMap.clearOverlays();
        if (siteCount>500) {
            getOrangeDistribution(minLon,maxLon,minLat,maxLat,zoom);
        } else {
            getMarkerList(lat,lon,zoom,true,false);
        }
        
    });
    //alert(siteCount);
    //return siteCount;
}

function getOrangeDistribution(minLon,maxLon,minLat,maxLat,zoom) {
    siteCount = 0;
    latDiff=maxLat-minLat;
    lonDiff=maxLon-minLon;
    //myGoogleMap.clearOverlays();
    var urlParams = '?zoom='+zoom+'&minLon='+minLon+'&maxLon='+maxLon+'&minLat='+minLat+'&maxLat='+maxLat;
        
    //confirm(urlParams);
        
    var xmlURL = 'getOrangeDistribution.php'+urlParams.toString();
    //prompt('url',xmlURL);

    GDownloadUrl(xmlURL, function (data, responseCode) {
        //alert(data);
        var xml = GXml.parse(data);
        var wcmarkers = xml.documentElement.getElementsByTagName("marker");
        var siteCount2Tag = xml.documentElement.getElementsByTagName("site_count");
        
        var siteCount = parseInt(siteCount2Tag[0].getAttribute("sCount"));
        //alert(siteCount);
        if (siteCount>500) {
            //see if clearing overlays here helps prevent backing up
            myGoogleMap.clearOverlays();
            for (var i=0; i<wcmarkers.length; i++) {
                pointLat = parseFloat(wcmarkers[i].getAttribute("latitude"));
                pointLon = parseFloat(wcmarkers[i].getAttribute("longitude"));
                fonCount = parseFloat(wcmarkers[i].getAttribute("fonCount"));
                var point = new GLatLng(pointLat, pointLon);
                var rad = 1200;
            
                var scale = 1;
                if (zoom<3) {
                    var scale = 120;
                }
                if (zoom>=3 && zoom<5) {
                    var scale = 60;
                }
                if (zoom>=5 && zoom<7) {
                    var scale = 15;
                }
                if (zoom>=7 && zoom<9) {
                    var scale = 5;
                }
                if (zoom>=9 && zoom<13) {
                    //var rad=200;
                    var scale=0.5;
                }
                if(zoom>=13) {
                    var scale=0.15;
                }
                var markerRadius = rad * scale;
                myGoogleMap.addOverlay(createOrangeDistroMarker(point,markerRadius));
            }
            //document.getElementById('mapdata').innerHTML = "You can find <strong>"+siteCount+" hotspots</strong> within the current map view";
        } else {
            getMarkerList(minLon,maxLon,minLat,maxLat,zoom);
        }
            
    });
}

function createOrangeDistroMarker(point,radius) {      
    var marker = new EInsert(point,'images/gradient_marker.png',new GSize(radius,radius),14);
    return marker;
}


function getSiteDistribution(minLon,maxLon,minLat,maxLat,zoom,showPartners) {
    siteCount = 0;
    latDiff=maxLat-minLat;
    lonDiff=maxLon-minLon;
    //myGoogleMap.clearOverlays();
    var urlParams = '?zoom='+zoom+'&minLon='+minLon+'&maxLon='+maxLon+'&minLat='+minLat+'&maxLat='+maxLat;
    if (showPartners) {
        urlParams += '&partners=1';
    } else {
        urlParams += '&partners=0';
    }
    
    //confirm(urlParams);
    //location.href='getMarkerDistribution.php'+urlParams.toString()+'&wc=0';
        
    var xmlURL = 'getMarkerDistribution.php'+urlParams.toString()+'&wc=0';
    var xmlURL_wc='getMarkerDistribution.php'+urlParams.toString()+'&wc=1';
    
    GDownloadUrl(xmlURL, function (data, responseCode) {
        //alert(data);
        var xml = GXml.parse(data);
        var markers = xml.documentElement.getElementsByTagName("marker");
        var BTMarkers = Array();
        var PartnerMarkers = Array();
        var ZoomMarkers = Array();
        var x=0;
        var y=0;
        var z=0;
        var siteCountTag = xml.documentElement.getElementsByTagName("site_count");
        //alert(siteCountTag[0].getAttribute('sCount'));
        siteCount += parseInt(siteCountTag[0].getAttribute("sCount"));
        //alert(siteCount);
            
        for (var i=0; i<markers.length; i++) {
            pointLat = parseFloat(markers[i].getAttribute("latitude"));
            pointLon = parseFloat(markers[i].getAttribute("longitude"));
                
            var point = (new GLatLng(pointLat, pointLon));
            if (zoom<14) {
                var nextZoom = zoom+4;
                ZoomMarkers[z] = createZoomMarker(point,getDistributionIcon(zoom),nextZoom);
                z++;
            } else {
                operator = parseFloat(markers[i].getAttribute("operator_uid"));
                site_name = new String(markers[i].getAttribute("site_name"));
                site_namebr = decodeURIComponent(site_name);
            
                if (operator==6) {
                    BTMarkers[x] = createDetailMarker(point,getMarkerIcon(),markers[i].getAttribute("id"),site_namebr,operator);
                    x++;
                } else {
                    PartnerMarkers[y] = createDetailMarker(point,getPartnerIcon(),markers[i].getAttribute("id"),site_namebr,operator);
                    y++;
                }
            }
                                
            //now render the Partner markers before the BT ones so that BT come out on top:
            if (showPartners) {
                for (y in PartnerMarkers) {
                    myGoogleMap.addOverlay(PartnerMarkers[y]);
                }
            }
            for (x in BTMarkers) {
                myGoogleMap.addOverlay(BTMarkers[x]);
            }
            for (z in ZoomMarkers) {
                myGoogleMap.addOverlay(ZoomMarkers[z]);
            }
        }
        //document.getElementById('mapdata').innerHTML = "You can find <strong>"+siteCount+" hotspots</strong> within the current map view";
    });
}

function getMarkerList(lat,lon,zoom,showPartnerIcons,showWCIcons) {
    var ozCount = 0;
    
    nearbySiteList = [];
    myGoogleMap.clearOverlays();
        
    //limit the results to those within the bounds of the map:

    var bounds = myGoogleMap.getBounds();
    var southWest = bounds.getSouthWest();
    var northEast = bounds.getNorthEast();
    var lngSpan = northEast.lng() - southWest.lng();
    var latSpan = northEast.lat() - southWest.lat();

    var minLat = southWest.lat();
    var maxLat = northEast.lat();
    var minLon = southWest.lng();
    var maxLon = northEast.lng();
    
    //alert("minlat: " + minLat + " maxLat: " + maxLat + " minLon: " + minLon + " maxLon: " + maxLon);

    var xmlURL = 'getMarkerList.php?minLon=' + minLon + '&maxLon=' + maxLon + '&minLat=' + minLat + '&maxLat=' + maxLat + '&zoom=' + zoom + '&wc=0';
        
    //location.href=xmlURL;
        
    var BTMarkers = Array();
    var PartnerMarkers = Array();
    var x=0;
    var y=0;
    
        
    GDownloadUrl(xmlURL, function (data, responseCode) {
        var xml = GXml.parse(data);
        //alert(data);
        var markers = xml.documentElement.getElementsByTagName("marker");
        var siteCountTag = xml.documentElement.getElementsByTagName("site_count");
        //alert(siteCountTag[0].getAttribute('sCount'));
        siteCount = parseInt(siteCountTag[0].getAttribute("sCount"));
        
        //alert(markers.length);
        
        var markerCount = markers.length;
        if (getURLVar("local")==1) {
            markerCount=10;
        }
        
        for (var i=0; i<markerCount; i++) {
            pointLat = parseFloat(markers[i].getAttribute("latitude"));
            pointLon = parseFloat(markers[i].getAttribute("longitude"));
            operator = parseFloat(markers[i].getAttribute("operator_uid"));
            siteType = parseFloat(markers[i].getAttribute("site_type_uid"));
            site_name = new String(markers[i].getAttribute("site_name"));
            site_name = decodeURIComponent(site_name);
            site_address = new String(markers[i].getAttribute("site_address"));
            site_ssid = new String(markers[i].getAttribute("site_ssid"));
            //site_namebr = decodeURIComponent(site_name);
            radius = parseInt(markers[i].getAttribute("ap_radius"));
            
            //alert(pointLat);

            if (pointLat > minLat && pointLat < maxLat && pointLon > minLon && pointLon < maxLon) {
                var point = (new GLatLng(parseFloat(markers[i].getAttribute("latitude")), parseFloat(markers[i].getAttribute("longitude"))));
                
                if (operator==126) {
                    if ((siteType==7849 || siteType==7844) && showWCIcons) {
                        if (isNaN(radius)) {
                            thisRadius=400;
                        } else {
                            thisRadius = (radius/150)*400;
                        }
                        myGoogleMap.addOverlay(createWCMarker(point,thisRadius));
                    } else {
                        BTMarkers[x] = createClickableMarker(point,getMarkerIcon(),markers[i].getAttribute("id"),site_name);
                        x++;
                    }
                } else {
                    //alert("adding partner Marker");
                    PartnerMarkers[y] = createClickableMarker(point,getPartnerIcon(),markers[i].getAttribute("id"),site_name);
                    y++;
                }
                //now render the icons to the screen
                if (showPartnerIcons) {
                    for(y in PartnerMarkers) {
                        myGoogleMap.addOverlay(PartnerMarkers[y]);
                    }
                }
                if (x>0) {
                    for(x in BTMarkers) {
                        myGoogleMap.addOverlay(BTMarkers[x]);
                    }
                }
            }
        }
        //lintMarkerCount += ozCount;
        //document.getElementById('mapdata').innerHTML = 'You can find '+lintMarkerCount+' hotspots within the current map view';
    });
}




function createWCMarker(point,radius) {      
    var marker = new EInsert(point,'http://btopenzone.hotspot-directory.com/images/wc_marker_gradient.png',new GSize(radius,radius),17);
    return marker;
}

function createDetailMarker(point,icon,site_id, site_name, operator) {
    if (operator==6) {
        var markerOptions = {icon: icon, title: site_name, ZIndexProcess:order_bt};
    } else {
        var markerOptions = {icon: icon, title: site_name, ZIndexProcess:order_partner};
    }
    var marker = new GMarker(point,markerOptions);
        
    GEvent.addListener(marker,"click",function() {
        document.location.href='details.php?site_id=' + site_id;
    });
    return marker;
}

function createZoomMarker(point,icon,zoomTo) {
    var marker = new GMarker(point,icon);
    GEvent.addListener(marker,"click",function() {
        myGoogleMap.setCenter(point,zoomTo);
    });
    return marker;
}

function setupLocalMap() {
    moveEndEvent = GEvent.addListener(myGoogleMap,"moveend", function() {
        myGoogleMap.clearOverlays();
        var newCenter = myGoogleMap.getCenter();
        lat = newCenter.lat();
        lon = newCenter.lng();
        zoom = myGoogleMap.getZoom();
        
        bounds = myGoogleMap.getBounds();
        southWest = bounds.getSouthWest();
        northEast = bounds.getNorthEast();
        
        getOrangeDistribution(southWest.lng(),northEast.lng(),southWest.lat(),northEast.lat(),zoom);
        //getMarkerList(lat,lon,zoom,true,false);
    });
    var newCenter = myGoogleMap.getCenter();
    lat = newCenter.lat();
    lon = newCenter.lng();
    zoom = myGoogleMap.getZoom();
    
    bounds = myGoogleMap.getBounds();
    southWest = bounds.getSouthWest();
    northEast = bounds.getNorthEast();
    
    getOrangeDistribution(southWest.lng(),northEast.lng(),southWest.lat(),northEast.lat(),zoom);
    //getMarkerList(lat,lon,zoom,true,false);
}

function setupDetailMap() {
    moveEndEvent = GEvent.addListener(myGoogleMap,"moveend", function() {
    });
    var newCenter = myGoogleMap.getCenter();
    lat = newCenter.lat();
    lon = newCenter.lng();
    zoom = myGoogleMap.getZoom();
    getMarkerList(lat,lon,zoom,true,false);
}

function setupSearchMap() {
    moveEndEvent = GEvent.addListener(myGoogleMap,"moveend", function() {
        zoom = myGoogleMap.getZoom();
        
        bounds = myGoogleMap.getBounds();
        southWest = bounds.getSouthWest();
        northEast = bounds.getNorthEast();
        lonSpan = northEast.lng() - southWest.lng();
        latSpan = northEast.lat() - southWest.lat();
        
        myGoogleMap.clearOverlays();
        if (zoom==1) {
            addOverlay();
        } else {
            getOrangeDistribution(southWest.lng(),northEast.lng(),southWest.lat(),northEast.lat(),zoom);
        }
    });
    
    zoom = myGoogleMap.getZoom();
        
    bounds = myGoogleMap.getBounds();
    southWest = bounds.getSouthWest();
    northEast = bounds.getNorthEast();
    lonSpan = northEast.lng() - southWest.lng();
    latSpan = northEast.lat() - southWest.lat();
    
    myGoogleMap.clearOverlays();
    if (zoom==1) {
        addOverlay();
    } else {
        getOrangeDistribution(southWest.lng(),northEast.lng(),southWest.lat(),northEast.lat(),zoom);
    }
}

function setupSearchMap2() {
    zoom = myGoogleMap.getZoom();
        
    bounds = myGoogleMap.getBounds();
    southWest = bounds.getSouthWest();
    northEast = bounds.getNorthEast();
    lonSpan = northEast.lng() - southWest.lng();
    latSpan = northEast.lat() - southWest.lat();
    
    //myGoogleMap.clearOverlays();
    //getOrangeDistribution(southWest.lng(),northEast.lng(),southWest.lat(),northEast.lat(),zoom);
    addOverlay();
}
    
function addOverlay() {
      if (GBrowserIsCompatible()) {
      
        // Set up the copyright information
        // Each image used should indicate its copyright permissions
        var copyright = new GCopyright(1,
            new GLatLngBounds(new GLatLng(-90, -180), 
            new GLatLng(90, 180)),
            0,
            "©2008 Connection Services");
        var copyrightCollection = new GCopyrightCollection("Orange");
        copyrightCollection.addCopyright(copyright);
        
        var tileLayerOverlay = new GTileLayerOverlay(  
            new GTileLayer(copyright, 1, 1, {    
                tileUrlTemplate: 'http://businesseverywheremnc.coverage-finder.com/images/mapOverlay/oft_{Z}_{X}_{Y}.gif',     
                isPng:false,
                opacity:0.5
            })
        );
        myGoogleMap.addOverlay(tileLayerOverlay);
      }
    }
