function GMapWorker(params)
{
	var ob = {
		map_div: 'map',
		init_center: [0, 0, 14],
		g_maps: 0,
		g_wheel: true,
		add_controls: true,
		points: null
	};

    var tinyIcon = new GIcon();
    tinyIcon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
    tinyIcon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
    tinyIcon.iconSize = new GSize(12, 20);
    tinyIcon.shadowSize = new GSize(22, 20);
    tinyIcon.iconAnchor = new GPoint(6, 20);
    tinyIcon.infoWindowAnchor = new GPoint(5, 1);
    
	for (var x in params)
		ob[x] = params[x];
	
	ob.map = new GMap2(document.getElementById(ob.map_div));
	ob.map.setCenter(new GLatLng(ob.init_center[0], ob.init_center[1]), ob.init_center[2]);
	
	ob.markers = {};
	
    var first_object = true;
    if (ob.points != null)
		for (var i in ob.points)
		{
			
            param = {title: ob.points[i].comp_title + ' - ' + ob.points[i].address };
            if(!first_object)
                param.icon=tinyIcon;
            
                
            var mrk = new GMarker(new GLatLng(ob.points[i].lat, ob.points[i].lng), param);
			mrk.address_info = ob.points[i];
			GEvent.addListener(mrk, 'click', function() { this.openInfoWindow('<div class="gmap_popup"><h4>' + this.address_info.comp_title + '</h4><div>' + this.address_info.city_title + ',<br/>' + this.address_info.address + ((this.address_info.phone != '') ? '<br/>' + this.address_info.phone : '') + '</div><small><a href="/company' + this.address_info.comp_id + '/" target=_blank>Подробнее</a></small></div>'); });
			ob.map.addOverlay(mrk);
			
			ob.markers[i] = mrk;
            if(first_object) first_object = false;
		}
	
	ob.SetPoints = function(pts) {
			for (var i in ob.markers)
				ob.map.removeOverlay(ob.markers[i]);
				
			ob.markers = {};
			
			for (var i in pts)
			{
				var mrk = new GMarker(new GLatLng(pts[i].lat, pts[i].lng), {title: pts[i].comp_title + ' - ' + pts[i].address });
				mrk.address_info = pts[i];
				GEvent.addListener(mrk, 'click', function() { this.openInfoWindow('<div class="gmap_popup"><h4>' + this.address_info.comp_title + '</h4><div>' + this.address_info.city_title + ',<br/>' + this.address_info.address + ((this.address_info.phone != '') ? '<br/>' + this.address_info.phone : '') + '</div><small><a href="/company' + this.address_info.comp_id + '/" target=_blank>Подробнее</a></small></div>'); });
				ob.map.addOverlay(mrk);
				
				ob.markers[i] = mrk;
			}
		}
	
	var ui = ob.map.getDefaultUI();
	
	ui.controls.scalecontrol = false;
	ui.controls.largemapcontrol3d = false;
	ui.controls.hierarchicalmaptypecontrol = false;
	ui.maptypes.hybrid = false;
	ui.maptypes.physical = false;
	ui.zoom.scrollwheel = ob.g_wheel;

	ob.map.setUI(ui);
	if (ob.add_controls)
	{
		ob.map.addControl(new GLargeMapControl());
		ob.map.addControl(new GMapTypeControl());
	}

	return ob;
}
