
// This code contains the major javascript functions for the MDade Google Maps LRTP Project App
var map, geocoder, gdir;
var zoomAddressMarker, zoomAddressPoint, zoomAddressText;
var dirRoutePolyline, dirRoute, dirRouteTextFrom, dirRouteTextTo, dirRoutePointFrom, dirRoutePointTo;
var mapBounds = new GLatLngBounds;
var milesPerMeter = 0.000621371192;
var resultsOpen = false;
var isLoaded = false;
var _accordionInitted = false;
var _gridLoaded = false;
var _gridWidth = 700;
var _headerBit = false;

//Define the bounds of the original map view (Miami in this case)
mapBounds.extend(new GLatLng(25.924, -80.487));
mapBounds.extend(new GLatLng(25.377, -80.150));

var mdadeBounds = new GLatLngBounds;
mdadeBounds.extend(new GLatLng(26.2, -80.6));
mdadeBounds.extend(new GLatLng(25.2, -80.0));

// Set the center of the map, and find the appropriate zoom level based on the current map size
function fullZoom() { map.setCenter(mapBounds.getCenter(), map.getBoundsZoomLevel(mapBounds)); }

// unused
function onMapClick(overlay, latlng) {
  if ((overlay == null || typeof overlay == 'undefined' || typeof overlay.name == 'undefined') && latlng != null && typeof latlng != "undefined") // clicked a point not on an overlay, clear project information
    fillProjectInfo(-1);
}

function onDirLoad() {
  //alert("DIRLOAD");
  dirRoute = gdir.getRoute(0);
  dirRoutePolyline = gdir.getPolyline();
  filterAlongRoute();
}

function onDirError() {
  alert("There was a problem getting directions for your start/end address. Please try again.");
  //alert("DIRERROR: " + gdir.getStatus().code);
}

function onMapLoad() {
  appResize();
  $("#googButtonContainer-BikePed").css("visibility", "visible");
  $("#googButtonContainer-Motorized").css("visibility", "visible");
  lockUI(false);
  $("#selectMotorNonMotorModal").dialog('open');
}

function afterGroupSelect() {
  loadProjects(function() { onProjectsLoaded(); });
}

function onProjectsLoaded() {
  initYui();
  initResultsGrid();

  searchProjectsByAttr(false);

  appResize();
  window.setTimeout("lockUI(false);", 1500);
}

function lockUI(lock) {
  if (typeof lock != "boolean") return;
  if (lock) {
    $("#pleaseWaitModal").dialog('open');
    $("#pleaseWaitModal").dialog('moveToTop');
  }
  else {
    $("#pleaseWaitModal").dialog('close');
  }
}

function appInit() {
  $("#pleaseWaitModal").dialog({ autoOpen: false, bgiframe: true, modal: true, resizable: false, closeOnEscape: false, title: "Now loading...", open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); } });
  $("#pleaseWaitThinking").dialog({ autoOpen: false, bgiframe: true, modal: true, resizable: false, closeOnEscape: false, title: "Calculating...", open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); } });
  $("#selectMotorNonMotorModal").dialog({ autoOpen: false, bgiframe: true, modal: true, resizable: false, closeOnEscape: false, title: "Welcome", open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); } });
  lockUI(true);
  $(window).resize(appResize);
  appResize();

  $("#textZoomAddress").keypress(zoomToAddressKeyPress);
  $("#textZoomFilterMiles").keypress(filterZoomAddressKeyPress);
  $("#textFromStr").keypress(function(e) {
    if (e.keyCode == 13) {
      $("#textToStr").focus();
      return false;
    }
  });
  $("#textToStr").keypress(function(e) {
    if (e.keyCode == 13) {
      $("#textRouteFilterMiles").focus();
      return false;
    }
  });
  $("#textRouteFilterMiles").keypress(function(e) {
    if (e.keyCode == 13) {
      getDirections();
      return false;
    }
  });
  $.preloadCssImages();

  // run googMapInit when document is finished loading
  //if (!isLoaded)
  //  $(window).load(function() {googMapInit();});
  //else
  googMapInit();
}

function googMapInit() {
  //debugger;
  if (GBrowserIsCompatible()) {

    map = new GMap2(document.getElementById("map")); //,{draggableCursor: 'crosshair', draggingCursor: 'move'});
    var mapLoadListener = GEvent.bind(map, "load", this, this.onMapLoad);
    new GKeyboardHandler(map);
    map.removeMapType(G_SATELLITE_3D_MAP);
    map.removeMapType(G_PHYSICAL_MAP);
    map.enableContinuousZoom();
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GScaleControl());
    //map.enableGoogleBar();
    map.enableScrollWheelZoom();
    fullZoom();

    geocoder = new GClientGeocoder();
    geocoder.setBaseCountryCode('us');
    geocoder.setViewport(map.getBounds());

    gdir = new GDirections(map);

    //var clickListener = GEvent.bind(map, "click", this, this.onMapClick);

    var dirLoadListener = GEvent.bind(gdir, "load", this, this.onDirLoad);
    var dirErrorListener = GEvent.bind(gdir, "error", this, this.onDirError);
  }
  else {
    alert("Your browser is not compatible with Google Maps, or there has been some serious error.");
    return;
  }

  $("#left_accordion").accordion({ header: ".ui-accordion-header", fillSpace: true });
  _accordionInitted = true;
}

// run appInit when DOM finishes loading - it will set googMapInit to run after the body finishes loading
//$(window).load(function() { appInit(); });
$(function() { appInit(); });

function appResize() {
  var winheight = $(window).height();
  var winwidth = $(window).width();
  var maptop = $("#map").offset().top;
  var mapleft = $("#map").offset().left;

  $("#left_menu").height(winheight - maptop);
  $("#left_accordion").height(winheight - maptop);

  $("#results_tab").css("top", winheight - $("#results_tab").height());

  var resultsheight = $("#results_panel").height();
  $("#results_panel").css("top", winheight - resultsheight);
  $("#results_panel").width(winwidth - mapleft);
  _gridWidth = winwidth - mapleft - 28;
  if (_gridLoaded) {
    $("#projSearchResultsGrid").setGridWidth(_gridWidth);
  }
  $("#projSearchResultsDiv div.ui-jqgrid-bdiv").width(_gridWidth + 17);
  //alert($("#projSearchResultsGrid").css('padding'));

  if (resultsOpen) {
    $("#map").height(winheight - maptop - resultsheight);
    $("#legend").css("top", winheight - resultsheight - $("#legend").height() - 20);
  }
  else {
    $("#map").height(winheight - maptop);
    $("#legend").css("top", winheight - $("#legend").height() - 20);
  }

  $("#map").width(winwidth - mapleft);



  if (!_accordionInitted) {

  }
  else {
    $("#left_accordion").accordion('resize');
  }

  // help the browser refresh the accordion menu
  //$("#left_accordion").css("display","none");
  //$("#left_accordion").css("display","block");
  //$("#left_menu").css("display","none");
  //$("#left_menu").css("display","block");

  /*if (typeof mediaNavResize != "undefined" && mediaNavResize != null)
    mediaNavResize(winwidth,winheight);*/
}

function appUnload() {
  //if (clearAllGxml) clearAllGxml();
  GUnload();
}

var filterAfterZoom = false;
function zoomToAddress(filterFlag) {
  clearAddressAndRouteSearch();
  var tgtAddress = $('#textZoomAddress').val();
  if (tgtAddress != null && typeof tgtAddress != "undefined" && tgtAddress.length > 1) {
    zoomAddressText = tgtAddress;
    geocoder.getLatLng(tgtAddress, zoomToAddressCallback);
  }
  else {
    alert("Please enter a valid address.");
    return;
  }
  if (typeof filterFlag != 'undefined' && filterFlag == true)
    filterAfterZoom = true;
}

var triedOnceAddress = false;
function zoomToAddressCallback(point) {
  if (point == null || !mdadeBounds.containsLatLng(point)) {
    if (triedOnceAddress || $('#textZoomAddress').val().toLowerCase().indexOf("miami, fl") >= 0) {
      alert("Your address is incorrectly formatted, invalid, or does not exist in the Miami Dade Area, please try again.");
      triedOnceAddress = false;
      filterAfterZoom = false;
      return;
    }
    else {
      triedOnceAddress = true;
      var currTxt = $('#textZoomAddress').val();
      $('#textZoomAddress').val(currTxt + ", miami, fl");
      zoomToAddress(filterAfterZoom);
      return;
    }
  }
  triedOnceAddress = false;
  zoomAddressPoint = point;

  if (map.getZoom() < 13)
    map.setZoom(13);

  map.panTo(point);

  zoomAddressMarker = new GMarker(point, { clickable: false });
  map.addOverlay(zoomAddressMarker);

  if (filterAfterZoom == true)
    filterZoomAddress();

  filterAfterZoom = false;

  //$("#zoomFilter").css('display','block');
}

function zoomToAddressKeyPress(e) {
  if (e.keyCode == 13) {
    zoomToAddress();
    return false;
  }
}

function filterZoomAddress() {
  if (zoomAddressPoint == null || typeof zoomAddressPoint == 'undefined') {
    //alert("Please zoom to an address before using this function.");
    zoomToAddress(true);
    return;
  }

  var filterMiles = $("#textZoomFilterMiles").val();
  if (filterMiles == null || typeof filterMiles == "undefined" || filterMiles.length < 1 || parseFloat(filterMiles) <= 0 || isNaN(parseFloat(filterMiles))) {
    alert("Please enter a valid number of miles for the search.");
    return;
  }
  else {
    filterMiles = parseFloat(filterMiles);
  }

  clearMapFilter();
  clearSearchResults();
  getProjectsWithinDist(zoomAddressPoint, filterMiles / milesPerMeter, filterZoomAddress_callback);
}

function filterZoomAddress_callback(matchProjs) {
  filterProjectsOnMap(matchProjs);

  clearSearchResults();

  for (var i = 0; i < matchProjs.length; i++) {
    addProjToResults(matchProjs[i]);
  }

  //initResultsGridXmlStr(dataXmlStr);
  openResultsPanel();
}

function filterZoomAddressKeyPress(e) {
  if (e.keyCode == 13) {
    filterZoomAddress();
    return false;
  }
}

function filterAlongRoute() {
  if (dirRoute == null || typeof dirRoute == 'undefined') {
    alert("Please build a route before using this function.");
    //zoomToAddress(true);
    return;
  }

  var filterMiles = $("#textRouteFilterMiles").val();
  if (filterMiles == null || typeof filterMiles == "undefined" || filterMiles.length < 1 || parseFloat(filterMiles) <= 0 || isNaN(parseFloat(filterMiles))) {
    alert("Please enter a valid number of miles for the search.");
    return;
  }
  else {
    filterMiles = parseFloat(filterMiles);
  }

  clearMapFilter();
  clearSearchResults();
  getProjectsOnRoute(dirRoutePolyline, filterMiles / milesPerMeter, filterAlongRoute_callback);
}

function filterAlongRoute_callback(matchProjs) {
  filterProjectsOnMap(matchProjs);

  clearSearchResults();

  for (var i = 0; i < matchProjs.length; i++) {
    addProjToResults(matchProjs[i]);
  }

  //initResultsGridXmlStr(dataXmlStr);
  openResultsPanel();
}

function clearAddressAndRouteSearch() {
  if (gdir) gdir.clear();
  if (zoomAddressMarker != null && typeof zoomAddressMarker != "undefined")
    map.removeOverlay(zoomAddressMarker);
}

function onSelProjType() {
  var projType = $("#selProjType :selected").val();
  if (projType.toLowerCase().indexOf("congestion") >= 0) {
    $("#searchProjSpecialDiv").html('<img style="width:100%;" src="images/congestioncollage.png" alt="Congestion Management Scenarios"/>');
    $("#searchProjSpecialDiv").css("display", "block");
  }
  else {
    $("#searchProjSpecialDiv").css("display", "none");
  }

}

var _currSearchResults;
function searchProjectsByAttr(openResultsFlag) {
  if (typeof openResultsFlag == 'undefined' || openResultsFlag == null)
    openResultsFlag = true;
  var projType = $("#selProjType :selected").val();
  if (projType == '0') projType = null;
  var capNonCap = $("#selCapNonCap :selected").val();
  if (capNonCap == '0') capNonCap = null;

  _currSearchResults = getMatchingProjects({ type: projType, capnoncap: capNonCap });

  clearSearchResults();
  if (openResultsFlag) {
    for (var i = 0; i < _currSearchResults.length; i++) {
      addProjToResults(_currSearchResults[i]);
    }

    //initResultsGridXmlStr(dataXmlStr);

    openResultsPanel();
  }
}

// fromStr and toStr are strings containing the from and to points

function getDirections(fromStr, toStr) {
  clearSearchResults();
  clearAddressAndRouteSearch();
  if (typeof fromStr == 'undefined' || fromStr == null) {
    fromStr = $("#textFromStr").val();
  }
  if (typeof toStr == 'undefined' || toStr == null) {
    toStr = $("#textToStr").val();
  }
  if (typeof fromStr == 'undefined' || fromStr == null || typeof toStr == 'undefined' || toStr == null) {
    return null;
  }
  dirRouteTextTo = toStr;
  dirRouteTextFrom = fromStr;


  geocoder.getLatLng(dirRouteTextFrom, getDirectionsFromCallback);
}

var triedOnceFrom = false;
function getDirectionsFromCallback(point) {
  if (point == null || !mdadeBounds.containsLatLng(point)) {
    if (triedOnceFrom || $("#textFromStr").val().toLowerCase().indexOf("miami, fl") >= 0) {
      alert("Your FROM address is incorrectly formatted, invalid, or does not exist in the Miami Dade Area, please try again.");
      triedOnceFrom = false;
      return;
    }
    else {
      triedOnceFrom = true;
      var currTxt = $("#textFromStr").val();
      $("#textFromStr").val(currTxt + ", miami, fl");
      getDirections();
      return;
    }
  }
  triedOnceFrom = false;
  dirRoutePointFrom = point;
  geocoder.getLatLng(dirRouteTextTo, getDirectionsToCallback);
}

var triedOnceTo = false;
function getDirectionsToCallback(point) {
  if (point == null || !mdadeBounds.containsLatLng(point)) {
    if (triedOnceTo || $("#textToStr").val().toLowerCase().indexOf("miami, fl") >= 0) {
      alert("Your FROM address is incorrectly formatted, invalid, or does not exist in the Miami Dade Area, please try again.");
      triedOnceTo = false;
      return;
    }
    else {
      triedOnceTo = true;
      var currTxt = $("#textToStr").val();
      $("#textFromStr").val(currTxt + ", miami, fl");
      getDirections();
      return;
    }
  }
  triedOnceTo = false;
  dirRoutePointTo = point;
  openResultsPanel();
  gdir.loadFromWaypoints([dirRoutePointFrom, dirRoutePointTo], { preserveViewport: true });
  var dirBounds = new GLatLngBounds;

  //Define the bounds of the original map view (Miami in this case)
  dirBounds.extend(dirRoutePointFrom);
  dirBounds.extend(dirRoutePointTo);

  map.setCenter(dirBounds.getCenter(), map.getBoundsZoomLevel(dirBounds) - 1);
}

function openResultsPanel() {

  if (resultsOpen) return;

  resultsOpen = true;
  var resultsheight = $("#results_panel").height();
  var mapheight = $("#map").height();
  $("#map").height(mapheight - resultsheight);
  $("#legend").css("top", $(window).height() - resultsheight - $("#legend").height() - 20);
  $("#results_panel").css("visibility", "visible");
  $("#results_tab").css("visibility", "hidden");

}

function closeResultsPanel() {
  if (_headerBit) {
    _headerBit = false;
    return;
  }
  if (resultsOpen == false) return;

  resultsOpen = false;
  var resultsheight = $("#results_panel").height();
  var mapheight = $("#map").height();
  $("#map").height(mapheight + resultsheight);
  $("#legend").css("top", $(window).height() - $("#legend").height() - 20);
  $("#results_tab").css("visibility", "visible");
  $("#results_panel").css("visibility", "hidden");
}

function fillProjectInfo(rowindex, openAcc) {
  //alert("fillProj(" + index + "," + openAcc +")");
  if (typeof openAcc == 'undefined' || openAcc == null) {
    openAcc = true;
  }
  if (rowindex == -2) {
    rowindex = $("#projSearchResultsGrid").getGridParam("selrow");
  }
  if (typeof rowindex == 'undefined' || rowindex == null || rowindex < -1) {
    return; // error
  }

  if (openAcc) $("#left_accordion").accordion("activate", 3);
  //$("#searchError").css("display","none");
  //ASP_projNumber=index.toString(); 

  if (rowindex < 0) {
    $("#accProjInfo").html("<p>Please select a project on the map to see information about it.</p>");
  }
  else {
    //debugger;
    //  $("#searchError").html("Please select a project from the results list.");
    //    $("#searchError").css("display","block");
    //
    //var index = $("#projSearchResultsGrid").getRowData(rowindex).projindex;
    //var index = _currSearchResults[rowindex];
    var index = rowindex;
    var projHtml;
    projHtml = "<h1>" + allProj[index].facility + "</h1>";
    projHtml += "<table>";
    projHtml += "<tr><td>Facility:</td><td>" + allProj[index].facility + "</td></tr>";
    projHtml += "<tr><td>Type:</td><td>" + allProj[index].type + "</td></tr>";
    //projHtml += "<tr><td>Plan Area:</td><td>"+allProj[index].planarea+"</td></tr>";
    projHtml += "<tr><td>From:</td><td>" + allProj[index].from + "</td></tr>";
    projHtml += "<tr><td>To:</td><td>" + allProj[index].to + "</td></tr>";
    //projHtml += "<tr><td>Source:</td><td>"+allProj[index].source+"</td></tr>";
    //projHtml += "<tr><td>Capital/Non-Capital:</td><td>"+allProj[index].capnoncap+"</td></tr>";
    projHtml += "<tr><td>Description:</td><td></td></tr></table>";
    projHtml += '<div id="accProjInfo_desc">' + allProj[index].description + "</div>";


    projHtml += "<br /><div class='buttonGroup'>";

    projHtml += "  <input type='button' onclick='openProjectPage(\"" + allProj[index].id + "\");' value='Project Page'/>";
    if (isMediaAvailable(allProj[index].id)) {
      projHtml += "<p>* All media represents potential strategies.</p>";
      projHtml += "  <input type='button' onclick='doMediaNav(" + index + ");' value='Show Visualizations'/>";
      projHtml += "</div>";
    }
    else {
      projHtml += "</div>";
      projHtml += "<p>* There is no media available for this project.</p>";
    }

    /*if (allProj[index].type.toLowerCase() == "congestion management") {
      projHtml += '<div id="accProjInfo_ConMan"><h3>Congestion Management Strategies</h3><div>To be implemented...</div></div>';

    }*/

    if (typeof allProj[index].primimgindex != 'undefined' && allProj[index].primimgindex != null)
      projHtml += "<br /><img alt='" + allImgToolTip[allProj[index].primimgindex] + "' src='proj_photos/" + allImgSrc[allProj[index].primimgindex] + "'/>";

    //projHtml += "<input type='button' id='btnTestIt' value='Test'/>";

    $("#accProjInfo").html(projHtml);
  }
}

var origMediaNavContentHtml;
var sliderWidth = 0;
var slideDist = 0;
var slideRate = 200; // 100 pixels per second
var slideEasing = 'swing';

function doMediaNav(index) {
  if (typeof index == 'undefined' || index == null || typeof projMediaLoaded == 'undefined' || projMediaLoaded == null)
    return;

  if (!projMediaLoaded) {
    window.setTimeout('doMediaNav(' + index.toString() + ');', 500);
    return;
  }

  var projID = allProj[index].id;

  var MNhtml = "Super Success";
  var MNimg = "";
  var MNvid = "";
  var MNdoc = "";

  /*$("#MediaNavTopBar a").bind("click",function (e) {e.preventDefault(); MediaNavClick(e);});
  $("#MediaNavTopBar a[alt='Videos']").addClass("greyed");
  $("#MediaNavTopBar a[alt='Documents']").css('left','33%');
  $("#MediaNavTopBar a[alt='Videos']").css('left','67%');
  MediaNavPhotos();*/

  $("#MediaNavTitle").html("Project Media - " + allProj[index].name);

  $("#MediaNavContent").html(origMediaNavContentHtml);

  var i = 0;
  for (i = 0; i < allImgSrc.length; i++) {
    if (allImgProjId[i] == projID) {
      MNimg += '<div class="mediaNavSliderItemBG" onclick="mediaNavLoadPhoto(' + i + ');"><img class="mediaNavSliderItem" alt="' + allImgToolTip[i] + '" src="proj_photos/' + allImgSrc[i] + '"/></div>';
    }
  }

  for (i = 0; i < allVideoSrc.length; i++) {
    if (allVideoProjId[i] == projID) {
      MNvid += '<div class="mediaNavSliderItemBG" onclick="mediaNavLoadVideo(' + i + ');"><img class="mediaNavSliderItem" alt="' + allVideoToolTip[i] + '" src="proj_videos/' + allVideoCapSrc[i] + '"/><div class="mediaNavSliderVideoIcon"></div></div>';
    }
  }

  for (i = 0; i < allDocSrc.length; i++) {
    if (allDocProjId[i] == projID) {
      MNdoc += '<div class="mediaNavSliderItemBG" onclick="mediaNavLoadDoc(' + i + ');"><img alt="' + allDocToolTip[i] + '" src="images/text_icon.gif"/></div>';
    }
  }

  MNhtml = MNimg + MNvid + MNdoc;

  $('#MNSliderShuttle').html(MNhtml);

  var sliderWidth = 5;
  $('#MNSliderThumbs .mediaNavSliderItemBG').each(function() { $(this).css("left", sliderWidth.toString() + "px"); sliderWidth += ($(this).width() + 5); });
  sliderWidth = (sliderWidth == 5) ? 0 : sliderWidth;
  slideDist = (sliderWidth - $('#MNSliderThumbs').width());
  if (slideDist > 0) {
    $('#MNSlideLeft').removeClass('left-slider-disabled'); $('#MNSlideLeft').addClass('left-slider-up');
    $('#MNSlideRight').removeClass('right-slider-disabled'); $('#MNSlideRight').addClass('right-slider-up');
    $('#MNSlideLeft').hover(function(e) { $('#MNSlideLeft').addClass('left-slider-down'); $('#MNSlideLeft').removeClass('left-slider-up'); fnMNSlideLeft(true); }, function(e) { $('#MNSlideLeft').addClass('left-slider-up'); $('#MNSlideLeft').removeClass('left-slider-down'); fnMNSlideLeft(false); });
    $('#MNSlideRight').hover(function(e) { $('#MNSlideRight').addClass('right-slider-down'); $('#MNSlideRight').removeClass('right-slider-up'); fnMNSlideRight(true); }, function(e) { $('#MNSlideRight').addClass('right-slider-up'); $('#MNSlideRight').removeClass('right-slider-down'); fnMNSlideRight(false); });
  }
  else if (sliderWidth == 0) {
    $("#MediaNavContent").html("There is no media for this project.");
  }

  if (typeof allProj[index].primimgindex != 'undefined' && allProj[index].primimgindex != null)
    mediaNavLoadPhoto(allProj[index].primimgindex);

  MediaNavPanel.show();
}

function openProjectPage(projID) {
  window.open("Project.aspx?pn=" + projID);
}

function initResultsGrid() {
  var projGridDiv = $("#projSearchResultsGrid");
  //  $("#projSearchResultsCloseButton").click(function() { closeResultsPanel(); });
  $("#projSearchResultsGrid").jqGrid({
    datatype: 'clientSide',
    //colNames: ['Name', 'Description', 'Type', 'Plan Area', 'Facility', "projindex"], //,'Source','Capital/Non-Capital'],
    colNames: ['Facility', 'Description', 'From', 'To', 'projindex'],
    colModel: [
    //{ name: 'name', index: 'name', sortable: true, sorttype: 'text', width: 60 },
    {name: 'facility', index: 'facility', sortable: false, /*sortable: true, sorttype: 'text',*/width: 75 },
    { name: 'description', index: 'description', sortable: false,  /*sortable: true, sorttype: 'text',*/width: 100 },
    { name: 'from', index: 'from', sortable: false,  /*sortable: true, sorttype: 'text',*/width: 100 },
    { name: 'to', index: 'to', sortable: false, /*sortable: true, sorttype: 'text',*/width: 100 },
    //{ name: 'type', index: 'type', sortable: true, width: 60 },
    //{ name: 'planarea', index: 'planarea', sortable: true, width: 85 },

    //{name:'source',index:'source',sortable:true},
    //{name:'capnoncap',index:'capnoncap',sortable:true}
    {name: 'projindex', index: 'projindex', key: true, width: 0, hidden: true}],
    rowNum: 10,
    viewrecords: true,
    imgpath: '_scripts/jq/jqGrid-3.5.2/css/images',
    caption: 'Search Results',
    height: '120px',
    forceFit: true,
    width: 700,
    scroll: true,
    onSelectRow: function(id) { fillProjectInfo(id, true); },
    hidegrid: false,
    //onHeaderClick: function(gridstate) { closeResultsPanel(); },
    gridComplete: function() { _gridLoaded = true; appResize(); }
  });

}

function clearSearchResults() {
  $("#projSearchResults").html("");
  $("#projSearchResults").css("display", "none");
  $("#projSearchResults").css("display", "");
  $("#projSearchResultsGrid").clearGridData();
}

function addProjToResults(projindex) {
  if (typeof projindex == "undefined" || projindex == null)
    return;
  if (allProj[projindex].kmlGroup != _currentKMLGroup)
    return;
  var temprow = {
    name: allProj[projindex].name,
    description: allProj[projindex].description,
    type: allProj[projindex].type,
    planarea: allProj[projindex].planarea,
    facility: allProj[projindex].facility,
    source: allProj[projindex].source,
    capnoncap: allProj[projindex].capnoncap,
    from: allProj[projindex].from,
    to: allProj[projindex].to,
    projindex: projindex
  };
  $("#projSearchResultsGrid").addRowData(projindex.toString(), temprow);
}

var GOPanel;

function initYui() {

  // create and render the new panel from the existing markup
  GOPanel = new YAHOO.widget.Panel("GoalsObjectivesPanel", { y: parseInt($("#map").css("top")) + 20, x: parseInt($("#map").css("left")) + 20, visible: false });
  //GOPanel.render();

  initMediaNav();

  $('#accProjEval a').click(function(e) { e.preventDefault(); showGO($(this).attr('id')); });
}

function showGO(aid) {
  if (aid == null || aid.substr(2, 5) != "goal-" || parseInt(aid.substr(7)) < 0 || parseInt(aid.substr(7)) > 8)
    return;

  var goalSel = "#" + aid.substr(2);

  $("#GOBody div").css("display", "none");
  $(goalSel).css("display", "");
  $("#goal-score").css("display", "");
  GOPanel.show();

}

var _pageFileName = "Default.aspx";
function callPageMethod(method, data, callback) {
  $.ajax({
    async: true,
    type: "POST",
    url: (_pageFileName + "/" + method),
    data: data,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
      callback(msg.d);
    }
  });
}

function switchCurrentKMLGroup(newGroup) {
  if (_currentKMLGroup === null) chooseCurrentKMLGroup(newGroup);
  if (_currentKMLGroup == newGroup) return;
  lockUI(true);
  closeResultsPanel();
  clearSearchResults();
  clearAddressAndRouteSearch();
  fullZoom();
  fillProjectInfo(-1,false);
  $("#searchProjSpecialDiv").css("display", "none");
  $("#left_accordion").accordion("activate", 0);
  if (newGroup == "Trans") {
    $("#legendimg").attr("src", "images/legend_motor.png");
    //$("#selProjType .transprojtype").attr("style", "");
    //$("#selProjType .bikepedprojtype").attr("style", "display:none;");
    $("#selProjType").html('<option label="< any >" value="0" class="allprojtypes">&lt; any &gt;</option><option label="Highway" value="Highway" class="transprojtype">Highway</option><option label="Transit" value="Transit" class="transprojtype">Transit</option><option label="Congestion Mgmt Corridors" value="Congestion Management Corridors" class="transprojtype">Congestion Mgmt Corridors</option><option label="Congestion Mgmt Spots" value="Congestion Management Spots" class="transprojtype">Congestion Mgmt Spots</option>');
    $("#bikePedGoogButton").addClass("googButton");
    $("#bikePedGoogButton").removeClass("googButton-clicked");
    $("#motorizedGoogButton").addClass("googButton-clicked");
    $("#motorizedGoogButton").removeClass("googButton");
  }
  else {
    $("#legendimg").attr("src", "images/legend_bikeped.png");
    //$("#selProjType .transprojtype").attr("style", "display:none;");
    //$("#selProjType .bikepedprojtype").attr("style", "");
    $("#selProjType").html('<option label="< any >" value="0">&lt; any &gt;</option><option label="Bicycle" value="Bicycle Facility Improvements" class="bikepedprojtype">Bicycle</option><option label="Pedestrian" value="Pedestrian Facility Improvements" class="bikepedprojtype">Pedestrian</option><option label="Trail" value="Trail Facility Improvements" class="bikepedprojtype">Trail</option>');
    $("#motorizedGoogButton").addClass("googButton");
    $("#motorizedGoogButton").removeClass("googButton-clicked");
    $("#bikePedGoogButton").addClass("googButton-clicked");
    $("#bikePedGoogButton").removeClass("googButton");
  }
  _currentKMLGroup = newGroup;
  for (var i = 0; i < gxmlArr.length; i++) {
    if (gxmlGroupArr[i] == newGroup)
      gxmlArr[i].parse();
    else
      gxmlArr[i].clear();
  }
  _gotPolylineIndexes = false;
  window.setTimeout("getPolylineIndexes()", 8000);
  window.setTimeout("lockUI(false);", 1500);
}

function chooseCurrentKMLGroup(newGroup) {
  $("#selectMotorNonMotorModal").dialog('close');
  lockUI(true);
  _currentKMLGroup = newGroup;
  if (newGroup == "Trans") {
    $("#legendimg").attr("src", "images/legend_motor.png");
    //$("#selProjType .transprojtype").attr("style", "");
    //$("#selProjType .bikepedprojtype").attr("style", "display:none;");
    $("#selProjType").html('<option label="< any >" value="0" class="allprojtypes">&lt; any &gt;</option><option label="Highway" value="Highway" class="transprojtype">Highway</option><option label="Transit" value="Transit" class="transprojtype">Transit</option><option label="Congestion Mgmt Corridors" value="Congestion Management Corridors" class="transprojtype">Congestion Mgmt Corridors</option><option label="Congestion Mgmt Spots" value="Congestion Management Spots" class="transprojtype">Congestion Mgmt Spots</option>');
    $("#bikePedGoogButton").addClass("googButton");
    $("#bikePedGoogButton").removeClass("googButton-clicked");
    $("#motorizedGoogButton").addClass("googButton-clicked");
    $("#motorizedGoogButton").removeClass("googButton");
  }
  else {
    $("#legendimg").attr("src", "images/legend_bikeped.png");
    //$("#selProjType .transprojtype").attr("style", "display:none;");
    //$("#selProjType .bikepedprojtype").attr("style", "");
    $("#selProjType").html('<option label="< any >" value="0">&lt; any &gt;</option><option label="Bicycle" value="Bicycle Facility Improvements" class="bikepedprojtype">Bicycle</option><option label="Pedestrian" value="Pedestrian Facility Improvements" class="bikepedprojtype">Pedestrian</option><option label="Trail" value="Trail Facility Improvements" class="bikepedprojtype">Trail</option>');
    $("#motorizedGoogButton").addClass("googButton");
    $("#motorizedGoogButton").removeClass("googButton-clicked");
    $("#bikePedGoogButton").addClass("googButton-clicked");
    $("#bikePedGoogButton").removeClass("googButton");
  }
  $("#legendimg").css("visibility", "visible");
  afterGroupSelect();
}

