let wakeLock = null; function ajax_form(_form, _response_message_container, _callback){ try{ var rr = _form; if(_response_message_container != null && _response_message_container != undefined) rr=_response_message_container; cj(rr) rr.find(':button,.btn,.bt').attr('disabled', 'disabled').addClass('disabled'); $.ajax({ url: _form.attr('action'), data: _form.serialize(), cache: false, dataType: 'json', method: 'POST', success: function(_d){ process_ajax_response(rr, _d); if(_callback != null && _callback != undefined) _callback(_d); } }); }catch(ex){ handle_error(ex); } } function handle_error(_ex,_alert){ try{ if(_ex!=null&&_ex!=undefined){ console.log(_ex); if(_alert!=undefined && _alert!=null && _alert==true) alert(_ex.message); } }catch(exx){} } function process_ajax_response(_parent,_d,_no_scroll){ try{ clear_ajax_response(_parent); if(_no_scroll==null||_no_scroll==undefined)_no_scroll=0; if(_d.success&&_d.redirect_url!=null&&_d.redirect_url!=undefined&&_d.redirect_url.length>0){ if(_d.redirect_url.indexOf('blank::')>-1){ url=_d.redirect_url.substr(_d.redirect_url.indexOf('blank::')+7,_d.redirect_url.length); //add blank:: to beginning of URL to open in new window window.open(url); }else{ window.location=_d.redirect_url; } } if(_parent.find('.alert-ajax-response').length==0){ _parent.prepend('
'); } _parent.find('.alert-ajax-response').removeClass('alert-danger').removeClass('alert-success').addClass(_d.success ? 'alert-success' : 'alert-danger').html(_d.message != undefined && _d.message != '' ? _d.message : ''); if(_d.message!=undefined&&_d.message!=''){ _parent.find('.alert-ajax-response').fadeIn('fast',function(){ var npos=_parent.find('.alert-ajax-response:first').offset().top-75; if(_no_scroll==0){ $('html,body').animate({ scrollTop: npos }); } }); }else{ _parent.find('.alert-ajax-response').hide(); } return _d.success; }catch(ex){ handle_error(ex); } return false; } function pp(_parent,_d,_no_scroll){return process_ajax_response(_parent,_d,_no_scroll)}; function clear_ajax_response(_parent){ try{ if(_parent != null && _parent != undefined && _parent.length > 0){ if(_parent.find('.err-misc').length>0) _parent.find('.err-misc').hide(); if(_parent.find('.alert-ajax-response').length>0) _parent.find('.alert-ajax-response').removeClass('alert-danger').removeClass('alert-success').html('').hide(); $('.field-group').removeClass('mdn-error'); //field specific errors, ex: register/account pages } }catch(ex){} } function cj(_parent){clear_ajax_response(_parent)}; function clean(_parent){clear_ajax_response(_parent)}; //show ajax style message, where parent is the container and _message is the message function show_message(_parent,_message,_success,_no_scroll){ try{ if(_message&&_parent){ if(_parent.find('.alert-ajax-response').length==0) _parent.prepend('
'); _parent.find('.alert-ajax-response').removeClass('alert-danger').removeClass('alert-success').addClass(_success?'alert-success':'alert-danger').html(_message); _parent.find('.alert-ajax-response').fadeIn('fast',function(){ if(_no_scroll==null||_no_scroll==undefined||_no_scroll==false){ $('html,body').animate({ scrollTop: _parent.find('.alert-ajax-response:first').offset().top-75 }); } }); } }catch(ex){ handle_error(ex); } } function ordinal(_n) { var s=["th","st","nd","rd"], v=_n%100; return _n+(s[(v-20)%10]||s[v]||s[0]); } function ucfirst(_str) { return _str.charAt(0).toUpperCase()+_str.slice(1); } function prep_arr(_d){ if(_d!=null&&_d.success&&_d.results.count==1){ var tmp=_d.results.data; _d.results.data=[]; _d.results.data.push(tmp); } return _d; } function unflatten(_d){return prep_arr(_d)}; function fallback_copy_text_to_clipboard(text) { var textArea = document.createElement("textarea"); textArea.value = text; // Avoid scrolling to bottom textArea.style.top = "0"; textArea.style.left = "0"; textArea.style.position = "fixed"; document.body.appendChild(textArea); textArea.focus(); textArea.select(); try { var successful = document.execCommand('copy'); var msg = successful ? 'successful' : 'unsuccessful'; } catch (err) { } document.body.removeChild(textArea); } function copy_to_clipboard(text) { if (!navigator.clipboard) { fallback_copy_text_to_clipboard(text); return; } navigator.clipboard.writeText(text).then(function() { }, function(err) { }); } function plur(_word,_count){ if(_count!=null&&parseInt(_count)>1){ return _word+'s'; }else{ return _word; } } var entityMap = { "&": "&", "<": "<", ">": ">", '"': '"', "'": ''', "/": '/' }; function escape_html(string) { return String(string).replace(/[&<>"'\/]|[\n]/g, function (s) { return entityMap[s]; }); } function format_bytes(a,b){if(0==a)return"0 Bytes";var c=1024,d=b||2,e=["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"],f=Math.floor(Math.log(a)/Math.log(c));return parseFloat((a/Math.pow(c,f)).toFixed(d))+" "+e[f]} //if number is invalid or undefined or null, return a dash function prep_num(_num){ if(_num == null || _num == undefined || _num == 'null'){ return '-'; }else{ return _num; } } //gets a string between a string function gbs(str_in,str_start,str_end){ var m_start = str_in.indexOf(str_start, 0); var m_end = str_in.indexOf(str_end, m_start + str_start.length); if(m_start == -1 || m_end == -1 || m_start > m_end){ return ""; }else{ return str_in.substr(m_start + str_start.length, m_end - (m_start + str_start.length)); } } //gets a string between a string, ignore case function gbsi(str_in, str_start, str_end){ var m_start = str_in.toLowerCase().indexOf(str_start.toLowerCase(), 0); var m_end = str_in.toLowerCase().indexOf(str_end.toLowerCase(), m_start + str_start.length); if(m_start == -1 || m_end == -1 || m_start > m_end){ return ""; }else{ return str_in.substr(m_start + str_start.length, m_end - (m_start + str_start.length)); } } //add commas to numbers function add_commas(nStr){ nStr += ''; x = nStr.split('.'); x1 = x[0]; x2 = x.length > 1 ? '.' + x[1] : ''; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + ',' + '$2'); } return x1 + x2; } //convert number from something like 19437675 to 1.93m, 1935 to 1.9K, designed for INTs function nice_num(_num,_digits){ if(_digits == null || _digits == undefined) _digits = 1; if(_num != null && _num != undefined && _num != '-'){ if(_num < 10){ return _num; }else if(_num >= 10 && _num < 1000){ return parseInt(_num); }else{ var ff=nFormatter(_num,1); if(ff.indexOf('.')>1){ ff=nFormatter(_num,0); } return ff; } }else{ return _num; } } function nFormatter(num, digits) { var si = [ { value: 1E18, symbol: "E" }, { value: 1E15, symbol: "P" }, { value: 1E12, symbol: "T" }, { value: 1E9, symbol: "B" }, { value: 1E6, symbol: "M" }, { value: 1E3, symbol: "K" } ], i; for (i = 0; i < si.length; i++) { if (num >= si[i].value) { return (num / si[i].value).toFixed(digits).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, "$1") + si[i].symbol; } } return num.toString(); } (function (original) { jQuery.fn.clone = function () { var result = original.apply(this, arguments), my_textareas = this.find('textarea').add(this.filter('textarea')), result_textareas = result.find('textarea').add(result.filter('textarea')), my_selects = this.find('select').add(this.filter('select')), result_selects = result.find('select').add(result.filter('select')); for (var i = 0, l = my_textareas.length; i < l; ++i) $(result_textareas[i]).val($(my_textareas[i]).val()); for (var i = 0, l = my_selects.length; i < l; ++i) { for (var j = 0, m = my_selects[i].options.length; j < m; ++j) { if (my_selects[i].options[j].selected === true) { result_selects[i].options[j].selected = true; } } } return result; }; }) (jQuery.fn.clone); //shrinks a field down to a specific length or returns N/A if it contains invalid data function shorten_field(_f,_lowercase,_uppercase,_len){ if(_f!=null&&_f.length>0){ if(_lowercase)_f=_f.toLowerCase(); if(_uppercase)_f=_f.toUpperCase(); if(_f==null||_f==''){ _f='N/A'; }else if(_f.length>_len){ _f=_f.substr(0,_len)+'...'; } return _f; }else{ return 'N/A'; } } function simplify_error(_err,_response_code){ try{ if(_err){ if(_err.indexOf('Unexpected token < in JSON')>-1){ _err='Invalid response received from server. Please try again.'; } }else if(_response_code&&_response_code==404) { _err='Page not found. Please try again later or contact support if problem persists.'; }else if(_response_code&&_response_code==500) { _err='Internal server error. Please try again later or contact support if problem persists.'; } }catch(ex){ } return _err; } function set_cookie(key, value, expiry) { var expires = new Date(); expires.setTime(expires.getTime() + (expiry * 24 * 60 * 60 * 1000)); document.cookie = key + '=' + value + ';expires=' + expires.toUTCString(); } function get_cookie(key) { var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)'); return keyValue ? keyValue[2] : null; } function erase_cookie(key) { var keyValue = getCookie(key); setCookie(key, keyValue, '-1'); } /*2023-03-27*/ function isi(_val){ if(_val===undefined||_val===null||_val.length==0){ return false; }else{ return true; } } /*2023-03-27, expecting jquery selector item like $(item)*/ function is_checkbox(_item) { if(_item){ return _item.attr('type')==='checkbox'; }else{ return false; } }; function proc_form(_form,_button,_url,_data,_callback){ try{ if(_data===null||_data===undefined||_data==='')_data=_form.not('.skip-disable').serialize(); if(_button===null||_button===undefined||_button==='')_button=_form.find('submit:first'); if(_button===null||_button===undefined||_button==='')_button=_form.find('.btn:first'); if(_form){ $.ajax({ method:'POST', url:_url, data:_data, dataType:'json', beforeSend:function(_xhr){ _form.find('.required').removeClass('incomplete-field'); _form.find('.required').each(function(){ if($(this).val().length==0){//validate required fields and quit without submitting if incomplete $(this).addClass('incomplete-field'); show_message(_form,'Please complete the required fields marked with a red border.',false); _xhr.abort(); return false; } }); if(_button.hasClass('btn-dots')){//buttons that we want to swap ... for text to indicate loading var op=_button.html(); _button.html('...').attr('op',op); } _form.find(':button,:input,.btn').not('.skip-disable').attr('disabled','disabled').addClass('disabled'); } }).done(function(_d){ _form.find(':button,:input,.btn').not('.skip-disable').removeAttr('disabled').removeClass('disabled'); _form.find('.btn-dots').each(function(){ var attr=$(this).attr('op'); if (typeof attr !== typeof undefined && attr !== false){ $(this).text($(this).attr('op')); } }); pp(_form,_d); if(_callback!=null&&_callback!=undefined){ _callback(_d); } }).fail(function(_xhr,_status,_err) { show_message(_form,simplify_error(_err.message,_xhr.status),false); }).always(function() { _form.find(':button,:input,.btn').not('.skip-disable').removeAttr('disabled').removeClass('disabled'); _form.find('.btn-dots').each(function(){ var attr=$(this).attr('op'); if (typeof attr !== typeof undefined && attr !== false){ $(this).text($(this).attr('op')); } }); }); }else{ console.log('no form detected'); } }catch(ex){ } } /*https://developer.chrome.com/articles/wake-lock/*/ const requestWakeLock = async () => { try { wakeLock = await navigator.wakeLock.request('screen'); wakeLock.addEventListener('release', (e) => { console.log('Wake Lock was released'); }); console.log('Wake Lock is active'); } catch (e) { console.error(`${e.name}, ${e.message}`); } }; const releaseWakeLock = async () => { try{ if(wakeLock !== null){ wakeLock.release(); wakeLock = null; } }catch(e){ console.error(`${e.name}, ${e.message}`); } }; async function get_wakelock(){ setTimeout(function(){ requestWakeLock(); },100); }