
function TMEvent ( event_info ) {
for ( var key in event_info )
this[key] = event_info[key];
this.ticket_type_map = this.ticket_type_map || {};
this.sorted_ticket_types = this.sorted_ticket_types || [];
this.ticket_types = [];
this.enabled_ticket_types = [];
this.blu_ticket_types = [];
if ( this.sorted_ticket_types.length ) {
this._setup_ticket_types();
this._did_enable_ticket_types();
this._setup_ticket_type_info_popups();
this._setup_child_ticket_types();
}
}
TMEvent.prototype._setup_ticket_types = function() {
var i;
for ( i = 0 ; i < this.sorted_ticket_types.length ; i ++ ) {
var ext_ticket_type = this.sorted_ticket_types[i];
var tt = this.ticket_type_map[ext_ticket_type];
tt.index = i;
this.ticket_types.push( tt );
var price_level;
for ( price_level in tt.price_breakdown ) {
var display_charges = tt.price_breakdown[price_level].display_charges;
[ 'price', 'sum_fees', 'sum_fees_and_taxes', 'sum_taxes', 'total_price' ].each(
function( key ) {
display_charges[key] = parseFloat( display_charges[key] );
}
);
var price_secname = tt.price_breakdown[price_level].price_secname;
this.secnames[price_secname].price_level = parseInt( price_level );
}
if ( tt.real_price_breakdown ) {
for ( price_level in tt.price_breakdown ) {
var display_charges = tt.real_price_breakdown[price_level].display_charges;
[ 'price', 'sum_fees', 'sum_fees_and_taxes', 'sum_taxes', 'total_price' ].each(
function( key ) {
display_charges[key] = parseFloat( display_charges[key] );
}
);
}
}
else
tt.real_price_breakdown = tt.price_breakdown;
if ( tt.is_blu )
this.blu_ticket_types.push( tt );
if ( tt.ticket_type_info ) {
delete tt.ticket_type_info;
this._set_ticket_type_info( tt, 'isc', 'classic' );
}
if ( tt.password && !tt.password.suppress_password_info )
this._set_ticket_type_info( tt, 'isc', 'classic' );
tt.orig_description = tt.description;
this.set_limit_description( tt );
this.ticket_type_map[tt.ext_ticket_type] = tt;
}
for ( var ext_ticket_type in this.price_level_aliases ) {
if ( this.ticket_type_map[ext_ticket_type] ) {
var tt = this.ticket_type_map[ext_ticket_type];
for ( var alias_price_level in this.price_level_aliases[ext_ticket_type] ) {
var real_price_level = this.price_level_aliases[ext_ticket_type][alias_price_level];
if ( tt.price_breakdown[real_price_level] ) {
tt.price_breakdown[alias_price_level] = Object.clone( tt.price_breakdown[real_price_level] );
tt.price_breakdown[alias_price_level].price_level = alias_price_level;
tt.real_price_breakdown[alias_price_level] = Object.clone( tt.real_price_breakdown[real_price_level] );
tt.real_price_breakdown[alias_price_level].price_level = alias_price_level;
}
}
}
}
};
TMEvent.prototype._setup_child_ticket_types = function() {
for ( var i = 0 ; i < this.ticket_types.length ; i ++ ) {
var tt = this.ticket_types[i];
if ( tt.parent_ext_ticket_type ) {
tt.parent = this.ticket_type_map[tt.parent_ext_ticket_type];
if ( !tt.parent.children )
tt.parent.children = [];
tt.parent.children.push( tt );
if ( tt.parent.password && tt.parent.password.scheme_type == 'password_server::ticket_type::cascade' )
this._set_ticket_type_info( tt, 'isc' );
}
}
};
TMEvent.prototype.set_limit_description = function( tt ) {
var quantities = tt.repname_quantity_limits;
var ticket_limit_info = [];
if ( quantities.max && quantities.max > 0 )
ticket_limit_info.push(
this.tu.EVENT_QUANTITY_LIMIT_MAX + ' ' + quantities.max
);
if ( quantities.min && quantities.min > 0 )
ticket_limit_info.push(
this.tu.EVENT_QUANTITY_LIMIT_MIN + ' ' + quantities.min
);
if ( quantities.inc && quantities.inc > 1 )
ticket_limit_info.push(
this.tu.EVENT_QUANTITY_LIMIT_MULTIPLE + ' ' + quantities.inc
);
if ( quantities.exact && quantities.exact > 0 )
ticket_limit_info.push(
this.tu.EVENT_QUANTITY_LIMIT_EXACT + ' ' + quantities.exact
);
if ( ticket_limit_info.length ) {
this._set_ticket_type_info( tt, 'isc' );
tt.limit_description = [
tt.description,
'(' + ticket_limit_info.join(', ') + ')'
].join( ' ' );
}
else
tt.limit_description = tt.description;
if ( tt.ticket_info_popup )
tt.ticket_info_popup.module.$('isc_title').update( tt.limit_description );
};
TMEvent.prototype._did_enable_ticket_types = function() {
var i;
for ( i = 0 ; i < this.ticket_types.length ; i ++ ) {
var tt = this.ticket_types[i];
tt.is_enabled = false;
if ( Discrete.id ) {
for ( var c = 0 ; c < tt.discrete.codes.length ; c ++ ) {
if ( !tt.is_enabled && tt.discrete.codes[c].code == Discrete.id ) {
tt.is_enabled = true;
this.enabled_ticket_types.push( tt );
}
}
}
else if ( tt.discrete.public == 'Y' ) {
tt.is_enabled = true;
this.enabled_ticket_types.push( tt );
}
}
if ( Discrete.id && !this.get_enabled_ticket_types().length ) {
Discrete.clear();
this._did_enable_ticket_types();
}
};
TMEvent.prototype._set_ticket_type_info = function( tt ) {
if ( !tt.ticket_type_info )
tt.ticket_type_info = {};
for ( var i = 1 ; i < arguments.length ; i ++ ) {
tt.ticket_type_info[arguments[i]] = true;
}
};
TMEvent.prototype._setup_ticket_type_info_popups = function() {
for ( var i = 0 ; i < this.ticket_types.length ; i ++ ) {
var tt = this.ticket_types[i];
var id = this.event_id + '_' + (i+1);
var e = $('ticket_type_info_' + id);
if ( tt.is_enabled && e )
tt.ticket_info_popup = new TicketInfoPopup( e, tt );
}
};
TMEvent.prototype.get_enabled_ticket_types = function() {
return this.enabled_ticket_types;
};
TMEvent.prototype.get_secname_choices = function ( group, mask ) {
var choices = [];
for ( var secname in this.secnames ) {
var data = this.secnames[secname];
if ( data.masks && mask && data.group == group && ( data.masks[group] & mask ) )
choices.push( secname );
}
return choices;
};
TicketInfoPopup = Class.create( Popup, {
initialize: function ( $super, id, tt ) {
this.module = new Module( id );
this.module.$('isc_title').update( tt.limit_description );
$super( this.module.doms.first(), {
close_id: this.module.id( 'close' ),
zIndex:   105
} );
if ( tt.ticket_type_info && tt.ticket_type_info.classic ) {
this.on_classic = true;
this.set_mode( 'classic' );
}
},
set_mode: function( mode ) {
if ( mode == 'classic' ) {
this.module.$('isc_title').hide();
this.module.$('classic_title').show();
if ( this.module.$('isc') ) {
this.module.$('isc').hide();
this.module.$('classic').show();
}
}
else if ( mode == 'isc' ) {
this.module.$('isc_title').show();
this.module.$('classic_title').hide();
if ( this.module.$('isc') ) {
this.module.$('isc').show();
this.module.$('classic').hide();
}
}
}
} );

