function writeToConsole(message) {
    if (typeof console != 'undefined') console.log(message);
}

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 = JSON.parse(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("");

}

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();
}

// callback from initial call to MVI  plugin
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 using the button below.");
                showResultsMessageDiv("No records found. Verify the search criteria, enter additional search criteria, or search for a record in CRM using the button below.");
                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;
			// 7/31/17 CMcK: now 2 values in one field. Comes from MVI as IsSensitive:IsVeteran
            var vetSensLevel = returnData[i].crme_VeteranSensitivityLevel == null ? "" : returnData[i].crme_VeteranSensitivityLevel; 
			var arrVetSensLevel = vetSensLevel.split(":");
            var isSensitive = arrVetSensLevel[0];
			var isVeteran = arrVetSensLevel[1];
			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 () { checkForSensitive(this); };
            row.onkeydown = function (e) {
                if (e.keyCode === 13 || e.keyCode === 32) {
                    checkForSensitive(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 button 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 additional search criteria, or search for a record in CRM using the button below.");
}


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 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;
// }


// user double clicked on Veteran - check to see if Sensitive.
function checkForSensitive(obj) {
	debugger;
		if(obj.getAttribute("vetSensLevel").substring(0,4) == "true") {
			var interaction = window.parent.Xrm.Page.data.entity.getId();
			handleSensitiveVet(interaction, obj); // set up global vars for sensitive vet & display warning (function is on VeteranAlerts.js) 
			// user must click "Continue" before firing openSelectedPerson 
		}
		else {
			openSelectedPerson(obj); // proceed w/ opening person 
		}
	}

		
// replaced 8/1/17 
// Making that 2nd call to MVI plugin ... "SelectedPersonSearch"
function openSelectedPerson(obj) {
	debugger;
	//set global selected person object for use later
	_selectedPersonObj = obj;
	var participantId = obj.getAttribute('participantId');
	
	if(participantId.indexOf("^")>1) {
	var idparts = participantId.split("^");
	if(idparts.length>0) {
			_icn = idparts[0];
		}
		var filter = "&select=*&$filter=crme_ICN eq '" + _icn + "' and crme_SearchType eq 'SelectedPersonSearch'";
					
		$('div#tmpDialog').show();
		SDK.REST.retrieveMultipleRecords("crme_person", filter, personRetrieveCallback, function (error) { alert(error.message); }, function () { });
	}

	return false;
}

// This grabs pairs out of a "correlations" field that is retrieved from MVI on the 2nd retrieve 
function getCorrespondingId(type) {
	var filteredIds = _correspondingIds.filter(function (data) { return data.idtype.toUpperCase() == type.toUpperCase(); });
	if (filteredIds.length == 1) {
		return filteredIds[0].idvalue;
	}
	else {
		return null;
	}
}	

// callback from 2nd call to MVI plugin
function personRetrieveCallback(data) {
	$('div#tmpDialog').hide();

	debugger; 
	
	//loop through results and populate global _correspondingIds array
	_correspondingIds = [];
	
	for(var i=0;i<data.length;i++){
		var idObj = {idvalue: data[i].crme_PatientId, idtype: data[i].crme_SiteId}
		_correspondingIds[_correspondingIds.length] = idObj;
			
		//primary VistA record has the Sensitivity Flag set 
		if(data[i].crme_VeteranSensitivityLevel != null){
			// set the record current veteran while going through the loop.
			_selectedPersonObj = data[i]; 						
		}
	}
    var edipi = getCorrespondingId("200DOD");
    if (edipi != null && edipi != "")
        {
        _edipi = edipi;
        }
   	

	
	if(_selectedPersonObj.crme_VeteranSensitivityLevel != null){
	//split out VeteranSensitivityLevel before evaluating:
	// 7/31/17 CMcK: now 2 values in one field. Comes from MVI as IsSensitive:IsVeteran
		var vetSensLevel = _selectedPersonObj.crme_VeteranSensitivityLevel == null ? "" : _selectedPersonObj.crme_VeteranSensitivityLevel; 
		var arrVetSensLevel = vetSensLevel.split(":");
		var isSensitive = arrVetSensLevel[0];
		// don't need: var isVeteran = arrVetSensLevel[1];
		
		// isSensitive may not actually be a true or false, so we need to only treat as sensitive if actually "true"
		if(isSensitive =='true'){	 // Sensitive Vet 
			// TODO: Sensitive Vets will need to be logged to VistA
			// After that completes, go ahead and continue w/ normal process & retrieve Contact
			// 		...and if it fails? 
		}			
	} 
	// proceed with retrieving Veteran
	selectedPersonFindContactCallback();
}


// formerly ESRCallback, but ESR piece removed. 8/1/17
function selectedPersonFindContactCallback(){
   obj = _selectedPersonObj;
   
   var firstName = obj.crme_FirstName; // obj.getAttribute('firstName');
   var lastName = obj.crme_LastName; // obj.getAttribute('lastName');
    var patientMviIdentifier = obj.crme_PatientMviIdentifier; //obj.getAttribute('patientMviIdentifier');
    var ssn = obj.crme_SSN; // obj.getAttribute('ssn');
    //var edipi = obj.crme_EDIPI; // obj.getAttribute('edipi');
    var edipi = getCorrespondingId('200DOD');
	var dob = obj.crme_DOBString; // obj.getAttribute('dateofbirth');
    var recordSource = obj.crme_RecordSource; // obj.getAttribute('recordSource');
    var gender = obj.crme_Gender; // obj.getAttribute('gender');
    var deceasedDate = obj.crme_DeceasedDate; // obj.getAttribute('deceasedDate');
    var bos = obj.crme_BranchOfService; // obj.getAttribute('branchOfService');
    var pobc = obj.crme_POBC; // obj.getAttribute('pobc');
    var pobs = obj.crme_POBS; // obj.getAttribute('pobs');
    var mmn = obj.crme_MMN; // obj.getAttribute('mmn');
    var middleName = obj.crme_MiddleName; // obj.getAttribute('middleName');
    var alias = obj.crme_Alias; // obj.getAttribute('alias');
    var address1 = obj.crme_Address1; // obj.getAttribute('address1');
    var address2 = obj.crme_Address2; //obj.getAttribute('address2');
    var city = obj.crme_City; // obj.getAttribute('city');
    var state = obj.crme_StateProvinceId; // obj.getAttribute('state');
    var zip =  obj.crme_ZIPPostalCodeId; //obj.getAttribute('zip');
    var country = "";
    var fullAddress = obj.crme_FullAddress; // obj.getAttribute('fulladdress');
    var phoneNumber = obj.crme_PrimaryPhone; //obj.getAttribute('phoneNumber');
    var email =  obj.crme_Email; //obj.getAttribute('email');
    var classcode = obj.crme_ClassCode; // obj.getAttribute('classcode');
    var participantId = obj.crme_PatientMviIdentifier; //obj.getAttribute('participantId');
    _icn = obj.crme_ICN; //obj.getAttribute('icn');
    __MVI_FullName = lastName + ", " + firstName ;
	if(middleName !=null) __MVI_FullName += " " + middleName; 
	
	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 != "" && edipi != null) filter2 += buildQueryFilter("bah_edipi_text", edipi, true);
    if (ssn != "" && ssn != null) filter2 += buildQueryFilter("bah_ssn_text", ssn, true);
    if (firstName != "" && firstName != null) filter2 += buildQueryFilter("FirstName", firstName, true);
    if (lastName != "" && lastName != null) filter2 += buildQueryFilter("LastName", lastName, true);
    if (middleName != "" && middleName != null) filter2 += buildQueryFilter("MiddleName", middleName, true);
    if (alias != "" && alias != null) filter2 += buildQueryFilter("NickName", alias, true);
    if (recordSource != "" && recordSource != null) filter2 += buildQueryFilter("bah_source_text", recordSource, true);
    if (bos != "" && bos != null) filter2 += buildQueryFilter("bah_branch_text", bos, true);
    if (pobc != "" && pobc != null) filter2 += buildQueryFilter("bah_placeofbirth_city_text", pobc, true);
    if (mmn != "" && mmn != null) filter2 += buildQueryFilter("bah_mmn_text", mmn, true);
    if (phoneNumber != "" && phoneNumber != null) filter2 += buildQueryFilter("Telephone1", phoneNumber, true);
    if (email != "" && email != null) 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 != "" && address1 != null) filter2 += buildQueryFilter("Address1_Line1", address1, true);
    if (address2 != "" && address2 != null) filter2 += buildQueryFilter("Address1_Line2", address2, true);
    if (city != "" && city != null) filter2 += buildQueryFilter("Address1_City", city, true);

    if (state != "" && state != null) {
        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 != "" && country != null) {
        var countryId = getCountryId(country);
        if (countryId != "") {
            filter2 += " and bah_address1_countryid/Id eq (guid'" + countryId.toString() + "')";
        }
        filter2 += buildQueryFilter("Address1_Country", country, true);
    }

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

    if (dob != "" && dob!= null) {
        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 != "" && deceasedDate != null) {
        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";
	filter2 = filterPrefix + filter2 + "&$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);

	// only automatically open if we have exactly one match returned
    if (data != null && data.length == 1 ) {
        //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);

        _contactId = data[0].ContactId;
            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 = "";
			//var filterpartial = "(" + buildQueryFilter("bah_ssn_text", ssn.slice(-4), false) + ")";
            var filterfull = "endswith(bah_ssn_text,'" + ssn.slice(-4) + "')"
            //var filterfull = buildQueryFilter("bah_ssn_text", ssn, false);
            if (lastName != "") filterfull += buildQueryFilter("LastName", lastName, 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";
                filterfull += " and bah_dob_date eq datetime'" + dobsearchstring + "'";
            }
            filterfull = "(" + filterfull + ")";
            //filter = "(" + filterpartial + " or " + filterfull + ") and (StateCode/Value eq 0)";
            filter = filterfull + " 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();
    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() {

    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:
    var dFN = "0"; //Added as temp plachoder.

    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 {
		
            //window.parent.Xrm.Page.data.entity.save();                    
            window.parent.mvi.personSelected(_contactId, __MVI_FullName);
		
        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 dFN = "0"; //Added as temp plachoder.

        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;
}

