$ = jQuery =  YMaps.jQuery;

mapLastSelectedObject=-1;
mapEditMode=0;
mapPlaceMarksHide=1;
mapEditedObject=-1;
mapGroups=new Array();
mapObjects=new Array();

function mapUnselectObject()
{
	if (mapLastSelectedObject!=-1)
	{
		Map.removeOverlay(mapPolygons[mapLastSelectedObject]);
		Map.addOverlay(mapPlacemarks[mapLastSelectedObject]);
	}
	mapLastSelectedObject=-1;
}

function mapSelectObject(Id)
{
	$(".d-Object").removeClass("d-Menu-Selected");
	$("#d-Object-"+Id).addClass("d-Menu-Selected");

	_Text="<strong>"+mapObjects[Id]["Name"]+"</strong>";
	if (mapObjects[Id]["Description"]!="") _Text+="<p>Описание: <em>"+mapObjects[Id]["Description"]+"</em></p>";
	if (mapObjects[Id]["Square"]!="") _Text+="<p>Площадь: <em>"+mapObjects[Id]["Square"]+" га</em></p>";
	if (mapObjects[Id]["ZoneType"]!="") _Text+="<p>Вид территориальной зоны: <em>"+mapObjects[Id]["ZoneType"]+"</em></p>";
	if (mapObjects[Id]["District"]!="") _Text+="<p>Район: <em>"+mapObjects[Id]["District"]+"</em></p>";
	if (typeof mapObjects[Id]["Link"]!=='undefined') _Text+="<p>Ccылка: <em>"+mapObjects[Id]["Link"]+"</em></p>";

	if (mapObjects[Id]["Photos"].length>0) _Text+="<p>Фотографии:</p>";
	$.each(mapObjects[Id]["Photos"], function(a, b)
	{
		_Text+='<a class="lightbox-enabled" href="upload/'+b["Path"]+'"><img class="photo" alt="Фотография" src="upload/'+b["Path"]+'" height="45" /></a>';
	});
	_Text+='<div class="clear"></div><a href="#" onclick="Map.setCenter(mapPlacemarks['+Id+'].getCoordPoint(), 16);">[Найти на карте]</a>';
	$("#d-Info-Block #info-text").html(_Text);
	$(".lightbox-enabled").lightBox();
	
	OpenToolWindow("#d-Info-Block", "Информация");
	
	if (mapLastSelectedObject!=-1)
	{
		Map.removeOverlay(mapPolygons[mapLastSelectedObject]);
		Map.addOverlay(mapPlacemarks[mapLastSelectedObject]);
	}
	
	//Map.setCenter(mapPlacemarks[Id].getCoordPoint(), 16);
	Map.addOverlay(mapPolygons[Id]);
	Map.removeOverlay(mapPlacemarks[Id]);
	mapLastSelectedObject=Id;
}

function mapMakePolygon(Coords, Index)
{
	if (typeof(Index)=="undefined")
	{
		var PolyStyle = new YMaps.Style();
		PolyStyle.polygonStyle = new YMaps.PolygonStyle();
		PolyStyle.polygonStyle.fill = true;
		PolyStyle.polygonStyle.outline = true;
		PolyStyle.polygonStyle.strokeWidth = 3;
		PolyStyle.polygonStyle.strokeColor = "ff0000ff";
		PolyStyle.polygonStyle.fillColor = "ff0000cc";
	}
	else
	{
		var PolyStyle = new YMaps.Style();
		PolyStyle.polygonStyle = new YMaps.PolygonStyle();
		PolyStyle.polygonStyle.fill = true;
		PolyStyle.polygonStyle.outline = true;
		PolyStyle.polygonStyle.strokeWidth = 3;
		PolyStyle.polygonStyle.strokeColor = mapGroups[mapObjects[Index]["Group"]]["Color"]+"ff";
		PolyStyle.polygonStyle.fillColor = mapGroups[mapObjects[Index]["Group"]]["Color"]+"cc";
	}

	Coords=Coords.split(" ");
	P=new YMaps.Polygon([], {hasBalloon: 0});
	P.setStyle(PolyStyle);
	
	for (i=0; i<Coords.length-1; i+=2)
	{
		X=Coords[i];
		Y=Coords[i+1];
		P.addPoint(new YMaps.GeoPoint(X, Y));
	}

	return P;
}

function mapMakePlacemark(Coords, Index)
{
	if (typeof(mapGroups[mapObjects[Index]["Group"]])=="undefined") return;
	var s = new YMaps.Style();
	s.iconStyle = new YMaps.IconStyle();
	if (mapGroups[mapObjects[Index]["Group"]]["Icon"]!="") s.iconStyle.href = "upload/"+mapGroups[mapObjects[Index]["Group"]]["Icon"]; else s.iconStyle.href="images/dip-icon.png";
	Shift=mapGroups[mapObjects[Index]["Group"]]["IconShift"].split(" ");
	s.iconStyle.size = new YMaps.Point(32, 32);
	s.iconStyle.offset = new YMaps.Point(-Shift[0], -Shift[1]);

	Coords=Coords.split(" ");
	c=0;
	X=0.0;
	Y=0.0;
	for (i=0; i<Coords.length-1; i+=2)
	{
		X+=parseFloat(Coords[i]);
		Y+=parseFloat(Coords[i+1]);
		c++;
	}

	P=new YMaps.Placemark(new YMaps.GeoPoint(X/c, Y/c), {hasBalloon: 0, style: s});
	return P;
}

function mapHidePlacemarks()
{
	if (mapPlaceMarksHide==1) return;
	mapPlaceMarksHide=1;
	
	$.each(mapPlacemarks, function (Index, Placemark)
	{
		Map.removeOverlay(mapPlacemarks[Index]);
	});
}

function mapShowPlacemarks()
{
	if (mapPlaceMarksHide==0) return;
	mapPlaceMarksHide=0;

	$.each(mapPlacemarks, function (Index, Placemark)
	{
		Map.addOverlay(mapPlacemarks[Index]);
	});
}



function mapStopEdit()
{
	if ((typeof(_Polygon)=="undefined")||(mapEditMode==0)) return;
	Map.removeOverlay(_Polygon);
	mapEditMode=0;
	mapEditedObject=-1;
	mapShowPlacemarks();
}

function mapStartEdit(A)
{
	mapStopEdit();
	mapUnselectObject();
	mapHidePlacemarks();

	mapEditMode=1;
	
	$("#d-Add-Object-Block .form-item-photo").remove();
	AddPhotoToForm(1, "#d-Add-Object-Block");

	if (typeof(A)=="undefined")	_Polygon = new YMaps.Polygon([], {hasBalloon: 0}); else _Polygon=mapMakePolygon(mapObjects[A].Coords, A);
	
	_Polygon.setEditingOptions({drawing: true});
	Map.addOverlay(_Polygon);
	_Polygon.startEditing();
}

function StartEditObject(Id)
{
	mapStartEdit(Id);
	mapEditedObject=Id;

	$("#d-Edit-Object-Name").val(mapObjects[Id]["Name"]);
	$("#d-Edit-Object-Description").val(mapObjects[Id]["Description"]);
	$("#d-Edit-Object-Square").val(mapObjects[Id]["Square"]);
	$("#d-Edit-Object-ZoneType").val(mapObjects[Id]["ZoneType"]);
	$("#d-Edit-Object-District").val(mapObjects[Id]["District"]);
	$("#d-Edit-Object-Group").val(mapObjects[Id]["Group"]);
	
	$("#d-Edit-Object-Block .form-item-photo").remove();
	AddPhotoToForm(1, "#d-Edit-Object-Block");
	
	if (mapObjects[Id]["Photos"].length>0)
	{
		_Text="<p>Фотографии:</p>";
		$.each(mapObjects[Id]["Photos"], function(a, b)
		{
			_Text+='<div class="delete-photo-left"><img alt="Фотография" id="d-Photo-To-Delete-'+b["pId"]+'" class="d-Photo-To-Delete" src="upload/'+b["Path"]+'" height="45" /> </div> <div class="delete-photo-right"><a href="#" class="d-Delete-Photo">[Удалить]</a></div> <div class="clear"></div>';
		});

		$("#d-Edit-Object-Photos").html(_Text);
		
		$(".d-Delete-Photo").click(function()
		{
			if ($(this).hasClass("d-Confirm")) $(this).html("Удалить"); else $(this).html("Отменить удаление");
			$(this).toggleClass("d-Confirm");
			return false;
		});
	}
}

function StartEditGroup(Id)
{
	$("#d-Edit-Group-Id").val(Id);
	$("#d-Edit-Group-Name").val(mapGroups[Id]["Name"]);
	$("#d-Edit-Group-Description").val(mapGroups[Id]["Description"]);
	$("#d-Edit-Group-Color").val(mapGroups[Id]["Color"]);
	$("#d-Edit-Group-Color").css("background", "#"+mapGroups[Id]["Color"]);
	Shift=mapGroups[Id]["IconShift"].split(" ");
	$("#d-Edit-Group-Shift-X").val(Shift[0]);
	$("#d-Edit-Group-Shift-Y").val(Shift[1]);
}

function OpenToolWindow(a, b)
{
	mapUnselectObject();
	mapStopEdit();
	
	if ($(a).css("display")!="none") return;
	$("#d-Tools-Header").html(b);
	$(".d-Tools").fadeOut("300");
	setTimeout("$('"+a+"').fadeIn('300');", 400);
}

function DoStatus(a)
{
	OpenToolWindow("#d-Status-Block", "Статус");
	$("#d-Status-Block").html(a);
}

function mapDeleteGroup(Id)
{
	$.each(mapObjects, function()
	{
		if (this["Group"]==Id) mapDeleteView(this["oId"]);
	});
}

function AttachMenuEvents()
{
	$(".d-Edit-Group").click(function() { OpenToolWindow("#d-Edit-Group-Block", "Редактирование группы"); StartEditGroup($(this).prev().find('a').attr("id").split("-")[2]); return false;});
	$(".d-Edit-Object").click(function() { OpenToolWindow("#d-Edit-Object-Block", "Редактирование площадки"); StartEditObject($(this).prev().find('a').attr("id").split("-")[2]); return false;});
	$(".d-Delete-Group").click(function() 
	{
		Id=$(this).prev().prev().find('a').attr("id").split("-")[2]; 
		if (confirm("Действительно удалить группу «"+mapGroups[Id]["Name"]+"»?"))
		{
			mapStopEdit();
			$.get('dynamic.php?Action=DeleteGroup&Id='+Id, function(a)
			{
				mapDeleteGroup(Id);
				DoStatus("Группа удалена!");
				RefreshMenu();
			});
		}
		return false;
	});
	
	$(".d-Delete-Object").click(function() 
	{
		Id=$(this).prev().prev().find('a').attr("id").split("-")[2]; 
		if (confirm("Действительно удалить площадку «"+mapObjects[Id]["Name"]+"»?"))
		{
			mapStopEdit();
			mapDeleteView(Id);
			$.getJSON('dynamic.php?Action=DeleteObject&Id='+Id, function(a) 
			{
				DoStatus("Площадка удалена!");
				RefreshMenu();
			});
		}
		return false;
	});

	$(".d-Group-Toggle").click(function()
	{
		Id=$(this).attr("id").split("-")[2];
		if ($("#d-Group-"+Id+"-Content").css("display")=='block') return;

		$(".d-Group-All").slideUp(300);
		$(".d-Icon-Toggle").addClass("d-Plus");

		$('#d-Icon-'+Id).toggleClass("d-Plus");
		//$(this).parent().prev().prev().toggleClass("d-Plus");
		$("#d-Group-"+Id+"-Content").toggle(300);

		return false;
	});
	
	$(".d-Object").click(function()
	{
		Id=$(this).attr("id").split("-")[2];
		mapSelectObject(Id);
		Map.setCenter(mapPlacemarks[Id].getCoordPoint());
		return false;
	});
}

function RemovePhoto(a)
{
	$("#d-Photo-"+a).parent().parent().remove();
}

function AddPhotoToForm(a, form)
{
	$(form+" .d-Form-Add-Photo").html("-");
	$(form+" .form-item:last").before(' \
									<div class="form-item form-item-photo"> \
										<div class="form-photo"> \
											<input type="file" id="d-Photo-'+a+'" class="d-Form-Photo" name="Photo['+a+']" /> \
										</div> \
										<div class="form-add-photo d-Form-Add-Photo d-Form-Add-Photo-'+a+'"> \
											+ \
										</div> \
									</div> \
	');
	
	$(form+" .d-Form-Add-Photo-"+a).click(function()
	{
		var MyId=$(this).prev().find(".d-Form-Photo").attr("Id").split("-")[2];
		
		var MaxId=-1;
		$(this).parent().parent().find(".d-Form-Photo").each(function()
		{
			Id=$(this).attr("Id").split("-")[2];
			if (MaxId<Id) MaxId=Id;
		});
		
		if (MaxId==MyId) AddPhotoToForm(parseInt(MaxId)+1, "#"+$(this).parent().parent().attr("id")); else RemovePhoto(MyId);
		
		return false;
	});
}

function mapInit()
{
	$("#YMapsID").css("height", document.body.clientHeight-200);

	Map=new YMaps.Map(document.getElementById("YMapsID"));
	Map.addControl(new YMaps.Zoom());
	Map.addControl(new YMaps.TypeControl());
	Map.addControl(new YMaps.ScaleLine());
	Map.addControl(new YMaps.ToolBar());
	Map.enableScrollZoom();
	Map.setCenter(new YMaps.GeoPoint(56.241077, 58.00849), 12);
}

function mapCreateView(Index)
{
	mapPolygons[Index]=mapMakePolygon(mapObjects[Index]["Coords"], Index);
	mapPolygons[Index].SelfId=Index;
	mapPlacemarks[Index]=mapMakePlacemark(mapObjects[Index]["Coords"], Index);
	mapPlacemarks[Index].SelfId=Index;

	YMaps.Events.observe(mapPlacemarks[Index], mapPlacemarks[Index].Events.Click, function (a) { mapSelectObject(a.SelfId); });
}

function mapUpdateView(Index)
{
	if (typeof(mapPlacemarks[Index])!="undefined") Map.removeOverlay(mapPlacemarks[Index]);
	delete mapPlacemarks[Index];
	delete mapPolygons[Index];
	mapCreateView(Index);
	Map.addOverlay(mapPlacemarks[Index]);
}

function mapDeleteView(Index)
{
	if (mapLastSelectedObject==Index) Map.removeOverlay(mapPolygons[Index]);
	else Map.removeOverlay(mapPlacemarks[Index]);
	
	delete mapPlacemarks[Index];
	delete mapPolygons[Index];
}

function mapLoadObjects()
{
	$.getJSON('dynamic.php?Action=GetObjects', function(Objects) 
	{
		mapPolygons=new Array();
		mapPlacemarks=new Array();
		mapObjects=Objects;
		$.each(mapObjects, function(Index, _Object)	{ mapCreateView(Index); });
		
		mapShowPlacemarks();
		if (typeof mapLoadOk!=='undefined') mapLoadOk();
	});
}

function mapLoad()
{
	$.getJSON('dynamic.php?Action=GetGroups', function(Groups) 
	{
		mapGroups=Groups;
		mapLoadObjects();
	});
}

function RefreshMenu()
{
	$("#d-Object-List").load('dynamic.php?Action=GetList', function(){ AttachMenuEvents(); });
	$("#d-Edit-Object-Group").load('dynamic.php?Action=GroupSelectOptions');
	$("#d-Add-Object-Group").load('dynamic.php?Action=GroupSelectOptions');
}

function mapUpdateGroup(Id)
{
	$.each(mapObjects, function()
	{
		if (this["Group"]==Id) 
		{
			oId=this["oId"];
			var PolyStyle = new YMaps.Style();
			PolyStyle.polygonStyle = new YMaps.PolygonStyle();
			PolyStyle.polygonStyle.fill = true;
			PolyStyle.polygonStyle.outline = true;
			PolyStyle.polygonStyle.strokeWidth = 3;
			PolyStyle.polygonStyle.strokeColor = mapGroups[Id]["Color"]+"ff";
			PolyStyle.polygonStyle.fillColor = mapGroups[Id]["Color"]+"cc";
			mapPolygons[oId].setStyle(PolyStyle);
			
			var s = new YMaps.Style();
			s.iconStyle = new YMaps.IconStyle();
			if (mapGroups[Id]["Icon"]!="") s.iconStyle.href = "upload/"+mapGroups[Id]["Icon"]; else s.iconStyle.href="images/dip-icon.png";
			Shift=mapGroups[Id]["IconShift"].split(" ");
			s.iconStyle.size = new YMaps.Point(32, 32);
			s.iconStyle.offset = new YMaps.Point(-Shift[0], -Shift[1]);
			mapPlacemarks[oId].setStyle(s);
		}
	});
}

$(function()
{
	//Добавление группы
	$('#d-Add-Group-Form').submit(function() 
	{
		if ($('#d-Add-Group-Name').val().trim()=="") { alert("Заполните название группы!"); return false;}
	
		DoStatus("Добавление группы...");
		$(this).ajaxSubmit({ dataType:'json', clearForm:true, success:function(a)
		{
			if (a["Result"]=="Ok") 
			{
				mapGroups[a["NewGroup"]["gId"]]=a["NewGroup"];
				RefreshMenu();
				DoStatus("Группа успешно добавлена!");
			}
			else DoStatus("Ошибка: "+a);
		}}); 
		return false; 
	});
		
	//Добавление площадки
	$('#d-Add-Object-Form').submit(function() 
	{
		if ($('#d-Add-Object-Name').val().trim()=="") { alert("Заполните название площадки!"); return false;}

		//alert();
		Coords="";
		for(i=0; i<_Polygon.getNumPoints(); i++)
			Coords+=_Polygon.getPoint(i).getX()+' '+_Polygon.getPoint(i).getY()+" ";
		$("#d-Add-Object-Coords").val(Coords);
		
		DoStatus("Добавление площадки...");
		$(this).ajaxSubmit({ dataType:'json', clearForm:true, success:function(a)
		{
			//alert(a);
			if (a["Result"]=="Ok")
			{
				mapObjects[a["NewObject"]["oId"]]=a["NewObject"];
				mapUpdateView(a["NewObject"]["oId"]);
				RefreshMenu();
				DoStatus("Площадка успешно добавлена!");
			}
			else DoStatus("Ошибка: "+a);
		}});
		return false; 
	});

	//Редактирование группы
	$('#d-Edit-Group-Form').submit(function() 
	{
		DoStatus("Обновление группы...");
		$(this).ajaxSubmit({ dataType:'json', success:function(a)
		{
			if (a["Result"]=="Ok")
			{
				mapGroups[a["NewGroup"]["gId"]]=a["NewGroup"];
				mapUpdateGroup(a["NewGroup"]["gId"]);
				RefreshMenu();
				DoStatus("Группа отредактирована!");
			}
			else DoStatus("Ошибка: "+a["Result"]);

		}});
		return false; 
	});

	//Редактирование площадки
	$('#d-Edit-Object-Form').submit(function() 
	{
		//if ($('#d-Add-Group-Name').val().trim()=="") { alert("Заполните название группы"); return false;}

		//alert();
		Coords="";
		for(i=0; i<_Polygon.getNumPoints(); i++)
			Coords+=_Polygon.getPoint(i).getX()+' '+_Polygon.getPoint(i).getY()+" ";
		$("#d-Edit-Object-Coords").val(Coords);
		$("#d-Edit-Object-Id").val(mapEditedObject);
		
		ToDelete=new Array();
		$(this).find(".d-Confirm").each(function()
		{
			Id=$(this).parent().prev().find("img").attr("Id").split("-")[4];
			ToDelete.push(Id);
		});
		DeleteString=ToDelete.join(" ");
		$("#d-Edit-Object-Delete-Photos").val(DeleteString);

		DoStatus("Обновление площадки...");
		$(this).ajaxSubmit({ dataType:'json', success:function(a)
		{
			if (a["Result"]=="Ok")
			{
				mapObjects[a["NewObject"]["oId"]]=a["NewObject"];
				mapUpdateView(a["NewObject"]["oId"]);
				RefreshMenu();
				DoStatus("Площадка отредактирована!");
			}
			else DoStatus("Ошибка: "+a["Result"]);
			
		}});
		return false; 
	});

	//Оживление кнопок
	$("#d-Tool-Add-Group").click(function() { OpenToolWindow("#d-Add-Group-Block", "Добавление группы"); return false; });
	$("#d-Tool-Add-Object").click(function() { OpenToolWindow("#d-Add-Object-Block", "Добавление площадки"); mapStartEdit(); return false; });
	$('#d-Add-Group-Color').colourPicker({ico:'images/color-picker.gif'});
	$('#d-Edit-Group-Color').colourPicker({ico:'images/color-picker.gif'});
	AttachMenuEvents();
	AddPhotoToForm(1, "#d-Add-Object-Block");
	AddPhotoToForm(1, "#d-Edit-Object-Block");
	
	mapInit();
	mapLoad();
		
	setInterval(function(){$.post('dynamic.php');}, 30000);
	/*mapLoadObjects();
	mapLoadGroups();*/
});


