| 
					
				 | 
			
			
				@@ -51,15 +51,20 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             <div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 <div>지역</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 <select id="region"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    <option value="all" selected>전체</option> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    <option value="ALL" selected>전체</option> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    <c:if test="${fn:length(center) != 0}"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        <c:forEach var="item" items="${center}"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            <option value="${item.centerId}">${item.centerNm}</option> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        </c:forEach> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    </c:if> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 </select> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             <div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                <div>검색시작일</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <div>검색시작</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 <input type="date" id="start" autocomplete="false"/><input type="time" id="start_time"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             <div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                <div>검색종료일</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <div>검색종료</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 <input type="date" id="end" autocomplete="false" /><input type="time" id="end_time"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         </div> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -82,7 +87,14 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             </tbody> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         </table> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    <div></div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <div class="play-box"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <div>시뮬레이션 재생/멈춤</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <img id="play" onclick="playSimulation()" src="/images/play.png" alt="시뮬레이션 재생버튼" width="24px"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <img id="pause" onclick="pauseSimulation()" src="/images/pause.png" alt="시뮬레이션 멈춤버튼" width="24px"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <img id="stop" onclick="stopSimulation()" src="/images/stop.png" alt="시뮬레이션 초기화버튼" width="24px"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     <div class="treeLoading"><img src="/css/themes/classic/throbber.gif"/></div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 <script type="text/javascript" src="${contextRoot }/js/common/moment.js"></script> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -116,6 +128,10 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const $startTime = $('#start_time'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const $end       = $('#end'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const $endTime   = $('#end_time'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    var _historyMap = new Map(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    var interval = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    var cnt = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     $start.val(getDateToStr(new Date())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     $end.val(getDateToStr(new Date())); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -668,19 +684,29 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         $('.searchBox').css('display', 'flex'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         $('.historyBox').css('display', 'none'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         $('.leftMenu .evp-cur').hide(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $('.evp_legend', parent.document).hide(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        unsetEvpCurr(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (_historyMap && _historyMap.size) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            _historyMap.forEach((obj)=> {if (obj.get('draw')) obj.get('draw').clear()}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            _historyMap.clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $('.history-table tr.on').removeClass('on'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    function unsetEvpCurr() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (window.parent._EmergencyMap && window.parent._EmergencyMap.size) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             window.parent._EmergencyMap.forEach((obj)=> obj.clear()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             window.parent._EmergencyMap.clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             $('.evp-table tr.on').removeClass('on'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             window.parent._isClick = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     function goEvpMenu() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         $('.tabs > li').eq(1).addClass('on'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         $('.tabs > li').eq(0).removeClass('on'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $('.evp_legend', parent.document).show(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // $('.treeLoading').show(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         $('#historyList').show(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         $('#intTree').hide(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -690,7 +716,230 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     function searchHistoryData() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const $region       = $('#region'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const regionVal    = $region.val(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const startVal     = $start.val(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const endVal       = $end.val(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const startTimeVal = $startTime.val(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const endTimeVal   = $endTime.val(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!startVal) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            alert('검색시작 년월일을 입력해주세요'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return $start.focus(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!startTimeVal) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            alert('검색시작 시간을 입력해주세요'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return $startTime.focus(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!endVal) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            alert('검색종료 년월일을 입력해주세요'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return $end.focus(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!endTimeVal) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            alert('검색종료 시간을 입력해주세요'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return $endTime.focus(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const param = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            start : startVal + ' ' + startTimeVal + ':00', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            end : endVal + ' ' + endTimeVal + ':59', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            region : regionVal 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (param.start > param.end) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            alert('검색시작 일시가 종료 일시 보다 큽니다.'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return $end.focus(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        window.parent.requestService('getEvpHistory.do', param, (rec)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const $historyTable = $('.history-table'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let str = '<tr><td colspan="3" class="empty-history">조회된 내용이 없습니다.</td></tr>' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            _historyMap.clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (rec && rec.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                str = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (let history of rec) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     _historyMap.set(history.service_id, new Map()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    const {event_list, phase_list} = history; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    const dateMap = new Map(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (event_list.length && phase_list.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        event_list.forEach((eventObj)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            dateMap.set(eventObj.clct_dt, new Map()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            dateMap.get(eventObj.clct_dt).set('event', eventObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            dateMap.get(eventObj.clct_dt).set('sig', []); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        phase_list.forEach((obj)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (!dateMap.get(obj.clct_dt)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                dateMap.set(obj.clct_dt, new Map()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                dateMap.get(obj.clct_dt).set('event', null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                dateMap.get(obj.clct_dt).set('sig', []); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            dateMap.get(obj.clct_dt).get('sig').push(obj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (dateMap.size) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            history.event_list = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            history.phase_list = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            const dateArr = Array.from(dateMap.keys()).sort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            let beforeSig; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            let beforeEvent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            for (let date of dateArr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                const objMap = dateMap.get(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                if (objMap.get('event') === null && beforeEvent === undefined) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    beforeEvent = event_list[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                else if (objMap.get('event')){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    beforeEvent = objMap.get('event'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                beforeEvent.clct_dt = date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                if (objMap.get('sig').length === 0 && beforeSig === undefined) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    beforeSig = dateMap.get(phase_list[0].clct_dt).get('sig'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                else if (objMap.get('sig').length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    beforeSig = objMap.get('sig'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                beforeSig.forEach((obj)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    obj.clct_dt = date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                history.event_list.push(beforeEvent); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                history.phase_list.push(beforeSig); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     _historyMap.get(history.service_id).set('obj', history); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     _historyMap.get(history.service_id).set('draw', null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    str += `<tr class="hs_\${history.service_id}" onclick="drawHistory('\${history.service_id}')"><td>\${history.clct_dt}</td><td>\${history.service_id}</td><td>\${history.service_nm}</td></tr>`; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $historyTable.html(str); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    function drawHistory(serviceId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        unsetEvpCurr(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (_historyMap.size) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            _historyMap.forEach((obj, key)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const beforeDraw = obj.get('draw'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (beforeDraw && serviceId !== key) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    beforeDraw.clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.set('draw', null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (_historyMap.get(serviceId).get('draw')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (interval) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    clearInterval(interval); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    interval = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    cnt = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const obj = _historyMap.get(serviceId).get('obj'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $('#historyList tr.on').removeClass('on'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $('.hs_' + serviceId).addClass('on'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const drawObj = {...obj}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const {event_list, phase_list} = obj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (event_list && event_list.length) drawObj.event_list = [drawObj.event_list[0]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (phase_list && phase_list.length) drawObj.phase_list = phase_list[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const draw = window.parent.drawHistory(drawObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        _historyMap.get(serviceId).set('draw', draw); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        imageOnOff('play', true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        imageOnOff('stop', false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        imageOnOff('pause', false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    function imageOnOff(name, isOn) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const el = $('#' + name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const eventName = isOn ? 'addClass' : 'removeClass'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        el[eventName]('on'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (el.attr('src') === getImageName(name, !isOn)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            el.attr('src', getImageName(name, isOn)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    function getImageName(name, isOn) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let imgName = '/images/' + name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const onName = '_on'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const extName = '.png'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (isOn) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            imgName += onName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return imgName + extName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    function playSimulation() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!$('#play').hasClass('on')) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const serviceId = $('.history-table tr.on').attr('class').replace(/hs_| on/gi, ''); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let evp = _historyMap.get(serviceId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let obj = evp.get('obj'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let draw = evp.get('draw'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!draw) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            drawHistory(serviceId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            draw = evp.get('draw'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const { event_list, phase_list } = obj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        imageOnOff('stop', true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        imageOnOff('pause', true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        imageOnOff('play', false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        interval = setInterval(()=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const position = window.parent.getKakaoPosition(event_list[cnt].cur_lat, event_list[cnt].cur_lng); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            draw.car.moveMarker(position); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            phase_list[cnt].forEach((sigObj)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const evpSig = draw.sig.get(sigObj.service_id + '_' + sigObj.seq_no); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (evpSig === undefined) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    draw.sig.set(sigObj.service_id + '_' + sigObj.seq_no, window.parent.createSig(sigObj)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (!evpSig.a_ring && !evpSig.b_ring) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        evpSig.createRing(sigObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        const {a_head_lat, a_head_lng, a_mid_lat, a_mid_lng, a_end_lat, a_end_lng, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            b_head_lat, b_head_lng, b_mid_lat, b_mid_lng, b_end_lat, b_end_lng} = sigObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        const aPosition = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            window.parent.getKakaoPosition(a_head_lat, a_head_lng), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            window.parent.getKakaoPosition(a_mid_lat, a_mid_lng), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            window.parent.getKakaoPosition(a_end_lat, a_end_lng), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        const bPosition = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            window.parent.getKakaoPosition(b_head_lat, b_head_lng), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            window.parent.getKakaoPosition(b_mid_lat, b_mid_lng), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            window.parent.getKakaoPosition(b_end_lat, b_end_lng), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        // console.log(aPosition, bPosition); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        evpSig.a_ring.setPath(aPosition); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        evpSig.b_ring.setPath(bPosition); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    evpSig.setState(sigObj.state); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cnt++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 500); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    function pauseSimulation() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        clearInterval(interval); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        imageOnOff('pause', false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        imageOnOff('play', true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    function stopSimulation() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        clearInterval(interval); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        imageOnOff('stop', false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        imageOnOff('pause', false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        cnt = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </body> 
			 |