// projects.js
//
// Query project data and update view
//


var projectStore;
var projectMap;



function getProjects(formObj, location)
{
   var vars = new Object();
   vars['m'] = "get_projects";
   vars['location'] = location;

   /* COMPLETED, INPROGESS, etc... */
   vars['status'] = formObj.options[formObj.selectedIndex].value;

   var request = new Ajax.Request("projects.php",
   {
      method: "POST",
      parameters: vars,

      onCreate: function()
      {
         $("curStatus").innerHTML = "Loading projects...";
      },

      onWarbSuccess: function(transport, json)
      {
         projectStore.loadData(json.projects);
         projectMap.clearOverlays();
         $("curStatus").innerHTML = "Displaying " + json.projects.toArray().length  + " projects.";

         // Random locations for now
         var bounds = projectMap.getBounds();
         var southWest = bounds.getSouthWest();
         var northEast = bounds.getNorthEast();
         var lngSpan = northEast.lng() - southWest.lng();
         var latSpan = northEast.lat() - southWest.lat();

         json.projects.each(function(s, index)
         {
            //var point = new GLatLng(southWest.lat() + latSpan * Math.random(), southWest.lng() + lngSpan * Math.random());
            var point = new GLatLng(s.lat, s.lng, true);
            var marker = new GMarker(point);
            var html = createInfoWindowContent(s);

            GEvent.addListener(marker, "click", function()
            {
               marker.openInfoWindowHtml(html);
            });

            projectMap.addOverlay(marker);
         });
      },

      onWarbValidateError: function(transport, json)
      {
         WarbUtil.alertValidationErrors(json.validateErrors);
      }
   });
}


function createInfoWindowContent(s)
{
   var html = "";
   html += '<div style="width: 250px; font-family: Verdana, Helvetica; font-size: 12px; color: #000000; text-align: left;">';
   html += '<div style="font-weight: bold;">Project Name:</div>';
   html += '<div style="font-weight: normal; margin-bottom: 5px;">' + s.name + '</div>';
   html += '<div style="font-weight: bold;">Status</div>';
   html += '<div style="font-weight: normal; margin-bottom: 5px;">' + s.statusDetail + '</div>';
   html += '<div style="font-weight: bold;">Start Date</div>';
   html += '<div style="font-weight: normal; margin-bottom: 5px;">' + s.startDate + '</div>';
   html += '<div style="font-weight: bold;">End Date</div>';
   html += '<div>' + s.endDate + '</div>';
   html += '</div>';

   return html;
}


function projectsInit(latN, longN, location)
{

   // basic tabs 1, built from existing content
   var tabs = new Ext.TabPanel({
     renderTo: 'tabPanel',
     activeTab: 1,
     width: 800,
     border: false,
     plain: true,
     style: {margin: '0px'},
     defaults: {autoHeight: true},
     items: [ {contentEl:'projectGridContainer', title: 'Projects Listing'},
              {contentEl:'mapContainer', title: 'Projects Map'}
            ]
   });

   projectStore = new Ext.data.JsonStore({
      fields: [ {name: 'name'}, {name: 'statusDetail'}, {name: 'startDate'}, {name: 'endDate'} ]
    });



   // create the Grid
   var grid = new Ext.grid.GridPanel({
       store: projectStore,
       columns: [
           {header: "Project Name", width: 417, align: 'left',  dataIndex: 'name'},
           {header: "Status",       width: 179, align: 'left',  dataIndex: 'statusDetail'},
           {header: "Start Date",   width: 102,  align: 'left', dataIndex: 'startDate'},
           {header: "End Date",     width: 102,  align: 'left', dataIndex: 'endDate'}
       ],
       stripeRows: true,
       height: 450,
       width: 800,
       viewConfig: { forceFit: true },
       enableHdMenu: true,
       border: false
   });

   grid.render('projectGrid');


   // load the map
   if (GBrowserIsCompatible())
   {
      projectMap = new GMap2(document.getElementById("map"));
      var mapTypeControl = new GMapTypeControl();
      var topRight = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10,10));
      var bottomRight = new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,10));

      //projectMap.setCenter(new GLatLng(29.98, -90.17), 12); // Jeff east bank
      //projectMap.setCenter(new GLatLng(29.88, -90.08), 12); // Jeff west bank
      projectMap.setCenter(new GLatLng(latN, longN), 12);
      projectMap.addControl(mapTypeControl, topRight);
      projectMap.addControl(new GSmallMapControl());
    }

   // Load completed projects as default
   $("projectSelector").selectedIndex = 5;
   getProjects($("projectSelector"), location);

}
