﻿
      var map = null;
      var geocoder = null;
      var gmarkers = [];
      var url = null;
      var page_bar_html = null;
      var side_bar_html = "<table border=0 cellpadding=2 cellspacing=0>";
      var neLng = null;
      var neLat = null;
      var swLng = null;
      var swLat = null;  
      var searchFieldVal = null; 
    
      // Create a base icon for all of our markers that specifies the
      // shadow, icon dimensions, etc.
      var baseIcon = new GIcon();
      baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
      baseIcon.iconSize = new GSize(20, 34);
      baseIcon.shadowSize = new GSize(37, 34);
      baseIcon.iconAnchor = new GPoint(9, 34);
      baseIcon.infoWindowAnchor = new GPoint(9, 2);
      baseIcon.infoShadowAnchor = new GPoint(18, 25);

      //Detect iPhone and alert user of the app
      function iPhoneAlert() {
          if ((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i))) {
             if (document.cookie.indexOf("iphone_redirect=false") == -1) {
                  var question = confirm("CigarPlaces.com is available as an iPhone App! Touch OK to see the App, or Cancel to continue to the site.")
                  if (question) {
                      window.location = "http://bit.ly/cigarsiteapp";
                  }else{
                  SetCookie("iphone_redirect=false", 1, 180);
                    }
              }
          }
      }

      function SetCookie(cookieName,cookieValue,nDays) {
         var today = new Date();
         var expire = new Date();
         if (nDays==null || nDays==0) nDays=1;
         expire.setTime(today.getTime() + 3600000*24*nDays);
         document.cookie = cookieName+"="+escape(cookieValue)
                         + ";expires="+expire.toGMTString();
    }

      function initialize() {
          iPhoneAlert();
      if (GBrowserIsCompatible()) {      
        map = new GMap2(document.getElementById("map"));
       
        geocoder = new GClientGeocoder();
        map.addControl(new GLargeMapControl());              
        map.addControl(new GMapTypeControl());

        GEvent.addListener(map, "click", function () {
            map.closeInfoWindow();
        });

        if (location.href.indexOf("#s=") != -1) {
            var searchstring = location.href.substr(location.href.indexOf("#s="));
            searchstring = searchstring.substring(3);
            showAddress(unescape(searchstring));

        } else {
            map.setCenter(new GLatLng(37.0625, -95.677068), 4);

            GDownloadUrl(buildPageUrl(), function (data, responseCode) {
                var xml = GXml.parse(data);
                var xmlpages = xml.documentElement.getElementsByTagName("numofresults");
                for (var i = 0; i < xmlpages.length; i++) {
                    pages = xmlpages[i].getAttribute("results");
                }
                var markers = xml.documentElement.getElementsByTagName("marker");
                for (var i = 0; i < markers.length; i++) {
                    var number = i + 1;
                    var point = new GLatLng(parseFloat(markers[i].getAttribute("flLat")),
                                       parseFloat(markers[i].getAttribute("flLong")));
                    var html = buildInfoWindow(markers[i].getAttribute("intLocationId"), markers[i].getAttribute("txtName"), markers[i].getAttribute("txtAddress"), markers[i].getAttribute("txtAddress2"), markers[i].getAttribute("txtCity"), markers[i].getAttribute("txtState"), markers[i].getAttribute("txtZip"), markers[i].getAttribute("txtPhone"), markers[i].getAttribute("txtWebsite"), markers[i].getAttribute("txtDescription"), markers[i].getAttribute("txtCountry"), markers[i].getAttribute("txtUrl"));
                    var notfriendly = markers[i].getAttribute("intNotFriendly");
                    gmarkers[i] = createMarker(point, html, i, number, notfriendly);
                    //side_bar_html += '<tr valign=top><td width=20px><strong>' + (i + 1) + '</strong></td><td><a href="javascript:myclick(' + i + ')">' + constrain(markers[i].getAttribute("txtName"), 32) + '</a></td></tr>';
                    side_bar_html += '<tr valign=top><td width=20px><strong>' + (i + 1) + '</strong></td><td><a href="/place/' + markers[i].getAttribute("txtUrl") + '.aspx">' + constrain(markers[i].getAttribute("txtName"), 32) + '</a></td></tr>';
                }
                // put the assembled side_bar_html contents into the side_bar div
                pages = Math.ceil(pages / 16);
                buildPageBar(pages);
                document.getElementById("side_bar").innerHTML = side_bar_html;
            }
       )
        }            
      }
    };

function buildInfoWindow (id, name, address, address2, city, state, zip, phone, website, description, country, txtUrl) {
    var html = "";
    html = "<div><h2>" + name + "</h2>" + address + " " + address2 + "<br>" + city + ", " + state + " " + zip + " " + findCountry(country) + "<br>" + phone + "</div>";                                                                 
    if (website != "") {
        html += "<div class=removal style=width:240px;><a href=" + website + " target=_blank>" + constrain(website, 38) + "</a></div>";
        }                                        
    if (description != "") {
        html += "<div style=width:240px;><br>" + constrain(description,70) + "</div>";
        } 
    html += "<br><div><strong><a href=/place/" + txtUrl + ".aspx>View Details & Comments</a></strong></div>"
    return html;
};

function constrain(str,n){ 
  if(str.length > n){  
    var s = str.substr(0, n);
    var words = s.split(' '); 
    if (words.length > 1) {
    words[words.length-1] = '';
    }
    str = words.join(' ') + '&hellip;'
  }
return str;
}

// This function picks up the click and opens the corresponding info window
function myclick(i) {
GEvent.trigger(gmarkers[i], "click");
//map.setCenter(GLatLng(gmarkers[1]), 10);
}

function buildPageBar(pages, pagenumber) {
    if (typeof pagenumber == "undefined") {
        pagenumber = 1;
      } 
      page_bar_html = "<strong>Page:</strong>&nbsp;";
      if (pagenumber > 10) {
          lowerlimit = pagenumber - 6;         
          if ((pagenumber + 3) < pages) {
            upperlimit = pagenumber + 3;
          }
          else {
            upperlimit = pages;
          }          
          page_bar_html += '<a href="#" onClick="loadPage(' + (pagenumber - 1) + ')";><</a>&nbsp;';
      }
      else
      {
          lowerlimit = 1;
          if (pages > 10) {
            upperlimit = 10;
            }
          else {
            upperlimit = pages;
          }
      }       

                for (i = lowerlimit; i <= upperlimit; i++) { 
                    if (pagenumber == i) {
                        page_bar_html += i + '&nbsp;';
                    }
                    else {      
                        page_bar_html += '<a href="#" onClick="loadPage(' + i + ')";>' + i + '</a>&nbsp;';
                    } 
     }
     if (pages > upperlimit) {
        page_bar_html += '<a href="#" onClick="loadPage(' + (pagenumber + 1) + ')";>></a>&nbsp;';     
     }
 document.getElementById("page_bar").innerHTML = page_bar_html;
}

function buildPageUrl(pagenumber) {
    if (typeof pagenumber == "undefined") {
        pagenumber = 1;
        var mapbounds = map.getBounds();
        var ne = mapbounds.getNorthEast(); 
        var sw = mapbounds.getSouthWest(); 
        neLng = ne.lng();
        neLat = ne.lat();
        swLng = sw.lng();
        swLat = sw.lat();   
        // sample URL: data.aspx?neLat=40&neLong=-74&swLong=-111&swLat=30&page=1
        url = 'data.aspx?neLat=' + neLat + '&neLong=' + neLng + '&swLong=' + swLng + '&swLat=' + swLat + '&page=' + pagenumber;
      }   
    else {
    url = 'data.aspx?neLat=' + neLat + '&neLong=' + neLng + '&swLong=' + swLng + '&swLat=' + swLat + '&page=' + pagenumber;
    }
      return url;  
}

// Creates a marker at the given point with the given number label
function createMarker(point, html, i, number, notfriendly) {
    var nIcon = new GIcon(baseIcon);
    if (notfriendly == 1) {
        nIcon.image = "http://www.cigarplaces.com/images/markers/rmarker" + (i + 1) + ".png";
    }
    else {
        nIcon.image = "http://www.cigarplaces.com/images/markers/marker" + (i + 1) + ".png";
    }
  var marker = new GMarker(point, {icon:nIcon,draggable:false});
  map.addOverlay(marker);  
  //alert(html);
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(html);      
  });
  return marker;
}

    function showAddress(address) {
      if (geocoder) {
        geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
              alert(address + " not found");
            } else {
              map.setCenter(point, 10);
              reloadMap();
            }
          }
        );
      }
    }
    
    
  function reloadMap() {  
       GDownloadUrl(buildPageUrl(), function(data, responseCode) {
            gmarkers = null;
            gmarkers = [];
            map.clearOverlays();
            var xml = GXml.parse(data);
             var xmlpages = xml.documentElement.getElementsByTagName("numofresults");
              for (var i = 0; i < xmlpages.length; i++) {
                    var pages = xmlpages[i].getAttribute("results");
                    }     
            var side_bar_html = "<table border=0 cellpadding=2 cellspacing=0>";
              var markers = xml.documentElement.getElementsByTagName("marker");
              if (markers.length >= 1) {          
              for (var i = 0; i < markers.length; i++) {
              var number = i + 1;
                   var point = new GLatLng(parseFloat(markers[i].getAttribute("flLat")),
                                           parseFloat(markers[i].getAttribute("flLong")));
                   var html = buildInfoWindow(markers[i].getAttribute("intLocationId"), markers[i].getAttribute("txtName"), markers[i].getAttribute("txtAddress"), markers[i].getAttribute("txtAddress2"), markers[i].getAttribute("txtCity"), markers[i].getAttribute("txtState"), markers[i].getAttribute("txtZip"), markers[i].getAttribute("txtPhone"), markers[i].getAttribute("txtWebsite"), markers[i].getAttribute("txtDescription"), markers[i].getAttribute("txtCountry"), markers[i].getAttribute("txtUrl"));
                                           var notfriendly = markers[i].getAttribute("intNotFriendly");
                                           gmarkers[i] = createMarker(point, html, i, number, notfriendly);   
                                          // side_bar_html += '<tr valign=top><td width=20px><strong>' + (i + 1) + '</strong></td><td><a href="javascript:myclick(' + i + ')">' + constrain(markers[i].getAttribute("txtName"), 32) + '</a></td></tr>';                                 
                                           side_bar_html += '<tr valign=top><td width=20px><strong>' + (i + 1) + '</strong></td><td><a href="/place/' + markers[i].getAttribute("txtUrl") + '.aspx">' + constrain(markers[i].getAttribute("txtName"), 32) + '</a></td></tr>'; 
                    }
              }
              else { side_bar_html += '<tr valign=top><td colspan=2><div style=width:190px;><br><br>We don\'t know of any cigar locations in your city yet.<br><br>Help out other cigar smokers and <a href="#" onClick="pageTracker._trackPageview(\'/AddLocationSearch\');$find(\'mpeAddLocation\').show();">add one</a> to the map that you know of!</div><br>Or go <a href="/">back</a> to the whole map.</td></tr>';
              }
            // put the assembled side_bar_html contents into the side_bar div
          document.getElementById("side_bar").innerHTML = "";          
          document.getElementById("side_bar").innerHTML = side_bar_html;
          side_bar_html += '</table>';
          var pages = Math.ceil(pages / 16);
          buildPageBar(pages); 
             }                     
           )       
          };
          
        function logSearchField (form) {
            searchFieldVal = form.address.value;
            pageTracker._trackPageview(document.location + '?s=' + searchFieldVal);
        }
          
          
       function loadPage(pagenumber) {
       var page = pagenumber; 
       GDownloadUrl(buildPageUrl(page), function(data, responseCode) {
            gmarkers = null;
            gmarkers = [];
            map.clearOverlays();
            var xml = GXml.parse(data);
            var xmlpages = xml.documentElement.getElementsByTagName("numofresults");
              for (var i = 0; i < xmlpages.length; i++) {
                    var pages = xmlpages[i].getAttribute("results");
                    }  
                    var pages = Math.ceil(pages / 16);
            var side_bar_html = "<table border=0 cellpadding=2 cellspacing=0>";
              var markers = xml.documentElement.getElementsByTagName("marker");          
              for (var i = 0; i < markers.length; i++) {
              if (pagenumber == 1) { 
                    var number = i + 1;                    
                    }
                    else { 
                    var number = i + ((pagenumber - 1) * 16);
                    }
                   var point = new GLatLng(parseFloat(markers[i].getAttribute("flLat")),
                                           parseFloat(markers[i].getAttribute("flLong")));
                   var html = buildInfoWindow(markers[i].getAttribute("intLocationId"), markers[i].getAttribute("txtName"), markers[i].getAttribute("txtAddress"), markers[i].getAttribute("txtAddress2"), markers[i].getAttribute("txtCity"), markers[i].getAttribute("txtState"), markers[i].getAttribute("txtZip"), markers[i].getAttribute("txtPhone"), markers[i].getAttribute("txtWebsite"), markers[i].getAttribute("txtDescription"), markers[i].getAttribute("txtCountry"), markers[i].getAttribute("txtUrl"));
                                           var notfriendly = markers[i].getAttribute("intNotFriendly");
                                           gmarkers[i] = createMarker(point, html, i, number, notfriendly);   
                                           //side_bar_html += '<tr valign=top><td width=20px><strong>' + (i + 1) + '</strong></td><td><a href="javascript:myclick(' + i + ')">' + constrain(markers[i].getAttribute("txtName"), 32) + '</a></td></tr>';                                 
                                           side_bar_html += '<tr valign=top><td width=20px><strong>' + (i + 1) + '</strong></td><td><a href="/place/' + markers[i].getAttribute("txtUrl") + '.aspx">' + constrain(markers[i].getAttribute("txtName"), 32) + '</a></td></tr>'; 
                    }
            // put the assembled side_bar_html contents into the side_bar div
          document.getElementById("side_bar").innerHTML = "";          
          document.getElementById("side_bar").innerHTML = side_bar_html;
          side_bar_html += '</table>'  
          buildPageBar(pages, pagenumber); 
             }                     
           )
         };


 // Country data table
 //
 // To edit the list, just delete a line or add a line. Order is important.
 // The order displayed here is the order it appears on the drop down.
 //
 var country = '\
AF:Afghanistan|\
AL:Albania|\
DZ:Algeria|\
AS:American Samoa|\
AD:Andorra|\
AO:Angola|\
AI:Anguilla|\
AQ:Antarctica|\
AG:Antigua and Barbuda|\
AR:Argentina|\
AM:Armenia|\
AW:Aruba|\
AU:Australia|\
AT:Austria|\
AZ:Azerbaijan|\
AP:Azores|\
BS:Bahamas|\
BH:Bahrain|\
BD:Bangladesh|\
BB:Barbados|\
BY:Belarus|\
BE:Belgium|\
BZ:Belize|\
BJ:Benin|\
BM:Bermuda|\
BT:Bhutan|\
BO:Bolivia|\
BA:Bosnia And Herzegowina|\
XB:Bosnia-Herzegovina|\
BW:Botswana|\
BV:Bouvet Island|\
BR:Brazil|\
IO:British Indian Ocean Territory|\
VG:British Virgin Islands|\
BN:Brunei Darussalam|\
BG:Bulgaria|\
BF:Burkina Faso|\
BI:Burundi|\
KH:Cambodia|\
CM:Cameroon|\
CA:Canada|\
CV:Cape Verde|\
KY:Cayman Islands|\
CF:Central African Republic|\
TD:Chad|\
CL:Chile|\
CN:China|\
CX:Christmas Island|\
CC:Cocos (Keeling) Islands|\
CO:Colombia|\
KM:Comoros|\
CG:Congo|\
CD:Congo, The Democratic Republic O|\
CK:Cook Islands|\
XE:Corsica|\
CR:Costa Rica|\
CI:Cote d` Ivoire (Ivory Coast)|\
HR:Croatia|\
CU:Cuba|\
CY:Cyprus|\
CZ:Czech Republic|\
DK:Denmark|\
DJ:Djibouti|\
DM:Dominica|\
DO:Dominican Republic|\
TP:East Timor|\
EC:Ecuador|\
EG:Egypt|\
SV:El Salvador|\
GQ:Equatorial Guinea|\
ER:Eritrea|\
EE:Estonia|\
ET:Ethiopia|\
FK:Falkland Islands (Malvinas)|\
FO:Faroe Islands|\
FJ:Fiji|\
FI:Finland|\
FR:France (Includes Monaco)|\
FX:France, Metropolitan|\
GF:French Guiana|\
PF:French Polynesia|\
TA:French Polynesia (Tahiti)|\
TF:French Southern Territories|\
GA:Gabon|\
GM:Gambia|\
GE:Georgia|\
DE:Germany|\
GH:Ghana|\
GI:Gibraltar|\
GR:Greece|\
GL:Greenland|\
GD:Grenada|\
GP:Guadeloupe|\
GU:Guam|\
GT:Guatemala|\
GN:Guinea|\
GW:Guinea-Bissau|\
GY:Guyana|\
HT:Haiti|\
HM:Heard And Mc Donald Islands|\
VA:Holy See (Vatican City State)|\
HN:Honduras|\
HK:Hong Kong|\
HU:Hungary|\
IS:Iceland|\
IN:India|\
ID:Indonesia|\
IR:Iran|\
IQ:Iraq|\
IE:Ireland|\
EI:Ireland (Eire)|\
IL:Israel|\
IT:Italy|\
JM:Jamaica|\
JP:Japan|\
JO:Jordan|\
KZ:Kazakhstan|\
KE:Kenya|\
KI:Kiribati|\
KP:Korea, Democratic People\'S Repub|\
KW:Kuwait|\
KG:Kyrgyzstan|\
LA:Laos|\
LV:Latvia|\
LB:Lebanon|\
LS:Lesotho|\
LR:Liberia|\
LY:Libya|\
LI:Liechtenstein|\
LT:Lithuania|\
LU:Luxembourg|\
MO:Macao|\
MK:Macedonia|\
MG:Madagascar|\
ME:Madeira Islands|\
MW:Malawi|\
MY:Malaysia|\
MV:Maldives|\
ML:Mali|\
MT:Malta|\
MH:Marshall Islands|\
MQ:Martinique|\
MR:Mauritania|\
MU:Mauritius|\
YT:Mayotte|\
MX:Mexico|\
FM:Micronesia, Federated States Of|\
MD:Moldova, Republic Of|\
MC:Monaco|\
MN:Mongolia|\
MS:Montserrat|\
MA:Morocco|\
MZ:Mozambique|\
MM:Myanmar (Burma)|\
NA:Namibia|\
NR:Nauru|\
NP:Nepal|\
NL:Netherlands|\
AN:Netherlands Antilles|\
NC:New Caledonia|\
NZ:New Zealand|\
NI:Nicaragua|\
NE:Niger|\
NG:Nigeria|\
NU:Niue|\
NF:Norfolk Island|\
MP:Northern Mariana Islands|\
NO:Norway|\
OM:Oman|\
PK:Pakistan|\
PW:Palau|\
PS:Palestinian Territory, Occupied|\
PA:Panama|\
PG:Papua New Guinea|\
PY:Paraguay|\
PE:Peru|\
PH:Philippines|\
PN:Pitcairn|\
PL:Poland|\
PT:Portugal|\
PR:Puerto Rico|\
QA:Qatar|\
RE:Reunion|\
RO:Romania|\
RU:Russian Federation|\
RW:Rwanda|\
KN:Saint Kitts And Nevis|\
SM:San Marino|\
ST:Sao Tome and Principe|\
SA:Saudi Arabia|\
SN:Senegal|\
XS:Serbia-Montenegro|\
SC:Seychelles|\
SL:Sierra Leone|\
SG:Singapore|\
SK:Slovak Republic|\
SI:Slovenia|\
SB:Solomon Islands|\
SO:Somalia|\
ZA:South Africa|\
GS:South Georgia And The South Sand|\
KR:South Korea|\
ES:Spain|\
LK:Sri Lanka|\
NV:St. Christopher and Nevis|\
SH:St. Helena|\
LC:St. Lucia|\
PM:St. Pierre and Miquelon|\
VC:St. Vincent and the Grenadines|\
SD:Sudan|\
SR:Suriname|\
SJ:Svalbard And Jan Mayen Islands|\
SZ:Swaziland|\
SE:Sweden|\
CH:Switzerland|\
SY:Syrian Arab Republic|\
TW:Taiwan|\
TJ:Tajikistan|\
TZ:Tanzania|\
TH:Thailand|\
TG:Togo|\
TK:Tokelau|\
TO:Tonga|\
TT:Trinidad and Tobago|\
XU:Tristan da Cunha|\
TN:Tunisia|\
TR:Turkey|\
TM:Turkmenistan|\
TC:Turks and Caicos Islands|\
TV:Tuvalu|\
UG:Uganda|\
UA:Ukraine|\
AE:United Arab Emirates|\
UK:United Kingdom|\
GB:Great Britain|\
US:United States|\
UM:United States Minor Outlying Isl|\
UY:Uruguay|\
UZ:Uzbekistan|\
VU:Vanuatu|\
XV:Vatican City|\
VE:Venezuela|\
VN:Vietnam|\
VI:Virgin Islands (U.S.)|\
WF:Wallis and Furuna Islands|\
EH:Western Sahara|\
WS:Western Samoa|\
YE:Yemen|\
YU:Yugoslavia|\
ZR:Zaire|\
ZM:Zambia|\
ZW:Zimbabwe|\
';

         function TrimString(sInString) {
             if (sInString) {
                 sInString = sInString.replace(/^\s+/g, ""); // strip leading
                 return sInString.replace(/\s+$/g, ""); // strip trailing
             }
         }

         function findCountry(countryAbbr) {
             if ((countryAbbr == null) || (countryAbbr == '')) {
                 return ''
             }
                 var countryLineArray = country.split('|');   // Split into lines
             for (var loop = 0; loop < countryLineArray.length; loop++) {
                 lineArray = countryLineArray[loop].split(":");
                 countryCode = TrimString(lineArray[0]);
                 countryName = TrimString(lineArray[1]);
                 if (countryAbbr == countryCode && countryCode != '') {
                     var fullCountryName = countryName;
                 }
             }
             return fullCountryName;
         }
