{"_id":"_design\/onumuz","_rev":"5050-3299d0764778a45f89c6ebb16bdc9a40","lists":{"advancedSearch":"function(head,req){provides('html',function(){var o='<ol>';var abilities=[];var p,player,abilityName,pos,finalList,classes;var cfs=[];var sss=[];var wfs=[];var sms=[];var ams=[];var cms=[];var dms=[];var ws=[];var sbs=[];var cbs=[];var gks=[];for(var ability in req.query){if(ability.indexOf('-min')>-1){abilityName=ability.split('-')[0];abilities.push(abilityName);}}while(row=getRow()){var inrange=true;for(var i=0;i<abilities.length;i++){abilityName=abilities[i];if(abilityName=='birth'){if((row.value['dob'].split('-')[0]<req.query[abilityName+'-min'])&&(req.query[abilityName+'-min']!='')){inrange=false;}else if((row.value['dob'].split('-')[0]>req.query[abilityName+'-max'])&&(req.query[abilityName+'-max']!='')){inrange=false;}}else if(abilityName=='height'||abilityName=='foot'||abilityName=='side'){if((row.value[abilityName]<req.query[abilityName+'-min'])&&(req.query[abilityName+'-min']!='')){inrange=false;}else if((row.value[abilityName]>req.query[abilityName+'-max'])&&(req.query[abilityName+'-max']!='')){inrange=false;}}else{if(!(abilityName in row.value.skills)||row.value.skills[abilityName]==null){inrange=false;}else if((row.value.skills[abilityName]<req.query[abilityName+'-min'])&&(req.query[abilityName+'-min']!='')){inrange=false;}else if((row.value.skills[abilityName]>req.query[abilityName+'-max'])&&(req.query[abilityName+'-max']!='')){inrange=false;}}}if(inrange){player=row.value;pos=player.positions[0];if(pos=='GK'){gks.push(player);}else if(pos=='CB'){cbs.push(player);}else if(pos=='SB'){sbs.push(player);}else if(pos=='W'){ws.push(player);}else if(pos=='DM'){dms.push(player);}else if(pos=='CM'){cms.push(player);}else if(pos=='AM'){ams.push(player);}else if(pos=='SM'){sms.push(player);}else if(pos=='WF'){wfs.push(player);}else if(pos=='SS'){sss.push(player);}else if(pos=='CF'){cfs.push(player);}}}finalList=cfs.concat(sss).concat(wfs).concat(sms).concat(ams).concat(cms).concat(dms).concat(ws).concat(sbs).concat(cbs).concat(gks);for(var i=0;i<finalList.length;i++){p=finalList[i];classes=p.positions[0].toLowerCase()+' '+p.authenticity+(p.retired?' retired':'');o+='<li class=\"'+classes+'\" data-name=\"'+p.name+'\" data-shortname=\"'+p.shortname+'\" data-dob=\"'+p.dob+'\" data-authenticity=\"'+p.authenticity+'\" data-nation='+p.nation+' data-nationalshirtnumber=\"'+p.nationalshirtnumber+'\" data-club=\"'+p.club.name+'\" data-shirtnumber=\"'+p.shirtnumber+'\" data-allskills='+toJSON(p.skills)+' data-positions='+toJSON(p.positions)+' data-side='+p.side+' data-foot='+p.foot+' data-height=\"'+p.height+'\" data-confirmedskills='+toJSON(p.confirmedskills)+' title=\"'+p.name+' | '+p.nation+' | '+((typeof p.club=='object')?p.club.name:p.clubname)+'\"><a href=\"player.php?p='+p._id+'\" id=equalplayer'+p._id+'><img class=nation src=\"..\/assets\/emblems\/'+p.nation+'.svg\" alt=\"-\"\/><\/a><span>'+(p.shortname.length>0?p.shortname:p.name)+'<\/span>'+((typeof p.club=='object')&&p.club.id.length>0?'<img src=\"..\/assets\/emblems\/'+p.club.id+'.svg\"\/>':'')+'<span><\/span><\/li>';}o+='<\/ol>';return o;});}","asJSON":"function(head,req){send('[');row=getRow();if(row){send(toJSON(row));while(row=getRow()){send(',');send(toJSON(row));}}send(']');}","clubGames":"function(head,req){provides('html',function(){var game,club,time;var o='';if('club' in req.query && req.query.club.length>0){club=req.query.club;o+='<ul>';while(row=getRow()){game=row.value;if(club==game.teams[0].id||club==game.teams[1].id){time=new Date(game.time).toString();o+='<li><a href=game.php?g='+game._id+'>'+game.teams[0].name+' - '+game.teams[1].name+(game.matchday?(' | '+game.matchday+' | '):'')+' -'+time.split(' ')[2]+'- '+time.split(' ')[4].substr(0,5)+'<\/a><\/li>';}}o+='<\/ul>';}return o;});}","clubGamesInSeason":"function(head,req){provides('html',function(){var game,season,time,clubIndex,opponentIndex,appearance,playerEntry,newPlayerEntry,playerIndex,gameEntry,role,totalMinutes,totalBench,outOfSquad,inGameSquad,startMin,endMin,minutes,roleType,gameExists,i,j,k;var o='<table><thead><tr><th><\/th>';var club=req.query.club;if('season' in req.query && req.query.season.length>0)season=req.query.season;var appearances=[];var clubGames=[];while(row=getRow()){game=row.value;if((club==game.teams[0].id||club==game.teams[1].id)&&(!season||game.season==season)){clubGames.push({'id':game._id,'date':game.time});time=new Date(game.time).toString();clubIndex=club==game.teams[0].id?0:1;opponentIndex=club==game.teams[0].id?1:0;o+='<th><a href=\"..\/..\/izlicesin\/game.php?g='+game._id+'\"><span><img src=\"..\/..\/assets\/emblems\/'+game.teams[opponentIndex].id+(game.teams[opponentIndex].png?'.png':'.svg')+'\" height=30px\/><\/span>'+game.teams[opponentIndex].name+'<br\/>'+(game.competition.indexOf('-')>-1?game.competition.split('-')[1]:game.competition)+'<br\/>'+time.split(' ')[1]+' '+time.split(' ')[2]+'<\/a><\/th>';for(i=0;i<game.teams[clubIndex].appearances.length;i++){appearance=game.teams[clubIndex].appearances[i];playerEntry={};newPlayerEntry=true;totalMinutes=0;totalBench=0;outOfSquad=0;inGameSquad=0;for(j=0;j<appearances.length;j++){if(appearances[j].id==appearance.id){playerEntry=appearances[j];playerIndex=j;newPlayerEntry=false;totalMinutes=playerEntry.totalMinutes;totalBench=playerEntry.totalBench;inGameSquad=playerEntry.inGameSquad;break;}}if(newPlayerEntry){playerEntry.id=appearance.id;playerEntry.name=appearance.shortname.length?appearance.shortname:appearance.name;playerEntry.games=[];}gameEntry={'id':game._id,'date':game.time};if('roles' in appearance){inGameSquad++;if(appearance.roles[0].name=='bench')totalBench++;gameEntry.roles=appearance.roles;for(j=0;j<appearance.roles.length;j++){role=appearance.roles[j];if(role.name!='bench'&&role.startMin&&role.endMin)totalMinutes+=parseInt(role.endMin.split('+')[0])-parseInt(role.startMin.split('+')[0]);}}else{gameEntry.out=true;}playerEntry.games.push(gameEntry);playerEntry.totalMinutes=totalMinutes;playerEntry.totalBench=totalBench;playerEntry.inGameSquad=inGameSquad;playerEntry.outOfSquad=outOfSquad;if(newPlayerEntry)appearances.push(playerEntry);else appearances[playerIndex]=playerEntry;}}}for(i=0;i<clubGames.length;i++){game=clubGames[i];for(j=0;j<appearances.length;j++){gameExists=false;playerEntry=appearances[j];outOfSquad=playerEntry.outOfSquad;for(k=0;k<playerEntry.games.length;k++){gameEntry=playerEntry.games[k];if(gameEntry.id==game.id){gameExists=true;break;}}if(!gameExists){for(k=0;k<playerEntry.games.length;k++){gameEntry=playerEntry.games[k];if(gameEntry.date>game.date){appearances[j].games.splice(k,0,{'id':game.id,'date':game.date});outOfSquad++;appearances[j].outOfSquad=outOfSquad;break;}else if(game.date>playerEntry.games[playerEntry.games.length-1].date){appearances[j].games.splice(playerEntry.games.length,0,{'id':game.id,'date':game.date});outOfSquad++;appearances[j].outOfSquad=outOfSquad;break;}}}}}appearances.sort(function(a,b){if(a.totalMinutes<b.totalMinutes)return 1;else if(a.totalMinutes>b.totalMinutes)return -1;else{if(a.totalBench<b.totalBench)return 1;else if(a.totalBench>b.totalBench)return -1;else{if(a.outOfSquad<b.outOfSquad)return -1;else if(a.outOfSquad>b.outOfSquad)return 1;else return 0;}}});o+='<\/tr><\/thead><tbody>';for(i=0;i<appearances.length;i++){playerEntry=appearances[i];o+='<tr><td>'+playerEntry.name+'<br\/><span>'+playerEntry.totalMinutes+'\\'<\/span><span>'+playerEntry.totalBench+' bench ('+playerEntry.inGameSquad+'\/'+(clubGames.length-playerEntry.outOfSquad)+')<\/span><\/td>';for(j=0;j<playerEntry.games.length;j++){gameEntry=playerEntry.games[j];o+='<td>';if('roles' in gameEntry){for(k=0;k<gameEntry.roles.length;k++){role=gameEntry.roles[k];startMin=role.name=='bench'?0:parseInt(role.startMin.split('+')[0]);endMin=role.endMin?parseInt(role.endMin.split('+')[0]):(k!=gameEntry.roles.length-1?parseInt(gameEntry.roles[k+1].startMin.split('+')[0]):90);minutes=endMin-startMin==0?1:endMin-startMin;roleType=role.name=='LB'||role.name=='RB'?'SB':(role.name=='LW'||role.name=='RW'?'W':(role.name=='LM'||role.name=='RM'?'SM':role.name));roleType=roleType.length<=2||roleType=='bench'?roleType.toLowerCase():roleType.substr(1,2).toLowerCase();o+='<span class='+roleType+' style=\"width:'+minutes+'px;\" title=\"'+role.name+'\">'+(['bench','GK'].indexOf(role.name)==-1&&minutes>role.name.length*8?role.name:'')+'<\/span>';}}else if(gameEntry.out){o+='<span class=delete data-game='+gameEntry.id+' data-player='+playerEntry.id+'><\/span>';}else{o+='<span class=out-of-squad><\/span>';}o+='<\/td>';}o+='<\/tr>';}o+='<\/tbody><\/table>';return o;});}","clubOptions":"function(head,req){var club;var c=req.query.competition;provides('html',function(){var o='';while(row=getRow()){club=row.value;if(c=='C'||(c.length==3&&club.country==c)||((c=='CL'||c=='SC')&&club.expectations.CL.length>0)||((c=='EL'||c=='SC')&&club.expectations.EL.length>0)||(c=='CFL'&&('CFL' in club.expectations)&&club.expectations.CFL.length>0)||c=='CWC'){o+='<option value='+row.id+'>'+club.name+'<\/option>';}}return o;});}","clubsAsJSON":"function(head,req){send('[');row=getRow();if(row){send(toJSON({'id':row.value._id,'name':row.value.name}));while(row=getRow()){send(',');send(toJSON({'id':row.value._id,'name':row.value.name}));}}send(']');}","equalPlayers":"function(head,req){provides('html',function(){var o='<div class='+req.query.c+'>';var criteria={'positioning':['att','def'],'mental':['agg','ten','tea'],'permanence':['frm','sta','ten'],'physical':['height','bod','agi'],'speed':['top','acc'],'quickness':['res','acc','agi'],'dribbling':['dra','drs','acc','top','agi'],'shortpass':['spa','sps'],'longpass':['lpa','lps'],'shoot':['sha','shp','sht'],'freekickgoal':['fka','swe','sha','shp'],'freekickassist':['fka','swe','lpa','lps'],'aerial':['height','jum','hea'],'keeper':['kee','res','def']};var a,fits,i,j,p,player,criterion,skillset,mainPosition,positionClass,group,absdiff,acceptableDiff,hideKeeper,diffs,normalizedDiff;var results=[];var almostEqualPlayers=[];var verySimilarPlayers=[];var equivalentPlayers=[];var likelyPlayers=[];var counter=0;var position=req.query.position;while(row=getRow()){player=row.value;player.seen=[];player.perfectfit=[];if(player._id!=req.query.id&&player.authenticity&&player.authenticity!='guess'){diffs=[];for(a in req.query){if((a in player.skills)&&(parseInt(player.skills[a])>0)){normalizedDiff=Math.abs(parseInt(player.skills[a])-parseInt(req.query[a]));if(a=='wfa'||a=='wfu')normalizedDiff=normalizedDiff*5;diffs.push(normalizedDiff);}else if(a=='height'){diffs.push(Math.ceil(Math.abs(parseInt(player[a])-parseInt(req.query[a]))\/2));}}counter++;for(i=0;i<Object.keys(criteria).length;i++){criterion=Object.keys(criteria)[i];skillset=criteria[criterion];if(counter==1)results.push([]);fits=true;absdiff=0;for(a in req.query){if(fits&&a.length>1&&a!='id'&&skillset.indexOf(a)>-1){if((a in player.skills)&&(parseInt(player.skills[a])>0)){if(a=='frm')acceptableDiff=0;else acceptableDiff=Math.ceil(skillset.length\/2);if(Math.abs(parseInt(player.skills[a])-parseInt(req.query[a]))>acceptableDiff)fits=false;absdiff+=Math.abs(parseInt(player.skills[a])-parseInt(req.query[a]));}else if((a=='height')&&(parseInt(player[a])>0)){if(Math.abs(parseInt(player[a])-parseInt(req.query[a]))>2)fits=false;absdiff+=Math.abs(parseInt(player[a])-parseInt(req.query[a]));}else{fits=false;}}}if(fits){if(player.seen.indexOf(criterion)==-1&&((criterion!='keeper'&&position!='GK')||position=='GK'))player.seen.push(criterion);results[i].push(player);}if(absdiff==0)player.perfectfit.push(criterion);}diffs=diffs.sort(function(a,b){return b-a;});if(diffs[0]<9&&diffs[4]<6)almostEqualPlayers.push(player);else if(diffs[0]<9&&diffs[9]<6)verySimilarPlayers.push(player);else if(diffs[0]<11&&diffs[4]<9&&diffs[9]<6)equivalentPlayers.push(player);else if(diffs[0]<19&&diffs[9]<11)likelyPlayers.push(player);}}if(almostEqualPlayers.length)results.unshift(almostEqualPlayers);else if(verySimilarPlayers.length)results.unshift(verySimilarPlayers);else if(equivalentPlayers.length)results.unshift(equivalentPlayers);else results.unshift(likelyPlayers);for(i=0;i<results.length;i++){var cfs=[];var sss=[];var wfs=[];var sms=[];var ams=[];var cms=[];var dms=[];var ws=[];var sbs=[];var cbs=[];var gks=[];var finalList=[];group=results[i];for(j=0;j<group.length;j++){player=group[j];mainPosition=player.positions[0];if(mainPosition=='GK'){gks.push(player);}else if(mainPosition=='CB'){cbs.push(player);}else if(mainPosition=='SB'){sbs.push(player);}else if(mainPosition=='W'){ws.push(player);}else if(mainPosition=='DM'){dms.push(player);}else if(mainPosition=='CM'){cms.push(player);}else if(mainPosition=='AM'){ams.push(player);}else if(mainPosition=='SM'){sms.push(player);}else if(mainPosition=='WF'){wfs.push(player);}else if(mainPosition=='SS'){sss.push(player);}else if(mainPosition=='CF'){cfs.push(player);}}finalList=finalList.concat(cfs).concat(sss).concat(wfs).concat(sms).concat(ams).concat(cms).concat(dms).concat(ws).concat(sbs).concat(cbs).concat(gks);results[i]=finalList;}for(i=0;i<results.length;i++){group=results[i];hideKeeper=i==results.length-1&&position!='GK';if(hideKeeper)continue;if(i==0)o+='<ol class=\"players equivalentplayers\">';else o+='<ol class=players><h5>'+Object.keys(criteria)[i-1]+'<\/h5><h6>'+criteria[Object.keys(criteria)[i-1]].join(' - ')+'<\/h6>';for(j=0;j<group.length;j++){p=group[j];mainPosition=p.positions[0];positionClass=mainPosition.toLowerCase()+' '+p.authenticity;o+='<li class=\"'+positionClass+(p.perfectfit.indexOf(Object.keys(criteria)[i-1])>-1||i==0?' perfectfit':'')+'\" data-name=\"'+p.name+'\" data-shortname=\"'+p.shortname+'\" data-dob=\"'+p.dob+'\" data-authenticity=\"'+p.authenticity+'\" data-nation='+p.nation+' data-nationalshirtnumber=\"'+p.nationalshirtnumber+'\" data-club=\"'+p.club.name+'\" data-shirtnumber=\"'+p.shirtnumber+'\" data-allskills='+toJSON(p.skills)+' data-positions='+toJSON(p.positions)+' data-side='+p.side+' data-foot='+p.foot+' data-height=\"'+p.height+'\" data-confirmedskills='+toJSON(p.confirmedskills)+' title=\"'+p.name+' | '+p.nation+' | '+((typeof p.club=='object')?p.club.name:p.clubname)+' | '+p.seen.join(' ')+'\"><a href=\"player.php?p='+p._id+'\" id=equalplayer'+p._id+'><img class=nation src=\"..\/assets\/emblems\/'+p.nation+'.svg\" alt=\"-\"\/><\/a><span>'+(p.shortname.length>0?p.shortname:p.name)+'<\/span>'+((typeof p.club=='object')&&p.club.id.length>0?'<img src=\"..\/assets\/emblems\/'+p.club.id+'.svg\"\/>':'<b>-<\/b>')+'<\/li>';}o+='<li class=toggle><\/li><\/ol>';}o+='<\/div>';return o;});}","listClubPlayers":"function(head,req){provides('html',function(){var p,pos,i,classes,name;var gks=[];var cbs=[];var sbs=[];var ws=[];var dms=[];var cms=[];var ams=[];var sms=[];var wfs=[];var sss=[];var cfs=[];while(row=getRow()){p=row.value;if(!p.youth){p.total=-(row.key[1]-3000);pos=p.positions[0];if(pos=='GK'){gks.push(p);}else if(pos=='CB'){cbs.push(p);}else if(pos=='SB'){sbs.push(p);}else if(pos=='W'){ws.push(p);}else if(pos=='DM'){dms.push(p);}else if(pos=='CM'){cms.push(p);}else if(pos=='AM'){ams.push(p);}else if(pos=='SM'){sms.push(p);}else if(pos=='WF'){wfs.push(p);}else if(pos=='SS'){sss.push(p);}else if(pos=='CF'){cfs.push(p);}}}var squad=gks.concat(cbs).concat(sbs).concat(ws).concat(dms).concat(cms).concat(ams).concat(sms).concat(wfs).concat(sss).concat(cfs);var o='<ul class=players>';for(i=0;i<squad.length;i++){p=squad[i];name=p.shortname.length>0?p.shortname:p.name;classes=p.positions[0].toLowerCase();o+='<li class=\"'+classes+'\"><a href=..\/player\/'+p._id+' title=\"'+name+'\">'+(p.shirtnumber?p.shirtnumber+' '+name:name)+'<\/a>'+'<img class=nation src=..\/emblems\/'+p.nation+'.svg title='+p.nation+'\/><\/li>';}o+='<\/ul>';return o;});}","listClubs":"function(head,req){provides('html',function(){var club,competition,country,expectationCL,expectationEL,expectationCFL,expectationL,counter;var o='<ul>';if('competition' in req.query && req.query.competition.length>0){competition=req.query.competition.length==3&&req.query.competition!='CFL'?'L':req.query.competition;while(row=getRow()){club=row.value;if('expectations' in club && Object.keys(club.expectations).indexOf(competition)>-1 && club.expectations[competition].length>0&&(club.country==req.query.competition||req.query.competition.length!=3||competition=='CFL')){o+='<li><a href=club.php?club='+row.id+'><img src=..\/assets\/emblems\/'+row.id+'.svg><span>'+club.name+'<\/span><\/a><\/li>';}}}else{counter=0;while(row=getRow()){club=row.value;if(counter==0){o+='<a href=competition.php?c='+club.country+'><img src=..\/assets\/emblems\/'+club.country+'.svg title=\"'+club.country+'\"><\/a>';}if(country!=club.country&&counter>0){o+='<\/ul><ul><a href=competition.php?c='+club.country+'><img src=..\/assets\/emblems\/'+club.country+'.svg title=\"'+club.country+'\"><\/a>';counter=0;expectationCL=false;expectationEL=false;expectationCFL=false;}if(counter==0&&!expectationCL&&club.expectations['CL'].length==0)o+='<li><\/li><hr\/>';if(counter==0&&!expectationEL&&club.expectations['CL'].length==0&&club.expectations['EL'].length==0)o+='<li><\/li><hr\/>';if(counter==0&&!expectationCFL&&club.expectations['CL'].length==0&&club.expectations['EL'].length==0&&(!('CFL' in club.expectations)||club.expectations['CFL'].length==0))o+='<li><\/li><hr\/>';if(counter>0&&(expectationCL!=club.expectations['CL'].length>0||expectationEL!=club.expectations['EL'].length>0||(expectationCFL!=(('CFL' in club.expectations)&&club.expectations['CFL'].length>0))))o+='<hr\/>';if(expectationCL&&club.expectations['CL'].length==0&&club.expectations['EL'].length==0)o+='<li><\/li><hr\/>';if(expectationCL&&club.expectations['CL'].length==0&&club.expectations['EL'].length==0&&(!('CFL' in club.expectations)||club.expectations['CFL'].length==0))o+='<li><\/li><hr\/>';if(expectationEL&&club.expectations['EL'].length==0&&(!('CFL' in club.expectations)||club.expectations['CFL'].length==0))o+='<li><\/li><hr\/>';if(counter>0&&(expectationL!=club.expectations['L'].length>0))o+='<hr\/>';o+='<li><a href=club.php?club='+row.id+'><img src=..\/assets\/emblems\/'+row.id+(club.png?'.png':'.svg')+' title=\"'+club.name+'\"><\/a><\/li>';expectationCL=club.expectations['CL'].length>0;expectationEL=club.expectations['EL'].length>0;expectationCFL=('CFL' in club.expectations)&&club.expectations['CFL'].length>0;expectationL=club.expectations['L'].length>0;country=club.country;counter++;}}o+='<\/ul>';return o;});}","listClubsSimply":"function(head,req){provides('html',function(){var club;var o='<ul>';while(row=getRow()){club=row.value;o+='<li id='+row.id+'><img src=..\/assets\/emblems\/'+row.id+(club.png?'.png':'.svg')+' title=\"'+club.name+'\"><\/li>';}o+='<\/ul>';return o;});}","listGames":"function(head,req){provides('html',function(){var game,country,competition;var uefacl=[];var uefael=[];var uefacfl=[];var eng=[];var esp=[];var deu=[];var ita=[];var fra=[];var tur=[];var wc=[];var ec=[];var nl=[];var friendlies=[];var o='';if('competition' in req.query && req.query.competition.length>0){o+='<ul>';while(row=getRow()){game=row.value;country=game.competition.split('-')[0].length==4?game.competition.split('-')[1]:game.competition.split('-')[0];if(country==req.query.competition){o+='<li><a href=game.php?g='+game._id+'>'+game.teams[0].name+' - '+game.teams[1].name+(game.matchday?(' | '+game.matchday+' | '):'')+' @ '+game.time.substring(2,10)+'<\/a><\/li>';}}o+='<\/ul>';}else{while(row=getRow()){game=row.value;country=game.competition.split('-')[0];if(country=='UEFA'){if(game.competition.split('-')[1]=='CL'||game.competition.split('-')[1]=='SC')uefacl.push(game);else if(game.competition.split('-')[1]=='EL')uefael.push(game);else uefacfl.push(game);}else if(game.competition=='FIFA-CWC')uefacl.push(game);else if(country=='ENG')eng.push(game);else if(country=='ESP')esp.push(game);else if(country=='ITA')ita.push(game);else if(country=='FRA')fra.push(game);else if(country=='DEU')deu.push(game);else if(country=='TUR')tur.push(game);else if(country=='WC')wc.push(game);else if(country=='EC')ec.push(game);else if(country=='NL')nl.push(game);else friendlies.push(game);}var competitions=[uefacl,uefael,uefacfl,eng,esp,deu,ita,fra,tur,wc,ec,nl,friendlies];var emblems=['CL','EL','CFL','ENG','ESP','DEU','ITA','FRA','TUR','WC','EC','NL',''];for(var i=0;i<competitions.length;i++){o+=(emblems[i].length>0?('<a href=competition.php?c='+emblems[i]+'><img width='+(emblems[i]=='WC'?'40':'60')+' src=\"..\/assets\/emblems\/'+emblems[i]+'.svg\"'+(i>2&&i<9?' style=\"border:1px solid #BBB;\"':'')+'\/><\/a>'):'');o+='<ul>';competition=competitions[i];for(var j=0;j<competition.length;j++){game=competition[j];o+='<li><a href=game.php?g='+game._id+'>'+game.teams[0].name+' - '+game.teams[1].name+(game.matchday?(' | '+game.matchday+' | '):'')+' @ '+game.time.substring(2,10)+'<\/a><\/li>';}o+='<\/ul>';}}return o;});}","listNationalPlayers":"function(head,req){provides('html',function(){var squad,p,pos,i,j,classes;var nationals=[];var reserves=[];var citizens=[];while(row=getRow()){p=row.value;p.total=-(row.key[2]-3000);if(('nationalshirtnumber' in p)&&p.nationalshirtnumber.length>0&&p.nationalshirtnumber!='-')nationals.push(p);else if(p.nationalshirtnumber=='-')reserves.push(p);else citizens.push(p);}var o='';for(i=0;i<3;i++){var gks=[];var cbs=[];var sbs=[];var ws=[];var dms=[];var cms=[];var ams=[];var sms=[];var wfs=[];var sss=[];var cfs=[];if(i==0)squad=nationals;else if(i==1)squad=reserves;else squad=citizens;for(j=0;j<squad.length;j++){p=squad[j];pos=p.positions[0];if(pos=='GK'){gks.push(p);}else if(pos=='CB'){cbs.push(p);}else if(pos=='SB'){sbs.push(p);}else if(pos=='W'){ws.push(p);}else if(pos=='DM'){dms.push(p);}else if(pos=='CM'){cms.push(p);}else if(pos=='AM'){ams.push(p);}else if(pos=='SM'){sms.push(p);}else if(pos=='WF'){wfs.push(p);}else if(pos=='SS'){sss.push(p);}else if(pos=='CF'){cfs.push(p);}}squad=gks.concat(cbs).concat(sbs).concat(ws).concat(dms).concat(cms).concat(ams).concat(sms).concat(wfs).concat(sss).concat(cfs);o+='<ol class=players>';for(var j=0;j<squad.length;j++){p=squad[j];classes=p.positions[0].toLowerCase()+' '+p.authenticity+(p.retired?' retired':'');o+='<li class=\"'+classes+'\" data-name=\"'+p.name+'\" data-shortname=\"'+p.shortname+'\" data-dob=\"'+p.dob+'\" data-authenticity=\"'+p.authenticity+'\" data-nation='+p.nation+' data-nationalshirtnumber=\"'+p.nationalshirtnumber+'\" data-club=\"'+p.club.name+'\" data-shirtnumber=\"'+p.shirtnumber+'\" data-allskills='+toJSON(p.skills)+' data-positions='+toJSON(p.positions)+' data-side='+p.side+' data-foot='+p.foot+' data-height=\"'+p.height+'\" data-confirmedskills='+toJSON(p.confirmedskills)+' title='+p.total+'><a href=player.php?p='+p._id+'>'+(p.nationalshirtnumber||'>')+'<\/a><span title=\"'+p.name+'\">'+(p.shortname.length>0?p.shortname:p.name)+'<\/span>'+((typeof p.club=='object')&&p.club.id.length>0?'<img src=\"..\/assets\/emblems\/'+p.club.id+'.svg\" title=\"'+p.club.name+'\"\/>':'')+'<span><\/span><\/li>';}o+='<\/ol>';}return o;});}","listNations":"function(head,req){provides('html',function(){var nation,continent;var o='<ul>';var counter=0;while(row=getRow()){nation=row.value;if(continent!=nation.continent&&counter>0){o+='<\/ul><ul>';counter=0;}o+='<li><a href=nation.php?nation='+row.id+'><img src=..\/assets\/emblems\/'+row.id+'.svg alt=\"'+nation.name+'\" title=\"'+nation.name+'\"><\/a><\/li>';continent=nation.continent;counter++;}o+='<\/ul>';return o;});}","listPlayerButtons":"function(head,req){provides('html',function(){var l='';var p,pos,i,shirtnumber,classes,position,pitch;var gks=[];var cbs=[];var rcbs=[];var ccbs=[];var lcbs=[];var sbs=[];var rbs=[];var lbs=[];var dms=[];var cms=[];var rcms=[];var ccms=[];var lcms=[];var ams=[];var sms=[];var rms=[];var lms=[];var wfs=[];var sss=[];var rfs=[];var lfs=[];var cfs=[];var squadByPosition=[];var positionNames=[];if('formation' in req.query){var formation=req.query.formation;var regions=formation.split('-');var defenders=parseInt(regions[0]);var midfielders=parseInt(regions[1]);var attackers=parseInt(regions[2]);}while(row=getRow()){p=row.value;pos=p.positions[0];if(pos=='GK'){gks.push(p);}else if(pos=='CB'){cbs.push(p);if(p.side.indexOf('R')>-1)rcbs.push(p);else if(p.side.indexOf('L')>-1)lcbs.push(p);else ccbs.push(p);}else if(pos=='SB'||pos=='W'){sbs.push(p);if((p.side.indexOf('R')>-1)||(p.side=='B'&&p.foot=='R'))rbs.push(p);else lbs.push(p);}else if(pos=='DM'){if(midfielders%2==0)cms.push(p);else{dms.push(p);ccms.push(p);}}else if(pos=='CM'){cms.push(p);}else if(pos=='AM'){if(regions&®ions.length==3)cms.push(p);else ams.push(p);}else if(pos=='SM'){sms.push(p);if(regions&®ions.length==3){if((p.side.indexOf('R')>-1)||(p.side=='B'&&p.foot=='R'))rfs.push(p);else lfs.push(p);}else{if((p.side.indexOf('R')>-1)||(p.side=='B'&&p.foot=='R'))rms.push(p);else lms.push(p);}}else if(pos=='WF'){wfs.push(p);if((p.side.indexOf('R')>-1)||(p.side=='B'&&p.foot=='R'))rfs.push(p);else lfs.push(p);}else if(pos=='SS'){if(regions&®ions.length==3&&p.side=='B')cfs.push(p);else{if(p.positions.indexOf('SM')==-1&&p.positions.indexOf('WF')==-1&&p.positions.indexOf('AM')>-1){ams.push(p);}else{wfs.push(p);if((p.side.indexOf('R')>-1)||(p.side=='B'&&p.foot=='R'))rfs.push(p);else lfs.push(p);}}}else if(pos=='CF'){if(cfs.length>0&&cfs.length>rfs.length&&cfs.length>lfs.length&&p.positions.indexOf('WF')>-1){wfs.push(p);if(p.side.indexOf('L')>-1)lfs.push(p);else if(p.side.indexOf('R')>-1)rfs.push(p);else{if(rfs.length>lfs.length)lfs.push(p);else rfs.push(p);}}else cfs.push(p);}}var squad=gks.concat(cbs).concat(sbs).concat(dms).concat(cms).concat(ams).concat(sms).concat(wfs).concat(cfs);var youth=0;for(i=0;i<squad.length;i++){p=squad[i];if((req.query.teamType=='club'&&p.youth)||(req.query.teamType=='nation'&&p.nationalshirtnumber=='-'))youth++;}var o='';if(squad.length){if(youth){o+='<span class=firstteam>'+(squad.length-youth)+'<\/span><span class=youthteam>'+youth+'<\/span>';}else{o+='<span>'+squad.length+'<\/span>';}}for(i=0;i<squad.length;i++){p=squad[i];shirtnumber=req.query.teamType=='club'?(p.shirtnumber?p.shirtnumber:'-'):(p.nationalshirtnumber?p.nationalshirtnumber:'');classes=p.positions[0].toLowerCase()+' '+p.authenticity+((req.query.teamType=='club'&&p.youth)||(req.query.teamType=='nation'&&p.nationalshirtnumber=='-')?' youth invisible':'');l+='<a href=\"player.php?p='+p._id+'\" id=equalplayer'+p._id+'><li class=\"'+classes+'\" data-name=\"'+p.name+'\" data-shortname=\"'+p.shortname+'\" data-dob=\"'+p.dob+'\" data-authenticity='+p.authenticity+' data-nation='+p.nation+' data-nationalshirtnumber=\"'+p.nationalshirtnumber+'\" data-club=\"'+p.club.name+'\" data-shirtnumber=\"'+p.shirtnumber+'\" data-allskills='+toJSON(p.skills)+' data-positions='+toJSON(p.positions)+' data-side='+p.side+' data-foot='+p.foot+' data-height=\"'+p.height+'\" data-confirmedskills='+toJSON(p.confirmedskills)+' title=\"'+p.name+' | '+p.nation+' | '+((typeof p.club=='object')?p.club.name:p.clubname)+'\"'+'><i>'+shirtnumber+'<\/i><span>'+(p.shortname.length>0?p.shortname:p.name)+'<\/span><\/li><\/a>';}o+='<ol>'+l+'<\/ol>';if(defenders==4){if(ccbs.length>0){if(rcbs.length>lcbs.length)lcbs=lcbs.concat(ccbs);else rcbs=rcbs.concat(ccbs);}if(lcbs.length==0){lcbs.push(rcbs.splice(0,1)[0]);}if(lcbs.length==1&&rcbs.length>2){var rcbsToSort=rcbs.slice(1);rcbsToSort=rcbsToSort.sort(function(a,b){if(a.skills.wfa+a.skills.wfu<b.skills.wfa+b.skills.wfu)return 1;else if(a.skills.wfa+a.skills.wfu>b.skills.wfa+b.skills.wfu)return -1;else return 0;});lcbs.push(rcbs.splice(rcbs.indexOf(rcbsToSort[0]),1)[0]);}}if(formation=='4-1-4-1'){cms=ams.concat(cms);}else if(midfielders%2==0&&attackers==2){cms=cms.concat(ams);for(i=0;i<cfs.length;i++){p=cfs[i];if(p.positions.indexOf('SM')>-1){if(p.side.indexOf('R')>-1)rms.push(p);else if(p.side.indexOf('L')>-1)lms.push(p);else{if(lms.length<rms.length)lms.push(p);else rms.push(p);}}else{if(p.side.indexOf('R')>-1)rfs.push(p);else if(p.side.indexOf('L')>-1)lfs.push(p);else{if(lfs.length<rfs.length)lfs.push(p);else rfs.push(p);}}}for(i=0;i<cms.length;i++){if(lms.length==0||rms.length==0){p=cms[i];if(p.positions.indexOf('SM')>-1){if(p.side.indexOf('R')>-1)rms.push(p);else if(p.side.indexOf('L')>-1)lms.push(p);else{if(lms.length<rms.length)lms.push(p);else rms.push(p);}cms.splice(i,1);}}}}var lcmsCount=0;var rcmsCount=0;for(i=0;i<cms.length;i++){p=cms[i];if(p.side.indexOf('L')>-1||(p.foot=='L'&&p.side=='B'))lcmsCount++;else if(p.side.indexOf('R')>-1||(p.foot=='R'&&p.side=='B'))rcmsCount++;}var cmsSorted=cms.slice(0);cmsSorted=cmsSorted.sort(function(a,b){if(a.skills.wfa+a.skills.wfu<b.skills.wfa+b.skills.wfu)return 1;else if(a.skills.wfa+a.skills.wfu>b.skills.wfa+b.skills.wfu)return -1;else return 0;});for(i=0;i<cms.length;i++){p=cms[i];if(p.side.indexOf('R')>-1)rcms.push(p);else if(p.side.indexOf('L')>-1||(p.foot=='L'&&p.side=='B'))lcms.push(p);else{if((midfielders%2==1)&&p.positions.indexOf('DM')>-1&&ccms.length<2&&p.positions.indexOf('AM')==-1){ccms.push(p);}else{if(lcmsCount<rcmsCount){if(lcms.length<=rcms.length||cmsSorted.indexOf(p)<Math.floor(cms.length\/2)-1){lcms.push(p);}else{rcms.push(p);}}else{if(rcms.length<=lcms.length||cmsSorted.indexOf(p)<Math.floor(cms.length\/2)-1){rcms.push(p);}else{lcms.push(p);}}}}}if(formation=='4-2-3-1'){rms=rms.concat(rfs);lms=lms.concat(lfs);squadByPosition=[gks,rbs,rcbs,lcbs,lbs,rcms,lcms,rms,ams,lms,cfs];positionNames=['gks','rbs','rcbs','lcbs','lbs','rcms','lcms','rms','ams','lms','cfs'];}else if(formation=='4-3-3'){squadByPosition=[gks,rbs,rcbs,lcbs,lbs,rcms,ccms,lcms,rfs,cfs,lfs];positionNames=['gks','rbs','rcbs','lcbs','lbs','rcms','ccms','lcms','rfs','cfs','lfs'];}else if(formation=='4-1-4-1'){rms=rms.concat(rfs);lms=lms.concat(lfs);var rams=rcms;var lams=lcms;squadByPosition=[gks,rbs,rcbs,lcbs,lbs,ccms,rms,rams,lams,lms,cfs];positionNames=['gks','rbs','rcbs','lcbs','lbs','ccms','rms','rams','lams','lms','cfs'];}else if(formation=='4-4-2'){squadByPosition=[gks,rbs,rcbs,lcbs,lbs,rms,rcms,lcms,lms,rfs,lfs];positionNames=['gks','rbs','rcbs','lcbs','lbs','rms','rcms','lcms','lms','rfs','lfs'];}pitch='<div>';if('formation' in req.query){for(i=0;i<squadByPosition.length;i++){position=squadByPosition[i];if(i==0)var divide=1;else if(positionNames[i].indexOf('b')>-1)var divide=defenders;else if((midfielders==4&&positionNames[i].indexOf('m')>-1)||(positionNames[i].indexOf('cm')>-1)||(midfielders==1&&positionNames[i].indexOf('ccm')>-1))var divide=midfielders;else if(positionNames[i].indexOf('m')>-1||(regions.length==3&&positionNames[i].indexOf('f')>-1))var divide=attackers;else var divide=1;pitch+='<div class='+positionNames[i]+' style=\"width:'+(100\/divide)+'%\">';for(var j=0;j<position.length;j++){p=position[j];if(p){pitch+='<div class='+p._id+'>'+(p.shortname?p.shortname:p.name)+'<\/div>';}}pitch+='<\/div>';}}o+=pitch+'<\/div>';return o;});}","listPlayersAlphabetic":"function(head,req){provides('html',function(){var p,name,shortname,classes;var w=req.query.w.toLowerCase();var o='<ol>';while(row=getRow()){p=row.value;name=p.name.toLowerCase();shortname=p.shortname.toLowerCase();if(name.indexOf(w)==0||shortname.indexOf(w)==0||name.indexOf(' '+w)>0||shortname.indexOf(' '+w)>0||(w.lastIndexOf(' ')!=w.length-1&&(name.indexOf(w.substr(w.lastIndexOf(' ')+1))==0||shortname.indexOf(w.substr(w.lastIndexOf(' ')+1))==0))){classes=p.positions[0].toLowerCase()+' '+p.authenticity+(p.retired?' retired':'');o+='<li class=\"'+classes+'\" data-name=\"'+p.name+'\" data-shortname=\"'+p.shortname+'\" data-dob=\"'+p.dob+'\" data-authenticity=\"'+p.authenticity+'\" data-nation='+p.nation+' data-nationalshirtnumber=\"'+p.nationalshirtnumber+'\" data-club=\"'+p.club.name+'\" data-shirtnumber=\"'+p.shirtnumber+'\" data-allskills='+toJSON(p.skills)+' data-positions='+toJSON(p.positions)+' data-side='+p.side+' data-foot='+p.foot+' data-height=\"'+p.height+'\" data-confirmedskills='+toJSON(p.confirmedskills)+' title=\"'+p.name+' | '+p.nation+' | '+((typeof p.club=='object')?p.club.name:p.clubname)+'\"'+'><a href=\"player.php?p='+p._id+'\" id=equalplayer'+p._id+'><img class=nation src=\"..\/assets\/emblems\/'+p.nation+'.svg\" alt=\"-\"\/><\/a><span>'+(p.shortname.length>0?p.shortname:p.name)+'<\/span>'+((typeof p.club=='object')&&p.club.id.length>0?'<img src=\"..\/assets\/emblems\/'+p.club.id+'.svg\"\/>':'')+'<span><\/span><\/li>';}}o+='<\/ol>';return o;});}","listPlayersByPosition":"function(head,req){provides('html',function(){var p,pos,i,classes;var gks=[];var cbs=[];var sbs=[];var ws=[];var dms=[];var cms=[];var ams=[];var sms=[];var wfs=[];var sss=[];var cfs=[];while(row=getRow()){p=row.value;p.total=-(row.key[1]-3000);pos=p.positions[0];if(pos=='GK'){gks.push(p);}else if(pos=='CB'){cbs.push(p);}else if(pos=='SB'){sbs.push(p);}else if(pos=='W'){ws.push(p);}else if(pos=='DM'){dms.push(p);}else if(pos=='CM'){cms.push(p);}else if(pos=='AM'){ams.push(p);}else if(pos=='SM'){sms.push(p);}else if(pos=='WF'){wfs.push(p);}else if(pos=='SS'){sss.push(p);}else if(pos=='CF'){cfs.push(p);}}var squad=gks.concat(cbs).concat(sbs).concat(ws).concat(dms).concat(cms).concat(ams).concat(sms).concat(wfs).concat(sss).concat(cfs);var youth=0;for(i=0;i<squad.length;i++){p=squad[i];if(p.youth)youth++;}var o='';if(squad.length){if(youth){o+='<span class=firstteam>'+(squad.length-youth)+'<\/span><span class=youthteam>'+youth+'<\/span>';}else{o+='<span>'+squad.length+'<\/span>';}}o+='<ol class=players>';for(i=0;i<squad.length;i++){p=squad[i];classes=p.positions[0].toLowerCase()+' '+p.authenticity+(p.youth?' youth invisible':'')+(p.retired?' retired':'')+(p.footballdata?' footballdata':'')+(p.apifootball?' apifootball':'');o+='<li class=\"'+classes+'\" data-name=\"'+p.name+'\" data-shortname=\"'+p.shortname+'\" data-dob=\"'+p.dob+'\" data-authenticity=\"'+p.authenticity+'\" data-nation='+p.nation+' data-nationalshirtnumber=\"'+p.nationalshirtnumber+'\" data-club=\"'+p.club.name+'\" data-shirtnumber=\"'+p.shirtnumber+'\" data-allskills='+toJSON(p.skills)+' data-positions='+toJSON(p.positions)+' data-side='+p.side+' data-foot='+p.foot+' data-height=\"'+p.height+'\" data-confirmedskills='+toJSON(p.confirmedskills)+' title='+p.total+'><a href=player.php?p='+p._id+'>'+(p.shirtnumber||'-')+'<\/a><span title=\"'+p.name+'\">'+(p.shortname.length>0?p.shortname:p.name)+'<\/span><img class=nation src=\"..\/assets\/emblems\/'+p.nation+'.svg\" title=\"'+p.nation+'\"\/><span><\/span><\/li>';}o+='<\/ol>';return o;});}","nationOptions":"function(head,req){var nation;var c=req.query.competition;provides('html',function(){var o='';while(row=getRow()){nation=row.value;if(c=='N'||c=='WC-Q'||((c=='EC-Q'||c=='NL')&&nation.continent=='Europe')||(nation.expectation.length>0&&(c=='WC'||(c=='EC'&&nation.continent=='Europe')))){o+='<option value='+row.id+'>'+nation.name+'<\/option>';}}return o;});}","rankPlayers":"function(head,req){provides('html',function(){var o='';var playerStrengths,p,strength,score,skillsObject,skills,skill,pos,total,i,j,k,region;var totalcount=0;var count=0;var strengths={'possession':{'att':1,'spa':3,'sps':1,'lpa':1,'lps':1,'tec':1,'tea':1,'wfa':8.3,'wfu':4.2,'s':['PLA','ONE','PAS','TAC','TRG']},'attacking':{'att':5,'agg':4,'tea':1,'s':['LIN','MAR']},'tempo':{'sta':7,'top':3},'speed':{'top':7,'acc':3},'narrow-space':{'agi':3,'dra':3,'tec':3,'wfa':8.3,'wfu':4.2},'short-range-dribbling':{'acc':1,'agi':1,'dra':5,'drs':1,'agg':1,'wfa':8.3,'wfu':4.2,'s':['DRI']},'long-range-dribbling':{'top':3,'acc':3,'drs':4},'pass':{'spa':7,'sps':2,'wfa':8.3,'wfu':4.2,'s':['PAS','OUT']},'cross':{'lpa':6,'lps':2,'swe':1,'wfa':8.3,'wfu':4.2,'s':['PAS','OUT']},'technical':{'tec':3,'dra':3,'spa':2,'lpa':2},'duel':{'bod':6,'res':2,'agi':1,'height':1},'finishing-head':{'res':2,'hea':6,'agg':2,'s':['GOA','POS']},'finishing-foot':{'res':1,'sha':2,'sht':4,'agg':2,'wfa':8.3,'wfu':4.2,'s':['GOA','OOS','POS','ONE']},'shot':{'sha':4,'shp':1,'sht':2,'swe':1,'agg':1,'wfa':8.3,'wfu':4.2,'s':['GOA','OOS','OUT']},'longshot':{'sha':1,'shp':7,'sht':1,'wfa':8.3,'wfu':4.2,'s':['LON']},'freekick-shot':{'sha':2,'shp':3,'fka':3,'swe':2,'s':['LON']},'freekick-cross':{'lpa':2,'lps':4,'fka':2,'swe':2,'s':['PAS']},'heading':{'hea':4,'jum':4,'height':2,'s':['POS']},'mental-attack':{'att':4,'agg':4,'ten':1,'tea':1},'mental-defence':{'def':5,'ten':5,'s':['DFL']},'space-defence':{'def':2,'top':4,'acc':4,'s':['COV','SLI']},'man-defence':{'def':6,'bod':1,'res':1,'agi':1,'ten':1,'s':['MRK']},'clash':{'bod':8,'height':2},'aerial-clash':{'bod':2,'jum':4,'height':4},'press':{'def':4,'sta':2,'top':1,'acc':2,'res':1},'keeper':{'def':2,'bod':1,'res':2,'agi':1,'kee':2,'height':2,'s':['OOK','PEK']}};var keys=Object.keys(strengths);var suitability={'wide-defence':['WID','DRI','space-defence','speed','tempo','cross','long-range-dribbling','short-range-dribbling','man-defence','mental-defence','possession','pass','duel','clash','press'],'wide-midfield':['WID','DRI','PAS','short-range-dribbling','long-range-dribbling','cross','speed','technical','possession','narrow-space','pass','attacking','press','space-defence'],'wide-attack':['WID','DRI','short-range-dribbling','long-range-dribbling','narrow-space','shot','finishing-foot','technical','attacking','mental-attack','speed','cross','pass'],'center-defence':['DFL','MRK','COV','SLI','man-defence','space-defence','mental-defence','aerial-clash','clash','duel','heading','press','speed'],'center-midfield':['CEN','PLA','PAS','LON','MAR','DRI','pass','possession','tempo','cross','technical','narrow-space','short-range-dribbling','long-range-dribbling','space-defence','aerial-clash','clash','duel','press','longshot','heading'],'center-attack':['GOA','OOS','LIN','TRG','CEN','POS','DRI','MAR','attacking','finishing-foot','shot','mental-attack','narrow-space','technical','clash','duel','aerial-clash','finishing-head','heading','short-range-dribbling','long-range-dribbling']};var regions=Object.keys(suitability);while(row=getRow()){playerStrengths={};p=row.value;for(i=0;i<keys.length;i++){strength=keys[i];score=0;skillsObject=strengths[strength];skills=Object.keys(skillsObject);for(j=0;j<skills.length;j++){skill=skills[j];if(skill=='height')score+=(p.height-100)*skillsObject[skill];else if(skill!='s')score+=p.skills[skill]*skillsObject[skill];else{for(k=0;k<p.skills.special.length;k++){if(skillsObject['s'].indexOf(p.skills.special[k])>-1){score+=(skillsObject['s'].length-skillsObject['s'].indexOf(p.skills.special[k]))*7;}}}}playerStrengths[strength]=score;}playerSuitability={};for(i=0;i<regions.length;i++){region=regions[i];score=0;special=[];for(j=0;j<suitability[region].length;j++){strength=suitability[region][j];if(strength==strength.toUpperCase())special.push(strength);else score+=playerStrengths[strength]*(suitability[region].length-j);}playerSuitability[region]=score\/((j-special.length)*(j-special.length+1)\/2);for(j=0;j<special.length;j++){if(p.skills.special.indexOf(special[j])>-1)playerSuitability[region]+=(special.length-j)*3;}}pos=p.positions[0];total=row.key;if(count==0){o+='<div class=level><h4>'+total+'<\/h4><ul>';}if(count>=40){o+='<\/ul><\/div><div class=level><h4>'+total+'<\/h4><ul>';count=0;}o+='<li title=\"'+total+' | '+p.club.name+'\" data-club=\"'+p.club.id+'\" data-height='+p.height+' data-allskills='+toJSON(p.skills)+' data-strengths='+toJSON(playerStrengths)+' data-suitability='+toJSON(playerSuitability)+'><span class=\"'+pos.toLowerCase()+' '+p.authenticity+'\">'+(p.shortname.length>0?p.shortname:p.name)+'<\/span><\/li>';count++;totalcount++;}o+='<h3>'+totalcount+'<\/h3><\/ul><\/div>';return o;});}","rankPositions":"function(head,req){provides('html',function(){var o='';var p,playerStrengths,strength,score,skillsObject,skills,skill,playerSuitability,region,special,pos,lastPos,i,j,k,classes;var strengths={'possession':{'att':1,'spa':3,'sps':1,'lpa':1,'lps':1,'tec':1,'tea':1,'wfa':8.3,'wfu':4.2,'s':['PLA','ONE','PAS','TAC','TRG']},'attacking':{'att':5,'agg':4,'tea':1,'s':['LIN','MAR']},'tempo':{'sta':7,'top':3},'speed':{'top':7,'acc':3},'narrow-space':{'agi':3,'dra':3,'tec':3,'wfa':8.3,'wfu':4.2},'short-range-dribbling':{'acc':1,'agi':1,'dra':5,'drs':1,'agg':1,'wfa':8.3,'wfu':4.2,'s':['DRI']},'long-range-dribbling':{'top':3,'acc':3,'drs':4},'pass':{'spa':7,'sps':2,'wfa':8.3,'wfu':4.2,'s':['PAS','OUT']},'cross':{'lpa':6,'lps':2,'swe':1,'wfa':8.3,'wfu':4.2,'s':['PAS','OUT']},'technical':{'tec':3,'dra':3,'spa':2,'lpa':2},'duel':{'bod':6,'res':2,'agi':1,'height':1},'finishing-head':{'res':2,'hea':6,'agg':2,'s':['GOA','POS']},'finishing-foot':{'res':1,'sha':2,'sht':4,'agg':2,'wfa':8.3,'wfu':4.2,'s':['GOA','OOS','POS','ONE']},'shot':{'sha':4,'shp':1,'sht':2,'swe':1,'agg':1,'wfa':8.3,'wfu':4.2,'s':['GOA','OOS','OUT']},'longshot':{'sha':1,'shp':7,'sht':1,'wfa':8.3,'wfu':4.2,'s':['LON']},'freekick-shot':{'sha':2,'shp':3,'fka':3,'swe':2,'s':['LON']},'freekick-cross':{'lpa':2,'lps':4,'fka':2,'swe':2,'s':['PAS']},'heading':{'hea':4,'jum':4,'height':2,'s':['POS']},'mental-attack':{'att':4,'agg':4,'ten':1,'tea':1},'mental-defence':{'def':5,'ten':5,'s':['DFL']},'space-defence':{'def':2,'top':4,'acc':4,'s':['COV','SLI']},'man-defence':{'def':6,'bod':1,'res':1,'agi':1,'ten':1,'s':['MRK']},'clash':{'bod':8,'height':2},'aerial-clash':{'bod':2,'jum':4,'height':4},'press':{'def':4,'sta':2,'top':1,'acc':2,'res':1},'keeper':{'def':2,'bod':1,'res':2,'agi':1,'kee':2,'height':2,'s':['OOK','PEK']}};var keys=Object.keys(strengths);var suitability={'wide-defence':['WID','DRI','space-defence','speed','tempo','cross','long-range-dribbling','short-range-dribbling','man-defence','mental-defence','possession','pass','duel','clash','press'],'wide-midfield':['WID','DRI','PAS','short-range-dribbling','long-range-dribbling','cross','speed','technical','possession','narrow-space','pass','attacking','press','space-defence'],'wide-attack':['WID','DRI','short-range-dribbling','long-range-dribbling','narrow-space','shot','finishing-foot','technical','attacking','mental-attack','speed','cross','pass'],'center-defence':['DFL','MRK','COV','SLI','man-defence','space-defence','mental-defence','aerial-clash','clash','duel','heading','press','speed'],'center-midfield':['CEN','PLA','PAS','LON','MAR','DRI','pass','possession','tempo','cross','technical','narrow-space','short-range-dribbling','long-range-dribbling','space-defence','aerial-clash','clash','duel','press','longshot','heading'],'center-attack':['GOA','OOS','LIN','TRG','CEN','POS','DRI','MAR','attacking','finishing-foot','shot','mental-attack','narrow-space','technical','clash','duel','aerial-clash','finishing-head','heading','short-range-dribbling','long-range-dribbling']};var regions=Object.keys(suitability);while(row=getRow()){p=row.value;playerStrengths=null;playerSuitability=null;if(Object.keys(p.skills).length==31){playerStrengths={};for(i=0;i<keys.length;i++){strength=keys[i];score=0;skillsObject=strengths[strength];skills=Object.keys(skillsObject);for(j=0;j<skills.length;j++){skill=skills[j];if(skill=='height')score+=(p.height-100)*skillsObject[skill];else if(skill!='s')score+=p.skills[skill]*skillsObject[skill];else{for(k=0;k<p.skills.special.length;k++){if(skillsObject['s'].indexOf(p.skills.special[k])>-1){score+=(skillsObject['s'].length-skillsObject['s'].indexOf(p.skills.special[k]))*7;}}}}playerStrengths[strength]=score;}playerSuitability={};for(i=0;i<regions.length;i++){region=regions[i];score=0;special=[];for(j=0;j<suitability[region].length;j++){strength=suitability[region][j];if(strength==strength.toUpperCase())special.push(strength);else score+=playerStrengths[strength]*(suitability[region].length-j);}playerSuitability[region]=score\/((j-special.length)*(j-special.length+1)\/2);for(j=0;j<special.length;j++){if(p.skills.special.indexOf(special[j])>-1)playerSuitability[region]+=(special.length-j)*3;}}}pos=p.positions[0];if(pos=='SB'||pos=='W')pos='SBW';else if(pos=='SM'||pos=='WF')pos='SMWF';if(pos!=lastPos){if(lastPos!=null)o+='<\/ul>';o+='<ul class=players>';}classes=p.positions[0].toLowerCase()+' '+p.authenticity+(p.retired?' retired':'');o+='<li id='+p._id+' class=\"'+classes+'\" data-name=\"'+p.name+'\" data-shortname=\"'+p.shortname+'\" data-dob='+p.dob+' data-authenticity='+p.authenticity+' data-height='+p.height+' data-side='+p.side+' data-foot='+p.foot+' data-nation='+p.nation+' data-nationalshirtnumber=\"'+(p.nationalshirtnumber?p.nationalshirtnumber:'')+'\" data-club=\"'+(p.club.name?p.club.name:'')+'\" data-shirtnumber=\"'+(p.shirtnumber?p.shirtnumber:'')+'\" data-allskills='+toJSON(p.skills)+' data-positions='+toJSON(p.positions)+' data-confirmedskills='+toJSON(p.confirmedskills)+(playerStrengths?' data-strengths='+toJSON(playerStrengths):'')+(playerSuitability?' data-suitability='+toJSON(playerSuitability):'')+'><a href=player.php?p='+p._id+'><img class=nation title='+p.nation+' src=..\/assets\/emblems\/'+p.nation+'.svg><\/a><span title=\"'+p.name+'\">'+(p.shortname.length>0?p.shortname:p.name)+'<\/span>'+(p.club.name?'<img title=\"'+p.club.name+'\" src=..\/assets\/emblems\/'+p.club.id+'.svg>':'')+'<span><\/span><\/li>';lastPos=pos;}o+='<\/ul>';return o;});}","selectClub":"function(head,req){provides('html',function(){var o='';while(row=getRow()){o+='<option value='+row.value._id+(req.query.currentClub==row.value._id?' selected':'')+'>'+row.value.name+'<\/option>';}return o;});}","similarPlayers":"function(head,req){provides('html',function(){var playerID=req.query.playerID;var p,currentPlayer,currentPlayerAverage,playerStrengths,strength,score,skillsObject,skills,skill,coefficient,closenessA,closenessB,diffA,diffB,player,strengthDiff,abilityDiff,diff,i,j,k,detail,found,region,special,playerSuitability,suitabilityDiff,averageStrength;var strengths={'possession':{'att':1,'spa':3,'sps':1,'lpa':1,'lps':1,'tec':1,'tea':1,'wfa':8.3,'wfu':4.2,'s':['PLA','ONE','PAS','TAC','TRG']},'attacking':{'att':5,'agg':4,'tea':1,'s':['LIN','MAR']},'tempo':{'sta':7,'top':3},'speed':{'top':7,'acc':3},'narrow-space':{'agi':3,'dra':3,'tec':3,'wfa':8.3,'wfu':4.2},'short-range-dribbling':{'acc':1,'agi':1,'dra':5,'drs':1,'agg':1,'wfa':8.3,'wfu':4.2,'s':['DRI']},'long-range-dribbling':{'top':3,'acc':3,'drs':4},'pass':{'spa':7,'sps':2,'wfa':8.3,'wfu':4.2,'s':['PAS','OUT']},'cross':{'lpa':6,'lps':2,'swe':1,'wfa':8.3,'wfu':4.2,'s':['PAS','OUT']},'technical':{'tec':3,'dra':3,'spa':2,'lpa':2},'duel':{'bod':6,'res':2,'agi':1,'height':1},'finishing-head':{'res':2,'hea':6,'agg':2,'s':['GOA','POS']},'finishing-foot':{'res':1,'sha':2,'sht':4,'agg':2,'wfa':8.3,'wfu':4.2,'s':['GOA','OOS','POS','ONE']},'shot':{'sha':4,'shp':1,'sht':2,'swe':1,'agg':1,'wfa':8.3,'wfu':4.2,'s':['GOA','OOS','OUT']},'longshot':{'sha':1,'shp':7,'sht':1,'wfa':8.3,'wfu':4.2,'s':['LON']},'freekick-shot':{'sha':2,'shp':3,'fka':3,'swe':2,'s':['LON']},'freekick-cross':{'lpa':2,'lps':4,'fka':2,'swe':2,'s':['PAS']},'heading':{'hea':4,'jum':4,'height':2,'s':['POS']},'mental-attack':{'att':4,'agg':4,'ten':1,'tea':1},'mental-defence':{'def':5,'ten':5,'s':['DFL']},'space-defence':{'def':2,'top':4,'acc':4,'s':['COV','SLI']},'man-defence':{'def':6,'bod':1,'res':1,'agi':1,'ten':1,'s':['MRK']},'clash':{'bod':8,'height':2},'aerial-clash':{'bod':2,'jum':4,'height':4},'press':{'def':4,'sta':2,'top':1,'acc':2,'res':1},'keeper':{'def':2,'bod':1,'res':2,'agi':1,'kee':2,'height':2,'s':['OOK','PEK']}};var keys=Object.keys(strengths);var suitability={'wide-defence':['WID','DRI','space-defence','speed','tempo','cross','long-range-dribbling','short-range-dribbling','man-defence','mental-defence','possession','pass','duel','clash','press'],'wide-midfield':['WID','DRI','PAS','short-range-dribbling','long-range-dribbling','cross','speed','technical','possession','narrow-space','pass','attacking','press','space-defence'],'wide-attack':['WID','DRI','short-range-dribbling','long-range-dribbling','narrow-space','shot','finishing-foot','technical','attacking','mental-attack','speed','cross','pass'],'center-defence':['DFL','MRK','COV','SLI','man-defence','space-defence','mental-defence','aerial-clash','clash','duel','heading','press','speed'],'center-midfield':['CEN','PLA','PAS','LON','MAR','DRI','pass','possession','tempo','cross','technical','narrow-space','short-range-dribbling','long-range-dribbling','space-defence','aerial-clash','clash','duel','press','longshot','heading'],'center-attack':['GOA','OOS','LIN','TRG','CEN','POS','DRI','MAR','attacking','finishing-foot','shot','mental-attack','narrow-space','technical','clash','duel','aerial-clash','finishing-head','heading','short-range-dribbling','long-range-dribbling']};var regions=Object.keys(suitability);var allPlayers=[];var currentPlayerStrengths={};var currentPlayerSuitability={};while(row=getRow()){p=row.value;if(p.authenticity=='guess')continue;playerStrengths={};for(i=0;i<keys.length;i++){strength=keys[i];score=0;skillsObject=strengths[strength];skills=Object.keys(skillsObject);for(j=0;j<skills.length;j++){skill=skills[j];if(skill=='height')score+=(p.height-100)*skillsObject[skill];else if(skill!='s')score+=p.skills[skill]*skillsObject[skill];else{for(k=0;k<p.skills.special.length;k++){if(skillsObject['s'].indexOf(p.skills.special[k])>-1){score+=(skillsObject['s'].length-skillsObject['s'].indexOf(p.skills.special[k]))*7;}}}}if(playerID==p._id)currentPlayerStrengths[strength]=score;playerStrengths[strength]=score;}averageStrength=0;for(i=0;i<keys.length;i++){averageStrength+=playerStrengths[keys[i]];}averageStrength=averageStrength\/i;playerSuitability={};for(i=0;i<regions.length;i++){region=regions[i];score=0;special=[];for(j=0;j<suitability[region].length;j++){strength=suitability[region][j];if(strength==strength.toUpperCase())special.push(strength);else score+=playerStrengths[strength]*(suitability[region].length-j);}playerSuitability[region]=score\/((j-special.length)*(j-special.length+1)\/2);for(j=0;j<special.length;j++){if(p.skills.special.indexOf(special[j])>-1)playerSuitability[region]+=(special.length-j)*3;}}if(playerID==p._id){currentPlayer=p;currentPlayerSuitability=playerSuitability;currentPlayerAverage=averageStrength;}else allPlayers.push({'raw':p,'strengths':playerStrengths,'average':averageStrength,'suitability':playerSuitability});}if(!currentPlayer)return'';var club=currentPlayer.club.id;var date=new Date().toISOString().split('-');var year=parseInt(date[0]);var month=date[1].substring(0,1)=='0'?parseInt(date[1].substring(1,2)):parseInt(date[1]);var season=month>7?year.toString()+'-'+(year+1).toString():(year-1).toString()+'-'+year.toString();var o='<div class=plyr><a href=\"..\/player.php?p='+currentPlayer._id+'\">'+(currentPlayer.shortname.length>0?currentPlayer.shortname:currentPlayer.name)+'<\/a><h2>'+Math.round(currentPlayerAverage)+'<\/h2><img class=ntn src=\"..\/..\/assets\/emblems\/'+currentPlayer.nation+'.svg\"\/>'+(club.length>0?'<a href=\"club.php?c='+club+'&s='+season+'\"><img src=\"..\/..\/assets\/emblems\/'+club+'.svg\"\/><\/a>':'');keys.sort(function(a,b){if(currentPlayerStrengths[a]<currentPlayerStrengths[b])return 1;else if(currentPlayerStrengths[a]>currentPlayerStrengths[b])return -1;else return 0;});var bestStrengthsMinimum=(currentPlayerStrengths[keys[0]]+currentPlayerAverage)\/2;var bestStrengthsListed=false;var lessThanAverage=false;for(i=0;i<keys.length;i++){if(!bestStrengthsListed&¤tPlayerStrengths[keys[i]]<bestStrengthsMinimum){bestStrengthsListed=true;o+='<hr\/>';}if(!lessThanAverage&¤tPlayerStrengths[keys[i]]<currentPlayerAverage){lessThanAverage=true;o+='<hr\/>';}o+=keys[i]+' : '+Math.round(currentPlayerStrengths[keys[i]]);if(lessThanAverage||currentPlayerStrengths[keys[i]]>=currentPlayerAverage){o+='<br\/>';}}regions.sort(function(a,b){if(currentPlayerSuitability[a]<currentPlayerSuitability[b])return 1;else if(currentPlayerSuitability[a]>currentPlayerSuitability[b])return -1;else return 0;});var minimumSuitability=currentPlayerSuitability[regions[regions.length-1]];for(i=0;i<regions.length;i++){region=regions[i];o+='<br\/>'+region+' '+Math.round(currentPlayerSuitability[region]);}o+='<\/div><div class=plyrs>';skills=['att','def','bod','sta','top','acc','res','agi','dra','drs','spa','sps','lpa','lps','sha','shp','sht','fka','swe','hea','jum','tec','agg','ten','kee','tea','frm','wfa','wfu'];var primarySkills={'GK':{9:['def','kee'],8:['res'],7:['ten'],6:['agi'],5:['bod','acc'],4:['top'],3:['spa','sps','lpa','lps'],2:['dra','drs','jum','tec','agg']},'CB':{9:['def','bod'],8:['top','acc'],7:['res'],6:['agi','ten'],5:['att','spa','sps','lpa','lps'],4:['dra','drs'],3:['sta'],2:['hea','jum','tec','agg','tea']},'SB':{9:['top','acc'],8:['def'],7:['bod','dra','drs'],6:['agi','spa','sps','lpa','lps'],5:['att','sta'],4:['agg','tea'],3:['tec'],2:['res','jum','ten']},'W':{9:['top','acc'],8:['dra','drs'],7:['spa','sps','lpa','lps'],6:['att','def','bod','agi'],5:['sta','agg'],4:['tea'],3:['tec'],2:['jum']},'DM':{9:['bod'],8:['def','spa','sps','lpa','lps'],7:['top','acc'],6:['att','agi'],5:['res','dra','drs'],4:['tec','agg','ten','tea'],3:['sta'],2:['jum']},'CM':{9:['spa','sps'],8:['lpa','lps'],7:['def','top','acc'],6:['att','bod','agi','agg','tea'],5:['sta','dra','drs'],4:['sha','shp','sht','tec'],3:['ten'],2:['jum']},'AM':{9:['spa','sps'],8:['agi','dra','drs'],7:['att','top','acc','lpa','lps'],6:['def','bod','agg','tea'],5:['sha','shp','sht','tec'],4:['sta'],3:['ten'],2:['jum']},'SM':{9:['top','acc'],8:['agi','dra','drs'],7:['att','spa','sps','lpa','lps'],6:['def','sha','shp','sht','agg'],5:['bod','tec'],4:['tea'],3:['sta'],2:['jum','ten']},'WF':{9:['top','acc'],8:['agi','dra','drs'],7:['att','lpa','lps','agg'],6:['def','sha','shp','sht'],5:['bod','tec'],4:['spa','sps','tea'],3:['sta'],2:['jum','ten']},'SS':{9:['top','acc'],8:['agi','dra','drs'],7:['att','sha','shp','sht','agg'],6:['def','spa','sps','lpa','lps','tec','tea'],5:['bod'],4:['res'],3:['jum'],2:['ten']},'CF':{9:['att','bod'],8:['agi','top','acc','agg'],7:['dra','drs','sha','shp','sht'],6:['def','res','tea'],5:['tec'],4:['hea'],3:['spa','sps','jum'],2:['lpa','lps','ten']}};var mainPosition=currentPlayer.positions[0];var specialAbilities=currentPlayer.skills.special;allPlayers.sort(function(a,b){closenessA=Math.pow(a.raw.height-currentPlayer.height,2);closenessB=Math.pow(b.raw.height-currentPlayer.height,2);for(i=0;i<skills.length;i++){skill=skills[i];diffA=Math.abs(a.raw.skills[skill]-currentPlayer.skills[skill]);diffB=Math.abs(b.raw.skills[skill]-currentPlayer.skills[skill]);if(['wfa','wfu'].indexOf(skill)>-1){closenessA+=50*diffA;closenessB+=50*diffB;}else if(skill=='frm'){closenessA+=10*diffA;closenessB+=10*diffB;}else{found=false;for(j=2;j<=Object.keys(primarySkills[mainPosition]).length+1;j++){if(primarySkills[mainPosition][j].indexOf(skill)>-1){closenessA+=j*diffA;closenessB+=j*diffB;found=true;break;}}if(!found){closenessA+=diffA;closenessB+=diffB;}}}for(i=0;i<specialAbilities.length;i++){if(a.raw.skills['special'].indexOf(specialAbilities[i])==-1)closenessA+=50;if(b.raw.skills['special'].indexOf(specialAbilities[i])==-1)closenessB+=50;}for(i=0;i<a.raw.skills['special'].length;i++){if(specialAbilities.indexOf(a.raw.skills['special'][i])==-1)closenessA+=50;}for(i=0;i<b.raw.skills['special'].length;i++){if(specialAbilities.indexOf(b.raw.skills['special'][i])==-1)closenessB+=50;}for(i=0;i<keys.length;i++){strength=keys[i];coefficient=currentPlayerStrengths[strength]\/currentPlayerAverage;coefficient=currentPlayerStrengths[strength]>bestStrengthsMinimum?Math.pow(coefficient,3):currentPlayerStrengths[strength]>currentPlayerAverage?Math.pow(coefficient,2):coefficient;closenessA+=Math.abs(a.strengths[strength]-currentPlayerStrengths[strength])*coefficient;closenessB+=Math.abs(b.strengths[strength]-currentPlayerStrengths[strength])*coefficient;}for(i=0;i<regions.length;i++){region=regions[i];closenessA+=Math.abs(currentPlayerSuitability[region]-a.suitability[region])*(currentPlayerSuitability[region]\/minimumSuitability)*(regions.length-i);closenessB+=Math.abs(currentPlayerSuitability[region]-b.suitability[region])*(currentPlayerSuitability[region]\/minimumSuitability)*(regions.length-i);}if(closenessA>closenessB)return 1;else if(closenessA<closenessB)return -1;else return 0;});allPlayers=allPlayers.slice(0,20);for(i=0;i<allPlayers.length;i++){player=allPlayers[i];p=player['raw'];detail='';strengthDiff=0;for(j=0;j<keys.length;j++){strength=keys[j];detail+='<span>'+Math.round(player.strengths[strength]-currentPlayerStrengths[strength])+'<\/span>'+strength+' : '+Math.round(player.strengths[strength])+'<br\/>';coefficient=currentPlayerStrengths[strength]\/currentPlayerAverage;coefficient=currentPlayerStrengths[strength]>bestStrengthsMinimum?Math.pow(coefficient,3):currentPlayerStrengths[strength]>currentPlayerAverage?Math.pow(coefficient,2):coefficient;strengthDiff+=Math.abs(player.strengths[strength]-currentPlayerStrengths[strength])*coefficient;}suitabilityDiff=0;for(j=0;j<regions.length;j++){region=regions[j];suitabilityDiff+=Math.abs(currentPlayerSuitability[region]-player.suitability[region])*(currentPlayerSuitability[region]\/minimumSuitability)*(regions.length-j);detail+='<br\/><span>'+Math.round(player.suitability[region]-currentPlayerSuitability[region])+'<\/span>'+region+' '+Math.round(player.suitability[region]);}o+='<div><div><a href=\"player.php?p='+p._id+'\">'+(p.shortname.length>0?p.shortname:p.name)+'<\/a><h3>'+Math.round(player.average)+'<\/h3><img class=ntn src=\"..\/..\/assets\/emblems\/'+p.nation+'.svg\"\/>'+(p.club.id.length>0?'<img src=\"..\/..\/assets\/emblems\/'+p.club.id+'.svg\"\/>':'')+'<\/div>';abilityDiff=Math.pow(p.height-currentPlayer.height,2);for(j=0;j<skills.length;j++){skill=skills[j];diff=Math.abs(p.skills[skill]-currentPlayer.skills[skill]);if(['wfa','wfu'].indexOf(skill)>-1){abilityDiff+=50*diff;}else if(skill=='frm'){abilityDiff+=10*diff;}else{found=false;for(k=2;k<=Object.keys(primarySkills[mainPosition]).length+1;k++){if(primarySkills[mainPosition][k].indexOf(skill)>-1){abilityDiff+=k*diff;found=true;break;}}if(!found)abilityDiff+=diff;}}for(j=0;j<specialAbilities.length;j++){if(p.skills['special'].indexOf(specialAbilities[j])==-1)abilityDiff+=50;}for(j=0;j<p.skills['special'].length;j++){if(specialAbilities.indexOf(p.skills['special'][j])==-1)abilityDiff+=50;}o+='<div>'+Math.round(abilityDiff+strengthDiff+suitabilityDiff)+'<br\/>'+Math.round(abilityDiff)+'<br\/>'+Math.round(strengthDiff)+'<br\/>'+Math.round(suitabilityDiff)+'<\/div><div>'+detail+'<\/div><\/div>';}o+='<\/div>';return o;});}","similars":"function(head,req){provides('html',function(){var playerID=req.query.player;var p,currentPlayer,currentPlayerAverage,playerStrengths,strength,score,skillsObject,skills,skill,coefficient,closenessA,closenessB,diffA,diffB,player,i,j,k,found,region,special,playerSuitability,averageStrength;var strengths={'possession':{'att':1,'spa':3,'sps':1,'lpa':1,'lps':1,'tec':1,'tea':1,'wfa':8.3,'wfu':4.2,'s':['PLA','ONE','PAS','TAC','TRG']},'attacking':{'att':5,'agg':4,'tea':1,'s':['LIN','MAR']},'tempo':{'sta':7,'top':3},'speed':{'top':7,'acc':3},'narrow-space':{'agi':3,'dra':3,'tec':3,'wfa':8.3,'wfu':4.2},'short-range-dribbling':{'acc':1,'agi':1,'dra':5,'drs':1,'agg':1,'wfa':8.3,'wfu':4.2,'s':['DRI']},'long-range-dribbling':{'top':3,'acc':3,'drs':4},'pass':{'spa':7,'sps':2,'wfa':8.3,'wfu':4.2,'s':['PAS','OUT']},'cross':{'lpa':6,'lps':2,'swe':1,'wfa':8.3,'wfu':4.2,'s':['PAS','OUT']},'technical':{'tec':3,'dra':3,'spa':2,'lpa':2},'duel':{'bod':6,'res':2,'agi':1,'height':1},'finishing-head':{'res':2,'hea':6,'agg':2,'s':['GOA','POS']},'finishing-foot':{'res':1,'sha':2,'sht':4,'agg':2,'wfa':8.3,'wfu':4.2,'s':['GOA','OOS','POS','ONE']},'shot':{'sha':4,'shp':1,'sht':2,'swe':1,'agg':1,'wfa':8.3,'wfu':4.2,'s':['GOA','OOS','OUT']},'longshot':{'sha':1,'shp':7,'sht':1,'wfa':8.3,'wfu':4.2,'s':['LON']},'freekick-shot':{'sha':2,'shp':3,'fka':3,'swe':2,'s':['LON']},'freekick-cross':{'lpa':2,'lps':4,'fka':2,'swe':2,'s':['PAS']},'heading':{'hea':4,'jum':4,'height':2,'s':['POS']},'mental-attack':{'att':4,'agg':4,'ten':1,'tea':1},'mental-defence':{'def':5,'ten':5,'s':['DFL']},'space-defence':{'def':2,'top':4,'acc':4,'s':['COV','SLI']},'man-defence':{'def':6,'bod':1,'res':1,'agi':1,'ten':1,'s':['MRK']},'clash':{'bod':8,'height':2},'aerial-clash':{'bod':2,'jum':4,'height':4},'press':{'def':4,'sta':2,'top':1,'acc':2,'res':1},'keeper':{'def':2,'bod':1,'res':2,'agi':1,'kee':2,'height':2,'s':['OOK','PEK']}};var keys=Object.keys(strengths);var suitability={'wide-defence':['WID','DRI','space-defence','speed','tempo','cross','long-range-dribbling','short-range-dribbling','man-defence','mental-defence','possession','pass','duel','clash','press'],'wide-midfield':['WID','DRI','PAS','short-range-dribbling','long-range-dribbling','cross','speed','technical','possession','narrow-space','pass','attacking','press','space-defence'],'wide-attack':['WID','DRI','short-range-dribbling','long-range-dribbling','narrow-space','shot','finishing-foot','technical','attacking','mental-attack','speed','cross','pass'],'center-defence':['DFL','MRK','COV','SLI','man-defence','space-defence','mental-defence','aerial-clash','clash','duel','heading','press','speed'],'center-midfield':['CEN','PLA','PAS','LON','MAR','DRI','pass','possession','tempo','cross','technical','narrow-space','short-range-dribbling','long-range-dribbling','space-defence','aerial-clash','clash','duel','press','longshot','heading'],'center-attack':['GOA','OOS','LIN','TRG','CEN','POS','DRI','MAR','attacking','finishing-foot','shot','mental-attack','narrow-space','technical','clash','duel','aerial-clash','finishing-head','heading','short-range-dribbling','long-range-dribbling']};var regions=Object.keys(suitability);var allPlayers=[];var interestedPlayers=[];var teammates=[];var currentPlayerStrengths={};var currentPlayerSuitability={};const watchclubs=['manchestercity','arsenal','liverpool','realmadrid','barcelona','atleticomadrid'];const noteclubs=['manchesterunited','chelsea','tottenham','bayernmunich','inter','parissaintgermain'];while(row=getRow()){p=row.value;if(p._id==playerID||(p.authenticity!='guess'&&watchclubs.indexOf(p.club.id)>-1)||(p.authenticity!='guess'&&p.authenticity!='watched-onetime'&¬eclubs.indexOf(p.club.id)>-1)){playerStrengths={};for(i=0;i<keys.length;i++){strength=keys[i];score=0;skillsObject=strengths[strength];skills=Object.keys(skillsObject);for(j=0;j<skills.length;j++){skill=skills[j];if(skill=='height')score+=(p.height-100)*skillsObject[skill];else if(skill!='s')score+=p.skills[skill]*skillsObject[skill];else{for(k=0;k<p.skills.special.length;k++){if(skillsObject['s'].indexOf(p.skills.special[k])>-1){score+=(skillsObject['s'].length-skillsObject['s'].indexOf(p.skills.special[k]))*7;}}}}if(playerID==p._id)currentPlayerStrengths[strength]=score;playerStrengths[strength]=score;}averageStrength=0;for(i=0;i<keys.length;i++){averageStrength+=playerStrengths[keys[i]];}averageStrength=averageStrength\/i;playerSuitability={};for(i=0;i<regions.length;i++){region=regions[i];score=0;special=[];for(j=0;j<suitability[region].length;j++){strength=suitability[region][j];if(strength==strength.toUpperCase())special.push(strength);else score+=playerStrengths[strength]*(suitability[region].length-j);}playerSuitability[region]=score\/((j-special.length)*(j-special.length+1)\/2);for(j=0;j<special.length;j++){if(p.skills.special.indexOf(special[j])>-1)playerSuitability[region]+=(special.length-j)*3;}}if(playerID==p._id){currentPlayer=p;currentPlayerSuitability=playerSuitability;currentPlayerAverage=averageStrength;}else interestedPlayers.push({'raw':p,'strengths':playerStrengths,'average':averageStrength,'suitability':playerSuitability});}allPlayers.push(p);}if(!currentPlayer)return'';for(i=0;i<allPlayers.length;i++){p=allPlayers[i];if(p.club.id==currentPlayer.club.id&&p!=currentPlayer&&!p.youth)teammates.push(p);}keys.sort(function(a,b){if(currentPlayerStrengths[a]<currentPlayerStrengths[b])return 1;else if(currentPlayerStrengths[a]>currentPlayerStrengths[b])return -1;else return 0;});var bestStrengthsMinimum=(currentPlayerStrengths[keys[0]]+currentPlayerAverage)\/2;regions.sort(function(a,b){if(currentPlayerSuitability[a]<currentPlayerSuitability[b])return 1;else if(currentPlayerSuitability[a]>currentPlayerSuitability[b])return -1;else return 0;});var minimumSuitability=currentPlayerSuitability[regions[regions.length-1]];var age=(new Date().getTime()-new Date(currentPlayer.dob).getTime())\/(1000*60*60*24*365);var feet={'R':'right','L':'left'};var positions={'GK':'goalkeeper','CB':'center back','SB':'side back','W':'wing','DM':'defensive midfield','CM':'center midfield','AM':'attacking midfield','SM':'side midfield','WF':'wing forward','SS':'shadow striker','CF':'center forward'};var o='<main><div><h1>'+(currentPlayer.shortname?currentPlayer.shortname:currentPlayer.name)+'<\/h1>'+(currentPlayer.shortname?'<span>'+currentPlayer.name+'<\/span>':'')+'<div><img class=ntn role=\"img\" src=\/emblems\/'+currentPlayer.nation+'.svg alt=\"'+req.query.nation+'\" title=\"'+req.query.nation+'\" height=40\/><b>'+req.query.nation+'<\/b><\/div>'+(currentPlayer.club.id.length?'<div><img role=\"img\" src=\/emblems\/'+currentPlayer.club.id+'.svg alt=\"'+currentPlayer.club.name+'\" title=\"'+currentPlayer.club.name+'\" height=150\/><b><a href=\/club\/'+currentPlayer.club.id+'>'+currentPlayer.club.name+'<\/a><\/b><\/div>':'')+'<\/div><div><span><i>age<\/i> : <b>'+age.toFixed(0)+'<\/b><\/span><span><i>height<\/i> : <b>'+currentPlayer.height+'<\/b><\/span><span><i>foot<\/i> : <b>'+feet[currentPlayer.foot]+'<\/b><\/span><span><i>best position<\/i> : <b>'+positions[currentPlayer.positions[0]]+'<\/b><\/span>'+'<div class=direction>><\/div><div class=pitch>';for(i=0;i<currentPlayer.positions.length;i++){var position=currentPlayer.positions[i].toLowerCase();var level=i==0?'primary':'secondary';if(['cb','w','wf','ss'].indexOf(position)>-1){if(currentPlayer.side.indexOf('B')>-1){o+='<div class=\"l'+position+' '+level+'\"><\/div>';o+='<div class=\"r'+position+' '+level+'\"><\/div>';if(['cb','ss'].indexOf(position)>-1){o+='<div class=\"c'+position+' '+level+'\"><\/div>';}}else{o+='<div class=\"'+currentPlayer.side.substring(1).toLowerCase()+position+' '+level+'\"><\/div>';}}else if(['sb','sm'].indexOf(position)>-1){if(currentPlayer.side.indexOf('B')>-1){o+='<div class=\"l'+position.substring(1)+' '+level+'\"><\/div>';o+='<div class=\"r'+position.substring(1)+' '+level+'\"><\/div>';}else{o+='<div class=\"'+currentPlayer.side.substring(1).toLowerCase()+position.substring(1)+' '+level+'\"><\/div>';}}else{o+='<div class=\"'+position+' '+level+'\"><\/div>';}}o+='<\/div><\/div><div><h2>good at<\/h2><ul>';var count=0;for(i=0;i<keys.length&&(currentPlayerStrengths[keys[i]]>=bestStrengthsMinimum||count<7);i++){o+='<li>'+keys[i].replace(new RegExp('-','g'),' ')+'<\/li>';count++;}o+='<\/ul><\/div><\/main><aside><h2>similar to<\/h2><ul>';skills=['att','def','bod','sta','top','acc','res','agi','dra','drs','spa','sps','lpa','lps','sha','shp','sht','fka','swe','hea','jum','tec','agg','ten','kee','tea','frm','wfa','wfu'];var primarySkills={'GK':{9:['def','kee'],8:['res'],7:['ten'],6:['agi'],5:['bod','acc'],4:['top'],3:['spa','sps','lpa','lps'],2:['dra','drs','jum','tec','agg']},'CB':{9:['def','bod'],8:['top','acc'],7:['res'],6:['agi','ten'],5:['att','spa','sps','lpa','lps'],4:['dra','drs'],3:['sta'],2:['hea','jum','tec','agg','tea']},'SB':{9:['top','acc'],8:['def'],7:['bod','dra','drs'],6:['agi','spa','sps','lpa','lps'],5:['att','sta'],4:['agg','tea'],3:['tec'],2:['res','jum','ten']},'W':{9:['top','acc'],8:['dra','drs'],7:['spa','sps','lpa','lps'],6:['att','def','bod','agi'],5:['sta','agg'],4:['tea'],3:['tec'],2:['jum']},'DM':{9:['bod'],8:['def','spa','sps','lpa','lps'],7:['top','acc'],6:['att','agi'],5:['res','dra','drs'],4:['tec','agg','ten','tea'],3:['sta'],2:['jum']},'CM':{9:['spa','sps'],8:['lpa','lps'],7:['def','top','acc'],6:['att','bod','agi','agg','tea'],5:['sta','dra','drs'],4:['sha','shp','sht','tec'],3:['ten'],2:['jum']},'AM':{9:['spa','sps'],8:['agi','dra','drs'],7:['att','top','acc','lpa','lps'],6:['def','bod','agg','tea'],5:['sha','shp','sht','tec'],4:['sta'],3:['ten'],2:['jum']},'SM':{9:['top','acc'],8:['agi','dra','drs'],7:['att','spa','sps','lpa','lps'],6:['def','sha','shp','sht','agg'],5:['bod','tec'],4:['tea'],3:['sta'],2:['jum','ten']},'WF':{9:['top','acc'],8:['agi','dra','drs'],7:['att','lpa','lps','agg'],6:['def','sha','shp','sht'],5:['bod','tec'],4:['spa','sps','tea'],3:['sta'],2:['jum','ten']},'SS':{9:['top','acc'],8:['agi','dra','drs'],7:['att','sha','shp','sht','agg'],6:['def','spa','sps','lpa','lps','tec','tea'],5:['bod'],4:['res'],3:['jum'],2:['ten']},'CF':{9:['att','bod'],8:['agi','top','acc','agg'],7:['dra','drs','sha','shp','sht'],6:['def','res','tea'],5:['tec'],4:['hea'],3:['spa','sps','jum'],2:['lpa','lps','ten']}};var mainPosition=currentPlayer.positions[0];var specialAbilities=currentPlayer.skills.special;interestedPlayers.sort(function(a,b){closenessA=Math.pow(a.raw.height-currentPlayer.height,2);closenessB=Math.pow(b.raw.height-currentPlayer.height,2);for(i=0;i<skills.length;i++){skill=skills[i];diffA=Math.abs(a.raw.skills[skill]-currentPlayer.skills[skill]);diffB=Math.abs(b.raw.skills[skill]-currentPlayer.skills[skill]);if(['wfa','wfu'].indexOf(skill)>-1){closenessA+=50*diffA;closenessB+=50*diffB;}else if(skill=='frm'){closenessA+=10*diffA;closenessB+=10*diffB;}else{found=false;for(j=2;j<=Object.keys(primarySkills[mainPosition]).length+1;j++){if(primarySkills[mainPosition][j].indexOf(skill)>-1){closenessA+=j*diffA;closenessB+=j*diffB;found=true;break;}}if(!found){closenessA+=diffA;closenessB+=diffB;}}}for(i=0;i<specialAbilities.length;i++){if(a.raw.skills['special'].indexOf(specialAbilities[i])==-1)closenessA+=50;if(b.raw.skills['special'].indexOf(specialAbilities[i])==-1)closenessB+=50;}for(i=0;i<a.raw.skills['special'].length;i++){if(specialAbilities.indexOf(a.raw.skills['special'][i])==-1)closenessA+=50;}for(i=0;i<b.raw.skills['special'].length;i++){if(specialAbilities.indexOf(b.raw.skills['special'][i])==-1)closenessB+=50;}for(i=0;i<keys.length;i++){strength=keys[i];coefficient=currentPlayerStrengths[strength]\/currentPlayerAverage;coefficient=currentPlayerStrengths[strength]>bestStrengthsMinimum?Math.pow(coefficient,3):currentPlayerStrengths[strength]>currentPlayerAverage?Math.pow(coefficient,2):coefficient;closenessA+=Math.abs(a.strengths[strength]-currentPlayerStrengths[strength])*coefficient;closenessB+=Math.abs(b.strengths[strength]-currentPlayerStrengths[strength])*coefficient;}for(i=0;i<regions.length;i++){region=regions[i];closenessA+=Math.abs(currentPlayerSuitability[region]-a.suitability[region])*(currentPlayerSuitability[region]\/minimumSuitability)*(regions.length-i);closenessB+=Math.abs(currentPlayerSuitability[region]-b.suitability[region])*(currentPlayerSuitability[region]\/minimumSuitability)*(regions.length-i);}if(closenessA>closenessB)return 1;else if(closenessA<closenessB)return -1;else return 0;});interestedPlayers=interestedPlayers.slice(0,5);for(i=0;i<interestedPlayers.length;i++){player=interestedPlayers[i];p=player['raw'];o+='<li><a href=\/player\/'+p._id+'>'+(p.shortname.length>0?p.shortname:p.name)+'<\/a><img class=ntn src=\/emblems\/'+p.nation+'.svg height=20>'+(p.club.id.length>0?'<img src=\/emblems\/'+p.club.id+'.svg height=50>':'')+'<\/li>';}o+='<\/ul><\/aside><aside><h2>teammates<\/h2><ul>';var lastPosition;for(i=0;i<teammates.length;i++){p=teammates[i];position=p.positions[0];if(position=='CB'||position=='SB'||position=='W')position='d';else if(position=='DM'||position=='CM'||position=='AM')position='m';else if(position=='SM'||position=='WF'||position=='SS'||position=='CF')position='f';if(position!=lastPosition){if(lastPosition)o+='<\/div>';o+='<div class='+position.toLowerCase()+'>';}o+='<li>'+(p.authenticity=='guess'?('<span>'+(p.shortname.length>0?p.shortname:p.name)+'<\/span>'):('<a href=\/player\/'+p._id+'>'+(p.shortname.length>0?p.shortname:p.name)+'<\/a>'))+'<img class=ntn src=\/emblems\/'+p.nation+'.svg height=15><\/li>';lastPosition=position;}o+='<\/div><\/ul><\/aside>';return o;});}"},"shows":{"clubForm":"function(doc,req){var o='<div><input name=name placeholder=club value=\\\"'+(doc?doc.name:'')+'\\\"><input name=city placeholder=city value=\\\"'+(doc?doc.city:'')+'\\\"><input name=country placeholder=country value=\\\"'+(doc?doc.country:'')+'\\\"><input name=color1 placeholder=color1 type=color value='+(doc&&doc.color1?doc.color1:'')+(doc&&doc.color1?(' style=background-color:'+doc.color1):'')+'><input name=color2 placeholder=color2 type=color value='+(doc&&doc.color2?doc.color2:'')+(doc&&doc.color2?(' style=background-color:'+doc.color2):'')+'><input name=color3 placeholder=color3 type=color value='+(doc&&doc.color3?doc.color3:'')+(doc&&doc.color3?(' style=background-color:'+doc.color3):'')+'><input name=footballdata title=footballdata placeholder=footballdata value='+(doc&&doc.footballdata?doc.footballdata:'')+'><input name=apifootball title=apifootball placeholder=apifootball value='+(doc&&doc.apifootball?doc.apifootball:'')+'><label><input name=png type=checkbox'+(doc&&doc.png?' checked':'')+'>png<\/label><input name=formation placeholder=formation value='+(doc&&doc.formation?doc.formation:'')+'><select name=track>';var trackingLevels=['','scores','note','watch'];for(var i=0;i<trackingLevels.length;i++){o+='<option value='+trackingLevels[i]+(doc&&doc.track&&doc.track==trackingLevels[i]?' selected':'')+'>'+trackingLevels[i]+'<\/option>';}o+='<\/select>';var competitions=[{'CL':['','train','el','qualify','quarter','semi','title']},{'EL':['','train','cfl','qualify','quarter','semi','title']},{'CFL':['','train','qualify','quarter','semi','title']},{'L':['','train','survive','safe','qualify-cfl','qualify-el','qualify-cl','title']},{'C':['','train','title']}];var competiton,key;for(var i=0;i<competitions.length;i++){competiton=competitions[i];key=Object.keys(competiton)[0];o+='<span>'+key+'<\/span><select name=expectations-'+key+'>';for(var j=0;j<competiton[key].length;j++){e=competiton[key][j];o+='<option value='+e+(doc&&doc.expectations&&doc.expectations[key]&&doc.expectations[key]==e?' selected':'')+'>'+e+'<\/option>';}o+='<\/select>';}o+='<\/div>';return o;}","gameForm":"function(doc,req){var formid=doc?'editGameForm':'createGameForm';var o='<div class=input-form><form method=POST name='+formid+' id='+formid+'>'+'<div class=match>'+(doc?'<input type=hidden name=gid value='+doc._id+'>':'');o+='<input name=home1 type=checkbox'+((!doc)||(doc&&doc.teams[0].home)?' checked':'')+'><input name=home2 type=checkbox'+(doc&&doc.teams[1].home?' checked':'')+'>';var date=new Date().toISOString().split('-');var year=parseInt(date[0]);var month=date[1].substr(0,1)=='0'?parseInt(date[1].substr(1,1)):parseInt(date[1]);var currentSeason=month>7?year.toString()+'-'+(year+1).toString():(year-1).toString()+'-'+year.toString();o+='<input name=season placeholder=season value='+(doc?doc.season:currentSeason)+(doc?' disabled':'')+'>';o+='<select name=competition>';var cs=['','ENG-L','ENG-LC','ENG-FAC','ENG-CS','ESP-L','ESP-C','ESP-SC','DEU-L','DEU-C','DEU-SC','ITA-L','ITA-C','ITA-SC','FRA-L','FRA-C','FRA-SC','TUR-L','TUR-C','TUR-SC','UEFA-CL','UEFA-CL-Q','UEFA-EL','UEFA-EL-Q','UEFA-CFL','UEFA-CFL-Q','UEFA-SC','FIFA-CWC','WC','WC-Q','EC','EC-Q','NL','N-F','C-F'];var i,j,k,n,c,b,f,p,r,t,appearance,role,roleI,color,sentOff,yellows,goalMinute,goalType,penalty;for(i in cs){o+='<option value='+cs[i]+(doc&&doc.competition&&doc.competition==cs[i]?' selected':'')+(doc&&doc.competition&&doc.competition!=cs[i]?' disabled':'')+'>'+cs[i]+'<\/option>';}o+='<\/select><select name=stage>';var ss=['','Qualification','Group-A','Group-B','Group-C','Group-D','Group-E','Group-F','Group-G','Group-H','Group-I','Group-J','Group-K','Group-L','League-A-Group-1','League-A-Group-2','League-A-Group-3','League-A-Group-4','League-B-Group-1','League-B-Group-2','League-B-Group-3','League-B-Group-4','League-C-Group-1','League-C-Group-2','League-C-Group-3','League-C-Group-4','League-D-Group-1','League-D-Group-2','Last32','Last16','Quarter-Final','Semi-Final','3rd-Place','Final'];for(i in ss){o+='<option value='+ss[i]+(doc&&doc.stage&&doc.stage==ss[i]?' selected':'')+(doc&&doc.stage&&doc.stage!=ss[i]?' disabled':'')+'>'+ss[i]+'<\/option>';}o+='<\/select><input type=number name=matchday placeholder=matchday'+(doc?(' value='+doc.matchday):'')+(doc?' disabled':'')+'>';o+='<input type=date name=date'+(doc&&doc.time?(' value='+doc.time.split('T')[0]):'')+'><input type=time name=time'+(doc&&doc.time?(' value='+doc.time.split('T')[1].substr(0,5)):'')+'><\/div>';var rs=['GK','CB','SB','W','DM','CM','AM','SM','SS','WF','CF'];var playersOnPitch=[[],[]];var benches=[[],[]];var colors=['#ffffff-#000000','#000000-#ffffff'];if(doc){if(Object.keys(doc.teams[0]).indexOf('colors')>-1){colors[0]=doc.teams[0].colors;}if(Object.keys(doc.teams[1]).indexOf('colors')>-1){colors[1]=doc.teams[1].colors;}}var national=doc&&doc.competition&&(doc.competition.indexOf('WC')==0||doc.competition.indexOf('EC')==0||doc.competition=='N-F');var playersLoaded=false;var playersLoaded1=false;var playersLoaded2=false;var allContributions=[];var kickedOff=false;var finalized=false;var overtime=false;var penalties=false;if(doc&&(doc.teams[0].appearances.length>0||doc.teams[1].appearances.length>0)){playersLoaded=true;if(doc.teams[0].appearances.length>17)playersLoaded1=true;if(doc.teams[1].appearances.length>17)playersLoaded2=true;for(i=0;i<2;i++){for(j=0;j<doc.teams[i].appearances.length;j++){appearance=doc.teams[i].appearances[j];if(Object.keys(appearance).indexOf('contributions')>-1){for(k=0;k<appearance.contributions.length;k++){if(appearance.contributions[k].type!='substitute-on'){appearance.contributions[k].player=appearance.shortname||appearance.name;appearance.contributions[k].playerid=appearance.id;appearance.contributions[k].club=i;allContributions.push(appearance.contributions[k]);if(!overtime&&parseInt(appearance.contributions[k].minute.split('+')[0])>90)overtime=true;}}}}}if(!playersLoaded1&&Object.keys(doc.teams[0]).indexOf('goalMinutes')>-1){for(i=0;i<doc.teams[0].goalMinutes.length;i++){goalMinute=doc.teams[0].goalMinutes[i];goalType=Object.keys(doc.teams[0]).indexOf('goalTypes')>-1?doc.teams[0].goalTypes[i]:null;allContributions.push({'club':0,'minute':goalMinute,'goaltype':goalType});}if((Object.keys(doc.teams[0]).indexOf('penalties')>-1)&&(typeof doc.teams[0].penalties=='array')){for(i=0;i<doc.teams[0].penalties.length;i++){penalty=doc.teams[0].penalties[i];allContributions.push({'club':0,'minute':penalty});}}}if(!playersLoaded2&&Object.keys(doc.teams[1]).indexOf('goalMinutes')>-1){for(i=0;i<doc.teams[1].goalMinutes.length;i++){goalMinute=doc.teams[1].goalMinutes[i];goalType=Object.keys(doc.teams[1]).indexOf('goalTypes')>-1?doc.teams[1].goalTypes[i]:null;allContributions.push({'club':1,'minute':goalMinute,'goaltype':goalType});}if((Object.keys(doc.teams[1]).indexOf('penalties')>-1)&&(typeof doc.teams[1].penalties=='array')){for(i=0;i<doc.teams[1].penalties.length;i++){penalty=doc.teams[1].penalties[i];allContributions.push({'club':1,'minute':penalty});}}}allContributions.sort(function(a,b){if(a.minute.substr(0,1)!='p'&&b.minute.substr(0,1)!='p'){if(parseInt(a.minute.split('+')[0])>parseInt(b.minute.split('+')[0]))return 1;else if(parseInt(a.minute.split('+')[0])<parseInt(b.minute.split('+')[0]))return -1;else if(parseInt(a.minute.split('+')[0])==parseInt(b.minute.split('+')[0])){if(a.minute.indexOf('+')>-1&&b.minute.indexOf('+')==-1)return 1;else if(a.minute.indexOf('+')==-1&&b.minute.indexOf('+')>-1)return -1;else{if(a.minute.split('+')[1]&&b.minute.split('+')[1]&&parseInt(a.minute.split('+')[1])>parseInt(b.minute.split('+')[1]))return 1;else if(a.minute.split('+')[1]&&b.minute.split('+')[1]&&parseInt(a.minute.split('+')[1])<parseInt(b.minute.split('+')[1]))return -1;else{if(parseInt(a.order)>parseInt(b.order))return 1;else if(parseInt(a.order)<parseInt(b.order))return -1;else if(parseInt(a.order)==parseInt(b.order))return 0;}}}}else if(a.minute.substr(0,1)=='p'&&b.minute.substr(0,1)!='p'){return 1;}else if(a.minute.substr(0,1)!='p'&&b.minute.substr(0,1)=='p'){return -1;}else{if(parseInt(a.minute.substr(1))>parseInt(b.minute.substr(1)))return 1;if(parseInt(a.minute.substr(1))<parseInt(b.minute.substr(1)))return -1;if(parseInt(a.minute.substr(1))==parseInt(b.minute.substr(1)))return 0;}});var periods=['90','120'];var minute90substitution=false;var minute120substitution=false;var contribution,nextMinute;for(c=0;c<allContributions.length;c++){contribution=allContributions[c];if(contribution.type=='substitute'||contribution.type=='red'){if(contribution.type=='red'){nextMinute=contribution.minute.indexOf('+')>-1?contribution.minute.split('+')[0]+'+'+(parseInt(contribution.minute.split('+')[1])+1):(parseInt(contribution.minute)+1).toFixed();if(periods.indexOf(contribution.minute)==-1&&!allContributions.some(function(x){return x.type=='substitute'&&x.minute==nextMinute})){periods.push(contribution.minute);}}else if(periods.indexOf(contribution.minute)==-1){periods.push(contribution.minute);}if(contribution.minute=='90')minute90substitution=true;if(contribution.minute=='120')minute120substitution=true;}}var role,nextI,nextRole;for(i=0;i<2;i++){for(j=0;j<doc.teams[i].appearances.length;j++){appearance=doc.teams[i].appearances[j];if('roles' in appearance){for(roleI=0;roleI<appearance.roles.length;roleI++){role=appearance.roles[roleI];if(!kickedOff&&appearance.roles.length>0){kickedOff=true;}if(role.endMin&&(!finalized||parseInt(finalized.split('+')[0])+(finalized.indexOf('+')>-1?parseInt(finalized.split('+')[1]):0)<parseInt(role.endMin.split('+')[0])+(role.endMin.indexOf('+')>-1?parseInt(role.endMin.split('+')[1]):0))&&appearance.condition){finalized=role.endMin;}if(roleI!=appearance.roles.length-1){nextI=roleI+1;nextRole=appearance.roles[nextI];if(role.endMin&&role.endMin==nextRole.startMin){if(periods.indexOf(role.endMin)==-1){periods.push(role.endMin);}}}}}}}periods.sort(function(a,b){if(parseInt(a.split('+')[0])>parseInt(b.split('+')[0]))return 1;else if(parseInt(a.split('+')[0])<parseInt(b.split('+')[0]))return -1;else{if(parseInt(a.split('+')[1])>parseInt(b.split('+')[1]))return 1;else if(parseInt(a.split('+')[1])<parseInt(b.split('+')[1]))return -1;else return 0;}});if(finalized){penalties=doc.teams[0].goals==doc.teams[1].goals&&(['C','S'].indexOf(doc.competition.substr(doc.competition.length-1,1))>-1||doc.stage=='Qualification'||doc.stage=='Last32'||doc.stage=='Last16'||doc.stage=='Quarter-Final'||(doc.stage=='Semi-Final'&&doc.competition!='ENG-LC')||doc.stage=='3rd-Place'||doc.stage=='Final');if(penalties)periods.push('p');else periods.push(finalized);}var periodStart;if('periodstart' in req.query)periodStart=req.query.periodstart;else{if(finalized)periodStart='0';else{if(overtime){periodStart=periods[periods.indexOf('120')-1];}else{if(periods.indexOf('120')-periods.indexOf('90')>1)periodStart=periods[periods.indexOf('120')-1];else if(minute90substitution)periodStart='90';else periodStart=periods.indexOf('90')==0?'0':periods[periods.indexOf('90')-1];}}}if(finalized&&!minute120substitution)periods.splice(periods.indexOf('120'),1);if(!minute90substitution)periods.splice(periods.indexOf('90'),1);i=periods.indexOf(periodStart)+1;var periodEnd=periods[i];var roleStart,roleEnd,regions;}for(n=0;n<2;n++){o+='<div class=club'+(n+1)+'>';if(doc)o+='<span>'+doc.teams[n].name+'<\/span>';o+='<select'+(doc?' style=display:none;':'')+' name=club'+(n+1)+'>'+(doc?'<option value='+doc.teams[n].id+'><\/option>':'')+'<\/select>';if(doc&&doc.teams[n].appearances.length>0){regions=[[],[],[],[]];for(i=0;i<doc.teams[n].appearances.length;i++){p=doc.teams[n].appearances[i];p['takenOut']=false;if(!kickedOff){if(p.positions[0]=='GK')regions[0].push(p);else if(p.positions[0].indexOf('B')>-1)regions[1].push(p);else if(p.positions[0]=='DM'||p.positions[0]=='CM'||p.positions[0]=='AM'||p.positions[0]=='W')regions[2].push(p);else regions[3].push(p);}else{if('roles' in p){for(j=0;j<p.roles.length;j++){role=p.roles[j];if('startMin' in role)roleStart=role.startMin;else roleStart='0';if('endMin' in role)roleEnd=role.endMin;else roleEnd='120';if(role.name=='bench'){benches[n].push(p);}else if((parseInt(roleStart.split('+')[0])<=parseInt(periodStart.split('+')[0])||(parseInt(roleStart.split('+')[0])==parseInt(periodStart.split('+')[0])&&parseInt(roleStart.split('+')[0])+(roleStart.indexOf('+')>-1?parseInt(roleStart.split('+')[1]):0)<=parseInt(periodStart.split('+')[0])+(periodStart.indexOf('+')>-1?parseInt(periodStart.split('+')[1]):0)))&&((parseInt(roleEnd.split('+')[0])+1>=parseInt(periodEnd.split('+')[0])||(parseInt(roleEnd.split('+')[0])==parseInt(periodEnd.split('+')[0])&&parseInt(roleEnd.split('+')[0])+(roleEnd.indexOf('+')>-1?parseInt(roleEnd.split('+')[1])+1:0)>=parseInt(periodEnd.split('+')[0])+(periodEnd.indexOf('+')>-1?parseInt(periodEnd.split('+')[1]):0)))||(periodEnd=='p'&&roleEnd==finalized)||role.endMin==null)){playersOnPitch[n].push(p);p['periodRole']=role.name;if(benches[n].indexOf(p)>-1)benches[n].pop(p);}else if(parseInt(roleEnd.split('+')[0])<=parseInt(periodStart.split('+')[0])||(parseInt(roleEnd.split('+')[0])==parseInt(periodStart.split('+')[0])&&parseInt(roleEnd.split('+')[0])+(roleEnd.indexOf('+')>-1?parseInt(roleEnd.split('+')[1]):0)<=parseInt(periodStart.split('+')[0])+(periodStart.indexOf('+')>-1?parseInt(periodStart.split('+')[1]):0))){if(benches[n].indexOf(p)==-1)benches[n].push(p);p['takenOut']=true;}else if(('periodRole' in p)&&p['periodRole'].length==0&&j==p.roles.length-1){if(benches[n].indexOf(p)==-1)benches[n].push(p);p['takenOut']=true;}}}}}if(!kickedOff){for(i=0;i<4;i++){if(n==0)o+='<div class='+(i==0?'K':(i==1?'D':(i==2?'M':(i==3?'F':''))))+'>';else o+='<div class='+(i==0?'F':(i==1?'M':(i==2?'D':(i==3?'K':''))))+'>';var order=n==0?i:3-i;for(j=0;j<regions[order].length;j++){p=regions[order][j];o+='<div id='+p.id+' data-team='+(n+1)+' data-positions='+toJSON(p.positions)+' data-side='+p.side+' data-foot='+p.foot+'>';o+='<span id='+p.id+'>'+(p.shirtnumber?p.shirtnumber:'-')+' '+(p.shortname?p.shortname:p.name)+'<span>'+(p.preFatigue?p.preFatigue:'')+'<\/span><\/span>';o+='<input type=hidden name=squad_'+p.id+'>';o+='<select name=role_'+p.id+'>';for(var r in rs){o+='<option value='+rs[r]+(p.positions[0]==rs[r]?' selected':'')+'>'+rs[r]+(p.positions.indexOf(rs[r])>-1?' *':'')+'<\/option>';}o+='<\/select><select name=side_'+p.id+'><option value=\"\"><\/option><option value=L>L<\/option><option value=C>C<\/option><option value=R>R<\/option><\/select><\/div>';}o+='<\/div>';}}}o+='<input type=hidden name=nameclub'+(n+1)+(doc?' value=\"'+doc.teams[n].name+'\"':'')+'><\/div>';if(n==0)o+='<span id=showBothInPitch>'+(periodStart&&periodEnd?(periodStart+' - '+(periodEnd==120&&!overtime?'...':periodEnd)):'')+'<\/span>';}if(playersLoaded){var abilities=['height','att','def','bod','sta','top','acc','res','agi','dra','drs','spa','sps','lpa','lps','sha','shp','sht','fka','swe','hea','jum','tec','agg','ten','kee','tea','frm','wfa','wfu','inj','special'];var abilityGroups={'mental':['att','def','agg','ten','tea'],'physique':['bod','sta','top','acc','res','agi'],'dribbling':['dra','drs','top','acc','agi','DRI'],'passing':['spa','sps','lpa','lps','tea','PAS'],'shoot':['sha','shp','sht','agg','LON'],'aerial':['height','bod','jum'],'keeper':['def','res','kee']};for(n=0;n<2;n++){o+='<div class=side'+(n+1)+'>';if(kickedOff){o+='<div class=match-facts-'+(n+1)+'><img src=\"..\/assets\/emblems\/'+doc.teams[n].id+(doc.teams[n].png?'.png':'.svg')+'\"'+(national?' class=\"nation\"':'')+'\/>';if((n==0&&playersLoaded1)||(n==1&&playersLoaded2)){var goals=[];var reds=[];var penaltyshoots=[];for(i=0;i<doc.teams[n].appearances.length;i++){p=doc.teams[n].appearances[i];if(Object.keys(p).indexOf('contributions')>-1){for(c=0;c<p.contributions.length;c++){if(p.contributions[c].result=='goal'){var goal={'scorer':p.shortname?p.shortname:p.name,'minute':p.contributions[c].minute,'own':false};goals.push(goal);}else if(p.contributions[c].type=='red'){var red={'sentOff':p.shortname?p.shortname:p.name,'minute':p.contributions[c].minute};reds.push(red);}else if(p.contributions[c].type=='penalties'){var penalty={'player':p.shortname?p.shortname:p.name,'minute':p.contributions[c].minute,'result':p.contributions[c].result};penaltyshoots.push(penalty);}}}}var owngoals=[];for(i=0;i<doc.teams[1-n].appearances.length;i++){p=doc.teams[1-n].appearances[i];if(Object.keys(p).indexOf('contributions')>-1){for(c=0;c<p.contributions.length;c++){if(p.contributions[c].result=='owngoal'){var owngoal={'scorer':p.shortname?p.shortname:p.name,'minute':p.contributions[c].minute,'own':true};owngoals.push(owngoal);}}}}o+='<span>'+doc.teams[n].goals+'<\/span>';goals=goals.concat(owngoals);if(goals.length>0){goals.sort(function(a,b){if(parseInt(a.minute.split('+')[0])>parseInt(b.minute.split('+')[0]))return 1;if(parseInt(a.minute.split('+')[0])<parseInt(b.minute.split('+')[0]))return -1;if(parseInt(a.minute.split('+')[0])==parseInt(b.minute.split('+')[0])){if(a.minute.indexOf('+')>-1&&b.minute.indexOf('+')>-1){if(parseInt(a.minute.split('+')[1])>parseInt(b.minute.split('+')[1]))return 1;if(parseInt(a.minute.split('+')[1])<parseInt(b.minute.split('+')[1]))return -1;else return 0;}if(a.minute.indexOf('+')>-1&&b.minute.indexOf('+')==-1)return 1;if(a.minute.indexOf('+')==-1&&b.minute.indexOf('+')>-1)return -1;else return 0;}});o+='<ul class=goals>';for(i=0;i<goals.length;i++){o+='<li><span>'+goals[i]['minute']+'\\'<\/span> <span>'+goals[i]['scorer']+(goals[i]['own']?' (og)':'')+'<\/span><\/li>';}o+='<\/ul>';}if(reds.length>0){reds.sort(function(a,b){if(parseInt(a.minute.split('+')[0])>parseInt(b.minute.split('+')[0]))return 1;if(parseInt(a.minute.split('+')[0])<parseInt(b.minute.split('+')[0]))return -1;if(parseInt(a.minute.split('+')[0])==parseInt(b.minute.split('+')[0])){if(a.minute.indexOf('+')>-1&&b.minute.indexOf('+')>-1){if(parseInt(a.minute.split('+')[1])>parseInt(b.minute.split('+')[1]))return 1;if(parseInt(a.minute.split('+')[1])<parseInt(b.minute.split('+')[1]))return -1;else return 0;}if(a.minute.indexOf('+')>-1&&b.minute.indexOf('+')==-1)return 1;if(a.minute.indexOf('+')==-1&&b.minute.indexOf('+')>-1)return -1;else return 0;}});o+='<hr\/><ul class=reds>';for(i=0;i<reds.length;i++){o+='<li><b><\/b><span>'+reds[i]['minute']+'\\'<\/span> <span>'+reds[i]['sentOff']+'<\/span><\/li>';}o+='<\/ul>';}if(penalties){o+=Object.keys(doc.teams[n]).indexOf('penalties')>-1?'<span>'+doc.teams[n].penalties+'<\/span>':'';if(penaltyshoots.length>0){penaltyshoots.sort(function(a,b){if(parseInt(a.minute.substr(1))>parseInt(b.minute.substr(1)))return 1;if(parseInt(a.minute.substr(1))<parseInt(b.minute.substr(1)))return -1;if(parseInt(a.minute.substr(1))==parseInt(b.minute.substr(1)))return 0;});o+='<ul class=penalties>';for(i=0;i<penaltyshoots.length;i++){o+='<li><span>'+penaltyshoots[i]['player']+'<\/span> <span>'+penaltyshoots[i]['result']+'<\/span><\/li>';}o+='<\/ul>';}}}else{o+='<input type=number name=goals-team'+(n+1)+' value='+doc.teams[n].goals+' autocomplete=off>';var goalTypes=['set-center','set-left','set-right','direct-center','direct-left','direct-right','counter-center','counter-left','counter-right','press','corner','freekick','penalty','throw'];if((n==0&&playersLoaded2)||(n==1&&playersLoaded1)){o+='<input name=goalMinute autocomplete=off><select name=goalType>';for(i=0;i<goalTypes.length;i++)o+='<option value='+goalTypes[i]+'>'+goalTypes[i]+'<\/option>';o+='<\/select>';}if(penalties)o+='<input type=number name=penalties'+(n+1)+' value='+(Object.keys(doc.teams[n]).indexOf('penalties')>-1?doc.teams[n].penalties.length:0)+' autocomplete=off>';}o+='<\/div>';}o+='<div class=bench'+(n+1)+'>';if(kickedOff){for(b=0;b<benches[n].length;b++){sentOff=false;yellows=0;p=benches[n][b];if(Object.keys(p).indexOf('contributions')>-1){for(i=0;i<p.contributions.length;i++){if(p.contributions[i].type=='yellow'){yellows++;}else if(p.contributions[i].type=='red'){sentOff=true;}}}o+='<div'+(p['takenOut']?' class=takenOut':'')+' id='+p.id+' data-team='+(n+1)+' data-positions='+toJSON(p.positions)+' data-side='+p.side+' data-foot='+p.foot+'>';o+='<span id='+p.id+'>'+(p.shortname?p.shortname:p.name)+'<\/span>';o+='<input name=condition'+(p.condition?(' value='+p.condition.toString()):'')+' autocomplete=off>';o+='<span class=fatigue>'+(p.preFatigue?p.preFatigue:'')+' • '+(p.postFatigue?p.postFatigue:'')+'<\/span>';if(yellows==1)o+='<span class=yellowcard><\/span>';o+='<input type=hidden name=squad_'+p.id+' value=bench>';o+='<select name=role_'+p.id+'>';for(r in rs){o+='<option value='+rs[r]+(p.positions[0]==rs[r]?' selected':'')+'>'+rs[r]+(p.positions.indexOf(rs[r])>-1?' *':'')+'<\/option>';}o+='<\/select><select name=side_'+p.id+'><option value=\"\"><\/option><option value=L'+(((p.side.indexOf('L')>-1)||(p.side=='B'&&p.foot=='L'&&(p.positions[0]=='B'||p.positions[0]=='W'||p.positions[0]=='SM'||p.positions[0]=='WF')))?' selected':'')+'>L<\/option><option value=C'+(((p.side=='B')&&(p.positions[0]=='CM'||p.positions[0]=='DM'||p.positions[0]=='AM'||p.positions[0]=='CF'||p.positions[0]=='SS'||p.positions[0]=='GK'))?' selected':'')+'>C<\/option><option value=R'+(((p.side.indexOf('R')>-1)||(p.side=='B'&&p.foot=='R'&&(p.positions[0]=='B'||p.positions[0]=='W'||p.positions[0]=='SM'||p.positions[0]=='WF')))?' selected':'')+'>R<\/option><\/select>';o+='<i>'+(p.shirtnumber?p.shirtnumber:'')+'<\/i>';if(!sentOff)o+='<div class=contribution><input name=minute autocomplete=off placeholder=minute><input name=order><select name=type><option disabled selected>contribution<\/option><option value=yellow>yellow<\/option><option value=red>red<\/option><option value=->-<\/option><\/select><textarea name=explanation rows=1><\/textarea><\/div>';o+='<\/div>';}}o+='<\/div><\/div>';if(n==0){o+='<div class=pitch-wrapper>';if(kickedOff){o+='<div class=abilities>';for(i=0;i<abilities.length;i++){o+='<i>'+abilities[i]+'<\/i>';}o+='<\/div><div class=abilitygroups>';for(i=0;i<Object.keys(abilityGroups).length;i++){o+='<i data-abilities='+toJSON(abilityGroups[Object.keys(abilityGroups)[i]])+'>'+Object.keys(abilityGroups)[i]+'<\/i>';}o+='<\/div>';}o+='<div class=pitch>';var contributionTypes=['-','pass','cross','shoot','dribbling','fouled','injured','run','jumpover','throw','lostball','interception','tackle','slide','clear','save','block','foul','handball','yellow','red','substitute','penalties'];var fields=['ld','lcd','gk','rcd','rd','lb','lcb','ccb','rcb','rb','lw','ldm','cdm','rdm','rw','lcm','ccm','rcm','lm','lam','cam','ram','rm','lwf','lss','css','rss','rwf','lf','lcf','ccf','rcf','rf'];for(f in fields){if(f==0||f==5||f==10||f==15||f==18||f==23||f==28)o+='<div>';o+='<div class=\\\"'+fields[f]+'-1 '+fields[fields.length-1-f]+'-2\\\">';if(kickedOff){for(k=0;k<2;k++){for(b=0;b<playersOnPitch[k].length;b++){p=playersOnPitch[k][b];role=p['periodRole'];if((k==0&&role.toLowerCase()===fields[f])||(k==1&&role.toLowerCase()===fields[fields.length-1-f])){sentOff=false;yellows=0;if(Object.keys(p).indexOf('contributions')>-1){for(i=0;i<p.contributions.length;i++){if(p.contributions[i].type=='yellow'){yellows++;}else if(p.contributions[i].type=='red'){sentOff=true;}}}o+='<div id='+p.id+' data-team='+(k+1)+' data-shirtnumber='+p.shirtnumber+' data-allskills='+toJSON(p.skills)+' data-height='+p.height+' data-positions='+toJSON(p.positions)+' data-side='+p.side+' data-foot='+p.foot+' style=background-color:'+colors[k].split('-')[0]+';'+(sentOff?'opacity:0.3;':'')+'>';o+='<span id='+p.id+' style=background-color:'+colors[k].split('-')[0]+';color:'+colors[k].split('-')[1]+'>'+(p.shortname?p.shortname:p.name)+'<\/span>';if(yellows==1)o+='<span class=yellowcard><\/span>';o+='<input name=condition'+(p.condition?(' value='+p.condition.toString()):'')+' autocomplete=off>';o+='<input type=hidden name=squad_'+p.id+' value=playing>';o+='<select name=role_'+p.id+(sentOff?' disabled':'')+'>';for(r in rs){o+='<option value='+rs[r]+((role.substring(1)===rs[r]||(role===rs[r])||(role.substring(1)==='M'&&rs[r]==='SM')||(role.substring(1)==='B'&&rs[r]==='SB')||((role==='LF'||role==='RF')&&rs[r]==='WF'))?' selected':'')+'>'+rs[r]+(p.positions.indexOf(rs[r])>-1?' *':'')+'<\/option>';}o+='<\/select><select name=side_'+p.id+(sentOff?' disabled':'')+'><option value=\"\"><\/option><option value=L'+(role.substr(0,1)=='L'?' selected':'')+'>L<\/option><option value=C'+(role.substr(0,1)=='C'||role=='GK'?' selected':'')+'>C<\/option><option value=R'+(role.substr(0,1)=='R'?' selected':'')+'>R<\/option><\/select>';o+='<i style=color:'+colors[k].split('-')[1]+'><span>'+(p.shirtnumber?p.shirtnumber:'')+'<\/span><\/i>';o+='<span class=fatigue>'+(p.preFatigue?p.preFatigue:'')+' • '+(p.postFatigue?p.postFatigue:'')+'<\/span>';o+='<div class=contribution><input name=minute autocomplete=off placeholder=minute><b>#<\/b><input name=order><select name=type><option disabled selected>contribution<\/option>';for(t in contributionTypes){o+='<option value='+contributionTypes[t]+'>'+contributionTypes[t]+'<\/option>';}o+='<\/select><textarea name=explanation rows=1><\/textarea><\/div><\/div>';}}}}o+='<\/div>';if(f==4||f==9||f==14||f==17||f==22||f==27||f==32)o+='<\/div>';}o+='<\/div><\/div>';}}if(kickedOff){o+='<button type=submit name=submitContributions>Submit Contributions<\/button><input id=roleChangeMinute name=roleChangeMinute autocomplete=off><button type=submit id=submitRoleChanges name=submitRoleChanges>Submit Role Changes<\/button><input id=lastMinute name=lastMinute autocomplete=off'+(finalized?(' value='+finalized):'')+'><button id=finalWhistle type=submit name=finalWhistle>Final Whistle<\/button>';o+='<\/form><\/div>';var period,previousMinute,previousClub,minute,minute,club,playerOptions,targetPlayerOptions,playerid,playername,targetid,typeOptions,contextOptions,originOptions,targetOptions,styleOptions,resultOptions,opponent,substitution,yellow,red,story,penalties;var regions=['','rf','rcf','ccf','lcf','lf','rwf','rss','css','lss','lwf','rm','ram','cam','lam','lm','rcm','ccm','lcm','rb','cb','lb'];var contexts=['','set','direct','counter','press','corner','freekick','penalty'];var styles=['','header','body','weakfoot','hand'];var results=['','assist','goal','corner','post','post-out','out','blocked','saved','freekick','penalty','owngoal'];var timeline='<ul class=timeline>';for(i in periods){period=parseInt(i)+1;period=''+period;periodEnd=periods[i];periodEnd=periodEnd=='p'&&finalized&&!penalties?finalized:periodEnd;periodStart=i==0?'0':periods[i-1];timeline+='<li class=period'+period+' data-periodstart='+periodStart+' data-periodend='+periodEnd+'>';for(c=0;c<allContributions.length;c++){contribution=allContributions[c];if(c+1<allContributions.length){nextMinute=allContributions[c+1].minute;}else nextMinute=periodEnd;opponent=false;substitution=false;yellow=false;red=false;story=false;penalties=false;if(Object.keys(contribution).indexOf('player')==-1)opponent=true;else if(Object.keys(contribution).indexOf('type')>-1){if(contribution.type=='substitute')substitution=true;else if(contribution.type=='yellow')yellow=true;else if(contribution.type=='red')red=true;else if(contribution.type=='penalties')penalties=true;}story=!opponent&&!substitution&&!yellow&&!red&&!penalties;club=contribution.club;playerid=contribution.playerid;targetid=contribution.targetID;minute=contribution.minute;if(((parseInt(minute.split('+')[0])>=parseInt(periodStart.split('+')[0])&&parseInt(minute.split('+')[0])+(minute.indexOf('+')>-1?parseInt(minute.split('+')[1]):0)>=parseInt(periodStart.split('+')[0])+(periodStart.indexOf('+')>-1?parseInt(periodStart.split('+')[1]):0))||minute.indexOf('p')>-1)&&(((parseInt(minute.split('+')[0])<parseInt(periodEnd.split('+')[0])||(minute.split('+')[0]==periodEnd.split('+')[0]&&(minute.indexOf('+')>-1?parseInt(minute.split('+')[1]):0)<(periodEnd.indexOf('+')>-1?parseInt(periodEnd.split('+')[1]):0)))||periodEnd=='p'))){playerOptions='';for(j=0;j<doc.teams[club].appearances.length;j++){appearance=doc.teams[club].appearances[j];playername=appearance.shortname||appearance.name;playerOptions+='<option value='+appearance.id+(appearance.id==playerid?' selected':'')+'>'+playername+'<\/option>';}targetPlayerOptions='<option><\/option>';for(j=0;j<doc.teams[club].appearances.length;j++){appearance=doc.teams[club].appearances[j];playername=appearance.shortname||appearance.name;targetPlayerOptions+='<option value='+appearance.id+(appearance.id==targetid?' selected':'')+'>'+playername+'<\/option>';}typeOptions='';for(j=0;j<contributionTypes.length;j++){t=contributionTypes[j];typeOptions+='<option value='+t+(t==contribution.type?' selected':'')+'>'+t+'<\/option>';}contextOptions='';for(j in contexts){t=contexts[j];contextOptions+='<option value='+t+(Object.keys(contribution).indexOf('context')>-1&&t==contribution.context?' selected':'')+'>'+t+'<\/option>';}originOptions='';targetOptions='';for(j in regions){t=regions[j];originOptions+='<option value='+t+(Object.keys(contribution).indexOf('origin')>-1&&t==contribution.origin?' selected':'')+'>'+t.toUpperCase()+'<\/option>';targetOptions+='<option value='+t+(Object.keys(contribution).indexOf('target')>-1&&t==contribution.target?' selected':'')+'>'+t.toUpperCase()+'<\/option>';}styleOptions='';for(j in styles){t=styles[j];styleOptions+='<option value='+t+(Object.keys(contribution).indexOf('style')>-1&&t==contribution.style?' selected':'')+'>'+t+'<\/option>';}resultOptions='';if(penalties)results=['scores','misses'];for(j in results){t=results[j];resultOptions+='<option value='+t+(Object.keys(contribution).indexOf('result')>-1&&t==contribution.result?' selected':'')+'>'+t.toUpperCase()+'<\/option>';}timeline+=(previousMinute!=minute?'<div class=\"event event-team'+(''+(club+1))+'\">'+(!opponent?'<section><button>delete<\/button><button>update<\/button><\/section>':''):'')+'<div class=\"team'+(''+(club+1))+(story?' action story':'')+'\" data-minute='+minute+'>'+'<div class=time-context>'+((previousMinute!=minute||previousClub!=club)?('<input name=minute autocomplete=off value='+minute+'><span>'+(minute.substr(0,1)!='p'?'\\'':'')+'<\/span>'+(contribution.goaltype?'<span>'+contribution.goaltype+'<\/span>':'')):'')+'<input name=hidden-order type=hidden value='+contribution.order+'>'+(story&&contribution.order==0?('<select name=context>'+contextOptions+'<\/select>'):'')+(story||penalties?'<select name=result>'+resultOptions+'<\/select>':'')+'<\/div>'+'<div class=player-action>'+(!opponent?('<select name=player>'+playerOptions+'<\/select>'):'')+(!opponent||penalties?('<select name=type>'+typeOptions+'<\/select>'):'')+(story?('<select name=style>'+styleOptions+'<\/select>'):'')+'<\/div>'+'<div class=regions>'+(((story&&(contribution.type=='pass'||contribution.type=='cross'))||substitution)?('<select name=targetplayer>'+targetPlayerOptions+'<\/select>'):'')+(story?('<select name=origin>'+originOptions+'<\/select>'):'')+((story&&contribution.type!='shoot'&&contribution.type!='fouled')?('<select name=target>'+targetOptions+'<\/select>'):'')+'<\/div>'+(story?('<textarea name=explanation rows=1>'+contribution.explanation+'<\/textarea>'):'')+'<\/div>'+(nextMinute!==minute?'<\/div>':'');previousMinute=minute;previousClub=club;}}timeline+='<form method=POST action=game.php?g='+doc._id+' name=periodview'+periodStart+' id=periodview'+periodStart+'><input type=hidden name=periodstart id=periodstart value='+periodStart+'><button name=periodview>'+periodStart+'<\/button><\/form><\/li>';}timeline+='<\/ul>';o+='<div class=panel-team1>'+timeline+'<\/div><div class=panel-team2>'+timeline+'<\/div>';}else{o+='<button type=submit name=loadPlayers form='+formid+'>Load Players<\/button><button type=submit name=kickOff form='+formid+'>Reload Players & Kick Off<\/button>';}}else{if(doc){penalties=doc.teams[0].goals==doc.teams[1].goals&&(doc.stage=='Qualification'||doc.stage=='Last32'||doc.stage=='Last16'||doc.stage=='Quarter-Final'||(doc.stage=='Semi-Final'&&doc.competition!='ENG-LC')||doc.stage=='3rd-Place'||doc.stage=='Final');for(n=0;n<2;n++){o+='<div class=\"goal-inputs-colors goal-inputs-colors-'+(n+1)+'\"><div><input name=goals-team'+(n+1)+' value='+doc.teams[n].goals+'>';if(penalties)o+='<input name=penalties'+(n+1)+(Object.keys(doc.teams[n]).indexOf('penalties')>-1?(' value='+doc.teams[n].penalties):'')+'>';o+='<\/div><div><input type=color name=team'+(n+1)+'color1 value='+colors[n].split('-')[0]+'><input type=color name=team'+(n+1)+'color2 value='+colors[n].split('-')[1]+'><input type=color value='+colors[n].split('-')[2]+'><input type=color value=#000000><input type=color value=#ffffff><\/div><\/div>';}o+='<button type=submit name=updateGame form='+formid+'>UPDATE<\/button><button type=submit name=loadPlayers form='+formid+'>Load Players<\/button>';}else{o+='<button type=submit name=createGame>CREATE<\/button><\/form><\/div>';}}return o;}","nationForm":"function(doc,req){var o='<div><input name=nationID placeholder=\"three-letter ISO code\" value=\"'+(doc?doc._id:'')+'\"><input name=name placeholder=\"full name\" value=\"'+(doc?doc.name:'')+'\"><select name=continent>';var continents=['Europe','Africa','South America','North America','Asia'];for(var i=0;i<continents.length;i++){o+='<option value=\"'+continents[i]+'\"'+(doc&&doc.continent&&doc.continent==continents[i]?' selected':'')+'>'+continents[i]+'<\/option>';}o+='<\/select><input name=color1 placeholder=color1 type=color value='+(doc&&doc.color1?doc.color1:'')+(doc&&doc.color1?(' style=background-color:'+doc.color1):'')+'><input name=color2 placeholder=color2 type=color value='+(doc&&doc.color2?doc.color2:'')+(doc&&doc.color2?(' style=background-color:'+doc.color2):'')+'><input name=color3 placeholder=color3 type=color value='+(doc&&doc.color3?doc.color3:'')+(doc&&doc.color3?(' style=background-color:'+doc.color3):'')+'><input name=apifootball title=apifootball placeholder=apifootball value='+(doc&&doc.apifootball?doc.apifootball:'')+'><input name=formation placeholder=formation value='+(doc&&doc.formation?doc.formation:'')+'><select name=track>';var trackingLevels=['','scores','note','watch'];for(i=0;i<trackingLevels.length;i++){o+='<option value='+trackingLevels[i]+(doc&&doc.track&&doc.track==trackingLevels[i]?' selected':'')+'>'+trackingLevels[i]+'<\/option>';}o+='<\/select>';var expectations=['','qualify','quarter','semi','title'];o+='<select name=expectation>';for(i=0;i<expectations.length;i++){e=expectations[i];o+='<option value='+e+(doc&&doc.expectation&&doc.expectation==e?' selected':'')+'>'+e+'<\/option>';}o+='<\/select><\/div>';return o;}","playerForm":"function(doc,req){var o='<div>'+(doc?'<input name=playerID type=hidden value='+doc._id+'>':'');o+='<button type=submit name='+(doc?'updatePlayer':'createPlayer')+(doc&&doc.uptodateingames?' class=uptodateingames':'')+'>'+(doc?'UPDATE':'CREATE')+'<\/button>';o+='<label>- UEFA<input type=checkbox name=outofuefa'+(doc&&doc.outofuefa?' checked':'')+'><\/label>';o+='<label>- league<input type=checkbox name=outofleague'+(doc&&doc.outofleague?' checked':'')+'><\/label>';o+='<label'+(doc&&req.query.games>0?'':' class=invisible')+(req.query.fullgames?' title='+req.query.fullgames:'')+'><span>'+(req.query.minutes?req.query.minutes+'\/':'')+(req.query.squads?req.query.squads+'\/':'')+(req.query.games?req.query.games:'')+'<\/span><input type=checkbox name=allgames><\/label>';o+='<input name=footballdata title=footballdata autocomplete=off value='+(doc&&doc.footballdata?doc.footballdata:'')+'>';o+='<input name=apifootball title=apifootball autocomplete=off value='+(doc&&doc.apifootball?doc.apifootball:'')+'>';o+='<input name=name placeholder=name autocomplete=off value=\\\"'+(doc?doc.name:'')+'\\\" '+(doc?'disabled':'')+'>';o+='<input name=shortname placeholder=\\\"'+(doc?doc.name:'short name')+'\\\" autocomplete=off value=\\\"'+(doc&&doc.shortname?doc.shortname:'')+'\\\">';if(doc)o+='<a href=overview\/player.php?p='+doc._id+'>o<\/a>';o+='<input name=dob type=date value='+(doc?doc.dob:'')+'><input type=checkbox name=retired'+(doc&&doc.retired?' checked':'')+'>';if(doc&&doc.dob){var age=(new Date().getTime()-new Date(doc.dob).getTime())\/(1000*60*60*24*365);o+='<span class=age title='+age.toFixed(1)+'>'+age.toFixed(0)+'<\/span>';}o+='<input name=nation placeholder=nation autocomplete=off value='+(doc?doc.nation:'')+'>';o+='<input name=nationalshirtnumber autocomplete=off value='+(doc&&doc.nationalshirtnumber?doc.nationalshirtnumber:'')+'>';o+='<input name=height type=number placeholder=height min=155 max=205 autocomplete=off value='+(doc?doc.height:'')+(doc?' tabindex=-1':'')+'>';o+='<select name=foot><option value=R'+(doc&&doc.foot=='R'?' selected':'')+'>R<\/option><option value=L'+(doc&&doc.foot=='L'?' selected':'')+'>L<\/option><\/select>';var ps=['GK','CB','SB','W','DM','CM','AM','SM','WF','SS','CF'];var pt;for(var i=0;i<7;i++){pt='<select name=position'+(i+1)+'><option><\/option>';for(var p in ps){pt+='<option value='+ps[p]+(doc&&doc.positions&&(doc.positions[i]==ps[p])?' selected':'')+'>'+ps[p]+'<\/option>';}pt+='<\/select>';o+=pt;}o+='<input name=shirtnumber autocomplete=off value='+(doc&&doc.shirtnumber?doc.shirtnumber:'')+'>';var sides=['SR','BR','B','BL','SL'];for(var s in sides){o+='<input type=radio name=side title='+sides[s]+' value='+sides[s]+((doc&&doc.side==sides[s])||(!doc&&s==2)?' checked':'')+'>';}var ss=['DRI','TAC','POS','MAR','PLA','PAS','GOA','OOS','TRG','LIN','LON','WID','CEN','PEN','ONE','OUT','MRK','SLI','COV','DFL','PEK','OOK','THR'];var ls=['dribbling','tacticle dribble','positioning','marauding','playmaker','passing','goal scorer','one-on-one scorer','target man','line breaker','long shots','wide','centre','penalty taker','one touch play','outside curve','marking','sliding','covering','defensive leader','penalty keeper','one-on-one keeper','long throw'];var ds=[\"tends to dribble\",\"holds on to the ball by dribbling\",\"improves positioning when receiving passes and crosses\",\"makes frequent runs to get behind opposition defence\",\"improves team's off the ball movement when in possession\",\"when on the ball, other players make intelligent runs to receive passes in better positions\",\"improves positioning and responsiveness to passes leading to more goals\",\"easier to score when one-on-one with goalkeeper\",\"improves ability to hold the ball up when playing up front\",\"improves timing at which player makes a run off the last defender\",\"improves accuracy on long range strikes\",\"prefers to play out wide\",\"prefers to play down the middle\",\"makes player a better penalty taker\",\"improves accuracy on one-touch play\",\"improves accuracy when using outside of foot\",\"stays tight on opponent when marking\",\"reduces risk of conceding fouls when slide-tackling\",\"improves ability to cover for other defenders who have been passed\",\"improves command of backline, making offside traps more effective\",\"improves chances of saving penalties\",\"improves response to close range shots making it harder for opposition to score when one-on-one\",\"improves range on long throws\"];for(var s in ss){o+='<label'+(doc&&doc.skills&&doc.skills.special&&doc.skills.special.indexOf(ss[s])>-1?' class=selected':'')+'><input type=checkbox name=ss'+s+' value='+ss[s]+' '+(doc&&doc.skills&&doc.skills.special&&doc.skills.special.indexOf(ss[s])>-1?'checked':'')+'><span title=\"'+ds[s]+'\">'+ls[s]+'<\/span><input type=checkbox name=confirmed'+ss[s]+' value=confirmed'+ss[s]+(doc&&doc.confirmedskills&&doc.confirmedskills.indexOf(ss[s])>-1?' checked':'')+'><\/label>';}if(doc&&doc.injuries.length>0){var injury=doc.injuries[0];o+='<input class=lastinjury readonly=true value=\"'+(injury[\"injury-reason\"]?injury[\"injury-reason\"]:\"last injury\")+' @ '+(injury[\"injury-start\"]?injury[\"injury-start\"]:\"\")+' - '+(injury[\"injury-end\"]?injury[\"injury-end\"]:\"\")+'\"\/>';}o+='<input name=injury-end type=date class=\"injury-date'+(doc?'':' nonvisible')+'\" placeholder=end><input name=injury-start type=date class=\"injury-date'+(doc?'':' nonvisible')+'\" placeholder=start><input name=injury-reason'+(doc?'':' class=nonvisible')+' placeholder=\"injury reason\"><\/div><div><div><select name=authenticity>';var authenticity=['guess','watched-onetime','watched-slightly','watched-well','watched-refer','default-increase','default-decrease','default-refer'];for(var r in authenticity){o+='<option value='+authenticity[r]+(doc&&doc.authenticity==authenticity[r]?' selected':'')+'>'+authenticity[r]+'<\/option>';}o+='<\/select><label'+(typeof age!='undefined'&&age>24?' class=invisible':'')+'>youth<input type=checkbox name=youth'+(doc&&doc.youth?' checked':'')+'><\/label>';if(doc)o+='<div class=nationalappearance><span><\/span><input name=nationalappearance type=date><input name=minutes type=number autocomplete=off><button name=nationalappearance>save<\/button><\/div>';o+='<\/div>';var skills=[{'k':'att','n':'attack','d':'suitability to an attacking role'},{'k':'def','n':'defence','d':'suitability to a defensive role'},{'k':'bod','n':'body balance','d':'strength in physical tussles'},{'k':'sta','n':'stamina','d':'level of fitness and durability'},{'k':'top','n':'top speed','d':'how quick player is when off the ball'},{'k':'acc','n':'accelaration','d':'how quickly player reaches maximum speed'},{'k':'res','n':'responsiveness','d':'how responsive player is to passes, loose balls and movement of opposition players'},{'k':'agi','n':'agility','d':'agility and mobility'},{'k':'dra','n':'dribble accuracy','d':'level of control when player is dribbling'},{'k':'drs','n':'dribble speed','d':'how quick player is when on the ball'},{'k':'spa','n':'short pass accuracy','d':'accuracy on short passes'},{'k':'sps','n':'short pass speed','d':'velocity of short passes'},{'k':'lpa','n':'long pass accuracy','d':'accuracy on long passes'},{'k':'lps','n':'long pass speed','d':'velocity of long passes'},{'k':'sha','n':'shot accuracy','d':'level of accuracy when shooting'},{'k':'shp','n':'shot power','d':'shot velocity'},{'k':'sht','n':'shot technique','d':'ability to finish even from awkward positions and angles'},{'k':'fka','n':'free kick accuracy','d':'prowess from set pieces'},{'k':'swe','n':'swerve','d':'how much player can swerve the ball'},{'k':'hea','n':'header','d':'accuracy when heading the ball'},{'k':'jum','n':'jump','d':'how high player can jump'},{'k':'tec','n':'technique','d':'level of control when player traps the ball'},{'k':'agg','n':'aggression','d':'how likely player is to join attack'},{'k':'ten','n':'tenacity','d':'how well player copes with fatigue and adversity'},{'k':'kee','n':'keeper skills','d':'how good goalkeeping skills are'},{'k':'tea','n':'teamwork','d':'how well player can link up with others and receive passes'}];var k,n,d;for(var s in skills){k=skills[s].k;n=skills[s].n;d=skills[s].d;o+='<span><\/span><input name='+k+' type=number min=1 max=99 autocomplete=off'+(doc&&doc.skills[k]?(' value='+doc.skills[k]):'')+'>';o+='<label for='+k+'><b class=invisible><\/b><span title=\"'+d+'\">'+n+'<\/span><input type=checkbox name=confirmed'+k+' value=confirmed'+k+((doc&&(doc.confirmedskills&&doc.confirmedskills.indexOf(k)>-1))?' checked':'')+'><hr\/><span class=minimum><\/span><span class=average><\/span><span class=maximum><\/span><span class=playervalue><\/span><\/label>';}o+='<span><\/span><input name=frm type=number min=1 max=8 autocomplete=off'+(doc?' value='+doc.skills.frm:'')+'><label for=frm><b class=invisible><\/b><span title=\"ability to maintain form when played regularly\">form<\/span><input type=checkbox name=confirmedfrm value=confirmedfrm'+((doc&&(doc.confirmedskills&&doc.confirmedskills.indexOf('frm')>-1))?' checked':'')+'><hr\/><span class=minimum><\/span><span class=average><\/span><span class=maximum><\/span><span class=playervalue><\/span><\/label>';o+='<span><\/span><input name=wfa type=number min=1 max=8 autocomplete=off'+(doc?' value='+doc.skills.wfa:'')+'><label for=wfa><b class=invisible><\/b><span title=\"how accurate player is off weaker foot\">weak foot accuracy<\/span><input type=checkbox name=confirmedwfa value=confirmedwfa'+((doc&&(doc.confirmedskills&&doc.confirmedskills.indexOf('wfa')>-1))?' checked':'')+'><hr\/><span class=minimum><\/span><span class=average><\/span><span class=maximum><\/span><span class=playervalue><\/span><\/label>';o+='<span><\/span><input name=wfu type=number min=1 max=8 autocomplete=off'+(doc?' value='+doc.skills.wfu:'')+'><label for=wfu><b class=invisible><\/b><span title=\"how often player will use weaker foot\">weak foot usage<\/span><input type=checkbox name=confirmedwfu value=confirmedwfu'+((doc&&(doc.confirmedskills&&doc.confirmedskills.indexOf('wfu')>-1))?' checked':'')+'><hr\/><span class=minimum><\/span><span class=average><\/span><span class=maximum><\/span><span class=playervalue><\/span><\/label>';o+='<span><\/span><select name=inj>';var inj=['','A','B','C'];for(var i in inj){o+='<option value='+inj[i]+(doc&&doc.skills.inj==inj[i]&&inj[i]!=''?' selected':'')+'>'+inj[i]+'<\/option>';}o+='<\/select><label><input type=checkbox name=confirmedinj value='+inj+((doc&&(doc.confirmedskills&&doc.confirmedskills.indexOf('inj')>-1))?' checked':'')+'><\/label><\/div>';return o;}"},"updates":{"club":"function(doc,req){if(doc){var m='Updated '+doc.name;}else{doc={'type':'club'};doc._id=req.query.clubID;var m='Created '+req.form.name;}doc.expectations={};var competition;for(var d in req.form){if(['name','city','country','color1','color2','color3','formation','track','footballdata','apifootball'].indexOf(d)>-1)doc[d]=req.form[d];else if(d.indexOf('expectations')==0){competition=d.split('-')[1];doc.expectations[competition]=req.form[d];}}doc.png='png' in req.form;return[doc,m];}","contributions":"function(doc,req){var c={'type':'','minute':'','order':'','targetID':'','targetName':'','origin':'','target':'','explanation':'','result':'','style':'','context':''};var t,player;for(var d in req.form){if(d!='playerID'&&d!='playerName'&&d!='team')c[d]=req.form[d];}t=parseInt(req.form['team'])-1;for(var p in doc.teams[t].appearances){player=doc.teams[t].appearances[p];if(player.id==req.form['playerID']){doc.teams[t].appearances[p]['contributions'].push(c);if(c['type']=='substitute'||c['type']=='red'){doc.teams[t].appearances[p]['roles'][player['roles'].length-1]['endMin']=req.form['minute'];}else if(c['type']=='substitute-on'){var newRole={'name':'','startMin':req.form['minute']};doc.teams[t].appearances[p]['roles'].push(newRole);}else if(c['result']=='goal'){doc.teams[t].goals++;doc.teams[t].goalMinutes.push(req.form['minute']);}else if(c['result']=='owngoal'){t=t==0?1:0;doc.teams[t].goals++;doc.teams[t].goalMinutes.push(req.form['minute']);if(!doc.teams[t].appearances.length){if(Object.keys(doc.teams[t]).indexOf('goalTypes')==-1)doc.teams[t].goalTypes=[];doc.teams[t].goalTypes.push(req.form['context']);}}else if(c['type']=='penalties'&&c['result']=='scores'){if(!('penalties' in doc.teams[t])){doc.teams[t]['penalties']=0;}doc.teams[t]['penalties']++;}break;}}var m=player.shortname||player.name;return[doc,m];}","deleteContribution":"function(doc,req){var player,c;for(var t in [0,1]){for(var p in doc.teams[t].appearances){player=doc.teams[t].appearances[p];for(var index in player.contributions){c=player.contributions[index];if(c.minute==req.form['minute']){doc.teams[t].appearances[p].contributions.splice(index,1);if(c['type']=='substitute'||c['type']=='red'){delete doc.teams[t].appearances[p]['roles'][doc.teams[t].appearances[p]['roles'].length-1]['endMin'];}else if(c['type']=='substitute-on'){doc.teams[t].appearances[p]['roles'].splice(doc.teams[t].appearances[p]['roles'].length-1,1);if(doc.teams[t].appearances[p]['roles'][0].name=='bench')delete doc.teams[t].appearances[p]['roles'][0].endMin;}else if(c['result']=='goal'){doc.teams[t].goals--;doc.teams[t].goalMinutes.splice(doc.teams[t].goalMinutes.indexOf(req.form['minute']),1);}else if(c['result']=='owngoal'){t=t==0?1:0;doc.teams[t].goals--;doc.teams[t].goalMinutes.splice(doc.teams[t].goalMinutes.indexOf(req.form['minute']),1);}else if(c['type']=='penalties'&&c['result']=='scores'){doc.teams[t]['penalties']--;}}}}for(var m in doc.teams[t].goalMinutes){if(doc.teams[t].goalMinutes[m]==req.form['minute']){doc.teams[t].goals--;doc.teams[t].goalMinutes.splice(m,1);if(Object.keys(doc.teams[t]).indexOf('goalTypes')>-1){doc.teams[t].goalTypes.splice(m,1);}}}}var m='Removed all contributions in minute '+req.form['minute'];return[doc,m];}","deletePlayerFromGame":"function(doc,req){var i,j,appearance;var player=req.form.player;for(i=0;i<2;i++){for(j=0;j<doc.teams[i].appearances.length;j++){appearance=doc.teams[i].appearances[j];if(appearance.id==player){doc.teams[i].appearances.splice(j,1);break;}}}return[doc,''];}","editContribution":"function(doc,req){var player,id,contributions,name,value;name=req.form.name;value=req.form.value;for(var t in [0,1]){for(var p in doc.teams[t].appearances){player=doc.teams[t].appearances[p];id=player.id;if(id==req.form.player){contributions=player.contributions;for(var i in contributions){contribution=contributions[i];if(contribution.minute==req.form.minute&&contribution.order==req.form.order){if(name=='targetplayer')name='targetID';contribution[name]=value;}}}}}var m=req.form.minute;return[doc,m];}","editContributionMinute":"function(doc,req){var player,contributions,contribution,roles,role;for(var t in [0,1]){for(var p in doc.teams[t].appearances){player=doc.teams[t].appearances[p];contributions=player.contributions;for(var i in contributions){contribution=contributions[i];if(contribution.minute==req.form.oldminute){contribution.minute=req.form.newminute;}}roles=player.roles;for(i in roles){role=roles[i];if(role.endMin==req.form.oldminute)role.endMin=req.form.newminute;if(role.startMin==req.form.oldminute)role.startMin=req.form.newminute;}}for(var m in doc.teams[t].goalMinutes){if(doc.teams[t].goalMinutes[m]==req.form.oldminute){doc.teams[t].goalMinutes[m]=req.form.newminute;}}}var m='Changed contribution minute from '+req.form.oldminute+' to '+req.form.newminute;return[doc,m];}","finalWhistle":"function(doc,req){var data=JSON.parse(req.body);var players=data['players'];var t,p,player,playerID,lastMinute,l,lastRole,preFatigue,firstMinute,minutesOnPitch,stamina,condition,additionalFatigue;var m='';for(t=0;t<2;t++){for(p in doc.teams[t].appearances){player=doc.teams[t].appearances[p];playerID=player.id;preFatigue=('preFatigue' in player)?player.preFatigue:0;if(playerID in players){lastMinute=data['lastMinute'];condition=players[playerID]['condition'];condition=condition?(condition.length==1?parseInt(condition):condition):null;if(condition)doc.teams[t].appearances[p].condition=condition;l=player['roles'].length-1;lastRole=l>=0?player['roles'][l]:null;if(lastRole==null||(player['roles'].length==1&&player['roles'][0].name=='bench')){doc.teams[t].appearances[p]['postFatigue']=preFatigue;}else if(player['roles'].length>=1){if(Object.keys(lastRole).indexOf('endMin')==-1){doc.teams[t].appearances[p]['roles'][l]['endMin']=lastMinute;}else{lastMinute=lastRole['endMin'];}firstMinute=player['roles'][0].name=='bench'&&player['roles'].length>1?player['roles'][1]['startMin']:player['roles'][0]['startMin'];firstMinute=firstMinute.indexOf('+')>-1?parseInt(firstMinute.split('+')[0])+parseInt(firstMinute.split('+')[1]):parseInt(firstMinute);lastMinute=lastMinute.indexOf('+')>-1?parseInt(lastMinute.split('+')[0])+(firstMinute!=0?parseInt(lastMinute.split('+')[1]):0):parseInt(lastMinute);minutesOnPitch=lastMinute-firstMinute;stamina=Object.keys(player.skills).indexOf('sta')>-1?player.skills.sta:70;if(condition&&typeof condition!='number')condition=parseInt(condition.substr(0,1))+(condition.substr(1,1)=='-'?-0.3:0.3);additionalFatigue=minutesOnPitch*(1+((99-stamina)\/100))*(1+((5-condition)\/10));if(player.positions[0]=='GK')additionalFatigue=additionalFatigue\/2;doc.teams[t].appearances[p]['postFatigue']=Math.round(preFatigue+additionalFatigue);}m+=' '+playerID+',';}else{doc.teams[t].appearances[p]['postFatigue']=preFatigue;}}}return[doc,m];}","game":"function(doc,req){var time;if(doc){var m='Updated '+doc.teams[0].name+'-'+doc.teams[1].name;}else{doc={'teams':[{'appearances':[],'goals':0,'goalMinutes':[]},{'appearances':[],'goals':0,'goalMinutes':[]}]};doc.type='game';doc._id=req.query.gid;var m='Created '+req.form.club1+'-'+req.form.club2;}for(var d in req.form){if(d=='season'||d=='competition'||(d=='stage'&&req.form[d].length>0))doc[d]=req.form[d];else if(d=='matchday'&&req.form[d].length>0)doc[d]=parseInt(req.form[d]);else if(d=='date')time=req.form[d];else if(d=='time')time+='T'+req.form[d]+(req.form[d].length==5?':00':'')+'.000Z';else if(d=='club1')doc.teams[0].id=req.form[d];else if(d=='club2')doc.teams[1].id=req.form[d];else if(d=='nameclub1')doc.teams[0].name=req.form[d];else if(d=='nameclub2')doc.teams[1].name=req.form[d];else if(d=='expectation1')doc.teams[0].expectation=req.form[d];else if(d=='expectation2')doc.teams[1].expectation=req.form[d];else if(d=='track1')doc.teams[0].track=req.form[d];else if(d=='track2')doc.teams[1].track=req.form[d];else if(d=='png1')doc.teams[0].png=true;else if(d=='png2')doc.teams[1].png=true;else if(d=='team1colors')doc.teams[0].colors=req.form[d];else if(d=='team2colors')doc.teams[1].colors=req.form[d];else if(d=='goals-team1')doc.teams[0].goals=parseInt(req.form[d]);else if(d=='goals-team2')doc.teams[1].goals=parseInt(req.form[d]);else if(d=='home1'&&req.form[d]=='on')doc.teams[0].home=true;else if(d=='home2'&&req.form[d]=='on')doc.teams[1].home=true;else if(d=='firstTeamPlayers')doc.teams[0].appearances=JSON.parse(req.form[d]);else if(d=='secondTeamPlayers')doc.teams[1].appearances=JSON.parse(req.form[d]);else if(d=='footballdata1')doc.teams[0].footballdata=req.form[d];else if(d=='footballdata2')doc.teams[1].footballdata=req.form[d];}if('team1color1' in req.form && 'team1color2' in req.form)doc.teams[0].colors=req.form.team1color1+'-'+req.form.team1color2;if('team2color1' in req.form && 'team2color2' in req.form)doc.teams[1].colors=req.form.team2color1+'-'+req.form.team2color2;doc.time=time;return[doc,m];}","goal":"function(doc,req){var team=parseInt(req.form.team)-1;if(Object.keys(req.form).indexOf('goals')>-1){var goals=parseInt(req.form.goals);doc.teams[team].goals=goals;if(Object.keys(req.form).indexOf('minute')>-1){doc.teams[team].goalMinutes.push(req.form.minute);if(Object.keys(req.form).indexOf('type')>-1){var type=req.form.type;if(Object.keys(doc.teams[team]).indexOf('goalTypes')==-1)doc.teams[team].goalTypes=[];doc.teams[team].goalTypes.push(type);}}}else{if(Object.keys(req.form).indexOf('minute')>-1&&req.form.minute.substr(0,1)=='p'){if(Object.keys(doc.teams[team]).indexOf('penalties')==-1)doc.teams[team].penalties=[];doc.teams[team].penalties.push(req.form.minute);}else{doc.teams[team].penalties=parseInt(req.form.penalties);}}return[doc,'Score Saved'];}","nation":"function(doc,req){if(doc){var m='Updated '+doc.name;}else{doc={'type':'nation'};doc._id=req.query.nationID;var m='Created '+req.form.name;}for(var d in req.form){if(d=='name'||d=='continent'||d=='color1'||d=='color2'||d=='color3'||d=='formation'||d=='track'||d=='expectation'||d=='apifootball')doc[d]=req.form[d];}return[doc,m];}","nationalappearance":"function(doc,req){doc={};var minutes=req.form.minutes;var preFatigue=req.form.preFatigue;var fatigue=req.form.fatigue;doc.type='nationalappearance';doc._id=req.query.id;doc.player=req.form.player;doc.date=req.form.date;doc.minutes=parseInt(minutes);doc.preFatigue=parseInt(preFatigue);doc.fatigue=parseInt(fatigue);var m=doc.date+' -- '+preFatigue+' -- '+fatigue;return[doc,m];}","player":"function(doc,req){var positions=[];var ss=[];var cs=[];var injury={};var m;if(doc){if('authenticity' in doc.skills)delete doc.skills.authenticity;if('confirmedSkills' in doc)delete doc.confirmedSkills;if('clubname' in doc)delete doc.clubname;if('shirtNumber' in doc)delete doc.shirtNumber;if('nationalShirtNumber' in doc)delete doc.nationalShirtNumber;if('pesSkills' in doc)delete doc.pesSkills;if('uefa' in doc)delete doc.uefa;if(!('originalskills' in doc))doc.originalskills={};doc['uptodateingames']='allgames' in req.form;m='Updated '+doc.name;}else{doc={'skills':{},'originalskills':{},'positions':[],'injuries':[],'authenticity':'guess','outofuefa':false,'outofleague':false};doc.type='player';doc._id=req.query.pid;doc.name=req.form.name;doc.dob=req.form.dob;m='Created '+doc.name;}for(var d in req.form){if(d=='dob'||d=='foot'||d=='nation'||d=='side'||d=='shortname'||d=='shirtnumber'||d=='nationalshirtnumber'||d=='authenticity'||d=='footballdata'||d=='apifootball')doc[d]=req.form[d];else if(d=='club')doc[d]={'id':req.form[d],'name':req.form['clubname']};else if(d=='height')doc[d]=parseInt(req.form[d]);else if(d.indexOf('position')>-1&&req.form[d].length>0)positions.push(req.form[d]);else if(d.indexOf('ss')==0)ss.push(req.form[d]);else if(d=='inj'){if(req.form.authenticity.indexOf('default')>-1&&!(d in doc.originalskills))doc.originalskills[d]=(d in doc.skills) ? doc.skills[d] : req.form[d];doc.skills[d]=req.form[d];}else if(d.length==3&&d!='dob'&&req.form[d].length>0){if(req.form.authenticity.indexOf('default')>-1&&!(d in doc.originalskills))doc.originalskills[d]=(d in doc.skills) ? doc.skills[d] : parseInt(req.form[d]);doc.skills[d]=parseInt(req.form[d]);}else if((d=='injury-start'||d=='injury-end'||d=='injury-reason')&&req.form[d].length>0){injury[d]=req.form[d];}}doc['outofuefa']='outofuefa' in req.form;doc['outofleague']='outofleague' in req.form;doc['youth']='youth' in req.form;doc['retired']='retired' in req.form;if(req.form.authenticity.indexOf('default')>-1&&!('special' in doc.originalskills))doc.originalskills.special=('special' in doc.skills) ? doc.skills.special : ss;doc.skills.special=ss;if(req.form.authenticity.indexOf('default')==-1)delete doc.originalskills;if(!doc.injuries)doc.injuries=[];if(Object.keys(injury).length>0)doc.injuries.unshift(injury);doc.positions=positions;for(var d in req.form){if(d.length==3&&d!=='dob'&&d.indexOf('ss')==-1){if((Object.keys(req.form).indexOf('confirmed'+d)>-1)||(req.form.authenticity=='default-refer')||(d=='kee'&&req.form[d]==50)){cs.push(d);}}}for(var d in req.form){if(d.indexOf('ss')==0){if((Object.keys(req.form).indexOf('confirmed'+req.form[d])>-1)||(req.form.authenticity=='default-refer')){cs.push(req.form[d]);}}}doc.confirmedskills=cs;return[doc,m];}","playerInGame":"function(doc,req){var i,j,appearance,d;var positions=[];var special=[];for(i=0;i<2;i++){for(j=0;j<doc.teams[i].appearances.length;j++){appearance=doc.teams[i].appearances[j];if(appearance.id==req.form.playerID){for(d in req.form){if(d=='playerID')continue;if(d.substr(0,8)=='position')positions.push(req.form[d]);else if(d.substr(0,2)=='ss')special.push(req.form[d]);else if(d=='height')doc.teams[i].appearances[j][d]=parseInt(req.form[d]);else if(d!='dob'&&d.length==3){if(d=='inj')doc.teams[i].appearances[j]['skills'][d]=req.form[d];else doc.teams[i].appearances[j]['skills'][d]=parseInt(req.form[d]);}else doc.teams[i].appearances[j][d]=req.form[d];}doc.teams[i].appearances[j]['positions']=positions;doc.teams[i].appearances[j]['skills']['special']=special;}}}return[doc,''];}","roleChanges":"function(doc,req){var t=parseInt(req.form['team'])-1;var player,newRole;var m='';for(var p in doc.teams[t].appearances){player=doc.teams[t].appearances[p];if(player.id==req.form['player']){if(req.form['previousRole']=='bench'){doc.teams[t].appearances[p]['roles'][1]['name']=req.form['newRole'];m=req.form['player'];}else{if(req.form['newRole']!=req.form['previousRole']){if(req.form['minute']==doc.teams[t].appearances[p]['roles'][doc.teams[t].appearances[p]['roles'].length-1]['startMin']){doc.teams[t].appearances[p]['roles'][doc.teams[t].appearances[p]['roles'].length-1]['name']=req.form['newRole'];}else{doc.teams[t].appearances[p]['roles'][doc.teams[t].appearances[p]['roles'].length-1]['endMin']=req.form['minute'];newRole={'name':req.form['newRole'],'startMin':req.form['minute']};doc.teams[t].appearances[p]['roles'].push(newRole);}m=req.form['player'];}}break;}}return[doc,m];}"},"views":{"allGamesChronological":{"map":"function(doc){if(doc.type=='game')emit(doc.time,doc);}"},"allNations":{"map":"function(doc){if(doc.type=='nation'){var trackLevels=['watch','note','scores',''];var track=trackLevels.indexOf(doc.track);var expectations=['title','semi','quarter','qualify',''];var expectation=expectations.indexOf(doc.expectation);var continents=['Europe','Africa','South America','North America','Asia'];var continent=continents.indexOf(doc.continent);emit([continent,expectation,track],doc);}}"},"averages":{"map":"function(doc){var i,skill,value,position;var averages=[];var skills=['att','def','bod','sta','top','acc','res','agi','dra','drs','spa','sps','lpa','lps','sha','shp','sht','fka','swe','hea','jum','tec','agg','ten','kee','tea','frm','wfa','wfu'];if(doc.type=='player'&&doc.authenticity!='guess'){for(i=0;i<skills.length;i++){skill=skills[i];value=doc.skills[skill];if(value===parseInt(value))averages.push(value);}position=doc.positions[0];position=position=='W'?'SB':position=='WF'?'SM':position;emit(position,averages);}}","reduce":"function(keys,values){var sum=[];var count=[];var averages=[];var i,v;for(i=0;i<29;i++){sum[i]=0;count[i]=0;}values.forEach(function(array){for(i=0;i<array.length;i++){v=array[i];sum[i]=sum[i]+parseInt(v);count[i]=count[i]+1;}});for(i=0;i<29;i++){averages[i]=Math.round(sum[i]\/count[i]);}return averages;}"},"clubGames":{"map":"function(doc){if(doc.type=='game'){emit(doc.teams[0].id,doc._id);emit(doc.teams[1].id,doc._id);}}"},"clubsByApiFootballID":{"map":"function(doc){if(doc.type=='club'&&doc.apifootball){emit(doc.apifootball,doc);}}"},"clubsByFootballDataID":{"map":"function(doc){if(doc.type=='club'&&doc.footballdata){emit(doc.footballdata,doc);}}"},"clubsByInterest":{"map":"function(doc){if(doc.type=='club'){var trackLevels=['watch','note','scores',''];var track=trackLevels.indexOf(doc.track);var expectations=['title','semi','quarter','qualify','el','cfl','qualify-cl','qualify-el','qualify-cfl','safe','survive','train',''];var expectationCL=expectations.indexOf(doc.expectations.CL);var expectationEL=expectations.indexOf(doc.expectations.EL);var expectationCFL=('CFL' in doc.expectations)?expectations.indexOf(doc.expectations.CFL):12;var expectationL=expectations.indexOf(doc.expectations.L);var countries=['ENG','ESP','DEU','ITA','FRA','PRT','NED','TUR','BEL','AUT','SCT','UKR','GRC','CHE','HRV','SRB','CZE','DNK','SWE','NOR','MDA','CYP','AZE','RUS','BRA','ARG','SAU','JPN','EGY'];var country=countries.indexOf(doc.country);country=country>-1?country:countries.length;emit([country,expectationCL,expectationEL,expectationCFL,expectationL,track],doc);}}"},"clubsToWatch":{"map":"function(doc){if(doc.type=='club'){var trackLevels=['watch','note','scores',''];var track=trackLevels.indexOf(doc.track);emit(track,doc);}}"},"formHistory":{"map":"function(doc){var i,j,appearance,condition,date,opponent;if(doc.type=='game'||doc.type=='nationalappearance'){if(doc.type=='game'){for(i=0;i<2;i++){for(j=0;j<doc.teams[i].appearances.length;j++){appearance=doc.teams[i].appearances[j];condition=appearance.condition?appearance.condition:0;date=doc.time.split('T')[0];opponent=i==0?doc.teams[1].id:doc.teams[0].id;emit([appearance.id,date],{date:date,condition:condition,opponent:opponent});}}}else{date=doc.date;emit([doc.player,date],{date:date,condition:0,opponent:'N'});}}}"},"gamesByApiFootballID":{"map":"function(doc){if(doc.type=='game'&&doc.apifootball){emit(doc.apifootball,doc);}}"},"maximums":{"map":"function(doc){var i,skill,value,position;var maximums=[];var skills=['att','def','bod','sta','top','acc','res','agi','dra','drs','spa','sps','lpa','lps','sha','shp','sht','fka','swe','hea','jum','tec','agg','ten','kee','tea','frm','wfa','wfu'];if(doc.type=='player'&&doc.authenticity!='guess'){for(i=0;i<skills.length;i++){skill=skills[i];value=doc.skills[skill];if(value===parseInt(value))maximums.push(value);}position=doc.positions[0];position=position=='W'?'SB':position=='WF'?'SM':position;emit(position,maximums);}}","reduce":"function(keys,values){var maximums=[];var i,v;for(i=0;i<29;i++)maximums[i]=0;values.forEach(function(array){for(i=0;i<array.length;i++){v=array[i];if(parseInt(v)>maximums[i])maximums[i]=parseInt(v);}});return maximums;}"},"minimums":{"map":"function(doc){var i,skill,value,position;var minimums=[];var skills=['att','def','bod','sta','top','acc','res','agi','dra','drs','spa','sps','lpa','lps','sha','shp','sht','fka','swe','hea','jum','tec','agg','ten','kee','tea','frm','wfa','wfu'];if(doc.type=='player'&&doc.authenticity!='guess'){for(i=0;i<skills.length;i++){skill=skills[i];value=doc.skills[skill];if(value===parseInt(value))minimums.push(value);}position=doc.positions[0];position=position=='W'?'SB':position=='WF'?'SM':position;emit(position,minimums);}}","reduce":"function(keys,values){var minimums=[];var i,v;for(i=0;i<29;i++)minimums[i]=99;values.forEach(function(array){for(i=0;i<array.length;i++){v=array[i];if(minimums[i]>parseInt(v))minimums[i]=parseInt(v);}});return minimums;}"},"nationsByInterest":{"map":"function(doc){if(doc.type=='nation'){var trackLevels=['watch','note','scores',''];var track=trackLevels.indexOf(doc.track);var expectations=['title','semi','quarter','qualify',''];var expectation=expectations.indexOf(doc.expectation);var continents=['Europe','South America','Africa','Asia','North America'];var continent=continents.indexOf(doc.continent);emit([track,expectation,continent],doc);}}"},"playerFullGames":{"map":"function(doc){var i,j,appearance,opponent;if(doc.type=='game'){for(i=0;i<2;i++){for(j=0;j<doc.teams[i].appearances.length;j++){appearance=doc.teams[i].appearances[j];opponent=i==0?doc.teams[1].appearances:doc.teams[0].appearances;if((appearance.roles&&(appearance.roles[0].name!='bench'||(appearance.roles[0].name=='bench'&&appearance.roles.length>1)))&&opponent&&opponent.length)emit(appearance.id,doc._id);}}}}"},"playerGames":{"map":"function(doc){var i,j,appearance;if(doc.type=='game'){for(i=0;i<2;i++){for(j=0;j<doc.teams[i].appearances.length;j++){appearance=doc.teams[i].appearances[j];emit(appearance.id,doc._id);}}}}"},"playerGamesChronological":{"map":"function(doc){var now,startFrom,i,j,appearance,fatigue,date;if(doc.type=='game'||doc.type=='nationalappearance'){now=new Date();now.setMonth(now.getMonth()-4);startFrom=now.toISOString();if(doc.type=='game'){if(doc.time>startFrom){for(i=0;i<2;i++){for(j=0;j<doc.teams[i].appearances.length;j++){appearance=doc.teams[i].appearances[j];if(Object.keys(appearance).indexOf('roles')>-1){fatigue=Object.keys(appearance).indexOf('postFatigue')>-1?appearance.postFatigue:0;date=doc.time.split('T')[0];emit(appearance.id,{date:date,fatigue:fatigue,gameRoles:appearance.roles});}}}}}else{if(doc.date>startFrom.split('T')[0]){fatigue=doc.fatigue;date=doc.date;emit(doc.player,{date:date,fatigue:fatigue});}}}}"},"playerMinutes":{"map":"function(doc){var i,j,appearance;if(doc.type=='game'){for(i=0;i<2;i++){for(j=0;j<doc.teams[i].appearances.length;j++){appearance=doc.teams[i].appearances[j];if(appearance.roles&&(appearance.roles[0].name!='bench'||(appearance.roles[0].name=='bench'&&appearance.roles.length>1)))emit(appearance.id,doc._id);}}}}"},"playerSquads":{"map":"function(doc){var i,j,appearance;if(doc.type=='game'){for(i=0;i<2;i++){for(j=0;j<doc.teams[i].appearances.length;j++){appearance=doc.teams[i].appearances[j];if(appearance.roles&&appearance.roles.length)emit(appearance.id,doc._id);}}}}"},"playersByAge":{"map":"function(doc){if(doc.type=='player')emit(doc.dob,doc);}"},"playersByApiFootballID":{"map":"function(doc){if(doc.type=='player'&&!doc.retired&&doc.apifootball){emit(doc.apifootball,doc);}}"},"playersByClub":{"map":"function(doc){if(doc.type=='player'){var i,skill,value;var total=0;for(i=0;i<Object.keys(doc.skills).length;i++){skill=Object.keys(doc.skills)[i];value=doc.skills[skill];if(skill.length==3&&skill!='inj'&&value){if(['frm','wfa','wfu'].indexOf(skill)>-1)total+=12*value;else total+=value;}}for(i=0;i<doc.skills.special.length;i++){total+=5;}total+=doc.height;total=3000-total;var club=(typeof doc.club=='object')?doc.club.id:doc.club;emit([club,total],doc);}}"},"playersByName":{"map":"function(doc){if(doc.type=='player')emit(doc.name,doc);}"},"playersByNation":{"map":"function(doc){if(doc.type=='player'){var i,skill,value;var national=2;if(('nationalshirtnumber' in doc)&&doc.nationalshirtnumber.length>0){if(doc.nationalshirtnumber!='-')national=0;else national=1;}var total=0;for(i=0;i<Object.keys(doc.skills).length;i++){skill=Object.keys(doc.skills)[i];value=doc.skills[skill];if(skill.length==3&&skill!='inj'&&value){if(['frm','wfa','wfu'].indexOf(skill)>-1)total+=12*value;else total+=value;}}for(i=0;i<doc.skills.special.length;i++){total+=5;}total+=doc.height;total=3000-total;var nation=doc.nation;emit([nation,national,total],doc);}}"},"playersByPosition":{"map":"function(doc){if(doc.type=='player'){var skill,value,i;var skills=Object.keys(doc.skills);var position=doc.positions[0];if(position=='SB'||position=='W')position='SBW';else if(position=='SM'||position=='WF')position='SMWF';var positions=['CF','SS','SMWF','AM','CM','DM','SBW','CB','GK'];var positionOrder=positions.indexOf(position);var total=0;for(i=0;i<skills.length;i++){skill=skills[i];value=doc.skills[skill];if(value){if(skill.length==3&&skill!='frm'&&skill!='inj'){if(skill=='wfa'||skill=='wfu')total+=12*value;else total+=value;}else if(skill=='special')total+=10*value.length;}}if(doc.height)total+=doc.height-100;emit([positionOrder,total],doc);}}"},"playersByTotal":{"map":"function(doc){if(doc.type=='player'){var total,i,skill,value;var skills=Object.keys(doc.skills);if(skills.length==31){total=0;for(i=0;i<skills.length;i++){skill=skills[i];value=doc.skills[skill];if(value){if(skill.length==3&&skill!='frm'&&skill!='inj'){if(skill=='wfa'||skill=='wfu')total+=12*value;else total+=value;}else if(skill=='special')total+=10*value.length;}}if(doc.height)total+=doc.height-100;emit(total,doc);}}}"},"playersInApiFootball":{"map":"function(doc){if(doc.type=='player'&&!doc.retired&&doc.apifootball){emit(doc._id,doc);}}"},"playersInFootballData":{"map":"function(doc){if(doc.type=='player'&&!doc.retired&&doc.footballdata){emit(doc._id,doc);}}"},"pngClubs":{"map":"function(doc){if(doc.type=='club'&&doc.png){emit(doc._id,doc);}}"},"trackedClubs":{"map":"function(doc){if(doc.type=='club'&&(doc.track=='watch'||doc.track=='note')){var trackLevels=['watch','note'];var track=trackLevels.indexOf(doc.track);var expectations=['title','semi','quarter','qualify','el','cfl','qualify-cl','qualify-el','qualify-cfl','safe','survive','train',''];var expectationCL=expectations.indexOf(doc.expectations.CL);var expectationEL=expectations.indexOf(doc.expectations.EL);var expectationCFL=('CFL' in doc.expectations)?expectations.indexOf(doc.expectations.CFL):12;var expectationL=expectations.indexOf(doc.expectations.L);var expectationC=expectations.indexOf(doc.expectations.C);var countries=['ENG','ESP','DEU','ITA','FRA','PRT','NED','TUR','BEL','AUT','SCT','UKR','GRC','CHE','HRV','SRB','CZE','DNK','SWE','NOR','MDA','CYP','AZE','RUS','BRA','ARG','SAU','JPN','EGY'];var country=countries.indexOf(doc.country);country=country>-1?country:countries.length;emit([country,track,expectationCL,expectationEL,expectationCFL,expectationL,expectationC],doc);}}"}}}