// #######################################################################################
// Purpose:  This module handles all of the "SelectParcel" task sidebar & toolbar
//
// Functions:
//      initSelectParcel: Called from Map::onBaseMapLayerLoaded - initializes the function, requires the parcel layer id
//      doSelect: Event triggered by user click (via identify::navToolbar_onclick function) - do an identify on the parcel layer to get Tax Card
//      showParcel: Triggered from PrintResults panel(user click on the PID link) or when a user clicks on the link in identify window
//      doSelect_Error:  Error function
//      doSelect_Completed: get the response from the server from doSelect function, populates the tax card panel.
//
//      writeTaxCard: Starting point for tax card
//      taxcard_showTab: changes the tab image
//      writeHeader: writes the top of part of the side panel
//      writeFooter: writes the disclaimer stuff at the bottom
//      showCAMA: writes the CAMA tab
//      showSalesInfo: writes the sales into tab
//      showBuildingList: writes the building list tab
//      showBdlgDetails: writes the Building Detail report
//      showBuildingDetails: Goes to the server and get the Building details from the webservice and then calls the showBdlgDetails function to write the details to the side panel
//      drawSketch: draw the sketch of a building in the building map which is initialized in map::init
//      getPDFTaxCard: Go to server and get a PDF Report from webservices
// #########################################################################################

var taxCardhighlightSymbol = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255, 255, 0]), 3);
var selectHandleId;
var workingDivHTML="<div style=\"margin:20px 7px 7px; height: 50px; text-align:center;font-size:1.2em; font-weight:bold;\"><p><img src=\"images/pleasewait.gif\" alt=\"please wait\"/></p><p>Looking up the tax parcel</p></div>"
var parcel;
var selectTask, selectParams;
var currentTaxTab;
var detailGraphics;

//////////////////////
// Select parcel code
//////////////////////

function initSelectParcel() {

    try {
        selectTask = new esri.tasks.IdentifyTask(searchURL);
        selectParams = new esri.tasks.IdentifyParameters();
        selectParams.tolerance = 1;
        selectParams.returnGeometry = true;
        selectParams.layerIds = [parcels_layerID];
        selectParams.layerOption = esri.tasks.IdentifyParameters.LAYER_OPTION_ALL;


    } catch (Error) {
    console.warn("An error occurredin 'initSelectParcel'", Error);

    }
}

function doSelect(evt) {

    // reset the globals parameters
    map.graphics.clear();
    bufferGraphics.clear();
    selectionGraphics.clear();
    detailGraphics.clear();
    currentResultSet = null;

    // Initialize the panel
    showPanel("TAXCARD");
    dojo.byId("taxcard-backbutton").innerHTML = "";
    dojo.byId("taxcard-header").innerHTML = "";
    dojo.byId("taxcard-footer").innerHTML = "";
    dojo.byId("taxcard-content").innerHTML = workingDivHTML;
    dojo.style("buildingMap", { display: "none" });
    
    // Select the parcel    
    selectParams.geometry = evt.mapPoint;
    selectParams.mapExtent = map.extent;
    selectTask.execute(selectParams, function(idResults) { doSelect_Completed(idResults, evt); }, doSelect_Error);
}

//function showParcel(index, isIdentify) {
//    try {
//        var selectedGraphic = map.graphics.graphics[index];
//        if (selectedGraphic != null) {
//            selectedGraphic.setSymbol(taxCardhighlightSymbol);
//            //map.graphics.add(selectedGraphic);
//            zoomMap(selectedGraphic.geometry);
//            selectedParcelGeometry = selectedGraphic.geometry;
//            showPanel("TAXCARD");
//            if (!isIdentify)
//                dojo.byId("taxcard-backbutton").innerHTML = "<a href=\"#\" onmousedown=\"showPanel('RESULTS');\"><img src=\"images/back.gif\" alt=\"back to search results\"/> Back to Search Results</a>";
//            else
//                map.infoWindow.hide();
//            var pid = selectedGraphic.attributes["PID"];
//            getTaxCardFromServer(pid);
//        }
//    }
//    catch (Err) {
//        doSelect_Error(Err);
//    }
//}

function showParcelDetail(graphic) {

    try {
        detailGraphics.clear();
    
        if (detailGraphics.geometry != null) {
                // Create template for the info window
                try {

                    // this is a work around for problem with dojo shape is null when shape is not in the current extent
                    //  problem occurred at v1.4
                    zoomAfterLoadEvntHandle = dojo.connect(map, "onExtentChange", function() {
                        try {
                            detailGraphics.setSymbol(taxCardhighlightSymbol);
                        } catch (Error) {
                            console.debug("Still getting the error...Try Again?");
                        }
                        dojo.disconnect(zoomAfterLoadEvntHandle);
                    });
                    
                } catch(Error){
                    console.debug("error");
                }
        }
       
    
        
        detailGraphics.add(graphic);

        selectedParcelGeometry = graphic.geometry;
        zoomMap(graphic.geometry);
       
        showPanel("TAXCARD");
        //currentResultsPanel = "TAXCARD";

        var pid = graphic.attributes[parcelFields.PID];
        getTaxCardFromServer(pid);
    } catch (Error) { showError("Error in showParcelDetail: ", Error); }
    
}


// This version of showParcel deals with a work around of a bug with version 1.4 of the js api
//    -  graphics outside of the map extent have null shapes
//    -  therefore using the shape to zoom no longer works (as it did in 1.3)
//    -  so we will do a REST API search on the pid to get the correct graphic
function showParcel(pid, isIdentify) {

    // Initialize the panel
    showPanel("TAXCARD");
    dojo.byId("taxcard-backbutton").innerHTML = "";
    dojo.byId("taxcard-header").innerHTML = "";
    dojo.byId("taxcard-footer").innerHTML = "";
    dojo.byId("taxcard-content").innerHTML = workingDivHTML;
    dojo.style("buildingMap", { display: "none" });

    detailGraphics.clear();

    var queryTask = new esri.tasks.QueryTask(parcelSearchLayerURL);
    parcelQuery.PID = pid;
    var query = new esri.tasks.Query();
    query.where = parcelQuery.getPIDWhereClause();
    txtWhereClause = query.where;

    query.outFields = parcels_return_fields;
    query.returnGeometry = true;

    //alert(isIdentify);
    if (!isIdentify)
        dojo.byId("taxcard-backbutton").innerHTML = "<a href=\"#\" onmousedown=\"currentResultsPanel='RESULTS';detailGraphics.clear();showPanel('RESULTS');\"><img src=\"images/back.gif\" alt=\"back to search results\"/> Back to Search Results</a>";
    else
        map.infoWindow.hide();
        
    //Execute task and call showResults on completion
    queryTask.execute(query, function(results) {

        var selectedGraphic = results.features[0];
        selectedGraphic.setSymbol(taxCardhighlightSymbol);
        detailGraphics.add(selectedGraphic);
        zoomMap(selectedGraphic.geometry);
        selectedParcelGeometry = selectedGraphic.geometry;
        showPanel("TAXCARD");
        currentResultsPanel = "TAXCARD";

        var pid = selectedGraphic.attributes[parcelFields.PID];
        getTaxCardFromServer(pid);

    }, showSearchError);
 
}




function doSelect_Error(error) {
    console.debug(error);
    dojo.byId("taxcard-content").innerHTML = "An Error Occured while processing your request...";
}

function doSelect_Completed(idResults, evt) {
    try {
         // Create template for the info window
        var graphic;
        switch(idResults.length) {
            case 0:
                var msg = [];
                msg.push("<p class=\"attention\">No results found</p>");
                msg.push("<p class=\"attention\">Please click on a parcel</p>");
                dojo.byId("INFO").innerHTML = msg.join("");
                showPanel("INFO");
                return false;
            default:
                 var idResult = idResults[0];
                graphic = idResult.feature;
                graphic.setSymbol(taxCardhighlightSymbol);
                detailGraphics.add(graphic);

                showPanel("TAXCARD");
                currentResultsPanel = "TAXCARD";
                var pin = graphic.attributes[parcelFields.PID];
                selectedParcelGeometry = graphic.geometry;
                getTaxCardFromServer(pin);
                break;
        }
    } catch (Error) {
        doSelect_Error(Error);
    }
}

function getTaxCardFromServer(pid) {

    console.debug("getting tax info from the server");
    dojo.xhrGet({
        url: cravenWebServiceURL + "/GetParcelByParcelID?pid='" + pid + "'",
        handleAs: "json",
        contentType: "application/json; charset=utf-8",
        load: function(data, arg) {
            var p = data.d;
            parcel = p;
            parcelQuery.selectedPID = parcel.ParcelID;
            
            currentTaxTab = "CAMA";
            writeTaxCard();    
        },
        error: function(error, args) { doSelect_Error(error); }
    });
};


// #########################################################################################
function taxcard_showTab(name) {

    // reset the images
    dojo.byId("imgCAMA").src = "images/t_cama_off.gif";
    dojo.byId("imgSALES").src = "images/t_sales_off.gif";
    dojo.byId("imgBUILDINGS").src = "images/t_buildings_off.gif";

    dojo.style("buildingMap", { display: "none" });

    var o = dojo.byId("img" + name);
    if (o != null)
        o.src = "images/t_" + name.toLowerCase() + "_on.gif";

    switch (name) {
        case "CAMA":
            showCAMA();
            break;
        case "BUILDINGS":
            showBuildingList();
            break;
        case "PICTURES":
            // to do...
            break;
        case "SALES":
            showSalesInfo();
            break;
        default:
            showCAMA();
            break;
    }
}

function writeHeader() {

    var h = [];

        


//    // write the header
//    h.push("<div style=\"margin:7px 7px 7px\">");
//    h.push("<ul><li><a href=\"" + parcelReportHandlerURL + "?id=" + parcel.ParcelID + "\" target=\"_blank\">Get Property Record Card</a></li>");
//    h.push("<li><a href=\"" + parcelReportHandlerURL + "?id=" + parcel.ParcelID + "&report=mapreport\" target=\"_blank\">Get Property Record Card with Map</a></li>");
//    h.push("<li><a href=\"#\" onmousedown=\"showPanel('BUFFER');initBufferTool(true);\" >Buffer this Parcel</a></li>");
//    h.push("</ul>");
//    h.push("</div>");

//    // write the header
//    h.push("<div style=\"margin:7px 7px 7px\">");
//    h.push("<div><a href=\"" + parcelReportHandlerURL + "?id=" + parcel.ParcelID + "\" target=\"_blank\">Get Property Record Card</a></div>");
//    h.push("<div><a href=\"" + parcelReportHandlerURL + "?id=" + parcel.ParcelID + "&report=mapreport\" target=\"_blank\">Get Property Record Card with Map</a></div>");
//    h.push("<div><a href=\"#\" onmousedown=\"showPanel('BUFFER');initBufferTool(true);\" >Buffer this Parcel</a></div>");
//    h.push("</div>");

    // -- MVA - Header with Images...
    // write the header  not centered
//    h.push("<div style=\"margin:7px 7px 7px\">");
//    h.push("<div><a href=\"" + parcelReportHandlerURL + "?id=" + parcel.ParcelID + "\" target=\"_blank\"><img src=\"Images/jpgs/Property_Record_Card.jpg\"/></a></div>");
//    h.push("<div><a href=\"" + parcelReportHandlerURL + "?id=" + parcel.ParcelID + "&report=mapreport\" target=\"_blank\"><img src=\"Images/jpgs/Property_Record_Card_with_map.jpg\"/></a></div>");
//    h.push("<div><a href=\"#\" onmousedown=\"showPanel('BUFFER');initBufferTool(true);\" ><img src=\"Images/jpgs/Buffer.jpg\"/></a></div>");
//    h.push("</div>");

////      h.push("<div>");
////      h.push("<a href=\"" + parcelReportHandlerURL + "?id=" + parcel.ParcelID + "\" target=\"_blank\"><img src=\"Images/jpgs/taxcard/Property_Record_Card.jpg\"/></a>");
////      h.push("<a href=\"" + parcelReportHandlerURL + "?id=" + parcel.ParcelID + "&report=mapreport\" target=\"_blank\"><img src=\"Images/jpgs/taxcard/Property_Record_Card_with_map.jpg\"/></a>");
////      h.push("<a href=\"#\" onmousedown=\"showPanel('BUFFER');initBufferTool(true);\" ><img src=\"Images/jpgs/taxcard/Buffer.jpg\"/></a>");
////      h.push("</div>");
    
    var printscale = 2400;    
    
    //Write The Tabs
    h.push("<Table border='0' cellpadding='0' cellspacing='0' width='100%'>");
    h.push("<tr><td colspan='4' align='center'>");


    //CAMA
    h.push("<a href=\"#\" onmousedown=\"javascript:taxcard_showTab('CAMA')\"><img id=\"imgCAMA\" src='images/t_cama_on.gif' border='0'></a>");
    h.push("<a href=\"#\" onmousedown=\"javascript:taxcard_showTab('SALES')\"><img id=\"imgSALES\" src='images/t_sales_off.gif' border='0'></a>");

    //BUILDINGS
    h.push("<a href=\"#\" onmousedown=\"javascript:taxcard_showTab('BUILDINGS')\"><img id=\"imgBUILDINGS\" src='images/t_buildings_off.gif' border='0'></a>");
    h.push("</td></tr>");
    h.push("<tr><td class='Bar' colspan='4' height='30'><b>&nbsp;PARCEL ID:&nbsp;&nbsp;&nbsp;" + parcel.ParcelID + "</b></td></tr>");

    h.push("<tr><td class='Bar' colspan='4' height='30'>");
    //h.push("<center>");
    var printcmd = "printParcelReport(" + parcel.ParcelID + ",'mapreport')";


    h.push("<a href=\"" + parcelReportHandlerURL + "?id=" + parcel.ParcelID + "\" target=\"_blank\"><img src=\"Images/jpgs/taxcard/Property_Record_Card.jpg\"/></a>");
    //h.push("<a href=\"" + parcelReportHandlerURL + "?id=" + parcel.ParcelID + "&report=mapreport&scale=2400\"  target=\"_blank\"><img src=\"Images/jpgs/taxcard/Property_Record_Card_with_map.jpg\"/></a>");
    //h.push("<a href=\"#\" onmousedown=\"javascript:" + printcmd + "\"  target=\"_blank\"><img src=\"Images/jpgs/taxcard/Property_Record_Card_with_map.jpg\"/></a>");
    h.push("<a href=\"#\" onmousedown=\"showPanel('BUFFER');initBufferTool(true);\" ><img src=\"Images/jpgs/taxcard/Buffer.jpg\"/></a>");
   
    //h.push("</center>");
    h.push("</td></tr>");

    h.push("</Table>");
    
    dojo.byId("taxcard-header").innerHTML = h.join("");
}

function writeFooter() {

    var footer = [];
    
//        // write the header
//    footer.push("<div style=\"margin:7px 7px 7px\">");
//    footer.push("<a href=\"ReportViewer.aspx?id=" + parcel.ParcelID + "\" target=\"_blank\" title=\"Get PDF Version of Tax Card\"><img src=\"images/button-buffer.jpg\" alt=\"print\"/></a>");
//    footer.push("<a href=\"#\" onmousedown=\"showPanel('BUFFER');initBufferTool(true);\" title=\"Find Nearby Parcels (Buffer Parcel)\" ><img src=\"images/button-buffer.jpg\" alt=\"Buffer\"/></a>");
//    footer.push("</div>");

//    footer.push("<br/><br/><br/>");

    // Write disclaimer on information display window
    //d0 = MonthName(Month(Now)) & " " & Day(Now()) & "," & " " & Year(Now()) & "&nbsp;&nbsp;" & Time()
    var d = new Date();
    var d0 = d.getMonth() + 1 + "/" + d.getUTCDate() + "/" + d.getFullYear();
    footer.push("<div>" + "Craven County does NOT warrant the information shown on this page and" + "</div>");
    footer.push("<div>" + "should be used ONLY for tax assessment purposes.&nbsp;&nbsp;" + d0 + "</div>");


	var contentNode = dojo.byId("taxcard-footer");
    contentNode.innerHTML = footer.join("");
}

function writeTaxCard() {
    writeHeader();
    writeFooter();
    taxcard_showTab(currentTaxTab);   
}

function showCAMA() {

    var p = parcel;
    var s = [];

    // Write out the CAMA
    s.push("<div class=\"gray\">");
    s.push("<table width='100%' cellspacing='1' cellpadding='1'>");

    //OWNER
    s.push("<tr><td class='Row1' width='25%' height='30'><b>Owner:</b></td>");
    s.push("<td colspan='3' class='Row2'>" + p.OwnerName + "</td></tr>");


    //MAIL_ADD
    s.push("<tr><td class='Row1' height='30'><b>Mailing Address:</b></td>");
    s.push("<td colspan='3' class='Row2'><div>" + p.MailingAddress_Line1 + "</div><div>" + p.MailingAddress_Line2 + "</div></td></tr>")

    //PROP_ADD
    s.push("<tr><td class='Row1' height='30'><b>Address of Property:</b></td>");
    s.push("<td colspan='3' class='Row2'>" + p.Property_Address + "</td></tr>");

    // SUBGROUP
    s.push("<tr><td class='Row1' height='30'><b>Subdivision:</b></td>");
    s.push("<td colspan='3' class='Row2'>" + p.SubGroup + "</td></tr>");
       
    //LEG_DES
    s.push("<tr><td class='Row1' width='25%' height='30'><b>Property Description:</b></td>");
    s.push("<td colspan='3' class='Row2'>" + p.LegalDescription + "</td></tr>");

    if (p.InAICUZ) {

        var aicuzlist = [];
        dojo.forEach(p.AICUZList, function(s) {
            aicuzlist.push(s);
        });

        var ldnlist = [];
        dojo.forEach(p.LDNList, function(s) {
            ldnlist.push(s);
        });

        var apzlist = [];
        dojo.forEach(p.APZList, function(s) {
            apzlist.push(s);
        });
        
        s.push("<tr><td colspan='2' class='Row1'><b>Safety and Noise Hazard Disclosure:</b></td>");
        s.push("<td colspan='2' class='Row2'><a href=\"" + parcelReportHandlerURL + "?id=" + parcel.ParcelID + "&report=AICUZ\" target=\"_blank\">Press here for disclosure form.</a></td></tr>");
        s.push("<tr><td colspan='2' height='30' class='Row1'><b>MCAS Air Installation Compatible Use Zones(AICUZ):</b></td>");
        s.push("<td colspan='2' class='Row2'><a href='aicuz_info.htm' target=_blank>" + aicuzlist.join(",") + "</a></td></tr>");
        s.push("<tr><td colspan='2' height='30' class='Row1'><b>Day-Night Ave Sound Level(s) (LDN):</b></td>");
        s.push("<td colspan='2' class='Row2'><a href='noise_info.htm' target=_blank>" + ldnlist.join(",") + "</a></td></tr>");

        if (apzlist.length > 0) {
            s.push("<tr><td colspan='2' height='30' class='Row1'><b>Accident Potential Zone(s) (APZ):</b></td>");
            s.push("<td colspan='2' class='Row2'><a href='accident_potential_info.htm' target=_blank>" + apzlist.join(",") + "</a></td></tr>");
        }
    }


    
    //						
    //ASSESSED_A
    s.push("<tr><td class='Row1' width='25%' height='30'><b>Assessed Acreage:</b></td>");
    s.push("<td class='Row2' width='25%'>" + p.AssessedAcreage + "</td>");


    //CALCULAT_A
    s.push("<td class='Row1' width='25%' height='30'><b>Calculated Acreage:<b></td>");
    s.push("<td class='Row2' width='25%'>" + p.CalculatedAcreage + "</td></tr>");

    // Deed book & Page
    // original var deed = p.DeedBook + " " + p.DeedPage;
    var deed = p.DeedBook + " " + p.DeedPage;
    var deedUrl = "";
    if (p.DeedUrl != "")
        deedUrl = "<a href=\"" + p.DeedUrl + "\" target=\"_blank\">" + deed + "</a>";
    else
        deedUrl = deed;

    s.push("<tr><td class=\"Row1\" height=\"30\"><b>Deed Book Page:</b></td>");
    s.push("<td class=\"Row2\">" + deedUrl + "</td>");

    //REC_DATE
    s.push("<td class='Row1' height='30'><b>Deed Recording Date (m d y):</b></td>");
    s.push("<td class='Row2'>" + p.DeedRecordingMonth + " " + p.DeedRecordingDay + " " + p.DeedRecordingYear + "</td></tr>");


    s.push("<tr>");
    // LAND_VAL
    var landvalStr = addCommas(p.LandValue);
    s.push("<td class='Row1' height='30'><b>Land Value:</b></td>");
    s.push("<td class='Row2'>$" + landvalStr + "</td>");   //FormatCurrency(rstemp("LAND_VAL").Value,0)

    //SURVEY
    s.push("<td class='Row1' height='30'><b>Recorded Survey:</b></td>");
    s.push("<td class='Row2'>" + p.MapCabinet + "</td>");
    
    s.push("</tr><tr>");
    
    // BLDG_VAL
    s.push("<td class='Row1' height='30'><b>Total Improvement(s) Value:</b></td>");
    s.push("<td class='Row2'>$" + addCommas(p.ImprovementValue) + "</td>");

    // LIFE ESTATE DEED BOOK AND PAGE added 4-27-2006 Valenti
    var lifeEstateDeed = p.LifeEstateDeedBook + " " + p.LifeEstateDeedPage;
    var lifeEstateDeedUrl = "";
    if (p.LifeEstateDeedUrl != "")
        lifeEstateDeedUrl = "<a href=\"" + p.LifeEstateDeedUrl + "\" target=\"_blank\">" + lifeEstateDeed + "</a>";
    else
        lifeEstateDeedUrl = lifeEstateDeed;

    s.push("<td class='Row1' width='25%' height='30'><b>Life Estate Deed Book & Page:</b></td>");
    s.push("<td class='Row2' width='25%'>" + lifeEstateDeedUrl + "</td>");

    s.push("</tr><tr>");
    
    // TOT_VAL
    s.push("<td class='Row1' height='30'><b>Total Value:</b></td>");
    s.push("<td class='Row2'>$" + addCommas(p.TotalValue) + "</td>");

    // ESTATE FILL (WILL) added 4-27-2006 Valenti
    s.push("<td class=\"Row1\" width=\"25%\" height=\"30\"><b>Estate File (Will) Year-E-Folder:</b></td>");
    s.push("<td class=\"Row2\" width=\"25%\">" + p.EstateFileYear + "</td>");  // rstemp("PAESTN").Value


    s.push("</tr><tr>");

    //	A_BLDS
    s.push("<td class='Row1' height='30'><b>Number of Improvements:<b/></td>");
    s.push("<td class='Row2'>" + p.NumberofImprovements + "</td>");

    //TAX_EXMPT
    var isTaxExmpt = "No";
    if (p.IsTaxExempt)
        isTaxExmpt = "Yes";
    s.push("<td class='Row1'><b>Tax Exempt (YES/NO):</b></td>");
    s.push("<td class='Row2'>" + isTaxExmpt + "</td></tr>");

    // CITY
    var cityURL = p.CityNameUrl;
    if (cityURL != "")
        cityURL = "<a href=\"" + cityURL + "\" target=\"_blank\">" + p.CityName + "</a>";
    else
        cityURL = p.CityName;

    s.push("<tr><td class='Row1' height='30'><b>City Name:</b></td>");
    s.push("<td class='Row2'>" + cityURL + "</td>");

    //  FIRE
    s.push("<td class='Row1' height='30'><b>Fire Tax District:</b></td>");
    s.push("<td class='Row2'>" + p.FireDistrict + "</td></tr>");


    //  DRAINAGE
    s.push("<tr><td class='Row1' height='30'><b>Drainage District:</b></td>");
    s.push("<td class='Row2'>" + p.DrainageDistrict + "</td>");

    //	LOT_DES
    s.push("<td class='Row1' height='30'><b>Lot Description:</b></td>");
    s.push("<td class='Row2'>" + p.LotDescription + "</td></tr>");

    //  SPEC_DIST
    s.push("<tr><td class='Row1' height='30'><b>Special District:</b></td>");
    s.push("<td class='Row2'>" + p.SpecialDistrict + "</td>");

    //	LAND_USE
    s.push("<td class='Row1' height='30'><b>Land Use:</b></td>");
    s.push("<td class='Row2'>" + p.LandUse + "</td></tr>");

    // close the table
    s.push("</table>");
    s.push("</div>");

    var contentNode = dojo.byId("taxcard-content");
    contentNode.innerHTML = s.join("");

}


function showSalesInfo() {

    currentTaxTab = "SALES";

    var p = parcel;
    var sp = parcel.Sales;
    var s=[];		
    s.push("<div class=\"gray\"><table width='100%' cellspacing='1' cellpadding='1'>");
	
	//COLUMN HEADINGS
	s.push("<tr><td class='Row2' height='30' align='center'><b>Sales Date</b></td>");
	s.push("<td class='Row2' height='30' align='center'><b>Seller Name</b></td>");
	s.push("<td class='Row2' height='30' align='center'><b>Buyer Name</b></td>");
	s.push("<td class='Row2' height='30' align='center'><b>Type of Sale</b></td>");
	s.push("<td class='Row2' height='30' align='center'><b>Sales Price</b></td></tr>");

    var totalRec = sp.length;

    if (totalRec > 0) {
        for (var i = 0; i < sp.length; i++) {

            //SALES_DATE
            //var sd = new Date(sp[i].SaleYear, sp[i].SaleMonth, sp[i].SaleDay);

            s.push("<tr><td class='Row1' align='right'>" + sp[i].SaleMonth + "-" + sp[i].SaleDay + "-" + sp[i].SaleYear + "</td>");

            //SELLERS_NA
            s.push("<td class='Row1'>" + sp[i].SellerName1 + "</td>");

            //BUYERS_NA
            s.push("<td class='Row1'>" + sp[i].BuyerName1 + "</td>");

            // SALE_TYPE
            s.push("<td class='Row1'>" + sp[i].SaleType + "</td>");

            //SALES_PRIC
            s.push("<td class='Row1' align='right'>$" + addCommas(sp[i].SalePrice) + "</td></tr>");

        }
    }
    else {
        s.push("<tr><td class='Row1' colspan='5' align='center'>No sales information found.</td></tr>");
    }

    s.push("<tr><td class='Bar' colspan='5' align='center'></td></tr></table></div>");
             
    var contentNode = dojo.byId("taxcard-content");
    contentNode.innerHTML = s.join("");

}

function showBuildingList() {
    currentTaxTab = "BUILDINGS";

    var bp = parcel.Buildings;

    var s = [];
    var totalRec =  bp.length;
	s.push( "<div class=\"gray\"><table width='100%' cellspacing='1' cellpadding='1'>")

    // Column Headings
	s.push("<tr><td class='Row2' height='30' align='center'><b>Type</b></td>");
	s.push("<td class='Row2' height='30' align='center'><b>Year Built</b></td>");
    s.push("<td class='Row2' height='30' align='center'><b>Base Area</b></td>");
	s.push("<td class='Row2' height='30' align='center'><b>Value</b></td>");
	s.push("<td class='Row2' height='30' align='center'><b>Details</b></td></tr>");
          
    if(totalRec > 0) {
		for (var i = 0; i < bp.length; i++) {
	
			//BTYPE
		    s.push("<tr><td class='Row1' align='left' height='30'>" + bp[i].StructureType + "</td>");
			
			//BYRBL
			s.push("<td class='Row1' align='right'>" + bp[i].YearBuilt + "</td>");
				
			//BBSAR
			s.push("<td class='Row1' align='right'>" + bp[i].BaseArea + "</td>");

			//BAPVA

			s.push("<td class='Row1' align='right'>$" + addCommas(bp[i].BuildingValue) + "</td>");

			//DETAILS
			var bType = "";
			var bcmd = "showBdlgDetails('" + i + "')";
			if (bp[i].hasSketch)
			    s.push("<td class=\"Row1\" align=\"center\"><a href=\"#\" onmousedown=\"" + bcmd + "\"><img src='images/b_details.gif' border='0'></a></td></tr>");
            else
			    s.push("<td class='Row1' align='center'></td></tr>");
                 
        }
     } else {			
			s.push("<tr><td class='Row1' colspan='6' align='center'>No building information found.</td></tr>");
     }

     s.push("<tr><td class='Bar' colspan='6' align='center'>&nbsp;</td></tr></table></div>");

    var contentNode = dojo.byId("taxcard-content");
    contentNode.innerHTML = s.join("");

}

function showBdlgDetails(index) {

    // this is started from the tax card...
    dojo.byId("taxcard-header").innerHTML = "<div style=\"margin:7px;height:50px\"><img src=\"images/back.gif\" alt=\"back\"/><a href=\"#\" onmousedown=\"writeTaxCard();\">Go back to Building List for " + parcel.ParcelID + "</a></div>";
    
    try {
        var currentBuilding = parcel.Buildings[index];
        //dojo.byId("taxcard-footer").innerHTML = "";
        writeBuildingDetails(currentBuilding);
    }
    catch (Err) {
        console.debug(Err)
    }    
}

function showBuildingDetails(pid, seqnum, card) {

    // call to the database to get the record
    showPanel("TAXCARD");

    dojo.byId("taxcard-backbutton").innerHTML = "";
    dojo.byId("taxcard-header").innerHTML = "";
    dojo.byId("taxcard-footer").innerHTML = "";
    dojo.byId("taxcard-content").innerHTML = workingDivHTML;
    dojo.style("buildingMap", { display: "none" });
   
    dojo.xhrGet({
        url: cravenWebServiceURL + "/GetBuildingByID?id='" + pid + "'&seq=" + seqnum + "&card=" + card,
        handleAs: "json",
        contentType: "application/json; charset=utf-8",
        load: function(data) {
        try {

            // this is started from the tax card...
            dojo.byId("taxcard-header").innerHTML = "<div style=\"margin:7px;\"><a href=\"#\" onmousedown=\"showParcel('" + pid + "', true);\" >" + pid + "</a></div>";
             var currentBuilding = data.d;
                writeBuildingDetails(currentBuilding);
            }
            catch (Err) {
                console.debug(Err)
            }    
        },
        error: function(error, args) { doSelect_Error(error); }
    });


}


function writeBuildingDetails(b) {
    var s = [];
    s.push("<table width='100%' cellspacing='1' cellpadding='1'>");
    switch (b.BuildingTypeCode) {
        case "U":
            //BDSTYP
            s.push("<tr><td class='Row2' height='30' align='left'><b>Type:</b></td>");
            s.push("<td class='Row1' align='left' height='30'>" + b.StructureType + "</td>");

            //BAPVA
            s.push("<td class='Row2' height='30' align='left'><b>Value:</b></td>")
            s.push("<td class='Row1' align='left'>$" + addCommas(b.BuildingValue) + "</td></tr>")


            //BBSAR
            s.push("<tr><td class='Row2' height='30' align='left'><b>Base Area:</b></td>");
            s.push("<td class='Row1' align='left'>" + b.BaseArea + "</td>");

            //BYRBL
            s.push("<td class='Row2' height='30' align='left'><b>Year Built:</b></td>");
            s.push("<td class='Row1' align='left'>" + b.YearBuilt + "</td></tr>");


            //BNURM
            s.push("<tr><td class='Row2' height='30' align='left'><b>Rooms:</b></td>");
            s.push("<td class='Row1' align='left' >" + b.TotalRooms + "</td>");

            //BNUBR
            s.push("<td class='Row2' height='30' align='left'><b>Bedrooms:</b></td>");
            s.push("<td class='Row1' align='left'>" + b.Bedrooms + "</td></tr>");

            //BBATH
            s.push("<tr><td class='Row2' height='30' align='left'><b>Bathrooms (Full.Half):</b></td>");
            s.push("<td class='Row1' align='left'>" + b.Bathrooms + "</td>");

            //BDHTCD
            s.push("<td class='Row2' height='30' align='left'><b>Heating:</b></td>");
            s.push("<td class='Row1' align='left'>" + b.HeatingType + "</td></tr>");

            //BDELCD
            s.push("<tr><td class='Row2' height='30' align='left'><b>Electric:</b></td>");
            s.push("<td class='Row1' align='left'>" + b.Electric + "</td>")

            //BDPLCD
            s.push("<td class='Row2' height='30' align='left'><b>Plumbing:</b></td>");
            s.push("<td class='Row1' align='left'>" + b.Plumbing + "</td></tr>");

            //BDFOCD
            s.push("<tr><td class='Row2' height='30' align='left'><b>Foundation:</b></td>");
            s.push("<td class='Row1' align='left'>" + b.Foundation + "</td>");

            //BDWACD
            s.push("<td class='Row2' height='30' align='left'><b>Exterior Walls:</b></td>");
            s.push("<td class='Row1' align='left'>" + b.ExteriorWalls + "</td></tr>");

            //BDRFCD
            s.push("<tr><td class='Row2' height='30' align='left'><b>Roof Type:</b></td>");
            s.push("<td class='Row1' align='left'>" + b.RoofType + "</td>");

            //BDRMCD
            s.push("<td class='Row2' height='30' align='left'><b>Roof Material:</b></td>");
            s.push("<td class='Row1' align='left'>" + b.RoofMaterial + "</td></tr>");


            //BDFLCD
            s.push("<tr><td class='Row2' height='30' align='left'><b>Floors:</b></td>");
            s.push("<td class='Row1' align='left'>" + b.Floors + "</td>");

            //BDIFCD
            s.push("<td class='Row2' height='30' align='left'><b>Interior Finish:</b></td>");
            s.push("<td class='Row1' align='left'>" + b.InteriorFinish + "</td></tr>");

            //BDGARA
            var hasGarage = "No";
            if (b.hasGarage)
                hasGarage = "Yes";
            s.push("<tr><td class='Row2' height='30' align='left'><b>Attached Garage:</b></td>");
            s.push("<td class='Row1' align='left'>" + hasGarage + "</td>");

            //BDBASE
            var hasBasement = "No";
            if (b.hasBasement)
                hasBasement = "Yes";
            s.push("<td class='Row2' height='30' align='left'><b>Basement:</b></td>");
            s.push("<td class='Row1' align='left'>" + hasBasement + "</td></tr>");

            //BSTOR
            s.push("<tr><td class='Row2' height='30' align='left'><b>Number of Stories:</b></td>");
            s.push("<td class='Row1' align='left'>" + b.NumberOfStories + "</td>");

            //Open table space
            s.push("<td class='Row2' height='30' align='left'><b> </b></td>");
            s.push("<td class='Row1' align='left'>" + " " + "</td></tr>");
            break;
	case "M":
            //BDSTYP
			s.push("<tr><td class='Row2' height='30' align='left'><b>Type:</b></td>");
			s.push("<td class='Row1' align='left' height='30'>" + b.StructureType + "</td>");
			
	        //BAPVA
			s.push("<td class='Row2' height='30' align='left'><b>Value:</b></td>");
			s.push("<td class='Row1' align='left'>$" + addCommas(b.BuildingValue) + "</td></tr>");

			//BBSAR
			s.push("<tr><td class='Row2' height='30' align='left'><b>Base Area:</b></td>");
			s.push("<td class='Row1' align='left'>" + b.BaseArea + "</td>");
			
			//BYRBL
			s.push("<td class='Row2' height='30' align='left'><b>Year Built:</b></td>");
			s.push("<td class='Row1' align='left'>" + b.YearBuilt + "</td></tr>");
			
            //BDHTCD
			s.push( "<tr><td class='Row2' height='30' align='left'><b>Heating:</b></td>");
			s.push( "<td class='Row1' align='left'>" + b.HeatingType + "</td>");

			//BDWACD
			s.push( "<td class='Row2' height='30' align='left'><b>Exterior Walls:</b></td>");
			s.push( "<td class='Row1' align='left'>" + b.ExteriorWalls + "</td></tr>");

			//BDRFCD
			s.push( "<tr><td class='Row2' height='30' align='left'><b>Roof Structure:</b></td>");
			s.push( "<td class='Row1' align='left'>" + b.RoofType + "</td>");
				
			//BDRMCD
			s.push( "<td class='Row2' height='30' align='left'><b>Roof Material:</b></td>");
			s.push( "<td class='Row1' align='left'>" + b.RoofMaterial +  "</td></tr>");
            
            //BDFLCD
			s.push( "<tr><td class='Row2' height='30' align='left'><b>Floor Structure:</b></td>");
			s.push( "<td class='Row1' align='left'>" + b.Floors + "</td>");
				
			//BDFCCD
			s.push( "<td class='Row2' height='30' align='left'><b>Floor Covering:</b></td>");
			s.push( "<td class='Row1' align='left'>" + b.FloorCovering + "</td></tr>");
            
            //BDIWCD
			s.push( "<tr><td class='Row2' height='30' align='left'><b>Interior Walls:</b></td>");
			s.push( "<td class='Row1' align='left'>" + b.InteriorWalls + "</td>");
				
			//BDICCD
			s.push( "<td class='Row2' height='30' align='left'><b>Interior Ceiling:</b></td>");
			s.push( "<td class='Row1' align='left'>" + b.InteriorCeiling + "</td></tr>");
            break;
        case "I":
    	    s.push( "<tr><td class='Row2' height='30' align='left'><b>Other Improvement:</b></td>");
			s.push( "<td class='Row1' align='left'>Additional info not available at this time.</td></tr>");
			break;
		default:
  			s.push( "<tr><td class='Row2' height='30' align='left'><b>BTYPE unknown:</b></td>");
			s.push( "<td class='Row1' align='left'>" + b.BuildingType + "</td></tr>");  
			break;
    }


    if (b.hasSketch) {
        s.push( "<tr><td colspan='4' align='left'>Click here for a <a href='ksapcd-with-descriptions.txt' target=_blank>description</a> of sketch appendage codes.</td></tr>");
        s.push( "<tr><td colspan='4' align='left'>The sketch below ONLY shows the primary floor or level of the structure.</td></tr>");
        
        var pid="";
        if (parcel !=null) {
            pid = parcel.ParcelID;        
            s.push("<tr><td colspan='4' align='left'><a href=\"building.htm?pid=" + parcel.ParcelID + "&seqnum=" + b.BuildingID + "&card=" + b.Card + "\" target=\"_blank\">Click here to view on separate printable page.</a></td></tr>");        
        }
        
        drawSketch(b);
        //SKETCH
		s.push( "<tr><td colspan='4' align='center'>");
		//DrawSketch pid, seqnum, btype
		s.push( "</td></tr>");
    }
              
    s.push("</table>");

    var contentNode = dojo.byId("taxcard-content");
    contentNode.innerHTML = s.join("");

}

var bMap;

function drawSketch(b) {



    try {


        console.debug("draw sketch after load");
        console.debug(b);
        var spRef = new esri.SpatialReference({ "wkid": 2264 });
        var bExtent = new esri.geometry.Extent(2501200, 527600, 2501300, 527700, spRef);

        bMap.graphics.clear();


        var dimFont = new esri.symbol.Font(11, esri.symbol.Font.STYLE_BOLD);
        dimFont.setFamily("Arial");
        
        


        var lineSymbol = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0, 100, 100]), 3);

        var e = bMap.extent;
        var startPt = e.getCenter();

        var red = 255;
        var blue = 0;
        var green = 0;


        dojo.forEach(b.Sketch, function(s) {


            console.debug(s.SketchCall);

            cmds = [];
            cmds = s.SketchCall.split(",");
            pts = new esri.geometry.Multipoint(spRef)

            var label = s.description;

            var ptX = startPt.x;
            var ptY = startPt.y;

            var moveIndex = -1;
            dojo.forEach(cmds, function(cmd, indx) {
                if (cmd.indexOf("/") > -1)
                    moveIndex = indx;
            });

            if (moveIndex == -1)
                pts.addPoint(new esri.geometry.Point(ptX, ptY, spRef));

            dojo.forEach(cmds, function(cmd, indx) {
                //Check to see if move is involved

                if (cmd.length > 0) {

                    var dir = cmd.substring(0, 1);
                    var sDist = cmd.substring(1, cmd.length);
                    sDist = sDist.replace("/", "");




                    var dAngle = 0;

                    switch (dir) {
                        case "N":
                            ptY = ptY + parseInt(sDist);
                            lblY = ptY - (parseInt(sDist) / 2);
                            //lblX = ptX;
                            lblX = ptX - 1.5;
                            dAngle = 90;
                            break;
                        case "S":
                            ptY = ptY - parseInt(sDist);
                            lblY = ptY + (parseInt(sDist) / 2);
                            //lblX = ptX + 2;
                            lblX = ptX - 0.25;
                            dAngle = 270;
                            break;
                        case "E":
                            ptX = ptX + parseInt(sDist);

                            lblX = ptX - (parseInt(sDist) / 2);
                            lblY = ptY + 0.25;
                            
                            dAngle =0;

                            break;
                        case "W":
                            ptX = ptX - parseInt(sDist);
                            lblX = ptX + (parseInt(sDist) / 2);
                            lblY = ptY - 1.5;
                            dAngle = 0;
                            break;
                        default:
                            console.debug("none");
                            break;
                    }


                    //add the point to the path of points for the building footprint.
                    if (indx >= moveIndex) {
                        //console.debug(cmd);

                        pts.addPoint(new esri.geometry.Point(ptX, ptY, spRef));

                        // add the label point
                        var lblPt = new esri.geometry.Point(lblX, lblY, spRef);
                        var textSym = new esri.symbol.TextSymbol(sDist, dimFont, new dojo.Color([255, 0, 0]));
                        textSym.setAngle(dAngle);



//                        var mColor;

//                        switch (dir) {
//                            case "N":
//                                mColor = new dojo.Color([255, 0, 0]);
//                            case "S":
//                                mColor = new dojo.Color([0, 255, 0]);
//                                break;
//                            case "E":
//                                mColor = new dojo.Color([255, 255, 55]);
//                                break;
//                            case "W":
//                                mColor = new dojo.Color([0, 0, 255]);
//                                break;
//                            default:
//                                console.debug("none");
//                                break;
//                        }


//                        var m = new esri.symbol.SimpleMarkerSymbol(esri.symbol.STYLE_SQUARE, 10);
//                        m.setColor(mColor);

//                        //bMap.graphics.add(new esri.Graphic(lblPt, m));

                        var labelG = new esri.Graphic(lblPt, textSym)
                        bMap.graphics.add(labelG);

                    }
                }

            });

            var bndLine = new esri.geometry.Polygon(spRef);
            //bndLine.addPath(pts.points);
            bndLine.addRing(pts.points);
            var lineSymbol = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0, 0, 0]), 1);
            var g = new esri.Graphic(bndLine, lineSymbol);
            bMap.graphics.add(g);

            bMap.graphics.add(new esri.Graphic(bndLine.getExtent().getCenter(), new esri.symbol.TextSymbol(label, dimFont, new dojo.Color([0, 0, 0]))));

        });

        console.debug("creating the full extent");

        var fullExt = esri.graphicsExtent(bMap.graphics.graphics);
        

        if (fullExt != null)
            bMap.setExtent(fullExt.expand(1.1));
     

        dojo.style("buildingMap", { display: "block" });
        
       
        
        
        
    } catch (Error) {

    dojo.style("buildingMap", { display: "none" });

    console.debug("error: ");
    console.debug(Error);
    

    }
   


    
   
}

function printParcelReport(pid, reporttype) {

    try {   

        var iframeDocument = dojo.isIE ? printingHiddenFrame.contentWindow.document : printingHiddenFrame.contentDocument;
        iframeDocument.getElementById("reportpid").value = pid;
        iframeDocument.getElementById("reporttype").value = reporttype;
        iframeDocument.getElementById("reportscale").value = 2400;
        iframeDocument.getElementById("reports").submit();

    } catch(ex) {
        alert(ex.message);
    }
}