


var map = null;
var currentId = null;
var mgr=null;
var geocoder = null;
var lang = 'en';
var markers = [];
var metromarkers = [];
var regRemoveComments=/\(.+\)/;
var regRemoveCity=/(Киев, Украина,|, Kiev, Ukraine)/;
var regRemoveCityENG=/, Kiev, Ukraine/;

var i=0;
// My Icon (maked by http://www.powerhut.co.uk/googlemaps/custom_markers.php )
	var OfficeIcon = new GIcon();
	OfficeIcon.image = '/images/markers/lath/image.png';
	OfficeIcon.shadow = '/images/markers/lath/shadow.png';
	OfficeIcon.iconSize = new GSize(24,32);
	OfficeIcon.shadowSize = new GSize(40,32);
	OfficeIcon.iconAnchor = new GPoint(10,40);
	OfficeIcon.infoWindowAnchor = new GPoint(12,0);
	OfficeIcon.printImage = '/images/markers/lath/printImage.gif';
	OfficeIcon.mozPrintImage = '/images/markers/lath/mozPrintImage.gif';
	OfficeIcon.printShadow = '/images/markers/lath/printShadow.gif';
	OfficeIcon.transparent = '/images/markers/lath/transparent.png';
	
	var markerOffice = { icon:OfficeIcon };

var metroIcon = new GIcon();
metroIcon.image = '/images/markers/metro/image.png';
metroIcon.shadow = '/images/markers/metro/shadow.png';
metroIcon.iconSize = new GSize(19,17);
metroIcon.shadowSize = new GSize(28,17);
metroIcon.iconAnchor = new GPoint(10,17);
metroIcon.infoWindowAnchor = new GPoint(10,0);
metroIcon.printImage = '/images/markers/metro/printImage.gif';
metroIcon.mozPrintImage = '/images/markers/metro/mozPrintImage.gif';
metroIcon.printShadow = '/images/markers/metro/printShadow.gif';
metroIcon.transparent = '/images/markers/metro/transparent.png';

	var markerMetro = { icon:metroIcon };


	var blueIcon = new GIcon(G_DEFAULT_ICON);
	blueIcon.image = "http://www.google.com/intl/en_us/mapfiles/ms/micons/blue-dot.png";
	var markerBlue = { icon:blueIcon };

	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);
	var markerTiny = { icon:tinyIcon };

	var ColorIcon=[];
	ColorIcon[1] = new GIcon();
	ColorIcon[1].image = "http://labs.google.com/ridefinder/images/mm_20_green.png";
	ColorIcon[1].shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
	ColorIcon[1].iconSize = new GSize(12, 20);
	ColorIcon[1].shadowSize = new GSize(22, 20);
	ColorIcon[1].iconAnchor = new GPoint(6, 20);
	ColorIcon[1].infoWindowAnchor = new GPoint(5, 1);

	ColorIcon[2] = new GIcon();
	ColorIcon[2].image = "http://labs.google.com/ridefinder/images/mm_20_blue.png";
	ColorIcon[2].shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
	ColorIcon[2].iconSize = new GSize(12, 20);
	ColorIcon[2].shadowSize = new GSize(22, 20);
	ColorIcon[2].iconAnchor = new GPoint(6, 20);
	ColorIcon[2].infoWindowAnchor = new GPoint(5, 1);

	ColorIcon[3]= new GIcon();
	ColorIcon[3].image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
	ColorIcon[3].shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
	ColorIcon[3].iconSize = new GSize(12, 20);
	ColorIcon[3].shadowSize = new GSize(22, 20);
	ColorIcon[3].iconAnchor = new GPoint(6, 20);
	ColorIcon[3].infoWindowAnchor = new GPoint(5, 1);


function addMyMarker(x,y,icon,title,html) {
	var marker = new GMarker(new GLatLng(y,x), {title:title,  icon: icon });
    GEvent.addListener( marker, 'click', function() {  marker.openInfoWindowHtml(html); } ); 
	return marker;
}
function FlatMarkersAdd() {
	var flats=getFlatsArray();
	var i=0;
	for (var N in flats) {
		var flat=flats[N];
		i=i+1;
		 markers[i]=addMyMarker(flat.x,flat.y,ColorIcon[flat.rooms],flat.address,flat.html) ;
	}
		 markers[0]=addMyMarker(30.520738,50.454338,OfficeIcon,'Office','Михайловская 21, офис 2<br>likeathome.com.ua');
	return(markers);
}

function MetroMarkersAdd() {
	var metro=getMetroArray();
	var new_markers=[];
	var i=0;
	for (var N in metro) {
		var station=metro[N];
		new_markers[i]=addMyMarker(station.x,station.y,metroIcon,station.station,station.station) ;
		i=i+1;
	}

	return(new_markers);
}


function init() { 	initialize(); }

function initialize() {	
//	initMarkersManager();
	initClassic();
var publisher_id = 3220978204140793;

var adsManagerOptions = {
  maxAdsOnMap : 2,
    style: 'adunit',
    // The channel field is optional - replace this field with a channel number 
	//   // for Google AdSense tracking
    channel: '3220978204140793'  
    };
adsManager = new GAdsManager(map,
publisher_id, adsManagerOptions);
adsManager.enable();


}

function initClassic() {
 if (GBrowserIsCompatible()) {
   	map = new GMap2(document.getElementById("google_maps"));
	geocoder = new GClientGeocoder();
	var customUI = map.getDefaultUI();
	 // Remove MapType.G_HYBRID_MAP
	customUI.maptypes.hybrid = false;
	map.setUI(customUI);
	map.addControl(new GOverviewMapControl());
	
//	showAddressExtended('Киев, Михайловская 21','<b>LikeAtHome.com.ua</b><br>Company Office<br><img align=center src=/images/logo.jpg>','office');
  }
}
function initMarkersManager() {
 if (GBrowserIsCompatible()) {
   	map = new GMap2(document.getElementById("google_maps"));
	geocoder = new GClientGeocoder();
	var customUI = map.getDefaultUI();
	 // Remove MapType.G_HYBRID_MAP
	customUI.maptypes.hybrid = false;
	map.setUI(customUI);
	map.addControl(new GOverviewMapControl());
  //  showAddressExtended('Киев, Михайловская 21','<b>LikeAtHome.com.ua</b><br>Company Office<br><img align=center src=/images/logo.jpg>','office');
    var flats=getFlatsArray();
	if (currentId) {
		var place=new GLatLng(flats[currentId].y,flats[currentId].x);
		map.setCenter(place, 16);	
		map.openInfoWindowHtml(place,   flats[currentId].html );
	}
	else
	{		
		map.setCenter(new GLatLng(50.454338,30.520738), 13);	
	}
	var mgrOptions = { borderPadding: 50, maxZoom: 10, trackMarkers: false };
	mgr = new MarkerManager(map, mgrOptions);	
    mgr.addMarkers(FlatMarkersAdd(),10);
	mgr.addMarkers(MetroMarkersAdd(),10);
	mgr.refresh();
  }
}

function ShowHideMap(address) {
			currentId=address;
			var tmp=document.getElementById('google_maps');
			tmp.style.display =(tmp.style.display == 'none') ? 'block' : 'none';

			if (! is_object(geocoder)) {
				initialize();
				tmp.style.display = 'block';
				showAddressExtended(address,' ','blue');
				document.getElementById("ShowHideMap").value='Скрыть карту';
			}
			else
			{
				GUnload();
				delete geocoder;
				delete map;
				geocoder=0;
				tmp.style.display = 'none';
				document.getElementById("ShowHideMap").value='Показать карту';
			}
		}
function showAddressExtended(address,comments,marker) {

	  if (! geocoder) { initialize(); showAddressExtended(address,comments,marker); return;}
      address=address.replace(regRemoveComments,"");
	  var regBAG=/Красно/;
      address=address.replace(regBAG,"Червоно");
      if (geocoder) {
        geocoder.getLocations(address, function(response) { GoToAddress(response,comments,marker);} );
				
      }

}

function GoToAddress(response,comments,CurMarker) {
	   if (!response || response.Status.code != 200) {
       	alert("Sorry, we were unable to geocode that address");
      } else {
        var place = response.Placemark[0];
        var point = new GLatLng(place.Point.coordinates[1],
                            place.Point.coordinates[0]);
		CurMarker=(CurMarker == 'office') ? markerOffice : '';
		
        var marker = new GMarker(point,CurMarker);
		comments=(comments) ? comments : '';

        marker.openInfoWindowHtml( place.address + '<br>' +comments );
		GEvent.addListener(marker, "click", function() {
		    map.openInfoWindowHtml(point,place.address + '<br>' +comments);
	  	});
		
	//	markers[17].remove();;
		map.setCenter(point, 16);
        map.addOverlay(marker);
      }
	
		
}

function showAddress(address) {

      address=address.replace(regRemoveComments,"");
	  var regBAG=/Красно/;
      address=address.replace(regBAG,"Червоно");
//	  alert(address);

	  if (! geocoder) {	initialize(); showAddress(address); return;}

      if (geocoder) {
        geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
              alert(address + " not found");
            } else {
              map.setCenter(point, 16);
              var marker = new GMarker(point);
              map.addOverlay(marker);
              marker.openInfoWindowHtml(address.replace(regRemoveCity,''));
            }
          }
        );
      }
}

function GetGeoPosition(value) {
	geocoder.getLocations(value.replace(regRemoveComments,""), FindAddressCoordinates);
}

function FindAddressCoordinates(response) {
      if (!response || response.Status.code != 200) {
        alert("Sorry, we were unable to geocode that address");
      } else {
        place = response.Placemark[0];
        point = new GLatLng(place.Point.coordinates[0],
                            place.Point.coordinates[1]);
		document.getElementById('geoposition').value=place.Point.coordinates[0] +','+place.Point.coordinates[1] ;
		alert(place.address);
      }
}

function is_object (mixed_var){
	if (mixed_var instanceof Array) {
		        return false;
    } else {
        return (mixed_var !== null) && (typeof( mixed_var ) == 'object');
}
}
