/**
 * Funkcje markerów
 * @author Alfred Broda
 */

var mgr = null;
var markclick = null;
var geoxml;
var curro;
var icon;
var icons = Array();
var marker;
var mark;

function checkMgr() {
	if (mgr == null ) {
		mgr = new MarkerManager(map, {trackMarkers:true});
	}
	if (markclick == null) {
		markclick = GEvent.addListener(map, "click", function(item){
			if (item)
				get_opis(item);
		}); 
	}
}
	
function getIcon(image,size) {
	if (!size) size = 22;
	var ico = null;
	if (image) {
		ico = new GIcon();
		ico.image = basedir + size + "x" + size + "/" + image;
		ico.iconSize = new GSize(32, 32);
		ico.iconAnchor = new GPoint(11, 11);
		//ico.shadow = "http://www.google.com/mapfiles/shadow50.png";
		//ico.shadowSize = new GSize(37, 34);
		ico.infoWindowAnchor = new GPoint(16, 16);
		ico.infoShadowAnchor = new GPoint(32, 32);
		icons[image] = ico;
	}
	return ico;
}


function deleteMarker(id) {
    allmarkers.splice(id,1);
	redrawMarkers();
}

function clearMarkers() {
	checkMgr();
    mgr.clearMarkers();
	allmarkers = new Array();
	redrawMarkers();
}
	
function setupMarkers() {
	//map_show_icons(0);
}

/* FIXME: Tworzenie pojedyńczego markera ze zmiennej globalnej oraz wspólrzędnych. Po co to tutaj właściwie? */

var curro;
var n=1;
    	
function addMarker(lat,lang) {
	checkMgr();
	point = new GLatLng(lat,lang);
	var opts = { title:curro.name };
	var marker = new GMarker(point,opts);
    //map.addOverlay(marker);
	contentDiv = document.createElement('div');
	//contentDiv.className = 'gpopup';
	contentDiv.id = curro.id;
	contentDiv.innerHTML = curro.desc;
	alldesc[curro.id] = contentDiv;
	var num = allmarkers.push(marker);
	marker.openInfoWindow(contentDiv);
}

/* Wypisywanie wszystkich markerów stacjonarnych */

var num;
var i = 0;

function makeMarkers(list) {
	checkMgr();
	var posn;
	list.places._each(function(item) {
		posn = new GLatLng(
			item.posn[0],
			item.posn[1]);
		if (edit) {
			var tabs = edform(item);
			var gtabs = Array();
			var n = 0;
			tabs._each(function(tab){
			    gtabs[n] = new GInfoWindowTab(tab.label,tab.content);
			    n++;
			});
			alldesc[item.id] = gtabs;
			GEvent.addListener(marker, "infowindowbeforeclose", function() {
    			alert("Zmiany nie zostaną zapisane!");
  			});
			item.mask = 0;
		} else {
			if (item.icon == "default.png")
				var ico = item.dicon;
			else  
				var ico = item.icon;
		}
		if (item.mask ==1) {
			var icon = getIcon(item.dicon,16);
			var opts = {
				icon: icon,
				title: item.sname,
				transparent: item.dicon
			};
			var mark2 = new GMarker(posn,opts);
			GEvent.addListener(mark2, "mouseover", function() {
		    	mark2.setImage(basedir+"32x32/"+item.icon);
  			});
			GEvent.addListener(mark2, "mouseout", function() {
				if (map.getZoom()<item.izmax)
    			mark2.setImage(basedir+"16x16/"+item.dicon);
  			});
			/* FIXME: Możemy zduplikować id? Warto jakieś jednak mieć... */
			mark2.id = item.id;
			/* marker ma się pojawiać o poziom wyżej */
			mark2.izmin = item.izmin;
			mark2.izmax = item.izmax-1;
			var desc = document.createElement('div'); 
			desc.innerHTML = alldesc[item.id].innerHTML;
			desc.className = 'gpopup';
			mark2.bindInfoWindow(desc,maxopts);
			/* Drugi marker będzie 'niżej' niż ten */
			item.izmin = item.izmax;
			item.izmax = 17; 
			var num = allmarkers.push(mark2);
		} else {
			/* jeżeli nie maskujemy to zapewne chcemy mieć markery w pełnym zakresie */
			item.izmax = 17;
		}
		var icon = getIcon(item.icon,32);
		var opts = {
			icon: icon,
			title: item.sname,
			transparent: item.icon
		};
		var marker = new GMarker(posn,opts);
		marker.id = item.id;
		marker.item = item;
		marker.izmin = item.izmin;
		marker.izmax = item.izmax;
		marker.mask = item.mask;
		/* var desc = document.createElement('div'); 
		var temp = opis;
		desc.innerHTML = opis;
		desc.className = 'gpopup'; */
		marker.desc = item.desc;
    	var num = allmarkers.push(marker);
    });
    redrawMarkers();
}

/*
 * Umieszczna marker mobilny z wyszukaniem lokacji
 * 				!! UWAGA !!
 * Należy posyłać małą ilość obiektów by
 * Geocoder nie został zablokowany (status 500)!
 */
 
var point;
 
function makeMarker(list) {
	if (mark) map.removeOverlay(mark);
	var posn;
	//var dicon = getIcon(list.icon);
	var item = list.places[0]
	if (item.posn) {
		if (item.posn[0] == 0 && item.posn[1] == 0) {
			geocoder.getLocations(item.addr + ', Poland', function(resp){
				if (resp && resp.Status.code == 200) {
					out = resp;
					place = resp.Placemark[0];
					actx = place.Point.coordinates[0];
					acty = place.Point.coordinates[1];
				}
			});
			item.posn[0] = actx;
			item.posn[1] = acty;
		}
	}
 		if (item.zoom==0)
 			item.zoom = 12;
// 		if (item.icon)
// 			icon = getIcon(item.icon);
// 		else {
// 			icon = dicon;
// 			item.icon = list.icon;
// 		}
 		posn = new GLatLng(
 			item.posn[0],
 			item.posn[1],
 			item.zoom);
 		var opts = { title:item.name, draggable:true };
 		mark = new GMarker(posn,opts);
 		GEvent.addListener( mark, 'dragend', function() {
         	found(mark.getLatLng());
        });
 		mark.bindInfoWindowHtml(markerTab(item));
      	map.addOverlay(mark, 0, 17);
        //allmarkers[item.id] = mark;
        /* Dodatki */
        actx = item.posn[0];
        acty = item.posn[1];
 		actz = item.zoom;
 		actico = item.icon;
		found(mark.getLatLng());
}

function redrawMarkers() {
	checkMgr();
	allmarkers._each(function(marker) {
		mgr.addMarker(marker, marker.izmin, marker.izmax);
	});
	num = mgr.getMarkerCount(10);
	mgr.refresh();
}

/* Tworzenie DIVa z zawartością zakłdki do dymku */
function markerTab(item) {
	var ret = document.createElement('div');
	ret.innerHTML = 'TODO: formularz obiektu '+item.id;
	return ret;
} 
