// ==UserScript==
// @name Oscar Billing
// @namespace oscar
// @description Author: Andrew Renner - Adds Billing Quick Buttons and cookie functionality
// @version 2.0
// @include *
// ==/UserScript==
// get the html
var htmlbody = document.body.innerHTML;
// store the navigation buttons
var navButtons = ' ';
navButtons += ' ';
navButtons += ' ';
// **** uncomment these three lines for testing **** //
/*navButtons += ' ';
navButtons += ' ';
navButtons += ' ';*/
navButtons += ' Save Settings';
// insert the navigation buttons
var pattern = /Ontario Billing<\/font> <\/b>/gi;
var replacementText = 'Ontario Billing'+ navButtons;
// replace the patterned text
newbody = htmlbody.replace(pattern,replacementText);
// alter service date text box to allow editing and add in ID
pattern = /name="service_date" readonly="readonly"/gi;
replacementText = 'name="service_date" id="service_date"';
// replace the patterned text
newbody = newbody.replace(pattern,replacementText);
// altered 2012-09-11
pattern = /id="service_date" name="service_date" readonly=""/gi;
replacementText = 'name="service_date" id="service_date"';
// replace the patterned text
newbody = newbody.replace(pattern,replacementText);
// altered 2012-09-11 - Clinic Billing
pattern = /name="service_date" readonly=""/gi;
replacementText = 'name="service_date" id="service_date"';
// replace the patterned text
newbody = newbody.replace(pattern,replacementText);
// set the new html
document.body.innerHTML = newbody;
// add event listeners to the buttons
addGreaseMonkeyButtonEvents();
// retrieve retain settings value
var rs = readCookie('retainSettings');
// load values from the cookie
loadSettings(rs);
// load the servicedate
loadServiceDate(rs);
// relink the calendars
relinkCalendars();
function relinkCalendars()
{
// relink the calendars
unsafeWindow.Calendar.setup( { inputField : "xml_vdate", ifFormat : "%Y-%m-%d", showsTime :false, button : "xml_vdate_cal", singleClick : true, step : 1 } );
unsafeWindow.Calendar.setup( { inputField : "service_date", ifFormat : "%Y-%m-%d", showsTime :false, button : "service_date_cal", singleClick : true, step : 1 } );
}
function addGreaseMonkeyButtonEvents()
{
/* add event listeners to the greasemonkey buttons so that they can use the javascript functions in greasemonkey */
// **** uncomment these three lines for testing **** //
/*document.getElementById("saveCookie").addEventListener("click", saveSettings,false);
document.getElementById("readCookie").addEventListener("click", testReadCookie,false);
document.getElementById("eraseCookie").addEventListener("click", eraseCookie,false);*/
document.getElementById("emergPatient").addEventListener("click", setEmergPatient,false);
document.getElementById("outPatient").addEventListener("click", setOutPatient,false);
document.getElementById("clinicPatient").addEventListener("click", setClinicPatient,false);
document.forms[0].elements["submit"].addEventListener("click", saveSettings,false);
}
function setCookie()
{
// append the new key value pairs to the cookie
createCookie("service_date", document.getElementById("service_date").value,7);
createCookie("xml_visittype", document.forms[0].elements["xml_visittype"].value,7);
createCookie("xml_location", document.forms[0].elements["xml_location"].value,7);
createCookie("xml_vdate", document.getElementById("xml_vdate").value,7);
createCookie("retainSettings", document.getElementById("retainSettings").checked,7);
}
function createCookie(name,value,exdays)
{
if (exdays) {
var exdate = new Date();
exdate.setDate(exdate.getDate() + exdays);
var expires = "; expires="+exdate.toUTCString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function eraseCookie()
{
createCookie('service_date',"",-1);
createCookie('xml_visittype',"",-1);
createCookie('xml_location',"",-1);
createCookie('xml_vdate',"",-1);
createCookie('retainSettings',document.getElementById('retainSetting').checked,7);
}
function testReadCookie()
{
alert(document.cookie);
}
function saveSettings()
{
if (document.getElementById('retainSettings').checked == true)
{
setCookie();
}
else
{
eraseCookie();
}
}
function loadSettings(rs)
{
setRetainSettings(rs);
if (rs == 'true')
{
setLocation(readCookie('xml_location'));
setVisitType(readCookie('xml_visittype'));
setAdmissionDate(readCookie('xml_vdate'));
//setServiceDate(readCookie('service_date'));
}
}
function loadServiceDate(rs)
{
var qsDate = getQueryVariable('appointment_date');
var curDate = new Date();
//curDate = curDate.getFullYear() + '-' + right('0' + (+curDate.getMonth() +1),2) + '-' + right('0' + curDate.getDate(),2);
curDate = curDate.getFullYear() + '-' + (+curDate.getMonth() +1) + '-' + curDate.getDate();
// if QSDATE <> today then load from QS ELSE load from RS
if (curDate == qsDate)
{
if (rs == 'true')
setServiceDate(readCookie('service_date'));
else
setServiceDate(curDate);
}
else
setServiceDate(qsDate);
}
// added 2011-12-05
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=");
if (pair[0] == variable) {
return unescape(pair[1]);
}
}
//alert('Query Variable ' + variable + ' not found');
}
/*
function Left(str, n){
if (n <= 0)
return "";
else if (n > String(str).length)
return str;
else
return String(str).substring(0,n);
}
function Right(str, n){
if (n <= 0)
return "";
else if (n > String(str).length)
return str;
else {
var iLen = String(str).length;
return String(str).substring(iLen, iLen - n);
}
}*/
function right( str, count )
{
return str.substring( str.length - count );
}
function left( str, count )
{
return str.substring( 0, count );
}
function setLocation(value)
{
// named form not working from greasemonkey - must use the form index 0 based
document.forms[0].elements["xml_location"].value = value;
}
function setVisitType(value)
{
document.forms[0].elements["xml_visittype"].value = value;
}
function setAdmissionDate(value)
{
document.getElementById("xml_vdate").value = value;
}
function setServiceDate(value)
{
document.getElementById("service_date").value = value;
}
function setRetainSettings(value)
{
if (value=='true')
document.getElementById("retainSettings").checked = 'checked';
else
document.getElementById("retainSettings").checked = '';
}
function setOutPatient()
{
setVisitType('01| Outpatient Visit');
setLocation('3734|GRH - L & D');
setAdmissionDate('');
}
function setEmergPatient()
{
setVisitType('03| ER');
setLocation('4107|GRH - Emerg');
setAdmissionDate('');
}
function setClinicPatient()
{
setVisitType('00| Clinic Visit');
setLocation('0000|Not Applicable');
setAdmissionDate('');
}