var map;
window.onload = function(){
    setMapDivLayout();
    loadMap();
    loadMarkers();  //see userMap.jsp
    loadShowRangeHandlers();
}
//window.onresize = function(){
//    setMapDivLayout();
//}
onresizeEvents[onresizeEventsCnt++] = "setMapDivLayout()";
function inFullSizeMode(){
    return SCREEN_SIZE_MODE == "full";
}
function setMapDivLayout(){
    obj = MM_findObj("map");
    if (inFullSizeMode()){
        obj.style.width = "95%";
        obj.style.height = (document.documentElement.clientHeight - 70) + "px";
    } else {
        obj.style.width = "95%";
        obj.style.height = "520px";
    }
}
function loadMap() {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        map.setCenter(new GLatLng(34, -112), 6);
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.enableScrollWheelZoom();
        
        GEvent.addListener(map, "click", function(overlay, point) {
          if (overlay) {
              //var tabs = new Array();
              //tabs[0] = new GInfoWindowTab(1, "<strong>hi there</strong>");
              //tabs[1] = new GInfoWindowTab(2, "<em>hi there</em>");
              //overlay.openInfoWindowTabsHtml(tabs);
          } else if (point) {
                map.panTo(point);
          }
        });      
      }
}
var R_BASE_ICON;
function loadBaseIcon(){
    R_BASE_ICON = new GIcon();
    R_BASE_ICON.shadow = "http://cierzo.sahra.arizona.edu/usprn/usermapimages/mm_20_shadow.png";
    R_BASE_ICON.iconSize = new GSize(12, 20);
    R_BASE_ICON.shadowSize = new GSize(22, 20);
    R_BASE_ICON.iconAnchor = new GPoint(6, 20);
    R_BASE_ICON.infoWindowAnchor = new GPoint(5, 1);
}


function getIcon(img_name){
    var icon = new GIcon(R_BASE_ICON);
    icon.image = "http://cierzo.sahra.arizona.edu/usprn/usermapimages/" + img_name;
    return icon;
}

function createMarker(userObj, range){
    var point = new GLatLng(parseFloat(userObj.getAttribute("geo_lat")),
                            parseFloat(userObj.getAttribute("geo_long")));   
    var marker = new GMarker(point, getIcon(range.img_name));
    GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(displayInfoWindowHtml(userObj));
    });
    map.addOverlay(marker);
}
function loadMarkers(){
    loadBaseIcon();
    loadUsers();
}
/** Sample Xml
* <users date_format="">
*   <user person_name="Ramon Vazquez" geo_lat="" geo_long="" registration_date="" max_rain_amt="" network="" />
* </users>
*/
function loadUsers(){
    GDownloadUrl("/usprn/User4MapServlet", function(data) {
      var xml = GXml.parse(data);
      var markers = xml.documentElement.getElementsByTagName("user");
      setTotalMarkersDiv(markers.length)
      //for (var i = markers.length-1; i >= 0 && i > (markers.length-20); i--) {
      for (var i = markers.length-1; i >= 0; i--) {
        var range = findRange(markers[i].getAttribute("total_readings"));
        range.total++;
        createMarker(markers[i], range);
      }
      setRangeTotalsOnLegend();      
      hideLoadingDiv();
      markers = null;
      xml = null;
    });
}

function hideLoadingDiv(){
    MM_showHideLayers("loadingUserMapDiv", "", "hide");
}
function showProgressDiv(){
    MM_showHideLayers("progressDiv", "", "show");
}
function hideProgressDiv(){
    MM_showHideLayers("progressDiv", "", "hide");
}
function setTotalMarkersDiv(total){
    MM_setTextOfLayer("totalMarkersDiv", "", total);
}
function setSoFarMarkersDiv(sofar){
    MM_setTextOfLayer("sofarMarkersDiv", "", sofar);
}
function displayInfoWindowHtml(userObj){
    var today = new Date();
    
    return "<div style=\"text-align:left;\"><!--strong>Name:</strong> " + userObj.getAttribute("person_name") + "<br/-->"+
        "<strong>Total readings:</strong> " + userObj.getAttribute("total_readings") + "<br/>"+
        "<strong>Member since:</strong> " + userObj.getAttribute("registration_date") + "<br/>"+
        "<strong>Max rain amount:</strong> " + userObj.getAttribute("max_rain_amt") + "<br/>"+
        "<div style=\"width:280px;height:230px;\">" +
        "<a href=\"javascript:showGraph(" +  userObj.getAttribute("userid") + ");\" >" +
        "<img src=\"/usprn/UserRainChartServlet?year=" + (today.getFullYear() -1) + "&amp;userId=" +  
        userObj.getAttribute("userid") + "\" width=\"280\" height=\"230\" border=\"0\" alt=\"Loading chart...\" />"+
        "</a></div></div>";
            
}
/****** RANGES HANDLERS *****/
function RecordRange(min_value, max_value, img_name){
    this.min_value = min_value;
    this.max_value = max_value;
    this.img_name = img_name;
    this.total = 0;
}
function addOneToRange(user_value){
    var range = findRange(user_value);
    range.total++;
}
function findRange(user_value){
    for (var i=0; i < rangeArr.length; i++){
        if (user_value >= rangeArr[i].min_value
            && user_value <= rangeArr[i].max_value){
                return rangeArr[i];
        }
    }
    return null;
}
function calcIconImage(user_value){
    var range = findRange(user_value);
    return range.img_name;
}
var rangeArr = new Array();
var m = 0;
//rangeArr[m++] = new RecordRange(1, 30, "mm_20_white.png");
rangeArr[m++] = new RecordRange(1, 60, "mm_20_yellow.png");
rangeArr[m++] = new RecordRange(61, 100, "mm_20_blue.png");
rangeArr[m++] = new RecordRange(101, 500, "mm_20_green.png");
rangeArr[m++] = new RecordRange(51, 99999, "mm_20_red.png");

function setRangeTotalsOnLegend(){
    var baseDivName = "rangeTotal";
    for (var i=0; i < rangeArr.length; i++){
        MM_setTextOfLayer(baseDivName + i, "", rangeArr[i].total);
    }
}
/****** END RANGE HANDLERS *****/

/****** LEGEND CHECKBOXES HANDLERS *****/
function loadShowRangeHandlers(){
    return;
    for ( var i=0; i < theForm.showRange.length; i++){
        theForm.showRange[i].onclick = function(event){
            handleShowRangeClick(event);
        }
    }
}
function handleShowRangeClick(event){
    if (typeof event  == 'undefined') {
        obj = window.event.srcElement; //IE
    } else {
        obj = event.target; //Mozilla
    }
    showHideRangePoints(obj.checked, parseInt(obj.value));
}
function showHideRangePoints(show, rangeIdx){
    //alert("" + show + "-" + rangeIdx);
}
/****** END LEGEND CHECKBOXES HANDLERS *****/
