2 * Copyright 2016-2017, CMCC Technologies Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 pm.query.vmPmQuery = avalon.define({
19 $id: "pmQueryController",
23 tableIconVisable:false,
24 chartIconVisable:false,
25 queryRuleVisable:false,
36 {id: '5', name: $.i18n.prop('com_zte_ums_ict_pm_query_5'), value: true},
37 {id: '15', name: $.i18n.prop('com_zte_ums_ict_pm_query_15'), value: false},
38 {id: '60', name: $.i18n.prop('com_zte_ums_ict_pm_query_60'), value: false}
41 granularityClicked: function(modelItem, item){
42 if(modelItem.id =="5"){
43 pm.query.vmPmQuery.granularity = "5*60";
44 pm.query.vmPmQuery.granularities[0].value = true;
45 pm.query.vmPmQuery.granularities[1].value = false;
46 pm.query.vmPmQuery.granularities[2].value = false;
47 }else if(modelItem.id =="15"){
48 pm.query.vmPmQuery.granularity = "15*60";
49 pm.query.vmPmQuery.granularities[0].value = false;
50 pm.query.vmPmQuery.granularities[1].value = true;
51 pm.query.vmPmQuery.granularities[2].value = false;
53 pm.query.vmPmQuery.granularity = "60*60";
54 pm.query.vmPmQuery.granularities[0].value = false;
55 pm.query.vmPmQuery.granularities[1].value = false;
56 pm.query.vmPmQuery.granularities[2].value = true;
61 /* {id: 'vnfInstance', name: $.i18n.prop('ngict-pm-iui-name-vnfInstance'), value: "SSS"},
62 {id: 'host', name: $.i18n.prop('ngict-pm-iui-name-host'), value: ""} */
69 resourceSlectedObjs:[],
71 rmSelectedResource: function(modelItem, elem){
72 $(elem).parent().remove();
73 pm.query.vmPmQuery.resourceSlected.splice(pm.query.vmPmQuery.resourceSlected.indexOf(modelItem.id), 1);
76 initResources: function(resourceTypeId){
82 "url": "/openoapi/umc/v1/pm/resources",
83 "contentType": 'application/json; charset=utf-8',
84 "success": function (res, textStatus, jqXHR) {
85 //var nodes = res.content;
88 for (var i = 0; i < nodes.length; i++) {
92 resType: nodes[i].resType
94 that.resources.push(resource);
99 resType: nodes[i].resType
101 that.resourcesMap[nodes[i].id] = resourceCopy;
104 $("input[id=resourcesToFilter]").keyup(function(){
105 $("table#resources tbody tr").hide().filter(":contains('"+( $(this).val() )+"')").show();
108 "error": function () {
114 selectedResourceType : "",
115 selectedResourceTypeId : "",
124 resTypeSelectAction:function(){
125 var resourceTypeId = getIdFromName(pm.query.vmPmQuery.selectedResourceType,pm.query.vmPmQuery.resTypeArray);
126 pm.query.vmPmQuery.selectedResourceTypeId = resourceTypeId;
127 getMoTypeArray(resourceTypeId);
128 pm.query.vmPmQuery.counterArray=[];
129 pm.query.vmPmQuery.initResources(resourceTypeId);
131 moTypeSelectAction:function(obj){
132 var resourceTypeId=getIdFromName(pm.query.vmPmQuery.selectedResourceType,pm.query.vmPmQuery.resTypeArray);
133 //var moTypeId=$(obj).val();
134 var moTypeId = getIdFromName(pm.query.vmPmQuery.selectedMoType, pm.query.vmPmQuery.moTypeArray);
135 pm.query.vmPmQuery.selectedMoTypeId = moTypeId;
136 getCounterArray(resourceTypeId,moTypeId);
138 /* counterSelectAction:function(obj){
139 var counterId=$(obj).val();
140 pm.query.vmPmQuery.selectedCounter=counterId;
141 pm.query.vmPmQuery.indexDescription+=pm.query.vmPmQuery.selectedCounter;
143 returnQueryPage: function(){
144 pm.query.vmPmQuery.pmDataVisable=true;
145 pm.query.vmPmQuery.pmChartVisable=false;
146 pm.query.vmPmQuery.tableIconVisable=false;
147 pm.query.vmPmQuery.chartIconVisable=true;
148 pm.query.vmPmQuery.queryRuleVisable=false;
149 pm.query.vmPmQuery.clickDisplayGraphAlink();
152 queryRuleView: function(event, el){
153 event.stopPropagation();
155 pm.query.vmPmQuery.tableTitle=$.i18n.prop('com_zte_ums_ict_pm_query_edit');
163 "url": "/openoapi/umc/v1/pm/meatasks/" + el.id,
165 "contentType": 'application/json; charset=utf-8',
166 "success": function (res, textStatus, jqXHR) {
169 "error": function () {
173 pm.query.vmPmQuery.pmDataVisable=false;
174 pm.query.vmPmQuery.pmChartVisable=false;
175 pm.query.vmPmQuery.tableIconVisable=false;
176 pm.query.vmPmQuery.chartIconVisable=false;
177 pm.query.vmPmQuery.queryRuleVisable=true;
179 pm.query.vmPmQuery.beginTime = elem.beginTime;
180 pm.query.vmPmQuery.endTime = elem.endTime;
182 var timetext = pmUtil.formatTime(pm.query.vmPmQuery.beginTime) + " - " + pmUtil.formatTime(pm.query.vmPmQuery.endTime);
183 $("#queryTimeRange").val(timetext);
186 pm.query.vmPmQuery.granularity = elem.granularity;
187 var granularity = pm.query.vmPmQuery.granularity / 60;
188 var granularities = pm.query.vmPmQuery.granularities;
189 for(var i=0;i<granularities.length;i++){
190 if(granularity == granularities[i].id){
191 granularities[i].value = true;
193 granularities[i].value = false;
198 pm.query.vmPmQuery.resTypeArray.push(elem.resourceType);
199 pm.query.vmPmQuery.selectedResourceTypeId = elem.resourceType.id;
200 pm.query.vmPmQuery.selectedResourceType = elem.resourceType.name;
201 //pm.query.vmPmQuery.resTypeSelectAction();
202 pm.query.vmPmQuery.moTypeArray.push(elem.moType);
203 pm.query.vmPmQuery.selectedMoTypeId = elem.moType.id;
204 pm.query.vmPmQuery.selectedMoType = elem.moType.name;
205 //pm.query.vmPmQuery.moTypeSelectAction();
206 getCounterArray(elem.moType.id);
207 pm.query.vmPmQuery.initResources(elem.resourceType.id);
209 $("select#resourceTypes").attr("disabled", true);
210 $("select#moTypes").attr("disabled", true);
213 pm.query.vmPmQuery.resourceSlected = [];
214 for(var j=0;j<elem.resources.length;j++){
215 pm.query.vmPmQuery.resourceSlected.push(elem.resources[j].id);
216 //pm.query.vmPmQuery.resourceSlected.push(elem.resources[j]);
219 //$("a#upArrow").click();
220 pm.query.vmPmQuery.clickDisplayGraphAlink();
222 $('.indexesAll').unbind().bind("change", function () {
223 var table = $("table#indexes");
224 var set = $('tbody > tr > td:nth-child(1) input[type="checkbox"]', table);
225 var checked = $(this).is(":checked");
226 $(set).each(function () {
227 //$(this).attr("checked", checked);
229 if(!$(this).is(":checked")){
233 if($(this).is(":checked")){
240 $('.resourceAll').unbind().bind("change", function () {
241 var table = $("table#resources");
242 var set = $('tbody > tr > td:nth-child(1) input[type="checkbox"]', table);
243 var checked = $(this).is(":checked");
244 $(set).each(function () {
245 //$(this).attr("checked", checked);
247 if(!$(this).is(":checked")){
251 if($(this).is(":checked")){
258 var i18nItems = $("[name_i18n=openo_performance_i18n]");
259 for(var i=0;i<i18nItems.length;i++){
260 var $item = $(i18nItems.eq(i));
261 var itemId = $item.attr('id');
262 var itemValue = $.i18n.prop(itemId);
263 if(typeof($item.attr("title"))!="undefined"){
264 $item.attr("title", itemValue);
265 }else if(typeof($item.attr("placeholder"))!="undefined"){
266 $item.attr("placeholder", itemValue);
268 $item.text(itemValue);
273 queryRuleChanged: function(){
275 pm.query.vmPmQuery.pmDataVisable=true;
276 pm.query.vmPmQuery.pmChartVisable=false;
277 pm.query.vmPmQuery.tableIconVisable=false;
278 pm.query.vmPmQuery.chartIconVisable=true;
279 pm.query.vmPmQuery.queryRuleVisable=false;
280 pm.query.vmPmQuery.clickDisplayGraphAlink();
282 var resourcesToPut = [];
283 for(var i=0;i<pm.query.vmPmQuery.resourceSlected.length;i++){
284 for(var j=0;j<pm.query.vmPmQuery.resources.length;j++){
285 if(pm.query.vmPmQuery.resourceSlected[i] == pm.query.vmPmQuery.resources[j].id){
287 resource.id = pm.query.vmPmQuery.resources[j].id;
288 resource.name = pm.query.vmPmQuery.resources[j].name;
289 resource.resType = pm.query.vmPmQuery.resources[j].resType;
290 resourcesToPut.push(resource);
297 "resourceTypeId": pm.query.vmPmQuery.selectedResourceTypeId,
298 "moTypeId": pm.query.vmPmQuery.selectedMoTypeId,
299 "resources": resourcesToPut,
300 "counterOrIndexId": pm.query.vmPmQuery.selectedCounter,
301 "granularity": pm.query.vmPmQuery.granularity,
302 "beginTime": pm.query.vmPmQuery.beginTime,
303 "endTime": pm.query.vmPmQuery.endTime,
307 pm.query.vmPmQuery.$postData = postData;
311 "url": "/openoapi/umc/v1/pm/historydataqueries",
313 "data": JSON.stringify(postData),
314 "contentType": 'application/json; charset=utf-8',
315 "success": function (resp) {
316 //if(resp.content[0]){
318 //var datas = resp.content[0].datas;
319 var datas = resp.data[0].datas;
320 //pm.query.vmPmQuery.$queryDataTableFields = pm.query.vmPmQuery.$queryDataTableFieldsBackup;
321 collectDataFields(datas);
322 //pm.query.vmPmQuery.postData = postData;
323 pm.query.vmPmQuery.$initTable();
325 collectDataFields([]);
326 pm.query.vmPmQuery.$initTable();
329 "error":function(resp){
335 queryTabClicked: function (el, item) {
343 "url": "/openoapi/umc/v1/pm/meatasks/" + el.id,
345 "contentType": 'application/json; charset=utf-8',
346 "success": function (res, textStatus, jqXHR) {
349 "error": function () {
353 pm.query.vmPmQuery.pmDataVisable=true;
354 pm.query.vmPmQuery.pmChartVisable=false;
355 pm.query.vmPmQuery.tableIconVisable=false;
356 pm.query.vmPmQuery.chartIconVisable=true;
357 pm.query.vmPmQuery.queryRuleVisable=false;
358 //vmPmQuery.boxVisible= false;
359 pm.query.vmPmQuery.tableTitle=modelItem.name + " " + $.i18n.prop('com_zte_ums_ict_pm_query_result');
364 name: "resourceTypeId",
365 value: modelItem.resourceType.id
369 value: modelItem.moType.id
371 var counterOrIndexId = [];
372 var MoTypeId = modelItem.moType.id;
373 var url="/openoapi/umc/v1/pm/motypes/" + MoTypeId + "/counters";
375 data.moTypeId=MoTypeId;
382 "success": function (res) {
383 for(var i=0;i<res.length;i++){
384 counterOrIndexId.push(res[i].id);
387 "error":function(res){
393 for(var i=0;i<modelItem.resources.length;i++){
395 resource.id = modelItem.resources[i].id;
396 resource.name = modelItem.resources[i].name;
397 resource.resType = modelItem.resources[i].resType;
398 resources.push(resource);
401 "resourceTypeId": modelItem.resourceType.id,
402 "moTypeId": modelItem.moType.id,
403 "resources": resources,
404 "counterOrIndexId": counterOrIndexId,
405 "granularity": modelItem.granularity,
406 "beginTime": modelItem.beginTime,
407 "endTime": modelItem.endTime,
411 pm.query.vmPmQuery.$postData = postData;
415 "url": "/openoapi/umc/v1/pm/historydataqueries",
417 "data": JSON.stringify(postData),
418 "contentType": 'application/json; charset=utf-8',
419 "success": function (resp) {
420 //if(resp.content[0]){
422 //var datas = resp.content[0].datas;
423 var datas = resp.data[0].datas;
424 //pm.query.vmPmQuery.$queryDataTableFields = pm.query.vmPmQuery.$queryDataTableFieldsBackup;
425 collectDataFields(datas);
426 pm.query.vmPmQuery.$initTable();
428 collectDataFields([]);
429 pm.query.vmPmQuery.$initTable();
432 "error":function(resp){
437 clickSelectedCommonCond: function () {
440 clickDisplayGraphAlink: function () {
441 pm.query.vmPmQuery.boxVisible = !pm.query.vmPmQuery.boxVisible;
443 showPerformanceChart: function () {
444 drawPerformanceChart();
445 pm.query.vmPmQuery.pmDataVisable=false;
446 pm.query.vmPmQuery.pmChartVisable=true;
447 pm.query.vmPmQuery.tableIconVisable=true;
448 pm.query.vmPmQuery.chartIconVisable=false;
450 showPerformanceTable: function () {
451 pm.query.vmPmQuery.pmDataVisable=true;
452 pm.query.vmPmQuery.pmChartVisable=false;
453 pm.query.vmPmQuery.tableIconVisable=false;
454 pm.query.vmPmQuery.chartIconVisable=true;
456 $queryDataTableFields: [
458 "mData": "beginTime",
460 name: $.i18n.prop('com_zte_ums_ict_pm_query_start_time'),
461 "fnRender": pmUtil.timeRender
466 name: $.i18n.prop('com_zte_ums_ict_pm_query_end_time'),
467 "fnRender": pmUtil.timeRender
470 "mData": "granularity",
472 name: $.i18n.prop('com_zte_ums_ict_pm_query_granularity')
475 "mData": "resourceType.name",
477 name: $.i18n.prop('com_zte_ums_ict_pm_query_resource_type')
480 "mData": "resource.name",
482 name: $.i18n.prop('com_zte_ums_ict_pm_query_resource_name')
486 "sProcessing": "<img src='../common/thirdparty/data-tables/images/loading-spinner-grey.gif'/><span> 处理中...</span>",
487 "sLengthMenu": $.i18n.prop("ngict-log-iui-table-sLengthMenu"),
488 "sZeroRecords": $.i18n.prop("ngict-log-iui-table-sZeroRecords"),
489 "sInfo": "<span class='seperator'> </span>" + $.i18n.prop("ngict-log-iui-table-sInfo"),
490 "sInfoEmpty": $.i18n.prop("ngict-log-iui-table-sInfoEmpty"),
491 "sGroupActions": $.i18n.prop("ngict-log-iui-table-sGroupActions"),
492 "sAjaxRequestGeneralError":$.i18n.prop("ngict-log-iui-table-sAjaxRequestGeneralError"),
493 "sEmptyTable": $.i18n.prop("ngict-log-iui-table-sEmptyTable"),
495 "sPrevious": $.i18n.prop("ngict-log-iui-table-sPrevious"),
496 "sNext": $.i18n.prop("ngict-log-iui-table-sNext"),
497 "sPage": $.i18n.prop("ngict-log-iui-table-sPage"),
498 "sPageOf": $.i18n.prop("ngict-log-iui-table-sPageOf")
501 $initTable: function () {
503 setting.language = this.$language;
504 setting.columns = this.$queryDataTableFields;
505 setting.pageHtml="r<'table-scrollable't><'row page-info-bottom'<'col-md-12 col-sm-12'lip>>>";
506 setting.restUrl = "/openoapi/umc/v1/pm/historydataqueries";
507 setting.tableId = "ict_pm_data";
508 serverPageTable.initDataTable(setting, 'ict_pm_data_div' );
512 pm.query.vmPmQuery.resourceSlected.$watch("length", function(newValue, oldValue){
513 var resourceSlected = pm.query.vmPmQuery.resourceSlected;
514 //pm.query.vmPmQuery.resourceSlectedObjs = [];
515 var resourceSlectedObjs = [];
516 for(var i=0;i<resourceSlected.length;i++){
517 //var obj = getObjById(resourceSlected[i], pm.query.vmPmQuery.resources);
518 var obj = $.extend(true, {}, pm.query.vmPmQuery.resourcesMap[resourceSlected[i]]);
519 //pm.query.vmPmQuery.resourceSlectedObjs.push(obj);
520 resourceSlectedObjs.push(obj);
523 //pm.query.vmPmQuery.resourceSlectedObjs = $.extend(true, [], resourceSlectedObjs);
524 pm.query.vmPmQuery.resourceSlectedObjs=[];
525 for(var j=0;j<resourceSlectedObjs.length;j++){
526 pm.query.vmPmQuery.resourceSlectedObjs.push(resourceSlectedObjs[j]);
530 function getObjById(id,array){
531 for(var i=0;i<array.length;i++){
546 "url": "/openoapi/umc/v1/pm/meatasks",
548 "contentType": 'application/json; charset=utf-8',
549 "success": function (res, textStatus, jqXHR) {
550 //queryViewData = res.content;
553 "error": function () {
557 pm.query.vmPmQuery.pmQueries = transformQueryViewData(queryViewData, 8);
560 "resourceTypeId": "vnf.cn.cscf",
561 "moTypeId": "vnf.cn.cscf.metrictype",
564 "id": "vnf.cn.cscf.001",
566 "resType": "vnf.cn.cscf"
569 "counterOrIndexId": [
573 "beginTime": 1449023738672,
574 "endTime": 1449023738672
577 var queryDataTableFieldsBackup = [
579 "mData": "beginTime",
581 name: $.i18n.prop('com_zte_ums_ict_pm_query_start_time'),
582 "fnRender": pmUtil.timeRender
587 name: $.i18n.prop('com_zte_ums_ict_pm_query_end_time'),
588 "fnRender": pmUtil.timeRender
591 "mData": "granularity",
593 name: $.i18n.prop('com_zte_ums_ict_pm_query_granularity')
596 "mData": "resourceType.name",
598 name: $.i18n.prop('com_zte_ums_ict_pm_query_resource_type')
601 "mData": "resource.name",
603 name: $.i18n.prop('com_zte_ums_ict_pm_query_resource_name')
607 //pm.query.vmPmQuery.$initTable();
608 function fnServerData(sSource, aoData, fnCallback, oSettings) {
610 var oPaging = oSettings.oInstance.fnPagingInfo();
611 var pageLength = oPaging.iLength;
612 var curPageNo = oPaging.iPage;
614 pm.query.vmPmQuery.$postData.pageNo = curPageNo;
615 pm.query.vmPmQuery.$postData.pageSize = pageLength;
617 oSettings.jqXHR = $.ajax({
621 "data": JSON.stringify(pm.query.vmPmQuery.$postData),
622 "contentType": 'application/json; charset=utf-8',
623 "success": function (resp) {
624 oSettings.iDraw = oSettings.iDraw + 1;
627 //for(var i=0;i<resp.content.length;i++){
628 for(var i=0;i<resp.data.length;i++){
629 //var row = resp.content[i];
630 var row = resp.data[i];
631 for(var j=0;j<row.datas.length;j++){
632 row["counterOrIndex" + row.datas[j].counterOrIndexId] = row.datas[j].value;
635 /* data.aaData = resp.content;
636 data.iTotalRecords = resp.content.length;
637 data.iTotalDisplayRecords = resp.content.length; */
638 data.aaData = resp.data;
639 data.iTotalRecords = resp.totalCout;
640 data.iTotalDisplayRecords = resp.totalCout;
641 data.sEcho = oSettings;
644 "error":function(resp){
650 /* var tableFieldsMap = {
655 function collectDataFields(datas){
656 pm.query.vmPmQuery.$queryDataTableFields = [];
657 for(var i=0;i<queryDataTableFieldsBackup.length;i++){
658 pm.query.vmPmQuery.$queryDataTableFields.push(queryDataTableFieldsBackup[i]);
660 for(var i=0;i<datas.length;i++){
664 pm.query.vmPmQuery.$queryDataTableFields.push({
665 //"mData": "datas["+ i +"].value",
666 //"mData": "datas.value",
668 "mData": "counterOrIndex" + datas[i].counterOrIndexId,
670 name: datas[i].counterOrIndexName
671 //,fnRender: pmUtil.indexValue
676 /* function tranverseObjFields(obj){
678 if(typeof(obj[p])!="function" && tableFieldsMap[p]){
682 pm.query.vmPmQuery.$queryDataTableFields.push({
685 name: tableFieldsMap[p]
691 function transformQueryViewData(queryViewData, pageSize) {
693 var pageNo = Math.floor(queryViewData.length / pageSize) + 1;
694 if(queryViewData.length % pageSize == 0){
697 for (var i = 0; i < pageNo; i++) {
698 newData.push({array: []});
700 for (var j = 0; j < queryViewData.length; j++) {
701 newData[Math.floor(j / pageSize)].array.push(queryViewData[j]);
706 setTimeout(function(){
707 $($(".item", $(".carousel-inner"))[0]).addClass("active");
708 pmUtil.setDateRange("queryTimeRange");
711 newIndexWizard = function (idx,action) {
717 /* if(pm.query.vmPmQuery.resTypeArray && pm.query.vmPmQuery.resTypeArray.length>0){
718 pm.query.vmPmQuery.selectedResourceType=pm.query.vmPmQuery.resTypeArray[0].name;
719 resourceTypeId=pm.query.vmPmQuery.resTypeArray[0].id;
720 pm.query.vmPmQuery.selectedDataType=pm.query.vmPmQuery.dataTypeArray[0].name;
721 getMoTypeArray( pm.query.vmPmQuery.resTypeArray[0].id);
722 getCounterArray(resourceTypeId,moTypeId);
726 function getMoTypeArray(resourceTypeId){
729 var url="/openoapi/umc/v1/pm/motypes";
731 data.resourceTypeId=resourceTypeId;
738 "success": function (resp) {
739 //pm.query.vmPmQuery.moTypeArray= resp.content;
740 pm.query.vmPmQuery.moTypeArray= resp;
742 "error":function(resp){
743 pm.query.vmPmQuery.moTypeArray=[];
745 /* var res = {"message":null,"content":[{"name":"性能KPI-1","id":"ns.cn.ims.metrictype"},{"name":"性能KPI-2","id":"ns.cn.ims.metrictype1"},{"name":"性能KPI-3","id":"ns.cn.ims.metrictype2"},{"name":"性能KPI-4","id":"ns.cn.ims.metrictype3"},{"name":"性能KPI-5","id":"ns.cn.ims.metrictype4"}],"status":0};
746 pm.query.vmPmQuery.moTypeArray = res.content; */
752 function getCounterArray(MoTypeId){
754 var url="/openoapi/umc/v1/pm/motypes/"+MoTypeId+"/counters";
756 data.moTypeId=MoTypeId;
763 "success": function (resp) {
764 //pm.query.vmPmQuery.counterArray= resp.content;
765 pm.query.vmPmQuery.counterArray= resp;
767 pm.query.vmPmQuery.selectedCounter = [];
768 for(var i=0;i<resp.length;i++){
769 pm.query.vmPmQuery.selectedCounter.push(resp[i].id);
772 "error":function(resp){
773 pm.query.vmPmQuery.counterArray=[];
775 /* var res = {"message":null,"content":[{"dataType":null,"name":"总用户数","id":"ns.cn.epc.businesskpi.totalUsers"},{"dataType":null,"name":"总用户数","id":"ns.cn.ims.businesskpi.totalUsers"},{"dataType":null,"name":"平均CPU使用率%","id":"vnf.runtimeInfo.averageCpuUsage"},{"dataType":null,"name":"平均内存使用率%","id":"vnf.runtimeInfo.averageMemoryUsage"},{"dataType":null,"name":"总用户数","id":"vnf.cn.cscf.businesskpi.totalUsers"}],"status":0};
776 pm.query.vmPmQuery.counterArray = res.content; */
782 function getIdFromName(name,array){
783 for(var i=0;i<array.length;i++){
784 if(array[i].name==name){
789 function getNameFromId(id,array){
790 for(var i=0;i<array.length;i++){
792 return array[i].name;
796 function getObjFromId(id,array){
797 for(var i=0;i<array.length;i++){
804 function getObjFromName(name,array){
805 for(var i=0;i<array.length;i++){
806 if(array[i].name==name){