var map;
var cg;
var micon;
var newMarker;
var arrMarkers = new Array();

function load(lat, lng, mcoef) {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		
		if(!lat || !lng) {
			lat = 50.451356;
			lng = 30.522251;
		}
		if(!mcoef) {
			mcoef = 5;	
		}
		map.setCenter(new GLatLng(lat, lng), mcoef);
		map.addControl(new GLargeMapControl());
      	map.addControl(new GMapTypeControl());
		cg = new GClientGeocoder();
		var ovSize=new GSize(200, 150)
		var ovMap=new GOverviewMapControl(ovSize);
		map.addControl(ovMap);
		mapSetVals();
		loadMarkers();
	}
}

function loadView(lat, lng) {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		map.setCenter(new GLatLng(lat, lng), 16);
		map.addControl(new GSmallMapControl());
		loadMarkers();
	}
}

function loadEdit(lat, lng, type) {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		map.setCenter(new GLatLng(lat, lng), 16);
		map.addControl(new GLargeMapControl());
      	map.addControl(new GMapTypeControl());
		cg = new GClientGeocoder();
		var ovSize=new GSize(200, 150)
		var ovMap=new GOverviewMapControl(ovSize);
		map.addControl(ovMap);
		
		var point = new GLatLng(lat, lng);
		mapSetVals(point);
		micon = getMIcon(type);
		newMarker = new GMarker(point,{draggable: true,icon:micon});
		GEvent.addListener(newMarker, "dragend", function() {
			mapSetVals(newMarker.getPoint());
		});
		map.addOverlay(newMarker);
		
		GEvent.addListener(map, "click", function(overly,point) {
			if(point) {
				mapSetVals(point);
				if(newMarker) map.removeOverlay(newMarker);
				newMarker = new GMarker(point,{draggable: true,icon:micon});
				GEvent.addListener(newMarker, "dragend", function() {
						mapSetVals(newMarker.getPoint());
				});
				map.addOverlay(newMarker);
			}
		}); 
		
	}
}

function loadConsider(lat, lng, mcoef) {
		if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		
		if(!lat || !lng) {
			lat = 55.755786;
			lng = 37.617633;
		}
		if(!mcoef) {
			mcoef = 12;	
		}
		map.setCenter(new GLatLng(lat, lng), mcoef);
		map.addControl(new GSmallMapControl());
      	map.addControl(new GMapTypeControl());
		loadMarkers("/consMap/");
	}
}

function createMarker(lat, lng, type, html) {
	var point = new GLatLng(lat, lng);
	var mIcon = getMIcon(type);
	var marker = new GMarker(point, {icon:mIcon});
	
	GEvent.addListener(marker, "click", function() {
    	marker.openInfoWindowHtml(html);
  	});
	return marker;
}

function loadMarkers(src) {

	src = "/markers";
	GDownloadUrl(src, function(data, responseCode) {
		
		var xml = GXml.parse(data);



		//createMarker(55.755786, 37.617633, 'mType', 'mHtml');
		var markers = xml.documentElement.getElementsByTagName("marker");
		
						
		
		
		
		for (var i = 0; i < markers.length; i++) {
			
			var mLat = parseFloat(markers[i].getAttribute("lat"));
			var mLng = parseFloat(markers[i].getAttribute("lng"));
			var mType = parseInt(markers[i].getAttribute("type"));
			var mHtml = markers[i].getAttribute("info");
			
			marker = createMarker(mLat, mLng, mType, mHtml);
			
			if(!arrMarkers[mType]) {
				arrMarkers[mType] = new Array();
			}
			arrMarkers[mType].push(marker);	
		}
		
		showMarkers('all');
	});	
}

function showMarkers(type, status) {
	if(type == 'all') {
		for(var i = 1; i < arrMarkers.length; i++) {
			if(!arrMarkers[i]) continue;
			for(var j = 0; j<arrMarkers[i].length; j++) {
				if (status == 'hide') {
					map.removeOverlay(arrMarkers[i][j]);
				}else{
					map.addOverlay(arrMarkers[i][j]);
				}
			}
		}
	}else{
		if(!arrMarkers[type]) return false;
		for(var i = 0; i < arrMarkers[type].length; i++) {
			if (status == 'hide') {
				map.removeOverlay(arrMarkers[type][i]);
			}else{
				map.addOverlay(arrMarkers[type][i]);
			}
		}
	}
}

function getMIcon(type) {
	var newIcon = new GIcon();
	var iasizet='32,32';
	var iasize=new Array();
	iasize=iasizet.split(',');
	iasize[0]=iasize[0]/2;
	//newIcon.shadow = "/img/markers_shadow.png";
	newIcon.iconSize = new GSize(32,32);
	newIcon.shadowSize = new GSize(59,32);
	newIcon.iconAnchor = new GPoint(iasize[0], iasize[1]);
	newIcon.infoWindowAnchor = new GPoint(iasize[0], 0);
	newIcon.image = "/img/markers/marker" + type + ".png";

	return newIcon;
}





function initIcon() {
	micon = new GIcon();
	var iasizet='32,32';
	var iasize=new Array();
	iasize=iasizet.split(',');
	iasize[0]=iasize[0]/2;
	setMarkerImg();
	//micon.shadow = "/img/markers_shadow.png";
	micon.iconSize = new GSize(32,32);
	micon.shadowSize = new GSize(59,32);
	micon.iconAnchor = new GPoint(iasize[0], iasize[1]);
	micon.infoWindowAnchor = new GPoint(iasize[0], 0);
}

function setMarkerImg() {
	var markerStyle = $('#markerStyle').val();
	micon.image = "/img/markers/marker" + markerStyle + ".png";
	if(newMarker) {
		var tempPoint = newMarker.getPoint();
		map.removeOverlay(newMarker);
		newMarker = new GMarker(tempPoint,{draggable: true,icon:micon});
		GEvent.addListener(newMarker, "dragend", function() {
			mapSetVals(newMarker.getPoint());
		});
		map.addOverlay(newMarker);
	}
}

function initMarker() {
	initIcon();
	
	GEvent.addListener(map, "moveend", function() {});
	GEvent.addListener(map, "click", function(overly,point) {
		if(point) {
			mapSetVals(point);
			if(newMarker) map.removeOverlay(newMarker);
			newMarker = new GMarker(point,{draggable: true,icon:micon});
			GEvent.addListener(newMarker, "dragend", function() {
					mapSetVals(newMarker.getPoint());
			});
			map.addOverlay(newMarker);
		}
	}); 
}

function destroyMarker() {
	if (newMarker) { map.removeOverlay(newMarker);
	newMarker = '';
	GEvent.clearListeners(map, "click");
	mapSetVals();}
}





function mapSetVals(point){
	if(point) {
		$('#newLat').val(point.y);
		$('#newLng').val(point.x);
		$('#latField').val(point.y);
		$('#lngField').val(point.x);
	} else {
		$('#newLat').val('');
		$('#newLng').val('');
		$('#latField').val('');
		$('#lngField').val('');
	}
}

function CGCallback(responce) {
	if (responce.Status.code != 200) {
		$("#mesArea").attr('class', 'mesArea err');
		$("#mesText").html("Не верный адрес.");	
		return;
	}
	var lat = responce.Placemark[0].Point.coordinates[1];
	var lng = responce.Placemark[0].Point.coordinates[0];
	map.panTo(new GLatLng(lat, lng));
}

function setLocation() {
	if (!$('#location-id').val().length) {
		alert('Забыли указать место.');
		$('#location-id').focus();
	}else{
		cg.getLocations($('#location-id').val(), CGCallback);
	}

	return false;
}

function mapSetCenter(lat, lng) {
	map.setCenter(new GLatLng(lat, lng), 13);
	return false;
}


function clearMesArea() {
	if($("#mesArea").attr('class') != 'mesArea') {
		$("#mesArea").attr('class', 'mesArea');
		$("#mesText").html("");
	}
}

function showMapExample() {
	var temp = $('#mapSearchExample').text();
	$('#location-id').val(temp);
	//return false;
	return setLocation();
}

function showForm(status) {
	if(status == "show") {
		$('#mapNewObj_butt').css({'display': 'none'});
		$('#mapNewObj_form').css({'display': 'block'});
		initMarker();
	}
	if(status == "hide") {
		$('#mapNewObj_butt').css({'display': 'inline'});
		$('#mapNewObj_form').css({'display': 'none'});
		destroyMarker();
	}
	return false;
}

function sendForm() {
	if($('#latField').val() == '' || $('#lngField').val() == '') {
		alert('Укажите точку на карте');
		return false;
	}
	if(!$('#title').val()) { 
		alert('Пожалуйста поля формы, помеченные красной звездочкой.');
		return false;
	}
	$('#newObj').submit();

	return false;
}

function clickBoxes() {
	var check = $('#chB_all').attr('checked');
	$(".chBox").attr('checked', check);
	showMarkers('all', 'hide');
	if(check) {
		showMarkers('all');	
	}
}

function enableMarkers(type) {
	var check = $("#chB_"+type).attr('checked');
	if(check) {
		showMarkers(type);	
	}else{
		showMarkers(type, 'hide');
	}
}
