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