﻿// AO, 10/09/2009
var map;

// v3
var geocoder = new google.maps.Geocoder();

function searchDealers(searchCtrl, latitudeCtrl, longitudeCtrl, criteriaCtrl, country) {
    var search = document.getElementById(searchCtrl).value;
    var latitude = document.getElementById(latitudeCtrl);
    var longitude = document.getElementById(longitudeCtrl);
    var criteria = document.getElementById(criteriaCtrl);
    var inputSearch = '';

    //var geocoder = new GClientGeocoder(); //v2
    var geocoder = new google.maps.Geocoder(); //v3

    inputSearch = search;
    if (search.length > 0)
        search = search + ',' + country;
    
    var listLevel1 = document.getElementById('listLevel1');
    var inputsLevel1 = listLevel1.getElementsByTagName('input');
    for (var i = 0; i < inputsLevel1.length; i++) {
        var input = inputsLevel1[i];

        if (input.type == 'checkbox' && input.checked) {
            criteria.value = criteria.value + input.parentNode.attributes['activity'].nodeValue + ","
        }
    }

//    var listLevel2 = document.getElementById('listLevel2');
//    var inputsLevel2 = listLevel2.getElementsByTagName('input');
//    for (var i = 0; i < inputsLevel2.length; i++) {
//        var input = inputsLevel2[i];
//        if (input.type == 'checkbox' && input.checked) {
//            criteria.value = criteria.value + input.parentNode.attributes['activity'].nodeValue + ","
//        }
//    }

    var listLevel2 = document.getElementById('listLevel2');

    if (listLevel2 != null) {
        var selectLevel2 = listLevel2.getElementsByTagName('select');

        for (var i = 0; i < selectLevel2.length; i++) {
            var select = selectLevel2[i];

            var value = selectLevel2[0].options[selectLevel2[0].selectedIndex].value;
            if (value != '')
                criteria.value = criteria.value + value + ","
        }
    }
    
    if (inputSearch == '') {
        longitude.value = 0;
        latitude.value = 0;
        document.forms[0].submit();
        var mask = document.getElementById('mask');

        if (mask != null) {
            mask.style.display = 'block';
        }
    }
    else {
        // v2
        //geocoder.getLocations(
        //search,
        //function(locations) {
        //    if (locations.Status.code == 200) {         // Cas ou il y a un seul element
        //        if (locations.Placemark.length == 1) {
        //            longitude.value = locations.Placemark[0].Point.coordinates[0];
        //            latitude.value = locations.Placemark[0].Point.coordinates[1];
        //
        //            document.forms[0].submit();
        //        }
        //        else {                                  // Cas ou il y a plusieurs elements trouves
        //            buildPlacemarks(locations.Placemark, inputSearch, longitudeCtrl, latitudeCtrl);
        //        }
        //    }
        //});
        
        // v3
        geocoder.geocode({ "address": search }, function(locations, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                if (locations.length == 1) {
                    latitude.value = locations[0].geometry.location.lat();
                    longitude.value = locations[0].geometry.location.lng();

                    document.forms[0].submit();

                    var mask = document.getElementById('mask');

                    if (mask != null) {
                        mask.style.display = 'block';
                    }
                }
                else {                                  // Cas ou il y a plusieurs elements trouves
                    buildPlacemarks(locations, inputSearch, longitudeCtrl, latitudeCtrl);
                }
            }
            //            else {
            //                alert("$Pas de résultats");
            //            }
        });
    }
}

function buildPlacemarks(placemark, search, longitudeCtrl, latitudeCtrl) {
    var data = '<ul>';
    var index = 1;

    // v2
    //for (var i in placemark)
    //{
    //    data = data + "<li><a href='#' onclick=\"javascript:submitForm('" +
    //        placemark[i].Point.coordinates[0] + "','" +
    //        placemark[i].Point.coordinates[1] + "','" +
    //        longitudeCtrl + "','" +
    //        latitudeCtrl + "')\">" + index + ".&nbsp;" + placemark[i].address + "</a></li>";
    //        
    //    index = index + 1;
    //}

    // v3
    for (var i in placemark) {
        data = data + "<li><a href='#' onclick=\"javascript:submitForm('" +
            placemark[i].geometry.location.lng() + "','" +
            placemark[i].geometry.location.lat() + "','" +
            longitudeCtrl + "','" +
            latitudeCtrl + "')\">" + index + ".&nbsp;" + placemark[i].formatted_address + "</a></li>";

        index = index + 1;
    }

    document.getElementById('placemarksData').innerHTML = data + '</ul>';
    document.getElementById('placemarks').style["display"] = 'block';

    var title = document.getElementById('placemarksTitle').innerHTML
    var reg = new RegExp("@@search@@", "g");
    
    document.getElementById('placemarksTitle').innerHTML = title.replace(reg, search);
}

function submitForm(longitudeValue, latitudeValue, longitudeCtrl, latitudeCtrl) {
    var latitude = document.getElementById(latitudeCtrl);
    var longitude = document.getElementById(longitudeCtrl);

    longitude.value = longitudeValue;
    latitude.value = latitudeValue

    document.forms[0].submit();

    var mask = document.getElementById('mask');

    if (mask != null) {
        mask.style.display = 'block';
    }
}

function onkeypressed(searchCtrl, latitudeCtrl, longitudeCtrl, criteriaCtrl, country, e) {
    var code =(window.event)? event.keyCode : e.which;
    if (code == 13) {
        searchDealers(searchCtrl, latitudeCtrl, longitudeCtrl, criteriaCtrl, country);
        return false;
    }
} 

















function GetParameters(searchCtrl, latitudeCtrl, longitudeCtrl, criteriaCtrl, country) {

    var search = document.getElementById(searchCtrl).value;
    var latitude = document.getElementById(latitudeCtrl);
    var longitude = document.getElementById(longitudeCtrl);
    var criteria = document.getElementById(criteriaCtrl);

    //var geocoder = new GClientGeocoder(); //v2
    var geocoder = new google.maps.Geocoder(); //v3

    criteria.value = '';

    if (search.lenght > 0)
        search = search + ',' + country;
    
    // v2
    //geocoder.getLatLng(
    //    search,
    //    function(point) {
    //        if (!point) {
    //            latitude.value = "0";
    //            longitude.value = "0";
    //        }
    //        else {
    //            latitude.value = point.y;
    //            longitude.value = point.x;
    //        }
    //    });
    latitude.value = "0";
    longitude.value = "0";
    
    // v3
    geocoder.geocode({ "address": search }, function(locations, status) {
        if (status == google.maps.GeocoderStatus.ZERO_RESULTS || status == google.maps.GeocoderStatus.INVALID_REQUEST) {
            latitude.value = "0";
            longitude.value = "0";
        }
        else {
            latitude.value = locations[0].geometry.location.lat();
            longitude.value = locations[0].geometry.location.lng();
        }
    });

    var listLevel1 = document.getElementById('listLevel1');
    var inputsLevel1 = listLevel1.getElementsByTagName('input');
    for (var i = 0; i < inputsLevel1.length; i++) {
        var input = inputsLevel1[i];

        if (input.type == 'checkbox' && input.checked) {
            criteria.value = criteria.value + input.parentNode.attributes['activity'].nodeValue + ","
        }
    }

//    var listLevel2 = document.getElementById('listLevel2');
//    var inputsLevel2 = listLevel2.getElementsByTagName('input');
//    for (var i = 0; i < inputsLevel2.length; i++) {
//        var input = inputsLevel2[i];

//        if (input.type == 'checkbox' && input.checked) {
//            criteria.value = criteria.value + input.parentNode.attributes['activity'].nodeValue + ","
//        }
    //    }

    var listLevel2 = document.getElementById('listLevel2');
    var selectLevel2 = listLevel2.getElementsByTagName('select');

    for (var i = 0; i < selectLevel2.length; i++) {
        var select = selectLevel2[i];

        var value = selectLevel2[0].options[selectLevel2[0].selectedIndex].value;
        if (value != '')
            criteria.value = criteria.value + value + ","
    }
}

function GetParametersForms(searchCtrl, latitudeCtrl, longitudeCtrl) {

    var search = document.getElementById(searchCtrl).value;
    var latitude = document.getElementById(latitudeCtrl);
    var longitude = document.getElementById(longitudeCtrl);   

    //var geocoder = new GClientGeocoder(); //v2
    var geocoder = new google.maps.Geocoder(); //v3
    
    // v2
    //geocoder.getLatLng(
    //    search,
    //    function(point) {
    //        if (!point) {
    //            latitude.value = "0";
    //            longitude.value = "0";
    //        }
    //        else {
    //            latitude.value = point.y;
    //            longitude.value = point.x;
    //        }
    //    });

    latitude.value = "0";
    longitude.value = "0";

    // v3
    geocoder.geocode({ "address": search }, function(locations, status) {
        if (status == google.maps.GeocoderStatus.ZERO_RESULTS || status == google.maps.GeocoderStatus.INVALID_REQUEST) {
            latitude.value = "0";
            longitude.value = "0";
        }
        else {
            latitude.value = locations[0].geometry.location.lat();
            longitude.value = locations[0].geometry.location.lng();
        }
    });
}

function LoadMap(longitude, latitude, zoom, response, serverName, clustersize, maxzoom, isdefault) {
    // v2
    //if (GBrowserIsCompatible()) {  
    // v3
    if (geocoder) {  
        // v2
        //map = new GMap2(document.getElementById("map"));

        var myOptions;

        if (isdefault == 1) {
            // v3
            myOptions = {
                zoom: zoom,
                center: new google.maps.LatLng(latitude, longitude),
                mapTypeControl: true,
                mapTypeControlOptions: {
                    style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR
                },
                zoomControl: true,
                zoomControlOptions: {
                    style: google.maps.ZoomControlStyle.LARGE
                },
                mapTypeId: google.maps.MapTypeId.ROADMAP,
                streetViewControl: false
            }
        }
        else {
            myOptions = {
                zoom: 10,
                center: new google.maps.LatLng(latitude, longitude),
                mapTypeControl: true,
                mapTypeControlOptions: {
                    style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR
                },
                zoomControl: true,
                zoomControlOptions: {
                    style: google.maps.ZoomControlStyle.LARGE
                },
                mapTypeId: google.maps.MapTypeId.ROADMAP,
                streetViewControl: false
            }
        }
        
        map = new google.maps.Map(document.getElementById("map"), myOptions);
        
        // v2
        //map.setCenter(new GLatLng(latitude, longitude), 10);
       
        //map.addControl(new GLargeMapControl3D());
        ////map.addControl(new GLargeMapControl());
        //map.addControl(new GMapTypeControl());
        //map.addControl(new GOverviewMapControl());
        //map.addControl(new GScaleControl());

        CreateMarkers(response, serverName, clustersize, maxzoom);
    }
}

// AO, 13/11/2009
function CenterGmap(longitude, latitude, mapDealerId) {    
    // v2
    //map = new GMap2(document.getElementById(mapDealerId));
    //map.setCenter(new GLatLng(latitude, longitude), 8);

    // v3
    var myOptions = {
        zoom: 8,
        center: new google.maps.LatLng(latitude, longitude),
        mapTypeControl: true,
        mapTypeControlOptions: {
            style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR
        },
        zoomControl: true,
        zoomControlOptions: {
            style: google.maps.ZoomControlStyle.LARGE
        },
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        streetViewControl: false
    }

    map = new google.maps.Map(document.getElementById("map"), myOptions);  
}

// AO, 13/11/2009
function LoadMapDealerESP(longitude, latitude, serverName, mapDealerId, isdvn) {
    // v2
    //if (GBrowserIsCompatible()) {  
    // v3
    if (geocoder) {
        // v2
        //map = new GMap2(document.getElementById("mapDealer"));
        //map.setCenter(new GLatLng(latitude, longitude), 15);

        // v2
        //var icon = new GIcon();
        // v3
        var icon;
        var deltaLongitude = 0;
        var deltaLatitude = 0;
        
        if (isdvn == 'true') {
            // v2
            //icon.image = serverName + "images/dealerBig.png";
            //icon.iconAnchor = new GPoint(35, 100);
            //icon.iconSize = new GSize(69, 107);

            // v3
            icon = new google.maps.MarkerImage(serverName + "images/dealerBig.png",
                new google.maps.Size(69, 107),
                new google.maps.Point(0, 0),
                new google.maps.Point(65, 120));
            deltaLongitude = -0.0015;
            deltaLatitude = +0.0015;
        }
        else {
            // v2
            //icon.image = serverName + "images/dealerSmall.png";
            //icon.iconAnchor = new GPoint(20, 35);
            //icon.iconSize = new GSize(41, 37);

            // v3
            icon = new google.maps.MarkerImage(serverName + "images/dealerSmall.png",
                new google.maps.Size(41, 37),
                new google.maps.Point(0, 0),
                new google.maps.Point(50, 45));
            deltaLongitude = -0.0015;
            deltaLatitude = +0.0009;
        }
        // v2
        //var point = new GLatLng(latitude, longitude);
        //
        //opts = {
        //    "icon": icon,
        //    "clickable": false};

        //var marker = new GMarker(point, opts);

        //map.addOverlay(marker);

        // v3
        var myOptions = {
            zoom: 15,
            center: new google.maps.LatLng(latitude + deltaLatitude, longitude + deltaLongitude),
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            mapTypeControl: false,
            zoomControl: false,
            streetViewControl: false
        }
        map = new google.maps.Map(document.getElementById(mapDealerId), myOptions);

        var point = new google.maps.LatLng(latitude, longitude);

        var marker = new google.maps.Marker({
            position: point,
            map: map,
            icon: icon
        });
    }
}

function LoadMapDealer(longitude, latitude, serverName, isdvn) {
    // v2
    //if (GBrowserIsCompatible()) {  
    // v3
    if (geocoder) {
        // v2
        //map = new GMap2(document.getElementById("mapDealer"));
        //map.setCenter(new GLatLng(latitude, longitude), 15);

        // v2
        //var icon = new GIcon();
        // v3
        var icon;
        var deltaLongitude = 0;
        var deltaLatitude = 0;

        if (isdvn == 'true') {
            // v2
            //icon.image = serverName + "images/dealerBig.png";
            //icon.iconAnchor = new GPoint(35, 100);
            //icon.iconSize = new GSize(69, 107);

            // v3
            icon = new google.maps.MarkerImage(serverName + "images/dealerBig.png",
                new google.maps.Size(69, 107),
                new google.maps.Point(0, 0),
                new google.maps.Point(65, 120));
            deltaLongitude = -0.0015;
            deltaLatitude = +0.0015;
        }
        else {
            // v2
            //icon.image = serverName + "images/dealerSmall.png";
            //icon.iconAnchor = new GPoint(20, 35);
            //icon.iconSize = new GSize(41, 37);

            // v3
            icon = new google.maps.MarkerImage(serverName + "images/dealerSmall.png",
                new google.maps.Size(41, 37),
                new google.maps.Point(0, 0),
                new google.maps.Point(50, 45));
            deltaLongitude = -0.0015;
            deltaLatitude = +0.0009;
        }
        
        // v2
        //var point = new GLatLng(latitude, longitude);
        //
        //opts = {
        //    "icon": icon,
        //    "clickable": false};

        //var marker = new GMarker(point, opts);

        //map.addOverlay(marker);

        // v3
        var myOptions = {
            zoom: 15,
            center: new google.maps.LatLng(latitude + deltaLatitude, longitude + deltaLongitude),
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            mapTypeControl: false,
            zoomControl: false,
            streetViewControl: false
        }
        map = new google.maps.Map(document.getElementById("mapDealer"), myOptions);

        var point = new google.maps.LatLng(latitude, longitude);

        var marker = new google.maps.Marker({
            position: point,
            map: map,
            icon : icon
        });
    }
}

function CreateMarkers(response, serverName, clustersize, maxzoom) {

    var pointY;
    var pointX;

    //var xmlDoc = GXml.parse(response);
    var xmlDoc = xmlParse(response);
    
    
    var markers = xmlDoc.documentElement.getElementsByTagName("dealer");

    var markersClusterer = [];//CPP-1901

    for (var i = 0; i < markers.length; i++) {
        
        // v2
        //var point = new GLatLng(markers[i].getAttribute("latitude"), markers[i].getAttribute("longitude"));
        // v3
        var point = new google.maps.LatLng(markers[i].getAttribute("latitude"), markers[i].getAttribute("longitude"));
        
        if (i == 0) {
            pointY = point.y;
            pointX = point.x;
        }

        var isDVN = markers[i].getAttribute("isdvn");
        var index = markers[i].getAttribute("index");
        var icon;

        if (isDVN == 'true') {
            icon = new google.maps.MarkerImage(serverName + "images/dealerBig.png",
                new google.maps.Size(69, 107),
                new google.maps.Point(0, 0),
                new google.maps.Point(35, 100));

            if (index < 10) {
                var marker = new MarkerWithLabel({
                    position: point,
                    draggable: true,
                    //map: map,
                    icon: icon,
                    labelContent: "<div class='labeledMarker'>" + markers[i].getAttribute("index") + "</div>",
                    labelAnchor: new google.maps.Point(39, 60)
                });
            }
            else if (index < 100) {
                var marker = new MarkerWithLabel({
                    position: point,
                    draggable: true,
                    //map: map,
                    icon: icon,
                    labelContent: "<div class='labeledMarker'>" + markers[i].getAttribute("index") + "</div>",
                    labelAnchor: new google.maps.Point(47, 60)
                });
            }
            else {
                var marker = new MarkerWithLabel({
                    position: point,
                    draggable: true,
                    //map: map,
                    icon: icon,
                    labelContent: "<div class='labeledMarker'>" + markers[i].getAttribute("index") + "</div>",
                    labelAnchor: new google.maps.Point(55, 60)
                });
            }
        }
        else {
            icon = new google.maps.MarkerImage(serverName + "images/dealerSmall.png",
                new google.maps.Size(41, 37),
                new google.maps.Point(0, 0),
                new google.maps.Point(20, 35));


            if (index < 10) {
                var marker = new MarkerWithLabel({
                    position: point,
                    draggable: true,
                    //map: map,
                    icon: icon,
                    labelContent: "<div class='labeledMarker'>" + markers[i].getAttribute("index") + "</div>",
                    labelAnchor: new google.maps.Point(23, 28)
                });
            }
            else if (index < 100) {
                var marker = new MarkerWithLabel({
                    position: point,
                    draggable: true,
                    //map: map,
                    icon: icon,
                    labelContent: "<div class='labeledMarker'>" + markers[i].getAttribute("index") + "</div>",
                    labelAnchor: new google.maps.Point(30, 28)
                });
            }
            else {
                var marker = new MarkerWithLabel({
                    position: point,
                    draggable: true,
                    //map: map,
                    icon: icon,
                    labelContent: "<div class='labeledMarker'>" + markers[i].getAttribute("index") + "</div>",
                    labelAnchor: new google.maps.Point(38, 28)
                });
            }         
        }

        //var marker = new LabeledMarker(point, opts);
        //map.addOverlay(marker); 

        markersClusterer.push(marker); //CPP-1901 
    }

    //CPP-1901
    var styles = [[{
        url: serverName + 'images/dealerGroup.png',
        height: 107,
        width: 69,
        opt_anchor: [0, 0],
        opt_textColor: '#fff'
        }]];
//    var styles = [[{
//        url: serverName + 'images/m1.png',
//        height: 52,
//        width: 53,
//        opt_anchor: [0, 0],
//        opt_textColor: '#000'
//    },
//    {
//        url: serverName + 'images/m2.png',
//        height: 55,
//        width: 56,
//        opt_anchor: [0, 0],
//        opt_textColor: '#000'
//    }, 
//    {
//        url: serverName + 'images/m3.png',
//        height: 65,
//        width: 66,
//        opt_anchor: [0, 0]
//    },
//    {
//        url: serverName + 'images/m4.png',
//        height: 65,
//        width: 66,
//        opt_anchor: [0, 0]
//}]];

    // v2
    //var mcOptions = { gridSize: clustersize, maxZoom: maxzoom, styles: styles[0] };
    //var markers = markersClusterer;
    //var mc = new MarkerClusterer(map, markers, mcOptions);
    //
    //if (markers.length>0)
    //    map.setCenter(new GLatLng(pointY, pointX), 10);

    // v3
    var markers = markersClusterer;
    var mc = new MarkerClusterer(map, markers, {
        maxZoom: maxzoom,
        gridSize: clustersize,
        styles: styles[0]
    });  
}

function loadDirections(longitudeFrom, latitudeFrom, longitudeTo, latitudeTo, domain, unitSystem) {

    var mapDirections;
    var directionsService = new google.maps.DirectionsService();
    var directionsDisplay = new google.maps.DirectionsRenderer();

    var fromLatLng = new google.maps.LatLng(latitudeFrom, longitudeFrom);
    var toLatLng = new google.maps.LatLng(latitudeTo, longitudeTo);

    var options = {
        zoom: 7,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        center: fromLatLng
    }

    mapDirections = new google.maps.Map(document.getElementById("mapDirections"), options);
/*
    var imageFrom = new google.maps.MarkerImage(domain + 'images/redA.png',
        new google.maps.Size(24, 38),
        new google.maps.Point(0, 0),
        new google.maps.Point(11, 33));
      
    var imageTo = new google.maps.MarkerImage(domain + 'images/greenB.png',
        new google.maps.Size(24, 38),
        new google.maps.Point(0, 0),
        new google.maps.Point(11, 33));
        
    var marker = new google.maps.Marker({
        position: fromLatLng,
        map: mapDirections,
        icon: imageFrom});

    var marker = new google.maps.Marker({
       position: toLatLng,
       map: mapDirections,
       icon: imageTo});
       
    directionsDisplay.setOptions({ markerOptions: { visible: false }}); 
*/
    directionsDisplay.setMap(mapDirections);
    directionsDisplay.setPanel(document.getElementById("mapDirectionsText"));

    var requeteItineraire;

    if (unitSystem == 'mi') {
        requeteItineraire = {
            origin: fromLatLng,
            destination: toLatLng,
            travelMode: google.maps.DirectionsTravelMode.DRIVING,
            unitSystem: google.maps.DirectionsUnitSystem.IMPERIAL
        };
    }
    else {
        requeteItineraire = {
            origin: fromLatLng,
            destination: toLatLng,
            travelMode: google.maps.DirectionsTravelMode.DRIVING,
            unitSystem: google.maps.DirectionsUnitSystem.METRIC
        };
    }
    directionsService.route(requeteItineraire, function(response, status) {
        if (status == google.maps.DirectionsStatus.OK) {
            directionsDisplay.setDirections(response);
        }
    });
}     















/**
* Parses the given XML string and returns the parsed document in a
* DOM data structure. This function will return an empty DOM node if
* XML parsing is not supported in this browser.
* @param {string} str XML string.
* @return {Element|Document} DOM.
*/
function xmlParse(str) {
    if (typeof ActiveXObject != 'undefined' && typeof GetObject != 'undefined') {
        var doc = new ActiveXObject('Microsoft.XMLDOM');
        doc.loadXML(str);
        return doc;
    }

    if (typeof DOMParser != 'undefined') {
        return (new DOMParser()).parseFromString(str, 'text/xml');
    }

    return createElement('div', null);
}
