Advertisement
Guest User

Untitled

a guest
May 26th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.62 KB | None | 0 0
  1. <html>
  2. <head>
  3. <script>
  4. const EARLIEST_TIME = 0800;
  5. const LATEST_TIME = 1800;
  6. //constants used for isValidTime()
  7. const Months30 = [4, 6, 9, 11];
  8. const Months31 = [1, 3, 5, 7, 8, 10, 12];
  9. //constants used for isValidDate()
  10. const tableAppsHeader = ["Priority","Subject","Date","Start Time", "End Time"];
  11.  
  12.  
  13. var aryAppointments = []
  14. var testData = [];
  15. var testCount = 0;
  16. var aryPriority = []
  17. var arySubject = []
  18. var aryDates = [];
  19. var aryStartTime = []
  20. var aryEndTime = []
  21. //major arrays used for storing details of appointments
  22. var startTime;
  23. var endTime;
  24. //variables necessary for isValidTime() function
  25.  
  26. var dateValidity;
  27. //variables used for isValidDate()
  28. var tableRow = document.createElement("tr");
  29. var tableData = document.createElement("td");
  30. var tableText = document.createTextNode("");
  31. var tableApps;
  32. var displayedAppCount = 0;
  33. //showapps?
  34. var inputPriority;
  35. var inputSubject;
  36. var inputStartTime;
  37. var inputEndTime;
  38. var formBody;
  39. var inputCount = 0;
  40. //
  41.  
  42.  
  43. function isValidTime(){
  44. startTime = document.getElementById('startTime').value;
  45. endTime = document.getElementById('endTime').value;
  46. if (EARLIEST_TIME <= startTime < LATEST_TIME && EARLIEST_TIME <= endTime < LATEST_TIME && startTime < endTime){
  47. return isValidTime;
  48. }
  49. else{
  50. alert("Invalid time has been entered.");
  51. }
  52.  
  53. }
  54. //function designed to ensure the time is valid per requirements for the schedule
  55.  
  56.  
  57. function isValidDate() {
  58. dateInput = document.getElementById('appDate').value;
  59. //Take userinput and break it up into substrings
  60. subStrings = (dateInput).split('/');
  61. var dateDay = parseInt(subStrings[0]);
  62. var dateMonth = parseInt(subStrings[1]);
  63. var dateYear = parseInt(subStrings[2]);
  64. var startTime = document.getElementById('startTime').value;
  65. var leapYear;
  66. var daysInMonth = false;
  67. //Variables to calculate if the user input exceeds the current date/time
  68. var currentDate = new Date().getTime();
  69. var oldDateObject = new Date(subStrings[2], subStrings[1] - 1, subStrings[0]);
  70. alert(startTime)
  71. var dateObject = oldDateObject.getTime() + startTime*60000
  72. alert(currentDate + " " + dateObject)
  73. //Calculate if user input is leap year
  74. if (((dateYear % 4 == 0) && (dateYear % 100 != 0)) || (dateYear % 400 == 0)) {
  75. leapYear = true;
  76. } else {
  77. leapYear = false;
  78. }
  79.  
  80. // Validate amount of days in month of user input
  81. if (dateMonth === 2) {
  82. if (leapYear) {
  83. if (dateDay <= 29) {
  84. daysInMonth = true;
  85. }
  86. } else if (!leapYear) {
  87. if (dateDay <= 28) {
  88. daysInMonth = true;
  89. }
  90. }
  91. } else {
  92. if (Months30.indexOf(dateMonth) > -1) {
  93. if (dateDay <= 30) {
  94. daysInMonth = true;
  95. }
  96. } else if (Months31.indexOf(dateMonth) > -1) {
  97. if (dateDay <= 31) {
  98. daysInMonth = true;
  99. }
  100. }
  101. }
  102.  
  103. if (dateMonth <= 12 && dateMonth >= 1) {
  104. if (dateYear > 1583) {
  105. if (daysInMonth) {
  106. if (currentDate < dateObject) {
  107. dateValidity = true;
  108. } else {
  109. alert("Invalid date. Date/time has already passed.")
  110. }
  111. }else{
  112. alert("Invalid date. (Days < Days in month)")
  113. }
  114. } else {
  115. alert("Invalid date(dateYear > 1583)")
  116. }
  117. } else {
  118. alert("Invalid date(1 <= dateMonth <= 12)")
  119. }
  120. return dateValidity;
  121. }
  122.  
  123.  
  124. function isConcurrentAppintment() {
  125. var i = 0 // Iterative counter
  126. var indexOfDates = [];
  127.  
  128. dateInput = document.getElementById('appDate').value;
  129. startTime = document.getElementById('startTime').value;
  130. endTime = document.getElementById('endTime').value;
  131.  
  132. // Examine each element of arrayDates for dateInput and record indexes
  133. for(i=0; i<aryDates.length; i++) {
  134. if(aryDates[i] == dateInput)
  135. indexOfDates.push(aryDates.indexOf(dateInput))
  136. }
  137. // Check if appointment time is concurrent with another appointment
  138. i = 0
  139. while (i < indexOfDates.length) {
  140. if (startTime < aryStartTime[indexOfDates[i]] || aryEndTime[indexOfDates[i]] < endTime) {
  141. i++;
  142. return false
  143. } else {
  144. alert("Appointment's details are concurrent with another appointment")
  145. return true
  146. }
  147. }
  148. }
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160. function addAppointments(){
  161. var check1 = document.getElementById("priority1").checked;
  162. var check2 = document.getElementById("priority2").checked;
  163. var check3 = document.getElementById("priority3").checked;
  164. if(isValidTime()) {
  165. if(isValidDate()){
  166. if (!isConcurrentAppintment()){
  167.  
  168. if (check1== true){
  169. inputPriority = document.getElementById("priority1").value;
  170. }
  171. if (check2== true){
  172. inputPriority = document.getElementById("priority2").value;
  173. }
  174. if (check3== true){
  175. inputPriority = document.getElementById("priority3").value;
  176. }
  177. dateInput = document.getElementById('appDate').value;
  178.  
  179. inputSubject = document.getElementById('subject').value;
  180.  
  181. inputStartTime = document.getElementById("startTime").value;
  182. inputEndTime = document.getElementById("endTime").value;
  183. aryDates.push(dateInput);
  184. aryPriority.push(inputPriority);
  185. arySubject.push(inputSubject);
  186. aryStartTime.push(inputStartTime);
  187. aryEndTime.push(inputEndTime);
  188. aryAppointments.push([aryPriority[inputCount],arySubject[inputCount],aryDates[inputCount],aryStartTime[inputCount],aryEndTime[inputCount]])
  189. alert("Your appointment has successfully been added.")
  190. showAppointments();
  191.  
  192. inputCount++;
  193. }
  194. }
  195. }
  196. else{
  197. alert("Appointment's details are incorrect, please try again.")
  198. }
  199. formBody = document.getElementById('formBody').reset();
  200. testData = aryAppointments;
  201. alert(testData);
  202. alert(aryAppointments);
  203. }
  204.  
  205. function showAppointments(){
  206. var tableData1;
  207. var tableData2;
  208. var tableData3;
  209. var tableData4;
  210. var tableData5;
  211. var innerData1;
  212. var innerData2;
  213. var innerData3;
  214. var innerData4;
  215. var innerData5;
  216. var tableReset;
  217. var runCount= 0;
  218.  
  219. if (testCount > 0){
  220. for (runCount = 0; runCount < aryAppointments.length; runCount++){
  221. tableApps=document.getElementById("tableApps");
  222. tableApps.deleteRow(-1);
  223. }
  224.  
  225. for(runCount= 0 ;runCount < aryAppointments.length;runCount++){
  226. if(testData == aryAppointments){
  227. tableRow = tableApps.insertRow(-1);
  228. }
  229. tableData1 = tableRow.insertCell(0);
  230. tableData2 = tableRow.insertCell(1);
  231. tableData3 = tableRow.insertCell(2);
  232. tableData4 = tableRow.insertCell(3);
  233. tableData5 = tableRow.insertCell(4);
  234. innerData1 = tableData1.innerHTML = aryAppointments[runCount][0];
  235. innerData2 = tableData2.innerHTML = aryAppointments[runCount][1];
  236. innerData3 = tableData3.innerHTML = aryAppointments[runCount][2];
  237. innerData4 = tableData4.innerHTML = aryAppointments[runCount][3];
  238. innerData5 = tableData5.innerHTML = aryAppointments[runCount][4];
  239. }
  240. testCount++;
  241. alert(testData);
  242. alert(aryAppointments);
  243. }
  244.  
  245. else{
  246. for (runCount = 0; runCount < aryAppointments.length; runCount++){
  247. tableApps = document.getElementById("tableApps");
  248. tableRow = tableApps.insertRow(-1);
  249.  
  250. tableData1 = tableRow.insertCell(0);
  251. tableData2 = tableRow.insertCell(1);
  252. tableData3 = tableRow.insertCell(2);
  253. tableData4 = tableRow.insertCell(3);
  254. tableData5 = tableRow.insertCell(4);
  255.  
  256. innerData1 = tableData1.innerHTML = aryAppointments[runCount][0];
  257. innerData2 = tableData2.innerHTML = aryAppointments[runCount][1];
  258. innerData3 = tableData3.innerHTML = aryAppointments[runCount][2];
  259. innerData4 = tableData4.innerHTML = aryAppointments[runCount][3];
  260. innerData5 = tableData5.innerHTML = aryAppointments[runCount][4];
  261. }
  262. testCount++
  263. }
  264. }
  265.  
  266.  
  267.  
  268.  
  269. function shuffleAppointments(){
  270. var shuffleArray = aryAppointments.length;
  271. var displayCount = shuffleArray;
  272. var tempValue;
  273. var randIndex;
  274. var tableApps;
  275. var tableRows;
  276. var htmlChange;
  277.  
  278.  
  279. while (shuffleArray!==0){
  280. randIndex = Math.floor(Math.random() * shuffleArray);
  281. shuffleArray-=1;
  282.  
  283. tempValue = aryAppointments[shuffleArray];
  284. aryAppointments[shuffleArray] = aryAppointments[randIndex];
  285. aryAppointments[randIndex] =tempValue;
  286. }
  287. showAppointments();
  288. }
  289.  
  290.  
  291. function tallyAppointments() {
  292.  
  293. var tally = [];
  294. var formatDates = [];
  295. var max;
  296. var min;
  297. var i;
  298. var count; //Iterative counter
  299. var arrayLength;
  300. var output = '';
  301. var displayCount = 0;
  302.  
  303.  
  304. //Split each date in array and rearrange so correct dates may be obtained when using Date.parse
  305. for(var i=0; i<aryDates.length; i++) {
  306. var subStrings = aryDates[i].split('/')
  307. var dateObject = new Date(subStrings[2], subStrings[1] - 1, subStrings[0]); // month is 0-based
  308. formatDates.push(dateObject.getTime())
  309. }
  310.  
  311. // Calculate the min date and max date, record the difference between the two (the difference will be the length of the other arrays)
  312. //Min
  313. min = Number.POSITIVE_INFINITY;
  314. for (i=0; i<formatDates.length; i++){
  315. if (formatDates[i] < min)
  316. min = formatDates[i];
  317. }
  318.  
  319. //Max
  320. max = Number.NEGATIVE_INFINITY;
  321. for (i=0; i<formatDates.length; i++){
  322. if (formatDates[i] > max)
  323. max = formatDates[i];
  324. }
  325.  
  326.  
  327. arrayLength = ((max - min) / (1000 * 60 * 60 * 24) + 1) //convert length milliseconds to days
  328. //tally = new Array(arrayLength) //Tally length is number of days between min and max
  329.  
  330. for(i=0; i<arrayLength; i++){
  331. count = 0
  332. index = ((formatDates[i] - min) / (1000 * 60 * 60 * 24))
  333. for(j=0; j<aryDates.length; j++){
  334. if (aryDates[i] === aryDates[j]) {
  335. count++
  336. }
  337. tally[index] = count
  338. }
  339. }
  340.  
  341. // Output into table. Converts index back to date dd/mm/yyyy.
  342. tableSummary = document.getElementById("tableSummary");
  343. tableData = tableSummary.insertRow(-1);
  344.  
  345. output += '<table border="1">';
  346. output += '<tr><th>Date</th><th>Count</th></tr>';
  347. for(i=0; i<tally.length; i++){
  348. var date = new Date(min + (i *(1000 * 60 * 60 * 24)));
  349. var date = date.getDate() + "/" + (parseInt(date.getMonth())+1) + "/" + date.getFullYear()
  350. output += '<tr><td>' + date + '</td><td>';
  351.  
  352. for(var j=0; j<tally[i]; j++){
  353. output += '#';
  354. }
  355. output += '</td></tr>';
  356. }
  357. output += '</table>';
  358. document.writeln(output);
  359. }
  360.  
  361.  
  362.  
  363.  
  364.  
  365. </script>
  366. </head>
  367. <body>
  368. <section>
  369. <h1>Schedule Editor</h1>
  370.  
  371.  
  372. <form id='formBody'>
  373. <p>Priority:</p>
  374. <input type="radio" name="priority" id="priority1" value="high" >High</input>
  375. <input type="radio" name="priority" id="priority2" value="moderate" checked>Moderate</input>
  376. <input type="radio" name="priority" id="priority3" value="low">Low</input>
  377. <!--priority radio buttons section-->
  378.  
  379. <p>Subject:</p>
  380. <input type='text' size='30' id='subject'/>
  381. <!--Subject input section-->
  382.  
  383. <p>Date:</p>
  384. <input type='text' size='30' id='appDate'/>
  385. <!--Date input-->
  386.  
  387. <p>Start Time:</p>
  388. <select id='startTime'>
  389. <option value=0800>0800</option>
  390. <option value=0900>0900</option>
  391. <option value=1000>1000</option>
  392. <option value=1100>1100</option>
  393. <option value=1200>1200</option>
  394. <option value=1300>1300</option>
  395. <option value=1400>1400</option>
  396. <option value=1500>1500</option>
  397. <option value=1600>1600</option>
  398. <option value=1700>1700</option>
  399. <option value=1800>1800</option>
  400. </select>
  401.  
  402.  
  403. <p>End Time:</p>
  404. <select id='endTime'>
  405. <option value=0800>0800</option>
  406. <option value=0900>0900</option>
  407. <option value=1000>1000</option>
  408. <option value=1100>1100</option>
  409. <option value=1200>1200</option>
  410. <option value=1300>1300</option>
  411. <option value=1400>1400</option>
  412. <option value=1500>1500</option>
  413. <option value=1600>1600</option>
  414. <option value=1700>1700</option>
  415. <option value=1800>1800</option>
  416. </select>
  417. <input type='button' onclick='addAppointments()' value='Add appointment' name='addAppointment'>
  418. <hr>
  419. </section>
  420.  
  421.  
  422. <section>
  423. <table border='1' id='tableApps'>
  424. <tr>
  425. <td width = '120'><strong>Priority</strong></td>
  426. <td width = '120'><strong>Subject</strong></td>
  427. <td width = '120'><strong>Date</strong></td>
  428. <td width = '120'><strong>Start Time</strong></td>
  429. <td width = '120'><strong>End Time</strong></td>
  430. </tr>
  431. </table>
  432.  
  433. <form>
  434. <input type='button' onclick='shuffleAppointments()' value='Randomise Appointments' name='randomApps'>
  435. <input type='button' onclick='sortAppointments()' value='Sort Appointments' name='sortApps'>
  436. <select>
  437. <option value='priority'>Priority</option>
  438. <option value='date'>Date</option>
  439. <option value='startTime'>Start Time</option>
  440. <option value='endTime'>End Time</option>
  441. <option value='subject'>Subject</option>
  442. </select>
  443. </form>
  444. <hr>
  445. </section>
  446.  
  447.  
  448. <section>
  449. <table border='1' id='tableSummary'>
  450. <tr>
  451. <td><strong>Date</strong></td>
  452. <td><strong>Name</strong></td>
  453. </tr>
  454. </table>
  455. <form>
  456. <input type='button' onclick='tallyAppointments()' value='Summary' name='tallyApps'>
  457. </form>
  458. <hr>
  459. </section>
  460.  
  461.  
  462. <section>
  463. <table border='1'>
  464. <tr>
  465. <td><strong>Priority</strong></td>
  466. <td><strong>Date</strong></td>
  467. <td><strong>Start Time</strong></td>
  468. <td><strong>End Time</strong></td>
  469. <td><strong>Subject</strong></td>
  470. </tr>
  471. </table>
  472.  
  473. <form>
  474. <input type='button' onclick='doit()' value='Search' name='searchName'>
  475. <input type='text' size='15'>
  476. </form>
  477.  
  478.  
  479.  
  480.  
  481.  
  482. </body>
  483. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement