window.addEvent('domready', function(){ var helps = new Help("#division-totals", { 'where': 'bottom', 'align': 'left' }); var helps = new Help("#tshirt-totals", { 'where': 'bottom' }); // when you reload the page, sometimes this stays checked. if ($('show-details') != undefined){ $('show-details').checked = false; } // if ($('has-notes') != undefined){ $('has-notes').checked = false; } // if ($('has-additional-notes') != undefined){ $('has-additional-notes').checked = false; } // gets some measurements var filters_top = $('filters').getCoordinates().top-5; var filters_height = $('filters').getComputedSize().totalHeight; var filters_width = $('filters').getComputedSize().width; // the filters holder is a shim for when we change filters to fixed. $('filters-holder').setStyle('height', filters_height); $('filters').setStyle('width', filters_width); // apply it's width so when it's fixed, it's the same window.addEvent('scroll', function(){ // if the filter is off the screen if (filters_top < window.getScroll().y){ $('filters').setStyles({ 'position': 'fixed', 'top': 5, 'box-shadow': '1px 3px 12px #888', '-moz-box-shadow': '1px 3px 12px #888', '-webkit-box-shadow': '1px 3px 12px #888' }); } else { $('filters').setStyles({ 'position': '', 'top': '', 'box-shadow': '0px 0px 0px #888', '-moz-box-shadow': '0px 0px 0px #888', '-webkit-box-shadow': '0px 0px 0px #888' }); } }); // toggle 'mini' mode var refresh_totals = function(){ var global_filtered = 0; var global_total = 0; var total_male = 0; var total_female = 0; var filtered_male = 0; var filtered_female = 0; var division_totals = {}; var divisions = ['recreational', 'intermediate', 'advanced', 'open']; // used to fill in totals // init divition_totals divisions.each(function(division){ division_totals[division+"_total"] = 0; division_totals[division+"_filtered"] = 0; }); // if ($('division-totals').getElement('.help-text') != null){ // // $('division-totals').getElement('.help-text').empty(); // // put a table in the help-text popup // new Element('table').inject($('division-totals').getElement('.help-text')); // } // the secions are each of the categorys (rec men, rec women, advanced men, etc) // + the no divisions if it's there. var sections = $$('.category'); if ($('no-division') != null){ sections.include($('no-division')); } // for each fo these, count up the totals sections.each(function(el){ var totaldiv = el.getElement('.total'); var all = el.getElements(".registrant-entry"); var total = all.length; var filtered = 0; var total_display = ""; // for each entry in this section, get how many are visble (filtered) all.each(function(entry){ if (entry.getStyle('display') != "none" && entry.getStyle('visible') != 'hidden'){ filtered++; } }); // add totals to global count global_total += total; global_filtered += filtered; // add total text to the div if (filtered == total){ total_display = "("+ total + ")"; } else { total_display = "(" +filtered + "/" + total + ")"; } totaldiv.set('html', total_display); // inject these values into $('division-totals') help-text popup if (el.getElement('.title-text')){ if ($('division-totals').getElement('.help-text') != null){ var selector = el.getElement('.title-text').get('text').toLowerCase(); // eg. Recreational Men if (selector.contains('women')){ total_female += total; filtered_female += filtered; } else if (selector.contains('men')){ total_male += total; filtered_male += filtered; } // add up division totals // eg. recreational_men > recreational and recreational_women > recreational divisions.each(function(d){ if (selector.contains(d)) { division_totals[d+"_total"] += total; division_totals[d+"_filtered"] += filtered; } }); selector = selector.replace(/\s/, '_'); selector += "_total_table"; // eg. now it's recreational_men_total_table var display = total_display.replace("(", ""); display = display.replace(")", ""); $(selector).set('html', display); // inject it into table } } // hide the no-division if there aren't any if (el == $('no-division') && total == 0){ $('no-division').setStyle('display', 'none'); $('no_division_total_table_holder').setStyle('display', 'none'); } }); // hide the no_division_total_table_holder if we're on the listing page with no no-division if ($('no-division') == undefined ){ $('no_division_total_table_holder').setStyle('display', 'none'); } // add female to total table if (filtered_female == total_female){ $('female_total_table').set('html', ""+ total_female + ""); } else { $('female_total_table').set('html', ""+ filtered_female + "/" + total_female + ""); } // add male to total table if (filtered_male == total_male){ $('male_total_table').set('html', ""+ total_male + ""); } else { $('male_total_table').set('html', ""+ filtered_male + "/" + total_male + ""); } // console.log(division_totals); // fill in divition totals divisions.each(function(division){ if (division_totals[division+"_filtered"] == division_totals[division+"_total"]){ $$('#'+division+'_totals_total_table').set('html', division_totals[division+"_total"]); } else { $$('#'+division+'_totals_total_table').set('html', ""+ division_totals[division+"_filtered"] + "/" + division_totals[division+"_total"]); } }); if (global_filtered == global_total){ $('global-total').set('html', ""+ global_total + ""); } else { $('global-total').set('html', "(" + global_filtered + "/" + global_total + ")"); } }; refresh_totals(); // add filter var registrant_filter = new Filterable('.registrant-entry', { 'onFilter': function(){ refresh_totals(); }, search_hidden: true }); registrant_filter.attachTextFilter(['.name', '.email a', '.notes', '.additional-notes'], $('registrant-text-filter')); // if there was text/checkboxes left over when the page reloaded, filter it registrant_filter.filter(); var sortables = []; var sections = ['recreational_male', 'recreational_female', 'intermediate_male', 'intermediate_female', 'advanced_male', 'advanced_female', 'open_male', 'open_female', 'no-division']; // var sections = ['intermediate_female']; sections.each(function(section){ var sortable = new Sortable('#'+ section + ' .registrant-entry'); // name sortable.attach_sort('sort-name', function(el){ var name_element = el.getElement('.name'); var name = ""; if (name_element != null){ name = name_element.get('text').toLowerCase(); } return ("" + name); }); // name sortable.attach_sort('sort-last', function(el){ var name_element = el.getElement('.name'); var name = ""; if (name_element != null){ name = name_element.get('text').toLowerCase(); var names = name.split(' '); name = names[names.length-1]; } return ("" + name); }); // score sortable.attach_sort('sort-score', function(el){ var score_element = el.getElement('.score .num'); var name_element = el.getElement('.name'); var score, name = ""; if (score_element != null){ score = (100000 - score_element.get('text').toInt()).pad(6); } if (name_element != null){ name = name_element.get('text').toLowerCase(); } return ("" + score); }, {'order': 'reverse'}); sortables.push(sortable); // initialize sort_current sortable.sort_by('sort-sends'); }); // sort by toggle var toggles = $$('#sort-toggle .toggle'); var click_toggle = function(button){ // if this button was clicked already, reverse it if (button.hasClass('toggle-down')){ button.toggleClass('reverse'); } else { // we clicke another button, remove all reverse toggles.each(function(toggle){ toggle.removeClass('reverse'); }); } // sort all sortables based on reverse status sortables.each(function(sortable){ sortable.sort_by(button.getProperty('id'), {'reverse': button.hasClass('reverse')}) ; }); }; // first assign click toggle that relys on the status of toggle-down toggles.each(function(toggle){ toggle.addEvent('click', click_toggle.pass(toggle)); }); toggles.addEvent('click', function(e){ toggles.each(function(other_toggle){ other_toggle.removeClass('toggle-down'); }); this.addClass('toggle-down'); }); toggles.addEvent('mouseover', function(e){ this.addClass('toggle-hover'); }); toggles.addEvent('mouseout', function(e){ this.removeClass('toggle-hover'); }); }); Number.implement({ /** returns string with leading 0s */ pad: function(length){ var str = "" + this; while(str.length < length){ str = '0' + str; } return str; } }) ;