/* 
Script to save marker/ new attraction for user
*/

// Globals 
var usermarkerset=[];
// global variable for attraction text
var gAttractionText;
// the HTML for the form
var gAttractionHtml = '<div id=saveAttraction><b class="green10">Create your own marker</b><div class="black10">First drag marker to move it to the proper location</div>';
var gAttractionHtmlForm= '<div id=saveAttraction><b class="green10">Create your own marker</b><div class="black10"><form action="javascript:saveAttraction(document.saveattraction.usertitle.value,document.saveattraction.usertext.value)" name="saveattraction"> Title:<br><input type="text" name="usertitle"><br>Text:<br><textarea cols=25 rows=6 name="usertext"></textarea><br><input type="submit" name="submit" value="submit"></form></div></div>';
var booDragStart=false;
var booAddingAttraction=false;

function listAttractionTitle(pId) {
	// Load data after map loads
	requestData = GXmlHttp.create();
	requestData.open("GET", gAttractionListBaseURL+"?userid="+gUserId+"&id="+pId+"&onlytitle=true&r=" + Math.random(), false);
	requestData.send(null);
	var xmlDoc=requestData.responseXML;
  	var xmlMarkers = xmlDoc.documentElement.getElementsByTagName("marker");
	data=xmlMarkers[0].firstChild.data;
	return data;
}

// List Attraction 
function listAttraction(pId) {
	// Load data after map loads
	requestData = GXmlHttp.create();
	requestData.open("GET", gAttractionListBaseURL+"?userid="+gUserId+"&id="+pId+"&r=" + Math.random(), false);
	requestData.send(null);
	var xmlDoc=requestData.responseXML;
  	var xmlMarkers = xmlDoc.documentElement.getElementsByTagName("marker");
	data=xmlMarkers[0].firstChild.data;
	return data;
}

// Saves this Attraction
function saveAttraction(pTitle,pText) {
	if (pTitle=='') {
		alert ('you must provide a title');
		return;
	}
	if (pText=='') {
		alert ('you must provide some text');
		return;
	}
	title=encodeURI(pTitle);
	text=encodeURI(pText);
	// Load data after map loads
	requestData = GXmlHttp.create();
	// Replace the following URL and parameters with server-side script to save & process attractions
	requestData.open("GET", gAttractionSaveBaseURL+"?userid="+gUserId+"&text="+text+"&title="+title+"&lat="+gALat+"&lng="+gALng+"r=" + Math.random(), true, true);
	requestData.onreadystatechange = saveAttractionRequest;
	requestData.send(null);
	booAddingAttraction=false;

}

// Save This Attraction
function saveAttractionRequest() {
  var booError=false;
  if (requestData.readyState == 4) {
  	if (requestData.status != 200) {
		var lstr_status="Could not find MCD db";
		booError=true;
  	}
	var lstr_status=requestData.responseText;
	if (lstr_status=="") {
		lstr_status="Error occurred saving settings";
		booError=true;
	}	
	gAttractionText=lstr_status;
	alert(lstr_status);

	//map.getInfoWindow();
   	map.closeInfoWindow();

	// Remove all old useradded markers (they will get added again below)
	MarkersRemoveOverlay("useradded");

	// Show all the user attractions again (re-fetches user markers from database)
	showAllUserAttractions();
  }
}

// Create the marker
function createMarker(point) {
	var marker = new GMarker(point, {draggable: true});
	GEvent.addListener(marker, "infowindowclose", function() {
		if (!booDragStart) {
			map.removeOverlay(marker);
		}
	});

	GEvent.addListener(marker, "dragstart", function() {
		booDragStart=true;
		booAddingAttraction=true;
  		map.closeInfoWindow();
  	});

	GEvent.addListener(marker, "dragend", function() {
		booDragStart=false;
		gALat=marker.getPoint().lat();
		gALng=marker.getPoint().lng();
  		marker.openInfoWindowHtml(gAttractionHtmlForm);
  	});

  	//GEvent.addListener(marker, "click", function() {
//		marker.openInfoWindowHtml(document.getElementById("instructions").innerHTML);
 //   });

	return marker;
}

function showAllUserAttractions() {
    requestAllData = GXmlHttp.create();
    requestAllData.open("GET",gAttractionDumpBaseURL+"?userid="+gUserId , true);
    requestAllData.onreadystatechange = processXMLUserData;
    requestAllData.send(null);
}

function processXMLUserData() {
  if (requestAllData.readyState == 4) {
    if (requestAllData.status != 200) {
        alert("Could not get XML UserData File ("+requestAllData.status+")");
        return;
    }
    var xmlDoc = requestAllData.responseXML;
    if (!xmlDoc) {
        alert("Invalid XML Data file");
        return;
    }
    // Add UserData Markers
    var xmlMarkers = xmlDoc.documentElement.getElementsByTagName("marker");
    for (var i=0; i < xmlMarkers.length; i++) {
        // Create Marker
        marker=initMarker(
            parseFloat(xmlMarkers[i].getAttribute("lng")),
            parseFloat(xmlMarkers[i].getAttribute("lat")),
            xmlMarkers[i].getAttribute("title"),
            '<b><font face="Verdana" size=2>'+xmlMarkers[i].getAttribute("title")+'</font></b><p>'+xmlMarkers[i].firstChild.data,
            xmlMarkers[i].getAttribute("code"),
            xmlMarkers[i].getAttribute("id"));
   		mymarkerset.push(marker);
   		usermarkerset.push(marker);
        // Make sure settings are updated
        if (arrGroups[xmlMarkers[i].getAttribute("code")]['checked']=="checked") {
            map.addOverlay(marker);
        }
    }
  }
}

function addAttractionMarker() {
	var lat=map.getCenter().lat();
	var lng=map.getCenter().lng();
	var point=new GPoint(lng,lat);
 	var newmarker = createMarker(point);
   	map.addOverlay(newmarker);
   	newmarker.openInfoWindowHtml(gAttractionHtml);
}

function deletePoint(pId) {
	requestDelete = GXmlHttp.create();
	requestDelete.open("GET", gAttractionDeleteBaseURL+"?userid="+gUserId+"&id="+pId,true);
	requestDelete.onreadystatechange = deleteAttractionRequest;
	requestDelete.send(null);
}

function deleteAttractionRequest() {
  if (requestDelete.readyState == 4) {
  	if (requestDelete.status != 200) {
		var lstr_status="Could not find MCD db";
		booError=true;
  	}
	var lstr_status=requestDelete.responseText;
	if (lstr_status=="") {
		lstr_status="Error occurred saving settings";
		booError=true;
	}	

	alert(lstr_status);

   	map.closeInfoWindow();

	// Remove all old useradded markers (they will get added again below)
	MarkersRemoveOverlay("useradded");

	// Show all the user attractions again (re-fetches user markers from database)
	showAllUserAttractions();
  }
}

