// don't cry, I'll put this in a class at some point...
var map = null;
var tc = null;
var gp = null;
var ct = null;
var Place = {
	AddToList : function(event)
	{
		Event.stop(event);

		var options = "";
		for(var i=0;i<placeRelationships.length;i++)
		{
			options += '<option value="'+placeRelationships[i].rel+'"'+(placeRelationships[i].rel=="2"?" selected":"")+'>'+placeRelationships[i].text+'</option>';
		}

		win(300,''+
			'<form id="addToListForm">'+
			'<div class="formText">'+
				'<b>Select a list to add to</b><br>'+
				'<span id="selLists"><img src="images/loading.gif"></span>' +
				'<input type="text" value="New List Title" id="txtLists" onfocus="this.value=\'\';" style="display:none">' +
				' <input type="button" class="green" value="New List" id="btnNewPlace"><br><br>'+
				'<b>Select status</b><br>'+
				'<select id="selPlaceStatus" onchange="Place.ChangeStatus_changed(this)">'+options+'</select><br><br>'+
				'<div id="relationshipComment" style="display:none">'+
					'<b>Briefly write about your experience</b><br>'+
					'<textarea id="txtRelationshipComment" cols="30"></textarea><br><br>'+
				'</div>'+
				'<div class="hideArea">'+
					'<input type="submit" class="green" value="Add Place" id="btnAddPlaceToListSubmit">'+
					'<span style="margin:0px 10px" id="popupOrBlock">or</span>'+
					'<input type="button" class="red" value="Cancel" id="btnCancel">'+
				'</div>'+
			'</div>'+
			'</form>'+
		'');
		new Ajax.Request(slink+'ajax/lists', {
			method : "post",
			parameters : {
				action : "get list options",
				idplace : idplace
			},
			onSuccess : function(transport)
			{
				if(ajaxResponse(transport,false))
				{
					if(transport.responseText == "")
						$("selLists").innerHTML = 'There are no available lists to add to:';
					else
						$("selLists").innerHTML = '<select id="selList">'+transport.responseText+'</select> or ';
				}
			}
		});
		Event.observe($("addToListForm"),"submit",function(event)
		{
			Event.stop(event);
			if(($("btnNewPlace").value != "Existing Lists" && $F("selList") == "") || $F("txtLists") == "") {
				alert("You must enter a list name");
				return;
			}

			var h = $("btnAddPlaceToListSubmit").up(".hideArea");

			h.hide();
			innerNotice(h,"Adding place to list...");
			if($("btnNewPlace").value == "Existing Lists")
			{
				new Ajax.Request(slink+'ajax/lists', {
					method : "post",
					parameters : {
						action:"add list",
						name:$F("txtLists")
					},
					onSuccess : function(transport)
					{
						var data = eval("("+transport.responseText+")");
						Place.DoAddToList(data);
					}
				});
			}
			else
				Place.DoAddToList();
		});
		//Event.observe($("btnNewPlace"),"click",Place.NewListPlace);
	},
	DoAddToList : function(txt)
	{
		holder = new Ajax.Request(slink+'ajax/places', {
			method : "post",
			parameters : {
				action : "add to list",
				idplace : idplace,
				idlist : (txt == null ? $F("selList") : txt.id),
				relationship : $F("selPlaceStatus"),
				comment : $F("txtRelationshipComment")
			},
			onSuccess : function(transport)
			{
				if(ajaxResponse(transport,false))
				{
					noticeDestroy();
					noticeTimed("This place has been added to your list.");
				}
			}
		});
	},
	// This is the [new list] button when adding a place to a list
	NewListPlace : function(event)
	{
		if($("btnNewPlace").value == "Existing Lists"){
			$("btnNewPlace").value = "New List";
			$("txtLists").hide();
			$("selLists").show();
		}
		else {
			$("btnNewPlace").value = "Existing Lists";
			$("selLists").hide();
			$("txtLists").show();
		}
	},
	ChangeStatus : function(event)
	{
		Event.stop(event);

		var options = "";
		var relationship = $("placeStatus").readAttribute("relationship");
		var displayControl = (relationship=="3"||relationship=="4"?"block":"none");
		var relationshipCommentText = $("placeStatusComment").innerHTML;
		for(var i=0;i<placeRelationships.length;i++)
		{
			options += '<option value="'+placeRelationships[i].rel+'"'+(placeRelationships[i].rel==relationship?" selected":"")+'>'+placeRelationships[i].text+'</option>';
		}

		win(300,''+
			'<form id="updatePlaceStatusForm">'+
			'<div class="formText">'+
				'<b>Select new status</b><br>'+
				'<select id="selPlaceStatus" onchange="Place.ChangeStatus_changed(this)">'+options+'</select><br><br>'+
				'<div id="relationshipComment" style="display:'+displayControl+'">'+
					'<b>Briefly write about your experience</b><br>'+
					'<textarea id="txtRelationshipComment" cols="30">'+relationshipCommentText+'</textarea><br><br>'+
				'</div>'+
				'<div class="hideArea">'+
					'<input type="submit" class="green" value="Save Status" id="btnSaveStatus">'+
					'<span style="margin:0px 10px" id="popupOrBlock">or</span>'+
					'<input type="button" class="red" value="Cancel" id="btnCancel">'+
				'</div>'+
			'</div>'+
			'</form>'+
		'');


	},
	ChangeStatus_changed : function(o)
	{
		if(o.value == "3" || o.value == "4")
		{
			$("relationshipComment").show();
		}
		else
		{
			$("relationshipComment").hide();
		}
		if(o.value == $("placeStatus").readAttribute("relationship")) $("txtRelationshipComment").value = $("placeStatusComment").innerHTML;
		else $("txtRelationshipComment").value = "";
	},
	MinMap : function(event) {
		var el = event.element();
		if(el == $("map") || el.descendantOf($("map")))
			return;
		Event.stopObserving(document,"click",Place.MinMap);
		map.resizeTo(new YSize(150,150));
		$("map").style.position = "relative";
		$("map").style.left = null;
		map.removeZoomScale();
		map.removeZoomControl();
		map.removeOverlay(tc);
		tc = null;
		map.drawZoomAndCenter("\"" + $("fulladdress").innerHTML + "\"", 3);
	}
}

var ImageUpload = {
	Present : function()
	{
		win(300,''+
			'<iframe id="uploadFrame" name="uploadFrame" style="visibility:hidden;width:1px;height:1px"></iframe>'+
			'<form action="'+slink+'ajax/images" method="post" target="uploadFrame" id="uploadImageForm" enctype="multipart/form-data">'+
			'<input type="hidden" name="action" value="add image">'+
			'<input type="hidden" name="idplace" value="'+idplace+'">'+
			'<div class="formText">'+
				'<b>Select a photo to upload</b><br>'+
				'<input type="file" id="picture" name="picture" size="30"><br><br>'+
				'<div class="hideArea">'+
					'<input type="submit" name="submitButton" class="green" value="Upload Image" id="btnSaveStatus">'+
					'<span style="margin:0px 10px" id="popupOrBlock">or</span>'+
					'<input type="button" class="red" value="Cancel" id="btnCancel">'+
				'</div>'+
			'</div>'+
			'</form>'+
		'');
		if(o = $("uploadFrame"))
		{
			Event.observe(o,"load",function(){
				var o = $("uploadFrame");
				var d = o.contentDocument||o.contentWindow.document;
				if(d.body.innerHTML != "")
				{
					if(ajaxResponse({responseText:d.body.innerHTML},false))
					{
						if(o = $("profileimage")) o.src = d.body.innerHTML;
						if(o = $("profileimageedit")) o.src = d.body.innerHTML;
						noticeDestroy();
					}
				}
			});
		}
		Event.observe($("uploadImageForm"),"submit",function(event){
			if($F("picture").blank())
			{
				Event.stop(event);
				alert("Please select a photo to upload.");
				return false;
			}
			var e = Event.element(event);
			var h = e.down(".hideArea");
			h.hide();
			innerNotice(h,"Uploading Image...");
		});
	}
}

var PlaceEdit = {
	Init : function(event)
	{
		Event.stop(event);
		var o = $("editingContainer");
		o.hide();
		var d = new Element("div",{id:"editingArea"});
		d.innerHTML = '<div style="padding:50px 0px" align="center" class="defaultText">Loading...<br><img src="images/loading.gif"></div>';
		o.parentNode.insertBefore(d,o);

		holder = new Ajax.Request(slink+'ajax/places', {
			method : "post",
			parameters : {
				action : "get edit",
				id : idplace
			},
			onSuccess : function(transport)
			{
				if(ajaxResponse(transport,false))
				{
					$("btnEditInformation").hide();
					$("editingArea").innerHTML = transport.responseText;
					if(o = $("btnImageUpoad")) Event.observe(o,"click",ImageUpload.Present);
				}
				else $("editingContainer").hide();
			}
		});
	},
	Cancel : function()
	{
		if(o = $("editingArea")) o.remove();
		$("editingContainer").show();
		$("btnEditInformation").show();
	},
	Save : function()
	{
		var map = {
			name : "Name of place",
			placetype : "Type of place"
		}

		var validate = {
			name : "not null",
			placetype : "not null"
		}

		var parms = {
			action : "update place",
			idplace : idplace,
			name : $F("txtName"),
			placetype : $F("txtPlacetype"),
			address : $F("txtAddress"),
			city : $F("txtCity"),
			state : $F("txtState"),
			zip : $F("txtZip"),
			country : $F("selCountry"),
			hours : $F("txtHours"),
			website : $F("txtWebsite"),
			phone : $F("txtPhone")
		}

		if(validateForm(parms,validate,map))
		{
			notice("Updating place...");
			new Ajax.Request(slink+'ajax/places', {
				method : "post",
				parameters : parms,
				onSuccess : function(transport)
				{
					if(ajaxResponse(transport,false))
					{
						if(o = $("editingArea")) o.remove();
						$("editingContainer").innerHTML = transport.responseText;
						$("editingContainer").show();
						$("btnEditInformation").show();
						if(o = $("btnEditInformation")) Event.observe(o,"click",PlaceEdit.Init);
						noticeDestroy();
						InitMap();
					}
				}
			});
		}

		return false;
	}
}

var Share = {
	Show : function(event)
	{
		Event.stop(event);

		win(300,''+
			'<form id="shareForm">'+
			'<div class="formText">'+
				'<b>Select the friends you want to share with</b><br>'+
				'<span id="friendsArea"><img src="images/loading.gif"></span><br><br>'+
				'<div class="hideArea">'+
					'<input type="submit" class="green" value="Send to Friends" id="btnSend" style="visibility:hidden">'+
					'<span style="margin:0px 10px;visibility:hidden" id="popupOrBlock">or</span>'+
					'<input type="button" class="red" value="Cancel" id="btnCancel">'+
				'</div>'+
			'</div>'+
			'</form>'+
		'');

		new Ajax.Request(slink+'ajax/friends', {
			method : "post",
			parameters : {
				action : "get options"
			},
			onSuccess : function(transport)
			{
				if(ajaxResponse(transport,false))
				{
					if(transport.responseText == "")
					{
						$("friendsArea").innerHTML = 'You do not have any friends.';
						$("btnSend").remove();
						$("popupOrBlock").remove();
					}
					else
					{
						$("friendsArea").innerHTML = '<select id="selFriends" size="5" style="width:200px" multiple>'+transport.responseText+'</select><br><br>'+
							'<b>Add a message</b><br>'+
							'<textarea cols="30" rows="4" id="txtMessage"></textarea>';
						$("btnSend").style.visibility = "visible";
						$("popupOrBlock").style.visibility = "visible";
					}
				}
			}
		});

		Event.observe($("shareForm"),"submit",function(event){
			Event.stop(event);

			var friends = "";
			var options = $("selFriends").options;
			for(var i=0;i<options.length;i++)
			{
				if(options[i].selected) friends += (friends==""?"":",")+options[i].value;
			}
			var message = $F("txtMessage");

			if(friends.blank())
			{
				alert("Please select at least 1 friend.");
				return;
			}

			var e = Event.element(event);
			var h = e.down(".hideArea");

			h.hide();
			innerNotice(h,"Sending item to your friends...");


			holder = new Ajax.Request(slink+'ajax/places', {
				method : "post",
				parameters : {
					action : "share",
					friends : friends,
					message : message,
					idplace : idplace,
					name : $("dataName").innerHTML
				},
				onSuccess : function(transport)
				{
					if(ajaxResponse(transport,false))
					{
						noticeDestroy();
						noticeTimed("This place has been sent to the friends you selected.");
					}
				}
			});
		});
	}
}

var Merge = {
	Submit : function(event)
	{
		var e = Event.element(event);
		Event.stop(event);

		holder = new Ajax.Request(slink+'ajax/places', {
			method : "post",
			parameters : {
				action : "merge",
				idplace : idplace
			},
			onSuccess : function(transport)
			{
				if(ajaxResponse(transport,false))
				{
					if(transport.responseText == "true")
					{
						noticeTimed("Visit another profile and click <b>Merge this profile</b> to complete the merge.");
					}
					else
					{
						location.href = transport.responseText;
					}
				}
			}
		});
		return false;
	}
}

function InitMap()
{
	map = new YMap(document.getElementById('map'));
	map.setMapType(YAHOO_MAP_REG);
	map.drawZoomAndCenter("\"" + $("fulladdress").innerHTML + "\"", 3);
	YEvent.Capture(map,"endMapDraw",function() {
		if(map.getMarkerIDs() == null || map.getMarkerIDs().length == 0) {
			gp = map.getCenterLatLon();
			map.addMarker(gp,"themarker");
		}
		if(ct != map.getCurrentMapType()) {
			ct = map.getCurrentMapType();
			map.panToLatLon(gp);
		}
	});
	YEvent.Capture(map,"MouseDown",function() {
		map.addZoomScale();
		map.addZoomLong();
		if(tc == null) {
			var _dc = [
				YMapConfig.imgPrefixURL+'med_map.png?v=1.3',
				YMapConfig.imgPrefixURL+'med_sat.png?v=1.3',
				YMapConfig.imgPrefixURL+'med_hyb.png?v=1.3'];
			tc = new YMapTypeControl(new YCoordPoint(270,5));
			tc.setControl(YAHOO_MAP_REG, new YImage(_dc[0],new YSize(33,17)), new YSize(33,17));
			tc.setControl(YAHOO_MAP_SAT, new YImage(_dc[1],new YSize(33,17)), new YSize(33,17));
			tc.setControl(YAHOO_MAP_HYB, new YImage(_dc[2],new YSize(33,17)), new YSize(33,17));
			tc.setHorizontal();
		}
		map.addOverlay(tc);
		map.resizeTo(new YSize(400,400));
		$("map").style.position = "absolute";
		$("map").style.left = "595px";
		Event.observe(document,"click",Place.MinMap);
	});
	map.disableKeyControls();
	map.removeZoomScale();
}
function TryInitMap()
{
	if(loadedAllExternal)
	{
		InitMap();
	}
	else
	{
		setTimeout("TryInitMap()",1000);
	}
}

Event.observe(window,"load",function(event){
	if(o = $("btnAddPlaceToList"))
	{
		o.setAttribute("href","#");
		Event.observe(o,"click",Place.AddToList);
	}
	if(o = $("btnEditInformation"))
	{
		o.setAttribute("href","#");
		Event.observe(o,"click",PlaceEdit.Init);
	}
	if(o = $("btnShare"))
	{
		o.setAttribute("href","#");
		Event.observe(o,"click",Share.Show);
	}
	if(o = $("updatePlaceStatusForm"))
	{
		Event.observe(o,"submit",function(event){
			Event.stop(event);
			notice("Updating status...");

			holder = new Ajax.Request(slink+'ajax/places', {
				method : "post",
				parameters : {
					action : "update relationship",
					idplace : idplace,
					relationship : $F("selPlaceStatus"),
					comment : $F("txtRelationshipComment")
				},
				onSuccess : function(transport)
				{
					if(ajaxResponse(transport,false))
					{
						noticeDestroy();
					}
				}
			});
		});
	}
	if(o = $("btnMerge"))
	{
		o.setAttribute("href","#");
		Event.observe(o,"click",Merge.Submit);
	}
	TryInitMap();
},false);