

function Gmap(params) {

    var map, markers, bounds, infoWindow, oc, oz;
    function construct(params){
        var p = jQuery.extend( {id: "map_canvas", mapTypeId: google.maps.MapTypeId.ROADMAP, lat: 48.32, lng: 2.39, zoom: 10}, params);
        var cross = new google.maps.LatLng(p.lat, p.lng);
        var myOptions = {
            zoom: p.zoom,
            center: cross,
            mapTypeId: p.mapTypeId
        };
        map = new google.maps.Map(document.getElementById(p.id), myOptions);
        markers = new Array();
        bounds = new google.maps.LatLngBounds();
        infoWindow = new google.maps.InfoWindow();
        oc = map.getCenter();
        oz = map.getZoom();
    }
    construct(params);

    this.getMap = function() {
        return map;
    };

    this.addMarker = function (lat, lng, html, pathIcon) {
      
        var cross = new google.maps.LatLng(lat, lng);
        bounds.extend(cross);
        map.fitBounds(bounds);
        var image = null;
        if(pathIcon!= undefined) {
            var size = new google.maps.Size(50, 50, "px", "px");
            image = new google.maps.MarkerImage(pathIcon, size);
        }
        var marker = new google.maps.Marker({
                        position: cross,
                        map: map,
                        html: html,
                        icon: image
                    });

        if ( html != undefined && html != "") {
            google.maps.event.addListener(marker, 'click', function () {
                infoWindow.setContent(this.html);
                infoWindow.open(map, this);
            });
        }
        markers.push(marker);
    };

    this.addMarkers = function (params) {
        for ( i in params ) {
            var p = params[i];
            addMarker(map, p.lat, p.lng, p.html, p.pathIcon);
        }
    };

    this.changeLocation = function (lat, lng, zoom){
        var cross = new google.maps.LatLng(lat, lng);
        if(zoom!=undefined){
            map.setZoom(zoom);
        }
        map.panTo(cross);
    };

    this.getMarkers = function (){
        return markers;
    };

}

