Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <html>
- <head>
- <script>
- const EARLIEST_TIME = 0800;
- const LATEST_TIME = 1800;
- //constants used for isValidTime()
- const Months30 = [4, 6, 9, 11];
- const Months31 = [1, 3, 5, 7, 8, 10, 12];
- //constants used for isValidDate()
- const tableAppsHeader = ["Priority","Subject","Date","Start Time", "End Time"];
- var aryAppointments = []
- var testData = [];
- var testCount = 0;
- var aryPriority = []
- var arySubject = []
- var aryDates = [];
- var aryStartTime = []
- var aryEndTime = []
- //major arrays used for storing details of appointments
- var startTime;
- var endTime;
- //variables necessary for isValidTime() function
- var dateValidity;
- //variables used for isValidDate()
- var tableRow = document.createElement("tr");
- var tableData = document.createElement("td");
- var tableText = document.createTextNode("");
- var tableApps;
- var displayedAppCount = 0;
- //showapps?
- var inputPriority;
- var inputSubject;
- var inputStartTime;
- var inputEndTime;
- var formBody;
- var inputCount = 0;
- //
- function isValidTime(){
- startTime = document.getElementById('startTime').value;
- endTime = document.getElementById('endTime').value;
- if (EARLIEST_TIME <= startTime < LATEST_TIME && EARLIEST_TIME <= endTime < LATEST_TIME && startTime < endTime){
- return isValidTime;
- }
- else{
- alert("Invalid time has been entered.");
- }
- }
- //function designed to ensure the time is valid per requirements for the schedule
- function isValidDate() {
- dateInput = document.getElementById('appDate').value;
- //Take userinput and break it up into substrings
- subStrings = (dateInput).split('/');
- var dateDay = parseInt(subStrings[0]);
- var dateMonth = parseInt(subStrings[1]);
- var dateYear = parseInt(subStrings[2]);
- var startTime = document.getElementById('startTime').value;
- var leapYear;
- var daysInMonth = false;
- //Variables to calculate if the user input exceeds the current date/time
- var currentDate = new Date().getTime();
- var oldDateObject = new Date(subStrings[2], subStrings[1] - 1, subStrings[0]);
- alert(startTime)
- var dateObject = oldDateObject.getTime() + startTime*60000
- alert(currentDate + " " + dateObject)
- //Calculate if user input is leap year
- if (((dateYear % 4 == 0) && (dateYear % 100 != 0)) || (dateYear % 400 == 0)) {
- leapYear = true;
- } else {
- leapYear = false;
- }
- // Validate amount of days in month of user input
- if (dateMonth === 2) {
- if (leapYear) {
- if (dateDay <= 29) {
- daysInMonth = true;
- }
- } else if (!leapYear) {
- if (dateDay <= 28) {
- daysInMonth = true;
- }
- }
- } else {
- if (Months30.indexOf(dateMonth) > -1) {
- if (dateDay <= 30) {
- daysInMonth = true;
- }
- } else if (Months31.indexOf(dateMonth) > -1) {
- if (dateDay <= 31) {
- daysInMonth = true;
- }
- }
- }
- if (dateMonth <= 12 && dateMonth >= 1) {
- if (dateYear > 1583) {
- if (daysInMonth) {
- if (currentDate < dateObject) {
- dateValidity = true;
- } else {
- alert("Invalid date. Date/time has already passed.")
- }
- }else{
- alert("Invalid date. (Days < Days in month)")
- }
- } else {
- alert("Invalid date(dateYear > 1583)")
- }
- } else {
- alert("Invalid date(1 <= dateMonth <= 12)")
- }
- return dateValidity;
- }
- function isConcurrentAppintment() {
- var i = 0 // Iterative counter
- var indexOfDates = [];
- dateInput = document.getElementById('appDate').value;
- startTime = document.getElementById('startTime').value;
- endTime = document.getElementById('endTime').value;
- // Examine each element of arrayDates for dateInput and record indexes
- for(i=0; i<aryDates.length; i++) {
- if(aryDates[i] == dateInput)
- indexOfDates.push(aryDates.indexOf(dateInput))
- }
- // Check if appointment time is concurrent with another appointment
- i = 0
- while (i < indexOfDates.length) {
- if (startTime < aryStartTime[indexOfDates[i]] || aryEndTime[indexOfDates[i]] < endTime) {
- i++;
- return false
- } else {
- alert("Appointment's details are concurrent with another appointment")
- return true
- }
- }
- }
- function addAppointments(){
- var check1 = document.getElementById("priority1").checked;
- var check2 = document.getElementById("priority2").checked;
- var check3 = document.getElementById("priority3").checked;
- if(isValidTime()) {
- if(isValidDate()){
- if (!isConcurrentAppintment()){
- if (check1== true){
- inputPriority = document.getElementById("priority1").value;
- }
- if (check2== true){
- inputPriority = document.getElementById("priority2").value;
- }
- if (check3== true){
- inputPriority = document.getElementById("priority3").value;
- }
- dateInput = document.getElementById('appDate').value;
- inputSubject = document.getElementById('subject').value;
- inputStartTime = document.getElementById("startTime").value;
- inputEndTime = document.getElementById("endTime").value;
- aryDates.push(dateInput);
- aryPriority.push(inputPriority);
- arySubject.push(inputSubject);
- aryStartTime.push(inputStartTime);
- aryEndTime.push(inputEndTime);
- aryAppointments.push([aryPriority[inputCount],arySubject[inputCount],aryDates[inputCount],aryStartTime[inputCount],aryEndTime[inputCount]])
- alert("Your appointment has successfully been added.")
- showAppointments();
- inputCount++;
- }
- }
- }
- else{
- alert("Appointment's details are incorrect, please try again.")
- }
- formBody = document.getElementById('formBody').reset();
- testData = aryAppointments;
- alert(testData);
- alert(aryAppointments);
- }
- function showAppointments(){
- var tableData1;
- var tableData2;
- var tableData3;
- var tableData4;
- var tableData5;
- var innerData1;
- var innerData2;
- var innerData3;
- var innerData4;
- var innerData5;
- var tableReset;
- var runCount= 0;
- if (testCount > 0){
- for (runCount = 0; runCount < aryAppointments.length; runCount++){
- tableApps=document.getElementById("tableApps");
- tableApps.deleteRow(-1);
- }
- for(runCount= 0 ;runCount < aryAppointments.length;runCount++){
- if(testData == aryAppointments){
- tableRow = tableApps.insertRow(-1);
- }
- tableData1 = tableRow.insertCell(0);
- tableData2 = tableRow.insertCell(1);
- tableData3 = tableRow.insertCell(2);
- tableData4 = tableRow.insertCell(3);
- tableData5 = tableRow.insertCell(4);
- innerData1 = tableData1.innerHTML = aryAppointments[runCount][0];
- innerData2 = tableData2.innerHTML = aryAppointments[runCount][1];
- innerData3 = tableData3.innerHTML = aryAppointments[runCount][2];
- innerData4 = tableData4.innerHTML = aryAppointments[runCount][3];
- innerData5 = tableData5.innerHTML = aryAppointments[runCount][4];
- }
- testCount++;
- alert(testData);
- alert(aryAppointments);
- }
- else{
- for (runCount = 0; runCount < aryAppointments.length; runCount++){
- tableApps = document.getElementById("tableApps");
- tableRow = tableApps.insertRow(-1);
- tableData1 = tableRow.insertCell(0);
- tableData2 = tableRow.insertCell(1);
- tableData3 = tableRow.insertCell(2);
- tableData4 = tableRow.insertCell(3);
- tableData5 = tableRow.insertCell(4);
- innerData1 = tableData1.innerHTML = aryAppointments[runCount][0];
- innerData2 = tableData2.innerHTML = aryAppointments[runCount][1];
- innerData3 = tableData3.innerHTML = aryAppointments[runCount][2];
- innerData4 = tableData4.innerHTML = aryAppointments[runCount][3];
- innerData5 = tableData5.innerHTML = aryAppointments[runCount][4];
- }
- testCount++
- }
- }
- function shuffleAppointments(){
- var shuffleArray = aryAppointments.length;
- var displayCount = shuffleArray;
- var tempValue;
- var randIndex;
- var tableApps;
- var tableRows;
- var htmlChange;
- while (shuffleArray!==0){
- randIndex = Math.floor(Math.random() * shuffleArray);
- shuffleArray-=1;
- tempValue = aryAppointments[shuffleArray];
- aryAppointments[shuffleArray] = aryAppointments[randIndex];
- aryAppointments[randIndex] =tempValue;
- }
- showAppointments();
- }
- function tallyAppointments() {
- var tally = [];
- var formatDates = [];
- var max;
- var min;
- var i;
- var count; //Iterative counter
- var arrayLength;
- var output = '';
- var displayCount = 0;
- //Split each date in array and rearrange so correct dates may be obtained when using Date.parse
- for(var i=0; i<aryDates.length; i++) {
- var subStrings = aryDates[i].split('/')
- var dateObject = new Date(subStrings[2], subStrings[1] - 1, subStrings[0]); // month is 0-based
- formatDates.push(dateObject.getTime())
- }
- // Calculate the min date and max date, record the difference between the two (the difference will be the length of the other arrays)
- //Min
- min = Number.POSITIVE_INFINITY;
- for (i=0; i<formatDates.length; i++){
- if (formatDates[i] < min)
- min = formatDates[i];
- }
- //Max
- max = Number.NEGATIVE_INFINITY;
- for (i=0; i<formatDates.length; i++){
- if (formatDates[i] > max)
- max = formatDates[i];
- }
- arrayLength = ((max - min) / (1000 * 60 * 60 * 24) + 1) //convert length milliseconds to days
- //tally = new Array(arrayLength) //Tally length is number of days between min and max
- for(i=0; i<arrayLength; i++){
- count = 0
- index = ((formatDates[i] - min) / (1000 * 60 * 60 * 24))
- for(j=0; j<aryDates.length; j++){
- if (aryDates[i] === aryDates[j]) {
- count++
- }
- tally[index] = count
- }
- }
- // Output into table. Converts index back to date dd/mm/yyyy.
- tableSummary = document.getElementById("tableSummary");
- tableData = tableSummary.insertRow(-1);
- output += '<table border="1">';
- output += '<tr><th>Date</th><th>Count</th></tr>';
- for(i=0; i<tally.length; i++){
- var date = new Date(min + (i *(1000 * 60 * 60 * 24)));
- var date = date.getDate() + "/" + (parseInt(date.getMonth())+1) + "/" + date.getFullYear()
- output += '<tr><td>' + date + '</td><td>';
- for(var j=0; j<tally[i]; j++){
- output += '#';
- }
- output += '</td></tr>';
- }
- output += '</table>';
- document.writeln(output);
- }
- </script>
- </head>
- <body>
- <section>
- <h1>Schedule Editor</h1>
- <form id='formBody'>
- <p>Priority:</p>
- <input type="radio" name="priority" id="priority1" value="high" >High</input>
- <input type="radio" name="priority" id="priority2" value="moderate" checked>Moderate</input>
- <input type="radio" name="priority" id="priority3" value="low">Low</input>
- <!--priority radio buttons section-->
- <p>Subject:</p>
- <input type='text' size='30' id='subject'/>
- <!--Subject input section-->
- <p>Date:</p>
- <input type='text' size='30' id='appDate'/>
- <!--Date input-->
- <p>Start Time:</p>
- <select id='startTime'>
- <option value=0800>0800</option>
- <option value=0900>0900</option>
- <option value=1000>1000</option>
- <option value=1100>1100</option>
- <option value=1200>1200</option>
- <option value=1300>1300</option>
- <option value=1400>1400</option>
- <option value=1500>1500</option>
- <option value=1600>1600</option>
- <option value=1700>1700</option>
- <option value=1800>1800</option>
- </select>
- <p>End Time:</p>
- <select id='endTime'>
- <option value=0800>0800</option>
- <option value=0900>0900</option>
- <option value=1000>1000</option>
- <option value=1100>1100</option>
- <option value=1200>1200</option>
- <option value=1300>1300</option>
- <option value=1400>1400</option>
- <option value=1500>1500</option>
- <option value=1600>1600</option>
- <option value=1700>1700</option>
- <option value=1800>1800</option>
- </select>
- <input type='button' onclick='addAppointments()' value='Add appointment' name='addAppointment'>
- <hr>
- </section>
- <section>
- <table border='1' id='tableApps'>
- <tr>
- <td width = '120'><strong>Priority</strong></td>
- <td width = '120'><strong>Subject</strong></td>
- <td width = '120'><strong>Date</strong></td>
- <td width = '120'><strong>Start Time</strong></td>
- <td width = '120'><strong>End Time</strong></td>
- </tr>
- </table>
- <form>
- <input type='button' onclick='shuffleAppointments()' value='Randomise Appointments' name='randomApps'>
- <input type='button' onclick='sortAppointments()' value='Sort Appointments' name='sortApps'>
- <select>
- <option value='priority'>Priority</option>
- <option value='date'>Date</option>
- <option value='startTime'>Start Time</option>
- <option value='endTime'>End Time</option>
- <option value='subject'>Subject</option>
- </select>
- </form>
- <hr>
- </section>
- <section>
- <table border='1' id='tableSummary'>
- <tr>
- <td><strong>Date</strong></td>
- <td><strong>Name</strong></td>
- </tr>
- </table>
- <form>
- <input type='button' onclick='tallyAppointments()' value='Summary' name='tallyApps'>
- </form>
- <hr>
- </section>
- <section>
- <table border='1'>
- <tr>
- <td><strong>Priority</strong></td>
- <td><strong>Date</strong></td>
- <td><strong>Start Time</strong></td>
- <td><strong>End Time</strong></td>
- <td><strong>Subject</strong></td>
- </tr>
- </table>
- <form>
- <input type='button' onclick='doit()' value='Search' name='searchName'>
- <input type='text' size='15'>
- </form>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement