function NetworkEventsTimelineModel(j,c){var a=c.defaultStatus;var b="";var i=[];g();function g(){var n=_.find(_.map(j,function(p,o){return{group:o,isOn:p.Default}}),function(o){return o.isOn});if(n){b=n.group;i=_.pluck(_.filter(_.map(j[b].Services,function(p,o){return{Name:o,Selected:p.Selected}}),function(o){return o.Selected}),"Name")}}function e(){if(!b){return[]}if(h()){return j[b].Services}alert("getActiveGroupServices Undefined group: "+b);return[]}function h(){return !!(b&&j[b])}function k(n){a=n}function d(){return a}function f(){var n=[];_.each(e(),function(p,o){if(_.contains(i,o)){if(p.SubServices){n=n.concat(p.SubServices)}else{n.push(o)}}});return n}function l(n){if(n&&j[n]){b=n;return true}var o="Illegal serviceGroup in setActiveServiceGroup: "+n;alert(o);return false}function m(n){i=[];_.each(n,function(o){i.push(o)})}return{setActiveFaultStatus:k,getActiveFaultStatus:d,getSelectedSubServices:f,setActiveServiceGroup:l,setSelectedServices:m}};function NetworkEventsTimelinePresenter(k,q,h,e){e.networkEventsTimelineSettings=e.networkEventsTimelineSettings||{};var j;var n;if(!e.networkEventsTimelineSettings.showFaultTimeline){return{initialize:function(){},turnOn:function(){},turnOff:function(){},refresh:function(){},setLocation:function(){},addCustomLayerNearbyService:function(){},addFaultHistoryDateRangeChangedHandler:function(){},getFaultDateRange:function(){}}}var g;var b;var c=null;var d=null;var m=_.throttle(function(){if(!b||!b.point){return}var s={id:"timeline",easting:b.point.easting,northing:b.point.northing};var t=h.getSelectedSubServices()||[];var u=[];u.push(h.getActiveFaultStatus());q.loading(true);var r=q.getDateRange();k.getFaultTimeline(s,t,r,u,function(w){q.loading(false);var v=c?c(s,true):null;w=a(v,w);w.selectedFocusDate=j;q.showFaultTimeLineChart(w)},function(){q.loading(false)})},250);function a(s,t){var u=t.events;if(u==null){u={ImpactTimeSpans:[{StartUtc:e.toMilliseconds(t.dateRange.startTime),StopUtc:e.toMilliseconds(t.dateRange.endTime),Impact:s===null?0:1}]}}if(s&&(s.faultNodes.length>0||s.faultHistoryNodes.length>0)){var r=s.faultNodes.concat(s.faultHistoryNodes);var v=_.sortBy(r,function(w){return w.EventTime});_.each(v,function(w){u.ImpactTimeSpans.push({StartUtc:e.toMilliseconds(w.EventTime),StopUtc:w.IsHistoric?e.toMilliseconds(w.ClearedTime):e.toMilliseconds(w.EstCloseDate),Impact:w.FaultOutage?3:2})})}t.events=u;return t}q.setHandlers({onDateRangeChange:function(){if(d!=null){d(q.getDateRange())}i()},onShowReport:function(){if(!b||!b.point){return}var s={id:b.address||"faultreport",easting:b.point.easting,northing:b.point.northing};var t=h.getSelectedSubServices()||[];var r=q.getDateRange();var u=k.getFaultReportUrl(s,t,r);var v=window.open(u,e.resources.NetworkEventsTimeline.LocationFaultReportTitle,"left=20,top=20,width=580,height=580,toolbar=0,resizable=1,scrollbars=1");v.focus()}});function f(){q.initialize();if(e.events){e.events.subscribe("NETWORK_EVENTS_TIMELINE_ACTIVATOR_CLICKED",function(s,r){j=r.date;if(r.state==="on"){p();n=true}else{o();n=false}});e.events.subscribe("LOCATION_CHANGED",function(s,r){l(r)});e.events.subscribe("SERVICE_CHANGED",function(s,r){h.setSelectedServices(r);if(n){o();p()}});e.events.subscribe("NETWORK_EVENTS_TIMELINE_DATE_CHANGED",function(s,r){j=r.date;q.setSelectedDate(j)})}}function p(){g=true;q.turnOn();i()}function o(){g=false;q.turnOff()}function i(){if(!g||!b){return}m()}function l(r){b=r;if(g){i()}}return{initialize:f,turnOn:p,turnOff:o,refresh:i,setLocation:l,addCustomLayerNearbyService:function(r){c=r},addFaultHistoryDateRangeChangedHandler:function(r){d=r},getFaultDateRange:function(){return q.getDateRange()},modeEnter:function(){},modeExit:function(){}}};function NetworkEventsTimelineService(a,f){function d(g,i,h){$.getJSON(a+"NetworkEventsTimeline/NetworkEventsTimeline/"+g,i,h).fail(function(){if(h){h()}e()})}function e(){alert("Failed to read network events data.\nPlease contact your administrator.")}function c(j,l,h,m,g,i){var k=JSON.stringify({locations:[j],eventTypes:[],services:l,statuses:m,dateRange:h});d("GetFaultTimeline?request="+k,g,i)}function b(h,j,g){var i=JSON.stringify({locations:[h],eventTypes:[],services:j,dateRange:g,uiCulture:f});return a+"NetworkEventsTimeline/NetworkEventsTimeline/LocationDaterangeFaultReport?request="+i}return{getFaultTimeline:c,getFaultReportUrl:b}};function NetworkEventsTimelineView(m){var w=m.networkEventsTimelineSettings||{};if(!w.showFaultTimeline){return{}}var B={faultTimeLineContainer:$("#faulttimeline"),map:$("#map"),chartContainerId:"faulttimeline-chart",chartContainer:$("#faulttimeline-chart"),toolbar:$("#faulttimeline-toolbar"),daterangeSelector:$("#faulttimeline-daterangeselector"),daterangeSelectorTemplateId:"#networkeventstimeline-daterangepicker-template",daterangeControlId:"faulttimeline-daterangecontrol",reportSelector:$("#faulttimeline-report"),loading:$("#faulttimeline-loading"),alignBottomTo:$("#legendBar")};var r=m.resources.NetworkEventsTimeline;var n=[{name:r.ImpactNoService,color:w.impactNoServiceColor},{name:r.ImpactNormalService,color:w.impactNormalServiceColor},{name:r.ImpactDisturbance,color:w.impactDisturbanceColor},{name:r.ImpactOutage,color:w.impactOutageColor},{name:r.ImpactPlanned,color:w.impactPlannedColor}];var x=w.showDateRangeSelector;var c;var d=h();var l={onDateRangeChange:null,onShowReport:null};var t;function h(){return{title:{text:""},chart:{renderTo:B.chartContainerId,type:"columnrange",inverted:true,zoomType:"y",spacing:[21,5,5,5],backgroundColor:"rgba(255, 255, 255, 0.5)",resetZoomButton:{position:{x:-5,y:2},theme:{padding:2,style:{fontSize:"7pt"}},relativeTo:"chart"},events:{click:function(C){var D=_.find(c.yAxis[0].plotLinesAndBands,function(E){return E.id==="current-date-plotband"});if(D){m.events.publish("NETWORK_EVENTS_TIMELINE_DATE_CHANGED",{date:b(Math.round(C.yAxis[0].value)),rebuild:true,source:"NetworkEventsTimeline"})}}}},exporting:{enabled:false},xAxis:{lineWidth:0,lineColor:"transparent",labels:{enabled:false},tickLength:0},yAxis:{type:"datetime",title:{text:""},minPadding:0.05,maxPadding:0.05,endOnTick:false,startOnTick:false,labels:{y:10,style:{color:"rgba(0, 0, 0, 1)",font:'10px "Helvetica Neue", Helvetica, Arial, sans-serif',"font-weight":"bold",marginTop:"2px"},useHTML:false}},plotOptions:{columnrange:{grouping:false,pointPadding:-0.2},series:{events:{afterAnimate:q,click:function(C){var D=_.find(c.yAxis[0].plotLinesAndBands,function(E){return E.id==="current-date-plotband"});if(D){m.events.publish("NETWORK_EVENTS_TIMELINE_DATE_CHANGED",{date:b(Math.round(c.yAxis[0].toValue(C.chartX))),rebuild:true,source:"NetworkEventsTimeline"})}}}}},legend:{enabled:false},tooltip:{followPointer:true,outside:true,style:{fontSize:"8pt",padding:"2px"},positioner:function(D,C,H){var F=this.chart.plotLeft;var G=this.chart.plotWidth;var E=0;var I=H.plotX+F+(this.chart.inverted?E:-D-E);if(I<7){I=F+H.plotX+E}if((I+D)>(F+G)){I-=(I+D)-(F+G)}return{x:I,y:2}},formatter:function(){var G=m.date(this.point.low);var F=m.date(this.point.high);var D=r[w.historyMode||(F.hour()===0&&F.minute()===0)?"ChartDateFormat":"ChartDatetimeFormat"];var C;if(w.historyMode){var E=moment.duration(F.diff(G));C=E.asHours()<=24?Highcharts.dateFormat(D,this.point.high):Highcharts.dateFormat(D,G.add(1,"days").unix()*1000)+" - "+Highcharts.dateFormat(D,this.point.high)}else{C=Highcharts.dateFormat(D,this.point.low)+" - "+Highcharts.dateFormat(D,this.point.high)}return"<b>"+this.point.name+"</b>: "+C+"<br/>"}}}}function i(C){if(!C||!C.events||!C.events.ImpactTimeSpans){return[]}if(w.historyMode){var E;if(C.events.ImpactTimeSpans.length===1){E=C.events.ImpactTimeSpans[0];E.Start=moment(E.Start).startOf("day").subtract(12,"hours").unix()*1000;E.Stop=moment(E.Stop).startOf("day").add(12,"hours").unix()*1000}else{for(var D=0;D<C.events.ImpactTimeSpans.length;D++){E=C.events.ImpactTimeSpans[D];if(E.Impact===1){if(D===0){E.Start=moment(E.Start).startOf("day").subtract(12,"hours").unix()*1000;E.Stop=moment(C.events.ImpactTimeSpans[D+1].Start).startOf("day").subtract(12,"hours").unix()*1000}else{if(C.events.ImpactTimeSpans[D-1].Impact>1){if(!(moment(C.events.ImpactTimeSpans[D-1].Stop).hour()===0&&moment(C.events.ImpactTimeSpans[D-1].Stop).minute()===0&&moment(C.events.ImpactTimeSpans[D-1].Stop).second()===0)){E.Start=moment(C.events.ImpactTimeSpans[D-1].Stop).startOf("day").add(12,"hours").unix()*1000}else{E.Start=moment(C.events.ImpactTimeSpans[D-1].Stop).subtract(12,"hours").unix()*1000}}else{E.Start=moment(E.Start).startOf("day").subtract(12,"hours").unix()*1000}if(D===C.events.ImpactTimeSpans.length-1){E.Stop=moment().startOf("day").add(12,"hours").unix()*1000}else{E.Stop=moment(C.events.ImpactTimeSpans[D+1].Start).startOf("day").subtract(12,"hours").unix()*1000}}}else{if(D===0){E.Start=moment(E.Start).startOf("day").subtract(12,"hours").unix()*1000;if(!(moment(E.Stop).hour()===0&&moment(E.Stop).minute()===0&&moment(E.Stop).second()===0)){E.Stop=moment(E.Stop).startOf("day").add(12,"hours").unix()*1000}else{E.Stop=moment(E.Stop).subtract(12,"hours").unix()*1000}}else{E.Start=moment(E.Start).startOf("day").subtract(12,"hours").unix()*1000;if(D===C.events.ImpactTimeSpans.length-1){E.Stop=moment(E.Stop).startOf("day").add(12,"hours").unix()*1000}else{if(!(moment(E.Stop).hour()===0&&moment(E.Stop).minute()===0&&moment(E.Stop).second()===0)){E.Stop=moment(E.Stop).startOf("day").add(12,"hours").unix()*1000}else{E.Stop=moment(E.Stop).subtract(12,"hours").unix()*1000}}}}}}}return[{data:_.map(C.events.ImpactTimeSpans,function(F){return{x:1,low:F.Start,high:F.Stop,color:n[F.Impact].color,name:n[F.Impact].name}})}]}function q(){if(t){v(t)}}function b(C){var H;var D=moment(C);var I=moment(C).startOf("day");var G=moment(C).add(1,"days").startOf("day");var F=moment.duration(D.diff(I));var E=moment.duration(G.diff(D));if(F.asMinutes()>=E.asMinutes()){H=G.unix()*1000}else{H=I.unix()*1000}return moment(H)}var f=null;var e=null;function j(){return f}function g(){return 65}function s(){try{var G=B.faultTimeLineContainer.parent().hasClass("fault-timeline-wrapper")?B.faultTimeLineContainer.parent().width():0;var F=G?G:B.map.width()-19;var E=F-10-(x?B.toolbar.width():0);if(f!==E){f=E;B.faultTimeLineContainer.width(F);if(c){c.setSize(j(),g())}B.loading.width(F)}var D=B.alignBottomTo.offset().top-B.faultTimeLineContainer.height()-39;if(e!==D){e=D;B.faultTimeLineContainer.css("top",D+"px")}}catch(C){}}function a(){B.reportSelector.click(function(){if(l.onShowReport){l.onShowReport()}})}a();$(window).resize(function(){s();_.delay(s,1000)});_.delay(s,2000);function o(){if(x){m.setContentByTemplate(B.daterangeSelector,B.daterangeSelectorTemplateId,{id:B.daterangeControlId});B.toolbar.show();if(w.fixedDateRanges&&w.fixedDateRanges[0]){w.fixedDateRanges[0].startTime=w.customStartTime;w.fixedDateRanges[0].endTime=w.customEndTime}B.daterangeControl=DateRangeControl("#"+B.daterangeControlId,false,true,w,r);B.daterangeControl.addRangeChangedHandler(l.onDateRangeChange)}else{B.toolbar.hide()}}function u(C){l=C}function A(){B.faultTimeLineContainer.addClass("show");s()}function z(){B.faultTimeLineContainer.removeClass("show");y()}function k(){if(!x||!B.daterangeControl){return null}var C=B.daterangeControl.getDateRange();return C}function y(C){if(C){t=C.selectedFocusDate}d.series=i(C);d.chart.height=g();d.chart.width=j();var F=new Date();if(w.isFaultTimelineInUtcDate){F=moment().add(F.getHours()-F.getUTCHours(),"hours")}if(d.yAxis.plotLines&&d.yAxis.plotLines.length){d.yAxis.plotLines[0].value=F}if(C&&C.dateRange){var E,D;if(w.historyMode){E=moment(C.dateRange.startTime).subtract(12,"hours").unix()*1000;D=moment(C.dateRange.endTime).subtract(12,"hours").unix()*1000}else{E=m.toMilliseconds(m.date(C.dateRange.startTime));D=m.toMilliseconds(m.date(C.dateRange.endTime))}d.yAxis.min=E;d.yAxis.max=D}c=new Highcharts.Chart(d);if(!w.historyMode){var G={value:F,color:"black",zIndex:5,dashStyle:"shortdash",width:1,label:{text:r.Now,style:{color:"black",fontSize:"7.5pt"},y:4}};c.yAxis[0].addPlotLine(G)}}function p(C){if(C){B.chartContainer.hide();if(x){B.toolbar.hide()}B.loading.show()}else{B.loading.hide();B.chartContainer.show();if(x){B.toolbar.show()}}}function v(C){var D=_.find(c.yAxis[0].plotLinesAndBands,function(H){return H.id==="current-date-plotband"});var G=d.series[0].data;var E;c.pointer.zoomY=false;c.pointer.zoomX=false;c.pointer.zoomVert=false;c.pointer.zoomHor=false;_.each(G,function(I){if(C.isBetween(moment(I.low),moment(I.high))||C.isSame(moment(I.low))||C.isSame(moment(I.high))){if(I.color){var H=I.color;H=H.substring(5,H.length-1).replace(/ /g,"").split(",");E="rgb("+H[0]+","+H[1]+","+H[2]+")"}}});if(D){D.options.from=moment(C).subtract(12,"hours").unix()*1000;D.options.to=moment(C).add(12,"hours").unix()*1000;D.options.color=E;D.svgElem.element.attributes.fill=E;D.svgElem.element.attributes[0].nodeValue=E;D.render()}else{var F={id:"current-date-plotband",color:E,from:moment(C).subtract(12,"hours").unix()*1000,to:moment(C).add(12,"hours").unix()*1000,zIndex:20,label:{text:r.Selected,textAlign:"center",style:{color:"#ffffffed",fontWeight:"bold","padding-top":"3px"},useHTML:true}};c.yAxis[0].addPlotBand(F)}}return{initialize:o,setHandlers:u,turnOn:A,turnOff:z,getDateRange:k,showFaultTimeLineChart:y,loading:p,setSelectedDate:v}};
