var ajax = new AJAX();

function handleSubmit()
{
	fv = new FormValidator();
	
	fv.setLabelErrorClass("error");
			
	fv.addField("zip", "Zip Code", "zip", true, "zip_label");
	
	// Validate the form
	if(fv.validate())
	{
		document.getElementById("the_form").submit();
		return true;
	}
	else
	{
		window.scrollTo(0, 0);
		return false;
	}
}

function vetFinderResultsOnLoad(latitude, longitude)
{
	if(!latitude || !longitude)
		return;
	
	if(!GBrowserIsCompatible()) 
		return;
	
	// Create the map object
	googleMap = new GMap2(document.getElementById("map"));
	
	// Change default map options
	googleMap.enableScrollWheelZoom();
	googleMap.enableContinuousZoom();
	
	// Add controls
	googleMap.addControl(new GSmallMapControl());

	// Position the view
	googleMap.setCenter(new GLatLng(latitude, longitude), 13);  // must be set prior to creating markers
	
	// Set markers for each of the vets
	for(var i = 0 ; i < localVets.length ; i++)
	{
		var vet = localVets[i];
		var vetLoc = new GLatLng(vet.latitude, vet.longitude);
		var marker = new GMarker(vetLoc, {title:vet.name});
		
		// Create a click event listener for the marker
		GEvent.addListener(marker, "click", onMapMarkerClick);
		
		googleMap.addOverlay(marker);
	}
}

function onMapMarkerClick()
{	
	var mapLoc = this.getPoint();
	var matchingVets = new Array();
	
	// Figure out which vet this is
	for(var i = 0 ; i < localVets.length ; i++)
	{
		var vetLoc = new GLatLng(localVets[i].latitude, localVets[i].longitude);
		
		if(mapLoc.equals(vetLoc))
			matchingVets.push(localVets[i]);
	}
	
	// Put a bubble by this marker
	createInfoBubble(mapLoc, matchingVets);
}

function resultListItemOnClick(vetIndex)
{
	var vet = localVets[vetIndex];
	
	// Put a bubble by this marker
	createInfoBubble(new GLatLng(vet.latitude, vet.longitude), new Array(vet));
}

function createInfoBubble(point, vets)
{
	// Create the HTML for each vet
	var html = "<div class='google_info_bubble'>";
	
	for(var i = 0 ; i < vets.length ; i++)
	{
		html += "<b>"+vets[i].name+"</b><br />";
		if(vets[i].address)
			html += vets[i].address+"<br />";
		html += vets[i].city+", "+vets[i].state+" "+vets[i].zip+"<br />";
		html += vets[i].phoneNumber;
		
		if(i + 1 != vets.length)
			html += "<br /><br />";
	}
	
	html += "</div>";
	
	googleMap.openInfoWindowHtml(point, html);
}

function vetFinderResultsOnUnload()
{
	GUnload();
}

function addToMyVetOnClick(vetIndex)
{
	if(!localVets[vetIndex])
		return;
	
	var myVet = localVets[vetIndex];
	
	// Make the AJAX call
	var ara = new AjaxRequestAuth(profileEmailAddress, profileID, myVet);
	
	ajax.init(); // IE sucks
	ajax.setURL(ajaxURL+"/my_vet/save.php");
	ajax.setCallback(myVetSaveAjaxCallback);
	ajax.sendValue("post", "my_vet", ara.toJSONString());
}

function myVetSaveAjaxCallback()
{
	var status = ajax.responseIsReady();
	
	if(status == -1)
		alert("Response failed");
	else if(status != 1)
		return;
	
	// Success
	var result = eval("("+ajax.getResponse()+")");
	if(!result.status)
	{
		alert(result.errorMessage);
		return;
	}
	
	var phpMyVet = result.value;
	
	// Convert to SALocalVet
	var vet = SALocalVet.createFromPHPMyVet(phpMyVet);
	
	// Update the side bar w/ the new My Vet
	addNewMyVetToSidebar(vet);
}

function addNewMyVetToSidebar(vet)
{
	// Fill in the values
	setElementText(document.getElementById("my_vet_name"), vet.name);
	setElementText(document.getElementById("my_vet_addr1"), vet.address);
	setElementText(document.getElementById("my_vet_city"), vet.city);
	setElementText(document.getElementById("my_vet_state"), vet.state);
	setElementText(document.getElementById("my_vet_zip"), vet.zip);
	setElementText(document.getElementById("my_vet_phone_number"), vet.phoneNumber);
	if(vet.url)
		setElementText(document.getElementById("my_vet_url"), "<a href='"+vet.url+"' target='_blank'>Web Site</a>");
	
	// Hide the "no vet" pane
	elementAddClass(document.getElementById("my_vet_side_no_vet"), "hidden");
	
	// Show the "has vet" pane
	elementRemoveClass(document.getElementById("my_vet_side_has_vet"), "hidden");
}

function deleteVetInfoOnClick()
{
	// Confirm w/ the user
	if(!confirm("Are you sure you want to delete your vet?"))
		return;
	
	// Make AJAX call to remove this reminder
	var ara = new AjaxRequestAuth(profileEmailAddress, profileID, null);
		
	ajax.init(); // IE sucks
	ajax.setURL(ajaxURL+"/my_vet/delete.php");
	ajax.setCallback(myVetDeleteAjaxCallback);
	ajax.sendValue("post", "my_vet", ara.toJSONString());
}

function myVetDeleteAjaxCallback()
{
	var status = ajax.responseIsReady();
	
	if(status == -1)
		alert("Response failed");
	else if(status != 1)
		return;
	
	// Success
	var result = eval("("+ajax.getResponse()+")");
	if(!result.status)
	{
		alert(result.errorMessage);
		return;
	}
	
	// Replace the My Vet w/ the proper instructional copy
	removeMyVetFromSidebar();
}

function removeMyVetFromSidebar()
{
	// Hide the "has vet" pane
	elementAddClass(document.getElementById("my_vet_side_has_vet"), "hidden");
	
	// Show the "no vet" pane
	elementRemoveClass(document.getElementById("my_vet_side_no_vet"), "hidden");
	
	// Clear the values
	setElementText(document.getElementById("my_vet_name"), "");
	setElementText(document.getElementById("my_vet_addr1"), "");
	setElementText(document.getElementById("my_vet_city"), "");
	setElementText(document.getElementById("my_vet_state"), "");
	setElementText(document.getElementById("my_vet_zip"), "");
	setElementText(document.getElementById("my_vet_phone_number"), "");
	setElementText(document.getElementById("my_vet_url"), "");
}




function SALocalVet() 
{
	this.name = "";
	this.address = "";
	this.city = "";
	this.state = "";
	this.zip = "";
	this.phoneNumber = "";
	this.url = "";
	this.latitude = "";
	this.longitude = "";
	this.distance = "";
}

SALocalVet.createFromPHPMyVet = function(phpMyVet)  // static
{
	var rtn = new SALocalVet();
	
	rtn.name = phpMyVet.name;
	rtn.address = phpMyVet.address1;
	rtn.city = phpMyVet.city;
	rtn.state = phpMyVet.state;
	rtn.zip = phpMyVet.zip;
	rtn.phoneNumber = phpMyVet.phoneNumber;
	rtn.url = phpMyVet.url;
	
	return rtn;
}