// ==UserScript== // Author: Andrew Renner (modified by Lawrence Kwan) // Date: 2016-01-05 // Version: 1.3 // History: 1.0 - 2011-09-21 - Created Script // 1.1 - 2011-09-23 - added functionality to select the following monday when the date lands on Saturday or Sunday // 1.2 - 2011-09-23 - added functionality for one click 1 2 and 4 week jumps // 1.3 - 2016-01-05 - replace with unique input ids for second navButtons to avoid conflict in some browser. // ******** You must change the URL in the namespace and include to your url *************** // @name Oscar Schedule FP // @namespace oscar // @description Add on for the main appointment screen that allows user to jump forward or back several preset amounts. You can also insert a specific number and jump forward or back that many weeks or months. // @include https://*/*/provider/providercontrol.jsp?* // @version 1.3 // @grant none // ==/UserScript== // store the navigation buttons var navButtons = ' 
' var navButtons2 =' 
' // insert the navigation buttons var pattern = /alendar<\/a>/i; var pattern2 = /alendar<\/a><\/td>/i; var replacementText = 'alendar'+ navButtons; var replacementText2 = 'alendar'+ navButtons2 + ''; document.body.innerHTML = document.body.innerHTML.replace(pattern,replacementText).replace(pattern2,replacementText2); // add event listeners to the buttons addGreaseMonkeyButtonEvents(); var qsParm = new Array(); function addGreaseMonkeyButtonEvents() { /* add event listeners to the greasemonkey buttons so that they can use the javascript functions in greasemonkey */ document.getElementById("monthBackward").addEventListener("click", function(){getLocation(this.id,document.getElementById('multiplier').value)},false); document.getElementById("monthForward").addEventListener("click", function(){getLocation(this.id,document.getElementById('multiplier').value)},false); document.getElementById("weekBackward").addEventListener("click", function(){getLocation(this.id,document.getElementById('multiplier').value)},false); document.getElementById("weekForward").addEventListener("click", function(){getLocation(this.id,document.getElementById('multiplier').value)},false); document.getElementById("weekForward1").addEventListener("click", function(){getLocation('weekForward',1)},false); document.getElementById("weekForward2").addEventListener("click", function(){getLocation('weekForward',2)},false); document.getElementById("weekForward3").addEventListener("click", function(){getLocation('weekForward',3)},false); document.getElementById("weekForward4").addEventListener("click", function(){getLocation('weekForward',4)},false); document.getElementById("weekForward6").addEventListener("click", function(){getLocation('weekForward',6)},false); document.getElementById("dayForward5").addEventListener("click", function(){getLocation('weekForward',5/7)},false); document.getElementById("dayForward7").addEventListener("click", function(){getLocation('weekForward',7/7)},false); document.getElementById("dayForward10").addEventListener("click", function(){getLocation('weekForward',10/7)},false); document.getElementById("monthForward1").addEventListener("click", function(){getLocation('weekForward',4)},false); document.getElementById("monthForward3").addEventListener("click", function(){getLocation('weekForward',12)},false); document.getElementById("monthForward6").addEventListener("click", function(){getLocation('weekForward',25)},false); document.getElementById("monthForward12").addEventListener("click", function(){getLocation('weekForward',367/7)},false); document.getElementById("bmonthBackward").addEventListener("click", function(){getLocation(this.id,document.getElementById('bmultiplier').value)},false); document.getElementById("bmonthForward").addEventListener("click", function(){getLocation(this.id,document.getElementById('bmultiplier').value)},false); document.getElementById("bweekBackward").addEventListener("click", function(){getLocation(this.id,document.getElementById('bmultiplier').value)},false); document.getElementById("bweekForward").addEventListener("click", function(){getLocation(this.id,document.getElementById('bmultiplier').value)},false); document.getElementById("bweekForward1").addEventListener("click", function(){getLocation('bweekForward',1)},false); document.getElementById("bweekForward2").addEventListener("click", function(){getLocation('bweekForward',2)},false); document.getElementById("bweekForward3").addEventListener("click", function(){getLocation('bweekForward',3)},false); document.getElementById("bweekForward4").addEventListener("click", function(){getLocation('bweekForward',4)},false); document.getElementById("bweekForward6").addEventListener("click", function(){getLocation('bweekForward',6)},false); document.getElementById("bdayForward5").addEventListener("click", function(){getLocation('bweekForward',5/7)},false); document.getElementById("bdayForward7").addEventListener("click", function(){getLocation('bweekForward',7/7)},false); document.getElementById("bdayForward10").addEventListener("click", function(){getLocation('bweekForward',10/7)},false); document.getElementById("bmonthForward1").addEventListener("click", function(){getLocation('bweekForward',4)},false); document.getElementById("bmonthForward3").addEventListener("click", function(){getLocation('bweekForward',12)},false); document.getElementById("bmonthForward6").addEventListener("click", function(){getLocation('bweekForward',25)},false); document.getElementById("bmonthForward12").addEventListener("click", function(){getLocation('bweekForward',367/7)},false); } function getLocation(ID,Multiplier) { // initialize array initializeQSArray(); // get query string values getQSValues(); // create the current date - note months are 0 based --> 0-11 var dateSelected=new Date(qsParm['year'],qsParm['month']-1,qsParm['day']); // set the item type and value to be added switch (ID) { case 'weekBackward': case 'bweekBackward': itemType = 'w'; // negative * 7 days * weeks valueToAdd = -1 * Multiplier; break; case 'weekForward': case 'bweekForward': itemType = 'w'; valueToAdd = Multiplier; break; case 'monthBackward': case 'bmonthBackward': itemType = 'm'; valueToAdd = -1 * Multiplier; break; case 'monthForward': case 'bmonthForward': itemType = 'm'; valueToAdd = Multiplier; break; } //get new date dateDestination = DateAdd(itemType, dateSelected, valueToAdd); // check the day of the new date - if Saturday or Sunday move to the following Monday - 0:Sunday 1:Monday 2:Tuesday 3:Wednesday 4:Thursday 5:Friday 6:Saturday var DayID = dateDestination.getDay(); switch (DayID) { case 0: // Sunday dateDestination = DateAdd('d', dateDestination, 1); break; case 6: // Saturday dateDestination = DateAdd('d', dateDestination, 2); break; } // build the new location string destination = 'providercontrol.jsp?year=' + dateDestination.getFullYear() + '&month='+ getMonthNumber(dateDestination.getMonth()) +'&day='+dateDestination.getDate()+'&view=' +qsParm['view']+ '&curProvider='+qsParm['curProvider']+'&curProviderName='+qsParm['curProviderName'] + '&displaymode='+qsParm['displaymode']+'&dboperation='+qsParm['dboperation'] // move the calendar to the new date window.location = destination; } // get the querystring values from the url and put them in the array function getQSValues() { var query = window.location.search.substring(1); var parms = query.split('&'); var key; var val; for (var i=0; i 0) { key = parms[i].substring(0,pos); val = parms[i].substring(pos+1); qsParm[key] = val; } } } function initializeQSArray() { //initialize array qsParm['year'] = null; qsParm['month'] = null; qsParm['day'] = null; qsParm['view'] = null; qsParm['curProvider'] = null; qsParm['curProviderName'] = null; qsParm['displaymode'] = null; qsParm['dboperation'] = null; } function getMonthNumber(month) { // add 1 to the month for the oscar querystring return month + 1; } function DateAdd(ItemType, DateToWorkOn, ValueToBeAdded) { switch (ItemType) { case 'd': //add days DateToWorkOn.setDate(DateToWorkOn.getDate() + ValueToBeAdded); break; case 'w': //add weeks ValueToBeAdded = ValueToBeAdded*7; DateToWorkOn.setDate(DateToWorkOn.getDate() + ValueToBeAdded); break; case 'm': //add months DateToWorkOn.setMonth(DateToWorkOn.getMonth() + parseInt(ValueToBeAdded)); break; case 'y': //add years DateToWorkOn.setYear(DateToWorkOn.getFullYear() + ValueToBeAdded); break; //time portion case 'h': //add hours DateToWorkOn.setHours(DateToWorkOn.getHours() + ValueToBeAdded); break; case 'n': //add minutes DateToWorkOn.setMinutes(DateToWorkOn.getMinutes() + ValueToBeAdded); break; case 's': //add seconds DateToWorkOn.setSeconds(DateToWorkOn.getSeconds() + ValueToBeAdded); break; } return DateToWorkOn; }