var userLang = navigator.language || navigator.userLanguage;
var curr_lng=userLang.substr(0, 2);
$(document).ready(function() {
// default button clicks on enter
$(document).keypress(function(event) {
if (event.which == 13) {
event.preventDefault();
$('.btn-default:enabled').trigger('click');
}
});
loadConf(curr_lng, false, function(_langs, _conf, ws) {
$('.select2').on('select2:closing', function(e) {
$(this).parent().find('ul.select2-selection__rendered').css('height','');
$(this).parent().find('.select2-search.select2-search--inline').hide();
// if ($(this).val().length == 0) {
if (e.currentTarget.value.length == 0) {
$(this).parent().find('.select2-search.select2-search--inline').show();
}
}).on('select2:opening', function(e) {
$(this).parent().find('ul.select2-selection__rendered').css('height','initial');
$(this).parent().find('.select2-search.select2-search--inline').show();
}).on('select2:select select2:unselect', function() {
var select2=$(this);
if (select2.val().length == select2.data('select2').options.options.maximumSelectionLength) {
select2.select2('close');
}
});
var url = window.location.pathname;
if (url == '/' && $('input[type=hidden]#_login').val() == "1") {
document.location = '/'+_conf.modules[0];
}
var _page = document.getElementById('_page');
$('.navbar-brand img').attr('src',_conf.navbarLogo);
$('img.mapLogo').attr('src',_conf.loginLogo);
$('.customLogo img, img.customLogo').attr('src',_conf.customLogo);
$('head #colorStyle').attr('href','/css/'+_conf.themeColors[Object.keys(_conf.themeColors)[0]]);
var modules_li='';
$.each(_conf.modules, function(k,v) {
if (v) {
if (url=='/'+v) {
var active='active';
} else {
var active='';
}
modules_li+='
'+_langs[v]+'';
}
});
$('.nav.navbar-nav.modules').html(modules_li);
// user settings
$('.nav .user_settings').bind('click', function() {
$('.modal .modal-header .modal-title').text(_langs.settings);
var settings_html='';
settings_html+='';
settings_html+='';
settings_html+='';
settings_html+=' ';
let i=0;
let sel='sel orig';
$.each(_conf.themeColors, function(k,v) {
if (i>0) {
sel='';
}
settings_html+=' ';
i++;
})
settings_html+='
';
settings_html+='';
settings_html+='';
settings_html+='';
settings_html+='
';
$('.modal .modal-body').html(settings_html);
$('.modal').modal();
var name=$('.modal .name');
var pass=$('.modal .password');
var pass1=$('.modal .password1');
pass.bind('keydown', function() {
pass.css('color','');
});
pass1.bind('keydown', function() {
pass1.css('color','');
});
$('.modal .changeTheme').bind('click', function() {
$('.modal .changeTheme').removeClass('sel');
var thisBtn=$(this);
thisBtn.addClass('sel');
var theme=thisBtn.attr('id');
$('head #colorStyle').attr('href','/css/'+theme);
});
$('.modal .modal-footer .ok').bind('click', function() {
if (pass.val() || pass1.val()) {
if (pass.val().length<8) {
pass.addClass('shakeX').css('color','#f00');
setTimeout(function() {
pass.removeClass('shakeX');
}, 750);
return false;
} else if (pass.val()!=pass1.val()) {
pass.addClass('shakeX').css('color','#f00');
pass1.addClass('shakeX').css('color','#f00');
setTimeout(function() {
pass.removeClass('shakeX');
pass1.removeClass('shakeX');
}, 750);
return false;
} else {
var out=userEditData('pass',pass.val());
}
} else {
var out=userEditData('name',name.val());
}
var out=userEditData('colorTheme',$('.modal .changeTheme.sel').attr('id'));
$('.navbar .nav .dropdown .user_real_name').html(name.val()+'');
$('.modal').modal('hide');
});
$('.modal .modal-footer .cancel').bind('click', function() {
$('head #colorStyle').attr('href','/css/'+$('.modal .changeTheme.orig').attr('id'));
});
$('.clear_recent_searches').bind('click', function() {
if (confirm(_langs.clear_recent_searches+' ?')) {
var out=clearRecentSearches($(this));
}
});
});
$(document).ajaxComplete(function(e,xhr,set) {
if (xhr.status == 408) {
$('.modal .modal-header .modal-title').text(_langs.session_expired);
$('.modal .modal-body').text(_langs.login_again);
$('.modal .modal-footer .cancel').addClass('hide');
$('.modal .modal-footer .ok').bind('click', function() {
window.location=window.location.pathname;
});
$('.modal').modal();
}
});
if ($('.nav .user_settings').length>0) {
getUserData();
}
$('.muteToggle').bind('click', function() {
$('.muteToggle.glyphicon-volume-up').toggle();
$('.muteToggle.glyphicon-volume-off').toggle();
var out=userEditData('muteAlarm',$(this).attr('value'));
});
function userEditData(param,value) {
var out;
$.ajax({
url: "/api/v2/userEditData",
data: JSON.stringify({
"param" : param,
"value" : value
}),
success: function(res) {
out=res;
}
});
return out;
}
function clearRecentSearches(el) {
var out;
$.ajax({
url: "/api/v2/clearRecentSearches",
beforeSend: function() {
el.removeClass('btn btn-warning').attr('disabled', true);
},
success: function(res) {
out=res;
}
});
return out;
}
});
var _userData;
function getUserData() {
$.ajax({
url: "/api/v2/getUserData",
data: '',
success: function(userData) {
if (userData.data) {
var userDet=userData.data.user;
}
_userData=userDet;
if (userData.data.user.colorTheme != null) {
$('head #colorStyle').attr('href','/css/'+userData.data.user.colorTheme);
}
if (userData.data.user.muteAlarm == 1) {
$('.muteToggle.glyphicon-volume-up').toggle();
$('.muteToggle.glyphicon-volume-off').toggle();
}
$('input[type=text]._user, input[type=password]._user').each(function(k,v) {
var this_el=$(v);
var lang_label=userDet[this_el.attr('alt')];
this_el.prop('placeholder', lang_label);
});
$('input[type=button]._user, input[type=submit]._user').each(function(k,v) {
var this_el=$(v);
var lang_label=userDet[this_el.attr('alt')];
this_el.val(lang_label);
});
$('div._user, span._user, a._user, label._user').each(function(k,v) {
var this_el=$(v);
var lang_label=userDet[this_el.attr('alt')];
this_el.html(lang_label);
});
}
});
}
$('ul._lang_switch').delegate('li a', 'click', function() {
loadLang($(this).text().toLowerCase());
});
// date from/to
$('.navbar .datetimepicker2').datetimepicker({
minDate: moment().add(-1, 'years'),
maxDate: 'now',
allowInputToggle: true,
format: 'YYYY-MM-DD',
locale: curr_lng,
ignoreReadonly: true,
defaultDate: moment()
// keepOpen: true
});
$(".navbar .datetimepicker2 .date_from").val(moment().subtract(1, 'days').format('YYYY-MM-DD'));
});
$.ajaxSetup({
dataType: "json",
method: "POST",
contentType: "application/json; charset=utf-8",
complete: function() {
$('.preloader').addClass('hide');
},
error: function(res) {
$('.preloader').addClass('hide');
}
});
function isJson(text){
if (typeof text !== "string") {
return false;
}
try {
var json = JSON.parse(text);
return (typeof json === 'object');
}
catch (error){
return false;
}
}
function showConnectionLostReload(_langs, why = false) {
$('.mainMenu .devicesList li.li_search_for_dev').nextAll().remove();
$('.mainMenu .deviceCount b').html('
');
if (why !== false) {
$.ajax({
url: "/api/v2/sendServiceEmail",
data: JSON.stringify({
"why" : 'modalAlertEvent : ' + why
})
});
}
$('.modal .modal-header .modal-title').text(_langs.connection_lost);
$('.modal .modal-body').html(_langs.need_reload);
$('.modal .modal-footer .cancel').addClass('hide');
$('.modal .modal-footer .ok').bind('click', function() {
window.location=window.location.pathname;
});
$('.modal').modal();
}
function wakeUpHideModal() {
$('.modal').modal('hide');
$('.modal, .modal-backdrop').hide();
}
function loadConf(lng, connectToWs = false, callback) {
var ws;
var wsTimeout;
var _conf;
var _langs;
var _lng;
$.ajax({
url: "/api/v2/loadConf/"+lng,
cache: true,
beforeSend: function() {
$('.preloader').removeClass('hide');
},
complete: function(res) {
if (res.status == 200) {
$('.preloader').addClass('hide');
res = res.responseJSON;
_conf=res.data;
_langs=res.data.lang;
_lng=res.data.lng;
if (connectToWs === true) {
// ws = new WebSocket(_conf.socketServerUrl+'?wsa='+_conf.auth);
ws = new ReconnectingWebSocket(_conf.socketServerUrl+'?wsa='+_conf.auth, null, { reconnectInterval: 1000, reconnectDecay: 1 });
// re/connect
window.addEventListener('online', e => {
ws.send('___ping___', { binary: false });
wakeUpHideModal();
clearTimeout(wsTimeout);
});
// sleep or disconnect
window.addEventListener('offline', e => {
wsTimeout = setTimeout(function() {
ws.send('___ping___', { binary: false });
showConnectionLostReload(_langs, 'offlineEvent');
}, _conf.socketConnectionCheckIsLiveSecondsTimeOut*1000);
});
// wakeup
var lastTime = (new Date()).getTime();
setInterval(function() {
var currentTime = (new Date()).getTime();
if (currentTime > (lastTime + 1000*2)) {
wakeUpHideModal();
ws.send('___ping___', { binary: false });
}
lastTime = currentTime;
}, 1000);
// ping-pong
setInterval(function() {
ws.send('___ping___', { binary: false });
wsTimeout = setTimeout(function() {
ws.send('___ping___', { binary: false });
showConnectionLostReload(_langs);
}, _conf.socketConnectionCheckIsLiveSecondsTimeOut*1000);
}, _conf.socketConnectionCheckIsLiveSeconds*1000);
var reconnectAttemptsCount;
ws.onclose = function() {
reconnectAttemptsCount = setInterval(function() {
if (ws.reconnectAttempts >= 10) {
showConnectionLostReload(_langs, 'ws.onclose');
clearInterval(reconnectAttemptsCount);
}
}, ws.reconnectInterval);
}
ws.onopen = function() {
clearInterval(reconnectAttemptsCount);
}
var devLis;
ws.addEventListener("message", function(message) {
clearTimeout(wsTimeout);
wakeUpHideModal();
if (isJson(message.data)) {
var message=JSON.parse(message.data);
var event=Object.keys(message)[0];
var data=Object.values(message)[0];
switch (event) {
case 'deviceList':
$('.mainMenu .devicesList li.li_search_for_dev').nextAll().remove();
$('.mainMenu .deviceCount b').text('0');
if ( data.length>0 ) {
$('.mainMenu .deviceCount b').text(data.length);
$('.mainMenu .devicesList li.li_search_for_dev').removeClass('hide').nextAll().remove();
$.each(data, function(k,v) {
$('.mainMenu .devicesList li.li_search_for_dev').after(''+v.devID+' - '+todHHMMSS(parseInt(new Date()-new Date(v.connectionDate))/1000, _langs)+'');
});
}
clearInterval(devLis);
devLis = setInterval(function() {
$.each(data, function(k,v) {
$('.mainMenu .devicesList li#'+v.id+' i').text(todHHMMSS(parseInt(new Date()-new Date(v.connectionDate))/1000, _langs));
});
}, 1000);
break;
case 'deviceListAdd':
$('.mainMenu .devicesList li.li_search_for_dev').removeClass('hide').after(''+data.devID+' - '+todHHMMSS(parseInt(new Date()-new Date(data.connectionDate))/1000, _langs)+'');
clearInterval(devLis);
devLis = setInterval(function() {
$.each($('.mainMenu .devicesList li[id]'), function(k,v) {
let connData=$(v).find('i').attr('alt');
$(v).find('i').text(todHHMMSS(parseInt(new Date()-new Date(connData))/1000, _langs));
});
}, 1000);
$('.mainMenu .deviceCount b').text($('.mainMenu .devicesList li[id]').length);
$('#search4connectedDev').trigger('keyup');
break;
case 'deviceListDel':
$('.mainMenu .devicesList li#'+data.id).fadeOut('', function() {
$('.mainMenu .devicesList li#'+data.id).remove();
$('.mainMenu .deviceCount b').text($('.mainMenu .devicesList li[id]').length);
});
break;
case 'newData':
$('.mainMenu .devicesList li.'+data.devID).addClass('blink_fst').find('a').css('color',_conf.mapAlarmColors[data.alarm]);
setTimeout(function() {
$('.mainMenu .devicesList li.'+data.devID).removeClass('blink_fst');
}, 1000);
break;
case 'newDataImg':
var devID=data.substring(0, data.indexOf('|'));
$('.mainMenu .devicesList li.'+devID).addClass('blink_fst');
setTimeout(function() {
$('.mainMenu .devicesList li.'+devID).removeClass('blink_fst');
}, 1000);
break;
}
} else if (message.data == "e401") {
showConnectionLostReload(_langs, 'authFail e401');
}
});
}
$('#search4connectedDev').bind('keyup', function() {
let searchDev=$(this).val();
var count=0;
$('.mainMenu .devicesList li a b').each(function(k,v) {
if ($(v).text().toUpperCase().indexOf(searchDev.toUpperCase()) == -1) {
$(v).parent().parent().hide();
} else {
$(v).parent().parent().show();
count++;
}
});
if (searchDev != '') {
$('#search4connectedDev').parent().find('span').text(count);
} else {
$('#search4connectedDev').parent().find('span').empty();
}
});
renderLang(_langs,_lng);
if (typeof callback==="function") {
callback(_langs,_conf,ws);
}
}
}
});
}
function loadLang(lng) {
$.ajax({
url: "/api/v2/loadLang/"+lng,
cache: true,
beforeSend: function() {
$('.preloader').removeClass('hide');
},
success: function(langs) {
var _langs=langs.data;
renderLang(_langs,lng);
}
});
}
function renderLang(langs,lng) {
$('input[type=text]._lang, input[type=password]._lang').each(function(k,v) {
var this_el=$(v);
var lang_label=langs[this_el.attr('alt')];
this_el.prop('placeholder', lang_label);
});
$('input[type=button]._lang, input[type=submit]._lang').each(function(k,v) {
var this_el=$(v);
var lang_label=langs[this_el.attr('alt')];
this_el.val(lang_label);
});
$('img._lang').each(function(k,v) {
var this_el=$(v);
var lang_label=langs[this_el.attr('alt')];
this_el.prop('src', lang_label);
});
$('div._lang, span._lang, a._lang, label._lang, button._lang, th._lang, td._lang').each(function(k,v) {
var this_el=$(v);
var lang_tag=this_el.attr('alt');
var lang_tag_sub='';
if (lang_tag) {
if (lang_tag.indexOf('[')>-1) {
lang_tag_sub=lang_tag.substr(lang_tag.indexOf('['), lang_tag.length);
lang_tag=lang_tag.substr(0, lang_tag.indexOf('['));
eval('var lang_label=langs[lang_tag]'+lang_tag_sub+';');
} else {
var lang_label=langs[lang_tag];
}
}
this_el.html(lang_label);
});
$('select._lang.select2').each(function(k,v) {
var this_el=$(v);
var lang_label=langs[this_el.attr('alt')];
this_el.next("span.select2:first").find("input.select2-search__field").attr('placeholder',lang_label);
});
$('._lang.curr_lng').html(lng.toUpperCase());
$.each(langs._langs, function(k,v) {
if (v!=lng) {
$('ul._lang_switch').empty().append(''+v.toUpperCase()+'');
}
});
$('.loading').fadeOut();
}
function validateEmail(email) {
var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,4}))$/;
return re.test(String(email).toLowerCase());
}
function validateUser(user) {
var re=/^[a-zA-Z0-9\_]{6,255}$/;
return re.test(String(user));
}
function validateParam(param) {
var re=/^[a-zA-Z0-9\_]{2,255}$/;
return re.test(String(param));
}
function validateDev(dev) {
var re=/^[A-Z0-9\_]{4,10}$/;
return re.test(String(dev));
}
function toHHMMSS(total_seconds) {
if (total_seconds<0) {
total_seconds=0;
}
var sec_num = parseInt(total_seconds, 10); // don't forget the second param
var hours = Math.floor(sec_num / 3600);
var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
var seconds = sec_num - (hours * 3600) - (minutes * 60);
if (hours>0) { if (hours < 10) { hours = "0"+hours+":"; } else { hours = hours+":"; } } else { hours=''; }
if (minutes < 10) {minutes = "0"+minutes;}
if (seconds < 10) {seconds = "0"+seconds;}
return hours+minutes+':'+seconds;
}
function todHHMMSS(total_seconds,lang) {
var days = Math.floor(total_seconds / 86400),
hours = (total_seconds-(days*86400)) / 3600,
minutes = (hours % 1) * 60,
seconds = (minutes % 1) * 60;
var time=("00" + Math.floor(hours)).slice(-2)+':'+("00" + Math.floor(minutes)).slice(-2)+':'+("00" + Math.floor(seconds)).slice(-2);
if (days>0) {
return days +' '+lang.days+', '+time;
} else {
return time;
}
}
function saveRecentSearches(nosafe=false) {
if (!nosafe) {
var groups = [];
$(".navbar .select_groups option:selected").each(function(){
groups.push($(this).text());
});
$.ajax({
url: "/api/v2/saveRecentSearches",
data: JSON.stringify({
"page" : $('input[type=hidden]#_page').val(),
"devices" : $(".navbar .select_devices").val(),
"groups" : {
"val" : $(".navbar .select_groups").val(),
"name" : groups
},
"params" : $(".navbar .select_parameters").val(),
"from_date" : $(".navbar .datetimepicker2 .date_from").val(),
"to_date" : $(".navbar .datetimepicker2 .date_to").val(),
"params" : $(".navbar .select_parameters").val(),
// "smooth" : $(".navbar #smooth").val(),
"autoscale" : $(".navbar #autoscale").is(':checked'),
// "rought_graph" : $(".navbar #rough-graph").is(':checked'),
"displayBy" : $('.navbar .btn-group.displayBy button.btn.sel').attr('alt'),
"waveBand" : $('.glyphicon.waveBand.On').is(':visible'),
"catch" : $(".navbar #catch").is(':checked'),
"bycatch" : $(".navbar #bycatch").is(':checked')
}),
success: function(res) {
}
});
}
}
function loadRecentSearches(devID) {
$.ajax({
url: "/api/v2/loadRecentSearches",
data: JSON.stringify({
"page" : $('input[type=hidden]#_page').val(),
// "device" : $(".navbar .select_devices").val()
}),
success: function(res) {
$('.recent_searches_menu').empty();
$.each(res.data.recentSearches, function(k,v) {
var data=v;
var li_search='';
if (data.from_date && data.to_date) {
li_search+=data.from_date+' | '+data.to_date;
} else {
li_search+=data.from_date;
}
if (data.devices.length) {
li_search+=' | ';
li_search+=data.devices;
}
if (data.groups.name.length) {
li_search+=' | ';
li_search+=''+data.groups.name+'';
}
if (data.params) {
if (data.params.length) {
li_search+=' | ';
li_search+=data.params
}
}
li_search+='';
li_search+='';
$('.recent_searches_menu').append(li_search);
});
$('.recent_searches_menu li:last-child').remove();
if (devID) {
var li=$('.recent_searches_menu li a:contains("| '+devID+' |")').parent().prop('id');
if (li) {
setTimeout(function() {
$('.recent_searches_menu li#'+li+'').trigger('click');
}, 10);
} else {
$(".navbar .select_devices").html('').val(devID).trigger('change').trigger('select2:select');
$.ajax({
url: "/api/v2/searchParams",
dataType: "json",
data: JSON.stringify({
"devices" : [devID],
"groups": [],
"searchStr" : ""
}),
method: "POST",
success: function(res) {
var firstParams=res.data.params[0];
$(".navbar .select_parameters").html('').val(Object.keys(firstParams)[0]).trigger('change').trigger('select2:select');
setTimeout(function() {
$(".navbar .datetimepicker2 .date_from").val(moment().subtract(1, 'days').format('YYYY-MM-DD'));
}, 10);
$(".reports .navbar .do_chart").trigger('click');
}
});
}
}
$('.recent_searches_menu li').bind('click', function() {
var this_li=$(this);
var id=this_li.prop('id');
var data=res.data.recentSearches[id];
// tracks
$(".navbar #catch").prop('checked', data.catch);
$(".navbar #bycatch").prop('checked', data.bycatch);
// common
$(".navbar .select_devices").html(data.devices.map(name=>'')).val(data.devices);//.trigger('change');//.trigger('select2:select');
$(".navbar .select_groups").html(data.groups.name.map(function(name,i) { return ''; } )).val(data.groups.val);//.trigger('change');//.trigger('select2:select');
$(".navbar .datetimepicker2 .date_from").val(data.from_date).trigger('dp.change');
$(".navbar .datetimepicker2 .date_to").val(data.to_date).trigger('dp.change');
// reports & table
if ($(".navbar .select_parameters").length>0) {
setTimeout(function() {
$(".navbar .select_parameters").html(data.params.map(name=>'')).val(data.params);//.trigger('change').trigger('select2:select');
$(".navbar #smooth").val(data.smooth),
$(".navbar #autoscale").prop('checked', data.autoscale);
$(".navbar #rough-graph").prop('checked', data.rought_graph);
$('.navbar .btn-group.displayBy button.btn').removeClass('sel');
if (data.waveBand === true) {
$('.glyphicon.waveBand.On').css('display', 'inline');
$('.glyphicon.waveBand.Off').css('display', 'none');
} else {
$('.glyphicon.waveBand.On').css('display', 'none');
$('.glyphicon.waveBand.Off').css('display', 'inline');
}
$('.navbar .btn-group.displayBy button.btn[alt="'+data.displayBy+'"]').addClass('sel').trigger('click');
$(".reports .navbar .do_chart").trigger('click', true);
$(".reportsTable .navbar .do_table").trigger('click', true);
}, 10);
}
});
check_do_chart();
}
});
}
function check_do_chart() {
if ($('.reports').length>0) {
if ($('.navbar .select_devices').val().length>0 || $('.navbar .select_groups').val().length>0) {
$('.navbar .select_parameters').prop('disabled', false);
if ($('.navbar .select_parameters').val().length>0) {
$(".navbar .do_chart").prop('disabled', false);
return true;
} else {
$(".navbar .do_chart").prop('disabled', true);
return false;
}
} else {
setTimeout(function() {
$('.navbar .select_parameters').val(null).prop('disabled', true).trigger('change').trigger('select2:select');
$(".navbar .do_chart").prop('disabled', true);
return false;
}, 0); // agains maximum call exceed exception
}
} else if ($('.reportsTable').length>0) {
if ($('.navbar .select_devices').val().length>0) {
$('.navbar .select_parameters').prop('disabled', false);
if ($('.navbar .select_parameters').val().length>0) {
$(".navbar .do_table").prop('disabled', false);
return true;
} else {
$(".navbar .do_table").prop('disabled', true);
return false;
}
} else {
setTimeout(function() {
$('.navbar .select_parameters').val(null).prop('disabled', true).trigger('change').trigger('select2:select');
$(".navbar .do_table").prop('disabled', true);
return false;
}, 0); // agains maximum call exceed exception
}
}
}
function delay(callback, ms=500) {
var timer = 0;
return function() {
var context = this, args = arguments;
clearTimeout(timer);
timer = setTimeout(function () {
callback.apply(context, args);
}, ms || 0);
};
}
function escapeHtml(text) {
return text
.replace(/&/g, "&")
.replace(//g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
function isMobile() {
let check = false;
(function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|ipad|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);
return check;
};
function dateStr(frmt=false) {
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth()+1;
month = (month < 10 ? '0' : '')+month;
var day = date.getDate();
day = (day < 10 ? '0' : '')+day;
var hours = date.getHours();
hours = (hours < 10 ? '0' : '')+hours;
var minutes = date.getMinutes();
minutes = (minutes < 10 ? '0' : '')+minutes;
var seconds = date.getSeconds();
seconds = (seconds < 10 ? '0' : '')+seconds;
if (frmt) {
var data = year+'-'+month+'-'+day+' '+hours+':'+minutes+':'+seconds;
} else {
var data = year+''+month+''+day+''+hours+''+minutes+''+seconds;
}
return data;
}