You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

4425 lines
247 KiB

<?php
/**
* forms/eye_mag/js/eye_base.php
*
* JS Functions for eye_mag form(s), built with php features for run-time options and translations
*
* @package OpenEMR
* @link https://www.open-emr.org
* @author Ray Magauran <rmagauran@gmail.com>
* @copyright Copyright (c) 2016- Raymond Magauran <rmagauran@gmail.com>
* @license https://github.com/openemr/openemr/blob/master/LICENSE GNU General Public License 3
*/
require_once("../../../globals.php");
require_once("$srcdir/api.inc");
require_once("$srcdir/forms.inc");
require_once("$srcdir/patient.inc");
$providerID = $_REQUEST['providerID'];
?>
var prior_field;
var prior_text;
var response = [];
var update_chart;
var obj= [];
var IMP_order = [];
var CODING_items=[];
var CPT_92060='';
var IMP_target ="0";
var detail_reached_exam ='0';
var detail_reached_HPI ='0';
var chronic_reached_HPI ='0';
//Coding Engine Defaults
var Code_group="Eyes";//options are Eyes - anything else and Coding Engine prefers E&M Codes
var digit_2="2"; //Eye Code
var digit_4="1"; //Established
var digit_5="4"; //Level 4
var visit_code;
var config_byday;
var $root = $('html, body');
var scroll='';
var visit_modifier=[];
var visit_justifier=[];
if (typeof Code_new_est === 'undefined') {
var Code_new_est = 'New';
}
var TESTS_built='';
var doc=[];
/*
* Functions to add a quick pick selection to the correct fields on the form.
*/
function fill_QP_2fields(PEZONE, ODOSOU, LOCATION_text, selection, fill_action, Code_to_process) {
var prefix = document.getElementById(PEZONE+'_prefix').value;
if (prefix > '' && prefix !='off') {prefix = prefix + " ";}
if ((prefix =='off')||(LOCATION_text =='')) { prefix=''; }
var saved_prefix = prefix;
if (ODOSOU =="OU") {
fill_QP_field(PEZONE, "OD", LOCATION_text, selection, fill_action, Code_to_process);
fill_QP_field(PEZONE, "OS", LOCATION_text, selection, fill_action, Code_to_process,saved_prefix);
} else if (ODOSOU =="B") {
fill_QP_field(PEZONE, "R", LOCATION_text, selection, fill_action, Code_to_process);
fill_QP_field(PEZONE, "L", LOCATION_text, selection, fill_action, Code_to_process,saved_prefix);
}
}
function fill_QP_field(PEZONE, ODOSOU, LOCATION_text, selection, fill_action, Code_to_process,saved_prefix) {
if (ODOSOU > '') {
var FIELDID = ODOSOU + LOCATION_text;
} else {
var FIELDID = document.getElementById(PEZONE+'_'+ODOSOU).value + LOCATION_text;
}
var bgcolor = $("#" +FIELDID).css("background-color");
if (saved_prefix) {
var prefix = saved_prefix;
} else {
var prefix = document.getElementById(PEZONE+'_prefix').value;
}
var Fvalue = document.getElementById(FIELDID).value;
if (prefix > '' && prefix !='off') {prefix = prefix + " ";}
if (prefix =='off') { prefix=''; }
if (fill_action =="REPLACE") {
$("#" +FIELDID).val(prefix +selection);
$("#" +FIELDID).css("background-color","#F0F8FF");
} else if (fill_action =="APPEND") {
$("#" +FIELDID).val(Fvalue+selection).css("background-color","#F0F8FF");
} else {
if (($("#" +FIELDID).css("background-color")=="rgb(245, 245, 220)") || (Fvalue =='')) {
//rgb(245, 245, 220) is beige - the field is untouched
$("#" +FIELDID).val(prefix+selection).css("background-color","#F0F8FF");
} else if (Fvalue.match(/x$/)) {
$("#" +FIELDID).val(Fvalue+selection).css("background-color","#F0F8FF");
} else {
if (Fvalue >'') prefix = ", "+prefix;
$("#" +FIELDID).val(Fvalue + prefix +selection).css("background-color","#F0F8FF");
}
}
submit_form(FIELDID);
$('#'+PEZONE+'_prefix').val('off').trigger('change');
}
/*
* This is the core function of the form.
* It submits the data in the background via ajax.
* It is the reason we don't use a submit button.
* It is called often, perhaps too often for some installs because it uses bandwidth.
* It needs to be keenly looked at by developers as it will affect scalability.
* It returns either "Code 400" or positive hits from the clinical data passed through the Coding engine.
* It ensures ownership of the form or provides background updates to READ-ONLY instances of the form.
* It doesn't unlock a form to change ownership/provide write privileges. This is done via the unlock() function.
*/
function submit_form(action) {
var url = "../../forms/eye_mag/save.php?sub=1&mode=update&id=" + $("#form_id").val();
if ($("#COPY_SECTION").value == "READONLY") return;
formData = $("form#eye_mag").serialize();
if (formData =='') return;
$("#menustate").val('0');
top.restoreSession();
$.ajax({
type : 'POST',
url : url,
data : formData //, dataType: "json"
}).done(function(result) {
if (result == 'Code 400') {
code_400(); //Not the owner: read-only mode or take ownership
} else {
// ACTIVE chart.
// Coding engine returns any positive Clinical findings.
//List these findings in the IMP_PLAN Builder
if (action !='1') {populate_form(result);}
}
});
};
/*
* This function alerts the user that they have lost write privileges to another user.
* The form is locked (fields disabled) and they enter the READ-ONLY mode.
* In READ-ONLY mode the form is refreshed every 15 seconds showing changes made by the user with write privileges.
*/
function code_400() {
//User lost ownership. Just watching now...
//now we should get every variable and update the form, every 15 seconds...
$("#active_flag").html(" READ-ONLY ");
toggle_active_flags("off");
alert("Another user has taken control of this form.\rEntering READ-ONLY mode.");
update_READONLY();
this_form_id = $("#form_id").val();
$("#COPY_SECTION").val("READONLY");
update_chart = setInterval(function() {
if ($("#chart_status").value == "on") { clearInterval(update_chart); }
update_READONLY();
}, 15000);
}
/**
* Convert the DB datetime values into date objects in JS
*
* "You should parse them to get a Date object, for that format I always use the following function:
* http://stackoverflow.com/questions/2627650/why-javascript-gettime-is-not-a-function"
*
*/
function parseDate(input) {
var parts = input.match(/(\d+)/g);
// new Date(year, month [, date [, hours[, minutes[, seconds[, ms]]]]])
return new Date(parts[0], parts[1]-1, parts[2]); // months are 0-based
}
/*
* Function to check locked state
*/
function check_lock(modify) {
var locked = $("#LOCKED").val();
var locked_by = $("#LOCKEDBY").val();
if ($("#LOCKEDDATE").val() > '') {
var locked_date = parseDate($("#LOCKEDDATE").val());
} else{
var locked_date= new Date('2000-01-01');
}
var uniqueID = $('#uniqueID').val();
var url = "../../forms/eye_mag/save.php?mode=update&id=" + $("#form_id").val();
clearInterval(update_chart);
//if the form was locked > 1 hour ago, tag we are it - we should auto-get ownership
//if not we have to physically take it.
var now =new Date();
now_time = now.getTime();
var interval = locked_date.setTime(locked_date.getTime() + (60*60*1000));//locked timestamp + 1 hour
if (modify=='1') {
if ($("#chart_status").val() == "on") {
unlock();
toggle_active_flags("off");
update_chart = setInterval(function() {
if ($("#chart_status").val() == "on") { clearInterval(update_chart);}
update_READONLY();
}, 15000);
if ($("#chart_status").value == "on") { clearInterval(update_chart); }
} else {
top.restoreSession();
$.ajax({
type : 'POST',
url : url,
data : {
'acquire_lock' : '1',
'uniqueID' : uniqueID,
'form_id' : $("#form_id").val(),
'locked_by' : $("#LOCKEDBY").val()
}
}).done(function(d) {
$("#LOCKEDBY").val(uniqueID);
toggle_active_flags("on");
clearInterval(update_chart);
});
}
} else if (locked =='1' && (interval < now_time)) { //it was locked more than an hour ago, take ownership quietly
top.restoreSession();
$.ajax({
type : 'POST',
url : url,
data : {
'acquire_lock' : '1',
'uniqueID' : uniqueID, //this user is becoming the new owner
'locked_by' : locked_by, //this is the old owner
'form_id' : $("#form_id").val()
}
}).done(function(d) {
$("#LOCKEDBY").val(uniqueID);
$("#LOCKEDDATE").val(d);
toggle_active_flags("on");
}
);
} else if (locked =='1' && locked_by >'' && (uniqueID != locked_by)) {
//form is locked by someone else, less than an hour ago...
$("#active_flag").html(" READ-ONLY ");
if (confirm('\tLOCKED by another user:\t\n\tSelect OK to take ownership or\t\n\tCANCEL to enter READ-ONLY mode.\t')) {
top.restoreSession();
$.ajax({
type : 'POST',
url : url,
data : {
'acquire_lock' : '1',
'uniqueID' : uniqueID, //this user is becoming the new owner
'locked_by' : locked_by, //this is the old owner
'form_id' : $("#form_id").val()
}
}).done(function(d) {
$("#LOCKEDBY").val(uniqueID);
toggle_active_flags("on");
}
);
} else {
//User selected "Cancel" -- ie. doesn't want ownership. Just watching...
toggle_active_flags("off");
update_chart = setInterval(function() {
$("#COPY_SECTION").trigger('change');
if ($("#chart_status").val() == "on") { clearInterval(update_chart);}
update_READONLY();
}, 15000);
if ($("#chart_status").value == "on") { clearInterval(update_chart); }
}
}
}
/*
* Function to save a canvas by zone
*/
function submit_canvas(zone) {
var id_here = document.getElementById('myCanvas_'+zone);
var dataURL = id_here.toDataURL('image/jpeg');
top.restoreSession();
$.ajax({
type: "POST",
url: "../../forms/eye_mag/save.php?canvas="+zone+"&id="+$("#form_id").val(),
data: {
imgBase64 : dataURL, //this contains the canvas + new strokes, the sketch.js foreground
'zone' : zone,
'visit_date' : $("#visit_date").val(),
'encounter' : $("#encounter").val(),
'pid' : $("#pid").val()
}
}).done(function(o) {
});
}
/*
* Function to update the user's preferences
*/
function update_PREFS() {
var checker = $('#PREFS_TOOLTIPS').val();
if (checker > '') {
var url = "../../forms/eye_mag/save.php";
var formData = {
'AJAX_PREFS' : "1",
'PREFS_VA' : $('#PREFS_VA').val(),
'PREFS_W' : $('#PREFS_W').val(),
'PREFS_MR' : $('#PREFS_MR').val(),
'PREFS_W_width' : $('#PREFS_W_width').val(),
'PREFS_MR_width' : $('#PREFS_MR_width').val(),
'PREFS_CR' : $('#PREFS_CR').val(),
'PREFS_CTL' : $('#PREFS_CTL').val(),
'PREFS_ADDITIONAL' : $('#PREFS_ADDITIONAL').val(),
'PREFS_VAX' : $('#PREFS_VAX').val(),
'PREFS_RXHX' : $('#PREFS_RXHX').val(),
'PREFS_IOP' : $('#PREFS_IOP').val(),
'PREFS_CLINICAL' : $('#PREFS_CLINICAL').val(),
'PREFS_EXAM' : $('#PREFS_EXAM').val(),
'PREFS_CYL' : $('#PREFS_CYL').val(),
'PREFS_EXT_VIEW' : $('#PREFS_EXT_VIEW').val(),
'PREFS_ANTSEG_VIEW' : $('#PREFS_ANTSEG_VIEW').val(),
'PREFS_RETINA_VIEW' : $('#PREFS_RETINA_VIEW').val(),
'PREFS_NEURO_VIEW' : $('#PREFS_NEURO_VIEW').val(),
'PREFS_ACT_VIEW' : $('#PREFS_ACT_VIEW').val(),
'PREFS_ACT_SHOW' : $('#PREFS_ACT_SHOW').val(),
'PREFS_HPI_RIGHT' : $('#PREFS_HPI_RIGHT').val(),
'PREFS_PMH_RIGHT' : $('#PREFS_PMH_RIGHT').val(),
'PREFS_EXT_RIGHT' : $('#PREFS_EXT_RIGHT').val(),
'PREFS_ANTSEG_RIGHT' : $('#PREFS_ANTSEG_RIGHT').val(),
'PREFS_RETINA_RIGHT' : $('#PREFS_RETINA_RIGHT').val(),
'PREFS_NEURO_RIGHT' : $('#PREFS_NEURO_RIGHT').val(),
'PREFS_PANEL_RIGHT' : $('#PREFS_PANEL_RIGHT').val(),
'PREFS_IMPPLAN_RIGHT' : $('#PREFS_IMPPLAN_DRAW').val(),
'PREFS_KB' : $('#PREFS_KB').val(),
'PREFS_TOOLTIPS' : $('#PREFS_TOOLTIPS').val(),
'setting_tabs_left' : $('#setting_tabs_left').val(),
'setting_HPI' : $('#setting_HPI').val(),
'setting_PMH' : $('#setting_PMH').val(),
'setting_EXT' : $('#setting_EXT').val(),
'setting_ANTSEG' : $('#setting_ANTSEG').val(),
'setting_POSTSEG' : $('#setting_POSTSEG').val(),
'setting_NEURO' : $('#setting_NEURO').val(),
'setting_IMPPLAN' : $('#setting_IMPPLAN').val(),
};
top.restoreSession();
$.ajax({
type : 'POST',
url : url,
data : formData
});
}
}
/*
* Function to unlock the form - remove temporary lock at DB level.
*/
function unlock() {
var url = "../../forms/eye_mag/save.php?mode=update&id=" + $("#form_id").val();
var formData = {
'action' : "unlock",
'unlock' : "1",
'encounter' : $('#encounter').val(),
'pid' : $('#pid').val(),
'LOCKEDBY' : $('#LOCKEDBY').val(),
'form_id' : $("#form_id").val()
};
top.restoreSession();
$.ajax({
type : 'POST',
url : url,
data : formData }).done(function(o) {
$("#warning").removeClass("nodisplay");
$('#LOCKEDBY').val('');
$('#chart_status').val('off');
});
}
/*
* Function to fax this visit report to someone.
*/
function create_task(to_id,task,to_type) {
$(this).addClass('fa-spin');
var url = "../../forms/eye_mag/taskman.php";
var formData = {
'action' : "make_task",
'from_id' : <?php echo js_escape($providerID); ?>,
'to_id' : to_id,
'pid' : $('#pid').val(),
'doc_type' : task,
'enc' : $('#encounter').val(),
'form_id' : $('#form_id').val()
};
top.restoreSession();
$.ajax({
type : 'POST',
url : url,
data : formData
}).done(function(result) {
//OPTIONS to consider: we could return a status code from the server.
//maybe 1 = no doc, 2= doc made and queued, 3= sent
//maybe this is a checkbox. Check to create the task, uncheck to delete it.
//if the task is completed, checkbox is checked and disabled?
//return doc_id and display it in html for id='status_'+task+'_'+to_type
obj = JSON.parse(result);
if (obj.DOC_link) {
$('#status_'+task+'_'+to_type).html(obj.DOC_link);
}
if (obj.comments) alert(obj.comments);
//maybe change an icon to sent? Think.
});
}
/*
* START OF PMSFH FUNCTIONS
*/
function alter_issue2(issue_number,issue_type,index) {
if (!obj.PMSFH) { refresh_page(); }
if (typeof obj.PMSFH == "undefined") { submit_form(); }
var here = obj.PMSFH[issue_type][index];
window.frames[0].frameElement.contentWindow.newtype(issue_type);
if (issue_type !='SOCH' && issue_type !='FH' && issue_type !='ROS') {
$('iframe').contents().find('#delete_button').removeClass('nodisplay');
} else {
$('iframe').contents().find('#delete_button').addClass('nodisplay');
}
$('iframe').contents().find('#issue').val(issue_number);
if (typeof here !== "undefined") {
$('iframe').contents().find('#form_title' ).val(here.title);
$('iframe').contents().find('#form_diagnosis' ).val(here.diagnosis);
$('iframe').contents().find('#form_begin' ).val(here.begdate);
$('iframe').contents().find('#form_end' ).val(here.enddate);
$('iframe').contents().find('#form_reaction' ).val(here.reaction);
$('iframe').contents().find('#form_referredby' ).val(here.referredby);
$('iframe').contents().find('#form_classification' ).val(here.classification);
$('iframe').contents().find('#form_occur' ).val(here.occurrence);
$('iframe').contents().find('#form_comments' ).val(here.comments);
$('iframe').contents().find('#form_outcome' ).val(here.outcome);
$('iframe').contents().find('#form_destination' ).val(here.destination);
if (here.row_subtype =='eye') {
$('iframe').contents().find('#form_eye_subtype' ).prop("checked","checked");
} else {
$('iframe').contents().find('#form_eye_subtype' ).prop("checked",false);
}
if (here.enddate > '') {
$('iframe').contents().find('#form_active' ).prop("checked",true);
$('iframe').contents().find('#delete_button').addClass("nodisplay");
} else {
$('iframe').contents().find('#form_active' ).prop("checked",false);
}
}
var location = $("#PMH_left").offset().top -55;
$root.animate({scrollTop: location }, "slow");
}
function showArray(arr) {
var tS = new String();
for (var iI in arr) {
tS += "Index "+iI+", Type "+(typeof arr[iI])+", Value "+arr[iI]+"\n";
}
return tS;
}
/*
* Function to delete an issue from server via ajax
* Ajax returns json obj.PMSFH
* Refresh displays (right_panel and QP_PMH panel)
*/
function delete_issue2(issue_number,PMSFH_type) {
$('#form#theform issue').val(issue_number);
$('iframe').contents().find('#issue').val(issue_number);
$('form#theform form_type');
var url = '../../forms/eye_mag/a_issue.php';
var formData = {
'a_issue' : issue_number,
'deletion' : '1',
'PMSFH' : '1'
};
top.restoreSession();
$.ajax({
type : 'POST',
url : url,
data : formData,
success:(function(result) {
populate_PMSFH(result);
})
});
show_QP();
return false;
}
/*
* Function to save the PMSFH array to the server.
* This can be removed in the future - save for now
*/
function submit_PMSFH() {
var url = "../../forms/eye_mag/save.php?PMSFH_save=1&mode=update";
formData = $("[id^=f]").serialize();
var f = document.forms[0];
top.restoreSession();
$.ajax({
type : 'POST',
url : url,
data : formData
}).done(function(result){
f.form_title.value = '';
f.form_diagnosis.value = '';
f.form_begin.value ='';
f.form_end.value ='';
f.form_referredby.value ='';
f.form_reaction.value ='';
f.form_classification.value ='';
f.form_occur.value='';
f.form_comments.value ='';
f.form_outcome.value ='';
f.form_destination.value ='';
f.issue.value ='';
populate_form(result);
});}
/*
* END OF PMSFH FUNCTIONS
*/
/*
* Function to refresh the issues, the panels and the Impression/coding areas.
*/
function refresh_page() {
var url = '../../forms/eye_mag/view.php?display=PMSFH';
var formData = {
'action' : "refresh",
'id' : $('#form_id').val(),
'encounter' : $('#encounter').val(),
'pid' : $('#pid').val(),
'refresh' : 'page'
};
top.restoreSession();
$.ajax({
type : 'POST',
url : url,
data : formData,
success:(function(result) {
populate_form(result);
})
});
//Make the height of the panels equal if they grow really large
if ($('#PMH_right').height() > $('#PMH_left').height()) {
$('#PMH_left').height($('#PMH_right').height());
} else { $('#PMH_left').height($('#PMH_right').height()); }
return false;
}
/*
* Function to refresh the Glaucoma Flow Sheet.
*/
function refresh_GFS() {
if (typeof config_byday == "undefined") { return; }
var indexToUpdate = '0';
$.each(config_byday.data.labels, function(key,value) {
if (value == visit_date) {
indexToUpdate = key;
}
});
//var indexToUpdate = config_byday.data.labels.length-1;
var ODIOP=0;
var OSIOP=0;
if ( $('#ODIOPAP').val()) {
ODIOP = $('#ODIOPAP').val();
} else if ( $('#ODIOPTPN').val()) {
ODIOP = $('#ODIOPTPN').val();
}
if ( $('#OSIOPAP').val() >'0') {
OSIOP = $('#OSIOPAP').val();
} else if ( $('#OSIOPTPN').val() > '0') {
OSIOP = $('#OSIOPTPN').val();
}
config_byday.data.datasets[0].data[indexToUpdate] = $('#ODIOPTARGET').val();
config_byday.data.datasets[1].data[indexToUpdate] = ODIOP;
config_byday.data.datasets[2].data[indexToUpdate] = OSIOP;
myLine.update();
var time = $('#IOPTIME').val();
times = time.match(/^(\d{1,2}):(\d{2})/);
if (times[1] < 10) times[1] = "0"+''+times[1];
time = times[1]+':'+times[2];
var indexToUpdate2 = '0';
$.each(config_byhour.data.labels, function(key,value) {
if (value == time) {
indexToUpdate2 = key;
}
});
config_byhour.data.datasets[0].data[indexToUpdate2] = ODIOP;
config_byhour.data.datasets[1].data[indexToUpdate2] = OSIOP;
myLine2.update();
// Update one of the points in the second dataset
// myLine.data.datasets[1].data[indexToUpdate].val($('#ODIOPAP').val());
//alert(config_byday.data.datasets[1].data[indexToUpdate].val()+' is ending _bydat val');
//myLine.update();
//ctx2.update();
return;
/*
this should refresh locally and not go back to the server
the only things that would trigger a refresh are
a change in IOP
change in IOPTARGET
change in Eye Meds
change in GONIO fields
additional tests (VF/OCT) would not affect this in its live format
*/
}
function populate_GFS(result) {
$("#LayerVision_IOP").html(result);
}
/*
* Server returns a json encoding object: obj to update the page
* Here we refresh the PMSFH display panels,
* Rebuild the Impression/Plan Builder DX lists,
* the Impression Plan area
* and the CHRONIC fields.
*/
function populate_form(result) {
obj = JSON.parse(result);
$("#QP_PMH").html(obj.PMH_panel);
if ($('#PMH_right').height() > $('#PMH_left').height()) {
$('#PMH_left').height($('#PMH_right').height());
} else { $('#PMH_left').height($('#PMH_right').height()); }
$("#right_panel_refresh").html(obj.right_panel);
build_IMPPLAN(obj.IMPPLAN_items);
build_Chronics(obj);
build_DX_list(obj); //build the list of DXs to show in the Impression/Plan Builder
}
/*
* Function to auto-fill CHRONIC fields
* To reach a detailed E&M level of documentation the chart
* may comment on the status of 3 or more CHRONIC/Inactive problems.
* The user can type them into the CHRONIC fields manually, or
* we can do it programatically if the user does the following:
* 1. documenting a PMH diagnosis in the PMSFH area
* 2. listing it as "Chronic"
* 3. making a comment about it
* With these three steps completed, this build_CHRONIC function displays the changes
* in the CHRONIC1-3 textareas, if not already filled in, for today's visit.
* On subsequent visits, the CHRONIC1-3 fields are blank, unless the above steps
* were performed previously, then they are filled in automatically on loading of the new form.
*/
function build_Chronics(obj) {
if (typeof obj.PMSFH === "undefined") return;
var CHRONICS = obj.PMSFH['CHRONIC'];
var chronic_value;
var local_comment;
var here_already;
$.each(CHRONICS, function(key, value) {
local_comment = CHRONICS[key].title+" "+CHRONICS[key].diagnosis+"\n"+CHRONICS[key].comments;
here_already ='0';
for (i=1; i < 4; i++) {
chronic_value = $('#CHRONIC'+i).val();
if (chronic_value == local_comment) {
here_already='1'; //this is here, move to next CHRONICS
break;
}
}
if (here_already !='1') {
for (i=1; i < 4; i++) {
chronic_value = $('#CHRONIC'+i).val();
if (chronic_value == '') { //if the CHRONIC1-3 field is empty, fill it.
$('textarea#CHRONIC'+i).val(local_comment);
break;
}
}
}
});
return false;
}
/*
* Function to autocreate a PDF of this form as a document linked to this encounter.
* Each time it is runs it updates by replacing the encounter's PDF.
* This used to be fired often, but it is a server resource beast.
* Use it sparingly, and intentionally only.
* Currently only invoked via the bootstrap menu: Menu->File->Print/Store PDF
*/
function store_PDF() {
var url = "../../forms/eye_mag/save.php?mode=update";
var formData = {
'action' : 'store_PDF',
'patient_id' : $('#pid').val(),
'pdf' : '1',
'printable' : '1',
'form_folder' : $('#form_folder').val(),
'form_id' : $('#form_id').val(),
'encounter' : $('#encounter').val(),
'uniqueID' : $('#uniqueID').val()
};
top.restoreSession();
$.ajax({
type : 'POST',
url : url,
data : formData
});
}
/* START Functions related to form VIEW */
/*
* Function to blow out the form and display the right side of every section.
*/
function show_right() {
$("#HPI_1").removeClass("size50").addClass("size100");
$("#PMH_1").removeClass("size50").addClass("size100");
$("#EXT_1").removeClass("size50").addClass("size100");
$("#ANTSEG_1").removeClass("size50").addClass("size100");
$("#NEURO_1").removeClass("size50").addClass("size100");
$("#POSTSEG_1").removeClass("size50").addClass("size100");
$("#IMPPLAN_1").removeClass("size50").addClass("size100");
$("#HPI_right").removeClass('nodisplay');
$("#PMH_right").removeClass('nodisplay');
$("#EXT_right").removeClass('nodisplay');
$("#ANTSEG_right").removeClass('nodisplay');
$("#NEURO_right").removeClass('nodisplay');
$("#RETINA_right").removeClass('nodisplay');
$("#IMPPLAN_right").removeClass('nodisplay');
$("#PMH_1").addClass("clear_both");
$("#ANTSEG_1").addClass("clear_both");
$("#POSTSEG_1").addClass("clear_both");
$("#NEURO_1").addClass("clear_both");
$("#IMPPLAN_1").addClass("clear_both");
hide_PRIORS();
}
/*
* Function to implode the form and hide the right side of every section.
*/
function hide_right() {
$("#HPI_1").removeClass("size100").addClass("size50");
$("#PMH_1").removeClass("size100").addClass("size50");
$("#EXT_1").removeClass("size100").addClass("size50");
$("#ANTSEG_1").removeClass("size100").addClass("size50");
$("#NEURO_1").removeClass("size100").addClass("size50");
$("#RETINA_1").removeClass("size100").addClass("size50");
$("#IMPPLAN_1").removeClass("size100").addClass("size50");
$("#HPI_right").addClass('nodisplay');
$("#PMH_right").addClass('nodisplay');
$("#EXT_right").addClass('nodisplay');
$("#ANTSEG_right").addClass('nodisplay');
$("#NEURO_right").addClass('nodisplay');
$("#RETINA_right").addClass('nodisplay');
$("#PMH_1").removeClass("clear_both");
$("#ANTSEG_1").removeClass("clear_both");
$("#POSTSEG_1").removeClass("clear_both");
$("#NEURO_1").removeClass("clear_both");
update_PREFS();
}
/*
* Function to explode the form and show the left side of every section.
*/
function show_left() {
$("#HPI_1").removeClass("size100").addClass("size50");
$("#PMH_1").removeClass("size100").addClass("size50");
$("#EXT_1").removeClass("size100").addClass("size50");
$("#ANTSEG_1").removeClass("size100").addClass("size50");
$("#NEURO_1").removeClass("size100").addClass("size50");
$("#POSTSEG_1").removeClass("size100").addClass("size50");
$("#IMPPLAN_1").removeClass("size100").addClass("size50");
$("#HPI_left").removeClass('nodisplay');
$("#PMH_left").removeClass('nodisplay');
$("#EXT_left").removeClass('nodisplay');
$("#ANTSEG_left").removeClass('nodisplay');
$("#RETINA_left").removeClass('nodisplay');
$("#NEURO_left").removeClass('nodisplay');
$("#IMPPLAN_left").removeClass('nodisplay');
$("[name$='_left']").removeClass('nodisplay');
}
/*
* Function to implode the form and hide the left side of every section.
*/
function hide_left() {
$("#HPI_1").removeClass("size100").addClass("size50");
$("#PMH_1").removeClass("size100").addClass("size50");
$("#EXT_1").removeClass("size100").addClass("size50");
$("#ANTSEG_1").removeClass("size100").addClass("size50");
$("#NEURO_1").removeClass("size100").addClass("size50");
$("#POSTSEG_1").removeClass("size100").addClass("size50");
$("#IMPPLAN_1").removeClass("size100").addClass("size50");
$("#HPI_left").addClass('nodisplay');
$("#PMH_left").addClass('nodisplay');
$("#EXT_left").addClass('nodisplay');
$("#ANTSEG_left").addClass('nodisplay');
$("#RETINA_left").addClass('nodisplay');
$("#NEURO_left").addClass('nodisplay');
$("#IMPPLAN_left").addClass('nodisplay');
$("[name $='_left']").addClass('nodisplay');
}
/*
* Function to display only the DRAW panels of every section.
* The technical section, between HPI and Clinical section is still visible.
*/
function show_DRAW() {
hide_QP();
hide_TEXT();
hide_PRIORS();
hide_left();
hide_KB();
show_right();
$("#HPI_right").addClass('canvas');
$("#PMH_right").addClass('canvas');
$("#EXT_right").addClass('canvas');
$("#ANTSEG_right").addClass('canvas');
$("#RETINA_right").addClass('canvas');
$("#NEURO_right").addClass('canvas');
$("#IMPPLAN_right").addClass('canvas');
$(".Draw_class").removeClass('nodisplay');
if ($("#PREFS_CLINICAL").val() !='1') {
$("#PREFS_CLINICAL").val('1');
$("#PREFS_EXAM").val('DRAW');
}
update_PREFS();
}
/*
* Function to display only the TEXT panels in every section.
*/
function show_TEXT() {
$(".TEXT_class").removeClass('nodisplay');
show_left();
hide_right(); //this hides the right half
hide_QP();
hide_DRAW();
hide_PRIORS();
if ($("#PREFS_CLINICAL").val() !='1') {
// we want to show text_only which are found on left half
$("#PREFS_CLINICAL").val('1');
}
$("#PREFS_EXAM").val('TEXT');
$("#IMPPLAN_right").addClass('canvas').removeClass('nodisplay');
$("#QP_IMPPLAN").removeClass('nodisplay');
$("#DRAW_"+zone).addClass('nodisplay');
$("#IMPPLAN_left").removeClass('nodisplay');
$("#PREFS_IMPPLAN_RIGHT").val('QP');
update_PREFS();
}
/*
* Function to display the PRIORS panels in every right section.
*/
function show_PRIORS() {
$("#NEURO_sections").removeClass('nodisplay');
hide_DRAW();
$("#EXT_right").addClass("PRIORS_color");
show_TEXT();
show_right();
hide_QP();
$("#QP_HPI").removeClass('nodisplay');
$("#QP_PMH").removeClass('nodisplay');
$("#HPI_right").addClass('canvas');
$("#PMH_right").addClass('canvas');
$("#IMPPLAN_right").addClass('canvas');
$("#EXT_right").addClass('canvas');
$("#ANTSEG_right").addClass('canvas');
$("#RETINA_right").addClass('canvas');
$("#NEURO_right").addClass('canvas');
$(".PRIORS_class").removeClass('nodisplay');
if ($("#PREFS_CLINICAL").val() !='1') {
// we want to show text_only which are found on left half now that PRIORS are visible.
$("#PREFS_CLINICAL").val('1');
}
$("#PREFS_EXAM").val('PRIORS');
update_PREFS();
}
/*
* Function to show the Quick Picks panel on the right side of every section.
*/
function show_QP() {
hide_DRAW();
hide_PRIORS();
hide_KB();
show_TEXT();
show_right();
show_left();
$("#HPI_right").addClass('canvas');
$("#PMH_right").addClass('canvas');
$("#EXT_right").addClass('canvas');
$("#ANTSEG_right").addClass('canvas');
$("#RETINA_right").addClass('canvas');
$("#NEURO_right").addClass('canvas');
$("#IMPPLAN_right").addClass('canvas');
$(".QP_class").removeClass('nodisplay');
$(".QP_class2").removeClass('nodisplay');
$("#PREFS_EXAM").val('QP');
update_PREFS();
}
/*
* Function to display only one DRAW panel of one section.
*/
function show_DRAW_section(zone) {
$("#QP_"+zone).addClass('nodisplay');
$("#"+zone+"_left").removeClass('nodisplay');
$("#"+zone+"_right").addClass('canvas').removeClass('nodisplay');
$("#Draw_"+zone).addClass('canvas');
$("#Draw_"+zone).removeClass('nodisplay');
$("#PREFS_"+zone+"_DRAW").val(1);
update_PREFS();
}
/*
* Function to display only one PRIORS panel of one section.
*/
function show_PRIORS_section(section,newValue) {
var url = "../../forms/eye_mag/save.php?mode=retrieve";
var formData = {
'PRIORS_query' : "1",
'zone' : section,
'id_to_show' : newValue,
'pid' : $('#pid').val(),
'orig_id' : $('#form_id').val()
}
top.restoreSession();
$.ajax({
type : 'POST',
url : url,
data : formData,
success : function(result) {
$("#PRIORS_" + section + "_left_text").html(result);
}
});
}
/**
* Function to display a canvas/drawing from a prior visit.
*/
function show_PRIOR_CANVAS_section(section, newValue) {
var pid = $('#pid').val();
var zone = section;
var result = base+'/controller.php?document&retrieve&patient_id='+pid+'&document_id='+newValue+'&as_file=false';
var cp_forward = '<button onclick="replace_CANVAS(\''+zone+'\',\''+result+'\'); return false;" id="Replace_Canvas_ANTSEG" class="ui-button ui-corner-all ui-widget"><?php echo xlt('Use this image'); ?></button>';
var filler = "<div class='tools text-info'><?php echo xlt('Previous Encounter Drawings'); ?>: "+cp_forward+"</div><div class='borderShadow'><img src='"+result+"' alt='<?php echo xla("Loading prior image");?>...'></div>";
$("#"+zone+"_canvas").addClass('nodisplay');
$("#"+zone+"_olddrawing").html(filler);
$("#"+zone+"_olddrawing").removeClass('nodisplay');
}
function replace_CANVAS(zone, url) {
$("#url_"+zone).val(url);
cReplace(zone);
$("#SELECT_CANVAS_"+zone).val('current');
$("#"+zone+"_canvas").removeClass('nodisplay');
$("#"+zone+"_olddrawing").addClass('nodisplay');
}
/**
* Function to show one of the Quick Picks section on the right side of its section.
*/
function show_QP_section(zone,scroll) {
$("#"+zone+"_right").addClass('canvas').removeClass('nodisplay');
$("#QP_"+zone).removeClass('nodisplay');
$("#DRAW_"+zone).addClass('nodisplay');
$("#"+zone+"_left").removeClass('nodisplay');
$("#PREFS_"+zone+"_RIGHT").val('QP');
if (!scroll) {
scroll = zone;
scrollTo(zone+"_left");
}
}
/*
* Function to hide all the DRAW panels of every section.
*/
function hide_DRAW() {
$(".Draw_class").addClass('nodisplay');
hide_right();
$("#LayerTechnical_sections").removeClass('nodisplay');
$("#REFRACTION_sections").removeClass('nodisplay');
$("#PMH_sections").removeClass('nodisplay');
$("#HPI_right").addClass('nodisplay');
$("#HPI_right").removeClass('canvas');
$("#EXT_right").removeClass('canvas');
$("#RETINA_right").removeClass('canvas');
$("#ANTSEG_right").removeClass('canvas');
}
/*
* Function to hide all the Quick Pick panels of every section.
*/
function hide_QP() {
$(".QP_class").addClass('nodisplay');
$(".QP_class2").addClass('nodisplay');
$("[name$='_right']").removeClass('canvas');
}
/*
* Function to hide all the TEXT panels of every section.
*/
function hide_TEXT() {
$(".TEXT_class").addClass('nodisplay');
}
/*
* Function to hide all the PIORS panels of every section.
*/
function hide_PRIORS() {
$("#EXT_right").removeClass("PRIORS_color");
$("#PRIORS_EXT_left_text").addClass('nodisplay');
$("#PRIORS_ANTSEG_left_text").addClass('nodisplay');
$("#PRIORS_RETINA_left_text").addClass('nodisplay');
$("#PRIORS_NEURO_left_text").addClass('nodisplay');
$(".PRIORS_class").addClass('nodisplay');
}
/*
* Function to hide Shorthand/Keyboard Entry panel.
*/
function hide_KB() {
$('.kb').addClass('nodisplay');
$('.kb_off').removeClass('nodisplay');
if ($("#PREFS_KB").val() > 0) {
$("#PREFS_KB").val('0');
}
}
/*
* Function to show the Shorthand/Keyboard panel.
*/
function show_KB() {
$('.kb').toggleClass('nodisplay');
$('.kb_off').toggleClass('nodisplay');
$('.copier').toggleClass('nodisplay');
if ($('#PREFS_EXAM').val() == 'DRAW') {
show_TEXT();
}
if ($("#PREFS_KB").val() > 0) {
$("#PREFS_KB").val('0');
} else {
$("#PREFS_KB").val('1');
}
update_PREFS();
}
function editScripts(url) {
var pid = $('#pid').val();
var AddScript = function () {
var iam = top.frames.editScripts;
iam.location.href = base + "/controller.php?prescription&edit&id=&pid="+encodeURIComponent(pid)
};
var ListScripts = function () {
var iam = top.frames.editScripts;
iam.location.href = base + "/controller.php?prescription&list&id="+encodeURIComponent(pid)
};
let title = 'Prescriptions';
let w = 810;
w = 910;
dlgopen(url, 'editScripts', w, 300, '', '', {
buttons: [
{text: 'Add', close: false, style: 'primary btn-sm', click: AddScript},
{text: 'List', close: false, style: 'primary btn-sm', click: ListScripts},
{text: 'Done', close: true, style: 'default btn-sm'}
],
onClosed: 'refreshme',
allowResize: true,
allowDrag: true,
dialogId: 'editscripts',
type: 'iframe'
});
}
/* END Functions related to form VIEW */
/*
* Function contains menu commands specific to this form.
*/
function menu_select(zone) {
$("#menu_"+zone).addClass('active');
if (zone =='PREFERENCES') {
window.parent.RTop.document.location.href = base+"interface/super/edit_globals.php";
var url = base+"/interface/super/edit_globals.php";
var formData = {
'id' : $('#id').val(),
'encounter' : $('#encounter').val(),
'pid' : $('#pid').val(),
};
top.restoreSession();
$.ajax({
type : 'GET',
url : url,
data : formData,
success : function(result) {
window.parent.RTop.document.result;
}
});
}
if (zone =='Left_Panel') $("#left-panel-link").trigger('click');
if (zone =='Right_Panel') $("#right-panel-link").trigger('click');
if (zone =='PRIORS') $("#PRIORS_ALL_minus_one").trigger("click");
if (zone =='QP') show_QP();
if (zone =='KB') show_KB();
if (zone =='DRAW') show_DRAW();
if (zone =='TEXT') show_TEXT();
if (zone =='IOP_graph') $("#LayerVision_IOP_lightswitch").trigger('click');
if (zone == "HPI") scrollTo("HPI_left");
if (zone == "PMH") scrollTo("PMH_left");
if (zone == "EXT") scrollTo("EXT_left");
if (zone == "ANTSEG") scrollTo("ANTSEG_left");
if (zone == "POSTSEG") scrollTo("RETINA_left");
if (zone == "NEURO") scrollTo("NEURO_left");
if (zone == "IMPPLAN") scrollTo("IMPPLAN_left");
}
/*
* Function to test blowing up any section to fullscren - towards tablet functionality?
* Currently not used.
*/
function show_Section(section) {
//hide everything, show the section. For fullscreen perhaps Tablet view per section
show_right();
$("div[name='_sections']").style.display= "none"; //
$('#'+section+'_sections').style.display= "block";
//.show().appendTo('form_container');
}
/*
* Function to display Chief Complaint 1-3
*/
function show_CC(CC_X) {
$("[name^='CC_']").addClass('nodisplay');
$("#CC_"+CC_X).removeClass('nodisplay');
$("#CC_"+CC_X).index;
}
/* START Functions related to CODING */
/*
* Function to determine if add on NeuroSensory(92060) code can be billed.
*/
function check_CPT_92060() {
var neuro1='';
var neuro2 ='';
if ($("#STEREOPSIS").val() > '') (neuro1="1");
$(".neurosens2").each(function(index) {
if ($( this ).val() > '') {
neuro2="1";
}
});
if (neuro1 && neuro2){
$("#neurosens_code").removeClass('nodisplay');
CPT_92060 = 'here';
} else {
$("#neurosens_code").addClass('nodisplay');
CPT_92060 = '';
}
}
/*
* Function to check documentation level for coding purposes
* And make suggestions to end user.
*/
function check_exam_detail() {
detail_reached_HPI='0';
chronic_reached_HPI='0';
$(".count_HPI").each(function(index) {
if ($( this ).val() > '') detail_reached_HPI++;
});
if (detail_reached_HPI > '3') {
$(".detail_4_elements").css("color","red");
$(".CODE_LOW").addClass("nodisplay");
$(".CODE_HIGH").removeClass("nodisplay");
$(".detailed_HPI").css("color","red");
} else {
$(".detail_4_elements").css("color","#876F6F");
}
$(".chronic_HPI").each(function(index) {
if ($( this ).val() > '') chronic_reached_HPI++;
});
if (chronic_reached_HPI > '2') {
$(".chronic_3_elements").css("color","red");
$(".CODE_LOW").addClass("nodisplay");
$(".CODE_HIGH").removeClass("nodisplay");
$(".detailed_HPI").css("color","red");
} else {
$(".chronic_3_elements").css("color","#876F6F");
}
if ((chronic_reached_HPI > '2')||(detail_reached_HPI > '3')) {
$(".CODE_LOW").addClass("nodisplay");
$(".CODE_HIGH").removeClass("nodisplay");
$(".detailed_HPI").css("color","red");
detail_reached_HPI = '1';
} else {
$(".CODE_LOW").removeClass("nodisplay");
$(".CODE_HIGH").addClass("nodisplay");
$(".detailed_HPI").css("color","#876F6F");
detail_reached_HPI = '0';
}
if ((($("#DIL_RISKS").is(':checked')) || ($(".dil_drug").is(':checked'))) && (($('#ODPERIPH').val() >'') || ($('#OSPERIPH').val() >''))) {
$(".EXAM_LOW").addClass("nodisplay");
$(".DIL_RISKS").removeClass("nodisplay");
$("#DIL_RISKS").prop("checked","checked");
detail_reached_exam = '1';
} else {
$(".EXAM_LOW").removeClass("nodisplay");
$(".DIL_RISKS").addClass("nodisplay");
detail_reached_exam = '0';
}
Suggest_visit_code();
}
/* END Functions related to CODING */
/* START Functions related to IMPPLAN Builder */
/*
* Function to update the list of Dxs available for Impression/Plan and Coding(?).
* Will use actual list from obj.IMPPLAN_items for coding.
* After a new DX is added via PMSFH (or other ways), it updates the sortable and draggable list of DXs
* available to build the Impression/Plan from.
*/
function build_DX_list(obj) {
var out = "";
var diagnosis;
$( "#build_DX_list" ).empty();
//add in inc_FIELDCODES culled from the datafields
if (typeof obj.PMSFH === "undefined") return;
if (typeof obj.Clinical === "undefined") submit_form('obj.clinical is undefined');
if (!obj.PMSFH['POH'] && !obj.PMSFH['PMH'] && !obj.Clinical) {
out = '<br /><span class="bold">The Past Ocular History (POH) and Past Medical History (PMH) are negative and no diagnosis was auto-generated from the clinical findings.</span><br /><br />Update the chart to activate the Builder.<br />';
$( "#build_DX_list" ).html(out);
return;
}
build_IMPPLAN(obj.IMPPLAN_items);
if ($('#inc_PE').is(':checked') && obj.Clinical) {
$.each(obj.Clinical, function(key, value) {
diagnosis='';
if (obj.Clinical[key][0].diagnosis > '') { //so we are just showing this first item of each Dx (Eg bilateral, x4 pterygium, only first shows up)
diagnosis = "<code class='float-right ICD_CODE'>"+obj.Clinical[key][0].code+"</code>";
}
out += "<li class='ui-widget-content'><span name='DX_Clinical_"+key+"' id='DX_Clinical_"+key+"'>"+obj.Clinical[key][0].title+"</span> "+diagnosis+"</li> ";
});
}
if ($('#inc_POH').is(':checked') && (obj.PMSFH['POH']||obj.PMSFH['POS'])) {
$.each(obj.PMSFH['POH'], function(key, value) {
diagnosis='';
if (obj.PMSFH['POH'][key].diagnosis > '' ) {
diagnosis = "<code class='float-right ICD_CODE'>"+obj.PMSFH['POH'][key].code+"</code>";
}
out += "<li class='ui-widget-content'><span name='DX_POH_"+key+"' id='DX_POH_"+key+"'>"+obj.PMSFH['POH'][key].title+"</span> "+diagnosis+"</li>";
});
$.each(obj.PMSFH['POS'], function(key, value) {
diagnosis='';
if (obj.PMSFH['POS'][key].diagnosis > '' ) {
diagnosis = "<code class='float-right ICD_CODE'>"+obj.PMSFH['POS'][key].code+"</code>";
}
out += "<li class='ui-widget-content'><span name='DX_POS_"+key+"' id='DX_POS_"+key+"'>"+obj.PMSFH['POS'][key].title+"</span> "+diagnosis+"</li>";
});
}
if ($('#inc_PMH').is(':checked') && obj.PMSFH['PMH']) {
$.each(obj.PMSFH['PMH'], function(key, value) {
diagnosis='';
if (obj.PMSFH['PMH'][key].diagnosis > '') {
diagnosis = "<code class='float-right ICD_CODE'>"+obj.PMSFH['PMH'][key].code+"</code>";
}
out += "<li class='ui-widget-content'><span name='DX_PMH_"+key+"' id='DX_PMH_"+key+"'>"+obj.PMSFH['PMH'][key].title+"</span>"+diagnosis+"</li> ";
});
}
//add in inc_FIELDCODES culled from the datafields
if (out !="") {
rebuild_IMP($( "#build_DX_list" ));
$( "#build_DX_list" )
.html(out).sortable({ handle: ".handle",stop: function(event, ui){ rebuild_IMP($( "#build_DX_list" )) } })
.selectable({ filter: "li", cancel: ".handle",stop: function(event, ui){ rebuild_IMP($( "#build_DX_list" )) } })
.find( "li" )
.addClass( "ui-corner-all ui-selected" )
.dblclick(function(){
rebuild_IMP($( "#build_DX_list" ));
$('#make_new_IMP').trigger('click'); //any items selected are sent to IMPPLAN directly.
})
//this places the handle for the user to drag the item around.
.prepend( "<div class='handle '><i class='fas fa-arrows-alt fa-1'></i></div>" );
} else {
out = '<br /><span class="bold"><?php echo xlt("Build Your Plan") . "."; ?></span><br /><br />';
out += '<?php echo xlt('Suggestions for the Imp/Plan are built from the Exam, the Past Ocular History (POH and POS) and the Past Medical History (PMH)') . "."; ?><br />';
out += '<?php echo xlt('Update the chart to build this list') . "."; ?><br />';
$( "#build_DX_list" ).html(out);
}
}
/**
* Function: After the Builder DX list is built from all the available options,
* the end user can select to use only certain Dxs and change their sort order of importance.
* This function builds the list of DXs selected and in the order as the user sorted them,
* so we know what to use to build the Impression/Plan area and in what order to display them.
*/
function rebuild_IMP(obj2) {
var surface;
IMP_order=[];
k='0';
$( ".ui-selected", obj2 ).each(function() {
var index = $( "#build_DX_list li" ).index( this );
if ($('#build_DX_list li span')[index].id.match(/DX_POH_(.*)/)) {
surface = 'POH_' + $( "#build_DX_list li span" )[index].id.match(/DX_POH_(.*)/)[1];
IMP_order[k] = surface;
}else if ($('#build_DX_list li span')[index].id.match(/DX_POS_(.*)/)) {
surface = 'POS_' + $( "#build_DX_list li span" )[index].id.match(/DX_POS_(.*)/)[1];
IMP_order[k] = surface;
} else if ($('#build_DX_list li span')[index].id.match(/DX_PMH_(.*)/)) {
surface = 'PMH_' + $( "#build_DX_list li span" )[index].id.match(/DX_PMH_(.*)/)[1];
IMP_order[k] = surface;
} else if ($('#build_DX_list li span')[index].id.match(/DX_Clinical_(.*)/)) {
surface = 'CLINICAL_' + $( "#build_DX_list li span" )[index].id.match(/DX_Clinical_(.*)/)[1];
IMP_order[k] = surface;
}
k++;
});
}
/*
* This function builds the Impression/Plan area using the object supplied: items
* It appends "items" into the Impression Plan area, complete with:
* contenteditable Titles (the Impression),
* its code (if part of the item object),
* Plan textareas (autofilled with the item/object's "comment")
* for each member of "items".
* Duplicates are removed by server.
*/
function build_IMPPLAN(items,nodisplay) {
var contents_here;
if (typeof nodisplay == "undefined") {
$('#IMPPLAN_zone').html("");
}
$('#Coding_DX_Codes').html("");
$('#visit_justification').html("");
if ((items == null) || ( (typeof items == "undefined") || (items.length =='0') ) ) {
items = [];
$('#IMPPLAN_text').removeClass('nodisplay'); //Display Builder instructions for starting out
$('#IMPPLAN_zone').addClass('nodisplay');
} else {
//ok we have at least one item, display them in order; hide the Builder instructions
$('#IMPPLAN_text').addClass('nodisplay');
$('#IMPPLAN_zone').removeClass('nodisplay');
count_dx=0;
visit_justifier =[];
$.each(items, function( index, value ) {
if (!value.codetext) value.codetext="";
if (!value.code) value.code="";
if ((value.code==="") || (value.code.match(/Code/) || (value.code==null))) {
value.code="<i class='fa fa-search-plus'></i>&nbsp;Code";
} else {
count_dx++;
if (value.code.match(/\,/g)) {
// If there is a comma in there, there is more than one code present for this item. Split them out.
// If code is manually changed or copied from a prior visit - item will not have a PMSFH_link
// PMSFH_link is only present when the Builder was used to make the entry.
// So if there is no PMSFH_link and it is not generated from a clinical field:
if ( ((typeof value.PMSFH_link !== "undefined") || (value.PMSFH_link !== null)) && (!value.PMSFH_link.match(/Clinical_(.*)/)) ) {
//The Title should have the description.
var CodeArr = value.code.split(",");
var TitleArr = value.codedesc.split("\r");//I don't see a second codedesc being adding in for this yet...
for (i=0;i < CodeArr.length;i++) {
if (CodeArr.length == (TitleArr.length-1)) { //there is a trailing \r but second codedesc should have "\r" also
$('#Coding_DX_Codes').append(count_dx +'. '+CodeArr[i]+': '+TitleArr[i]+'<br />');
justify_btn = '<span class="modifier status_on" name="visit_justifier" id="visit_just_'+count_dx+'" value="" data-justcode="'+value.codetype+'|'+value.code+'" title="'+value.codedesc+'">'+count_dx+'</span>';
$('#visit_justification').append(justify_btn);
visit_justifier.push(value.codetype+'|'+value.code[i]);
} else {
//just look it up via ajax or tell them to code it manually on the feesheet ;).
$('#Coding_DX_Codes').append(CodeArr[i]+': <?php echo xlt('Manually retrieve description on Fee Sheet'); ?> <br />');
var justify_btn = '<span class="modifier status_on" id="visit_just_'+count_dx+'" name="visit_justifier" value="" data-justcode="'+value.codetype+'|'+value.code+'" title="'+value.codedesc+'">'+count_dx+'</span>';
$('#visit_justification').append(justify_btn);
visit_justifier.push(value.codetype+'|'+value.code);
}
count_dx++;
}
} else {
// So there IS a PMSFH_link or it was generated from a clinical field:
//this works for Clinical-derived terms with more than one Dx Code (found in more than one location/field)
if (value.PMSFH_link.match(/Clinical_(.*)/)) {
if (typeof obj.Clinical !== "undefined") {
var location = value.PMSFH_link.match(/Clinical_(.*)/)[1];
if (obj.Clinical[location]!=null ) {
for (i=0; i < obj.Clinical[location].length; i++) {
$('#Coding_DX_Codes').append(count_dx +'. '+obj.Clinical[location][i].code+': '+obj.Clinical[location][i].codedesc+'<br />');
justify_btn = '<span class="modifier status_on" id="visit_just_'+count_dx+'" name="visit_justifier" value="" data-justcode="'+obj.Clinical[location][i].codetype+'|'+obj.Clinical[location][i].code+'" title="'+obj.Clinical[location][i].codedesc+'">'+count_dx+'</span>';
count_dx++;
$('#visit_justification').append(justify_btn);
visit_justifier.push(obj.Clinical[location][i].codetype+'|'+obj.Clinical[location][i].code);
}
}
}
}
}
} else { //all is good, one code only
$('#Coding_DX_Codes').append(count_dx +'. '+value.code+': '+value.codedesc+'<br />');
justify_btn = ' <span class="modifier status_on" id="visit_just_'+count_dx+'" name="visit_justifier" data-justcode="'+value.codetype+'|'+value.code+'" title="'+value.codedesc+'">'+count_dx+'</span> ';
$('#visit_justification').append(justify_btn);
//we assume the visit code will use this as a justification in billing so activate that link now.
visit_justifier.push(value.codetype+'|'+value.code);
}
}
if (typeof nodisplay !== "undefined") {
return;
}
var title2 = value.title.replace(/(\')/g, '');
contents_here = "<span class='bold' contenteditable title='<?php echo xla('Click to edit'); ?>' id='IMPRESSION_"+index+"'>" +
value.title +"</span>"+
" <span contenteditable class='float-right' onclick='sel_diagnosis("+index+",\""+title2+"\");' title='"+value.codetext+"' id='CODE_"+index+"'>"+
value.code + "</span>"+
"<br /><textarea id='PLAN_"+index+"' name='PLAN_"+index+
"' style='width:100%;max-width:100%;height:auto;min-height:3em;overflow-y: hidden;padding-top: 1.1em; '>"+
value.plan +"</textarea><br /></li>";
$('#IMPPLAN_zone').append('<div id="IMPPLAN_zone_'+index+'" class="IMPPLAN_class">'+
'<i class="float-right fa fa-times" id="BUTTON_IMPPLAN_'+index+'"></i>'+
contents_here+'</div>');
$('#BUTTON_IMPPLAN_'+index).on('click', function() {//delete/close icon
var item = this.id.match(/BUTTON_IMPPLAN_(.*)/)[1];
obj.IMPPLAN_items.splice(item,1);
build_IMPPLAN(obj.IMPPLAN_items);
store_IMPPLAN(obj.IMPPLAN_items,'1');
});
$('#PLAN_'+index).css("background-color","#F0F8FF");
});
//end each
//now attach visit_justifier(s) to each TEST
//If the TEST_justifiers were ever touched AND
$.each($(".TESTS_justify"), function( index, value) {
$( this ).html('');
var herenow = $("#TEST_"+index+"_justify");
for (var i = 0, length = visit_justifier.length; i < length; i++) {
item2 = visit_justifier[i];
status ='';
for (var j=0;j< CODING_items.length; j++) {
if (CODING_items[j].justify == item2) {
status="status_on";
}
}
//if item2 is in CODING_items, it will have class=status_on and we need modifier 25, maybe 59 if there are two or more?
justify_btn = '&nbsp;<span class="modifier '+status+'" id="TEST_'+index+'_just_'+i+'" name="TEST_'+index+'_justifiers" value="" data-justcode="'+item2+'" title="'+item2+'">'+(i+1)+'</span>';
herenow.append(justify_btn);
}
});
// The IMPRESSION DXs are "contenteditable" spans.
// If the user changes the words in an IMPRESSION Diagnosis area, store it.
$('[id^=IMPRESSION_]').on('blur', function(e) {
e.preventDefault();
var item = this.id.match(/IMPRESSION_(.*)/)[1];
var content = this.innerText || this.innerHTML;
if (pmsfh_here = obj.IMPPLAN_items[item].PMSFH_link.match(/(.*)\_(.*)/)) {
//we are going to change how this appears in PMH too.
var pmsfh_zone = pmsfh_here[1];
var pmsfh_item = pmsfh_here[2];
obj.PMSFH[pmsfh_zone][pmsfh_item].title = content;
alter_issue2(obj.PMSFH[pmsfh_zone][pmsfh_item].issue,pmsfh_zone,pmsfh_item);
}
obj.IMPPLAN_items[item].title = content;
store_IMPPLAN(obj.IMPPLAN_items,'1');
//$(this).css('background-color','#F0F8FF');
return false;
});
$('[id^=CODE_]').on('blur', function() {
var item = this.id.match(/CODE_(.*)/)[1];
var new_code = this.innerText || this.innerHTML;
obj.IMPPLAN_items[item].code = new_code;
//obj.IMPPLAN_items[item].codetext = '';
//obj.IMPPLAN_items[item].codedesc = '';
$(this).css('background-color','#F0F8FF');
store_IMPPLAN(obj.IMPPLAN_items);
});
$('[id^=PLAN_]').on('change', function() {
var item = this.id.match(/PLAN_(.*)/)[1];
obj.IMPPLAN_items[item].plan = $(this).val();
store_IMPPLAN(obj.IMPPLAN_items,'1');
$(this).css('background-color','#F0F8FF');
});
$('#IMPPLAN_zone').on( 'keyup', 'textarea', function (e){
//$(this).css('height', 'auto' );
// $(this).height( this.scrollHeight );
});
$('#IMPPLAN_zone').find( 'textarea' ).keyup();
obj.IMPPLAN_items = items;
}
}
/*
* This functions updates a PMSFH item's code on the server via its issue number
*/
function update_PMSFH_code(the_issue,new_code){
var url = "../../forms/eye_mag/save.php?mode=update";
top.restoreSession();
$.ajax({
type : 'POST',
url : url,
data : {
action : 'code_PMSFH',
pid : $('#pid').val(),
form_id : $('#form_id').val(),
encounter : $('#encounter').val(),
uniqueID : $('#uniqueID').val(),
issue : the_issue,
code : new_code
}
}).done(function(result) {
if (result == 'Code 400') {
code_400(); //the user does not have write privileges!
return;
}
});
}
/*
* This function sends the obj.IMPPLAN_items to the server for storage
*/
function store_IMPPLAN(storage,nodisplay) {
if (typeof storage !== "undefined") {
var url = "../../forms/eye_mag/save.php?mode=update&store_IMPPLAN";
var formData = JSON.stringify(storage);
top.restoreSession();
$.ajax({
type : 'POST',
url : url,
dataType : 'json',
data : {
parameter : formData,
action : 'store_IMPPLAN',
pid : $('#pid').val(),
form_id : $('#form_id').val(),
encounter : $('#encounter').val(),
uniqueID : $('#uniqueID').val()
}
}).done(function(result) {
if (result == "Code 400") {
code_400(); //the user does not have write privileges!
return;
}
obj.IMPPLAN_items = result;
// if (typeof nodisplay === "undefined") {
build_IMPPLAN(obj.IMPPLAN_items,nodisplay);
// }
});
}
}
/*
* This submits any codes we have in the obj.IMPPLAN_items variable, ie. what is in the Impression Plan currently, to the coding engine.
*
*/
function CODING_to_feesheet(CODING_items) {
if (typeof CODING_items !== "undefined") {
var url = "../../forms/eye_mag/save.php?mode=update&track=ThingOne";
var formData = JSON.stringify(CODING_items);
top.restoreSession();
$.ajax({
'type' : 'POST',
'url' : url,
'data' : {
'parameter' : formData,
'action' : 'code_visit',
'pid' : $('#pid').val(),
'form_id' : $('#form_id').val(),
'encounter' : $('#encounter').val(),
'uniqueID' : $('#uniqueID').val()
}
}).done(function(result) {
if (result == "Code 400") {
code_400(); //the user does not have write privileges!
return;
} else {
//$("#goto_fee_sheet").prop('disabled', false);
$("#goto_fee_sheet").removeClass('nodisplay');
}
});
}
}
/*
* This function allows the user to drag a DX from the Impression/Plan Builder list directly onto the Impression Plan list.
* This item is appended to the $('#IMPPLAN_zone').
*/
function dragto_IMPPLAN_zone(event, ui) {
var findme = ui.draggable.find("span").attr("id");
var group = findme.match(/DX_(.*)_(.*)/)[1];
var location = findme.match(/DX_(.*)_(.*)/)[2];
var the_code ='';
var the_codedesc ='';
var the_codetext ='';
var the_plan ='';
if (obj.IMPPLAN_items ==null) obj.IMPPLAN_items = [];
if (group =="Clinical") {
//more than one field can contain this DX.
//Group them into one IMPPLAN.
for (i=0;i < obj.Clinical[location].length; i++) {
the_code += obj.Clinical[location][i]['code']+',';
the_codedesc = obj.Clinical[location][i]['codedesc'];
the_codetext = obj.Clinical[location][i]['codetext'];
the_plan += obj.Clinical[location][i]['codedesc'] + "\r";
}
if (i > 0) the_code = the_code.slice(0, -1);
obj.IMPPLAN_items.push({
code: the_code,
codedesc: the_codedesc,
codetext: the_codetext,
codetype: obj.Clinical[location][0]['codetype'],
plan: the_plan,
PMSFH_link: obj.Clinical[location][0]['PMSFH_link'],
title: obj.Clinical[location][0]['title']
});
} else {
obj.IMPPLAN_items.push({
code: obj.PMSFH[group][location]['code'],
codedesc: obj.PMSFH[group][location]['codedesc'],
codetext: obj.PMSFH[group][location]['codetext'],
codetype: obj.PMSFH[group][location]['codetype'],
plan: obj.PMSFH[group][location]['comments'],
PMSFH_link: obj.PMSFH[group][location]['PMSFH_link'],
title: obj.PMSFH[group][location]['title']
});
}
store_IMPPLAN(obj.IMPPLAN_items); //redisplay the items
}
/*
* This function allows the user to drag a DX from the IMPRESSION list directly into the New Dx field (#IMP) <-- New Dx textarea
* The data is appended to the end of the text.
* It doesn't know what is already there (yet) so numbering if desired must be done manually.
*/
function dragto_IMPPLAN(event, ui) {
var findme = ui.draggable.find("span").attr("id");
var group = findme.match(/DX_(.*)_(.*)/)[1];
var location = findme.match(/DX_(.*)_(.*)/)[2];
var draggable2 = ui.draggable;
if (group =="Clinical") {
$('#IMP').val(ui.draggable[0].textContent+"\n");
} else {
$('#IMP').val(ui.draggable[0].textContent+"\n"+obj.PMSFH[group][location]['comments']);
}
}
/* END Functions related to IMPPLAN Builder */
function Suggest_visit_code() {
//assume Eyes and established patient
(Code_group != 'Eyes') ? (digit_2 = '9') : digit_2 = '2'; //920XX or 990XX
(Code_new_est == 'New') ? (digit_4 = '0') : digit_4 = '1'; //9X01X or 9X00X
if (detail_reached_exam =='1' && (detail_reached_HPI =='1')) {
(Code_group =='Eyes') ? (digit_5 = '4') : (digit_5='3'); //920X4 or 990X3
detailed = "comprehensive";
} else {
digit_5 = '2'; //920X2
detailed = "intermediate";
}
visit_desc = Code_new_est +" "+ detailed +" "+digit_5;
visit_code = "9"+digit_2+"0"+digit_4+digit_5;
$('#visit_codes').val("CPT4|"+visit_code+"|").change();
}
/*
* This function builds the codes and populates the billing table for this encounter.
*/
function build_CODING_list() {
CODING_items =[];
/* the following things get billed:
1. Visit code(s) including neurosensory if performed
2. Tests performed
3. Diagnostic codes
*/
//3. Diagnostic Codes
$.each(obj.IMPPLAN_items, function( index, value ) {
if (value['codetype']) {
if (value['code'].match(/\,/g)) {
// physical finding found in more than one location, more than one code...
// if there is a comma in there, there is more than one code present. Split them out.
// And all those in one group have the same link out (PMSFH_link) value
var location = value.PMSFH_link.match(/Clinical_(.*)/)[1];
for (i=0; i< obj.Clinical[location].length; i++) {
CODING_items.push({
code: obj.Clinical[location][i]['code'],
codedesc: obj.Clinical[location][i]['codedesc'],
codetext: obj.Clinical[location][i]['codetext'],
codetype: obj.Clinical[location][i]['codetype'],
title: obj.Clinical[location][i]['title']
});
}
} else if (value['code'].match(/Code/)){
//ignore
} else {
CODING_items.push({
code: value['code'],
codedesc: value['codedesc'],
codetext: value['codetext'],
codetype: value['codetype'],
title: value['title']
});
}
}
});
//1. Visit Codes. These can have a modifier (22,24,25,57 hard coded so far)
var visit_justify = visit_justifier.join(":");
if (typeof visit_modifier != "object") {
visit_modifiers = [];
} else {
visit_modifiers = visit_modifier.join(":");//
}
CODING_items.push({
code: visit_code,
codedesc: visit_desc,
codetext: '',
codetype: 'CPT4',
title: 'Visit Code',
modifier: visit_modifiers,
justify: visit_justify
});
//neurosensory
if (CPT_92060 == 'here') {
CODING_items.push({
code: '92060',
codedesc: 'Sensorimotor exam',
codetext: 'Sensorimotor exam (CPT4:92060)',
codetype: 'CPT4',
title: 'Neuro/Sensorimotor Code',
justify: visit_justify
});
}
//2. Tests/procedures performed to bill
$('.TESTS').each(function(i, obj) {
if ($(this).is(':checked')) {
var codetype = obj.value.match(/(.*):(.*)/)[1];
var code = obj.value.match(/(.*):(.*)/)[2];
var modifier = $('#'+obj.id+'_modifier').val();
var justify = '';
$('[name="TEST_'+i+'_justifiers"]').each(function(j,obj2) {
if ($('#TEST_'+i+'_just_'+j).hasClass('status_on') ) {
var h = $(this).data();
justify = h.justcode;
}
});
var d = $(this).data();
CODING_items.push({
'code' : code,
'codedesc' : d.title,
'codetext' : d.codetext,
'codetype' : codetype,
'title' : d.title,
'modifier' : modifier,
'justify' : justify
});
}
});
}
/*
* Function to make the form fields inactive or active depending on the form's state (Active vs. READ-ONLY)
*/
function toggle_active_flags(new_state) {
if (($("#chart_status").val() == "off") || (new_state == "on")) {
// we are read-only and we want to go active.
$("#chart_status").val("on");
$("#active_flag").html(" Active Chart ");
$("#active_icon").html("<i class='fa fa-toggle-on'></i>");
$("#warning").addClass("nodisplay");
$('input, select, textarea, a').removeAttr('disabled');
$('input, textarea').removeAttr('readonly');
} else {
//else clicking this means we want to go from active to read-only
$("#chart_status").val("off");
$("#active_flag").html(" READ-ONLY ");
$("#active_icon").html("<i class='fa fa-toggle-off'></i>");
$("#warning").removeClass("nodisplay");
//we should tell the form fields to be disabled. should already be...
$('input, select, textarea, a').attr('disabled', 'disabled');
$('input, textarea').attr('readonly', 'readonly');
//need to also disable Ductions and Versions, PRIORS, Quicks Picks and Drawing!!! AND IMPPLAN area.
//Either way a save in READ-ONLY mode fails - just returns this pop_up again, without saving...
this_form_id = $("#form_id").val();
$("#COPY_SECTION").val("READONLY-"+this_form_id);
}
}
/*
* Function to update a form in READ-ONLY mode with any data added by the Active version of this form_id/encounter form
*/
function update_READONLY() {
var data = {
'action' : 'retrieve',
'copy' : 'READONLY',
'zone' : 'READONLY',
'copy_to' : $("#form_id").val(),
'copy_from' : $("#form_id").val(),
'pid' : $("#pid").val()
};
//we are going to update the whole form
//Imagine you are watching on your browser while the tech adds stuff in another room on another computer.
//We are not ready to actively chart, just looking to see how far along our staff is...
//or maybe just looking ahead to see the who's being worked up in the next room?
//Either way, we are looking at a record that at present will be disabled/we cannot change...
// yet it is updating every 10-15 seconds if another user is making changes.
top.restoreSession();
$.ajax({
type : 'POST',
dataType : 'json',
url : "../../forms/eye_mag/save.php?copy=READONLY",
data : data,
success : function(result) {
$.map(result, function(valhere, keyhere) {
if ($("#"+keyhere).val() != valhere) {
$("#"+keyhere).val(valhere).css("background-color","#CCF");
}
if (keyhere.match(/MOTILITY_/)) {
// Copy forward ductions and versions visually
// Make each blank, and rebuild them
$("[name='"+keyhere+"_1']").html('');
$("[name='"+keyhere+"_2']").html('');
$("[name='"+keyhere+"_3']").html('');
$("[name='"+keyhere+"_4']").html('');
if (keyhere.match(/(_RS|_LS|_RI|_LI|_RRSO|_RRIO|_RLSO|_RLIO|_LRSO|_LRIO|_LLSO|_LLIO)/)) {
// Show a horizontal (minus) tag.
hash_tag = '<i class="fa fa-minus"></i>';
} else { //show vertical tag
hash_tag = '<i class="fa fa-minus rotate-left"></i>';
}
for (index =1; index <= valhere; ++index) {
$("#"+keyhere+"_"+index).html(hash_tag);
}
} else if (keyhere.match(/^(ODVF|OSVF)\d$/)) {
if (valhere =='1') {
$("#FieldsNormal").prop('checked', false);
$("#"+keyhere).prop('checked', true);
$("#"+keyhere).val('1');
} else {
$("#"+keyhere).val('0');
$("#"+keyhere).prop('checked', false);
}
} else if (keyhere.match(/AMSLERO(.)/)) {
var sidehere = keyhere.match(/AMSLERO(.)/);
if (valhere < '1') valhere ='0';
$("#"+keyhere).val(valhere);
var srcvalue="AmslerO"+sidehere[1];
document.getElementById(srcvalue).src = document.getElementById(srcvalue).src.replace(/\_\d/g,"_"+valhere);
$("#AmslerO"+sidehere[1]+"value").text(valhere);
} else if (keyhere.match(/VA$/)) {
$("#"+keyhere+"_copy").val(valhere).css("background-color","#F0F8FF");;
$("#"+keyhere+"_copy_brd").val(valhere).css("background-color","#F0F8FF");;
} else if (keyhere.match(/^O.VA_/)) {
var side=keyhere.match(/(O.)VA_(.)/)[1];
var rx_number=keyhere.match(/(O.)VA_(.)/)[2];
if (rx_number == '1') { //update VA_1_copy and VA_1_copy_brd (first wearing RX only)
$('#'+side+'VA_1_copy').val(valhere).css("background-color","#F0F8FF");;
$('#'+side+'VA_1_copy_brd').val(valhere).css("background-color","#F0F8FF");;
}
} else if (keyhere.match(/^RX_TYPE_\d$/)) {
if (typeof $('input:radio[name='+keyhere+']')[valhere] !== "undefined") {
$('input:radio[name='+keyhere+']')[valhere].checked = true;
}
} else if (keyhere.match(/(alert|oriented|confused|PUPIL_NORMAL)/)) {
if (valhere =='1') {
$('#'+keyhere).val(valhere).prop('checked', true);
} else {
$('#'+keyhere).val(valhere).prop('checked', false);
}
}
});
}});
}
function dopopup(url) {
window.open(url, 'clinical', 'width=fullscreen,height=fullscreen,resizable=1,scrollbars=1,directories=0,titlebar=0,toolbar=0,location=0,status=0,menubar=0');
}
function goto_url(url) {
R = url;
top.restoreSession();
location.href = R;
}
//is this used anywhere? Looks like it should be deleted...
function openImage() {
dlgopen(base+'/controller.php?document&retrieve&patient_id=3&document_id=10&as_file=false', '_blank', 600, 475);
}
// Called to open a document in another tab for this encounter.
function openDocumentNewTab(doc_id) {
var url = '../../interface/patient_file/encounter/view_form.php?formname=' + formdir + '&id=' + formid;
if (formdir == 'newpatient' || !parent.twAddFrameTab) {
top.restoreSession();
location.href = url;
} else {
parent.twAddFrameTab('enctabs', formname, url);
}
return false;
}
function HPI_sync_heights() {
if ( ($('#PMSFH_block_1').height() > $('#PMH_left').height() ) ||
($('#PMSFH_block_2').height() > $('#PMH_left').height()) )
{
if ($('#PMSFH_block_1').height() > $('#PMSFH_block_2').height()) {
heights = $('#PMSFH_block_1').height();
} else {
heights = $('#PMSFH_block_2').height();
}
$('#PMH_left').height(heights);
$('#PMH_right').height(heights)
$('#PMH_1').height(heights+20);
} else if ( $("#PMH_2").hasClass('nodisplay') ) {
$('#PMH_1').height($('#HPI_1').height());
} else {
$('#PMH_1').height($('#PMH_2').height());
}
}
/**
* Keyboard shortcut commands.
*/
shortcut.add("Control+T",function() {
show_TEXT();
});
shortcut.add("Meta+T",function() {
show_TEXT();
});
shortcut.add("Control+D",function() {
show_DRAW();
});
shortcut.add("Meta+D",function() {
show_DRAW();
});
shortcut.add("Control+P",function() {
$("#PRIOR_ALL").val($('#form_id').val()).trigger("change");
});
shortcut.add("Meta+P",function() {
show_PRIORS();
$("#PRIOR_ALL").val($('#form_id').val()).trigger("change");
});
shortcut.add("Control+B",function() {
show_QP();
});
shortcut.add("Meta+B",function() {
show_QP();
});
shortcut.add("Control+K",function() {
show_KB();
});
shortcut.add("Meta+K",function() {
show_KB();
});
$(function () {
/*
* this swallows backspace keys on the "rx" elements.
* stops backspace -> back a page in the browser, a very annoying thing indeed.
*/
var rx = /INPUT|SELECT|TEXTAREA|SPAN|DIV/i;
$(document).bind("keydown keypress", function(e){
if( e.which == 8 ){ // 8 == backspace
if(!rx.test(e.target.tagName) || e.target.disabled || e.target.readOnly ){
e.preventDefault();
}
}
});
});
/**
* Function to update the PCP and referring person
*
*/
function update_DOCS() {
var url = "../../forms/eye_mag/save.php?mode=update";
top.restoreSession();
$.ajax({
type : 'POST',
url : url,
data : {
action : 'docs',
pid : $('#pid').val(),
pcp : $('#form_PCP').val(),
rDOC : $('#form_rDOC').val(),
form_id : $('#form_id').val(),
encounter : $('#encounter').val(),
uniqueID : $('#uniqueID').val()
}
}).done(function(result) {
if (result == "Code 400") {
code_400(); //the user does not have write privileges!
return;
}
obj = JSON.parse(result);
build_DOCS(obj);
});
}
/**
* Function to update the PCP and Referring Doctors data.
* Initial use: update data returned from an ajax call.
*/
function build_DOCS(DOCS) {
if (DOCS['pcp']) {
$("#pcp_name").html(DOCS['pcp']['name']);
$("#pcp_address").html(DOCS['pcp']['address']);
$("#pcp_phone").html(DOCS['pcp']['phone']);
$("#pcp_phonew2").html(DOCS['pcp']['phone2']);
$("#pcp_fax").html(DOCS['pcp']['fax']);
$("#pcp_fax_info").html(DOCS['pcp']['fax_info']);
} else {
$("#pcp_name").html('');
$("#pcp_address").html('');
$("#pcp_phone").html('');
$("#pcp_phonew2").html('');
$("#pcp_fax").html('');
$("#pcp_fax_info").html('');
}
if (DOCS['ref']) {
$("#ref_name").html(DOCS['ref']['name']);
$("#ref_address").html(DOCS['ref']['address']);
$("#ref_phone").html(DOCS['ref']['phone']);
$("#ref_phonew2").html(DOCS['ref']['phonew2']);
$("#ref_fax").html(DOCS['ref']['fax']);
$("#ref_fax_info").html(DOCS['ref']['fax_info']);
} else {
$("#ref_name").html('');
$("#ref_address").html('');
$("#ref_phone").html('');
$("#ref_phonew2").html('');
$("#ref_fax").html('');
$("#ref_fax_info").html('');
}
}
/**
* Function to update the patient's current pharmacy
*/
function update_Pharma() {
//$(#form_pharmacy_id) has changed value, update the patient_data field pharmacy_id
var pharm = $("#form_pharmacy_id").val();
var url = "../../forms/eye_mag/save.php?mode=update";
top.restoreSession();
$.ajax({
type : 'POST',
url : url,
data : {
action : 'new_pharmacy',
pid : $('#pid').val(),
form_id : $('#form_id').val(),
encounter : $('#encounter').val(),
uniqueID : $('#uniqueID').val(),
pc_eid : $("#pc_eid").val(),
visit_date : $("#visit_date").val(),
new_pharmacy : pharm
}
}).done(function(result) {
if (result == "Code 400") {
code_400(); //the user does not have write privileges!
return;
}
});
}
/**
* Function to convert ophthalmic prescriptions between plus cylinder and minus cylinder
*
*/
function reverse_cylinder(target) {
//target can be revW1-5,AR,MR,CR,CTL,
var prefix;
var suffix;
if (target.match(/^(AR|MR|CR|CTL)$/)) {
prefix = target;
suffix = '';
}
if (target.match(/^revW[1-5]{1}$/)) { //matches on digit only, here 1-5
target = target.replace("revW","");
prefix = '';
suffix = '_'+target;
}
var Rsph = $('#'+prefix+'ODSPH'+suffix).val();
var Rcyl = $('#'+prefix+'ODCYL'+suffix).val();
var Raxis = $('#'+prefix+'ODAXIS'+suffix).val();
var Lsph = $('#'+prefix+'OSSPH'+suffix).val();
var Lcyl = $('#'+prefix+'OSCYL'+suffix).val();
var Laxis = $('#'+prefix+'OSAXIS'+suffix).val();
if (Rsph=='' && Rcyl =='' && Lsph=='' && lcyl =='') return;
if ((!Rcyl.match(/SPH/i)) && (Rcyl >'')) {
if (Rsph.match(/plano/i)) Rsph ='0';
Rsph = Number(Rsph);
Rcyl = Number(Rcyl);
Rnewsph = Rsph + Rcyl;
if (Rnewsph ==0) Rnewsph ="PLANO";
Rnewcyl = Rcyl * -1;
if (Rnewcyl > 0) Rnewcyl = "+"+Rnewcyl;
if (parseInt(Raxis) < 90) {
Rnewaxis = parseInt(Raxis) + 90;
} else {
Rnewaxis = parseInt(Raxis) - 90;
}
if (Rnewcyl=='0') Rnewcyl = "SPH";
if (Rnewsph =='0') {
Rnewsph ="PLANO";
if (Rnewcyl =="SPH") Rnewcyl = '';
}
$('#'+prefix+'ODSPH'+suffix).val(Rnewsph);
$('#'+prefix+'ODCYL'+suffix).val(Rnewcyl);
$('#'+prefix+'ODAXIS'+suffix).val(Rnewaxis);
$('#'+prefix+'ODAXIS'+suffix).trigger('blur');
$('#'+prefix+'ODSPH'+suffix).trigger('blur');
$('#'+prefix+'ODCYL'+suffix).trigger('blur');
}
if ((!Lcyl.match(/SPH/i)) && (Lcyl >'')) {
if (!Lsph.match(/\d/)) Lsph ='0';
Lsph = Number(Lsph);
Lcyl = Number(Lcyl);
Lnewsph = Lsph + Lcyl;
Lnewcyl = Lcyl * -1;
if (Lnewcyl > 0) Lnewcyl = "+"+ Lnewcyl;
if (parseInt(Laxis) < 90) {
Lnewaxis = parseInt(Laxis) + 90;
} else {
Lnewaxis = parseInt(Laxis) - 90;
}
if (Lnewcyl=='0') Lnewcyl = "SPH";
if (Lnewsph =='0') {
Lnewsph ="PLANO";
if (Lnewcyl =="SPH") Lnewcyl = '';
}
$('#'+prefix+'OSSPH'+suffix).val(Lnewsph);
$('#'+prefix+'OSCYL'+suffix).val(Lnewcyl);
$('#'+prefix+'OSAXIS'+suffix).val(Lnewaxis);
$('#'+prefix+'OSAXIS'+suffix).trigger('blur');
$('#'+prefix+'OSSPH'+suffix).trigger('blur');
$('#'+prefix+'OSCYL'+suffix).trigger('blur');
}
}
function scrollTo(target) {
var offset;
var scrollSpeed = 500;
var wheight = $(window).height();
offset = $("#"+target).offset().top - (wheight / 2)+200;
if (offset > (window.pageYOffset +150)||offset < (window.pageYOffset -150)) {
$('html, body').animate({scrollTop:offset}, scrollSpeed);
}
}
function update_appt_status(new_status) {
var url = "../../forms/eye_mag/save.php?mode=update";
top.restoreSession();
$.ajax({
type : 'POST',
url : url,
data : {
action : 'new_appt_status',
pid : $('#pid').val(),
form_id : $('#form_id').val(),
encounter : $('#encounter').val(),
uniqueID : $('#uniqueID').val(),
pc_eid : $("#pc_eid").val(),
visit_date : $("#visit_date").val(),
new_status : new_status
}
}).done(function(result) {
if (result == "Code 400") {
code_400(); //the user does not have write privileges!
return;
}
});
}
function color_IOP(IOP){
if (!$.isNumeric(IOP.value)) return;
if (IOP.value > '21') {
$(IOP).css("background-color","rgb(255, 153, 153)");
}
}
function showpnotes(docid) {
let btnClose = 'Done';
let url = base+'/interface/patient_file/summary/pnotes.php?docid=' + encodeURIComponent(docid);
dlgopen(url, 'pno1', 'modal-xl', 500, '', '', {
buttons: [
{text: btnClose, close: true, style: 'default btn-sm'}
],
sizeHeight: 'auto',
allowResize: true,
allowDrag: true,
dialogId: '',
type: 'iframe'
});
return false;
}
function getTimeStamp() {
var now = new Date();
var AMPM = now.getHours() >= 12 ? 'PM' : 'AM';
return now.getHours() + ':' + ((now.getMinutes() < 10) ? ("0" + now.getMinutes()) : (now.getMinutes())) + AMPM;
}
/**
* This function is only run onload to hide sections per user preference.
* Any changes during the encounter to display or hide a section are stored
* as a previous setting and the next eye form opened will appear the same way.
*/
function show_by_setting() {
var tabs_left = $("#setting_tabs_left").val();
if (typeof tabs_left ==undefined) exit;
var arrSet = ["HPI","PMH","EXT","ANTSEG","POSTSEG","NEURO","IMPPLAN"];
sLen = arrSet.length;
for (i = 0; i < sLen; i++) {
var value = $("#setting_"+arrSet[i]).val();
if (typeof value !== undefined && value !='1') {
$('#tabs-left-'+arrSet[i]).addClass('ui-state-default');
$("#setting_"+arrSet[i]).val('0');
$("#"+arrSet[i]+'_1').addClass('nodisplay');
$("#setting_"+arrSet[i]).val('0');
} else {
$("#setting_"+arrSet[i]).val('1');
}
}
if (tabs_left == '0') {
$("#tabs_left").addClass('nodisplay');
} else {
$("#tabs_left").removeClass('nodisplay');
}
show_left();
return true;
}
$(function () {
check_lock();
var allPanels = $('.building_blocks > dd').hide();
var allPanels2 = $('.building_blocks2 > dd').hide();
refresh_page();
// AUTO- CODING FEATURES
check_CPT_92060();
check_exam_detail();
hide_DRAW();
hide_right();
//alert('Suggest a Code');
Suggest_visit_code();
show_QP_section('IMPPLAN','1');
//on checking TESTS, show modifiers and justifier fields
$(".TESTS").on("click", function() {
var test_id = this.id;
if ($(this).is(':checked')) {
$("#"+test_id+"_justmods").removeClass('nodisplay');
$("#"+test_id+"_modifier").val('59');
//make vist_modifier 25 light up too...
$(this).parent().removeClass('lights_off').addClass('lights_on');
} else {
$("#"+test_id+"_justmods").addClass('nodisplay');
$(this).parent().removeClass('lights_on').addClass('lights_off');
}
});
$('[title]').tooltip();
$('#form_PCP,#form_rDOC').on('change', function() {
update_DOCS();
});
$("#form_pharmacy_id").change(function() {
update_Pharma();
});
$('#tooltips_status').html($('#PREFS_TOOLTIPS').val());
if ($("#PREFS_TOOLTIPS").val() == "<?php echo xla('Off'); ?>") {
$('[title]').each(function() {
var $this = $(this);
$this.data('title',$this.attr('title'));
$this.attr('title', '');
});
}
$('#tooltips_toggle,#tooltips_status').on('click', function() {
if ($("#PREFS_TOOLTIPS").val() == "<?php echo xla('On'); ?>") {
$('#PREFS_TOOLTIPS').val('<?php echo xla('Off'); ?>');
$("#tooltips_status").html('<?php echo xla('are off'); ?>');
$('[title]').each(function() {
var $this = $(this);
$this.data('title',$this.attr('title'));
$this.attr('title', '');
});
} else {
$('#PREFS_TOOLTIPS').val('<?php echo xla('On'); ?>');
$('#tooltips_status').html('<?php echo xla('are on'); ?>');
$('[title]').each(function() {
var $this = $(this);
$this.attr('title', $this.data('title'));
});
}
update_PREFS();
});
$('#toggle_drugs').on('click', function(){
$('.hideme_drugs').toggleClass('nodisplay');
$(this).find('i').toggleClass('fa-toggle-down fa-toggle-up')
return false;
});
$('#toggle_VFs').on('click', function(){
$('.hideme_VFs').toggleClass('nodisplay');
$(this).find('i').toggleClass('fa-toggle-down fa-toggle-up')
return false;
});
$('#toggle_OCTs').on('click', function(){
$('.hideme_OCTs').toggleClass('nodisplay');
$(this).find('i').toggleClass('fa-toggle-down fa-toggle-up')
return false;
});
$('#toggle_cups').on('click', function(){
$('.hideme_cups').toggleClass('nodisplay');
$(this).find('i').toggleClass('fa-toggle-down fa-toggle-up')
return false;
});
$('#toggle_gonios').on('click', function(){
$('.hideme_gonios').toggleClass('nodisplay');
$(this).find('i').toggleClass('fa-toggle-down fa-toggle-up')
return false;
});
$('.close').on('click', function(){
$('#GFS_accordion .hide').slideUp();
});
$('#ODIOPTARGET').on('change', function() {
$('#OSIOPTARGET').val($('#ODIOPTARGET').val());
refresh_GFS();
});
$('#ODIOPAP,#OSIOPAP,#ODIOPTARGET,#ODIOPTPN,#OSIOPTPN,#OSIOPTARGET').on('change', function() {
//this is failing if there is no config_by_day variable.
refresh_GFS();
});
if ($("#PREFS_KB").val() =='1') {
$(".kb").removeClass('nodisplay');
$(".kb_off").addClass('nodisplay');
} else {
$(".kb").addClass('nodisplay');
$(".kb_off").removeClass('nodisplay');
}
$("[name$='_kb']").on('click', function() {
$('.kb').toggleClass('nodisplay');
$('.kb_off').toggleClass('nodisplay');
$('.copier').toggleClass('nodisplay');
if ($('#PREFS_EXAM').val() == 'DRAW') {
show_TEXT();
}
if ($("#PREFS_KB").val() > 0) {
$("#PREFS_KB").val('0');
} else {
$("#PREFS_KB").val('1');
}
update_PREFS();
});
$('.ke').on('mouseover', function() {
$(this).toggleClass('yellow');
});
$('.ke').on('mouseout', function() {
$(this).toggleClass('yellow');
});
$("[id$='_keyboard'],[id$='_keyboard_left']").on('keydown', function(e) {
//this is the Shorthand engine's ignition
if (e.which == 13|| e.keyCode == 13||e.which == 9|| e.keyCode == 9) {
e.preventDefault();
var data_all = $(this).val();
var data_seg = data_all.match(/([^;]*)/gm);
var field2 ='';
var appendix =".a";
var zone;
for (index=0; index < data_seg.length; ++index) {
if (data_seg[index] =='') continue;
data_seg[index] = data_seg[index].replace(/^[\n\v\f\r\x85\u2028\u2029\W]*/,'');
data_seg[index] = data_seg[index].replace(/^[\s]*/,'');
if (data_seg[index].match(/^D($|;)/i)) {
$("#EXT_defaults").trigger("click");
$("#ANTSEG_defaults").trigger("click");
$("#RETINA_defaults").trigger("click");
$("#NEURO_defaults").trigger("click");
continue;
}
if (data_seg[index].match(/^DEXT($|;)/i)) {
$("#EXT_defaults").trigger("click");
continue;
}
if (data_seg[index].match(/^DANTSEG($|;)/i)) {
$("#ANTSEG_defaults").trigger("click");
continue;
}
if (data_seg[index].match(/^DAS($|;)/i)) {
$("#ANTSEG_defaults").trigger("click");
continue;
}
if (data_seg[index].match(/^DRETINA($|;)/i)) {
$("#RETINA_defaults").trigger("click");
continue;
}
if (data_seg[index].match(/^DRET($|;)/i)) {
$("#RETINA_defaults").trigger("click");
continue;
}
if (data_seg[index].match(/^DNEURO($|;)/i)) {
$("#NEURO_defaults").trigger("click");
continue;
}
if ((data_seg[index].match(/^CLEAREXT($|;)/i))||
(data_seg[index].match(/^CEXT($|;)/i))) {
$(".EXT").val('');
continue;
}
if ((data_seg[index].match(/^CLEARAS($|;)/i))||
(data_seg[index].match(/^CLEARANTSEG($|;)/i))||
(data_seg[index].match(/^CANTSEG($|;)/i))||
(data_seg[index].match(/^CANT($|;)/i))||
(data_seg[index].match(/^CAS($|;)/i))) {
$(".ANTSEG").val('');
continue;
}
if ((data_seg[index].match(/^CLEARRET($|;)/i))||
(data_seg[index].match(/^CRET($|;)/i)) ||
(data_seg[index].match(/^CLEARRETINA($|;)/i))||
(data_seg[index].match(/^CRETINA($|;)/i))) {
$(".RETINA").val('');
continue;
}
appendix=".a";
var data = data_seg[index].match(/^(\w*)\:?(.*)/);
(data[2].match(/\.a$/))?(data[2] = data[2].replace(/\.a$/,'')):(appendix = "nope");
var field = data[1].toUpperCase();
var text = data[2];
text = expand_vocab(text);
priors = process_kb(field,text,appendix,prior_field,prior_text);
prior_field = priors['field'];
prior_text = priors['prior_text'];
}
submit_form('2');
$(this).val('');
}
});
$("[id^='sketch_tools_']").click(function() {
var zone = this.id.match(/sketch_tools_(.*)_/)[1];
$("[id^='sketch_tools_"+zone+"']").css("height","30px");
$(this).css("height","50px");
$("#sketch_tool_"+zone+"_color").css("background-image","").css("background-color",$("#selColor_"+zone).val());
});
$("[id^='sketch_sizes_']").click(function() {
var zone = this.id.match(/sketch_sizes_(.*)_/)[1];
$("[id^='sketch_sizes_"+zone+"']").css("background","").css("border-bottom","");
$(this).css("border-bottom","2pt solid black");
});
// Here we get CC1 to show
$(".tab_content").addClass('nodisplay');
$("#tab1_CC_text").removeClass('nodisplay');
$("#tab1_HPI_text").removeClass('nodisplay');
$("[id$='_CC'],[id$='_HPI_tab']").on('click', function() {
// First remove class "active" from currently active tabs
$("[id$='_CC']").removeClass('active');
$("[id$='_HPI_tab']").removeClass('active');
// Hide all tab content
$(".tab_content").addClass('nodisplay');
// Here we get the href value of the selected tab
var selected_tab = $(this).find("a").attr("href");
// Now add class "active" to the selected/clicked tab and content
$(selected_tab+"_CC").addClass('active');
$(selected_tab+"_CC_text").removeClass('nodisplay');
$(selected_tab+"_HPI_tab").addClass('active');
$(selected_tab+"_HPI_text").removeClass('nodisplay');
// At the end, we add return false so that the click on the link is not executed
return false;
});
$("input,textarea,text").css("background-color","#FFF8DC");
$("[id*=ODIOP],[id*=OSIOP]").each(function() { color_IOP(this); });
$("#IOPTIME").css("background-color","#FFFFFF");
$("#refraction_width").css("width","8.5in");
$(".Draw_class").addClass('nodisplay');
$(".PRIORS_class").addClass('nodisplay');
$(window).on("resize", function() {
if (window.innerWidth >'900') {
$("#refraction_width").css("width","900px");
$("#LayerVision2").css("padding","4px");
}
if (window.innerWidth >'1300') {
$("#refraction_width").css("width","1300px");
//$("#first").css("width","1300px");
}
if (window.innerWidth >'1900') {
$("#refraction_width").css("width","1600px");
}
});
$(window).resize();
var hash_tag = '<i class="fa fa-minus"></i>';
var index;
// display any stored MOTILITY values
$("#MOTILITY_RS").value = parseInt($("#MOTILITY_RS").val());
if ($("#MOTILITY_RS").val() > '0') {
$("#MOTILITYNORMAL").removeAttr('checked');
for (index =1; index <= ($("#MOTILITY_RS").val()); ++index) {
$("#MOTILITY_RS_"+index).html(hash_tag);
}
}
$("#MOTILITY_RI").value = parseInt($("#MOTILITY_RI").val());
if ($("#MOTILITY_RI").val() > '0') {
$("#MOTILITYNORMAL").removeAttr('checked');
for (index =1; index <= ($("#MOTILITY_RI").val()); ++index) {
$("#MOTILITY_RI_"+index).html(hash_tag);
}
}
$("#MOTILITY_LS").value = parseInt($("#MOTILITY_LS").val());
if ($("#MOTILITY_LS").val() > '0') {
$("#MOTILITYNORMAL").removeAttr('checked');
for (index =1; index <= ($("#MOTILITY_LS").val()); ++index) {
$("#MOTILITY_LS_"+index).html(hash_tag);
}
}
$("#MOTILITY_LI").value = parseInt($("#MOTILITY_LI").val());
if ($("#MOTILITY_LI").val() > '0') {
$("#MOTILITYNORMAL").removeAttr('checked');
for (index =1; index <= ($("#MOTILITY_LI").val()); ++index) {
$("#MOTILITY_LI_"+index).html(hash_tag);
}
}
$("#MOTILITY_RRSO").value = parseInt($("#MOTILITY_RRSO").val());
if ($("#MOTILITY_RRSO").val() > '0') {
$("#MOTILITYNORMAL").removeAttr('checked');
for (index =1; index <= ($("#MOTILITY_RRSO").val()); ++index) {
$("#MOTILITY_RRSO_"+index).html(hash_tag);
}
}
$("#MOTILITY_RRIO").value = parseInt($("#MOTILITY_RRIO").val());
if ($("#MOTILITY_RRIO").val() > '0') {
$("#MOTILITYNORMAL").removeAttr('checked');
for (index =1; index <= ($("#MOTILITY_RRIO").val()); ++index) {
$("#MOTILITY_RRIO_"+index).html(hash_tag);
}
}
$("#MOTILITY_RLIO").value = parseInt($("#MOTILITY_RLIO").val());
if ($("#MOTILITY_RLIO").val() > '0') {
$("#MOTILITYNORMAL").removeAttr('checked');
for (index =1; index <= ($("#MOTILITY_RLIO").val()); ++index) {
$("#MOTILITY_RLIO_"+index).html(hash_tag);
}
}
$("#MOTILITY_RLSO").value = parseInt($("#MOTILITY_RLSO").val());
if ($("#MOTILITY_RLSO").val() > '0') {
$("#MOTILITYNORMAL").removeAttr('checked');
for (index =1; index <= ($("#MOTILITY_RLSO").val()); ++index) {
$("#MOTILITY_RLSO_"+index).html(hash_tag);
}
}
$("#MOTILITY_LRSO").value = parseInt($("#MOTILITY_LRSO").val());
if ($("#MOTILITY_LRSO").val() > '0') {
$("#MOTILITYNORMAL").removeAttr('checked');
for (index =1; index <= ($("#MOTILITY_LRSO").val()); ++index) {
$("#MOTILITY_LRSO_"+index).html(hash_tag);
}
}
$("#MOTILITY_LRIO").value = parseInt($("#MOTILITY_LRIO").val());
if ($("#MOTILITY_LRIO").val() > '0') {
$("#MOTILITYNORMAL").removeAttr('checked');
for (index =1; index <= ($("#MOTILITY_LRIO").val()); ++index) {
$("#MOTILITY_LRIO_"+index).html(hash_tag);
}
}
$("#MOTILITY_LLSO").value = parseInt($("#MOTILITY_LLSO").val());
if ($("#MOTILITY_LLSO").val() > '0') {
$("#MOTILITYNORMAL").removeAttr('checked');
for (index =1; index <= ($("#MOTILITY_LLSO").val()); ++index) {
$("#MOTILITY_LLSO_"+index).html(hash_tag);
}
}
$("#MOTILITY_LLIO").value = parseInt($("#MOTILITY_LLIO").val());
if ($("#MOTILITY_LLIO").val() > '0') {
$("#MOTILITYNORMAL").removeAttr('checked');
for (index =1; index <= ($("#MOTILITY_LLIO").val()); ++index) {
$("#MOTILITY_LLIO_"+index).html(hash_tag);
}
}
var hash_tag = '<i class="fa fa-minus rotate-left"></i>';
$("#MOTILITY_LR").value = parseInt($("#MOTILITY_LR").val());
if ($("#MOTILITY_LR").val() > '0') {
$("#MOTILITYNORMAL").removeAttr('checked');
for (index =1; index <= ($("#MOTILITY_LR").val()); ++index) {
$("#MOTILITY_LR_"+index).html(hash_tag);
}
}
$("#MOTILITY_LL").value = parseInt($("#MOTILITY_LL").val());
if ($("#MOTILITY_LL").val() > '0') {
$("#MOTILITYNORMAL").removeAttr('checked');
for (index =1; index <= ($("#MOTILITY_LL").val()); ++index) {
$("#MOTILITY_LL_"+index).html(hash_tag);
}
}
$("#MOTILITY_RR").value = parseInt($("#MOTILITY_RR").val());
if ($("#MOTILITY_RR").val() > '0') {
$("#MOTILITYNORMAL").removeAttr('checked');
for (index =1; index <= ($("#MOTILITY_RR").val()); ++index) {
$("#MOTILITY_RR_"+index).html(hash_tag);
}
}
$("#MOTILITY_RL").value = parseInt($("#MOTILITY_RL").val());
if ($("#MOTILITY_RL").val() > '0') {
$("#MOTILITYNORMAL").removeAttr('checked');
for (index =1; index <= ($("#MOTILITY_RL").val()); ++index) {
$("#MOTILITY_RL_"+index).html(hash_tag);
}
}
$(".chronic_HPI,.count_HPI").on("blur", function() {
check_exam_detail();
});
// Dilation status
$("#DIL_RISKS").on('change', function(o) {
($(this).is(':checked')) ? ($(".DIL_RISKS").removeClass("nodisplay")) : ($(".DIL_RISKS").addClass("nodisplay"));
check_exam_detail();
});
$(".dil_drug").on('change', function(o) {
if ($(this).is(':checked')) {
$("#DIL_RISKS").prop("checked","checked");
check_exam_detail();
var timestamp = getTimeStamp();
$("#DIL_MEDS").val(timestamp);
}});
//neurosens exam = stereopsis + strab||NPC||NPA||etc
$(".neurosens,.neurosens2").on("blur", function() {
check_CPT_92060();
});
// functions to improve flow of refraction input
$("input[name$='PRISM'],input[class^='prism']").on("blur", function() {
//make it all caps
var str = $(this).val();
str = str.toUpperCase();
$(this).val(str);
});
$('input[class^="sphere"],input[name$="SPH"]').on("blur", function() {
var mid = $(this).val();
if (mid.match(/PLANO/i)) {
$(this).val('PLANO');
return;
}
if (mid.match(/^[\+\-]?\d{1}$/)) {
mid = mid+".00";
}
if (mid.match(/\.[27]$/)) {
mid = mid + '5';
}
if (mid.match(/\.\d$/)) {
mid = mid + '0';
}
//if near is +2. make it +2.00
if (mid.match(/\.$/)) {
mid= mid + '00';
}
if ((!mid.match(/\./))&&(mid.match(00|25|50|75))) {
var front = mid.match(/(\d{0,2})(00|25|50|75)/)[1];
var back = mid.match(/(\d{0,2})(00|25|50|75)/)[2];
if (front =='') front ='0';
mid = front + "." + back;
}
if (!mid.match(/\./)) {
var front = mid.match(/([\+\-]?\d{0,2})(\d{2})/)[1];
var back = mid.match(/(\d{0,2})(\d{2})/)[2];
if (front =='') front ='0';
if (front =='-') front ='-0';
mid = front + "." + back;
}
if (!mid.match(/^(\+|\-){1}/)) {
mid = "+" + mid;
}
$(this).val(mid);
});
$("input[class^='presbyopia'],input[name$='ADD'],#ODADD_1,#ODADD_2,#OSADD_1,#OSADD_2").on("blur", function() {
var add = $(this).val();
add = add.replace(/=/g,"+");
//if add is one digit, eg. 2, make it +2.00
if (add.match(/^\d{1}$/)) {
add = "+"+add+".00";
}
//if add is '+'one digit, eg. +2, make it +2.00
if (add.match(/^\+\d{1}$/)) {
add = add+".00";
}
//if add is 2.5 or 2.0 make it 2.50 or 2.00
if (add.match(/\.[05]$/)) {
add = add + '0';
}
//if add is 2.2 or 2.7 make it 2.25 or 2.75
if (add.match(/\.[27]$/)) {
add = add + '5';
}
//if add is +2. make it +2.00
if (add.match(/\.$/)) {
add = add + '00';
}
if ((!add.match(/\./))&&(add.match(/(0|25|50|75)$/))) {
var front = add.match(/([\+]?\d{0,1})(00|25|50|75)/)[1];
var back = add.match(/([\+]?\d{0,1})(00|25|50|75)/)[2];
if (front =='') front ='0';
add = front + "." + back;
}
if (!add.match(/^(\+)/) && (add.length > 0)) {
add= "+" + add;
}
$(this).val(add);
if (this.id=="ODADD_1") $('#OSADD_1').val(add);
if (this.id=="ODMIDADD_1") $('#OSMIDADD_1').val(add);
if (this.id=="ODADD_2") $('#OSADD_2').val(add);
if (this.id=="ODMIDADD_2") $('#OSMIDADD_2').val(add);
if (this.id=="ODADD_3") $('#OSADD_3').val(add);
if (this.id=="ODMIDADD_3") $('#OSMIDADD_3').val(add);
if (this.id=="ODADD_4") $('#OSADD_4').val(add);
if (this.id=="ODMIDADD_4") $('#OSMIDADD_4').val(add);
if (this.id=="ODADD_5") $('#OSADD_5').val(add);
if (this.id=="ODMIDADD_5") $('#OSMIDADD_5').val(add);
if (this.id=="MRODADD") $('#MROSADD').val(add);
if (this.id=="ARODADD") $('#AROSADD').val(add);
if (this.id=="CTLODADD") $('#CTLOSADD').val(add);
});
$("input[class^='axis'],input[name$='AXIS']").on("blur", function() {
// Make this a 3 digit leading zeros number.
// we are not translating text to numbers, just numbers to
// a 3 digit format with leading zeroes as needed.
// assume the end user KNOWS there are only numbers presented and
// more than 3 digits is a mistake...
// (although this may change with topography)
var axis = $(this).val();
if (this.name.match(/K2AXIS/)) {
var group = this.name.replace("AXIS", "");
} else {
var group = this.name.replace("AXIS", "CYL");
}
var cyl = $("#"+group).val();
if ( (cyl > '') && (cyl != 'SPH') ) {
if (!axis.match(/\d\d\d/)) {
if (!axis.match(/\d\d/)) {
if (!axis.match(/\d/)) {
axis = '0';
}
axis = '0' + axis;
}
axis = '0' + axis;
}
} else {
axis = '';
}
//we can utilize a phoropter dial feature, we can start them at their age appropriate with/against the rule value.
//requires touch screen. requires complete touch interface development. Exists in refraction lanes. Would
//be nice to tie them all together. Would require manufacturers to publish their APIs to communicate with
//the devices.
$(this).val(axis);
});
$("input[class^='cylinder'],input[name$='CYL']").on("blur", function() {
var mid = $(this).val();
var group = this.name.replace("CYL", "SPH");;
var sphere = $("#"+group).val();
if (((mid.length == 0) && (sphere.length > 0))||(mid.match(/sph/i))) {
$(this).val('SPH');
if (sphere.match(/plano/i)) $(this).val('');
var axis = this.name.replace("CYL", "AXIS");
$("#"+axis).val('');
submit_form($(this));
return;
} else if (sphere.length > 0) {
if (mid.match(/^[\+\-]?\d{1}$/)) {
mid = mid+".00";
}
if (mid.match(/^(\d)(\d)$/)) {
mid = mid[0] + '.' +mid[1];
}
//if mid is 2.5 or 2.0 make it 2.50 or 2.00
if (mid.match(/\.[05]$/)) {
mid = mid + '0';
}
//if mid is 2.2 or 2.7 make it 2.25 or 2.75
if (mid.match(/\.[27]$/)) {
mid = mid + '5';
}
//if mid is +2. make it +2.00
if (mid.match(/\.$/)) {
mid = mid + '00';
}
if (mid.match(/([\+\-]?\d{0,2})\.?(00|25|50|75)/)) {
var front = mid.match(/([\+\-]?\d{0,2})\.?(00|25|50|75)/)[1];
var back = mid.match(/([\+\-]?\d{0,2})\.?(00|25|50|75)/)[2];
if (front =='') front ='0';
mid = front + "." + back;
}
if (!$('#PREFS_CYL').val()) {
$('#PREFS_CYL').val('+');
update_PREFS();
}
if (!mid.match(/^(\+|\-){1}/) && (sphere.length > 0)) {
//no +/- sign at the start of the field.
//ok so there is a preference set
//Since it doesn't start with + or - then give it the preference value
mid = $('#PREFS_CYL').val() + mid;
} else if (mid.match(/^(\+|\-){1}/)) {
pref = mid.match(/^(\+|\-){1}/)[0];
//so they used a value + or - at the start of the field.
//The only reason to work on this is to change to cylinder preference
if ($('#PREFS_CYL').val() != pref){
//and that is what they are doing here
$('#PREFS_CYL').val(pref);
update_PREFS();
}
}
$(this).val(mid);
}
});
//bootstrap menu functions
$("[class='dropdown-toggle']").hover(function(){
$("[class='dropdown-toggle']").parent().removeClass('open');
var menuitem = this.id.match(/(.*)/)[1];
//if the menu is active through a prior click, show it
// Have to override Bootstrap then
if ($("#menustate").val() !="1") { //menu not active -> ignore
$("#"+menuitem).css("background-color", "#C9DBF2");
$("#"+menuitem).css("color","#000"); /*#262626;*/
} else { //menu is active -> respond
$("#"+menuitem).css("background-color", "#1C5ECF");
$("#"+menuitem).css("color","#fff"); /*#262626;*/
$("#"+menuitem).css("text-decoration","none");
$("#"+menuitem).parent().addClass('open');
}
},function() {
var menuitem = this.id.match(/(.*)/)[1];
$("#"+menuitem).css("color","#000"); /*#262626;*/
$("#"+menuitem).css("background-color", "#C9DBF2");
}
);
$("[class='dropdown-toggle']").on('click', function() {
$("#menustate").val('1');
var menuitem = this.id.match(/(.*)/)[1];
$("#"+menuitem).css("background-color", "#1C5ECF");
$("#"+menuitem).css("color","#fff"); /*#262626;*/
$("#"+menuitem).css("text-decoration","none");
});
$("#right-panel-link, #close-panel-bt,#right-panel-link_2").on('click', function() {
if ($("#PREFS_PANEL_RIGHT").val() =='1') {
$("#PREFS_PANEL_RIGHT").val('0');
} else {
$("#PREFS_PANEL_RIGHT").val('1');
}
update_PREFS();
});
$("[name^='menu_']").on('click', function() {
$("[name^='menu_']").removeClass('active');
var menuitem = this.id.match(/menu_(.*)/)[1];
$(this).addClass('active');
$("#menustate").val('1');
if (menuitem =='left_tabs') {
var tabs_left = $("#setting_tabs_left").val();
if (tabs_left == '1') {
$("#tabs_left").addClass('nodisplay');
$("#setting_tabs_left").val('0');
} else {
$("#tabs_left").removeClass('nodisplay');
$("#setting_tabs_left").val('1');
}
update_PREFS();
} else {
$("#BUTTON_TAB_"+menuitem).trigger('click');
$("#tabs-left-"+menuitem).trigger('click');
menu_select(menuitem);
}
});
// set display functions for Draw panel appearance
// for each DRAW area, if the value AREA_DRAW = 1, show it.
var zones = ["PMH","HPI","EXT","ANTSEG","POSTSEG","NEURO","IMPPLAN"];
for (index = '0'; index < zones.length; ++index) {
if ($("#PREFS_"+zones[index]+"_RIGHT").val() =='DRAW') {
show_DRAW_section(zones[index]);
} else if ($("#PREFS_"+zones[index]+"_RIGHT").val() =='QP') {
show_QP_section(zones[index],'1');
}
}
$("body").on("click","[name$='_text_view']" , function() {
var header = this.id.match(/(.*)_text_view$/)[1];
$("#"+header+"_text_list").toggleClass('wide_textarea');
$("#"+header+"_text_list").toggleClass('narrow_textarea');
$(this).toggleClass('fa-plus-square-o');
$(this).toggleClass('fa-minus-square-o');
if (header != /PRIOR/) {
var imagine = $("#PREFS_"+header+"_VIEW").val();
imagine ^= true;
$("#PREFS_"+header+"_VIEW").val(imagine);
update_PREFS();
}
return false;
});
$("body").on("change", "select", function(e){
if (this.name.match(/PRIOR_(.*)/)) {
var new_section = this.name.match(/PRIOR_(.*)/);
var newValue = this.value;
if (new_section[1] =='') return;
if (new_section[1].match(/_canvas/)) {
goto_section = new_section[1].match(/_canvas/)[1];
show_PRIOR_CANVAS_section(goto_section,newValue);
return;
}
if (new_section[1] == /\_/){
return;
}
var newValue = this.value;
if (newValue == $("#form_id").val()) {
if (new_section[1] =="ALL") {
//click updates prefs too
$('#EXAM_QP').trigger("click");
} else {
$('#BUTTON_QP_'+new_section[1]).trigger("click").trigger("click");//double click intended RM
}
$("#LayerTechnical_sections_1").css("clear","both");
return;
}
//now go get the prior page via ajax
$("#PRIORS_"+ new_section[1] +"_left_text").removeClass('nodisplay');
$("#DRAWS_" + new_section[1] + "_right").addClass('nodisplay');
$("#QP_" + new_section[1]).addClass('nodisplay');
if (new_section[1] =="ALL") {
show_PRIORS();
show_PRIORS_section("ALL",newValue);
show_PRIORS_section("EXT",newValue);
show_PRIORS_section("ANTSEG",newValue);
show_PRIORS_section("RETINA",newValue);
show_PRIORS_section("NEURO",newValue);
show_PRIORS_section("IMPPLAN",newValue);
scrollTo("EXT_left");
} else {
show_PRIORS_section(new_section[1],newValue);
}
}
});
$("body").on("click","[name^='old_canvas']", function() {
//get zone
//het h.step from SELECT_CANVAS_" . attr($zone) . "
var h = $(this).data();
var target = h.target;
var direction = h.direction;
var select = document.getElementById(target);
var len = select.getElementsByTagName('option').length-1;
var t = $("#"+target).data();
var index=t.step;
if (direction=="oldest") {
index=len;
next = select.getElementsByTagName('option')[index];
if(typeof next !== undefined) {
select.options[index].selected = 'selected';
}
} else if (direction=="older") {
index++;
next = select.getElementsByTagName('option')[index];
if(typeof next !== undefined && index <= len) {
select.options[index].selected = 'selected';
} else {
index=len;
}
} else if (direction=="newer") {
index--;
next = select.getElementsByTagName('option')[index];
if (typeof next !== undefined && index >= 0) {
select.options[index].selected = 'selected';
} else {
index = 0;
select.options[index].selected = 'selected';
}
} else if (direction=="newest") {
index='0';
next = select.getElementsByTagName('option')[index];
if(typeof next !== undefined) {
select.options[index].selected = 'selected';
}
}
t.step=index;
$("#"+target).trigger('change');
});
$("body").on("click","[id^='Close_PRIORS_']", function() {
var new_section = this.id.match(/Close_PRIORS_(.*)$/)[1];
$("#PRIORS_"+ new_section +"_left_text").addClass('nodisplay');
$("#QP_" + new_section).removeClass('nodisplay');
});
$("#pupils,#vision_tab,[name='CTL'],[name^='more_'],#ACTTRIGGER").on("mouseover", function() {
$(this).toggleClass('buttonRefraction_selected').toggleClass('underline').css( 'cursor', 'pointer' );
});
$("#pupils,#vision_tab,[name='CTL']").on("mouseout", function() {
$(this).toggleClass('buttonRefraction_selected').toggleClass('underline');
});
$("#pupils").on("click", function(){
if ($("#dim_pupils_panel").hasClass("nodisplay")) {
$("#dim_pupils_panel").removeClass('nodisplay');
} else {
$("#dim_pupils_panel").fadeToggle();
}
});
$("#vision_tab").on("click", function(){
$("#REFRACTION_sections").toggleClass('nodisplay');
($("#PREFS_VA").val() =='1') ? ($("#PREFS_VA").val('0')) : $("#PREFS_VA").val('1');
});
//set wearing to single vision or bifocal? Bifocal
$(".WNEAR").removeClass('nodisplay');
$("#WNEARODAXIS").addClass('nodisplay');
$("#WNEARODCYL").addClass('nodisplay');
$("#WNEARODPRISM").addClass('nodisplay');
$("#WNEAROSAXIS").addClass('nodisplay');
$("#WNEAROSCYL").addClass('nodisplay');
$("#WNEAROSPRISM").addClass('nodisplay');
$("#Single").on("click", function(){
$("#WNEARODAXIS").addClass('nodisplay');
$("#WNEARODCYL").addClass('nodisplay');
$("#WNEARODPRISM").addClass('nodisplay');
$("#WODADD2").addClass('nodisplay');
$("#WOSADD2").addClass('nodisplay');
$("#WNEAROSAXIS").addClass('nodisplay');
$("#WNEAROSCYL").addClass('nodisplay');
$("#WNEAROSPRISM").addClass('nodisplay');
$(".WSPACER").removeClass('nodisplay');
});
$("#Bifocal").on("click", function(){
$(".WSPACER").addClass('nodisplay');
$(".WNEAR").removeClass('nodisplay');
$(".WMid").addClass('nodisplay');
$(".WHIDECYL").removeClass('nodisplay');
$("[name=RX]").val(["1"]);
$("#WNEARODAXIS").addClass('nodisplay');
$("#WNEARODCYL").addClass('nodisplay');
$("#WNEARODPRISM").addClass('nodisplay');
$("#WNEAROSAXIS").addClass('nodisplay');
$("#WNEAROSCYL").addClass('nodisplay');
$("#WNEAROSPRISM").addClass('nodisplay');
$("#WODADD2").removeClass('nodisplay');
$("#WOSADD2").removeClass('nodisplay');
});
$("#Trifocal").on("click", function(){
$(".WSPACER").addClass('nodisplay');
$(".WNEAR").removeClass('nodisplay');
$(".WMid").removeClass('nodisplay');
$(".WHIDECYL").addClass('nodisplay');
$("[name=RX]").val(["2"]);
$("#WNEARODAXIS").addClass('nodisplay');
$("#WNEARODCYL").addClass('nodisplay');
$("#WNEARODPRISM").addClass('nodisplay');
$("#WNEAROSAXIS").addClass('nodisplay');
$("#WNEAROSCYL").addClass('nodisplay');
$("#WNEAROSPRISM").addClass('nodisplay');
$("#WODADD2").removeClass('nodisplay');
$("#WOSADD2").removeClass('nodisplay');
});
$("#Progressive").on("click", function(){
$(".WSPACER").addClass('nodisplay');
$(".WNEAR").removeClass('nodisplay');
$(".WMid").addClass('nodisplay');
$(".WHIDECYL").removeClass('nodisplay');
$("[name=RX]").val(["3"]);
$("#WNEARODAXIS").addClass('nodisplay');
$("#WNEARODCYL").addClass('nodisplay');
$("#WNEARODPRISM").addClass('nodisplay');
$("#WNEAROSAXIS").addClass('nodisplay');
$("#WNEAROSCYL").addClass('nodisplay');
$("#WNEAROSPRISM").addClass('nodisplay');
$("#WODADD2").removeClass('nodisplay');
$("#WOSADD2").removeClass('nodisplay');
});
$("[name=W_width_display]").on("click", function() {
if ($("#PREFS_W_width").val() !="1") {
$("#PREFS_W_width").val('1');
//make each display W wide
$("[name=currentRX]").addClass('refraction_wide');
$("[name=W_wide]").removeClass('nodisplay');
$("[name=W_wide2]").removeClass('nodisplay');
} else {
$("#PREFS_W_width").val('0');
//make each display W narrow
$("[name=currentRX]").removeClass('refraction_wide');
$("[name=W_wide]").addClass('nodisplay');
$("[name=W_wide2]").addClass('nodisplay');
}
update_PREFS();
});
if ($("#PREFS_W_width").val() == '1') {
$("[name=W_wide]").removeClass('nodisplay');
$("[name=W_wide2]").removeClass('nodisplay')
} else {
$("[name=W_wide]").addClass('nodisplay');
$("[name=W_wide2]").addClass('nodisplay');
}
$("#Amsler-Normal").on("change", function() {
if ($(this).is(':checked')) {
var number1 = document.getElementById("AmslerOD").src.match(/(Amsler_\d)/)[1];
document.getElementById("AmslerOD").src = document.getElementById("AmslerOD").src.replace(number1,"Amsler_0");
var number2 = document.getElementById("AmslerOS").src.match(/(Amsler_\d)/)[1];
document.getElementById("AmslerOS").src = document.getElementById("AmslerOS").src.replace(number2,"Amsler_0");
$("#AMSLEROD").val("0");
$("#AMSLEROS").val("0");
$("#AmslerODvalue").text("0");
$("#AmslerOSvalue").text("0");
submit_form("eye_mag");
return;
}
});
$("#PUPIL_NORMAL").on("change", function() {
if ($(this).is(':checked')) {
$("#ODPUPILSIZE1").val('3.0');
$("#OSPUPILSIZE1").val('3.0');
$("#ODPUPILSIZE2").val('2.0');
$("#OSPUPILSIZE2").val('2.0');
$("#ODPUPILREACTIVITY").val('+2');
$("#OSPUPILREACTIVITY").val('+2');
$("#ODAPD").val('0');
$("#OSAPD").val('0');
submit_form("eye_mag");
return;
}
});
$("[name$='PUPILREACTIVITY']").on("change", function() {
var react = $(this).val();
if (react.match(/^\d{1}$/)) {
react = "+"+react;
}
$(this).val(react);
});
$("[name^='EXAM']").on("mouseover", function(){
$(this).toggleClass("borderShadow2").css( 'cursor', 'pointer' );
});
$("[name^='EXAM']").on("mouseout", function(){
$(this).toggleClass("borderShadow2");
});
$("#AmslerOD, #AmslerOS").on("click", function() {
if ($('#chart_status').val() !="on") return;
var number1 = this.src.match(/Amsler_(\d)/)[1];
var number2 = +number1 +1;
this.src = this.src.replace('Amsler_'+number1,'Amsler_'+number2);
this.src = this.src.replace('Amsler_6','Amsler_0');
$("#Amsler-Normal").removeAttr('checked');
var number3 = this.src.match(/Amsler_(\d)/)[1];
this.html = number3;
if (number3 =="6") {
number3 = "0";
}
if ($(this).attr("id")=="AmslerOD") {
$("#AmslerODvalue").text(number3);
$('#AMSLEROD').val(number3);
} else {
$('#AMSLEROS').val(number3);
$("#AmslerOSvalue").text(number3);
}
var title = "#"+$(this).attr("id")+"_tag";
});
$("#AmslerOD, #AmslerOS").on("mouseout", function() {
submit_form("eye_mag");
});
$("[name^='ODVF'],[name^='OSVF']").on("click", function() {
if ($(this).is(':checked') == true) {
$("#FieldsNormal").prop('checked', false);
$(this).val('1');
}else{
$(this).val('0');
$(this).prop('checked', false);
}
submit_form("eye_mag");
});
$("#FieldsNormal").on("click", function() {
if ($(this).is(':checked')) {
$("#ODVF1").removeAttr('checked');
$("#ODVF2").removeAttr('checked');
$("#ODVF3").removeAttr('checked');
$("#ODVF4").removeAttr('checked');
$("#OSVF1").removeAttr('checked');
$("#OSVF2").removeAttr('checked');
$("#OSVF3").removeAttr('checked');
$("#OSVF4").removeAttr('checked');
}
});
$("[id^='EXT_prefix']").on("change", function() {
var newValue =$('#EXT_prefix').val();
newValue = newValue.replace('+', '');
if (newValue =="off") {$(this).val('');}
if (newValue =="clear") {
if (confirm('\tSelect OK to clear all the External Exam values\t\n\t or CANCEL to continue.\t')) {
$(this).val('');
$(".EXT").val('');
}
} else {
$("[name^='EXT_prefix_']").removeClass('eye_button_selected');
$("#EXT_prefix_"+ newValue).addClass("eye_button_selected");
}
});
$("#ANTSEG_prefix").on("change", function() {
var newValue = $(this).val().replace('+', '');
if ($(this).value =="off") {$(this).val('');}
if (newValue =="clear") {
if (confirm('\tSelect OK to clear all the Anterior Segment Exam values\t\n\t or CANCEL to continue.\t')) {
$(this).val('');
$(".ANTSEG").val('');
}
} else {
$("[name^='ANTSEG_prefix_']").removeClass('eye_button_selected');
$("#ANTSEG_prefix_"+ newValue).addClass("eye_button_selected");
}
});
$("#RETINA_prefix").on("change", function() {
var newValue = $("#RETINA_prefix").val().replace('+', '');
if ($(this).value =="off") {$(this).val('');}
if (newValue =="clear") {
if (confirm('\tSelect OK to clear all the Retina Exam values\t\n\t or CANCEL to continue.\t')) {
$(this).val('');
$(".RETINA").val('');
}
} else {
$("[name^='RETINA_prefix_']").removeClass('eye_button_selected');
$("#RETINA_prefix_"+ newValue).addClass("eye_button_selected");
}
});
$("#NEURO_ACT_zone").on("change", function() {
var newValue = $(this).val();
$("[name^='NEURO_ACT_zone']").removeClass('eye_button_selected');
$("#NEURO_ACT_zone_"+ newValue).addClass("eye_button_selected");
$("#PREFS_ACT_SHOW").val(newValue);
update_PREFS;
$("#ACT_tab_"+newValue).trigger('click');
});
$("#NEURO_side").on("change", function() {
var newValue = $(this).val();
$("[name^='NEURO_side']").removeClass('eye_button_selected');
$("#NEURO_side_"+ newValue).addClass("eye_button_selected");
});
$('.ACT').on('focus', function() {
var id = this.id.match(/ACT(\d*)/);
$('#NEURO_field').val(''+id[1]).trigger('change');
});
$("#NEURO_field").on("change", function() {
var newValue = $(this).val();
$("[name^='NEURO_field']").removeClass('eye_button_selected');
$("#NEURO_field_"+ newValue).addClass("eye_button_selected");
$('.ACT').each(function(i){
var color = $(this).css('background-color');
if ((color == 'rgb(255, 255, 153)')) {// =='blue' <- IE hack
$(this).css("background-color","red");
}
});
//change to highlight field in zone entry is for
var zone = $("#NEURO_ACT_zone").val();
$("#ACT"+newValue+zone).css("background-color","yellow");
});
$("[name^='NEURO_ACT_strab']").on("click", function() {
var newValue = $(this).val();
$("[name^='NEURO_ACT_strab']").removeClass('eye_button_selected');
$(this).addClass("eye_button_selected");
});
$("#NEURO_value").on("change", function() {
var newValue = $(this).val();
$("[name^='NEURO_value']").removeClass('eye_button_selected');
$("#NEURO_value_"+ newValue).addClass("eye_button_selected");
if (newValue == "ortho") {
$("#NEURO_ACT_strab").val('');
$("[name^='NEURO_ACT_strab']").removeClass('eye_button_selected');
$("#NEURO_side").val('');
$("[name^='NEURO_side']").removeClass('eye_button_selected');
}
});
$("#NEURO_RECORD").on("mouseover", function() {
$("#NEURO_RECORD").addClass('borderShadow2').css( 'cursor', 'pointer' );
});
$("#NEURO_RECORD").on("mouseout", function() {
$("#NEURO_RECORD").removeClass('borderShadow2');
});
$("#NEURO_RECORD").on("mousedown", function() {
$("#NEURO_RECORD").removeClass('borderShadow2');
$(this).toggleClass('button_over');
});
$("#NEURO_RECORD").on("mouseup", function() {
$("#NEURO_RECORD").removeClass('borderShadow2');
$(this).toggleClass('button_over');
});
$("#NEURO_RECORD").on("click", function() {
//find out the field we are updating
var number = $("#NEURO_field").val();
var zone = $("#NEURO_ACT_zone").val();
var strab = $("#NEURO_value").val() + ' '+ $("#NEURO_side").val() + $("#NEURO_ACT_strab").val();
$("#ACT"+number+zone).val(strab).css("background-color","#F0F8FF");
});
$("#LayerMood,#LayerVision, #LayerTension, #LayerMotility, #LayerAmsler, #LayerFields, #LayerPupils,#dim_pupils_panel,#PRIORS_ALL_left_text").on("mouseover", function(){
$(this).addClass("borderShadow2");
});
$("#LayerMood,#LayerVision, #LayerTension, #LayerMotility, #LayerAmsler, #LayerFields, #LayerPupils,#dim_pupils_panel,#PRIORS_ALL_left_text").on("mouseout", function(){
$(this).removeClass("borderShadow2");
});
$("[id$='_lightswitch']").on("click", function() {
var section = "#"+this.id.match(/(.*)_lightswitch$/)[1];
var section2 = this.id.match(/(.*)_(.*)_lightswitch$/)[2];
var elem = document.getElementById("PREFS_"+section2);
$("#PREFS_VA").val('0');
if (section2 != "IOP")$("#REFRACTION_sections").removeClass('nodisplay');
if (elem.value == "0" || elem.value =='') {
elem.value='1';
if (section2 =="ADDITIONAL") {
$("#LayerVision_ADDITIONAL").removeClass('nodisplay');
}
if (section2 =="IOP") {
$("#LayerVision_IOP").removeClass('nodisplay');
//plot_IOPs();
}
$(section).removeClass('nodisplay');
$(this).addClass("buttonRefraction_selected");
} else {
elem.value='0';
$(section).addClass('nodisplay');
if (section2 =="VAX") {
$("#LayerVision_ADDITIONAL_VISION").addClass('nodisplay');
}
if (section2 =="IOP") {
$("#LayerVision_IOP").addClass('nodisplay');
}
$(this).removeClass("buttonRefraction_selected");
}
$(this).css( 'cursor', 'pointer' );
update_PREFS();
});
$('[id$=_lightswitch]').on("mouseover", function() {
$(this).addClass('buttonRefraction_selected').css( 'cursor', 'pointer' );
var section = this.id.match(/(.*)_(.*)_lightswitch$/)[2];
if (section == 'IOP') {
$("#LayerTension").addClass("borderShadow2");
} else {
$("#LayerVision").addClass("borderShadow2");
}
});
$('[id$=_lightswitch]').on('mouseout', function() {
var section2 = this.id.match(/(.*)_(.*)_lightswitch$/)[2];
var elem = document.getElementById("PREFS_"+section2);
if (elem.value != "1") {
$(this).removeClass('buttonRefraction_selected');
} else {
$(this).addClass('buttonRefraction_selected');
} });
// let users enter "=" sign for "+" to cut down on keyboard movements (keyCode 61)
// "+" == "shift" + "=" ==> now "=" == "+", "j" ==> "J" for Jaeger acuity (keyCode 74)
// "-" is still == "-"
$("input[class^='jaeger'],input[name$='VA'],input[name$='VA_copy'],input[name$='VA_copy_brd'],input[name$='SPH'],input[name$='CYL'],input[name$='REACTIVITY'],input[name$='APD']").on('keyup', function(e) {
if (e.keyCode=='61' || e.keyCode=='74') {
now = $(this).val();
now = now.replace(/=/g,"+").replace(/^j/g,"J");
$(this).val(now);
}
});
//useful to make all VA fields stay in sync
$("input[name$='VA']").on('change',function() {
var hereValue = $(this).val();
var newValue = $(this).attr('name').replace('VA', 'VA_copy');
$("#" + newValue).val(hereValue).css("background-color","#F0F8FF");;
$("#" + newValue + "_brd").val(hereValue).css("background-color","#F0F8FF");;
});
$("input[class^='jaeger'],input[name$='VA_1']").on('change',function() {
var hereValue = $(this).val();
hereValue = hereValue.replace(/=$/g,"+").replace(/^j/g,"J");
$(this).val(hereValue);
if (this.name.match(/_1$/)) {
var newValue = $(this).attr('name').replace('VA_1', 'VA_1_copy');
$("#" + newValue).val(hereValue).css("background-color","#F0F8FF");;
$("#" + newValue + "_brd").val(hereValue).css("background-color","#F0F8FF");
}
});
$("input[name$='_copy']").on("blur", function() {
var hereValue = $(this).val();
var newValue = $(this).attr('name').replace('_copy', '');
$("#" + newValue).val(hereValue).css("background-color","#F0F8FF");;
$("#" + newValue + "_copy_brd").val(hereValue).css("background-color","#F0F8FF");;
});
$("input[name$='_copy_brd']").on("change", function() {
var hereValue = $(this).val();
var newValue = $(this).attr('name').replace('_copy_brd', '');
$("#" + newValue).val(hereValue).css("background-color","#F0F8FF");;
$("#" + newValue + "_copy").val(hereValue).css("background-color","#F0F8FF");;
});
$("[name^='more_']").on("mouseout", function() {
$(this).toggleClass('buttonRefraction_selected').toggleClass('underline');
});
$("[name^='more_']").on("click", function() {
$("#Visions_A").toggleClass('nodisplay');
$("#Visions_B").toggleClass('nodisplay');
});
$("#EXAM_defaults").on("click", function() {
if (!confirm('<?php echo xla("Replace all exam findings with Default values? Are you sure?"); ?>')) {
return;
}
<?php
// This query is specific to the provider.
$query = "select seq from list_options where option_id=?";
$result = sqlStatement($query, array("Eye_defaults_$providerID"));
$list = sqlFetchArray($result);
$SEQ = $list['seq'];
if (!$SEQ) {
// If there is no list for this provider, we create it here.
// This list is part of the idea to create a way to add Eye_Defaults_$providerID specific to the
// subspecialty of the doctor. ie. Eye_defaults_for_GENERAL (the only one that exists today)
// or Eye_defaults_for_CORNEA, RETINA, NEURO, PLASTICS, REFRACTIVE, PEDS, UVEITIS
// Let's see if the public likes the form itself before developing these subspecialty lists...
//Copy the Eye_Defaults_for_GENERAL to Eye_defaults_$providerID
$sql = "SELECT * from list_options where list_id = 'Eye_Defaults_for_GENERAL'";
$start = sqlStatement($sql);
$add_fields = array();
while ($val = sqlFetchArray($start)) {
$parameters .= "(?, ?, ?, ?, ?, ?),";
array_push($add_fields, "Eye_defaults_" . $providerID, $val['option_id'], $val['title'], $val['notes'], '1', $val['seq']);
}
$parameters = rtrim($parameters, ",");
$query = "SELECT max(seq) as maxseq FROM list_options WHERE list_id= 'lists'";
$pres = sqlStatement($query);
$maxseq = sqlFetchArray($pres);
$seq = $maxseq['maxseq'];
$query = "INSERT INTO `list_options`
(`list_id`, `option_id`, `title`, `seq`, `is_default`, `option_value`, `mapping`, `notes`, `codes`) VALUES
('lists', ?, ?, ?, '1', '0', '', '', '')";
$providerNAME = getProviderName($providerID);
sqlStatement($query, array("Eye_defaults_$providerID","Eye Exam Defaults $providerNAME ",$seq));
$query = "INSERT INTO `list_options` (`list_id`, `option_id`, `title`,`notes`,`activity`,`seq`) VALUES " . $parameters;
sqlStatement($query, $add_fields);
}
$query = "select * from list_options where list_id =? and activity='1' order by seq";
$DEFAULT_data = sqlStatement($query, array("Eye_defaults_$providerID"));
while ($row = sqlFetchArray($DEFAULT_data)) {
//$row['notes'] is the clinical zone (EXT,ANTSEG,RETINA,NEURO)
//$row['option_id'] is the field name
//$row['title'] is the default value to use for this provider
${$row['notes']}[$row['option_id']] = $row['title']; //This builds each clinical section into its own array (used below)
echo '$("#' . $row['option_id'] . '").val("' . $row['title'] . '").css("background-color","beige");
';
}
function startsWith($str, $needle)
{
return substr($str, 0, strlen($needle)) === $needle;
}
?>
submit_form("eye_mag");
});
$("#EXT_defaults_R").on("click", function() {
<?php
foreach ($EXT as $item => $value) {
if (startsWith($item, "R")) {
echo '$("#' . $item . '").val("' . $value . '").css("background-color","beige");
';
}
}
?>
submit_form("eye_mag");
});
$("#EXT_defaults_L").on("click", function() {
<?php
foreach ($EXT as $item => $value) {
if (startsWith($item, "L")) {
echo '$("#' . $item . '").val("' . $value . '").css("background-color","beige");
';
}
}
?>
submit_form("eye_mag");
});
$("#EXT_defaults").on("click", function() {
$("#EXT_defaults_L").trigger('click');
$("#EXT_defaults_R").trigger('click');
submit_form("eye_mag");
});
$("#EXT_R_L").on('click', function () {
$("#LBROW").val($("#RBROW").val());
$("#LUL").val($("#RUL").val());
$("#LLL").val($("#RLL").val());
$("#LMCT").val($("#RMCT").val());
$("#LADNEXA").val($("#RADNEXA").val());
submit_form("eye_mag");
});
$("#EXT_L_R").on('click', function () {
$("#RBROW").val($("#LBROW").val());
$("#RUL").val($("#LUL").val());
$("#RLL").val($("#LLL").val());
$("#RMCT").val($("#LMCT").val());
$("#RADNEXA").val($("#LADNEXA").val());
submit_form("eye_mag");
});
$("#ANTSEG_defaults_OD").on("click", function() {
<?php
foreach ($ANTSEG as $item => $value) {
if (startsWith($item, "OD")) {
echo '$("#' . $item . '").val("' . $value . '").css("background-color","beige");
';
}
}
?>
submit_form("eye_mag");
});
$("#ANTSEG_defaults_OS").on("click", function() {
<?php
foreach ($ANTSEG as $item => $value) {
if (startsWith($item, "OS")) {
echo '$("#' . $item . '").val("' . $value . '").css("background-color","beige");
';
}
}
?>
submit_form("eye_mag");
});
$("#ANTSEG_defaults").on("click", function() {
$("#ANTSEG_defaults_OD").trigger('click');
$("#ANTSEG_defaults_OS").trigger('click');
submit_form("eye_mag");
});
$("#ANTSEG_OD_OS").on('click', function () {
$("#OSCONJ").val($("#ODCONJ").val());
$("#OSCORNEA").val($("#ODCORNEA").val());
$("#OSAC").val($("#ODAC").val());
$("#OSLENS").val($("#ODLENS").val());
$("#OSIRIS").val($("#ODIRIS").val());
submit_form("eye_mag");
});
$("#ANTSEG_OS_OD").on('click', function () {
$("#ODCONJ").val($("#OSCONJ").val());
$("#ODCORNEA").val($("#OSCORNEA").val());
$("#ODAC").val($("#OSAC").val());
$("#ODLENS").val($("#OSLENS").val());
$("#ODIRIS").val($("#OSIRIS").val());
submit_form("eye_mag");
});
$("#RETINA_OD_OS").on('click', function () {
$("#OSDISC").val($("#ODDISC").val());
$("#OSCUP").val($("#ODCUP").val());
$("#OSMACULA").val($("#ODMACULA").val());
$("#OSVESSELS").val($("#ODVESSELS").val());
$("#OSVITREOUS").val($("#ODVITREOUS").val());
$("#OSPERIPH").val($("#ODPERIPH").val());
submit_form("eye_mag");
});
$("#RETINA_OS_OD").on('click', function () {
$("#ODDISC").val($("#OSDISC").val());
$("#ODCUP").val($("#OSCUP").val());
$("#ODMACULA").val($("#OSMACULA").val());
$("#ODVESSELS").val($("#OSVESSELS").val());
$("#ODVITREOUS").val($("#OSVITREOUS").val());
$("#ODPERIPH").val($("#OSPERIPH").val());
submit_form("eye_mag");
});
$("#clear_EXT_L").on('click', function () {
$("#LBROW").val('');
$("#LUL").val('');
$("#LLL").val('');
$("#LMCT").val('');
$("#LADNEXA").val('');
$("#LLF").val('');
$("#LMRD").val('');
submit_form("eye_mag");
});
$("#clear_EXT_R").on('click', function () {
$("#RBROW").val('');
$("#RUL").val('');
$("#RLL").val('');
$("#RMCT").val('');
$("#RADNEXA").val('');
$("#RLF").val('');
$("#RMRD").val('');
submit_form("eye_mag");
});
$("#RETINA_defaults_OD").on("click", function() {
<?php
foreach ($RETINA as $item => $value) {
if (startsWith($item, "OD")) {
echo '$("#' . $item . '").val("' . $value . '").css("background-color","beige");
';
}
}
?>
submit_form("eye_mag");
});
$("#RETINA_defaults_OS").on("click", function() {
<?php
foreach ($RETINA as $item => $value) {
if (startsWith($item, "OS")) {
echo '$("#' . $item . '").val("' . $value . '").css("background-color","beige");
';
}
}
?>
submit_form("eye_mag");
});
$("#RETINA_defaults").on("click", function() {
$("#RETINA_defaults_OD").trigger('click');
$("#RETINA_defaults_OS").trigger('click');
submit_form("eye_mag");
});
$("#NEURO_defaults").on("click", function() {
<?php
foreach ($NEURO as $item => $value) {
echo '$("#' . $item . '").val("' . $value . '").css("background-color","beige");
';
}
?>
submit_form("eye_mag");
});
$("#clear_EXT_R").on('click', function() {
$('.right.EXT').val('');
submit_form("eye_mag");
});
$("#clear_EXT_L").on('click', function() {
$('.left.EXT').val('');
submit_form("eye_mag");
});
$("#clear_ANTSEG_OD").on('click', function() {
$('.right.ANTSEG').val('');
submit_form("eye_mag");});
$("#clear_ANTSEG_OS").on('click', function() {
$('.left.ANTSEG').val('');
submit_form("eye_mag");
});
$("#clear_RETINA_OD").on('click', function() {
$('.right.RETINA').val('');
submit_form("eye_mag");
});
$("#clear_RETINA_OS").on('click', function() {
$('.left.RETINA').val('');
submit_form("eye_mag");
});
$("[id^='cpf_']").on('click', function() {
var to_field = this.id.match(/cpf_(.*)_(.*)/)[1];
var from_field = this.id.match(/cpf_(.*)_(.*)/)[2];
$("#"+to_field).val($("#"+from_field).val());
submit_form("eye_mag");
});
$("#MOTILITYNORMAL").on("click", function() {
$("#MOTILITY_RS").val('0');
$("#MOTILITY_RI").val('0');
$("#MOTILITY_RR").val('0');
$("#MOTILITY_RL").val('0');
$("#MOTILITY_LS").val('0');
$("#MOTILITY_LI").val('0');
$("#MOTILITY_LR").val('0');
$("#MOTILITY_LL").val('0');
$("#MOTILITY_RRSO").val('0');
$("#MOTILITY_RRIO").val('0');
$("#MOTILITY_RLSO").val('0');
$("#MOTILITY_RLIO").val('0');
$("#MOTILITY_LRSO").val('0');
$("#MOTILITY_LRIO").val('0');
$("#MOTILITY_LLSO").val('0');
$("#MOTILITY_LLIO").val('0');
for (index = '0'; index < 5; ++index) {
$("#MOTILITY_RS_"+index).html('');
$("#MOTILITY_RI_"+index).html('');
$("#MOTILITY_RR_"+index).html('');
$("#MOTILITY_RL_"+index).html('');
$("#MOTILITY_LS_"+index).html('');
$("#MOTILITY_LI_"+index).html('');
$("#MOTILITY_LR_"+index).html('');
$("#MOTILITY_LL_"+index).html('');
$("#MOTILITY_RRSO_"+index).html('');
$("#MOTILITY_RRIO_"+index).html('');
$("#MOTILITY_RLSO_"+index).html('');
$("#MOTILITY_RLIO_"+index).html('');
$("#MOTILITY_LRSO_"+index).html('');
$("#MOTILITY_LRIO_"+index).html('');
$("#MOTILITY_LLSO_"+index).html('');
$("#MOTILITY_LLIO_"+index).html('');
}
submit_form('eye_mag');
});
$("[name^='MOTILITY_']").on("click", function() {
$("#MOTILITYNORMAL").removeAttr('checked');
if (this.id.match(/(MOTILITY_([A-Z]{4}))_(.)/)) {
var zone = this.id.match(/(MOTILITY_([A-Z]{4}))_(.)/);
var index = '0';
var valued = isNaN($("#"+zone[1]).val());
if ((zone[2] =='RLSO')||(zone[2] =='LLSO')||(zone[2] =='RRIO')||(zone[2] =='LRIO')) {
//find or make a hash tage for "\"
var hash_tag = '<i class="fa fa-minus"></i>';
} else {
//find or make a hash tage for "/"
var hash_tag = '<i class="fa fa-minus"></i>';
}
} else {
var zone = this.id.match(/(MOTILITY_..)_(.)/);
var section = this.id.match(/MOTILITY_(.)(.)_/);
var section2 = section[2];
var Eye = section[1];
var SupInf = section2.search(/S|I/);
var RorLside = section2.search(/R|L/);
if (RorLside =='0') {
var hash_tag = '<i class="fa fa-minus rotate-left"></i>';
} else {
var hash_tag = '<i class="fa fa-minus"></i>';
}
}
if (valued != true && $("#"+zone[1]).val() <'4') {
valued=$("#"+zone[1]).val();
valued++;
} else {
valued = '0';
$("#"+zone[1]).val('0');
}
$("#"+zone[1]).val(valued);
for (index = '0'; index < 5; ++index) {
$("#"+zone[1]+"_"+index).html('');
}
if (valued > '0') {
for (index =1; index < (valued+1); ++index) {
$("#"+zone[1]+"_"+index).html(hash_tag);
}
}
submit_form('3');
});
$("[name^='Close_']").on("click", function() {
var section = this.id.match(/Close_(.*)$/)[1];
if (this.id.match(/Close_W_(.*)$/) != null) {
var W_section = this.id.match(/Close_W_(.*)$/)[1];
if (W_section > '1') {
$('#LayerVision_W_'+W_section).addClass('nodisplay');
$('[name$=SPH_'+W_section+']').val('');
$('[name$=CYL_'+W_section+']').val('');
$('[name$=AXIS_'+W_section+']').val('');
$('[name$=ADD_'+W_section+']').val('');
$('[name$=PRISM_'+W_section+']').val('');
$('[name$=VA_'+W_section+']').val('');
$('#RX_TYPE_'+W_section).val('');
$('#Add_Glasses').removeClass('nodisplay');
$('#W_'+W_section).val('');
submit_form('4');
} else {
$("#LayerVision_W_lightswitch").click();
}
} else if (section =="ACTMAIN") {
$("#ACTTRIGGER").trigger( "click" );
} else {
$("#LayerVision_"+section+"_lightswitch").click();
}
});
$("#EXAM_DRAW, #BUTTON_DRAW_menu, #PANEL_DRAW").on("click", function() {
if ($("#PREFS_CLINICAL").value !='0') {
show_right();
$("#PREFS_CLINICAL").val('0');
update_PREFS();
}
if ($("#PREFS_EXAM").val() != 'DRAW') {
$("#PREFS_EXAM").val('DRAW');
$("#EXAM_QP").removeClass('button_selected');
$("#EXAM_DRAW").addClass('button_selected');
$("#EXAM_TEXT").removeClass('button_selected');
update_PREFS();
}
show_DRAW();
});
$("#EXAM_QP,#PANEL_QP").on("click", function() {
if ($("#PREFS_CLINICAL").value !='0') {
$("#PREFS_CLINICAL").val('0');
update_PREFS();
}
if ($("#PREFS_EXAM").value != 'QP') {
$("#PREFS_EXAM").val('QP');
$("#EXAM_QP").addClass('button_selected');
$("#EXAM_DRAW").removeClass('button_selected');
$("#EXAM_TEXT").removeClass('button_selected');
update_PREFS();
}
HPI_sync_heights();
show_QP();
scrollTo("EXT_left");
});
$("#EXAM_TEXT,#PANEL_TEXT").on("click", function() {
// also hide QP, DRAWs, and PRIORS
hide_DRAW();
hide_QP();
hide_PRIORS();
hide_right();
show_TEXT();
for (index = '0'; index < zones.length; ++index) {
$("#PREFS_"+zones[index]+"_RIGHT").val(0);
}
update_PREFS();
$("#EXAM_DRAW").removeClass('button_selected');
$("#EXAM_QP").removeClass('button_selected');
$("#EXAM_TEXT").addClass('button_selected');
scrollTo("EXT_left");
});
$("[id^='BUTTON_TEXT_']").on("click", function() {
var zone = this.id.match(/BUTTON_TEXT_(.*)/)[1];
if (zone != "menu") {
$("#"+zone+"_right").addClass('nodisplay');
$("#"+zone+"_left").removeClass('display');
$("#"+zone+"_left_text").removeClass('display');
$("#PREFS_"+zone+"_RIGHT").val(0);
}
show_TEXT();
scrollTo("EXT_left");
});
$("[id^='BUTTON_TEXTD_']").on("click", function() {
var zone = this.id.match(/BUTTON_TEXTD_(.*)/)[1];
if (zone != "menu") {
if ((zone =="PMH") || (zone == "HPI")) {
$("#PMH_right").addClass('nodisplay');
$("#PREFS_PMH_RIGHT").val(1);
$("#HPI_right").addClass('nodisplay');
$("#PREFS_HPI_RIGHT").val(1);
var reset = $("#HPI_1").height();
$("#PMH_1").css("min-height",'0');
$("#PMH_left").height(reset-40);
$("#LayerTechnical_sections_1").css("clear","both");
} else {
$("#"+zone+"_right").addClass('nodisplay');
$("#PREFS_"+zone+"_RIGHT").val(1);
}
scrollTo(zone+"_left");
update_PREFS();
}
});
$("#EXAM_TEXT").addClass('button_selected');
if (($("#PREFS_CLINICAL").val() !='1')) {
var actionQ = "#EXAM_"+$("#PREFS_EXAM").val();
$(actionQ).trigger('click');
} else {
$("#EXAM_TEXT").addClass('button_selected');
}
if ($("#ANTSEG_prefix").val() > '') {
$("#ANTSEG_prefix_"+$("#ANTSEG_prefix").val()).addClass('button_selected');
} else {
$("#ANTSEG_prefix").val('off').trigger('change');
}
$("[name^='ACT_tab_']").on("mouseover", function() {
$(this).toggleClass('underline').css( 'cursor', 'pointer' );
});
$("[name^='ACT_tab_']").on("mouseout", function() {
$(this).toggleClass('underline');
});
$("[name^='ACT_tab_']").on("click", function() {
var section = this.id.match(/ACT_tab_(.*)/)[1];
$("[name^='ACT_']").addClass('nodisplay');
$("[name^='ACT_tab_']").removeClass('nodisplay').removeClass('ACT_selected').addClass('ACT_deselected');
$("#ACT_tab_" + section).addClass('ACT_selected').removeClass('ACT_deselected');
$("#ACT_" + section).removeClass('nodisplay');
$("#PREFS_ACT_SHOW").val(section);
//selection correct QP zone
$("[name^='NEURO_ACT_zone']").removeClass('eye_button_selected');
$("#NEURO_ACT_zone_"+ section).addClass("eye_button_selected");
$("#NEURO_ACT_zone").val(section);
update_PREFS();
});
$("#ACTTRIGGER").on("mouseout", function() {
$("#ACTTRIGGER").toggleClass('buttonRefraction_selected').toggleClass('underline');
});
if ($("#PREFS_ACT_VIEW").val() == '1') {
$("#ACTMAIN").toggleClass('nodisplay');
$("#NPCNPA").toggleClass('nodisplay');
$("#ACTNORMAL_CHECK").toggleClass('nodisplay');
$("#ACTTRIGGER").toggleClass('underline');
var show = $("#PREFS_ACT_SHOW").val();
$("#ACT_tab_"+show).trigger('click');
}
$("#ACTTRIGGER").on("click", function() {
$("#ACTMAIN").toggleClass('nodisplay').toggleClass('ACT_TEXT');
$("#NPCNPA").toggleClass('nodisplay');
$("#ACTNORMAL_CHECK").toggleClass('nodisplay');
$("#ACTTRIGGER").toggleClass('underline');
if ($("#PREFS_ACT_VIEW").val()=='1') {
$("#PREFS_ACT_VIEW").val('0');
} else {
$("#PREFS_ACT_VIEW").val('1');
}
var show = $("#PREFS_ACT_SHOW").val();
$("#ACT_tab_"+show).trigger('click');
update_PREFS();
});
$("#NEURO_COLOR").on("click", function() {
$("#ODCOLOR").val("11/11");
$("#OSCOLOR").val("11/11");
submit_form("eye_mag");
});
$("#NEURO_COINS").on("click", function() {
$("#ODCOINS").val("1.00");
//leave currency symbol out unless it is an openEMR defined option
$("#OSCOINS").val("1.00");
submit_form("eye_mag");
});
$("#NEURO_REDDESAT").on("click", function() {
$("#ODREDDESAT").val("100");
$("#OSREDDESAT").val("100");
submit_form("eye_mag");
});
$("[id^='myCanvas_']").on("mouseout", function() {
var zone = this.id.match(/myCanvas_(.*)/)[1];
submit_canvas(zone);
});
$("[id^='Undo_']").on("click", function() {
var zone = this.id.match(/Undo_Canvas_(.*)/)[1];
submit_canvas(zone);
});
$("[id^='Redo_']").on("click", function() {
var zone = this.id.match(/Redo_Canvas_(.*)/)[1];
submit_canvas(zone);
});
$("[id^='Clear_']").on("click", function() {
var zone = this.id.match(/Clear_Canvas_(.*)/)[1];
submit_canvas(zone);
});
$("[id^='Blank_']").on("click", function() {
var zone = this.id.match(/Blank_Canvas_(.*)/)[1];
$("#url_"+zone).val("../../forms/eye_mag/images/BLANK_BASE.png");
//canvas.renderAll();
drawImage(zone);
});
$("#COPY_SECTION").on("change", function() {
var start = $("#COPY_SECTION").val();
if (start =='') return;
var value = start.match(/(\w*)-(\w*)/);
var zone = value[1];
var copy_from = value[2];
if (zone =="READONLY") copy_from = $("#form_id").val();
var count_changes='0';
var data = {
action : 'copy',
copy : zone,
zone : zone,
copy_to : $("#form_id").val(),
copy_from : copy_from,
pid : $("#pid").val()
};
if (zone =="READONLY") {
//we are going to update the whole form
//Imagine you are watching on your browser while the tech adds stuff in another room on another computer.
//We are not ready to actively chart, just looking to see how far along our staff is...
//or maybe just looking ahead to see who's next in the next room?
//Either way, we are looking at a record that at present will be disabled/we cannot change...
// yet it is updating every 10 seconds if another user is making changes.
// READONLY does not show IMPPLAN changes!!!!
} else {
//here we are retrieving an old record to copy forward to today's active chart.
data = $("#"+zone+"_left_text").serialize() + "&" + $.param(data);
}
top.restoreSession();
$.ajax({
type : 'POST',
dataType : 'json',
url : "../../forms/eye_mag/save.php",
data : data,
success : function(result) {
//we have to process impplan differently
if (zone =='IMPPLAN') {
//we get a json result.IMPPLAN back from the prior visit
//we need to add that to the current list? Replace for now.
build_IMPPLAN(result.IMPPLAN);
store_IMPPLAN(result.IMPPLAN);
// need to make the Plan areas purple?
} else {
$.map(result, function(valhere, keyhere) {
if ($("#"+keyhere).val() != valhere) {
$("#"+keyhere).val(valhere).css("background-color","#CCF");
} else if (keyhere.match(/MOTILITY_/)) {
// Copy forward ductions and versions visually
// Make each blank, and rebuild them
$("[name='"+keyhere+"_1']").html('');
$("[name='"+keyhere+"_2']").html('');
$("[name='"+keyhere+"_3']").html('');
$("[name='"+keyhere+"_4']").html('');
if (keyhere.match(/(_RS|_LS|_RI|_LI|_RRSO|_RRIO|_RLSO|_RLIO|_LRSO|_LRIO|_LLSO|_LLIO)/)) {
// Show a horizontal (minus) tag. When "/" and "\" fa-icons are available will need to change.
// Maybe just use small font "/" and "\" directly.
hash_tag = '<i class="fa fa-minus"></i>';
} else { //show vertical tag
hash_tag = '<i class="fa fa-minus rotate-left"></i>';
}
for (index =1; index <= valhere; ++index) {
$("#"+keyhere+"_"+index).html(hash_tag);
}
} else if (keyhere.match(/^(ODVF|OSVF)\d$/)) {
if (valhere =='1') {
$("#FieldsNormal").prop('checked', false);
$("#"+keyhere).prop('checked', true);
$("#"+keyhere).val('1');
} else {
$("#"+keyhere).val('0');
$("#"+keyhere).prop('checked', false);
}
} else if (keyhere.match(/AMSLERO(.)/)) {
var sidehere = keyhere.match(/AMSLERO(.)/);
if (valhere < '1') valhere ='0';
$("#"+keyhere).val(valhere);
var srcvalue="AmslerO"+sidehere[1];
document.getElementById(srcvalue).src = document.getElementById(srcvalue).src.replace(/\_\d/g,"_"+valhere);
$("#AmslerO"+sidehere[1]+"value").text(valhere);
} else if (keyhere.match(/VA$/)) {
$("#"+keyhere+"_copy").val(valhere).css("background-color","#F0F8FF");;
$("#"+keyhere+"_copy_brd").val(valhere).css("background-color","#F0F8FF");;
}
});
if (zone != "READONLY") { submit_form("eye_mag"); }
}
}});
});
$("[id^='BUTTON_DRAW_']").on("click", function() {
var zone =this.id.match(/BUTTON_DRAW_(.*)$/)[1];
if (zone =="ALL") {
} else {
if ($('#PREFS_'+zone+'_RIGHT').val() =="DRAW") {
$('#BUTTON_TEXTD_'+zone).trigger("click");//closes draw
//maybe this should revert to last right panel state (qp,text)
return;
}
$("#"+zone+"_1").removeClass('nodisplay');
$("#"+zone+"_right").addClass('canvas').removeClass('nodisplay');
$("#QP_"+zone).addClass('nodisplay');
$("#PRIORS_"+zone+"_left_text").addClass('nodisplay');
$("#Draw_"+zone).removeClass('nodisplay');
$("#PREFS_"+zone+"_RIGHT").val('DRAW');
scrollTo(zone+"_left");
update_PREFS();
}
});
$("[id^='BUTTON_QP_']").on("click", function() {
var zone = this.id.match(/BUTTON_QP_(.*)$/)[1].replace(/_\d*/,'');
if (zone =='IMPPLAN2') {
$('#IMP_start_acc').slideDown();
zone='IMPPLAN';
}
if (($("#PREFS_"+zone+"_RIGHT").val() =='QP')&&(zone !='IMPPLAN')) {
$('#BUTTON_TEXTD_'+zone).trigger("click");
return;
}
$("#PRIORS_"+zone+"_left_text").addClass('nodisplay');
$("#Draw_"+zone).addClass('nodisplay');
show_QP_section(zone, '1');
$("#PREFS_"+zone+"_RIGHT").val('QP');
if ((zone == 'PMH')||(zone == 'HPI')) {
if ($('#HPI_right').css('display') == 'none') {
$("#Draw_HPI").addClass('nodisplay');
show_QP_section('HPI', '1');
$("#PREFS_HPI_RIGHT").val('QP');
}
}
HPI_sync_heights();
if (zone == 'HPI') {
if ($('#PMH_right').css('display') == 'none') {
$("#PRIORS_PMH_left_text").addClass('nodisplay');
$("#Draw_PMH").addClass('nodisplay');
show_QP_section('PMH','1');
$("#PREFS_PMH_RIGHT").val('QP');
}
if ($('#PMH_right').height() > $('#PMH_left').height()) {
$('#PMH_left').height($('#PMH_right').height());
} else {
$('#PMH_1').height($('#HPI_1').height());
}
} else if (zone == 'menu') {
show_QP();
} else if (zone == 'IMPPLAN') {
show_QP_section('IMPPLAN','1');
}
update_PREFS();
});
// set default to ccDist. Change as desired.
$('#NEURO_ACT_zone').val('CCDIST').trigger('change');
if ($("#RXStart").val() =="2") {
$("#Trifocal").trigger('click');
}
$("[id$='_loading']").addClass('nodisplay');
$("[id$='_sections']").removeClass('nodisplay');
$('#left-panel').css("right","0px");
$('#EXAM_KB').css({position: 'fixed', top: '29px'});
$('#EXAM_KB').css('display', 'block');
$('#EXAM_KB').draggable();
$('#IMP').droppable({ drop: dragto_IMPPLAN } );
$('#IMPPLAN_zone').droppable({ drop: dragto_IMPPLAN_zone } );
$('#IMPPLAN_text').droppable({ drop: dragto_IMPPLAN_zone } );
$('[id^="PLANS"]').draggable( { cursor: 'move', revert: true });
$('[id^="PLAN_"]').height( $(this).scrollHeight );
/* Sorting of diagnoses in IMP/PLAN right panel builds IMP_order[] array.
Foreach index => value in IMP_order[order,PMSFH[type][i]]:
retrieve PMSFH[type][value] and build the IMPRESSION/PLAN area
openEMR ICD-10 seems to have newlines in codetext? strip them with replace.
All the ISSUE_TYPES and their fields are available in obj.PMSFH:
'title' => $disptitle,
'status' => $statusCompute,
'enddate' => $row['enddate'],
'reaction' => $row['reaction'],
'referredby' => $row['referredby'],
'extrainfo' => $row['extrainfo'],
'diagnosis' => $row['diagnosis'],
'code' => $code,
'codedesc' => $codedesc,
'codetext' => $codetext,
'codetype' => $codetype,
'comments' => $row['comments'],
'rowid' => $row['id'],
'row_type' => $row['type']
eg. obj.IMPPLAN_items[index] = code: obj.PMSFH['POH'][value]['code'],
codedesc: obj.PMSFH['POH'][value]['codedesc'],
codetype: obj.PMSFH['POH'][value]['codetype']
*/
$('#make_new_IMP').on("click", function() {
var issue='';
if (IMP_order.length ==0) rebuild_IMP($( "#build_DX_list" ));
if (obj.IMPPLAN_items ==null) obj.IMPPLAN_items = [];
$.each(IMP_order, function( index, value ) {
issue= value.match(/(.*)_(.*)/);
if (issue[1] == "CLINICAL") {
if (!$('#inc_PE').is(':checked')) { return; }
var the_code='';
var the_codedesc='';
var the_codetext='';
var the_plan='';
for (i=0;i < obj.Clinical[issue[2]].length; i++) {
if (i == 0) {
the_code = obj.Clinical[issue[2]][i]['code'];
} else if (i < obj.Clinical[issue[2]].length) {
the_code += ', '+ obj.Clinical[issue[2]][i]['code'];
}
the_codedesc += obj.Clinical[issue[2]][i]['codedesc'] + "\r";
the_codetext += obj.Clinical[issue[2]][i]['codetext'] + "\r";
the_plan += obj.Clinical[issue[2]][i]['codedesc'] + "\r";
}
obj.IMPPLAN_items.push({
title:obj.Clinical[issue[2]][0]['title'],
code: the_code,
codetype: obj.Clinical[issue[2]][0]['codetype'],
codedesc: the_codedesc,
codetext: the_codetext,
plan: the_plan,
PMSFH_link: obj.Clinical[issue[2]][0]['PMSFH_link']
});
} else {
if (issue[1] == "PMH") {
if (!$('#inc_PMH').is(':checked')) { return; }
} else if (issue[1] == "POH"){
if (!$('#inc_POH').is(':checked')) { return; }
} else if (issue[1] == "POS"){
if (!$('#inc_POH').is(':checked')) { return; }
}
obj.IMPPLAN_items.push({
title: obj.PMSFH[issue[1]][issue[2]]['title'],
code: obj.PMSFH[issue[1]][issue[2]]['code'],
codetype: obj.PMSFH[issue[1]][issue[2]]['codetype'],
codedesc: obj.PMSFH[issue[1]][issue[2]]['codedesc'],
codetext: obj.PMSFH[issue[1]][issue[2]]['codetext'].replace(/(\r\n|\n|\r)/gm,""),
plan: obj.PMSFH[issue[1]][issue[2]]['comments'],
PMSFH_link: obj.PMSFH[issue[1]][issue[2]]['PMSFH_link']
});
}
});
build_IMPPLAN(obj.IMPPLAN_items);
store_IMPPLAN(obj.IMPPLAN_items,'1');
});
$('.building_blocks > dt ').on('click', function() {
if ( $(this).next().css('display') !== 'block' ) {
allPanels.slideUp();
$(this).next().slideDown();
} else {
allPanels.slideUp();
}
});
$('#IMP_start_acc').slideDown();
$('[id^=inc_]').on('click', function() {
build_DX_list(obj);
});
$('#active_flag').on('click', function() { check_lock('1'); });
$('#active_icon').on('click', function() { check_lock('1'); });
$("input,textarea,text,checkbox").on("change", function(){
$(this).css("background-color","#F0F8FF");
if (this.name.match(/IOP/)) { color_IOP(this); }
if ( ($(this).id != 'IMP') &&
(!this.name.match(/^inc_/)) &&
(!this.name.match(/_modifier$/))
) {
submit_form();
} else {
$("#IMP_start_acc").slideDown();
}
});
$("[name='CANVAS_selector']").on("change", function(){
//we are going to display an old image from a previous encounter
zone = this.id.match(/CANVAS_(.*)/)[1];
if (this.value != 'current') {
$("#"+zone+"_canvas").addClass('nodisplay');
$("#"+zone+"_olddrawing").removeClass('nodisplay');
show_PRIOR_CANVAS_section(zone, this.value);
} else {
$("#"+zone+"_canvas").removeClass('nodisplay');
$("#"+zone+"_olddrawing").addClass('nodisplay');
}
});
$('#IMP').on("blur", function() {
//add this DX to the obj.IMPPLAN_items array
//take the first line as the impression and the rest as the plan
var total_imp = $('#IMP').val();
$('#IMP').val('');//clear the box
var local_plan = '';
var local_code= '';
if (total_imp.length < '2') return; //reject text under two letters?
var re = /\r\n|[\n\v\f\r\x85\u2028\u2029]/; //official list of line delimiters for a regex
//local_impression is first line only[1]
var local_imp = total_imp.match(/^(.*)(?:\r\n|[\n\v\f\r\x85\u2028\u2029])(.*)/);
if (local_imp == null || local_imp[1] == null) {
local_imp = total_imp;
} else {
// If the first line was dropped in from the Builder via a draggable DX_list
// it will include the IMPRESSION + CODE.
// Consider stripping out the CODE
var local_imp_code = local_imp[1].match(/(.*)(ICD.*)$/);
if (local_imp_code) {
local_imp = local_imp_code[1];
local_code = local_imp_code[2];
local_plan = total_imp.replace(local_imp_code[0],''); //plan is line 2+ if present, strip off first line
local_plan = local_plan.replace(/^\r\n|[\n\v\f\r\x85\u2028\u2029]/,'');
} else {
local_imp = local_imp[1];
local_code = '';
local_plan = total_imp.replace(local_imp,''); //plan is line 2+ if present, strip off first line
local_plan = local_plan.replace(/^\r\n|[\n\v\f\r\x85\u2028\u2029]/,'');
}
}
if (obj.IMPPLAN_items ==null) obj.IMPPLAN_items = [];//can't push if array does not exist
obj.IMPPLAN_items.push({
form_id: $('#form_id').val(),
pid: $('#pid').val(),
title: local_imp,
plan: local_plan,
code: local_code,
codetext:'',
codetype:'',
codedesc:'',
PMSFH_link: ''
});
build_IMPPLAN(obj.IMPPLAN_items,'1');
store_IMPPLAN(obj.IMPPLAN_items);
});
$('#Add_Glasses').on('click', function() {
for (i=2; i <6; i++) { //come on, 5 current rx glasses should be enough...
if ($('#W_'+i).val() != '1') {
$('#W_'+i).val('1');
$('#LayerVision_W_'+i).removeClass('nodisplay');
if (i==5) { $('#Add_Glasses').addClass('nodisplay'); }
break;
}
}
});
$("[name='reverseme']").on('click', function() {
var target = this.id;
reverse_cylinder(target);
});
$('#code_me_now').on('click', function(event) {
event.preventDefault();
build_CODING_list();
CODING_to_feesheet(CODING_items);
});
$( ".widget a" ).button();
$( "button" ).button().on('click', function( event ) {
event.preventDefault();
});
$('#visit_codes').on('change', function() {
var data_all = $(this).val();
var data = data_all.match(/^(.*)\|(.*)\|/);
visit_code = data[2];
visit_type = data[1];
});
$('[name="visit_modifier"]').on('click', function () {
var item = this.id.match(/visit_mod_(.*)/)[1];
if ($(this).hasClass('status_on')) {
$(this).css("background-color","navy");
$(this).removeClass('status_on');
visit_modifier = visit_modifier.filter(function(e) { return e !== item });
} else {
$(this).css("background-color","red");
$(this).addClass('status_on');
visit_modifier.push(item);
}
build_CODING_list();
});
$('[id^="tabs-left-"]').on('click', function () {
var item = this.id.match(/tabs-left-(.*)/)[1];
var value = $("#setting_"+item).val();
if (value !='1') {
$("#setting_"+item).val('1');
$(this).removeClass('ui-state-default');
$('#'+ item +'_1').removeClass('nodisplay');
menu_select(item);
} else {
$("#setting_"+item).val('0');
$(this).addClass('ui-state-default');
$('#'+ item +'_1').addClass('nodisplay');
}
update_PREFS();
});
$(document).on('change','[name="visit_status"]', function (event) {
var item = $( "input[type=radio][name=visit_status]:checked" ).val();
update_appt_status(item);
});
$(document).on("click", "[name='visit_justifier']", function () {
var d = $(this).data();
var item = d.justcode;
if ($(this).hasClass('status_on')) {
$(this).css("background-color","navy");
$(this).removeClass('status_on');
visit_justifier = visit_justifier.filter(function(e) { return e !== item });
} else {
$(this).css("background-color","red");
$(this).addClass('status_on');
visit_justifier.push(item);
}
build_CODING_list();
});
$(document).on("click", "span[name$='_justifiers']", function () {
var item = parseInt( this.id.match(/_just_(.*)/)[1] ) + 1;
if ($(this).hasClass('status_on')) {
$(this).css("background-color","navy");
$(this).removeClass('status_on');
} else {
if ( $('#visit_just_'+item).hasClass('status_on') ) {
$('#visit_just_'+item).trigger('click');
}
$(this).css("background-color","red");
$(this).addClass('status_on');
if (!$('#visit_mod_25').hasClass("status_on")) {
$('#visit_mod_25').trigger('click');
}
}
build_CODING_list();
});
build_IMPPLAN(obj.IMPPLAN_items);
$('[id^="BUTTON_TAB_"]').on('click', function () {
var item = this.id.match(/BUTTON_TAB_(.*)/)[1];
$('#tabs-left-'+item).addClass('ui-state-default');
$("#setting_"+item).val('0');
$("#"+item+'_1').addClass('nodisplay');
$("#tabs_left").removeClass('nodisplay');
update_PREFS();
});
show_by_setting();
$("input,textarea,text").on("focus", function(){
$(this).css("background-color","#ffff99");
});
//This listener no longer works in tabs because of the new tab wrapper.
$(window).bind('onbeforeunload', function(){
alert('Closing time');
if ($('#chart_status').val()=="on") {
unlock();
}
});
});