const CSID="2",KABUCKET="https://teamusastdstorage.blob.core.windows.net/collegiatepartnership2022widgets/",KACHED_DATA_BUCKET="https://teamusastdstorage.blob.core.windows.net/collegiatepartnership2022widgets/",KAASSETS="https://teamusastdstorage.blob.core.windows.net/collegiatepartnership2022widgets",RESULTS_MODE="results_mode",LEADER_MODE="leader_mode",SCHEDULE_MODE="schedule_mode",MEDALS_MODE="medals_mode",ACC_HREFS={results_mode:"1PtFHJO7WgkuScDNVBH_dE2SS4bGgbe3ucW4vdnVnhqM",leader_mode:"17ZujO4c7zs0oyNlK3_1cRP3TbNIAWdDudSksf3u3i7c",medals_mode:"12PxQmx0i7_wc3l6AvVx6NvUn_gvqyz0J69bsoM4uhcw"},MAX_COL_CHARS=20,GOLD_COL="gold",SILV_COL="silver",BROZ_COL="bronze",ANIMATION_SPEED=300,days=["Sun.","Mon.","Tue.","Wed.","Thu.","Fri.","Sat."],months=["JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE","JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER"],icon_lookup={Hockey:"1_Hockey_uncropped.png",Biathlon:"1_Biathlon_uncropped.png",Luge:"1_Luge_uncropped.png",Bobsleigh:"1_Bobsled_uncropped.png","Nordic Combined":"1_NordicCombined_uncropped.png","Cross-Country Skiing":"1_CrossCountry_uncropped.png",Skeleton:"1_Skeleton_uncropped.png",Curling:"1_Curling_uncropped.png","Ski Jumping":"1_SkiJumping_uncropped.png","Figure Skating":"1_FigureSkating_uncropped.png",Snowboard:"1_Snowboard_uncropped.png","Freestyle Skiing":"1_FreeSkiing_uncropped.png","Speed Skating":"1_SpeedSkating_Long_uncropped.png","Speed Skating":"1_SpeedSkate_Short_uncropped.png","Freestyle Skiing":"1_FreestyleSkiing_uncropped.png","Alpine Skiing":"1_AlpineSkiing_uncropped.png",Archery:"1_Archery_uncropped.png","Track and Field":"1_TrackField_uncropped.png",BMX:"1_BMX_uncropped.png",Badminton:"1_Badminton_uncropped.png",Basketball:"1_Basketball_uncropped.png","Beach Volleyball":"1_BeachVolleyball_uncropped.png",Boxing:"1_Boxing_uncropped.png","Canoe Slalom":"1_Canoe&Kayak_uncropped.png","Canoe Sprint":"1_Canoe&Kayak_uncropped.png","Cycling - Road":"1_Cycling_uncropped.png","Cycling - Track":"1_Cycling_uncropped.png",Diving:"1_Diving_uncropped.png","Equestrian - Dressage":"1_Equestrian_D_uncropped.png","Equestrian - Eventing":"1_Equestrian_E_uncropped.png","Equestrian - Jumping":"1_Equestrian_SJ_uncropped.png",Fencing:"1_Fencing_uncropped.png",Football:"1_Soccer_uncropped.png",Golf:"1_Golf_uncropped.png","Gymnastics - Artistic":"1_ArtisticGymnastics_uncropped.png","Gymnastics - Rhythmic":"1_RhythmicGymnastics_uncropped.png","Gymnastics - Trampolining":"1_Trampoline_uncropped.png","Field Hockey":"1_FieldHockey_uncropped.png",Judo:"1_Judo_uncropped.png","Modern Pentathlon":"1_Pentathlon_uncropped.png","Mountain Bike":"1_Cycling_uncropped.png","Open Water Swimming":"1_Swimming_uncropped.png",Rowing:"1_Rowing_uncropped.png","Rugby Sevens":"1_Rugby_uncropped.png",Sailing:"1_Sailing_uncropped.png",Shooting:"1_Shooting_uncropped.png",Swimming:"1_Swimming_uncropped.png","Artistic Swimming":"1_SyncSwimming_uncropped.png","Table Tennis":"1_TableTennis_uncropped.png",Taekwondo:"1_Taekwondo_uncropped.png",Tennis:"1_Tennis_uncropped.png",Triathlon:"1_Triathlon_uncropped.png",Volleyball:"1_Volleyball_uncropped.png","Water Polo":"1_WaterPolo_uncropped.png",Weightlifting:"1_Weightlifting_uncropped.png","Wrestling - Freestyle":"1_Wrestling_uncropped.png","Wrestling - Greco-Roman":"1_Wrestling_uncropped.png"},sport_renames={athletics:"Track and Field","synchronised swimming":"Artistic Swimming",hockey:"Field Hockey"},sports_to_collect=["Cycling","Equestrian","Gymnastics","Wrestling"];var kaAllSportsMed=new Set;function loadCSS(tScript,tOnLoad){var head=document.getElementsByTagName("head")[0],style=document.createElement("link");style.href=KABUCKET+tScript,style.type="text/css",style.rel="stylesheet",head.append(style),style.addEventListener("load",(function(){tOnLoad()}))}function loadScript(tScript,tOnLoad,baseBucket=KABUCKET){script=document.createElement("script"),script.type="text/javascript",script.async=!0,script.src=baseBucket+tScript,document.body.appendChild(script),script.addEventListener("load",(function(){tOnLoad()}))}function loadScripts(callback){loadScript("jquery-3.4.1.min.js",(function(){loadScript("popper.min.js",(function(){loadScript("bootstrap.min.js",(function(){loadScript("bootstrap-select.min.js",(function(){loadScript("jquery.floatThead.min.js",(function(){callback()}))}))}))}))}))}function loadScriptsAndCss(callback){loadCSS("ka-widget.css",(function(){loadCSS("bootstrap.min.css",(function(){loadCSS("bootstrap-select.min.css",(function(){loadScripts(callback)}))}))}))}function loadData(mode,callback){loadScript(mode.replace("_mode",".js"),callback,baseBucket=KACHED_DATA_BUCKET)}function loadExternals(mode,callback){loadScriptsAndCss((function(){loadData(mode,callback)}))}function loadKaWidget(Mode=RESULTS_MODE,Selector="ka-results-widget",Title="2020 Olympic Games: U.S. College Athlete Results",CSID=CSID){loadExternals(Mode,(function(){var tSuffix=getRandomSuffix();switch(Mode){case RESULTS_MODE:buildScaffolding(RESULTS_MODE,Selector,Title,tSuffix),buildAll(RESULTS_MODE,tSuffix);break;case LEADER_MODE:buildScaffolding(LEADER_MODE,Selector,Title,tSuffix),buildAll(LEADER_MODE,tSuffix);break;case MEDALS_MODE:buildScaffolding(MEDALS_MODE,Selector,Title,tSuffix),buildAll(MEDALS_MODE,tSuffix);break;default:console.error("No widget mode set!")}}))}function buildAll(tMode,tSuffix){switch(tMode){case RESULTS_MODE:buildTimeTable(tSuffix,kached_results,RESULTS_MODE),buildResultsOnlyMenuItems(tSuffix);break;case LEADER_MODE:var tSchools;buildFilterSelectMenu("school",Array.from(Object.keys(kached_leaders)).sort(),tSuffix),buildLeaderboardTable(tSuffix);break;case MEDALS_MODE:buildTimeTable(tSuffix,kached_medals,MEDALS_MODE),buildResultsOnlyMenuItems(tSuffix,kached_medals);break;default:console.error("No widget mode set!")}}function buildResultsOnlyMenuItems(tSuffix,resultsToUse=kached_results){console.log("build res only menu!"),buildDateAndSportFilters(tSuffix,resultsToUse,kaAllSportsMed),buildFilterTextMenu("athlete",tSuffix),buildFilterTextMenu("school",tSuffix)}function buildDateAndSportFilters(tSuffix,resultsToUse,sportsToUse){var tDates,tSports;buildFilterSelectMenu("date",Array.from(Object.keys(resultsToUse).sort(compareDateStrings)),tSuffix),buildFilterSelectMenu("sport",Array.from(sportsToUse).sort(),tSuffix)}function buildTimeTable(tSuffix,tResults,tMode){var tLoading=$(`#ka-load-div-${tSuffix}`),tTable=$(`#ka-table-${tSuffix}`),tBody=$('<tbody class="ka-outer-table-body"/>'),dates=Object.keys(tResults).sort(compareDateStrings);tMode==SCHEDULE_MODE&&(dates=dates.reverse());for(var j=0;j<dates.length;j++){var tDayResults=tResults[dates[j]],tTarget=`date-row-${dates[j].replace(/ /g,"")}-${tSuffix}`,tDateSection=buildDateSection(dates[j],tDayResults,tTarget,tSuffix,tMode);tBody.append(tDateSection)}tLoading.remove(),tTable.append(tBody)}function buildLeaderboardTable(tSuffix){var tSortedResults=sortSchoolResults(kached_leaders),tLoading=$(`#ka-load-div-${tSuffix}`),tTable=$(`#ka-table-${tSuffix}`),tBody=$('<tbody class="ka-outer-table-body"/>'),tRh=buildHeader(["Rank","School","Total Medalists","Gold Medalists","Silver Medalists","Bronze Medalists"]);tRh.addClass("ka-inner-thead"),tBody.append(tRh);for(var tRankActual=1,tRankVisible=1,tLastTotal=-1,j=0;j<tSortedResults.length;j++){var tSchool=tSortedResults[j][0],tResult=tSortedResults[j][1],tTotal=tResult.total;tTotal!=tLastTotal&&(tRankVisible=tRankActual),tRankActual++;var toggleID="ka-toggle-"+j,tRow=$(`<tr data-toggle="collapse" data-target="#${toggleID}" class="ka-medal-row accordion-toggle" />`),tChev=`&nbsp<span class="bi bi-chevron-right"></span>&nbsp${tRankVisible}`;tRow.append($("<td align='left'/>").html(tChev)),tRow.append($("<td align='left'/>").html(schoolCleaner(tSchool))),tRow.append($("<td/>").html(tTotal)),tRow.append($("<td/>").html(tResult.gold)),tRow.append($("<td/>").html(tResult.silver)),tRow.append($("<td/>").html(tResult.bronze)),tRow.attr(`ka-filter-school-${tSuffix}`,charOnly(tSchool));var tHiddenSection=buildHiddenContent(toggleID,tResult);tHiddenSection.attr(`ka-filter-school-${tSuffix}`,tSchool),tBody.append(tRow),tBody.append(tHiddenSection),tLastTotal=tTotal}tLoading.remove(),tTable.append(tBody)}function buildHiddenContent(tId,tResult){var tResRows=sortSchoolSubResults(Array.from(tResult.rows)),tHiddenRow=$('<tr class="ka-hidden-tr"/>'),tHiddenTD=$('<td colspan="6" class="hiddenRow"/>'),tHiddenDiv=$(`<div class="accordion-body collapse" id="${tId}"/>`),tTable=$('<table class="ka-inner-table table table-striped table-light table-sm" style="width:100%">');if(tResRows.length<1)tHiddenDiv.html("no results");else{tTable.append($("<thead><tr><th>Sport</th><th>Athlete</th><th>Event</th><th>Medal</th></tr></thead>"));for(var tTableBody=$("<tbody>"),j=0;j<tResRows.length;j++){var tResRow=tResRows[j],tRow=$("<tr/>");tRow.append($("<td/>").html(tResRow.sport_name)),tRow.append($("<td/>").html(tResRow.full_name)),tRow.append($("<td/>").html(tResRow.event_name)),tRow.append($("<td/>").html(tResRow.medal)),tTableBody.append(tRow)}tTable.append(tTableBody)}return tHiddenDiv.append(tTable),tHiddenTD.append(tHiddenDiv),tHiddenRow.append(tHiddenTD),tHiddenRow}function buildHeader(fields,tEClass=""){for(var tHead=$('<thead class="ka-event-row-header"/>'),tRh=$("<tr/>"),j=0;j<fields.length;j++)tRh.append($(`<th class='${tEClass}'/>`).html(fields[j]));return tHead.append(tRh),tHead}function buildDateSection(tDate,tResult,tTarget,tSuffix,tMode){var tEventNames=Object.keys(tResult),tDateSection=$(`<tr data-toggle="collapse" ka-filter-date-${tSuffix}="${charOnly(tDate)}" data-target="#${tTarget}" class="ka-date-section"/>`);tDateSection.html(`<div class='ka-bng ka-sticky-date'>${dateReFormatter(tDate)}</div>`);for(var j=0;j<tEventNames.length;j++){var tEventName=tEventNames[j],tEventSection=buildEventSection(tEventName,tResult[tEventName],tSuffix,j,tMode);tDateSection.append(tEventSection)}return tDateSection}function buildEventSection(tEventName,tResults,tSuffix,idx,tMode){tResults=tMode==RESULTS_MODE?sortSportEvents(tResults):tResults;var tEvent=$('<tr class="ka-event-section"/>'),tStickyHeader=$(`<div class="ka-sticky sticky" style="z-index=${idx+100}"/>`),tSportName=tResults[0].sport_name,tLookupName=tSportName,tCharOnlySport=charOnly(tSportName);kaAllSportsMed.add(tCharOnlySport),(tEventName.includes("Gymnastics")||tEventName.includes("Equestrian")||tEventName.includes("Cycling")||tEventName.includes("Wrestling"))&&(tLookupName=(tLookupName=(tLookupName=tEventName.replace("Men's ","")).replace("Women's ","")).replace("Open ",""));var tIcon=icon_lookup[tLookupName];tEvent.attr(`ka-filter-gender-${tSuffix}`,charOnly(tResults[0].gender)),tEvent.attr(`ka-filter-sport-${tSuffix}`,tCharOnlySport);var icon=`&nbsp&nbsp <img class="invert-icon" src='${KAASSETS}/${tIcon}' width="30" alt=""> &nbsp&nbsp`,tHead,tColsToUse;tStickyHeader.html(`<div class='ka-event-header'>${icon}${tEventName}${icon}</div>`);var tClass="";tMode==MEDALS_MODE?(tHead=buildHeader(["ATHLETE","SCHOOL","EVENT","MEDAL"],"extra-wide"),tColsToUse=["full_name","schools","event_name","medal"],tClass="class=extra-wide"):(tHead=buildHeader(["ATHLETE","SCHOOL","EVENT","ROUND","PLACE","RESULT","MEDAL"]),tColsToUse=["full_name","schools","event_name","event","place","result","medal"]),tStickyHeader.append(tHead),tEvent.append(tStickyHeader);for(var j=0;j<tResults.length;j++)tEvent.append(buildRowSection(tResults[j],tColsToUse,tClass,tSuffix));return tEvent}function buildRowSection(tRes,tColsToUse,tClass,tSuffix){for(var tRow=$('<tr class="ka-event-row"/>'),j=0;j<tColsToUse.length;j++)r=tRes[tColsToUse[j]],"result"==tColsToUse[j]&&(r=resultFormatter(r)),tRow.append($(`<td ${tClass}/>`).html(r));return tRow.attr(`ka-filter-school-${tSuffix}`,charOnly(tRes.schools[0].toUpperCase())),tRes.schools.length>1&&tRow.attr(`ka-filter-school2-${tSuffix}`,charOnly(tRes.schools[1].toUpperCase())),tRow.attr(`ka-filter-athlete-${tSuffix}`,charOnly(tRes.full_name.toUpperCase())),tRow}function resultFormatter(result){return result.constructor==Object?`<p class='ka-winner'>&#x2714 ${result.winner}</p><p class='ka-loser'>&nbsp&nbsp${result.loser}</p>`:`<p class='ka-winner'>${result}</p>`}function schoolsToString(tArr){return tArr[0]+(tArr.length>1?", "+tArr[1]:"")}function buildScaffolding(tMode,tSelector,tTitle,tSuffix){var tWidget=$(tSelector),tTitleDiv=$('<div style="clear:right;">');tTitleDiv.append($(`<div><h2 class="ka-title">${tTitle}</h2></div>`)),tWidget.append(tTitleDiv),nav=buildNav(tMode,tSuffix),tWidget.append(nav),$(".ka-select").selectpicker("refresh"),tWidget.append(`<div class='ka-table-container'>\n       <table class="ka-table table w-auto ${tMode==LEADER_MODE?"":"fixed-size-table"}" id="ka-table-${tSuffix}" >\n       </table>\n       </div>`)}function buildNav(tMode,tSuffix){var tNav=$('<nav class="navbar navbar-expand-lg ka-navbar ka-bng" >'),tNavDiv=$('<div class="collapse navbar-collapse ka-navbar-collapse" id="navbarSupportedContent" >'),tUl=$('<ul class="navbar-nav">'),acc_href=`https://docs.google.com/spreadsheets/d/${ACC_HREFS[tMode]}/edit?usp=sharing`;tOpts=tMode==RESULTS_MODE||tMode==MEDALS_MODE||tMode==SCHEDULE_MODE?["sport","date"]:["school"],tMode!=RESULTS_MODE&&tMode!=MEDALS_MODE||(tNavDiv.append($(`<form class="form-inline my-2 my-lg-0 mr-auto" style="width:33%">\n        <input style="width:100%; background-color:white;" type="text" id="ka-athlete-text-filter-${tSuffix}" placeholder=" Filter by athlete name..." title="Type in an athlete name"></input>\n        </form>`)),tNavDiv.append($(`<form class="form-inline my-2 my-lg-0 mr-auto" style="width:33%">\n        <input style="width:100%; background-color:white;" type="text" id="ka-school-text-filter-${tSuffix}" placeholder=" Filter by school name..." title="Type in a school name"></input>\n        </form>`)));for(var j=0;j<tOpts.length;j++){var tLi=$('<li class="nav-item dropdown" >)');tLi.append($(`<select class="selectpicker ka-select dropdown-primary" data-width="160px" multiple="multiple" data-actions-box="true" data-title="${capitalize(tOpts[j])}" data-selected-text-format="static" id="ka-${tOpts[j]}-dropdown-${tSuffix}" >)`)),tUl.append(tLi)}return tNavDiv.append(tUl),tNavDiv.append($(`<a target="_blank" href='${acc_href}'><img src='${KAASSETS}/google-sheets.png' width="34px" alt="accessibility raw data"></img></a>`)),tNav.append(tNavDiv),tNav}function delay(callback,ms){var timer=0;return function(){var context=this,args=arguments;clearTimeout(timer),timer=setTimeout((function(){callback.apply(context,args)}),ms||0)}}function buildFilterTextMenu(tKey,tSuffix){var tInput=$(`#ka-${tKey}-text-filter-${tSuffix}`);tInput.keyup(delay((function(){var tVal=tInput.val().toUpperCase(),tAllRows=$(`tr[ka-filter-${tKey}-${tSuffix}]`);if(tVal.length){var tFilterString=`tr[ka-filter-${tKey}-${tSuffix}*='${tVal}']`;fadeIn($(tFilterString),`ka-hidden-${tKey}`),fadeOut(tAllRows.not(tFilterString),`ka-hidden-${tKey}`)}else fadeIn(tAllRows,`ka-hidden-${tKey}`);hideEmptySections()}),350))}function buildFilterSelectMenu(tKey,tOpts,tSuffix){for(var tMenu=$(`#ka-${tKey}-dropdown-${tSuffix}`),i=0;i<tOpts.length;i++)buildMenuCheckRow(tKey,tOpts[i],tMenu);tMenu.selectpicker("refresh"),wireMenu(tMenu,tKey,tOpts,tSuffix)}function buildMenuCheckRow(tKey,tVal,baseElem){tVal="date"==tKey?dateReFormatter(tVal):tVal;var tOption=$(`<option selected="selected" ka-filter-key="${tKey}" ka-filter-val="${charOnly(tVal)}" value="${tVal}">${tVal}</option>`);return baseElem.append(tOption),tOption}function wireMenu(tMenu,tKey,tOpts,tSuffix){tMenu.on("changed.bs.select",(function(e,clickedIndex,isSelected,oldValue){if($(".accordion-body.show").collapse("toggle"),null==clickedIndex&&null==isSelected){isSelected=0!=tMenu.val().length;var tRow=$(`tr[ka-filter-${tKey}-${tSuffix}]`),tRow2=$(`tr[ka-filter-${tKey}2-${tSuffix}]`)}else var tVal=charOnly(tOpts[clickedIndex]),tRow=$(`tr[ka-filter-${tKey}-${tSuffix}='${tVal}']`),tRow2=$(`tr[ka-filter-${tKey}2-${tSuffix}='${tVal}']`);var tHidingClass=`ka-hidden-${tKey}`;isSelected?(fadeIn(tRow,tHidingClass),fadeIn(tRow2,tHidingClass)):(fadeOut(tRow,tHidingClass),fadeOut(tRow2,tHidingClass))}))}function getRandomSuffix(){return Math.random().toString(36).substring(2,7)}function charOnly(tVal){return tVal.replace(/[^\w\s!?]/g,"").replace(/\s/g,"")}function capitalize(mystr){return mystr.charAt(0).toUpperCase()+mystr.slice(1)}function compareDateStrings(a,b){var lhs,rhs;return Date.parse(a)<Date.parse(b)?1:-1}function dateReFormatter(dateStr){var date=new Date(dateStr);return months[date.getMonth()]+" "+date.getDate()+", "+date.getFullYear()}function sortSportEvents(tResults){return tResults.sort((function(lhs,rhs){var l=new Date(lhs.start),r=new Date(rhs.start);if(l==r){var mo=["Bronze","Silver","Gold"];return mo.indexOf(lhs.medal)-mo.indexOf(rhs.medal)}return l<r?1:-1}))}function schoolCleaner(tSchool){return tSchool=tSchool.replace(/--/g," ")}function sortSchoolResults(tResults){var itemsToSort;return Object.keys(tResults).map((function(key){return[key,tResults[key]]})).sort((function(lhs,rhs){var rt=rhs[1].total,lt=lhs[1].total;return rt==lt&&(rt=rhs[1].gold,lt=lhs[1].gold),rt==lt&&(rt=rhs[1].silver,lt=lhs[1].silver),rt==lt&&(rt=rhs[1].bronze,lt=lhs[1].bronze),rt-lt}))}function sortSchoolSubResults(tResults){return tResults.sort((function(lhs,rhs){return lhs.sport_name==rhs.sport_name?lhs.full_name<rhs.full_name?-1:1:lhs.sport_name>rhs.sport_name?1:-1}))}function fadeIn(tElem,tClass){Promise.all([tElem.fadeIn("fast",(function(){$(this).removeClass(tClass)})).promise()]).then((function(){hideEmptySections()}))}function fadeOut(tElem,tClass){Promise.all([tElem.fadeOut("fast",(function(){$(this).addClass(tClass)})).promise()]).then((function(){hideEmptySections()}))}function hideEmptySections(){for(var promises=[],allSections=$(".ka-event-section"),i=0;i<allSections.length;i++){var sct=$(allSections[i]);promises=sct.find("tr.ka-event-row").length==sct.find('tr.ka-event-row[class*="ka-hidden-"]').length?promises.concat(sct.fadeOut("fast",(function(){$(this).addClass("ka-hidden-section")})).promise()):promises.concat(sct.fadeIn("fast",(function(){$(this).removeClass("ka-hidden-section")})).promise())}Promise.all(promises).then((function(){hideEmptyDateSections()}))}function hideEmptyDateSections(){for(var allDateSections=$(".ka-date-section"),i=0;i<allDateSections.length;i++){var sct=$(allDateSections[i]);sct.find("tr.ka-event-section").length==sct.find('tr.ka-event-section[class*="ka-hidden-"]').length?sct.fadeOut("fast",(function(){$(this).addClass("ka-hidden-section")})):sct.fadeIn("fast",(function(){$(this).removeClass("ka-hidden-section")}))}}