GIF89a; %PDF-1.5 %���� ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY
Server IP : 134.29.175.74 / Your IP : 216.73.216.160 Web Server : nginx/1.10.2 System : Windows NT CST-WEBSERVER 10.0 build 19045 (Windows 10) i586 User : Administrator ( 0) PHP Version : 7.1.0 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : C:/nginx/html/Scheduler/Schedule/ |
Upload File : |
"use strict"; // Schedule/schedule7.js // Used to validate form elements. Mainly for SCD. // Need to finish VerifySCD(). // CalcMinuteDiff(time1, time2) ....... Return the difference between two times in minutes as a positive number. // CloseDialog() ................... Close and empty the dialogDiv. // GetWeekdayD(WeekdayNumber) ......... Return the weekday d given the weekday number. // GetWeekdayNumber(WeekdayD) ......... Return the weekday number given the weekdayD. // ttErrorShow(objInfo) ................... Set error and display above element. Called by Validate_Return[]. // Validate(e, jsReturnFunction, by) .. Use AJAX to validate a form element value. Calls Validate_Return[] when AJAX complete. // Validate_Return(id, jsReturnCode) .. Store the validation result. Called when AJAX complete. // Validate_ScheduleClass() ........... Validate all scheduleclass values except room or instructor. // Validate_ShowError(e) .............. If the element has an error, call Validate() to show the error. // VerifySCD() // Verify the SCD before submission. function VerifySCD(evt) { var DEBUG = DEBUG_ON; if ( DEBUG ) { console.group(`${PC}VerifySCD[evt.target.id=${evt.target.id}]`,CG); }//Collapsed //console.dir(evt); let submitForm = true; // Do not Update or Add class meetings if no changed have been made. evt.preventDefault(); let isChange = IsChangeInSCD(); if (!isChange) { let eScheduleFormContainer = document.getElementById('divScheduleFormContainer'); let sfcRect = eScheduleFormContainer.getBoundingClientRect(); if ( DEBUG ) { console.log(`${PC}sfcRect=${JSON.stringify(sfcRect)}`,CL); } let innerHTML = '<div class="center">'; if (evt.target.id == 'btn_UpdateClass') { innerHTML += '<h2 class="nowrap">Update class closed</h2>'; innerHTML += '<span class="nowrap">No changes were made to the class.</span>'; } else { innerHTML += '<h2 class="nowrap">Add class closed</h2>'; innerHTML += '<span class="nowrap">No information was entered for the class.</span>'; } innerHTML += '</div>'; eScheduleFormContainer.innerHTML = innerHTML; eScheduleFormContainer.style.width = sfcRect.width + 'px'; eScheduleFormContainer.style.height = sfcRect.height + 'px'; if ( DEBUG ) { console.log(`${PC}setTimeout(CloseDialog,3000)`,CD); } let id = setTimeout(CloseDialog,3000); } else { // Changes were made to the form. Find out if it is OK to add or update. // Do this for both add and update: Ensure id_courseId, txt_scheduleclassSection, id_scheduleclassStartDate, id_scheduleclassEndDate have values. let eCourseId = document.getElementById('id_courseId'); let eScheduleclassSection = document.getElementById('txt_scheduleclassSection'); let eScheduleclassStartDate = document.getElementById('id_scheduleclassStartDate'); let eScheduleclassEndDate = document.getElementById('id_scheduleclassEndDate'); if ( DEBUG ) { console.log(`${PC}cId=${eCourseId.value} sec=${eScheduleclassSection.value} sDate=${eScheduleclassStartDate.value} eDate=${eScheduleclassEndDate.value}`,CL); } // we are here // Then check meetings. if (submitForm) { // Save the scroll position and submit the form. SaveAutoscrollPosition(); let task; if (evt.target.id == 'btn_UpdateClass') { task = 'Update class'; } else { task = 'Add class'; } //alert("Submit form!"); //console.dir(evt.target); //let form = event.target.form; if ( DEBUG ) { console.log(`${PC}calling formSubmit[event.target=${event.target}]`,CD); } formSubmit(event.target,task); } } if ( DEBUG ) { console.groupEnd(); } } // END VerifySCD. /** / // This is unused for now 4/4/2022 jfm Array.prototype.diff = function(arr2) { let ret = []; for(let i in this) { if(arr2.indexOf(this[i]) > -1){ ret.push(this[i]); } } return ret; }; /**/ // CalcMinuteDiff(time1, time2) // Return the difference between two times in minutes as a positive number. // time1 = The 1st time. // time12 = The 2nd time. function CalcMinuteDiff(time1, time2) { //console.log('CalcMinuteDiff[time1='+time1+', time2='+time2+']'); var time1Parts = time1.split(':'); var time1Date = new Date(2000, 0, 1, time1Parts[0], time1Parts[1]); var time2Parts = time2.split(':'); var time2Date = new Date(2000, 0, 1, time2Parts[0], time2Parts[1]); var diff =(time1Date.getTime() - time2Date.getTime()) / 1000; diff /= 60; var Diff_minutes = Math.abs(Math.round(diff)); //console.log('time1Parts='+time1Parts+' time2Parts='+time2Parts+' diff='+diff+' Diff_minutes='+Diff_minutes); return Diff_minutes; } // END CalcMinuteDiff. // CloseDialog() // Close and empty the dialogDiv. function CloseDialog() { var DEBUG = DEBUG_ON; if ( DEBUG ) { console.group(`${PC}CloseDialog[]`,CG); }//Collapsed document.removeEventListener('keydown',KeydownDialog); document.removeEventListener('scroll', ScrollDialogDiv); Element_Highlight.idsToHighlight = []; let eDialogDiv = document.getElementById('dialogDiv'); eDialogDiv.innerText = ''; eDialogDiv.style.display = 'none'; divHide('errorDiv'); if ( DEBUG ) { console.groupEnd(); } } // CopyObject(obj) // Return a copy of the object. function CopyObject(obj) { return JSON.parse(JSON.stringify(obj)); } // END CopyObject. function GetScrollbarWidth() { // Creating invisible container const outer = document.createElement('div'); outer.style.visibility = 'hidden'; outer.style.overflow = 'scroll'; // forcing scrollbar to appear outer.style.msOverflowStyle = 'scrollbar'; // needed for WinJS apps document.body.appendChild(outer); // Creating inner element and placing it in the container const inner = document.createElement('div'); outer.appendChild(inner); // Calculating difference between container's full width and the child width const scrollbarWidth = (outer.offsetWidth - inner.offsetWidth); // Removing temporary elements from the DOM outer.parentNode.removeChild(outer); return scrollbarWidth; } // GetWeekdayD(WeekdayNumber) // Return the weekday d given the weekday number. function GetWeekdayD(WeekdayNumber) { var DEBUG = false; if ( DEBUG ) { console.warn('GetWeekdayD[WeekdayNumber='+WeekdayNumber+']'); } var WeekdayDReturn = ''; for ( var IDX in Weekdays ){if(Weekdays.hasOwnProperty(IDX)){ if ( WeekdayNumber === Weekdays[IDX].weekdayNumber ) { WeekdayDReturn = Weekdays[IDX].weekdayD; break; } }} if ( DEBUG ) { console.warn('WeekdayDReturn='+WeekdayDReturn); } return WeekdayDReturn; } // END GetWeekdayD. // GetWeekdayNumber(WeekdayD) // Return the weekday number given the weekdayD. function GetWeekdayNumber(WeekdayD) { var DEBUG = false; if ( DEBUG ) { console.warn('GetWeekdayNumber[WeekdayD='+WeekdayD+']'); } var WeekdayNumberReturn = 0; for ( var IDX in Weekdays ){if(Weekdays.hasOwnProperty(IDX)){ if ( DEBUG ) { console.log('IDX='+IDX+' weekdayId['+weekdayNumber+']='+Weekdays[weekdayNumber].weekdayD); } if ( WeekdayD === Weekdays[IDX].weekdayD ) { if ( DEBUG ) { console.log('IDX='+IDX); } WeekdayNumberReturn = parseInt(Weekdays[IDX].weekdayNumber); break; } }} if ( DEBUG ) { console.warn('WeekdayNumberReturn='+WeekdayNumberReturn); } return WeekdayNumberReturn; } // END WeekdayNumber. // ttErrorHide(id) // Hide the error (div_scd_error) and clear event hangler. function ttErrorHide(id) { var DEBUG = DEBUG_ON; if ( DEBUG ) { console.group(`${PC}ttErrorHide[id=${id}]`,CG); }//Collapsed document.getElementById('div_scd_error').style.display = 'none'; if ( DEBUG ) { console.groupEnd(); } } // END ttErrorHide // ttErrorShow(objInfo) // Set error and display above element. Called by Validate_Return[]. // objInfo = An objest with the error information. // objInfo .id = The id of the element that had the error. // objInfo.ierror = The error text. function ttErrorShow(objInfo) { var DEBUG = DEBUG_ON; if ( DEBUG ) { console.group(`${PC}ttErrorShow[objInfo=${JSON.stringify(objInfo)}]`,CG); }//Collapsed // Get the element position. var e = document.getElementById(objInfo.id); // Element with error e.addEventListener('input', Validate_Input); e.addEventListener('blur', Validate_RemoveErrorListeners); var inputBounds = ElementBounds(e,'schedule.js7 173'); // Position is absolute to body. if ( DEBUG ) { console.log(`${PC}inputBounds=${JSON.stringify(inputBounds)}`,CL); } // Get dialogDiv position let dialogDivBounds = ElementBounds(document.getElementById('dialogDiv'),'schedule.js7 175'); if ( DEBUG ) { console.log(`${PC}dialogDivBounds=${JSON.stringify(dialogDivBounds)}`,CL); } // Need to subtract divDialog position. console.log('inputBounds='+JSON.stringify(inputBounds)); var eErrorDiv = document.getElementById('div_scd_error'); eErrorDiv.classList = 'error'; eErrorDiv.innerHTML = objInfo.error; eErrorDiv.style.display = 'block'; var div_scd_errorBounds = ElementBounds(eErrorDiv,'schedule.js2 45'); console.log('div_scd_errorBounds='+JSON.stringify(div_scd_errorBounds)); /** /eErrorDiv.style.left = inputBounds.left + 'px'; eErrorDiv.style.top = inputBounds.top - div_scd_errorBounds.height - div_scd_errorBounds.border.bottom + 'px';/**/ eErrorDiv.style.left = inputBounds.left - dialogDivBounds.left - div_scd_errorBounds.border.left + 'px'; eErrorDiv.style.top = inputBounds.top - dialogDivBounds.top - div_scd_errorBounds.height - div_scd_errorBounds.border.bottom - 2 + 'px'; console.dir(eErrorDiv); if ( DEBUG ) { console.groupEnd(); } } // END ttErrorShow. // Validate(e, jsReturnFunction, by, replaceValue) // Use AJAX to validate a form element value. Calls Validate_Return[] when AJAX complete. // e = The element to validate. // jsReturnFunction = The js code to eval when Validate_Return[] complete. Optional. // by = The caller info. Optional. function Validate(e, jsReturnFunction=false, by='', replaceValue=true) { var DEBUG = DEBUG_ON; if ( DEBUG ) { console.groupCollapsed(`${PC}Validate[e.id=${e.id}, jsReturnFunction=${jsReturnFunction}] by=${by}`,CG); }//Collapsed if ( DEBUG ) { console.log(`${PC}e=${JSON.stringify(e)}`,CI); } /* removed for linter ..var jsReturnFunctionName; var jsReturnFunction_js;.. */ if ( DEBUG ) { console.log(`${PC}SCD_DisableSubmit[]`,CC); } SCD_DisableSubmit(); if ( DEBUG ) { console.warn('Validate[e.id='+e.id+' jsReturnFunction='+jsReturnFunction+'] by='+by); } let AJAXreturn = ''; if ( e ) { // Is there an element? if ( e.id && e.id !== '' ) { // Does the element have an id? // e.types = date, select-one, select-multiple, time let value; if ( DEBUG ) { console.log(`${PC}e.type=${e.type}`,CI); } let idType, idField, scmId; [idType, idField, scmId] = e.id.split('_'); if ( DEBUG ) { console.log(`${PC}idType=${idType} idField=${idField} scmId=${scmId}`,CL); } let otherDateId; let otherValue = ''; switch ( e.type ) { case 'date': // id_scheduleclassStartDate id_scheduleclassEndDate inp_scheduleclassmeetingStartDate_4192 inp_scheduleclassmeetingEndDate_4192 // inp_scheduleclassmeetingStartDate_add1 inp_scheduleclassmeetingEndDate_add1 value = e.value; if ( DEBUG ) { console.log(`${PC}value=${value}`,CS); } if ( e.id.search('Start') !== -1) { otherDateId = e.id.replace('Start','End'); } else { otherDateId = e.id.replace('End','Start'); } otherValue = document.getElementById(otherDateId).value; if ( DEBUG ) { console.log(`${PC}otherDateId=${otherDateId} otherValue=${otherValue}`,CI); } break; case 'number': value = e.value; if ( DEBUG ) { console.log(`${PC}value=${value}`,CS); } break; case 'text': // Does id_scheduleclassmeetingbeginTime_4193 and id_scheduleclassmeetingendTime_4193 times value = e.value; if ( DEBUG ) { console.log(`${PC}value=${value}`,CS); } break; default: AJAXreturn = { name:false, value:null, error:'Element type ['+e.type+'] not programmed.' }; break; } if ( AJAXreturn === '' ) { // Make the AJAX call to validate the element's value. URI = ROOT_http+'/Schedule/ScheduleClass/ScheduleClassUpdate.php?'; URI += 'task=VerifyMeeting'; URI += '&id='+encodeURIComponent(e.id); URI += '&value='+encodeURIComponent(value); URI += '&otherValue='+encodeURIComponent(otherValue); if ( replaceValue ) { URI += '&replaceValue=1'; } else { URI += '&replaceValue=0'; } var preloadText = false; if ( DEBUG ) { if ( jsReturnFunction === false ) { console.log(`${PC}jsReturnFunction is false`,CF); } else { console.log(`${PC}jsReturnFunction is not false = ${jsReturnFunction}`,CI); } } let jsReturnCode; if ( jsReturnFunction !== false ) { jsReturnCode = "Validate_Return('"+e.id+"', '"+jsReturnFunction+"');"; } else { jsReturnCode = "Validate_Return('"+e.id+"', false);"; } if ( DEBUG ) { console.log("Calling UpdateInclude['"+URI+"', '"+preloadText+"', '"+jsReturnCode+"']"); } document.getElementById('divAJAXreturn').innerHTML = ''; let ValidateAJAXcount = 0; UpdateInclude(URI, 'divAJAXreturn', preloadText, jsReturnCode); AJAXreturn = { name:false, value:null, error:'Recalled UpdateInclude.'}; } } else { // Does the element have an id? // No. AJAXreturn = { name:false, value:null, error:'Element to validate does not have an id.' }; } // Does the element have an id? } else { // Is there an element? // No. AJAXreturn = { name:false, value:null, error:'Element to validate does not exist.' }; } // Is there an element? if ( DEBUG ) { console.log('AJAXreturn='+JSON.stringify(AJAXreturn)); } if ( DEBUG ) { console.groupEnd(); } } // END Validate. // Validate_Input(evt) // Calls Validate() when an error condition exists. function Validate_Input(evt) { evt = (evt) ? evt : window.event; var DEBUG = DEBUG_ON; if ( DEBUG ) { console.groupCollapsed(`${PC}Validate_Input[evt.target.id=${evt.target.id}]`,CG); }//Collapsed Validate(evt.target,false,'7 Validate_Input 307',false); if ( DEBUG ) { console.log(`${PC}END ${PC}Validate_Input`,SE,ST); console.groupEnd(); } } // END Validate_Input. // Validate_RemoveErrorListeners(evt) // Clear error listeners onblur. function Validate_RemoveErrorListeners(evt) { evt.target.removeEventListener('blur', Validate_RemoveErrorListeners); evt.target.removeEventListener('input', Validate_Input); } // END Validate_RemoveErrorListeners. // Validate_Return(id, jsReturnCode) // Store the validation result. Called when AJAX complete. // Call setup by Validate_Return[]. function Validate_Return(id, jsReturnCode=false) { let DEBUG = DEBUG_ON; var jsReturnCodePerform = false; if ( !jsReturnCode ) { jsReturnCode = false; // Change '' value to false/ } if ( typeof id === 'object' ) { // Is id an object? id = id.id; // Change it to the object's id. } // Is id an object? if ( DEBUG ) { console.groupCollapsed(`${PC}Validate_Return[id=${id}, jsReturnCode=${jsReturnCode}]`,CG); }//Collapsed if ( DEBUG ) { if ( jsReturnCode === false ) { console.log(`${PC}jsReturnCode is false`,CF); } else { console.log(`${PC}jsReturnCode is not false = ${jsReturnCode}`,CI); } } let AJAXreturn = ''; var AJAXreturnHTML = document.getElementById('divAJAXreturn').innerHTML; if ( DEBUG ) { console.log("\t"+'AJAXreturnHTML="'+AJAXreturnHTML+'"'); } if ( AJAXreturnHTML !== '' ) { // Has data been returned from the AJAX call? // Yes, get js. AJAXreturn = JSON.parse(AJAXreturnHTML); if ( DEBUG ) { console.log("\t"+'AJAXreturn='+JSON.stringify(AJAXreturn)); console.log("\t"+'AJAXreturn.id='+AJAXreturn.id); console.log("\t"+'AJAXreturn.name='+AJAXreturn.name); console.log("\t"+'AJAXreturn.value='+AJAXreturn.value); console.log("\t"+'AJAXreturn.error='+AJAXreturn.error); } var idParts = AJAXreturn.id.split('_'); var elementName = idParts[1]; if ( DEBUG ) { console.log(`${PC}elementName=${elementName}`,CI); } var scmId = idParts[2]; let beginTime = ''; let beginTimeMin; let endTime = ''; let endTimeMin; let e_scheduleclassmeetingBeginTime; let e_scheduleclassmeetingEndTime; if ( AJAXreturn.error === false ) { // Are there no errors? // Run any other validation code needed. var DateText; switch ( elementName ) { // switch on form element name. case 'scheduleclassmeetingStartDate': case 'scheduleclassmeetingEndDate': if ( elementName === 'scheduleclassmeetingStartDate' ) { DateText = 'start'; } else { DateText = 'end'; } var ScheduleclassStartDate = document.getElementById('id_scheduleclassStartDate').value; var ScheduleclassEndDate = document.getElementById('id_scheduleclassEndDate').value; if ( AJAXreturn.value < ScheduleclassStartDate || AJAXreturn.value > ScheduleclassEndDate ) { // Date is out of class date range. AJAXreturn.error = 'The meeting '+DateText+' date is outside of the Class start and end dates.';// ['+DateUSA(ScheduleclassStartDate)+' - '+DateUSA(ScheduleclassEndDate)+'].'; } else { if ( DEBUG ) { console.log('The meeting '+DateText+' date is OK.'); } } break; case 'scheduleclassStartDate': case 'scheduleclassEndDate': if ( elementName === 'scheduleclassStartDate' ) { DateText = 'start'; } else { DateText = 'end'; } if ( AJAXreturn.value < SessionCurrent.Start || AJAXreturn.value > SessionCurrent.End ) { // Date is out of session range. AJAXreturn.error = 'The class '+DateText+' date is outside of the '+SessionCurrent.Type+' start and end dates.';// ['+DateUSA(AJAXreturn.value)+'] ['+DateUSA(SessionCurrent.Start)+' - '+DateUSA(SessionCurrent.End)+'].'; } else { if ( DEBUG ) { console.log('The class '+DateText+' date is OK.'); } } break; case 'scheduleclassmeetingBeginTime': case 'scheduleclassmeetingEndTime': switch ( AJAXreturn.name ) { case 'scheduleclassmeetingBeginTime': e_scheduleclassmeetingBeginTime = document.getElementById('id_scheduleclassmeetingBeginTime_'+scmId); if ( parseInt(AJAXreturn.replaceValue) ) { e_scheduleclassmeetingBeginTime.value = AJAXreturn.value; if ( DEBUG ) { console.log(`${PC}e_scheduleclassmeetingBeginTime set to ${e_scheduleclassmeetingBeginTime.value}.`,CS); } } else { if ( DEBUG ) { console.log(`${PC}e_scheduleclassmeetingBeginTime was not set.`,CS); } } beginTime = AJAXreturn.value; break; case 'scheduleclassmeetingEndTime': beginTime = document.getElementById('id_scheduleclassmeetingBeginTime_'+scmId).value; e_scheduleclassmeetingEndTime = document.getElementById('id_scheduleclassmeetingEndTime_'+scmId); e_scheduleclassmeetingEndTime.value = AJAXreturn.value; endTime = AJAXreturn.value; break; } if ( DEBUG ) { console.log('beginTime='+beginTime+' endTime='+endTime); } beginTimeMin = ConvertTimeToMinutes(beginTime); endTimeMin = ConvertTimeToMinutes(endTime); if ( DEBUG ) { console.log('beginTimeMin='+beginTimeMin+' endTimeMin='+endTimeMin); } if ( endTimeMin < beginTimeMin ) { // End Time is before begin time. AJAXreturn.error = 'The class meeting end time is before the start time.'; } else { if ( DEBUG ) { console.log('The class meeting end time is OK.'); } } break; default: if ( DEBUG ) { console.log('There is no additional validation code for '+elementName+'.'); } break; } // switch on form element name. // Perform any return js code. if ( jsReturnCode !== null && jsReturnCode !== '' ) { if ( DEBUG ) { console.warn('jsReturnCode='+jsReturnCode); } jsReturnCodePerform = true; } } else { // Are there no errors? if ( DEBUG ) { console.log('There was already an error ['+AJAXreturn.error+'].'); } } // Are there no errors? // Validate entire form to activate Add or Update button. } else { // Has data been returned from the AJAX call? // No, check again with a delay. ValidateAJAXcount++; if ( ValidateAJAXcount < ValidateAJAXlimit ) { console.log('No jsReturnCode='+jsReturnCode); setTimeout(function(){Validate_Return(id, jsReturnCode);},ValidateAJAXcount*100); AJAXreturn = { name:false, value:null, error:'Recall function' }; } else { //alert('No return from AJAX.'); AJAXreturn = { name:false, value:null, error:'No return from AJAX call.' }; } if ( DEBUG ) { console.groupEnd(); } return; } // Has data been returned from the AJAX call? if ( DEBUG ) { console.log('AJAXreturn='+JSON.stringify(AJAXreturn)); } // Deal with errors. var AJAXelement = document.getElementById(AJAXreturn.id); if ( DEBUG ) { console.log('AJAXreturn='+JSON.stringify(AJAXreturn)+' jsReturnCode='+jsReturnCode); } if ( AJAXelement && ( typeof AJAXelement.className !== 'undefined' ) ) { if ( typeof AJAXreturn.error !== 'undefined' ) { if ( AJAXreturn.name !== false ) { if ( AJAXreturn.error === false ) { // Is the value OK? ttErrorHide(id); // Yes, remove error class. AJAXelement.className = AJAXelement.className.replace( /(?:^|\s)error(?!\S)/g , '' ); // Hide the errorDiv. var de = document.getElementById('errorDiv'); de.innerHTML = ''; de.style.display = 'none'; if ( DEBUG ) { console.log(`${PC}No errors. jsReturnCode=${jsReturnCode} typeof(jsReturnCode)=${(typeof jsReturnCode)}`,CT); } if ( !jsReturnCode ) { if ( DEBUG ) { console.log('Call Validate_ScheduleClass[]'); } Validate_ScheduleClass(); } else { if ( DEBUG ) { console.log('Do not call Validate_ScheduleClass[]'); } } } else { // Is the value OK? // No, display error to user. if ( DEBUG ) { console.log(`${PC}${TB}Errors!`,CE); } if ( DEBUG ) { console.log("\t"+'AJAXreturn.error='+AJAXreturn.error); } if ( AJAXelement.className.indexOf('error') === -1 ) { AJAXelement.className += ' error'; // Add the error classfor the element. } if ( DEBUG ) { console.log(`${PC}AJAXreturn=${JSON.stringify(AJAXreturn)}`,CA); } ttErrorShow(AJAXreturn); } // Is the value OK? } } } if ( jsReturnCodePerform === true ) { if ( jsReturnCode ) { console.log('Yes jsReturnCode='+jsReturnCode); eval(jsReturnCode); } } if ( DEBUG ) { console.groupEnd(); } } // END Validate_Return. // Validate_ScheduleClass() // Validate all scheduleclass values except room or instructor. function Validate_ScheduleClass() { var DEBUG = DEBUG_ON; if ( DEBUG ) { console.group(`${PC}Validate_ScheduleClass[]`,CG); }//Collapsed var eCourseId = document.getElementById('id_courseId'); if ( DEBUG ) { console.log('eCourseId.type='+eCourseId.type); } if ( DEBUG ) { console.log(`${PC}SCD_DisableSubmit[]`,CC); } SCD_DisableSubmit(); // BEGIN Validate courseId. // eCourseId.type=select-one // eCourseId.type=hidden var courseId = 0; var valid_courseId = true; switch ( eCourseId.type ) { // switch eCourseId.type. case 'hidden': courseId = parseInt(eCourseId.value); break; case 'select-one': courseId = parseInt(eCourseId.options[eCourseId.selectedIndex].value); break; default: console.warn('Validate_ScheduleClass courseId not programmed for type '+eCourseId.type); break; } // switch eCourseId.type. if ( DEBUG ) { console.log(`${PC}courseId=${courseId}`,CI); } // courseId=NaN // courseId=2383 if ( isNaN(courseId) || !courseId ) { valid_courseId = false; } if ( DEBUG ) { console.log(`${PC}valid_courseId=${valid_courseId}`,CS); } // END Validate courseId. // BEGIN Validate scheduleclassSection. var valid_scheduleclassSection = true; var e_scheduleclassSection = document.getElementById('txt_scheduleclassSection'); if ( e_scheduleclassSection.className.indexOf('error') !== -1 ) { if ( DEBUG ) { console.log('valid_scheduleclassSection set false due to className error.'); } valid_scheduleclassSection = false; } else { if ( !e_scheduleclassSection.value ) { if ( DEBUG ) { console.log('valid_scheduleclassSection set false due to no scheduleclassSection.'); } valid_scheduleclassSection = false; } } if ( DEBUG ) { console.log(`${PC}valid_scheduleclassSection=${valid_scheduleclassSection}`,CS); } // END Validate scheduleclassSection. // BEGIN Validate scheduleclassStartDate. var valid_scheduleclassStartDate = true; var e_scheduleclassStartDate = document.getElementById('id_scheduleclassStartDate'); if ( e_scheduleclassStartDate.className.indexOf('error') !== -1 ) { if ( DEBUG ) { console.log('valid_scheduleclassStartDate set false due to className error.'); } valid_scheduleclassStartDate = false; } else { if ( !e_scheduleclassStartDate.value ) { if ( DEBUG ) { console.log('valid_scheduleclassStartDate set false due to no scheduleclassStartDate.'); } valid_scheduleclassStartDate = false; } } if ( DEBUG ) { console.log(`${PC}valid_scheduleclassStartDate=${valid_scheduleclassStartDate}`,CS); } // END Validate scheduleclassStartDate. // BEGIN Validate scheduleclassEndDate. var valid_scheduleclassEndDate = true; var e_scheduleclassEndDate = document.getElementById('id_scheduleclassEndDate'); if ( e_scheduleclassEndDate.className.indexOf('error') !== -1 ) { if ( DEBUG ) { console.log('valid_scheduleclassEndDate set false due to className error.'); } valid_scheduleclassEndDate = false; } else { if ( !e_scheduleclassEndDate.value ) { if ( DEBUG ) { console.log('valid_scheduleclassEndDate set false due to no scheduleclassEndDate.'); } valid_scheduleclassEndDate = false; } } if ( DEBUG ) { console.log(`${PC}valid_scheduleclassEndDate=${valid_scheduleclassEndDate}`,CS); } // END Validate scheduleclassEndDate. // BEGIN Validate class meeting values. var scmId; var valid_meetings = true; let valid_MeetingStartDate = true; let valid_MeetingEndDate = true; let valid_MeetingDays = true; let valid_MeetingTimes = true; let valid_MeetingRooms = true; var ScheduleclassmeetingIds = document.getElementById('hid_scheduleclassmeetingIds').value.split(','); if ( DEBUG ) { console.log(`${PC}ScheduleclassmeetingIds.length=${ScheduleclassmeetingIds.length} ScheduleclassmeetingIds=${ScheduleclassmeetingIds}`,CL); } if ( ScheduleclassmeetingIds[0] !== '' ) { // Are there any meetings? for ( var scmIndex=0; scmIndex<ScheduleclassmeetingIds.length; scmIndex++ ) { // Loop thru meeting. scmId = ScheduleclassmeetingIds[scmIndex]; if ( DEBUG ) { console.log('scmId='+scmId); }//inp_scheduleclassmeetingStartDate_0 // BEGIN Validate scheduleclassmeetingStartDate. let e_scheduleclassmeetingStartDate = document.getElementById('inp_scheduleclassmeetingStartDate_'+scmId); if ( e_scheduleclassmeetingStartDate.className.indexOf('error') !== -1 ) { if ( DEBUG ) { console.log('valid_meetings set false due to className error in inp_scheduleclassmeetingStartDate_'+scmId+'.'); } valid_MeetingStartDate = false; valid_meetings = false; } else { if ( e_scheduleclassmeetingStartDate.value === '' ) { if ( DEBUG ) { console.log('valid_meetings set false due to no scheduleclassmeetingStartDate in inp_scheduleclassmeetingStartDate_'+scmId+'.'); } valid_MeetingStartDate = false; valid_meetings = false; } } // END Validate scheduleclassmeetingStartDate. if ( valid_meetings ) { // Is the meeting still valid? // BEGIN Validate scheduleclassmeetingEndDate. var e_scheduleclassmeetingEndDate = document.getElementById('inp_scheduleclassmeetingEndDate_'+scmId); if ( e_scheduleclassmeetingEndDate.className.indexOf('error') !== -1 ) { if ( DEBUG ) { console.log('valid_meetings set false due to className error in inp_scheduleclassmeetingEndDate_'+scmId+'.'); } valid_MeetingEndDate = false; valid_meetings = false; } else { if ( e_scheduleclassmeetingEndDate.value === '' ) { if ( DEBUG ) { console.log('valid_meetings set false due to no scheduleclassmeetingEndDate in inp_scheduleclassmeetingEndDate_'+scmId+'.'); } valid_MeetingEndDate = false; valid_meetings = false; } } // END Validate scheduleclassmeetingEndDate. if ( valid_meetings ) { // Is the meeting still valid? // BEGIN Validate Days, times and rooms. let ScheduleclassmeetingArranged = document.getElementById('id_scheduleclassmeetingArranged_'+scmId).checked; if ( DEBUG ) { console.log('ScheduleclassmeetingArranged='+ScheduleclassmeetingArranged); } if ( !ScheduleclassmeetingArranged ) { // Are the days and times NOT Arranged. // BEGIN Validate days. chk_Weekday_423_3 var chk_Weekday_Id; var chk_Weekday_Checked = false; for ( var weekdayId in Weekdays ){if(Weekdays.hasOwnProperty(weekdayId)){ chk_Weekday_Id = 'chk_Weekday_'+scmId+'_'+weekdayId; if ( document.getElementById(chk_Weekday_Id).checked ) { chk_Weekday_Checked = true; } }} if ( DEBUG ) { console.log('chk_Weekday_Checked='+chk_Weekday_Checked); } if ( !chk_Weekday_Checked ) { if ( DEBUG ) { console.log('valid_meetings set false due to no weekday checked for '+scmId+'.'); } valid_MeetingDays = false; valid_meetings = false; } // END Validate days. if ( valid_meetings ) { // Is the meeting still valid? // BEGIN Validate times. id_scheduleclassmeetingBeginTime_4437 var e_scheduleclassmeetingBeginTime = document.getElementById('id_scheduleclassmeetingBeginTime_'+scmId); if ( e_scheduleclassmeetingBeginTime.className.indexOf('error') !== -1 ) { if ( DEBUG ) { console.log('valid_meetings set false due to className error in id_scheduleclassmeetingBeginTime_'+scmId+'.'); } valid_MeetingTimes = false; valid_meetings = false; } else { if ( e_scheduleclassmeetingBeginTime.value === '' ) { if ( DEBUG ) { console.log('valid_meetings set false due to no scheduleclassmeetingBeginTime in id_scheduleclassmeetingBeginTime_'+scmId+'.'); } valid_MeetingTimes = false; valid_meetings = false; } } if ( valid_meetings ) { // Is the meeting still valid? var e_scheduleclassmeetingEndTime = document.getElementById('id_scheduleclassmeetingEndTime_'+scmId); if ( e_scheduleclassmeetingEndTime.className.indexOf('error') !== -1 ) { if ( DEBUG ) { console.log('valid_meetings set false due to className error in id_scheduleclassmeetingEndTime_'+scmId+'.'); } valid_MeetingTimes = false; valid_meetings = false; } else { if ( e_scheduleclassmeetingEndTime.value === '' ) { if ( DEBUG ) { console.log('valid_meetings set false due to no scheduleclassmeetingEndTime in id_scheduleclassmeetingEndTime_'+scmId+'.'); } valid_MeetingTimes = false; valid_meetings = false; } } } // Is the meeting still valid? // END Validate times. } // Is the meeting still valid? // END Validate Days, times and rooms. } // Are the days and times NOT Arranged. if ( valid_meetings ) { // Is the meeting still valid? // BEGIN validate rooms. let ScheduleclassmeetingOffCampus = document.getElementById('chkClassIsOffCampus_'+scmId).checked; if ( DEBUG ) { console.log(`${PC}ScheduleclassmeetingOffCampus=${ScheduleclassmeetingOffCampus}`,CI); } if ( !ScheduleclassmeetingOffCampus ) { // Is there a room scheduled? selRoom_4436_0 let roomIndex = 0; let eRoomElement; let eDivRoom; // Check if labRoom or labBuilding is hidden. let divRoomId = 'divRoom_' + scmId + '_' + roomIndex; eDivRoom = document.getElementById(divRoomId); if ( DEBUG ) { console.log(`${PC}divRoomId=${divRoomId} classList=${eDivRoom.classList}`,CL); } do { let labRoomId = 'labRoom_' + scmId + '_' + roomIndex; let eLabRoom = document.getElementById(labRoomId); if ( DEBUG ) { console.log(`${PC}divRoomId=${divRoomId} classList=${eDivRoom.classList}`,CL); } if ( DEBUG ) { console.log(`${PC}labRoomId=${labRoomId} classList=${eLabRoom.classList}`,CL); } //console.dir(eDivRoom); if ( eDivRoom && !eDivRoom.classList.contains('hidden') ) { // Does the divRoom exist and is it not hidden? && !eLabRoom.classList.contains('hidden') eRoomElement = document.getElementById('selRoom_'+scmId+'_'+roomIndex); if ( DEBUG ) { console.log(`${PC}eRoomElement.value=${eRoomElement.value}`,CL); } if ( !eRoomElement.value ) { if ( DEBUG ) { console.log('valid_meetings set false due to no romm in selRoom_'+scmId+'_'+roomIndex+'.'); } valid_MeetingRooms = false; valid_meetings = false; } } // Does the divRoom exist and is it not hidden? roomIndex++; divRoomId = 'divRoom_' + scmId + '_' + roomIndex; eDivRoom = document.getElementById(divRoomId); } while (eDivRoom); } // Is there a room scheduled? // END validate rooms. } // Is the meeting still valid? } // Is the meeting still valid? } // Is the meeting still valid? } // Loop thru meeting. } // Are there any meetings? if ( DEBUG ) { if ( valid_meetings ) { console.log(`${PC}valid_meetings=${valid_meetings}`,CT); } else { console.log(`${PC}valid_meetings=${valid_meetings}`,CF);} } if ( DEBUG ) { console.log(`${PC}valid_MeetingStartDate=${valid_MeetingStartDate} valid_MeetingEndDate=${valid_MeetingEndDate}`,CS); } if ( DEBUG ) { console.log(`${PC}valid_MeetingDays=${valid_MeetingDays} valid_MeetingTimes=${valid_MeetingTimes} valid_MeetingRooms=${valid_MeetingRooms}`,CS); } if ( DEBUG ) { console.log(`${PC}END ${PC}Validate_ScheduleClass`,SE,ST); console.groupEnd(); } // END Validate class meeting values. if (valid_courseId && valid_scheduleclassSection && valid_scheduleclassStartDate && valid_scheduleclassEndDate && valid_meetings) { // Is the SCD OK? // Check if changes were made. let isChange = IsChangeInSCD(); if ( DEBUG ) { console.log(`${PC}isChange=${isChange}`,CL); } if ( isChange) { if ( DEBUG ) { console.log(`${PC}SCD_EnableSubmit[]`,CC); } SCD_EnableSubmit(); } } else { Element_Unhighlight(); } // Is the SCD OK? } // END Validate_ScheduleClass. // SCD_DisableSubmit() // Disable the SCD Add or Update button. function SCD_DisableSubmit() { // Disable the add/update button. let eUpdateBtn = document.getElementById('btn_UpdateClass'); if (eUpdateBtn) { eUpdateBtn.disabled = true; } else { let eAddBtn = document.getElementById('btnAddClass'); eAddBtn.disabled = true; } } // END SCD_DisableSubmit. // SCD_EnableSubmit() // Enable the SCD Add or Update button. function SCD_EnableSubmit() { // Enable the add/update button. let eUpdateBtn = document.getElementById('btn_UpdateClass'); if (eUpdateBtn) { eUpdateBtn.disabled = false; } else { let eAddBtn = document.getElementById('btnAddClass'); eAddBtn.disabled = false; } } // END SCD_EnableSubmit. // Validate_ShowError(e) // If the element has an error, call Validate() to show the error. // Should probably be storing the errors locally instead of re-calling Validate(e). function Validate_ShowError(e) { var DEBUG = DEBUG_ON; if ( typeof e === 'string' ) { // Is e a string (the id)? e = document.getElementById(e); // Change e to the element. } // Is e a string (the id)? if ( DEBUG ) { console.group(`${PC}Validate_ShowError[e.id=${e.id}]`,CG); }//Collapsed if ( DEBUG ) { console.log(`${PC}e.className=${e.className} (e.className.indexOf(\'error\'))=${(e.className.indexOf('error'))}`,CI); } if ( e.className.indexOf('error') !== -1 ) { // Is there an error? if ( DEBUG ) { console.log(`${PC}Calling Validate`,CL); } Validate(e,false,'510 Validate_ShowError'); // Re-validate the element. if ( DEBUG ) { console.log(`${PC}After Validate`,CL); } } // Is there an error? if ( DEBUG ) { console.groupEnd(); } } // END Validate_ShowError. // CheckAutoEnd(scmId) // Check if the AutoEnd checkbox is checked and call SetClassendTime if it is. function CheckAutoEnd(scmId) { var DEBUG = DEBUG_ON; if ( DEBUG ) { console.group(`${PC}CheckAutoEnd[scmId=${scmId}]`,CG); }//Collapsed let AutoEndId = 'chk_AutoEnd_' + scmId; let e = document.getElementById(AutoEndId); if ( DEBUG ) { console.log(`${PC}AutoEndId=${AutoEndId} e.id=${e.id} e.checked=${e.checked}`,CL); } if ( e && e.checked ) { // If there is no courseId set then the end time cannot be calculated. // If there are no weekdays checked then the end time cannot be calculated. let scheduleclassmeetingBeginTimeId = `id_scheduleclassmeetingBeginTime_${scmId}`; if ( DEBUG ) { console.log(`${PC}scheduleclassmeetingBeginTimeId=${scheduleclassmeetingBeginTimeId}`,CI); } let e2 = document.getElementById(scheduleclassmeetingBeginTimeId); if ( e2 ) { if ( DEBUG ) { console.log(`${PC}${scheduleclassmeetingBeginTimeId} exists`,CT); } } else { if ( DEBUG ) { console.log(`${PC}${scheduleclassmeetingBeginTimeId} does not exist`,CF); } } SetClassEndTime(e2); } if ( DEBUG ) { console.groupEnd(); } } // END CheckAutoEnd.