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;
}
}) ;