
var maps = new Array();
var markers = new Array();
var icons = new Array();
var mapTip;

function mapGetLatLngByPlace(place)
{
	var mapPlace = new google.maps.Geocoder();
	
	geocoder.geocode({ 'address': place }, function(results, status){
        if (status == google.maps.GeocoderStatus.OK)
        {
        	return results[0].geometry.location;          
        } 
        else
        {
        	return false;
        }
		});	
}

function mapInit(id, lat, long, z)
{
	mapTip = new google.maps.InfoWindow();
	
	var point = new google.maps.LatLng(lat, long);
	
	var options = {
		zoom: z,
		center: point,
		mapTypeId: google.maps.MapTypeId.ROADMAP,
		mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU }  		
		};
	
	maps[id] = new google.maps.Map($('map-google-'+id), options);
	markers[id] = new Array();
}

function mapRemoveAllMarker(id)
{
	for (i = 0; i < markers[id].length; i++)
	{
		markers[id][i].setMap(null);
	}
}


function mapMarkerGet(id, idMarker)
{
	return markers[id][idMarker];
}

function mapRemoveMarker(id, idMarker)
{
	markers[id][idMarker].setMap(null);
}

function mapAddMarker2(id, lat, long, idOff, icon)
{
	var point = new google.maps.LatLng(lat, long);
	
	var options = {  
		position: point,  
	    map: maps[id],
	    idOff: idOff,
	    icon: icons[icon]
		};
		
	markers[id][idOff] = new google.maps.Marker(options);
	
	google.maps.event.addListener(markers[id][idOff], 'click', function(){  
		searchGetInfo(idOff);
	});		
}

function mapAddMarker(id, lat, long, title, icon, text)
{
	var point = new google.maps.LatLng(lat, long);
	
	var options = {  
		position: point,  
	    map: maps[id],
	    title: title,
	    icon: icons[icon],
	    tip: text
		};
	
	var idMarker = markers[id].length;
	
	markers[id][idMarker] = new google.maps.Marker(options);
	
//	google.maps.event.addListener(markers[id][idMarker], 'mouseout', function(){
//		mapTip.close();
//		});
	
	google.maps.event.addListener(markers[id][idMarker], 'click', function(){  
		if (markers[id][idMarker].tip)
			{
				mapTip.setPosition(point);
				mapTip.setContent(markers[id][idMarker].tip);
				mapTip.open(maps[id]);
			}
		});	
}

function mapAddIcon(name, src, width, height, x, y)
{
	var size = new google.maps.Size(width, height);
	var pointStart = new google.maps.Point(0, 0);
	var pointArrow = new google.maps.Point(x, y);
	
	icons[name] = new google.maps.MarkerImage(src, size, pointStart, pointArrow);
}

function mapResize(id)
{
	var point = maps[id].getCenter();
	google.maps.event.trigger(maps[id], 'resize');
	maps[id].panTo(point);
	
	if (rectangle != undefined && rectangle.getBounds() != undefined)
	{
		maps[id].fitBounds(rectangle.getBounds());
	}
}

var area = new Array();
var rectangle;

function mapSelectionInit(id)
{
	var map = maps[id];
	
	if ($$('input.google-map-point'))
	{
		var points = $$('input.google-map-point').get('value');
		points = points[0];
		
		if (!points) return;
		
		pos = points.indexOf(';');		
		point1 = points.substr(0, pos);
		point2 = points.substr(pos+1);
		
		pos = point1.indexOf(',');
		point1Lat = point1.substr(0, pos);
		point1Lng = point1.substr(pos+1);
		
		pos = point2.indexOf(',');
		point2Lat = point2.substr(0, pos);
		point2Lng = point2.substr(pos+1);		
		
		point1 = new google.maps.LatLng(point1Lat, point1Lng);
		point2 = new google.maps.LatLng(point2Lat, point2Lng);
		
		area[0] = point1;
		area[1] = point2;
		
		var bound = new google.maps.LatLngBounds(area[0], area[1]);
		rectangle.setBounds(bound);
		rectangle.setMap(map);
		map.fitBounds(rectangle.getBounds());		
	}		
}

function mapSelectAreaInit(id)
{		
	rectangle = new google.maps.Rectangle({ 
		clickable: false, fillColor: '#FF6B00', fillOpacity: 0.2, 
		strokeColor: '#FF6B00', strokeOpacity: 1.0, strokeWeight: 2, zIndex: 10
		});	
		
	var map = maps[id];
	
	google.maps.event.addListener(rectangle, 'click', function(point){
		});
	
	google.maps.event.addListener(map, 'click', function(point){
		
		if (area.length == 2)
		{
			area = new Array();
			rectangle.setMap(null);
			$$('input.google-map-point').set('value', '')
			$$('input.google-map-point').set('checked', false);		
		}
		else if (area.length == 0)
		{
			area[0] = point.latLng;
		}
		else
		{	
			area[1] = point.latLng;
			
			if (area[0].lng() > area[1].lng())
			{
				var tmp = area[0];
				area[0] = area[1];
				area[1] = tmp;
			}
			
			var bound = new google.maps.LatLngBounds(area[0], area[1]);
			rectangle.setBounds(bound);
			rectangle.setMap(map);
			map.fitBounds(rectangle.getBounds());			
			$$('input.google-map-point').set('value', area[0].lat()+','+area[0].lng()+';'+area[1].lat()+','+area[1].lng())
			$$('input.google-map-point').set('checked', true);
		}
			
	});
	
	google.maps.event.addListener(map, 'mousemove', function(point){
		
		point = point.latLng
		
		if (area.length != 1) return;
		
		if (area[0].lng() > point.lng())
		{
			var bound = new google.maps.LatLngBounds(point, area[0]);
		}		
		else
			var bound = new google.maps.LatLngBounds(area[0], point);	
		
		rectangle.setBounds(bound);
		rectangle.setMap(null);
		rectangle.setMap(map);
		
	});
	
	google.maps.event.addListener(map, 'rightclick', function(point){
		area = new Array();
		rectangle.setMap(null);
		$$('input.google-map-point').set('value', '');
		$$('input.google-map-point').set('checked', false);
	});	
}

var lastMarker;
var markerList = new Array();
var markerAct = 0;

function markerPrev()
{
	markerAct--;
	
	if (markerAct < 0) markerAct = markerList.length - 1;
		
	searchGetInfo(markerList[markerAct]);
}

function markerNext()
{
	markerAct++;
	
	if (markerAct >= markerList.length) markerAct = 0;
	
	searchGetInfo(markerList[markerAct]);
}

function searchGetInfo(id)
{	
	lastMarker = mapMarkerGet('search', id);										
	//mapRemoveMarker('search', id);
	//mapAddMarker2('search', lastMarker.getPosition().lat(), lastMarker.getPosition().lng(), id, 'big');
	
	maps['search'].panTo(lastMarker.getPosition());
	
	if(lastMarker.tip){
		mapTip.setPosition(lastMarker.position);
		mapTip.setContent(lastMarker.tip);
		mapTip.open(maps['search']);
	}
}
