var map;
var gmarkers = [];
var lat;
var long;
var distance;
var circleRadius = 10;
var wsLang;
var wsUrl;
var wsSubsidiary;
var geocoder = null;
var point;
var conversionKmTOMiles = 1.61;

var polygoneCercle;
var cercleCouleur = "#E2001A";
var cercleEpaisseur = "1";
var cercleOpacite = ".5";
var disqueCouleur = "#E2001A";
var disqueOpacite = ".1";
var rayon = 6;
var segment = 60;

var advanced_search = false;
var webshop_search = false;
var dealersAddresses = [];
var currentPage = 0;
resultperpage = $('#results_per_page').val();
var nodeId = 0;
var retailerSelectedCategory = [];
var stockistSelectedCategory = [];
var fullStoresNames = new Array();

//-------------------//
//--Reset functions--//
//-------------------//

//Reset the search from at the default search
function resetSearchForm(){
    advanced_search =  false;
    webshop_search = false;
    for (var u = 0; u < $(".retailerType").size(); u++){
        $("#retailerType_"+u).attr('checked', false);
    }
    for (var v = 0; v < $(".retailerSubType").size(); v++){
        $("#retailerSubType_"+v).attr('checked', false);
    }
}

//-------------------//
//-----Animation-----//
//-------------------//

//Animate the form for Webshop search
function webshopSearch(){
    if ($("#retailerType_2").is(':checked')){
        resetSearchForm();
        $("#retailerType_2").attr('checked', true);
        $('#list_retailers').hide();
        $('#city').attr('value','');
        $('#city').attr('disabled', 'disabled');
        $('#distance').attr('value','');
        $('#distance').attr('disabled', 'disabled');
        for (var u = 0; u < $(".retailerType").size(); u++){
          if (u != 2){
            $("#retailerType_"+u).attr('disabled', 'disabled');
          }
        }
        for (var v = 0; v < $(".retailerSubType").size(); v++){
            $("#retailerSubType_"+v).attr('disabled', 'disabled');
        }
        webshop_search = true;
        buildCategories();
    }else{
        resetSearchForm();
        $('#city').attr('disabled', '');
        $('#distance').attr('disabled', '');
        for (var u = 0; u < $(".retailerType").size(); u++){
          if (u != 2){
            $("#retailerType_"+u).attr('disabled', '');
          }
        }
        for (var v = 0; v < $(".retailerSubType").size(); v++){
            $("#retailerSubType_"+v).attr('disabled', '');
        }
        webshop_search = false;
        buildCategories();
        //reload page current page to clean url?
        window.location.href= $.ez.ezurl + '/' + current_node_url;
    }
}

//Check or uncheck retailer's subtype in the search form
//Update the selected retailer's subcategories
function checkSubTypes(id){
    if (id == 0){
        if ($("#retailerType_0").is(':checked')){
            $(".retailerSubType>input").attr('checked', true);
        }else{
            $(".retailerSubType>input").attr('checked', false);
        }
    }
    if (id == 2){
      webshopSearch();
    }
    buildCategories();
}

//Checkbox behavior for the stockist subtypes
function checkParentType(){
    if ($(".retailerSubType>input").is(':checked')){
        if (!($("#retailerType_0").is(':checked'))){
            $("#retailerType_0").attr('checked', true);
        }
    }else if (!($(".retailerSubType>input").is(':checked'))){
        if ($("#retailerType_0").is(':checked')){
            $("#retailerType_0").attr('checked', false);
        }
    }
    buildCategories();
}

//Update the selected retailers categories an subcategories
function buildCategories(){
    retailerSelectedCategory = [];
    stockistSelectedCategory = [];
    for (var u = 0; u < $(".retailerType").size(); u++){
        if($("#retailerType_"+u).is(':checked')){
            retailerSelectedCategory.push(parseInt($("#retailerType_"+u).val()));
        }
    }
    for (var v = 0; v < $(".retailerSubType").size(); v++){
        if($("#retailerSubType_"+v).is(':checked')){
            stockistSelectedCategory.push(parseInt($("#retailerSubType_"+v).val()));
        }
    }
    buildStoreAutocomplete();
}

//Build the autocomplete retailersNames
function buildStoreAutocomplete(){
    var selectedStoresName = [];
    if (retailerSelectedCategory.length > 0){
        for (var i = 0; i < fullStoresNames.length ; i++){
            if ($.inArray(fullStoresNames[i][0],retailerSelectedCategory) > -1){
                if (fullStoresNames[i][0] == 0){
                    //check subtype
                    if ($.inArray(fullStoresNames[i][1],stockistSelectedCategory) > -1){
                        selectedStoresName.push(fullStoresNames[i][2]);
                    }
                }else{
                    selectedStoresName.push(fullStoresNames[i][2]);
                }
            }
        }
    }else{
        for (var i = 0; i < fullStoresNames.length ; i++){
            selectedStoresName.push(fullStoresNames[i][2]);
        }
    }
    var data = { source: selectedStoresName };
    $("#store_name").autocomplete(data);
}

//Validate the form if the required field "City" is not empty.
function validate()
{
    if (document.forms["location"].city.value != '')
    {
        $('#city_field_required').hide();
        $('#gmap').hide();
        $('#gmapLoader').show();
        $('#googleMapLoader').show();
        $('#webshops').hide();
        load();
    }else{
      if (webshop_search){
    	  $('#gmap').hide();
          $('#gmapLoader').hide();
          $('#googleMapLoader').hide();
    	  $('#webshops').show();
      }else{
          $('#city_field_required').show();
      }
    }
}

function getSearchRadius(){
    if (document.forms["location"].distance.value != '')
    {
        advanced_search = true;
        if ( document.forms["location"].unit.value == 'miles' )
        {
            return parseFloat(document.forms["location"].distance.value) / conversionKmTOMiles;
        }
        else
        {
            return parseFloat(document.forms["location"].distance.value);
        }
    }
    else
    {
        advanced_search = false;
        //default radius for search if no distance is specified
        if ( document.forms["location"].unit.value == 'miles' )
        {
            return 12560;
        }
        else
        {
            return 20096;
        }
    }
}

//launch search, call gmap, and retrieves markers
function load() {
    dealersAddresses = [];
    gmarkers = [];
    currentPage = 0;
    this.distance = getSearchRadius();

    wsLang = document.forms["location"].wsLang.value;
    wsUrl = document.forms["location"].wsUrl.value;
    wsSubsidiary = document.forms["location"].wsSubsidiary.value;
    nodeId = document.forms["location"].nodeId.value;
    storeName = document.forms["location"].store_name.value;
    countryName = document.forms["location"].countryName.value;

    // Fix problem for norvegian characters
    storeName = encodeURIComponent(storeName);

    if ( GBrowserIsCompatible() ) {
        geocoder = new GClientGeocoder();
        //build the array of addresses
        geocoder.getLocations(
            //search position of this adress <city>, <subsidiairy> to avoid ambiguous returns
            document.forms["location"].city.value + ", " + document.forms["location"].countryName.value,
            function addAddressToMap( response )
            {
                place = response.Placemark[0];
                point = new GLatLng( place.Point.coordinates[1], place.Point.coordinates[0] );
                GDownloadUrl(
                    wsUrl + "/" +
                    wsSubsidiary + "?output=xml_map&lang=" +
                    wsLang + "&coord=" +
                    place.Point.coordinates[1] + "," +
                    place.Point.coordinates[0] + "&distance=" + distance +
                    ( ( webshop_search ) ? "&ignoreTemplateLimit=true"  : "" ) +
                    ( ( retailerSelectedCategory.length > 0 ) ? ( "&contactTypeFilter=" + retailerSelectedCategory.join(",") ) : "" ) +
                    ( ( stockistSelectedCategory.length > 0 ) ? ( "&additionalContactTypeFilter=" + stockistSelectedCategory.join(",") ) : "" ) +
                    ( ( storeName) ? ( "&storeName="+ storeName) : "")
                    ,
                    function( data )
                    {
                        $('#searchInfo').hide();
                        var xml = GXml.parse(data);
                        var markers = xml.documentElement.getElementsByTagName("retailer");
                        if ( ( xml.documentElement.getElementsByTagName("count") != null )&&
                            ( xml.documentElement.getElementsByTagName("count")[0].firstChild.nodeValue > xml.documentElement.getElementsByTagName("limit")[0].firstChild.nodeValue )){
                            searchReducedInfo = xml.documentElement.getElementsByTagName("count")[0].firstChild.nodeValue+
                                                    label_resultSum +
                                                    xml.documentElement.getElementsByTagName("limit")[0].firstChild.nodeValue +
                                                    label_resultShown;
                            $('#searchInfo').empty();
                            $('#searchInfo').append(searchReducedInfo);
                            $('#searchInfo').show();
                        }

                        //stop loader
                        $('#gmap').show();
                        $('#gmapLoader').hide();
                        $('#googleMapLoader').hide();
                        if (markers.length > 0)
                        {
							// Display the map if it is not visible yet
							if( $( '#gmap' ).css( 'display' ) == 'none' )
							{
							    $( '#gmap, #gmapLoader' ).css( 'display', 'block' );
							}
                            $("#list_retailers").show();
                            //build the generated html part.
                            for (var i = 0; i < markers.length; i++)
                            {
                                var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute( "long" )), 9);
                                var distanceToCenter = calculateDistance(
                                        place.Point.coordinates[1],
                                        place.Point.coordinates[0],
                                        markers[i].getAttribute("lat"),
                                        markers[i].getAttribute("long"),
                                        (document.forms["location"].unit.value == 'miles'));

                                //intégration des icones:
                                var icon = "<span class='categoryIcon Icon_0'/>";
                                if ( ( markers[i].getAttribute("cat") != null ) && ( markers[i].getAttribute("cat") < 3 ) ){
                                    icon = "<span class='categoryIcon Icon_"+markers[i].getAttribute("cat")+"'/>"
                                }

                                dealersAddresses[i]  = new Array(
                                                        "<div class='retailer'>" +
                                                            icon +
                                                            "<div class='rouge retailer_name'>" + markers[i].getAttribute("name") + "</div>" +
                                                            "<div class='retailer_address'>" + markers[i].getAttribute("address") + "</div>" +
                                                            "<div class='retailer_addressinfo'>" + markers[i].getAttribute("addressInfo") + "</div>" +
                                                            "<div class='retailer_addressmoreinfo'>" + markers[i].getAttribute("addressMoreInfo") + "</div>" +
                                                            "<div class='retailer_postalCode'>" + markers[i].getAttribute("postalCode") + "</div>" +
                                                            "<div class='retailer_city'>" + markers[i].getAttribute("city") + "</div>" +
                                                            "<div class='retailer_phone'>"+ label_phoneabrev+ " : " + markers[i].getAttribute("phone") + "</div>" +
                                                            "<div id='bottomButtons'>" +
                                                                "<span class='greyButton_before'/><a class='greyButton'href="+markers[i].getAttribute('url')+">"+label_Profile+"</a><span class='greyButton_after'/>" +
                                                        "</div>",
                                                        markers[i].getAttribute("name"),
                                                        distanceToCenter,
                                                        markers[i].getAttribute("lat"),
                                                        markers[i].getAttribute("long"),
                                                        i);
                            }
                            dealersAddresses.sort(DistanceOrdered);
                            generateGoogleMap(geocoder,markers);
                        }
                        else
                        {
                            // Empty the results table
                            $("#retailers").empty();

                            // Hide the map if nothing was found and we were not redirected
                            $( '#gmap, #gmapLoader' ).css( 'display', 'none' );

                            if (advanced_search)
                            {
                                $('#searchInfo').empty();
                                $('#searchInfo').append(label_noRetailerSearch);
                                //Reset Form
                                $('#searchInfo').show();
                                resetSearchForm();
                                load();
                            }
                            else
                            {
                                $('#searchInfo').empty();
                                $('#searchInfo').append(label_noRetailerDatabase);
                                $('#searchInfo').show();
                            }
                        }
                    }
                );
            }
        );

    }
}

//build the gmap with the retrieved markers
function generateGoogleMap(geocoder,markers){

    var distToFirstRetailer = parseFloat(dealersAddresses[0][2]);
    var k = 0;
    var zoom;
    if (advanced_search){
        zoom = distanceToGoogleZoom(document.forms["location"].distance.value);
    }else{
        zoom = distanceToGoogleZoom(10 + distToFirstRetailer);
    }

    //instance the map
    map = new GMap2( document.getElementById("gmap") );
    map.clearOverlays();
    map.addControl( new GLargeMapControl3D() );
    map.addControl( new GMapTypeControl() );
    //map.enableScrollWheelZoom();

    townlocation = geocoder.getLatLng(
        document.forms["location"].city.value + ", " + document.forms["location"].countryName.value,
        function( point ) {
            if ( !point ) {
                alert( address + " not found" );
                map.setCenter(new GLatLng(0,0),1);
            } else {
                map.setCenter(point,zoom);
            }
        }
    );

    //convert id for the futur sliced tab
    for (var j = 0; j < dealersAddresses.length ; j++){
        locations =	"<span class='retailer_locate'>" + label_Distance + " : " + dealersAddresses[j][2] + " " + document.forms["location"].unit.value + "</span>";
        buttons	=	"<span class='greyButton_before' src='../images/greyButton_left.png'/><span class='greyButton' onclick='popDealerInfo(" + j + ")'>" + label_LocateOn + "</span><span class='greyButton_after' src='../images/greyButton_right.png'/></div>";
        if ((j % 2) == 0){
            dealersAddresses[j][0] = dealersAddresses[j][0].substring(0,22) + locations + dealersAddresses[j][0].substring(22,dealersAddresses[j][0].length-6) + buttons + "</div>";
        }else{
            dealersAddresses[j][0] = dealersAddresses[j][0].substring(0,20) + " odd" + dealersAddresses[j][0].substring(20,22) + locations + dealersAddresses[j][0].substring(22,dealersAddresses[j][0].length-6) + buttons + "</div>";
        }
    }

    for (k; k<dealersAddresses.length; k++)
    {
        var markerIndice = dealersAddresses[k][5];
        var point = new GLatLng(parseFloat(markers[markerIndice].getAttribute("lat")), parseFloat(markers[markerIndice].getAttribute("long")), 9);
        var cond = (advanced_search) ? (dealersAddresses[k][2] <= parseFloat(document.forms["location"].distance.value)) : (dealersAddresses[k][2] < (10 + distToFirstRetailer));
        if (cond){
            var marker = creerMarker(
                    point,
                    markers[markerIndice].getAttribute("name"),
                    markers[markerIndice].getAttribute("address"),
                    markers[markerIndice].getAttribute("addressInfo"),
                    markers[markerIndice].getAttribute("addressMoreInfo"),
                    markers[markerIndice].getAttribute("postalCode"),
                    markers[markerIndice].getAttribute("city"),
                    markers[markerIndice].getAttribute("country"),
                    markers[markerIndice].getAttribute("phone"),
                    markers[markerIndice].getAttribute("mail"),
                    markers[markerIndice].getAttribute("website"),
                    markers[markerIndice].getAttribute("diverse"),
                    markers[markerIndice].getAttribute("cat"),
                    markers[markerIndice].getAttribute("subcat"),
                    markers[markerIndice].getAttribute("url")
                    );
            map.addOverlay(marker);
        }else{
            //when distance criteria is reached, stop adding markers.
            break;
        }
    }
    //purging the array of unwanted adresses
    dealersAddresses = dealersAddresses.slice(0,k);

    //draw the preview circle at the town position
    /*
    var previewCircleRadius = (advanced_search) ? document.forms["location"].distance.value : (parseFloat(circleRadius)+distToFirstRetailer);
    drawDealerCircle(map, parseFloat(place.Point.coordinates[1]), parseFloat(place.Point.coordinates[0]), previewCircleRadius);
    */

    //initiate the result page
    goToResultpage(0);

}

//return correct zoom for the specified distance
function distanceToGoogleZoom(distance)
{
    if (distance > 11){
        if (distance > 22){
            if (distance > 44){
                if (distance > 88){
                    if (distance > 176){
                        if (distance > 352){
                            if (distance > 704){
                                if (distance > 1380){
                                    if (distance > 2500){
                                        if (distance > 5000){
                                            if (distance > 10000){
                                                return 1;
                                            }
                                            return 2;
                                        }
                                        return 3;
                                    }
                                    return 4;
                                }
                                return 5;
                            }
                            return 6;
                        }
                        return 7;
                    }
                    return 8;
                }
                return 9;
            }
            return 10;
        }
        return 11;
    }
    return 12;
}

//Trigger the clicks from one address of the list to open the appropriate information window
function popDealerInfo(i) {
  window.location.hash="gmapAnchor";
  GEvent.trigger(gmarkers[i],"click");

}

//Change the result view tof it the new result per page value
function changeResultNumber(newResultPerPage){
	currentPage = Math.floor((currentPage * resultperpage) / newResultPerPage);
	resultperpage = newResultPerPage;
	build_pagination();
}

//Build the pagination pages links in function of result per page.
function goToResultpage(selectedPageNumber){
    currentPage = selectedPageNumber;
    build_pagination();
}

function build_pagination(){
    $(".pagination_center").empty();
    resultperpage = parseInt( $('#results_per_page').val() );
    numberOfPages = Math.floor(dealersAddresses.length/resultperpage);
    shownPages = new Array(0,currentPage-7,currentPage-6,currentPage-5,currentPage-4,currentPage-3,currentPage-2,currentPage-1,currentPage,currentPage+1,currentPage+2,currentPage+3,currentPage+4,currentPage+5,currentPage+6,numberOfPages-1);
    for( var m = 0; m < dealersAddresses.length; m += resultperpage)
    {
        if (numberOfPages>7){
            if ( m/resultperpage == currentPage ){
                $(".pagination_center").append("<span class='rouge'>"+(Math.floor(m/resultperpage)+1)+"</a> ");
            }else if ($.inArray(m/resultperpage, shownPages) != -1){
                $(".pagination_center").append("<a onclick='goToResultpage("+Math.floor(m/resultperpage)+");'>"+(Math.floor(m/resultperpage)+1)+"</a> ");
            }else{
                if(m/resultperpage == 1){
                    $(".pagination_center").append("... ");
                }else if (m/resultperpage == numberOfPages-2){
                    $(".pagination_center").append("... ");
                }
            }
        }else{
            if ( m/resultperpage == currentPage ){
                $(".pagination_center").append("<span class='rouge'>"+(Math.floor(m/resultperpage)+1)+"</a> ");
            }else{
                $(".pagination_center").append("<a onclick='goToResultpage("+Math.floor(m/resultperpage)+");'>"+(Math.floor(m/resultperpage)+1)+"</a> ");
            }
        }
    }
    viewAdressesPage(currentPage);
}

//show next or previous result page
function paginationNext( next ){
    var start_indice, resultperpage, end_indice;
    resultperpage = parseInt( $('#results_per_page').val() );

    if (next){
        currentPage++;
    }else{
        currentPage--;
    }

    build_pagination();

    //determine first and last indice to show
    start_indice = currentPage*resultperpage;
    if (start_indice + resultperpage > dealersAddresses.length){
        end_indice = dealersAddresses.length;
    }else{
        end_indice = start_indice + resultperpage;
    }

    //show or hide newt previous buttons
    if ( start_indice >= resultperpage )
    {
        $(".pagination_left").show();
    }else{
        $(".pagination_left").hide();
    }
    if ( end_indice >= dealersAddresses.length)
    {
        $(".pagination_right").hide();
    }else{
        $(".pagination_right").show();
    }

    $("#retailers").empty();
    for( var p = start_indice; p < end_indice; p++ )
    {
        $("#retailers").append( dealersAddresses[p][0] );
    }
}

//View the specified page
function viewAdressesPage( offset ){
    resultperpage = parseInt( $("#results_per_page").val() );
    start_indice = offset*resultperpage;
    if (dealersAddresses.length <= resultperpage){
        end_indice = start_indice + dealersAddresses.length;
    }
    else if (start_indice + resultperpage > dealersAddresses.length){
        end_indice = dealersAddresses.length;
    }else{
        end_indice = start_indice + resultperpage;
    }
    $("#retailers").empty();
    if ( offset == 0)
    {
        $(".pagination_left").hide();
    }else{
        $(".pagination_left").show();
    }
    if ( end_indice >= dealersAddresses.length)
    {
        $(".pagination_right").hide();
    }else{
        $(".pagination_right").show();
    }
    for( var p = start_indice; p < end_indice; p++ )
    {
        $("#retailers").append( dealersAddresses[p][0] );
    }
    currentPage = offset;

}

//Return real distance between two locations (considering earth radius)
function calculateDistance( lat1, long1, lat2, long2, isImperial )
{
    var glatlng1 = new GLatLng( lat1, long1 );
    var glatlng2 = new GLatLng( lat2, long2 );
    miledistance = glatlng1.distanceFrom( glatlng2, 3959 ).toFixed( 1 );
    if (isImperial)
    {
        return miledistance;
    }
    else
    {
        return ( miledistance * 1.609344 ).toFixed( 1 );
    }
}

function AlphabeticalyOrdered( a, b ){
    var nameA=a[1].toLowerCase();
    var nameB=b[1].toLowerCase();
    if ( nameA < nameB )
        return -1;
    if ( nameA > nameB )
        return 1;
    return 0;
}

function DistanceOrdered( a, b ){
    return ( a[2] - b[2] );
}

//method = [distance | alphabeticalOrder]
//sort the resulting array of addresses
function sortAdressList(method)
{
    if (method == 'alphabeticalOrder'){
        dealersAddresses.sort(AlphabeticalyOrdered);
    }else{
        dealersAddresses.sort(DistanceOrdered);
    }
    viewAdressesPage(0);
    build_pagination();
}


function creerMarker(point, onglet1, onglet2, onglet3 , onglet4, onglet5, onglet6, onglet7, onglet8, onglet9, onglet10, onglet11, cat, subcat ,profileUrl) {

    var stockist = new GIcon();
    stockist.image = $.ez.ezimageroot + 'stockistMapIcon.png';
    stockist.iconSize = new GSize(39, 41);
    stockist.iconAnchor = new GPoint(20, 40);
    stockist.infoWindowAnchor = new GPoint(15, 20);

    var veterinarian = new GIcon();
    veterinarian.image = $.ez.ezimageroot + 'veterinarianMapIcon.png';
    veterinarian.iconSize = new GSize(39, 41);
    veterinarian.iconAnchor = new GPoint(20, 40);
    veterinarian.infoWindowAnchor = new GPoint(15, 20);

    var customIcons = [];
    customIcons[0] = stockist;
    customIcons[1] = veterinarian;

    var marker = new GMarker(point, customIcons[cat]);
    marker.mycategory = cat;
    var infoTabs = [new GInfoWindowTab("Infos", ("<div class='infoWindowAddress'>" +
                                                    "<span class='retailer_name'>" + onglet1 + "</span><br/>" +
                                                    "<span class='retailer_address'>" + onglet2 + "</span><br/>" +
                                                    "<span class='retailer_addressinfo'>" + onglet3 + "</span><br/>" +
                                                    "<span class='retailer_addressmoreinfo'>" + onglet4 + "</span><br/>" +
                                                    "<span class='retailer_postalCode'>" + onglet5 + " "+ onglet6 +"</span><br/>" +
                                                    "<span class='retailer_phone'>" + label_phoneabrev + " : " + onglet8 + "</span><br/>" +
                                                    "<div id='bottomButtons'><span class='greyButton_before'></span><a class='greyButton'href="+profileUrl+">"+label_Profile+"</a><span class='greyButton_after'></span></div>" +
                                                "</div>"
                                                ))
                    ];
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowTabsHtml(infoTabs);
    });
    gmarkers.push(marker);
    return marker;
}

//Draw circle on the map to show search_radius
function drawDealerCircle(map,center_lat,center_long,radius){
    var latConv = point.distanceFrom(new google.maps.LatLng(center_lat+0.1, center_long))/100;
    var lngConv = point.distanceFrom(new google.maps.LatLng(center_lat, center_long+0.1))/100;
    /* ... Création d'un tableau nommé "pointsCercle". Celui-ci va contenir tous les points nécessaires ... */
    /* ... à la construction du polygone représentant le cercle nommé "polygoneCercle" ... */
    var pointsCercle = [];
    var step = parseInt(360/segment)||10;

    for(var i=0; i<=360; i+=step){
        /* ... "pint" : coordonnées d'un point participant à la construction du polygone nommé "polygoneCercle" ... */
        var pint = new google.maps.LatLng(center_lat + (radius/latConv * Math.cos(i * Math.PI/180)), center_long + (radius/lngConv * Math.sin(i * Math.PI/180)));
        /* ... Ajout du point "pint" dans le tableau "pointsCercle" ... */
        pointsCercle.push(pint);
    }

    /* ... Création d'un polygone nommé "polygoneCercle" ... */
    polygoneCercle = new google.maps.Polygon(pointsCercle, cercleCouleur, cercleEpaisseur, cercleOpacite, disqueCouleur, disqueOpacite);
    /* ... on ajoute le polygone nommé "polygoneCercle" à la carte nommée "maCarte". */
    /* ... ce polygone représente le cercle tracé sur la carte. ... */
    map.addOverlay(polygoneCercle);
}

