ssr=new Array();
sr=new Array();
sdr=new Array();
dr=new Array();
remain_minutes=0;
//유료 사용자 여부
var validuser=$("input[name=validuser]","#ajaxForm").val();
var xmlHttp;
function srvTime(){
if (window.XMLHttpRequest) {//분기하지 않으면 IE에서만 작동된다.
xmlHttp = new XMLHttpRequest(); // IE 7.0 이상, 크롬, 파이어폭스 등
xmlHttp.open('HEAD',window.location.href.toString(),false);
xmlHttp.setRequestHeader("Content-Type", "text/html");
xmlHttp.send('');
return xmlHttp.getResponseHeader("Date");
}else if (window.ActiveXObject) {
xmlHttp = new ActiveXObject('Msxml2.XMLHTTP');
xmlHttp.open('HEAD',window.location.href.toString(),false);
xmlHttp.setRequestHeader("Content-Type", "text/html");
xmlHttp.send('');
return xmlHttp.getResponseHeader("Date");
}
}
var st = srvTime();
var date = new Date(st);
var today = date.getFullYear() + addZero(date.getMonth()+1) + addZero(date.getDate());
var times= date.getHours() +":"+ addZero(date.getMinutes()) +":"+ addZero(date.getSeconds());
//console.log(date);
function addZero(n){
return n < 10 ? "0" + n : n;
}
/* Timer */
function countdown( seconds ){
var element, endTime, hours, mins, msLeft, time;
var rtn='0분 0초';
function updateTimer(){
msLeft = endTime - (+new Date);
if ( msLeft < 0 ) {
//console.log('done');
$('#remain_timer').html('진행 중 ');
} else {
time = new Date( msLeft );
hours = time.getUTCHours();
mins = time.getUTCMinutes();
$('#remain_timer').html( (hours ? hours + '시간' + ('0' + mins).slice(-2) : mins) + '분 ' + ('0' + time.getUTCSeconds()).slice(-2)+'초 전');
setTimeout( updateTimer, time.getUTCMilliseconds());
// if you want this to work when you unfocus the tab and refocus or after you sleep your computer and come back, you need to bind updateTimer to a $(window).focus event^^
}
}
endTime = (+new Date) + 1000 * seconds;
updateTimer();
}
function countdown2( seconds ){
var element, endTime, hours, mins, msLeft, time;
var rtn='0분 0초';
function updateTimer(){
msLeft = endTime - (+new Date);
if ( msLeft < 0 ) {
//console.log('done');
$('#remain_timer_min').html('마감');
} else {
time = new Date( msLeft );
hours = time.getUTCHours();
mins = time.getUTCMinutes();
$('#remain_timer_min').html( (hours ? hours + '시간' + ('0' + mins).slice(-2) : mins) + '분전');
setTimeout( updateTimer, time.getUTCMilliseconds());
// if you want this to work when you unfocus the tab and refocus or after you sleep your computer and come back, you need to bind updateTimer to a $(window).focus event^^
}
}
endTime = (+new Date) + 1000 * seconds;
updateTimer();
}
$(function() {
load_odds_table();
odds_table_legend()
//과집중 테이블
$("table#focus_table .cell-hover").hover(function(){
$("table#focus_table").find('td').removeClass('hover');
var key=$(this).attr('data-key');
if(key=='') return;
$("table#focus_table").find("td.cell-hover").each(function(){
if($(this).attr('data-key')==key){
$(this).addClass('hover');
}
})
});
//동일 조합 반전
$("table#move_table .cell-hover").hover(function(){
$(this).parents('table').find('td').removeClass('hover font-bold');
var key=$(this).attr('data-key');
if(key=='') return;
$(this).parents('table').find("td.cell-hover").each(function(){
if($(this).attr('data-key')==key){
$(this).addClass('hover');
}
})
$(this).parents('table').find("td.odds-var").each(function(){
if($(this).attr('data-key')==key){
$(this).addClass('font-bold');
}
})
});
//상세보기 요약보기
set_detail( get_cookie('complex_stats')!='n'?'y':'n' );
//배당판의 형태
$("input[name='is_odds']").change(function(){
var is_odds=$("input[name='is_odds']:checked").val();
set_cookie('odds_stats',is_odds,86400*355);
$("input[name='odds_stats']","#ajaxForm").val(is_odds);
setTimeout(
function(){
odds_table_legend()
load_odds_table()
},200);
});
$('#is_complex').change(function(){
var is_complex=$(this).prop('checked')?'y':'n';
set_cookie('complex_stats',is_complex,86400*355);
//console.log(get_cookie('complex_stats'));
set_detail(is_complex);
});
//기준시간 설정
$('#is_mins').change(function(){
var is_mins=$(this).prop('checked')?'15':'12';
set_cookie('mins_stats',is_mins,86400*355);
odds_table_legend();
//데이터 새로 고침
get_racing_ajx('init',0);
get_racing_table_ajx('init',0);
})
//실시간 변동 추적 정열
$('#is_align').change(function(){
var is_align=$(this).prop('checked')?'fall':'';
set_cookie('align_stats',is_align,86400*355);
console.log(get_cookie('align_stats'));
get_racing_table_ajx('init',0);
});
//남은시간 카운트 다움
countdown($('input[name=remain_sec_anal]','#ajaxForm').val()); // second base
countdown2($('input[name=remain_sec_race]','#ajaxForm').val()); // second base
});
function odds_table_legend(){
var is_odds=get_cookie('odds_stats');
var is_mins=get_cookie('mins_stats');
if(!is_mins) is_mins=15;
var htmls='';
//배당판 안내 문구
if(is_odds!='2'){
htmls+="복승 배당판 배당 변동 표기 설명 (복승 전체 배당판 변동률을 참고하면 축마 선정 및 복승 공략시 좋은 자료가 됨)
";
htmls+="모든 조합 박스 좌 상단 = 복승 "+is_mins+"분 전 평가 기준 배당으로 고점 됨
";
htmls+="모든 조합 박스 우 상단 = 실시간 현 등락률이 ▲상향, ▼하향으로 표기 됨 (복승 "+is_mins+"분 전 기준 배당 대비 등락률 / 표기 단위 %)
";
htmls+="모든 조합 박스 하단 12분,10분,8분,6분,4분,2분 / 각 2분간 "+is_mins+"분 전 기준 배당 대비 순간 등락률 변동을 표기
";
}
htmls+="바탕색 및 기호 표기 / 무색 = ▲상승배당 / 하늘색 = ▼하향배당 / 연두 = 5% 미만 △보합상승배당";
$("#race-legend").html(htmls);
}
function load_odds_table(){
if(horse_cnt == 0){
load_ajax()
return;
}
var _odds_stats= get_cookie('odds_stats');
console.log('d'+_odds_stats);
//세로형
if(_odds_stats=='2') {
$('#main_odds_table').load('/h_race/odd-table-vertical.php?horse_cnt='+horse_cnt,function() {
load_ajax()
});
}else{
$('#main_odds_table').load('/h_race/odd-table-'+horse_cnt+'.php',function() {
load_ajax()
});
}
}
function load_ajax(){
timeout1=get_racing_ajx('init',1);
timeout2=get_racing_table_ajx('init',1)
}
//상세보기토글
function set_detail(is_complex){
if(is_complex!='y'){
$("table.odds-display .odds-history").hide();
}else {
$("table.odds-display .odds-history").show();
}
}
//기본 단승 복승 정보
function get_racing_ajx(mode,recall){
//기분 값
var mins_stats=get_cookie('mins_stats');
if(!mins_stats) mins_stats=15;
var remain_minutes=0;
var formData = $("#ajaxForm").serialize();
var track, d, f,sign='';
var trdata_ok=false;
$.ajax({
type: "POST",
url: "/h_race//race.ajax.php?mode="+mode,
data:formData,
async: false,
dataType:'json',
success: function(data){
if(data.result==true ){
//트랙정보
trdata=data.datas.trdata
remain_minutes=data.datas['remain_minutes'];
//지정한 남은 시간 전에는 종료
//if(remain_minutes > mins_stats){
//단승 배열
for(var k in data.datas.dan_ben){
d=data.datas.dan_ben[k];
sr[k]=d;
}
//복승 배열
for(var k in data.datas.bok_ben){
d=data.datas.bok_ben[k];
dr[k]=d;
}
//}
//
trdata_ok=true;
}else{
//console.log(data.message);
}
}
});
var old_remain_minutes=$("input[name=remain_minutes]","#ajaxForm").val();
//console.log(trdata['odds_count']);
var data_enabled=0;
if(trdata_ok){
//경기 취소의 경우
if(trdata['tr_cancel']=='1'){
$('#main_odds').hide();
$('#race_none').show();
$('#race_none .race-noauth').hide();
$('#race_none .race-cancel').show();
$('#race_none .race-waiting,#race_none .race-waiting1,#race_none .race-waiting2').hide();
$('.race-detail').hide();
//취소사유
if(trdata['tr_cancel_note']!=''){
$('#race_none .race-cancel-note').html('('+trdata['tr_cancel_note']+')');
}
//권한이 없는 경우
}else if(trdata['data_auth']!='1'){
$('#main_odds').hide();
$('#race_none').show();
$('#race_none .race-noauth').show();
$('#race_none .race-cancel').hide();
$('#race_none .race-waiting').show();
if(remain_minutes <= 0){
$('#race_none .race-waiting1').hide();
$('#race_none .race-waiting2').show();
}else{
$('#race_none .race-waiting1').show();
$('#race_none .race-waiting2').hide();
}
$('.race-detail').hide();
//게임이 데이터가 아직 없는 경우
}else if(trdata['odds_count']==0){
$('#main_odds').hide();
$('#race_none').show();
$('#race_none .race-noauth').hide();
$('#race_none .race-cancel').hide();
$('#race_none .race-waiting').show();
$('#race_none .race-waiting1').show();
$('#race_none .race-waiting2').hide();
$('.race-detail').hide();
}else{
$('#main_odds').show();
$('#race_none').hide();
$('.race-detail').show();
$('#race_none .race-waiting2').hide();
data_enabled=1;
}
//현재 남은 시간 표기
$("input[name=remain_minutes]",'#ajaxForm').html(remain_minutes);
//종료여부 표기
var tr_race_end=trdata['tr_race_end'];
$("input[name=tr_race_end]",'#ajaxForm').val(tr_race_end);
//게임결과 표기
if(trdata['tr_race_order']!==''){
var orders= trdata['tr_race_order'].split(',');
var ordersStr= ""+orders[0]+""+orders[1]+""+orders[2]+"";
$('#race_result_order').html( ordersStr);
$('#race_result_val1').html(trdata['tr_race_result1']);
$('#race_result_val2').html(trdata['tr_race_result2']);
$('#race_result_val3').html(trdata['tr_race_result3']);
$('#race_result_val4').html(trdata['tr_race_result4']);
}
}
//첫 로딩인 경우 모두 채우기
if(mode=='init' && data_enabled==1){
var d,d2,f,history_str,addclass;
//테이블 초기화
$(".odds-display td").removeClass('emp-odds up-cell down-cell up down');
$(".odds-display .odds-start").html('');
$(".odds-display .odds-start").removeClass('bg-danger text-white');
$(".odds-display .odds-now").html('');
$(".odds-display .odds-history").html('');
//배당판 형태 구분
var odds_stats= get_cookie('odds_stats');
//복합형 배당판
if(odds_stats!='2'){
/*단승*/
//console.log(remain_minutes);
for(var k in sr){
d=sr[k];
//기준값
$('#win_'+k+" .odds-start").html(d['sodds']);
var f=d['sodds']*1 && d['nodds']*1 ?(Math.round( (d['sodds']-d['nodds']) /d['sodds']*100)*1):'';
if(f!==''){
f=f.toFixed(0);
addclass=sign='';
if(f > 0){
sign="▼ ";
addclass='down-cell';
}
else if(f < 0){
sign=" ▲ ";
if(Math.abs(f) < 5){
addclass='up-cell';
sign=" △ ";
}
}else if(f == 0) addclass='up-cell';
if(d['sodds'] < 10){
addclass+=' emp-odds';
$("#win_"+k+" .odds-start").addClass('bg-dwarning');
}
//현재값 적용
$('#win_'+k).removeClass();
if(addclass!='') $('#win_'+k).addClass(addclass);
$('#win_'+k+" .odds-now").html(sign+Math.abs(f));
}else $('#win_'+k+" .odds-now").html('');
var history_str=history_title='';
//console.log(d['sodds']+"/"+ d['sodds']);
//히스토리
if(mins_stats==15) history_cnt=6;
else history_cnt=5;
var prnt_cnt=0;
//console.log(d['history']);
if(d['sodds'] > 0) {
for(var h in d['history']){
//console.log(h+'/'+ d['history'][h]);
if(h==mins_stats) continue;
if(h==0) continue;
if(prnt_cnt >= history_cnt ) break;
d2=d['history'][h]?d['history'][h]:'0';
if(d2*1 !=0){
//배당 히스토리
f = (parseFloat(d['sodds'])*1 - parseFloat(d2)*1) / parseFloat(d['sodds'])*100;
//f=Math.floor(f*10)/10;
f=Math.floor(f);
if(f > 0) sign='down';
else if(f < 0) sign='up';
else sign='';
f=Math.abs(f);
}else{
f='';
sign=''
}
history_str=""+f+""+(history_str!=''?"-":"")+history_str;
history_title=d2+(history_title!=''?"-":"") + history_title;
prnt_cnt++;
//console.log(history_str);
}
}
//히스토리 남은칸 공백으로 처리
for(var i=prnt_cnt;i < history_cnt;i++){
history_str+=(history_str!=''?"-":"")+" ";
history_title+=(history_title!=''?"-":"") + " ";
}
$('#win_'+k+" .odds-history").html(history_str);
$('#win_'+k).attr('title',history_title);
}
/*복승*/
for(var k in dr){
d=dr[k];
//기준값
$('#qui_'+k+" .odds-start").html(d['sodds']);
var f=d['sodds'] > 0 && d['nodds']*1 > 0 ?(Math.round( (d['sodds']-d['nodds']) / d['sodds']*100)*1):'';
if(f!=='' ){
f=f.toFixed(0);
addclass=sign='';
if(f > 0){
sign="▼ ";
addclass='down-cell';
}
else if(f < 0){
sign=" ▲ ";
if(Math.abs(f) < 5){
addclass='up-cell';
sign=" △ ";
}
}else if(f == 0) addclass='up-cell';
if(d['sodds']*1 < 10){
addclass+=' emp-odds';
$("#qui_"+k+" .odds-start").addClass('bg-danger text-white');
}
//현재값 적용
$("#qui_"+k).removeClass();
if(addclass!='') $("#qui_"+k).addClass(addclass);
$("#qui_"+k+" .odds-now").html(sign+Math.abs(f));
}else $("#qui_"+k+" .odds-now").html('');
var history_str=history_title='';
//console.log($("#qui_"+k+" .odds-now"));
//console.log(k+"/"+d['sodds']+"/"+ d['sodds']);
//히스토리
if(mins_stats==15) history_cnt=6;
else history_cnt=5;
var prnt_cnt=0;
if(d['sodds'] > 0) {
//console.log(d['history']);
for(var h in d['history']){
if(h==mins_stats) continue;
if(h==0) continue;
if(prnt_cnt >= history_cnt ) break;
d2=d['history'][h]?d['history'][h]:' ';
if(d2*1 !=0){
//배당 히스토리
f = (parseFloat(d['sodds'])*1 - parseFloat(d2)*1) / parseFloat(d['sodds'])*100;
//f=Math.floor(f*10)/10;
f=Math.floor(f);
if(f > 0) sign='down';
else if(f < 0) sign='up';
else sign='';
f=Math.abs(f);
}else{
f='';
sign=''
}
history_str=""+f+""+(history_str!=''?"-":"")+history_str;
history_title=d2+(history_title!=''?"-":"") + history_title;
prnt_cnt++;
//console.log(history_str);
}
}
//히스토리 남은칸 공백으로 처리
for(var i=prnt_cnt;i < history_cnt;i++){
history_str+=(history_str!=''?"-":"")+" ";
history_title+=(history_title!=''?"-":"") + " ";
}
$('#qui_'+k+" .odds-history").html(history_str);
$('#qui_'+k).attr('title',history_title);
}
//세로형 배당판
}else{
/*복승*/
for(var k in dr){
d=dr[k];
var odds_last = d['sodds']
var f=d['nodds'];
var f=d['sodds'] > 0 && d['nodds']*1 > 0 ? (Math.round( (d['sodds']-d['nodds']) / d['sodds']*100)*1):'';
if(f!=='' ){
f=f.toFixed(0);
addclass=sign='';
if(f > 0){
sign="▼ ";
addclass='down-cell';
}
else if( f < 0 ){
sign=" ▲ ";
if(Math.abs(f) < 5){
addclass='up-cell';
sign="△";
}
}else if(f == 0) addclass='up-cell';
if(d['sodds']*1 < 10){
//addclass+=' emp-odds';
$("#qui_"+k+" .odds-last").addClass('text-danger');
}
//현재값 적용
$("#qui_"+k).removeClass();
if(addclass!='') $("#qui_"+k).addClass(addclass);
$("#qui_"+k+" .odds-change").html(sign + Math.abs(f));
}else $("#qui_"+k+" .odds-change").html('');
$('#qui_'+k+" .odds-last").html(d['sodds']);
$("#qui_"+k+" .odds-now").html(d['nodds']);
}
}
}else{
//최근 업데이트 시간
var last_minutes=$("input[name=remain_minutes]",'#ajaxForm').val();
}
if(trdata['tr_race_end']=='0'){
/* 팝업창 띄우기 */
if(trdata['tr_note']!='' && get_cookie('note'+trdata['tr_no'])==''){
$('#hd_pops_note').attr('data-cname','note'+trdata['tr_no']);
$('#hd_pops_note .note-content').html(trdata['tr_note']);
$('#hd_pops_note').modal('show');
}
else if(trdata['tr_cancel']=='1' && get_cookie('cancelnote'+trdata['tr_no'])==''){
if(trdata['tr_cancel_note']!='' ) var contens=trdata['tr_cancel_note'];
else var contents="경주가 취소되었습니다";
$('#hd_pops_note').attr('data-cname','cancelnote'+trdata['tr_no']);
$('#hd_pops_note .note-content').html(contents);
$('#hd_pops_note').modal('show');
}
else if(trdata['tr_delayed']=='1' && get_cookie('delayednote'+trdata['tr_no'])==''){
var contents="경주 시간이 연장되었습니다
"+trdata['tr_race_stime_org']+" → "+trdata['tr_race_stime'];
$('#hd_pops_note').attr('data-cname','delayednote'+trdata['tr_no']);
$('#hd_pops_note .note-content').html( contents);
$('#hd_pops_note').modal('show');
}else if(trdata['tr_broken']=='1' && get_cookie('brokennote'+trdata['tr_no'])==''){
var contents="데이터 수집이 지연되고 있습니다. 확인 후 조치 예정입니다";
$('#hd_pops_note').attr('data-cname','brokennote'+trdata['tr_no']);
$('#hd_pops_note .note-content').html( contents);
$('#hd_pops_note').modal('show');
}
}
//미로그인 또는 끝난 경주는 종
if(validuser==0 || tr_race_end=='1' || recall==0 ) return;
setTimeout(function() {
load_ajax()
}, 5000);
}
//분석 정보
blinkInterval='';
function get_racing_table_ajx(mode,recall){
var trdata='';
var formData = $("#ajaxForm").serialize();
var d, f,sign='';
var trdata;
$.ajax({
type: "POST",
url: "/h_race//race_table.ajax.php",
data:formData,
async: false,
dataType:'json',
success: function(data){
if(data.result==true ){
//console.log(data.message);
trdata=data.datas.trdata;
$('#tr_race_result').html(data.datas.html0);
$('#tr_race_result1').html(data.datas.html1);
$('#tr_race_result2').html(data.datas.html2);
$('#tr_race_result3').html(data.datas.html3);
$('#tr_race_result4').html(data.datas.html4);
$('#tr_race_result5').html(data.datas.html5);
$('#tr_race_result6').html(data.datas.html6);
$('#tr_race_result7').html(data.datas.html7);
$('#tr_race_result8').html(data.datas.html8);
$('#tr_race_result9').html(data.datas.html9);
$('#tr_race_result11').html(data.datas.html11);
$('#tr_test_result').html(data.datas.html_test);
float_special(1);
}else{
console.log(data.message);
}
}
});
var old_remain_minutes=$("input[name=remain_minutes]","#ajaxForm").val();
var tr_race_end=$("input[name=tr_race_end]","#ajaxForm").val();
//동일 조합 반전
$(".cell-hover").hover(function(){
$(this).parents('table').find('td').removeClass('hover font-bold');
var key=$(this).attr('data-key');
if(key=='') return;
$(this).parents('table').find("td.cell-hover").each(function(){
if($(this).attr('data-key')==key){
$(this).addClass('hover');
}
})
$(this).parents('table').find("td.odds-var").each(function(){
if($(this).attr('data-key')==key){
$(this).addClass('font-bold');
}
})
});
clearInterval(blinkInterval);
blinkInterval=setInterval("$('.blink').fadeOut().fadeIn();",1000);
}
function clock() {
var date = new Date();
// date Object를 받아오고
var month = date.getMonth();
// 달을 받아옵니다
var clockDate = date.getDate();
// 몇일인지 받아옵니다
var day = date.getDay();
// 요일을 받아옵니다.
var week = ['일', '월', '화', '수', '목', '금', '토'];
// 요일은 숫자형태로 리턴되기때문에 미리 배열을 만듭니다.
var hours = date.getHours();
// 시간을 받아오고
var minutes = date.getMinutes();
// 분도 받아옵니다.
var seconds = date.getSeconds();
// 초까지 받아온후
//`${month+1}월 ${clockDate}일 ${week[day]}요일` +
//`${hours < 10 ? `0${hours}` : hours}:${minutes < 10 ? `0${minutes }` : minutes }:${seconds < 10 ? `0${seconds }` : seconds }`;
var str= (hours < 10 ? '0' + hours: hours)+':'+(minutes < 10 ? '0'+minutes:minutes)+':'+(seconds < 10 ? '0'+seconds:seconds);
$("input[name=minutes]","#ajaxForm").val(minutes);
$("#clock").html(str);
// 월은 0부터 1월이기때문에 +1일을 해주고
// 시간 분 초는 한자리수이면 시계가 어색해보일까봐 10보다 작으면 앞에0을 붙혀주는 작업을 3항연산으로 했습니다.
}