function leftpad(lintValue,lstrPadChar,lintFinalSize) {
    
    while(lintValue.length<lintFinalSize) {
        lintValue = lstrPadChar+lintValue;
    }
        return lintValue;
}

function isNumeric(pText) {
    var validChars = "01234565789";
    var isNumber = true;
    var Char;
    
    for(i=0; i<pText.length && isNumber == true; i++) {
        Char = pText.charAt(i);
        if (validChars.indexOf(Char) == -1) {
            isNumber = false;
        }
    }
    
    return isNumber;
}

function getMarkerIcon(imageUID) {
    imagename = leftpad(imageUID,"0",3);
    //alert(imagename);
    icon = new GIcon();
    icon.image = "images/34x34/"+imagename+".png";
    icon.iconSize = new GSize(34, 34);
    //icon.shadowSize = new GSize(22, 15);
    icon.iconAnchor = new GPoint(0, 0)
    icon.infoWindowAnchor = new GPoint(0, 0);
    return icon;
}
//non-ORANGE marker
function getOrangeIcon() {
    partnerIcon = new GIcon();
    partnerIcon.image = "images/wifi-marker.2.png";
    partnerIcon.shadow = "images/wifi-marker-shadow.2.png";
    //partnerIcon.image = "http://btopenzone.hotspot-directory.com/images/btopenzone_counter_blue.png";
    //partnerIcon.shadow = "http://btopenzone.hotspot-directory.com/images/btopenzone_counter_shadow.png";
    partnerIcon.iconSize = new GSize(46, 46);
    partnerIcon.shadowSize = new GSize(46, 46);
    partnerIcon.iconAnchor = new GPoint(10, 46);
    partnerIcon.infoWindowAnchor = new GPoint(0, 0);
    return partnerIcon;
}


// Z-Index functions for different marker types

function order_top100(marker,b) {
    return Math.abs(GOverlay.getZIndex(marker.getPoint().lat()) + marker.importance*1000000);
}

function order_other(marker,b) {
    return 1;
}


function createClickableMarker(point,icon,site_id,site_name) {
    var markerOptions = {icon: icon, title: site_name, zIndexProcess:order_top100};
    var marker = new GMarker(point,markerOptions);
    marker.importance=2;
    GEvent.addListener(marker,"click",function() {
        document.location.href='details.php?radGrouping='+ document.getElementById('radAll').checked +'&site_id=' + site_id;
    });
    return marker;
}

function createOrangeMarker(point,icon,site_id,site_name) {
    var markerOptions = {icon: icon, title: site_name, zIndexProcess:order_other};
    var marker = new GMarker(point,markerOptions);
    marker.importance = 1;
    return marker;
}

function createClickableOrangeMarker(point,icon,site_id,site_name) {
    var markerOptions = {icon: icon, title: site_name, zIndexProcess:order_other};
    var marker = new GMarker(point,markerOptions);
    marker.importance = 1;
    GEvent.addListener(marker,"click",function() {
        document.location.href='details.php?radGrouping='+ document.getElementById('radAll').checked +'&site_id=o' + site_id;
    });
    return marker;
}

function getMarkerList(lat,lon,zoom,showPartnerIcons,showWCIcons) {
    
    refreshtop100drawer(lat,lon);

    nearbySiteList = [];
    //myGoogleMap.clearOverlays();
        
    //limit the results to those within the bounds of the map:
    //alert (myGoogleMap.getZoom());
    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);
    if (showPartnerIcons) {
        partners = 1;
    } else {
        partners = 0;    
    }

    var xmlURL = 'getMarkerList.php?minLon=' + minLon + '&maxLon=' + maxLon + '&minLat=' + minLat + '&maxLat=' + maxLat + '&zoom=' + zoom + '&partners=' + partners;
        
    //location.href=xmlURL;
    //prompt("URL",xmlURL);
        
    var OrangeMarkers = 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");

        //alert(markers.length);
        for (var i=0; i<markers.length; i++) {
            pointLat = parseFloat(markers[i].getAttribute("latitude"));
            pointLon = parseFloat(markers[i].getAttribute("longitude"));
            operator = parseFloat(markers[i].getAttribute("operator_uid"));
            siteType = new String(markers[i].getAttribute("site_type_uid"));
            site_name = new String(markers[i].getAttribute("site_name"));
            image_uid = new String(markers[i].getAttribute("img_id"));
            //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 (siteType=='top100') {
                    //alert('adding top100 marker');
                    //myGoogleMap.addOverlay(createWCMarker(point,thisRadius));
                    OrangeMarkers[x] = createClickableMarker(point,getMarkerIcon(image_uid),markers[i].getAttribute("id"),site_name);
                    //myGoogleMap.addOverlay(OrangeMarkers[x]);
                    x++
                } else {
                    //alert("adding orange Marker");
                    //PartnerMarkers[y] = createOrangeMarker(point,getOrangeIcon(),markers[i].getAttribute("id"),site_name);
                    PartnerMarkers[y] = createClickableOrangeMarker(point,getOrangeIcon(),markers[i].getAttribute("id"),site_name);
                    if (showPartnerIcons && zoom>=9) {
                        myGoogleMap.addOverlay(PartnerMarkers[y]);
                    }
                    y++;
                }
            }   
        }
        //alert(PartnerMarkers.length);
        //now render the icons to the screen
        for(x in OrangeMarkers) {
            if (isNumeric(x)) {
                myGoogleMap.addOverlay(OrangeMarkers[x]);
            }
        }

    });
}




function createDetailMarker(point,icon,site_id, site_name, operator) {
    if (operator==126) {
        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;
}



//used for results pages
    
function reloadResultsPageIcons(showPartnerIcons) {
    myGoogleMap.clearOverlays();
    
    var newCenter = myGoogleMap.getCenter();
    lat = newCenter.lat();
    lon = newCenter.lng();
    zoom = myGoogleMap.getZoom();
        
    GEvent.removeListener(moveEndEvent);
        
    moveEndEvent = GEvent.addListener(myGoogleMap,"moveend", function() {
        myGoogleMap.clearOverlays();
        var newCenter = myGoogleMap.getCenter();
        lat = newCenter.lat();
        lon = newCenter.lng();
        zoom = myGoogleMap.getZoom();
        getMarkerList(lat,lon,zoom,showPartnerIcons,false);
    });
    
    getMarkerList(lat,lon,zoom,showPartnerIcons,false);
}

function reloadDetailPageIcons(showPartnerIcons) {
    myGoogleMap.clearOverlays();
    
    var newCenter = myGoogleMap.getCenter();
    lat = newCenter.lat();
    lon = newCenter.lng();
    zoom = myGoogleMap.getZoom();
        
    GEvent.removeListener(moveEndEvent);
        
    moveEndEvent = GEvent.addListener(myGoogleMap,"moveend", function() {
        myGoogleMap.clearOverlays();
        var newCenter = myGoogleMap.getCenter();
        lat = newCenter.lat();
        lon = newCenter.lng();
        zoom = myGoogleMap.getZoom();
        getMarkerList(lat,lon,zoom,showPartnerIcons,false);
    });
    
    getMarkerList(lat,lon,zoom,showPartnerIcons,false);
}

function togglePartnerIcons(showPartners) {
    var filename = location.pathname.substring(location.pathname.lastIndexOf('/')+1);
    if (filename!='index.php') {
        switch (filename) {
            case "details.php":
                //reloadDetailPageIcons(showPartners);
                reloadDetailPageIcons(showPartners);
                break;
            default:
                reloadResultsPageIcons(showPartners);
                break;
        }
    }
}

function refreshtop100drawer(lat,lon) {
    var url = 'http://orange.hotspot-directory.com/top100/refreshtop100drawer.php?lat='+lat+'&lon='+lon
    //prompt("URL",url);
    GDownloadUrl(url, function (data, responseCode) {
        document.getElementById('map-drawer').innerHTML = data;
    });
    
}

    
function setupLocalMap() {
    
    // restrict zoom range of the map

    restrictZoom();
    
    moveEndEvent = GEvent.addListener(myGoogleMap,"moveend", function() {
        myGoogleMap.clearOverlays();
        var newCenter = myGoogleMap.getCenter();
        lat = newCenter.lat();
        lon = newCenter.lng();
        zoom = myGoogleMap.getZoom();
        getMarkerList(lat,lon,zoom,false,false);
    });
    var newCenter = myGoogleMap.getCenter();
    lat = newCenter.lat();
    lon = newCenter.lng();
    zoom = myGoogleMap.getZoom();
    getMarkerList(lat,lon,zoom,false,false);
}

function checkForTop100(showPartners) {
    document.getElementById('map-place-holder').style.display='none';
    document.getElementById('search-in-progress').style.display='block';
    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();
    var zoom = myGoogleMap.getZoom();
    
    var mapCenter = myGoogleMap.getCenter();
    lat = mapCenter.lat();
    lon = mapCenter.lng();

    var xmlURL = 'checkForTop100.php?minLon=' + minLon + '&maxLon=' + maxLon + '&minLat=' + minLat + '&maxLat=' + maxLat + '&zoom=' + zoom;
    
    GDownloadUrl(xmlURL, function (data, responseCode) {
        var xml = GXml.parse(data);
        //alert(data);
        var markers = xml.documentElement.getElementsByTagName("marker"); 
        var foundCount = parseInt(markers[0].getAttribute("markerCount"));
        //alert(foundCount);
        if (foundCount==0) {
            myGoogleMap.setZoom(zoom-2);
            //myGoogleMap.zoomOut();
            checkForTop100();
        } else {
            document.getElementById('map-place-holder').style.display='block';
            document.getElementById('search-in-progress').style.display='none';
            getMarkerList(lat,lon,zoom,showPartners,false);
        }
    });
    
}

function setupDetailMap() {
    // restrict zoom range of the map

    //restrictZoom(); 
    
    moveEndEvent = GEvent.addListener(myGoogleMap,"moveend", function() {
        //myGoogleMap.clearOverlays();
        var newCenter = myGoogleMap.getCenter();
        lat = newCenter.lat();
        lon = newCenter.lng();
        zoom = myGoogleMap.getZoom();
        //getMarkerList(lat,lon,zoom,false,false);
        //refreshtop100drawer(lat,lon);
        getMarkerList(lat,lon,zoom,document.getElementById('radAll').checked,false);
    });
    var newCenter = myGoogleMap.getCenter();
    lat = newCenter.lat();
    lon = newCenter.lng();
    zoom = myGoogleMap.getZoom();
    
    //getMarkerList(lat,lon,zoom,false,false);
    getMarkerList(lat,lon,zoom,document.getElementById('radAll').checked,false);
}

function setupDefaultMap() {
    
    moveEndEvent = GEvent.addListener(myGoogleMap,"moveend", function() {
        myGoogleMap.clearOverlays();
        var newCenter = myGoogleMap.getCenter();
        lat = newCenter.lat();
        lon = newCenter.lng();
        zoom = myGoogleMap.getZoom();
        //refreshtop100drawer(lat,lon);
        getMarkerList(lat,lon,zoom,false,false);
    });
    
    var newCenter = myGoogleMap.getCenter();
    lat = newCenter.lat();
    lon = newCenter.lng();
    zoom = myGoogleMap.getZoom();
    getMarkerList(lat,lon,zoom,false,false);
    
}

function setupDefaultMap2() {
    
    lboolShowPartners = false;
    if (document.getElementById('radAll').checked) {
        lboolShowPartners = true;
    }
        
    moveEndEvent = GEvent.addListener(myGoogleMap,"moveend", function() {
        myGoogleMap.clearOverlays();
        var newCenter = myGoogleMap.getCenter();
        lat = newCenter.lat();
        lon = newCenter.lng();
        zoom = myGoogleMap.getZoom();
        //refreshtop100drawer(lat,lon);
        getMarkerList(lat,lon,zoom,lboolShowPartners,false);
    });
    
    var newCenter = myGoogleMap.getCenter();
    lat = newCenter.lat();
    lon = newCenter.lng();
    zoom = myGoogleMap.getZoom();
    checkForTop100(lboolShowPartners);
    
}

function setupSearchMap() {

    // restrict zoom range of the map

    restrictZoom();    
      
    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();
        getSiteDistribution(southWest.lng(),northEast.lng(),southWest.lat(),northEast.lat(),zoom,false);
    });
    
    zoom = myGoogleMap.getZoom();
        
    bounds = myGoogleMap.getBounds();
    southWest = bounds.getSouthWest();
    northEast = bounds.getNorthEast();
    lonSpan = northEast.lng() - southWest.lng();
    latSpan = northEast.lat() - southWest.lat();
    
    myGoogleMap.clearOverlays();
    getSiteDistribution(southWest.lng(),northEast.lng(),southWest.lat(),northEast.lat(),zoom,false);
}


//overrides minimum and maximum map resolution

function restrictZoom() {
    
        // restrict zoom range of the map

      var mt = myGoogleMap.getMapTypes();
      // Overwrite the getMinimumResolution() and getMaximumResolution() methods
      for (var i=0; i<mt.length; i++) {
        mt[i].getMinimumResolution = function() {return 6;}
        mt[i].getMaximumResolution = function() {return 18;}
      }
}

