PageSourceSearch

https://nikkei225jp.com/indexH_NK225.js?v=3c14f5fb427816569b80ac2da483f1cc6fa9a206234529db0e77d16728bd7975

js nikkei225jp.com collected 2026-10-02 06:56:02 UTC 84,512 bytes, 2,087 lines download raw bytes

1// 旧版・新版とも凡例の線だけ3pxにする。描画済みSVGを直接参照する。
2function nk225LegendLines(chart){
3    var items=chart.legend&&chart.legend.allItems||[];
4	for(var i=0;i<items.length;i++){
5		var item=items[i],line=item.legendLine||(item.legendItem&&item.legendItem.line);
6		if(!line)continue;
7		if(!line.element||!line.element.getAttribute||line.element.getAttribute('stroke-width')!=='3')line.attr({'stroke-width':3});
8		if(line.element&&line.element.style&&line.element.style.strokeWidth!=='3px')line.element.style.strokeWidth='3px';
9    }
10}
11
12var changeInter=6;
13var pageName = '';
14
15/* 複合チャートの通信・Socket・再描画を一か所で管理する。 */
16var Sle=2,nkHGeneration=0,nkHRequests=[],nkHPagePaused=false,nkHNeedsReload=false;
17var nkHReadyMode=-1,nkHRetryCount=0,nkHFlushTimer=0,nkHPendingValues={},nkHMinSession='';
18var nkHSeriesDirty=false,nkHMinSignature='',nkHLoadedAt=0;
19var nkHViewportActive=true;
20// タブ番号に対応するseries順。秒足と1日では銘柄コードも並びも異なる。
21var nkHSeriesCodes={
22	1:[781,111,136,751,211,731,762,796,791,1001],
23	2:[511,111,191,211,731,737,621,921,931,1001]
24};
25// hs_TOP5.json の get_JSON_min_multi('7D',1,...) に渡すコード順。
26var nkHMinTop5Columns={511:1,111:2,191:3,211:4,731:5,737:6,621:7,921:8,931:9,1001:10};
27function nkHCanUpdate(){
28	return nkHViewportActive&&!nkHPagePaused&&!document.hidden&&navigator.onLine!==false&&
29		(typeof window.nkMarketUpdatesAllowed!=='function'||window.nkMarketUpdatesAllowed());
30}
31function nkHChart(){try{return $('#container').highcharts()||null;}catch(e){return null;}}
32function nkHDestroyChart(){
33	var chart=nkHChart();
34	if(chart){
35		if(chart._nkHRangeTimer)clearTimeout(chart._nkHRangeTimer);
36		if(chart._nkHSeriesTimer)clearTimeout(chart._nkHSeriesTimer);
37	}
38	nkHShortDestroyLabels(chart);
39	if(chart)try{chart.destroy();}catch(e){}
40}
41function nkHDisconnect(){
42	var socket=Socket;Socket=null;
43	if(socket){
44		if(typeof socket.removeAllListeners==='function')socket.removeAllListeners();
45		if(typeof socket.disconnect==='function')socket.disconnect();
46	}
47}
48function nkHStop(){
49	nkHGeneration++;
50	var chart=nkHChart();
51	if(chart&&chart._nkHShortExpiryTimer){clearTimeout(chart._nkHShortExpiryTimer);chart._nkHShortExpiryTimer=null;}
52	if(TimerHSmin){clearTimeout(TimerHSmin);TimerHSmin=null;}
53	if(nkHFlushTimer){clearTimeout(nkHFlushTimer);nkHFlushTimer=0;}
54	nkHPendingValues={};nkHSeriesDirty=false;nkHNeedsReload=true;
55	nkHDisconnect();
56	var requests=nkHRequests.slice();nkHRequests.length=0;
57	for(var i=0;i<requests.length;i++)try{requests[i].abort();}catch(e){}
58}
59function nkHSchedule(){
60	if(TimerHSmin){clearTimeout(TimerHSmin);TimerHSmin=null;}
61	if(!nkHCanUpdate()||nkHRequests.length)return;
62	var ready=nkHReadyMode===Sle&&!!nkHChart();
63	if(ready&&Sle===1)return; // 秒足はSocketだけを利用する
64	var delay=ready?(Sle===2?Math.max(1,Number(changeInter)||6)*10000:Math.max(1000,36e5-(Date.now()-nkHLoadedAt))):Math.min(30000,5000*Math.pow(2,Math.min(nkHRetryCount++,3)));
65	var generation=nkHGeneration;
66	TimerHSmin=setTimeout(function(){
67		TimerHSmin=null;
68		if(generation!==nkHGeneration||!nkHCanUpdate())return;
69		if(nkHReadyMode===2&&Sle===2)inter_min();else nkHLoadSelected();
70	},delay);
71}
72function nkHCopyPoints(data){
73	if(!Array.isArray(data))return [];
74	return data.map(function(point){return Array.isArray(point)?point.slice():point;});
75}
76// Cookieの期間番号は数値で渡す。文字列のままだと同じボタンを再選択してしまう。
77function nkHRangeIndex(value,fallback,count){
78	var index=Number(value);
79	return value!==null&&String(value).trim()!==''&&isFinite(index)&&index%1===0&&index>=0&&index<count?index:fallback;
80}
81// 休日で終値がない日や、表示終端より後の終値には補助線を作らない。
82// HighstockのdataGroupingには、時刻が必ず昇順の点列を渡す。
83function nkHCloseLine(times,values,index,endTime){
84	var start=Number(times[index]),value=Number(values[index]);
85	var next=Number(times[index+1]),end=isFinite(next)?next:Number(endTime);
86	if(!isFinite(start)||!isFinite(value)||!isFinite(end)||end<=start)return [];
87	return [[start,value],[start+(end-start)/2,value],[start+(end-start)*2/3,value],[end,value]];
88}
89// 自動追従では集約設定を解除しない。解除すると旧Highstockで点が二重破棄される。
90// 土日の非表示区間に届いた時刻では、表示範囲をずらさず次の取引時間を待つ。
91function nkHFollowLatest(chart,time,previousDataMax){
92	var axis=chart&&chart.xAxis&&chart.xAxis[0];
93	if(!axis||!isFinite(time))return false;
94	if(typeof axis.isInAnyBreak==='function'&&axis.isInAnyBreak(time))return false;
95	var ex=axis.getExtremes(),min=Number(ex.userMin),max=Number(ex.userMax);
96	// 過去へパンした表示は、更新で勝手に最新へ戻さない。
97	if(isFinite(previousDataMax)&&max<previousDataMax-30*60000)return false;
98	if(isFinite(min)&&isFinite(max)&&max>min&&time>max){
99		var newMin=time-(max-min);
100		// 週末の break をまたぐときも、画面上の表示幅を保って追従する。
101		if(typeof axis.val2lin==='function'&&typeof axis.lin2val==='function'){
102			var linearMin=axis.val2lin(min),linearMax=axis.val2lin(max),linearTime=axis.val2lin(time);
103			var breakMin=axis.lin2val(linearTime-(linearMax-linearMin));
104			if(isFinite(breakMin))newMin=breakMin;
105		}
106		axis.setExtremes(newMin,time,false,false,{trigger:'updatedData'});
107		return true;
108	}
109	return false;
110}
111function nkHGuard(fn){
112	var generation=nkHGeneration,mode=Sle;
113	return function(){
114		if(generation!==nkHGeneration||mode!==Sle||!nkHCanUpdate())return;
115		try{return fn.apply(this,arguments);}
116		catch(error){if(window.console&&console.error)console.error('composite chart update',error);}
117	};
118}
119// 旧データ配信はJS形式。実行直後に専用コピーを取り、他のチャートのSxxx配列に依存しない。
120function nkHAjax(options){
121	var generation=nkHGeneration,mode=Sle;
122	if(!nkHCanUpdate())return $.Deferred().reject(null,'stopped').promise();
123	if(TimerHSmin){clearTimeout(TimerHSmin);TimerHSmin=null;}
124	if(!options.timeout)options.timeout=12000;
125	if(typeof options.cache==='undefined')options.cache=true;
126	var request=$.ajax(options);
127	nkHRequests.push(request);
128	var rawDone=request.done,rawFail=request.fail;
129	rawDone.call(request,function(){
130		if(generation!==nkHGeneration||mode!==Sle||!nkHCanUpdate())return;
131		var names=[],match=String(options.url||'').match(/\/(S\d+)\.json(?:\?|$)/);
132		if(match)names=[match[1]];
133		else if(/\/hs_top\.json(?:\?|$)/.test(String(options.url||'')))names=nkHSeriesCodes[1].map(function(C){return 'S'+C;});
134		else if(String(options.url).indexOf('hs_nk_s3')>=0)names=['S511','S111','S136','S191','S413','S732','S211','S731','S921','S1001'];
135		else names=['DATAm'];
136		request.nkHValues={};
137		for(var i=0;i<names.length;
137i++)request.nkHValues[names[i]]=nkHCopyPoints(window[names[i]]);
138	});
139	request.always(function(){
140		var index=nkHRequests.indexOf(request);if(index>=0)nkHRequests.splice(index,1);
141		if(generation===nkHGeneration)nkHSchedule();
142	});
143	function guard(fn){return function(){
144		if(generation!==nkHGeneration||mode!==Sle||!nkHCanUpdate())return;
145		try{return fn.apply(this,arguments);}
146		catch(error){if(window.console&&console.error)console.error('composite chart update',error);}
147	};}
148	request.done=function(fn){if(typeof fn==='function')rawDone.call(request,guard(fn));return request;};
149	request.fail=function(fn){if(typeof fn==='function')rawFail.call(request,guard(fn));return request;};
150	return request;
151}
152function nkHLoadSelected(){
153	if(!nkHCanUpdate()||nkHRequests.length)return;
154	if(Sle===1)sec_create_chart();
155	else if(Sle===2)min_create_chart();
156	else if(Sle===3)day_create_chart();
157	else if(Sle===4)per_create_chart();
158}
159function nkHChartLoaded(){
160	var chart=nkHChart();if(!chart)return;
161	chart._nkHMode=Sle;nkHReadyMode=Sle;nkHLoadedAt=Date.now();nkHRetryCount=0;nkHNeedsReload=false;
162	if(nkHCanUpdate()&&Sle<3&&!Socket&&typeof io==='function'){
163		var generation=nkHGeneration;
164		Socket=io('wss://wss2.nikkei225jp.com?node=ch225',{path:'/socket.io/',rememberTransport:false,transports:['websocket']});
165		Socket.on('tick',function(data){
166			if(generation!==nkHGeneration||!nkHCanUpdate()||nkHReadyMode!==Sle)return;
167			try{if(Sle===1)socket_sec(data);else if(data&&data.length>=3)nkHQueueDraw(Number(data[0]),Number(String(data[2]).replace(/,/g,'')),false,Number(data[1]));}
168			catch(error){if(window.console&&console.error)console.error('composite socket tick',error);}
169		});
170	}
171	nkHSchedule();
172}
173function nkHResume(){
174	if(!nkHCanUpdate()||!nkHNeedsReload)return;
175    var chart=nkHChart();
176    // 分足は休止中の点列だけ再取得し、既存の表示範囲・凡例を保持する。
177    if(chart&&chart._nkHMode===Sle&&nkHReadyMode===Sle){
178        if(Sle===2){nkHChartLoaded();nkHShortRenderLabels(chart,'min');inter_min();return;}
179        // 日足・%表示の同じデータを、タブ復帰のたびに再作成しない。
180        if(Sle>2&&Date.now()-nkHLoadedAt<36e5){nkHNeedsReload=false;nkHSchedule();return;}
181    }
182	dispHS(Sle,'resume');
183}
184document.addEventListener('visibilitychange',function(){if(document.hidden)nkHStop();else nkHResume();});
185window.addEventListener('offline',nkHStop);
186window.addEventListener('online',nkHResume);
187window.addEventListener('pagehide',function(){nkHPagePaused=true;nkHStop();});
188window.addEventListener('pageshow',function(){nkHPagePaused=false;nkHResume();});
189window.addEventListener('marketupdatesstop',nkHStop);
190window.addEventListener('marketclockchange',function(){if(nkHCanUpdate())dispHS(Sle,'clock');else nkHNeedsReload=true;});
191// 画面外では通信・Socket・タイマーを止める。表示直前に再開し、分足は既存チャートに差分を反映する。
192function nkHObserveViewport(){
193	if(typeof IntersectionObserver!=='function')return;
194	var target=document.getElementById('container');
195	if(!target)return;
196	var rect=target.getBoundingClientRect(),height=window.innerHeight||document.documentElement.clientHeight;
197	var width=window.innerWidth||document.documentElement.clientWidth;
198	nkHViewportActive=rect.bottom>=-250&&rect.top<=height+250&&rect.right>=0&&rect.left<=width;
199	var observer=new IntersectionObserver(function(entries){
200		for(var i=0;i<entries.length;i++){
201			if(entries[i].target!==target)continue;
202			var active=entries[i].isIntersecting;
203			if(active===nkHViewportActive)continue;
204			nkHViewportActive=active;
205			if(active)nkHResume();else nkHStop();
206		}
207	},{rootMargin:'250px 0px'});
208	observer.observe(target);
209}
210// 短期のティック点数を時間窓+上限で制限。同じ秒の二重追加や逆行時刻は追加しない。
211function nkHSocketPoint(data,mode){
212	if(!nkHCanUpdate()||Sle!==mode||!data||data.length<3)return;
213	var codes=nkHSeriesCodes[mode]||[],C=Number(data[0]),index=codes.indexOf(C);
214	var T=Math.floor(Number(data[1])/1000)*1000,V=Number(String(data[2]).replace(/,/g,''));
215	var chart=nkHChart();
216	if(index<0||!isFinite(T)||T<=0||!isFinite(V)||V<=0||!chart||chart._nkHMode!==mode||!chart.series)return;
217	var series=mode===2?chart.get('nkH-min-'+C):chart.series[index];
218	if(!series)return;
219	var previousDataMax=chart.xAxis&&chart.xAxis[0]?Number(chart.xAxis[0].getExtremes().dataMax):NaN;
220	var changed=false,xs=(series.getColumn?series.getColumn('x'):series.xData)||[],ys=(series.getColumn?series.getColumn('y'):series.yData)||[],last=xs.length?Number(xs[xs.length-1]):-Infinity;
221	if(T>last){
222		changed=true;
223		// 秒足だけを6時間に絞る。1日は7Dまでの履歴を維持し、上限点数だけ制限する。
224		var cutoff=mode===1?Math.max(Date.now(),T)-6*61*60000:-Infinity,maxPoints=24000;
225		var low=0,high=xs.length;
226		while(low<high){var mid=(low+high)>>1;if(Number(xs[mid])<cutoff)low=mid+1;else high=mid;}
227		var drop=Math.max(low,xs.length+1-maxPoints);
228		if(drop>1){
229			var points=[];for(var i=drop;i<xs.length;i++)points.push([xs[i],ys[i]]);
230			points.push([T,V]);series.setData(points,false,false,false);
231		}else series.addPoint([T,V],false,drop===1,false);
232		nkHFollowLatest(chart,T,previousDataMax);
233	}else if(T===last&&Number(ys[ys.length-1])!==V){
234		changed=true;
235		var point=series.data&&series.data[xs.length-1];
236		if(point&&typeof point.update==='function')point.update([T,V],false,false);
237		else if(Number(ys[ys.length-1])!==V){
238			var points=[];for(var j=0;j<xs.length-1;j++)points.push([xs[j],ys[j]]);
239			points.push([T,V]);series.setData(points,false,false,false);
240		}
241	}
242	if(T>=last)nkHQueueDraw(C,V,changed,T);
243}
244function nkHQueueDraw(C,V,seriesDirty,T){
245	if(!nkHCanUpdate()||!isFinite(V))return;
246	if((nkHSeriesCodes[Sle]||[]).indexOf(C)<0)return;
247	nkHPendingValues[C]={value:V,time:T};
248	if(seriesDirty)nkHSeriesDirty=true;
249	if(nkHFlushTimer)return;
250	var generation=nkHGeneration;
251	nkHFlushTimer=setTimeout(function(){
252		nkHFlushTimer=0;
253		var pending=nkHPendingValues,needsRedraw=nkHSeriesDirty;nkHPendingValues={};nkHSeriesDirty=false;
254		if(generation!==nkHGeneration||!nkHCanUpdate())return;
255		var chart=nkHChart();if(!chart||chart._nkHMode!==Sle)return;
256		// Socketの現値を先に保存し、点列に変更があれば再描画で枠も更新する。
257		for(var C in pending)if(Object.prototype.hasOwnProperty.call(pending,C))renderVal(Number(C),pending[C].value,true,pending[C].time);
258		if(needsRedraw)chart.redraw(false);
259		else if(Sle===2)nkHShortRenderLabels(chart,'min');
260	},100);
261}
262function nkHSessionKey(data){
263	if(!data||!data.length)return '';
264	var first=Number(data[0][0]),last=first;
265	for(var i=1;i<data.length;i++)last+=Number(data[i][0])*10000;
266	var nyOffset=(-5+NY_stF)*36e5;
267	return [Math.floor((first+9*36e5)/864e5),Math.floor((last+9*36e5)/864e5),Math.floor((first+nyOffset)/864e5),Math.floor((last+nyOffset)/864e5),NY_stF,EU_stF,weekEnd?1:0].join('|');
268}
269
270// 期間Cookieは、再描画を発生させたチャート自身から保存する
271function setHchartRangeCookie(t,chart){
272	if(!chart || chart!==nkHChart() || !chart.rangeSelector){return;}
273	var rSel=chart.rangeSelector.selected;
274	if(rSel !==null && typeof rSel!='undefined'&&chart._nkHStoredRange!==rSel){mySetCookie("TOP225_"+t+"R",rSel,365);chart._nkHStoredRange=rSel;}
275}
276
277// redrawの後にrangeSelector.selectedが更新されるため、更新完了後に保存する
278// チャート自身を保持することで、画面切替後の別チャートを誤保存しない
279function setHchartRangeCookieAfterRedraw(t,chart){
280	if(!chart||chart._nkHRangeTimer||!chart.rangeSelector||chart._nkHStoredRange===chart.rangeSelector.selected)return;
281	chart._nkHRangeTimer=setTimeout(function(){chart._nkHRangeTimer=0;setHchartRangeCookie(t,chart);},100);
282}
283
284// 表示銘柄Cookieは、凡例を操作した時だけ保存する
285function setHchartSeriesCookie(t,chart){
286	if(!chart || chart!==nkHChart() || !chart.legend || !chart.legend.allItems){return;}
287	var sList=[];
288	if(t==='min'){
289		// 凡例の表示順が変わっても、Cookieは銘柄コード順に固定する。
290		for(var i=0;i<nkHSeriesCodes[2].length;i++){
291			var series=chart.get('nkH-min-'+nkHSeriesCodes[2][i]);
292			sList.push(Number(!!series&&series.visible)+"");
293		}
294	}else for(var j=0;j<chart.legend.allItems.length;j++){sList.push(Number(chart.legend.allItems[j].visible)+"");}
295	var value=sList.join("_");if(chart._nkHStoredSeries!==value){mySetCookie("TOP225_"+t+"S",value,365);chart._nkHStoredSeries=value;}
296}
297
298// legendItemClickは表示切替前に発生するため、切替完了後に保存する
299function setHchartSeriesCookieAfterClick(t,series){
300	if(!series || !series.chart){return;}
301	var chart=series.chart;
302	if(chart._nkHSeriesTimer)clearTimeout(chart._nkHSeriesTimer);
303	chart._nkHSeriesTimer=setTimeout(function(){chart._nkHSeriesTimer=0;
303setHchartSeriesCookie(t,chart);},0);
304}
305
306var colHS111='rgba(255,0,0,1)';
307var colHS191='rgba(255,150,50,1)';
308var colHS136='rgba(255,160,205,1)';
309var colHS321='rgba(255,160,205,1)';
310var colHS413='rgba(55,165,10,1)';
311var colHS732='rgba(170,190,10,1)';
312var colHS211='rgba(0,50,255,1)';
313var colHS731='rgba(50,150,255,1)';
314var colHS737='rgba(180,120,255,1)';
315var colHS621='rgba(40,0,130,.6)';
316var colHS921='rgba(100,175,150,1)';
317var colHS931='rgba(190,135,45,1)';
318var colHS1001='rgba(220,180,80,1)';
319// 秒足タブのDEX銘柄は、このファイルだけで色を解決する。
320var colHS751='rgba(255,150,50,1)';
321var colHS762='rgba(255, 120, 180, 1)';
322var colHS762=colHS737;
323var colHS791=colHS931;
324var colHS796=colHS921;
325
326function renderVal(C,V,skipRender,T){
327	if(Sle!==2)return;
328	var chart=nkHChart();C=Number(C);V=Number(V);
329	if(!chart||chart._nkHMode!==2||nkHSeriesCodes[2].indexOf(C)<0||!isFinite(V))return;
330	// Socketの値が系列の再描画前に届いても、現値枠だけは最新の価格に追従させる。
331	if(!chart._nkHCurrentValues)chart._nkHCurrentValues={};
332	if(!chart._nkHCurrentTimes)chart._nkHCurrentTimes={};
333	chart._nkHCurrentValues[C]=V;
334	chart._nkHCurrentTimes[C]=isFinite(Number(T))&&Number(T)>0?Number(T):Date.now();
335	if(!skipRender)nkHShortRenderLabels(chart,'min');
336}
337
338var Socket,TimerHSmin;
339// 凡例だけで取引種別を70%にする。既存のspan指定は重ねずに整える。
340function nkHShortLegendLabelFormatter(){
341    var legend=this.chart&&this.chart.options.legend;
342    var fontSize=parseFloat(legend&&legend.itemStyle&&legend.itemStyle.fontSize)||12;
343    var name=String(this.name||'').replace(/<[^>]*>/g,'');
344    name=name.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
345    // 古いHighstockでも後続の銘柄名に縮小が引き継がれないよう、通常サイズを明示する。
346    var normalSpan='<span style="font-size:'+fontSize+'px">';
347    return normalSpan+name.replace(/(^|[^A-Za-z0-9_])(DEX|CFD|OSE|CME|Sun\.)(?=$|[^A-Za-z0-9_])/g,function(all,before,word){
348        return before+'</span><span style="font-size:'+(fontSize*0.70)+'px">'+word+'</span>'+normalSpan;
349    })+'</span>';
350}
351
352// 右余白に現値枠を収め、目盛りは余白の中央付近で右寄せする。
353var nkHShortMargin=64;
354var nkHShortLabelWidth=58;
355var nkHShortScaleOffset=54;
356var nkHShortLabelFontSize=15;
357var nkHShortLabelFreshAge=60*60*1000;
358// スマホ・タブレットはSVG全体を横縮小。デスクトップ表示のiPadもMac系UA+複数タッチで判定。
359var nkHShortTouchDevice=!!(navigator.userAgentData&&navigator.userAgentData.mobile)||
360    /iPad|iPhone|iPod|Android|Windows Phone/i.test(navigator.userAgent||'')||
361    (/Macintosh|MacIntel/i.test((navigator.userAgent||'')+' '+(navigator.platform||''))&&Number(navigator.maxTouchPoints)>1);
362var nkHShortHistoricalCodes={
363    day:[111,321,413,211,511,514,621,921,931,1001],
364    per:[111,321,413,211,511,514,921,931,1001]
365};
366
367// 秒足の各銘柄の現値を、描画済みの軸と同じ座標で表示する。
368// 生データの末尾を使い、データグルーピングの平均値を現値にしない。
369function nkHShortLastPoint(series){
370    var xs=series.getColumn?series.getColumn('x'):series.xData;
371    var ys=series.getColumn?series.getColumn('y'):series.yData;
372    if(!xs||!ys)return null;
373    for(var i=Math.min(xs.length,ys.length)-1;i>=0;i--){
374        if(xs[i]!==null&&ys[i]!==null&&isFinite(xs[i])&&isFinite(ys[i])){
375            return {x:Number(xs[i]),y:Number(ys[i])};
376        }
377    }
378    return null;
379}
380
381// 白と混ぜた不透明色。背景の線や目盛りが文字に透けないようにする。
382function nkHShortTint(color,ratio){
383    var rgb=String(color).match(/^rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/i);
384    var hex=String(color).match(/^#([\da-f]{3}|[\da-f]{6})$/i);
385    if(!rgb&&hex){
386        var h=hex[1];
387        if(h.length===3)h=h.replace(/./g,function(c){return c+c;});
388        rgb=[null,parseInt(h.substr(0,2),16),parseInt(h.substr(2,2),16),parseInt(h.substr(4,2),16)];
389    }
390    if(!rgb)return ratio<0.5?'#f0f0f0':'#999999';
391    return 'rgb('+[1,2,3].map(function(i){return Math.round(255+(Number(rgb[i])-255)*ratio);}).join(',')+')';
392}
393
394// 現値・左上の価格は共通の縮小ルール。指数・GOLDは小数全体、ドル円は3桁目以降を縮小。
395// BTCは整数。原油・VIX・日足の為替は小数も通常サイズ。
396function nkHShortCurrentText(item,fontSize){
397    var numericCode=Number(item.numericCode);
398    var oil=numericCode===796||numericCode===921;
399    var bitcoin=numericCode===1001;
400    var usdJpy=numericCode===511||numericCode===781;
401    var fullDecimals=numericCode===621||item.daily&&(numericCode===511||numericCode===514);
402    var index=[111,136,751,211,731,762,191,413,732,737,621,321].indexOf(numericCode)>=0;
403    if(item.percent){
404        var sign=item.value>0?'+':item.value<0?'−':'';
405        var percent=Highcharts.numberFormat(Math.abs(item.value),2,'.',',').split('.');
406        if(usdJpy&&percent.length>1)return sign+percent[0]+'.'+percent[1].charAt(0)+
407            '<span style="font-size:'+(fontSize/2)+'px">'+percent[1].slice(1)+'</span>%';
408        return sign+percent[0]+'<span style="font-size:'+(fontSize/2)+'px">.'+percent[1]+'</span>%';
409    }
410    var decimals=item.series.options.tooltip.valueDecimals;
411    if(typeof decimals!=='number')decimals=2;
412    if(index||oil)decimals=2;
413    if(bitcoin)decimals=0;
414    if(item.minute&&numericCode===511)decimals=3;
415    var parts=Highcharts.numberFormat(item.value,decimals,'.',',').split('.');
416    if(oil||fullDecimals)return parts.join('.');
417    var main=parts[0],small='';
418    if(parts.length>1){
419        // if(usdJpy){main+='.'+parts[1].charAt(0);small=parts[1].slice(1);}
420		if(usdJpy){main+='.'+parts[1].slice(0,2);small=parts[1].slice(2);}
421        else small='.'+parts[1];
422    }
423    return main+(small?'<span style="font-size:'+(fontSize/1.5)+'px">
423'+small+'</span>':'');
424}
425
426// 左上の価格にも現値枠と同じ桁数・縮小対象・縮小率を使う。%タブも従来どおり価格を表示。
427function nkHShortTooltipPointFormatter(){
428    var series=this.series,chart=series.chart,mode=chart._nkHCurrentMode||'sec';
429    var codes=nkHShortHistoricalCodes[mode]||[];
430    var numericCode=Number(series.options.nkHMinCode||series.options.nkHShortCode||codes[chart.series.indexOf(series)]);
431    var value=nkHShortCurrentText({numericCode:numericCode,series:series,value:this.y,
432        minute:mode==='min',daily:mode==='day'||mode==='per'},14);
433    return ' <span style="background:#fff;font-size:14px;color:'+series.color+'">'+series.name+
434        '</span><span style="background:#fff;font-size:14px;color:#111"> : <b>'+value+'</b></span>';
435}
436
437function nkHShortDestroyLabels(chart){
438    if(chart&&chart._nkHShortExpiryTimer){clearTimeout(chart._nkHShortExpiryTimer);chart._nkHShortExpiryTimer=null;}
439    var state=chart&&chart._nkHShortLabels;
440    if(!state)return;
441    Object.keys(state.badges).forEach(function(key){
442        var badge=state.badges[key];
443        badge.glowOuter.destroy();badge.glowInner.destroy();badge.box.destroy();badge.text.destroy();badge.group.destroy();
444    });
445    state.group.destroy();
446    chart._nkHShortLabels=null;
447}
448
449// ラインのホバーと現値枠の重なり順を連動させる。
450// 枠・文字を同じグループで前面へ移し、外れた時は元の順に戻す。
451function nkHShortUpdateLabelZIndex(chart){
452    var state=chart&&chart._nkHShortLabels;
453    if(!state)return;
454    Object.keys(state.badges).forEach(function(code){
455        var badge=state.badges[code];
456        badge.group.attr({zIndex:chart._nkHShortHoverCode===code?1000:badge.baseZIndex});
457    });
458}
459function nkHShortHoverLabel(series,hovered){
460    if(!series||!series.chart)return;
461    var chart=series.chart,code=series.options.nkHShortCode;
462    var index=chart.series.indexOf(series);
463    if(chart._nkHCurrentMode==='min'&&!series.options.nkHMinCode)return;
464    if(!code&&chart._nkHCurrentMode)code=chart._nkHCurrentMode+'-'+index;
465    if(!code)return;
466    code=String(code);
467    if(hovered)chart._nkHShortHoverCode=code;
468    else if(chart._nkHShortHoverCode===code)chart._nkHShortHoverCode=null;
469    nkHShortUpdateLabelZIndex(chart);
470}
471
472function nkHShortRenderLabels(chart,mode){
473    if(!nkHCanUpdate()||!chart||!chart.renderer||!chart.series||!chart.plotHeight)return;
474    if(chart._nkHShortExpiryTimer){clearTimeout(chart._nkHShortExpiryTimer);chart._nkHShortExpiryTimer=null;}
475    var percent=mode==='per',daily=mode==='day',minute=mode==='min',historical=percent||daily||minute;
476    var dailyCodes=nkHShortHistoricalCodes.day;
477    var percentCodes=nkHShortHistoricalCodes.per;
478    var items=[],i,series,point,code,now=Date.now(),nextExpiry=Infinity;
479    var tip=chart.plotLeft+chart.plotWidth+2,left=tip+5,right=tip+nkHShortLabelWidth;
480    for(i=0;i<chart.series.length;i++){
481        series=chart.series[i];
482        if(minute&&!series.options.nkHMinCode)continue; // 終値の点線は現値枠を持たない。
483        code=minute?series.options.nkHShortCode:historical?mode+'-'+i:series.options.nkHShortCode;
484        if(!code||!series.visible||!series.yAxis)continue;
485        var stale=false;
486        if(percent){
487            var points=series.points||[];
488            point=null;
489            for(var j=points.length-1;j>=0;j--){
490                if(typeof points[j].plotY==='number'&&isFinite(points[j].plotY)&&
491                    typeof points[j].y==='number'&&isFinite(points[j].y)){
492                    point=points[j];break;
493                }
494            }
495            if(!point)continue;
496            // Highstockのcompare:'percent'が計算した値を使い、ズーム時も基準を合わせる。
497            var y=series.yAxis.pos+point.plotY;
498            var change=typeof point.change==='number'?point.change:series.yAxis.toValue(y);
499            if(!isFinite(change))continue;
500            point={x:point.x,y:change};
501        }else{
502            point=nkHShortLastPoint(series);
503            if(!point)continue;
504            var numericCode=minute?Number(series.options.nkHMinCode):daily?dailyCodes[i]:code;
505            var liveValue=minute&&chart._nkHCurrentValues&&
506                Object.prototype.hasOwnProperty.call(chart._nkHCurrentValues,numericCode);
507            if(liveValue){
508                point={x:chart._nkHCurrentTimes&&chart._nkHCurrentTimes[numericCode]||point.x,
509                    y:chart._nkHCurrentValues[numericCode]};
510            }
511            stale=(minute||!historical)&&now-point.x>
511=nkHShortLabelFreshAge;
512            if((minute||!historical)&&!stale)nextExpiry=Math.min(nextExpiry,point.x+nkHShortLabelFreshAge);
513            var y=series.yAxis.toPixels(point.y);
514            if(minute&&!liveValue&&series.points&&series.points.length){
515                // 集約後の終点が現値と同じなら、実際に描画された座標へ揃える。
516                var lastDrawn=series.points[series.points.length-1];
517                if(lastDrawn&&typeof lastDrawn.y==='number'&&isFinite(lastDrawn.plotY)&&
518                    Math.abs(lastDrawn.y-point.y)<0.000001)y=series.yAxis.pos+lastDrawn.plotY;
519            }
520        }
521        if(!isFinite(y))continue;
522        items.push({code:code,numericCode:minute?Number(series.options.nkHMinCode):daily?dailyCodes[i]:percent?percentCodes[i]:code,
523            series:series,value:point.y,anchorY:y,percent:percent,minute:minute,daily:daily,stale:!!stale});
524    }
525    if(!items.length){nkHShortDestroyLabels(chart);return;}
526    var state=chart._nkHShortLabels;
527    if(!state){
528        state=chart._nkHShortLabels={badges:{},group:chart.renderer.g('nk-short-current-values')
529            .attr({zIndex:7}).css({pointerEvents:'none'}).add()};
530    }
531    var active={},fontSize=nkHShortLabelFontSize;
532    for(i=0;i<items.length;i++){
533        var item=items[i],badge=state.badges[item.code];
534        active[item.code]=true;
535        if(!badge){
536            // 枠と文字を一組にし、重なった時は背面の文字も枠で隠す。
537            var group=chart.renderer.g().add(state.group);
538            badge=state.badges[item.code]={
539                group:group,baseZIndex:0,
540                glowOuter:chart.renderer.path().attr({fill:'none',stroke:'#fff','stroke-width':4,opacity:0.30,'stroke-linejoin':'round',visibility:'hidden'}).add(group),
541                glowInner:chart.renderer.path().attr({fill:'none',stroke:'#fafafa','stroke-width':1,opacity:0.65,'stroke-linejoin':'round',visibility:'hidden'}).add(group),
542                box:chart.renderer.path().attr({'stroke-width':1.2,zIndex:0}).add(group),
543                text:chart.renderer.text('',0,0).attr({zIndex:1}).add(group)
544            };
545        }
546        badge.baseZIndex=(Number(item.series.options.zIndex)||0)-(item.stale?100:0);
547        badge.group.attr({opacity:1});
548        badge.text.attr({text:nkHShortCurrentText(item,fontSize)}).css({color:item.stale?'#999':'#111',fontFamily:'Arial',fontSize:fontSize+'px',fontWeight:'bold',textShadow:'none'});
549        var bbox=badge.text.getBBox();
550        item.width=nkHShortLabelWidth-5;
551        item.height=Math.max(fontSize+4,Math.ceil(bbox.height)+2);
552        item.badge=badge;
553        item.border=nkHShortTint(item.series.color,0.72);
554        item.fill=nkHShortTint(item.series.color,0.14);
555    }
556    Object.keys(state.badges).forEach(function(key){
557        if(active[key])return;
558        var old=state.badges[key];old.glowOuter.destroy();old.glowInner.destroy();old.box.destroy();old.text.destroy();old.group.destroy();
559        delete state.badges[key];
560    });
561    for(i=0;i<items.length;i++){
562        var item=items[i],badge=item.badge,h=item.height;
563        // 矢印の先端をプロット右端から2px離し、価格の高さを保つ。
564        var center=item.anchorY,y=center-h/2;
565        item.top=y;
566        var path=['M',tip,center,'L',left,y,'L',right,y,'L',right,y+h,'L',left,y+h,'Z'];
567        badge.glowOuter.attr({d:path,visibility:item.stale?'visible':'hidden'});
568        badge.glowInner.attr({d:path,visibility:item.stale?'visible':'hidden'});
569        badge.box.attr({fill:item.fill,stroke:item.stale?'none':item.border,
570            'stroke-width':item.stale?0:1.2,d:path});
571        badge.text.element.removeAttribute('textLength');
572        badge.text.element.removeAttribute('lengthAdjust');
573        badge.text.attr({x:0,y:0});
574        if(nkHShortTouchDevice)badge.text.attr({scaleX:1,translateX:0});
575        var textBox=badge.text.getBBox(true),textWidth=Math.max(1,right-left-5);
576        if(nkHShortTouchDevice){
577            // 小数のtspanを含めて縮める。文字の高さ・小数の比率を保ち、右端を枠内に固定。
578            var textScale=Math.min(1,textWidth/Math.max(1,textBox.width));
579            badge.text.attr({scaleX:textScale,
580                translateX:right-3-(textBox.x+textBox.width)*textScale,
581                y:center-textBox.y-textBox.height/2});
582        }else{
583            // PCは従来どおりtextLengthで幅を調整する。
584            if(textBox.width>textWidth){
585                badge.text.attr({textLength:textWidth,lengthAdjust:'spacingAndGlyphs'});
586                textBox=badge.text.getBBox(true);
587            }
588            badge.text.attr({x:right-3-textBox.width,y:center-textBox.y-textBox.height/2});
589        }
590    }
591    nkHShortUpdateLabelZIndex(chart);
592    // 秒足・分足の現値が1時間を経過したら、再描画がなくても古い表示に切り替える。
593    if(isFinite(nextExpiry))chart._nkHShortExpiryTimer=setTimeout(function(){
594        chart._nkHShortExpiryTimer=null;
595        nkHShortRenderLabels(chart,minute?'min':undefined);
596    }
596,Math.max(50,nextExpiry-Date.now()+1));
597}
598
599
600// 複合チャートの初期タブは短期の2種類だけ記憶する。長期と%は一時表示。
601function nkHPreferredTab(){
602	var mode=Number(myGetCookie('TOP225_HSTab'));
603	return mode===1||mode===2?mode:2;
604}
605function nkHSelectTabRadio(mode){
606	var input=d.getElementById('R0'+(mode+1));
607	if(input)input.checked=true;
608}
609function dispHS(n,s) {
610	n=Number(n);if(n%1!==0||n<1||n>4)return;
611	if(n<=2&&!s)mySetCookie('TOP225_HSTab',n,365);
612	if(n===Sle&&!s&&!nkHNeedsReload&&(nkHRequests.length||(nkHReadyMode===n&&nkHChart())))return;
613	nkHStop();Sle=n;nkHReadyMode=-1;nkHRetryCount=0;
614	if(!nkHCanUpdate())return;
615	nkHNeedsReload=false;
616	nkHLoadSelected();
617}
618
619(function() {
620	webHeavy=(d.getElementById("webheavy")!==null ? true:false);
621	var preferredTab=nkHPreferredTab();
622	nkHSelectTabRadio(preferredTab);
623	nkHObserveViewport();
624	dispHS(preferredTab,'ST');
625})();
626
627
628// 1Hでは5分ごと、3Hでは15分ごと、6Hでは1時間ごとに時刻を表示する。
629// JSTはUTCから9時間差で、各刻み幅で割り切れるためepoch整列で現地の時刻にも揃う。
630function nkHSecTickPositions(min,max){
631    if(!isFinite(min)||!isFinite(max)||max<min)return this.tickPositions||[];
632    var minute=60000,span=max-min;
633    var step=span<=75*minute?5*minute:(span<=195*minute?15*minute:60*minute);
634    this.tickInterval=step;
635    this.options.minorTickInterval=step/5;
636    var positions=[],first=Math.ceil(min/step)*step;
637    for(var time=first;time<=max&&positions.length<100;time+=step)positions.push(time);
638    return positions;
639}
640
641function sec_create_chart(){
642	nkHAjax({
643		url:"//jss2.nikkei225jp.com/hs_data/hs_top.json",
644		dataType:'script'
645	}).done(function(data,status,xhr){
646		var dataSet=xhr.nkHValues||{},S781=dataSet.S781,S111=dataSet.S111,S136=dataSet.S136,S751=dataSet.S751,S211=dataSet.S211,S731=dataSet.S731,S762=dataSet.S762,S796=dataSet.S796,S791=dataSet.S791,S1001=dataSet.S1001;
647		if(!nkHSeriesCodes[1].some(function(C){return dataSet['S'+C]&&dataSet['S'+C].length;}))throw new Error('empty second chart data');
648		var seriesList=myGetCookie("TOP225_sec"+"S");
649		var chartRange=nkHRangeIndex(myGetCookie("TOP225_sec1hR"),0,3);
650		if(!seriesList){seriesList='1_1_0_1_1_1_0_1_0_0';}
651		seriesList=seriesList.split("_");
652
653		Highcharts.setOptions({global:{timezoneOffset:-9*60},lang:{rangeSelectorZoom:'',thousandsSep:",",weekdays:['日','月','火','水','木','金','土'],numericSymbols:null}});
654		nkHDestroyChart();
655		$('#container').highcharts('StockChart',{
656			chart:{
657				animation:false,panning:false,pinchType:false,reflow:false,
658				width:726,height:380,marginBottom:18,marginTop:2,marginRight:nkHShortMargin,
659				style:{fontFamily:'Arial'},
660				events:{
661					load:function(){nk225LegendLines(this);nkHShortRenderLabels(this);},
662					redraw:function(){nk225LegendLines(this);setHchartRangeCookieAfterRedraw("sec1h",this);nkHShortRenderLabels(this);},
663					destroy:function(){nkHShortDestroyLabels(this);}
664				}
665			},
666			legend:{
667				labelFormatter:nkHShortLegendLabelFormatter,
668				layout:'horizontal',align:'top',verticalAlign:'top',
669				x:0,y:-5,
670				backgroundColor:'#FcFcFe',
671				borderColor:'#b7b7b7',
672				borderRadius:3,
673				itemDistance:4,
674				symbolWidth:9,
675				symbolPadding:1,
676				itemStyle:{fontSize:'11px',color:'#111'},
677				enabled:true,floating:true,shadow:true
678			},
679			yAxis:[{
680				id:'USD/JPY',
681				labels:{
682					x:0,y:-10,format:'{value:.2f}',align:'right',
683					style:{color:'#888',fontSize:'14px'}
684				},
685				opposite:true,offset:nkHShortScaleOffset,showLastLabel:false,showFirstLabel:true,
686				gridLineColor:'#e7e7e7',gridLineWidth:.2,
687				minRange:0.2,
688				tickPixelInterval:65
689			},{
690				id:'JP225',
691				labels:{
692					x:0,y:3,align:'right',
693					style:{color:colHS111,fontSize:'14px'}
694				},
695				opposite:true,offset:nkHShortScaleOffset,showFirstLabel:true,showLastLabel:true,
696				gridLineColor:'#e7e7e7',gridLineWidth:.2,
697				minRange:200,
698				tickPixelInterval:65
699			},{
700				id:'DOW',
701				labels:{
702					x:0,y:16,align:'right',
703					style:{color:colHS211,fontSize:'14px'}
704				},
705				opposite:true,offset:nkHShortScaleOffset,showLastLabel:true,showFirstLabel:false,
706				gridLineColor:'#e7e7e7',gridLineWidth:.2,
707				minRange:200,
708				tickPixelInterval:65
709			},{
710				id:'NAS100',
711				labels:{enabled:false},
712				title:{text:null},lineWidth:0,tickLength:0,
713				opposite:true,offset:0,showLastLabel:false,showFirstLabel:false,
714				gridLineColor:'#e7e7e7',gridLineWidth:0,
715				minRange:40,
716				tickPixelInterval:65
717			},{
718				id:'OIL',
719				labels:{enabled:false},
720				title:{text:null},lineWidth:0,tickLength:0,
721				opposite:true,offset:0,showLastLabel:false,showFirstLabel:false,
722				gridLineColor:'#e7e7e7',gridLineWidth:0,
723				minRange:1,
724				tickPixelInterval:65
725			},{
726				id:'GOLD',
727				labels:{enabled:false},
728				title:{text:null},lineWidth:0,tickLength:0,
729				opposite:true,offset:0,showLastLabel:false,showFirstLabel:false,
730				gridLineColor:'#e7e7e7',gridLineWidth:0,
731				// minRange:1,
732				tickPixelInterval:65
733			},{
734				id:'BTC/JPY',
735				labels:{enabled:false},
736				title:{text:null},lineWidth:0,tickLength:0,
737				opposite:true,offset:0,showLastLabel:false,showFirstLabel:false,
738				gridLineColor:'#e7e7e7',gridLineWidth:0,
739				minRange:100000,
740				tickPixelInterval:65
741			}],
742			series:[{
743				name:'DEC ドル円',
744				yAxis:'USD/JPY',
745				id:'nk-sec-781',nkHShortCode:781,
746				data:S781,
747				type:'area',
748				threshold:null,
749				zIndex:0,
750				lineWidth:.5,
751				states:{hover:{lineWidth:.5}},
752				color:'rgba(180,180,180,1)',
753				fillColor:{stops:[[0,'rgba(215,215,215,.3)'],[1,'rgba(230,230,230,0.1)']],linearGradient:{x1:0,y1:0,x2:0,y2:1}},
754				tooltip:{valueDecimals:3},
755				visible:Boolean(Number(seriesList[0]))
756			},{
757				name:'NK',
758				yAxis:'JP225',
759				id:'nk-sec-111',nkHShortCode:111,
760				data:S111,
761				gapSize:50,
762				zIndex:90,
763				lineWidth:1.75,
764				states:{hover:{lineWidth:1.75}},
765				color:colHS111,
766				shadow:{color:'#fff',opacity:3,width:3,offsetX:0,offsetY:0},
767				tooltip:{valueDecimals:2},
768				visible:Boolean(Number(seriesList[1]))
769			},{
770				name:'OSE NK',
771				yAxis:'JP225',
772				id:'nk-sec-136',nkHShortCode:136,
773				data:S136,
774				gapSize:50,
775				zIndex:35,
776				lineWidth:1.1,
777				states:{hover:{lineWidth:1.1}},
778				color:colHS136,
779				shadow:{color:'#fff',opacity:2.2,width:2.2,offsetX:0,offsetY:0},
780				tooltip:{valueDecimals:0},
781				visible:Boolean(Number(seriesList[2]))
782			},{
783				name:'DEX NK',
784				yAxis:'JP225',
785				id:'nk-sec-751',nkHShortCode:751,
786				data:S751,
787				zIndex:30,
788				lineWidth:1.2,
789				states:{hover:{lineWidth:1.2}},
790				color:colHS751,
791				shadow:{color:'#fff',opacity:2.3,width:2.3,offsetX:0,offsetY:0},
792				tooltip:{valueDecimals:0},
793				visible:Boolean(Number(seriesList[3]))
794			},{
795				name:'DOW',
796				yAxis:'DOW',
797				id:'nk-sec-211',nkHShortCode:211,
798				data:S211,
799				gapSize:50,
800				zIndex:80,
801				lineWidth:1.75,
802				states:{hover:{lineWidth:1.75}},
803				color:colHS211,
804				shadow:{color:'#fff',opacity:3,width:3,offsetX:0,offsetY:0},
805				tooltip:{valueDecimals:2},
806				visible:Boolean(Number(seriesList[4]))
807			},{
808				name:'Sun. DOW',
809				yAxis:'DOW',
810				id:'nk-sec-731',nkHShortCode:731,
811				data:S731,
812				gapSize:500,
813				zIndex:20,
814				lineWidth:1.2,
815				states:{hover:{lineWidth:1.2}},
816				color:colHS731,
817				shadow:{color:'#fff',opacity:2.3,width:2.3,offsetX:0,offsetY:0},
818				tooltip:{valueDecimals:0},
819				visible:Boolean(Number(seriesList[5]))
820			},{
821				name:'DEX NAS100',
822				yAxis:'NAS100',
823				id:'nk-sec-762',nkHShortCode:762,
824				data:S762,
825				gapSize:50,
826				zIndex:70,
827				lineWidth:1.3,
828				states:{hover:{lineWidth:1.3}},
829				color:colHS762,
830				shadow:{color:'#fff',opacity:2.3,width:2.3,offsetX:0,offsetY:0},
831				tooltip:{valueDecimals:2},
832				visible:Boolean(Number(seriesList[6]))
833			},{
834				name:'DEX OIL',
835				yAxis:'OIL',
836				id:'nk-sec-796',nkHShortCode:796,
837				data:S796,
838				// dashStyle:'ShortDot',
839				gapSize:5000,
840				zIndex:11,
841				lineWidth:.75,
842				states:{hover:{lineWidth:.75}},
843				color:colHS796,
844				shadow:{color:'#fff',opacity:2,width:2,offsetX:0,offsetY:0},
845				tooltip:{valueDecimals:2},
846				visible:Boolean(Number(seriesList[7]))
847			},{
848				name:'DEX GOLD',
849				yAxis:'GOLD',
850				id:'nk-sec-791',nkHShortCode:791,
851				data:S791,
852				// dashStyle:'ShortDot',
853				gapSize:5000,
854				zIndex:11,
855				lineWidth:.75,
856				states:{hover:{lineWidth:.75}},
857				color:colHS791,
858				shadow:{color:'#fff',opacity:2,width:2,offsetX:0,offsetY:0},
859				tooltip:{valueDecimals:2},
860				visible:Boolean(Number(seriesList[8]))
861			},{
862				name:'BTC',
863				yAxis:'BTC/JPY',
864				id:'nk-sec-1001',nkHShortCode:1001,
865				data:S1001,
866				// dashStyle:'ShortDot',
867				zIndex:10,
868				lineWidth:.75,
869				states:{hover:{lineWidth:.75}},
870				color:colHS1001,
871				shadow:{color:'#fff',opacity:2,width:2,offsetX:0,offsetY:0},
872				tooltip:{valueDecimals:0},
873				visible:Boolean(Number(seriesList[9]))
874			}],
875			xAxis:{
876				tickInterval:5*60000,
877				minorTickInterval:60000,
878				tickPositioner:nkHSecTickPositions,
879				gridLineWidth:.2,
880				gridLineColor:'#e7e7e7',
881				minorGridLineWidth:.2,
882				minorGridLineColor:'#f9f9f9',
883				minorTickPosition:'inside',
884				minorTickLength:1,
885				tickLength:3,
886				tickColor:'#777',
887				labels:{y:13,formatter:function(){return Highcharts.dateFormat('%H:%M',this.value);}},
888				ordinal:false,
889				type:'datetime',
890				dateTimeLabelFormats:{
891					second:'%H:%M',
892					minute:'%H:%M',
893					hour:'%H:%M',
894					day:'<span style="color:#e70;">【%m/%d】</span>',
895					week:'%m/%d',
896					month:'%Y/%m',
897					year:'%Y'
898				}
899			},
900			rangeSelector:{
901				allButtonsEnabled:true,
902				inputEnabled:false,
903				buttonPosition:{x:584,y:5},
904				buttonTheme:{
905					width:37,height:20,fill:'#eee',style:{fontSize:'110%'},r:3.5,
906					states:{
907						hover:{fill:'#ccc'},
908						select:{fill:'#999'}
909					}
910				},
911				buttons:[{
912					//dataGrouping:(Android8ika)?undefined:{forced:true,units:[['second',[10]]]},
913					count:60,type:'minute',text:'1H'
914				},{
915					//dataGrouping:(Android8ika)?undefined:{forced:true,units:[['second',[30]]]},
916					count:180,type:'minute',text:'3H'
917				},{
918					//dataGrouping:(Android8ika)?undefined:{forced:true,units:[['minute',[1]]]},
919					count:6,type:'hour',text:'6H'
920				}],
921				selected:chartRange
922			},
923			plotOptions:{
924				series:{
925					events:{
926						legendItemClick:function(){setHchartSeriesCookieAfterClick("sec",this);},
927						mouseOver:function(){nkHShortHoverLabel(this,true);},
928						mouseOut:function(){nkHShortHoverLabel(this,false);}
929					},
930					animation:false,
931					dataGrouping:{
932						units:[['second',[10,30,60]]],
933						dateTimeLabelFormats:{
934							second:['%m/%d %H:%M:%S','%m/%d %H:%M:%S',''],
935							minute:['%m/%d %H:%M','%m/%d %H:%M',''],
936							hour:['%m/%d %H:%M','%m/%d %H:%M',''],
937							day:['%m/%d','%m/%d',''],
938							week:['%m/%d','%m/%d',''],
939							month:['%B %Y','%B','-%B %Y'],
940							year:['%Y','%Y','-%Y']
941						}
942					}
943				}
944			},
945			tooltip:{
946				animation:false,
947				split: false,
948				shared: false,
949				followPointer:true,
950				shadow: false,
951				useHTML:true,
952				borderWidth:0,
953				borderColor:'rgba(18,18,18,0)',
954				backgroundColor:'rgba(18,18,18,0)',
955				style: {color:'#ddd',fontSize:'12px'},
956				crosshairs:{dashStyle:'shortdash',color:'#eee'},
957				positioner: function () {return { x:6, y:32};},
958				xDateFormat: '%m/%d(%A) %H:%M',
959				headerFormat: '<span style="background:#fff;font-size:13px;padding-right:6px;color:#555">{point.key} </span>',
960				pointFormatter:nkHShortTooltipPointFormatter
961			},
962			navigator:{enabled:false},
963			scrollbar:{enabled:false},
964			navigation:{enabled:false},
965			exporting:{enabled:false},
966			credits:{position:{x:13,y:-23,align:'left',verticalAlign:'bottom'},style:{color:'#bfbfbf',fontSize:'13px',zIndex:0},text:'https://nikkei225jp.com/',href:''}
967		});
968
969
970		nkHChartLoaded();
971	});
972}
973function socket_sec(data){nkHSocketPoint(data,1);}
974
975
976
977
978
979function min_create_chart(){
980	nkHAjax({url:'/_data/_nfsDATA/hs_data/hs_TOP5.json',dataType:'script',cache:true})
981		.done(nkHGuard(function(data,status,xhr){nkHBuildMin(xhr.nkHValues.DATAm);}));
982}
983function nkHMinuteSignature(data){return JSON.stringify(data)+'|'+NY_stF+'|'+EU_stF+'|'+weekEnd;}
984// 更新が届いても値が変わらない系列は setData を避け、描画済みの点とSVGを保つ。
985function nkHMinuteSeriesChanged(series,points){
986	if(!series)return true;
987	var xs=series.getColumn?series.getColumn('x'):series.xData;
988	var ys=series.getColumn?series.getColumn('y'):series.yData;
989	if(!xs||!ys||xs.length!==points.length||ys.length!==points.length)return true;
990	for(var i=0;i<points.length;i++)if(Number(xs[i])!==Number(points[i][0])||Number(ys[i])!==Number(points[i][1]))return true;
991	return false;
992}
993// 配信履歴より新しい Socket の現値を、定期取得で消さない。
994function nkHMinuteKeepLive(chart,code,points){
995	var times=chart._nkHCurrentTimes||{},values=chart._nkHCurrentValues||{};
996	if(!Object.prototype.hasOwnProperty.call(times,code))return false;
997	var time=Number(times[code]),value=Number(values[code]);
998	var last=points.length?Number(points[points.length-1][0]):-Infinity;
999	if(isFinite(time)&&isFinite(value)&&value>0&&time>last){
1000		points.push([time,value]);
1001		return false;
1002	}
1003	delete times[code];delete values[code];
1004	return true;
1005}
1006function nkHBuildMin(DATAm){
1007		if(!DATAm||!DATAm.length)throw new Error('empty minute chart data');
1008		var minSession=nkHSessionKey(DATAm),minSignature=nkHMinuteSignature(DATAm);
1009		var C511=[],C111=[],C191=[],C931=[],C737=[],C211=[],C731=[],C621=[],C921=[],C1001=[];
1010		var ND111=0,cnt111=-1,Last=[],LastT=[],ND211=0,cnt211=-1;
1011		var prevTime=Number(DATAm[0][0]);
1012		var tim=prevTime;
1013		for(var i=0;i<DATAm.length;i++){
1014			if(i>0){tim=prevTime+(DATAm[i][0]*10000);}
1015			var V0=tim,V1=DATAm[i][nkHMinTop5Columns[111]],V2=DATAm[i][nkHMinTop5Columns[211]];
1016			if(V1>0){var D=new Date(V0+9*36e5),DD=D.getUTCDate();if(ND111!=DD){ND111=DD;cnt111++;}C111.push([V0,V1]);Last[cnt111+10]=V1;LastT[cnt111+10]=V0;}
1017			if(V2>0){var Dus=new Date(V0+36e5*(-5+NY_stF)),DDus=Dus.getUTCDate();if(ND211!=DDus){ND211=DDus;cnt211++;}C211.push([V0,V2]);Last[cnt211+20]=V2;LastT[cnt211+20]=V0;}
1018			if(DATAm[i][nkHMinTop5Columns[511]]>0)C511.push([tim,DATAm[i][nkHMinTop5Columns[511]]]);
1019			if(DATAm[i][nkHMinTop5Columns[191]]>0)C191.push([tim,DATAm[i][nkHMinTop5Columns[191]]]);
1020			if(DATAm[i][nkHMinTop5Columns[731]]>0)C731.push([tim,DATAm[i][nkHMinTop5Columns[731]]]);
1021			if(DATAm[i][nkHMinTop5Columns[737]]>0)C737.push([tim,DATAm[i][nkHMinTop5Columns[737]]]);
1022			if(DATAm[i][nkHMinTop5Columns[621]]>0)C621.push([tim,DATAm[i][nkHMinTop5Columns[621]]]);
1023			if(DATAm[i][nkHMinTop5Columns[921]]>0)C921.push([tim,DATAm[i][nkHMinTop5Columns[921]]]);
1024			if(DATAm[i][nkHMinTop5Columns[931]]>0)C931.push([tim,DATAm[i][nkHMinTop5Columns[931]]]);
1025			if(DATAm[i][nkHMinTop5Columns[1001]]>0)C1001.push([tim,DATAm[i][nkHMinTop5Columns[1001]]]);
1026			DATAm[i].length=0;
1027			prevTime=tim;
1028		}
1029		DATAm.length=0;
1030		var seriesCookie=myGetCookie("TOP225_min"+"S");
1031		var chartRange=nkHRangeIndex(myGetCookie("TOP225_min"+"R"),1,4);
1032		if(!seriesCookie){seriesCookie='1_1_1_1_1_0_0_0_0_0';}
1033		// 旧保存順 [ドル円,JP,CFD NK,GOLD,CFD NAS,DOW,CFD DOW,VIX,OIL,BTC] を一度だけ移行。
1034		if(!myGetCookie('TOP225_minOrderV2')){
1035			if(myGetCookie('TOP225_minS')){
1036				var oldOrder=seriesCookie.split('_'),newOrder=[0,1,2,5,6,4,7,8,3,9];
1037				if(oldOrder.length===10){
1038					seriesCookie=newOrder.map(function(index){return oldOrder[index];}).join('_');
1039					mySetCookie('TOP225_minS',seriesCookie,365);
1040				}
1041			}
1042			mySetCookie('TOP225_minOrderV2','1',365);
1043		}
1044		var seriesList=seriesCookie.split("_");
1045		Highcharts.setOptions({global:{timezoneOffset:-9*60},lang:{rangeSelectorZoom:'',thousandsSep:",",weekdays:['日','月','火','水','木','金','土'],numericSymbols:null}});
1046		var nowJST=new Date(Date.now()+9*36e5),gDay=nowJST.getUTCDay(),gHour=nowJST.getUTCHours();
1047		const monDay=(((gDay==1)&&(gHour>=(7-NY_stF)))||((gDay==2)&&(gHour<(7-NY_stF)))),tuesDay=(((gDay==2)&&(gHour>=(7-NY_stF)))||((gDay==3)&&(gHour<(7-NY_stF))));
1048		const isClosedSat=(gDay===6&&gHour>=7)||(gDay===0&&gHour<7);
1049		const isClosedSun=(gDay===0&&gHour>=7)||(gDay===1&&gHour<7);
1050		if(!C511.length)throw new Error('missing minute USD/JPY data');
1051		var EndT=C511[C511.length-1][0];if(weekEnd)EndT=EndT-36e5;
1052		var End511=(Math.floor((EndT+9*36e5)/864e5)+1)*864e5-9*36e5;
1053		var PL=[];PL.push(End511-36e5*24*7,End511-36e5*24*6,End511-36e5*24*5,End511-36e5*24*4,End511-36e5*24*3,End511-36e5*24*2,End511-36e5*24*1,End511);
1054		var Pcol111='rgba(225,90,30,1)',Pcol211='rgba(50,110,245,1)',zI111=59,zI211=49,LW=1.35;
1055
1056		nkHDestroyChart();
1057		$('#container').highcharts('StockChart',{
1058			chart:{
1059				animation:false,panning:true,pinchType:false,reflow:false,
1060				width:726,height:380,marginBottom:18,marginTop:2,marginRight:nkHShortMargin,
1061				style:{fontFamily:'Arial'},
1062				events:{
1063					load:function(){this._nkHCurrentMode='min';nk225LegendLines(this);nkHShortRenderLabels(this,'min');},
1064					redraw:function(){nk225LegendLines(this);setHchartRangeCookieAfterRedraw("min",this);nkHShortRenderLabels(this,'min');},
1065					destroy:function(){nkHShortDestroyLabels(this);}
1066				}
1067
1068			},
1069			legend:{
1070				labelFormatter:nkHShortLegendLabelFormatter,
1071				layout:'horizontal',align:'top',verticalAlign:'top',
1072				x:0,y:-5,
1073				backgroundColor:'#FcFcFe',
1074				borderColor:'#b7b7b7',
1075				borderRadius:3,
1076				itemDistance:4,
1077				symbolWidth:9,
1078				symbolPadding:1,
1079				itemStyle:{fontSize:'11px',color:'#111'},
1080				enabled:true,floating:true,shadow:true
1081			},
1082			yAxis:[{
1083				id:'JP225',
1084				labels:{
1085					x:0,y:4,align:'right',
1086					style:{color:colHS111,fontSize:'14px'}
1087				},
1088				opposite:true,offset:nkHShortScaleOffset,showFirstLabel:true,showLastLabel:true,
1089				gridLineColor:'#ccc',gridLineWidth:.2,
1090				minRange:500,
1091				tickPixelInterval:65
1092			},{
1093				id:'NAS100',
1094				labels:{
1095					x:0,y:28,align:'right',
1096					style:{color:colHS737,fontSize:'14px'}
1097				},
1098				opposite:true,offset:nkHShortScaleOffset,showLastLabel:true,showFirstLabel:false,
1099				gridLineColor:'#ccc',gridLineWidth:.2,
1100				minRange:300,
1101				tickPixelInterval:65
1102			},{
1103				id:'DOW',
1104				labels:{
1105					x:0,y:16,align:'right',
1106					style:{color:colHS211,fontSize:'14px'}
1107				},
1108				opposite:true,offset:nkHShortScaleOffset,showLastLabel:true,showFirstLabel:false,
1109				gridLineColor:'#ccc',gridLineWidth:.2,
1110				minRange:500,
1111				tickPixelInterval:65
1112			},{
1113				id:'USD/JPY',
1114				labels:{
1115					x:0,y:-8,format:'{value:.2f}',align:'right',
1116					style:{color:'#777',fontSize:'14px'}
1117				},
1118				opposite:true,offset:nkHShortScaleOffset,showLastLabel:false,showFirstLabel:true,
1119				gridLineColor:'#ccc',gridLineWidth:.2,
1120				minRange:1,
1121				tickPixelInterval:65
1122			},{
1123				id:'OIL',
1124				labels:{
1125					x:35,y:-17,format:'{value:,.1f}',align:'right',
1126					style:{color:colHS921,textShadow:'0 0 1px #fff,0 0 1.5px #fff,0 0 2px #fff'}
1127				},
1128				opposite:false,showLastLabel:false,showFirstLabel:false,
1129				gridLineColor:'#e7e7e7',gridLineWidth:.2,
1130				minRange:2,
1131				tickPixelInterval:65
1132			},{
1133				id:'GOLD',
1134				labels:{
1135					x:35,y:-6,format:'{value:,.0f}',align:'right',
1136					style:{color:colHS931,textShadow:'0 0 1px #fff,0 0 1.5px #fff,0 0 2px #fff'}
1137				},
1138				opposite:false,showLastLabel:false,showFirstLabel:false,
1139				gridLineColor:'#e7e7e7',gridLineWidth:.2,
1140				minRange:50,
1141				tickPixelInterval:65
1142			},{
1143				id:'VIX',
1144				labels:{
1145					x:35,y:5,format:'{value:,.1f}',align:'right',
1146					style:{color:colHS621,textShadow:'0 0 1px #fff,0 0 1.5px #fff,0 0 2px #fff'}
1147				},
1148				opposite:false,showLastLabel:false,showFirstLabel:false,
1149				gridLineColor:'#e7e7e7',gridLineWidth:.2,
1150				minRange:2.5,
1151				tickPixelInterval:65
1152			},{
1153				id:'BTC/JPY',
1154				labels:{
1155					x:35,y:16,align:'right',format:'{value:,0f}',formatter:function(){return(this.value/10000)+'万';},
1156					style:{color:colHS1001,textShadow:'0 0 1px #fff,0 0 1.5px #fff,0 0 2px #fff'}
1157				},
1158				opposite:false,showLastLabel:false,showFirstLabel:false,
1159				gridLineColor:'#e7e7e7',gridLineWidth:.2,
1160				minRange:250000,
1161				tickPixelInterval:65
1162			}],
1163			series:[{
1164				name:'ドル円',
1165				id:'nkH-min-511',nkHMinCode:511,nkHShortCode:'min-511',
1166				yAxis:'USD/JPY',
1167				data:C511,
1168				type:'area',
1169				threshold:null,
1170				zIndex:0,
1171				lineWidth:.5,
1172				states:{hover:{lineWidth:.5}},
1173				color:'rgba(170,170,170,1)',
1174				fillColor:{stops:[[0,'rgba(240,240,240,.80)'],[1,'rgba(255,255,255,.70)']],linearGradient:{x1:0,y1:0,x2:0,y2:1}},
1175				tooltip:{valueDecimals:2},
1176				visible:Boolean(Number(seriesList[0]))
1177			},{
1178				name:'JP225',
1179				id:'nkH-min-111',nkHMinCode:111,nkHShortCode:'min-111',
1180				yAxis:'JP225',
1181				data:C111,
1182				gapSize:15,
1183				zIndex:90,
1184				lineWidth:1.5,
1185				states:{hover:{lineWidth:1.5}},
1186				color:colHS111,
1187				shadow:{color:'#fff',opacity:2.5,width:2.5,offsetX:0,offsetY:0},
1188				tooltip:{valueDecimals:2},
1189				visible:Boolean(Number(seriesList[1]))
1190			},{
1191				name:'CFD NK',
1192				id:'nkH-min-191',nkHMinCode:191,nkHShortCode:'min-191',
1193				yAxis:'JP225',
1194				data:C191,
1195				zIndex:60,
1196				lineWidth:1.1,
1197				states:{hover:{lineWidth:1.1}},
1198				color:colHS191,
1199				shadow:{color:'#fff',opacity:1.6,width:1.6,offsetX:0,offsetY:0},
1200				tooltip:{valueDecimals:0},
1201				visible:Boolean(Number(seriesList[2]))
1202			},{
1203				name:'DOW',
1204				id:'nkH-min-211',nkHMinCode:211,nkHShortCode:'min-211',
1205				yAxis:'DOW',
1206				data:C211,
1207				gapSize:15,
1208				zIndex:80,
1209				lineWidth:1.5,
1210				states:{hover:{lineWidth:1.5}},
1211				color:colHS211,
1212				shadow:{color:'#fff',opacity:2.5,width:2.5,offsetX:0,offsetY:0},
1213				tooltip:{valueDecimals:2},
1214				visible:Boolean(Number(seriesList[3]))
1215			},{
1216				name:'CFD DOW',
1217				id:'nkH-min-731',nkHMinCode:731,nkHShortCode:'min-731',
1218				yAxis:'DOW',
1219				data:C731,
1220				gapSize:100,
1221				zIndex:50,
1222				lineWidth:1.1,
1223				states:{hover:{lineWidth:1.1}},
1224				color:colHS731,
1225				shadow:{color:'#fff',opacity:1.6,width:1.6,offsetX:0,offsetY:0},
1226				tooltip:{valueDecimals:0},
1227				visible:Boolean(Number(seriesList[4]))
1228			},{
1229				name:'CFD NAS100',
1230				id:'nkH-min-737',nkHMinCode:737,nkHShortCode:'min-737',
1231				yAxis:'NAS100',
1232				data:C737,
1233				gapSize:100,
1234				zIndex:70,
1235				lineWidth:1.1,
1236				states:{hover:{lineWidth:1.1}},
1237				color:colHS737,
1238				shadow:{color:'#fff',opacity:1.6,width:1.6,offsetX:0,offsetY:0},
1239				tooltip:{valueDecimals:2},
1240				visible:Boolean(Number(seriesList[5]))
1241			},{
1242				name:'VIX',
1243				id:'nkH-min-621',nkHMinCode:621,nkHShortCode:'min-621',
1244				yAxis:'VIX',
1245				data:C621,
1246				gapSize:100,
1247				zIndex:5,
1248				lineWidth:.6,
1249				states:{hover:{lineWidth:.6}},
1250				threshold:20,
1251				color:'rgba(40,0,130,.9)',
1252				negativeColor:'rgba(40,0,130,.4)',
1253				shadow:{color:'#fff',opacity:2,width:2,offsetX:0,offsetY:0},
1254				tooltip:{valueDecimals:2},
1255				visible:Boolean(Number(seriesList[6]))
1256			},{
1257				name:'OIL',
1258				id:'nkH-min-921',nkHMinCode:921,nkHShortCode:'min-921',
1259				yAxis:'OIL',
1260				data:C921,
1261				dashStyle:'ShortDot',
1262				gapSize:100,
1263				zIndex:20,
1264				lineWidth:1.5,
1265				states:{hover:{lineWidth:1.5}},
1266				color:colHS921,
1267				shadow:{color:colHS921,opacity:.2,width:1,offsetX:0,offsetY:0},
1268				tooltip:{valueDecimals:2},
1269				visible:Boolean(Number(seriesList[7]))
1270			},{
1271				name:'GOLD',
1272				id:'nkH-min-931',nkHMinCode:931,nkHShortCode:'min-931',
1273				yAxis:'GOLD',
1274				data:C931,
1275				gapSize:100,
1276				zIndex:20,
1277				dashStyle:'ShortDot',
1278				lineWidth:1.5,
1279				states:{hover:{lineWidth:1.5}},
1280				color:colHS931,
1281				shadow:{color:'#fff',opacity:2.5,width:2.5,offsetX:0,offsetY:0},
1282				tooltip:{valueDecimals:2},
1283				visible:Boolean(Number(seriesList[8]))
1284			},{
1285				name:'BTC',
1286				id:'nkH-min-1001',nkHMinCode:1001,nkHShortCode:'min-1001',
1287				yAxis:'BTC/JPY',
1288				data:C1001,
1289				zIndex:10,
1290				dashStyle:'ShortDot',
1291				lineWidth:1.5,
1292				states:{hover:{lineWidth:1.5}},
1293				color:colHS1001,
1294				shadow:{color:colHS1001,opacity:.2,width:1,offsetX:0,offsetY:0},
1295				tooltip:{valueDecimals:0},
1296				visible:Boolean(Number(seriesList[9]))
1297			},
1298			{data:nkHCloseLine(LastT,Last,10,EndT),yAxis:'JP225',gapSize:10000,enableMouseTracking:false,zIndex:zI111,showInLegend:false,lineWidth:LW,dashStyle:'dot',color:Pcol111},
1299			{data:nkHCloseLine(LastT,Last,11,EndT),yAxis:'JP225',gapSize:10000,enableMouseTracking:false,zIndex:zI111,showInLegend:false,lineWidth:LW,dashStyle:'dot',color:Pcol111},
1300			{data:nkHCloseLine(LastT,Last,12,EndT),yAxis:'JP225',gapSize:10000,enableMouseTracking:false,zIndex:zI111,showInLegend:false,lineWidth:LW,dashStyle:'dot',color:Pcol111},
1301			{data:nkHCloseLine(LastT,Last,13,EndT),yAxis:'JP225',gapSize:10000,enableMouseTracking:false,zIndex:zI111,showInLegend:false,lineWidth:LW,dashStyle:'dot',color:Pcol111},
1302			{data:nkHCloseLine(LastT,Last,14,EndT),yAxis:'JP225',gapSize:10000,enableMouseTracking:false,zIndex:zI111,showInLegend:false,lineWidth:LW,dashStyle:'dot',color:Pcol111},
1303			{data:nkHCloseLine(LastT,Last,20,EndT),yAxis:'DOW',gapSize:10000,enableMouseTracking:false,zIndex:zI211,showInLegend:false,lineWidth:LW,dashStyle:'dot',color:Pcol211},
1304			{data:nkHCloseLine(LastT,Last,21,EndT),yAxis:'DOW',gapSize:10000,enableMouseTracking:false,zIndex:zI211,showInLegend:false,lineWidth:LW,dashStyle:'dot',color:Pcol211},
1305			{data:nkHCloseLine(LastT,Last,22,EndT),yAxis:'DOW',gapSize:10000,enableMouseTracking:false,zIndex:zI211,showInLegend:false,lineWidth:LW,dashStyle:'dot',color:Pcol211},
1306			{data:nkHCloseLine(LastT,Last,23,EndT),yAxis:'DOW',gapSize:10000,enableMouseTracking:false,zIndex:zI211,showInLegend:false,lineWidth:LW,dashStyle:'dot',color:Pcol211},
1307			{data:nkHCloseLine(LastT,Last,24,EndT),yAxis:'DOW',gapSize:10000,enableMouseTracking:false,zIndex:zI211,showInLegend:false,lineWidth:LW,dashStyle:'dot',color:Pcol211}
1308				],
1309			xAxis:{
1310				breaks:[{from:Date.UTC(2016,2,5,(7-NY_stF),1)-36e5*9,to:Date.UTC(2016,2,7,(6-NY_stF),59)-36e5*9,repeat:7*24*36e5}],
1311				plotLines:[
1312					{value:PL[0],zIndex:100,color:'rgba(30,40,100,.2)',width:1},
1313					{value:PL[1],zIndex:100,color:'rgba(30,40,100,.2)',width:1},
1314					{value:PL[2],zIndex:100,color:'rgba(30,40,100,.2)',width:1},
1315					{value:PL[3],zIndex:100,color:'rgba(30,40,100,.2)',width:1},
1316					{value:PL[4],zIndex:100,color:'rgba(30,40,100,.2)',width:1},
1317					{value:PL[5],zIndex:100,color:'rgba(30,40,100,.2)',width:1},
1318					{value:PL[6],zIndex:100,color:'rgba(30,40,100,.2)',width:1}
1319				],
1320				units:[['hour',[1,3,6,24]]],
1321				labels:{y:14,rotation:0,style:{color:'#555',fontSize:'13px'}},
1322				tickPixelInterval:77,
1323				minorTickInterval:36e5*3,
1324				gridLineWidth:.5,
1325				gridLineColor:'#f7f7f7',
1326				minorGridLineWidth:0,
1327				minorGridLineColor:'#f9f9f9',
1328				minorTickPosition:'inside',
1329				minorTickLength:1,
1330				tickLength:2,
1331				tickColor:'#555',
1332				type:'datetime',
1333				dateTimeLabelFormats:{
1334					second:'%H:%M',
1335					minute:'%H:%M',
1336					hour:'%H:%M',
1337					day:'<span style="color:#e70;">【%m/%d】</span>',
1338					week:'%m/%d',
1339					month:'%Y/%m',
1340					year:'%Y'
1341				}
1342			},
1343			rangeSelector:{
1344				allButtonsEnabled:true,
1345				inputEnabled:false,
1346				buttonPosition:{x:536,y:5},
1347				buttonTheme:{
1348					width:37,height:20,fill:'#eee',style:{fontSize:'110%'},r:3.5,
1349					states:{
1350						hover:{fill:'#ccc'},
1351						select:{fill:'#999'}
1352					}
1353				},
1354				buttons:[{
1355					dataGrouping:(Android8ika)?undefined:{forced:true,units:[['minute',[1]]],approximation:'close'},
1356					count:6,type:'hour',text:'6H'
1357				},{
1358					dataGrouping:(Android8ika)?{forced:true,units:[['minute',[5]]],approximation:'close'}:{forced:true,units:[['minute',[3]]],approximation:'close'},
1359					count:(monDay||isClosedSun)?3:(isClosedSat)?1.5:1,type:'day',text:'1D'
1360				},{
1361					dataGrouping:(Android8ika)?undefined:{forced:true,units:[['minute',[5]]],approximation:'close'},
1362					count:(monDay||tuesDay)?4:2,type:'day',text:'2D'
1363				},{
1364					dataGrouping:(Android8ika)?undefined:{forced:true,units:[['minute',[10]]],approximation:'close'},
1365					count:7,type:'day',text:'7D'
1366				}],
1367				selected:chartRange
1368			},
1369			plotOptions:{
1370				series:{
1371					events:{
1372						legendItemClick:function(){setHchartSeriesCookieAfterClick("min",this);},
1373						mouseOver:function(){nkHShortHoverLabel(this,true);},
1374						mouseOut:function(){nkHShortHoverLabel(this,false);}
1375					},
1376					animation:false,
1377					dataGrouping:{
1378						approximation:'close',
1379						units:[['minute',[1,3,5,15]]],
1380						dateTimeLabelFormats:{
1381							minute:['%m/%d(%A) %H:%M','%m/%d(%A) %H:%M',''],
1382							hour:['%m/%d %H:%M','%m/%d %H:%M',''],
1383							day:['%m/%d','%m/%d',''],
1384							week:['%m/%d','%m/%d',''],
1385							month:['%B %Y','%B','-%B %Y'],
1386							year:['%Y','%Y','-%Y']
1387						}
1388					}
1389				}
1390			},
1391			tooltip:{
1392				animation:false,
1393				split: false,
1394				shared: false,
1395				followPointer:true,
1396				shadow: false,
1397				useHTML:true,
1398				borderWidth:0,
1399				borderColor:'rgba(18,18,18,0)',
1400				backgroundColor:'rgba(18,18,18,0)',
1401				style: {color:'#ddd',fontSize:'12px'},
1402				crosshairs:{dashStyle:'shortdash',color:'#eee'},
1403				positioner: function () {return { x:6, y:32};},
1404				xDateFormat: '%m/%d(%A) %H:%M',
1405				headerFormat: '<span style="background:#fff;font-size:13px;padding-right:6px;color:#555">{point.key} </span>',
1406				pointFormatter:nkHShortTooltipPointFormatter
1407			},
1408			navigator:{enabled:false},
1409			scrollbar:{enabled:false},
1410			navigation:{enabled:false},
1411			exporting:{enabled:false},
1412			credits:{position:{x:13,y:-23,align:'left',verticalAlign:'bottom'},style:{color:'#bfbfbf',fontSize:'13px',zIndex:0},text:'https://nikkei225jp.com/',href:''}
1413		});
1414		nkHMinSession=minSession;nkHMinSignature=minSignature;
1415		nkHChartLoaded();
1416}
1417function inter_min(){
1418	if(!nkHCanUpdate()||Sle!==2||nkHRequests.length)return;
1419	nkHAjax({url:'/_data/_nfsDATA/hs_data/hs_TOP5.json',dataType:'script',cache:true})
1420	.done(nkHGuard(function(data,status,xhr){
1421		var DATAm=xhr.nkHValues.DATAm;
1422		if(!DATAm||!DATAm.length)throw new Error('empty minute update');
1423		var current=nkHChart(),minSignature=nkHMinuteSignature(DATAm);
1424		if(current&&current._nkHMode===2&&nkHMinSignature===minSignature)return;
1425		if(!current||current._nkHMode!==2||nkHMinSession!==nkHSessionKey(DATAm)){nkHBuildMin(DATAm);return;}
1426		// 旧版の系列が残っていたら、順番で setData せず作り直す。
1427		if(nkHSeriesCodes[2].some(function(code){return !current.get('nkH-min-'+code);})){
1428			nkHBuildMin(DATAm);return;
1429		}
1430		var C511=[],C111=[],C191=[],C931=[],C737=[],C211=[],C731=[],C621=[],C921=[],C1001=[],LastT;
1431		var prevTime=Number(DATAm[0][0]);
1432		var tim=prevTime;
1433		for (var i=0;i<DATAm.length;i++){
1434			if(i>0){tim=prevTime+(DATAm[i][0]*10000);}
1435			if(DATAm[i][nkHMinTop5Columns[511]]>0)C511.push([tim,DATAm[i][nkHMinTop5Columns[511]]]);
1436			if(DATAm[i][nkHMinTop5Columns[111]]>0)C111.push([tim,DATAm[i][nkHMinTop5Columns[111]]]);
1437			if(DATAm[i][nkHMinTop5Columns[191]]>0)C191.push([tim,DATAm[i][nkHMinTop5Columns[191]]]);
1438			if(DATAm[i][nkHMinTop5Columns[211]]>0)C211.push([tim,DATAm[i][nkHMinTop5Columns[211]]]);
1439			if(DATAm[i][nkHMinTop5Columns[731]]>0)C731.push([tim,DATAm[i][nkHMinTop5Columns[731]]]);
1440			if(DATAm[i][nkHMinTop5Columns[737]]>0)C737.push([tim,DATAm[i][nkHMinTop5Columns[737]]]);
1441			if(DATAm[i][nkHMinTop5Columns[621]]>0)C621.push([tim,DATAm[i][nkHMinTop5Columns[621]]]);
1442			if(DATAm[i][nkHMinTop5Columns[921]]>0)C921.push([tim,DATAm[i][nkHMinTop5Columns[921]]]);
1443			if(DATAm[i][nkHMinTop5Columns[931]]>0)C931.push([tim,DATAm[i][nkHMinTop5Columns[931]]]);
1444			if(DATAm[i][nkHMinTop5Columns[1001]]>0)C1001.push([tim,DATAm[i][nkHMinTop5Columns[1001]]]);
1445			DATAm[i].length=0;
1446			prevTime=tim;
1447		}
1448		LastT=tim;
1449		DATAm.length=0;
1450		var chart=$('#container').highcharts();
1451		var dataSets=[C511,C111,C191,C211,C731,C737,C621,C921,C931,C1001],changed=false,liveExpired=false,latestVisible=-Infinity;
1452		var previousDataMax=chart.xAxis&&chart.xAxis[0]?Number(chart.xAxis[0].getExtremes().dataMax):NaN;
1453		for(var s=0;s<dataSets.length;s++){
1454			var code=nkHSeriesCodes[2][s],series=chart.get('nkH-min-'+code);
1455			if(nkHMinuteKeepLive(chart,code,dataSets[s]))liveExpired=true;
1456			if(series.visible&&dataSets[s].length)latestVisible=Math.max(latestVisible,Number(dataSets[s][dataSets[s].length-1][0]));
1457			if(!nkHMinuteSeriesChanged(series,dataSets[s]))continue;
1458			series.setData(dataSets[s],false,false,false);
1459			changed=true;
1460		}
1461		var rangeChanged=nkHFollowLatest(chart,isFinite(latestVisible)?latestVisible:LastT,previousDataMax);
1462		if(changed||rangeChanged)chart.redraw(false);
1463		else if(liveExpired)nkHShortRenderLabels(chart,'min');
1464		nkHMinSignature=minSignature;
1465	}));
1466}
1467
1468
1469function day_create_chart(){
1470	$.when(
1471	nkHAjax({url:'/_data/_nfsDATA/HS_DATA_DAY/S111.json', dataType:'script',cache:true}),
1472	nkHAjax({url:'/_data/_nfsDATA/HS_DATA_DAY/S211.json', dataType:'script',cache:true}),
1473	nkHAjax({url:'/_data/_nfsDATA/HS_DATA_DAY/S321.json', dataType:'script',cache:true}),
1474	nkHAjax({url:'/_data/_nfsDATA/HS_DATA_DAY/S413.json', dataType:'script',cache:true}),
1475	nkHAjax({url:'/_data/_nfsDATA/HS_DATA_DAY/S511.json', dataType:'script',cache:true}),
1476	nkHAjax({url:'/_data/_nfsDATA/HS_DATA_DAY/S514.json', dataType:'script',cache:true}),
1477	nkHAjax({url:'/_data/_nfsDATA/HS_DATA_DAY/S621.json', dataType:'script',cache:true}),
1478	nkHAjax({url:'/_data/_nfsDATA/HS_DATA_DAY/S921.json', dataType:'script',cache:true}),
1479	nkHAjax({url:'/_data/_nfsDATA/HS_DATA_DAY/S931.json', dataType:'script',cache:true}),
1480	nkHAjax({url:'/_data/_nfsDATA/HS_DATA_DAY/S1001.json',dataType:'script',cache:true})
1481	).done(nkHGuard(function(json1,json2,json3,json4,json5,json6,json7,json8,json9,json10){
1482		var S111=json1[2].nkHValues.S111,S211=json2[2].nkHValues.S211,S321=json3[2].nkHValues.S321,S413=json4[2].nkHValues.S413,S511=json5[2].nkHValues.S511,S514=json6[2].nkHValues.S514,S621=json7[2].nkHValues.S621,S921=json8[2].nkHValues.S921,S931=json9[2].nkHValues.S931,S1001=json10[2].nkHValues.S1001;
1483		if(!S111.length||!S511.length)throw new Error('empty daily chart data');
1484		var seriesList=myGetCookie("TOP225_day"+"S");
1485		var chartRange=nkHRangeIndex(myGetCookie("TOP225_day"+"R"),1,4);
1486		if(!seriesList){seriesList='1_0_0_1_1_0_0_0_0_0';}
1487		var seriesList=seriesList.split("_");
1488		if(seriesList.length===9)seriesList.splice(8,0,'1');
1489
1490		Highcharts.setOptions({global:{timezoneOffset:-9*60},lang:{rangeSelectorZoom:'',thousandsSep:",",weekdays:['日','月','火','水','木','金','土'],numericSymbols:null}});
1491		// Highcharts.setOptions({global:{useUTC:false},lang:{rangeSelectorZoom:'',thousandsSep:",",weekdays:['日','月','火','水','木','金','土'],numericSymbols:null}});
1492		nkHDestroyChart();
1493		$('#container').highcharts('StockChart', {
1494			chart:{
1495				animation:false,panning:false,pinchType:false,reflow:false,
1496				width:726,height:380,marginBottom:18,marginTop:2,marginRight:nkHShortMargin,
1497				style:{fontFamily:'Arial'},
1498				events:{
1499					load:function(){this._nkHCurrentMode='day';nk225LegendLines(this);nkHShortRenderLabels(this,'day');},
1500					redraw:function(){nk225LegendLines(this);setHchartRangeCookieAfterRedraw("day",this);nkHShortRenderLabels(this,'day');},
1501					destroy:function(){nkHShortDestroyLabels(this);}
1502				}
1503			},
1504			legend:{
1505				layout:'horizontal',align:'top',verticalAlign:'top',
1506				x:0,y:-5,
1507				backgroundColor:'#FcFcFe',
1508				borderColor:'#b7b7b7',
1509				borderRadius:3,
1510				itemDistance:4,
1511				symbolWidth:9,
1512				symbolPadding:1,
1513				itemStyle:{fontSize:'11px',color:'#111'},
1514				enabled:true,floating:true,shadow:true
1515			},
1516			yAxis:[{
1517				id:'JP225',
1518				labels:{
1519					x:0,y:3,align:'right',
1520					style:{color:colHS111,fontSize:'12px'}
1521				},
1522				opposite:true,offset:nkHShortScaleOffset,showFirstLabel:true,showLastLabel:true,
1523				gridLineColor:'#e7e7e7',gridLineWidth:.2,
1524				minRange:1000,
1525				tickPixelInterval:65
1526			},{
1527				id:'FTSE',
1528				labels:{
1529					x:0,y:23,align:'right',
1530					style:{color:colHS413,fontSize:'12px'}
1531				},
1532				opposite:true,offset:nkHShortScaleOffset,showLastLabel:true,showFirstLabel:false,
1533				gridLineColor:'#e7e7e7',gridLineWidth:.2,
1534				minRange:500,
1535				tickPixelInterval:65
1536			},{
1537				id:'DOW',
1538				labels:{
1539					x:0,y:13,align:'right',
1540					style:{color:colHS211,fontSize:'12px'}
1541				},
1542				opposite:true,offset:nkHShortScaleOffset,showLastLabel:true,showFirstLabel:false,
1543				gridLineColor:'#e7e7e7',gridLineWidth:.2,
1544				minRange:1000,
1545				tickPixelInterval:65
1546			},{
1547				id:'USD/JPY',
1548				labels:{
1549					x:0,y:-7,format:'{value:.2f}',align:'right',
1550					style:{color:'#aaa',fontSize:'12px'}
1551				},
1552				opposite:true,offset:nkHShortScaleOffset,showLastLabel:false,showFirstLabel:true,
1553				gridLineColor:'#e7e7e7',gridLineWidth:.2,
1554				minRange:1,
1555				tickPixelInterval:65
1556			},{
1557				id:'EURJPY',
1558				labels:{
1559					x:35,y:20,format:'{value:.2f}',align:'right',
1560					style:{color:'rgba(51,121,23,0.5)',textShadow:"0px 0px 7px #fff"}
1561				},
1562				opposite:false,showLastLabel:false,showFirstLabel:false,
1563				gridLineColor:'#e7e7e7',gridLineWidth:.2,
1564				minRange:1,
1565				tickPixelInterval:65
1566			},{
1567				id:'CHINA',
1568				labels:{
1569					x:35,y:-11,align:'right',
1570					style:{color:colHS321,textShadow:"0px 0px 7px #fff"}
1571				},
1572				opposite:false,showLastLabel:false,showFirstLabel:false,
1573				gridLineColor:'#e7e7e7',gridLineWidth:.2,
1574				minRange:50,
1575				tickPixelInterval:65
1576			},{
1577				id:'VIX',
1578				labels:{
1579					x:35,y:21,format:'{value:,.1f}',align:'right',
1580					style:{color:colHS621,textShadow:'0 0 1px #fff,0 0 1.5px #fff,0 0 2px #fff'}
1581				},
1582				opposite:false,showLastLabel:false,showFirstLabel:false,
1583				gridLineColor:'#e7e7e7',gridLineWidth:.2,
1584				minRange:2.5,
1585				tickPixelInterval:65
1586			},{
1587				id:'OIL',
1588				labels:{
1589					x:35,y:-12,format:'{value:,.1f}',align:'right',
1590					style:{color:colHS921,textShadow:'0 0 1px #fff,0 0 1.5px #fff,0 0 2px #fff'}
1591				},
1592				opposite:false,showLastLabel:false,showFirstLabel:false,
1593				gridLineColor:'#e7e7e7',gridLineWidth:.2,
1594				minRange:0.4,
1595				tickPixelInterval:65
1596			},{
1597				id:'GOLD',
1598				labels:{
1599					x:35,y:-1,format:'{value:,.0f}',align:'right',
1600					style:{color:colHS931,textShadow:'0 0 1px #fff,0 0 1.5px #fff,0 0 2px #fff'}
1601				},
1602				opposite:false,showLastLabel:false,showFirstLabel:false,
1603				gridLineColor:'#e7e7e7',gridLineWidth:.2,
1604				minRange:50,
1605				tickPixelInterval:65
1606			},{
1607				id:'BTC/JPY',
1608				labels:{
1609					x:35,y:10,align:'right',format:'{value:,0f}',formatter:function(){return(this.value/10000)+'万';},
1610					style:{color:colHS1001,textShadow:'0 0 1px #fff,0 0 1.5px #fff,0 0 2px #fff'}
1611				},
1612				opposite:false,showLastLabel:false,showFirstLabel:false,
1613				gridLineColor:'#e7e7e7',gridLineWidth:.2,
1614				minRange:20000,
1615				tickPixelInterval:65
1616			}],
1617			series:[{
1618				name:'JP225',
1619				yAxis:'JP225',
1620				data:S111,
1621				zIndex:90,
1622				lineWidth:1.75,
1623				states:{hover:{lineWidth:1.75}},
1624				color:colHS111,
1625				shadow:{color:'#fff',opacity:2.5,width:2.5,offsetX:0,offsetY:0},
1626				tooltip:{valueDecimals:2},
1627				visible:Boolean(Number(seriesList[0]))
1628			},{
1629				name:'CHINA',
1630				yAxis:'CHINA',
1631				data:S321,
1632				zIndex:3,
1633				gapSize:100,
1634				lineWidth:1.3,
1635				states:{hover:{lineWidth:1.3}},
1636				color:colHS321,
1637				shadow:{color:'#fff',opacity:2,width:2,offsetX:0,offsetY:0},
1638				tooltip:{valueDecimals:2},
1639				visible:Boolean(Number(seriesList[1]))
1640			},{
1641				name:'FTSE',
1642				yAxis:'FTSE',
1643				data:S413,
1644				gapSize:100,
1645				zIndex:70,
1646				lineWidth:1.3,
1647				states:{hover:{lineWidth:1.3}},
1648				color:colHS413,
1649				shadow:{color:'#fff',opacity:2.25,width:2.25,offsetX:0,offsetY:0},
1650				tooltip:{valueDecimals:2},
1651				visible:Boolean(Number(seriesList[2]))
1652			},{
1653				name:'DOW',
1654				yAxis:'DOW',
1655				data:S211,
1656				gapSize:100,
1657				zIndex:80,
1658				lineWidth:1.75,
1659				states:{hover:{lineWidth:1.75}},
1660				color:colHS211,
1661				shadow:{color:'#fff',opacity:2.5,width:2.5,offsetX:0,offsetY:0},
1662				tooltip:{valueDecimals:2},
1663				visible:Boolean(Number(seriesList[3]))
1664			},{
1665				name:'USD/JPY',
1666				yAxis:'USD/JPY',
1667				data:S511,
1668				// type:'area',
1669				threshold:null,
1670				zIndex:0,
1671				lineWidth:1.5,
1672				states:{hover:{lineWidth:1.5}},
1673				color:'rgba(180,180,180,.8)',
1674				// fillColor:{stops:[[0,'rgba(220,220,220,.6)'],[1,'rgba(220,220,220,0.15)']],linearGradient:{x1:0,y1:0,x2:0,y2:1}},
1675				tooltip:{valueDecimals:2},
1676				visible:Boolean(Number(seriesList[4]))
1677			},{
1678				name:'EURJPY',
1679				yAxis:'EURJPY',
1680				data:S514,
1681				// type:'area',
1682				threshold:null,
1683				zIndex:0,
1684				lineWidth:1.5,
1685				states:{hover:{lineWidth:1.5}},
1686				color:'rgba(51,121,23,0.35)',
1687				// fillColor:{linearGradient:{x1:0,y1:0,x2:0,y2:1},stops:[[0,'rgba(51,121,3,0.15)'],[1,'rgba(51,121,3,0.001)']]},
1688				tooltip:{valueDecimals:2},
1689				visible:Boolean(Number(seriesList[5]))
1690			},{
1691				name:'VIX',
1692				yAxis:'VIX',
1693				data:S621,
1694				zIndex:12,
1695				lineWidth:.9,
1696				states:{hover:{lineWidth:.9}},
1697				// color:colHS621,
1698				threshold:20,
1699				color:'rgba(130,0,215,1)',
1700				negativeColor:'rgba(180,120,255,.5)',
1701				shadow:{color:'#fff',opacity:2.3,width:2.3,offsetX:0,offsetY:0},
1702				tooltip:{valueDecimals:2},
1703				visible:Boolean(Number(seriesList[6]))
1704			},{
1705				name:'OIL',
1706				yAxis:'OIL',
1707				data:S921,
1708				dashStyle:'ShortDot',
1709				zIndex:11,
1710				lineWidth:1.6,
1711				states:{hover:{lineWidth:1.6}},
1712				color:colHS921,
1713				shadow:{color:'#fff',opacity:2.3,width:2.3,offsetX:0,offsetY:0},
1714				tooltip:{valueDecimals:2},
1715				visible:Boolean(Number(seriesList[7]))
1716			},{
1717				name:'GOLD',
1718				yAxis:'GOLD',
1719				data:S931,
1720				dashStyle:'ShortDot',
1721				zIndex:10.5,
1722				lineWidth:1.6,
1723				states:{hover:{lineWidth:1.6}},
1724				color:colHS931,
1725				shadow:{color:'#fff',opacity:2.3,width:2.3,offsetX:0,offsetY:0},
1726				tooltip:{valueDecimals:2},
1727				visible:Boolean(Number(seriesList[8]))
1728			},{
1729				name:'BTC/JPY',
1730				yAxis:'BTC/JPY',
1731				data:S1001,
1732				dashStyle:'ShortDot',
1733				zIndex:10,
1734				lineWidth:1.6,
1735				states:{hover:{lineWidth:1.6}},
1736				color:colHS1001,
1737				shadow:{color:'#fff',opacity:2.3,width:2.3,offsetX:0,offsetY:0},
1738				tooltip:{valueDecimals:0},
1739				visible:Boolean(Number(seriesList[9]))
1740			}],
1741			xAxis:{
1742				tickPixelInterval:125,
1743				// tickInterval:36e5*24*365,
1744				minorTickInterval:36e5*24*30.5,
1745				gridLineWidth:.6,
1746				gridLineColor:'#ddd',
1747				minorGridLineWidth:.2,
1748				minorGridLineColor:'#efefeF',
1749				minorTickPosition:'inside',
1750				minorTickLength:0,
1751				tickLength:3,
1752				tickColor:'#777',
1753				labels:{y:13,rotation:0,style:{color:'#799'}},
1754				type:'datetime',
1755				dateTimeLabelFormats:{
1756					week:'<span style="color:#38e;">《%Y/%m》</span>',
1757					month:'<span style="color:#38e;">《%Y/%m》</span>',
1758					year:'<span style="color:#17e;">《%Y》</span>'
1759				}
1760			},
1761			rangeSelector:{
1762				allButtonsEnabled:true,
1763				inputEnabled:false,
1764				buttonPosition:{x:536,y:5},
1765				buttonTheme:{
1766					width:37,height:20,fill:'#eee',style:{fontSize:'110%'},r:3.5,
1767					states:{
1768						hover:{fill:'#ccc'},
1769						select:{fill:'#999'}
1770					}
1771				},
1772				buttons:[{
1773					dataGrouping:(Android8ika)?undefined:{forced:true,units:[['day',[1]]]},
1774					count:3,type:'month',text:'3M'
1775				},{
1776					dataGrouping:(Android8ika)?undefined:{forced:true,units:[['day',[1]]]},
1777					count:6,type:'month',text:'6M'
1778				},{
1779					dataGrouping:(Android8ika)?undefined:{forced:true,units:[['day',[2]]]},
1780					count:2,type:'year',text:'2Y'
1781				},{
1782					dataGrouping:(Android8ika)?undefined:{forced:true,units:[['week',[1]]]},
1783					count:10,type:'year',text:'10Y'
1784				}],
1785				selected:chartRange
1786			},
1787			plotOptions:{
1788				series:{
1789					events:{
1790						legendItemClick:function(){setHchartSeriesCookieAfterClick("day",this);},
1791						mouseOver:function(){nkHShortHoverLabel(this,true);},
1792						mouseOut:function(){nkHShortHoverLabel(this,false);}
1793					},
1794					animation:false,
1795					dataGrouping:{
1796						dateTimeLabelFormats:{
1797							day:['%Y/%m/%d','%Y/%m/%d',''],
1798							week:['%Y/%m/%d','%Y/%m/%d',''],
1799							month:['%B %Y','%B','-%B %Y'],
1800							year:['%Y','%Y','-%Y']
1801						}
1802					}
1803				},
1804				candlestick:{
1805					tooltip:{
1806						pointFormat:' | <span style="color:{series.color}">{series.name}</span>: <b>{point.close}</b><br/>'
1807					}
1808				}
1809			},
1810			tooltip:{
1811				animation:false,
1812				split: false,
1813				shared: false,
1814				followPointer:true,
1815				shadow: false,
1816				useHTML:true,
1817				borderWidth:0,
1818				borderColor:'rgba(18,18,18,0)',
1819				backgroundColor:'rgba(18,18,18,0)',
1820				style: {color:'#ddd',fontSize:'12px'},
1821				crosshairs:{dashStyle:'shortdash',color:'#eee'},
1822				positioner: function () {return { x:6, y:32};},
1823				xDateFormat: '%Y/%m/%d',
1824				headerFormat: '<span style="background:#fff;font-size:13px;padding-right:6px;color:#555">{point.key} </span>',
1825				pointFormatter:nkHShortTooltipPointFormatter
1826			},
1827			navigator:{enabled:false},
1828			scrollbar:{enabled:false},
1829			navigation:{enabled:false},
1830			exporting:{enabled:false},
1831			credits:{position:{x:13,y:-23,align:'left',verticalAlign:'bottom'},style:{color:'#bfbfbf',fontSize:'13px',zIndex:0},text:'https://nikkei225jp.com/',href:''}
1832		});
1833
1834		nkHChartLoaded();
1835	}));
1836}
1837
1838
1839function per_create_chart(){
1840	$.when(
1841		nkHAjax({url:'/_data/_nfsDATA/HS_DATA_DAY/S111.json', dataType:'script',cache:true}),
1842		nkHAjax({url:'/_data/_nfsDATA/HS_DATA_DAY/S211.json', dataType:'script',cache:true}),
1843		nkHAjax({url:'/_data/_nfsDATA/HS_DATA_DAY/S321.json', dataType:'script',cache:true}),
1844		nkHAjax({url:'/_data/_nfsDATA/HS_DATA_DAY/S413.json', dataType:'script',cache:true}),
1845		nkHAjax({url:'/_data/_nfsDATA/HS_DATA_DAY/S511.json', dataType:'script',cache:true}),
1846		nkHAjax({url:'/_data/_nfsDATA/HS_DATA_DAY/S514.json', dataType:'script',cache:true}),
1847		nkHAjax({url:'/_data/_nfsDATA/HS_DATA_DAY/S523.json', dataType:'script',cache:true}),
1848		nkHAjax({url:'/_data/_nfsDATA/HS_DATA_DAY/S921.json', dataType:'script',cache:true}),
1849		nkHAjax({url:'/_data/_nfsDATA/HS_DATA_DAY/S931.json', dataType:'script',cache:true}),
1850		nkHAjax({url:'/_data/_nfsDATA/HS_DATA_DAY/S1001.json',dataType:'script',cache:true})
1851	).done(nkHGuard(function(json1,json2,json3,json4,json5,json6,json7,json8,json9,json10){
1852		var S111=json1[2].nkHValues.S111,S211=json2[2].nkHValues.S211,S321=json3[2].nkHValues.S321,S413=json4[2].nkHValues.S413,
1852S511=json5[2].nkHValues.S511,S514=json6[2].nkHValues.S514,S921=json8[2].nkHValues.S921,S931=json9[2].nkHValues.S931,S1001=json10[2].nkHValues.S1001;
1853		if(!S111.length||!S511.length)throw new Error('empty percent chart data');
1854		var seriesList=myGetCookie("TOP225_per"+"S");
1855		var chartRange=nkHRangeIndex(myGetCookie("TOP225_per"+"R"),1,4);
1856		if(!seriesList){seriesList='1_0_0_1_1_0_0_0_0';}
1857		var seriesList=seriesList.split("_");
1858		if(seriesList.length===8)seriesList.splice(7,0,'1');
1859
1860		Highcharts.setOptions({global:{timezoneOffset:-9*60},lang:{rangeSelectorZoom:'',thousandsSep:",",weekdays:['日','月','火','水','木','金','土'],numericSymbols:null}});
1861		nkHDestroyChart();
1862		$('#container').highcharts('StockChart',{
1863			chart:{
1864				animation:false,panning:false,pinchType:false,reflow:false,
1865				width:726,height:380,marginBottom:18,marginTop:2,marginRight:nkHShortMargin,
1866				style:{fontFamily:'Arial'},
1867				events:{
1868					load:function(){this._nkHCurrentMode='per';nk225LegendLines(this);nkHShortRenderLabels(this,'per');},
1869					redraw:function(){nk225LegendLines(this);setHchartRangeCookieAfterRedraw("per",this);nkHShortRenderLabels(this,'per');},
1870					destroy:function(){nkHShortDestroyLabels(this);}
1871				}
1872			},
1873			legend:{
1874				layout:'horizontal',align:'top',verticalAlign:'top',
1875				x:0,y:-5,
1876				backgroundColor:'#FcFcFe',
1877				borderColor:'#b7b7b7',
1878				borderRadius:3,
1879				itemDistance:4,
1880				symbolWidth:9,
1881				symbolPadding:1,
1882				itemStyle:{fontSize:'11px',color:'#111'},
1883				enabled:true,floating:true,shadow:true
1884			},
1885			yAxis:[{
1886				id:'per',
1887				labels:{
1888					x:0,y:4,formatter:function(){return this.value+'%';},align:'right',
1889					style:{color:'#555',fontSize:'14px'}
1890				},
1891				gridLineColor:'#ccc',gridLineWidth:.3,
1892				plotLines:[{value:0,zIndex:0,color:'#555',width:.5}],
1893				opposite:true,offset:nkHShortScaleOffset,showLastLabel:true,tickPixelInterval:65
1894			}],
1895			series:[{
1896				name:'JP225',
1897				compare:'percent',
1898				data:S111,
1899				zIndex:90,
1900				lineWidth:1.75,
1901				states:{hover:{lineWidth:1.75}},
1902				color:colHS111,
1903				shadow:{color:'#fff',opacity:2.5,width:2.5,offsetX:0,offsetY:0},
1904				tooltip:{valueDecimals:2},
1905				visible:Boolean(Number(seriesList[0]))
1906			},{
1907				name:'CHINA',
1908				compare:'percent',
1909				data:S321,
1910				zIndex:3,
1911				lineWidth:1.5,
1912				states:{hover:{lineWidth:1.5}},
1913				color:colHS321,
1914				shadow:{color:'#fff',opacity:2.2,width:2.2,offsetX:0,offsetY:0},
1915				tooltip:{valueDecimals:2},
1916				visible:Boolean(Number(seriesList[1]))
1917			},{
1918				name:'FTSE',
1919				compare:'percent',
1920				data:S413,
1921				zIndex:70,
1922				lineWidth:1.5,
1923				states:{hover:{lineWidth:1.5}},
1924				color:colHS413,
1925				shadow:{color:'#fff',opacity:2.3,width:2.3,offsetX:0,offsetY:0},
1926				tooltip:{valueDecimals:2},
1927				visible:Boolean(Number(seriesList[2]))
1928			},{
1929				name:'DOW',
1930				compare:'percent',
1931				data:S211,
1932				zIndex:80,
1933				lineWidth:1.75,
1934				states:{hover:{lineWidth:1.75}},
1935				color:colHS211,
1936				shadow:{color:'#fff',opacity:2.5,width:2.5,offsetX:0,offsetY:0},
1937				tooltip:{valueDecimals:2},
1938				visible:Boolean(Number(seriesList[3]))
1939			},{
1940				name:'USD/JPY',
1941				compare:'percent',
1942				data:S511,
1943				zIndex:1,
1944				lineWidth:1.75,
1945				states:{hover:{lineWidth:2}},
1946				color:'rgba(180,180,180,.8)',
1947				tooltip:{valueDecimals:2},
1948				visible:Boolean(Number(seriesList[4]))
1949			},{
1950				name:'EURJPY',
1951				compare:'percent',
1952				data:S514,
1953				zIndex:0,
1954				lineWidth:1.75,
1955				states:{hover:{lineWidth:2}},
1956				color:'rgba(51,161,23,0.35)',
1957				tooltip:{valueDecimals:2},
1958				visible:Boolean(Number(seriesList[5]))
1959			},{
1960				name:'OIL',
1961				compare:'percent',
1962				data:S921,
1963				dashStyle:'ShortDot',
1964				zIndex:11,
1965				lineWidth:1.5,
1966				states:{hover:{lineWidth:1.5}},
1967				color:colHS921,
1968				shadow:{color:'#f7f7ee',opacity:.3},
1969				tooltip:{valueDecimals:2},
1970				visible:Boolean(Number(seriesList[6]))
1971			},{
1972				name:'GOLD',
1973				compare:'percent',
1974				data:S931,
1975				dashStyle:'ShortDot',
1976				zIndex:10.5,
1977				lineWidth:1.5,
1978				states:{hover:{lineWidth:1.5}},
1979				color:colHS931,
1980				shadow:{color:'#f7f7ee',opacity:.3},
1981				tooltip:{valueDecimals:2},
1982				visible:Boolean(Number(seriesList[7]))
1983			},{
1984				name:'BTC/JPY',
1985				compare:'percent',
1986				data:S1001,
1987				dashStyle:'ShortDot',
1988				zIndex:10,
1989				lineWidth:1.5,
1990				states:{hover:{lineWidth:1.5}},
1991				color:colHS1001,
1992				shadow:{color:'#fffcff',opacity:.3},
1993				tooltip:{valueDecimals:0},
1994				visible:Boolean(Number(seriesList[8]))
1995			}],
1996			xAxis:{
1997				tickPixelInterval:125,
1998				// tickInterval:36e5*24*365,
1999				minorTickInterval:36e5*24*30.5,
2000				gridLineWidth:1,
2001				gridLineColor:'#ddd',
2002				minorGridLineWidth:.8,
2003				minorGridLineColor:'#e7e7e7',
2004				minorTickPosition:'inside',
2005				minorTickLength:0,
2006				tickLength:3,
2007				tickColor:'#777',
2008				labels:{y:13,style:{color:'#799'}},
2009				type:'datetime',
2010				dateTimeLabelFormats:{
2011					week:'<span style="color:#38e;">《%Y/%m》</span>',
2012					month:'<span style="color:#38e;">《%Y/%m》</span>',
2013					year:'<span style="color:#17e;">《%Y》</span>'
2014				}
2015			},
2016			rangeSelector:{
2017				allButtonsEnabled:true,
2018				inputEnabled:false,
2019				buttonPosition:{x:536,y:5},
2020				buttonTheme:{
2021					width:37,height:20,fill:'#eee',style:{fontSize:'110%'},r:3.5,
2022					states:{
2023						hover:{fill:'#ccc'},
2024						select:{fill:'#999'}
2025					}
2026				},
2027				buttons:[{
2028					dataGrouping:(Android8ika)?undefined:{forced:true,units:[['day',[1]]]},
2029					count:3,type:'month',text:'3M'
2030				},{
2031					dataGrouping:(Android8ika)?undefined:{forced:true,units:[['day',[1]]]},
2032					count:6,type:'month',text:'6M'
2033				},{
2034					dataGrouping:(Android8ika)?undefined:{forced:true,units:[['day',[2]]]},
2035					count:2,type:'year',text:'2Y'
2036				},{
2037					dataGrouping:(Android8ika)?undefined:{forced:true,units:[['week',[1]]]},
2038					count:5,type:'year',text:'5Y'
2039				}],
2040				selected:chartRange
2041			},
2042			plotOptions:{
2043				series:{
2044					events:{
2045						legendItemClick:function(){setHchartSeriesCookieAfterClick("per",this);},
2046						mouseOver:function(){nkHShortHoverLabel(this,true);},
2047						mouseOut:function(){nkHShortHoverLabel(this,false);}
2048					},
2049					animation:false,
2050					dataGrouping:{
2051						dateTimeLabelFormats:{
2052							day:['%Y/%m/%d','%Y/%m/%d',''],
2053							week:['%Y/%m/%d','%Y/%m/%d',''],
2054							month:['%B %Y','%B','-%B %Y'],
2055							year:['%Y','%Y','-%Y']
2056						}
2057					}
2058				}
2059			},
2060			tooltip:{
2061				animation:false,
2062				split: false,
2063				shared: false,
2064				followPointer:true,
2065				shadow: false,
2066				useHTML:true,
2067				borderWidth:0,
2068				borderColor:'rgba(18,18,18,0)',
2069				backgroundColor:'rgba(18,18,18,0)',
2070				style: {color:'#ddd',fontSize:'12px'},
2071				crosshairs:{dashStyle:'shortdash',color:'#eee'},
2072				positioner: function () {return { x:6, y:32};},
2073				xDateFormat: '%y/%m/%d',
2074				headerFormat: '<span style="background:#fff;font-size:13px;padding-right:6px;color:#555">{point.key} </span>',
2075				pointFormatter:nkHShortTooltipPointFormatter
2076			},
2077			navigator:{enabled:false},
2078			scrollbar:{enabled:false},
2079			navigation:{enabled:false},
2080			exporting:{enabled:false},
2081			credits:{position:{x:13,y:-23,align:'left',verticalAlign:'bottom'},style:{color:'#bfbfbf',fontSize:'13px',zIndex:0},text:'https://nikkei225jp.com/',href:''}
2082		});
2083
2084
2085		nkHChartLoaded();
2086	}));
2087}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.