function smart_pop(data, array){
	var new_array = new Array()
	for(var i=0; i<array.length; i++){
		if( data != array[i] ) new_array.push(array[i])
	}
	return new_array
}

function alert_geocode_async(address){
	var geocoder=new GClientGeocoder();
	var geocode;
	var callback=function(address){
		return function(point) {
	      if (!point) {
	        geocode=address + " not found";
	      } else {
				geocode=point.toString();
	      }
			alert(geocode);
	    }
	};
	geocoder.getLatLng(address, callback(address));
}


function add_display_id_to_session(_id){
	var _request=new get_request_object();
	_request.open("get", "/locations/sessionManager?add_id="+_id, false)
	_request.send(null)
	return _request
}

function remove_display_id_from_session(_id){
	var _request=new get_request_object();
	_request.open("get", "/locations/sessionManager?remove_id="+_id, false)
	_request.send(null)
	return _request
}

function get_marker(point){
	return new GMarker(point);
}

function get_marker_by_id(_markers, _id){
	for (var i=0; i<_markers.length; i++){
		if(_markers[i].location.attributes.id == _id) return _markers[i]
	}
	return false
}

function get_markers(locations){
	var markers=new Array()
	for(var i=0; i<locations.length; i++){
		var point=new GLatLng(locations[i].attributes.latitude,locations[i].attributes.longitude)
		var marker=new GMarker(point)
		marker.location=locations[i]
		markers.push( marker )
	} 
	return markers
// features: null lati/long attribute handler; 
}

//map.getInfoWindow().maximize();
function attach_markers_click_gevent(markers,display_list){	
	for(var i=0; i<markers.length; i++){
		markers[i].id=i
		markers[i].display_list=display_list
		GEvent.addListener(markers[i], "click", function() {
			var html=generate_marker_html(this);
			this.openInfoWindowHtml(html /*, {maxUrl:"google/info"}*/);
		  })
	}
}

function generate_marker_html(marker){
	var containerDiv=document.createElement('div')
	var organizationDiv=document.createElement('div')
	var organizationTxt=document.createTextNode(marker.location.attributes.organization)
	var organizationStyleDiv=document.createElement('div')	
	var hr=document.createElement('hr')

	var addToListDiv=document.createElement('div')
	var addToListStyleDiv=document.createElement('div')

	containerDiv.className="bubble_container"
	organizationStyleDiv.className="organizationStyle"
	addToListStyleDiv.className="addToListStyle"
	
	
	var addressDiv=document.createElement('div')
	var addressTxt=document.createTextNode(marker.location.attributes.street_address)
	
	var cityDiv = new_div();
	var cityText = new_text(marker.location.attributes.city + ", " + marker.location.attributes.state + " " + marker.location.attributes.zip);
	var notesDiv = new_div();
	var notesText = new_text(marker.location.attributes.notes);	

	ac(cityDiv,cityText);
	ac(notesDiv,notesText);
	
	
	addressDiv.appendChild(addressTxt)
	
	addToListDiv.appendChild(addToListStyleDiv)
	addToListDiv.marker=marker

	organizationDiv.appendChild(organizationStyleDiv)
	organizationStyleDiv.appendChild(organizationTxt)
	
	containerDiv.appendChild(organizationDiv)
	containerDiv.appendChild(hr)
	containerDiv.appendChild(addressDiv)
	ac(containerDiv,cityDiv);
	ac(containerDiv,document.createElement('hr'));
	ac(containerDiv,notesDiv);
		
	containerDiv.appendChild(addToListDiv)
	
	
	return containerDiv
}


function create_display_list(_class, _element){
	var display_listDiv=document.createElement('div')

	var list_submit=document.createElement('div')
	var button_text = new_text("Proceed To Next Step");
	list_submit.list=display_listDiv
	list_submit.className="list_submit_button"
	list_submit.onclick=function(){ submit_displays(this.list) }
	display_listDiv.className=_class
	display_listDiv.markers=new Array()
	_element.appendChild(display_listDiv)
	return display_listDiv
}

function list_includes(display_list, marker){
	for (var i=0; i<display_list.markers.length; i++){
		if (marker == display_list.markers[i] ) return true
	}
	return false
}

function add_list_item(display_list, marker, i){
	var containerDiv  = new_div('containerDiv')
	var storeNameDiv  = new_div('storeNameDiv')
	var addressDiv    = new_div('addressDiv')
	var cityDiv       = new_div('cityDiv')
	var removeDiv     = new_div('removeDiv')
	var storeNameText = new_text( (i+1) + ". " + marker.location.attributes.organization)
	var addressText   = new_text(marker.location.attributes.street_address)
	var cityText      = new_text(marker.location.attributes.city + ", " + marker.location.attributes.state +" " + marker.location.attributes.zip)

	var removeSpan=new_div('removeButton')
	var removeText=new_text('Info')
	display_list.markers.push(marker)
	
	var ul = document.createElement('ul')
	var li = document.createElement('li')

	ac(cityDiv,cityText);
	ac(storeNameDiv,storeNameText);
	addressDiv.appendChild( addressText )


	removeSpan.appendChild( removeText )
	
	ac(ul,li);
	ac(li,storeNameDiv);
	ac(li,addressDiv);
	ac(li,cityDiv);

	ac(containerDiv,ul);
	
	removeDiv.appendChild( removeSpan )
	containerDiv.appendChild( removeDiv )

	
	removeSpan.marker=marker
	removeSpan.display_list=display_list
	removeSpan.containerDiv=containerDiv

	removeSpan.onclick=function(){
		var html=generate_marker_html(marker);
		marker.openInfoWindowHtml(html /*, {maxUrl:"google/info"}*/);
	}
	display_list.appendChild(containerDiv)
}


function get_point(latitude,longitude){
	return new GLatLng(latitude, longitude)
}

function get_points(locations){
	var points=new Array();
	for(var i=0; i<locations.length; i++){
		points.push( new GLatLng(locations[i].attributes.latitude,locations[i].attributes.longitude) )
	} 
	return points
}

function submit_displays(display_list){
	for (var i=0; i<display_list.markers.length; i++){
		var display=document.createElement('input')
		display.type="hidden"
		display.name="displays[]"
		display.value=display_list.markers[i].location.attributes.id
		document.getElementById('displays').appendChild(display)
	}
	document.getElementById('displays').submit()
}

function set_map_zoom( map, points ) {
	var bounds = new GLatLngBounds();
	for (var r=0; r < points.length; r++) {
		bounds.extend(points[r]);
	}
	map.setZoom(map.getBoundsZoomLevel(bounds))
	return true;
}

function set_map_center( map, points ){
	var gbounds = new GLatLngBounds()
	for (var i=0; i < points.length; i++) {
		gbounds.extend(points[i])
	}
	var latitude = (gbounds.getNorthEast().lat() + gbounds.getSouthWest().lat()) /2
	var longitude = (gbounds.getNorthEast().lng() + gbounds.getSouthWest().lng()) /2
	map.setCenter(new GLatLng(latitude,longitude))
	return true
}

function plot_markers( map, markers ){
	for(var i=0; i<markers.length; i++){
		markers[i].map=map
		map.addOverlay(markers[i])
	}
	return true
}
