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