// where to post login
var POST = "https://carpool.musc.edu/index.php";
var MAP = null;
window.onresize=function() {sizeMapElement(getElement("map"),350,250);};
FONT = createDOMFunc("font",{size: "-2"});
U = createDOMFunc("u",{});
B = createDOMFunc("b",{});
CENTER = createDOMFunc("center",{});
MYPOINT = null;
OLDRING = null;

GMarker.prototype.mna = null;
String.prototype.wrap = function(numChars, wrapper) {
  var words = this.split(" ");
  var nstring = "";
  var line = 0;
  for(var i=0; i<words.length; i++) {
    if (words[i].length > numChars) {
      nstring+=wrapper+words[i].substring(0,numChars)+wrapper+words[i].substring(numChars);
      line = words[i].length - numChars;
    } else {
      if(line+words[i].length > numChars) { nstring+=wrapper; line=0; }
      nstring+=" "+words[i];
      line+=words[i].length+1;
    }
  }
  return nstring;
}

function showMap() {
  // determine if this is the first load
  var isFirstLoad = (MAP==null);

  // resize map div
  sizeMapElement(getElement('map'),350,250);

  if(isFirstLoad) {
    var map = new GMap2(document.getElementById("map"));
    MAP = map;
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.setCenter(new GLatLng(32.785082739122274,-79.94760632514954), 12);

    var request = doSimpleXMLHttpRequest("getAddressess.php");
    request.addCallback(handleUserList);
  }
}

function handleUserSchedule(lat, lon, request) {
    var xmlDoc = request.responseXML; 
    var user = xmlDoc.documentElement;
    var comments = user.getAttribute("comments");   
    var email = user.getAttribute("email");
    var tList = user.getElementsByTagName("time");
    var times = new Array();
    for(var c=0; c<tList.length; c++) {
      times[c] = [tList[c].getAttribute("day"),tList[c].getAttribute("leave"),tList[c].getAttribute("return")];
    }        
    var text = makeMarkerText(email,times,comments);
    var tabText = new Array(
      new GInfoWindowTab("Details", text[0]),
      new GInfoWindowTab("Comments", text[1])
    );
    MAP.openInfoWindowTabsHtml(new GLatLng(lat,lon),tabText);
}

function handleUserList(request) {
    var xmlDoc = request.responseXML; 
    var users = xmlDoc.documentElement.getElementsByTagName("user");
    var isLoggedOn = (xmlDoc.documentElement.getAttribute("loggedon")=="1");
    var map = MAP;
    var marker;
    var me=0;

    for(var i=0; i<users.length; i++) {
      var point = new GLatLng(parseFloat(users[i].getAttribute("latitude")),
                              parseFloat(users[i].getAttribute("longitude")));
      if(isLoggedOn) {
        if (users[i].getAttribute("isme")=="1") {
          MYPOINT=point;
          MAP.panTo(point);
          marker = makeMarker(point,'red');
        } else {
          if(users[i].getAttribute("affiliation")=='student') {
            marker = makeMarker(point,'yellow_student');
          } else {
            marker = makeMarker(point,'yellow');
          }
        }
        marker.mna = users[i].getAttribute("email");
      } else {
        marker = makeEmptyMarker(point);
      }
      map.addOverlay(marker);
    }
}

function makeEmptyMarker(point) {
  var marker = new GMarker(point,makeIcon('yellow'));
  GEvent.addListener(marker, 'click', function() {  
    var html="<table width=\"200\"><tr><td><b>You must log in to see user information.</b><br /><form action=\""+POST+"\" method=\"post\"><font size=\"-2\">MNA:<br /><input type=\"text\" name=\"username\" /><br />Password:<br /><input type=\"password\" name=\"password\" /><br /><br /><input type=\"submit\" value=\"Log In\" /><input type=\"hidden\" name=\"check\" value=\"1\"/></font></form></td></tr></table>";
    html = "<b>You must log in (on the left) to see user information.</b>";
    marker.openInfoWindowHtml(html);
  });
  return marker;
}

function makeMarker(point,color) {
  var marker = new GMarker(point,makeIcon(color));
  GEvent.addListener(marker, "click", function() {
    var request = doSimpleXMLHttpRequest("getUserSchedule.php",{mna: marker.mna});
    request.addCallback(handleUserSchedule, point.lat(), point.lng());
  }); 
  return marker;
}

function makeIcon(color) {
  var icon = new GIcon();
  icon.image="images/mm_20_"+color+".png";
  icon.shadow="images/mm_20_shadow.png";
  icon.iconSize = new GSize(12, 20);
  icon.shadowSize = new GSize(22, 20);
  icon.iconAnchor = new GPoint(6, 20);
  icon.infoWindowAnchor = new GPoint(5, 1);
  return icon;
}

function makeMarkerText(email,timesArray,comments) {
  //comments = comments.wrap(37);
  row_display = function (row) { return TR({}, map(partial(TD, null), map(FONT,row))); }
  var head = THEAD({align: "center"},row_display(map(U,["Day","Leave Home","Leave Work"])));
  var email_parts = email.split('@');
  var info_link = "/getUserInfo.php?mna="+email_parts[0];
  var times;
  if(timesArray.length>0) times = TABLE({width: "250"},head,TBODY({},map(row_display,timesArray)));
  else times = TABLE({width: "250"},TR({},TD({},FONT(B("No times specified.")))));
  var details = DIV({},FONT(CENTER(B("User: "),email+" ",A({href: info_link, target: "BLANK"},"(info)")), times));
  var commentsElement = DIV({},FONT(B(email_parts[0]+"'s comments:")),BR(),TABLE({width: "250"},row_display([comments])));
  return [toHTML(details),toHTML(commentsElement)];
}

function showRings() {
  var miles = getElement('ring').value;
  if(miles=="0") return;
  if(MYPOINT!=null) { 
    if(OLDRING!=null) MAP.removeOverlay(OLDRING);
    var meters = 1609.344 * miles; 
    var c = new GCircle(MYPOINT,meters);
    OLDRING = new GPolyline(c.points,"#FF0000",2); 
    MAP.addOverlay(OLDRING);
  }
}

