9 Rob Cuda
9 - Rob Cuda
Height: 6-1
Weight: 195
Year: Jr.
Hometown: Bartlett, Ill.
High School: South Elgin
Position: QB
Major: Finance
gp 10
yds 2328
td 19
yds/g 232.8

2016: Became the fourth player in the program’s history to be named the UAA Offensive Player of the Year, marking the sixth-time overall a Spartan has won the award… Selected to the All-UAA First Team for the second-straight year… Also earned an honorable mention to the All-PAC team… Set CWRU records for the most rushing yards (908) and rushing TDs (12) by a quarterback in a season… Recorded the eighth-most rushing yards, third-most TDs and sixth-most yards per rush in a season by a CWRU player… Completed 59.6% of his passes for 2,328 yards and 19 TDs with just 10 interceptions… Was 25th in Division III in total offense (323.6 yards per game), 30th in points responsible for per game (19.0), 36th in rushing TDs, 29th in yards per pass attempt (8.11), and 46th in passing yards per completion (13.61)… Named the UAA Offensive Player of the Week after completing 17-of-22 passes for a career-high 340 yards and two TDs, while rushing for another three touchdowns and 37 yards against Thiel… Earned the conference honor again for his performance against Washington, after rushing for a career-high 191 yards and completing 20-of-33 passes for 272 yards and three touchdowns… Eclipsed the 100-yard rushing mark in four games during the season, including three of the team’s final four contests… Accounting for at least one touchdown in each of the team’s 10 games… Had five games of at least 250 yards passing… Will enter his senior season ranked eighth in school history in career rushing yards (1,622), and fourth in career passing yards (5,053).

2015: Named to the D3football.com All-South Region Third Team and the All-UAA and All-PAC First Teams… selected as the PAC Offensive Player of the Week on September 21st, October 12th and October 26th, and the UAA Athlete of the Week on October 5th, October 12th and October 26th… started all 10 games at quarterback during his sophomore year… ranked 69th in Division III in completion percentage (0.599), 36th in completions per game (20.3), 42nd in passing efficiency (149.4), 16th in passing touchdowns (28), 31st in passing yards (2,631), 30th in passing yards per game (263.1), 71st in passing yards per completion (12.96), 14th in points responsible for (216), 11th in points responsible for per game (21.6), and ninth in total offense (334.6)… completed 203-of339 passes during the year, throwing for 28 touchdowns and five interceptions… added a team-high 709 yards on the ground and led all Spartans with eight rushing touchdowns… tallied 100+ rushing yard games with 145 yards against St. Vincent on September 19th and 100 yards against Washington and Jefferson on October 24th… ran for three touchdowns against Waynesburg on October 10th… completed 21-of-35 passes for 339 yards and three touchdowns against Chicago on September 5th… threw for four touchdowns against St. Vincent… threw for five touchdowns against Washington and Jefferson… Had at least one passing touchdown in each of the team’s 10 games.

2014: Appeared in three games at quarterback during the season…completed nine of 14 passes for 94 yards and one touchdown…made his collegiate debut against Carnegie Mellon on September 6...recorded season highs with five completions (on seven attempts), 47 yards and a touchdown against Thomas More on November 8.

Personal: Earned two varsity letters at South Elgin High School…three-year captain…two-time All-Illinois Honorable Mention as well as all-area and All-Upstate Eight…2013 MVP for Upstate Eight runner-up team…recipient of United States Marine Corps Distinguished Athlete Award…Academic All-Illinois…member of the National Honor Society…son of Paul and Peggy Cuda.

Recent Games
Oct 8 at Bethany (W.V.) W, 37-14
Oct 15 Thiel W, 48-21
Oct 22 Geneva W, 16-14
Oct 29 at Washington (Mo.) W, 56-38
Nov 5 at Westminster (Pa.) W, 26-22
Nov 12 Carnegie Mellon L, 26-21
Statistics category Overall Conf
Completions 171 134
Attempts 287 233
Completion % 59.6% 57.5%
Yards 2328 1839
Yards per game 232.8 229.9
Yards per attempt 8.1 7.9
Touchdowns 19 14
Interceptions 10 10
Sacks 16 14
Yards lost 79 67
Pass Efficiency 142.6 135.1
Date Opponent Score comp att pct yds y/a td int sac yds
Sep 3 Chicago W, 45-17 17 21 81.0% 217 10.3 2 0 1 11
Sep 17 at Grove City W, 55-0 24 42 57.1% 337 8.0 4 2 3 11
Sep 24 at Waynesburg W, 35-7 11 17 64.7% 124 7.3 0 0 1 2
Oct 1 St. Vincent W, 53-28 19 37 51.4% 291 7.9 3 1 1 3
Oct 8 at Bethany (W.V.) W, 37-14 17 28 60.7% 168 6.0 1 2 3 10
Oct 15 Thiel W, 48-21 17 22 77.3% 340 15.5 2 0 0 0
Oct 22 Geneva W, 16-14 15 24 62.5% 136 5.7 1 1 1 12
Oct 29 at Washington (Mo.) W, 56-38 20 33 60.6% 272 8.2 3 0 1 1
Nov 5 at Westminster (Pa.) W, 26-22 16 33 48.5% 257 7.8 2 2 2 22
Nov 12 Carnegie Mellon L, 26-21 15 30 50.0% 186 6.2 1 2 3 7
Date Opponent Score rush yds y/a lng td fum lost
Sep 3 Chicago W, 45-17 19 125 6.6 22 2 - -
Sep 17 at Grove City W, 55-0 8 12 1.5 9 1 - -
Sep 24 at Waynesburg W, 35-7 15 83 5.5 13 1 - -
Oct 1 St. Vincent W, 53-28 20 99 5.0 39 2 - -
Oct 8 at Bethany (W.V.) W, 37-14 17 88 5.2 18 2 2 1
Oct 15 Thiel W, 48-21 7 37 5.3 20 3 - -
Oct 22 Geneva W, 16-14 17 117 6.9 31 0 - -
Oct 29 at Washington (Mo.) W, 56-38 23 191 8.3 24 0 - -
Nov 5 at Westminster (Pa.) W, 26-22 18 33 1.8 16 0 - -
Nov 12 Carnegie Mellon L, 26-21 16 123 7.7 37 1 - -
Date Opponent Score rec yds y/r lng td fum lost
Sep 3 Chicago W, 45-17 - - - - - - -
Sep 17 at Grove City W, 55-0 - - - - - - -
Sep 24 at Waynesburg W, 35-7 - - - - - - -
Oct 1 St. Vincent W, 53-28 - - - - - - -
Oct 8 at Bethany (W.V.) W, 37-14 - - - - - 2 1
Oct 15 Thiel W, 48-21 - - - - - - -
Oct 22 Geneva W, 16-14 - - - - - - -
Oct 29 at Washington (Mo.) W, 56-38 - - - - - - -
Nov 5 at Westminster (Pa.) W, 26-22 - - - - - - -
Nov 12 Carnegie Mellon L, 26-21 - - - - - - -
Date Opponent Score fgm fga lng xpm xpa pts
Sep 3 Chicago W, 45-17 - - - - - 0
Sep 17 at Grove City W, 55-0 - - - - - 0
Sep 24 at Waynesburg W, 35-7 - - - - - 0
Oct 1 St. Vincent W, 53-28 - - - - - 0
Oct 8 at Bethany (W.V.) W, 37-14 - - - - - 0
Oct 15 Thiel W, 48-21 - - - - - 0
Oct 22 Geneva W, 16-14 - - - - - 0
Oct 29 at Washington (Mo.) W, 56-38 - - - - - 0
Nov 5 at Westminster (Pa.) W, 26-22 - - - 0 0 0
Nov 12 Carnegie Mellon L, 26-21 - - - - - 0
Date Opponent Score punt yds avg long in20 fc tb blk
Sep 3 Chicago W, 45-17 - - - - - - - -
Sep 17 at Grove City W, 55-0 - - - - - - - -
Sep 24 at Waynesburg W, 35-7 - - - - - - - -
Oct 1 St. Vincent W, 53-28 - - - - - - - -
Oct 8 at Bethany (W.V.) W, 37-14 - - - - - - - -
Oct 15 Thiel W, 48-21 - - - - - - - -
Oct 22 Geneva W, 16-14 - - - - - - - -
Oct 29 at Washington (Mo.) W, 56-38 - - - - - - - -
Nov 5 at Westminster (Pa.) W, 26-22 - - - - - - - -
Nov 12 Carnegie Mellon L, 26-21 - - - - - - - -
Date Opponent Score kr yds avg lng td pr yds avg lng td
Sep 3 Chicago W, 45-17 - - - - - - - - - -
Sep 17 at Grove City W, 55-0 - - - - - - - - - -
Sep 24 at Waynesburg W, 35-7 - - - - - - - - - -
Oct 1 St. Vincent W, 53-28 - - - - - - - - - -
Oct 8 at Bethany (W.V.) W, 37-14 - - - - - - - - - -
Oct 15 Thiel W, 48-21 - - - - - - - - - -
Oct 22 Geneva W, 16-14 - - - - - - - - - -
Oct 29 at Washington (Mo.) W, 56-38 - - - - - - - - - -
Nov 5 at Westminster (Pa.) W, 26-22 - - - - - - - - - -
Nov 12 Carnegie Mellon L, 26-21 - - - - - - - - - -
Date Opponent Score gp rush rcv pr kr yds
Sep 3 Chicago W, 45-17 1 125 - - - 125
Sep 17 at Grove City W, 55-0 1 12 - - - 12
Sep 24 at Waynesburg W, 35-7 1 83 - - - 83
Oct 1 St. Vincent W, 53-28 1 99 - - - 99
Oct 8 at Bethany (W.V.) W, 37-14 1 88 - - - 88
Oct 15 Thiel W, 48-21 1 37 - - - 37
Oct 22 Geneva W, 16-14 1 117 - - - 117
Oct 29 at Washington (Mo.) W, 56-38 1 191 - - - 191
Nov 5 at Westminster (Pa.) W, 26-22 1 33 - - - 33
Nov 12 Carnegie Mellon L, 26-21 1 123 - - - 123
Date Opponent Score pts rush rec kr pr int fum xpm fgm saf misc 2pt
Sep 3 Chicago W, 45-17 12 2 - - - - - - - - 0 -
Sep 17 at Grove City W, 55-0 6 1 - - - - - - - - 0 -
Sep 24 at Waynesburg W, 35-7 6 1 - - - - - - - - 0 -
Oct 1 St. Vincent W, 53-28 12 2 - - - - - - - - 0 -
Oct 8 at Bethany (W.V.) W, 37-14 12 2 - - - - - - - - 0 -
Oct 15 Thiel W, 48-21 18 3 - - - - - - - - 0 -
Oct 22 Geneva W, 16-14 0 0 - - - - - - - - 0 -
Oct 29 at Washington (Mo.) W, 56-38 0 0 - - - - - - - - 0 -
Nov 5 at Westminster (Pa.) W, 26-22 2 0 - - - - - 0 - - 0 1
Nov 12 Carnegie Mellon L, 26-21 6 1 - - - - - - - - 0 -
Date Opponent Score tack ast tot sack lost tfl yds ff fr td int yds td brup blk saf
Sep 3 Chicago W, 45-17 - - 0.0 - - 0 - - - - - - - - - -
Sep 17 at Grove City W, 55-0 - - 0.0 - - 0 - - - - - - - - - -
Sep 24 at Waynesburg W, 35-7 - - 0.0 - - 0 - - - - - - - - - -
Oct 1 St. Vincent W, 53-28 1 0 1.0 - - 0 - - - - - - - - - -
Oct 8 at Bethany (W.V.) W, 37-14 1 0 1.0 - - 0 - - - - - - - - - -
Oct 15 Thiel W, 48-21 - - 0.0 - - 0 - - - - - - - - - -
Oct 22 Geneva W, 16-14 - - 0.0 - - 0 - - - - - - - - - -
Oct 29 at Washington (Mo.) W, 56-38 - - 0.0 - - 0 - - - - - - - - - -
Nov 5 at Westminster (Pa.) W, 26-22 - - 0.0 - - 0 - - - - - - - - - -
Nov 12 Carnegie Mellon L, 26-21 - - 0.0 - - 0 - - - - - - - - - -
  gp comp att pct yds y/g y/a td int lg effic
2014-15 3 9 14 64.3% 94 31.3 6.7 1 0 18 144.3
2015-16 10 203 339 59.9% 2631 263.1 7.8 28 5 70 149.4
2016-17 10 171 287 59.6% 2328 232.8 8.1 19 10 72 142.6
2017-18 12 183 330 55.5% 2830 235.8 8.6 29 8 68 151.6
Total 35 566 970 58.4% 7883 225.2 8.1 77 23 72 148.1
  gp rush yds y/g avg td lg fum lost
2014-15 3 7 -1 -0.3 -0.1 0 7 - -
2015-16 10 140 715 71.5 5.1 8 73 15 7
2016-17 10 160 908 90.8 5.7 12 39 2 1
2017-18 12 116 506 42.2 4.4 7 39 6 2
Total 35 423 2128 60.8 5.0 27 73 23 10
  gp rec rec/g yds y/g avg td lg
2014-15 3 - - - - - - -
2015-16 10 2 0.2 1 0.1 0.5 0 7
2016-17 10 - - - - - - -
2017-18 12 1 0.1 11 0.9 11.0 0 11
Total 35 3 0.1 12 0.3 4.0 0 11
  gp fgm fga pct lg xpm xpa pct pts
2014-15 3 - - - - - - - 0
2015-16 10 - - - - 0 0 - 0
2016-17 10 - - - - 0 0 - 0
2017-18 12 - - - - - - - 0
Total 35 - - - - 0 0 - 0
  gp punt yds avg lg in20 fc tb blk
2014-15 3 - - - - - - - -
2015-16 10 - - - - - - - -
2016-17 10 - - - - - - - -
2017-18 12 - - - - - - - -
Total 35 - - - - - - - -
  kr yds avg td lg pr yds avg td lg
2014-15 - - - - - - - - - -
2015-16 - - - - - - - - - -
2016-17 - - - - - - - - - -
2017-18 - - - - - - - - - -
Total - - - - - - - - - -
  gp rush rcv pr kr yds ypg
2014-15 3 -1 - - - -1 -.3
2015-16 10 715 1 - - 716 71.6
2016-17 10 908 - - - 908 90.8
2017-18 12 506 11 - - 517 43.1
Total 35 2128 12 - - 2140 61.1
  pts pts/g rush rec kr pr int fum xpm fgm 2pt misc
2014-15 0 0.0 0 - - - - - - - - 0
2015-16 48 4.8 8 0 - - - - 0 - 0 0
2016-17 74 7.4 12 - - - - - 0 - 1 0
2017-18 42 3.5 7 0 - - - - - - - 0
Total 164 4.7 27 0 - - - - 0 - 1 0
  gp tkl ast tot tkl/g sck yds tfl yds ff fr yds int yds brup blk
2014-15 3 - - 0.0 .0 - - 0 - - - - - - - -
2015-16 10 2 0 2.0 .2 - - 0 - - - - - - - -
2016-17 10 2 0 2.0 .2 - - 0 - - - - - - - -
2017-18 12 - - 0.0 .0 - - 0 - - - - - - - -
Total 35 4 0 4.0 .1 - - 0 - - - - - - - -
  gp comp att pct yds y/g y/a td int lg effic
Total 10 171 287 59.6% 2328 232.8 8.1 19 10 72 142.6
Conference 8 134 233 57.5% 1839 229.9 7.9 14 10 72 135.1
Exhibition - - - - - - - - - - 0.0
-
Home 5 83 134 61.9% 1170 234.0 8.7 9 4 72 151.5
Away 5 88 153 57.5% 1158 231.6 7.6 10 6 53 134.8
Neutral - - - - - - - - - - 0.0
-
Wins 9 156 257 60.7% 2142 238.0 8.3 18 8 72 147.6
Losses 1 15 30 50.0% 186 186.0 6.2 1 2 42 99.7
-
September 3 52 80 65.0% 678 226.0 8.5 6 2 53 155.9
October 5 88 144 61.1% 1207 241.4 8.4 10 4 72 148.9
November 2 31 63 49.2% 443 221.5 7.0 3 4 53 111.3
  gp rush yds y/g avg td lg fum lost
Total 10 160 908 90.8 5.7 12 39 2 1
Conference 8 118 592 74.0 5.0 10 39 2 1
Exhibition - - - - - - - - -
-
Home 5 79 501 100.2 6.3 8 39 - -
Away 5 81 407 81.4 5.0 4 24 2 1
Neutral - - - - - - - - -
-
Wins 9 144 785 87.2 5.5 11 39 2 1
Losses 1 16 123 123.0 7.7 1 37 - -
-
September 3 42 220 73.3 5.2 4 22 - -
October 5 84 532 106.4 6.3 7 39 2 1
November 2 34 156 78.0 4.6 1 37 - -
  gp rec rec/g yds y/g avg td lg
Total 10 - - - - - - -
Conference 8 - - - - - - -
Exhibition - - - - - - - -
-
Home 5 - - - - - - -
Away 5 - - - - - - -
Neutral - - - - - - - -
-
Wins 9 - - - - - - -
Losses 1 - - - - - - -
-
September 3 - - - - - - -
October 5 - - - - - - -
November 2 - - - - - - -
  gp fgm fga pct lg xpm xpa pct pts
Total 10 - - - - 0 0 - 0
Conference 8 - - - - 0 0 - 0
Exhibition - - - - - - - - 0
-
Home 5 - - - - - - - 0
Away 5 - - - - 0 0 - 0
Neutral - - - - - - - - 0
-
Wins 9 - - - - 0 0 - 0
Losses 1 - - - - - - - 0
-
September 3 - - - - - - - 0
October 5 - - - - - - - 0
November 2 - - - - 0 0 - 0
  gp punt yds avg lg in20 fc tb blk
Total 10 - - - - - - - -
Conference 8 - - - - - - - -
Exhibition - - - - - - - - -
-
Home 5 - - - - - - - -
Away 5 - - - - - - - -
Neutral - - - - - - - - -
-
Wins 9 - - - - - - - -
Losses 1 - - - - - - - -
-
September 3 - - - - - - - -
October 5 - - - - - - - -
There was a problem with a Velocity script
Pagebio-template
ErrorVM #split: too few arguments to macro. Wanted 5 got 3 at bio-template[line 346, column 5]
Page source:
1: $website.addCss($website.cdn("/info/photo-gallery.css"))
2: <script src="${website.cdn("/info/klass.min.js")}"></script>
3: <script src="${website.cdn("/info/code.photoswipe.jquery-3.0.5.min.js")}"></script>
4: <script src="${website.cdn("/info/masonry.pkgd.min.js")}"></script>
5: <script src="${website.cdn("/info/imagesloaded.pkgd.min.js")}"></script>
6: <script src="${website.cdn("/info/photogallery/photogallery.js")}"></script>
7: 
8: ## PICK UP OPTIONS
9: $website.include("options")
10: #set ($options = $request.getAttribute("options"))
11: #set ($locale = "en_us")
12: #set ($locale = $options.get("locale"))
13: 
14: ## HACK TO GET STATS URL FROM RENDERER... NEEDS SERVER CHANGE
15: #set ($bioObject = $page.getDataAsObject())
16: #set ($statsURL = $bioObject.statsURL)
17: 
18: #if ($statsURL.length() > 0)
19:   $website.includeAgain("${statsURL}?tmpl=bio-stats-template")
20:   ## various settings to get the variables set
21:   #set ($events = $request.getAttribute("bio_events"))
22:   #set ($seasons = $request.getAttribute("bio_seasons"))
23:   #set ($career = $request.getAttribute("bio_career"))
24:   #set ($labels = $request.getAttribute("bio_labels"))
25:   #set ($briefs = $request.getAttribute("bio_briefs"))
26:   #set ($gamelogs = $request.getAttribute("bio_gamelogs"))
27:   #set ($splits = $request.getAttribute("bio_splits"))
28:   #set ($statPosition = $request.getAttribute("bio_position"))
29:   #set ($positions = $request.getAttribute("bio_positions"))
30:   #set ($playerId = $request.getAttribute("bio_player_id"))
31:   #set ($highlights = $request.getAttribute("bio_highlights"))
32:   #set ($formats = $request.getAttribute("bio_formats"))
33:   #set ($gamelogsCategoriesLabels = $request.getAttribute("bio_gamelogs_labels"))
34:   #set ($briefsCategoriesLabels = $request.getAttribute("bio_briefs_labels"))
35:   #set ($gamesResults = $request.getAttribute("bio_games_results"))
36:   #set ($monthsPlayed = $request.getAttribute("bio_months_played"))
37: #end
38: 
39: #set ($pos = "")
40: #set ($pos = $attributes.get("position"))
41: #set ($pos = $statPosition)
42: #set ($posVec = $pos.split("/"))
43: #set ($pos = $posVec[0])
44: #set ($pos = $pos.toLowerCase())
45: #set ($statPos = $positions.get($pos))
46: #set ($paramPos = $request.getParameter("pos"))
47: 
48: #set ($playerId = $attributes.get("playerId"))
49: #set ($stats = $splits.overall)
50: #set ($highlights = $highlights.get($statPos))
51: 
52: #set ($showHighlights = true)
53: #if ($options.get("bio_show_highlights") && $options.get("bio_show_highlights") == false)
54: 	#set ($showHighlights = false)
55: #end
56: 
57: #set ($enhancedLayout = false)
58: #if (($options.get("bio_enhanced_layout") == "yes") || ($request.getParameter("bio_enhanced_layout") == true))
59: 	#set ($enhancedLayout = true)
60: 	$website.addCss($website.cdn("/info/bio-styles-enhanced.css"))
61: #end
62: 
63: #set ($showActionShots = true)
64: #if ($options.get("bio_show_action_shots") && $options.get("bio_show_action_shots") == false)
65: 	#set ($showActionShots = false)
66: #end
67: 
68: #set ($actionShotsLimit = 5)
69: #set ($actionShotsLimit = $tool.math.toInteger($options.get("bio_action_shots_limit")))
70: 
71: #set ($showCareer = $wiki.valid() && $seasons)
72: #if ("yes" == $options.get("stats_show_career") && $seasons)
73:   #set ($showCareer = true)
74: #end
75: 
76: #set ($hasEvents = $events.size() > 0)
77: #set ($hasSynopsis = $synopsis.trim().length() > 0)
78: #set ($htmlStatsURL = "${page.url}-stats")
79: #set ($hasHTMLStats = $website.exists($htmlStatsURL))
80: #set ($bioBriefURL = "${page.url}-brief")
81: #set ($hasBioBrief = $website.exists("$bioBriefURL"))
82: #set ($showRoster = ($page.contentType == "loki/bio" && $page.headlinesFeatured.size() > 0) || ($page.contentType == "loki/bio-network" && $page.sectionPage.children.size() > 1))
83: #if ($options.get("bio_hide_roster") == true)
84:   #set ($showRoster = false)
85: #end
86: 
87: #set ($view = "")
88: #if ($hasSynopsis || $hasBioBrief)
89:   #set ($view = "bio")
90: #elseif ($statsURL.length() > 0)
91:   #set ($view = "profile")
92: #elseif ($hasHTMLStats)
93:   #set ($view = "htmlstats")
94: #elseif ($releases.size() > 0)
95:   #set ($view = "news")
96: #elseif ($playerPhotos.size() > 0)
97:   #set ($view = "photos")
98: #elseif ($playerVideos.size() > 0)
99:   #set ($view = "videos")
100: #end
101: 
102: #if ($options.get("bio_default_view").length() > 0)
103:   #set ($checkView = $options.get("bio_default_view"))
104: #end
105: 
106: #if ($request.getParameter("view"))
107:   #set ($checkView = $request.getParameter("view"))
108: #end
109: 
110: #if ($checkView == "profile" && $statsURL.length() > 0)
111:   #set ($view = "profile")
112: #elseif ($checkView == "bio" && ($hasSynopsis || $hasBioBrief))
113:   #set ($view = "bio")
114: #elseif ($checkView == "gamelog" && $statsURL.length() > 0)
115:   #set ($view = "gamelog")
116: #elseif ($checkView == "career" && $showCareer)
117:   #set ($view = "career")
118: #elseif ($checkView == "splits" && $statsURL.length() > 0)
119:   #set ($view = "splits")
120: #elseif ($checkView == "htmlstats" && $hasHTMLStats)
121:   #set ($view = "htmlstats")
122: #elseif ($checkView == "news" && $releases.size() > 0)
123:   #set ($view = "news")
124: #elseif ($checkView == "photos" && $playerPhotos.size() > 0)
125:   #set ($view = "photos")
126: #elseif ($checkView == "videos" && $playerVideos.size() > 0)
127:     #set ($view = "videos")
128: #end
129: 
130: #macro (printResultAriaLabel $event)
131:     #set ($ariaLabel = "${event.sport} event: ${formatter.formatDate($event.date, 'MMMM d hh:mm a:')}")
132:     #if ($event.neutralSite.length() > 0 || $event.home)
133:     	#set ($ariaLabel = "${ariaLabel} vs.")
134:     #else
135:     	#set ($ariaLabel = "${ariaLabel} at")
136:     #end
137:     #set ($ariaLabel = "${ariaLabel} ${event.opponent.name}:")
138:     #if ($event.neutralSite.length() > 0)
139:     	#set ($ariaLabel = "${ariaLabel} @ ${event.neutralSite}:")
140:     #end
141:     #set ($ariaLabel = "${ariaLabel} Box Score")
142:     aria-label="$ariaLabel"
143: #end
144: 
145: #macro (printGrid $items $type)
146: <div class="news-layout grid">
147:     <div class="stories">
148:         <ul>
149:         #foreach ($item in $items)
150:             #if ($item.title.length() > 0)
151: 
152:                 <li class="story ${type}">
153:                 	<div class="clearfix">
154:                 	<a href="$item.url" class="title-box">
155:                         <span class="thumb">
156:                         #if ($item.thumbnailURL)
157:                         	<img src="$website.cdn("/info/images/spacer.gif")" data-src="${item.thumbnailURL}?max_width=300" alt="" class="lazyload" />
158: 						#elseif ($item.contentType == "loki/youtube")
159: 							<img src="$website.cdn("/info/images/spacer.gif")" data-src="http://img.youtube.com/vi/${item.dataAsString}/0.jpg" alt="" class="lazyload" />
160:                         #else
161:                         	<img src="$website.cdn("/info/images/spacer.gif")" data-src="/images/setup/thumbnail_default.jpg?max_width=300" alt="" class="lazyload" />
162:                         #end
163:                         </span>
164:                 		<span class="title">$item.title</span>
165:                 	</a>
166:                 	</div>
167:                 </li>
168:             #end
169:         #end ## foreach
170:         </ul>
171:     </div>
172: </div>
173: #end ## ends macro
174: 
175: #macro (gamelogData $p)
176: 
177: #set ($p = $positions.get($p))
178: #set ($gamelogs = $gamelogs.get($p))
179: 
180: #if ($hasEvents)
181: <div class="stats-box full clearfix">
182: <div class="scrollable">
183: <div>
184: <table>
185:   <tr class="thead">
186:     <th class="text">Date</th>
187:     <th class="pinned-col text">Opponent</th>
188:     <th>Score</th>
189:     #foreach ($gamelog in $gamelogs)
190:       <th>$gamelog</th>
191:     #end
192:   </tr>
193: #foreach ($event in $events)
194:   <tr>
195:     <td class="text">$formatter.formatDate($event.event.date, "MMM d")</td>
196:     <td class="pinned-col text">
197:       #if ($event.event.neutralSite.length() > 0) vs. #elseif (!$event.event.home) at #end
198:       $event.event.opponent.name
199:     </td>
200:     <td>
201:     #if ($event.event.statusCode >= 0)
202:       #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
203:           <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
204:       #else
205:       ${event.event.APResult}
206:       #end
207:     #else &nbsp; #end
208:     </td>
209:     #foreach ($gamelog in $gamelogs.keySet())
210:       #set ($value = "-")
211:       #set ($value = $formatter.formatNumber($event.stats.get($gamelog), $formats.get($gamelog)))
212:       <td>$value</td>
213:     #end
214:   </tr>
215: #end
216: </table>
217: </div>
218: </div> ## scrollable
219: </div> ## stats-box
220: #end
221: 
222: #end ## macro gamelogData
223: 
224: #macro (split $statPosBriefs $label $stats)
225:   <tr>
226:     <td class="pinned-col text">${label}</td>
227:     #foreach ($brief in $statPosBriefs.keySet())
228:       #set ($value = "-")
229:       #set ($value = $!formatter.formatNumber($stats.get($brief), $formats.get($brief)))
230:       <td>#if ($value.length() > 0) $value #else - #end</td>
231:     #end
232:   </tr>
233: #end
234: 
235: #macro (careerData $p)
236: #set ($p = $positions.get($p))
237: #set ($statPosBriefs = $briefs.get($p))
238: 
239: <div class="stats-box full clearfix">
240: <div class="scrollable">
241: <div>
242: <table>
243: <tr class="thead">
244:   <th class="pinned-col">&nbsp;</th>
245:   #foreach ($brief in $statPosBriefs)
246:     <th>$brief</th>
247:   #end
248: </tr>
249: 
250: #set ($careerTotals = $request.getAttribute("careerTotals"))
251: #set ($careerMap = $request.getAttribute("careerMap"))
252: 
253: #foreach ($season in $seasons)
254:   ## Check if we did not get stats for this season
255:   #if ($careerMap.get($season.seasonName))
256:     #split($statPosBriefs, $season.seasonName, $careerMap[$season.seasonName])
257:   #elseif ($wiki.valid())
258:     <tr>
259:       <td class="text">${season.seasonName}</td>
260:       <td colspan="${statPosBriefs.size()}">We could not find the "players" page in the ${season.seasonName} section.</td>
261:     </tr>
262:   #end
263: #end
264: 
265: #split($statPosBriefs, "Total", $request.getAttribute("careerTotals").overall)
266: 
267: </table>
268: </div>
269: </div> ## scrollable
270: </div> ## stats-box
271: 
272: #end ## macro careerData
273: 
274: #macro (splitsData $p)
275: 
276: #set ($p = $positions.get($p))
277: #set ($statPosBriefs = $briefs.get($p))
278: #set ($colspan = $tool.math.add($statPosBriefs.size(), 1))
279: 
280: #if ($statPosBriefs.size() > 0)
281: <div class="stats-box full clearfix">
282: <div class="scrollable">
283: <div>
284: <table>
285:   <tr>
286:     <th class="pinned-col">&nbsp;</th>
287:     #foreach ($brief in $statPosBriefs)
288:       <th>$brief</th>
289:     #end
290:   </tr>
291: 
292: #split($statPosBriefs, "Total", $splits.overall)
293: #split($statPosBriefs, "Conference", $splits.conference)
294: #split($statPosBriefs, "Exhibition", $splits.exhibition)
295: 
296: <tr class="empty-row"><td colspan="$colspan"><div class="empty-cell">-</div></td></tr>
297: 
298: #split($statPosBriefs, "Home", $splits.home)
299: #split($statPosBriefs, "Away", $splits.away)
300: #split($statPosBriefs, "Neutral", $splits.neutral)
301: 
302: <tr class="empty-row"><td colspan="$colspan"><div class="empty-cell">-</div></td></tr>
303: 
304: #foreach($gameResult in $gamesResults.entrySet())
305:   #if ($gameResult.key == "wins")
306:     #set ($splitGameResult = $splits.inWins)
307:   #elseif ($gameResult.key == "losses")
308:     #set ($splitGameResult = $splits.inLosses)
309:   #elseif ($gameResult.key == "ties")
310:     #set ($splitGameResult = $splits.inTies)
311:   #end
312: 
313:   #split($statPosBriefs, $gameResult.value, $splitGameResult)
314: #end
315: 
316: <tr class="empty-row"><td colspan="$colspan"><div class="empty-cell">-</div></td></tr>
317: 
318: #if ($monthsPlayed and $monthsPlayed.size() > 0)
319:   #foreach($month in $monthsPlayed)
320:     #if ($month == 'January')
321:       #set ($splitMonth = $splits.january)
322:     #elseif ($month == 'February')
323:       #set ($splitMonth = $splits.february)
324:     #elseif ($month == 'March')
325:       #set($splitMonth = $splits.march)
326:     #elseif ($month == 'April')
327:       #set($splitMonth = $splits.april)
328:     #elseif ($month == 'May')
329:       #set ($splitMonth = $splits.may)
330:     #elseif ($month == 'June')
331:       #set ($splitMonth = $splits.june)
332:     #elseif ($month == 'July')
333:       #set($splitMonth = $splits.july)
334:     #elseif ($month == 'August')
335:       #set ($splitMonth = $splits.august)
336:     #elseif ($month == 'September')
337:       #set($splitMonth = $splits.september)
338:     #elseif ($month == 'October')
339:       #set($splitMonth = $splits.october)
340:     #elseif ($month == 'November')
341:       #set ($splitMonth = $splits.november)
342:     #elseif ($month == 'December')
343:       #set($splitMonth = $splits.december)
344:     #end
345: 
346:     #split($statPosBriefs, $month, $splitMonth)
347:   #end ## foreach
348: #end
349: </table>
350: </div>
351: </div> ## scrollable
352: </div> ## srollable-table
353: #end
354: 
355: #end ## macro splitsData
356: 
357: #macro (printRecentGames)
358: #if ($hasEvents)
359: <table>
360:   <tr class="thead accent-bg"><th colspan="3">Recent Games</th></tr>
361: 
362: #set ($eventEnd = -1)
363: #foreach ($event in $events)
364:   #if ($event.event.result.resolved)
365:     #set ($eventEnd = $velocityCount)
366:   #end
367: #end
368: 
369: #set ($eventStart = $eventEnd - 5)
370: #if ($eventStart < 0) #set ($eventStart = 0) #end
371: 
372: #foreach ($event in $events)
373: #if ($velocityCount >= $eventStart and $velocityCount <= $eventEnd)
374:   <tr>
375:     <td class="text">$formatter.formatDate($event.event.date, "MMM d")</td>
376:     <td class="text">
377:       #if ($event.event.neutralSite.length() > 0) vs.
378:       #elseif (!$event.event.home) at
379:       #else ## nothing for a home game
380:       #end
381:       $event.event.opponent.name
382:     </td>
383:     <td class="text">
384:     #if ($event.event.statusCode >= 0)
385:       #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
386:           <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
387:       #else
388:       ${event.event.APResult}
389:       #end
390: 	#end
391: 	</td>
392:   </tr>
393: #end ## if
394: #end
395: </table>
396: #end
397: #end ## macro printRecentGames
398: 
399: #macro (printCategories $briefCategoryLabels $v $ariaLabel)
400: 
401: <div class="tab-container secondary clearfix" data-module="stats/tabs" data-type="secondary">
402: <div class="tab-nav" data-module="jscroll" data-momentum="false">
403: <div>
404: <ul class="clearfix">
405: #foreach($briefCat in $briefCategoryLabels.entrySet())
406:   #set ($briefCatLabel = $briefCat.value)
407:   #set ($briefCatKey = $briefCat.key)
408: 
409:   #if ($locale == "en_gb" && $briefCatLabel == "Defense")
410:     #set ($briefCatLabel = "Defence")
411:   #end
412: 
413:   <li #if ($activePos == $briefCatKey) class="active" #end><a href="${page.url}?view=${v}&pos=${briefCatKey}" role="button" aria-label="${ariaLabel}: ${briefCatLabel}">$briefCatLabel</a></li>
414: #end
415: </ul>
416: </div>
417: </div>
418: <div class="tab-panels">
419: #foreach ($briefCat in $briefCategoryLabels.entrySet())
420:   #set ($class = "tab-panel clearfix")
421:   #if ($briefCat.key == $activePos)
422:     #set ($class = "tab-panel active clearfix")
423:   #end
424:   <div class="$class">
425:     <div class="stats-wrap clearfix">
426:     #if ($v == "splits")
427:       #splitsData($briefCat.key)
428:     #elseif ($v == "career")
429:       #careerData($briefCat.key)
430:     #end
431:     </div>
432:   </div>
433: #end
434: </div>
435: </div> ## tab-container
436: 
437: #end ## macro printCategories
438: 
439: #macro (printHeadshot)
440: #if ($enhancedLayout)
441: 
442:   #if ($headshot.url)
443:     <img src="$headshot.url?max_width=300&max_height=400" alt="$fullName" />
444:   #else
445:     #if ($website.exists("/images/setup/headshot_default.jpg"))
446:       <img src="/images/setup/headshot_default.jpg?max_width=300&max_height=400" alt="$fullName" />
447:     #else
448:       <img src="$website.cdn("/info/images/default_headshot.jpg?max_width=300&max_height=400")" alt="$fullName" />
449:     #end
450:   #end
451: 
452: #else
453: 
454:   #if ($!attributes.get("number").length() > 0)<span class="number">$!attributes.get("number")</span>#end
455: 
456:   #if ($headshot.url)
457:     <img src="$headshot.url?max_width=160&max_height=210" alt="$fullName" />
458:   #else
459:     #if ($website.exists("/images/setup/headshot_default.jpg"))
460:       <img src="/images/setup/headshot_default.jpg?max_width=160&max_height=210" alt="" />
461:     #else
462:       <img src="$website.cdn("/info/images/default_headshot.jpg?max_width=160&max_height=210")" alt="" />
463:     #end
464:   #end
465: 
466: #end ## ## enhancedLayout check
467: #end ## macro printHeadshot
468: 
469: #macro (printBioInfo)
470: #if ($enhancedLayout)
471: 
472: <h2 class="player-heading">
473:   #if ($!attributes.get("number").length() > 0)<span class="number accent-bg">$!attributes.get("number")</span>#end
474:   <span class="name">$fullName</span>
475: </h2>
476: 
477: <ul>
478: #foreach ($i in [1..10])
479:   #set ($stickyKey = "bio_custom${i}_sticky")
480:   #if ($options.get($stickyKey).length() > 0 && $attributes.get("custom${i}").length() > 0)
481:     <li>
482:       <dl>
483:         <dt class="label">$options.get($stickyKey): </dt>
484:         <dd class="value">$!attributes.get("custom${i}")</dd>
485:       </dl>
486:     </li>
487:   #end
488: #end
489: 
490: #foreach ($field in $fields)
491:   #if (!$field.key.startsWith("custom"))
492:     #if ($attributes.get($field.key).length() > 0 && ($field.key != "first_name" && $field.key != "last_name" && $field.key != "number" && $field.key != "full_name"))
493:       #if ($field.key == "phone1" || $field.key == "phone2")
494:         <li>
495:           <dl>
496:             <dt class="label">Phone: </dt>
497:             <dd class="value">$!attributes.get($field.key)</dd>
498:           </dl>
499:         </li>
500:       #elseif ($field.key == "email_address")
501:         #set ($emailAdd = $attributes.get($field.key))
502:         <li>
503:           <dl>
504:             <dt class="label">Email: </dt>
505:             <dd class="value"><a href="mailto:${emailAdd}">$emailAdd</a></dd>
506:           </dl>
507:         </li>
508:       #elseif ($field.key == "weight_class")
509:         <li>
510:           <dl>
511:             <dt class="label">Class: </dt>
512:             <dd class="value">$!attributes.get($field.key)</dd>
513:           </dl>
514:         </li>
515:       #elseif ($field.key != "position_abbr")
516:         <li>
517:           <dl>
518:             <dt class="label">$field.value: </dt>
519:             <dd class="value">$!attributes.get($field.key)</dd>
520:           </dl>
521:         </li>
522:       #end
523:     #end
524:   #end
525: #end
526: 
527: #foreach ($i in [1..10])
528:   #set ($customKey = "bio_custom${i}")
529:   #if ($options.get($customKey).length() > 0 && $attributes.get("custom${i}"))
530:     <li>
531:       <dl>
532:         <dt class="label">$options.get($customKey): </dt>
533:         <dd class="value">$!attributes.get("custom${i}")</dd>
534:       </dl>
535:     </li>
536:   #end
537: #end
538: </ul>
539: 
540: #else
541: ## default layout
542: 
543: <div class="player-name">
544:   #if ($!attributes.get("number").length() > 0)<span class="number">$!attributes.get("number")</span><span class="sep"> - </span>#end
545:   <span class="name">$fullName</span>
546: </div>
547: 
548: <table role="presentation">
549: #foreach ($i in [1..10])
550:   #set ($stickyKey = "bio_custom${i}_sticky")
551:   #if ($options.get($stickyKey).length() > 0 && $attributes.get("custom${i}").length() > 0)
552:     <tr>
553:       <td class="label">$options.get($stickyKey): </td>
554:       <td class="value">$!attributes.get("custom${i}")</td>
555:     </tr>
556:   #end
557: #end
558: 
559: #foreach ($field in $fields)
560:   #if (!$field.key.startsWith("custom"))
561:     #if ($attributes.get($field.key).length() > 0 && ($field.key != "first_name" && $field.key != "last_name" && $field.key != "number" && $field.key != "full_name"))
562:       #if ($field.key == "phone1" || $field.key == "phone2")
563:         <tr>
564:           <td class="label">Phone: </td>
565:           <td class="value">$!attributes.get($field.key)</td>
566:         </tr>
567:       #elseif ($field.key == "email_address")
568:         #set ($emailAdd = $attributes.get($field.key))
569:         <tr>
570:           <td class="label">Email: </td>
571:           <td class="value"><a href="mailto:${emailAdd}">$emailAdd</a></td>
572:         </tr>
573:       #elseif ($field.key == "weight_class")
574:         <tr>
575:           <td class="label">Class: </td>
576:           <td class="value">$!attributes.get($field.key)</td>
577:         </tr>
578:       #elseif ($field.key != "position_abbr")
579:         <tr>
580:           <td class="label">$field.value: </td>
581:           <td class="value">$!attributes.get($field.key)</td>
582:         </tr>
583:       #end
584:     #end
585:   #end
586: #end
587: 
588: #foreach ($i in [1..10])
589:   #set ($customKey = "bio_custom${i}")
590:   #if ($options.get($customKey).length() > 0 && $attributes.get("custom${i}"))
591:     <tr>
592:       <td class="label">$options.get($customKey): </td>
593:       <td class="value">$!attributes.get("custom${i}")</td>
594:     </tr>
595:   #end
596: #end
597: </table>
598: #end ## enhancedLayout check
599: #end ## macro printBioInfo
600: 
601: #macro (printActionShots)
602: #if ($showActionShots)
603: 	## BANNERS SLIDER
604:     #set ($slickSettings = {
605: 		"autoplay": true,
606:         "fade": true,
607:         "arrows": false,
608:         "slidesToShow": 1,
609:         "slidesToScroll": 1,
610:         "lazyLoad": "ondemand",
611:         "responsive": "none"
612:     })
613:     #set ($slickSettings = $slickSettings.toString().replace("=", ":"))
614:     <div class="action-shots clearfix">
615:         <div class="slider" data-module="slick-slider-init" data-slick-settings="$slickSettings">
616:             #foreach ($photo in $playerPhotos)
617: 				#if ($velocityCount <= $actionShotsLimit)
618:     				#set ($imgAlt = "")
619:     				#if (!$image.altText.equals($image.title))
620:     					#set ($imgAlt = $image.altText)
621:     				#elseif( $image.title.length() == 0 )
622:     					#set ($imgAlt = "Action shot for $page.title image $velocityCount")
623:     				#end
624:             		<div class="image">
625:             			<img data-lazy="$photo.url" alt="$imgAlt" />
626:             	    </div>
627: 				#end
628:     	    #end
629: 	    </div>
630:     </div>
631: #end
632: #end ## macro printActionShots
633: 
634: #macro (printHighlights)
635: #if ($highlights && $showHighlights)
636:   <div class="highlights #if ($enhancedLayout) highlights-bio-enhanced #else highlights-bio #end clearfix">
637:     #foreach ($highlight in $highlights.keySet())
638:       #set ($value = "-")
639:       #set ($value = $formatter.formatNumber($stats.get($highlight), $formats.get($highlight)))
640:       <div class="stat clearfix">
641:         <span class="stat-title">$!highlights.get($highlight)</span>
642:         <span class="stat-value">$value</span>
643:       </div>
644:     #end
645:   </div>
646: #end
647: #end ## macro printHighlights
648: #macro (printRoster)
649: #if ($enhancedLayout)
650:   $website.includeAgain("${page.url}?tmpl=roster-switcher-template&id=roster-list")
651: #else
652: #if ($page.contentType == "loki/bio")
653:   #set ($headlinesFeaturedSize = 0)
654:   #foreach ($featuredPage in $page.headlinesFeatured)
655:     #if ($featuredPage.contentType == "loki/headlines")
656:       #set ($headlinesFeaturedSize = $headlinesFeaturedSize + 1)
657:     #end
658:   #end
659:   #if ($headlinesFeaturedSize > 0)
660:       <select class="roster-select-list" aria-label="Select a player to view its full bio from the list of options below.">
661:         <option selected="selected">Related Bios</option>
662:         #foreach ($featuredPage in $page.headlinesFeatured)
663:           #if ($featuredPage.contentType == "loki/headlines")
664:             $website.includeAgain("${featuredPage.url}?tmpl=roster-list-template&current_url=${page.url}")
665: 		  #end
666: 	    #end
667:       </select>
668:   #end
669: #elseif ($page.contentType == "loki/bio-network")
670:   #set ($relatedPlayers = $page.sectionPage.children)
671:   #set ($teamNames = {})
672:   #foreach ($relatedPlayer in $relatedPlayers)
673:     #if ($relatedPlayer.contentType == "loki/bio-network")
674:       #set ($relatedPlayerObj = $relatedPlayer.getDataAsObject().getAttributes())
675:       #set ($teamName = $relatedPlayerObj.get("team"))
676:       #if ($teamName.length() > 0)
677:         #if (!$teamNames.containsValue($teamName))
678:           $!teamNames.put($tool.math.add($teamNames.size(), 1), $teamName)
679:         #end
680:       #end
681:     #end
682:   #end
683: 
684:   <select class="roster-select-list" aria-label="Select a player to view its full bio from the list of options below.">
685:   #foreach ($i in [1..$teamNames.size()])
686:     #if ($teamNames.size() > 1)
687:       <optgroup label="$teamNames.get($i)">
688:     #end
689: 
690:     #foreach ($relatedPlayer in $relatedPlayers)
691:       #if ($relatedPlayer.contentType == "loki/bio-network")
692:         #set ($relatedPlayerObj = $relatedPlayer.getDataAsObject().getAttributes())
693:         #set ($teamName = $relatedPlayerObj.get("team"))
694:         #if ($teamName.length() > 0 && $teamName == $teamNames.get($i))
695:           #set ($playerFirstName = $relatedPlayerObj.get("first_name"))
696:           #set ($playerLastName = $relatedPlayerObj.get("last_name"))
697:           #if ($page.url == $relatedPlayer.url)
698:             <option value="$relatedPlayer.url" selected="selected">${playerFirstName} ${playerLastName}</option>
699:           #else
700:             <option value="$relatedPlayer.url">${playerFirstName} ${playerLastName}</option>
701:           #end
702:         #end
703:       #end
704:     #end
705: 
706:     #if ($teamNames.size() > 1)
707:       </optgroup>
708:     #end
709:   #end
710:   </select>
711: #end
712: #end ## enhancedLayout check
713: #end ## macro printRoster
714: 
715: ################################################## END MACROS  #############################################################
716: 
717: #if ($attributes.get("full_name").length() > 0)
718:   #set ($fullName = $attributes.get("full_name"))
719: #else
720:   #set ($firstName = $!attributes.get("first_name"))
721:   #set ($lastName = $!attributes.get("last_name"))
722:   #set ($fullName = "${firstName} ${lastName}")
723: #end
724: 
725: #set ($actionShots = false)
726: #if ($enhancedLayout && $playerPhotos.size() > 0)
727:   #set ($actionShots = true)
728: #end
729: 
730: #if ($enhancedLayout)
731:   #set ($rootClass = "bio-enhanced")
732:   #if ($actionShots && $showActionShots)
733:   	#set ($rootClass = "${rootClass} action")
734:   #else
735:   	#set ($rootClass = "${rootClass} plain")
736:   #end
737: #else
738:   #set ($rootClass = "bio-wrap")
739: #end
740: 
741: ## FULL ROSTER
742: <div class="${rootClass} #if ($highlights) bio-wrap-has-highlights #end clearfix" data-module="stats/responsive-container">
743: 
744: ## RELATED BIOS
745: #if ($showRoster)
746:   <div class="related-bios clearfix">#printRoster</div>
747: #end
748: 
749: #if ($actionShots)
750:   #printActionShots
751: #end
752: 
753: <div class="head clearfix">
754: <div class="clearfix">
755: 
756: <div class="player-about clearfix">
757:   <div class="player-headshot">#printHeadshot</div>
758:   <div class="player-info">#printBioInfo</div>
759: </div>
760: 
761: #printHighlights
762: 
763: </div>
764: </div> ## head
765: 
766: #if ($view.length() > 0)
767: <div class="body clearfix">
768: 
769: <div class="tab-container primary clearfix" data-module="stats/tabs" data-type="primary">
770: <div class="tab-nav" data-module="jscroll" data-momentum="false">
771:   <div>
772:   <ul class="clearfix">
773:   #if ($hasSynopsis || $hasBioBrief)
774:     <li #if ($view == "bio") class="active" #end><a href="${page.url}?view=bio">Bio</a></li>
775:   #end
776: 
777:   #if ($statsURL.length() > 0)
778:     <li #if ($view == "profile") class="active" #end><a href="${page.url}?view=profile">Player Profile</a></li>
779:     <li #if ($view == "gamelog") class="active" #end><a href="${page.url}?view=gamelog">Game Log</a></li>
780:     #if ($showCareer)
781:       <li #if ($view == "career") class="active" #end><a href="${page.url}?view=career">Career Stats</a></li>
782:     #end
783:     <li #if ($view == "splits") class="active" #end><a href="${page.url}?view=splits">Split Stats</a></li>
784:   #end
785: 
786:   #if ($hasHTMLStats)
787:     <li #if ($view == "htmlstats") class="active" #end><a href="${page.url}?view=htmlstats">HTML Stats</a></li>
788:   #end
789: 
790:   #if ($releases.size() > 0)
791: 	<li #if ($view == "news") class="active" #end><a href="${page.url}?view=news">News</a></li>
792:   #end
793: 
794:   #if ($playerPhotos.size() > 0)
795: 	<li #if ($view == "photos") class="active" #end><a href="${page.url}?view=photos">Photos</a></li>
796:   #end
797: 
798:   #if ($playerVideos.size() > 0)
799:     <li #if ($view == "videos") class="active" #end><a href="${page.url}?view=videos">Videos</a></li>
800:   #end
801:   </ul>
802:   </div>
803: </div> ## tab-nav
804: 
805: <div class="tab-panels clearfix">
806: 
807: ## BIO
808: #if ($hasSynopsis || $hasBioBrief)
809: 
810: #set ($class = "tab-panel clearfix")
811: #if ($view == "bio")
812:   #set ($class = "tab-panel active clearfix")
813: #end
814: <div class="${class}">
815: 
816: <div class="synopsis clearfix">
817: #if ($hasSynopsis)
818:   $synopsis
819: #elseif ($hasBioBrief)
820:   $website.include("$bioBriefURL")
821: #end
822: </div>
823: 
824: </div> ## tab-panel
825: #end
826: ## BIO
827: 
828: ## STATS
829: #if ($statsURL.length() > 0)
830: 
831: ## PROFILE
832: #set ($class = "tab-panel clearfix")
833: #if ($view == "profile")
834:   #set ($class = "tab-panel active clearfix")
835: #end
836: <div class="${class}">
837: <div class="stats-wrap clearfix">
838: 
839: ## LAST SIX GAMES
840: <div class="stats-box half">
841: #printRecentGames()
842: </div>
843: 
844: ## RANKING
845: <div class="stats-box half">
846: #if ($statPos.length() > 0)
847:   $website.include("players?tmpl=stats-bios-rank-template&rank=${playerId}&pos=${statPos}")
848: #end
849: </div>
850: 
851: </div> ## stats-wrap
852: </div> ## tab-content
853: ## PROFILE
854: 
855: ## GAMELOG
856: #set ($class = "tab-panel clearfix")
857: #if ($view == "gamelog")
858:   #set ($class = "tab-panel active clearfix")
859: #end
860: 
861: #set ($activePos = $statPos)
862: #if ($view == "gamelog" && $paramPos.length() > 0)
863:   #if ($positions.get($paramPos).length() > 0)
864:     #set ($activePos = $positions.get($paramPos))
865:   #end
866: #end
867: 
868: <div class="${class}">
869: 
870: #if ($gamelogsCategoriesLabels)
871: <div class="tab-container clearfix secondary" data-module="stats/tabs" data-type="secondary">
872:   <div class="tab-nav" data-module="jscroll" data-momentum="false">
873:     <div>
874:     <ul class="clearfix">
875:     #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet())
876:       #set($gamelogsCatLabelVal = $gamelogsCatLabel.value)
877: 
878:       #if ($locale == "en_gb" && $gamelogsCatLabelVal == "Defense")
879:         #set($gamelogsCatLabelVal = "Defence")
880:       #end
881: 
882:       <li #if ($activePos == $gamelogsCatLabel.key) class="active" #end><a href="${page.url}?view=gamelog&pos=${gamelogsCatLabel.key}" role="button" aria-label="Game Log: ${gamelogsCatLabelVal}">$gamelogsCatLabelVal</a></li>
883:     #end
884:     </ul>
885: 	</div>
886:   </div>
887:   <div class="tab-panels">
888:   #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet())
889:     #set ($class = "tab-panel clearfix")
890:     #if ($gamelogsCatLabel.key == $activePos)
891:       #set ($class = "tab-panel active clearfix")
892:     #end
893:     <div class="${class}">
894:       <div class="stats-wrap clearfix">#gamelogData($gamelogsCatLabel.key)</div>
895: 	</div>
896:   #end
897:   </div>
898: </div>
899: #else
900:   <div class="stats-wrap clearfix">#gamelogData($pos)</div>
901: #end
902: 
903: </div> ## tab-panel
904: ## GAMELOG
905: 
906: 
907: ## CAREER
908: #if ($showCareer)
909: 
910: #set ($activePos = $statPos)
911: #if ($view == "career" && $paramPos.length() > 0)
912:   #if ($positions.get($paramPos).length() > 0)
913:     #set ($activePos = $positions.get($paramPos))
914:   #end
915: #end
916: 
917: #set ($class = "tab-panel clearfix")
918: #if ($view == "career")
919:   #set ($class = "tab-panel active clearfix")
920: #end
921: 
922: <div class="${class}">
923: 
924: #if ($briefsCategoriesLabels)
925:   #printCategories($briefsCategoriesLabels "career" "Career Stats")
926: #else
927:   <div class="stats-wrap clearfix">#careerData($activePos)</div>
928: #end
929: 
930: </div> ## tab-panel
931: #end
932: ## CAREER
933: 
934: ## SPLITS
935: #set ($class = "tab-panel clearfix")
936: #if ($view == "splits")
937: 	#set ($class = "tab-panel active clearfix")
938: #end
939: 
940: #set ($activePos = $statPos)
941: #if ($view == "splits" && $paramPos.length() > 0)
942:   #if ($positions.get($paramPos).length() > 0)
943:     #set ($activePos = $positions.get($paramPos))
944:   #end
945: #end
946: 
947: <div class="${class}">
948: 
949: #if ($briefsCategoriesLabels)
950:   #printCategories($briefsCategoriesLabels "splits" "Splits Stats")
951: #else
952:   <div class="stats-wrap clearfix">#splitsData($pos)</div>
953: #end
954: 
955: </div> ## tab-panel
956: ## SPLITS
957: 
958: #end
959: ## STATS
960: 
961: ## HTML STATS
962: #if ($hasHTMLStats)
963: 
964: #set ($class = "tab-panel clearfix")
965: #if ($view == "htmlstats")
966:   #set ($class = "tab-panel active clearfix")
967: #end
968: <div class="${class}">
969:   <a href="${htmlStatsURL}" class="bio-htmlstats-identifier">Click to view HTML Stats</a>
970: </div>
971: 
972: #end
973: ## HTML STATS
974: 
975: ## NEWS
976: #if ($releases.size() > 0)
977: #set ($class = "tab-panel clearfix")
978: #if ($view == "news")
979:   #set ($class = "tab-panel active clearfix")
980: #end
981: <div class="${class}">
982: 	#printGrid($releases, "article")
983: </div> ## tab-content
984: #end
985: ## NEWS
986: 
987: ## PHOTOS
988: #if ($playerPhotos.size() > 0)
989: #set ($class = "tab-panel clearfix")
990: #if ($view == "photos")
991:   #set ($class = "tab-panel active clearfix")
992: #end
993: <div class="${class}">
994:     $website.includeAgain("${page.url}?tmpl=bio-photos-template")
995: </div> ## tab-content
996: #end
997: ## PHOTOS
998: 
999: ## VIDEOS
1000: #if ($playerVideos.size() > 0)
1001:   #set ($class = "tab-panel clearfix")
1002:   #if ($view == "videos")
1003:     #set ($class = "tab-panel active clearfix")
1004:   #end
1005: <div class="${class}">
1006: 	#printGrid($playerVideos, "video")
1007: </div> ## tab-content
1008: #end
1009: ## VIDEOS
1010: 
1011: </div> ## tab-panels
1012: </div> ## tab-container
1013: </div> ## body
1014: #end
1015: 
1016: $wiki
1017: </div> ## ends bio-wrap
1018: 
1019: ## GLOBAL ADS SERVER
1020: #if ($website.ads.isAdvertisingEnabled('BIOS'))
1021: 	$website.ads.register('bios', '[[320,50],[728,90],[970,90]]', 'PS_WEB_INTERNAL_LEADERBOARD')
1022: #end