var pano, panoClient, sview, sviewToolbar;
var svpin, showSvNa;

function setStreetViewToggle() {
    if (!sviewToolbar) {
        sviewToolbar = new esri.toolbars.Draw(map, { showTooltips: true });
        dojo.connect(sviewToolbar, "onDrawEnd", setupStreetViewFromClick);

        // add toolbar to main app's collection to allow other tools to turn off this tool
        toolObjects.push(sviewToolbar);
    }
    deactivateTools();
    deactivateIdentify();
    deactivateSearchbyPoly();
    deactivateTextLabel();
    esri.bundle.toolbars.draw.addPoint = "Click to open StreetView at this location (opens below map)";
    sviewToolbar.activate(esri.toolbars.Draw.POINT);
//    if (!svHandle)
//        svHandle = dojo.connect(map, "onClick", setupStreetViewFromClick);
    dojo.byId("map_layers").style.cursor = 'pointer';
    setNavIcon('streetview');
}

function setupStreetViewFromClick(evt) {
    var geoPt = esri.geometry.webMercatorToGeographic(evt);
    setupStreetView(geoPt.y, geoPt.x, evt);
}

function setupStreetView(lat, lng, webMercatorPoint, showNotAvailable) {
    if (!webMercatorPoint)
        webMercatorPoint = esri.geometry.geographicToWebMercator(new esri.geometry.Point(lng, lat, new esri.SpatialReference({ wkid: 4326 })));
    showSvNa = (showNotAvailable == null) ? true : showNotAvailable;

    if (svpin)
        map.graphics.remove(svpin);

    var marker = new esri.symbol.PictureMarkerSymbol('http://cdn.tierraplan.com/images/mappins/pin-blue.png', 36, 38);
    marker.yoffset = 17;
    marker.xoffset = 7;
    
    var attr = { "Long": lng.toPrecision(6), "Lat": lat.toPrecision(6) };
    var titleHTML = "<span style='margin:0'>StreetView<span style='margin-left:30px;color:#999;cursor:pointer' onclick='map.infoWindow.hide()'>x</span></span>"; //  "<div style='margin-left: auto; margin-right: auto;height:20px;'>";
    //titleHTML += "<div style='float:left;'>Street View Point</div></div>";
    contentHTML = "${Lat}, ${Long}<br/><a href='#' onclick='hideStreetView();return false;'>Close Street View</a>"
    var infoTemplate = new esri.InfoTemplate(titleHTML, contentHTML);
    
    svpin = new esri.Graphic(webMercatorPoint, marker, attr, infoTemplate)
    showStreetView(lat.toString(), lng.toString());
    $('div.title').css('margin', '0');
}

function hideStreetView() {
    sview = dojo.byId("sview");
    sview.style.innerHTML = "";
    sview.style.visibility = "hidden";
    sview.style.height = "0";
    dojo.byId("sview").style.visibility = "hidden";
    dojo.byId("hideStreetview").style.visibility = "hidden";
    dojo.byId("hideStreetview").style.height = "0";
    if (svpin)
        map.graphics.remove(svpin);
    svpin = null;
    map.infoWindow.hide();
}

function showStreetView(lat, lng) {
    sview = document.getElementById("sview");
    var sv = new google.maps.StreetViewService();

    var pt = new google.maps.LatLng(lat, lng);
    sv.getPanoramaByLocation(pt, 50, processSVData);
}

function processSVData(data, status) {
    if (status == google.maps.StreetViewStatus.OK) {
        sview = dojo.byId("sview");
        sview.style.visibility = "visible";
        sview.style.height = "290px"; 

        var panoramaOptions = {position: pt};
        var myPano = new google.maps.StreetViewPanorama(sview, panoramaOptions);
        var PanoID = data.location.pano;
        // Set the Pano to use the passed panoID
        myPano.setPano(PanoID);
        myPano.setPov({
            heading: 270,
            pitch: 0,
            zoom: 1
        });
        myPano.setVisible(true);
        
        dojo.byId("hideStreetview").style.visibility = "visible";
        dojo.byId("hideStreetview").style.height = "15px";

        map.graphics.add(svpin);
        map.graphics.enableMouseEvents();
        map.infoWindow.resize(140, 90);

        dojo.connect(map.graphics, "onMouseOver", function (evt) {
            map.setMapCursor('pointer');
        });

        dojo.connect(map.graphics, "onMouseOut", function (evt) {
            map.setMapCursor('default');
        });
    }
    else {
        if (showSvNa)
            alert("Sorry, no street view data is nearby this point.");
        hideStreetView();
    }
}
