var shopsMap = 0;
var shopsMapTinyIcon;
var shopsMapInitiated = 0;
var shopsMapMarkersBound;
var shopMarkers = new Array ();
var addShopMarker = 0;

var shopsMapBInitRequestStarted = 0;

function add_shop_action_change (obj)
{
	var curType = obj.value;
	var objShowHide = document.getElementById('add_shop_kupon_value');
	var newDisplay = "none";
	
	if (curType != 2 && curType != 3)
		newDisplay = "none";
	else
		newDisplay = "block";

	objShowHide.style.display = newDisplay;
}

function add_shop_add_marker (latlng)
{
	if (addShopMarker)
		return; 
		
	addShopMarker = new GMarker(latlng, {draggable: true});
	
	var infoMsg = "Вы можете переносить иконку <br /> по карте при помощи мышки.";
	
	shopsMapMarkersBound.extend (latlng);
	
	shopsMap.addOverlay(addShopMarker);
	
	addShopMarker.openInfoWindowHtml(infoMsg);
	
	GEvent.addListener(addShopMarker, "dragstart", function() {
  		map.closeInfoWindow();
  	});

	GEvent.addListener(addShopMarker, "dragend", function() {
  		addShopMarker.openInfoWindowHtml(infoMsg);
  	});
}

function createMarker(point, number, desc) 
{
	var marker = new GMarker(point, markerOptions);
	marker.value = number;
		
	GEvent.addListener(marker, "click", function() 
	{
		shopsMap.openInfoWindowHtml(point, desc);
	});
	
	GEvent.addListener(marker, "mouseover", function() 
	{
		shopsMap.openInfoWindowHtml(point, desc);
	});
	
	/* GEvent.addListener(marker, "mouseout", function() 
	{
		// shopsMap.closeInfoWindow();
	});
	*/
  		
	shopsMap.addOverlay(marker);
	return marker;
}

function map_hide ()
{
	var objMapContainer = document.getElementById('shops_map_canvas');
	
	if ( ! objMapContainer)
	{
		alert ("Can not find map canvas!");
		return 0;
	}
	
	var objMapOperations = document.getElementById('shops_map_operations');
	
	objMapContainer.style.display = 'none';
	
	if (objMapOperations)
		objMapOperations.style.display = 'none';
	
	shopsMap = 0;
	shopsMapTinyIcon = null;
	shopsMapInitiated = 0;
	shopsMapMarkersBound = null;
	shopMarkers = new Array ();
	addShopMarker = 0;
}

function shop_map_many_points ()
{
	alert ('Необходимо выбрать округ, чтобы смотреть точки на карте!');
}

function map_init (center_lat, center_lng)
{
	if (shopsMapInitiated)
		return 0;
				
	if ( ! GBrowserIsCompatible())
	{
		alert ('Your browser not compatible with map!');
		return 0;
	}
	
	shopsMapTinyIcon = new GIcon();
		
	shopsMapTinyIcon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
	shopsMapTinyIcon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
	shopsMapTinyIcon.iconSize = new GSize(12, 20);
	shopsMapTinyIcon.shadowSize = new GSize(22, 20);
	shopsMapTinyIcon.iconAnchor = new GPoint(6, 20);
	shopsMapTinyIcon.infoWindowAnchor = new GPoint(5, 1);
	markerOptions = { icon:shopsMapTinyIcon };
	
	var objTopContainer = document.getElementById('shops_map_container');
	
	var objMapContainer = document.getElementById('shops_map_canvas');
	
	if ( ! objMapContainer)
	{
		alert ("Can not find map canvas!");
		return 0;
	}
	
	objMapContainer.style.display = 'block';
	
	var objMapOperations = document.getElementById('shops_map_operations');
	
	if (objTopContainer)
	{
		var mapPadLeft = Math.floor ((objTopContainer.offsetWidth - 
			objMapContainer.offsetWidth) / 2);
		objMapContainer.style.left = mapPadLeft + 'px';
		
		if (objMapOperations)
		{
			mapPadLeft = Math.floor ((objTopContainer.offsetWidth - 
			objMapOperations.offsetWidth) / 2);
			objMapOperations.style.left = mapPadLeft + 'px';
		}
	}
	
	if (objMapOperations)
		objMapOperations.style.display = 'block';
	
	shopsMap = new GMap2(objMapContainer);
	
	if (center_lat && center_lng)
		shopsMap.setCenter(new GLatLng(center_lat, center_lng), 10);
	 
	var mapControl = new GMapTypeControl();
	shopsMap.addControl(mapControl);
	shopsMap.addControl(new GLargeMapControl());
	
	shopsMapMarkersBound  = new GLatLngBounds ();
	
	shopsMapInitiated = 1;
	
	/*
	GEvent.addListener(shopsMap, "click", function (overlay, latlng) {
			alert ('Lat: ' + latlng.lat() + ', Lng: ' + latlng.lng ());
		});
	*/
	
	return 1;
}

function shop_map_add_points (data, responseCode) 
{
	if (responseCode != 200)
	{
		alert ('Can not get map points!');
		shopsMapBInitRequestStarted = 0;
		return;
	}
			
	var xml = GXml.parse(data);
	var markers = xml.documentElement.getElementsByTagName("point");
	
	if (shopsMapBInitRequestStarted)
	{
		shopsMapBInitRequestStarted = 0;
		
		if (markers.length == 0)
		{
			alert ('К сожалению, для компаний в этой катетегории/рубрике не задано ни одной торговой точки.');
			return;
		}
		
		if ( ! map_init())
			return;
	}
	
	for (var i = 0; i < markers.length; i++) 
	{
		var point = new GLatLng(parseFloat(markers[i].getAttribute("map_point_lat")),
			parseFloat(markers[i].getAttribute("map_point_lng")));
							
		shopsMapMarkersBound.extend (point);
		
		var pointPhysId = markers[i].getAttribute ('id');
		
		var bFound = 0;
		for (var j = 0; j < shopMarkers.length; j++)
		{
			if (shopMarkers[j] == pointPhysId)
			{
				bFound = 1;
				break;
			}
		}
		
		if (bFound)
			continue;
			
		shopMarkers.push (pointPhysId);
				
		var desc = '<div style="width: 300px;"><a href="'+
		site_base_addr + 'shop/' + markers[i].getAttribute ('shop_id') + '/'
		+'"><b>' + markers[i].getAttribute ('shop_name') + "</b></a><br />" 
		+ '<div style="font-size: 10pt;">'
			+ markers[i].getAttribute ('address') 
			+ '</div>'
			+ '<br />Тел.: ' + markers[i].getAttribute ('phone')
			+ '</div>';
			
		createMarker (point, i, desc);
	}
		
	if (markers.length)
		map_autocenter();
}

function map_autocenter()
{
	if (shopsMapMarkersBound.isEmpty ())
		return;
		
	var zoomLevel = shopsMap.getBoundsZoomLevel (shopsMapMarkersBound);
	if (zoomLevel > 14)
		zoomLevel = 14;
			
 	shopsMap.setCenter(shopsMapMarkersBound.getCenter(), zoomLevel);
}
    
function shop_map_initialize(mode, categ_id, rubric_id)
{
	/* if ( ! map_init ())
		return; */
	
	var markersUrl = site_base_addr + 'skidki/map_points/';
	
	if (categ_id != '')
		markersUrl += 'categ_id.' + categ_id;
	else
		markersUrl += 'rubric_id.' + rubric_id;
		
	markersUrl += '.xml';
	
	shopsMapBInitRequestStarted = 1;
	
	// alert (markersUrl);
	GDownloadUrl(markersUrl, shop_map_add_points);
		
	// GEvent.addListener(shopsMap, "click", map_event_click);
}

function map_viewshop_add (phys_id)
{
	map_init ();
	var markersUrl = site_base_addr + 'shop/phys_info/id.' + phys_id + '.xml';
	GDownloadUrl(markersUrl, shop_map_add_points);
}

function map_shop_all (shop_id)
{
	map_init ();
	var markersUrl = site_base_addr + 'shop/phys_info/shop_id.' + shop_id + '.xml';
	GDownloadUrl(markersUrl, shop_map_add_points);
}

function map_addshop_init ()
{
	map_init (g_city_center_lat, g_city_center_lng);
	
	var objForm = document.getElementById('add_shop_form');
	
	if ( ! objForm)
	{
		alert ('Can not find add shop form!');
		return;
	}
	
	if (objForm.map_point_lat.value != "")
	{
		var latlng = new GLatLng(objForm.map_point_lat.value, objForm.map_point_lng.value);
		add_shop_add_marker (latlng);
		map_autocenter ();
	}
	else
	{
		GEvent.addListener(shopsMap, "click", function (overlay, latlng) {
			add_shop_add_marker (latlng);
		});
		
		var objInfo = document.getElementById('add_shop_map_info_msg');
		
		if ( ! objInfo)
		{
			alert ('Can not find obj info!');
			return;
		}
		
		objInfo.innerHTML = 
			'<div style="text-align: right;">Кликните на карте, чтобы установить точку.</div>';
	}
}

/* ****************************************************************************************** */

function addshop_submit_form (objForm)
{
	if ( ! addShopMarker)
	{
		alert ('Необходимо установить точку на карте!');
		return false;
	}
	
	var curLatLng = addShopMarker.getLatLng();
	
	objForm.map_point_lat.value = curLatLng.lat();
	objForm.map_point_lng.value = curLatLng.lng();
	
	/* alert (curLatLng.lat() + ', ' + curLatLng.lng());
	return false; */
	
	if (objForm.address.value.length == 0)
	{
		alert ('Необходимо заполнить поле адрес!');
		return false;
	} 
	
	/* if (objForm.phone.value.length == 0)
	{
		alert ('Необходимо заполнить поле телефон!');
		return false;
	}
	
	var phoneCheck = /^\([0-9]{3}\) [0-9]{3}-[0-9]{4}$/;
	
	if ( ! phoneCheck.test (objForm.phone.value))
	{
		alert ('Номер телефона указан в неверном формате! Формат: (111) 222-3333');
		return false;
	} */
	
	
	if (objForm.district_id.value == 0)
	{
		alert ('Необходимо указать район!');
		return false;
	}
		
	return true;
}

function add_shop_geocoder_handler (point)
{
	if ( ! point)
	{
		alert ('Точка не найдена! Установите вручную, либо измените адрес.');
		return;
	}
	
	if (addShopMarker)
	{
		shopsMapMarkersBound  = new GLatLngBounds ();
		// shopsMap.removeOverlay (addShopMarker);
		shopsMap.clearOverlays();
		addShopMarker = 0;
	}

	add_shop_add_marker (point);
	map_autocenter();
}

function add_shop_addr2latlng(cur_city_name)
{
	var geocoder = new GClientGeocoder();
	
	var objForm = document.getElementById('add_shop_form');
	
	if ( ! objForm)
	{
		alert ('Can not find form!');
		return false;
	}
	
	var addr_str = objForm.address.value;
	
	var reg = new RegExp (cur_city_name, 'i');
	
	if ( ( ! addr_str.match(reg)) && ( ! addr_str.match(/г\./i )) )
	{
		addr_str = cur_city_name + ", " + addr_str;
	}
	
	/* if ( 
		( ! addr_str.match(/москва/i))
		&& ( ! addr_str.match(/г\./i ))
	)
	{
		addr_str = "москва, " + addr_str;
	} */
	
	geocoder.getLatLng(addr_str, add_shop_geocoder_handler);
		
	return false;
}


