//global array to hold functions to execute in unattendedSearchFromRelatedRecordCallback
var _successFunctions = [];
	_patientMviIdentifier = "";

function unattendedSearchFromRelatedRecord(veteranField) {
    _successFunctions = [];
    if (arguments.length > 1) {
        for (var i = 1; i < arguments.length; i++) {
            _successFunctions[i - 1] = arguments[i];
        }
    }
    if (Xrm.Page.getAttribute(veteranField) != null) {
        var veteranId = Xrm.Page.getAttribute(veteranField).getValue();
        if (veteranId != null) {
            if (veteranId[0].id != null) {
                retrieveVeteran(veteranId[0].id);
            }
        }
    }
}


function retrieveVeteran(id) {
    var selectFields = "bah_dob_date";
    selectFields += ",bah_edipi_text";
    selectFields += ",bah_ssn_text";
    selectFields += ",FirstName";
    selectFields += ",LastName";

    var expandFields = "";

    //retrieve veteran
    SDK.REST.retrieveRecord(id.toString(), "Contact", selectFields, expandFields, retrieveVeteranSuccessCallback, retrieveVeteranErrorCallback);
	
}

function retrieveVeteranErrorCallback() {
	console.log(error.message);
    //do nothing
}

function retrieveVeteranSuccessCallback(result) {
debugger; 
    var filter = "";
    var filterPrefix = "$select=crme_PatientMviIdentifier,crme_VeteranSensitivityLevel&$filter=";
	
    var edipi = result.bah_edipi_text;
    if (edipi != null) {
        if (edipi.length > 11) {
            edipi = "";
        }
    }
    else {
        edipi = "";
    }
    var firstname = result.FirstName;
    var lastname = result.LastName;

    var dobdate = result.bah_dob_date;
    var dobstring = "";
    if (dobdate != null) {
        dobstring = (dobdate.getMonth() + 1) + "/" + dobdate.getDate() + "/" + dobdate.getFullYear();
    }


    var ssn = result.bah_ssn_text;
    if (ssn != "" && ssn != null) {
        ssn = ssn.replace(/-/g, "");
    }

    //if we have edipi, search using just it
    if (edipi != "") {
        filter = buildQueryFilter("crme_EDIPI", edipi, false);
        filter += buildQueryFilter("crme_ClassCode", 'MIL', true);
        filter += buildQueryFilter("crme_SearchType", 'SearchByIdentifier', true);

        //set search type as unattended
        filter += " and crme_IsAttended eq false";
    }
    else {
        //otherwise search using lastname, firstname, ssn, dob
        filter = buildQueryFilter("crme_LastName", lastname, false); //assuming lastname will never be blank

        if (firstname != "" && firstname != null) {
            filter += buildQueryFilter("crme_FirstName", firstname, true);
        }

        if (ssn != "" && ssn != null) {
            filter += buildQueryFilter("crme_SSN", ssn, true);
        }

        if (dobstring != "") {
            filter += " and crme_DOBString eq '" + dobstring + "'";
        }
        filter += buildQueryFilter("crme_SearchType", 'SearchByFilter', true);

        //set search type as attended (for now)
        filter += " and crme_IsAttended eq true";
    }


    filter = encodeURIComponent(filter);
    filter = filterPrefix + filter;
    //debugger;
    SDK.REST.retrieveMultipleRecords("crme_person", filter, unattendedSearchFromRelatedRecordCallback, function (error) { alert(error.message); }, unattendedSearchComplete);
}

// default this to True if it is not set elsewhere (this is set explicitly on Demographics.htm)
var sensitiveVetCheck=true;

///callback for mvi search. if we get an icn, the _successFuntions will be executed here
function unattendedSearchFromRelatedRecordCallback(returnData) {
debugger; 

    if (returnData != null && returnData.length == 1) {
        // check for exceptions 1st
        if (returnData[0].crme_ExceptionOccured || (returnData[0].crme_ReturnMessage != null && returnData[0].crme_ReturnMessage == "An unexpected error occured during the MVI search. Please try again or contact your system administrator if the problem persists.")) {
            //do nothing
        }
        else {
            var patientMviIdentifier = returnData[0].crme_PatientMviIdentifier == null ? "" : returnData[0].crme_PatientMviIdentifier;
			_patientMviIdentifier = patientMviIdentifier;
			var vetSensLevel = returnData[0].crme_VeteranSensitivityLevel == null ? "" : returnData[0].crme_VeteranSensitivityLevel; 
			var arrVetSensLevel = vetSensLevel.split(":");
			var isSensitive = arrVetSensLevel[0];
			
			if (isSensitive == 'true') {
				if (Xrm.Page.data.entity.getEntityName() != "bah_interactions") {
				// set the ICN on the modal web resource, to be used in making the second call to MVI for logging
				// set the show modal boolean to false to handle sensitive vet
					showSensitiveVetMode(false);
					Xrm.Page.getControl("WebResource_veteranalert").getObject().contentWindow.window.setICN(patientMviIdentifier);
				}
				else {
					if (Xrm.Page.ui.tabs.get("interactioninformation").getVisible() != true) {
						showSensitiveVetMode(false);
						Xrm.Page.getControl("WebResource_veteranalert").getObject().contentWindow.window.setICN(patientMviIdentifier);
					}
				}
			}
			else if (!isSensitive || isSensitive !== 'true') {
				// if not sensitive, then show the necessary tabs that are hidden
				// call function to show/hide fields in VeteranAlerts.js
				showSensitiveVetMode(true);
			}
			
            if (patientMviIdentifier != "") {
                var idparts = patientMviIdentifier.split("^");

                if (idparts.length > 0) {
                    var nationalID = idparts[0];

					if (!!sensitiveVetCheck) {
						for (var i = 0; i < _successFunctions.length; i++) {
							_successFunctions[i](nationalID);
						}
					}
					else{
						// need to determine next steps 5/17/17 CMcK
					}
                }
            }
        }
    }
}

///looks up a kvp url for a web part, replaces the placeholder {0} with the icn and sets an iframe's source url to the full path
function displayWebPart(icn, iframename, kvpname) {
    SDK.REST.retrieveMultipleRecords("bah_keyvaluepair",
                   "$select=bah_stringvalue_text&$filter=bah_name_text eq '" + kvpname + "'",
                   function (data) {
                       if (data.length > 0) {
                           url = data[0].bah_stringvalue_text;
                           var webresource = Xrm.Page.ui.controls.get(iframename);
                           var webresourceUrl = url.replace('{0}', icn);
                           webresource.setSrc(webresourceUrl);
                       }
                   },
                   function (error) {
                       //do nothing
                   },
                   function () {
                       //do nothing on completion
                   }
    );
}


/* function setIframeURLholder(iframename, fieldname, icn) {
    // Sets the iframe URL inside a hidden field to make available on tab open event 
    //  NOTE: iframename MUST be same name as the custom HTM page which will be rendered inside of it without the IFRAME prefix
    //             for example:  Veteran form Iframename = "IFRAME_VeteranSidebar" & page name "VeteranSidebar.htm"
    var hostURL = window.location.pathname.substring(0, window.location.pathname.lastIndexOf("/") + 1);
    var iframeURL = hostURL + "WebResources/vhacrm_/ESRParts/" + iframename + ".htm";
    iframeURL = iframeURL + "?data=" + icn;
    Xrm.Page.getAttribute(fieldname).setValue(iframeURL);
} */


// currently only used for VeteranSidebar (iframe within iframe) 
// this could be extended to use other custom HTML webpart pages
function getICN(iframename, icn) {
    // Get the iframe, and make ICN available to inner Iframe
    var hostURL =  Xrm.Page.context.getClientUrl();
    var iframeURL = hostURL + "/WebResources/vhacrm_/ESRParts/VeteranSidebar.htm";
    iframeURL = iframeURL + "?data=" + icn;
    Xrm.Page.getControl(iframename).setSrc(iframeURL);
}


function buildQueryFilter(field, value, and) {
    if (value == '') {
        if (and) {
            return " and " + field + " eq null";
        } else {
            return field + " eq null";
        }
    }
    else {
        if (and) {
            return " and " + field + " eq '" + value + "'";
        } else {
            return field + " eq '" + value + "'";
        }
    }
}

function unattendedSearchFromVeteran() {
    _successFunctions = [];
    if (arguments.length > 1) {
        for (var i = 0; i < arguments.length; i++) {
            _successFunctions[i] = arguments[i];
        }
    }
    var filter = "";
    var filterPrefix = "$select=crme_PatientMviIdentifier,crme_VeteranSensitivityLevel&$filter=";

    var edipi = Xrm.Page.getAttribute("bah_edipi_text").getValue();
    if (edipi != null) {
        if (edipi.length > 11) {
            edipi = "";
        }
    }
    else {
        edipi = "";
    }
    var firstname = Xrm.Page.getAttribute("firstname").getValue();
    var lastname = Xrm.Page.getAttribute("lastname").getValue();

    var dobdate = Xrm.Page.getAttribute("bah_dob_date").getValue();
    var dobstring = "";
    if (dobdate != null) {
        dobstring = (dobdate.getMonth() + 1) + "/" + dobdate.getDate() + "/" + dobdate.getFullYear();
    }


    var ssn = Xrm.Page.getAttribute("bah_ssn_text").getValue();
    if (ssn != "" && ssn != null) {
        ssn = ssn.replace(/-/g, "");
    }

    //if we have edipi, search using just it
    if (edipi != "") {
        filter = buildQueryFilter("crme_EDIPI", edipi, false);
        filter += buildQueryFilter("crme_ClassCode", 'MIL', true);
        filter += buildQueryFilter("crme_SearchType", 'SearchByIdentifier', true);

        //set search type as unattended
        filter += " and crme_IsAttended eq false";
    }
    else {
        //otherwise search using lastname, firstname, ssn, dob
        filter = buildQueryFilter("crme_LastName", lastname, false); //assuming lastname will never be blank

        if (firstname != "" && firstname != null) {
            filter += buildQueryFilter("crme_FirstName", firstname, true);
        }

        if (ssn != "" && ssn != null) {
            filter += buildQueryFilter("crme_SSN", ssn, true);
        }

        if (dobstring != "") {
            filter += " and crme_DOBString eq '" + dobstring + "'";
        }
        filter += buildQueryFilter("crme_SearchType", 'SearchByFilter', true);

        //set search type as attended (for now)
        filter += " and crme_IsAttended eq true";
    }


    filter = encodeURIComponent(filter);
    filter = filterPrefix + filter;
    //debugger;
    SDK.REST.retrieveMultipleRecords("crme_person", filter, unattendedSearchCallback, function (error) { alert(error.message); }, unattendedSearchComplete);
}


function unattendedSearchCallback(returnData) {
	debugger; 
    
	if (returnData != null && returnData.length == 1) {
        // check for exceptions 1st
        if (returnData[0].crme_ExceptionOccured || (returnData[0].crme_ReturnMessage != null && returnData[0].crme_ReturnMessage == "An unexpected error occured during the MVI search. Please try again or contact your system administrator if the problem persists.")) {
            //do nothing
        }
        else {
            var patientMviIdentifier = returnData[0].crme_PatientMviIdentifier == null ? "" : returnData[0].crme_PatientMviIdentifier;
			var vetSensLevel = returnData[0].crme_VeteranSensitivityLevel == null ? "" : returnData[0].crme_VeteranSensitivityLevel; 
			var arrVetSensLevel = vetSensLevel.split(":");
			var isSensitive = arrVetSensLevel[0];
			
			if (isSensitive == 'true') {
				// hide the SSN and DOB fields
				//Xrm.Page.getControl("bah_dob_date").setVisible(false);
				//Xrm.Page.getControl("bah_ssn_text").setVisible(false);
				// set the show modal boolean to false to handle sensitive vet
				showSensitiveVetMode(false);
				
				// set the ICN on the modal web resource, to be used in making the second call to MVI for logging
				Xrm.Page.getControl("WebResource_VeteranAlerts").getObject().contentWindow.window.setICN(patientMviIdentifier);
				
				// openSelectedPerson to be called from veteran alerts html
				//openSelectedPersonUnattended(patientMviIdentifier);// make 2nd call to MVI for the PatientId and SiteId, login to Via, log the security bulletin
			}
			else if (!isSensitive || isSensitive !== 'true') {
				// if not sensitive, then show the necessary tabs that are hidden
				// call function to show/hide fields in VeteranAlerts.js
				showSensitiveVetMode(true);
			}
		
			if (patientMviIdentifier != "") {
                var idparts = patientMviIdentifier.split("^");
								
                if (idparts.length > 0) {
					var nationalID = idparts[0];
					_icn = nationalID; 
					
					
                    for (var i = 0; i < _successFunctions.length; i++) {
                        _successFunctions[i](nationalID);
                    }
                }
            }
        }
    }
}

// only used for Sensitive vets on unattended search, triggered from veteranalerts.html/.js:
function openSelectedPersonUnattended(patientMviIdentifier) {
	//set global selected person object for use later
	_patientMviIdentifier = patientMviIdentifier;
	var participantId = _patientMviIdentifier;
	
	if(participantId.indexOf("^")>1) {
	console.log("Making second call to MVI, this will initiate logging.");
	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 () { });
	}
	console.log("Logging successful.");
	return false;
}

// only used for Sensitive vets on unattended search:
function personRetrieveCallback(data) {
	
	//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){
			_selectedPersonObj = data[i]; 				// set the record current veteran while going through the loop.					
		}
	}   	
	debugger; 
	
	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'){	 // Handle Sensitive Vet
			//var interaction = window.parent.Xrm.Page.data.entity.getId();
			handleSensitiveVet(null, _selectedPersonObj); // set up global vars for sensitive vet & display warning (function is on VeteranAlerts.js) - note: need to pass ICN seperately bc it's not returned in 2nd MVI result!						
			// TODO: 8/8/17 need to modify VeteranAlerts to unhide the DOB and SSN fields 
		}

	}
} 

function unattendedSearchComplete() {
    //do nothing
}