Advertisement
Guest User

Untitled

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