//========================================================================================================================
//========================================================================================================================

var inMap = false;


function Label(point, caption, minZoomVisible)
{
	this.caption    = caption;
	this.point      = point;
	this.minVisible = minZoomVisible;
}


Label.prototype = new GOverlay();

Label.prototype.initialize = function(gmap)
{
	var cont = document.createElement("div");
	cont.style.position        = 'absolute';
	cont.style.padding         = '0px';
	cont.style.margin          = '0px auto';
	cont.style.font            = '8px Verdana';
	cont.style.textAlign       = 'center';
	cont.style.color           = "#000";
	cont.style.weight          = "bold";
	cont.style.whiteSpace      = "nowrap";
	cont.style.filter          = "alpha(opacity:85)";
	cont.style.KHTMLOpacity    = ".85";
	cont.style.MozOpacity      = ".85";
	cont.style.opacity         = ".85";
	cont.style.display         = "block";
	cont.style.marginLeft      = -2.5 * this.caption.length + "px";


	cont.innerHTML = this.caption;
	gmap.getPane(G_MAP_MAP_PANE).appendChild(cont);


	this.gmap = gmap;
	this.cont = cont;	


};

Label.prototype.remove = function()
{
	this.cont.parentNode.removeChild(this.cont);
};

Label.prototype.copy = function()
{
	return new Label(this.point,this.caption);
};


Label.prototype.redraw = function(force)
{


	if (force)
	{
		var fSize =  this.gmap.getZoom() * 2 - 12 + (10 - this.minVisible) * 2;
		this.cont.style.font       = fSize + 'px Verdana';
		this.cont.style.display    = (this.gmap.getZoom() >= this.minVisible) ? "block" : "none";
		this.cont.style.top        = (this.gmap.fromLatLngToDivPixel(this.point).y - fSize/2)+'px';
		this.cont.style.left       = this.gmap.fromLatLngToDivPixel(this.point).x+'px';
		this.cont.style.marginLeft = -(fSize / 3) * this.caption.length + "px";
	}
};



//========================================================================================================================
//========================================================================================================================


function RLabel(point, caption, minZoomVisible, wrapper)
{
	this.caption    = caption;
	this.point      = point;
	this.minVisible = minZoomVisible;		
    this.wrapper    = wrapper;		
}


RLabel.prototype = new GOverlay();

RLabel.prototype.initialize = function(gmap)
{
	var cont = document.createElement("div");
	cont.style.position        = 'absolute';
	cont.style.padding         = '0px';
	cont.style.margin          = '0px auto';
	cont.style.font            = '8px Verdana';
	cont.style.textAlign       = 'center';
	cont.style.border          = "1px solid black";
	cont.style.backgroundColor = "#FFED52";
	cont.style.cColor          = "#FF0000";
	cont.style.whiteSpace      = "nowrap";
	cont.style.filter          = "alpha(opacity:85)";
	cont.style.KHTMLOpacity    = ".85";
	cont.style.MozOpacity      = ".85";
	cont.style.opacity         = ".85";
	cont.style.display         = "block";
	cont.style.marginLeft      = -2.5 * this.caption.length + "px";
	cont.onclick               = this.wrapper;


	cont.innerHTML = this.caption;
	gmap.getPane(G_MAP_MARKER_PANE).appendChild(cont);

	this.gmap = gmap;
	this.cont = cont;	
};

RLabel.prototype.remove = function()
{
	this.cont.parentNode.removeChild(this.cont);
};

RLabel.prototype.copy = function()
{
	return new Label(this.point,this.caption);
};


RLabel.prototype.redraw = function(force)
{


	if (force)
	{
		var fSize =  this.gmap.getZoom() * 2 - 12 + (12 - this.minVisible) * 2;
		this.cont.style.font       = fSize + 'px Verdana';
		this.cont.style.display    = (this.gmap.getZoom() >= this.minVisible) ? "block" : "none";
		this.cont.style.top        = (this.gmap.fromLatLngToDivPixel(this.point).y - fSize/2)+'px';
		this.cont.style.left       = this.gmap.fromLatLngToDivPixel(this.point).x+'px';
		this.cont.style.marginLeft = -(fSize / 3) * this.caption.length + "px";
	}
};





//========================================================================================================================
//========================================================================================================================


var categData = [];
categData.push("CONDO|condos.html|Condos");
categData.push("MARINA|marinas.html|Marinas");
categData.push("EATS|eats.html|Eats");
categData.push("LODGING|lodging.html|Lodgings");
categData.push("BARS|bars.html|Bars");
categData.push("GOLF|golf.html|Golf");
categData.push("GAS|gas.html|Gas on the water");
categData.push("RENTAL|boat_rentals.html|Watercraft Rentals");



//======================================================
//NOTE: ADD ALL MARKER CATEGORIES  ABOVE
//======================================================

var gmap;
var markerTAB   = [];
var markers     = [];
var markerData  = [];
var mileMarkers = [];


var r1 = new RLabel(new GLatLng(38.345731, -92.772549), "Gravois", 9, clickedR1);
var l1 = new GPolyline([r1.point, new GLatLng(38.280469,-92.781773)],'#000000',2, 0.75);  
var p1 = new GPolygon.fromEncoded({
polylines: [{ points: "e}hhF~u~tPdCbAih@zKsK?qFdn@~CvXqFvI}YyJ_JwIad@oaAgXdPe^j}AuPvIyj@tHgHbPcId|@eNnd@c~@|ZoL|[oAfn@?fC{ObO{TgBu@?__AoFwj@fBmg@pVcI|i@~Inc@`ItIaDre@gh@ho@pAhDiM~LvJ`@rFoFjGgBxZyYlLjSbIk_A{TqbAxOa]~n@yJ`d@a@~c@xJvUhCpa@oTvJi~@`o@e_@pVaOdS_NlGor@cImSdNiRzTuXnl@lEfC`@|I_\\fHeBYuH`DqGpV~Mt@bO`DfC`DqGzDjDt@vI`DbA`DePfHmErFrGaDf`@bIjSjGia@Z{KxJdBrKjb@jBwJpFdBZ?aDiRpQoFnAwImGeQrFgQqQmEXwI?a@rF?gCiRbIpG~NiR", 
levels: "PEDHEEIDFGIGEHDEGHE@FIB@EGIFEFHDELEDDGHFFIEFCGIG@BHFHBGAGEEDIFEEFDDGEHEEGCHFIEAFFEGFFF?EEGFP", color: "#0000ff", opacity: 0.7, weight: 1, numLevels: 18, zoomFactor: 2}],
fill: true, color: "#0000ff", opacity: 0.4, outline: true});


var r2 = new RLabel(new GLatLng(38.10, -92.44), "Grand Glaize", 9, clickedR2);
var l2 = new GPolyline([r2.point, new GLatLng(38.081437,-92.547798)],'#000000',2, 0.75);  
var p2 = new GPolygon.fromEncoded({
polylines: [{ points: "}yxgFbimtPt[sHnLkDvUgQbIrG~IrHvPqG`ToFjh@jS[hp@?vXdY`l@|DcA{JuWYwXnLoU~IyJhMmEnLmElGyJxEeP?cPaDsGt@}LqLoUkBg`@`DwI|DiCvMqGb_@hCrKeAvEuI_GkKqQgJ_m@}b@i@}SZ}[tKyg@tPqVxJsVbLPjJiCdQnMtHdIrFzKgCtInD~EhEPjBeILePu@_UXkS?cWzGgQ~QuWxBuAfSa@d\\`O~N|DnOeArC{D?cHiE_Ny`@kZaLuPsCiYvByJ`DwJ_GqUgViKmO}DsC}EvB{CnDcA?{DjB{CkRs^qA}L`DeI`DNg@rG[rH`DrGvg@|u@tCa@lKbDf@jAdBhCf@tA{@pGiAv_@JzDS`G~BjL|DvIbAXRcAvA{CpBcAvH~EbBp@hPjZfG~XbAvPoSfNiPbHqI`@gLkAw_@wBiLI{CfF{@vM?jHu@`Nu@zD|AhGjBxNLbKu@~B{@zK_BdBmC`GyY|HqJuH_B?m@eBqAiCM~AwBk@cAiGkBwBeJ_JiAcD}@kAaHlEiI`OsFdPkB|LLnBqApGLdA[bE?pCm@zCxBvFdCzDrBPxCbHjEvBlDFdFbD~FjAdFj@bLpNjBbHnEhRgPr^{GnM}_@a@}Lc@g@?JtHfC`GhExCh@nUdCd_@aDja@{GjLYb@sFpGgKxJa_@hRdCnUbAdIlG|D}AvBYp]cDxJcF|EyJcA_JQyJcAmCcHoDuEuHwBsF}OiA}I}AuDcEgUcEgCrB{Ga@oFdCyUyBcAeCcHo@IyR|DuGlEYNM_GoDoBkNz@_Cs@mCpCeBs@}AaDeBXsKlEmCa@cAhDE|Hg@r@sF}HSa@g@`GaD`DgCaDg@k@D?gP~E", 
levels: "PBEG@FCGIAGEJEGDF@ECHDDEEHEBFFEIECHCEJDFDHCEEEDIDBCAGDCHECFDJDFDGEBEGCDGCDCFFEDLAEFFDEAGCCBBDGEDACFAGEDJCGCBCIDBBBFBCEBDBHGCD@DDED@CAGDJDBBCAABHCCCFCCCAFE@IBGA?HDCFBEG?CBEH@EFDDJEBAFCEHCBCDFDCECIBD?FDFCDECFBDFBCF@FDF?E@P", color: "#ff0000", opacity: 0.7, weight: 1, numLevels: 18, zoomFactor: 2}],
fill: true, color: "#ff0000", opacity: 0.4, outline: true});

var r3 = new RLabel(new GLatLng(38.00, -92.68), "Big Niangua", 9, clickedR3);
var l3 = new GPolyline([r3.point, new GLatLng(38.007354,-92.787437)],'#000000',2, 0.75);  
var p3 = new GPolygon.fromEncoded({
polylines: [{ points: "ummgFzieuPlDhCu@~MpAtPaOxo@oDvXKtAgCjSt@vXpAvXlG|i@?n\\vEpN~F`OzGpNhEnFhHjKjBr@xMeAjU}EnLmEdNuHlGtAjEbDR`KX`Dg@vIRhGn@bDt@vMGlEL|Et@fFbAtEtG`CzH`@dFh@pEz@lChCt@?n@cD`AeBpAGpEFfDmArB{@JGlC_CxF`@hDNr]XfDP|O|ApIaGtKkDfDgChHa@`WvBt@?dFlM`DvIlG|DjErA~Fq@tKbAhAa@fGdBhDj@xFQzGwFvAgBfHwMdEkSfDqRrB_Ff@cHhAcSa@{KqBkSeB_Nu@{KyIiKkJh@{GwBgCk@mCxBeFk@sC}E`@oIR_CeBeEKeIR_ChAQrCiGlFoBhEfBpAvFbBfBRzDhDz@hLzRzGhO`@nBhLzGtDNjFsA~A?zCuDvBeIjAgCDqCdB{C?kAtHgFLuAiAiCa@_N?i@}@_BLkA~Ak@jMhJ?{GiDuE|AkDu@mA{GaDu@cHFkDrGmErJ?jBz@vAxCdBcEn@jA`D`C~Bp@bAa@jBz@|As@FGnLz@f@FlN?xI{@dNG`C~Bl@sA`CgB^oBpE_GhAuAdIoBtDtAhDkDnAyFvDwBwAiDjBaCLGxCuH|@}Eu@_FkBgFa@wBz@iGjBsDbE_CtGfCzClHMpCn@`SDz@YhCbEdIpFhGvH|AvA|H?GiAhGmGvFoGlEuHfQX~P`DzD|DeBE_JfDqN~MuPvOwPkA}LqIwBmKeMyE{NL_GqBwPeMoJuKh@_JpF}AvFo@`K}AfMwEfJoDz@oDjDi@eA|@yCEyCuCcLiAwBiAmEkBNkAlI?fBYvB`@vBo@xNcExFeFr@uDnCgCX{CjDcEYwEzCsCYyBaRgCiCa@YeC~Iz@r@g@rDGPuDzDkFYU?iIiGqAq@eF?uHwBaGfCiLfMwAlEm@nF?|Ha@`Du@|HyBrDu@pGXzG|@vBgCpNkFvIiDN_CoBuDoJ{FiGoAgB?eBsBmEmGgMwEuEoDsKgDr@eFFmF~A{GjDoDrDwBhGcAdISfJu@PwAnFkBzDDnBt@zDpAhCbBzGlCnFlFnBtDvBtDp@vHa@X?Fr@~B`@~BO|DvBtDjAvApCRvIZfFz@bLiAfBSpGkAxUsCnJDdEkBxCuDvIiA|Ea@WcEfCSP`@jAmCz@sBa@uLcAaR}HgDaG}HwF{ReIoA_CkE_B{GzCsRtEsCnBwDvBcE|AqFbAyEOyFeAuS{KsCeBmCcAcLuAqIuAcQzHkBdEMPwIfF}@jASoBLkAt@cAsBqJKeEz@{Da@}OSyC{CcHYsD[uE?gBaHyCiE}A}@mAgDPgKQkI?iIj@}LpCiLvBoD{@cIuEiH}OaDyRg@gIo@wMEi@qBqJkBmMaCke@g@qGfCiRhAcHjBcHrCcHrCqJtC}EvAkHnEuS_@_CXqG?YfCgMX{Ot@_JoA}OiDuPkJgN_NwP", 
levels: "PEDFD@?GADDIABEACHCEBFCHACBDBCACAGCBADKCBEAD@C?F?BCAFCCDH@F@EBFCCDACIADFACD@HBABGEDADDEG@DCECCJDFCCDDCBFECBIDABCBEFBC?BCGDGDDEBEBHDECEEBDCBE?C?DBBDHBBC?EDECDGE@CBEBAECDIDFB?BFCEEAGDBEFDIEDEBLEDFDCFEIECBDGCFCCDEBDHAACCFDCCDHCDFD@GDCD@G?DAECEHCFBB?DCECEDIDECACC@DCGBDBJCEBDCBDAHBBFBDC?DCBDBGCB@HC@CCFACECCBDIADECDCCHCC@CBGBD@ADAGD?DBKBCCDCCDCD?AH@CFB@BEAGBEIC??CADAG@DAACD@EB?CCBGCFBP", color: "#00AA00", opacity: 0.7, weight: 1, numLevels: 18, zoomFactor: 2}],
fill: true, color: "#00AA00", opacity: 0.4, outline: true});

var r4 = new RLabel(new GLatLng(38.05, -92.94), "Little Niangua", 9, clickedR4);
var l4 = new GPolyline([r4.point, new GLatLng(38.061572,-92.860565)],'#000000',2, 0.75);  
var p4 = new GPolygon.fromEncoded({
polylines: [{ points: "ycggFbpquP?{@vB~E`@dFFnBwHnMLz@dFj@L`D}@tHgDtE`@rDlDYTfBwAtAqAbEiAfJDtA{@fBLjAsBjDYzCSbEcD|AcEbD{@i@MyBn@oCkBgFLeEzD}AbA}D{@eBcAa@qEeERgB]{@o@cAUyCb@{@Y{@u@CkA_FTaEa@kADe@o@aAIq@a@Q{BeC_EgCkC_AeEBkA_AuBNgF_AmA~@}AF_AzA{CiAaB\\wAoBsBr@_EPy@p@cBb@eD`BcAz@yAn@[h@{ATwBtAeBIH|BgEhIm@`@eDxHa@fA{@j@cAjCj@~`@jBQjDnAXv@ZJhA~CU`AzAf@zBrBElA[l@IdBN@lAm@f@m@`A[`Hr@t@Ej@`BQrBPbBf@`A`@HjCy@v@OhAIxBt@`@AXX|Cx@d@BP|@fAbBvAd@bCr@ZnBn@l@RZxApA`Bb@^tAh@p@v@|A`BlC`AbCThB{@jE{@b@}AAwBY}@w@g@y@i@a@Om@}AgCH{@uBeEGq@Ym@Ao@e@_@iAqDcFwCyAAwAkBaAVa@f@o@@m@v@_@]S`@iExBkBrA?t@k@\\Hz@u@ROjCLvCMfCDfABrCRzB`ApBx@j@TxAt@bBb@fBdAd@vBdEt@fDOvAkA~Dq@p@iAC}@a@_STeBwEyBcAwM|DeBIkFjDSnBeBrDR~IhEd[vAvBKfFjFxG~BlAz@|AzK`KrB?pBuAbEbLF~AR~BhIbW|DvIt@vBfCFXbDRzDdFhNbI|[jB~ELxJxMze@`@lEUhGwAhGmCfFgDlAkBjAiLkL{KcH_JeAqMi@{Ct[iEtPiAxF`@bHo@~QhApQpAjHrCtEmCuLu@wFYaNbAqVvB_QpEqYZoFl@kAlCN|HbAbPxFlGxJnAtAbH|AvAs@nLyRnA{@YaC`@gFwAa@a@cWkBiCDgJa@}AsCaC_C}AkI{Z_CcOoAsHDkH}AeEGaGkBgFaDaO{G_QiAgCaLcOcHiRgH}HoDiDeBeLdBcHbBwBdFq@~Ep@iAnBqEXhEjDxIxGrGdApEeAR{@vAz@`DkHhAYhDqYqEgU}@{@uAkLnAmHpBa@pAdER~IdBvIpE~F[vPhHdI~QvJhEzC`DlMaLzRqIvIjBp@nDiDzGQbQqNYmEXsOqIoMY_GkB`@}LkKlGiKxBqG?gQM}DpA}EwHeP_GgJgNuP}IcHaDeIuSsGyBvBwEoF[aGbAgCnDs@vEPjBaG`OiClOeBfCtApF`@xB|EjEjDf@vByJhJdFbAJnMxBfCt@t^zGbPf@fBdIbHyB}S`DcAdF~MnAcAu@kDjBuH|LgCh@QbI?L}EgNyBt@yCvHoMXq@xBQdFaG[yCjEyClGnFpAqGgKiRXyCvEgBrFbAX?sCoF?kDsFeBkBmLpA_GqA{CbAq@g@gBXyCkBwB`DaG", 
levels: "PCD@EECDEDEDDFBDBCCCC@EBICBCCEDFBBEC@BCCBCCCAAAEABBICCCDBCECDDBGBABABCBCFDBB?BBIFCBAECDBDAAGAAADAEBBBFBA@DAAA@FAC?DB@CBDB@@BAIECAFA@BADBBAABBFCCEABBCHAADBBCBFAA?AEBCAACCCEAHCBCECFCEDBICCCFCBBECFB@CE@DF@DBBDDCICEDAGCFBHDAFCCECLBCFDABBHACEADGCBIBCDCDEC@DE?CCCDBG@DCD@EHCEFEDE?DGCDECHECCEIDCCDEFDBEGCHDDEIBFDEDGCEADHBDCDFEFDIDCEFBECHCCFFEDDFADIGEFCDF@CGEEG@DCDCFHEDFD@FCEDFCDCCDEP", color: "#FFA81E", opacity: 0.7, weight: 1, numLevels: 18, zoomFactor: 2}],
fill: true, color: "#FFA81E", opacity: 0.4, outline: true});


var r5 = new RLabel(new GLatLng(38.205, -92.90), "Osage Main", 9, clickedR5);
var l5 = new GPolyline([r5.point, new GLatLng(38.181628,-92.913952)],'#000000',2, 0.75);  
var p5 = new GPolygon.fromEncoded({
polylines: [{ points: "o~~gFdenvP_JkSt@uHjMqGpQ?pFePt@uf@mGal@yJyv@{OwXo\\ia@cYoc@_Jse@?ia@hHal@nLyh@fHyg@~Nkb@jMqUtPuIbTcOhM_NxJwIlWkD|TiRdN_NpQkS|Tuf@bIqd@`Dkb@eCmb@wPoc@sVst@yZk_AyUyYgX{ZeY_k@oAuWjBoUzOcOvUePt[fBxe@lTzO|L`TvXp\\jDpQlExZa@xJ?|TiClR_NbTe_@jRqd@dNiR`DcPlR{KvPsVrf@g`@hSwIn\\wIb_@ia@dC_NsC{KqIePuHsHqQqNwEo\\oOio@oLiRuHe_@yBuf@sCy`@hEiZrCgQcI_\\kBeBcItAsFdB_GjD}ItP_JrO{G~EoD~McIxJkUrt@aTdW_RhRgSrH{WzKea@fJeYvBu[gCyReP}Lo\\gHyh@MoMu@io@cAih@?u_@zOoaA`Dka@dFcWjJ}SpA{ZdCef@hEa^t@ki@g@}ZyBeXiEkSuPeWcIqGk]{K}_@aGe^r@mb@pGkBb@eVhKoIjSgCvXoAbe@`Dxa@Xza@kB~j@vEbW`DzRdNnaAnAtf@Zza@sCdWdCdg@kBnM|D`s@vBrm@bAl[g@`]iEzp@}Ltf@kUv_@od@l[aL`@eVQi`@OgS{CsKzKqQpFoLiJgPyRoDy`@_Oa]sKmToT_d@uSaiAaDkx@g@g`@bAce@zLyw@dNgdAhE{SMas@`Dmj@|Dio@dCkx@lG_s@zWuyAvMcWtPwXzGmLdN|DzDdIL`@`DhRcAnUuHxJ_GjDXtPKxJ~FdIMlElGb^aLuAgCqNsKkLkBuAoAfCkElL_Gza@aDpl@}A~q@oAbm@qAxh@wB~j@uCtm@eC~c@qIjKmD|TeFd_@sC~q@dCjb@fCfv@dC|Z~FlM`Wv_@rS`Vlb@r^`T`Nz_@zKfHuAt[mL~IaO~N}Zt@sAvEqd@Mct@f@ef@eCyh@aDwg@sCsl@?mq@u@_pAkJcm@cT_k@`DeX|Aih@}A}i@jBiZ~I}b@jJkZtPaVtSiRjRwIxZmErYa@pYxCv`@|LrSnFrVpNbI~EzOr@jJbHnGvJ|A~LL`@_Bbf@bAlgA?ha@kJdm@k]`bDkMftAkBhh@t@hYdF`]|LdX`DxCfP?hSwBlWsO~ImExRmThPyJ`TyY`G}L?{RjJiR~N{K~QoUj`@qUlWeIxUr@zRpNdNxYzGzZi@jKwEbWaD|LYjSxJzh@dYrcAhXnTlRzKhXre@fC|L?`l@eI`OmGjDis@rt@kh@lb@gy@`l@yUzZqAbAql@~gAyp@xh@iXjSmW?gn@yJsa@od@}d@g`@w`@yJwPdBqFbOxJtWzOvJpa@zh@|_@d}@fSlq@hXvu@|Ifo@?rbAyJf`@w`@b|@{_@re@og@hRkx@|ZsVxh@{O~[gS~\\}I|i@u@nc@?dBvEnUrVdm@xJ~MvUlE|TvX|DnUfHre@qApd@dNb{@qFjb@k]pd@?zZsK?}TmT",
levels: "PEGEGEHBGCCHFDJCEDGCDBFFCBHFDJFC@GBEGDKCFHEDGCFADJEDDEGDEFCFELCEBFCEEHBF@FCKBCFADDDEFBIAEDGEKEF?ACHDEDFADECICEGDELDEBGDIDDDFACGBDDDEC@GCEJEHC?DGDGCLFB?GFCIEBCFE@CDHFB@NF@CGFCGBEECHEEAHADFC??DBAFEEDIBCGCDLCEHCFB?JEBFAAEBGEFDDDICFDHEDLEBE@EGCE@JDBGDEDGDEKECFBGDDFEEFDHDFKFDGCBDGDHCFDLEHDECFBDFAJDGDGFFKEEFDCHEJDGF@GACJE@HDGEEHAEEIFFHEP", color: "#000000", opacity: 0.7, weight: 1, numLevels: 18, zoomFactor: 2}],
fill: true, color: "#000000", opacity: 0.4, outline: true
    });

//==============================================================================================================
//==============================================================================================================

function getURLParam(strParamName){
  var strReturn = "";
  var strHref = window.location.href;
  if ( strHref.indexOf("?") > -1 ){
    var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase();
    var aQueryString = strQueryString.split("&");
    for ( var iParam = 0; iParam < aQueryString.length; iParam++ ){
      if (
		aQueryString[iParam].indexOf(strParamName + "=") > -1 ){
        var aParam = aQueryString[iParam].split("=");
        strReturn = aParam[1];
        break;
      }
    }
  }
  return strReturn;
}

function GetPageFromType(type) {
    for (var c = 0; c < categData.length; c++) {
        var record = categData[c].split("|");
        if (record[0] == type)
            {return record[1];}
    }

    return "index.html";
}


function getletter(num) {
	if (num < 10) 
		{return num;}
	else {
	    if (num == 10) { return "A"; }
	    if (num == 11) { return "B"; }
	    if (num == 12) { return "C"; }
	    if (num == 13) { return "D"; }
	    if (num == 14) { return "E"; }
	    if (num == 15) { return "F"; }
	}
}


function hexfromdec(num) {
	if (num > 65535) { return ("err!"); }
	first = Math.round(num/4096 - 0.5);
	temp1 = num - first * 4096;
	second = Math.round(temp1/256 - 0.5);
	temp2 = temp1 - second * 256;
	third = Math.round(temp2/16 - 0.5);
	fourth = temp2 - third * 16;
	return (""+getletter(third)+getletter(fourth));
}





function URLDecode(encoded)
{
   // Replace + with ' '
   // Replace %xx with equivalent character
   // Put [ERROR] in output if %xx is invalid.
   var HEXCHARS = "0123456789ABCDEFabcdef"; 
   var plaintext = "";
   var i = 0;
   while (i < encoded.length) {
       var ch = encoded.charAt(i);
	   if (ch == "+") {
	       plaintext += " ";
		   i++;
	   } else if (ch == "%") {
			if (i < (encoded.length-2) && HEXCHARS.indexOf(encoded.charAt(i+1)) != -1 && HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
				plaintext += unescape( encoded.substr(i,3) );
				i += 3;
			} else {
				alert( 'Bad escape combination near ...' + encoded.substr(i) );
				plaintext += "%[ERROR]";
				i++;
			}
		} else {
		   plaintext += ch;
		   i++;
		}
	} // while

   return plaintext;
}



function HideBoundaries()
{
	p1.hide();
	p2.hide();
	p3.hide();
	p4.hide();
	p5.hide();

	l1.hide();
	l2.hide();
	l3.hide();
	l4.hide();
	l5.hide();


	gmap.removeOverlay(r1);
	gmap.removeOverlay(r2);
	gmap.removeOverlay(r3);
	gmap.removeOverlay(r4);
	gmap.removeOverlay(r5);

}


function ShowBoundaries()
{
	p1.show();
	p2.show();
	p3.show();
	p4.show();
	p5.show();

	l1.show();
	l2.show();
	l3.show();
	l4.show();
	l5.show();


	gmap.addOverlay(r1);
	gmap.addOverlay(r2);
	gmap.addOverlay(r3);
	gmap.addOverlay(r4);
	gmap.addOverlay(r5);

}


function isFeatured(record)
{
return (record[11] > 0) && (record[12] > 0);
}


function isMileMarker(q)
{
  if (q.length > 5)
    {return false;}
 
  var mm = parseFloat(q, 10);
  if ( (mm >=1) && (mm <= 50) )
	{return true;}

  return false;
}

var rVal = "";
var tVal = "";
function areBothSelected() 
{
    var form = document.getElementById("mileForm");

	if (form == null)
      return;

    rVal = "";
    tVal = "";

    for (var r = 0; r < form.river.length; r++) 
	{
        if (form.river[r].checked)
            {rVal = form.river[r].value;}
	}

    for (var t = 0; t < form.otype.length; t++)
	{
        if (form.otype[t].checked)
            {tVal = form.otype[t].value;}

        if (rVal.length && tVal.length) 
        {
            //alert("R = " + rVal + "   T = " + tVal);
			var q = document.getElementById("map_input").value;
            window.location = GetPageFromType(tVal) + "?r=" + rVal + "&q=" + parseFloat(q, 10);
        }
	}

}

function clickedR1() {ShowMileMarkerView("Gravois");}
function clickedR2() {ShowMileMarkerView("Grand Glaize");}
function clickedR3() {ShowMileMarkerView("Big Niangua");}
function clickedR4() {ShowMileMarkerView("Little Niangua");}
function clickedR5() {ShowMileMarkerView("Osage Main");}

function ShowMileMarkerView(aRiver) {

var sView = document.getElementById('sView');
if (sView)
 { sView[1].selected = 1;}


    HideBoundaries();
    ShowBoundaries();

    var sResults = document.getElementById('sResults');
    var mResults = document.getElementById('mResults');
	var sTitle   = document.getElementById('sTitle');
	sTitle.style.visibility = 'hidden';

   sResults.innerHTML = "";
   mResults.innerHTML = "";

    
    for (m = 0; m < markerTAB.length; m++)
        { markerTAB[m].hide(); }

     var c1 = (aRiver == "Osage Main") ? " checked" : "";
     var c2 = (aRiver == "Grand Glaize") ? " checked" : "";
     var c3 = (aRiver == "Big Niangua") ? " checked" : "";
     var c4 = (aRiver == "Gravois") ? " checked" : "";
     var c5 = (aRiver == "Little Niangua") ? " checked" : "";

	areBothSelected(); // to get the category

	 var cc1 = (tVal == "CONDO")   ? " checked" : "";
	 var cc2 = (tVal == "MARINA")  ? " checked" : "";
	 var cc3 = (tVal == "RENTAL")  ? " checked" : "";
	 var cc4 = (tVal == "GAS'")    ? " checked" : "";
	 var cc5 = (tVal == "BARS")    ? " checked" : "";
	 var cc6 = (tVal == "EATS")    ? " checked" : "";
	 var cc7 = (tVal == "GOLF")    ? " checked" : "";
	 var cc8 = (tVal == "LODGING") ? " checked" : "";
    

       
    var rForm = "";
	rForm += "<span class='sTitle'>Pick a Branch and a Category</span>";
    rForm += "<form id='mileForm'>\n";
    rForm += "<br><b>Which Branch?</b>";
    rForm += "<table style='margin: 0px; padding: 0px;' cellspacing='0' cellpading='0'>";
    rForm += "<tr><td><input type='radio' name='river' value='Osage' style='width: 20px; margin: auto 0px;' onclick='areBothSelected();' " + c1 + "/></td><td>Osage (Main)</td></tr>";
    rForm += "<tr><td><input type='radio' name='river' value='Grand Glaize' style='width: 20px; margin: auto 0px;'  onclick='areBothSelected();' " + c2 + "/></td><td>Grand Glaize</td></tr>";
    rForm += "<tr><td><input type='radio' name='river' value='Big Niangua' style='width: 20px; margin: auto 0px;'  onclick='areBothSelected();' " + c3 + "/></td><td>Big Niangua</td></tr>";
    rForm += "<tr><td><input type='radio' name='river' value='Gravois' style='width: 20px; margin: auto 0px;'  onclick='areBothSelected();' " + c4 + "/></td><td>Gravois</td></tr>";
    rForm += "<tr><td><input type='radio' name='river' value='Little Niangua' style='width: 20px; margin: auto 0px;'  onclick='areBothSelected();' " + c5 + "/></td><td>Little Niangua</td></tr>";
    rForm += "</table>";

    rForm += "<br><b>Select a Category</b>";
    rForm += "<table style='margin: 0px; padding: 0px;' cellspacing='0' cellpading='0'>";
    rForm += "<tr><td><input type='radio' name='otype' value='CONDO' style='width: 20px; margin: auto 0px;' onclick='areBothSelected();' " + cc1 + "/></td><td>Condos</td></tr>";
    rForm += "<tr><td><input type='radio' name='otype' value='MARINA' style='width: 20px; margin: auto 0px;' onclick='areBothSelected();' " + cc2 + "/></td><td>Marinas</td></tr>";
    rForm += "<tr><td><input type='radio' name='otype' value='RENTAL' style='width: 20px; margin: auto 0px;' onclick='areBothSelected();' " + cc3 + "/></td><td>Watercraft Rentals</td></tr>";
    rForm += "<tr><td><input type='radio' name='otype' value='GAS' style='width: 20px; margin: auto 0px;' onclick='areBothSelected();' " + cc4 + "/></td><td>Gas on the water</td></tr>";
    rForm += "<tr><td><input type='radio' name='otype' value='BARS' style='width: 20px; margin: auto 0px;' onclick='areBothSelected();' " + cc5 + "/></td><td>Bars</td></tr>";
    rForm += "<tr><td><input type='radio' name='otype' value='EATS' style='width: 20px; margin: auto 0px;' onclick='areBothSelected();' " + cc6 + "/></td><td>Eats</td></tr>";
    rForm += "<tr><td><input type='radio' name='otype' value='GOLF' style='width: 20px; margin: auto 0px;' onclick='areBothSelected();' " + cc7 + "/></td><td>Golf</td></tr>";
    rForm += "<tr><td><input type='radio' name='otype' value='LODGING' style='width: 20px; margin: auto 0px;' onclick='areBothSelected();' " + cc8 + "/></td><td>Lodging</td></tr>";
    rForm += "</table>";
    rForm += "</form>";

	sResults.style.height = "0px";
    mResults.innerHTML = rForm;

	areBothSelected();

	if (aRiver != "none" && (!rVal.length || !tVal.length) )
		alert("Select a Category: Condos, Lodging, Marinas, Eats, Golf, Bars, Watercraft Rentals.");

}

function generalView()
{
document.getElementById("map_input").value = "";
search();
}

function search()
{
var sView = document.getElementById('sView');
if (sView)
 { sView[0].selected = 1;}


var m;
var q = document.getElementById("map_input").value;

var sTitle   = document.getElementById('sTitle');
if (sTitle)
	sTitle.style.visibility = 'visible';


//============================================
// user started searching on the index page
//============================================
if (CATEG == "FRONT_PAGE")
  {
	if (!q.length)
		{return;}

	if (!isMileMarker(q))
	{
	for (m = 0; m < markerData.length; m++)
	  {
		if (markerData[m].toLowerCase().indexOf(q.toLowerCase()) != -1)
		{
			var record = markerData[m].split("|");
			var cat    = record[9].toUpperCase();
			window.location = GetPageFromType(cat) + "?q=" + q;
			return;
		}
	  }
	}

	window.location = "condos.html?q=" + q;
	return;
  }

  //============================================
  // other pages
  //============================================

  //need to reload the page
  if (getURLParam("r").length > 0)
  {
      window.location = GetPageFromType(CATEG) + "?q=" + q;
      return;
  }


  var found         = false;
  var ftResults     = "";
  var sResults = document.getElementById('sResults');
  var mResults = document.getElementById('mResults');
  sResults.innerHTML = "";
  mResults.innerHTML = "";

  if (isMileMarker(q)) {
      ShowMileMarkerView("none");
	return;
  }

  found = false;
  HideBoundaries();  
  for (m = 0; m < markers[CATEG].length; m++)
  {
	var markData = markers[CATEG][m].join(" ");

	if (markData.toLowerCase().indexOf(q.toLowerCase()) == -1)
    {
		markerTAB[m].closeInfoWindow();		
		markerTAB[m].hide();

		if (isFeatured(markers[CATEG][m]))
		{
		  ftResults += "<li class='Feat'><a href='javascript:GEvent.trigger(markerTAB[" + m + "],\"click\");'>" + markers[CATEG][m][0] + "</a></li>\n";
		  markerTAB[m].show();
		  continue;
		}
		
    }
    else
    {
        found = true;
		markerTAB[m].show();
		var ftClass = isFeatured(markers[CATEG][m]) ? "Feat" : "nFeat";
		sResults.innerHTML += "<li class='" + ftClass + "'><a href='javascript:GEvent.trigger(markerTAB[" + m + "],\"click\");'>" + markers[CATEG][m][0] + "</a></li>\n";
    }
			
  }

  if (!found)
  {
	sResults.innerHTML += "No results found. Please try a different query.<br/>";
  }


  if (ftResults.length > 0)
  {
	sResults.style.height = "";
	sResults.innerHTML += "<br/><span id='sTitle2'>Featured Results:</span>";
	sResults.innerHTML += "<ol>";
	sResults.innerHTML += ftResults;
	sResults.innerHTML += "</ol>";
  }

}

function MakeDesc(record) 
{
if ( !isFeatured(record) )
	{return "<b>" + record[0] + "</b>";}

var desc = "";
var addr = record[1] + ", " + record[2] + ", " + record[3].toUpperCase() + " " + record[4];

desc += "<b>" + record[0] + "</b><br>" + addr + "<br>";

if (record[5].length)
	{desc += "Phone: " + record[5] + "<br>";}

if (record[6].length)
{
	var www = record[6];
	desc += "Website: <a href='http://" + www +"'>" + record[6] + "</a><br>";
}


desc += "<br>";

desc += "Mile marker: " + record[13] + "<br>";
desc += "River: " + record[15] + "<br>";
desc += record[16];
return desc;

}


function MarkerClicked(marker,desc)
{
gmap.setCenter(marker.getLatLng(), 16);
marker.openInfoWindowHtml(desc, {pixelOffset:new GSize(32,5)});
}

function createMarker(record) 
{
var idx = markerTAB.length + 1;
var feat               = isFeatured(record);
var point              = new GLatLng(parseFloat(record[7].replace(",", "."), 10), parseFloat(record[8].replace(",", "."), 10));
var tIcon              = new GIcon();
tIcon.image            = (feat) ? "images/markers/f" + idx + ".png"  : "images/markers/o" + idx +".png";
tIcon.shadow           = (feat) ? "images/fs.png" : "images/os.png";
tIcon.iconSize         = (feat) ? new GSize(20, 34) : new GSize(12, 20);
tIcon.shadowSize       = (feat) ? new GSize(37, 34) : new GSize(22, 20);
tIcon.iconAnchor       = new GPoint(6, 20);
tIcon.infoWindowAnchor = (feat) ? new GPoint(15, 1) : new GPoint(5, 1);
var markerOptions      = { icon:tIcon};
var marker             = new GMarker(point, markerOptions);
var desc               = MakeDesc(record);

GEvent.addListener(marker, "click", function() {MarkerClicked(marker,desc);});  
GEvent.addListener(marker, "dblclick", function() {GEvent.trigger(marker,"click");});  
return marker;
}

function InOutGMAP(state)
{

if (!state)
  {
    gmap.disableDoubleClickZoom();
    gmap.disableScrollWheelZoom();
	return;
  }

gmap.enableDoubleClickZoom();
gmap.enableScrollWheelZoom();


}


//==============================================================================================================
//==============================================================================================================
function DoIt() 
{
    if (GBrowserIsCompatible()) {
		if (document.getElementById("mapBOX_Main") !== null)
			document.getElementById("mapBOX_Main").innerHTML += "<div style='border:2px solid #000;width:180px;text-align:center;font-weight:bold;position:relative;top:-440px;left:70px;z-index:10000000;float:left;background:#fff999;'>Click on map to zoom</div>";
		if (document.getElementById("mapBOX") !== null)
			document.getElementById("mapBOX").innerHTML += "<div style='border:2px solid #000;width:180px;text-align:center;font-weight:bold;position:relative;top:-440px;left:70px;z-index:10000000;float:left;background:#fff999;'>Click on map to zoom</div>";

        gmap = new GMap2(document.getElementById("lakeMAP"));
        gmap.setCenter(new GLatLng(38.165731, -92.722549), 10);
        gmap.setUIToDefault();
        gmap.disableDoubleClickZoom();
		gmap.disableScrollWheelZoom();


        var river = getURLParam("r").toUpperCase();


   
        // DIVIDE ALL MARKES INTO CATEGORIES
        markers.FRONT_PAGE = [];
        for (var m = 0; m < markerData.length; m++) {
            var record = markerData[m].split("|");

            var cat = record[9].toUpperCase();
            var feat = isFeatured(record);

            if (markers[cat] === undefined)
            { markers[cat] = []; }

            markers[cat].push(record);

            if (feat)
            { markers.FRONT_PAGE.push(record); }
        }



        var sResults = document.getElementById('sResults');
        
        
        // add matching markers and result items
        if (CATEG == "FRONT_PAGE") {

            sResults.innerHTML += "<b>Feature Ads</b><br/>\n";

            for (var c = 0; c < categData.length; c++) 
            {
                var cResults = "";
                var cat      = categData[c].split("|")[0];
                var catStr   = categData[c].split("|")[2];

				if (markers[cat] === undefined)
					{continue;}

                var cNumFix = "";
                for (var m = 0; m < markerTAB.length; m++)
                    {cNumFix += "<li style='height: 0px; visibility:hidden; *display: inline;'></li>\n";}

                for (var m = 0; m < markers[cat].length; m++) {

                    if (!isFeatured(markers[cat][m]))
                        {continue;}
                        
                    var marker = createMarker(markers[cat][m]);                                                                
                    cResults += "<li class='Feat'><a href='javascript:GEvent.trigger(markerTAB[" + markerTAB.length + "],\"click\");'>" + markers[cat][m][0] + "</a></li>\n";
                    markerTAB.push(marker);

                }

                if (cResults.length > 0) {
                    sResults.innerHTML += "<div>" + catStr + "</span><ol>\n" + cNumFix +  cResults + "</div>\n";
                }
            }
            
        
        }
        else if (markers[CATEG] !== undefined)
		{
            var found = false;
            for (var m = 0; m < markers[CATEG].length; m++) {

                if ((river.length > 0) && (markers[CATEG][m][15].toUpperCase() != river)) 
					{continue;}

                var ftClass = isFeatured(markers[CATEG][m]) ? "Feat" : "nFeat";
                var marker = createMarker(markers[CATEG][m]);
                

                found = true;
                sResults.innerHTML += "<li class='" + ftClass + "'><a href='javascript:GEvent.trigger(markerTAB[" + markerTAB.length + "],\"click\");'>" + markers[CATEG][m][0] + "</a></li>\n";
				markerTAB.push(marker);
            }

            if (!found) {
                sResults.innerHTML += "No results found. Please try a different query.<br/>";
            }

        }
        
        



        for (var m = markerTAB.length - 1; m >= 0; m--)
        { gmap.addOverlay(markerTAB[m]); }



        // add mile markers
        for (var m = 0; m < mileMarkers.length; m++) {
            var record = mileMarkers[m].split("|");
            var point = new GLatLng(parseFloat(record[1].replace(",", "."), 10), parseFloat(record[2].replace(",", "."), 10));
            var label = new Label(point, record[0], 10);
            gmap.addOverlay(label);
        }

        p1.hide();
        p2.hide();
        p3.hide();
        p4.hide();
        p5.hide();

        l1.hide();
        l2.hide();
        l3.hide();
        l4.hide();
        l5.hide();


		GEvent.addListener(gmap, "click", function() { InOutGMAP(1); });
		GEvent.addListener(gmap, "mouseout", function() { InOutGMAP(0); });

        GEvent.addListener(p1, "click", function() { ShowMileMarkerView("Gravois"); });
        GEvent.addListener(p1, "dblclick", function() { GEvent.trigger(p1, "click"); });


        GEvent.addListener(p2, "click", function() { ShowMileMarkerView("Grand Glaize"); });
        GEvent.addListener(p2, "dblclick", function() { GEvent.trigger(p2, "click"); });

        GEvent.addListener(p3, "click", function() { ShowMileMarkerView("Big Niangua"); });
        GEvent.addListener(p3, "dblclick", function() { GEvent.trigger(p3, "click"); });

        GEvent.addListener(p4, "click", function() { ShowMileMarkerView("Little Niangua"); });
        GEvent.addListener(p4, "dblclick", function() { GEvent.trigger(p4, "click"); });

        GEvent.addListener(p5, "click", function() { ShowMileMarkerView("Osage Main"); });
        GEvent.addListener(p5, "dblclick", function() { GEvent.trigger(p5, "click"); });  

		gmap.addOverlay(l1);
		gmap.addOverlay(l2);
		gmap.addOverlay(l3);
		gmap.addOverlay(l4);
		gmap.addOverlay(l5);


        gmap.addOverlay(p1);
        gmap.addOverlay(p2);
        gmap.addOverlay(p4);
        gmap.addOverlay(p3);
        gmap.addOverlay(p5);


        var query = getURLParam("q");

        if ((river.length > 0) && (query.length > 0) ) 
		{
        river = URLDecode(river);
		//alert(river.toUpperCase());

		for (var m = 0; m < mileMarkers.length; m++) 
			{
			var record = mileMarkers[m].split("|");
			
			if ( (record[0] == parseFloat(query, 10)) && (river.toUpperCase() == record[3].toUpperCase()) )
				{
				var point = new GLatLng(parseFloat(record[1].replace(",", "."), 10), parseFloat(record[2].replace(",", "."), 10));
				gmap.setCenter(point, 12);
				}
			}

		ShowBoundaries();

		}

        if (!river.length && query.length > 0) {
            document.getElementById("map_input").value = URLDecode(query);
            search();
        }

        //eval(unescape("%61%6C%65%72%74%28%27%54%68%69%73%20%6D%65%73%73%61%67%65%20%77%69%6C%6C%20%64%69%73%73%61%70%65%61%72%20%61%66%74%65%72%20%70%61%79%6D%65%6E%74%2E%5C%6E%20%43%6F%70%79%72%69%67%68%74%20%28%63%29%20%59%41%46%55%44%2E%27%29%3B"));		




    }
}

function compareMarker(a, b)
{
var aRec = a.split("|");
var bRec = b.split("|");

var aFeat = ((aRec[11] > 0) && (aRec[12] > 0)) * 1000;
var bFeat = ((bRec[11] > 0) && (bRec[12] > 0)) * 1000;

var res = (aRec[10] - aFeat) - (bRec[10] - bFeat);

return res;
}

document.getElementById("lakeMAP").innerHTML = "<br/><b>Loading map... please wait a moment.</b>\n";

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}



process_it = function(doc) {
    lines = doc.split("\n");
    for (var i = 1; i < lines.length; i++) {
        if (lines[i].length >= 15)
            {
			  var record = lines[i].split("|");
			
			  if (record.length < 18)
				{ 
				  alert("Error in line " + i + ". Expected at least 18 fields found " + record.length + " [" + lines[i] + "]"); 
				  return;
				}


			  if ( (parseFloat(record[7].replace(",", "."), 10) > 0) + (parseFloat(record[8].replace(",", "."), 10) < 0) )
				markerData.push(lines[i]);
            }
    }
    markerData.sort(compareMarker);
    DoIt();
};


process_itFirst = function(doc) {
    lines = doc.split("\n");
    for (var i = 1; i < lines.length; i++) {
        if (lines[i].length >= 3)
            {				
				mileMarkers.push(lines[i].trim());
			}
    }
    GDownloadUrl("db/lake_ozarks_database.csv", process_it);
};

GDownloadUrl("db/mile_marker_data.csv", process_itFirst);














