//<![CDATA[
var regHTML = /<\S[^><]*>/g ;
var map;
var markerList = "";
gicons = [];
gmarker = [];
infoWinHtml = [];
infoWinLabel = [];
positionSaved = 0;
isSearching = 0;
function mapload() {
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("map_canvas"));
    map.removeOverlay(G_MAP_MARKER_SHADOW_PANE);
    map.setCenter(new GLatLng(38.69408504756833, -89.93133544921875),9);//38.624381089751544, -89.95880126953125), 10);
    map.addControl(new GMapTypeControl(G_DEFAULT_MAP_TYPES));
    map.addControl(new GLargeMapControl());
    map.addControl(new GOverviewMapControl(new GSize(100,100)));
   // map.disableDoubleClickZoom();
    geocoder = new GClientGeocoder();
    markerManager =  new GMarkerManager(map, {borderPadding:0});




    // ====== Restricting the range of Zoom Levels =====
    // Get the list of map types      
    var mt = map.getMapTypes();
    // Overwrite the getMinimumResolution() and getMaximumResolution() methods
    for (var i=0; i<mt.length; i++) {
      mt[i].getMinimumResolution = function() {return 7;}
      mt[i].getMaximumResolution = function() {return 17;}
    }

    gicons['unconfirmed'] = new GIcon (G_DEFAULT_ICON, "/map/images/marker_unconfirmed2.png");
    gicons['unconfirmed'].shadow = '';
    //gicons['blue'].iconSize = new GSize(12, 20);
    gicons['unconfirmed'].iconSize = new GSize(32,32);
    gicons['unconfirmed'].iconAnchor = new GPoint(6, 20);
    gicons['unconfirmed'].infoWindowAnchor = new GPoint(5, 1);

    gicons['confirmed'] = new GIcon (G_DEFAULT_ICON, "/map/images/marker_big_confirmed.png");
    gicons['confirmed'].shadow = "";
    gicons['confirmed'].iconSize = new GSize(32,32);
    //gicons['redS'].iconSize = new GSize(12, 20);
    //gicons['redS'].iconSize = new GSize(16, 16);  
    gicons['confirmed'].iconAnchor = new GPoint(6, 20);
    gicons['confirmed'].infoWindowAnchor = new GPoint(5, 1);


    fetchMarkers(map.getBounds());


     addOverlayCounties();

    GEvent.addListener(map, "dragend", function() {
      sval = document.getElementById('searchField').value;
      if (sval.length <= 1 || sval == 'search...'){
        fetchMarkers(map.getBounds());
      }
    });
    GEvent.addListener(map, "zoomend", function() {
      sval = document.getElementById('searchField').value;
      if (sval.length <= 1 || sval == 'search...'){
        fetchMarkers(map.getBounds());
      }
    });

    GEvent.addListener(map, "click", function(marker, point) {
      new Ajax("./ajax_add.php", {method: 'post' , postBody: 'll='+point , update: $('addArea') } ).request();
    });


  }
}



function showAddress(address) {
  geocoder.getLatLng(
    address,
    function(point) {
      if (!point) {
        alert(address + " not found");
      } else {
        map.setCenter(point, 14);
        fetchMarkers(map.getBounds());
      }
    }
  );
}

function fetchMarkers (bounds) {
  clearMarkers();
  new XHR({ 
    method: 'get',
    onSuccess: function(text, xml){
      fondleXML(xml);
    } 
  }).send('/map/markers_viewable.php?b='+bounds);
}

function fondleXML(xml){
      if (xml) {
        var xmlDoc = xml;
        //map.clearOverlays();
        //addOverlayCounties();
        // obtain the array of markers and loop through it
        var markersXML = xmlDoc.getElementsByTagName("marker");

        for (var i = 0; i < markersXML.length; i++) {
          // obtain the attribues of each marker
          var lat = parseFloat(markersXML[i].getAttribute("lat"));
          var lng = parseFloat(markersXML[i].getAttribute("lng"));
          var point = new GLatLng(lat,lng);
          var html = markersXML[i].getAttribute("html");
          var label = markersXML[i].getAttribute("label"); 
          var id = markersXML[i].getAttribute("id"); 
          // create the marker
          var marker = createMarker(point, html, unescape(label), id );
          map.addOverlay(marker);
        }
        document.getElementById('markerList').innerHTML =  markerList;
        markerList = ""; // reset the list of markers for side column list
      }
      xmlDoc = null;
}


function createMarker (point,html,label,id,type){
  markerOptions = {icon:gicons['unconfirmed']}
  var marker = new GMarker(point, markerOptions);
  var tooltip = new Tooltip(marker,label.replace(regHTML, ""),4);
  marker.type = type;
  marker.tooltip = tooltip;
  //markerManager.addMarker(marker);
  map.addOverlay(tooltip);
  gmarker[id] = marker;
  //infoWinHtml[id] = createWindowHtml(id, label);
  infoWinLabel[id] = label.replace(regHTML, "");
  markerList += '<li id="listItem'+id+'" onmouseout="gmarker['+id+'].setImage(\'/map/images/marker_unconfirmed2.png\');gmarker['+id+'].tooltip.hide();" onmouseover="gmarker['+id+'].setImage(\'/map/images/marker_big_confirmed.png\');gmarker['+id+'].tooltip.show();" ><img src="/map/images/zoom.gif" style="margin-top: 2px;" onclick="javascript:gmarker['+id+'].tooltip.hide();markerZoom('+id+', gmarker['+id+'].getPoint());" /> <a href="javascript:void(0);" onclick="javascript:gmarker['+id+'].tooltip.hide();markerListClick('+id+');">'+label+'</a></li>';
  GEvent.addListener(marker, "click", function() {
    this.tooltip.hide();
    marker.openInfoWindowHtml(infoWinLabel[id]);
  });
  GEvent.addListener(marker, "dblclick", function() {
    this.tooltip.hide();
    markerZoom(id, point, infoWinLabel[id]);
  });
  GEvent.addListener(marker, "mouseover", function() {
    //document.getElementById('markerList').innerHTML = label;
    this.tooltip.show();
    var item = document.getElementById('listItem'+id);
    item.style.backgroundColor = '#DBEAF7';
    document.getElementById('markerHovered').innerHTML = label;
    new Ajax("./map/ajax_update.php", {
      method: 'post' , 
      postBody: 'a=updctov&id='+id,
      update: $('timesViewed')
    }).request();
  });
  GEvent.addListener(marker, "mouseout", function() {
    this.tooltip.hide();
    var item = document.getElementById('listItem'+id);
    item.style.backgroundColor = '';
  });

  return marker;
}

function createWindowHtml(id, label) {
  var bbb = label.replace(regHTML, "");
  // add the return to last position link if necessary
  if (positionSaved == 1) {
    bbb = bbb+'<br /><a id="infoWindowReturnLink" onclick="javascript:map.closeInfoWindow();map.returnToSavedPosition();map.setMapType(G_NORMAL_MAP);" >Go Back</a>';
    positionSaved = 0;
  }
  return bbb;        
}

function markerListClick(id){
  map.panTo(gmarker[id].getPoint());
  gmarker[id].openInfoWindowHtml(infoWinLabel[id]);
  //while (!map.isLoaded()){}    // wait til the map is done moving for real. Otherwise we could update the markers before it's done.
  //fetchMarkers(map.getBounds());
  //markerManager.refresh();
}

function markerZoom(id, point) {
  gmarker[id].tooltip.hide();
  gmarker[id].setImage('/map/images/marker_unconfirmed2.png');
  map.savePosition(); positionSaved = 1;
  var html = createWindowHtml(id, infoWinLabel[id]);
  map.setCenter(point, 17, G_HYBRID_MAP);
  gmarker[id].openInfoWindowHtml(html);
}


function markerVerify(ll, markerName) {
  new Ajax("./ajax_add.php", {method: 'post' , postBody: 'a=markerVerify&ll='+ll+'&markerName='+escape(markerName) , update: $('addArea') } ).request();
}
function markerSave(ll, markerName) {
  new Ajax("./ajax_add.php", { 
    method: 'post' , 
    postBody: 'a=markerSave&ll='+ll+'&markerName='+escape(markerName) , 
    update: $('addArea'), 
    onSuccess: function(text){
      text = text.replace(/\(|\)| /g, "");
      text = text.split(","); 
      var point = new GLatLng(text[0],text[1]); 
      var marker = createMarker(point, '', markerName)
      map.addOverlay(marker);
    } 
  } ).request();
}




function searchMarkers(val){
    //if (val == '') {clearMarkers();fetchMarkers(map.getBounds()); return;}
    //if (val.length >= 2 ) {
      clearMarkers();
      new Ajax('./map/search.php', {
        method: 'post',
        postBody: 's='+escape(val),
        onSuccess:  function(text, xml){
          fondleXML(xml);

        }
      }).request();
    //}

  }


function clearMarkers(type) {

    for (i = 0; i < gmarker.length; i++) {
      if (gmarker[i]) {
        map.removeOverlay(gmarker[i]);
      }
    }


}


function pause(millis)
{
var date = new Date();
var curDate = null;

do { curDate = new Date(); }
while(curDate-date < millis);
}


function noEnter() {
  return !(window.event && window.event.keyCode == 13);
}

function mapSearchOnEnter(e, val) {
        var ENTER_KEY = 13;
        var code = "";

        if (window.event) // IE
        {
            code = e.keyCode;
        }
        else if (e.which) // Netscape/Firefox/Opera
        {
            code = e.which;
        }

        if (code == ENTER_KEY) {
            searchMarkers(val);
            return false;
        }
  }





function addOverlayCounties() {
    // create St Clair County
    var polylineSTCLAIR = new GPolyline.fromEncoded({
        color: "#0000ff",
        weight: 2,
        opacity: 0.8,
        points: "cz}jFfplePi@mWQct@f@_jAd@_XR{O?wVDuR`@me@{@kCRw[f@wrARgaA|@g_BSsIRkH?cGRsISoF?cQvBscB?kCf@cVRo_@?sHRcp@?sIRgm@?wo@RgpAL}DMei@?wQR{c@?w[Rod@?_v@ScGRod@f@kk@ZkiDJ{X?cj@f@m}ArD{iG?sw@Rk`@z@sjAnAo|CRc~@RkqBRgT?o`B`@oaA~@e{ESgsBrh@BxkCkAn_BgAta@Uhc@Bz~F_CnmAYxt@WzKKfYK|j@Ez^K`y@Dhl@U~K?tyBaAlh@?|j@PlmCo@hf@T`wBc@ds@g@dvDApnAe@pbAM~MW|lAl@dh@]faBNnzAEhnAKn}BMzYJ|hA_@nm@MlAIr`AAjfAy@lGPb`@m@dCBEv`BEbo@I~[Q~lB[deAOnxCFns@a@|nCqDnhOkHrCqO|TiNlDcDkEiAg_@uIuF}Dh@{LfKoMvTa]vW}]nO}Q`PmH|WiFpEaF]_GsO{F_CiGGoOpDa^za@m_@tWkc@kCu[{LgCyAgOoCqLz@eFiC|@_e@l@{EhC_B|Lj@nOdh@\\DhJqDzGw`@V_U}KcXuVsL}_@qD_h@t^m_@Pgt@de@u@`pJg@|jBOlx@W|g@q@bpBU|mAsyAJ}~HrlKy|AhsB{m@nx@oAbG{zA`hBgfA?wQUsyA|nBcVb[kz@bhAsSfYgJvLgfA~xAg@z@_yAznB_DzESz@oAbB_SfYsb@fm@g{CbeEwo@{ToeBgfAk|DkyCwGcLkMw`@o_@gh@k\\on@gc@sg@c[gYwmAul@_mBsb@w[_Dgw@{@_hBfT}Ch@",
        levels: "PBDB@B?ACC@AABB@ABAD@ABE???A@AC@B@ABBB@C@@DBBB@AD@ABBACMBA?CB@?A?C@AB@@EABBCBCBABDCBB??AD@ABBBA@N?A?ABACAKDEHDFDHDEDDFDGEDFDHEIEBEDDIBHDFBHEHEFIGEFKC?A@ALI?ADEHAI@@C@@@BDAB??CLEFHDEDFDJFDHFAP",
        zoomFactor: 2,
        numLevels: 18
    });
    map.addOverlay(polylineSTCLAIR);

    // create Jersey County
    var polylineJERSEY = new GPolyline.fromEncoded({
        color: "#0000ff",
        weight: 2,
        opacity: 0.8,
        points: "qjsnFh`fePxyAOn|KqH~v@GvnAW`hCUhgCCrxASfHEtMPd_Dq@tm@R`yAMncAAl\\J`uA@jZB~dBm@?jkSvBnK?ne@Rn_Br`AzEni@cB~_B~Cvm@RbdCbBfxARq@jIaA~e@`Cv|AYfm@wBzSuVvq@}Jfh@{Uny@ul@toAszAfdFs[hnAwN|`A{Cbi@yArgA{Ijw@oJpf@oA~aAwDn[qArm@nBjtB`Ddb@dKth@|Oze@hf@n`AxKta@dAdW_ChYqIv_@}Ovc@a^bk@mnBtlB}m@tn@iUbO{a@vMu`AjUmr@e@kJuDaX_GmQLeThBme@nNcR|LkRbUwGzOyRpTmDtBsRhC{VeCqK_HyL}VgZcPiONsZzQiJzKwXjP{eAhR{|@lYunA`g@in@pBwWsSyTqLgMkEmGQw[zKqF?eMyEuFeJeA_\\_W}i@mLqJe]jA{LlGmInKmJfCwh@qJ{GuDuH}JwAqHvA{X{I_H{Ro@wUlCgDhDmI|XiGnFwFeAkDaNoDaCoYvJsC?zCel@|CUhPjGdHV|HwF{@{QgOaZcFx@cCjWiFc@GwPuIKoDzAib@\\eHaE_CkF~@eKfPmJpEnBrLhQrRcGcVw^mDmPuB}\\{Bcd@lc@vChEmH}@aKmXkDcJkEsGyIkHyHqC_C\\kBp`@cVZwLkE}KaLtDiF_@_DkFCuFvGyH|W_MH{k@^uRhIi_@zQmT|AgDrIwArEfFzTvIxN\\pKsJt`@qCfMoFzNmXzAqLw@oK{Ky[_RiKab@gDmW|EGsRnAgnDTkZD_U?}R`@mlBS}k@tAq`CY}{@c@wwBBom@\\gbEVurBc~Cx@opB\\ol@TFcsBn@}q@l@keA}BsmBoBkxEb@iRLctBk|A|BooBnFB}v@gUHe@whFZ{x@",
        levels: "PCE@@BA?BBCA@BA?CMDD@KEDDABKBDCDHDDFEDHEDEDJDDFDHDEEGDJDEGBDNCGECECHDFDDFCIFEEFHDCGFDFJDCGDFDHEFEIFDDGHCFDGEHFDDGEDGCMGCDGEHGEGEFCCFDIEGDFHEFAHFHFDFBAHDFHFDFDJDGBFECHEDEHEDGDJDFGEIBAC?@BCD@C?@K@@KCAECDBJCJGGBP",
        zoomFactor: 2,
        numLevels: 18
    });
    map.addOverlay(polylineJERSEY);

    // create Madison County
    var polylineMADISON = new GPolyline.fromEncoded({
        color: "#0000ff",
        weight: 2,
        opacity: 0.8,
        points: "ge`mF`zweP?egQBGxBsx@AArAsdB`B{~FIka@H{QMw_@MacEKsX?{tBMazGBy`@T{y@k@mdHt@sIDujADwtD?eSI_h@d@orEHkNIsTCs`AK{}GkAia@]uhGHku@Yi}A?it@Wm`E@o[df@e@zxDmB`nAw@bKT|~AuAn{AyDBdCdxDoC`eA`@dSmAc@ugFddFiA~l@QpqD{ArsBaBtn@[dnB}AfzAo@~fCmAdzAcBt}HoFj@ziDLrE\\~iCtA|pN_Ad{Ea@naA?n`BSfTSjqBSb~@oAn|C{@rjASj`@?rw@sDziGg@l}A?bj@KzX[jiDg@jk@Snd@RbG?~u@Snd@?v[Szc@?vQLdi@M|DSfpA?vo@Sfm@?rISbp@?rHSn_@g@bV?jCwBrcB?bQRnFSrI?bGSjHRrI}@f_BSfaAg@vrASv[z@jCa@le@EtR?vVSzOe@~Wg@~iAPbt@h@lWg^`Gyy@vV_oA~u@{c@vj@cy@vj@gw@nPwe@SgTcBk\\kHae@k\\obA{uAkWkp@on@kk@gc@oFkf@wVce@s]_`AczBw|AorCco@w`@cy@wQ_kC_b@ce@z@_c@nWonBrmFox@b|Aku@b_CoFfTcBr]sD~MaoAlbBij@pz@wTpl@wW`fAg[jt@cFtVw@nQrAfc@yLfk@uDbd@gxAScdCcBwm@S_`B_Doi@bBs`A{ESo_B?oe@wBoK?ecA",
        levels: "PE?C?DF@AAAB@B@BDC?A?B@D@@DCAAA@@MA@BBDDEDCJJ?BDA@B?BBOAB?FABBA@DA@BBBD@@C@BBBA@B@CA@A???DBA@DABA@BBAA@CCA?B@BDBMDGEEHFEDKFEFHFDHEIFGFLGFGEDDGDHDEGDEEDKBADDEJ@DDP",
        zoomFactor: 2,
        numLevels: 18
    });
    map.addOverlay(polylineMADISON);

    // create Clinton County
    var polylineCLINTON = new GPolyline.fromEncoded({
        color: "#0000ff",
        weight: 2,
        opacity: 0.8,
        points: "u_nkFhxyaPrEmaFf@oq@bFuqH?_\\`@ktAi@_eCgAu{ISsaA\\_jC_Di_OGeo@Ums@LiGEwqBzCy`C|SscLnHolD~zAIlhM~EnvAzAzjC|B`xMbMnVPtBJvHHbGCjfAz@~CT~Q@`TJbADlMJhANvZn@IrZm@|[cH~_Da@jXWbHgApk@InTU~JShQaCfrBqAzm@i@na@qGdlCiCxEdJ`b@{H~Jt@dUzJ`[{Aje@_BvA{Itn@pDd_@zObHFzj@uAtCwFpAcCeCwEKcI~Dz@rIfDtKYjW{D|KiIhJvD`XxIvCr@bJmB~LaMjO_FdSlA|GrHvGQdO{Gzd@pO~^LjUqAhB{MdAcB_AQcFiCU_NlP_JbN_@pE~Czh@~FzKjgAdo@hJEW_OrKqAnL`Mz@xV~JtCDzBsAzCyA?uMaHoAv@nEhRr^b^?pc@cMrFmA|CtCnE|JCaDlTtAhd@rNjAlF_QtCi@bFla@gArDgUqAkIvA_DdKUlJtQ~HrUvCtGxHh@nD{FrJi[fVqIhP^rL{GzXwB~DiKlDc@jElDvIdU|YxEnAdIkCtCh@~EvMRfYe@vXlCvUfc@|c@pGxFbJyBvBr@zOjc@~Drf@lD~FhFh@pLl\\lA|WvBdElGhEpEdK_@xDmCbBcNP{HfD_En^cBzAiM?{AzDhExJlEnCbFm@vGrHgAfRmAfi@}@tJlHtb@_Er\\qFxSsTdReFvI{JnpAdBzObGbHzK]~HuI~FfD[x`@gGtZz@nFiImCeCb@_AzChMtbB_HjAiFoBmPnGmGrKZdKpBbDpFNnJgF~DfDEtFmD~BmQpCgGhGbWlW`AdFdTfaAtA`B?pGmDx^~Dzj@hKni@|f@bf@pSp@nMrNxBbNmSh@iBdIvBbHpHr@lUmJ`ZeApSrF~ElMqDt[lS}DxBzSdUvg@fHxFaBnUgCtn@gIfRaCb[`MxVxFfCz_@dArQ|KhKfNtLnYhQdCbFpILpc@gB`BeD[uLfH~Tzw@zBVlP_G~FqOlVjKlD|d@{NdUawBb@if@UmmCn@}j@Qmh@?uyB`A_L?il@Tay@E{^J}j@DgYJ{KJyt@VomAX{~F~Bic@Cua@To_BfAykCjAsh@CaAu|J]_jCMsEk@{iDu}HnFezAbB_gClAToU",
        levels: "PB?CAFA@CC@@CAGCBMCEA@?A@BABB@C?AANBCA@@CAA?BAEDGFEEFEDGFFHDEDEGCEFDHEEFDDGDFDFEGDFDDGBGCKEGEFGEEICFCDGEGFDFEFEGFDGHEDFDHDFCIDFEDEDDICFDDGEBDGBFDGEFDEEECDJDEDFFDEHEDEGBBFHCFDFGDGEEHDDFEDGHDEGEGDEFDGCDIFACGCFDJEEHFFDHDEFIEGGEDHBEEIFDGEDFHEGDCGHCEHFNGBBBAC@@BA@D?A?@BC?ABK?BAKBBGP",
        zoomFactor: 2,
        numLevels: 18
    });
    map.addOverlay(polylineCLINTON);

    // create Monroe County
    var polyline1_1 = new GPolyline.fromEncoded({
        color: "#0000ff",
        weight: 2,
        opacity: 0.8,
        points: "qqyiFffqePbVw[f@{@ffA_yAfJwLrSgYjz@chAbVc[ryA}nBvQTffA?zzAahBnAcGzm@ox@x|AisB|~HslKryAKT}mAp@cpBV}g@Nmx@f@}jBt@apJft@ee@l_@Q~g@u^|_@pDtVrL|KbXW~T{Gv`@iJpD]EoOeh@}Lk@iC~Am@zE}@~d@dFhCpL{@fOnCfCxAt[zLjc@jCl_@uW`^{a@nOqDhGFzF~B~FrO`F\\hFqElH}W|QaP|]oO`]wWnMwTzLgK|Di@tItFhAf_@bDjEhNmDpO}TjHsCAhH@fi@UtCX`EKnC[~xCm@zu@uF`zHDdwAc@|f@WnLF~C_BpwACr\\bBH|kLu@lG@n^SpHb@f`As@b^xrBbJxc@fNvt@dKlh@lqAvgHbh@~mCtgBfzJ_g@bjAkqBpwCmlAvj@wNxMwzDfkCui@`r@qd@|n@}\\v{@ySj~@oDxe@kLna@kd@nx@wMzOotCxyByUdM{j@bT}hAhZstAhR}b@tCwgApRog@`Eqp@zKwmAU{|@cLwuB~Cw~@sI{h@gOs|BkiAyjBah@qYuUoUwQknAgzAoUwe@g{CwgDchAsg@g^oUon@oFwdC_]kk@sS{h@gEg|@oUc~@sN_yAg^f{CceErb@gm@~RgYnAcBR{@~C{EzaAcrA",
        levels: "P@@@@C@@HAHEDA?IKA@A?CKFEGIFEHEHBFDHBIDDEBEIEHDFDEGDFDDEDHDFDHEDN?BBAAD?CCAA@BKA?ACCKCAACBCJFMFDICGFEDFHDDKDFDDDDHEFLEGFI@FEEGDIDFEEDDKC??BACP",
        zoomFactor: 2,
        numLevels: 18
    });
    map.addOverlay(polyline1_1);

    
    //var geoxml = new GGeoXml('http://maps.google.com/maps/ms?ie=UTF8&t=h&om=1&msa=0&output=kml&msid=115254028767808398936.000440988842c6b9aa59c');
    //map.addOverlay(geoxml);
}


    //]]>