2 Michael Bahr
2 Michael Bahr
Height: 6-3
Weight: 181
Year: Fr.
Hometown: Milwaukee, Wis.
High School: Milwaukee Lutheran
Position: QB
Major: Secondary Education, Mathematics
gp 2
yds 10
td 0
yds/g 5.0

2013 Season (Freshman): Appeared in two games against Maranatha Baptist Bible College (October 12) and Rockford University (November 2)...Completed 2-of-3 passes for 10 yards against Rockford...Rushed four times for 25 yards versus Maranatha Baptist Bible.

2012 Season (Freshman): Attended Concordia University Chicago.

High School (Milwaukee Lutheran): Honorable Mention All-North Shore Conference selection in basketball...Earned varsity letters in football, basketball and golf.

Personal: Son of Paul and Linnea...Has two older brothers, Jon and Mark...Has three older sisters, Stephanie, Kim and Katie.

Recent Games
Oct 19 at Concordia Chicago W, 48-42
Oct 26 Lakeland W, 45-28
Nov 2 at Rockford W, 55-13
Nov 9 Aurora W, 49-41
Nov 16 at Wisconsin Lutheran W, 58-31
Nov 23 at UW-Platteville L, 54-20
Statistics category Overall Conf
Completions 2 2
Attempts 3 3
Completion % 66.7% 66.7%
Yards 10 10
Yards per game 5.0 10.0
Yards per attempt 3.3 3.3
Touchdowns 0 0
Interceptions 0 0
Sacks 0 0
Yards lost 0 0
Date Opponent Score comp att pct yds y/a td int sac yds
Sep 7 Augsburg L, 51-17 - - - - - - - - -
Sep 14 Macalester W, 20-10 - - - - - - - - -
Sep 21 at Trine L, 47-41 - - - - - - - - -
Oct 5 Benedictine W, 28-27 - - - - - - - - -
Oct 12 at Maranatha Baptist W, 70-14 - - - - - - - - -
Oct 19 at Concordia Chicago W, 48-42 - - - - - - - - -
Oct 26 Lakeland W, 45-28 - - - - - - - - -
Nov 2 at Rockford W, 55-13 2 3 66.7% 10 3.3 0 0 0 0
Nov 9 Aurora W, 49-41 - - - - - - - - -
Nov 16 at Wisconsin Lutheran W, 58-31 - - - - - - - - -
Nov 23 at UW-Platteville L, 54-20 - - - - - - - - -
Date Opponent Score rush yds y/a lng td fum lost
Sep 7 Augsburg L, 51-17 - - - - - - -
Sep 14 Macalester W, 20-10 - - - - - - -
Sep 21 at Trine L, 47-41 - - - - - - -
Oct 5 Benedictine W, 28-27 - - - - - - -
Oct 12 at Maranatha Baptist W, 70-14 4 25 6.3 21 0 - -
Oct 19 at Concordia Chicago W, 48-42 - - - - - - -
Oct 26 Lakeland W, 45-28 - - - - - - -
Nov 2 at Rockford W, 55-13 1 4 4.0 4 0 - -
Nov 9 Aurora W, 49-41 - - - - - - -
Nov 16 at Wisconsin Lutheran W, 58-31 - - - - - - -
Nov 23 at UW-Platteville L, 54-20 - - - - - - -
Date Opponent Score rec yds y/r lng td fum lost
Sep 7 Augsburg L, 51-17 - - - - - - -
Sep 14 Macalester W, 20-10 - - - - - - -
Sep 21 at Trine L, 47-41 - - - - - - -
Oct 5 Benedictine W, 28-27 - - - - - - -
Oct 12 at Maranatha Baptist W, 70-14 - - - - - - -
Oct 19 at Concordia Chicago W, 48-42 - - - - - - -
Oct 26 Lakeland W, 45-28 - - - - - - -
Nov 2 at Rockford W, 55-13 - - - - - - -
Nov 9 Aurora W, 49-41 - - - - - - -
Nov 16 at Wisconsin Lutheran W, 58-31 - - - - - - -
Nov 23 at UW-Platteville L, 54-20 - - - - - - -
Date Opponent Score fgm fga lng xpm xpa pts
Sep 7 Augsburg L, 51-17 - - - - - -
Sep 14 Macalester W, 20-10 - - - - - -
Sep 21 at Trine L, 47-41 - - - - - -
Oct 5 Benedictine W, 28-27 - - - - - -
Oct 12 at Maranatha Baptist W, 70-14 - - - - - 0
Oct 19 at Concordia Chicago W, 48-42 - - - - - -
Oct 26 Lakeland W, 45-28 - - - - - -
Nov 2 at Rockford W, 55-13 - - - - - 0
Nov 9 Aurora W, 49-41 - - - - - -
Nov 16 at Wisconsin Lutheran W, 58-31 - - - - - -
Nov 23 at UW-Platteville L, 54-20 - - - - - -
Date Opponent Score punt yds avg long in20 fc tb blk
Sep 7 Augsburg L, 51-17 - - - - - - - -
Sep 14 Macalester W, 20-10 - - - - - - - -
Sep 21 at Trine L, 47-41 - - - - - - - -
Oct 5 Benedictine W, 28-27 - - - - - - - -
Oct 12 at Maranatha Baptist W, 70-14 - - - - - - - -
Oct 19 at Concordia Chicago W, 48-42 - - - - - - - -
Oct 26 Lakeland W, 45-28 - - - - - - - -
Nov 2 at Rockford W, 55-13 - - - - - - - -
Nov 9 Aurora W, 49-41 - - - - - - - -
Nov 16 at Wisconsin Lutheran W, 58-31 - - - - - - - -
Nov 23 at UW-Platteville L, 54-20 - - - - - - - -
Date Opponent Score kr yds avg lng td pr yds avg lng td
Sep 7 Augsburg L, 51-17 - - - - - - - - - -
Sep 14 Macalester W, 20-10 - - - - - - - - - -
Sep 21 at Trine L, 47-41 - - - - - - - - - -
Oct 5 Benedictine W, 28-27 - - - - - - - - - -
Oct 12 at Maranatha Baptist W, 70-14 - - - - - - - - - -
Oct 19 at Concordia Chicago W, 48-42 - - - - - - - - - -
Oct 26 Lakeland W, 45-28 - - - - - - - - - -
Nov 2 at Rockford W, 55-13 - - - - - - - - - -
Nov 9 Aurora W, 49-41 - - - - - - - - - -
Nov 16 at Wisconsin Lutheran W, 58-31 - - - - - - - - - -
Nov 23 at UW-Platteville L, 54-20 - - - - - - - - - -
Date Opponent Score gp rush rcv pr kr yds
Sep 7 Augsburg L, 51-17 - - - - - -
Sep 14 Macalester W, 20-10 - - - - - -
Sep 21 at Trine L, 47-41 - - - - - -
Oct 5 Benedictine W, 28-27 - - - - - -
Oct 12 at Maranatha Baptist W, 70-14 1 25 - - - 25
Oct 19 at Concordia Chicago W, 48-42 - - - - - -
Oct 26 Lakeland W, 45-28 - - - - - -
Nov 2 at Rockford W, 55-13 1 4 - - - 4
Nov 9 Aurora W, 49-41 - - - - - -
Nov 16 at Wisconsin Lutheran W, 58-31 - - - - - -
Nov 23 at UW-Platteville L, 54-20 - - - - - -
Date Opponent Score pts rush rec kr pr int fum xpm fgm saf misc 2pt
Sep 7 Augsburg L, 51-17 - - - - - - - - - - - -
Sep 14 Macalester W, 20-10 - - - - - - - - - - - -
Sep 21 at Trine L, 47-41 - - - - - - - - - - - -
Oct 5 Benedictine W, 28-27 - - - - - - - - - - - -
Oct 12 at Maranatha Baptist W, 70-14 0 0 - - - - - - - - - -
Oct 19 at Concordia Chicago W, 48-42 - - - - - - - - - - - -
Oct 26 Lakeland W, 45-28 - - - - - - - - - - - -
Nov 2 at Rockford W, 55-13 0 0 - - - - - - - - - -
Nov 9 Aurora W, 49-41 - - - - - - - - - - - -
Nov 16 at Wisconsin Lutheran W, 58-31 - - - - - - - - - - - -
Nov 23 at UW-Platteville L, 54-20 - - - - - - - - - - - -
Date Opponent Score tack ast tot sack lost tfl yds ff fr td int yds td brup blk saf
Sep 7 Augsburg L, 51-17 - - - - - - - - - - - - - - - -
Sep 14 Macalester W, 20-10 - - - - - - - - - - - - - - - -
Sep 21 at Trine L, 47-41 - - - - - - - - - - - - - - - -
Oct 5 Benedictine W, 28-27 - - - - - - - - - - - - - - - -
Oct 12 at Maranatha Baptist W, 70-14 - - 0 - - 0 - - - - - - - - - -
Oct 19 at Concordia Chicago W, 48-42 - - - - - - - - - - - - - - - -
Oct 26 Lakeland W, 45-28 - - - - - - - - - - - - - - - -
Nov 2 at Rockford W, 55-13 - - 0 - - 0 - - - - - - - - - -
Nov 9 Aurora W, 49-41 - - - - - - - - - - - - - - - -
Nov 16 at Wisconsin Lutheran W, 58-31 - - - - - - - - - - - - - - - -
Nov 23 at UW-Platteville L, 54-20 - - - - - - - - - - - - - - - -
  gp comp att pct yds y/g y/a td int lg
2013-14 2 2 3 66.7% 10 5.0 3.3 0 0 9
Total 2 2 3 66.7% 10 5.0 3.3 0 0 9
  gp rush yds y/g avg td lg fum lost
2013-14 2 5 29 14.5 5.8 0 21 - -
Total 2 5 29 14.5 5.8 0 21 - -
  gp rec rec/g yds y/g avg td lg
2013-14 2 - - - - - - -
Total 2 - - - - - - -
  gp fgm fga pct lg xpm xpa pct pts
2013-14 2 - - - - - - - 0
Total 2 - - - - - - - 0
  gp punt yds avg lg in20 fc tb blk
2013-14 2 - - - - - - - -
Total 2 - - - - - - - -
  kr yds avg td lg pr yds avg td lg
2013-14 - - - - - - - - - -
Total - - - - - - - - - -
  gp rush rcv pr kr yds ypg
2013-14 2 29 - - - 29 14.5
Total 2 29 - - - 29 14.5
  pts pts/g rush rec kr pr int fum xpm fgm 2pt misc
2013-14 0 0.0 0 - - - - - - - - -
Total 0 0.0 0 - - - - - - - - -
  gp tkl ast tot tkl/g sck yds tfl yds ff fr yds int yds brup blk
2013-14 2 - - 0 .0 - - 0 - - - - - - - -
Total 2 - - 0 .0 - - 0 - - - - - - - -
  gp comp att pct yds y/g y/a td int lg
Total 2 2 3 66.7% 10 5.0 3.3 0 0 9
Conference 1 2 3 66.7% 10 10.0 3.3 0 0 9
Exhibition - - - - - - - - - -
-
Home - - - - - - - - - -
Away 2 2 3 66.7% 10 5.0 3.3 0 0 9
Neutral - - - - - - - - - -
-
Wins 2 2 3 66.7% 10 5.0 3.3 0 0 9
Losses - - - - - - - - - -
-
October 1 - - - - - - - - -
November 1 2 3 66.7% 10 10.0 3.3 0 0 9
  gp rush yds y/g avg td lg fum lost
Total 2 5 29 14.5 5.8 0 21 - -
Conference 1 1 4 4.0 4.0 0 4 - -
Exhibition - - - - - - - - -
-
Home - - - - - - - - -
Away 2 5 29 14.5 5.8 0 21 - -
Neutral - - - - - - - - -
-
Wins 2 5 29 14.5 5.8 0 21 - -
Losses - - - - - - - - -
-
October 1 4 25 25.0 6.3 0 21 - -
November 1 1 4 4.0 4.0 0 4 - -
  gp rec rec/g yds y/g avg td lg
Total 2 - - - - - - -
Conference 1 - - - - - - -
Exhibition - - - - - - - -
-
Home - - - - - - - -
Away 2 - - - - - - -
Neutral - - - - - - - -
-
Wins 2 - - - - - - -
Losses - - - - - - - -
-
October 1 - - - - - - -
November 1 - - - - - - -
  gp fgm fga pct lg xpm xpa pct pts
Total 2 - - - - - - - 0
Conference 1 - - - - - - - 0
Exhibition - - - - - - - - 0
-
Home - - - - - - - - 0
Away 2 - - - - - - - 0
There was a problem with a Velocity script
Pagebio-template
ErrorVM #split: too few arguments to macro. Wanted 4 got 3 at bio-template[line 226, column 1]
Page source:
1: ## PICK UP OPTIONS
2: $website.include("options")
3: #set ($options = $request.getAttribute("options"))
4: #set ($locale = "en_us")
5: #set ($locale = $options.get("locale"))
6: 
7: ## HACK TO GET STATS URL FROM RENDERER... NEEDS SERVER CHANGE
8: #set ($bioObject = $page.getDataAsObject())
9: #set ($statsURL = $bioObject.statsURL)
10: 
11: #if ($statsURL.length() > 0)
12:   $website.includeAgain("${statsURL}?tmpl=bio-stats-template")
13:   ## various settings to get the variables set
14:   #set ($events = $request.getAttribute("bio_events"))
15:   #set ($seasons = $request.getAttribute("bio_seasons"))
16:   #set ($career = $request.getAttribute("bio_career"))
17:   #set ($labels = $request.getAttribute("bio_labels"))
18:   #set ($briefs = $request.getAttribute("bio_briefs"))
19:   #set ($gamelogs = $request.getAttribute("bio_gamelogs"))
20:   #set ($splits = $request.getAttribute("bio_splits"))
21:   #set ($statPosition = $request.getAttribute("bio_position"))
22:   #set ($positions = $request.getAttribute("bio_positions"))
23:   #set ($playerId = $request.getAttribute("bio_player_id"))
24:   #set ($highlights = $request.getAttribute("bio_highlights"))
25:   #set ($formats = $request.getAttribute("bio_formats"))
26:   #set ($gamelogsCategoriesLabels = $request.getAttribute("bio_gamelogs_labels"))
27:   #set ($briefsCategoriesLabels = $request.getAttribute("bio_briefs_labels"))
28:   #set ($gamesResults = $request.getAttribute("bio_games_results"))
29:   #set ($monthsPlayed = $request.getAttribute("bio_months_played"))
30: #end
31: 
32: #set ($pos = "")
33: #set ($pos = $attributes.get("position"))
34: #set ($pos = $statPosition)
35: #set ($posVec = $pos.split("/"))
36: #set ($pos = $posVec[0])
37: #set ($pos = $pos.toLowerCase())
38: #set ($statPos = $positions.get($pos))
39: #set ($paramPos = $request.getParameter("pos"))
40: 
41: #set ($playerId = $attributes.get("playerId"))
42: #set ($stats = $splits.overall)
43: #set ($highlights = $highlights.get($statPos))
44: 
45: #set ($showHighlights = true)
46: #if ($options.get("bio_show_highlights") && $options.get("bio_show_highlights") == false)
47: 	#set ($showHighlights = false)
48: #end
49: 
50: #set ($showCareer = $wiki.valid() && $seasons)
51: #if ("yes" == $options.get("stats_show_career") && $seasons)
52:   #set ($showCareer = true)
53: #end
54: 
55: #set ($hasEvents = $events.size() > 0)
56: #set ($hasSynopsis = $synopsis.length() > 1 && $synopsis.indexOf("<center>") == -1)
57: #set ($htmlStatsURL = "${page.url}-stats")
58: #set ($hasHTMLStats = $website.exists($htmlStatsURL))
59: #set ($bioBriefURL = "${page.url}-brief")
60: #set ($hasBioBrief = $website.exists("$bioBriefURL"))
61: #set ($showRoster = ($page.contentType == "loki/bio" && $page.headlinesFeatured.size() > 0) || ($page.contentType == "loki/bio-network" && $page.sectionPage.children.size() > 1))
62: #if ($options.get("bio_hide_roster") == true)
63:   #set ($showRoster = false)
64: #end
65: 
66: #set ($view = "")
67: #if ($hasSynopsis || $hasBioBrief)
68:   #set ($view = "bio")
69: #elseif ($statsURL.length() > 0)
70:   #set ($view = "profile")
71: #elseif ($hasHTMLStats)
72:   #set ($view = "htmlstats")
73: #elseif ($releases.size() > 0)
74:   #set ($view = "news")
75: #end
76: 
77: #if ($options.get("bio_default_view").length() > 0)
78:   #set ($checkView = $options.get("bio_default_view"))
79: #end
80: 
81: #if ($request.getParameter("view"))
82:   #set ($checkView = $request.getParameter("view"))
83: #end
84: 
85: #if ($checkView == "profile" && $statsURL.length() > 0)
86:   #set ($view = "profile")
87: #elseif ($checkView == "bio" && ($hasSynopsis || $hasBioBrief))
88:   #set ($view = "bio")
89: #elseif ($checkView == "gamelog" && $statsURL.length() > 0)
90:   #set ($view = "gamelog")
91: #elseif ($checkView == "career" && $showCareer)
92:   #set ($view = "career")
93: #elseif ($checkView == "splits" && $statsURL.length() > 0)
94:   #set ($view = "splits")
95: #elseif ($checkView == "htmlstats" && $hasHTMLStats)
96:   #set ($view = "htmlstats")
97: #elseif ($checkView == "news" && $releases.size() > 0)
98:   #set ($view = "news")
99: #end
100: 
101: #macro (gamelogData $p)
102: 
103: #set ($p = $positions.get($p))
104: #set ($gamelogs = $gamelogs.get($p))
105: 	
106: #if ($hasEvents)
107: <div class="stats-box full clearfix">
108: <div class="scrollable">
109: <div>
110: <table>
111:   <tr class="thead">
112:     <th class="text">Date</th>
113:     <th class="pinned-col text">Opponent</th>
114:     <th>Score</th>
115:     #foreach ($gamelog in $gamelogs)
116:       <th>$gamelog</th>
117:     #end
118:   </tr>
119: #foreach ($event in $events)
120:   <tr>
121:     <td class="text">$formatter.formatDate($event.event.date, "MMM d")</td>
122:     <td class="pinned-col text">
123:       #if ($event.event.neutralSite.length() > 0) vs. #elseif (!$event.event.home) at #end
124:       $event.event.opponent.name
125:     </td>
126:     <td>
127:     #if ($event.event.statusCode >= 0)
128:       #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
129:       <a href="../boxscores/${formatter.formatDate($event.event.date, "yyyyMMdd")}_${event.event.eventId.substring(0, 4)}.xml">${event.event.APResult}</a>
130:       #else
131:       ${event.event.APResult}
132:       #end
133:     #else &nbsp; #end
134:     </td>
135:     #foreach ($gamelog in $gamelogs.keySet())
136:       #set ($value = "-")
137:       #set ($value = $formatter.formatNumber($event.stats.get($gamelog), $formats.get($gamelog)))
138:       <td>$value</td>
139:     #end
140:   </tr>
141: #end
142: </table>
143: </div>
144: </div> ## scrollable
145: </div> ## stats-box
146: #end
147: 
148: #end ## macro gamelogData
149: 
150: #macro (split $statPosBriefs $label $stats)
151:   <tr>
152:     <td class="pinned-col text">${label}</td>
153:     #foreach ($brief in $statPosBriefs.keySet())
154:       #set ($value = "-")
155:       #set ($value = $!formatter.formatNumber($stats.get($brief), $formats.get($brief)))
156:       <td>#if ($value.length() > 0) $value #else - #end</td>
157:     #end
158:   </tr>
159: #end
160: 
161: #macro (careerData $p)
162: #set ($p = $positions.get($p))
163: #set ($statPosBriefs = $briefs.get($p))
164: 
165: <div class="stats-box full clearfix">
166: <div class="scrollable">
167: <div>
168: <table>
169: <tr class="thead">
170:   <th class="pinned-col">&nbsp;</th>
171:   #foreach ($brief in $statPosBriefs)
172:     <th>$brief</th>
173:   #end
174: </tr>
175: 
176: #set ($careerTotals = $request.getAttribute("careerTotals"))
177: #set ($careerMap = $request.getAttribute("careerMap"))
178: 
179: #foreach ($season in $seasons)
180:   ## Check if we did not get stats for this season
181:   #if ($careerMap.get($season.seasonName))
182:     #split($statPosBriefs, $season.seasonName, $careerMap[$season.seasonName])
183:   #elseif ($wiki.valid())
184:     <tr>
185:       <td class="text">${season.seasonName}</td>
186:       <td colspan="${briefs.size()}">We could not find the "players" page in the ${season.seasonName} section.</td>
187:     </tr>
188:   #end
189: #end
190: 
191: #split($statPosBriefs, "Total", $request.getAttribute("careerTotals").overall)
192: 
193: </table>
194: </div>
195: </div> ## scrollable
196: </div> ## stats-box
197: 
198: #end ## macro careerData
199: 
200: #macro (splitsData $p)
201: 
202: #set ($p = $positions.get($p))
203: #set ($statPosBriefs = $briefs.get($p))
204: #set ($colspan = $tool.math.add($statPosBriefs.size(), 1))	
205: 	
206: #if ($statPosBriefs.size() > 0)
207: <div class="stats-box full clearfix">
208: <div class="scrollable">
209: <div>
210: <table>
211:   <tr>
212:     <th class="pinned-col">&nbsp;</th>
213:     #foreach ($brief in $statPosBriefs)
214:       <th>$brief</th>
215:     #end
216:   </tr>
217: 
218: #split($statPosBriefs, "Total", $splits.overall)
219: #split($statPosBriefs, "Conference", $splits.conference)
220: #split($statPosBriefs, "Exhibition", $splits.exhibition)
221: 
222: <tr class="empty-row"><td colspan="$colspan"><div class="empty-cell">-</div></td></tr>
223: 
224: #split($statPosBriefs, "Home", $splits.home)
225: #split($statPosBriefs, "Away", $splits.away)
226: #split($statPosBriefs, "Neutral", $splits.neutral)
227: 
228: <tr class="empty-row"><td colspan="$colspan"><div class="empty-cell">-</div></td></tr>
229: 
230: #foreach($gameResult in $gamesResults.entrySet())
231:   #if ($gameResult.key == "wins")
232:     #set ($splitGameResult = $splits.inWins)
233:   #elseif ($gameResult.key == "losses")
234:     #set ($splitGameResult = $splits.inLosses)
235:   #elseif ($gameResult.key == "ties")
236:     #set ($splitGameResult = $splits.inTies)
237:   #end
238: 	
239:   #split($statPosBriefs, $gameResult.value, $splitGameResult)
240: #end
241: 
242: <tr class="empty-row"><td colspan="$colspan"><div class="empty-cell">-</div></td></tr>
243: 
244: #if ($monthsPlayed and $monthsPlayed.size() > 0)
245:   #foreach($month in $monthsPlayed)
246:     #if ($month == 'January')
247:       #set ($splitMonth = $splits.january)
248:     #elseif ($month == 'February')
249:       #set ($splitMonth = $splits.february)
250:     #elseif ($month == 'March')
251:       #set($splitMonth = $splits.march)
252:     #elseif ($month == 'April')
253:       #set($splitMonth = $splits.april)
254:     #elseif ($month == 'May')
255:       #set ($splitMonth = $splits.may)
256:     #elseif ($month == 'June')
257:       #set ($splitMonth = $splits.june)
258:     #elseif ($month == 'July')
259:       #set($splitMonth = $splits.july)
260:     #elseif ($month == 'August')
261:       #set ($splitMonth = $splits.august)
262:     #elseif ($month == 'September')
263:       #set($splitMonth = $splits.september)
264:     #elseif ($month == 'October')
265:       #set($splitMonth = $splits.october)
266:     #elseif ($month == 'November')
267:       #set ($splitMonth = $splits.november)
268:     #elseif ($month == 'December')
269:       #set($splitMonth = $splits.december)
270:     #end
271: 		
272:     #split($statPosBriefs, $month, $splitMonth)
273:   #end ## foreach
274: #end
275: </table>
276: </div>
277: </div> ## scrollable
278: </div> ## srollable-table
279: #end
280: 
281: #end ## macro splitsData
282: 
283: #macro (printRecentGames)
284: #if ($hasEvents)
285: <table>
286:   <tr class="thead"><th colspan="3">Recent Games</th></tr>
287:   
288: #set ($eventEnd = -1)
289: #foreach ($event in $events)
290:   #if ($event.event.result.resolved)
291:     #set ($eventEnd = $velocityCount)
292:   #end
293: #end
294: 
295: #set ($eventStart = $eventEnd - 5)
296: #if ($eventStart < 0) #set ($eventStart = 0) #end
297: 
298: #foreach ($event in $events)
299: #if ($velocityCount >= $eventStart and $velocityCount <= $eventEnd)
300:   <tr>
301:     <td class="text">$formatter.formatDate($event.event.date, "MMM d")</td>
302:     <td class="text">
303:       #if ($event.event.neutralSite.length() > 0) vs.
304:       #elseif (!$event.event.home) at
305:       #else ## nothing for a home game
306:       #end
307:       $event.event.opponent.name
308:     </td>
309:     <td class="text">
310:     #if ($event.event.statusCode >= 0)
311:       #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
312:       <a href="../boxscores/${formatter.formatDate($event.event.date, "yyyyMMdd")}_${event.event.eventId.substring(0, 4)}.xml">${event.event.APResult}</a>
313:       #else
314:       ${event.event.APResult}
315:       #end
316: 	#end
317: 	</td>
318:   </tr>
319: #end ## if
320: #end
321: </table>
322: #end
323: #end ## macro printRecentGames
324: 
325: #macro (printCategories $briefCategoryLabels $v)
326: 	
327: <div class="tab-container secondary clearfix">
328: <div class="tab-nav" data-jscroll="true" data-momentum="false">
329: <div>
330: <ul class="clearfix">
331: #foreach($briefCat in $briefCategoryLabels.entrySet())
332:   #set ($briefCatLabel = $briefCat.value)
333:   #set ($briefCatKey = $briefCat.key)
334: 		
335:   #if ($locale == "en_gb" && $briefCatLabel == "Defense")
336:     #set ($briefCatLabel = "Defence")
337:   #end	
338: 	
339:   <li #if ($activePos == $briefCatKey) class="active" #end><a href="${page.url}?view=${v}&pos=${briefCatKey}">$briefCatLabel</a></li>
340: #end
341: </ul>
342: </div>
343: </div>
344: <div class="tab-panels">
345: #foreach ($briefCat in $briefCategoryLabels.entrySet())
346:   #set ($class = "tab-panel clearfix")
347:   #if ($briefCat.key == $activePos)
348:     #set ($class = "tab-panel active clearfix")
349:   #end
350:   <div class="$class">
351:     <div class="stats-wrap clearfix">
352:     #if ($v == "splits")
353:       #splitsData($briefCat.key)
354:     #elseif ($v == "career")
355:       #careerData($briefCat.key)
356:     #end
357:     </div>
358:   </div>
359: #end	
360: </div>
361: </div> ## tab-container
362: 
363: #end ## macro printCategories
364: 	
365: #macro (printHeadshot)
366: 
367: #if ($attributes.get("number"))<span class="number">$!attributes.get("number")</span>#end
368: 
369: #if ($headshot.url)
370:   <img src="$headshot.url?max_width=160&max_height=210" alt="$fullName" title="$fullName" />
371: #else
372:   #if ($website.exists("/images/setup/headshot_default.jpg"))
373:     <img src="/images/setup/headshot_default.jpg?max_width=160&max_height=210" alt="$fullName" title="$fullName" />
374:   #else
375:     <img src="/info/images/default_headshot.jpg?max_width=160&max_height=210" alt="$fullName" title="$fullName" />
376:   #end
377: #end
378: #end ## macro printHeadshot
379: 	
380: #macro (printBioInfo)
381: <div class="player-name">
382:   #if ($attributes.get("number"))<span class="number">$!attributes.get("number")</span>#end
383:   <span class="name">$fullName</span>
384: </div>	
385: 	
386: <table>
387: #foreach ($i in [1..10])
388:   #set ($stickyKey = "bio_custom${i}_sticky")
389:   #if ($options.get($stickyKey).length() > 0 && $attributes.get("custom${i}").length() > 0)
390:     <tr>
391:       <td class="label">$options.get($stickyKey): </td>
392:       <td class="value">$!attributes.get("custom${i}")</td>
393:     </tr>
394:   #end
395: #end
396: 
397: #foreach ($field in $fields)
398:   #if (!$field.key.startsWith("custom"))
399:     #if ($attributes.get($field.key).length() > 0 && ($field.key != "first_name" && $field.key != "last_name" && $field.key != "number" && $field.key != "full_name"))
400:       #if ($field.key == "phone1" || $field.key == "phone2")
401:         <tr>
402:           <td class="label">Phone: </td>
403:           <td class="value">$!attributes.get($field.key)</td>
404:         </tr>
405:       #elseif ($field.key == "email_address")
406:         #set ($emailAdd = $attributes.get($field.key))
407:         <tr>
408:           <td class="label">Email: </td>
409:           <td class="value"><a href="mailto:${emailAdd}">$emailAdd</a></td>
410:         </tr>
411:       #else
412:         <tr>
413:           <td class="label">$field.value: </td>
414:           <td class="value">$!attributes.get($field.key)</td>
415:         </tr>
416:       #end
417:     #end
418:   #end
419: #end
420: 
421: #foreach ($i in [1..10])
422:   #set ($customKey = "bio_custom${i}")
423:   #if ($options.get($customKey).length() > 0 && $attributes.get("custom${i}"))
424:     <tr>
425:       <td class="label">$options.get($customKey): </td>
426:       <td class="value">$!attributes.get("custom${i}")</td>
427:     </tr>
428:   #end
429: #end
430: </table>
431: #end ## macro printBioInfo
432: 	
433: #macro (printHighlights)
434: #foreach ($highlight in $highlights.keySet())
435:   #set ($value = "-")
436:   #set ($value = $formatter.formatNumber($stats.get($highlight), $formats.get($highlight)))
437:   <div class="stat clearfix">
438:     <span class="stat-title">$!highlights.get($highlight)</span>
439:     <span class="stat-value">$value</span>
440:   </div>
441: #end
442: #end ## macro printHighlights
443: 	
444: #macro (printRoster)
445: #if ($page.contentType == "loki/bio")
446:   #set ($headlinesFeaturedSize = 0)
447:   #foreach ($featuredPage in $page.headlinesFeatured)
448:     #if ($featuredPage.contentType == "loki/headlines")
449:       #set ($headlinesFeaturedSize = $headlinesFeaturedSize + 1)
450:     #end
451:   #end
452:   #if ($headlinesFeaturedSize > 0)
453:     <select class="roster-select-list">
454:       <option selected="selected">Related Bios</option>
455:       #foreach ($featuredPage in $page.headlinesFeatured)
456:         #if ($featuredPage.contentType == "loki/headlines")
457:           $website.includeAgain("${featuredPage.url}?tmpl=roster-list-template&current_url=${page.url}")
458: 		#end
459: 	  #end
460:     </select>
461:   #end
462: #elseif ($page.contentType == "loki/bio-network")
463:   #set ($relatedPlayers = $page.sectionPage.children)
464:   #set ($teamNames = {})
465:   #foreach ($relatedPlayer in $relatedPlayers)
466:     #if ($relatedPlayer.contentType == "loki/bio-network")
467:       #set ($relatedPlayerObj = $relatedPlayer.getDataAsObject().getAttributes())
468:       #set ($teamName = $relatedPlayerObj.get("team"))
469:       #if ($teamName.length() > 0)
470:         #if (!$teamNames.containsValue($teamName))
471:           $!teamNames.put($tool.math.add($teamNames.size(), 1), $teamName)
472:         #end
473:       #end
474:     #end
475:   #end
476: 
477:   <select class="roster-select-list">
478:   #foreach ($i in [1..$teamNames.size()])
479:     #if ($teamNames.size() > 1)
480:       <optgroup label="$teamNames.get($i)">
481:     #end
482: 				
483:     #foreach ($relatedPlayer in $relatedPlayers)
484:       #if ($relatedPlayer.contentType == "loki/bio-network")
485:         #set ($relatedPlayerObj = $relatedPlayer.getDataAsObject().getAttributes())
486:         #set ($teamName = $relatedPlayerObj.get("team"))
487:         #if ($teamName.length() > 0 && $teamName == $teamNames.get($i))
488:           #set ($playerFirstName = $relatedPlayerObj.get("first_name"))
489:           #set ($playerLastName = $relatedPlayerObj.get("last_name"))
490:           #if ($page.url == $relatedPlayer.url)
491:             <option value="$relatedPlayer.url" selected="selected">${playerFirstName} ${playerLastName}</option>
492:           #else
493:             <option value="$relatedPlayer.url">${playerFirstName} ${playerLastName}</option>
494:           #end
495:         #end
496:       #end
497:     #end
498: 				
499:     #if ($teamNames.size() > 1)
500:       </optgroup>
501:     #end
502:   #end
503:   </select>
504: #end
505: #end ## macro printRoster
506: 	
507: ################################################## END MACROS  #############################################################
508: 
509: #if ($attributes.get("full_name").length() > 0)
510:   #set ($fullName = $attributes.get("full_name"))
511: #else
512:   #set ($firstName = $!attributes.get("first_name"))
513:   #set ($lastName = $!attributes.get("last_name"))
514:   #set ($fullName = "${firstName} ${lastName}")
515: #end
516: 
517: ## FULL ROSTER
518: <div class="bio-wrap clearfix">
519: 	
520: ## RELATED BIOS
521: #if ($showRoster)
522:   <div class="related-bios clearfix">#printRoster</div>
523: #end
524:   
525: <div class="head clearfix">
526: <div class="clearfix">
527:     
528: <div class="player-about clearfix">
529:   <div class="player-headshot">#printHeadshot</div>
530:   <div class="player-info">#printBioInfo</div>
531: </div>
532: 
533: #if ($highlights && $showHighlights)
534:   <div class="player-highlights clearfix">#printHighlights</div>
535: #end
536: 
537: </div>
538: </div> ## head
539: 
540: #if ($view.length() > 0)
541: <div class="body clearfix">
542:   
543: <div class="tab-container primary clearfix">
544:   
545: <div class="tab-nav" data-jscroll="true" data-momentum="false">
546:   <div>
547:   <ul class="clearfix">
548:   #if ($hasSynopsis || $hasBioBrief)
549:     <li #if ($view == "bio") class="active" #end><a href="${page.url}?view=bio">Bio</a></li>
550:   #end
551: 		
552:   #if ($statsURL.length() > 0)
553:     <li #if ($view == "profile") class="active" #end><a href="${page.url}?view=profile">Player Profile</a></li>
554:     <li #if ($view == "gamelog") class="active" #end><a href="${page.url}?view=gamelog">Game Log</a></li>
555:     #if ($showCareer)
556:       <li #if ($view == "career") class="active" #end><a href="${page.url}?view=career">Career Stats</a></li>
557:     #end
558:     <li #if ($view == "splits") class="active" #end><a href="${page.url}?view=splits">Split Stats</a></li>
559:   #end
560: 
561:   #if ($hasHTMLStats)
562:     <li #if ($view == "htmlstats") class="active" #end><a href="${page.url}?view=htmlstats">HTML Stats</a></li>
563:   #end
564:  
565:   #if ($releases.size() > 0)
566: 	<li #if ($view == "news") class="active" #end><a href="${page.url}?view=news">News</a></li>
567:   #end
568:   </ul>
569:   </div>
570: </div> ## tab-nav
571: 
572: <div class="tab-panels clearfix">
573: 	
574: ## BIO
575: #if ($hasSynopsis || $hasBioBrief)
576: 
577: #set ($class = "tab-panel clearfix")
578: #if ($view == "bio")
579:   #set ($class = "tab-panel active clearfix")
580: #end
581: <div class="${class}">
582: 
583: <div class="synopsis clearfix">
584: #if ($hasSynopsis)
585:   $synopsis
586: #elseif ($hasBioBrief)
587:   $website.include("$bioBriefURL")
588: #end
589: </div>
590: 
591: </div> ## tab-panel
592: #end 
593: ## BIO
594: 
595: ## STATS
596: #if ($statsURL.length() > 0)
597: 
598: ## PROFILE
599: #set ($class = "tab-panel clearfix")
600: #if ($view == "profile")
601:   #set ($class = "tab-panel active clearfix")
602: #end
603: <div class="${class}">
604: <div class="stats-wrap clearfix">
605: 
606: ## LAST SIX GAMES
607: <div class="stats-box half">
608: #printRecentGames()
609: </div>
610: 
611: ## RANKING
612: <div class="stats-box half">
613: #if ($statPos.length() > 0)
614:   $website.include("../players?tmpl=stats-bios-rank-template&rank=${playerId}&pos=${statPos}")
615: #end
616: </div>
617: 
618: </div> ## stats-wrap	
619: </div> ## tab-content
620: ## PROFILE
621: 
622: ## GAMELOG
623: #set ($class = "tab-panel clearfix")
624: #if ($view == "gamelog")
625:   #set ($class = "tab-panel active clearfix")
626: #end
627: 
628: #set ($activePos = $statPos)
629: #if ($view == "gamelog" && $paramPos.length() > 0)
630:   #if ($positions.get($paramPos).length() > 0)
631:     #set ($activePos = $positions.get($paramPos))
632:   #end
633: #end
634: 
635: <div class="${class}">
636: 
637: #if ($gamelogsCategoriesLabels)
638: <div class="tab-container secondary clearfix">
639:   <div class="tab-nav" data-jscroll="true" data-momentum="false">
640:     <div>
641:     <ul class="clearfix">
642:     #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet())
643:       #set($gamelogsCatLabelVal = $gamelogsCatLabel.value)
644: 		
645:       #if ($locale == "en_gb" && $gamelogsCatLabelVal == "Defense")
646:         #set($gamelogsCatLabelVal = "Defence")
647:       #end
648: 
649:       <li #if ($activePos == $gamelogsCatLabel.key) class="active" #end><a href="${page.url}?view=gamelog&pos=${gamelogsCatLabel.key}">$gamelogsCatLabelVal</a></li>
650:     #end
651:     </ul>
652: 	</div>
653:   </div>
654:   <div class="tab-panels">
655:   #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet())
656:     #set ($class = "tab-panel clearfix")
657:     #if ($gamelogsCatLabel.key == $activePos)
658:       #set ($class = "tab-panel active clearfix")
659:     #end
660:     <div class="${class}">
661:       <div class="stats-wrap clearfix">#gamelogData($gamelogsCatLabel.key)</div>
662: 	</div>
663:   #end   
664:   </div>
665: </div>	
666: #else
667:   <div class="stats-wrap clearfix">#gamelogData($pos)</div>
668: #end
669: 	
670: </div> ## tab-panel
671: ## GAMELOG
672: 
673: 
674: ## CAREER
675: #if ($showCareer)
676: 
677: #set ($activePos = $statPos)
678: #if ($view == "career" && $paramPos.length() > 0)
679:   #if ($positions.get($paramPos).length() > 0)
680:     #set ($activePos = $positions.get($paramPos))
681:   #end
682: #end
683: 
684: #set ($class = "tab-panel clearfix")
685: #if ($view == "career")
686:   #set ($class = "tab-panel active clearfix")
687: #end
688: 
689: <div class="${class}">
690: 
691: #if ($briefsCategoriesLabels)
692:   #printCategories($briefsCategoriesLabels "career")
693: #else
694:   <div class="stats-wrap clearfix">#careerData($activePos)</div>
695: #end		
696: 
697: </div> ## tab-panel
698: #end
699: ## CAREER
700: 
701: ## SPLITS
702: #set ($class = "tab-panel clearfix")
703: #if ($view == "splits")
704: 	#set ($class = "tab-panel active clearfix")
705: #end
706: 
707: #set ($activePos = $statPos)
708: #if ($view == "splits" && $paramPos.length() > 0)
709:   #if ($positions.get($paramPos).length() > 0)
710:     #set ($activePos = $positions.get($paramPos))
711:   #end
712: #end
713: 
714: <div class="${class}">
715: 
716: #if ($briefsCategoriesLabels)
717:   #printCategories($briefsCategoriesLabels "splits")
718: #else
719:   <div class="stats-wrap clearfix">#splitsData($pos)</div>
720: #end		
721: 
722: </div> ## tab-panel
723: ## SPLITS
724: 
725: #end 
726: ## STATS
727: 
728: ## HTML STATS
729: #if ($hasHTMLStats)
730: 
731: #set ($class = "tab-panel clearfix")
732: #if ($view == "htmlstats")
733:   #set ($class = "tab-panel active clearfix")
734: #end
735: <div class="${class}">
736:   <a href="${htmlStatsURL}" class="bio-htmlstats-identifier">Click to view HTML Stats</a>
737: </div>
738: 
739: #end
740: ## HTML STATS
741: 
742: ## NEWS
743: #set ($class = "tab-panel clearfix")
744: #if ($view == "news")
745:   #set ($class = "tab-panel active clearfix")
746: #end
747: <div class="bio-news ${class}">
748: 
749: #set ($counter = 0)
750: 
751: #foreach ($article in $releases)
752: #if ($article.title.length() > 0)
753: 
754: #set ($counter = $counter + 1)
755: 
756: #if ($counter == 1)
757:   <div class="row clearfix">
758: #end
759: 
760: <div class="item">
761: <div>
762: #if ($article.thumbnailURL)
763:   <img src="${article.thumbnailURL}?max_width=300" alt="" />
764: #else
765:   <img src="/images/setup/thumbnail_default.jpg" alt="" />
766: #end
767: 
768: <a href="$article.url" class="title">$article.title</a>
769: 
770: </div>
771: </div> ## item
772: 
773: #if ($counter == 3 || $velocityCount == $releases.size())
774:   </div> ## row
775:   #set ($counter = 0)
776: #end
777: 
778: #end
779: #end ## foreach
780: 
781: </div> ## tab-content
782: ## NEWS
783: 	
784: </div> ## tab-panels
785: </div> ## tab-container
786: </div> ## body
787: #end
788: 
789: $wiki
790: </div> ## ends bio-wrap