
function myInArray(needle, haystack) {
	var key = '';

	for (key in haystack) {
		if (haystack[key] == needle) {
			return key;
		}
	}

	return -1;
}

function setMutualValues(id1, id2) {
	var obj1 = document.getElementById(id1);
	var obj2 = document.getElementById(id2);
	if (obj1.value != "")
		obj2.value = obj1.value;
	else obj1.value = obj2.value;
}

function getMapPars(prefix, map_id) {
	var map_pars = new Array();
	var lat = document.getElementById(prefix+"_lat"+map_id).value;
	var lng = document.getElementById(prefix+"_lng"+map_id).value;
	var zoom = document.getElementById(prefix+"_zoom"+map_id).value;
	if (lat == "") lat = 0;
	if (lng == "") lng = 0;
	if (zoom == "") zoom = 0;
	
	map_pars['lat'] = parseFloat(lat);
	map_pars['lng'] = parseFloat(lng);
	map_pars['zoom'] = parseInt(zoom);
	
	if (map_id != "")
	{
		map_pars['marker_lat'] = parseFloat(document.getElementById(prefix+"_marker_lat"+map_id).value);
		map_pars['marker_lng'] = parseFloat(document.getElementById(prefix+"_marker_lng"+map_id).value);

		if (!map_pars['marker_lat'] && !map_pars['marker_lng']) {
			map_pars['marker_lat'] = map_pars['lat'];
			map_pars['marker_lng'] = map_pars['lng'];
		}
	}
	
	return map_pars;
}

/* Google maps init */

function googleMapInitialize(map_id, clientSide) {
	if (typeof(window['GMap2']) == 'undefined') return false;
	if (GBrowserIsCompatible()) {
		var map = new GMap2(document.getElementById("google_map_canvas"+map_id));
        
		map_pars = getMapPars('google_map', map_id);
        
		var center = new GLatLng(map_pars['lat'], map_pars['lng']);
		map.setCenter(center, map_pars['zoom']);
        
		var zoomControl = new GLargeMapControl();
		map.addControl(zoomControl);
        
		var marker = new GMarker(new GLatLng(map_pars['marker_lat'], map_pars['marker_lng']), {draggable: (clientSide === true?false:true)});
        
        if (clientSide !== true) {
			GEvent.addListener(map, "moveend", function() {
				document.getElementById("google_map_lat"+map_id).value = map.getCenter().lat();
				document.getElementById("google_map_lng"+map_id).value = map.getCenter().lng();
			});

			GEvent.addListener(marker, "dragend", function() {
				document.getElementById("google_map_marker_lat"+map_id).value = marker.getPoint().lat();
				document.getElementById("google_map_marker_lng"+map_id).value = marker.getPoint().lng();
			});
        
			GEvent.addListener(map, "zoomend", function(previouszoom,newzoom) {
				document.getElementById("google_map_zoom"+map_id).value = newzoom;
			});
        }
		map.addOverlay(marker);
	}
}

var googleMapType;

function googleMapTypeInitialize() {
	if (typeof(window['GMap2']) == 'undefined') return false;
	if (GBrowserIsCompatible()) {
		var map = new GMap2(document.getElementById("google_map_type_canvas"));
		googleMapType = map;
		map_pars = getMapPars('map_def', "");
		
		var center = new GLatLng(map_pars['lat'], map_pars['lng']);
		map.setCenter(center, map_pars['zoom']);
		
		var zoomControl = new GLargeMapControl();
		map.addControl(zoomControl);
		
		GEvent.addListener(map, "moveend", function() {
			document.getElementById("map_def_lat").value = map.getCenter().lat();
			document.getElementById("map_def_lng").value = map.getCenter().lng();
        });

        GEvent.addListener(map, "zoomend", function(previouszoom,newzoom) {
          document.getElementById("map_def_zoom").value = newzoom;
        });
	}
	
}

function googleMapChangeSize() {
	var canvas = document.getElementById("google_map_type_canvas");
	canvas.style.width = document.getElementById("gmap_width").value;
	canvas.style.height = document.getElementById("gmap_height").value;
	googleMapType.checkResize();
}

    
/* Yandex maps init */
var yandexMaps = new Array();
var currYandexMap;
var currYandexMapPlacemark;
function yandexMapInitialize(map_id, clientSide) {
	if (typeof(window['YMaps']) == 'undefined') return false;
	// Проверка против бага с рекурсивным вызовом
	var maps_index = myInArray(map_id, yandexMaps); //Array.indexOf(yandexMaps, map_id);
	if (maps_index == -1) {
		var map = new YMaps.Map(document.getElementById("yandex_map_canvas"+map_id));
		currYandexMap = map;
		yandexMaps[map_id] = map_id;
				
		map_pars = getMapPars('yandex_map', map_id);
    	
		map_zoom = new YMaps.Zoom(); 
		map.addControl(map_zoom);
    	
		map.setCenter(new YMaps.GeoPoint(map_pars['lng'], map_pars['lat']), map_pars['zoom']);
    	
		var placemark = new YMaps.Placemark(new YMaps.GeoPoint(map_pars['marker_lng'], map_pars['marker_lat']), {hasBalloon: false, draggable: (clientSide === true?false:true)});
		currYandexMapPlacemark = placemark;
		map.addOverlay(placemark);
		
		/*YMaps.Events.observe(placemark, placemark.Events.Click, function () {
			
		});*/
		
		if (clientSide !== true) {
			YMaps.Events.observe(placemark, placemark.Events.DragEnd, function () {
				document.getElementById("yandex_map_marker_lat"+map_id).value = placemark.getGeoPoint().getY();
				document.getElementById("yandex_map_marker_lng"+map_id).value = placemark.getGeoPoint().getX();
				//window.alert(''+document.getElementById("yandex_map_marker_lng"+map_id).value);		
			});

		
			var fZoomChange = function (map) {
				var map_zoom = document.getElementById("yandex_map_zoom"+map_id);
				// проверка на очередной баг YMaps
				if (map_zoom != null) {
					//window.alert('goodzoom'+map_id);
					map_zoom.value = map.getZoom();
					document.getElementById("yandex_map_lat"+map_id).value = map.getCenter().getY();
					document.getElementById("yandex_map_lng"+map_id).value = map.getCenter().getX();
				} //else window.alert('badzoom'+map_id);
			
			};
		
			YMaps.Events.observe(map, map.Events.SmoothZoomStart, fZoomChange);
			YMaps.Events.observe(map, map.Events.SmoothZoomEnd, fZoomChange);
			YMaps.Events.observe(map, map.Events.Update, fZoomChange);
			YMaps.Events.observe(map, map.Events.Redraw, fZoomChange);
			YMaps.Events.observe(map, map.Events.MoveEnd, fZoomChange);
		}

	} else {
		yandexMaps.splice(maps_index, 1);
	}
	
}

var yandexMapType;
function yandexMapTypeInitialize() {
	if (typeof(window['YMaps']) == 'undefined') return false;
	var map = new YMaps.Map(document.getElementById("yandex_map_type_canvas"));
	yandexMapType = map;
	
	map_pars = getMapPars('map_def', "");

	map_zoom = new YMaps.Zoom(); 
	map.addControl(map_zoom);
    	
	map.setCenter(new YMaps.GeoPoint(map_pars['lng'], map_pars['lat']), map_pars['zoom']);
	
	var fZoomChange = function (map) {
		var map_zoom = document.getElementById("map_def_zoom");
		// проверка на очередной баг YMaps
		if (map_zoom != null) {
			map_zoom.value = map.getZoom();
			document.getElementById("map_def_lat").value = map.getCenter().getY();
			document.getElementById("map_def_lng").value = map.getCenter().getX();
		} //else window.alert('badzoom'+map_id);	
	};
		
	YMaps.Events.observe(map, map.Events.SmoothZoomStart, fZoomChange);
	YMaps.Events.observe(map, map.Events.SmoothZoomEnd, fZoomChange);
	YMaps.Events.observe(map, map.Events.Update, fZoomChange);
	YMaps.Events.observe(map, map.Events.Redraw, fZoomChange);
	YMaps.Events.observe(map, map.Events.MoveEnd, fZoomChange);
}

function yandexMapChangeSize() {
	var canvas = document.getElementById("yandex_map_type_canvas");
	canvas.style.width = document.getElementById("ymap_width").value;
	canvas.style.height = document.getElementById("ymap_height").value;
	yandexMapType.destructor();
	yandexMapTypeInitialize();
}

function saveMapSizeToForm(mapType) {
	document.getElementById("map_width").value = document.getElementById(mapType + "_width").value;
	document.getElementById("map_height").value = document.getElementById(mapType + "_height").value;
}

    
    
