var EpochIndex = { Get : function () { var now = new Date; return now.getTime(); } }; function AJAX (targetURL, Callback) { var req = Init(); req.onreadystatechange = ProcessRequest; function Init() { var strObjName = ""; if (window.XMLHttpRequest) { return new XMLHttpRequest(); } else if (window.ActiveXObject) { strObjName = navigator.appVersion.indexOf("MSIE 5.5") >= 0 ? "Microsoft.XMLHTTP" : "Msxml2.XMLHTTP"; return new ActiveXObject(strObjName); } else { alert('ERROR: Could not initialize Ajax object. Your browser may not support XML HTTP Requests.'); } return false; } function ProcessRequest () { if (req.readyState == 4 || req.readyState == "complete") { if (req.status == 200) { if (Callback) { Callback(req.responseText); } } else { if (Callback) { Callback("There was an error retrieving server data: " + req.statusText); } } } } this.GetRequest = function () { targetURL = targetURL.indexOf("?") < 0 ? targetURL + "?eI=" + EpochIndex.Get() : targetURL + "&eI=" + EpochIndex.Get(); req.open("GET", targetURL, true); req.send(); } this.PostRequest = function (formObj) { var formData = ""; var currElem; var currName; var currVal; var x; for(x=0; x this.winWidth) { setAtX -= divWidth; } setAtX = setAtX < 0 ? 5 : setAtX; // a bit of space is nice... setAtY = setAtY < 0 ? 5 : setAtY; divRef.style.left = setAtX.toString() + "px"; divRef.style.top = setAtY.toString() + "px"; }, SetDivAtHorizontalCentre : function (divID) { }, BrowserDim : function () { // standards-compliant if (typeof window.innerHeight != 'undefined') { this.winWidth = window.innerWidth; this.winHeight = window.innerHeight; } // IE6 standards-compliant else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0) { this.winWidth = document.documentElement.clientWidth; this.winHeight = document.documentElement.clientHeight; } else { this.winWidth = document.getElementsByTagName('body')[0].clientWidth; this.winHeight = document.getElementsByTagName('body')[0].clientHeight; } } } // function UpdateCursorPosition (e) { if (document.all) { Cursory.SetX(event.clientX); Cursory.SetY(event.clientY); } else { Cursory.SetX(e.pageX); Cursory.SetY(e.pageY); } } // // deprecated July 2017: // document.onmousemove = UpdateCursorPosition; document.addEventListener("mousemove", UpdateCursorPosition); // Work Request Form v2 Javascript functions library // written by Todd Morrison // September 2013 // reptile@uwo.ca var WR = { submitInProgress : 0, AppLoad : function (targetURL, targetDiv, statusID, loadingIconID, message) { var ajax; //ajax = new AJAX(targetURL, function(response){ Wrdb2.LoadingMessage(statusID, loadingIconID, ""); Wrdb2.DivWrite(targetDiv, response); Wrdb2.GetDOMref("appRoot").scrollIntoView(); }); ajax = new AJAX(targetURL, function(response) { WR.LoadingMessage(statusID, loadingIconID, ""); WR.DivWrite(targetDiv, response); }); this.LoadingMessage(statusID, loadingIconID, message); ajax.GetRequest(); }, LoadingMessage : function (targetID, iconID, message) { var ref = this.GetDOMref(targetID); if (message != "") { ref.innerHTML = document.getElementById(iconID).innerHTML + " " + message; } else { ref.innerHTML = ""; } }, FormInsertValuesByID : function (fieldArrayData) { var idValuePair = []; var ref; var x; for(x=0; x field is complete."; } else if (currElem.id.toUpperCase().indexOf("MAIL") >= 0 || currElem.id.indexOf("CC") >= 0) { if (currElem.id.toUpperCase().indexOf("CC") >= 0) { if (currElem.value != "") { ccList = currElem.value.split(","); for (y=0; y 1 ? "Please ensure that the specified email addresses in the CC field are properly formatted." : "Please ensure that the specified email address in the CC field is properly formatted."; } } } } else if (this.CheckEmailAddress(currElem) == 1) { formError = 1; message = "Please ensure that the specified email address is properly formatted."; } } else if (currElem.id.toUpperCase().indexOf("ATTACHMENT") == 0 && currElem.value != "") { attachSizeMessage = this.AttachmentFileSizeExceeded(currElem.id, 0, idAmorphDialog); formError = attachSizeMessage !== "" ? 1 : formError; message = attachSizeMessage; } if (formError == 1) { this.AmorphDialogHandler(idAmorphDialog, 'Form Validation Message', message, 'OK', function() { $(jqID).modal('hide'); document.getElementById(currElem.id).focus(); }); currElem.focus(); return false; } } if (this.submitInProgress == 0) { if (formError == 0) { if (document.getElementById("CLIENTEMAIL")) { this.GetDOMref("CLIENTEMAIL").innerHTML = formRef.elements["mail"].value; } if (document.getElementById("ADDITIONALINFO") && formRef.elements["sendCC"] && formRef.elements["sendCC"].value !== "" ) { var ccList = formRef.elements["sendCC"].value.split(","); var textReceipt = ccList.length == 1 ? "a receipt" : "receipts"; this.GetDOMref("ADDITIONALINFO").innerHTML = "

Additionally, " + textReceipt + " will be issued to the following: " + formRef.elements["sendCC"].value + "."; } $('#modalSubmit').modal({ show: true }); } } }, ValidateIDinputField : function (idUserInput, idButton, tidLength, ridLength, idMessage, func) { var userSuppliedID = document.getElementById(idUserInput) ? document.getElementById(idUserInput).value : ""; var message = ""; var ref; ref = document.getElementById(idMessage) ? document.getElementById(idMessage) : null; if (userSuppliedID.length != ridLength) { // March 2016: it is assumed that supplied ticket ID's will be RID's, so... message = "ticket ID's are " + ridLength.toString() + " characters in length."; if (ref == null) { alert(message); } else { ref.style.display = "block"; } } else if (typeof func === 'function') { if (ref != null) { ref.innerHTML = ""; } func(); } }, SubmitConfirmed : function (formName) { var processingMessageDOMid = document.getElementById("loadingMessage") ? document.getElementById("loadingMessage") : null; if (WR.submitInProgress != 1) { if (processingMessageDOMid !== null) { processingMessageDOMid.style.display = "block"; } document.forms[formName].submit(); WR.submitInProgress = 1; } }, CheckEmailAddress : function (formObj) { var email = typeof formObj == 'object' ? formObj.value : formObj; var pattern = /^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9_\-]+?[a-zA-Z0-9\.]+\.[a-zA-Z]{2,3}$/; var error = 0; error = email.match(pattern) == null ? 1 : 0; return error; }, GetDOMref : function (id) { var ref = document.getElementById(id); return ref; }, DivWrite : function (targetDiv, message) { var ref = this.GetDOMref(targetDiv); ref.innerHTML = message; }, DivHide : function (targetID) { this.GetDOMref(targetID).style.display = "none"; }, DialogToggle : function (dialogID) { var ref = document.getElementById(dialogID); var state = ""; if (ref.style.display == "none") { Cursory.SetDivAtCursor(dialogID); ref.style.display = "block"; state = "block"; } else { this.DivHide(dialogID); state = "none"; } }, AmorphDialogHandler : function (idDialog, titleText, bodyText, btnLabel, btnFunc) { var jqID = '#' + idDialog; var refTitle = idDialog + "Title"; var refBody = idDialog + "Body"; var refButton = idDialog + "Button"; refTitle = document.getElementById(refTitle) ? document.getElementById(refTitle) : null; refBody = document.getElementById(refBody) ? document.getElementById(refBody) : null; refButton = document.getElementById(refButton) ? document.getElementById(refButton) : null; if (refTitle != null) { refTitle.innerHTML = titleText; } if (refBody != null) { refBody.innerHTML = bodyText; } if (refButton != null) { refButton.innerHTML = btnLabel; if (typeof btnFunc === 'function') { refButton.onclick = btnFunc; } } $(jqID).modal({ show: true }); }, EnterKeyHandler : function (event, Callback) { var charCode = window.event ? window.event.keyCode : event.which; if (charCode == 13) { Callback(); } return true; }, AttachmentFileSizeExceeded : function (inputDOMid, context, idAmorphDialog) { // returns an error message if size exceeded var nameListDOMid = inputDOMid + "list"; var totalSizeDOMid = inputDOMid + "totalsize"; var domRef = document.getElementById(nameListDOMid) ? document.getElementById(nameListDOMid) : null; var maxAttachmentsSize = document.getElementById("maxAttachmentsSize") ? document.getElementById("maxAttachmentsSize").value : -1; var humanMaxAttachSize = maxAttachmentsSize !== -1 ? this.ConvertBytesToXBytes(maxAttachmentsSize) : "unspecified"; var attachmentSize = 0; var sizeExceeded = 0; var humanAttachSize = ""; // report size measurement in a manner that is easy on human eyes, e.g. KB, MB var message = ""; var jqID = '#' + idAmorphDialog; var btLabelReset = "Reset"; var verbosity; var fileCount; var attachText; var i; // context: called as part of form validation, or from form control // 0 = form validation; 1 = form control if (typeof FileReader !== "undefined") { if (document.getElementById(inputDOMid)) { fileCount = document.getElementById(inputDOMid).files.length; // reset file list message if (domRef !== null) { domRef.innerHTML = ""; } for (i=0; i 0 && domRef !== null) { attachedText = fileCount == 1 ? "Attached File: " : "Attached Files: "; domRef.innerHTML = i == 0 ? attachedText : domRef.innerHTML; domRef.innerHTML += document.getElementById(inputDOMid).files[i].name; if (i < fileCount - 1) { domRef.innerHTML += ", "; } } } humanAttachSize = this.ConvertBytesToXBytes(attachmentSize); if (document.getElementById(totalSizeDOMid)) { document.getElementById(totalSizeDOMid).style.color = "#000"; document.getElementById(totalSizeDOMid).innerHTML = "(" + humanAttachSize + ")"; } if (attachmentSize > maxAttachmentsSize) { document.getElementById(totalSizeDOMid).style.color = "#F00"; verbosity = fileCount > 1 ? "The attached files are" : "The attached file is"; message = "Maximum attachment file size limit of " + humanMaxAttachSize + " exceeded. " + verbosity + " " + humanAttachSize + " in size. "; message += "Click the " + btLabelReset + " button to reset the attached file list."; sizeExceeded = 1; // trigger dialog if (context == 1) { this.AmorphDialogHandler(idAmorphDialog, 'Attachment File Size Warning', message, btLabelReset, function() { WR.AttachmentResetField(inputDOMid); $(jqID).modal('hide'); document.getElementById(inputDOMid).focus(); }); } } } } return message; }, AttachmentResetLinkToggle : function (inputID) { var refInput = document.getElementById(inputID) ? document.getElementById(inputID) : null; var resetID = inputID + "reset"; var refLink = document.getElementById(resetID) ? document.getElementById(resetID) : null; var newState; if (refInput !== null && refLink !== null) { newState = refInput.value !== "" ? "inline" : "none"; refLink.style.display = newState; } }, AttachmentResetField : function (inputID) { var refInput = document.getElementById(inputID) ? document.getElementById(inputID) : null; var listID = inputID + "list"; var totalSizeID = inputID + "totalsize"; if (refInput !== null) { refInput.value = ""; // list if (document.getElementById(listID)) { document.getElementById(listID).innerHTML = ""; } // size if (document.getElementById(totalSizeID)) { document.getElementById(totalSizeID).innerHTML = ""; } this.AttachmentResetLinkToggle(inputID); } }, ConvertBytesToXBytes : function (numBytes) { var convertedBytes; var xb = ""; convertedBytes = !isNaN(numBytes) ? numBytes : -1; if (convertedBytes !== -1) { convertedBytes = numBytes < Math.pow(10, 6) ? convertedBytes / Math.pow(10, 3) : convertedBytes; // KB convertedBytes = numBytes >= Math.pow(10, 6) ? convertedBytes / Math.pow(10, 6) : convertedBytes; // MB convertedBytes = Math.round(convertedBytes); } xb = numBytes < Math.pow(10, 6) ? "KB" : "MB"; xb = convertedBytes == -1 ? "" : xb; xb = convertedBytes.toString() + " " + xb; return xb; }, ParsePrivConfigData : function (requestTypeIndexDOMid, sg) { var ref = document.getElementById(requestTypeIndexDOMid) ? document.getElementById(requestTypeIndexDOMid) : null; var requestTypePrivConfig = null; var targetData = null; var data = null; var field; var x; if (ref !== null) { requestTypePrivConfig = ref.innerHTML; requestTypePrivConfig = requestTypePrivConfig.replace(/(?:\r\n|\r|\n)/g, ''); requestTypePrivConfig = JSON.parse(requestTypePrivConfig); for(x=0; x < requestTypePrivConfig.length; x++) { data = requestTypePrivConfig[x]; if (data.securityGroup) { if (sg !== "") { targetData = data.securityGroup == sg ? data : targetData; } else { // securityGroup not specified, use default configuration targetData = data; } } } // set fields if (targetData !== null) { for(field in targetData) { if (document.getElementById(field)) { document.getElementById(field).value = targetData[field]; } } } } }, PrivConfigSetFields : function (selObj) { var privReqTypeIndexDivID = selObj.value; var selectedOptionLabel = selObj[selObj.selectedIndex].text; var sgPattern = /\(([^)]+)\)$/; // option pattern that may be found in select option label var regExResult; var sg = ""; // secGroup regExResult = selectedOptionLabel.match(sgPattern); sg = regExResult !== null && regExResult.length == 2 ? regExResult[1] : ""; this.ParsePrivConfigData(privReqTypeIndexDivID, sg); }, FilterWhitespace : function (inputObj) { var ref = null; if (typeof inputObj === "object") { ref = inputObj; } else if (typeof inputObj === "string") { ref = document.getElementById(inputObj) ? document.getElementById(inputObj) : null; } if (ref !== null) { ref.value = ref.value.replace(/ /g, ""); } } };