Namespace.Register("Interface.Controls");

Interface.Controls = function(){
	return {
	addrFieldChanged : false,
	addrFieldIsRequired : false,
	endSelectingTimer : null,	
	broadcastOptionsSet : false,
	firstPointAnnounced : false,
	emailForUserFound : {},
	replyId : null,
	replyFlags : [],
	msgFlag : null,
	streetview : null,
	addressFilter : false,
	oddEven : ["odd", "even"],
	oddEvenIdx : 0,
	scrimOffset : 8,
	scrimOffset2 : 10,
	maxSpinnerSeg : 1,
	
	
	InitializeTagSearch : function() {
		try {
			$('searchTagsField').observe('focus', function() {srch.SearchFocus(this)})
			$('searchTagsField').observe('blur', function() {srch.SearchBlur(this)})
			$('searchTagsField').observe('keyup', function() {srch.SearchUpdated(this)})
		} catch(err) {
			
		}
		if (initialTags != null) {
			srch.selectedTags = initialTags
		}
	},
	
	ClearPanelizerMessage : function () {
		$('newMessageText').value = ""
		while ($$('#newMessageTagsCreatedAreaTags span.tag.message').length > 0) {
			Element.remove($$('#newMessageTagsCreatedAreaTags span.tag.message')[0])
		}
		try {
			$('panelizer_add_message').down("input#tags").value = ""			
		} catch(err) {alert("error 1")}
		try {
			if ($('saveCurrentArea') != null) {
				// $('newMessage_area_sel').selectedIndex = 0
				$('saveCurrentArea').checked = false
				$('panelizer_add_message').removeClassName('nameCurrentAreaMessage')
				$('newAreaName').value = ""
			}
		} catch(err) {alert("error 2")}
		$('newMessageURL').value = "optional eg craigslist link, twitter url"
		$('newMessageURL').unchanged = true
		ui.CheckForTagsAndMessage()
		ui.HidePanelizerMessage()
	},
	
	ClearSearchField : function() {
		$('searchTagsField').value = ""
		srch.SearchUpdated($('searchTagsField'))
		$('searchTagsField').value = "…search tags"
		srch.UpdateChannels()
		srch.UpdateTextSearchAlert()
	},
	
	SetScrimVisibility : function(flag) {
		flag = (flag == null) ? true : flag;
		if (flag) {
			if($('scrim') == null) {
				document.body.insert(new Element('div',{ 'id' : 'scrim', 'class': 'scrim'}), {position: 'after'})
			} else {
				$('scrim').show()
			}			
		} else {
			$('scrim').hide()
		}
	},
	
	CheckForReshape : function () {
		if (! map.currentPoly.hasBeenReshaped) {
			ui.ScrimAnnouncement(reshapeAreaScrimMessage)
			return
		}
		// this.ShowScrim('newMessage')
		this.ShowNewMessage()
	},
	
	ShowScrim : function(mode, opts) {
		$('scrimAnnouncement').hide()
		if (mode == "manageListeningPost" && map.crosshair == null) {
			alert("You have to set a location on the map first.")
			return
		}
		this.SetScrimVisibility()
		
		if($('modal_pane') == null) {
			document.body.insert(new Element('div',{ 'id' : 'modal_pane', 'class': 'modal_pane'}), {position: 'after'})
		} else {
			$('modal_pane').show()
		}
		if (mode == 'firstPoint') {
			new Ajax.Request("/interface?mode=firstPoint", {
				  method: 'get'})
		} else if (mode == 'frozeArea') {
		
		} else if (mode == 'showShapeAreaInstructions') {
			
		} else if (mode == 'manageListeningPost') {
			new Ajax.Request("/interface?mode=manageListeningPost", {
				  method: 'get'})
		} else if (mode == 'reachedMaximumMessages') {
			new Ajax.Request("/interface?mode=maximumMessages", {
				  method: 'get'})
		} else if (mode == 'newMessage') {
			ui.HideBroadcastOptions()
			new Ajax.Request("/interface?mode=newMessage", {
				  method: 'get'})
		} else if (mode == "replyToMessage") {
			new Ajax.Request("/interface?mode=replyToMessage&reply_to_id="+ opts['id'], {
				  method: 'get'})
		} else if (mode == 'firstArea') {
			new Ajax.Request("/interface?mode=firstArea", {
				  method: 'get'})
		} else if (mode = "firstReshape") {
			new Ajax.Request("/interface?mode=firstReshape", {
				  method: 'get'})
		}
	},
	
	ScrimAnnouncement : function(data) {
		try {
			if(data.trigger == 'firstPoint' && this.firstPointAnnounced) {
				return
			} else {
				this.firstPointAnnounced = true
			}
			this.SetScrimVisibility()
			$('scrimAnnouncement').show()
			$('modal_pane').hide()
			$('scrimAnnouncementHeading').update(data.heading)
			$('scrimAnnouncementBody').update(data.body)
			$('scrimAnnouncementKicker').update((data.kicker == null) ? "" : data.kicker)
			$('scrimAnnouncementTip').update(data.tip)
			var h = $('scrimAnnouncementBody').getHeight()
			$('scrimAnnouncementKicker').setStyle({'top' : h + 200 + "px"})
			$('scrimAnnouncementButtons').update("")
			var img
			var el
			$A(data.buttons).each(function(btn) {
				img = new Element('div', {'class' : 'go_btn', 'onclick' : btn.onclick }).update(btn.text)
				el = new Element('a', {'href' : '#', 'onclick' : btn.onclick + "; return false;"}).update(img)
				$('scrimAnnouncementButtons').insert({'top' : el})
			})
		} catch(err) {
			
		}
	},
	
	HideNewMessage : function () {
		try {
			$('ribbon').removeClassName('noSearch')
			$('addBroadcastPane').hide()
		} catch(err) {
			
		}
	},
	
	ShowPanelizerMessage : function() {
		ui.SetPanelizerMode('compose')
		this.UpdatePanelizerMessages()
	},
	
	HidePanelizerMessage : function() {
		ui.SetPanelizerMode("")
		map.EnablePolyEditing(false)
		map.currentPoly.hide()
		this.UpdatePanelizerMessages()
	},
	
	GetPanelizerMessageStage :function() {
		
	},
	
	HideRegistration : function() {
		ui.SetPanelizerMode("")
		this.UpdatePanelizerMessages()
	},
	
	CheckRegistrationEmail : function(email) {
		new Ajax.Request("/registration/0?email=" + email, {
			  method: 'get'})
	},
	
	FoundRegistrationUserEmail : function(found, email, alias) {
		alias = (alias == null) ? "" : alias
		this.emailForUserFound[email] = found
		if (found) {
			$('panelizer_registration_form').addClassName('not_found')
			$('panelizer_registration_form').removeClassName('stage2')
			$('panelizer_registration_form').removeClassName('stage3')
		} else {
			$('panelizer_registration_form').removeClassName('not_found')
		}
		this.UpdatePanelizerMessages()
	},
	
	SetRegistrationAlias : function(alias) {
		$('registration_alias').value = alias
	},
	
	UpdateCurrentAreaWithID : function(el) {
		var id = el.value
		if (el == $('addonAreasSelect')) {
			map.lastAddonArea = el.value
		}
		map.displayedAreaID = el.value
		if (map.lastAddonArea != map.displayedAreaID) { map.lastAddonArea = 0}
		try {
		if (map.channelAreas[$('channel_id').value][id] == null) {
			try {
				$('addonAreasSelect').selectedIndex = 0
			} catch(err) {}
		}
		} catch(err) {}
		new Ajax.Request("/area/"+ id + "?mode=display", {method : "get" })
	},
	
	UpdateLocationId : function (newarea) {
		if (newarea) {
			map.displayedAreaID = 0
			map.lastAddonArea = 0
			ui.AddCurrentAreaOption()
			try {
				$('newMessage_area_id').selectedIndex = 0
			} catch(err) {}
		}
	},
	
	CheckHasArea : function(event) {
		if (event.element().checked) {
			if (map.currentPoly == null) {
				map.DrawInitialPoly()
				alert("Reshape the area to match a neighbourhood you're interested in.")
			} else {
				map.currentPoly.show()
				if (! map.currentPoly.hasBeenReshaped) {
					map.EnablePolyEditing(true)
					alert("You should reshape the area to match a neighbourhood you're interested in")
				}
			}
			$('panelizer_registration_form').addClassName('useCurrentArea')
			var aname = $('userCurrentAreaName').value.strip()
			if (aname.length == 0) $('userCurrentAreaName').value = $('registration_alias').value.strip() + "'s Area"
		} else {
			$('panelizer_registration_form').removeClassName('useCurrentArea')
		}
		this.UpdatePanelizerMessages()
	},
	
	RegistrationResult : function(rslt) {
		if (! rslt) {
			alert("Your registration request was received. To complete the request, you must respond to a confirmation email sent to the address you supplied.")
		} else {
			alert("There was a problem with your registration.")
		}
		ui.HideRegistration()
	},
	
	CheckRegistrationForm : function(form) {
		var e  = $('registration_email').value.strip()
		var p1 = $('registration_password').value.strip()
		var p2 = $('registration_password_confirmation').value.strip()
		var a  = $('registration_alias').value.strip()
		if (! checkEmail(e)) {
			alert('you have to provide a valid email')
			return false
		}
		if (p1.length < 5 || p1.length > 20 ||  p1 != p2) {
			alert('passwords must match and be between 5 and 20 characters long')
			return false
		}
		if (a == "") {
			alert('you have to supply an alias.')
			return false
		}
		if ($('useCurrentLocation').checked) {
			$('registrationLocation').value = Object.toJSON(map.crosshair.getLatLng())
		}
		if ($('useCurrentArea').checked && (map.currentPoly == null || ! map.currentPoly.hasBeenReshaped)) {
			if (map.currentPoly == null) {
				// need to trap this, but should never happen
				return false
			} 
			try {
				$('registrationAreaPts').value = $A(map.lastPolyPts).toJSON()
			} catch(err) {
				alert("there was a problem sending your current area to the server")
				return false
			}
			map.currentPoly.show()
			map.EnablePolyEditing(true)
			return confirm("Are you sure you want to use the current area without reshaping it?")
		} else if (! $('useCurrentArea').checked && ! $('useCurrentLocation').checked) {
			return confirm("Are you sure you want to register without a location or area? (You can add or update them later.)")
		} else if ($('useCurrentArea').checked) {
			try {
				$('registrationAreaPts').value = $A(map.lastPolyPts).toJSON()
			} catch(err) {
				alert("there was a problem sending your current area to the server")
				return false
			}
		}
		return true
	},
	
	ShowRegistration : function() {
		ui.HidePanelizerPopdown()
		
		$('useCurrentArea').checked = false
		if(! $('useCurrentArea').isObserved) {
			$('useCurrentArea').observe('change', function(event) {ui.CheckHasArea(event)})
			$('useCurrentArea').isObserved = true
		}
		ui.SetPanelizerMode('register')
		
		$('panelizer_registration_form').removeClassName('stage2')
		$('panelizer_registration_form').removeClassName('stage3')
		$('registration_email').value = ""
		$('registration_password').value = ""
		$('registration_password_confirmation').value = ""
		$('registration_alias').value = ""
		
		if (! $('registration_email').isObserved) {
			$('registration_email').observe('blur', function(event) {
				var val = event.element().value
				if (checkEmail(val)) {
					ui.CheckRegistrationEmail(val)
					$('panelizer_registration_form').removeClassName('invalid_email')

					ui.UpdatePanelizerMessages()
				} else {
					$('panelizer_registration_form').addClassName('invalid_email')
					$('panelizer_registration_form').removeClassName('stage2')
					$('panelizer_registration_form').removeClassName('stage3')
					ui.UpdatePanelizerMessages()
				}
			})
			$('registration_email').isObserved = true
		}
		this.UpdatePanelizerMessages()
		
	},
	
	SetRegistrationStage : function() {
		if (! $('panelizer_registration_form').hasClassName('stage2')) {
			// checking here
			var e = $('registration_email').value.strip()
			if (! checkEmail(e)) {
				alert('you have to provide a valid email')
				return
			}
			var p1 = $('registration_password').value.strip()
			var p2 = $('registration_password_confirmation').value.strip()
			if (p1.length < 5 || p1.length > 20 ||  p1 != p2) {
				alert('passwords must match and be between 5 and 20 characters long')
				return
			}
			$('panelizer_registration_form').addClassName('stage2')
			this.UpdatePanelizerMessages()
		} else if (! $('panelizer_registration_form').hasClassName('stage3')) {
			// checking here
			if ($('registration_alias').value.strip() == "") {
				alert('you have to supply an alias.')
				return
			}
			$('panelizer_registration_form').addClassName('stage3')
			this.UpdatePanelizerMessages()
		}
		this.UpdatePanelizerMessages()
	},
	
	HideLogin : function () {
		ui.SetPanelizerMode('')
		this.UpdatePanelizerMessages()
		this.HideLoginWarning()
	},
	
	ShowLogin : function () {
		ui.HidePanelizerPopdown()
		ui.SetPanelizerMode('login')
		this.UpdatePanelizerMessages()
	},
	
	ShowLoginWarning : function () {
		$('panelizer_login_form').addClassName('warning')
	},
	
	HideLoginWarning : function () {
		$('panelizer_login_form').removeClassName('warning')
	},
	
	Logout : function() {
		ui.Busy()
		window.location = "/map?logout=1"
	},
	
	ShowNewMessage : function () {
		// this.HideBroadcastOptions()
		// srch.CloseRouteSearch()
		// $('ribbon').addClassName('noSearch')
		
		try {
			map.currentPoly.show()	
		} catch(err) {
			map.DrawInitialPoly()
		}
		if (! $('newMessageTags').isObserved) {
			$('newMessageTags').observe('keyup', function (event) {
				ui.UpdateNewMessageTags(event.element())
			})
			$('newMessageTags').observe('focus', function(event) {
				ui.TagFocus(event.element())
			})
			$('newMessageTags').observe('blur', function(event) {
				ui.TagBlur(event.element())
			})
			$('newMessageTags').isObserved = true
		}
		
		if (! $('newMessageText').isObserved) {
			$('newMessageText').observe('keyup', function(event) {
				ui.CheckForTagsAndMessage()
			})
			$('newMessageText').observe('focus', function(event) {
				ui.CheckForTagsAndMessage()
			})
			$('newMessageText').isObserved = true
		}
		
		if ($('newMessageEmail') == null) {
			if ($('saveCurrentArea') !=  null) {
				if (! $('saveCurrentArea').isObserved) {
					$('saveCurrentArea').observe('change', function(event) {
						// if (event.element().checked && $('panelizer_add_message').hasClassName('save_option')) {
						if (event.element().checked) {
							$('panelizer_add_message').addClassName('nameCurrentAreaMessage')
						} else {
							$('panelizer_add_message').removeClassName('nameCurrentAreaMessage')
						}
						ui.UpdatePanelizerMessages()
					})
				}
				$('saveCurrentArea').checked = false
				var nil = ($('saveCurrentArea').checked) ? $('panelizer_add_message').addClassName('nameCurrentAreaMessage') : $('panelizer_add_message').removeClassName('nameCurrentAreaMessage');
			}
		} else if (! $('newMessageEmail').isObserved) {
			$('newMessageEmail').unchanged = true
			$('newMessageEmail').observe('keyup', function(event) {
				var val = event.element().value
				if (checkEmail(val)) {
					$('panelizer_add_message').addClassName('stage4')
				} else {
					$('panelizer_add_message').removeClassName('stage4')
				}
			})
			$('newMessageEmail').observe('focus', function(event) {
				if (event.element().unchanged == true) {
					event.element().value = ""
				}
				event.element().unchanged = false
				var val = event.element().value
			})
			$('newMessageEmail').isObserved = true
		}
		
		if ($('newMessage_area_sel') != null) {
			var hasZero = false
			$A($('newMessage_area_sel').options).each( function(opt) {
				if (opt.value == 0) {
					hasZero = true
				}
			})
			if (! hasZero) {
				ui.AddCurrentAreaOption()
			}
			$('newMessage_area_sel').selectedIndex = 0
			$('panelizer_add_message').addClassName('save_option')
			if (! $('newMessage_area_sel').isObserved) {
				$('newMessage_area_sel').observe('change', function(event) {
					if (event.element().value == 0) {
						map.RemoveUserArea()
						$('panelizer_add_message').addClassName('save_option')
					} else {
						$('panelizer_add_message').removeClassName('save_option')
						msgs.GetUserArea(event.element().value)
					}
					ui.UpdatePanelizerMessages()
				})
				$('newMessage_area_sel').isObserved = true
			}
		}
		
		$('newMessageURL').unchanged = true
		if (! $('newMessageURL').isObserved) {
			$('newMessageURL').observe('focus', function(event) {
				if (event.element().unchanged == true) {
					event.element().value = ""
					event.element().unchanged = false
				}
			})
			$('newMessageURL').isObserved = true
		}
		// insert the code for the new message location here
		this.ShowPanelizerMessage()
	},
	
	UpdateNewMessageTags : function (el) {
		var bits = el.value.split(",")
		var remain = []
		var words
		if (bits.length == 1) {
			words = el.value.split(" ")
			if (words.length > 3) {
				var lastWord = $A(words).last()
				remain.push(lastWord)
				tag = new Element('span', {'class' : 'tag message'}).update("&nbsp;"+words.join("&nbsp;")+"&nbsp;")
				$('newMessageTags').insert({'after' : tag})
				tag.observe('click', function(event) {
					ui.RemoveNewMessageTag(this)
				})
				el.value = $A(remain).first()
			} else {
				remain = words
			}
		} else {
			$A(bits).each(function(bit) {
				words = bit.split(" ")
				if (words.length < 4) {
					if (bit.length > 3) {
						tag = new Element('span', {'class' : 'tag message'}).update("&nbsp;"+words.join("&nbsp;")+"&nbsp;")
						$('newMessageTags').insert({'after' : tag})
						tag.observe('click', function(event) {
							ui.RemoveNewMessageTag(this)
						})
					} else {
						remain.push(bit)
					}
				} else {
					remain.push(words.pop())
					tag = new Element('span', {'class' : 'tag message'}).update("&nbsp;"+words.join("&nbsp;")+"&nbsp;")
					$('newMessageTags').insert({'after' : tag})
					tag.observe('click', function(event) {
						ui.RemoveNewMessageTag(this)
					})
				}
			})
		}
		el.value = remain.join(" ")
		$('newMessageAddedTag').update("&nbsp;" + el.value.strip().gsub(" ", "&nbsp;") + "&nbsp;")
		var nmatW = $('newMessageAddedTag').getWidth()
		$('newMessageTags').setStyle({width : nmatW - 10 + "px"})
		ui.CheckForTagsAndMessage()
	},
	
	TagFocus : function (el) {
		el.value = ""
		var tag
		if ($('userAddedTag') == null) {
			tag = new Element('span', {'id' : 'newMessageAddedTag','class' : 'tag message'}).update("&nbsp;&nbsp;")
			$('newMessageTags').insert({'after' : tag})
			tag.observe('click', function(event) {
				ui.RemoveNewMessageTag(this)
			})					
		}
	},
	
	TagBlur : function (el) {
		if ($('newMessageAddedTag') != null) { 
			if (el.value.strip().length > 4) {
				$('newMessageAddedTag').id = ""
			} else {
				$('newMessageAddedTag').remove()
			}
		}
		$('newMessageTags').value = ""
		$('newMessageTags').setStyle({width:'19px'})
		ui.CheckForTagsAndMessage()
	},
		
	SetRouteStage : function (stage) {
		this.AdjustRouteArea()
	},
	
	SetNewMessageStage : function (stage) {
		
		if(stage == 'start') {
			cnames = $('addBroadcastPane').classNames()
			if (cnames.include("stage3") ||  cnames.include("stage4") || cnames.include("stage5")) {
				return
			}
			stage = (map.currentPoly == null) ? 1 : 2
		}
		if (stage == 'channel') {
			cnames = $('addBroadcastPane').classNames()
			if (cnames.include("stage4") || cnames.include("stage5")) {
				return
			}
			stage = 3
		}
		if (stage > 2) {
			var getValues = function(obj) { return obj.value }
			var tmp = $A($('channel_id').options).map(getValues).map(toInt)
			if (tmp.include(-1)) {
				$('channel_id').options[0].remove()
			}			
		}
		$('addBroadcastPane').classNames().each(function(cname) {
			if (cname != "ribbonEditor") { $('addBroadcastPane').removeClassName(cname)}
		})
		$('addBroadcastPane').addClassName("stage" + stage)
		if (stage == 5) {
			map.CheckPointInArea()
			this.UpdateNewMessageButton()
		}
		this.AdjustNewMessageTagsArea()	
	},
	
	CheckForTagsAndMessage : function() {
		if ($('newMessageText').value.strip().length > 5) {
			$('panelizer_add_message').addClassName('stage2')
		} else {
			$('panelizer_add_message').removeClassName('stage2')
		}
		var builtTags = $$('.tag.message')
		if (builtTags.length > 0) {
			try {
				$('added_tag_info').style.visibility = 'visible'				
			} catch (err) {}
			$('panelizer_add_message').addClassName('stage3')
			if($('newMessageEmail') == null) {
				$('panelizer_add_message').addClassName('stage4')
			} else if (checkEmail($('newMessageEmail').value.strip())) {
				$('panelizer_add_message').addClassName('stage4')
			} else {
				$('panelizer_add_message').removeClassName('stage4')
			}
		} else {
			try {
				$('added_tag_info').style.visibility = 'hidden'				
			} catch(err) {}
			$('panelizer_add_message').removeClassName('stage3')
			$('panelizer_add_message').removeClassName('stage4')
		}
		this.UpdatePanelizerMessages()
		return
	},
	
	UpdateNewMessageButton : function() {
		$('newMessageProceed').addClassName('button')
		var link = new Element('input', {'type' : 'submit', 'value' : 'Next', 'class' : 'submitButton', 'id' : 'newMessageSubmit'})
		$('newMessageProceed').update(link)
		
	},
	
	RemoveNewMessageTag : function(el) {
		el.remove()
		ui.CheckForTagsAndMessage()
	},
	
	AdjustScrimAnnouncement : function() {
		try {
			var h = $('scrimAnnouncementBody').getHeight()
			$('scrimAnnouncementKicker').setStyle({'top' : h + 200 + "px"})
		} catch(err) {
			
		}
	},
	
	HideScrim : function() {
		$('scrimAnnouncement').hide()
		try {
			if($('scrim') != null) {
				$('scrim').hide()
			}
			if ($('modal_pane') != null) {
				$('modal_pane').hide()
			}			
		} catch (err) {}
	},
	
	TogglePrePost : function(eltoken) {
		el = $$(eltoken)[0]
		if(el.hasClassName('post')) {
			el.removeClassName('post')
		} else {
			el.addClassName('post')
		}
	},
	
	ShowExtender : function(el) {
		$$('.ribbon .extended').each(function(ext) {
			if (ext != el) {
				ext.removeClassName('extended')
			}
		})
		
		if(! el.hasClassName('extended')) {
			el.addClassName('extended')
		}
	},
	
	HideExtender :function(el) {
		if(el.hasClassName('extended')) {
			el.removeClassName('extended')
		}
	},
	
	ShowByMode : function(mode, el) {
		if (mode == 'person'){
			$('listPanelContent').removeClassName('messages')
			$('listPanelContent').addClassName('people')
			
		} else if (mode == 'area') {
			$('listPanelContent').removeClassName('people')
			$('listPanelContent').addClassName('messages')
		}
		$$('#listTopButtons a').each(function(btn) {
			if(btn == el) {
				btn.removeClassName('disabled')
			} else {
				btn.addClassName('disabled')
			}
		})
		this.UpdatePanelizerMessages()
		return
	},
	
	ShowList : function(mode) {
		this.ScrimAnnouncement()
		if(map.crosshair == null) {
			// alert("Drag the location, or click the map to explore.")
			map.MapClick(null,map.map.getCenter())
		}
		// if (! $('main').hasClassName('listing')){
		// 		$('listPanel').setStyle({left : "-400px"})
		// 		new Effect.Move($('listPanel'), {
		// 			   	x: 400, 
		// 			   	transition: Effect.Transitions.sinoidal ,
		// 				afterFinish : function() {ui.ClearScriptaculous($('listPanel'))}
		// 		});
		// 	}
		$('main').addClassName('listing')
	},
	
	HideList : function() {
		// new Effect.Move($('listPanel'), {
		//    	x: -400, 
		//    	transition: Effect.Transitions.sinoidal ,
		// 	afterFinish : function() {ui.ClearScriptaculous($('listPanel'), {tgt : $('main'), remove : 'listing'})}
		// });
		$('main').removeClassName('tags')
	},
	
	WindowResized : function() {
		// this.AdjustScrimAnnouncement()
		this.UpdatePanelizerMessages()
		try {
			this.streetview.checkResize()			
		} catch (err) {}
	},
	
	ResizeExtendedArea : function() {
		try {
			var h = $('extendedList').getHeight()
			h = Math.min(h, 400)
			$('extendedListings').setStyle({'height' : h + 20 + 'px'})
		} catch(err) {
			
		}
	},
	
	AdjustRouteArea : function () {
		return
		if (! $('foundTagsRibbon').hasClassName('route')) return
		var h = $('routeSearchPane').getHeight()
		$('foundTagsRibbon').setStyle({'height' : h + 20 + "px"})
	},
	
	SetHeatMapOverlay : function(src, clear) {
		return
	},
	
	UpdateSpinner : function () {
		if(! $('main').hasClassName('busy')) { return }
			var max = 100
			var tgt
			var idx
			for (var i = 1; i <  13; i++) {
				idx = i + ui.maxSpinnerSeg
				idx = (idx % 12)
				tgt = $('p'+i)
				tgt.setOpacity(1.0 - (((idx*5) + 40) / 100))
			}
			ui.maxSpinnerSeg++
			ui.maxSpinnerSeg = ui.maxSpinnerSeg % 12
		
	},
	
	ToggleCityMap : function (flag) {
		return
	},
	
	ClearScriptaculous : function(el, post) {
		if(post != null) {
			if (post.add != null) {
				post.tgt.addClassName(post.add)
			}
			if (post.remove != null) {
				post.tgt.removeClassName(post.remove)
			}
		}
		el.setStyle({top : null, left : null})
	},
	
	ShowPanelizerPopdown : function() {
		$('panelizer').addClassName('popdown')
	},
	
	HidePanelizerPopdown : function() {
		$('panelizer').removeClassName('popdown')
	},
	
	CloseUserObjects : function () {
		ui.SetPanelizerMode("")
		this.UpdatePanelizerMessages()
	},
	
	DisconnectFromGoogle : function () {
		$('google_addressed_list').setStyle({height : '0px'})
		new Ajax.Request('/map', {method : 'get', 
			parameters : {'googleDisconnect' : 1 },
			onComplete : $('google_addressed_list').setStyle({height : '0px'})})
	},
	
	FilterContacts : function () {
		if (map.currentPoly == null) { return }
		var inArea = []
		var area = map.ConvertPoints(map.lastPolyPts)
		ui.addressFilter = false
		$$('#google_addressed_list .list_item').each (function (li) {
			if (li.down(".latlng") != null) {
				pt = [parseFloat(li.down(".latlng").down(".lat").value), parseFloat(li.down(".latlng").down(".lng").value)]
				if (pointInArea(area, pt)) {
					ui.addressFilter = true
					$('google_addressed_list').addClassName('filtered')
					li.addClassName('found')
					li.removeClassName(ui.oddEven[ui.oddEvenIdx])
					ui.oddEvenIdx = (ui.oddEvenIdx == 0) ? 1 : 0
					li.addClassName(ui.oddEven[ui.oddEvenIdx])
					inArea.push(li)
				} else {
					li.removeClassName('found')
				}
			}
		})
		if (! ui.addressFilter) {
			$('google_addressed_list').removeClassName('filtered')
			$$('#google_addressed_list .list_item').each (function (li) {
				li.removeClassName('found')
			})
			alert("No results for that area. Try reshaping or expanding the area.")
			return
		}
	},
	
	ExportContacts : function () {
		var exportable = []
		var email
		$$('#google_addressed_list .list_item').each (function (li) {
			if (li.hasClassName('found')) {
				email = li.down('.email').innerHTML
				if (email != "") {
					exportable.push(email)					
				}
			}
		})
		exportable = exportable.uniq()
		$('export_text_area').value = exportable.join(", ")
		$('address_export').show()
	},
	
	CloseAddressExport : function () {
		$('address_export').hide()
	},
	
	GoogleAddressAction : function () {
		var sel = $('address_action')
		if (sel.selectedIndex == 0) {
			alert("Choose an action from the popdown menu at left.")
			return
		} else if (sel.value == "filter") {
			if (map.currentPoly == null) {
				map.DrawInitialPoly()
				map.EnablePolyEditing(true)
				alert("You need an area to filter the contacts for. Reshape to the area you want to find contacts in.")
				return
			} else if (map.currentPoly.isHidden()) {
				map.currentPoly.show()
				map.EnablePolyEditing(true)
				if (! confirm("Continue to filter, or Cancel to reshape your area first.")) { return }
			}
			ui.FilterContacts()
			
		} else if (sel.value == "clear") {
			$('address_export').hide()
			$('google_addressed_list').removeClassName('filtered')
			$$('#google_addressed_list .list_item').each (function (li) {
				li.removeClassName('found')
				li.removeClassName(ui.oddEven[ui.oddEvenIdx])
				ui.oddEvenIdx = (ui.oddEvenIdx == 0) ? 1 : 0
				li.addClassName(ui.oddEven[ui.oddEvenIdx])
			})
			ui.addressFilter = false
		} else if (sel.value == "export") {
			if (map.currentPoly == null) {
				alert("You need to filter first. Select filter, and draw an area to filter.")
				return
			}
			if (! ui.addressFilter) {
				alert("You need to have filtered, with valid results to export. Try reshaping your area.") 
				return
			}
			ui.ExportContacts()
		}
	},
	
	RefreshContactLocations : function () {
		new Ajax.Request("/map", {method : 'get', parameters : {'googleRefresh' : 1}})
	},
	
	UpdateContactLocations : function () {
		new Ajax.Request("/map", {method : 'get', parameters : {'googleUpdate' : 1}})
	},
	
	Busy : function (flag) {
		flag = (flag == null) ? true : flag
		if (flag) {
			$('busy').setOpacity(0.0)
			$('busy').appear({ duration: 0.2 });
			
		}
		var tmp = (flag) ? $('main').addClassName('busy') : $('main').removeClassName('busy')
	},
	
	SetPanelizerMode : function (mode) {
		if (ui.PanelizerMode() == 'dates' && mode != "dates") {
			ui.Busy(true)
			new Ajax.Request("/area?point=" + $H(map.crosshair.getLatLng()).toJSON(), {
			  method: 'get',
			onComplete : function (){ui.Busy(false)}})
		}
		var tgt = $('panelizer').down('div.modeDiv')
		var updateHeatmap = (mode == "heatmap" && ! ui.PanelizerMode(['heatmap']))
		tgt.id = mode
		if (updateHeatmap) {
			map.UpdateOrientationRectangle()
			map.MoveCityMapMarker(map.crosshair.getLatLng())
		}
	},
	
	PanelizerMode : function(names) {
		try {
			var tgt = $('panelizer').down('div.modeDiv')
			if (names != null) {
				if (tgt.id == "") {return false}
				return (names.indexOf(tgt.id) != -1)
			}
			return tgt.id			
		} catch (err) {}
	},
	
	ShowPanelizerDates : function (flag) {
		if (ui.PanelizerMode() != "dates") {
			ui.SetPanelizerMode('dates')
			map.DateSliderUpdated()
		} else {
			ui.SetPanelizerMode('')
			map.MapClick(null, map.crosshair.getLatLng())
		}
		this.UpdatePanelizerMessages()
	},
	
	ShowPanelizerAddresses : function () {
		ui.HidePanelizerPopdown()
		if (ui.PanelizerMode() != "addresses") {
			ui.SetPanelizerMode('addresses')
		} else {
			ui.SetPanelizerMode('')
		}
		srch.ShowHeatMapChannels()
		ui.UpdatePanelizerMessages()
	},
	
	ShowPanelizerTags : function(flag) {
		if (flag == null) {
			if (ui.PanelizerMode() != "tags") {
				ui.SetPanelizerMode('tags')
			} else {
				ui.SetPanelizerMode('')
			}
		} else if (! flag) {
			ui.SetPanelizerMode('')
		} else {
			ui.SetPanelizerMode('tags')
		}
		this.UpdatePanelizerMessages()
	},
	
	ShowPanelizerMap : function() {
		if (ui.PanelizerMode() != "heatmap") {
			ui.SetPanelizerMode('heatmap')
		} else {
			ui.SetPanelizerMode('')
			$('selectMapChannels').checked = false
			$('channelPanelContent').removeClassName('heatmap')
		}
		this.UpdatePanelizerMessages()
	},
	
	
	ToggleMapChannels : function(el) {
		if (el.checked) {
			$('channelPanelContent').addClassName('heatmap')
		} else {
			$('channelPanelContent').removeClassName('heatmap')
		}
	},
	
	ShowUserListeningPosts : function() {
		if (ui.PanelizerMode() != "lps") {
			ui.SetPanelizerMode('lps')
		} else {
			ui.SetPanelizerMode('')
		}
		$('panelizer_right').removeClassName('compose')
		$('panelizer_right').removeClassName('user_areas')
		$('panelizer').removeClassName('tags')
		$('panelizer').removeClassName('dates')
		$('panelizer').removeClassName('map')
		$('panelizer').addClassName('user_lps')
		ui.HidePanelizerPopdown()
		this.UpdatePanelizerMessages()
		// alert("show Listening posts")
	},
	
	GetListingsHeight : function(el) {
		var tgt = $$('#' + el.id + ' .area')
		var idx = tgt.length
		if ($('listPanel').hasClassName('filtered')) {
			var height = 0
			tgt.each(function(area) {
				height += (area.hasClassName('noItems')) ? 0 : area.getHeight()
			})
			return height
		} else {
			try {
			var pos1 = tgt[idx - 1].viewportOffset()
			var dim1 = tgt[idx - 1].getHeight()
			var pos2 = tgt[0].viewportOffset()
			return (pos1[1] + dim1) - pos2[1]	
			} catch(err) {
				return 311 // need to deal with this - measure no results pane height
			}		
		}
	},
	
	ClearReplyForm : function() {
		$('reply[text]').value = ""
		$('include_reply_web_link').checked = false
		$('include_reply_flags').checked = false
		$A(this.replyFlags).each(function(obj) {
			map.map.removeOverlay(obj['marker'])
		})
		this.replyFlags = []
		this.UpdateReplyFlags()
		// this.replyId = null
		// shift to list of replies
	},
	
	HideMessageReply : function () {
		$$('.focus').each ( function(area) {
			area.removeClassName('focus')
		})
		$('list_area_message_'+this.replyId).setStyle({height : null})
		$('panelizer').removeClassName('reply')
		ui.SetPanelizerMode("")
		ui.UpdatePanelizerMessages()
	},
	
	ShowMessageReply : function(id) {
		ui.ShowPanelizerTags(false)
		ui.SetPanelizerMode('reply')
		this.replyId = id
		$('reply_message_id').value = id
		// $('panelizer').addClassName('reply')
		var areaId = $('list_area_message_'+id).up('div.area').id.split("_").last()
		$$('div#messagesList div.area').each (function(area) {
			if (area.id.split("_").last() != areaId) {
				area.removeClassName("focus")
			} else {
				area.addClassName('focus')
			}
		})
		$('list_area_message_' + id).addClassName('focus')
		$('list_people_message_' + id).show()
		$('include_reply_web_link').checked = false
		$('include_reply_flags').checked = false
		ui.HideReplyWebLink()
		this.replyFlags = []
		this.UpdateReplyFlags()
		this.UpdatePanelizerMessages()
		new Ajax.Request( "/message/"+id+"?replies=1", {method : 'get', replies : 1})
	},
	
	ShowMessageReplyForm : function () {
		ui.SetPanelizerMode('replying')
		$('panelizer_reply_form').addClassName('replying')
		this.UpdatePanelizerMessages()
	},
	
	HideMessageReplyForm : function (id) {
		try {
			if (this.replyId == id.split("_").last()) {
				this.HideMessageReply()
			}
		} catch(err) {}
		ui.SetPanelizerMode('reply')
		// $('panelizer_reply_form').removeClassName('replying')
		this.UpdatePanelizerMessages()
	},
	
	AddMsgFlag : function (latlng) {
		if (this.msgFlag != null) {
			map.map.removeOverlay(this.msgFlag)
		}
		var flag = new GMarker(latlng, {icon : blue_flag})
		this.msgFlag = flag
		map.map.addOverlay(flag)
		map.map.panTo(latlng)
	},
	
	AddReplyFlag : function (latlng) {
		if (this.replyFlags.length < 3) {
			var flag = new GMarker(latlng, {icon : blue_flag})
			this.replyFlags.push({point : latlng, note : "", marker : flag })
			map.map.addOverlay(flag)			
		} else {
			alert("You have to delete a flag before you can add more – 3 maximum.")
			return
		}
		this.UpdateReplyFlags()
		this.UpdatePanelizerMessages()
	},
	
	DeleteReplyFlag : function (idx) {
		map.map.removeOverlay(this.replyFlags[idx]['marker'])
		ui.replyFlags = ui.replyFlags.without(ui.replyFlags[idx])
		ui.UpdateReplyFlags()
		ui.UpdatePanelizerMessages()
	},
	
	UpdateReplyFlagNote : function (idx) {
		ui.replyFlags[idx]['note'] = $('flag_note_'+idx).down('input').value
	},
	
	ShowReplyLinkInfo : function (el, id) {
		var url = el.down().title
		var parent = $('auxiliary_info_bubble_'+id)
		$$('.list_item .auxiliary_info_bubble').each(function(el) {
			if (el != parent) {el.hide()}
		})
		if (! parent.visible()) {
			parent.show()
			this.UpdatePanelizerMessages()			
		}
		parent.down('div.bubbletail').setStyle({right : 270 + "px"})
		parent.down().update(url)
		parent.removeClassName('right_txt')
	},
	
	ShowReplyFlagInfo : function(el, id) {
		var parent = $('auxiliary_info_bubble_'+id)
		$$('.list_item .auxiliary_info_bubble').each(function(el) {
			if (el != parent) {el.hide()}
		})
		if (! parent.visible()) {
			parent.show()
			this.UpdatePanelizerMessages()			
		}
		var offset = el.up().up().previousSiblings().length
		parent.down('div.bubbletail').setStyle({right : 12 + (offset * 32) + "px"})
		var txt = (el.alt == "") ? "<em>no information</em>" : el.alt
		parent.down().update(txt)
		parent.addClassName('right_txt')
	},
	
	HideReplyFlagInfo : function(el) {
		try {
			var tgt = el.down('div.auxiliary_info_bubble')
			if (tgt.visible()) {
				tgt.hide()
				this.UpdatePanelizerMessages()	
			}
		} catch(err){}
	},
	
	UpdateReplyFlags : function () {
		$('reply_flag_divs').update("")
		for (var i = 0; i < this.replyFlags.length; i++) {
			var el = new Element('div', {'class' : 'reply_flag_div'})
			var enumerator = new Element('div', {'class' : 'flag_enumerator'}).update(i + 1 + " :")
			var lat = this.replyFlags[i]['marker'].getLatLng()['y']
			var lng = this.replyFlags[i]['marker'].getLatLng()['x']
			var flag_marker = new Element('div', {'class' : 'flag_enumerator flag_marker_flag', onclick : 'map.SetMapView('+lat+','+lng+')'})
			
			var flag_note_div = new Element('div', {'class' : 'flag_enumerator flag_note', id : 'flag_note_'+ i})
			var flag_note_field = new Element('input', {'type' : 'text', 
						name : 'flag_note_text['+i+']', 
						id : 'flag_note_text_'+i, 
						onkeyup : "ui.UpdateReplyFlagNote("+i+")"})
			var flag_delete = new Element('a', {'class' : 'flag_delete', href : "#", 'onclick' : "ui.DeleteReplyFlag("+i+")"}).update(new Element("img", {src : 'http://s3.amazonaws.com/urbanistica/interface/small_close_btn.png'}))
			flag_note_div.update(flag_note_field)
			flag_note_div.insert(flag_delete, {position : 'bottom'})
			var flag_location = new Element('input', {type : 'hidden', name : "flag_location["+i+"]"})
			var pt = ui.replyFlags[i]['point']
			flag_location.value = $H(pt).toJSON()
			el.insert(enumerator, {position : 'bottom'})
			el.insert(flag_marker.update("Note :"), {position : 'bottom'})
			el.insert(flag_note_div, {position : 'bottom'})
			el.insert(flag_location, {position : 'bottom'})
			$('reply_flag_divs').insert(el, {position : 'bottom'})
			flag_note_field.value = this.replyFlags[i]['note']
		}
		if (this.replyFlags.length > 0) {
			$('reply_flag_div').insert(new Element('div', {style : "clear:both"}), {position:'bottom'})			
		}
	},
	
	ShowReplyFlags : function (el) {
		if ($('include_reply_flags').checked == true) {
			this.replyFlags = []
			$('panelizer_reply_form').addClassName('has_flags')
		} else {
			$A(this.replyFlags).each (function(obj) {
				map.map.removeOverlay(obj['marker'])
			})
			$('panelizer_reply_form').removeClassName('has_flags')	
		}
		this.UpdateReplyFlags()
		this.UpdatePanelizerMessages()
	},
	
	ShowReplyWebLink : function (el) {
		$('panelizer_reply_form').addClassName('has_web_link')
		ui.UpdatePanelizerMessages()
	},
	
	HideReplyWebLink : function(el) {
		$('panelizer_reply_form').removeClassName('has_web_link')
		$('include_reply_web_link').checked = false
		ui.UpdatePanelizerMessages()
	},
	
	ValidateReply : function (form) {
		$('reply_url').value = ""
		if ($('include_reply_web_link').checked) {
			var url = $('reply_web_link').value.strip()
			if (url.indexOf("http") == -1) {
				url = "http://" + url 
			}
			if (msgs.ValidateURL(url)) {
				$('reply_url').value = url
			} else {
				if (! confirm("The web link url doesn't appear to be valid. Use anyway?")) {
					return false
				} else {
					$('reply_url').value = url
				}
			}
		}
		if ($('new_reply_text').value.length > 140) {
			alert("Replies are limited to 140 characters, not including notes to locations and link url.")
			return false
		}
		if (this.replyFlags !== null && this.replyFlags.length > 0) {
			var emptyNotes = false
			$A(this.replyFlags).each ( function(obj) {
				if (obj['note'].strip() == "") {
					emptyNotes = true
				}
			})
			if (emptyNotes) {
				return (confirm("Some of your locations have no notes associated. Continue anyway?"))
			}
		}
		return true
	},

	UpdateCurrentCity : function (city) {
		var val
		$A($('cities_id').options).each(function(opt) {
			val = opt.value.split("_")[0]
			if (val == city) {
				$('cities_id').value = opt.value
			}
		})
		$('cities_id').value = city
	},
	
	UpdateCityMap : function (url) {
		url = (url == null) ? null : url
		if (url == null) {
			$$('#cityMapImageArea .city_map_image').each(function(img) {
				img.hide()
			})
			$('orientationRectangle').hide()
			$('orientationCrosshair').hide()
		} else {
			$('city_map_image').show()
			$('city_map_image').src = url
		}
	},
	
	IsReplying : function () {
		return ui.PanelizerMode() == "replying"
	},
	
	UpdatePanelizerMessages : function() {
		var getVSpace = function(ref1, ref2) {
			ref2 = (ref2 == null) ? "ribbon" : ref2
			var p1 = $(ref1).viewportOffset()
			var p2 = $(ref2).viewportOffset()
			return p2[1] - p1[1]
		}
		
		var setVSpace = function(tgts, h, opts) {
			opts = (opts == null) ? {} : opts
			$A(tgts).each (function(tgt) {
				$(tgt).setStyle({height : ((opts[tgt] == null) ? h : opts[tgt] ) + "px"})
			})
		}
		var vSpace		// records the space available to jam the interface into
		try {
			$$('#map div.gmnoprint')[0].setStyle({'bottom' : "36px"})
			$$('#map .gmnoprint.terms-of-use-link')[0].up().setStyle({'bottom' : "43px", 'left' : "75px",'right': ""})			
		} catch (err) {}
		if ($('main').hasClassName('streetview')) {
			var map_bottom = $('ribbonContent').viewportOffset()
			$('map').setStyle({'top' : map_bottom[1] - $('map').getHeight()+"px"})
		}
		if (ui.PanelizerMode() == 'heatmap') {
			vSpace = getVSpace('cityMap')
			var dim1 = $('cityMap').getHeight()						// get height of panelizer_search
			var tgt =  ($('listPanelContent').hasClassName('messages')) ? 'messagesList' :  'peopleList'
			var msgHeight = this.GetListingsHeight($(tgt))
			msgHeight = Math.max(Math.min(msgHeight, vSpace - (dim1 + 38)), 80)
			setVSpace(['panelizer_messages', 'panelizer_messages_list'], msgHeight)
		} else if (ui.PanelizerMode() == "addresses") {
			try {
				vSpace = getVSpace('google_addressed_list')
				var bottomLI = $$('#google_addressed_list .list_item').last()
				var listH = bottomLI.viewportOffset()[1] + bottomLI.getHeight()
				window.status = listH
				var vSpace = Math.min(listH, vSpace)
				setVSpace(['google_addressed_list'], vSpace - 8 )				
			} catch (err) {}
		} else if (ui.PanelizerMode() == "compose" || ui.PanelizerMode() == "login") {
			var dim1 = $('panelizer_add_message').getHeight()
			if (ui.PanelizerMode() == "login") {dim1 += 40}
			setVSpace(['panelizer_messages', 'panelizer_messages_list'], dim1)
		} else if ($('currentLocationLists') != null && $('currentLocationLists').hasClassName('noResults')) {
			var dim1 = $('noResultsListPane').getHeight()
			setVSpace(['panelizer_messages', 'panelizer_messages_list'], dim1)
		} else if (ui.PanelizerMode() == 'reply' || ui.PanelizerMode() == 'replying') {
			vSpace = getVSpace('panelizer_messages_list')
			var msg = 'list_area_message_'+this.replyId
			var msgContentHeight = $(msg).down().getHeight()
			var headerHeight = $(msg).siblings()[0].getHeight()					// gets header height				
			var msgHeight = headerHeight + msgContentHeight
			
			setVSpace(['messagesList'], msgHeight)
			
			var lowerTgt
			var lowerHeight
			if (! ui.IsReplying()){
				var replyHeaderHeight = $('panelizer_reply_list_container').siblings()[0].getHeight()
				var scrollAllowance = vSpace - (msgHeight + replyHeaderHeight)
				var scrollHeight = $('panelizer_reply_list').getHeight()
				scrollHeight = Math.min(scrollHeight ,scrollAllowance - 15)
				setVSpace(['panelizer_reply_list_container'], scrollHeight)
				total = scrollHeight + replyHeaderHeight + msgHeight
				opts = {'panelizer_messages_list' : total + 20}
				setVSpace(['panelizer_messages_list','panelizer_messages'], total + 8, opts)	
			} else {
				lowerHeight = $('user_reply_form').getHeight()
				setVSpace(['panelizer_messages_list','panelizer_messages'], (lowerHeight + msgHeight) )
			}
			// setVSpace(['panelizer_messages_list'], (lower + msgHeight) )
			// window.status = "lower is " + lower
		} else if (ui.PanelizerMode() == 'tags') {
			vSpace = getVSpace('panelizer_search')
			var dim1 = $('panelizer_search').getHeight()			// get height of panelizer_search
			var maxH = vSpace / 2									// half this is maximum size for tags
			var tagHeight = maxH - dim1								// subtract the height of the search
			var dim2 = $('tagPanelContent').getHeight()				// get height of tagPanelContent
			var tagHeight = Math.min(tagHeight, dim2)
			var opts = {'panelizer_tags' : tagHeight}
			var tgt =  ($('listPanelContent').hasClassName('messages')) ? 'messagesList' :  'peopleList'
			var msgHeight = this.GetListingsHeight($(tgt))
			msgHeight = Math.min(msgHeight, vSpace - (tagHeight + 70))
			setVSpace(['panelizer_tags',tgt,'panelizer_messages', 'panelizer_messages_list'], msgHeight, opts)
			return
		} else if (ui.PanelizerMode(['lps'])) {
			vSpace = getVSpace('panelizer_user_objects')			
			
			var maxH = vSpace / 2							// half this is maximum size for user objects
			var lpsListingHeight = maxH - dim1				// subtract the height of the header : result is space for lps
			var LPsHeight
			if ($('panelizer_user_lps').hasClassName('no_lps')) {
				LPsHeight = $('panelizer_user_lps').getHeight()
			} else {
				var dim1 = $('panelizer_user_lps').down('div.header').getHeight()	// get height of header
				var firstLP = $$('#panelizer_user_lps_content .list_item').first()
				var lastLP = $$('#panelizer_user_lps_content .list_item').last()
				var lPBottom = lastLP.getHeight() + lastLP.cumulativeOffset()[1]
				var lPTop = firstLP.cumulativeOffset()[1]
				var lpListHeightMax = lPBottom - lPTop
				var listMax = (lastLP.getHeight() + lastLP.cumulativeOffset()[1]) - firstLP.cumulativeOffset()[1]
				var opts = {'panelizer_tags' : tagHeight}
				LPsListHeight = Math.min(lpListHeightMax,maxH)
				$('panelizer_user_lps_content').setStyle({height : (LPsListHeight)+"px"})
				LPsHeight = LPsListHeight + dim1				
			}
			$('panelizer_user_objects').setStyle({height : LPsHeight+"px"})
			
			var tgt =  ($('listPanelContent').hasClassName('messages')) ? $('messagesList') :  $('peopleList')
			var msgHeight = this.GetListingsHeight(tgt)
			var listHeight = Math.min((msgHeight), (vSpace - LPsHeight) - 38)
			var tgts = ['panelizer_messages','panelizer_messages_list']
			setVSpace(tgts, listHeight)
			return
		} else if (ui.PanelizerMode() == "register") {
			vSpace = $('panelizer_registration_form').getHeight()
			setVSpace(['panelizer_messages'], vSpace)
		} else {
			vSpace = getVSpace('panelizer_messages')
			try {
				if ($$('#messagesList .area').length > 0) {
					var tgt =  ($('listPanelContent').hasClassName('messages')) ? 'messagesList' :  'peopleList'
					var msgHeight = this.GetListingsHeight($(tgt))
					msgHeight = Math.min(msgHeight, vSpace - 38)
					setVSpace([tgt, 'panelizer_messages','panelizer_messages_list'], msgHeight)
				}
			} catch(err) { }
		}
	},
	
	UpdateClearTagsButtonDisplay : function() {
			if (msgs.activeTags.length > 0) { 
				$('listPanel').addClassName('tagsSelected') 
			} else {
				$('listPanel').removeClassName('tagsSelected')
			}
	},
	
	ValidAddress : function(txt) {
		txt = trimString(txt)
		if (txt == "") {
			alert("Enter an address: include at least the city, state or province and country. Street address is optional.")
		}
		return (txt != "")
	},
	
	SelectSetAddressWithClick : function() {
		this.HideScrim()
		new Ajax.Request("/interface?mode=setStartingPoint", {
				  method: 'get'})
	},
	
	ShowShapeAreaInstructions : function() {
		alert('disabled function')
	},
	
	ShowAddAddressArea : function() {
		$('userProvidedAddress').show()
	},
	
	HideReminder : function(mode) {

	},
	
	ShowUserAreas : function () {
		$('panelizer_right').removeClassName('compose')
		$('panelizer_right').removeClassName('user_lps')
		$('panelizer_right').addClassName('user_areas')
		ui.HidePanelizerPopdown()
		// alert("show areas")
	},
	
	ShowAddressLocationArea : function () {
		$('address_location_area').addClassName('active')
	},
	
	HideAddressLocationArea : function () {
		$('address_location_area').removeClassName('active')
	},
	
	InitializeDraggables : function () {
		new Draggable('LPDialog')  
		new Draggable('listeningPostPane')        
		new Draggable('optionsPane')
		new Draggable('address_export')
		new Draggable('orientationCrosshair', {onEnd : function(){map.CityMapClick()}})
		new Draggable('orientationRectangle', {onEnd : function(){map.DropCityMapRect()}})
		$('optionsPane').observe('mouseup', function() {map.lastClickWasPane = true })
	},
	
	InitializeBroadcastOptions : function() {
		$$('#map_container li').each (function(opt) {
			opt.observe('mouseover', function() {
				this.addClassName('hilite')
			})
			opt.observe('mouseout', function() {
				this.removeClassName('hilite')
			})
		})
		try {
			$('map_container').observe('click', function(event) {
				if($('map_container').hasClassName('showOptions') && map.lastClickInCurrentPoly) {
					if (ui.broadcastOptionsSet == false) {
						$('optionsPane').setStyle({'left' : event.pointerX() - 30 + "px", 'top' : event.pointerY() + 10 + "px"})
					} else {
						var loc = new GPoint(event.pointerY(), event.pointerX())
						var pt = map.map.fromContainerPixelToLatLng(new GPoint(event.pointerX(),event.pointerY())) 	
						map.MapClick(null,pt)
					}
					ui.broadcastOptionsSet = true;
				}
			})
		} catch (err) {
			
		}
	},
	
	HideBroadcastOptions : function() {
		$('map_container').removeClassName('showOptions')
		this.broadcastOptionsSet = false
	},
	
	UpdateSelectUserArea : function(el) {
		
	},
	
	ClearCurrentAreaOption : function (el) {
		if (map.currentPoly == null || map.currentPoly.area_id == null) {
			el.options[0] = null
		}
	},
	
	AddSharedAreaOption : function () {
		var el = $('newMessage_area_id')
		try {
			while ($('newMessage_area_id').options[0].hasClassName('status_option')) {
				$('newMessage_area_id').options[0] = null
			}
		} catch(err) {}
		try {
			var opt = new Element('option', {value : 'shared', id : 'shared_area_option', 'class' : 'status_option'}).update("Shared Area")
			$('newMessage_area_id').insert({top:opt})
			$('newMessage_area_id').selectedIndex = 0
		} catch(err) {}
	},
	
	AddCurrentAreaOption : function () {
		el = $('newMessage_area_id')
		try {
			while ($('newMessage_area_id').options[0].hasClassName('status_option')) {
				$('newMessage_area_id').options[0] = null
			}
		} catch(err) {}
		try {
			if ($('current_area_option') != null) return
			var opt = new Element('option', {value : 0, id : 'current_area_option', 'class' : 'status_option'}).update("Current Area");
			$('newMessage_area_id').insert({top:opt})
			$('newMessage_area_id').selectedIndex = 0
		} catch(err) {}
	},
	
	InitializeRibbonPopups : function () {
		
		if (! $('newMessage_area_id').isObserved) {
			$('newMessage_area_id').observe('mouseup', function(event) {
				if (parseInt(event.element().value) > 0) {
					ui.UpdateCurrentAreaWithID(event.element())
					ui.ClearCurrentAreaOption($('newMessage_area_id'))					
				}
			})
			var hasSelectArea
			$A($('newMessage_area_id').options).each(function(opt) {
				if (opt.value == "-1") {
					hasSelectArea = true
				}
			})
			if (! hasSelectArea) {
				var opt = new Element('option', {id : 'select_area_option', 'class' : 'status_option'}).update("Choose Area");
				opt.value = "-1"
				$('newMessage_area_id').insert({top:opt})
				$('newMessage_area_id').selectedIndex = 0
			}
			$('newMessage_area_id').isObserved = true
		}
		return
	},
	
	InitializeRibbon : function(mode) {
		try {
			$('panelizer_popdown').observe('mouseover', function(){ui.ShowRibbonMenu()})
			$('panelizer_popdown').observe('mouseout', function(){ui.HideRibbonMenu()})
			$('panelizer_popdown_pane').observe('mouseover', function(){ui.ShowRibbonMenu()})
			$('panelizer_popdown_pane').observe('mouseout', function(){ui.HideRibbonMenu()})

			$$('#panelizer_popdown li').each(function(el) {
				el.observe('mouseover', function(){ui.ShowRibbonMenu(this)})
			})
			$$('#panelizer_popdown a').each(function(el) {
				el.observe('mouseover', function(){ui.ShowRibbonMenu()})
			})
			this.InitializeUserLocationPane($('cities_id'), 
					$('userProvidedAddress'), 
					$('userProvidedAddressField'), 
					$('userProvidedAddressPre'))	
		} catch (err) {
			
		}	
	},
	
	HideRibbonMenu : function() {
		// $('ribbonTab').removeClassName('extended')
		this.HidePanelizerPopdown()
	},
	
	RemoveRibbonMenuHilite : function() {
		$$('#ribbonTab li').each(function(el) {
			el.removeClassName('hilited')
		})
	},
	
	HiliteRibbonMenu : function(tgt) {
		ui.RemoveRibbonMenuHilite()
		tgt.addClassName('hilited')
	},
	
	ShowRibbonMenu : function() {
		this.ShowPanelizerPopdown()
	},
	
	AreaStatusChanged : function(flag) {
		$('main').addClassName('hasArea')
	},
	
	RemoveSelecting : function() {
		$('locationTab').removeClassName('selecting')
	},
	
	InitializeUserLocationPane : function(elSelect, elSpan , elField, elPre) {
		ui.addrFieldChanged = false 
		ui.addrFieldIsRequired = true
		// $('userProvidedAddressButton').disabled = 'disabled';
		$('userProvidedAddressButton').disable();
		elSelect.options[0].value = "-1"
		elSelect.options[1].value = "0"
		elSelect.observe('change', function(event){
		  ui.CitySelectorUpdated(elSelect, elSpan, elField, elPre);
		 });
		
		$('cities_id').observe('change', function(event){
		  ui.CitySelectorUpdated(this, $('userProvidedAddress'), $('userProvidedAddressField'), $('userProvidedAddressPre'));
		});
		try{
			$('cities_id').observe('mouseover', function(event){
				try {
			  		$('locationTab').addClassName('selecting');
					if (this.endSelectingTimer != null) {
						clearTimeout(this.endSelectingTimer)
					}
					this.endSelectingTimer = setTimeout ( "ui.RemoveSelecting()", 3000 );
				} catch(err) {
					
				}
			});
		} catch(err) {
			
		}
		$('userProvidedAddressField').observe('blur', function(event) {
			ui.CitySelectorFieldFinishedEditing($('userProvidedAddressField'))
		})

		$('userProvidedAddressField').observe('keyup', function(event) {
			ui.CitySelectorFieldChanged(this)
		})

		$('userProvidedAddressField').observe('focus', function(event) {
			ui.CitySelectorFieldClicked(this)
		})
	},

	CitySelectorUpdated : function(el, elSpan, elField, elPre) {
		if (el.options[0].value == -1){
			el.options[0] = null;
		}
		ui.addrFieldIsRequired = el.value == 0

		var city_id = el.value.split("_")[0]
		if (city_id > 0) {
			try {
				$('locationTabExtended').addClassName('standardCity')
				$('userProvidedAddressButton').enable()
			} catch(err) {
				
			}
		} else {
			try {
				$('locationTabExtended').removeClassName('standardCity')
			} catch(err) {
				
			}
			if (ui.addrFieldChanged) {
				$('userProvidedAddressButton').enable()
			} else {
				$('userProvidedAddressButton').disable()
			}
			// $('userProvidedAddressButton').disabled = (el.Field) ? "" : "disabled"
		}
		if (el.value == 0) {
				ui.ShowAddAddressArea()
		}
		var city = parseInt(el.value.split("_")[0])
		elField.value = ""
		if (parseInt(el.value.split("_")[0]) > 0) {
			try {
			$('mainColumn').addClassName('started')
			} catch(err) {
				
			}
			new Ajax.Request("/area?address=&city="+city, {
			  method: 'get'})				
		}
		if (environment == 'home') {
			return
		}	
		elSpan.show()
		if (! ui.addrFieldChanged){
			elField.value = (city_id == 0) ? "City, State with optional street address" : "Street Address"
		}
		elPre.update((city_id == 0) ? "" : "")
		
	},
	
	CitySelectorFieldChanged : function(el) {	
		ui.addrFieldChanged = (el.value != "")
		if(ui.addrFieldIsRequired == false || ui.addrFieldChanged) {
			$('userProvidedAddressButton').enable()
		} else {
			$('userProvidedAddressButton').disable()
		}	
	},
	
	CitySelectorFieldClicked : function(el) {
		if (! ui.addrFieldChanged) {
			el.value = ""
		}
	},
	
	CitySelectorFieldFinishedEditing : function(el) {
		ui.addrFieldChanged = (el.value.trim() != "")
		if (ui.addrFieldIsRequired) {
			if (! ui.addrFieldChanged) {
				el.value = "City, State with optional street address"
				$('userProvidedAddressButton').disable()
			} else {
				$('userProvidedAddressButton').enable()
			}
			// $('userProvidedAddressButton').disabled = (ui.addrFieldChanged) ? "" : "disabled"
		} else {
			if (! ui.addrFieldChanged) {
				el.value = "Street Address"
			}
		}
	},
	
	InitializeNewReply : function () {
		$('new_reply_text').observe("keyup", function (event) {ui.UpdateNewMessageReplyInfo(event)})
		$('new_reply_text').observe("focus", function (event) {ui.UpdateNewMessageReplyInfo(event)})
		$('new_reply_text').observe("blur", function (event) {ui.UpdateNewMessageReplyInfo(event)})
	},

	UpdateNewMessageReplyInfo : function (event) {
		var len = 140 - event.element().value.length
		var tmp = (len < 0) ? 	$('new_reply_info').setStyle({color : 'red'}) : $('new_reply_info').setStyle({color : ''})
		$('new_reply_info').update(len + " Chars")
	},
	
	InitializeNewMessage : function () {
		$('new_message_select').observe ("mouseup", function (event) {
			ui.SetNewMessageInfo()
		})
		$('newMessageText').observe("keyup", function (event) {ui.UpdateNewMessageTextInfo(event)})
		$('newMessageText').observe("focus", function (event) {ui.UpdateNewMessageTextInfo(event)})
		$('newMessageText').observe("blur", function (event) {ui.UpdateNewMessageTextInfo(event)})
		$('channel_id').observe('change', function() {ui.CheckChannelAddons()})
	},
	
	CheckChannelAddons : function(refreshed) {
		el = $('channel_id')

		try {
			$('addonAreasSelect').value = map.lastAddonArea			
		} catch(err) {}
		var selected = el.value
		if (! refreshed && map.displayedAreaID != 0 && map.lastAddonArea != 0) {
			map.DrawInitialPoly()	
		}
		try {
			Element.remove($('addonAreasSelect'))

		} catch(err) {}
		if (map.channelAreas[selected] == null) {
			return
		}
		var sel = new Element('select', {'id' : 'addonAreasSelect', 'onchange' : "ui.ShowAddonArea(this)"})
		var opt
		sel.update(new Element('option', {value : 0}).update("shared areas"))
		$H(map.channelAreas[selected]).each(function(area) {
			opt = new Element('option', {value : area.key}).update(area.value['name'])
			sel.insert(opt)
		})
		$('channel_id').up().insert(sel, {position: 'bottom'})
		$('addonAreasSelect').value = map.lastAddonArea	
	},
	
	StopSharingArea : function() {
		$('newMessageDetailBlocks').removeClassName('sharing')
		if ($('addonAreasSelect') != null) {
			$('addonAreasSelect').selectedIndex = 0
		}
		map.lastAddonArea = 0
		map.DrawInitialPoly()
		ui.UpdatePanelizerMessages()
	},
	
	ShowAddonArea : function(el) {
		// ui.UpdateLocationId()
		if (el.selectedIndex > 0) {
			msg = "This will replace your current broadcast area with a shared area."
			msg += "Shared areas can be used by more than one person. Continue?"
			if (! confirm(msg)) return
			map.lastAddonArea = ($('addonAreasSelect') != null) ? $('addonAreasSelect').value : 0
			$('newMessageDetailBlocks').addClassName('sharing')
			ui.UpdateCurrentAreaWithID(el)
			ui.AddSharedAreaOption(true)
		} else {
			$('newMessageDetailBlocks').removeClassName('sharing')
			map.DrawInitialPoly()
		}
		ui.UpdatePanelizerMessages()
	},
	
	UpdateNewMessageTextInfo : function (event) {
		var len = 140 - event.element().value.length
		var tmp = (len < 0) ? 	$('message_char_count').setStyle({color : 'yellow'}) : $('message_char_count').setStyle({color : ''})
		$('message_char_count').update(len + " Chars")
	},
	
	SetNewMessageInfo : function () {
		$('message_type_info').update(($('new_message_select').selectedIndex == 0) ? " others can respond to questions" : "no length limit, no reponses allowed.")
		var tmp = ($('new_message_select').selectedIndex == 0) ? $('message_char_count').show() : $('message_char_count').hide()
	},
	
	NewMessage : function(menuclick) {
		ui.HidePanelizerPopdown()
		// ui.ShowPanelizerTags(false)
		if (map.crosshair == null) {
			alert("Click on the map to set a place to add a broadcast area. Or, use the menu to set an address.")
			return
		}
		$('new_message_select').selectedIndex = 0
		this.SetNewMessageInfo()
		ui.ShowNewMessage()
		$('LPDialog').hide()
		var pt = map.crosshair.getLatLng();
		$('map_container').removeClassName('showListeningPostOptions')
		if (menuclick) {
			map.map.panTo(pt)
		}
		ui.SetPanelizerMode('compose')
		ui.UpdatePanelizerMessages()
		if (map.currentPoly == null) {
			map.DrawInitialPoly()
			return
		} else {
			if (menuclick) {
				var bounds = map.currentPoly.getBounds()
				var ne = bounds.getNorthEast()
				var sw = bounds.getSouthWest()
				pt = new GLatLng((ne['y'] + sw['y']) / 2, (ne['x'] + sw['x']) / 2)
			}
			map.currentPoly.show()
			$('listeningPostOptions').removeClassName('areaHidden')
		}
		// $('interfaceActivity').update("Broadcast a Message")
		this.ClearRibbonContent()
		// $('ribbonContent').addClassName('addBroadcast')
		// 		$('ribbon').addClassName('noSearch')
		// $('ribbonTab').addClassName('active')
		if (map.currentPoly == null) {
			map.DrawInitialPoly()
			$('enterBroadcastDetailsBtn').disabled = true;
			return
		}
		// this.ShowScrim('newMessage')
	},
	
	TestURL : function (src) {
		var url  = $(src).value
		var urlRslt = msgs.ValidateURL(url)
		if (urlRslt == null && ! confirm("The url \"" + url + "\" appears to be invalid. Open anyway?")) {
			return
		}
		msgs.ShowMessageLink(url, false)
	},
	
	ClearRibbonContent : function() {
		$('ribbonContent').classNames().each(function(cname) {
			$('ribbonContent').removeClassName(cname)
		});
		this.WindowResized()
	},
	
	CloseInterfaceActivity :function (src) {
		src = (src == null) ? false : src
		this.HideBroadcastOptions()
		if ($('ribbonContent').hasClassName('addBroadcast') || map.currentPoly != null) {
			try {
				if (map.currentPoly && map.currentPoly.isEditing) {
					map.FreezeArea(false)
				}
			} catch(err) {
				
			}
			try {
				if (! $('addBroadcastPane').visible()){
					$('listeningPostOptions').addClassName('areaHidden')
					map.currentPoly.hide()
				}
				
			} catch(err) {
			}
		}
		// $('ribbonTab').removeClassName('active')
		this.ClearRibbonContent()
	},
	
	ShowSetLocation : function() {
		ui.HidePanelizerPopdown()
		this.ClearRibbonContent()
		$('interfaceActivity').update("Set a Location")
		$('ribbonContent').addClassName('addLocation')
		$('ribbon').addClassName('noSearch')
		$('ribbonTab').addClassName('active')
	}
	
};}
