
ISCTicketTypes = Class.create( {
tlog: function(){},
initialize: function( data ) {
this.tt_modules = {};
this.search_constraints = data.search_constraints;
this.search_constraints.ticket_types = this;
this.bound_uncheck_all = this.uncheck_all.bind(this);
this.bound_check_all   = this.check_all.bind(this);
var tts = this.search_constraints.isc.edp.event.ticket_types;
var num_enabled_tt = 0;
for (var i=0; i<tts.length; i++) {
var tt = tts[i];
var ttm = new Module('isc-tickettype_'+(i+1));
this.tt_modules[tt.ext_ticket_type] = {
ttm : ttm,
tt  : tt,
is_hidden : false
};
if ( tt.is_enabled && tt.variable_qualifier_value == 0 ) {
if ( tt.password || tt.parent ) {
ttm.$('isc-tt-cb').checked = false;
}
else {
ttm.$('isc-tt-cb').checked = true;
}
}
else {
this.hide_ticket_type( tt.ext_ticket_type );
continue;
}
if ( !tt.parent )
num_enabled_tt++;
if (tt.ticket_info_popup) {
tt.ticket_info_popup.addLinks( [ {
group: 'edp',
link_id: ttm.$("isc-tt-info-link").down('img'),
toggle: true,
anchor_align: {
x: 1,
y: -1
},
popup_align: {
x: -1,
y: -1
},
offset: { x:5, y:0 },
onShow: function( tt ) {
tt.ticket_info_popup.set_mode( 'isc' );
}.bind( window, tt )
} ] );
}
else
ttm.$("isc-tt-info-link").hide();
Event.observe( ttm.$('isc-tt-cb'), 'click', this.handle_checkbox_change.bind(this, tt.ext_ticket_type) );
if ( tt.parent )
this.hide_ticket_type( tt.ext_ticket_type );
}
if (1 == num_enabled_tt) {
$('isc-tickettype-clearselectcontainer').hide();
}
this.addClearallEvent();
this.addSelectAllEvent();
this.register_on_checkbox_change_handler( this.update_select_clear.bind(this) );
this.update_select_clear();
},
addClearallEvent: function() {
Event.observe( $('isc-tickettype-clearall'), 'click', this.bound_uncheck_all );
},
addSelectAllEvent: function() {
Event.observe( $('isc-tickettype-selectall'), 'click', this.bound_check_all );
},
deleteClearallEvent: function() {
Event.stopObserving( $('isc-tickettype-clearall'), 'click', this.bound_uncheck_all);
},
deleteSelectallEvent: function() {
Event.stopObserving( $('isc-tickettype-selectall'), 'click', this.bound_check_all);
},
adjust_height: function() {
var target_height = Element.getHeight( $('isc_map_cart_area') );
var sc = $('search_constraints_area');
var elements = sc.childElements();
var tt_container = $('isc-tickettypes-selection-container');
var current_height = 0;
for ( var i = 0 ; i < elements.length ; i ++ ) {
var e = elements[i];
if ( e.tagName == 'DIV' && e.style.display != 'none' )
current_height += Element.getHeight( e );
}
var height_needed = target_height
- ( current_height - Element.getHeight( tt_container ) );
tt_container.style.height = height_needed + "px";
this.adjust_height = function(){};
},
hide_ticket_type: function( ett ) {
this.uncheck_ticket_type( ett );
this.tt_modules[ett].ttm.hide();
this.tt_modules[ett].is_hidden = true;
},
show_ticket_type: function( ett ) {
this.tt_modules[ett].ttm.show();
delete this.tt_modules[ett].is_hidden;
},
set_ticket_type_text: function( ett, description, info ) {
var ttm = this.tt_modules[ett].ttm;
ttm.$('description').update( description );
if ( typeof(info) != 'undefined' ) {
var tt = this.tt_modules[ett].tt;
var module = tt.ticket_info_popup.module;
module.$('isc_title').update( description );
if ( info.text )
module.$('info_text').update( info.text.replace("\n", '<br/>') );
else
module.$('info_text').hide();
if ( info.link_text ) {
module.$('info_link').update( info.link_text );
module.$('info_link').setAttribute( 'href', info.link );
}
else
module.$('info_link').hide();
if ( !info.text || !info.link_text )
module.$('info_break').hide();
}
else {
ttm.$("isc-tt-info-link").hide();
}
},
register_on_checkbox_change_handler: function( handler ) {
Event.observe( $('isc-tickettypes-selection-container'), 'isc:ttchange', handler );
},
handle_checkbox_change: function(ett, ev) {
var el = Event.element(ev);
var tmp = el.nodeName.toLowerCase() == 'tr' ? el : el.up('tr');
if (tmp) {
tmp.toggleClassName('checked');
}
var tt = this.tt_modules[ett].tt;
if ( el.checked )
this.check_children( tt );
else
this.uncheck_children( tt );
el.fire("isc:ttchange");
this.search_constraints.isc.seat_map.on_interaction();
},
update_select_clear: function() {
if (this.get_checked_ticket_types().size() == 0) {
this.disable_selectclear_all('isc-tickettype-clearall');
this.deleteClearallEvent();
this.enable_selectclear_all('isc-tickettype-selectall');
this.addSelectAllEvent();
} else if (this.get_checkable_ticket_types().size() == this.get_checked_ticket_types().size()) {
this.enable_selectclear_all('isc-tickettype-clearall');
this.addClearallEvent();
this.disable_selectclear_all('isc-tickettype-selectall');
this.deleteSelectallEvent();
} else {
this.enable_selectclear_all('isc-tickettype-selectall');
this.addSelectAllEvent();
this.enable_selectclear_all('isc-tickettype-clearall');
this.addClearallEvent();
}
},
disable_selectclear_all: function(el) {
el = $(el);
var ittsa = el.down();
if (ittsa) {
el.update(ittsa.innerHTML);
}
},
enable_selectclear_all: function(el) {
el = $(el);
var ittsa = el.down();
if (!ittsa) {
var tmp = new Element('a',{'href':'javascript:void(0)'}).update( el.innerHTML );
el.update().appendChild(tmp);
}
},
unlock_ticket_type: function(ett) {
var ttm = this.tt_modules[ett];
if ( ttm ) {
var tmp = ttm.ttm;
tmp.$('isc-tt-cb').disabled = false;
tmp.$('isc-tickettype').removeClassName('disabled');
this.check_ticket_type(ett);
return true;
}
return false;
},
uncheck_ticket_type: function(ett) {
var tt = this.tt_modules[ett].tt;
if (!this.is_checked(ett) && !tt.children )
return true;
var tmp = this.tt_modules[ett].ttm;
if (tmp) {
tmp.$('isc-tickettype').removeClassName('checked');
tmp.$('isc-tt-cb').checked = false;
tmp.$('isc-tt-cb').fire("isc:ttchange");
this.uncheck_children( tt );
return true;
}
return false;
},
uncheck_all: function() {
this.search_constraints.isc.seat_map.on_interaction();
this.search_constraints.isc.edp.event.get_enabled_ticket_types().each( function(tt) {
this.uncheck_ticket_type(tt.ext_ticket_type);
}, this );
},
check_children: function( tt ) {
if ( tt.children ) {
for ( var i = 0 ; i < tt.children.length ; i ++ ) {
var child_tt = tt.children[i];
if ( !child_tt.is_locked )
this.check_ticket_type( child_tt.ext_ticket_type );
}
}
},
uncheck_children: function( tt ) {
if ( tt.children ) {
for ( var i = 0 ; i < tt.children.length ; i ++ ) {
var child_tt = tt.children[i];
if ( !child_tt.is_locked )
this.uncheck_ticket_type( child_tt.ext_ticket_type );
}
}
},
check_ticket_type: function(ett) {
var ttm = this.tt_modules[ett];
if (!ttm) return false;
var tt = this.tt_modules[ett].tt;
if ( this.is_checked(ett) && !tt.children )
return true;
var tmp = ttm.ttm;
if (tmp && !tmp.$('isc-tickettype').hasClassName('disabled') &&
(tmp.$('isc-tickettype').getStyle('display') != 'none' || tt.parent) ) {
tmp.$('isc-tickettype').addClassName('checked');
tmp.$('isc-tt-cb').checked = true;
tmp.$('isc-tt-cb').fire("isc:ttchange");
this.check_children( tt );
return true;
}
return false;
},
check_unlocked_ticket_types: function() {
this.check_all();
},
check_all: function() {
this.search_constraints.isc.seat_map.on_interaction();
this.search_constraints.isc.edp.event.get_enabled_ticket_types().each( function(tt) {
this.check_ticket_type(tt.ext_ticket_type);
}, this );
},
get_checked_ticket_types: function() {
var tts = this.search_constraints.isc.edp.event.get_enabled_ticket_types();
return tts.select(
function(tt) {
return this[tt.ext_ticket_type].ttm.$('isc-tt-cb').checked;
}.bind(this.tt_modules)
);
},
get_checkable_ticket_types: function() {
var tts = this.search_constraints.isc.edp.event.get_enabled_ticket_types();
return tts.reject(
function(tt) {
return this[tt.ext_ticket_type].ttm.$('isc-tt-cb').disabled || this[tt.ext_ticket_type].is_hidden;
}.bind(this.tt_modules)
);
},
is_checked: function(ett) {
var tmp = this.tt_modules[ett].ttm;
if (tmp) {
return tmp.$('isc-tt-cb').checked;
} else {
return false;
}
}
});

