﻿
var GISP_ReportResultBuilder = function () { };


GISP_ReportResultBuilder.prototype = {
    CreateMarker: function (pResult, pType)
    {
        var mySavedReport = _SSR.GetReportByUniqueID(pResult.ID);
        var mySavedParentReport = _SSR.GetReportByUniqueID(mySavedReport.Properties.ParentReportID);
        var mySavedReportProperty = _SSR.GetResultByID(mySavedParentReport.ID, mySavedParentReport.Type);
        var myCreateMarkerError = false;
        if (mySavedReportProperty === null) {
            var myParams = GetSearchParameters(mySavedParentReport.Type);
            myParams.PropertyID = mySavedParentReport.ID;
            myParams.IsBuilding = mySavedParentReport.Type == "BUILDINGS";
            myParams.StartRowID = myParams.EndRowID = 1;
            var myData = { pParams: myParams };
            ShowLoadingWindow('Reloading reports. This could take a while.');
            $.ajax({
                type: 'POST',
                async: false,
                url: '/common/services/Properties.asmx/GetProperties',
                dataType: 'json',
                contentType: 'application/json; charset=utf-8',
                data: JSON.stringify(myData),
                success: function (msg)
                {
                    mySavedReportProperty = msg.d.Results[0];
                    HideDynamicModal();
                },
                error: function (XMLHttpRequest, textStatus, errorThrown)
                {
                    myCreateMarkerError = true;
                    HideDynamicModal();
                }
            });
        }
        if (!myCreateMarkerError) {
            var myCurrentIndex = 1;
            var myResultIsSaved = _SSR.IsResultSaved(pResult.ID);
            var myHTMLText = '';
            var rCommunities = /COMMUNITIES/;
            var rBuilding = /BUILDING/;
            var rSite = /SITE/;

            if (rCommunities.exec(mySavedParentReport.Type) !== null) {
                myHTMLText = GetHtmlForCommunityMarker(mySavedReportProperty, mySavedParentReport.Type);
            }
            else if (rBuilding.exec(mySavedParentReport.Type) !== null || rSite.exec(mySavedParentReport.Type) !== null) {
                myHTMLText = GetHtmlForPropertyMarker(mySavedReportProperty, mySavedParentReport.Type);
            }

            var myLatLng = new google.maps.LatLng(mySavedReportProperty.lat, mySavedReportProperty.lng);
            //determine if the property type is specific
            var myPropertyType = mySavedParentReport.Type;

            //Determine if the property has been saved
            var myPropertySavedModifer = myResultIsSaved ? "_on" : ""; //uses the "on" version of the icon if it is saved

            //create the icon and associate the ID with the it by adding a field to the object
            var myMarker = GISPlanning_MapUtilities_CreateMarker(myLatLng, myHTMLText, myPropertyType, { ID: pResult.ID, Modifier: myPropertySavedModifer });
            myMarker.ID = pResult.ID;

            return myMarker;
        }
        else {
            //there was an error creating the marker
            return null;
        }
    },

    CreateListing: function (pResult, pIndex, pType, pOrientation)
    {
        var myResultIsSaved = _SSR.IsResultSaved(pResult.ID);
        var myCardRaw = this.GetRawCard();
        var myCard = myCardRaw;
        var mySavedReport = _SSR.GetReportByUniqueID(pResult.ID);
        var mySavedParentReport = _SSR.GetReportByUniqueID(mySavedReport.Properties.ParentReportID);
        var mySavedResult = _SSR.GetResultByID(mySavedParentReport.ID, mySavedParentReport.Type);

        if (mySavedReport.Content.indexOf("<script>ReloadReport") === 0) {
            GISP_ReloadingReportQueue.push(pResult.ID);
            ShowLoadingWindowUntilFalse("Loading report content. This could take a while...", function () { return GISP_ReloadingReportQueue.length > 0; });
            ReloadReport(pResult.ID);
        }


        //when reloading from DB, this can be null
        if (mySavedResult === null) {

            var myURL;
            var myData;
            var isBuilding = 'false';
            switch (mySavedParentReport.Type) {
                case "BUILDINGS":
                    isBuilding = 'true';
                    myURL = "/common/services/Properties.asmx/GetPropertyByIDWithInputParams";
                    myData = "{'pPropertyID': '" + mySavedParentReport.ID + "','pIsBuilding':'" + isBuilding + "','pToken':'" + _GISP_Theme + "','pRequestParams':'','pRequestID':'" + GISPlanning_MapUtilities_GUID() + "'}";
                    break;
                case "SITES":
                    myURL = "/common/services/Properties.asmx/GetPropertyByIDWithInputParams";
                    myData = "{'pPropertyID': '" + mySavedParentReport.ID + "','pIsBuilding':'" + isBuilding + "','pToken':'" + _GISP_Theme + "','pRequestParams':'','pRequestID':'" + GISPlanning_MapUtilities_GUID() + "'}";
                    break;
                case "COMMUNITIES":
                    myURL = "/common/services/Community.asmx/GetCommunityById";
                    myData = "{'pCommunityID': '" + mySavedParentReport.ID + "','pRequestID':'" + GISPlanning_MapUtilities_GUID() + "'}";
                    break;
                default:
                  myUrl = "";
                  myData = "{}";
                  break;
            }


            $.ajax({
                url: myURL,
                async: false,
                data: myData,
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                type: "POST",
                cache: false,
                success: function (result)
                {
                    _SSR._AddResult(result.d.Results[0], mySavedParentReport.Type);
                    mySavedResult = _SSR.GetResultByID(mySavedParentReport.ID, mySavedParentReport.Type);
                },
                error: function (XMLHttpRequest, textStatus, errorThrown)
                {
                    alert("Cant Load Saved Report");
                }
            });
        }




        var myReportType = '';
        var myReportTab = '';
        switch (mySavedReport.Type.toLowerCase()) {
            case 'full':
                myReportType = 'Full Property Report';
                myReportTab = 'FULL';
                break;
            case 'laborforce':
                myReportType = 'Labor Force Report' + this.GetReportParamDescription(mySavedReport);
                myReportTab = 'LABORFORCE';
                break;
            case 'demographics':
                myReportType = 'Demographics Report' + this.GetReportParamDescription(mySavedReport);
                myReportTab = 'DEMOGRAPHICS';
                break;
            case 'wages':
                myReportType = 'Wages Report' + this.GetReportParamDescription(mySavedReport);
                myReportTab = 'WAGES';
                break;
            case 'business':
                myReportType = 'Business Report' + this.GetReportParamDescription(mySavedReport);
                myReportTab = 'BUSINESS';
                break;
            case 'consumerspending':
                myReportType = 'Consumer Spending Report' + this.GetReportParamDescription(mySavedReport);
                myReportTab = 'CONSUMERSPENDING';
                break;
            case 'community':
                myReportType = 'Full Community Report';
                myReportTab = 'FULL';
                break;
            default:
              myReportType = '';
              myReportTab = '';
              break;
        }


        //Get the name
        var myCardName = mySavedResult.BuildingName || mySavedResult.Address || mySavedResult.Name;
        var myViewReportFunction = mySavedParentReport.Type == "COMMUNITIES" ?
            ("ViewCommunityReport('" + pResult.PropertyID + "','" + myReportTab + "')") :
            ("ViewSavedReport('" + mySavedReport.UniqueID + "','" + mySavedResult.ID + "','" + mySavedParentReport.Type + "','" + myReportTab + "'@RADIUS)");

        //add in the optional radius parameter
        var myRadius = mySavedReport.Parameters["Radius"];
        if (myRadius !== null && myRadius !== undefined && myRadius !== 0) {
            myViewReportFunction = myViewReportFunction.replace("@RADIUS", "," + myRadius);
        }
        else {
            myViewReportFunction = myViewReportFunction.replace("@RADIUS", "");
        }

        /*jsl:ignore*/
        myCard = myCard.replace(/@REPORTID/g, mySavedReport.UniqueID)
            .replace(/@PROPERTYID/g, mySavedResult.ID)
            .replace(/@INDEX/g, pIndex)
            .replace(/@SAVE_REMOVE/g, myResultIsSaved ? 'Remove' : 'Save')
            .replace(/@SAVE_TOFROM/g, myResultIsSaved ? 'from' : 'to')
            .replace(/@REPORT_IMAGE/g, mySavedResult.Thumbnail)
            .replace(/@NAME/g, myCardName)
            .replace(/@REPORT_TYPE/g, myReportType)
            .replace(/@SSR_TYPE/g, mySavedParentReport.Type.replace(/_SAVED/g, ''))
            .replace(/@REPORT_TAB/g, myReportTab)
            .replace(/@VIEWREPORTFUNCTION/g, myViewReportFunction); //('@PROPERTYID','@SSR_TYPE','@REPORT_TAB')
        /*jsl:end*/
        return myCard;
    },
    GetReportParamDescription: function (pReport)
    {
        if(typeof(pReport) === "undefined" || pReport === null){
          return "";
        }
        var myReturnString = "<br/>REPLACE";
        if (pReport.Parameters["Radius"] > 0) {
            var myRadiusString = "Radius: " + pReport.Parameters["Radius"] + (pReport.Parameters["Radius"] > 1 ? " miles" : " mile");
            myReturnString = myReturnString.replace("REPLACE", myRadiusString);
        }
        else if (pReport.Parameters["Radius"] < 0) {
            var myDriveTimeString = "Drivetime: " + (-pReport.Parameters["Radius"]) + (pReport.Parameters["Radius"] < -1 ? " minutes" : " minute");
            myReturnString = myReturnString.replace("REPLACE", myDriveTimeString);
        }
        else {
            myReturnString = "";
        }
        return myReturnString;

    },
    GetRawCard: function ()
    {
        var myRawCard = "\
            <div class='property' id='@REPORTID' resultID='@INDEX'>\
            <div class='innerPropertyWrapper'>\
                <div class='propertyImageBox'>\
                    <b class='propertyImage'>\
                        <b class='propertyImage1'>\
                            <b></b>\
                        </b>\
                        <b class='propertyImage2'>\
                            <b></b>\
                        </b>\
                        <b class='propertyImage3'></b>\
                        <b class='propertyImage4'></b>\
                        <b class='propertyImage5'></b>\
                    </b>\
                    <div class='propertyImagefg'>\
                        <div class='saveSlider'>\
                            <div class='saveSliderClosed zSpecial'>\
                                <a>\
                                    <b></b>\
                                </a>\
                            </div>\
                            <ul class='saveSliderOpen zSpecial'>\
                                <li><a class='saveLink' href=\"javascript:ToggleSaveRemoveReport('@REPORTID')\">@SAVE_REMOVE</a>&nbsp;<span class='saveToFrom'>@SAVE_TOFROM</span>&nbsp;Folder</li>\
                                <li><a href=\"javascript:ZoomToProperty('@REPORTID')\" title='Zoom the map to this property'>Zoom</a> to property</li>\
                                <li><a href=\"javascript:@VIEWREPORTFUNCTION;\" title='View all the reports for this property '>View</a> Report</li>\
                            </ul>\
                        </div>\
                        <img src='@REPORT_IMAGE' alt='Report' class='img' width='148px' height='88px'/>\
                       <div class='ieClear'></div>\
                    </div>\
                </div>\
                <div class='propertyInfoBox'>\
                    <b class='propertyInfo'>\
                        <b class='propertyInfo1'>\
                            <b></b>\
                        </b>\
                        <b class='propertyInfo2'>\
                            <b></b>\
                        </b>\
                        <b class='propertyInfo3'></b>\
                        <b class='propertyInfo4'></b>\
                        <b class='propertyInfo5'></b>\
                    </b>\
                    <div class='propertyInfofg'>\
                        <h3><a href=\"javascript:ViewPropertyReport('@PROPERTYID','@SSR_TYPE','@REPORT_TAB');\">@NAME</a></h3>\
                        <ul>\
                            <li>@REPORT_TYPE</li>\
                        </ul>\
                        <div class='clear'></div>\
                    </div>\
                </div>\
                <div class='clear'></div></div>\
            </div>\
            ";



        return myRawCard;
    }
};
function GetHtmlForPropertyMarker(pProperty, pType)
{
    var myResultIsSaved = _SSR.IsResultSaved(pProperty.ID);
    var myPhoto = "";
    //check if a photo exists
    if (pProperty.Thumbnail === null || pProperty.Thumbnail === '') {
        myPhoto = "/common/images/noPhoto.png";
    } else {
        //use the thumbnail.
        myPhoto = pProperty.Thumbnail;
    } //end if
    var myType = pType;
    var mySaveRemoveLink = '<a  id="hrefSaveResultInfoWindow_' + pProperty.ID + '" href="javascript:ToggleSaveRemoveReport(\'' + pProperty.ID + '\');">' + (myResultIsSaved ? 'Remove' : 'Save') + '</a><span>' + (myResultIsSaved ? ' from' : ' to') + ' folder</span>';

    return '<table id="miniwindow" style="font: 12px;height:145px;">\
                <tr><td colspan="3"><img src="http://images.zoomprospector.com/client/assets/' + _GISP_Theme + '/InfoWindowLogo.jpg"/></td></tr>\
                <tr><td colspan="3"><hr/></tr>\
                <tr>\
                    <td valign="top" style="width:160px;">\
                        <img src="' + myPhoto + '">\
                    </td>\
                    <td valign="top" style="width:300px;">\
                        <a class="ResultAddress" href="javascript:ViewPropertyReport(\'' + pProperty.ID + '\',\'' + myType + '\')">\
                            ' + pProperty.Address + ' \
                        </a>\
                        <br/>\
                        ' + pProperty.CityName + ', ' + pProperty.StateName + ' ' + pProperty.ZipCode + '<br />\
                        <strong> Building:</strong> ' + pProperty.BuildingName + '<br />\
                        <strong> County:</strong> ' + pProperty.CountyName + '<br />\
                    </td>\
                    <td>\
                         <table cellpadding="1" cellspacing="0" border="0" >\
                            <tr>\
                                <td>' + mySaveRemoveLink + '</td>\
                            </tr><tr>\
                                <td><a class="tinyButtonLink ButtonTextLink small" href="javascript:ZoomToProperty(\'' + pProperty.ID + '\');" title="Click here to zoom in on this property">Zoom</a>&nbsp<span>In</span></td>\
                            </tr><tr>\
                                <td><a class="tinyButtonLink ButtonTextLink small" href="javascript:ViewPropertyReport(\'' + pProperty.ID + '\',\'' + myType + '\');" title="Click here to view the full property report">Full</a>&nbsp<span>Report</span></td>\
                            </tr>\
                            <tr>\
                                <td><a class="tinyButtonLink ButtonTextLink small" href="javascript:ViewPropertyReport(\'' + pProperty.ID + '\',\'' + myType + '\', \'LABORFORCE\');" title="">Labor Force</a>&nbsp<span>Report</span></td>\
                            </tr>\
                            <tr>\
                                <td><a class="tinyButtonLink ButtonTextLink small" href="javascript:ViewPropertyReport(\'' + pProperty.ID + '\',\'' + myType + '\', \'DEMOGRAPHICS\');" title="">Demographics</a>&nbsp<span>Report</span></td>\
                            </tr>\
                            <tr>\
                                <td><a class="tinyButtonLink ButtonTextLink small" href="javascript:ViewPropertyReport(\'' + pProperty.ID + '\',\'' + myType + '\', \'CONSUMERSPENDING\');" title="">Consumer Spending</a>&nbsp<span>Report</span></td>\
                            </tr>\
                            <tr>\
                                <td><a class="tinyButtonLink ButtonTextLink small" href="javascript:ViewPropertyReport(\'' + pProperty.ID + '\',\'' + myType + '\', \'BUSINESS\');" title="Click here to view the business report around this property">Business</a>&nbsp<span>Report</span></td>\
                            </tr>\
                        </table>\
                    </td>\
                </tr>\
            </table>';
}
function GetHtmlForCommunityMarker(pCommunity, pType)
{
    var myResultIsSaved = _SSR.IsResultSaved(pCommunity.ID);
    var myPhoto = pCommunity.Thumbnail === null ? "" : pCommunity.Thumbnail;
    var mySaveRemoveLink = '<a class="tinyButtonLink ButtonTextLink small nonexportable" id="hrefSaveResultInfoWindow_' + pCommunity.ID + '" href="javascript:ToggleSaveRemoveReport(\'' + pCommunity.ID + '\');" title=' + (myResultIsSaved ? '"Click here to remove this property"' : '"Click here to save this property"') + ">" + '<span>' + (myResultIsSaved ? 'Remove' : 'Save') + '</span>' + '</a><span>' + (myResultIsSaved ? ' from' : ' to') + ' folder</span>';
    var myType = pType;
    return '\
            <table id="miniwindow" style="font: 12px;height:145px;">\
                <tr><td colspan="3"><img src="/common/images/infoWindowLogo.png"</td></tr>\
                <tr><td colspan="3"><hr/></tr>\
                <tr>\
                    <td valign="top" style="width:160px;">\
                        <img src="' + myPhoto + '">\
                    </td>\
                    <td valign="top" style="width:300px;">\
                        <div>\
                            <a class="ResultAddress" href="javascript:ViewCommunityReport(\'' + pCommunity.ID + '\',\'' + myType + '\')">\
                                ' + pCommunity.Name + ', ' + pCommunity.State + ' \
                            </a>\
                        </div>\
                        <div>\
                            <strong> Population:</strong> ' + pCommunity.Population + '<br />\
                        </div>\
                        <div>\
                            <strong> Labor Force Size:</strong> ' + pCommunity.LaborForceSize + '<br />\
                        </div>\
                        <div>\
                            <strong>  Bachelors Degree or Higher:</strong> ' + pCommunity.BachelorsHigherPct + '<br />\
                        </div>\
                        <div>\
                            <strong> Household Median Income:</strong> ' + pCommunity.HHIncomeMedian + '<br />\
                        </div>\
                        <div>\
                            <strong> Job Growth Rate:</strong> ' + pCommunity.JobGrowth + '<br />\
                        </div>\
                        <div>\
                            <strong> Commute Travel Time:</strong> ' + pCommunity.TravelTime + '<br />\
                        </div>\
                    </td>\
                    <td>\
                          <table cellpadding="1" cellspacing="0" border="0" >\
                            <tr>\
                                <td>' + mySaveRemoveLink + '</td>\
                            </tr><tr>\
                                <td><a class="tinyButtonLink ButtonTextLink small" href="javascript:ZoomToProperty(\'' + pCommunity.ID + '\');" title="Click here to zoom in on this property">Zoom</a>&nbsp<span>In</span></td>\
                            </tr><tr>\
                                <td><a class="tinyButtonLink ButtonTextLink small" href="javascript:ViewCommunityReport(\'' + pCommunity.ID + '\',\'FULL\');" title="Click here to view the full property report">Full</a>&nbsp<span>Report</span></td>\
                            </tr>\
                            <tr>\
                                <td><a class="tinyButtonLink ButtonTextLink small" href="javascript:ViewCommunityReport(\'' + pCommunity.ID + '\',\'LABORFORCE\');" title="">Labor Force</a>&nbsp<span>Report</span></td>\
                            </tr>\
                            <tr>\
                                <td><a class="tinyButtonLink ButtonTextLink small" href="javascript:ViewCommunityReport(\'' + pCommunity.ID + '\',\'DEMOGRAPHICS\');" title="">Demographics</a>&nbsp<span>Report</span></td>\
                            </tr>\
                            <tr>\
                                <td><a class="tinyButtonLink ButtonTextLink small" href="javascript:ViewCommunityReport(\'' + pCommunity.ID + '\',\'CONSUMERSPENDING\');" title="">Consumer Spending</a>&nbsp<span>Report</span></td>\
                            </tr>\
                        </table>\
                    </td>\
                </tr>\
            </table>';
}

