function RightIndexOf(n, v) { var idx = n.toString().indexOf(v); if (idx > -1) { return n.toString().length - idx; } else { return 0; } } function __sanitize_keys(value) { value = Object.keys(value).reduce(function (a, key) { a[key.replace(/\s+/g, "_")] = value[key]; return a; }, {}); return value; } function __resolveWhen(fn) { return new Promise(function (res, rej) { var schedule = function schedule(work) { return setTimeout(work, 1); }; var runFn = function runFn() { return fn() ? res(fn()) : schedule(runFn); }; schedule(function () { runFn(); }); }); } function GenGauge(valX, graph, datasrc, divG, w, min, max, blabels, bticks, ranges, gstyle, tckints, grep, bwidth, mtype, mcolor, lsize) { __resolveWhen(function () { return repdata && repdata.length }).then(function () { if (lsize === 0 || lsize === undefined) { lsize = 15; } if (mcolor === "" || mcolor == "transparent" || mcolor === undefined) { mcolor = "#000000"; } if (mtype === "" || mtype === undefined) { mtype = "triangle"; } if (bwidth === 0 || bwidth === undefined) { bwidth = 30; } var nw = $('#' + divG).css('width').replace('px', ''); if (nw > w) { w = nw; } try { calldata[divG.replace('gauge', '')] = valX + '·' + graph + '·' + datasrc + '·' + divG + '·' + w + '·' + min + '·' + max + '·' + blabels + '·' + bticks + '·' + ranges + '·' + gstyle + '·' + tckints + '·' + grep; } catch (err) { } var gval = 0; var intVal = 10; var tval = ""; if (valX != '') { var decs = 0; var dat = repdata[datasrc]; if (dat === undefined) { dat = repdata; } $.map(dat, function (value, index) { value = __sanitize_keys(value); if (value.length > 0 || Object.keys(value).length > 0) { if (value[valX].toString().indexOf('%') >= 0 || value[valX].toString().indexOf('$') >= 0) { gval += parseFloat(value[valX].replace('%', '').replace('$', '')); } else { if (isNumeric(value[valX])) { gval += parseFloat(value[valX]); var pos = RightIndexOf(value[valX], '.'); if (pos > decs) { decs = pos; } } } } }); gval = parseFloat(parseFloat(gval.toString()).toFixed(decs)); } var bAnimate = true; if (max - min > 100000) { bAnimate = false; } intVal = Math.floor((max - min) / tckints); var fType = "fullCircle"; w = w * .7; var height = w; if (gstyle == "half") { sta = 180; swa = 180; fType = "halfCircle"; } else { sta = 122; swa = 296; } var actualgval = gval; if (gval > max) { gval = max; } $ = $.noConflict(); $('#' + divG).ejCircularGauge({ load: "loadGaugeTheme", width: w, height: height, value: gval, backgroundColor: "transparent", drawCustomLabel: function (args) { args.style.textValue = actualgval.toString(); }, enableAnimation: bAnimate, frame: { frameType: fType }, scales: [{ startAngle: sta, sweepAngle: swa, radius: w * .50, minimum: min, maximum: max, majorIntervalValue: intVal, showRanges: true, showLabels: blabels, labels: [{ font: { size: lsize + "px", fontFamily: "Arial", fontStyle: "Bold" }, distanceFromScale: -(lsize / 5) }], ticks: [{ height: 0, width: 0 }], ranges: RangeBuilder(ranges, bwidth), pointers: [{ type: "marker", markerType: mtype, width: bwidth, length: bwidth / 2, distanceFromScale: 10, backgroundColor: mcolor, border: { color: mcolor } }], customLabels: [ { value: "", font: { size: (w / 8) + "px", fontFamily: "Arial", fontStyle: "Bold" }, position: { x: w / 2, y: height / 2 }, color: $("body").css("color") } ] }], }); var thold = $('#' + divG).parent().find('.widgettitle'); var title = $(thold).html(); $(thold).html(''); var pTop = (w * .65) / 5; var pUp = (w * .65) / 8; if (fType != "halfCircle") { pTop = 10; } var shift = (pTop + pUp); if (fType == "halfCircle") { shift *= 1.8; } if (window.location.href.indexOf('profile.aspx') > -1) { $('#' + divG).append('
'); //take title out for gauge AEL 5/16/2024 } else { $('#' + divG).append('
' + title + '
'); } $('#' + divG).find('canvas').css('paddingTop', pTop + 'px'); if (grep != "") { $('#' + divG).find('canvas').attr('onclick', 'openReport(' + grep + ')'); $('#' + divG).find('canvas').addClass('point'); } var cudiv = $('#' + divG).find('canvas').parent().find('div'); if (cudiv.length > 0) { if ($(cudiv).html() == 'undefined') { $(cudiv).html(''); } } $('#' + divG).css('textAlign', 'center'); }); } function RangeBuilder(rgs, bwidth) { var rArr = new Array(); var arrRgs = rgs.split(','); if (rgs.indexOf(',') > -1) { for (var i = 0; i < arrRgs.length; i++) { if (arrRgs[i] != '') { var argRng = arrRgs[i].split(' #')[0]; var argCol = arrRgs[i].split(' #')[1]; if (argCol == null) { argCol = '000000'; } rArr[i] = { startValue: argRng.split(' - ')[0], endValue: argRng.split(' - ')[1], backgroundColor: "#" + argCol, border: { color: "#" + argCol }, size: bwidth } } } } return rArr; } function GenGraphs(arrY, valX, graph, blegend, bvalues, datasrc, divG, w, bTips) { var nw = $('#' + divG).css('width').replace('px', ''); if (nw > w) { w = nw; } try { calldata[divG.replace('graph', '')] = arrY + '·' + valX + '·' + graph + '·' + blegend + '·' + bvalues + '·' + datasrc + '·' + divG + '·' + w + '·' + bTips; } catch (err) { } var ys = arrY; var wfcol = '#000000'; if ($('.hidWidFntCol').length > 0) { wfcol = $('.hidWidFntCol').val(); } try { if (graph == "wordcloud") { var dat = repdata[datasrc]; if (dat === undefined) { dat = repdata; } var arr = $.extend(true, [], dat); arr = formatwc(ys, arr, graph); $('#' + divG).jQCloud(arr, { width: w, height: w * .7, delayedMode: true, removeOverflowing: false, }); } else { $('#' + divG).ejChart({ series: SeriesBuilder(ys.length, arrY, graph, bvalues, valX, datasrc, bTips, graph), palette: sercol, crosshair: { visible: (graph.indexOf("ine") > -1 || graph.indexOf("area") > -1) && bTips, type: 'trackball' }, commonSeriesOptions: { type: graph, labelPosition: 'inside', }, text: "", needResize: true, canResize: true, primaryXAxis: { labelIntersectAction: "trim", font: { color: wfcol }, majorGridLines: { color: wfcol } }, primaryYAxis: { font: { color: wfcol }, majorGridLines: { color: wfcol } }, legend: { visible: blegend, enableScrollbar: false }, zooming: { enable: true, }, size: { width: (w - 20).toString(), height: (w * .65).toString() } }); } } catch (err) { console.log(err); } } function GenGraphsFilter(arrY, valX, graph, blegend, bvalues, datasrc, divG, w, bTips) { var ys = arrY; var wfcol = '#000000'; if ($('.hidWidFntCol').length > 0) { wfcol = $('.hidWidFntCol').val(); } $('#' + divG).ejChart("destroy"); $('#' + divG).ejChart({ series: SeriesBuilderFilter(ys.length, arrY, graph, bvalues, valX, datasrc, bTips), palette: sercol, crosshair: { visible: (graph.indexOf("ine") > -1 || graph.indexOf("area") > -1) && bTips, type: 'trackball' }, commonSeriesOptions: { type: graph, labelPosition: 'inside', }, text: "", needResize: true, canResize: true, primaryXAxis: { labelIntersectAction: "trim", font: { color: wfcol }, majorGridLines: { color: wfcol } }, primaryYAxis: { font: { color: wfcol }, majorGridLines: { color: wfcol } }, legend: { visible: blegend, enableScrollbar: false }, zooming: { enable: true, }, size: { width: (w - 20).toString(), height: (w * .65).toString() } }); } function SeriesBuilder(n, arrY, graph, bvalues, valX, datasrc, bTips, type, filt) { var arr = new Array(); var ys = arrY; var mygs = false; if (type != null) { if (type.indexOf('hilo') > -1 || type.indexOf('candle') > -1 || type.indexOf('bubble') > -1 || type.indexOf('range') > -1) { mygs = true; } } var dat = repdata[datasrc]; if (dat === undefined) { dat = repdata; } if (filt) { dat = filtdata[datasrc]; } if (graph.indexOf('stacking') > -1) { var json = dat; var sers = []; for (var key in json[0]) { if (!sers.indexOf(key) > -1 && key != arrY[0] && key != valX) { sers.push(key); } } var stack = []; for (var i in json) { var sss = json[i][sers[0]]; if (stack.indexOf(sss) == -1) { stack.push(sss); } } var arrSer = []; for (var t in stack.sort()) { var jpc = json.filter(function (item) { return item[sers[0]] == stack[t]; }); arrSer.push({ name: stack[t], marker: { visible: bvalues, dataLabel: { visible: bvalues, font: { color: "black", size: "15px" } } }, tooltip: { visible: bTips }, dataSource: jpc, explode: false, xName: valX, yName: [ys[0]] }); } return arrSer; } if (mygs) { arr[0] = {}; arr[0].name = valX; arr[0].tooltip = { visible: bTips, format: formatTT(type) }; var ar = $.extend(true, [], dat); ar = format(ys, ar, type, valX); arr[0].points = ar; } else { var ex = bTips; if (type == "funnel" || type == "pyramid") { ex = false; } for (var i = 0; i < n; i++) { arr[i] = { name: ys[i], marker: { visible: bvalues, dataLabel: { visible: bvalues, font: { color: "black", size: "15px" } } }, tooltip: { visible: bTips }, dataSource: dat, explode: ex, xName: valX, yName: [ys[i]] } } } return arr; } function SeriesBuilderFilter(n, arrY, graph, bvalues, valX, datasrc, bTips) { var arr = new Array(); var ys = arrY; for (var i = 0; i < n; i++) { arr[i] = { name: ys[i], marker: { visible: bvalues, dataLabel: { visible: bvalues, font: { color: "black", size: "15px" } } }, tooltip: { visible: bTips }, dataSource: filtdata[datasrc], xName: valX, yName: [ys[i]] } } return arr; } function formatTT(t) { var s = null; if (t == "bubble") { s = "x: #point.x#
y: #point.y#
size: #point.size#"; } else if (t.indexOf('range') > -1) { s = "x: #point.x#
high: #point.high#
low: #point.low#"; } else if (t == "hilo") { s = "x: #point.x#
high: #point.high#
low: #point.low#"; } else if (t == "hiloopenclose" || t == "candle") { s = "x: #point.x#
high: #point.high#
low: #point.low#
open: #point.open#
close: #point.close#"; } return s; } function format(ys, arr, type, valX) { var names = ["high", "low", "open", "close"]; if (type == "bubble") { names = ["y", "size"]; } else if (type == "rangecolumn" || type == "rangearea") { names = ["low", "high"]; } else if (type == "wordcloud") { names = ["text", "url", "frequency"]; } try { for (var i = 0; i < arr.length; i++) { if ("x" !== valX && type != "wordcloud") { Object.defineProperty(arr[i], "x", Object.getOwnPropertyDescriptor(arr[i], valX)); delete arr[i][valX]; } for (var k = 0; k < ys.length; k++) { if (names[k] !== ys[k]) { Object.defineProperty(arr[i], names[k], Object.getOwnPropertyDescriptor(arr[i], ys[k])); delete arr[i][ys[k]]; } } } } catch (err) { arr = null; } return arr; } function formatwc(ys, arr, type) { try { for (var i = 0; i < arr.length; i++) { if ("text" !== ys[0]) { Object.defineProperty(arr[i], "text", Object.getOwnPropertyDescriptor(arr[i], ys[0])); delete arr[i][ys[0]]; } arr[i].html = { onclick: "openit(this)", style: "color: " + sercol[getRandomInt(0, sercol.length - 1)], url: arr[i][ys[1]] }; arr[i].link = { href: "javascript:void(0)" }; if ("weight" !== ys[2]) { Object.defineProperty(arr[i], "weight", Object.getOwnPropertyDescriptor(arr[i], ys[2])); delete arr[i][ys[2]]; } } } catch (err) { arr = null; } return arr; } function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } function openit(el) { window.open($(el).attr("url")); } function isNumeric(n) { return !isNaN(parseFloat(n)) && isFinite(n); }