var theMarkers = new Array();
var _map_rclck_listener = null;
var _new_track_listener = null;
var _cur_edit_track_id = null;
var _cur_edit_track = null;
var _cur_edit_track_pt = null;
var _cur_edit_track_data = null;

function newMarker(id, x, y)
{
	var ctl = document.getElementById(id);
	var marker_id = ctl.firstChild.id.substr(2);
	var gp = new GPoint((x * 1.0), (y * 1.0)+37.0);
	var gll = gmap.fromContainerPixelToLatLng(gp);
	var request = new Prado.CallbackRequest('setup_new_marker_form',{});
	var args = marker_id;
	request.setCallbackParameter(args);
	request.dispatch();
	$("new_marker_form_args").value = gll.lat() + ";" + gll.lng() + ";" + marker_id;
	$("nome").value = "";
	$("descrizione").value = "";
	$('mi_current_marker').value = "";
	$("Inserisci").value="Aggiungi";
	$("addedit_marker_title").innerHTML="Add Marker";
	openModal('new_marker_form', 341, 342);
    if (document.getElementById("nome"))
	    document.getElementById("nome").focus();
}

function edit_marker_info()
{
	var id = $('mi_current_marker').value;
	var marker_id = id.replace("marker_", "");
	marker_id = marker_id.substr(0, marker_id.indexOf("_"));
	var request = new Prado.CallbackRequest('setup_new_marker_form',{});
	var args = marker_id;
	request.setCallbackParameter(args);
	request.dispatch();
	$("nome").value = $('mi_nome').innerHTML;
	$("descrizione").value = $('mi_descrizione').innerHTML;
	$("Inserisci").value="Aggiorna";
	$("addedit_marker_title").innerHTML="Edit Marker";
	openModal('new_marker_form', 341, 342);
	$("nome").focus();
}

function hide_new_marker_form()
{
	var d = document.getElementById('new_marker_form');
	d.style.display= "none";
	closeModal();
}

function addClientMarkers (jmarkers)
{
	gmap.clearOverlays();
	theMarkers = new Array();
	markers = JSON.parse(jmarkers);
	for (var i = 0; i < markers.length; i++) {
		m = markers[i];
		addClientMarker (m [0], m[1], m[2], m[3], m[4], m[5], m[6], m[7]);
	}
}

function addClientMarker(id, sn, lat, lng, cid, ttle, drag, iconurl)
{
	var ll = new GLatLng (lat, lng);
	icon = new GIcon();
	//icon.image = this.iconurl;
	icon.shadow = iconurl;
	icon.iconSize = new GSize(35, 40);
	icon.shadowSize = new GSize(55, 40);
	icon.iconAnchor = new GPoint(18,39);
	icon.infoWindowAnchor = new GPoint(31, 8);

	var o = {
		icon:icon,
		title: ttle,
		draggable: _IS_DRAGGABLE,
		clickable: true,
		bouncy: true,
		id: id
	};
	var m = new GMarker(ll, o);
	gmap.addOverlay(m);
	theMarkers.push(m);
	GEvent.addListener(m, "click", function() {	OnMarkerClick(this, this.id); });
	GEvent.addListener(m, "dragend", function() { OnMarkerDrag(this, this.id); });
}

function initProjectItems()
{
	var request = new Prado.CallbackRequest('init_prj_items',{});
	var cat = $('catalog')
	cat_id = cat.options[cat.options.selectedIndex].value;
	request.setCallbackParameter(cat_id);
	request.options.asynchronous = false;
	request.dispatch();
}

function loadCatalogMarkers()
{
	var request = new Prado.CallbackRequest('load_catalog',{});
	var cat = document.getElementById('catalog')
	cat_id = cat.options[cat.options.selectedIndex].value;
	request.setCallbackParameter(cat_id);
    request.options.asynchronous = false;
	request.dispatch();
    setMarkerScroll(0);
}

function loadCatalogMarkersById(cat_id)
{
	var request = new Prado.CallbackRequest('load_catalog',{});
	request.setCallbackParameter(cat_id);
	request.options.asynchronous = false;
	request.dispatch();
    setMarkerScroll(0);
}

var _cur_m_scroll_value = 0;


function setMarkerScroll(n)
{
    var ms = $$("#marker_list div.draggable");
    if (n > 0) {
        for (x = 0; x < n; x++ )
            ms[x].style.display = "none";
    }
    for (x = n; x < Math.min (n + _MAX_M_SCROLL_COUNT, ms.length); x++) {
        ms[x].style.display = "inline";
    }
    if ((n + _MAX_M_SCROLL_COUNT) < ms.length) {
        for (x = n + _MAX_M_SCROLL_COUNT; x < ms.length; x++) {
            ms[x].style.display = "none";
        }
    }
    _cur_m_scroll_value = n;
}

function scrollMarkersRight ()
{
    if (_cur_m_scroll_value <= 0)
        return;
        
    setMarkerScroll(--_cur_m_scroll_value);
}

function scrollMarkersLeft ()
{
    var ms = $$("#marker_list div.draggable");
    if (_cur_m_scroll_value >= ((ms.length)-_MAX_M_SCROLL_COUNT))
        return;
        
    setMarkerScroll(++_cur_m_scroll_value);
}

function OnMarkerClick (m, id)
{
	gmap.closeInfoWindow();
	$('mi_current_marker').value = id;
	var request = new Prado.CallbackRequest('marker_click',{});
	request.setCallbackParameter(id);
	request.dispatch();
}


function __OnMarkerClick (id, bmask, mmask, name, desc, la_lat, la_lng)
{
	var m = getMarkerOnMap(id);
	if (!m) {
		return;
	}
	$('mi_current_marker').value = id;
	$('mi_button_mask').value = bmask;
	$('mi_media_button_mask').value = mmask;
	$('mi_nome').innerHTML = name;
	$('mi_descrizione').innerHTML = desc;
    setup_mi_btns();
	setup_mi_media_btns();
	handleLookAroundLink (la_lat, la_lng);
	m.openInfoWindow($('marker_info').innerHTML);
}

function OnMarkerDrag(m, id)
{
	var ll = m.getLatLng();
	var params = id + ":" + ll.lat() + ":" + ll.lng();
	var request = new Prado.CallbackRequest('marker_drag',{});
	request.setCallbackParameter(params);
	request.dispatch();
}

function resetMap(lat, lng, zoom)
{
	gmap.closeInfoWindow();
	var ll = new GLatLng(lat, lng);
	gmap.setCenter (ll, parseFloat(zoom));
}

function doShowCenterMarker (params)
{                        
    hideMediaTitles();    
	gmap.closeInfoWindow();
	var p = JSON.parse(params);
	var id = p[0];
	var cat = p[1];
	var lat = p[2];
	var lng = p[3];

	var ll = new GLatLng(lat, lng);
	gmap.setCenter (ll);

    var catlist = $('catalog')
    var curcat = catlist.options[catlist.options.selectedIndex].value;
    if (cat != curcat) {
        $('catalog').value = cat;
    }
    else
        cat = "N";

	$('mi_current_marker').value = id;
	var request = new Prado.CallbackRequest('show_center_marker',{});
    request.setCallbackParameter(cat + ":" + id);
    request.options.asynchronous = false;
    request.dispatch();

    setup_mi_btns();
	setup_mi_media_btns();
    
	gmap.openInfoWindow(ll, $('marker_info').innerHTML);

}

function delete_marker()
{
	var msg = "Are you sure you want to delete this marker (" +
			$("mi_nome").innerHTML + ")?\nAssociated media files will be deleted as well.";
			
	if (!confirm(msg)) 
		return;
		
	var request = new Prado.CallbackRequest('cb_del_marker',{});
    request.setCallbackParameter(null);
    request.dispatch();		
}

function getMarkerOnMap(id)
{
	for (i = 0; i < theMarkers.length; i++) {
		var cid = theMarkers[i].id
		if (cid == id || cid.substr (cid.length - (id.length+1), id.length+1) == ("_" + id)) {
			return theMarkers[i];
		}
	}
	return null;
}

function removeMarkerFromMap(id)
{

	for (i = 0; i < theMarkers.length; i++) {
		if (theMarkers[i].id == id) {
			var m = theMarkers[i];
			var name = $("mi_nome").innerHTML
			gmap.removeOverlay(m);
			var newMarkers = new Array();
			for (x = 0; x < theMarkers.length; x++) {
				if (theMarkers[x].id != id) 
					newMarkers.push(theMarkers[x]);
			}
			theMarkers = newMarkers;
			alert ("Marker \"" + name + "\" was deleted successfully");
			break;
		}
	}
}

function setup_mi_btns()
{

    var mask = $('mi_button_mask').value;
    $('b_mi_edit').style.display = (mask & 1) ? "block" : "none";
    $('b_mi_delete').style.display = (mask & 2) ? "block" : "none";
}

function get_media_btn_id(mtype)
{
		var b = "";
		switch (mtype) {
			case _M_VIDEO :
				b = "b_media_vid";
				break;
			case _M_AUDIO :
				b = "b_media_snd";
				break;		
			case _M_IMAGE :
				b = "b_media_img";
				break;
			case _M_TEXT :
				b = "b_media_txt";
				break;
			case _M_ILINK :
				b = "b_media_ilink";
				break;
			case _M_ELINK :
				b = "b_media_elink";
				break;
		}
		return b;
}

function setup_mi_media_btn(mt)
{
    var mask = $('mi_media_button_mask').value;
	var amask = mask.split(";");
	for (x = 0; x < amask.length; x++) {
		var amc = amask[x].split(":");
		var mtype = parseInt(amc[0]);
		var mcount = parseInt(amc[1]);
		if (mtype != mt)
			continue;
			
		var b = get_media_btn_id(mtype);
		if (b != "") {
			$(b).style.opacity = (mcount > 0 ? "1.0" : "0.5");
			break;
		}
	}
}

function setup_mi_media_btns()
{
    var mask = $('mi_media_button_mask').value;
	var amask = mask.split(";");
	for (x = 0; x < amask.length; x++) {
		var amc = amask[x].split(":");
		var mtype = parseInt(amc[0]);
		var mcount = parseInt(amc[1]);
		var b = get_media_btn_id(mtype);
		if (b != "")
			$(b).style.opacity = (mcount > 0 ? "1.0" : "0.5");
	}

}

function hide_marker_info ()
{
	gmap.closeInfoWindow();
}

function setImageSrc (iid, s)
{
	document.getElementById(iid).src = s;
}

function doMarkerAction (action)
{
	var request = new Prado.CallbackRequest('marker_action',{});
	request.setCallbackParameter(action);
	request.dispatch();
}

function doMsg(t)
{
	alert(t);
}

function showMediaTitles(mtype, sender)
{
    var pos = findPos($(sender));
    var al = $('ajax_loader');

    al.style.top = pos[1] + 3 + 'px';
    al.style.left = pos[0] + 5 + 'px';
    al.style.zIndex = 3;
    al.style.position='absolute';
    al.style.display='block';

	var request = new Prado.CallbackRequest('build_media_list',{});
	request.setCallbackParameter(mtype + ":" + sender);
	request.dispatch();
}

function hideMediaTitles()
{
	var ml = $('media_list');
	ml.style.display='none';
	setMapClickable (true);
}

function hideEditTrackOpts()
{
	$('edit_trk_menu').style.display='none';
	setMapClickable (true);
}

function setupMarkerInstanceList(html)
{
	var mlb = $('prj_marker_listbox');
	mlb.innerHTML = html;
}

function setupTrackList(html)
{
	var mlb = $('prj_track_listbox');
	mlb.innerHTML = html;
}

function setupILinkPrjList(html)
{
	var mlb = $('add_ilink_prjlist_listbox');
	mlb.innerHTML = html;
}

function setupListboxContent(id, html)
{
	var mlb = $(id);
	mlb.innerHTML = "";
	mlb.innerHTML = html;
}

function setupMediaTitles(html, sender)
{
	var pos = findPos($(sender));
	var ml = $('media_list');
	var mlb = $('media_listbox');
    var al = $('ajax_loader');

    al.style.display='none';
	ml.style.top = pos[1] + 20 + 'px';
	ml.style.left = pos[0] + 20 + 'px';
	ml.style.zIndex = 3;
	ml.style.position='absolute';
	mlb.innerHTML = html;
	ml.style.display='block';
	setMapClickable (false);
}

function setupComments(html, f)
{
	var mlb = $('comment_list_container');
	mlb.innerHTML = html;

	$("p_add_new_comment").style.display = f ? "block" : "none";
	$("b_add_comment_close").style.display = !f ? "inline" : "none";
	$("comment_list_container").style.height =  f ? "220px" : "450px";
	$("comment_list_container").scrollTop = 0;
}

function doAddComment()
{
	var request = new Prado.CallbackRequest('cb_add_comment',{});
	request.setCallbackParameter(null);
	request.dispatch();
}

function clearNewComment()
{
	$("new_comment").value = "";
}

function setMapClickable (f)
{
	var m = $('map');
	var pos = findPos(m);
	var mnc = $('media_noclick');

	if (!f) {
		Element.clonePosition(mnc, m);
		mnc.style.position='absolute';
		mnc.style.display='block';
		mnc.style.zIndex = 2;
	}
	else
	{
		mnc.style.display='none';
	}
}

var fu = null;

function setImageSrc (iid, s)
{
	document.getElementById(iid).src = s;
}

function addTextMedia()
{
    var e = tinyMCE.selectedInstance;
	e.setContent('<html><head></head><body></body></html>')
	openModal('p_add_text_media', 600,400, 'mbox_add_text');
}

function addInternalLink()
{
	_add_ilink_cur_prj = null;
	_add_ilink_cur_minst = null;
	var request = new Prado.CallbackRequest('cb_prepare_add_ilink',{});
	request.setCallbackParameter(null);
	request.options.asynchronous = false;
	request.dispatch();
	hideMediaTitles();
	openModal('p_add_ilink', 600,400, 'mbox_add_text');
}

function doAddILink_getMarkers(id)
{
	if ($("wait"))
		$("wait").style.display = "block";
	_add_ilink_cur_prj = id;
	_add_ilink_cur_minst = null;
	var request = new Prado.CallbackRequest('cb_add_ilink_get_markers',{});
	request.setCallbackParameter(id);
	request.options.asynchronous = false;
	request.dispatch();
	if ($("wait"))
		$("wait").style.display = "none";	
}

function doAddILink_selMarker(o,id)
{
	ms = $$("#add_ilink_marker_listbox span");
	for (x = 0; x < ms.length; x++) {
		ms[x].style.backgroundColor = "#ffffff";
	}
	
	_add_ilink_cur_minst = id;
	o.style.backgroundColor = "#e0e0e0";
}

function addILinkActual()
{
	if (!_add_ilink_cur_minst) {
		alert ("Please select a place from the list on the right");
		return;
	}
	var request = new Prado.CallbackRequest('cb_add_ilink_save',{});
	request.setCallbackParameter(_add_ilink_cur_prj + ":" + _add_ilink_cur_minst);
	request.options.asynchronous = false;
	request.dispatch();	
}


function addExternalLink()
{

	/*var request = new Prado.CallbackRequest('cb_prepare_add_elink',{});
	request.setCallbackParameter(null);
	request.options.asynchronous = false;
	request.dispatch();*/
	hideMediaTitles();
	openModal('p_add_elink', 600,100, 'mbox_add_text');
}

function uploadMedia()
{
	setTransferStatus(0);
    $("transfer_status"). value = 0; // 0: upload, 1: convert
	$("f_upload").value = ($("upload").value != "" ? $("upload").value : "Click here to select a media file");
	var tid = new UUID();
	$("APC_UPLOAD_PROGRESS").value = tid;
	$("transfer_id").value = tid;
	
	$("upload_label").innerText = "Upload media file";
	openModal('p_upload_media', 600,135, 'mbox_upload');
}

function notifyConversionNeeded()
{
	$("upload_label").innerHTML = "Converting media file";
}

function addMedia(mtype)
{
	$("media_type").value = mtype;
	switch (mtype) {
		case _M_VIDEO:
		case _M_AUDIO:
		case _M_IMAGE:
			uploadMedia();
			break;

		case _M_TEXT:
			addTextMedia();
			break;

		case _M_ILINK:
			addInternalLink();
			break;

		case _M_ELINK:
			addExternalLink();
			break;
	}

}

function addTextActual()
{
	var te = document.getElementById("text_editor");
	var request = new Prado.CallbackRequest('cb_add_text',{});
	if (te) {
        var html = '<html><head></head><body>' +  tinyMCE.selectedInstance.getContent() + '</body></html>';
		request.setCallbackParameter(html);
		request.dispatch();
	}
	hideMediaTitles();
	closeModal();
}


function editMedia(mtype, mid, transferid, closemodal)
{
	if (closemodal)
		closeModal();

	$("e_media_type").value = mtype;
	$("e_media_id").value = mid;
	$("e_transfer_id").value = transferid;
	$("taglist_available_tags").scrollTop = 0;
	openModal('p_edit_media', 800, 550, 'mbox_edit');
}

function editExistingMedia(mtype, mid, closemodal)
{
	var request = new Prado.CallbackRequest('cb_edit_existing_media',{});	
	request.setCallbackParameter(mtype + ":" + mid);
	request.options.asynchronous = false;
	request.dispatch();
	$("taglist_available_tags").selectedIndex = 0;
	$("taglist_available_tags").scrollTop = 0;
	editMedia (mtype, mid, null, closemodal);
}

function startUpload(tid)
{
	if ($("upload").value == "") {
		alert ("Please select a media file to upload");
		return;
	}
	//var request = new Prado.CallbackRequest('update_transfer_status',{});
	var t = Prado.WebUI.TTimeTriggeredCallback.timers["update_transfer_status"];
	t.startTimer();
	var tid = $("transfer_id").value;
	if (fu && tid) {
		fu.startUpload(tid);
	}
}

function setTransferStatus(p)
{
	//myJsProgressBarHandler.setPercentage('progress_bar', p);
    upload_progress_bar.setPercentage(p);
}

function showMedia(mtype, id)
{
	var request = new Prado.CallbackRequest('prepare_show_media',{});
	$('mplayer_marker_name').innerHTML = '&nbsp;';
	$('mplayer_media_name').innerHTML = '&nbsp;';
	$('mplayer_media_desc').innerHTML = '&nbsp;';

	request.setCallbackParameter(mtype + ":" + id);
	request.dispatch();
	hideMediaTitles();
}


function initialize()
{
	gmap = new GMap2(document.getElementById("map"));
	gmap.setCenter(new GLatLng(_mmap_start_lat, _mmap_start_lng), _mmap_start_zoom);
	gmap.addControl(new GLargeMapControl());
	gmap.addControl(new GMapTypeControl());
	gmap.addControl(new GScaleControl());

	initProjectItems();
	custom_initialize();
}

function __lookAround()
{
	var request = new Prado.CallbackRequest('cb_look_around',{});
	request.setCallbackParameter(null);
	request.dispatch();
}

function lookAround(lat, lng)
{
	var __location = new GLatLng(lat,lng);
	panoramaOptions = { latlng: __location };
	panoClient = new GStreetviewClient();   
	panoClient.getNearestPanorama(__location, showPanoramaData);
}

function showPanoramaData(panoData) {
  if (panoData.code != 200) {
	alert ("Sorry, nothing to see here...");
    return;
  }

  var myPano = new GStreetviewPanorama(document.getElementById("p_look_around_content"), panoramaOptions);	
  myPano.setLocationAndPOV(panoData.location.latlng);
  openModal('p_look_around', 600, 400, 'mbox_add_text');
}


function handleLookAroundLink(lat, lng) {
	if (lat == 0 && lng == 0) {
		$("mi_lookaround").style.display = "none";
		return;
	}
	
	var __location = new GLatLng(lat,lng);
	panoramaOptions = { latlng: __location };
	panoClient = new GStreetviewClient();   
	panoClient.getNearestPanorama(__location, __handleLookAroundLink); 
}  

function __handleLookAroundLink(panoData) {
	if (panoData.code == 200)
		$("mi_lookaround").style.display = "block" ;
	else
		$("mi_lookaround").style.display = "none";
}

function doShowTrack(visible, id)
{
	if (!visible) {
		var t = gtracks.get(id);
		if (!t)
			return;
			
		gmap.removeOverlay(t);
		gtracks.unset(id);
	}
	else
	{
		var request = new Prado.CallbackRequest('cb_show_track',{});
		request.setCallbackParameter(id);
		request.options.asynchronous = false;
		request.dispatch();
	}
}

function __showTrack(js)
{
	eval(js);
}

function startNewTrack()
{
  _cur_edit_track = new GPolyline([],"#990000",5,0.8);
  _cur_edit_track_id = null;
  gmap.addOverlay(_cur_edit_track);
  _new_track_listener = GEvent.addListener(_cur_edit_track, "endline", saveEditedTrack); 
  _cur_edit_track.enableDrawing();
}

function importTrack()
{
	$("imp_track_name").value = "";
	$("imp_track_desc").value = "";
	$("imp_track_data").value = "";
	$("imp_track_id").value = "";
	openModal("p_import_gpx_track", 400,300);
}

function saveImpTrack()
{	
	if ($("imp_track_name").value == "" || $("imp_track_desc").value == "" || $("imp_track_id").value == "") {
		alert ("Please enter the required data and retry");
		return;
	}
	
	var request = new Prado.CallbackRequest('cb_imp_track_save',{});
	request.setCallbackParameter($("imp_track_color").value);
	request.dispatch();	
}

function editTrack(id)
{
	// TODO : Caching doesn't seem to work well
	// when performing back-to-back editing on the same track
	//_cur_edit_track = gtracks.get(id);
	//_cur_edit_track_id = id;
	if (!_cur_edit_track) {
		doShowTrack (true, id);
		$("_cb_ed_trk_" + id).checked = true;
	}
	_cur_edit_track_id = id; // added
	
	_cur_edit_track.enableEditing();
	_map_rclck_listener = GEvent.addListener(gmap,"singlerightclick",function(point,src,overlay) {
		var pos = findPos($("map"));
		$("edit_trk_menu").style.position = "absolute";
		$("edit_trk_menu").style.top = (pos[1] + parseInt(point.y)) + "px";
		$("edit_trk_menu").style.left = (pos[0] + parseInt(point.x)) + "px";
		$("edit_trk_menu").style.zIndex = 9999;
		setMapClickable (false);

		if (overlay) {
		  if (overlay != _cur_edit_track) {
			if (typeof(overlay.index) != "undefined") {
				_cur_edit_track_pt = overlay.index;
				$("edit_trk_menu_opt_del_pt").style.display = "block";
			}
			$("edit_trk_menu").style.display = "block";
		  }
		}
		else
		{
			_cur_edit_track_pt = null;
			$("edit_trk_menu_opt_del_pt").style.display = "none";
			$("edit_trk_menu").style.display = "block";
		}
	});
}

function delTrackPoint()
{
	_cur_edit_track.deleteVertex(_cur_edit_track_pt);
	_cur_edit_track_pt = null;
	hideEditTrackOpts();
}

function saveEditedTrack()
{
	var pts = [];
	
	for (x = 0; x < _cur_edit_track.getVertexCount(); x++) {
		var pt = _cur_edit_track.getVertex(x);
		var po = { id : x, lat: pt.lat(), lng: pt.lng() };
		pts.push( po  );
	}
	_cur_edit_track_data = { id: _cur_edit_track_id, points: pts };
	if (!_cur_edit_track_id) {
		$("save_track_name").value = "";
		$("save_track_desc").value = "";
	}
	else
	{
		var request = new Prado.CallbackRequest('cb_set_track_info',{});
		request.setCallbackParameter(_cur_edit_track_id);
		request.options.asynchronous = false;
		request.dispatch();				
	}		
	openModal ("p_save_track", 390,200);
	$("save_track_name").focus();

	cancelEditTrack();
}

function saveEditedTrackActual()
{
	var o = _cur_edit_track_data;
	var request = new Prado.CallbackRequest('cb_save_track',{});
	request.setCallbackParameter(Object.toJSON(o));
	request.dispatch();			
	
	cancelEditTrack();
}

function cancelEditTrack()
{
	if (_cur_edit_track) {
		_cur_edit_track.disableEditing();
		gmap.removeOverlay(_cur_edit_track);
		_cur_edit_track = null;
		_cur_edit_track_id = null;
	}
	if (_map_rclck_listener) {
		GEvent.removeListener(_map_rclck_listener);
		_map_rclck_listener = null;
	}	
	if (_new_track_listener) {
		GEvent.removeListener(_new_track_listener);
		_new_track_listener = null;
	}		
	_cur_edit_track = null;
	_cur_edit_track_pt = null;
	_cur_edit_track_id = null;
	hideEditTrackOpts();
}

function delTrack(id)
{

}

function prepare_findLocation()
{
	$("find_loc_addr").value = "";
/*	
	var lb_res = $("find_loc_res");
	for (x = 0; x < 15; x ++) {
		lb_res.options[lb_res.length] = new Option ("Option " + x, x);
	}
*/
	$("find_loc_res").length  = 0;
	openModal("p_find_location", 500, 190);
	$("find_loc_addr").focus();
}

function doFindLocation()
{
	var gc = new GClientGeocoder();
	var addr = $("find_loc_addr").value;
	var lb_res = $("find_loc_res");
	if (addr.trim() == "")
		return;
		
	gc.getLocations(addr, function (result)
          {
            if (result.Status.code == G_GEO_SUCCESS) {
              if (result.Placemark.length > 1) { 
                // Loop through the results
                for (var i=0; i<result.Placemark.length; i++) {
                  var p = result.Placemark[i].Point.coordinates;
				  var pm = result.Placemark[i];
				  lb_res.options[lb_res.length] = new Option (pm.address, p);
                 }
              }
              else {
                var p = result.Placemark[0].Point.coordinates;
                var pm = result.Placemark[0];
				lb_res.options[lb_res.length] = new Option (pm.address, p);
              }
            }
            else {
              alert('Oops, cannot find the address you specified...');
            }
          }
	);
}

function drawCircle(center, radius, color, thickness, opacity) {
	//Function created by Chris Haas
	var circleQuality = 1;			//1 is best but more points, 5 looks pretty good, too
	var M = Math.PI / 180;			//Create Radian conversion constant
	var L = gmap.getBounds();		//Holds copy of map bounds for use below
	var sw = L.getSouthWest();
	var ne = L.getNorthEast();

	//The map is not completely square so this calculates the lat/lon ratio
	// this works because we create a square map
	var circleSquish = (ne.lng() - sw.lng()) / (ne.lat() - sw.lat());

	var points = [];							//Init Point Array
	//Loop through all degrees from 0 to 360
	for(var i=0; i<360; i+=circleQuality){
		var P = new GLatLng(
			center.lat() + (radius * Math.sin(i * M)),
			center.lng() + (radius * Math.cos(i * M)) * circleSquish
			);
		points.push(P);
	}
	points.push(points[0]);	// close the circle
	var p = new GPolyline(points, color, thickness, opacity)
	gmap.addOverlay(p);
	return p;
}

var _found_loc_highlighter = null;

function goToFoundLocation()
{
	var lb_res = $("find_loc_res");
	var idx = lb_res.selectedIndex;
	if (idx < 0)
		return;
		
	var coords = lb_res.options[idx].value;
	var acoords = coords.split(",");
	if (acoords && acoords.length) {
		var ll = new GLatLng(acoords[1], acoords[0]);
		closeModal();
		gmap.setCenter (ll);
		_found_loc_highlighter = drawCircle (ll, 0.001, "#ff0000", 5,1);
		setMapClickable (false);
		setTimeout("remove_highlighter()", 2000);
	}
}

function remove_highlighter()
{
	if (_found_loc_highlighter) {
		gmap.removeOverlay (_found_loc_highlighter);
		_found_loc_highlighter = null;
	}
	setMapClickable (true);
}

function showComments()
{
	var request = new Prado.CallbackRequest('build_comment_list',{});
	request.setCallbackParameter(null);
	request.options.asynchronous = false;
	request.dispatch();
	openModal ('p_comments', 550,450);
}

function save_marker()
{
	var txt_limit = 600;
	var txt = $("descrizione").value;
	if (txt.trim().length > txt_limit) {
		alert ("A marker description cannot exceed " + txt_limit + " characters!\nPlease correct and retry");
		return;
	}
	var request = new Prado.CallbackRequest('cb_save_marker',{});
	request.setCallbackParameter(null);
	request.dispatch();
}

function eLinkGetUrl()
{
	var url = $("add_elink_url").value;
	if (url.trim() == "") 
		return "";
		
	// TODO: add security / syntax checks
	url = url.trim();
	if (url.substr(0,7) != "http://" && url.substr(0,8) != "https://")
		url = "http://" + url;
		
	return url;
}

function addELinkTest()
{
	var url = eLinkGetUrl();
	var win = window.open (url.trim(), "_blank");
}

function openELink(url)
{
	var win = window.open (url, "_blank");
}

function addELinkActual()
{
	var url = eLinkGetUrl();
	if (url == "") {
		alert ("Please enter a valid address/URL");
		return;
	}
	var request = new Prado.CallbackRequest('cb_add_elink_save',{});
	request.setCallbackParameter(url);
	request.options.asynchronous = false;
	request.dispatch();	
}




