// work-around for Apex bug in chrome that sporadically obscures input items on focus window.onload = (event) => { $(".apex-item-select").css("backface-visibility", "hidden") $(".apex-item-text").css("backface-visibility", "hidden") $(".apex-item-textarea").css("backface-visibility", "hidden") $(".apex-item-multi ").css("backface-visibility", "hidden") }; // ------------------------------------------------------------------------------------------------ function calcAge(dobVal,endVal) { // dob and dt are assumed to be valid mm/dd/yyyy dates var endArr = endVal.split('/'); var dobArr = dobVal.split('/'); // age based just on year age = parseInt(endArr[2]) - parseInt(dobArr[2]); if(isNaN(age)) return ""; // adjust for month and day var endMMDD = parseInt(endArr[0]+endArr[1]); var dobMMDD = parseInt(dobArr[0]+dobArr[1]); if(dobMMDD > endMMDD) { // end date month and day greater than start day month, have not reached age based on calendar year difference --age; } return age; } // ------------------------------------------------------------------------------------------------ function calcAgeItems(dobId, dtId) { // dobItm and dtItm are assumed to contain valid mm/dd/yyyy dates return calcAge( $("#"+dobId).val() , $("#"+dtId).val() ) } // ------------------------------------------------------------------------------------------------ function addToolTipEvent() { // designed to append the tooltip to the body // and display in right position with in the window frame $('.tooltip').hover(function() { $('

').text(this.getAttribute("data-desc")).appendTo("body").fadeIn("slow"); }, function() { $(".tooltip2").remove(); }).mousemove(function(b) { var leftPos = b.pageX + 20; var topPos = b.pageY + 10; //var disptt = $('#dispToolTip'); //var dispWidth = disptt.width; //alert(disptt); //alert(dispWidth); if(leftPos > window.innerWidth - 530) { leftPos = window.innerWidth - 530; } $(".tooltip2").css({ top: topPos, left: leftPos }); }); } // ------------------------------------------------------------------------------------------------ function setAgeItem(itmId, dobId, dtId) { $("#" + itmId).val( calcAgeItems(dobId, dtId) ); } // ------------------------------------------------------------------------------------------------ function setIfNull(itmId, fromId) { if($("#"+itmId).val() == "") { $("#"+itmId).val($("#"+fromId).val()); } } // ------------------------------------------------------------------------------------------------ function today() { var dt = new Date(); var mm2 = dt.getMonth(); var yyyy2 = dt.getFullYear(); var dd2 = dt.getDate(); // increment for formatting mm2 += 1; if(mm2 < 10) mm2 = "0" + mm2; if(dd2 < 10) dd2 = "0" + dd2; dtVal = mm2 + "/" + dd2 + "/" + yyyy2; return(dtVal); } // ------------------------------------------------------------------------------------------------ function checkDateVal(dtVal) { // this can be replaced with: // var dateVar = $.datepicker.parseDate( "mm/dd/yy", dtVal ); // which returns a JavaScript date, which can then be formatted with // return $.datepicker.formatDate( "mm/dd/yy", dateVar); // need to user try{} catch{} to catch Invalid date errors var delimiter; if(dtVal.indexOf("/") > -1){ delimiter = "/"; } else if(dtVal.indexOf("-") > -1){ delimiter = "-"; } var dtArr = dtVal.split(delimiter); var mm; var dd; var yyyy; if(dtArr.length == 3) { if(dtVal.length == 10 ) { if(delimiter=="/"){ mm = parseInt(dtArr[0]); dd = parseInt(dtArr[1]); yyyy = parseInt(dtArr[2]); } else { yyyy = parseInt(dtArr[0]); mm = parseInt(dtArr[1]); dd = parseInt(dtArr[2]); } } else { return("err:Invalid date format (use mm/dd/yyyy): " + dtVal); } } else if(dtArr.length == 1 && dtVal.length == 8) { mm = parseInt(dtVal.substr(0,2)); dd = parseInt(dtVal.substr(2,2)); yyyy = parseInt(dtVal.substr(4,4)); } else { return("err:Invalid date format (use mm/dd/yyyy): " + dtVal); } // is date valid? var dtUTC = Date.UTC(yyyy, mm, dd); if(isNaN(dtUTC)) { return("err:Invalid date format (use mm/dd/yyyy): " + dtVal); } var dt = new Date(yyyy,mm-1,dd); var mm2 = dt.getMonth(); var yyyy2 = dt.getFullYear(); var dd2 = dt.getDate(); // did elements convert to input value? if(mm-1 != mm2 || dd != dd2 || yyyy != yyyy2) { return("err:Invalid date : " + dtVal); } // increment for formatting mm2 += 1; if(mm2 < 10) mm2 = "0" + mm2; if(dd2 < 10) dd2 = "0" + dd2; dtVal = mm2 + "/" + dd2 + "/" + yyyy2; return(dtVal); } // checkDateVal // ------------------------------------------------------------------------------------------------ function asDate(dtStr,pDelimiter) { if(dtStr == "") return ""; var dtArr = dtStr.split(pDelimiter); var dt = new Date(dtArr[2], dtArr[0]-1, dtArr[1]); return dt; } // ------------------------------------------------------------------------------------------------ function checkDateItemId(itemId, minDate, maxDate) { if ((document.getElementById(itemId).getAttribute("class") != null && document.getElementById(itemId).getAttribute("class") != undefined) && document.getElementById(itemId).getAttribute("class").indexOf('apex-item-datepicker-jet') >= 0) { //console.log('oj'); var itm = document.getElementById(itemId+'|input'); } else { //console.log('not oj'); var itm = document.getElementById(itemId); } if(itm.value == "") return true; var dateValue = itm.value.substr(0,10); var dtVal = checkDateVal(dateValue); if(dtVal.slice(0,4) == 'err:') { //alertMsg(dtVal.slice(4),'Invalid Date ',itemId,'','','OK'); itm.value = ''; apex.message.alert(dtVal.slice(4)); return false; } // valid date, display formatted version itm.value = dtVal; // valid range? if(minDate != undefined || maxDate != undefined) { if( (minDate != "" && asDate(dtVal) < asDate(minDate)) || (maxDate != "" && asDate(dtVal) > asDate(maxDate)) ) { if(minDate != "" && maxDate != "") { alertMsg( "Date must be from " + minDate + " to " + maxDate, "Invalid Date", itemId,'','','OK'); } else if(minDate != "") { alertMsg( "Date cannot be less than " + minDate, "Invalid Date", itemId,'','','OK'); } else if(maxDate != "") { alertMsg( "Date cannot be greater than " + maxDate, "Invalid Date", itemId,'','','OK'); } return false; } } return true; } // checkDateItemId // ------------------------------------------------------------------------------------------------ // not used as of 6/5/2018 function isDate(dtVal,itemID) { var dtArr = dtVal.split('/'); var mm; var dd; var yyyy; if(dtArr.length == 3 && dtVal.length == 10 ) { mm = parseInt(dtArr[0])-1; dd = parseInt(dtArr[1]); yyyy = parseInt(dtArr[2]); } else if(dtVal.length != 8) { alertMsg("Invalid date: " + dtVal, "Invalid Date", itemID,'','','OK'); return false; } else { mm = parseInt(dtVal.substr(0,2))-1; dd = parseInt(dtVal.substr(2,2)); yyyy = parseInt(dtVal.substr(4,4)); } var dt = Date.UTC(yyyy, mm, dd); if(isNaN(dt)) { alertMsg("Invalid date: " + dtVal, "Invalid Date", itemID,'','','OK'); return false; } return true; } // ------------------------------------------------------------------------------------------------ // originally created for page 17 of Marriage & Divorce app // reworked to pass target page number // note that the Pxx_REPORT_PAGE_ID item is still required on the target page function printerFriendly(tgtPage) { var appID = $v('pFlowId'); // APP_ID var pageID = $v('pFlowStepId'); // APP_PAGE_ID var sessionID = $v('pInstance'); // SESSION var vUrl = "f?p=" + appID + ":" + tgtPage + ":" + sessionID + "::NO:RP:P"+tgtPage+"_REPORT_PAGE_ID:" + pageID window.open(vUrl, "_blank", "width=800,height=600"); } // ------------------------------------------------------------------------------------------------ function alertMsg(msg, ttl, itm, ht, wd, btn1, btn2, btn3) { // sized per Apex item help var htVar = (!ht ? 350 : ht); var wdVar = (!wd ? 500 : wd); var ttlVar = (!ttl ? "Alert!" : ttl); var msg = $('
') .html(msg.replace("\n","
")) .dialog({ autoOpen : false , modal : true //removed since Apex item help dialogs do not slide //, hide : 'slideUp' , closeOnEscape : true , title : ttlVar , height : htVar , width : wdVar }); // conditionally add buttons if(btn1) { var buttonsArr = []; var btn1Split= btn1.split(":"); buttonsArr.push({text: btn1Split[0], click: function(){eval(btn1Split[1]); $(this).dialog('close');}}); if(btn2) { var btn2Split= btn2.split(":"); buttonsArr.push({text: btn2Split[0], click: function(){eval(btn2Split[1]); $(this).dialog('close');}}); } if(btn3) { var btn3Split= btn3.split(":"); buttonsArr.push({text: btn3Split[0], click: function(){eval(btn3Split[1]); $(this).dialog('close');}}); } msg.dialog("option","buttons", buttonsArr); } // set the item to refocus on if(itm) { msg.on( "dialogbeforeclose", function( event, ui ) {itemRefocus(itm);} ); } // open the dialog msg.dialog('open'); // apex 19 requires button styling var alertButtons = $(".ui-button"); //.css("padding","8px 12px"); for(a=0;a'; } } } //alertMsg // ------------------------------------------------------------------------------------------------ function itemRefocus(itmId) { // designed for returning to item after validation failure // item value is saved and cleared // timer refocuses on item and resets the falue var itm = document.getElementById(itmId); var temp = itm.value; itm.value = ''; setTimeout(function() { itm.focus(); itm.value = temp ; } , 500 ); } // ------------------------------------------------------------------------------------------------ // initially developed for setting reference item in a tabular form // given an item's id, find its sibling based on the headers value (which apex maps to the row source column alias) // then change the item's inner HTML to the passed value function setSiblingInnerHTML(itmID, hdr, val) { var theTR = document.getElementById(itmID).parentElement.parentElement; var theTDs = theTR.children; for(theItm in theTDs) { var thisTD = theTDs[theItm]; // looking for the item that needs to be updated with the description if(thisTD.headers == hdr) { thisTD.innerText = val; break; } } } // refresh vvests session timeout cookie var exp = new Date(); var oneminFromNow = new Date(exp.getTime() + 1800000); setSessionCookie('vvestssession',oneminFromNow); function setSessionCookie(cookieName, expires){ var str = escape(cookieName) + "=mysession"; str = str+"; expires="+ expires.toGMTString(); document.cookie = str; } var isNN = (navigator.appName.indexOf("Netscape")!=-1); function autoTab(input,len, e) { var keyCode = (isNN) ? e.which : e.keyCode; var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46]; if(input.value.length >= len && !containsElement(filter,keyCode)) { input.value = input.value.slice(0, len); input.form[(getIndex(input)+1) % input.form.length].focus(); } function containsElement(arr, ele) { var found = false, index = 0; while(!found && index < arr.length) if(arr[index] == ele) found = true; else index++; return found; } function getIndex(input) { var index = -1, i = 0, found = false; while (i < input.form.length && index == -1) if (input.form[i] == input)index = i; else i++; return index; } return true; }