function IFactorVisibilitiesHandler(A){this.stormCenter=A;this.layersHandler=null;this.configVisibility=null;this.visibilityControl=null;this.masterControlsName=null;this.currentVisibleLayers=new Object();this.currentPossibleVisibleLayers=new Object();this.lastControlForGroup=new Object();this.orderedVisibilityControls=new Array();this.layerNamesControledByVisibilityControls=new Object()}IFactorVisibilitiesHandler.configVisibilityDefinition=[];IFactorVisibilitiesHandler.prototype.loadVisibilitiesConfiguration=function(C){this.layersHandler=C;this.configVisibility=IFactorVisibilitiesHandler.configVisibilityDefinition;var A;for(A=0;A<this.configVisibility.length;A++){var B=this.configVisibility[A];B.parent_control=null;if(B.external_name==null||B.external_name==""){B.external_name=B.name}if(B.layers==null||B.layers==""){B.layers=[]}if(B.sub_controls==null||B.sub_controls==""){B.sub_controls=[]}if(B.checked_status==null||B.checked_status===""){B.checked_status=true}if(B.enabled_status==null||B.enabled_status===""){B.enabled_status=true}if(B.blocked_status==null||B.blocked_status===""){B.blocked_status=false}if(B.control_to_change_when_out_of_zoom==null){B.control_to_change_when_out_of_zoom=""}if(B.min_zoom===undefined||B.min_zoom==""){B.min_zoom=null}if(B.max_zoom===undefined||B.max_zoom==""){B.max_zoom=null}}};IFactorVisibilitiesHandler.prototype.doSetVisibilityForControl=function(D,B,A){if(D==null||D==""){return }var C=this.visibilityControl[D];if(C!=null){this.changeGroupIfNecessary(C,B);if((B==true)||(A==true&&C.checked_status==true)){this.doSetVisibilityForSubControls(C,null,true)}else{if((B==false)||(A==false)||(A==true&&C.checked_status==false)){this.doSetVisibilityForSubControls(C,null,false)}}if(B!=null){C.checked_status=B;this.toggleIfNecessary(C.web_control_id,B)}if(A!=null&&!C.blocked_status){C.enabled_status=A;this.enableIfNecessary(C.web_control_id,A)}}};IFactorVisibilitiesHandler.prototype.doSetVisibilityForSubControls=function(E,C,A){var D=E.sub_controls;if(D!=null&&D!=""){var B;for(B=0;B<D.length;B++){this.doSetVisibilityForControl(D[B],C,A)}}};IFactorVisibilitiesHandler.prototype.changeGroupIfNecessary=function(E,B){var D=E.name;var C=E.group_name;if(C!=null&&C!=""&&B==true){var A=this.lastControlForGroup[C];if(A!=null&&A!=D){this.doSetVisibilityForControl(A,false,null)}this.lastControlForGroup[C]=D}};IFactorVisibilitiesHandler.prototype.toggleIfNecessary=function(C,A){var B=window.document.getElementById(C);if(A!=null&&B!=null){if(A!=true&&A!=false){A=(A.toLowerCase()=="true")}B.checked=A}};IFactorVisibilitiesHandler.prototype.enableIfNecessary=function(C,A){var B=window.document.getElementById(C);if(A!=null&&B!=null){if(A!=true&&A!=false){A=(A.toLowerCase()=="true")}B.disabled=!A}};IFactorVisibilitiesHandler.prototype.setVisibilityAccordingToCurrentConfiguration=function(){var B;var A=new Array();var C=new Array();for(B=0;B<this.configVisibility.length;B++){control=this.configVisibility[B];if(this.isMasterControl(control)){if(control.checked_status==true){C[C.length]=control}else{A[A.length]=control}}}for(B=0;B<A.length;B++){this.setLayerVisibilityForControl(A[B],false)}for(B=0;B<C.length;B++){this.setLayerVisibilityForControl(C[B],true)}};IFactorVisibilitiesHandler.prototype.isMasterControl=function(A){if(A==null){return false}if(A.parent_control==null||A.parent_control==""){return true}else{return false}};IFactorVisibilitiesHandler.prototype.setLayerVisibilityForControl=function(F,A){var D;var B;var C;var E;if(F!=null){if(A==false||A==true&&F.checked_status==false){E=false}else{if(A==true){E=true}}this.setLayerListVisibility(F.layers,E);for(D=0;D<F.sub_controls.length;D++){B=F.sub_controls[D];C=this.visibilityControl[B];this.setLayerVisibilityForControl(C,E)}}};IFactorVisibilitiesHandler.prototype.setLayerListVisibility=function(C,A){if(C!=null&&C!=""){var B;for(B=0;B<C.length;B++){layerName=C[B];this.setLayerVisibility(layerName,A)}}};IFactorVisibilitiesHandler.prototype.setLayerVisibility=function(B,A){if(A==null){A=false}if(A){this.currentPossibleVisibleLayers[B]=true;if(this.stormCenter.map!=null){var C=this.stormCenter.map.GetZoomLevel();if(this.layersHandler.isShapeLayer(B)&&!this.layersHandler.isLayerVisibleAtZoomLevel(B,C)){A=false}}}else{this.currentPossibleVisibleLayers[B]=null}this.setCurrentLayerVisibility(B,A)};IFactorVisibilitiesHandler.prototype.setCurrentLayerVisibility=function(B,A){if(A==null){A=false}if(A){this.currentVisibleLayers[B]=true}else{this.currentVisibleLayers[B]=null}this.toggleShapeLayer(A,B);this.toggleTileLayer(A,B)};IFactorVisibilitiesHandler.prototype.toggleShapeLayer=function(A,C){var D=this.layersHandler.shapeLayers[C];if(D!=null){for(var E in D.physicalLayers){var B=D.physicalLayers[E].physicalVELayer;if(B!=null){if(A){B.Show()}else{B.Hide()}this.stormCenter.saveMapState()}}}};IFactorVisibilitiesHandler.prototype.toggleTileLayer=function(A,B){var C=this.layersHandler.tileLayers[B];if(C!=null){for(var D in C.physicalLayers){if(A){this.stormCenter.map.ShowTileLayer(D)}else{this.stormCenter.map.HideTileLayer(D)}this.stormCenter.saveMapState()}}};IFactorVisibilitiesHandler.prototype.setVisibilityForControl=function(E,C,B){var D=null;if(B==true){var A;for(A=0;A<this.configVisibility.length;A++){if(E==this.configVisibility[A].web_control_id){D=this.configVisibility[A].name;break}}}else{D=E}if(D!=null&&this.visibilityControl[D]!=null){this.doSetVisibilityForControl(D,C,null);this.adjustControlsActiveDependingOnZoomLevel(this.stormCenter.map.GetZoomLevel());this.setVisibilityAccordingToCurrentConfiguration();this.stormCenter.updateLegend();this.stormCenter.saveMapState()}};IFactorVisibilitiesHandler.prototype.clearLayerVisibility=function(){this.currentVisibleLayers=new Object();this.currentPossibleVisibleLayers=new Object();var B;var A;shapeLayerNames=this.layersHandler.shapeLayerNames;for(B=0;B<shapeLayerNames.length;B++){A=shapeLayerNames[B];if(this.layerNamesControledByVisibilityControls[A]!=true){this.currentVisibleLayers[A]=true;this.currentPossibleVisibleLayers[A]=true}}tileLayerNames=this.layersHandler.tileLayerNames;for(B=0;B<tileLayerNames.length;B++){A=tileLayerNames[B];if(this.layerNamesControledByVisibilityControls[A]!=true){this.currentVisibleLayers[A]=true;this.currentPossibleVisibleLayers[A]=true}}};IFactorVisibilitiesHandler.prototype.initialiseVisibilityControl=function(){var D;var C;var E;this.masterControlsName=new Array();this.visibilityControl=new Object();for(D=0;D<this.configVisibility.length;D++){E=this.configVisibility[D];this.visibilityControl[E.name]=E}for(D=0;D<this.configVisibility.length;D++){E=this.configVisibility[D];for(C=0;C<E.sub_controls.length;C++){var B=E.sub_controls[C];this.visibilityControl[B].parent_control=E.name}for(C=0;C<E.layers.length;C++){var A=E.layers[C];this.layerNamesControledByVisibilityControls[A]=true}}for(D=0;D<this.configVisibility.length;D++){E=this.configVisibility[D];if(this.isMasterControl(E)){this.masterControlsName[this.masterControlsName.length]=E.name}}this.getOrderedControls(this.masterControlsName,this.orderedVisibilityControls)};IFactorVisibilitiesHandler.prototype.getOrderedControls=function(E,C){if(E==null||E==""||E.length==0){return[]}var B;var D;var A=new Array();for(B=0;B<E.length;B++){D=this.visibilityControl[E[B]];A[A.length]=D}A.sort(function(G,F){if(G.control_to_change_when_out_of_zoom==F.name){return -1}else{return 1}});for(B=0;B<A.length;B++){D=A[B];C[C.length]=D;listOfSubControlsName=D.sub_controls;this.getOrderedControls(listOfSubControlsName,C)}};IFactorVisibilitiesHandler.prototype.initialiseLayerVisibility=function(B){if(B==true){this.clearLayerVisibility()}var A;var D;for(A=0;A<this.masterControlsName.length;A++){var C=this.masterControlsName[A];var D=this.visibilityControl[C];this.doSetInitialVisibilityForControl(C)}this.setVisibilityAccordingToCurrentConfiguration()};IFactorVisibilitiesHandler.prototype.doSetInitialVisibilityForControl=function(D){var C=this.visibilityControl[D];if(C!=null){var B=C.checked_status;var A=C.enabled_status;this.changeGroupIfNecessary(C,B);if(B!=null){this.toggleIfNecessary(C.web_control_id,B);this.doSetInitialVisibilityForSubControls(C)}if(A!=null){this.enableIfNecessary(C.web_control_id,A)}}};IFactorVisibilitiesHandler.prototype.doSetInitialVisibilityForSubControls=function(C){var B=C.sub_controls;if(B!=null&&B!=""){var A;for(A=0;A<B.length;A++){this.doSetInitialVisibilityForControl(B[A])}}};IFactorVisibilitiesHandler.prototype.adjustControlsActiveDependingOnZoomLevel=function(G){var C;var E;var F;var B;var A=false;var D=new Object();for(C=0;C<this.orderedVisibilityControls.length;C++){E=this.orderedVisibilityControls[C];D[E.name]=(E.checked_status&&this.isParentCheckedAndEnabled(E))}for(C=0;C<this.orderedVisibilityControls.length;C++){E=this.orderedVisibilityControls[C];B=this.isControlAllowedToThisZoomLevel(E,G);if(B){this.doSetVisibilityForControl(E.name,null,true)}else{F=this.getControlToChangeInSameGroup(E,G);if(D[E.name]==true&&F!=null){this.doSetVisibilityForControl(F.name,true,null)}this.doSetVisibilityForControl(E.name,false,false)}}for(C=0;C<this.orderedVisibilityControls.length;C++){E=this.orderedVisibilityControls[C];if(D[E.name]!=(E.checked_status&&this.isParentCheckedAndEnabled(E))){A=true}}return A};IFactorVisibilitiesHandler.prototype.isParentCheckedAndEnabled=function(C){var A=C.parent_control;if(A==null||A==""){return true}var B=this.visibilityControl[A];if(B!=null){if(B.checked_status==true&&B.enabled_status==true){return true}else{return false}}else{return true}};IFactorVisibilitiesHandler.prototype.isControlAllowedToThisZoomLevel=function(A,B){if(A.min_zoom!=null&&A.min_zoom!=""&&B<A.min_zoom){return false}if(A.max_zoom!=null&&A.max_zoom!=""&&B>A.max_zoom){return false}return true};IFactorVisibilitiesHandler.prototype.getControlToChangeInSameGroup=function(C,F){if(C!=null){var E=C.group_name;if(E!=null&&E!=""){var B=C.control_to_change_when_out_of_zoom;if(B!=null&&B!=""){controlToChange=this.visibilityControl[B];if(controlToChange!=null){return controlToChange}}var A;for(A=0;A<this.configVisibility.length;A++){var D=this.configVisibility[A];if(D.group_name==E&&D.name!=C.name&&this.isControlAllowedToThisZoomLevel(D,F)){return D}}}}return null};IFactorVisibilitiesHandler.prototype.setShapeVisibilityDependingOnZoomLevel=function(D){var C;for(C=0;C<this.layersHandler.shapeLayerNames.length;C++){var B=this.layersHandler.shapeLayerNames[C];if(this.currentPossibleVisibleLayers[B]==true){var A=this.layersHandler.isLayerVisibleAtZoomLevel(B,D);this.setCurrentLayerVisibility(B,A)}}};IFactorVisibilitiesHandler.prototype.isLayerVisible=function(A){isVisible=this.currentVisibleLayers[A];if(isVisible==true){return true}else{return false}};