function addRowAttribute(row, attributename, attributevalue, addcolumn) {
    if (addcolumn) {
        var column = document.createElement('td');
        column.appendChild(document.createTextNode(attributevalue));
        row.appendChild(column);
    }
    row.setAttribute(attributename, attributevalue);
}

function addHeaderColumn(row, colname) {

    var th = document.createElement('th');
    th.appendChild(document.createTextNode(colname));
    row.appendChild(th);
}

function formatDatePart(datepart) {
    return datepart.length == 1 ? "0" + datepart : datepart;
}

function buildQueryFilter(field, value, and) {
    // remove unwanted characters 
    var arr1 = ["'", "\""];
    for (a = 0; a < arr1.length ; a++) {
        if (value.indexOf(arr1[a]))
            value = value.replace(arr1[a], " ");
    }

    if (and) {
        return " and " + field + " eq '" + value + "'";
    } else {
        return field + " eq '" + value + "'";
    }
}

function validateDateOfBirth(dobyear, dobmonth, dobday) {
    if ((dobyear == "" || dobyear == "YYYY") && (dobmonth == "" || dobmonth == "MM") && (dobday == "" || dobday == "DD")) {
        return true;
    }
    if (dobyear != "YYYY" || dobmonth != "MM" || dobday != "DD") {
        if ((dobyear != "" && isNumeric(dobyear) == false) || (dobmonth != "" && isNumeric(dobmonth) == false) || (dobday != "" && isNumeric(dobday) == false)) {
            return false;
        }
    }
    if (dobyear.length != 4) {
        return false;
    }
    if (dobyear >= (new Date).getFullYear() + 1) {
        return false;
    }
    if (dobyear < (new Date).getFullYear() - 200) {
        return false;
    }
    if (dobmonth < 1 || dobmonth > 12) {
        return false;
    }
    if (dobday < 1 || dobday > 31) {
        return false;
    }
    return true;
}

function isNumeric(value) {
    return !isNaN(parseFloat(value) && isFinite(value));
}

function formatName(data) {
    var firstName = data.crme_FirstName != null ? data.crme_FirstName : "";
    var middleName = data.crme_MiddleName != null ? data.crme_MiddleName : "";
    var lastName = data.crme_LastName != null ? data.crme_LastName : "";

    var fullName = lastName != "" ? lastName : "";
    fullName += firstName != "" && lastName != "" ? ", " + firstName : "";
    fullName += middleName != "" && firstName != "" && lastName != "" ? " " + middleName : "";

    return fullName;
}

function formatAddress(data) {
    if (data.crme_FullAddress != null) {
        return data.crme_FullAddress;
    }
    if (data.crme_StateProvinceId != null && data.crme_ZIPPostalCodeId != null) {
        var street = data.crme_Address1 != null ? data.crme_Address1 : "";
        var city = data.crme_City != null ? data.crme_City : "";
        var state = data.crme_StateProvinceId.Name != null ? data.crme_StateProvinceId.Name : "";
        var zip = data.crme_ZIPPostalCodeId.Name != null ? data.crme_ZIPPostalCodeId.Name : "";

        return street + " " + city + " " + state + " " + zip;
    }
    return "";
}

function clearField(obj) {
    if (obj.defaultValue == obj.value) obj.value = '';
}

function retrieveMultipleSync(odataSetName, select, filter) {
    // Get Server URL
    var serverUrl = "";
    if (Xrm.Page.context.getClientUrl) {
        //Post UR 12
        serverUrl = Xrm.Page.context.getClientUrl();
    }
    else {
        //Pre UR 12
        serverUrl = Xrm.Page.context.getServerUrl();
    }
    var ODATA_ENDPOINT = "/XRMServices/2011/OrganizationData.svc";
    var odataUri = serverUrl + ODATA_ENDPOINT + "/" + odataSetName + "?";
    if (select) {
        odataUri += "$select=" + select;
    }
    if (filter) {
        odataUri += "&" + "$filter=" + filter;
    }
    var service = getRequestObject();
    if (service != null) {
        service.open("GET", odataUri, false);
        service.setRequestHeader("X-Requested-Width", "XMLHttpRequest");
        service.setRequestHeader("Accept", "application/json,text/javascript, */*");
        service.send(null);
        var requestResults = eval('(' + service.responseText + ')').d;
        return requestResults;
    }
}

function getRequestObject() {
    if (window.XMLHttpRequest) {
        return new window.XMLHttpRequest;
    }
    else {
        try {
            return new ActiveXObject("MSXML2.XMLHTTP.3.0");
        }
        catch (ex) {
            return null;
        }
    }
}

function formatExecutingSearch() {

    $('div#tmpDialog').show();
    $("#validationFailedDiv").hide();
    $("#resultsFieldSetDiv").hide();
    $("#notFoundDiv").hide();
    $("#possibleResultsDiv").hide();
    $("#createDiv").hide();
    $("#searchResultsMessageDiv").hide();
    $("#SearchByNameButton").attr('disabled', true);
    $("#SearchByAddButton").attr('disabled', true);
    $("#SearchByIdentifierButton").attr('disabled', true);
    $("#mviDownCreateRow").hide();
    $("#last4CreateRow").hide();
    $("#createAttributesTable").hide();
    $("#createLastNameTextBox").val("");
    $("#createFirstNameTextBox").val("");
	endSensitiveVet(); // if sensitive vet is shown and search executed, hide 

}

function formatValidationFailed() {
    $("#validationFailedDiv").show();
    $("#notFoundDiv").hide();
    $("#possibleResultsDiv").hide();
    $("#createDiv").hide();
    $("#resultsFieldSetDiv").hide();
    $("#searchResultsMessageDiv").hide();
    $("#personSearchResultsTable").find("thead, tr, th").remove();
    $("#personSearchResultsTable").find("tr:gt(0)").remove();
    $("#mviDownCreateRow").hide();
    $("#last4CreateRow").hide();
    $("#createAttributesTable").hide();
    $("#createLastNameTextBox").val("");
    $("#createFirstNameTextBox").val("");

    scrollIframe("#validationFailedDiv");
}

function scrollIframe(elementid) {
    $(elementid).append('<p id="scrollanchorgraph"><a id="scrollanchor" name="scrollanchor" href=""></a></p>');
    //set the focus (effectively scroll to it)
    $("#scrollanchor").focus();
    //remove the anchor we used for scrolling
    $('#scrollanchorgraph').remove();
}

function personSearchComplete() {
    $('div#tmpDialog').hide();
    $("#SearchByNameButton").attr('disabled', false);
    $("#SearchByAddButton").attr('disabled', false);
    $("#SearchByIdentifierButton").attr('disabled', false);
    //$("#personSearchResultsTable").find("tr:gt(0)").focus();               
    //$("#personSearchResultsTable").focus();
}

function edipiSearchCallBack(data) {
    searchCallBack(data);
    //   searchCallBackWithStations(data, true);
}

function traitsSearchCallBack(data) {
    searchCallBack(data);
    //   searchCallBackWithStations(data, false);
}

function showResultsMessageDiv(resultsMessage) {
    $("#resultsFieldSetDiv").show();
    $("#searchResultsMessageDiv").show();
    $("#searchResultsMessageDiv").text(resultsMessage);
}

function showNotFoundDiv(notFoundLabel) {
    $("#noResultsLabel").text(notFoundLabel);
    $("#notFoundDiv").show();
}

function searchCallBack(returnData) {
    $('div#tmpDialog').show();
    // get the table
    var table = $("#personSearchResultsTable");

    // reset the table by removing all data rows
    $("#personSearchResultsTable").find("thead, tr, th").remove();
    $("#personSearchResultsTable").find("tr:gt(0)").remove();
    $("#resultsFieldSetDiv").hide();

    if (returnData != null && returnData.length > 0) {

        // check for exceptions 1st
        if (returnData[0].crme_ExceptionOccured) {
            showResultsMessageDiv(returnData[0].crme_ExceptionMessage);
            showNotFoundDiv("Error searching in MVI");
            return;
        }

        var thead = document.createElement('thead');
        var theadRow = document.createElement('tr');

        for (var i = 0; i < returnData.length; i++) {

            var fullName = formatName(returnData[i]);

            //CRMe can return result, even if just ReturnMessage that there were no results...
            //If blank\no name, we should break
            if (fullName.trim() == "") {
                showResultsMessageDiv((returnData != null && returnData.length > 0 && returnData[0].crme_ReturnMessage != null) ? returnData[0].crme_ReturnMessage : "No records found. Verify the search criteria, enter additional search criteria, or search for a record in CRM.");
                showNotFoundDiv("No Records Found");
                scrollIframe("#notFoundDiv");
                return;
            }

            var recordSource = returnData[i].crme_RecordSource == null ? "" : returnData[i].crme_RecordSource;
            var patientMviIdentifier = returnData[i].crme_PatientMviIdentifier == null ? "" : returnData[i].crme_PatientMviIdentifier;
            var icn = returnData[i].crme_ICN == null ? "" : returnData[i].crme_ICN;

            var edipi = returnData[i].crme_EDIPI == null ? "" : returnData[i].crme_EDIPI;

            var ssn = returnData[i].crme_SSN == null ? "" : returnData[i].crme_SSN;
            var gender = returnData[i].crme_Gender == null ? "" : returnData[i].crme_Gender;
            var deceasedDate = returnData[i].crme_DeceasedDate == null ? "" : returnData[i].crme_DeceasedDate;
            var branchOfService = returnData[i].crme_BranchOfService == null ? "" : returnData[i].crme_BranchOfService;
            var dateOfBirth = returnData[i].crme_DOBString == null ? "" : returnData[i].crme_DOBString;
            var pobc = returnData[i].crme_POBC == null ? "" : returnData[i].crme_POBC;
            var pobs = returnData[i].crme_POBS == null ? "" : returnData[i].crme_POBS;
            var mmn = returnData[i].crme_MMN == null ? "" : returnData[i].crme_MMN;

            var firstName = returnData[i].crme_FirstName == null ? "" : returnData[i].crme_FirstName;
            var middleName = returnData[i].crme_MiddleName == null ? "" : returnData[i].crme_MiddleName;
            var lastName = returnData[i].crme_LastName == null ? "" : returnData[i].crme_LastName;
            var alias = returnData[i].crme_Alias == null ? "" : returnData[i].crme_Alias;

            var fulladdress = formatAddress(returnData[i]);
            var address1 = returnData[i].crme_Address1 == null ? "" : returnData[i].crme_Address1;
            var address2 = returnData[i].crme_Address2 == null ? "" : returnData[i].crme_Address2;
            var city = returnData[i].crme_City == null ? "" : returnData[i].crme_City;
            var state = returnData[i].crme_StateProvinceId == null ? "" : returnData[i].crme_StateProvinceId.Name;
            var zip = returnData[i].crme_ZIPPostalCodeId == null ? "" : returnData[i].crme_ZIPPostalCodeId.Name;
            var phoneNumber = returnData[i].crme_PrimaryPhone == null ? "" : returnData[i].crme_PrimaryPhone;
            var email = returnData[i].crme_Email == null ? "" : returnData[i].crme_Email;

            var classcode = returnData[i].crme_ClassCode == null ? "" : returnData[i].crme_ClassCode;
            var identityTheft = returnData[i].crme_IdentityTheft == null ? "" : returnData[i].crme_IdentityTheft;
            var vetSensLevel = returnData[i].crme_VeteranSensitivityLevel == null ? "" : returnData[i].crme_VeteranSensitivityLevel;
            var participantId = returnData[i].crme_PatientMviIdentifier == null ? "" : returnData[i].crme_PatientMviIdentifier;
            _siteId =  returnData[i].crme_SiteId == null ? "" : returnData[i].crme_SiteId;
            _patientId = returnData[i].crme_PatientId == null ? "" : returnData[i].crme_PatientId; // This is Patient's "DFN"


            if (i == 0) {
                addHeaderColumn(theadRow, 'Name');
                addHeaderColumn(theadRow, 'SSN');
                addHeaderColumn(theadRow, 'EDIPI');
                addHeaderColumn(theadRow, 'Date of Birth');
                addHeaderColumn(theadRow, 'Deceased Date');
                addHeaderColumn(theadRow, 'Br. of Svc');
                addHeaderColumn(theadRow, 'Phone No');
                addHeaderColumn(theadRow, 'Address');
                addHeaderColumn(theadRow, 'Source');
                thead.appendChild(theadRow);
            }

            // Table rows
            var row = document.createElement('tr');
            addRowAttribute(row, 'fullName', fullName, true);
            addRowAttribute(row, 'ssn', ssn, true);
            addRowAttribute(row, 'edipi', edipi, true);
            addRowAttribute(row, 'dateofbirth', dateOfBirth, true);
            addRowAttribute(row, 'deceasedDate', deceasedDate, true);
            addRowAttribute(row, 'branchOfService', branchOfService, true);
            addRowAttribute(row, 'phoneNumber', phoneNumber, true);
            addRowAttribute(row, 'fulladdress', fulladdress, true);
            addRowAttribute(row, 'recordSource', recordSource, true);

            addRowAttribute(row, 'firstName', firstName, false);
            addRowAttribute(row, 'lastName', lastName, false);
            addRowAttribute(row, 'patientMviIdentifier', patientMviIdentifier, false);
            addRowAttribute(row, 'gender', gender, false);
            addRowAttribute(row, 'pobc', pobc, false);
            addRowAttribute(row, 'pobs', pobs, false);
            addRowAttribute(row, 'mmn', mmn, false);
            addRowAttribute(row, 'middleName', middleName, false);
            addRowAttribute(row, 'alias', alias, false);
            addRowAttribute(row, 'address1', address1, false);
            addRowAttribute(row, 'address2', address2, false);
            addRowAttribute(row, 'city', city, false);
            addRowAttribute(row, 'state', state, false);
            addRowAttribute(row, 'zip', zip, false);
            addRowAttribute(row, 'email', email, false);
            addRowAttribute(row, 'classcode', classcode, false);
            addRowAttribute(row, 'icn', icn, false);
            addRowAttribute(row, 'vetSensLevel', vetSensLevel, false);
            addRowAttribute(row, 'participantId', participantId, false);
            addRowAttribute(row, 'siteId', _siteId, false);
            addRowAttribute(row, 'patientId', _patientId, false);



            row.className = (i % 2 == 0) ? "even" : "odd";

            row.ondblclick = function () { openSelectedPerson(this); };
            row.onkeydown = function (e) {
                if (e.keyCode === 13 || e.keyCode === 32) {
                    openSelectedPerson(this);
                }
            };
            row.tabIndex = 100 + i;
            table.append(thead);
            table.append(row);

            $("#resultsFieldSetDiv").show();
            if (i == 0) {
                //row.focus = true;
                //row.focus();
            }
        }
        //debugger;
        //var rowpos = $('#personSearchResultsTable tr:last').position();
        //var rowoffset = $('#personSearchResultsTable tr:last').offset();
        //$('body').scrollTop(rowpos.top);
        //var clientrect = $('#personSearchResultsTable')[0].getBoundingClientRect();
        //$('body').scrollTop(clientrect.bottom);
        //$("#resultsFieldSetDiv").append('<p id="anchorgraph"><a id="resultanchor" name="resultanchor" href=""></a></p>');
        //$("#resultanchor").focus();
        $("#createDiv").show();
        $("#mviDownCreateRow").show();
        scrollIframe("#createDiv");

        $("#personSearchResultsTable tr:first").focus();
        //$("#resultsFieldSetDiv").remove('#anchorgraph');
        if (_lastSearchType == "EDIPI") {
            $("#createAttributesTable").show();
        }
    }
    else {
        showNotFoundDiv("No Records Found");
        scrollIframe("#notFoundDiv");
    }
    var resultsAppend = " Double click the correct Veteran in the grid to proceed. If the correct Veteran is not listed, verify the search criteria, enter additional search criteria, or select the Create New Veteran below.";
    showResultsMessageDiv((returnData != null && returnData.length > 0 && returnData[0].crme_ReturnMessage != null) ? returnData[0].crme_ReturnMessage + resultsAppend : "No records found. Verify the search criteria, enter additionl search criteria, or search for a record in CRM.");
}


function handleMviError() {
    showNotFoundDiv("Error Contacting MVI");
    showResultsMessageDiv("There was a problem searching MVI.");
}


// called from searchCallBack methods above
function openSelectedPerson(obj) {

    $('div#tmpDialog').show();

    //set global selected person object for use later just in case
    _selectedPersonObj = obj;

    var firstName = obj.getAttribute('firstName');
    var lastName = obj.getAttribute('lastName');
    var patientMviIdentifier = obj.getAttribute('patientMviIdentifier');
    var ssn = obj.getAttribute('ssn');
    var edipi = obj.getAttribute('edipi');
    var dob = obj.getAttribute('dateofbirth');
    var recordSource = obj.getAttribute('recordSource');
    var gender = obj.getAttribute('gender');
    var deceasedDate = obj.getAttribute('deceasedDate');
    var bos = obj.getAttribute('branchOfService');
    var pobc = obj.getAttribute('pobc');
    var pobs = obj.getAttribute('pobs');
    var mmn = obj.getAttribute('mmn');
    var middleName = obj.getAttribute('middleName');
    var alias = obj.getAttribute('alias');
    var address1 = obj.getAttribute('address1');
    var address2 = obj.getAttribute('address2');
    var city = obj.getAttribute('city');
    var state = obj.getAttribute('state');
    var zip = obj.getAttribute('zip');
    var fullAddress = obj.getAttribute('fulladdress');
    var phoneNumber = obj.getAttribute('phoneNumber');
    var email = obj.getAttribute('email');
    var classcode = obj.getAttribute('classcode');
    var participantId = obj.getAttribute('participantId');
    _icn = obj.getAttribute('icn');
    var vetSensLevel = obj.getAttribute('vetSensLevel');
    _siteId = obj.getAttribute('siteId');
    _patientId = obj.getAttribute('patientId');


    __MVI_FullName = lastName + ", " + firstName + " " + middleName;

    var fieldsSelected = "crme_ReturnMessage,crme_RecordSource,crme_PatientMviIdentifier,crme_ICN, crme_EDIPI,crme_SSN, crme_Gender, crme_DeceasedDate, crme_BranchOfService, crme_DOBString,crme_POBC, crme_POBS, crme_MMN, crme_FirstName, crme_MiddleName, crme_LastName, crme_Alias, crme_Address1, crme_Address2, crme_City, crme_StateProvinceId, crme_ZIPPostalCodeId, crme_PrimaryPhone, crme_Email, crme_ClassCode, crme_IdentityTheft, crme_VeteranSensitivityLevel, crme_SiteId";
    var filter = "&select=" + fieldsSelected + "&$filter=crme_PatientMviIdentifier eq '" + patientMviIdentifier + "' and crme_SearchType eq 'SelectedPersonSearch'";

    if (firstName != null && firstName != "") filter += buildQueryFilter("crme_FirstName", firstName, true);
   if (middleName != null && middleName != "") filter += buildQueryFilter("crme_MiddleName", middleName, true);
    if (lastName != null && lastName != "") filter += buildQueryFilter("crme_LastName", lastName, true);
    if (ssn != null && ssn != "") filter += buildQueryFilter("crme_SSN", ssn, true);
    if (recordSource != null && recordSource != "") filter += buildQueryFilter("crme_RecordSource", recordSource, true);
    //if (icn != null && icn != "") filter += buildQueryFilter("crme_ICN", icn, true);
    //if ((icn == null || icn == "") && participantId != null && participantId != "") filter += buildQueryFilter("crme_ICN", participantId, true);
    if (participantId != "") filter += buildQueryFilter("crme_ParticipantID", participantId, true);
    if (edipi != null && edipi != "") filter += buildQueryFilter("crme_EDIPI", edipi, true);
    if (vetSensLevel != null && vetSensLevel != "") filter += buildQueryFilter("crme_VeteranSensitivityLevel", vetSensLevel, true);
    if (dob != null && dob != "") filter += buildQueryFilter("crme_MVIDOBString", dob, true);
    //if (fullAddress != null && fullAddress != "") filter += buildQueryFilter("crme_MVIFullAddress", fullAddress, true);
    if (fullAddress != null && fullAddress != "") filter += buildQueryFilter("crme_MVIFullAddress", encodeURIComponent(fullAddress), true);

    filter = encodeURIComponent(filter);
    SDK.REST.retrieveMultipleRecords("crme_person", filter, personRetrieveCallback, function (error) { alert(error.message); }, function () { });


    return false;
}

function personRetrieveCallback(data) {
    var participantId = _selectedPersonObj.getAttribute('participantId');
    var idparts = participantId.split("^");
    if (idparts.length > 0) {
        _icn = idparts[0];
        SDK.REST.retrieveMultipleRecords("bah_keyvaluepair",
            "$select=bah_stringvalue_text&$filter=bah_name_text eq 'esr_endpoint'",
            function (data) {
                if (data.length > 0) {
                    _esrEndpoint = data[0].bah_stringvalue_text;
                    if (_esrEndpoint != "" && _icn.length > 0) {
                        var nationalId = _icn;
						//alert('national id=' + nationalId );
                        var actualEndpoint = _esrEndpoint.replace('{0}', '000000' + nationalId + '000000'); //pad ICN with six zeroes on beginning and end

                        $.ajax({
                            url: actualEndpoint,
                            timeout: 4000,
                            error: function () {
                                _esrObj = null;
                                esrCallback();
                            },
                            success: function (result) {
                                _esrObj = result;
                                esrCallback();
                            }
                        });
                    }
                    else {
                        //we didn't get endpoint from CRM, but we should execute the next function anyway
                        _esrObj = null;
                        esrCallback();
                    }
                }
            },
            function (error) {
                //do nothing
            },
            function () {
                //do nothing on completion
            }
        );
    }

}

function esrCallback() {
    obj = _selectedPersonObj;

    var firstName = obj.getAttribute('firstName');
    var lastName = obj.getAttribute('lastName');
    var patientMviIdentifier = obj.getAttribute('patientMviIdentifier');
    var ssn = obj.getAttribute('ssn');
    var edipi = obj.getAttribute('edipi');
    var dob = obj.getAttribute('dateofbirth');
    var recordSource = obj.getAttribute('recordSource');
    var gender = obj.getAttribute('gender');
    var deceasedDate = obj.getAttribute('deceasedDate');
    var bos = obj.getAttribute('branchOfService');
    var pobc = obj.getAttribute('pobc');
    var pobs = obj.getAttribute('pobs');
    var mmn = obj.getAttribute('mmn');
    var middleName = obj.getAttribute('middleName');
    var alias = obj.getAttribute('alias');
    var address1 = obj.getAttribute('address1');
    var address2 = obj.getAttribute('address2');
    var city = obj.getAttribute('city');
    var state = obj.getAttribute('state');
    var zip = obj.getAttribute('zip');
    var country = "";
   var fullAddress = obj.getAttribute('fulladdress');
    var phoneNumber = obj.getAttribute('phoneNumber');
    var email = obj.getAttribute('email');
    var classcode = obj.getAttribute('classcode');
    var participantId = obj.getAttribute('participantId');
    _siteId = obj.getAttribute('siteId');
    _patientId = obj.getAttribute('patientId');
    _icn = obj.getAttribute('icn');
    var vetSensLevel = obj.getAttribute('vetSensLevel');
   // these are retrieved from ESR, not MVI!
    _isSensitive = false;
    _isDeceased = false;
    _deathDate = "";
	_preferredFacility = "";

    __MVI_FullName = lastName + ", " + firstName + " " + middleName;

    if (_esrObj != null) {

        try {
            if (!_esrObj.ErrorOccurred) {
                var permanentAddress = null;
                //alert(_esrObj.getEESummaryResponse.summary.demographics.contactInfo.addresses.address[0].line1);
                if (Array.isArray(_esrObj.Data.Demographics.ContactInfo.Addresses.Address)) {
                    var addressArray = _esrObj.Data.Demographics.ContactInfo.Addresses.Address;
                    var permanentAddresses = addressArray.filter(function (data) { return data.AddressTypeCode.toUpperCase() == "PERMANENT"; });
                    if (permanentAddresses.length > 0) {
                        permanentAddress = permanentAddresses[0];
                    }
                }
                else {
                    if (_esrObj.Data.Demographics.ContactInfo.Addresses.Address.AddressTypeCode.toUpperCase() == "PERMANENT") {
                        permanentAddress = _esrObj.Data.Demographics.ContactInfo.Addresses.Address;
                    }
                }
                if (permanentAddress != null) {
                    address1 = permanentAddress.Line1;
                    address2 = permanentAddress.Line2 == null ? "" : permanentAddress.Line2;
                    city = permanentAddress.City;
                    //check for state
                    if (permanentAddress.State != null) {
                        state = permanentAddress.State;
                    }
                    //check for province
                    if (permanentAddress.ProvinceCode != null) {
                        state = permanentAddress.ProvinceCode;
                    }

                    //check for zipcode
                    if (permanentAddress.ZipCode != null) {
                        zip = permanentAddress.ZipCode;
                    }
                    //check for postalcode
                    if (permanentAddress.PostalCode != null) {
                        zip = permanentAddress.PostalCode;
                    }

                    country = permanentAddress.Country == null ? "" : permanentAddress.Country;

                    //fullAddress = address1 + "\n" + city + ", " + state + " " + zip;
                    //alert(fullAddress);
                }
                if (_esrObj.Data.Demographics.PreferredFacility != null) {
                    _preferredFacility = _esrObj.Data.Demographics.PreferredFacility;
                }

                if(_esrObj.Data.SensitivityInfo.SensityFlag !=null) {
                    var sensitivityFlag = _esrObj.Data.SensitivityInfo.SensityFlag;
                    _isSensitive = !sensitivityFlag || (!!sensitivityFlag && sensitivityFlag.toLowerCase() != "false");
                }
                if(_esrObj.Data.DeathRecord !=null) {
                    var deathInfoNode = _esrObj.Data.DeathRecord; //the DeathRecond node contains data such as DeathDate, DataSource, FacilityReceived, DeathDate
                    _isDeceased = deathInfoNode.DeathDate !=null || deathInfoNode.DataSource!=null || deathInfoNode.DeathDate!=null || deathInfoNode.FacilityReceived!=null;

                    if (deathInfoNode.DeathDate!=null) {deathDate=deathInfoNode.DeathDate;}
                }
            }
            else {
                alert("Error: No ESR");
                //We cannot perform the Sensitive Vet check 

            }
        }
        catch (err) {
            //there was an error
            alert(err.message);
        }
    }

        var fieldsSelected = "ContactId,bah_edipi_text, bah_dob_date, bah_ssn_text, FirstName, MiddleName, LastName, bah_branch_text, Telephone1, Address1_Line1, Address1_City, Address1_PostalCode, Address1_StateOrProvince, bah_source_text";
        var filterPrefix = "$select=" + fieldsSelected + "&$filter=";

        var filter2 = buildQueryFilter("bah_searchtype_text", "CREATEUPDATEMVI", false);
        //filter2+= buildQueryFilter("bah_mvipatientidentifier_text", patientMviIdentifier, true); 

        if (edipi != "") filter2 += buildQueryFilter("bah_edipi_text", edipi, true);
        if (ssn != "") filter2 += buildQueryFilter("bah_ssn_text", ssn, true);
        if (firstName != "") filter2 += buildQueryFilter("FirstName", firstName, true);
        if (lastName != "") filter2 += buildQueryFilter("LastName", lastName, true);
        if (middleName != "") filter2 += buildQueryFilter("MiddleName", middleName, true);
        if (alias != "") filter2 += buildQueryFilter("NickName", alias, true);
        if (recordSource != "") filter2 += buildQueryFilter("bah_source_text", recordSource, true);
        if (bos != "") filter2 += buildQueryFilter("bah_branch_text", bos, true);
        if (pobc != "") filter2 += buildQueryFilter("bah_placeofbirth_city_text", pobc, true);
        if (mmn != "") filter2 += buildQueryFilter("bah_mmn_text", mmn, true);
        if (phoneNumber != "") filter2 += buildQueryFilter("Telephone1", phoneNumber, true);
        if (email != "") filter2 += buildQueryFilter("EMailAddress1", email, true);
        if (_preferredFacility != "") filter2 += buildQueryFilter("bah_preferredfacility_text", _preferredFacility, true);
        if (gender == "M") {
            filter2 += " and GenderCode/Value eq 1";
        }
        else if (gender == "F") {
            filter2 += " and GenderCode/Value eq 2";
        }

        if (address1 != "") filter2 += buildQueryFilter("Address1_Line1", address1, true);
        if (address2 != "") filter2 += buildQueryFilter("Address1_Line2", address2, true);
        if (city != "") filter2 += buildQueryFilter("Address1_City", city, true);

        if (state != "") {
            var stateObj = getState(state);
            if (stateObj != null) {
                filter2 += " and bah_address1_stateid/Id eq (guid'" + stateObj.bah_stateId.toString() + "')";
                filter2 += buildQueryFilter("Address1_StateOrProvince", stateObj.bah_name, true);
            }
            else {
                filter2 += buildQueryFilter("Address1_StateOrProvince", state, true);
            }
        }

        if (country != "") {
            var countryId = getCountryId(country);
            if (countryId != "") {
                filter2 += " and bah_address1_countryid/Id eq (guid'" + countryId.toString() + "')";
            }
            filter2 += buildQueryFilter("Address1_Country", country, true);
        }

        if (zip != "") filter2 += buildQueryFilter("Address1_PostalCode", zip, true);

        if (dob != "") {
            var dobdate = new Date(dob);
            var dobsearchstring = dobdate.getFullYear() + "-" + ("0" + (dobdate.getMonth() + 1)).slice(-2) + "-" + ("0" + dobdate.getDate()).slice(-2);
            dobsearchstring += "T12:00:00Z";
            filter2 += " and bah_dob_date eq datetime'" + dobsearchstring + "'";
        }

        if (deceasedDate != "") {
            var dDate = new Date(deceasedDate);
            var dsearchstring = dDate.getFullYear() + "-" + ("0" + (dDate.getMonth() + 1)).slice(-2) + "-" + ("0" + dDate.getDate()).slice(-2);
            dsearchstring += "T12:00:00Z";
            filter2 += " and bah_dateofdeath_date eq datetime'" + dsearchstring + "'";
        }

        filter2 += " and StateCode/Value eq 0";

        filter2 = encodeURIComponent(filter2);
        filter2 = filterPrefix + filter2 + "&$top=1&$orderby=CreatedOn desc";

        SDK.REST.retrieveMultipleRecords("Contact", filter2, selectedPersonCallBack, function (error) { alert(error.message); }, personSearchComplete);

        return false;
        
}



function selectedPersonCallBack(data) {
	
    // currently called after RetrieveMultiple Contact
    $("#SearchByIdentifierButton").enable = true;
    $('div#tmpDialog').hide(100);
    
    ///// Begin Sensitive Vet interuption
    // before user can open Veteran record, need to make sure current user can access.
    // this must happen AFTER the trip to ESR!
    handleSensitiveVet(_isDeceased, _isSensitive, _deathDate, _icn, _patientId); // this is VeteranAlerts.js
    alert('vars:' + _isDeceased +_isSensitive +_deathDate +_icn +_patientId);
    /// end Sensitive Vet interuption


    if (data != null && data.length > 0 ) {

        //var url = Xrm.Page.context.getClientUrl();
        //url += "/main.aspx?etc=2&pagetype=entityrecord&id=%7b" + data[0].ContactId + "%7d";

        //INSTEAD OF OPENING THE URL HERE, YOU CAN SET THE INTERACTION CONTACTID TO THE CONTACTID RETURNED ABOVE!
        //window.open(url);

        //window.parent.Xrm.Page.data.entity.save();                    
        window.parent.mvi.personSelected(data[0].ContactId, __MVI_FullName);
    }
    else {
        var lastName = _selectedPersonObj.getAttribute('lastName');
        var ssn = _selectedPersonObj.getAttribute('ssn');
        var dob = _selectedPersonObj.getAttribute('dateofbirth');
        //only run search if we have all three criteria
        if (ssn != "") {
            var fieldsSelected = "ContactId,bah_edipi_text, bah_dob_date, bah_ssn_text, FirstName, MiddleName, LastName, bah_branch_text, Telephone1, Address1_Line1, Address1_City, Address1_PostalCode, Address1_StateOrProvince, bah_source_text";
            var filterPrefix = "$select=" + fieldsSelected + "&$filter=";
            var filter = "";
            filter += buildQueryFilter("bah_ssn_text", ssn.slice(-4), false);

            /*if (dob != "") {
                var dobdate = new Date(dob);
                var dobsearchstring = dobdate.getFullYear() + "-" + ("0" + (dobdate.getMonth() + 1)).slice(-2) + "-" + ("0" + dobdate.getDate()).slice(-2);
                dobsearchstring += "T12:00:00Z";
                filter += " and bah_dob_date eq datetime'" + dobsearchstring + "'";*/

            if (lastName != "") {
                filter += buildQueryFilter("LastName", lastName, true);

                filter += " and StateCode/Value eq 0";

                filter = encodeURIComponent(filter);
                filter = filterPrefix + filter;

                SDK.REST.retrieveMultipleRecords("Contact", filter, crmVeteranSearchCallBackFromLast4SsnSearch, function (error) { alert(error.message); }, function () {/*do nothing*/ });
            }
            /*}*/
        }
        //alert("no data returned by contact search in crm");
    }
}

function crmVeteranSearchCallBackFromLast4SsnSearch(veteranData) {
    crmVeteranSearchCallBack(veteranData, true);
}

function crmVeteranSearchCallBackFromMviDownSearch(veteranData) {
    crmVeteranSearchCallBack(veteranData, false);
}

function mviDownSearch() {
    $('#notFoundDiv').hide();
	endSensitiveVet(); // if Sensitive Vet is still showing, hide it
    var lastName = $("#LastNameTextBox").val();
    var firstName = $("#FirstNameTextBox").val();
    var middleName = $("#AddMiddleNameTextBox").val();
    var ssn = $("#SocialSecurityTextBox").val();
    var dobyear = $("#BirthYearTextBox").val();
    var dobmonth = $("#BirthMonthTextBox").val();
    var dobday = $("#BirthDayTextBox").val();
    var dob = "";
    if (isNumeric(dobyear) && isNumeric(dobmonth) && isNumeric(dobday)) {
        if (!isNaN(Date.parse(dobyear + "-" + dobmonth + "-" + dobday))) {
            dob = dobyear + "-" + dobmonth + "-" + dobday;
        }
    }
    var fieldsSelected = "ContactId,bah_edipi_text, bah_dob_date, bah_ssn_text, FirstName, MiddleName, LastName, bah_branch_text, Telephone1, Address1_Line1, Address1_City, Address1_PostalCode, Address1_StateOrProvince, bah_source_text";
    var filterPrefix = "$select=" + fieldsSelected + "&$filter=";
    var filter = "";

    //try to search by edipi
    if (_lastSearchType == "EDIPI") {
        var edipi = $("#EdipiTextBox").val();
        filter += buildQueryFilter("bah_edipi_text", edipi, false);
    }
    else {
        if (lastName != "") { //we should always have lastname if we got to this point
            filter += buildQueryFilter("LastName", lastName, false);
        }
        if (ssn != "") {
            filter += buildQueryFilter("bah_ssn_text", ssn, true);
        }
        if (dob != "") {
            var dobdate = new Date(dob);
            var dobsearchstring = dobdate.getFullYear() + "-" + ("0" + (dobdate.getMonth() + 1)).slice(-2) + "-" + ("0" + dobdate.getDate()).slice(-2);
            dobsearchstring += "T12:00:00Z";
            filter += " and bah_dob_date eq datetime'" + dobsearchstring + "'";
        }
        if (firstName != "") {
            filter += buildQueryFilter("FirstName", firstName, true);

        }
    }

    filter += " and StateCode/Value eq 0";

    filter = encodeURIComponent(filter);
    filter = filterPrefix + filter;
    SDK.REST.retrieveMultipleRecords("Contact", filter, crmVeteranSearchCallBackFromMviDownSearch, function (error) { alert(error.message); }, function () {/*do nothing*/ });
}

function crmVeteranSearchCallBack(veteranData, last4CallBack) {
    if (veteranData != null && veteranData.length > 0) {
        $("#possibleResultsTable").find("thead, tr, th").remove();
        $("#possibleResultsTable").find("tr:gt(0)").remove();
        $("#possibleResultsDiv").hide();
        $("#createDiv").hide();

        var table = $("#possibleResultsTable");
        var thead = document.createElement('thead');
        var theadRow = document.createElement('tr');
        for (var i = 0; i < veteranData.length; i++) {
            _contactId = veteranData[i].ContactId == null ? "" : veteranData[i].ContactId;
            var edipi = veteranData[i].bah_edipi_text == null ? "" : veteranData[i].bah_edipi_text;
            var dateOfBirth = veteranData[i].bah_dob_date == null ? "" : veteranData[i].bah_dob_date;
            var ssn = veteranData[i].bah_ssn_text == null ? "" : veteranData[i].bah_ssn_text;
            var firstName = veteranData[i].FirstName == null ? "" : veteranData[i].FirstName;
            var middleName = veteranData[i].MiddleName == null ? "" : veteranData[i].MiddleName;
            var lastName = veteranData[i].LastName == null ? "" : veteranData[i].LastName;
            var branch = veteranData[i].bah_branch_text == null ? "" : veteranData[i].bah_branch_text;
            var telephone1 = veteranData[i].Telephone1 == null ? "" : veteranData[i].Telephone1;
            //Address1_Line1
            var street1 = veteranData[i].Address1_Line1 == null ? "" : veteranData[i].Address1_Line1;
            var city = veteranData[i].Address1_City == null ? "" : veteranData[i].Address1_City;
            var zip = veteranData[i].Address1_PostalCode == null ? "" : veteranData[i].Address1_PostalCode;
            var state = veteranData[i].Address1_StateOrProvince == null ? "" : veteranData[i].Address1_StateOrProvince.Value;
            var source = veteranData[i].bah_source_text == null ? "" : veteranData[i].bah_source_text;

            var fulladdress = "";
            if (city != "" && street1 != "" && zip != "" && state != "") {
                fulladdress = street1 + " " + city + ", " + state + " " + zip;
            }

            var dobstring = "";
            if (dateOfBirth != "") {
                var dobdate = new Date(dateOfBirth);
                dobstring = ("0" + (dobdate.getMonth() + 1)).slice(-2) + "/" + ("0" + dobdate.getDate()).slice(-2) + "/" + dobdate.getFullYear();
            }

            if (i === 0) {
                addHeaderColumn(theadRow, "Full Name");
                if (last4CallBack) {
                    addHeaderColumn(theadRow, "Partial SSN");
                }
                else {
                    addHeaderColumn(theadRow, "SSN");
                }
                addHeaderColumn(theadRow, "EDIPI");
                addHeaderColumn(theadRow, "Date of Birth");
                addHeaderColumn(theadRow, "Phone No");
                addHeaderColumn(theadRow, "Address");
               addHeaderColumn(theadRow, "Source");
                thead.appendChild(theadRow);
            }

            // Table rows
            var row = document.createElement('tr');
            addRowAttribute(row, 'fullName', lastName + ", " + firstName + " " + middleName, true);
            if (last4CallBack) {
                addRowAttribute(row, 'ssn', "*****" + ssn, true);
            }
            else {
                addRowAttribute(row, 'ssn', ssn, true);
            }
            addRowAttribute(row, 'edipi', edipi, true);
            addRowAttribute(row, 'dobstring', dobstring, true);
            addRowAttribute(row, 'telephone1', telephone1, true);
            addRowAttribute(row, 'fulladdress', fulladdress, true);
            addRowAttribute(row, 'source', source, true);


            row.className = (i % 2 === 0) ? "even" : "odd";
            row.id = "resultstable-row-" + i;
            row.setAttribute('contactId', _contactId);
            if (last4CallBack) {
                row.ondblclick = function () { updateSelectedPersonFromLast4Search(this); };
                row.onkeydown = function (e) {
                    if (e.keyCode === 13 || e.keyCode === 32) {
                        updateSelectedPersonFromLast4Search(this);
                    }
                };
            }
            else {
                row.ondblclick = function () { updateSelectedVeteranFromMviDownSearch(this); };
                row.onkeydown = function (e) {
                    if (e.keyCode === 13 || e.keyCode === 32) {
                        updateSelectedVeteranFromMviDownSearch(this);
                    }
                };
            }
            table.append(row);
            table.append(thead);
        }
        $("#possibleResultsDiv").show();
    }
    else {
        alert("Could not find matching contact in CRM using provided search criteria");
    }

    $("#createDiv").show();
    if (last4CallBack) {
        $("#last4CreateRow").show();
        $("#mviDownCreateRow").hide();
    }
    else {
        $("#last4CreateRow").hide();
        $("#mviDownCreateRow").show();
        if (_lastSearchType == "EDIPI") {
            $("#createAttributesTable").show();
        }
        else {
            $("#createAttributesTable").hide();
        }
    }
}

function validateSearchByIdentifier() {

    // TODO: REMOVE THIS! temporary injection for testing Sensitive Vet process
    __MVI_FullName = "Johnny Veteran";
    _contactId = Xrm.Page.context.getUserId();
    handleSensitiveVet(true, true,'1/1/1999', '12345', '54321');

    var edipi = $("#EdipiTextBox").val();

    if (edipi != "") {
        if ((edipi.length != 10 || isNumeric(edipi) == false)) {
            $("#validationFailedDiv").text("VALIDATION FAILED: EDIPI is invalid.");
            return false;
        }
        return true;
    }
    else {
        $("#validationFailedDiv").text("VALIDATION FAILED: The search requires an EDIPI.");
        return false;
    }
}

function updateSelectedPersonFromLast4Search(obj) {
    //alert("here we would set the SSN for " + obj.getAttribute('contactId')+ " to " + _selectedPersonObj.getAttribute('ssn'));

    var contact = {};
    _contactId = obj.getAttribute('contactId');
    var fname = _selectedPersonObj.getAttribute('firstName');
    var lname = _selectedPersonObj.getAttribute('lastName');
    var patientMviIdentifier = _selectedPersonObj.getAttribute('patientMviIdentifier');
    var ssn = _selectedPersonObj.getAttribute('ssn');
    var edipi = _selectedPersonObj.getAttribute('edipi');
    var phone = _selectedPersonObj.getAttribute('phoneNumber');
    var mname = _selectedPersonObj.getAttribute('middleName');
    var street = _selectedPersonObj.getAttribute('address1');
    var city = _selectedPersonObj.getAttribute('city');
    var state = _selectedPersonObj.getAttribute('state');
    var zip = _selectedPersonObj.getAttribute('zip');
    var mmn = _selectedPersonObj.getAttribute('mmn');
    var gender = _selectedPersonObj.getAttribute('gender');
    var source = _selectedPersonObj.getAttribute('recordSource');
    var dobstring = _selectedPersonObj.getAttribute('dateofbirth');
     // for Sensitive Vet process:
    _isDeceased = _selectedPersonObj.getAttribute('isDeceased');
    _isSensitive = _selectedPersonObj.getAttribute('isSensitive');
    _siteId = _selectedPersonObj.getAttribute('siteId');
    _preferredFacility = _selectedPersonObj.getAttribute('preferredFacility');   

    var dob;

    if (lname == "" || dob == "" || (ssn == "" && edipi == "")) {
        alert("Last Name, Date of Birth, and SSN or EDIPI are required to update the Veteran Record");
        return;
    }
    else {
        if (!isNaN(Date.parse(dobstring))) {
            var dobdate = new Date(dobstring);
            var dobmonth = dobdate.getMonth() + 1;
            var dobday = dobdate.getDate();
            var dobyear = dobdate.getFullYear();
            dob = dobyear + "-" + dobmonth + "-" + dobday + "T12:00:00Z";
            contact.bah_dob_date = dob;
        }

        contact.LastName = lname;
        contact.bah_dob_date = dob;
        contact.bah_source_text = source;

        if (ssn != "") { contact.bah_ssn_text = ssn; }
        if (edipi != "") { contact.bah_edipi_text = edipi; }
        if (fname != "") { contact.FirstName = fname; }
        if (mname != "") { contact.MiddleName = mname; }
        if (mmn != "") { contact.bah_mmn_text = mmn; }
        if (phone != "") { contact.Telephone1 = phone; }
        if (street != "") { contact.Address1_Line1 = street; }
        if (city != "") { contact.Address1_City = city; }
        if (zip != "") { contact.Address1_PostalCode = zip; }
        if (patientMviIdentifier != "") { contact.bah_mvipatientidentifier_text = patientMviIdentifier; }
         // added these fields for Sensitive Vet process:
        if (_isDeceased!=""){contact.bah_isdeceased_bool = _isDeceased;}
        if (_isSensitive!="") {contact.vhacrm_issensitive_bool = _isSensitive;}
        if (dFN!="") {contact.vhacrm_dfn_text = dFN;}
        if (_preferredFacility!="") {contact.vhacrm_facilitynumber_text = _preferredFacility;}

        if (gender == "M") {
            contact.GenderCode = { Value: 1 };
        }
        else if (gender == "F") {
            contact.GenderCode = { Value: 2 };
        }

        if (state != "") {
            var stateObj = getState(state);
        }
        if (stateObj != null) {
            contact.bah_address1_stateid = { Id: stateObj.bah_stateId, LogicalName: "vhacrm_state", Name: stateObj.bah_name };
            contact.Address1_StateOrProvince = stateObj.bah_name;
        }
        else {
            contact.Address1_StateOrProvince = state;
        }
    }

    var fullname = lname + ", " + fname + " " + mname;
    SDK.REST.updateRecord(_contactId, contact, "Contact", function () { updateSelectedVeteranOnForm(_contactId, fullname); }, function (error) { alert(error.message); });
}

function updateSelectedVeteranFromMviDownSearch(obj) {
    _contactId = obj.getAttribute('contactId');
    var fullName = obj.getAttribute('fullName');
    updateSelectedVeteranOnForm(_contactId, fullName);
}

function createNewVeteranFromLast4Search() {
    if (Xrm != null && Xrm.Page != null && Xrm.Page.context != null) {
        var fname = _selectedPersonObj.getAttribute('firstName');
        var lname = _selectedPersonObj.getAttribute('lastName');
        var patientMviIdentifier = _selectedPersonObj.getAttribute('patientMviIdentifier');
        var ssn = _selectedPersonObj.getAttribute('ssn');
        var edipi = _selectedPersonObj.getAttribute('edipi');
        var phone = _selectedPersonObj.getAttribute('phoneNumber');
        var mname = _selectedPersonObj.getAttribute('middleName');
        var street = _selectedPersonObj.getAttribute('address1');
        var city = _selectedPersonObj.getAttribute('city');
        var state = _selectedPersonObj.getAttribute('state');
        var zip = _selectedPersonObj.getAttribute('zip');
        var mmn = _selectedPersonObj.getAttribute('mmn');
        var gender = _selectedPersonObj.getAttribute('gender');
        var source = _selectedPersonObj.getAttribute('recordSource');
        var dobstring = _selectedPersonObj.getAttribute('dateofbirth');
         // for Sensitive Vet process:
        _isDeceased = _selectedPersonObj.getAttribute('isDeceased');
        _isSensitive = _selectedPersonObj.getAttribute('isSensitive');
        _siteId = _selectedPersonObj.getAttribute('siteId');
        _preferredFacility = _selectedPersonObj.getAttribute('preferredFacility');

        var dob;

        if (lname == "" || dob == "" || (ssn == "" && edipi == "")) {
            alert("Last Name, Date of Birth, and SSN or EDIPI are required to create a new Veteran Record");
            return;
        }
        else {
            var dobdate = new Date(dobstring);
            var dobmonth = dobdate.getMonth() + 1;
            var dobday = dobdate.getDate();
            var dobyear = dobdate.getFullYear();
            dob = dobyear + "-" + dobmonth + "-" + dobday + "T12:00:00Z";
        }

        // TODO: Add additional fields

        var contact = {};
        contact.LastName = lname;
        contact.bah_dob_date = dob;
        contact.bah_source_text = source;

        if (ssn != "") { contact.bah_ssn_text = ssn; }
        if (edipi != "") { contact.bah_edipi_text = edipi; }
        if (fname != "") { contact.FirstName = fname; }
        if (mname != "") { contact.MiddleName = mname; }
        if (mmn != "") { contact.bah_mmn_text = mmn; }
        if (phone != "") { contact.Telephone1 = phone; }
        if (street != "") { contact.Address1_Line1 = street; }
        if (city != "") { contact.Address1_City = city; }
        if (zip != "") { contact.Address1_PostalCode = zip; }
        if (patientMviIdentifier != "") { contact.bah_mvipatientidentifier_text = patientMviIdentifier; }
         // added these fields for Sensitive Vet process:
        if (_isDeceased!=""){contact.bah_isdeceased_bool = _isDeceased;}
        if (_isSensitive!="") {contact.vhacrm_issensitive_bool = _isSensitive;}
        if (dFN!="") {contact.vhacrm_dfn_text = dFN;}
        if (_preferredFacility!="") {contact.vhacrm_facilitynumber_text = _preferredFacility;

        if (gender == "M") {
            contact.GenderCode = { Value: 1 };
        }
        else if (gender == "F") {
            contact.GenderCode = { Value: 2 };
        }

        if (state != "") {
            var stateObj = getState(state);
            if (stateObj != null) {
                contact.bah_address1_stateid = { Id: stateObj.bah_stateId, LogicalName: "vhacrm_state", Name: stateObj.bah_name };
                contact.Address1_StateOrProvince = stateObj.bah_name;
            }
            else {
                contact.Address1_StateOrProvince = state;
            }
        }

        SDK.REST.createRecord(contact, "Contact", contactCreateCallBack, function (error) { alert(error.message); });
    }
}}


function contactCreateCallBack(returnData) {
    if (returnData != null && returnData.length > 0) {
        alert("Contact was not created.");
        return;
    }

    try {
        //window.parent.Xrm.Page.data.entity.save();
        window.parent.mvi.personSelected(returnData.ContactId, returnData.FullName);
    }
    catch (err) {
        alert("Error encountered trying to update bah_veteranid field value to " + returnData.ContactId + " : " + err);
    }
}

function updateSelectedVeteranOnForm(contactid, fullname) {
    try {
        //window.parent.Xrm.Page.data.entity.save();
        window.parent.mvi.personSelected(contactid, fullname);
    }
    catch (err) {
        alert("Error encountered trying to update bah_veteranid field value to " + contactid + " : " + err);
    }
}

function showHideTable(tblObj, imgObj, msgObj, msgFriendlyName) {
    if (tblObj.style.display != "") {  // show table & display -
        tblObj.style.display = "";
        imgObj.alt = "Hide Additional Search Criteria";
        imgObj.src = "bah_collapse"; //"expand_collapse_minus.gif"; 
        msgObj.value = "Hide " + msgFriendlyName;
    }
    else {  // hide table & display +
        tblObj.style.display = "none";
        imgObj.alt = "Show Additional Search Criteria";
        imgObj.src = "bah_expand"; //"expand_collapse_plus.gif";
        msgObj.value = "Show " + msgFriendlyName;
    }
}

function showHideTableFromKeydown(tblObj, imgObj, msgObj, event, msgFriendlyName) {
    if (event.keyCode === 13 || event.keyCode === 32) {
        if (tblObj.style.display != "") {  // show table & show -
            tblObj.style.display = "";
            imgObj.alt = "Hide " + msgFriendlyName;
            imgObj.src = "bah_collapse"; //"expand_collapse_minus.gif";
            msgObj.value = "Hide " + msgFriendlyName;
        }
        else {  // hide table & show +
            tblObj.style.display = "none";
            imgObj.alt = "Show Additional Search Criteria";
            imgObj.src = "bah_expand"; // "expand_collapse_plus.gif";
            msgObj.value = "Show Additional Search Criteria";
        }

        // need to set focus back on the image (**NOT WORKING IN CRM)
        imgObj.focus();
    }
}

function getCountryId(countryname) {
    var countryId = "";

    var oDataSetName = "bah_countrySet";
    var filter = "bah_countryname eq '" + countryname + "'";
    var columns = "bah_countryname, bah_countryId";
    var requestResults = retrieveMultipleSync(oDataSetName, columns, filter);
    var country = null;

    if (requestResults != null) {
        country = requestResults.results[0];
        if (country != null) {
            countryId = country.bah_countryId;
        }
    }

    return countryId;
}

function getState(statename) {
    var oDataSetName = "bah_stateSet";
    var filter = "bah_abbreviation_text eq '" + statename + "' or bah_name eq '" + statename + "'";
    var columns = "bah_name, bah_stateId, bah_abbreviation_text";
    var requestResults = retrieveMultipleSync(oDataSetName, columns, filter);
    var result = null;

    if (requestResults != null) {
        result = requestResults.results[0];
    }

    return result;
}

