--- --- const DAY=24*3600*1000; var Grps=[]; function calculatePartien(saison,date){ $('#partien').append('<h2 class="saison s_'+saison+'">Saison '+saison+'</h2>'); // prüfe ob alle Rundenpartien gespielt und generiere neue Rundenpartien var runde=0; date=new Date(date).getTime(); var steps=0; do { var done=[]; runde++; // stelle die 4er Gruppen, sowie Startgruppen zusammen Grps=[] if( runde == 1 ){ STARTLISTE.forEach( function(g){ var G=[]; g.forEach( function(v){ G.push( TEAMS.filter( (a) => (a.nt == v) )[0] ); } ); Grps.push(G); } ); //Grps.push( Object.values( TEAMS ).filter( (c) => c.start<=saison ).sort( (a,b) => ( b.nt < a.nt ) ? 1 : -1 ) ); } else { while( Tabelle.length > 3 ){ Grps.push( [ Tabelle.shift(), Tabelle.shift(), Tabelle.pop(), Tabelle.pop() ] ); } } var tmp='<h3 class="runde s_'+saison+' r_'+runde+'">Runde '+runde+(( Grps.length == 1 ) ? ' (Endrunde)' : '')+'</h3>'; $('#partien').append(tmp); if( runde == 1 ){ STARTLISTE_PARTIEN.forEach( function(v,i){ done.push( grpPartien(date,steps,saison,runde,i+1,v.slice(1)) ); steps+=v[0]; } ); } else { done.push( grpPartien(date,steps,saison,runde,1,[ 1,2, 4,3 ]) ); steps+=STEP; done.push( grpPartien(date,steps,saison,runde,2,[ 1,4, 2,3 ]) ); steps+=STEP; done.push( grpPartien(date,steps,saison,runde,3,[ 3,1, 2,4 ]) ); steps+=STEP; //done.push( grpPartien(date,steps,saison,runde,4,[ 2,1, 3,4 ]) ); steps++; //done.push( grpPartien(date,steps,saison,runde,5,[ 4,1, 3,2 ]) ); steps++; //done.push( grpPartien(date,steps,saison,runde,6,[ 3,1, 4,2 ]) ); steps++; } } while( done.reduce( (a,b) => a && b ) == true && Grps.length > 1 ); if( done.reduce( (a,b) => a && b ) == true ){ var Tabelle = calculatePunktestand( saison, runde, false ); } else { var Tabelle = [ { 'kontinent' : 'dummy', 'nt': 'xx', 'name': '<i>Platz 1</i>', 'link': '', 'manager': 'dummy', 'start': 27 }, { 'kontinent' : 'dummy', 'nt': 'xx', 'name': '<i>Platz 2</i>', 'link': '', 'manager': 'dummy', 'start': 27 }, { 'kontinent' : 'dummy', 'nt': 'xx', 'name': '<i>Platz 3</i>', 'link': '', 'manager': 'dummy', 'start': 27 }, { 'kontinent' : 'dummy', 'nt': 'xx', 'name': '<i>Platz 4</i>', 'link': '', 'manager': 'dummy', 'start': 27 }, { 'kontinent' : 'dummy', 'nt': 'xx', 'name': '<i>Platz 5</i>', 'link': '', 'manager': 'dummy', 'start': 27 }, { 'kontinent' : 'dummy', 'nt': 'xx', 'name': '<i>Platz 6</i>', 'link': '', 'manager': 'dummy', 'start': 27 }, { 'kontinent' : 'dummy', 'nt': 'xx', 'name': '<i>Platz 7</i>', 'link': '', 'manager': 'dummy', 'start': 27 }, { 'kontinent' : 'dummy', 'nt': 'xx', 'name': '<i>Platz 8</i>', 'link': '', 'manager': 'dummy', 'start': 27 } ] } Grps.shift(); //Grps.push( [ Tabelle.shift(), Tabelle.shift(), Tabelle.shift(), Tabelle.shift() ] ); Grps.push( [ Tabelle.shift(), Tabelle.shift(), Tabelle.shift(), Tabelle.shift(), Tabelle.shift() , Tabelle.shift() , Tabelle.shift() , Tabelle.shift() ] ); if( FINALTEAMS == 8 ){ runde='VF'; var tmp='<h3 class="runde s_'+saison+' r_'+runde+'">Viertelfinale</h3>'; $('#partien').append(tmp); steps+=FINALS_STEP; done.push( grpPartien( date,steps,saison,runde, 1, [ 8,1, 7,2, 6,3, 5,4 ] ) ); if( done.reduce( (a,b) => a && b ) == true ){ Grps.shift(); Grps.push([]); var p=ERGEBNISSE.filter( (a) => ( a.saison == saison && a.runde == runde && a.spieltag == 1 && a.partie == 1 ) )[0]; if( p.TH*1 >= p.TA*1 ){ Grps[0].push( TEAMS.filter( (a) => (a.nt == p.H.toLowerCase() ) )[0] ); } else { Grps[0].push( TEAMS.filter( (a) => (a.nt == p.A.toLowerCase() ) )[0] ); } var p=ERGEBNISSE.filter( (a) => ( a.saison == saison && a.runde == runde && a.spieltag == 1 && a.partie == 2 ) )[0]; if( p.TH*1 >= p.TA*1 ){ Grps[0].push( TEAMS.filter( (a) => (a.nt == p.H.toLowerCase() ) )[0] ); } else { Grps[0].push( TEAMS.filter( (a) => (a.nt == p.A.toLowerCase() ) )[0] ); } var p=ERGEBNISSE.filter( (a) => ( a.saison == saison && a.runde == runde && a.spieltag == 1 && a.partie == 3 ) )[0]; if( p.TH*1 >= p.TA*1 ){ Grps[0].push( TEAMS.filter( (a) => (a.nt == p.H.toLowerCase() ) )[0] ); } else { Grps[0].push( TEAMS.filter( (a) => (a.nt == p.A.toLowerCase() ) )[0] ); } var p=ERGEBNISSE.filter( (a) => ( a.saison == saison && a.runde == runde && a.spieltag == 1 && a.partie == 4 ) )[0]; if( p.TH*1 >= p.TA*1 ){ Grps[0].push( TEAMS.filter( (a) => (a.nt == p.H.toLowerCase() ) )[0] ); } else { Grps[0].push( TEAMS.filter( (a) => (a.nt == p.A.toLowerCase() ) )[0] ); } } else { Grps.shift(); var Tabelle = [ { 'kontinent' : 'dummy', 'nt': 'xx', 'name': '<i>Sieger VF1</i>', 'link': '', 'manager': 'dummy', 'start': 27 }, { 'kontinent' : 'dummy', 'nt': 'xx', 'name': '<i>Sieger VF2</i>', 'link': '', 'manager': 'dummy', 'start': 27 }, { 'kontinent' : 'dummy', 'nt': 'xx', 'name': '<i>Sieger VF3</i>', 'link': '', 'manager': 'dummy', 'start': 27 }, { 'kontinent' : 'dummy', 'nt': 'xx', 'name': '<i>Sieger VF4</i>', 'link': '', 'manager': 'dummy', 'start': 27 } ]; Grps.push( [ Tabelle.shift(), Tabelle.shift(), Tabelle.shift(), Tabelle.shift() ] ); } FINALTEAMS=4; } if( FINALTEAMS == 4 ){ runde='HF'; var tmp='<h3 class="runde s_'+saison+' r_'+runde+'">Halbfinale</h3>'; $('#partien').append(tmp); steps+=FINALS_STEP; done.push( grpPartien( date,steps,saison,runde, 1, [ 1,4, 2,3 ] ) ); } steps+=FINALS_STEP; if( done.reduce( (a,b) => a && b ) == true ){ Grps.shift(); Grps.push([]); var p=ERGEBNISSE.filter( (a) => ( a.saison == saison && a.runde == runde && a.spieltag == 1 && a.partie == 1 ) )[0]; if( p.TH*1 >= p.TA*1 ){ Grps[0].push( TEAMS.filter( (a) => (a.nt == p.H.toLowerCase() ) )[0] ); } else { Grps[0].push( TEAMS.filter( (a) => (a.nt == p.A.toLowerCase() ) )[0] ); } var p=ERGEBNISSE.filter( (a) => ( a.saison == saison && a.runde == runde && a.spieltag == 1 && a.partie == 2 ) )[0]; if( p.TH*1 >= p.TA*1 ){ Grps[0].push( TEAMS.filter( (a) => (a.nt == p.H.toLowerCase() ) )[0] ); } else { Grps[0].push( TEAMS.filter( (a) => (a.nt == p.A.toLowerCase() ) )[0] ); } runde='F' var tmp='<h3 class="runde s_'+saison+' r_'+runde+'">Finale</h3>'; $('#partien').append(tmp); done.push( grpPartien(date,steps++,saison,runde,1,[ 1,2 ]) ); } else { runde='F' var tmp='<h3 class="runde s_'+saison+' r_'+runde+'">Finale</h3>'; $('#partien').append(tmp); var Tabelle = [ { 'kontinent' : 'dummy', 'nt': 'xx', 'name': '<i>Sieger HF1</i>', 'link': '', 'manager': 'dummy', 'start': 27 }, { 'kontinent' : 'dummy', 'nt': 'xx', 'name': '<i>Sieger HF2</i>', 'link': '', 'manager': 'dummy', 'start': 27 } ]; Grps.shift(); Grps.push( [ Tabelle.shift(), Tabelle.shift() ] ); done.push( grpPartien(date,steps++,saison,runde,1,[ 1,2 ]) ); } } var St=0; function grpPartien( date,steps,saison,runde,spieltag,Bg ){ if( Grps.map( (a) => ( a.filter((b) => (b == undefined )).length > 0 ) )[0] ){ alert( 'Error: Einige Teams existieren nicht in der DB' ); return; } var done=true; var tmp=''; tmp+='<h4 id="r'+runde+'st'+spieltag+'" class="spieltag s_'+saison+' r_'+runde+' t_'+spieltag+'" ondblclick="getCsv('+saison+',\''+runde+'\','+spieltag+')">Spieltag '+spieltag+'</h4>'; tmp+='<table class="partien s_'+saison+' r_'+runde+' t_'+spieltag+'">'; var partie=0; do { var h1 = Bg.shift()-1; var a1 = Bg.shift()-1; partie++; Grps.forEach( function(v,i){ if( h1 == -1 || a1 == -1 ) return; var ergebnis=ERGEBNISSE.filter( (a) => ( a.saison == saison && a.runde == runde && a.spieltag == spieltag && a.H.toLowerCase() == v[h1].nt.toLowerCase() && a.A.toLowerCase() == v[a1].nt.toLowerCase() ) ); if( ergebnis.length == 1 ){ ergebnis=ergebnis[0]; var th=(( ergebnis.MID > 0 ) ? '<a href="https://ultrasoccer.de/match/?id='+ergebnis.MID+'" target="ultrasoccer">'+ergebnis.TH+'</a>' : ergebnis.TH ); var ta=(( ergebnis.MID > 0 ) ? '<a href="https://ultrasoccer.de/match/?id='+ergebnis.MID+'" target="ultrasoccer">'+ergebnis.TA+'</a>' : ergebnis.TA ); var dt=new Date(ergebnis.T).toJSON().slice(0,10); var st=STAT_SAISON.filter( (a) => ( a.MID == ergebnis.MID )).length == 12; ergebnis['partie']=partie; if( St != -1 ) St=spieltag; } else { if( St > 0 ){ var anker=St; setTimeout( function(){ window.location.href='#r'+runde+'st'+anker; },500 ); St=-1; } var th='-'; var ta='-'; var dt='<i>'+new Date(date+DAY*steps).toJSON().slice(0,10)+'</i> <sup>'+(steps+LIGASPIELTAG)+'</sup>'; var st=false; done=false; var match=''; } tmp+='<tr class="begegnungen h_'+v[h1].nt+' a_'+v[a1].nt+' '+(( st ) ? 'stats' : '')+'">'; tmp+='<td>'+dt+'</td>'; tmp+='<td data-id="'+v[h1].nt+'"><sup>'+v[h1].nt.toUpperCase()+'</sup> '+v[h1].name.replace(/\(NL\)/g,'')+' <img class="flags" src="./images/flags/'+(( v[h1].flag ) ? v[h1].flag : v[h1].nt.toLowerCase())+'.svg"></td>'; tmp+='<td> - </td>'; tmp+='<td data-id="'+v[a1].nt+'"><img class="flags" src="./images/flags/'+(( v[a1].flag ) ? v[a1].flag : v[a1].nt.toLowerCase())+'.svg"> '+v[a1].name.replace(/\(NL\)/g,'')+' <sup>'+v[a1].nt.toUpperCase()+'</sup></td>'; tmp+='<td data-mid="'+(( ergebnis.MID != undefined ) ? ergebnis.MID : '0' )+'">'+th+'</td>'; tmp+='<td onmouseenter="showLastResults(\''+v[h1].nt+'\',\''+v[a1].nt+'\')" onmouseleave="hideLastResults()" onclick="ignoreHideLastResults()">:</td>'; tmp+='<td>'+ta+'</td>'; tmp+='</tr>'; },spieltag ); } while( Bg.length > 0 ); tmp+='</table>'; $('#partien').append(tmp); return done; } function getCsv(saison, runde, spieltag){ var tbl=$('.partien.s_'+saison+'.r_'+runde+'.t_'+spieltag)[0]; var csv= Object.values(tbl.rows).map( function(v,i){ var T=[]; T.push( runde ); T.push( spieltag ); T.push( v.cells[0].innerText.slice(0,10) ); T.push( v.cells[1].dataset.id ); T.push( v.cells[3].dataset.id ); T.push( v.cells[4].innerText ); T.push( v.cells[6].innerText ); T.push( v.cells[4].dataset.mid ); return T; } ).join('\n'); $('#copypaste').toggleClass('d-none'); $('#copypaste textarea').text('runde,spieltag,T,H,A,TH,TA,MID\n'+csv); } function calculatePunktestand(saison,runde,show=true){ $.each( TEAMS, function( i,v ){ TEAMS[i][saison] = { P: 0, Tp: 0, Tn: 0, Td: 0, Tr: ['X'], Zwk: 0, active: (( TEAMS[i].start <= saison )) } } ); ERGEBNISSE.filter( (a) => ( ( a.saison == saison || saison == 0 ) && $.isNumeric(a.runde) && a.runde <= runde ) ).forEach( function( v,i ){ var H=TEAMS.filter( (a) => ( a.nt == v.H.toLowerCase() && ( saison == 0 || a.start*1 <= saison && ( a.ende*1 >= saison || a.ende == 0 ) ) ) ); var A=TEAMS.filter( (a) => ( a.nt == v.A.toLowerCase() && ( saison == 0 || a.start*1 <= saison && ( a.ende*1 >= saison || a.ende == 0 ) ) ) ); if( H.length == 0 ){ alert('Error: Team mit Code '+v.H+' fehlt!!' ); return; } if( A.length == 0 ){ alert('Error: Team mit Code '+v.A+' fehlt!!' ); return; } H=H[0][saison]; A=A[0][saison]; if( v.TH == '-' || v.TA == '-' ) return; if( parseInt(v.TH) > parseInt(v.TA) ){ H.P+=3; H.Tr.push('S'); A.Tr.push('N'); } else if( parseInt(v.TH) < parseInt(v.TA) ){ A.P+=3; H.Tr.push('N'); A.Tr.push('S'); } else { H.P+=1; A.P+=1; H.Tr.push('U'); A.Tr.push('U'); } H.Tp+=parseInt(v.TH); H.Tn+=parseInt(v.TA); H.Td=H.Tp-H.Tn; A.Tp+=parseInt(v.TA); A.Tn+=parseInt(v.TH); A.Td=A.Tp-A.Tn; STAT_ALL.filter((b) => ( b.MID == v.MID && v.H == b.nt )).forEach( function(c){ H.Zwk+=c.Zwk*1; } ); STAT_ALL.filter((b) => ( b.MID == v.MID && v.A == b.nt )).forEach( function(c){ A.Zwk+=c.Zwk*1; } ); } ); var startliste=STARTLISTE.reduce((a,b)=>(a)); var Tabelle=Object.values(TEAMS).filter( (a) => ( ( a.start <= saison || saison == 0 ) && ( startliste.indexOf( a.nt ) > -2 || ( saison == 0 && a.nt != 'xx' ) ) ) ) .sort( function(a,b){ return a[saison].P < b[saison].P || ( a[saison].P == b[saison].P && a[saison].Td < b[saison].Td ) || ( a[saison].P == b[saison].P && a[saison].Td == b[saison].Td && a[saison].Tp < b[saison].Tp ) || ( a[saison].P == b[saison].P && a[saison].Td == b[saison].Td && a[saison].Tp == b[saison].Tp && a.nt > b.nt ) ? 1 : -1; } ).filter( function(b){ if( ! b[saison].active && saison != 0 ) return false; if( b[saison].P == 0 && b[saison].Tp == 0 && b[saison].Tn == 0 ) return false; return true; } ); if( !show ){ return Tabelle; } var tabelle='#tabelle_P tbody'; $(tabelle).html(''); var TabelleLast= ( saison > 26 ) ? calculateAllPunktestand()[saison-27] : []; var M = calculateAllPunktestand().map((a) => ( a[0].nt )); Tabelle.forEach( function(v,i){ var border=SAISON_SETTINGS[saison - 26] == i+1 ? 'dashed ' : ''; var tmp='<td class="'+border+'">'+(i+1)+'</td>'; var t=v[saison].Tr.map( (a) => ( a != 'X' ) ? 1 : 0 ); var trophy=ERGEBNISSE.filter((a) => ( a.saison==SAISON-1 && a.runde=='F')).map((a) => ( a.TH > a.TA ? a.H : a.A ))[0]; trophy = trophy == undefined ? '' : trophy; var master=TabelleLast.length > 0 ? TabelleLast[0].nt : ''; if( t.length == 0 ) t.push(0); var S=t.reduce( (a,b) => a+b ); var pokal=ERGEBNISSE.filter((a) => ( ( a.saison*1 < saison || saison == 0 ) && a.runde=='F' && ( parseInt(a.TH) > parseInt(a.TA) && a.H.toLowerCase() == v.nt.toLowerCase() || parseInt(a.TH) < parseInt(a.TA) && a.A.toLowerCase() == v.nt.toLowerCase() ) ) ).length; var finalist=ERGEBNISSE.filter((a) => ( ( a.saison*1 < saison || saison == 0 ) && a.runde=='F' && ( parseInt(a.TH) < parseInt(a.TA) && a.H.toLowerCase() == v.nt.toLowerCase() || parseInt(a.TH) > parseInt(a.TA) && a.A.toLowerCase() == v.nt.toLowerCase() ) ) ).length; var meistertitel=M.filter( (a,i) => ( a == v.nt.toLowerCase() && ( i < saison - 26 || saison == 0 ) ) ).length; var managervoted=Object.values(MANAGERVOTING_WINNER).filter((a) => (a == v.nt)).length; tmp+='<td class="'+border+'">'+S+'</td>'; tmp+='<td class="'+border+'">'+(( MANAGERVOTING ) ? '<i class="fas fa-thumbs-up'+(( SAISON_TEAMVOTED.reduce((a,b) => (a.concat(b))).indexOf(v.nt) > -1 ) ? ' done" title="Manager dieses Teams hat sein Voting abgegeben!"' : '" title="Manager dieses Teams hat noch kein Voting abgegeben!"' )+' onclick="teamVoting(\''+v.nt+'\')"></i> ' : '') + '<img class="flags" src="./images/flags/'+(( v.flag ) ? v.flag : v.nt.toLowerCase())+'.svg"> <a href="javascript:calculateTeam('+((saison == 0 && false) ? SAISON_NOW : saison)+',\''+v.nt+'\')">'+v.name.replace(/\(NL\)/g,'<sup>'+v.nt.toUpperCase()+'</sup></a>')+' <a href="'+v.link+'" target="ultrasoccer"><i class="fas fa-link"></i></a>'+(( trophy.toLowerCase() == v.nt.toLowerCase() ) ? ' <i class="fas fa-trophy" title="Amtierender Titelgewinner"></i>' : '') + ' '+(( master.toLowerCase() == v.nt.toLowerCase() ) ? ' <i class="fas fa-crown" title="Amtierender Meister"></i>' : '') +' '+(( v.nt.toLowerCase() == MANAGERVOTING_TEAM ) ? ' <i class="managervoted fas fa-thumbs-up" title="Team der Saison, gewählt von den Managern"></i>' : '') + '</td>'; tmp+='<td class="'+border+'">'+((pokal>0) ? pokal : '')+'</td>'; tmp+='<td class="'+border+'">'+((meistertitel>0) ? meistertitel : '')+'</td>'; tmp+='<td class="'+border+'">'+((finalist>0) ? finalist : '')+'</td>'; tmp+='<td class="'+border+'">'+((managervoted>0) ? managervoted : '')+'</td>'; tmp+='<td class="'+border+'">'+v[saison].Tr.map( (a) => ( ( a == 'S') ? 1 : 0 ) ).reduce( (a,b) => a+b )+'</td>'; tmp+='<td class="'+border+'">'+v[saison].Tr.map( (a) => ( ( a == 'U') ? 1 : 0 ) ).reduce( (a,b) => a+b )+'</td>'; tmp+='<td class="'+border+'">'+v[saison].Tr.map( (a) => ( ( a == 'N') ? 1 : 0 ) ).reduce( (a,b) => a+b )+'</td>'; var hist=v[saison].Tr.map( (a) => '<'+a+'></'+a+'>' ).slice(-6).join(''); tmp+='<td class="'+border+'">'+hist+'</td>'; tmp+='<td class="'+border+'">'+v[saison].Tp+'/'+v[saison].Tn+'</td>'; tmp+='<td class="'+((v[saison].Td > 0 ) ? 'p' : (v[saison].Td == 0 ) ? 'u' : 'n')+' '+border+'">'+((v[saison].Td > 0 ) ? '+' : '') + v[saison].Td+'</td>'; tmp+='<td class="'+((v[saison].Zwk > 0 ) ? 'p' : (v[saison].Zwk == 0 ) ? 'u' : 'n')+' '+border+'">'+(v[saison].Zwk > 0 ? '+' : '')+(v[saison].Zwk / S).toFixed(2) +'</td>'; tmp+='<td class="'+border+'">'+v[saison].P+'</td>'; $(tabelle).append('<tr>'+tmp+'</tr>'); } ); } function calculateTabelle(saison,param){ var STATISTIK=saison == 0 ? STATISTIK_ALL : STATISTIK_SAISON; var n=Object.entries( STATISTIK ).sort( (a,b) => ( a[1][param] < b[1][param] || ( a[1][param] == b[1][param] && a[1].S > b[1].S ) ) ? 1 : -1 ).slice(0,20).map( function(v,i){ var team=TEAMS.filter( (a) => ( a.nt == v[1].nt ) ); var tr=document.createElement('tr'); if( team.length == 0 ){ var flag = document.createElement('img'); flag.classList='flags'; flag.src='./images/flags/xx.svg' flag.title='n/a'; var span = document.createElement('span'); span.innerText=''; } else { var face = document.createElement('td'); face.classList='face'; if( v[1].face.split(/_/g).length == 5 ){ var img = document.createElement('img'); img.src='images/facegenerator/fg_head_' + v[1].face.split(/_/g)[0] + '.png'; $(face).append(img); var img = document.createElement('img'); img.src='images/facegenerator/fg_hair_' + v[1].face.split(/_/g)[1] + '.png'; $(face).append(img); var img = document.createElement('img'); img.src='images/facegenerator/fg_beard_' + v[1].face.split(/_/g)[2] + '.png'; $(face).append(img); var img = document.createElement('img'); img.src='images/facegenerator/fg_mouth_' + v[1].face.split(/_/g)[3] + '.png'; $(face).append(img); var img = document.createElement('img'); img.src='images/facegenerator/fg_eyes_' + v[1].face.split(/_/g)[4] + '.png'; $(face).append(img); } var flag = document.createElement('img'); flag.classList='flags'; flag.src='./images/flags/'+(( team[0].flag ) ? team[0].flag : team[0].nt.toLowerCase())+'.svg'; flag.title=team[0].name.split('(NL)')[0].trim(); var span = document.createElement('span'); var a_ = document.createElement('a'); a_.href='javascript:calculateTeam('+saison+',\''+team[0].nt+'\')'; a_.innerHTML=team[0].name.replace(/\(NL\)/g,'<sup>'+team[0].nt.toUpperCase()+'</sup> '); span.append(a_); var a_ = document.createElement('a'); a_.href=team[0].link; a_.target='ultrasoccer'; var i_ = document.createElement('i'); i_.classList='fas fa-link'; a_.append(i_); span.append(a_); } var attr=document.createElement('span'); attr.innerHTML=((v[1].attr != undefined) ? v[1].attr : '').split(' ').map( (a) => ( a != '' && a != 'fas' ? '<i class="fas '+a+'"></i>' : '' ) ).join(''); var td=document.createElement('td'); td.innerText=(i+1); tr.append(td); var td=document.createElement('td'); td.innerText=(( STATISTIK[v[0]] != undefined ) ? STATISTIK[v[0]].S : 0); tr.append(td); tr.append(face); var td=document.createElement('td'); td.append(flag); td.append(attr); var a_=document.createElement('a'); a_.href='https://ultrasoccer.de/playerprofile/?id='+v[0]; a_.target='ultrasoccer'; a_.innerText=(( v[1].name != null ) ? v[1].name+' ('+(v[1].age*1+((saison == 0 ) ? SAISON_NOW : saison )*1-v[1].age_saison)+')' : v[0] ); td.append(a_); tr.append(td); var td=document.createElement('td'); td.append(span) tr.append(td); var td=document.createElement('td'); td.innerText = ( param == 'Z' && v[1][param] > 0 ) ? '+' + v[1][param] : v[1][param]; if( param == 'Z' ) td.classList = v[1][param] > 0 ? 'p' : ( v[1][param] == 0 ) ? 'u' : 'n'; tr.append(td); return tr; } ); $('#tabelle_'+param+' tbody').html( n ); $('.news').toggleClass('d-none', false); } function calculateTeam(saison,nt){ var STATISTIK=saison == 0 ? STATISTIK_ALL : STATISTIK_SAISON; var n=SPIELER.filter( (a) => ( a.nt == nt ) ).map( (b) => ( [ b.id, STATISTIK[b.id] ] ) ).filter( (c) => ( c[1] !== undefined ) ).map( function(v,i){ var team=TEAMS.filter( (a) => ( a.nt == v[1].nt ) ); var tr=document.createElement('tr'); if( team.length == 0 ){ var flag = document.createElement('img'); flag.classList='flags'; flag.src='./images/flags/xx.svg' flag.title='n/a'; var span = document.createElement('span'); span.innerText=''; } else { var face = document.createElement('td'); face.classList='face'; if( v[1].face.split(/_/g).length == 5 ){ var img = document.createElement('img'); img.src='images/facegenerator/fg_head_' + v[1].face.split(/_/g)[0] + '.png'; $(face).append(img); var img = document.createElement('img'); img.src='images/facegenerator/fg_hair_' + v[1].face.split(/_/g)[1] + '.png'; $(face).append(img); var img = document.createElement('img'); img.src='images/facegenerator/fg_beard_' + v[1].face.split(/_/g)[2] + '.png'; $(face).append(img); var img = document.createElement('img'); img.src='images/facegenerator/fg_mouth_' + v[1].face.split(/_/g)[3] + '.png'; $(face).append(img); var img = document.createElement('img'); img.src='images/facegenerator/fg_eyes_' + v[1].face.split(/_/g)[4] + '.png'; $(face).append(img); } else { face.innerHTML = ' '; } tr.append(face); var flag = document.createElement('img'); flag.classList='flags'; flag.src='./images/flags/'+(( team[0].flag ) ? team[0].flag : team[0].nt.toLowerCase())+'.svg'; flag.title=team[0].name.split('(NL)')[0].trim(); var span = document.createElement('span'); var a_ = document.createElement('a'); a_.href='javascript:calculateTeam('+saison+',\''+team[0].nt+'\')'; a_.innerHTML=team[0].name.replace(/\(NL\)/g,'<sup>'+team[0].nt.toUpperCase()+'</sup> '); span.append(a_); var a_ = document.createElement('a'); a_.href=team[0].link; a_.target='ultrasoccer'; var i_ = document.createElement('i'); i_.classList='fas fa-link'; a_.append(i_); span.append(a_); } var attr=document.createElement('span'); attr.innerHTML=((v[1].attr != undefined) ? v[1].attr : '').split(' ').map( (a) => ( a != '' && a != 'fas' ? '<i class="fas '+a+'"></i>' : '' ) ).join(''); var td=document.createElement('td'); td.append(flag); tr.append(td); var td=document.createElement('td'); td.append(attr); var a_=document.createElement('a'); a_.href='https://ultrasoccer.de/playerprofile/?id='+v[0]; a_.target='ultrasoccer'; a_.innerText=(( v[1].name != null ) ? v[1].name : v[0] ); td.append(a_); tr.append(td); var td=document.createElement('td'); td.innerText=(v[1].age*1+((saison == 0 ) ? SAISON_NOW : saison )*1-v[1].age_saison); tr.append(td); var td=document.createElement('td'); td.innerText=v[1].S+'/'+v[1].T+'/'+v[1].A; tr.append(td); var td=document.createElement('td'); td.innerText=v[1].Zpos+'/'+v[1].Zneg; td.classList=(( v[1].Z > 0 ) ? 'p' : (( v[1].Z < 0 ) ? 'n' : 'u' ) ) tr.append(td); return tr; } ); $('table.tabelle').toggleClass('d-none',true); $('#tabelle_team').toggleClass('d-none',false); $('#tabelle_team tbody').html( n ); } function calculateEwige(){ calculatePunktestand(0,'7'); calculateTabelle(0,'T'); calculateTabelle(0,'A'); calculateTabelle(0,'Z'); $('button.active').toggleClass('active',false); $('#ewige').toggleClass('active',true); $('table.tabelle').toggleClass('d-none',true); $('#tabelle_P').toggleClass('d-none'); $('h4.tabelle > button.punktestand').toggleClass('active',true); $('h4.tabelle').toggleClass('d-none',false); $('.news').toggleClass('d-none', true); } function backToActiveTable(){ $('table.tabelle').toggleClass('d-none',true); $('#tabelle_'+ $('button.active').text().toLowerCase() ).toggleClass('d-none'); } function calculateHistorie(){ $('#tabelle_historie thead tr').html('<th>Pl.</th>'); var T=[]; for( var i=0; i<=SAISON_NOW-26; i++){ $('#tabelle_historie thead tr').append('<th>'+(i+1)+'<sup>'+(i+26)+'</sup></th>'); T.push(calculatePunktestand(i+26,7,false)); } $('#tabelle_historie thead tr').append('<th class="rest"></th>'); var masters=ERGEBNISSE.filter((a) => ( a.runde == 'F' )).map((a) => (a.TH*1 > a.TA*1 ? a.H.toLowerCase(): a.A.toLowerCase() )); var mx=T.map((a)=>(a.length)).reduce((a,b) => (Math.max(a,b))); var tmp=''; for( var p=0; p<mx; p++ ){ tmp+='<tr><td>'+(p+1)+'</td>'; for( var i=0; i<=SAISON_NOW-26; i++){ var nt=T[i][p] != undefined ? T[i][p].nt : undefined; tmp+='<td class="'+(( MANAGERVOTING_WINNER[i+26] == nt && nt != undefined ) ? 'managervoted ' : '')+(( masters[i] == nt && nt != undefined ) ? 'master ' : '')+(( SAISON_SETTINGS[i] == p+1 ) ? 'dashed ' : '')+'">'+(( nt != undefined ) ? '<img class="flags" title="'+T[i][p].name+'" src="./images/flags/'+(( T[i][p].flag ) ? T[i][p].flag : T[i][p].nt.toLowerCase())+'.svg">' : '')+'</td>'; } tmp+='</tr>'; } $('#tabelle_historie tbody').html(tmp); $('table.tabelle').toggleClass('d-none',true); $('#tabelle_historie').toggleClass('d-none',false); $('button.active').toggleClass('active',false); $('#historie').toggleClass('active',true); $('h4.tabelle').toggleClass('d-none',true); $('.news').toggleClass('d-none', true); $('.rest')[0].scrollIntoView(); } var R=undefined; function showLastResults(H,A){ $('#lastresults').toggleClass('d-none',false); R=ERGEBNISSE.filter((a) => ( a.H==H && a.A==A || a.A==H && a.H==A) ).slice(-5); $('#lastresults table tbody').html(R.map( function(c){ var teamH=TEAMS.filter( (a) => ( a.nt == c.H ) ); teamHflag = teamH[0].flag ? teamH[0].flag : teamH[0].nt; var teamA=TEAMS.filter( (a) => ( a.nt == c.A ) ); teamAflag = teamA[0].flag ? teamA[0].flag : teamA[0].nt; return '<tr>\ <td>'+c.saison+'</td>\ <td>'+c.runde+'</td>\ <td><img class="flags" src="./images/flags/'+(( c.H == H ) ? teamHflag : teamAflag )+'.svg"></td>\ <td><img class="flags" src="./images/flags/'+(( c.A == A ) ? teamAflag : teamHflag )+'.svg"></td>\ <td><a href="https://ultrasoccer.de/match/?id='+c.MID+'" target="ultrasoccer">'+(( c.H == H ) ? c.TH : c.TA )+'</a></td>\ <td>:</td>\ <td><a href="https://ultrasoccer.de/match/?id='+c.MID+'" target="ultrasoccer">'+(( c.A == A ) ? c.TA : c.TH )+'</a></td>\ </tr>'; } ) ); var d=R.map( (a) => ( { 'TH' : (( a.H == H ) ? parseInt(a.TH) : parseInt(a.TA)), 'TA' : (( a.A == A ) ? parseInt(a.TA) : parseInt(a.TH)), 'S' : (( a.H == H ) ? parseInt(a.TH) > parseInt(a.TA) : parseInt(a.TA) > parseInt(a.TH)) ? 1 : 0, 'U' : parseInt(a.TH) == parseInt(a.TA) ? 1 : 0, 'N' : (( a.H == H ) ? parseInt(a.TH) < parseInt(a.TA) : parseInt(a.TA) < parseInt(a.TH)) ? 1 : 0 } ) ).reduce( (sum,val) => ( sum.TH += val.TH, sum.TA += val.TA, sum.S += val.S, sum.U += val.U, sum.N += val.N, sum ) ); $('#lastresults table tbody').append( '<tr class="lastresults_summe">\ <td colspan="4">Tore</td><\ <td>'+d.TH+'</td>\ <td>:</td>\ <td>'+d.TA+'</td>\ </tr>\ <tr class="lastresults_summe">\ <td colspan="4">S/U/N</td><\ <td>'+d.S+'</td>\ <td>'+d.U+'</td>\ <td>'+d.N+'</td>\ </tr>' ); } var ignore_hidelastresults=false; function hideLastResults(force=false){ if( !ignore_hidelastresults || force ) $('#lastresults').toggleClass('d-none',true); if( force ) ignore_hidelastresults=false; } function ignoreHideLastResults(){ ignore_hidelastresults=true; } function calculateAllPunktestand(){ var T=[]; for( var i=0; i<=SAISON_NOW-26; i++){ if( ERGEBNISSE.filter((a) => ( a.runde=='F' && a.saison==i+26 )).length == 1 ){ T.push( JSON.parse(JSON.stringify( calculatePunktestand(i+26,7,false) )) ); } } return T; } function teamVoting(nt){ var team=TEAMS.filter((a) => (a.nt == nt && a.ende == 0))[0]; var cd=prompt('TeamVote für \n\n' + team.name + '\n\n -> Bitte AuthCode eingeben!'); $.ajax({ 'type':"POST", 'async': false, 'url': 'vote.php', 'data' : { 'teamvote' : nt, 'secret' : cd }, 'dataType': 'json', 'success': function (data) { json = data; }, 'error': function (data) { json = data; } }); if( json[3] ){ alert( 'Teamvoting erfolgreich gesetzt!' ); } else { console.log( json ); } }