// http://code.google.com/apis/maps/documentation/services.html
var gmarkers = [];
var i = 0;
var mgr;
var elem;

var cache = new Array();
// cList markers
var tmpCache;
var categories;

var side_bar_html = "";
var side_bar_html_right = "";
var baseURL = "/gs/GetResource?xsi="


function clearCurrent() {
    gmarkers = [];
    i = 0;
    if (mgr) {
        //mgr.clearMarkers();
        if (cache["gs"]) {
            for (var u = 0; u < cache["gs"].getLength(); u++) {
                mgr.removeMarker(cache["gs"].getAt(u));
            }
        }
    }
    elem = null;
    cache["gs"] = null;
    tmpCache = null;
    categories = null;
    side_bar_html = "";
    if (YAHOO.gs.container.currentBiz) {
        document.getElementById("container")
    }
    else {
        document.getElementById("container").innerHTML = side_bar_html;
    }
    //side_bar_html_right = "";
    // YAHOO.widget.LayoutUnit.getLayoutUnitById("right1").body.innerHTML = '</div><div id="directions"></div>';
    // side_bar_html_right;
    lastAddedMarker = 0;
    closeDirections();
    if (YAHOO.gs.container.currentBiz) {
        YAHOO.gs.container.currentBiz.hide();
        munhilite(curTmp);
    }
    if (YAHOO.gs.container.message) {
        YAHOO.gs.container.message.hide();
    }

}

function loadData(mode) {
    document.getElementById("srgshd").innerHTML = '<div id="uistatus">loading...</div>';
    var _what, _where, _mapwhere, _when;

    if (mode == 2) {
        _what = '';
        //  _where = '&cc=SDRIA&where=range%5B10mi%5D+UGC%5B-1455333287%2C895903405%5DLOCDESC%5BThe+Original+Pancake+House%5D';
        _where = document.getElementById("xxother");
        _when = '';

    }
    else if (mode == 1) {
        var centerDec = map.getCenter();
        var center = centerDec.toString();
        var sub = center.substring(1, center.length - 1);
        document.getElementById("mapwhere").value = sub;

        _what = document.getElementById("what").value;
        _where = '&where=' + document.getElementById("where").value;
        _mapwhere = document.getElementById("mapwhere").value;
        //_when = document.getElementById("when").value;
        _when = 'Anytime';

        if (_where == '&where=search on map') {
            _where = '&where=' + "range[5mi]LL[" + _mapwhere + "]";
        }
    }

    clearCurrent();
    initMarkerManager();

    //SFICG HOTELS: http://www.geospot.com/gs/GeoSpot?what=Air%20Travel%20Hotel;Hotel%20Fusion;The%20Pickwick;Hotel%20Stratford;Adante%20Hotel;Hotel%20Mark%20Twain;Hilton%20San%20Francisco%20Fisherman's%20Wharf;Marriott&where=San%20Franisco,CA&rend=xml:gsui
    // http://mickey.geospot.net/gs/GeoSpot?what=Air%20Travel%20Hotel;Hotel%20Fusion;The%20Pickwick;Hotel%20Stratford;Adante%20Hotel;Hotel%20Mark%20Twain;Hilton%20San%20Francisco%20Fisherman's%20Wharf;Marriott&where=San%20Franisco,CA&rend=xml:gsui
    // var hotels = 'what=Air Travel Hotel;Hotel Fusion;The Pickwick;Hotel Stratford;Adante Hotel;Hotel Mark Twain;Hilton San Francisco Fisherman's Wharf;Marriott'
    GDownloadUrl("/gs/GeoQuery?what=" + _what + _where + "&when=" + _when + "&rend=xml:gsui", function(data, responseCode) {
        track('search?what=' + _what + _where + '&when=' + _when);
        // GDownloadUrl("../js/gs/GeoQueryExampleResult2.xml", function(data, responseCode) {

        // To ensure against HTTP errors that result in null or bad data,
        // always check status code is equal to 200 before processing the data
        if (responseCode == 200) {

            var sb_divs = "";

            var xml = GXml.parse(data);

            // clearCurrent();
            var markers;
            try {
                markers = xml.documentElement.getElementsByTagName("marker");

                tmpCache = new CList();
                if (markers) {
                    if (markers.length == 0) {
                        setMessage();
                        YAHOO.gs.container.wait.hide();
                        //   document.getElementById("container").innerHTML = '';
                        updateHeaderNFooter();
                        //  return;
                    }
                }

                for (var i = 0; i < markers.length; i++) {

                    var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                            parseFloat(markers[i].getAttribute("lng")));
                    var title = markers[i].getAttribute("label");
                    var html = markers[i].getAttribute("html");
                    var icon = markers[i].getAttribute("icon");
                    var desc = markers[i].getAttribute("desc");
                    var addr1 = markers[i].getAttribute("addr1");
                    var addr2 = markers[i].getAttribute("addr2");
                    var phone = markers[i].getAttribute("phonenum");
                    var city = markers[i].getAttribute("city");
                    var opstatus = markers[i].getAttribute("opstatus");
                    var cat = markers[i].getAttribute("category");
                    var rating = markers[i].getAttribute("rating");
                    var xsi = markers[i].getAttribute("xsi");

                    createMarker(point, title, html, icon, desc, addr1, addr2, city, phone, opstatus, cat, rating, xsi);

                    // create div for later access / dom modifications here
                    sb_divs += prepareSideBarDiv(i);

                    if (i == 0) {   // centering on first result since this is the most important
                        map.panTo(point);
                    }
                }
                document.getElementById("container").innerHTML = sb_divs;
                // mgr.addMarkers(gmarkers,10);
                // mgr.addMarkers(tmpCache.mArray, 0); /this will add all markers to the map

                tmpCache.removeAll();
                // mgr.addMarkers( addMarkersFromCacheToMarkerManager() , 0 );
                // mgr.refresh();
                showNextTenMarkers_two();

                /* no clustering  for now...
                var markerTmp = new GMarker(new GLatLng(37.548388, -121.972961));
                markerTmp.gscat = "gs_highlevel_overview";
                markerTmp.gsname = "Fremont";
                markerTmp.no = 0;
                GEvent.addListener(markerTmp, "click", function() {
                    markerTmp.openInfoWindowHtml("ZOOM IN to see <h3>" + mgr.getMarkerCount(13) + "</h3> businesses.");
                });
                mgr.addMarker(markerTmp, 0, 12);
                */
            } catch (err) {
                // alert ("Error, probably no results... Please reload this page (F5) " + err);
                hide();
                updateHeaderNFooter();
                setMessage();
            }
        } else if (responseCode == -1) {
            // alert("Data request timed out. Please try later.");
            document.getElementById("srgshd").innerHTML = '<div id="uistatus">Search result timed out. Please try again later.</div>';
        } else {
            // alert("Request resulted in error. Check XML file is retrievable. " + responseCode);
            document.getElementById("srgshd").innerHTML = '<div id="uistatus">Search result not retrievable. [ Error ' + responseCode + ' ]</div>';

        }
        YAHOO.gs.container.wait.hide();
    });
    tabView.set("activeTab", tabView.getTab(1));
}

function initMarkerManager() {
    if (!mgr) {
        var mgrOptions = {
            borderPadding: 0,
            maxZoom: 15,
            trackMarkers: true
        };
        mgr = new MarkerManager(map);
        GEvent.addListener(mgr, "changed", function() {
            // updateSidebar(mgr.gsMarkers);              // 04/25 disabled updating sidebar,
        });
    }
}

function initCache() {
    if (!cache["gs"]) {
        cache["gs"] = new CList();
        categories = new CList();
    }
}
// A function to create a marker and set up the event window
function createMarker(point, title, html, icon, desc, addr1, addr2, city, phone, opstatus, cat, rating, xsi) {

    //gmarkers[5].getPoint().equals(gmarkers[0].getPoint());
    initCache();

    var customIcon = new GIcon();
    //  customIcon.image = baseURL + icon;
    customIcon.image = 'http://www.geospot.com/gs/GetResource?xsi=' + icon
    customIcon.iconSize = new GSize(24, 24);
    customIcon.iconAnchor = new GPoint(12, 12);
    customIcon.infoWindowAnchor = new GPoint(12, 12);

    var marker = new GMarker(point, customIcon);

    // adding some gs specific fields to the marker object
    marker.gstitle = title;
    marker.gshtml = html;
    marker.gsicon = 'http://www.geospot.com/gs/GetResource?xsi=' + icon;
    marker.gsdesc = desc;
    marker.gsaddr1 = addr1;
    marker.gsaddr2 = addr2;
    marker.gscity = city;
    if (phone)
        marker.gsphone = phone;
    else
        marker.gsphone = "";
    marker.gsopstatus = opstatus;
    marker.gscat = cat;
    marker.gsrating = rating;
    marker.hiliteOvl = Array();
    marker.gsxsi = xsi;
    marker.cntp = "gs";
    // content provider
    //marker.module;

    marker.no = i;

    // save the info we need to use later for the side_bar
    if (cache["gs"].addUnique(marker)) {

        tmpCache.addUnique(marker);
        //	addGSListeners(marker); // this is to early to register the Listener
        i++;
    }

    if (categories.addUnique(cat)) {
        // var chkBox ="<input id=\""+cat+"\" type=\"checkbox\" name=\"checkbox2\" checked>";
        //  var chkBoxLbl = "<label for=\""+cat+"\">"+cat+"</label>";
        // var oCheckButton1 = new YAHOO.widget.Button(cat, { label: cat });
        var oCheckButton = new YAHOO.widget.Button({ type: "checkbox", label: cat, id: "\"" + cat + "\"", name: "checkboxfield2", value: "1", container: "checkboxbuttonsfromjavascript", checked: false });
        oCheckButton.addListener("click", function onButtonClick(e) {
            alert("e.target = " + e.target);
            elem = e;
        });
        //   side_bar_html_right += chkBox + chkBoxLbl + "<br>";
    }
    //  cat_chooser_html += '<li>' + cat + '</li>';
    // return marker;
}

function addGSListeners(marker) {

    GEvent.addListener(marker, "click", function() {
        //minfo(marker);
        if (!marker.startHtml) {
            addBubble(marker);
        }
        marker.openInfoWindowHtml(marker.startHtml,
        {
        //  maxTitle: marker.gstitle + ' @ ' + marker.gsaddr1 + ', ' + marker.gscity,
        //  maxContent:  '<div id="detailContent">Loading...</div><div id="contxsi" style="display:none;">' + marker.no + '</div>' +
        //             '<div id="cntp" style="display:none;">' + marker.cntp + '</div>'

        }
                );
        map.getInfoWindow().enableMaximize();


        /*   ---------- ----- ---- ---- ---- ----- ---- ---- ----- ----
          marker.openExtInfoWindow(
          map,
          "custom_info_window_red",
          "<div>Loading...</div>",
          {
            ajaxUrl: "/gs/Info?xsi=" + marker.gsxsi,
            beakOffset: 3
          }
        );
        });
     -------------------------------------------------------------   */
        document.getElementById("whatNB").focus();
        var _xsi = marker.gsxsi;
        if (marker.gsxsi == null) {
            _xsi = "/null";
        }
        track('InfoWindow/' + marker.gscat + '/' + marker.gstitle + _xsi);
    });
    GEvent.addListener(marker, "mouseover", function() {
        mhilite(marker);
    });
    GEvent.addListener(marker, "mouseout", function() {
        munhilite(marker);
    });

    GEvent.addListener(marker, "maximizeclick", function() {
        loadContent();
    });

    /// restoreclick remove dom element?
}

function loadContent(xsi) {
    var container = document.getElementById("detailContent");
    var no = document.getElementById("contxsi").innerHTML;
    var ovl = document.getElementById("cntp").innerHTML;
    var _url;
    if (!xsi) {
        _url = '/gs/Info?xsi=' + cache[ovl].getAt(no).gsxsi;
    }
    else {
        _url = '/gs/Info?xsi=' + xsi;
    }
    ajaxRequest(_url);
}


function doSearch(_what, _where, _when) {
    if (_what) {
        document.getElementById("what").value = _what;
    }
    if (_where) {
        document.getElementById("where").value = _where;
    }
    if (_when) {
        document.getElementById("when").value = _when;
    }
    loadData();
}

function minfo(marker) {
    if (!marker.toHtml) {
        addBubble(marker);
    }
    marker.openInfoWindow(marker.startHtml);
}

function mhilite(marker) {
    try {
    	  map.disableScrollWheelZoom();
        if (!marker.isHidden()) {
            var zoom = map.getZoom();

            if (marker.hiliteOvl[zoom]) {
                for (var l = 1; l < marker.hiliteOvl[zoom].length; l++)
                //@TODO add color here, red highlight is only valid on that zoom level where user started nearby search, but not on higher or lower levels
                    map.addOverlay(marker.hiliteOvl[zoom][l]);
            }
            else {
                drawFilledCircle(marker);
            }
        }
    } catch (ex) {
    }
}

function munhilite(marker) {
	   map.enableScrollWheelZoom()
    // check if ovl is on !!
    try {
        if (marker) {
            var zoom = map.getZoom();
            if (marker.hiliteOvl[zoom]) {
                for (var l = 1; l < marker.hiliteOvl[zoom].length; l++) {
                    map.removeOverlay(marker.hiliteOvl[zoom][l]);
                }
            }
        }
    } catch (ex) {
    }
}

function munhiliteCurrent() {

    var zoom = curTmp.redZoomLevel;
    if (curTmp.hiliteOvl[zoom]) {
        for (var l = 1; l < curTmp.hiliteOvl[zoom].length; l++) {
            map.removeOverlay(curTmp.hiliteOvl[zoom][l]);
        }
    }
}

// - - - - - - - - - - - - - - --  - - - - - --  - - - - - - - - - - - - - - -  - - - - - - - - - -- -


function prepareSideBarDiv(no) {
    side_bar_htmlElem = '<a name="' + no + '"><div id="biz' + no + '" onmouseover=\"mhilite(cache[\'gs\'].getAt(' + no + '));\" onmouseout=\"munhilite(cache[\'gs\'].getAt(' + no + '));\" style=\"display:klaro;\">'
            + '</div></a>';
    return side_bar_htmlElem;
}

var lastAddedMarker = 0;
function addMarkersFromCacheToMarkerManager() {
    var step = 10;
    var markerBatch = new CList()
    for (var i = lastAddedMarker; i < (lastAddedMarker + step); i++) {
        //   alert ("hideing "+ i);
        //cache.getAt(i).hide();
        initCache();
        if (i < cache["gs"].getLength()) {
            addGSListeners(cache["gs"].getAt(i));
            // only setup listeners when marker comes available
            markerBatch.addUnique(cache["gs"].getAt(i));
        }
    }
    lastAddedMarker = i;
    if (lastAddedMarker > cache["gs"].getLength()) {
        lastAddedMarker = cache["gs"].getLength();
    }
    track("show_next/" + lastAddedMarker);
    return markerBatch;
}

function showNextTenMarkers_two() {
    unhideMarkers('gs');
    var tmpList = addMarkersFromCacheToMarkerManager();
    //alert( "-->" + tmpList.mArray);
    mgr.addMarkers(tmpList.mArray, 0);
    mgr.refresh();
    updateSidebar_two(tmpList);
    //	YAHOO.gs.container.layout.render();
}

// create a individual modules that can be skinned / animated
function updateSidebar_two(tmpList) {
    for (var aik = 0; aik < tmpList.getLength(); aik++) {

        var aMarker = tmpList.getAt(aik);
        createListItem(aMarker);

    }
    updateHeaderNFooter();
}

function createListItem(aMarker) {
    // create a module for each biz
    var divId = "biz" + aMarker.no;
    aMarker.module = new YAHOO.widget.Module("" + divId + "", {
        visible: true
    });
    //  aMarker.module.setHeader((1 + aMarker.no) + ' <a href="#" onclick="javascript:map.setCenter(cache.getAt(' + aMarker.no + ').getPoint())">[ center ]</a>');
    aMarker.module.setHeader(''
    // '<div class="' + aMarker.gsopstatus + '"><b>' + aMarker.gsopstatus + '</b></div>'
            );
    aMarker.module.setBody(
            '<table>' +
            '<tr>' +
            '<td class="tblrs">' +
            '<img src="' + aMarker.gsicon + '" />' +
            '</td>' +
            '<td width="235px" class="tblrs">' +
            '<div id="gstitle"><a href="#t=tab1&m='+ aMarker.gsxsi +'" onclick="panToAndShowInfo(' + aMarker.no + ')">' + aMarker.gstitle + '</a>' +
            '<div id="gsaddr">' + aMarker.gsaddr1 + ', ' + aMarker.gscity + '</div>' +
            '</td>' +
            '<td align="right" class="tblrs">' +
            '<img class="gsopstat" alt="' + aMarker.gsopstatus + '" title="' + aMarker.gsopstatus + '"  align="right" src="/gs/GetResource?xsi=/gs/pub/icon/16/opstat/' + aMarker.gsopstatus + '.png" />' +
            '</td>' +
            '</tr>' +
            '</table>'
            );
    aMarker.module.setFooter('');
    ;
    // aMarker.module.setFooter('<a href="#" onclick="javascript:map.setCenter(cache.getAt(' + aMarker.no + ').getPoint())">[ map ]</a>');
    aMarker.module.render();
}

function panToAndShowInfo(no) {

    if (cache["gs"].getAt(no).isHidden()) {
        unhideMarkers('gs');
        mhilite(cache["gs"].getAt(no));
    }
    map.panTo(cache["gs"].getAt(no).getPoint());
    GEvent.trigger(cache["gs"].getAt(no), "click");

}

function cbhide_click() {
    var hide = document.getElementById("cbhidesrmarkers").checked;
    if (hide) {
        hideMarkers('gs');
    }
    else {
        unhideMarkers('gs');
    }
}

function updateHeaderNFooter() {
    var checkbox_hideMarkers = '' +
                               '<div>' +
                               '<input id="cbhidesrmarkers" type="checkbox" onclick="cbhide_click()" name="cbhidesrmarkers">&nbsp;hide markers on map' +
                               '</div>';

    if (!cache["gs"]) {
        document.getElementById("srgshd").innerHTML = '<div id="uistatus">No results found</div>';
        document.getElementById("container").innerHTML = '';
        document.getElementById("gspagination").innerHTML = '';
    } else if (cache["gs"].getLength() == 0) {
        document.getElementById("srgshd").innerHTML = '<div id="uistatus">No results found</div>';
        document.getElementById("container").innerHTML = '';
        document.getElementById("gspagination").innerHTML = '';
    } else if (lastAddedMarker < cache["gs"].getLength()) {
        document.getElementById("srgshd").innerHTML = lastAddedMarker + ' of ' + cache["gs"].getLength() + ' results <a href="javascript:showNextTenMarkers_two()">more</a>' +
                                                      checkbox_hideMarkers;
        document.getElementById("gspagination").innerHTML = '<a href="javascript:showNextTenMarkers_two()">show more results</a>';
    } else {
        document.getElementById("srgshd").innerHTML = "All results (" + cache["gs"].getLength() + ") shown." +
                                                      checkbox_hideMarkers;
        document.getElementById("gspagination").innerHTML = "";
    }
}

// for search nearby, set top result
function setCurrentBiz(marker) {

    YAHOO.namespace("gs.container");
    var divId = "currentBiz";
    var whatValue = document.getElementById("what").value;
    YAHOO.gs.container.currentBiz = new YAHOO.widget.Module("" + divId + "", {
        visible: true
    });
    YAHOO.gs.container.currentBiz.setHeader(whatValue + ' nearby <br />' + marker.gstitle);
    YAHOO.gs.container.currentBiz.setBody(marker.gsaddr1 + ', ' + marker.gscity);
    YAHOO.gs.container.currentBiz.setFooter("results nearby:");
    YAHOO.gs.container.currentBiz.render();
    // @todo higlight marker in different color
}

function setMessage() {
    YAHOO.namespace("gs.container");
    var divId = "currentMessage";
    var whatValue = document.getElementById("what").value;
    var whereValue = document.getElementById("where").value;
    YAHOO.gs.container.message = new YAHOO.widget.Module("" + divId + "", {
        visible: true
    });
    YAHOO.gs.container.message.setHeader('no results');
    YAHOO.gs.container.message.setBody(whatValue + ' ' + whereValue + ' not found!');
    YAHOO.gs.container.message.setFooter('Please refine your search');
    YAHOO.gs.container.message.render();
    track("search/no_results/")
}

function setCurr() {
    YAHOO.namespace("example.container");
    var html_before = document.getElementById("currentBiz").innerHTML;
    alert("html before= " + html_before);
    YAHOO.example.container.panel2 = new YAHOO.widget.Panel("panel2",
    {
        width:"320px",
        visible:true,
        draggable:false,
        close:false,

        fixedcenter: true,
        zindex:4000
    });
    YAHOO.example.container.panel2.setHeader("Panel #2 from Script &mdash; This Panel Isn't Draggable");
    YAHOO.example.container.panel2.setBody("This is a dynamically generated Panel.");
    YAHOO.example.container.panel2.setFooter("End of Panel #2");
    YAHOO.example.container.panel2.render("currentBiz");
    var html_after = document.getElementById("currentBiz").innerHTML;
    alert("html after =" + html_after);
}


function mapSetCenter(marker) {
    map.setCenter(marker.getPoint());
}

function pan() {
    YAHOO.namespace("example.container");
    YAHOO.namespace("gs.container");
    if (!YAHOO.gs.container.wait) {

        // Initialize the temporary Panel to display while waiting for external content to load

        YAHOO.gs.container.wait222 =
        new YAHOO.widget.Panel("wait",
        { width: "240px",
            fixedcenter: true,
            close: false,
            draggable: false,
            zindex:4,
            modal: true,
            visible: false
        }
                );

        YAHOO.gs.container.wait222.setHeader("Loading, please wait...");
        YAHOO.gs.container.wait222.setBody('<img src=\"images/loading.gif\"/>');
        YAHOO.example.container.wait222.render(document.body);
    }
}

var curTmp;

// @todo directions panel (right1) gets rendering error on IE6 ?!
function searchNearbyEval(cntp, no, bubble) {
    var ovl = cntp;
    if (bubble) {
        var whatNearby = document.getElementById("whatNB").value;
        var whereNearby = document.getElementById("whereNB").value;
        document.getElementById("what").value = whatNearby;
        document.getElementById("mapwhere").value = whereNearby;
    }

    var curMarker;
    munhilite(curTmp);
    if (cache[ovl]) {
        if (cache[ovl].getAt(no)) {
            curMarker = cache[ovl].getAt(no);
            curTmp = curMarker;
            curTmp.redZoomLevel = map.getZoom();
        }
    }
    loadData(1);

    if (curMarker) {
        mgr.addMarker(curMarker, 0);
        drawFilledCircle(curMarker, "#FF0000");
        mgr.refresh();

        setCurrentBiz(curMarker);
    }
    else {
        mgr.addMarker(curTmp, 0);
        drawFilledCircle(curTmp, "#FF0000");
        mgr.refresh();

        setCurrentBiz(curTmp);
    }
    tabView.set("activeTab", tabView.getTab(1));
    track("search_nearby/");
}

// -------------------------   directions ------------------
function addBubble(marker) {
    //@todo if user increases font, content will float over bubble edges
    var opstatHtml = "";
    var descHTML = "";
    if (marker.gsopstatus) {
        opstatHtml = '<img alt="' + marker.gsopstatus + '" title="' + marker.gsopstatus + '" src="/gs/GetResource?xsi=/gs/pub/icon/16/opstat/' + marker.gsopstatus + '.png" />' +
                     '<br/>';

    }

    if (!marker.gsphone) {
        marker.gsphone = "";
    }
    if (!marker.gsaddr2) {
        marker.gsaddr2 = "";
    } else {
        marker.gsaddr2 = '<br>' + marker.gsaddr2 + ', '
    }
    if (marker.gsurl) {
        var tmp = marker.gsurl;
        marker.gsurl = '<br/><a href="' + tmp + '"target="blanc">Homepage</a>';
    } else (marker.gsurl = "");

    if (!marker.gsdesc) {
        marker.gsdesc = "";
    } else {
        var tmp = marker.gsdesc;
        marker.gsdesc = "<br/><br/> " + tmp + "</br>";
    }
    if (marker.gssup) {
        var tmp = marker.gstitle;
        marker.gstitle = marker.gssup + '<br/>' + tmp;

    }
    if (marker.gsdesc) {
        descHTML = '<div id="bubdesc">' +
                   marker.gsdesc +
                   '</div>';
    }

    marker.startHtml = '<div id="bubble"><br/><b>' + marker.gstitle + '</b><br />' + marker.gsaddr1 + ', ' + marker.gsaddr2 + marker.gscity + '<br/>' + marker.gsphone + marker.gsurl +

                       descHTML +
                       '<br /> ' + opstatHtml + '<br />'


    /*   + '<div id="opSt">' +
               '<b>open status</b> - <a href="#" id="searchNearby" onclick="tgsNearby()">Search nearby</a> - <a href="#" id="directionsTo" onclick="tgDirTo()">Get directions</a>  &nbsp; <br/>' +
               '<br>' +
                opstatHtml +
            //   'current Status: ' +
            //   '<img alt="' + marker.gsopstatus + '" title="' + marker.gsopstatus + '" src="/gs/GetResource?xsi=/gs/pub/icon/16/opstat/' + marker.gsopstatus + '.png" />' +
            //   '<br/>' +
            //   'overall rating: <b>' + marker.gsrating + '</b> <br/>' +
            //   'reviews: <b>0</b> <br/>' +
            //   '<a href="#" onclick="map.getInfoWindow().maximize()">full details</a>' +
               '<br/><br/><br/>' +
               '</div>'
    */
            + '<div id="dirTo" style="display:none;border:1px solid #BBBBBB;padding:6px;">' +
                       '<div style="line-height:18pt;">' +
                       '<a href="javascript:tgsNearby();" id="searchNearby" onclick="tgsNearby()">Search nearby</a> - <a href="http://tripplanner.transit.511.org/" target="_blank">Find Public Transportation</a>&nbsp; <br/><font color="#006600"><b>Get Driving directions</b></font> <br />' +
                       '</div>' +
                       '<br>Directions: <b>To here</b> - <a href="javascript:tgDirFromTo()">From here</a>' +
                       '<br><small>Start address:</small><form action="javascript:getDirections()">' +
                       '<input type="text" SIZE=30 MAXLENGTH=40 name="otheraddr" id="otheraddr" value="" />' +
                       '<INPUT value="Go" TYPE="SUBMIT" />' +
                       '<input type="hidden" id="bizaddr" value="' + marker.gstitle + "@" + marker.getPoint().lat() + ',' + marker.getPoint().lng() + '"/></form>' +
                       '<br/>' +
                       '</div>'


            + '<div id="dirFrom" style="display:none;border:1px solid #BBBBBB;padding:6px;">' +
                       '<div style="line-height:18pt;">' +
                       '<a href="javascript:tgsNearby()" id="searchNearby">Search nearby</a> - <a href="http://tripplanner.transit.511.org/" target="_blank">Find Public Transportation</a>&nbsp; <br/><font color="#006600"><b>Get Driving directions</b></font><br />' +
                       '</div>' +
                       '<br>Directions: <a href="javascript:tgDirFromTo()">To here</a> - <b>From here</b>' +
                       '<br><small>End address:</small><form action="javascript:getDirections()">' +
                       '<input type="text" SIZE=30 MAXLENGTH=40 name="otheraddr" id="otheraddr1" value="" />' +
                       '<INPUT value="Go" TYPE="SUBMIT">' +
                       '<input type="hidden" id="bizaddr" value="' + marker.gstitle + "@" + marker.getPoint().lat() + ',' + marker.getPoint().lng() + '"/></form>' +
                       '<br/>' +
                       '</div>'

            + '<div id="sNearby" style="border:1px solid #BBBBBB;padding:6px;">' +
                       '<div style="line-height:18pt;">' +
                       '<a href="javascript:tgDirTo()" id="directionsTo">Get Driving directions</a> - <a href="http://tripplanner.transit.511.org/" target="_blank" id="directionsTo">Find Public Transportation</a>&nbsp; <br/><font color="#006600"><b>Search nearby</b></font> <br />' +
                       '</div>' +
                       '<br /> <small>e.g. Fast Food</small>' +
                       '<form action="javascript:searchNearbyEval(\'' + marker.cntp + '\',' + marker.no + ', true)">' +
                       '<input type="text" SIZE=30 MAXLENGTH=40 name="whatNB" id="whatNB" value="" />' +
                       '<INPUT value="Go" TYPE="SUBMIT">' +
                       '<input type="hidden" name="whereNB" id="whereNB" value="range[5mi]LL[' + marker.getPoint().lat() + ',' + marker.getPoint().lng() + ']LOCDESC[' + marker.gstitle + ']" /></form>' +
                       '<br/>' +
                       '</div>'

            + '<div id="dirPubTransTo" style="display:none;border:1px solid #BBBBBB;padding:6px;">' +
                       '<div style="line-height:18pt;">' +
                       '<a href="javascript:tgsNearby()" id="searchNearby">Search nearby</a> - <a href="javascript:tgDirTo()" id="directionsTo">Get Driving directions</a> <br /><font color="#006600"><b>Find Public Transportation</b></font>&nbsp; <br/>' +
                       '</div>' +
                       '<br><b>To here</b> - <a href="javascript:tgDirPubTransFromTo()">From here</a>' +
                       '<form name="PubTransForm">' +
                       '<input type="hidden" name="dirmode" value="startmode">' +
                       '<table><tr><td>' +
                       '<small>Start address:</small><br>' +
                       '<input type="text" size="20" MAXLENGTH=40 name="typedaddr1" style="border:1px solid #999999;"/>' +
                       '</td><td>' +
                       '&nbsp;<small>City:</small><br>' +
                       '&nbsp;<input type="text" size="10" MAXLENGTH=40 name="typedaddr2" style="border:1px solid #999999;"/>' +
                       '</td><td>' +
                       '<small><br></small><INPUT value="Find" TYPE="button" onclick="dirPackURL(this.form,\'' + marker.gsaddr1 + '\',\'' + marker.gscity + '\')">' +
                       '</td></tr></table></form>' +
                       '</div>'

            + '<div id="dirPubTransFrom" style="display:none;border:1px solid #BBBBBB;padding:6px;">' +
                       '<div style="line-height:18pt;">' +
                       '<a href="javascript:tgsNearby()" id="searchNearby">Search nearby</a> - <a href="javascript:tgDirTo()" id="directionsTo">Get Driving directions</a> <br /><font color="#006600"><b>Find Public Transportation</b></font>&nbsp; <br/>' +
                       '</div>' +
                       '<br><a href="javascript:tgDirPubTransFromTo()">To here</a> - <b>From here</b>' +
                       '<form name="PubTransForm">' +
                       '<input type="hidden" name="dirmode" value="endmode">' +
                       '<table><tr><td>' +
                       '<small>End address:</small><br>' +
                       '<input type="text" size="20" MAXLENGTH=40 name="typedaddr1" style="border:1px solid #999999;"/>' +
                       '</td><td>' +
                       '&nbsp;<small>City:</small><br>' +
                       '&nbsp;<input type="text" size="10" MAXLENGTH=40 name="typedaddr2" style="border:1px solid #999999;"/>' +
                       '</td><td>' +
                       '<small><br></small><INPUT value="Find" TYPE="button" onclick="dirPackURL(this.form,\'' + marker.gsaddr1 + '\',\'' + marker.gscity + '\')">' +
                       '</td></tr></table></form>' +
                       '</div>'

            + '</div>';
}

function tgDirFromTo() {
    document.getElementById("dirPubTransTo").style.display = 'none';
    document.getElementById("dirPubTransFrom").style.display = 'none';
    var dirTo = document.getElementById("dirTo");
    var dirFrom = document.getElementById("dirFrom");
    dirTo.style.display = dirTo.style.display == '' ? 'none' : '';
    dirFrom.style.display = dirFrom.style.display == '' ? 'none' : '';
}

function tgDirTo() {
    document.getElementById("dirPubTransTo").style.display = 'none';
    document.getElementById("dirPubTransFrom").style.display = 'none';
    var container = document.getElementById("dirTo");
    var sNearby = document.getElementById("sNearby");
    //    var opSt = document.getElementById("opSt");
    document.getElementById("dirFrom").style.display = 'none';
    document.getElementById("dirPubTransTo").style.display = 'none';
    container.style.display = '';
    // container.style.display == '' ? 'none' : '';
    if (sNearby.style.display == '') {
        sNearby.style.display = 'none';
    }
    //  if (opSt.style.display == '') {
    //      opSt.style.display = 'none';
    //  }
}

function tgsNearby() {
    document.getElementById("dirPubTransTo").style.display = 'none';
    document.getElementById("dirPubTransFrom").style.display = 'none';
    var container = document.getElementById("sNearby");
    var dirTo = document.getElementById("dirTo");
    var dirFrom = document.getElementById("dirFrom");

    // var opSt = document.getElementById("opSt");
    container.style.display = '';
    //container.style.display == '' ? 'none' : '';
    if (dirTo.style.display == '') {
        dirTo.style.display = 'none';
    }
    // if (opSt.style.display == '') {
    //     opSt.style.display = 'none';
    // }
    dirFrom.style.display = 'none';
}

function tgopSt() {
    document.getElementById("dirPubTransTo").style.display = 'none';
    document.getElementById("dirPubTransFrom").style.display = 'none';
    var container = document.getElementById("opSt");
    var dirTo = document.getElementById("dirTo");
    var sNearby = document.getElementById("sNearby");
    document.getElementById("dirFrom").style.display = 'none';
    container.style.display = '';
    //container.style.display == '' ? 'none' : '';
    if (dirTo.style.display == '') {
        dirTo.style.display = 'none';
    }
    if (sNearby.style.display == '') {
        sNearby.style.display = 'none';
    }
}

function tgDirPubTransTo() {
    var container = document.getElementById("dirPubTransTo");
    document.getElementById("sNearby").style.display = 'none';
    document.getElementById("dirFrom").style.display = 'none';
    document.getElementById("dirTo").style.display = 'none';
    container.style.display = '';
}

function tgDirPubTransFromTo() {
    document.getElementById("sNearby").style.display = 'none';
    document.getElementById("dirFrom").style.display = 'none';
    document.getElementById("dirTo").style.display = 'none'
    var dirPubTransTo = document.getElementById("dirPubTransTo");
    var dirPubTransFrom = document.getElementById("dirPubTransFrom");
    dirPubTransTo.style.display = dirPubTransTo.style.display == '' ? 'none' : '';
    dirPubTransFrom.style.display = dirPubTransFrom.style.display == '' ? 'none' : '';
}

function dirPackURL(form, addr, city) {
    var ts = addr;
    var tc = city;
    var fs = form.typedaddr1.value;
    var fc = form.typedaddr2.value;
    var dirmode = form.dirmode.value;

    ts = ts.replace(/&/, "%26");
    tc = tc.replace(/, CA/, "");
    fc = fc.replace(/, CA/, "");
    fc = fc.replace(/, ca/, "");

    if (dirmode == 'endmode') {
        var fstmp = fs;
        var fctmp = fc;
        fs = ts;
        fc = tc;
        ts = fstmp;
        tc = fctmp;
    }

    //current time
    var now = new Date();
    var hours = now.getHours();
    var minutes = now.getMinutes();
    var t1 = "" + ((hours > 12) ? hours - 12 : hours);
    if (t1 == "0") t1 = 12;
    t1 += ((minutes < 10) ? ":0" : ":") + minutes;
    var am1 = (hours >= 12) ? "PM" : "AM";

    var URLstr = 'http://tripplanner.transit.511.org/';
    var URLstr2=  'http://transit.511.org/tripplanner/index.aspx?' +
                 'fs=' + fs + '&' +
                 'fc=' + fc + '&' +
                 'ts=' + ts + '&' +
                 'tc=' + tc + '&' +
                 'tm=L&' +
                 't1=' + t1 + '&' +
                 'am1=' + am1 + '&' +
                 'td=O&' +
                 'op=F&' +
                 'of=R&' +
                 'ow=120';
    window.open(URLstr);
}

// function to show searchResults
function toggleTabOnSearch() {
    tabSFICG.setAttributes({contentVisible: false, active:false });
    tabGSSEARCH.setAttributes({contentVisible: true, active:true  });
}

function gup(name)
{
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.href);
    if (results == null)
        return "";
    else
        return results[1];
}

function track(page) {
    try {
        pageTracker._trackPageview("/gs/sficg2008/" + page);
    }
    catch (ex) {
        //    alert(ex);
    }
    //alert ("/gs/sficg2008/" + page);
}

// - - - - - - - - - - - - - - --  - - - - - --  - - - - - - - - - - - - - - -  - - - - - - - - - -- -

/*
 *
 * function prepareSideBarDivs (markerList) {

	    var aik;
		var sb_divs = '<div id="currentBiz" style=\"display:none;\"></div>'
		              + '<div id="container"> AK-container';

	    for (aik = 0; aik <= markerList.getLength() - 1; aik++) {
			var curMarker = markerList.getAt(aik);
			//@todo move the mousover behavior into updateSideBar, where the module is created we do not need mouseover in the beginning
			side_bar_htmlElem = '<a name="'+curMarker.no+'"><div id="biz' + curMarker.no + '" onmouseover=\"mhilite(cache["gs"].getAt(' + curMarker.no + '));\" onmouseout=\"munhilite(cache.getAt(' + curMarker.no + '));\" style=\"display:klaro;\">'
								+'</div></a>';
			sb_divs += side_bar_htmlElem;
		}
		sb_divs += '</div>'; // closing container
		YAHOO.widget.LayoutUnit.getLayoutUnitById("left1").body.innerHTML = sb_divs;
}

 function updateSidebar (markerList) {
  //  side_bar_html = "";
   // side_bar_html_right = "";
    var aik;
    for (aik=0; aik<= markerList.getLength()-1; aik++){

        var curMarker = markerList.getAt(aik);

        side_bar_htmlElem = '<div id="biz' + curMarker.no + '" onmouseover=\"mhilite(cache.getAt('+ curMarker.no +'));\" onmouseout=\"munhilite(cache.getAt(' +curMarker.no + '));\" >'
                         +'<table>'
                         +'<tr>'
                          +'<td>' + (1+curMarker.no) + '</td>'
                         +'<td><a href="javascript:minfo(' + curMarker.no + ')" name="'+curMarker.no+'">' + curMarker.gstitle + '</a><br>'
                         + curMarker.gsaddr1 + ', ' + curMarker.gscity + '</td>'
                         +'<td>' +curMarker.gsopstatus+ '</td>'
					//	 +'<td><button id="show'+aik+'"> + </button><button id="hide'+aik+'"> - </button></td>'
                         +'</tr>'
                       + '</table>'
                /*       +'<div id="module'+aik+'" onclick="new YAHOO.widget.Effects.BlindUp(this, {bind: \'bottom\'});">'
					   		+ ' get directions | search nearby<br/>'
							+ '<br/> Delicatessen:     open'
							+ '<br/> Grocery Store:    open'
							+ '<br/> Floral:           open'
   							+ '<br/> Meat and Buchery: open'
					   +'</div>'
			  */
/*
+ '<hr>'
        + '</div>';
//  if (!curMarker.module) { // this does not work here, need to render list first to have access to the <div "id=module*">
//  prepareModule(aik);
//  }
/*    side_bar_html += side_bar_htmlElem;
    curMarker.sbhtml = side_bar_htmlElem;
   }
   if (side_bar_html == "undefined") {
       side_bar_html = "Please zoom in...";
   }
   YAHOO.widget.LayoutUnit.getLayoutUnitById("left1").body.innerHTML = side_bar_html;

  // prepareModules(); // del for now
  // document.getElementById("status").innerHTML = aik + " results on map";

   updateHeaderNFooter();


   //YAHOO.widget.LayoutUnit.getLayoutUnitById("right").body.innerHTML = side_bar_html_right;
}
function showNextTenMarkers() {
   var tmpList = addMarkersFromCacheToMarkerManager();
   //alert( "-->" + tmpList.mArray);
    mgr.addMarkers( tmpList.mArray , 0 );
    mgr.refresh();
    //updateSidebar ( tmpList );
        YAHOO.gs.container.layout.render();
}


function setAll(){
   for (var n=0; n<cache.getLength(); n++) {
       setGsIcon(cache.getAt(n));
   }
}

function setGsIcon(marker) {
   var baseURL = "http://www.geospot.com/gs/GetResource?xsi="
   marker.setImage(baseURL + marker.gsicon);
}
*/

/*
function bringToFront(marker){
	marker.hide();
	marker.frontMarker = new GMarker(marker.getPoint(), {zIndexProcess:importanceOrder});
	marker.frontMarker.gsparent = marker;
//	marker.foregroundMarker.setImage ( baseURL + marker.gsicon );
    addGSListeners(marker.frontMarker);
	mgr.addMarker(marker.frontMarker , 0);
	mgr.refresh();
}
//bringToFront(cache.getAt(4));

*/

// -----------------------------------------------------------------------------

/*
 function pagination ( elemsPerPage ) {
	// sidebar elements
	var headerGS =  document.getElementById("srgshd");
	var body = YAHOO.widget.LayoutUnit.getLayoutUnitById("left1").body;
	var footerGS =   document.getElementById("gspagination");
	var totalElems = cache.getLength();
	var defaultElemsPerPage = 8;
	var currentPage = 1;


	//footerGS.innerHTML = "1 | 2 | 3 | ... | 8";

	if (!elemsPerPage) {
		elemsPerPage = defaultElemsPerPage;
	}
	else if (elemsPerPage <= 0) {
		elemsPerPage = defaultElemsPerPage;
	}
	var pages = Math.ceil(totalElems / elemsPerPage);

	var footerLinks = '';
	for (var pak=1; pak<=pages; pak++) {
		  footerLinks += '<a href=\"'+pak+'\">' +pak+ '</a> | ';
		}
		footerLinks += 'last';
	footerGS.innerHTML = footerLinks;
	headerGS.innerHTML = 'Results '+ currentPage +' to '+ elemsPerPage +' of ' + totalElems;

}

function updatePage(currentPage, elemsPerPage, totalElems) {
	var headerGS =  document.getElementById("srgshd");

	var eStart = currentPage * elemsPerPage;
	var eEnd = totalElems;
	if( eStart + eEnd < totalElems) {
		elemsEnd = elemsStart + elemsPerPage;
	}

	headerGS.innerHTML = 'Results '+ eStart +' to '+ eEnd +' of ' + totalElems;

}


function paginationUpdate(page) {
		currentPage = page;
		headerGS.innerHTML = 'Results '+ currentPage +' to '+ elemsPerPage +' of ' + totalElems;
	}

       var tmpStatus = Array();
function prepareModules() {

	// cache.getAt(1).module.render($("mymap")); <------------------ this might be an alternative
	for (var number = 0; number < cache.getLength(); number++) {

		var aMarker = cache.getAt(number);
		var divId = "module" + number;
		var exist = document.getElementById(divId);
		//  alert (divId);
		aMarker.module = new YAHOO.widget.Module("" + divId + "", {
			visible: false

		});
	    aMarker.module.setHeader("<br/>");
		//aMarker.module.setBody("dynamic content here");
	    aMarker.module.setFooter("<br />");
		//aMarker.module.render();

		tmpStatus[number] = exist + " <==> " + divId + " " + aMarker.module.render();
		YAHOO.util.Event.addListener('show' + number + '', "click", cache.getAt(number).module.show, cache.getAt(number).module, true);
		YAHOO.util.Event.addListener('hide' + number + '', "click", cache.getAt(number).module.hide, cache.getAt(number).module, true);
		YAHOO.util.Event.addListener('toggle' + number + '', "click", cache.getAt(number).module.hide, cache.getAt(number).module, true);

	}
}


function tg(cat){
	for (aik=0; aik<= markerList.getLength()-1; aik++){
	  markerToTest = markerList.getAt(i);
	  if (markerToTest.cat == cat) {
      	mgr.removeMarker(markerToTest);
   }
	}
}


 function importanceOrder (marker,b) {
        return GOverlay.getZIndex(marker.getPoint().lat()) + marker.importance*1000000;
      }
*/