function IFactorDataMonitor(A){this.stormCenter=A;this.layersHandler=null;this.dataMonitorControl=new Object();this.nonDependentDatasources=new Array();this.dataMonitorFieldsToProcess=new Object();this.dataMonitorFieldsValue=new Object();this.dataMonitorVariables=new Object();this.dataMonitorVariableMapping=new Object();this.dataMonitorVariableConversionFunction=new Object();this.layersChangedList=null;this.variablesChangedList=null;iFactor.DataMonitor=this;this.initialiseTimerDataMonitor()}IFactorDataMonitor.configDataMonitorDefinition=[];IFactorDataMonitor.operationMode="MAP_INTERACTION";IFactorDataMonitor.timerInterval=120;IFactorDataMonitor.autoFullMapRefreshIfDataChanged=false;IFactorDataMonitor.prototype.loadDataMonitorConfiguration=function(G){this.layersHandler=G;var B=new Array();var F;for(F=0;F<IFactorDataMonitor.configDataMonitorDefinition.length;F++){var E;var H=IFactorDataMonitor.configDataMonitorDefinition[F];var D=H.data_source;this.dataMonitorControl[D]=H;this.dataMonitorFieldsValue[D]=new Object();this.dataMonitorFieldsToProcess[D]=new Array();this.dataMonitorVariableMapping[D]=new Object();this.dataMonitorVariableConversionFunction[D]=new Object();if(H.layer_dependencies!=null){for(E=0;E<H.layer_dependencies.length;E++){var K,M;var I=H.layer_dependencies[E];if(I.condition_fields_change!=null){K=I.condition_fields_change;M=this.dataMonitorFieldsToProcess[D]}this.addAllToArrayIfNotRepeated(M,K)}}if(H.datasource_dependencies!=null){for(E=0;E<H.datasource_dependencies.length;E++){var A=H.datasource_dependencies[E];this.addAllToArrayIfNotRepeated(this.dataMonitorFieldsToProcess[D],A.condition_fields_change);this.addAllToArrayIfNotRepeated(B,A.datasources)}}if(H.variable_dependencies!=null){for(E=0;E<H.variable_dependencies.length;E++){var J=H.variable_dependencies[E];var L=J.field;this.addToArrayIfNotRepeated(this.dataMonitorFieldsToProcess[D],L);this.dataMonitorVariableMapping[D][L]=J.variable;this.dataMonitorVariableConversionFunction[D][L]=J.conversion_function}}H.dependent_datasource=false}for(F=0;F<B.length;F++){var C=B[F];var H=this.dataMonitorControl[C];H.dependent_datasource=true}for(F=0;F<IFactorDataMonitor.configDataMonitorDefinition.length;F++){var H=IFactorDataMonitor.configDataMonitorDefinition[F];if(H.dependent_datasource==false){var D=H.data_source;this.nonDependentDatasources.push(D)}}};IFactorDataMonitor.prototype.initialiseTimerDataMonitor=function(){this.timerId=null};IFactorDataMonitor.prototype.timerDataMonitorExpired=function(){this.updateDataMonitor(false)};IFactorDataMonitor.prototype.startTimerDataMonitor=function(){var B=function(){iFactor.DataMonitor.timerDataMonitorExpired()};var A=IFactorDataMonitor.timerInterval*1000;this.timerId=window.setInterval(B,A)};IFactorDataMonitor.prototype.cancelTimerDataMonitor=function(){var A=this.timerId;if(A!=null){window.clearInterval(A);this.timerId=null}};IFactorDataMonitor.prototype.addAllToArrayIfNotRepeated=function(C,B){if(B==null||C==null){return }var A;for(A=0;A<B.length;A++){var D=B[A];this.addToArrayIfNotRepeated(C,D)}};IFactorDataMonitor.prototype.addToArrayIfNotRepeated=function(B,D){if(B==null){return }var A;for(A=0;A<B.length;A++){var C=B[A];if(C==D){return }}B.push(D)};IFactorDataMonitor.prototype.updateDataMonitor=function(C){if(this.operationModeIsTimer()){this.cancelTimerDataMonitor()}this.layersChangedList=new Array();this.variablesChangedList=new Array();var D=this.nonDependentDatasources;while(D!=null&&D.length>0){var E=new Array();var B;for(B=0;B<D.length;B++){var F=D[B];var A=this.dataMonitorControl[F];if(A.data_source_type=="file"){this.updateDataSourceFile(A,E)}else{}}D=E}this.layersHandler.setForceReloadLayers(this.layersChangedList,true);if(this.layersChangedList.length!=0&&this.operationModeIsTimer()&&!C&&IFactorDataMonitor.autoFullMapRefreshIfDataChanged==true){this.stormCenter.onMapPan()}if(this.operationModeIsTimer()){this.startTimerDataMonitor()}};IFactorDataMonitor.prototype.updateDataSourceFile=function(P,C){var A=P.data_source;var D=A;D=D+iFactor.common.uniqueRequestTag(true);D=D.fixUrlSeparator();var H=iFactor.common.createXMLRequest();H.open("GET",D,false);H.send(null);if((H.readyState==4)&&(H.status!=404)){var G=H.responseXML;var S,R;var F;var Q=this.dataMonitorFieldsToProcess[A];var T=new Object();for(S=0;S<Q.length;S++){F=Q[S];T[F]=this.getFieldValueFromXML(G,F)}if(P.layer_dependencies!=null){for(S=0;S<P.layer_dependencies.length;S++){var M=P.layer_dependencies[S];if(M.condition_fields_change!=null){for(R=0;R<M.condition_fields_change.length;R++){F=M.condition_fields_change[R];if(this.dataMonitorFieldsValue[A][F]!==T[F]){var J=M.layers;this.addAllToArrayIfNotRepeated(this.layersChangedList,J);break}}}}}if(P.datasource_dependencies!=null){for(S=0;S<P.datasource_dependencies.length;S++){var L=P.datasource_dependencies[S];if(L.condition_fields_change!=null){for(R=0;R<L.condition_fields_change.length;R++){F=L.condition_fields_change[R];if(this.dataMonitorFieldsValue[A][F]!==T[F]){var O=L.datasources;this.addAllToArrayIfNotRepeated(C,O);break}}}}}for(var K in T){this.dataMonitorFieldsValue[A][K]=T[K];var B=this.dataMonitorVariableMapping[A][K];var E=this.dataMonitorVariables[B];var I=this.dataMonitorVariableConversionFunction[A][K];var N=T[K];var U=this.executeFunction(I,N);if(E!==U){this.dataMonitorVariables[B]=U;this.addToArrayIfNotRepeated(this.variablesChangedList,B)}}}};IFactorDataMonitor.prototype.getFieldValueFromXML=function(B,C){var A=B.getElementsByTagName(C).item(0);if(A!=null){return iFactor.common.getXMLNodeValue(A)}else{return null}};IFactorDataMonitor.prototype.executeFunction=function(A,B){if(A!=null&&A!=""){return this[A](B)}else{return B}};IFactorDataMonitor.prototype.getVariableValue=function(A){return this.dataMonitorVariables[A]};IFactorDataMonitor.prototype.operationModeIsMapInteraction=function(){return(IFactorDataMonitor.operationMode=="MAP_INTERACTION")};IFactorDataMonitor.prototype.operationModeIsTimer=function(){return(IFactorDataMonitor.operationMode=="TIMER")};IFactorDataMonitor.prototype.StringToInteger=function(A){return parseInt(A)};IFactorDataMonitor.prototype.IntegerToString=function(A){return A.toString()};IFactorDataMonitor.prototype.StringToFloat=function(A){return parseFloat(A)};IFactorDataMonitor.prototype.FloatToString=function(A){return A.toString()};IFactorDataMonitor.prototype.StringToBoolean=function(A){A=A.replace(/^\s*/,"").replace(/\s*$/,"");if(A=="true"){return true}else{if(A=="false"||A=="null"||A==""||A=="NaN"){return false}else{if(parseFloat(A)>0){return true}else{return false}}}};IFactorDataMonitor.prototype.BooleanToString=function(A){return A.toString()};iFactor.DataMonitor=null;