// $Id: remand-proxy.js 1318 2009-05-08 20:20:59Z neil $

function input_changed() {
	var hostname_el = document.getElementById("hostname");
	YAHOO.util.Cookie.set("hostname", hostname_el.value, { expires: new Date("January 12, 2025") }); 

	var username_el = document.getElementById("username");
	var password_el = document.getElementById("password");
	if (username_el.value && password_el.value) {
		var auth = Base64.encode(username_el.value + ':' + password_el.value)
		// alert('auth=' + auth);
		YAHOO.util.Cookie.set("auth", auth, { expires: new Date("January 12, 2025") });
	}
}

var init_callback =
{
  success: function(o) {

    try {
		var wait_label = document.getElementById("wait_label");
		wait_label.className = 'hidden_section green_border';
    } catch(e) {
    	alert('Error hiding wait label: ' + e);
    }

	var x = o.responseText;
    // alert('success:' + x);
    try {
    	var loc = json_parse(x);
    	// printProps(loc, 'loc');
    } catch(e) {
    	alert('Error parsing json: ' + e);
    	return;
    }

    try {
		var version_el = document.getElementById("remand_version_value");
		// alert('version_el.innerHTML=' + version_el.innerHTML);
		version_el.innerHTML = loc.version;
		// alert('version_el.innerHTML=' + version_el.innerHTML);
    } catch(e) {
    	alert('Error setting version: ' + e);
    }

    try {
		var id_el = document.getElementById("remand_id_value");
		// alert('id_el.innerHTML=' + id_el.innerHTML);
		id_el.innerHTML = loc.system.android_id;
		// alert('id_el.innerHTML=' + id_el.innerHTML);
    } catch(e) {
    	alert('Error setting android id: ' + e);
    }

    try {
		var id_el = document.getElementById("android_version_value");
		// alert('id_el.innerHTML=' + id_el.innerHTML);
		id_el.innerHTML = loc.system.release;
		// alert('id_el.innerHTML=' + id_el.innerHTML);
    } catch(e) {
    	alert('Error setting android version: ' + e);
    }

    try {
    	var gps_state_el = document.getElementById("gps_state");
    	for(var i=0; i<gps_state_el.length; i++) {
    	    // alert(gps_state_el.options[i].value + '==' + loc.gps.state);
    	    if (gps_state_el.options[i].value == loc.gps.state) {
    	        gps_state_el.selectedIndex = i;
    	    }
    	}
    } catch(e) {
    	alert('Error setting gps state: ' + e);
    }

    load(loc);

},
  failure: function(o) {
    var x = o.responseText;
    alert('failure:' + x);
  },
  argument: ['foo', 'bar']
}

// this is copied from
// http://l6n.org/android/remand-demo-gmap.htm
// except I added loc as a parameter
function load(loc) {
    if (!GBrowserIsCompatible()) {
        alert('Browser is not compatible with google maps');
    } else if (!loc || !loc.location) {
        // alert('No location from device');
    } else {
        var gmap = document.getElementById("gmap");

        // get points
        var name = [];
        var lat = [];
        var lon = [];
        var most_recent = 0;
        for(var i=0; i<loc.location.length; i++) {
        	if (loc.location[i].detail &&
        		loc.location[i].detail.time > most_recent) {
        		most_recent = loc.location[i].detail.time; 
        	}
            if (loc.location[i].detail &&
                loc.location[i].detail.latitude &&
                loc.location[i].detail.longitude)
            {
                // increase the size of the arrays
                lat[name.length] = parseFloat(loc.location[i].detail.latitude);
                lon[name.length] = parseFloat(loc.location[i].detail.longitude);
                name[name.length] = loc.location[i].name;
            }
        }

        if (name.length == 0) {
            alert("Device didn't return any locations");
            return;
        }

        // get average lat/lon
        var avg_lat = 0;
        var avg_lon = 0;
        for(var i=0; i<name.length; i++) {
            avg_lat += lat[i];
            avg_lon += lon[i];
        }
        avg_lat /= name.length;
        avg_lon /= name.length;

        var map = new GMap2(gmap);
        var center = new GLatLng(parseFloat(avg_lat), parseFloat(avg_lon));
        map.setCenter(center, 17);

        // put markers on the map
        for(var i=0; i<name.length; i++) {
            var point = new GLatLng(parseFloat(lat[i]), parseFloat(lon[i]));
            var marker = new GMarker(point, { title:name[i] });

            // add the marker
            map.addOverlay(marker);

            // add an info window
            var s = '<u>' + name[i] + '</u>' + '<br />' + loc.location[i].detail.time_s;
            if (loc.location[i].detail.geo && loc.location[i].detail.geo.address) {
                var addr = loc.location[i].detail.geo.address;
                for(var a=0; a<addr.length; a++) {
                    s += '<br />' + addr[a];
                }
            }
            marker.bindInfoWindowHtml(s);
        	if (loc.location[i].detail.time == most_recent) {
                marker.openInfoWindowHtml(s);
           	}

            // zoom out if necessary
            while (!map.getBounds().containsLatLng(point)) {
                // map.zoomOut();
                map.setZoom(map.getZoom() - 1);
            }
        }

        map.addControl(new GLargeMapControl());
        map.addControl(new GOverviewMapControl());
        map.addControl(new GScaleControl());
    }
}

function init() {

	// get the hostname
	var hostname = YAHOO.util.Cookie.get("hostname");
	if (!hostname) {
		return;
	}
	var hostname_el = document.getElementById("hostname");
	hostname_el.value = hostname;

	// get the auth
	var auth = YAHOO.util.Cookie.get("auth");

	// get the version and state of some things
	var sUrl = '/cgi-bin/remand-proxy.cgi?hostname=' + hostname + 
			   '&system=1&gps=&auth=' + auth;
    // alert('sUrl=' + sUrl);
	YAHOO.util.Connect.asyncRequest('GET', sUrl, init_callback, null);

    if (!GBrowserIsCompatible()) {
        alert('browser is not compatible with google maps');
    } else {
        var gmap = document.getElementById("gmap");
        var map = new GMap2(gmap);
        var center = new GLatLng(40, 65);
        map.setCenter(center, 2);

        map.addControl(new GLargeMapControl());
        map.addControl(new GOverviewMapControl());
        map.addControl(new GScaleControl());
    }
}

function get_location() {

	// get the hostname
	var hostname = YAHOO.util.Cookie.get("hostname");
	if (!hostname) {
		return;
	}

	// get the auth
	var auth = YAHOO.util.Cookie.get("auth");

	// get the gps state request
	var gps_state_el = document.getElementById("gps_state");
    var gps_state = gps_state_el.options[gps_state_el.selectedIndex].value;
    // alert('gps_state=' + gps_state);

	// get the version and state of some things
	var sUrl = '/cgi-bin/remand-proxy.cgi?hostname=' + hostname + 
			   '&system=1&location=1&geo=1&gps=' + gps_state +
			   '&auth=' + auth;
    // alert('sUrl=' + sUrl);
	YAHOO.util.Connect.asyncRequest('GET', sUrl, init_callback, null);

    try {
		var wait_label = document.getElementById("wait_label");
		wait_label.className = 'visible_section green_border';
    } catch(e) {
    	alert('Error showing wait label: ' + e);
    }
}

function confirm_airplane_mode() {
	var answer = confirm (
			"This will set your Android to airplane mode.\n" +
			"This means that you won't be able to communicate with it any more,\n" +
			"including not being able to use this page.\n\n" +
			"Are you sure you want to continue?\n");
	if (answer) {
		var hostname = YAHOO.util.Cookie.get("hostname");
		var auth = YAHOO.util.Cookie.get("auth");
		var sUrl = '/cgi-bin/remand-proxy.cgi?hostname=' + hostname + 
		   		   '&system=1&airplane=1&auth=' + auth;
		// alert('sUrl=' + sUrl);
		YAHOO.util.Connect.asyncRequest('GET', sUrl, init_callback, null);
		// of course I don't expect to get a response
	}
}


init();

