/* blogmap.js
   (C) 2005 - Netdais
   needs maputil.js
*/


	
// change blog details

// various initial variables.
var dosave=true;
var ms = "mapselecttoolbar"; // selected menu

function menuclick(sl)
{
	if (el("markerdbid").value!=-1)
	{
		xajax_saveMarkerLoc(el("markerdbid").value);
		el("markerdbid").value = -1;
	}
	h(ms);
	s(sl);
	ms = sl;
	return false;
}

function infoCode(ll)
{
	var id = el("articlechoose").value;
	var idblog=el("ElBlogChoose").value;
	var wdt =el("mainmapwidth").value;
	var hgt =el("mainmapheight").value;	
	el("infoframe").src='help.php?helpid='+ll+'&bid='+idblog+'&aid='+id+'&wd='+wdt+'&hg='+hgt;
	newInfoDialog.show();
}

var intmainmap;
var prevmainmap;
var geocoder;
var r_gicon;
var r_gmarker;
var g_gicon;
var g_gmarker;

// setup maps
function setupMaps ()
{
	intmainmap = new GMap2(document.getElementById("intmainmap"));
	intmainmap.addControl(new GLargeMapControl());
	intmainmap.addMapType(G_SATELLITE_MAP);
	prevmainmap = new GMap2(document.getElementById("prevmainmap"));
	prevmainmap.addControl(new GMapTypeControl());
	intmainmap.addControl(new GMapTypeControl());
	GEvent.addListener(intmainmap, "zoomend", function(o, newzoom) {
		menuclick("mappropertiestoolbar");
	});
	
	GEvent.addListener(intmainmap, "maptypechanged", function() {
		menuclick("mappropertiestoolbar");
	});
	GEvent.addListener(intmainmap, "moveend", function() {
		
		/*var point = intmainmap.getCenter();
		el("mainmaplon").value = point.lng();
		el("mainmaplat").value = point.lat();*/
		changeMainMapTarget();
	});

	
	geocoder = new GClientGeocoder();
	r_gicon = new GIcon();
	r_gicon.image = "images/target.png";
	r_gicon.shadow = "images/iconshadow.png";
	r_gicon.iconSize = new GSize(10, 10);
	r_gicon.shadowSize = new GSize(10, 10);
	r_gicon.iconAnchor = new GPoint (5, 5);
	r_gicon.infoWindowAnchor = new GPoint (10, 0);
	g_gicon = new GIcon(r_gicon);
	
	g_gicon.image="images/targetgo.png";
}

function mapObject ()
{
	this.v_nor = true;
	this.v_sat = false;
	this.v_hyb = false;
	
	this.v_def = 1;	
	
	this.v_drag = true;
	this.v_zoom = true;
	this.zoomControl = null;
	
}

var mm = new mapObject(); // main map object

function changeMainMapView (ch)
{
	var newval;
	var cb;
	var mtype;
	var mmvar;
	var key;
	switch (ch)
	{
		case 1 : cb = el("mainmap_normalview");
				 mtype = G_NORMAL_MAP;
				 break;
		case 2 : cb = el("mainmap_satview");
				 mtype = G_SATELLITE_MAP;
				 break;
		case 3 : cb = el("mainmap_hybridview");
				 mtype = G_HYBRID_MAP;
				 break;
	}
	newval = cb.checked;
				 
	if (mm.v_def==ch&&!newval)
	{
		alert ("You must show this view, because this is the default view");
		cb.checked = true;
    }
	else
	{	if (newval)
		{
			prevmainmap.addMapType(mtype);
		}
		else
		{
			prevmainmap.removeMapType(mtype);
		}
		switch (ch)
		{
			case 1 : mm.v_nor = newval;
					 break;
			case 2 : mm.v_sat = newval;
					 break;
			case 3 : mm.v_hyb = newval;
					 break;
		}
		sveData(ch+6, newval);
	}

}

function changeMainMapDef (ch)
{
	
	var newval;
	var cb;
	var def_view;
	var nondef_view;
	var mtype;
	var mmvar;
	switch (ch)
	{
		case 1 : cb = el("mainmap_normalview");
				 si("mmdv_nor_def");
				 h("mmdv_nor_nondef");
				 mtype = G_NORMAL_MAP;
				 break;
		case 2 : cb = el("mainmap_satview");
				 si("mmdv_sat_def");
				 h("mmdv_sat_nondef");
				 mtype = G_SATELLITE_MAP;
				 break;
		case 3 : cb = el("mainmap_hybridview");
				 si("mmdv_hyb_def");
				 h("mmdv_hyb_nondef");
				 mtype = G_HYBRID_MAP;
				 break;
	}
	if (!cb.checked)
	{
		cb.checked=true;
		changeMainMapView(ch);
	}
	prevmainmap.setMapType(mtype);
	
	// unselect the old default
	if (mm.v_def!=ch)
	{	switch (mm.v_def)
		{
			case 1 : h("mmdv_nor_def");
					 si("mmdv_nor_nondef");
					 break;
			case 2 : h("mmdv_sat_def");
					 si("mmdv_sat_nondef");
					 break;
			case 3 : h("mmdv_hyb_def");
					 si("mmdv_hyb_nondef");
					 break;
		}
	}
	mm.v_def = ch;
	sveData(6, ch);
	return false;
}

function uChangeDef()
{
	var mt = intmainmap.getCurrentMapType();
	switch (mt)
	{
		case G_NORMAL_MAP: changeMainMapDef(1); break;
		case G_SATELLITE_MAP: changeMainMapDef(2); break;
		case G_HYBRID_MAP: changeMainMapDef(3); break;
	}
}
// control . zoom and drag

function changeMainMapControl (ch)
{
	var cb;
	switch (ch)
	{
		case 1 : cb = el("mainmap_lockview");
				 if (cb.checked)
				 {
					 prevmainmap.enableDragging();
				 }
				 else
				 {
					 prevmainmap.disableDragging();
				 }
				 mm.v_drag = cb.checked;
				 sveData(11, cb.checked);
				 break;
		case 2 : cb = el("mainmap_zoomview");
				 if (cb.checked)
				 {
					 prevmainmap.addControl(mm.zoomControl);
				 }
				 else
				 {
					 prevmainmap.removeControl(mm.zoomControl);
				 }
				 mm.v_zoom = cb.checked;
				 sveData(10, cb.checked);
				 break;
	}
					 
}

function changeMainMapZoomLevel(nz)
{
	el("mainmapzoom").value = nz;
	intmainmap.setZoom(nz);
	prevmainmap.setZoom(nz);
	sveData(5, nz);
}

function MainMapFindAddress()
{
	var addrf = document.getElementById("main_address_finder");
	var address = addrf.value;
	geocoder.getLatLng(
    address,
    function(point) {
      if (!point) {
        alert(address + " not found");
      } else {
        intmainmap.setCenter(point, intmainmap.getZoom());
		var set_point = document.getElementById("mainmaplat");
		set_point.value = point.lat();
		set_point = document.getElementById("mainmaplon");
		set_point.value = point.lng();
      }
    }
  );
}

function changeMainMapCoordinates(main)
{
	var new_lat = parseFloat(el("mainmaplat").value);
	var new_lon = parseFloat(el("mainmaplon").value);
	var point = new GLatLng(new_lat, new_lon);
	if (main==null)
    {	intmainmap.setCenter(point, el("mainmapzoom").value);
		changeMainMapTarget();
		sveData(3, new_lat);
		sveData(4, new_lon);	
	}
	else
	{
		prevmainmap.checkResize();
		prevmainmap.setCenter(point, parseInt(el("mainmapzoom").value));
	}
	
}
function setPrevMapCenter()
{
	var point = prevmainmap.getCenter()

	
	intmainmap.setCenter(point, intmainmap.getZoom());
	setMainMapCoordinates();
}

function setMainMapCoordinates()
{
	var point = intmainmap.getCenter()
	el("mainmaplon").value = point.lng();
	el("mainmaplat").value = point.lat();

	sveData(3, point.lat());
	sveData(4, point.lng());		
    prevmainmap.setCenter(point, prevmainmap.getZoom());
	intmainmap.removeOverlay(r_gmarker);
	r_gmarker = null;
	intmainmap.removeOverlay(g_gmarker);
	g_gmarker = null;
	g_gmarker = new GMarker(point, {icon: g_gicon, title: "Current center position"});
	intmainmap.addOverlay(g_gmarker);
}

function changeMainMapTarget()
{
	if (r_gmarker!=null)
		{	intmainmap.removeOverlay(r_gmarker); }
	r_gmarker = null;
	var point = intmainmap.getCenter();
	r_gmarker = new GMarker(point, {icon: r_gicon, title: "Map center position candidate"});
	intmainmap.addOverlay(r_gmarker);
	menuclick("mappropertiestoolbar")
	
}

function mapResizeEnd(e){
		mapDragResize();
		dojo.event.disconnect(dojo.body(), "onmousemove", this, "_changeSizing");
		dojo.event.disconnect(dojo.body(), "onmouseup", this, "_endSizing");

		this._isSizing = false;
}

function mapDragResize()
{
	var strw = el("mapResize").style.width;
	var strh = el("mapResize").style.height;
	var height = strh.substring(0, strh.search("px"));
	var width = strw.substring(0, strw.search("px"));
	//alert (height+" "+width);
	// check if different than text	
	var t_width = el("mainmapwidth").value;
	var t_height = el("mainmapheight").value;
	if (height-10!=t_height||width-10!=t_width)
	{	var pmm = el("prevmainmap");
		pmm.style.width = (width-10)+'px';
		pmm.style.height = (height-10)+'px';
		el("mainmapwidth").value = width-10;
		el("mainmapheight").value = height-10;

		sveData(1, width-10);
		sveData(2, height-10);
		
		prevmainmap.checkResize();
		changeMainMapCoordinates(0);
	}
}

function changeMainMapSize()
{
	var width = el("mainmapwidth").value;
	var height = el("mainmapheight").value;
	//alert (width+" "+height);
	var pmm = el("prevmainmap");
	pmm.style.width = width+'px';
	pmm.style.height = height+'px';
	el("mapResize").style.width = (Number(width)+10)+'px';
	el("mapResize").style.height = (Number(height)+10)+'px';
	prevmainmap.checkResize();
	sveData(1, width);
	sveData(2, height);
}

function changeArticle()
{
	// set id to whatever article (except if new)
	var id = el("articlechoose").value;
	var idblog=el("ElBlogChoose").value;
	xajax_loadArticleData(idblog, id);
	if (id==0)
	{
		h("markermenu");
		h("mapinputdata");
		s("mainmaphelp");
		
	}
	else
	{
		si("markermenu");
		s("mapinputdata");
		h("mainmaphelp");
	}
}

function trimString (str) {
  return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}

function addArticleToSelect(val, tt)
{
	var sel = el('articlechoose');
	el("article_new_title").value = tt;
	var elOptNew = document.createElement('option');
	elOptNew.text = tt;
	elOptNew.value = val; 
	try {
		sel.add(elOptNew, null); // standards compliant; doesn't work in IE
	}
	catch(ex) {
		elSel.add(elOptNew); // IE only
	}
	sel.selectedIndex = sel.length-1;
	
}

function sveData(key, val)
{
	if (dosave)
	{	xajax_saveMapData(el("ElBlogChoose").value, el("articlechoose").value , key, val);
	}
}

function saveArticle()
{
	xajax_saveArticleData(el("ElBlogChoose").value, el("articlechoose").value , el("article_new_title").value, el("article_new_address").value);
}

/** MARKERS **/
var markerlist = new Array();
var pmarkerlist = new Array();
var markercount = 0;
var curMarker;
 
var prevc_point;

function addMarker(lat, lon, markerid, isdrag)
{
	var mp = new GLatLng(lat, lon);
	var marker;
	if (isdrag==null)
	{
		isdrag = true;
	}
	marker = new GMarker(mp, {draggable: isdrag, bouncy: false});
	marker.index = markercount;
	marker.db_id = markerid;
	if (isdrag)
	{	GEvent.addListener(marker, "click", function () {	
			clickMarker(this.index); 
		});
		GEvent.addListener(marker, "dragstart", function () {		
			this.ll = this.getPoint();
		}
		);
		GEvent.addListener(marker, "dragend", function () {		moveMarker(this.index); }
		);
	}
	var pmarker = new GMarker(mp);
	pmarker.index = marker.index;
	GEvent.addListener(pmarker, "click", function () {				openPrevMarker(this.index);
	});
	GEvent.addListener(pmarker, "infowindowclose", function () {				prevmainmap.panTo(prevc_point);
	});
	intmainmap.addOverlay(marker);
	prevmainmap.addOverlay(pmarker);
	pmarkerlist[markercount] = pmarker;
	markerlist[markercount] = marker;
	curMarker=markercount;
	markercount++;
}


function addNewMarker()
{
	var point = intmainmap.getCenter();
	var idusloc = el("markerselect").value;
	if (idusloc==-1)
	{
		xajax_addNewMarker(el("ElBlogChoose").value, el("articlechoose").value, point.lat(), point.lng());
		menuclick("markerprop");		
	}
	else
	{
		xajax_addBMMarker(el("ElBlogChoose").value, el("articlechoose").value, idusloc);
		menuclick("markerprop");
		el("markerselect").selectedIndex = 0;
	}
}

 
function clickMarker(id)
{
	// show property
	el("markerselect").focus();
	if (el("markerdbid").value!=markerlist[id].db_id)
	{
		xajax_saveMarkerLoc(el("markerdbid").value);
	}
	menuclick("markerprop");
	xajax_loadMarker(markerlist[id].db_id);
	curMarker = id;
}

function moveMarker(id)
{
	// calculate difference between old marker and new marker
	var ll2 = markerlist[id].getPoint();
	var dlon = Math.abs(ll2.lng() - markerlist[id].ll.lng());
	var dlat = Math.abs(ll2.lat() - markerlist[id].ll.lat());
	
	var lchange = ((dlon>0.0010)||(dlat>0.0010));
	if (el("markerdbid").value!=markerlist[id].db_id)
	{
		xajax_saveMarkerLoc(el("markerdbid").value);
	}
	xajax_loadMarker(markerlist[id].db_id);
	xajax_moveMarker(ll2.lat(), ll2.lng(), markerlist[id].db_id, id, lchange)
}

function changeLonLatMarker()
{
	var dlon=el("markerlon").value;
	var dlat=el("markerlat").value;
	var ll = new GLatLng(dlat, dlon);
	markerlist[curMarker].setPoint(ll);
	pmarkerlist[curMarker].setPoint(ll);
	moveMarker(curMarker);
}
function deleteMarker()
{
	var ccenter = intmainmap.getCenter();
	intmainmap.panTo(markerlist[curMarker].getPoint());
	if (confirm("Are you sure you wish to delete this marker?"))
	{
		xajax_deleteMarker(markerlist[curMarker].db_id, curMarker); 
		menuclick("markertoolbar");
		el("markerdbid").value = -1;
		curMarker = -1;
	}
	intmainmap.panTo(ccenter);
}
function openPrevMarker(id)
{
	prevc_point = prevmainmap.getCenter();
	pmarkerlist[id].openInfoWindowHtml(pmarkerlist[id].popupText); 
}

function changeMarker(dx, oval)
{
	var valchange;
	switch (dx)
	{
		case 1: valchange = el("markerid").value; break;
		case 2: valchange = el("markerdesc").value; break;
		case 3: valchange = el("markeraddress").value; break;
		case 4: valchange = oval; break;
		case 5: valchange = el("marker_mainmap").checked; break;
		case 6: valchange = el("marker_ttips").checked; break;
		case 7: valchange = el("marker_gotohere").checked; break;
	}
	
	xajax_updateMarker(el("markerdbid").value, curMarker, dx, valchange)
}

function clearMarker()
{
	var i;
	for (i=0;i<markercount;i++)
	{
		intmainmap.removeOverlay(markerlist[i]);
		prevmainmap.removeOverlay(pmarkerlist[i]);
	}
	markercount = 0;
	el("markerdbid").value = -1;
	curMarker = -1;
}

function addBookmark()
{
	if (curMarker != -1)
	{
		ll2 = markerlist[curMarker].getPoint();
		xajax_createBookmark(ll2.lat(), ll2.lng(), el("markerid").value, el("markeraddress").value);
	}
	else
	{
		alert('Please choose a marker');
	}
}

function addBookmarkToSelect(val, tt)
{
	var sel = el('markerselect');
	var elOptNew = document.createElement('option');
	elOptNew.text = tt;
	elOptNew.value = val; 
	try {
		sel.add(elOptNew, null); // standards compliant; doesn't work in IE
	}
	catch(ex) {
		elSel.add(elOptNew); // IE only
	}
}


