var twitterMaps = function(){
	var	defLat = 35.681382,
		deflng = 139.766084,
		defZoom = 10,
		map =undefined,
	getTweet = function(){
		var center = map.getCenter();
		var bounds = map.getBounds();
		var sw = bounds.getSouthWest();
		var ne = bounds.getNorthEast();
		var from = new google.maps.LatLng((sw.lat()+ne.lat())/2, sw.lng(), false);
		var dist = getDist(from, center);
		if (dist<1) dist=1;
		var datas = {
			geocode: center.lat()+','+center.lng()+','+dist+'km'
		}
		if ($("#q").val() != ''){
			datas.q = $("#q").val();
		}
		$.ajax({
			type: "GET",
			url: 'http://search.twitter.com/search.json',
			data: datas,
			dataType: 'jsonp',
			success: function(json){
				if (json.error) return false;
				var str = '';
				var dp = 0;
				for(i=0;i<json.results.length;i++){
					dp = Date(json.results[i].created_at);
					str += '<tr>';
					str += '<td class="status">';
					str += '<a href="http://twitter.com/'+json.results[i].from_user+'"><img src="'+json.results[i].profile_image_url+'" width="48" height="48"></a>';
					str += '</td>';
					str += '<td>';
					str += '<a href="http://twitter.com/'+json.results[i].from_user+'"><strong>'+json.results[i].from_user+'</strong></a><br>';
					str += ''+json.results[i].text+'<br>';
					str += '<a href="http://twitter.com/'+json.results[i].from_user+'/statuses/'+json.results[i].id+'" class="created_at">created_at: '+dp.toLocaleUpperCase()+'</span></a><br>';
					str += '</td>';
					str += '</tr>';
				}
				$('#result_table').html(str);

			}
		});
	},
	getDist = function(from , to) {
		var from_x = from.lat() * Math.PI / 180;
		var from_y = from.lng() * Math.PI / 180;
		var to_x = to.lat() * Math.PI / 180;
		var to_y = to.lng() * Math.PI / 180;
		var deg = Math.sin(from_y) * Math.sin(to_y) + Math.cos(from_y) * Math.cos(to_y) * Math.cos(to_x-from_x);
		var dist = 6378140 * (Math.atan( -deg / Math.sqrt(-deg * deg + 1)) + Math.PI / 2);
		return Math.round(dist/1000);
	},
	move = function(){
		var address = $("#address").val();
		if (!address) return false;
		var request = {
			address: address
		}
		var geocoder = new google.maps.Geocoder();
		geocoder.geocode({'address': address}, function(result, status) {
			setCenter(result[0].geometry.location);
		});
	},
	setCenter = function(LatLng){
		map.setCenter(LatLng);
		var initial = google.maps.event.addListener(map, 'tilesloaded', function() {
			google.maps.event.removeListener(initial);
			setTimeout(getTweet, 100);
		});
	}
	return {
		init: function(container, lat, lng, zoom){
			if (lat == undefined) lat = defLat;
			if (lng == undefined) lng = deflng;
			if (zoom == undefined) zoom = defZoom;
			var centerPos = new google.maps.LatLng(lat, lng);
			var mapOptions = {
				zoom : zoom,
				center : centerPos,
				mapTypeId: google.maps.MapTypeId.ROADMAP
			};
			map = new google.maps.Map(document.getElementById(container), mapOptions);
			var initial = google.maps.event.addListener(map, 'tilesloaded', function() {
				google.maps.event.removeListener(initial);
				setTimeout(getTweet, 100);
			});
			google.maps.event.addListener(map, 'dragend', function() {
				setTimeout(getTweet, 100);
			});
			$("#queryForm").submit(function(){
				getTweet();
				return false;
			});
			$("#setQ").click(getTweet);
			$("#getGeoForm").submit(function(){
				move();
				return false;
			});
			$("#getGeo").click(move);
		},
		move: move
	}
}();