var map,point;
var user,pass;
var h,w;
window.onload = function() {
	h = document.viewport.getDimensions().height;
	w = document.viewport.getDimensions().width;

	// create, center, and add controls to the map
	map = new GMap2(document.getElementById('map'), {size:new GSize(w,h)});
	var lat=Math.round(Math.random()*8)-4; var lng=Math.round(Math.random()*360)-180;
	var zoom=Math.round(Math.random()*3)+2;
	map.setCenter(new GLatLng(lat,lng), zoom);
	map.setMapType(G_HYBRID_MAP);
	map.addControl(new GLargeMapControl(), new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(20,45)));
	map.addControl(new GMapTypeControl(), new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(20,20)));

	GEvent.addListener(map, "click", function(o,p) {
		if (p) {
			if ( !user || !pass ) ShowModal('login'); 
			if ( !user || !pass ) return;
			point = p;
			var u = 'http://maps.google.com/?ie=UTF8&ll=LATLNG&t=h&z=ZOOM';
			u = u.replace(/LATLNG/, p.toUrlValue());
			u = u.replace(/ZOOM/, map.getZoom());
	
			var form = '<form id="twavelform" onsubmit="return Twavel();" action="tweet.php">\n'
					+'<input type="hidden" name="map" value="'+u+'" />'
					+'<input type="hidden" name="user" value="'+user+'" />'
					+'<input type="hidden" name="password" value="'+pass+'" />'
					+'<p>What are you doing?</p>\n'
					+'<textarea name="tweet" rows="3" cols="36"></textarea><br />\n'
					+'<input type="submit" value="Twavel!" />\n'
					+'</form>';
			map.openInfoWindowHtml(p, form);
		}
	});

	// Set up the Modal Windows
    var ds = $$('div.modal');
    for (var i = 0; i < ds.length; i++ ) {
        if ( ds[i].getDimensions() ) {
            var lh = ds[i].getDimensions().height;
            ds[i].setStyle({top: '-'+(20+lh)+'px'});
        } else {
            ds[i].setStyle({top: '-'+(20+parseInt(ds[i].style.height))+'px'});
        }
    }

	Follow();
}

function Twavel()
{
	$('twavelform').request({
		method: 'post',
		parameters: $('twavelform').serialize(true),
		evalJSON: 'force',
		onSuccess: function(t,j){
			$('twavelform').reset();
			map.closeInfoWindow();
			map.openInfoWindow(point,j.status);
		},
		onFailure: function(t){
			$('error_msg').innerHTML = "<strong>Sorry!</strong><br />Some sort of error occurred. This is either my fault or Twitter's, not yours.";
			ShowModal('error');
		}
	});
	return false;
}

var Visible = [];

function HideModals() {
	var C = Visible;
	for(var i=0;i<C.length;i++) {
		new Effect.Move(Visible[i], {
			x: 0,
			y: -(Visible[i].getDimensions().height+40),
			duration: 1.0,
			mode: 'relative'
		});
	}
	Visible = [];
}

function ShowModal(id) {
	var obj = $(id);
	if ( Visible.indexOf(obj) >= 0 ) return false;
	HideModals();
	Visible[Visible.length] = obj;
	new Effect.Move(obj, {
		x: 0,
		y: (obj.getDimensions().height+40),
		duration: 1.0,
		mode: 'relative'
	});
}

function TwavelAbout() {
	HideModals();
	ShowModal('about');
}

function TwavelLoginForm() {
	ShowModal('login');
}

function TwavelLogin() {
	user = $F('tuser');
	pass = $F('tpass');
	new Ajax.Request('/login.php', {
		method: 'post',
		parameters: {username:user, password:pass},
		onSuccess: function (t,r) {
			if ( r.authorized ) {
				$('status').innerHTML = '<a href="javascript:;" onclick="TwavelLogout();">Log Out</a>';
				$('error_msg').innerHTML = '';
				HideModals();
			} else {
				$('error_msg').innerHTML = "<strong>Sorry!</strong><br />I couldn't log you into Twitter. You should <a href='javascript:;' onclick='ShowModal(\"login\")'>try again</a>.";
				ShowModal('error');
			}
		},
		onFailure: function () {
			$('error_msg').innerHTML = "<strong>Sorry!</strong><br />An error occurred. This is either my fault or Twitter's, not yours.";
			ShowModal('error');
		}
	});
}

function TwavelLogout() {
	user = '';
	pass = '';
	$('status').innerHTML = '<a href="javascript:;" onclick="ShowModal(\'login\');">Log In (Twitter)</a>';
}

window.onunload = GUnload;

