//<![CDATA[
var ip = 0;
var gmarkersp = [];
cache["sficg"] = new CList();
var gicons = [];
var categories = new CList();
var fs;
var fc;
var ts;
var tc;

function createGsIcon(cat, path) {
    var _path;
    if (path == "") {

        if (cat == "hotel") {
            _path = "/gs/pub/icon/24/hotel/building.png";
        }
        if (cat == "parking") {
            _path = "/gs/pub/icon/24/hotel/building.png";
        }
        else if (cat == "info") {
            _path = "/gs/pub/icon/24/tours/historical_tour.png";
        }
        else if (cat == "venue") {
            _path = "/gs/pub/icon/24/sporting/multisport.png";
        }
        else if (cat == "airport") {
            _path = "/gs/pub/icon/24/tour/plane_tour.png";
        }
        else if (cat == "dorm") {
            _path = "/gs/pub/icon/24/singlelife/camping_trip.png";
        }
        else if (cat == "tour") {
            _path = "/gs/pub/icon/24/tours/bike_tour.png";
        }

    } else {
        _path = path;
    }
    var _icon = new GIcon();
    _icon.image = baseURL + _path;
    _icon.iconSize = new GSize(24, 24);
    _icon.iconAnchor = new GPoint(12, 12);
    _icon.infoWindowAnchor = new GPoint(12, 12);
    return _icon;
}


// A function to create the marker and set up the event window
function createMarkerPartner(point, title, gssuper, html, icon, desc, addr1, addr2, city, phone, url, opstatus, cat, rating, xsi) {
    //alert ("createMarkerPartner");
    var gglicon = createGsIcon(cat, icon);
    var marker = new GMarker(point, gglicon);
    // === Store the category and name info as a marker properties ===

    marker.gstitle = title;
    marker.gssup = gssuper;
    marker.gshtml = html;
    marker.gsicon = icon;
    marker.gsdesc = desc;
    marker.gsaddr1 = addr1;
    marker.gsaddr2 = addr2;
    marker.gsphone = phone;
    marker.gsurl = url;
    marker.gscity = city;
    marker.gsopstatus = opstatus;
    marker.gscat = cat;
    marker.gsrating = rating;
    marker.hiliteOvl = Array();
    marker.gsxsi = xsi;
    marker.cntp = "sficg";
    // content provider
    marker.no = ip;


    addGSListeners(marker);
    // gmarkersp.push(marker);
    if (cache["sficg"].addUnique(marker)) {
        ip++;
    }
    categories.addUnique(cat);
}

// == showps all markers of a particular category, and ensures the checkbox is checked ==
function showp(category) {
    //alert ('showp ' + category);
    for (var i = 0; i < cache["sficg"].getLength(); i++) {
        if (cache["sficg"].getAt(i).gscat == category) {
            cache["sficg"].getAt(i).show();
            mgr.addMarker(cache["sficg"].getAt(i), 0);
        }
    }
    showPartnerBounds(category);
    track("home/show_cat/" + category);
    // == check the checkbox ==
    // document.getElementById(category + "box").checked = true;
}

// == hideps all markers of a particular category, and ensures the checkbox is cleared ==
function hidep(category) {
    if (category != 'venue') {
        for (var i = 0; i < cache["sficg"].getLength(); i++) {
            if (cache["sficg"].getAt(i).gscat == category) {
                cache["sficg"].getAt(i).hide();
                mgr.removeMarker(cache["sficg"].getAt(i));
            }
        }
        // == clear the checkbox ==
        var elem = document.getElementById(category + "box");
        if (elem) {
            elem.checked = false;
        }
        // == close the info window, in case its open on a marker that we just hid
    }
    map.closeInfoWindow();
}

// == a checkbox has been clicked ==
function boxclick(box, category) {
    if (box.checked) {
        showp(category);
        // showPartnerBounds(category);
    } else {
        hidep(category);
    }
    // == rebuild the side bar
    // makeSidebar();
}

function myclick(i) {
    GEvent.trigger(cache["sficg"].getAt(i), "click");
}


// == rebuilds the sidebar to match the markers currently displayed ==
function makeSidebar() {
    var html = "";
    for (var i = 0; i < cache["sficg"].getLength(); i++) {
        if (!cache["sficg"].getAt(i).isHidden()) {
            html += '<a href="javascript:myclick(' + i + ')"  onmouseover=\"mhilite(cache[\'sficg\'].getAt(' + i + '));\" onmouseout=\"munhilite(cache[\'sficg\'].getAt(' + i + '));\">' + cache["sficg"].getAt(i).gstitle + '</a><br>';
        }
        // document.getElementById("sficg_side_bar").innerHTML = html;
    }
}

var sficgovl = false;
// Read the data
function initp() {
    if (!sficgovl) {
        initMarkerManager();
        GDownloadUrl("content.xml", function(doc, responseCode) {

            if (responseCode == 200) {
                var xmlDoc = GXml.parse(doc);
                var markers = xmlDoc.documentElement.getElementsByTagName("marker");

                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 gssuper = markers[i].getAttribute("super");
                    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 city = markers[i].getAttribute("city");
                    var phone = markers[i].getAttribute("phonenum");
                    var url = markers[i].getAttribute("url");
                    var opstatus = markers[i].getAttribute("opstatus");
                    var cat = markers[i].getAttribute("category");
                    var rating = markers[i].getAttribute("rating");
                    var xsi = markers[i].getAttribute("xsi");

                    createMarkerPartner(point, title, gssuper, html, icon, desc, addr1, addr2, city, phone, url, opstatus, cat, rating, xsi);

                }
                mgr.addMarkers(gmarkersp, 0);
                // == showp or hidep the categories initially ==
                // showInitP('airport')

                // == create the initial sidebar ==
                // makeSidebar();
                sficgovl = true;
                makeAccordion();
                // this is too early for IE

                initpByUrl(gup('acc'));
                generateSFICDir();

            } else if (responseCode == -1) {
                document.getElementById("srgshd").innerHTML = '<div id="uistatusSFICG">Fetching ICG Overlay timed out. Please reload the page. .</div>';
            } else {
                // alert("Request resulted in error. Check XML file is retrievable. " + responseCode);
                document.getElementById("srgshd").innerHTML = '<div id="uistatusSFICG">ICG Overlay not retrievable. [ Error ' + responseCode + ' ]</div>';

            }

        });
    }
}

function showInitP(cat) {
    if (categories) {
        for (var n = 0; n < categories.getLength(); n++) {
            if (categories.getAt(n) == cat) {
                showp(cat);
                AccordionMenu.openDtById('acc_' + cat);
            }
            else {
                hidep(cat);
                AccordionMenu.closeDtById('acc_' + cat);
            }
        }
    }
}

function initpByUrl(input) {
    track("home/" + input)
    try {
        var l = input.length;
        var acc;

        if (l == '-1') { /* no url params do nothing */
        }
        else {
            acc = input.charAt(i);
        }
        // for (var i = 0; i < l; i++) {
        if (acc == '1') {
            showInitP('venue');
        }
        if (acc == '2') {
            showInitP('parking');
        }
        if (acc == '3') {
            showInitP('airport');
        }
        if (acc == '4') {
            showInitP('hotel');
        }
        if (acc == '5') {
            showInitP('tour');
        }
        if (acc == '6') {
            showInitP('embassy');
        }
    }
    catch (ex) {
        // alert ("wrong or missing init parameter");
    }
    //}
}

function showPartnerBounds(cat) {
    if (!cat) {
        map.setCenter(new GLatLng(37.69631767236258, -122.33070373535156), 11);
    } else {
        if (cat == "venue") {
            map.setZoom(13);
            setTimeout("map.panTo(new GLatLng(37.75144384252929, -122.43816375732422))", '20');
        } else if (cat == "parking") {
            map.setZoom(13);
            setTimeout("map.panTo(new GLatLng(37.75144384252929, -122.43816375732422))", '20');
        }
        else if (cat == "airport") {
            map.setZoom(10);
            setTimeout("map.panTo(new GLatLng(37.55002139332707, -122.05398559570312))", '20');
        } else if (cat == "hotel") {
            map.setZoom(14);
            setTimeout("map.panTo(new GLatLng(37.79072672589345, -122.40340232849121))", '20');
        } else if (cat == "tour") {
            map.setZoom(12);
            setTimeout("map.panTo(new GLatLng(37.78726741375342, -122.42305755615234))", '20');
        } else if (cat == "embassy") {
            map.setZoom(6);
            setTimeout("map.panTo(new GLatLng(36.50963615733049, -118.4326171875))", '20');

        }
    }
}

function makeAccordion() {

    var container = document.getElementById("sficg_side_bar");
    var sficg = "sficg";
    var accordionHD = '<dl class="accordion-menu" id="my-dl">';
    var accordion = [];

    for (var cc = 0; cc < categories.getLength(); cc++) {

        var curCat = categories.getAt(cc);

        accordion[curCat] = '<dt class="a-m-t" id="acc_' + curCat + '"><img src="images/' + curCat + '.png" align="absmiddle" height="16" width="16">&nbsp;&nbsp;' + getCatTitle(curCat) + '</dt>' +
                            '<dd class="a-m-d">' +
                            '<div class="bd" id="sficg_' + curCat + '" style="width:*; height:80px; overflow:auto;">' +
                            '<div align="right"><a href="javascript:showPartnerBounds(\'' + curCat + '\');">zoom to area</a><br/></div>';
        for (var ii = 0; ii < cache['sficg'].getLength(); ii++) {
            if (cache['sficg'].getAt(ii).gscat == curCat) {
                accordion[curCat] += '<a href="javascript:myclick(' + ii + ')"  onmouseover="mhilite(cache[\'sficg\'].getAt(' + ii + '));" onmouseout=\"munhilite(cache[\'sficg\'].getAt(' + ii + '));\">' + cache[sficg].getAt(ii).gstitle + '</a><br>';
            }
        }
        accordion[curCat] += '</div> </dd>';
    }


    var accordionFT = '</dl>';

    var accVenue = "";
    var accRest = "" ;

    var accck = accordionHD + accordion['venue'] + accordion['parking'] + accordion['airport'] + accordion['hotel'] + accordion['tour'] + accordion['embassy'] + accordionFT;
    container.innerHTML = accck;
}

function getCatTitle(cat) {
    var title = [];
    title ['venue'] = "Venues";
    title ['parking'] = "Parking for Venues";
    title ['airport'] = "International Airports";
    title ['hotel'] = "Recommended Hotels";
    title ['tour'] = "Recommended Tours";
    title ['embassy'] = "Foreign Consulates";

    if (title[cat])
        return title[cat];
    return cat;
}

function createCheckBoxes() {
    var checkbox = '<li><input type="checkbox" id="airportbox" onclick="boxclick(this,\'airport\')" checked="true" /> International Airports</li>' +
                   '<li><input type="checkbox" id="venuebox" onclick="boxclick(this,\'venue\')" disabled="true" /> Events Venues (12)</li>' +
                   '<li><input type="checkbox" id="hotelbox" onclick="boxclick(this,\'hotel\')" /> Recommended Hotels (10)</li>' +
                   '<li><input type="checkbox" id="infobox" onclick="boxclick(this, \'info\')" /> Recommended Tours</li>' +
                   '<li><input type="checkbox" id="dormbox" onclick="boxclick(this,\'dorm\')" /> Dormitories</li>' +
                   '<li><input type="checkbox" id="transportbox" onclick="boxclick(this,\'transport\')" /> Transportation</li>' +
                   '<li><input type="checkbox" id="tennisbox" onclick="boxclick(this,\'tennis\')" /> Tennis</li>' +
                   '</ul>';
}

//---------------------------------------------------------------------------------------------------------------------
function generateSFICDir() {

    var selectFromHead = '<div id="dirhd"><br />From:<br /></div>' +
                         '<select name="otheraddr1ak" id="otheraddr1ak" onchange="buildURL(this,false);"><option value="">select...</option>';

    var selectToHead = '<div id="dirft">To: <br /></div>' +
                       '<select name="otheraddr2ak" id="otheraddr2ak" onchange="buildURL(false,this);"><option value="">select...</option>';

    var selectFrom1;
    var selectFrom2;
    var selectFrom3;
    var selectFrom4;
    var selectTo1;

    for (var i = 0; i < cache['sficg'].getLength(); i++) {
        var tmp = cache['sficg'].getAt(i);
        if (tmp.gscat == 'airport') {
            selectFrom1 += '<option value="' + i + '">' + tmp.gstitle + '</option>';
        }
        if (tmp.gscat == 'hotel') {
            selectFrom2 += '<option value="' + i + '">' + tmp.gstitle + '</option>';
        }
        if (tmp.gscat == 'sfplaces') {
            selectFrom3 += '<option value="' + i + '">' + tmp.gstitle + '</option>';
        }
        if (tmp.gscat == 'transit') {
            selectFrom4 += '<option value="' + i + '">' + tmp.gstitle + '</option>';
        }
        if (tmp.gscat == 'venue') {
            selectTo1 += '<option value="' + i + '">' + tmp.gstitle + '</option>';
        }
    }

    var selectFromTitle1 = '<optgroup label="----- Airports -----" class="selectTitle">';
    var selectFromTitle2 = '<optgroup label="----- Accommodations -----" class="selectTitle">';
    var selectFromTitle3 = '<optgroup label="----- Places in S.F. -----" class="selectTitle">';
    var selectFromTitle4 = '<optgroup label="----- Transits -----" class="selectTitle">';

    var selectFromTail = '</select>'
            + '<br /><br />';
    var selectToTail = '</select><br />';

    var checkBox = '<br /><div id="srcRevDir">' +
                   '<input id="cbreverse" type="checkbox" name="cbreverse" onclick="publicTransRevToggle();">&nbsp;Reverse Directions<br/>' +
                   '<br /><input type="radio" name="group1" id="driving" value="driving" checked>&nbsp;Get Driving Directions' +
                   '<br /><input type="radio" name="group1" id="public" value="public">&nbsp;Find Public Transportation' +
                   '</div>'


    var sbutton1 = '<br /><div align=right id="srcDirOpt">' +
                   '<input type="button" onclick="submitDirections();" value="    Go!    "/>' +
                   '</div>';

    var sbutton2 = '<div align="right" id="srcDirOpt2"></div>';

    var retval = selectFromHead
            + selectFromTitle1 + selectFrom1 + '</optgroup>'
            + selectFromTitle2 + selectFrom2 + '</optgroup>'
            + selectFromTitle3 + selectFrom3 + '</optgroup>'
            + selectFromTitle4 + selectFrom4 + '</optgroup>'
            + selectFromTail
            + selectToHead + selectTo1
            + selectToTail
            + checkBox
            + sbutton1
            + sbutton2;
    document.getElementById("srcDirDiv").innerHTML = retval;
    //showPublicTransport();
}

function submitDirections() {
    if (document.getElementById("driving").checked) {
        getDirectionsSFICG();
    } else {
        var _511url = get511_PublicTransport_URL();
        if (_511url != 'null') {
            window.open(_511url);
        }
    }
}

function buildURL(selFrom, selTo) {
    var stTmp;
    try {
        //getting form element from the drop down
        if (selFrom == false) {
            sel = selTo;
        } else {
            sel = selFrom;
        }

        var selIndex = sel.options[sel.selectedIndex].value;
        var tmp = cache['sficg'].getAt(selIndex);

        /*
        //make sure which one to use the addresses
        if (tmp.gsaddr2!=null) {
            stTmp = tmp.gsaddr2;
        }
        else {
            stTmp = tmp.gsaddr1;
        }
        */
        stTmp = tmp.gsaddr1;

        //trim off ', CA' string for street
        if (instr(stTmp, ', CA') > 0) {
            st = mid(stTmp, 0, stTmp.indexOf(', CA'));
        }
        else {
            st = stTmp;
        }

        //trim off ', CA' string for city
        var citytmp = tmp.gscity;
        var city = mid(citytmp, 0, citytmp.indexOf(','));

        //check if this is from or to, then fill up values
        if (selFrom == false) {
            ts = st;
            tc = city;
        }
        else {
            fs = st;
            fc = city;
        }
    } catch (ex) {
    }
    //showPublicTransport();
}

function mid(str, start, len)
{
    // Make sure start and len are within proper bounds
    if (start < 0 || len < 0) return "";
    var iEnd, iLen = String(str).length;
    if (start + len > iLen)
        iEnd = iLen;
    else
        iEnd = start + len;
    return String(str).substring(start, iEnd);
}

function instr(strSearch, charSearchFor)
{
    for (i = 0; i < strSearch.length; i++) {
        if (charSearchFor == mid(strSearch, i, 1)) {
            return i;
        }
    }
    return -1;
}

function get511_PublicTransport_URL() {
    //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";

    if (fs != null && ts != null) {
        fs = fs.replace(/&/, "%26");
        ts = ts.replace(/&/, "%26");
        var URLstr = 'http://tripplanner.transit.511.org/';
        var URLstr1 = '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';
        //document.getElementById('srcDirOpt2').innerHTML = '<br><a href="'+URLstr+'" id="btn_pubtransport" target="_blank">Find Public Transportation <img src="images/ico_arrow.png" align="absmiddle" border="0"></a>';
        return URLstr;
    }
    else {
        return 'null';
    }

}

function publicTransRevToggle() {
    var fstmp = fs;
    var fctmp = fc;
    fs = ts;
    fc = tc;
    ts = fstmp;
    tc = fctmp;
    //get511_PublicTransport_URL(); //showPublicTransport();
}

//]]>