ListVenueImage = Class.create( Module, {
initialize: function( $super, data ) {
$super( 'sl_venue_display' );
if ( data.image )
$('sl_venue_image').src = data.image;
else
$('sl_venue_display').style.display = "none";
}
});
CartSummary = Class.create( Module, {
initialize: function ( $super ) {
$super( 'cart_summary_source' );
}
});
SideBox = Class.create( Module, {
initialize: function ( $super ) {
$super( 'sl_side_box_source' );
}
});
CartEvent = Class.create( Module, {
initialize: function ( $super, event ) {
$super( { dom: 'sl_cart_event' } );
this.$('sl_cart_event_date').innerHTML = event.event_date;
this.$('sl_cart_event_name').innerHTML = event.name;
}
});
EventChoice = Class.create( Module, {
initialize: function ( $super, event_selection, event ) {
$super( { dom: 'sl_event' } );
this.event_selection = event_selection;
this.$('sl_event_name').innerHTML = event.name;
if ( !event.canceled ) {
this.$('sl_event_date').className = "";
this.$('sl_event_date').innerHTML = event.event_date;
}
if ( event.price && event.is_eligible) {
var price_el = this.$('sl_event_price');
while ( price_el.hasChildNodes() )
Element.remove( price_el.firstChild );
if (event.is_fee_rollup) {
price_el.innerHTML = '<div id="ec' + event.is_fee_rollup + '"></div>';
} else {
price_el.innerHTML = event.price;
}
}
else
this.$('sl_more_info_link').href = "/event/" + event.event_id;
}
});
EventSelection = Class.create( Module, {
initialize: function ( $super, data ) {
$super( 'event_selection_source' );
this.event_limit = data.event_limit;
EventSelection.limit_alert[1] = this.event_limit + 1;
EventSelection.limit_alert[3] = this.event_limit;
EventSelection.limit_alert = EventSelection.limit_alert.join( ' ' );
this.events = {};
this.cart = {};
this.shoppinglist_id = data.shoppinglist_id;
this.selected = {};
$('sl_submit_button').observe( 'click', this.submit_request.bind( this ) );
$('sl_reset_form').observe( 'click', this.reset_form.bind( this ) );
$('sl_cancel_order').observe( 'click', this.cancel_order.bind( this ) );
if ( data.webinfo ) {
$('sl_webinfo_text').innerHTML = data.webinfo;
$('sl_webinfo_display').style.display = "";
}
if ( data.ada_info ) {
var adainfo = new AdaInfo( {} );
$('ada_info').className = "";
$('ada_info_back_button').parentNode.className = "pad10";
$('ada_info_back_button').parentNode.style.textAlign = "center";
adainfo.attach( 'sl_ada_info_content' );
$('ada_info').show();
$('sl_ada_button').observe( 'click', this.show_ada_info.bind( this ) );
$('ada_info_back_button').observe( 'click', this.hide_ada_info.bind( this ) );
}
else {
$('sl_ada_button').observe( 'click', this.enable_ada.bind( this ) );
$('sl_venue_telephone_number').update( data.venue_phone );
this.update_ada();
}
this.sort_by = "date";
this.sort_reverse = false;
var thisobj = this;
$H(EventSelection.sort_types).keys().each( function ( sort_type ) {
var id = 'sl_' + sort_type + '_sort';
$(id).observe( 'click', thisobj.sort_events.bind( thisobj, sort_type ) );
} );
},
show_ada_info: function() {
$('tabContent').style.display = "none";
$('sl_accessible_info').style.display = "";
},
hide_ada_info: function() {
$('sl_accessible_info').style.display = "none";
$('tabContent').style.display = "";
},
sort_events: function ( sort_type, event ) {
if ( this.sort_by != sort_type )
this.sort_reverse = false;
else
this.sort_reverse = !this.sort_reverse;
this.sort_by = sort_type;
this.update_event_list();
},
update_ada: function() {
var ada = new CookieTree( '_E', 'sl', this.shoppinglist_id ).get( 'a' ) || 0;
if ( ada )
this.enable_ada();
else
this.disable_ada();
},
cancel_order: function() {
this.empty_cart();
this.disable_ada();
this.reset_form();
},
empty_cart: function() {
var thisobj = this;
$H(this.cart).keys().each( function ( event_id ) {
thisobj.remove_cart_event( event_id );
});
},
enable_ada: function() {
$('sl_ada_button').style.display = "none";
$('sl_accessible_info').style.display = "";
this.is_ada = true;
new CookieTree( '_E', 'sl', this.shoppinglist_id ).set( 'a', 1 );
},
disable_ada: function() {
$('sl_ada_button').style.display = "";
$('sl_accessible_info').style.display = "none";
this.is_ada = false;
new CookieTree( '_E', 'sl', this.shoppinglist_id ).set( 'a', 0 );
},
reset_form: function() {
var thisobj = this;
$H(this.events).values().each( function( event ) {
if ( event.display.$('sl_event_check').checked ) {
event.display.$('sl_event_check').checked = "";
thisobj.toggle_selection( event );
}
} );
},
reset_order: function() {
reset_form();
empty_cart();
},
_sort_compare: function ( a, b ) {
var key = EventSelection.sort_types[this.sort_by];
if ( a.data[key] > b.data[key] )
return this.sort_reverse ? -1 : 1;
if ( a.data[key] < b.data[key] )
return this.sort_reverse ? 1 : -1;
if ( key == 'min_price' ) {
if ( a.data.max_price > b.data.max_price )
return this.sort_reverse ? -1 : 1;
if ( a.data.max_price < b.data.max_price )
return this.sort_reverse ? 1 : -1;
}
return 0;
},
update_event_list: function() {
var events = $H(this.events).values();
events.each( function ( event ) {
event.display.detach();
} );
var thisobj = this;
$H(EventSelection.sort_types).keys().each( function ( sort_type ) {
var id = 'sl_' + sort_type + '_sort_image';
if( thisobj.sort_by == sort_type ) {
$(id).style.display = "";
$(id).src = thisobj.sort_reverse ? EventSelection.sort_up : EventSelection.sort_down;
}
else {
$(id).style.display = "none";
}
} );
events.sort( this._sort_compare.bind( this ) );
var is_shaded = false;
events.each( function ( event ) {
var classes = "";;
if ( is_shaded )
classes = "odd ";
is_shaded = !is_shaded;
if( !event.data.is_eligible )
classes += "not-available";
event.display.$('sl_event').className = classes;
event.display.attach( $( 'sl_event_list' ) ) ;
} );
},
set_cart_total: function ( total ) {
$('sl_cart_total').innerHTML = total;
this.cart_total = total;
},
populate_cart: function () {
var cart = $H( new CookieTree( '_E', 'sl', this.shoppinglist_id ).get( 'c' ) || {} ).keys();
var thisobj = this;
cart.each( function( event_id ) {
thisobj.selected[event_id] = true;
var cart_event = new CartEvent( thisobj.events[event_id].data );
cart_event.attach( $('sl_cart_event_list') );
cart_event.$('sl_cart_event_remove').observe( 'click', thisobj.remove_cart_event.bind( thisobj, event_id ) );
thisobj.cart[event_id] = cart_event;
var ttt = thisobj.events[event_id].display.$('sl_event_price');
if (ttt.childElements().size() > 0) {
ttt.childElements()[0].toggle();
ttt.insert(EventSelection.currently_saved);
} else {
ttt.update(EventSelection.currently_saved);
}
thisobj.events[event_id].display.$('sl_event_check').style.display = "none";
});
if ( cart.length )
$('sl_cart').style.display = "";
else
$('sl_cart').style.display = "none";
var num_events = $H(this.events).keys().length;
$('sl_cart_max').innerHTML = num_events > this.event_limit ? this.event_limit : num_events;
this.set_cart_total( cart.length );
this.update_event_list();
},
update_cart_total: function ( inc ) {
this.cart_total += inc;
$('sl_cart_total').innerHTML = this.cart_total;
},
remove_cart_event: function ( event_id ) {
new CookieTree( '_E', 'sl', this.shoppinglist_id, 'c' ).remove( event_id );
delete this.selected[event_id];
this.update_cart_total ( -1 );
var cart_event = this.cart[event_id];
cart_event.detach();
delete this.cart[event_id];
var event = this.events[event_id];
var tte = event.display.$('sl_event_price');
if (tte.childElements().size() > 0) {
var ttt = tte.childElements()[0].remove();
ttt.show();
tte.innerHTML = "";
tte.insert(ttt);
} else {
tte.innerHTML = event.data.price;
}
this.events[event_id].display.$('sl_event_check').style.display = "";
if ( this.cart_total )
$('sl_cart').style.display = "";
else
$('sl_cart').style.display = "none";
},
add_event: function ( event_data ) {
var choice = new EventChoice( this, event_data );
choice.attach( $('sl_event_list') );
var event = { data: event_data, display: choice };
this.events[event.data.event_id] = event;
choice.$('sl_event_check').observe( 'click', this.toggle_selection.bind( this, event ) );
},
toggle_selection: function( event ) {
if( event.display.$('sl_event_check').checked ) {
if ( this.cart_total == this.event_limit ) {
window.alert( EventSelection.limit_alert );
event.display.$('sl_event_check').checked = "";
}
else {
this.update_cart_total( 1 );
new CookieTree( '_E', 'sl', this.shoppinglist_id, 'c' ).set( event.data.event_id, 1 );
this.selected[event.data.event_id] = true;
}
}
else {
this.update_cart_total( -1 );
new CookieTree( '_E', 'sl', this.shoppinglist_id, 'c' ).remove( event.data.event_id );
delete this.selected[event.data.event_id];
}
},
submit_request: function() {
if ( !this.cart_total ) {
window.alert( EventSelection.select_one );
return;
}
var form = new Element( 'form', { name: 'ShopListAdd', method: 'POST', action: "/shoppinglist/selection/" + this.shoppinglist_id } );
if ( this.is_ada )
form.appendChild( new Element( 'input', { type: "hidden", name: 'access_page_displayed', value: 1 } ) );
$H(this.selected).keys().each( function( event_id ) {
form.appendChild( new Element( 'input', { type: "hidden", name: 'list_item', value: event_id } ) );
});
document.body.appendChild( form );
form.submit();
}
});
EventSelection.sort_types = { date: 'sortable_event_date', event: 'name', price: 'min_price' };
Discrete.setup();

