
EventInfo = Class.create( Module, {
tlog: TMDebug.gen_tlog( 'event-info' ),
initialize: function( $super, data ) {
$super( data.module_id );
this.event_id = data.event_id;
this.omnitrack = data.omnitrack;
this.$('content_container').show();
this.$('tabs').style.position = 'absolute';
this.setup_tabs();
Event.observe( this.$('moreLink'), 'click', this.on_expand_content.bind( this ) );
Event.observe( this.$('lessLink'), 'click', this.on_collapse_content.bind( this ) );
},
setup_tabs: function() {
false;
var tabs = Element.childElements( this.$('tabs') );
this.tabs = [];
for ( var i = 0 ; i < tabs.length ; i ++ ) {
var content = this.$( 'content_' + i );
if ( content ) {
var tab_size = Element.getDimensions( tabs[i] );
var details = {
tab: tabs[i],
content: content,
expandos: this.setup_expandos( content ),
omnitrack: this.omnitrack[i],
state_index: i + 1
};
Element.observe( details.tab, 'click', this.show_details.bind( this, details ) );
this.tabs.push( details );
}
else {
this.tabs.push( false );
}
}
var saved_state = new CookieTree( '_E', this.event_id ).get( 'ei' );
if ( $H(saved_state).keys().length ) {
var tab = this.tabs[saved_state.i-1];
if ( tab ) {
this.show_details( tab );
return;
}
}
this.tabs.unshift( this.tabs.pop() );
for( i = 0 ; i < this.tabs.length ; i ++ ) {
if ( this.tabs[i] ) {
this.show_details( this.tabs[i] );
return;
}
}
},
setup_expandos: function( content ) {
false;
var all = [];
var links = content.getElementsByClassName('expandosLink');
for ( var i = 0 ; i < links.length ; i ++ ) {
var link = links[i];
var link_content = Element.next( link );
var expandos = {
link: link,
content: link_content
};
Event.observe( link, 'click', this.on_toggle_expando.bind( this, expandos ) );
all.push( expandos );
}
return all;
},
on_toggle_expando: function( expando ) {
this.toggle_expandos( expando, false );
this.reset_content_area();
this.setup_content_view();
},
toggle_expandos: function( expandos, collapse ) {
false;
if ( expandos.link.hasClassName( 'expandosLink' ) && !collapse ) {
expandos.link.removeClassName( 'expandosLink' );
expandos.link.addClassName( 'expandosLink-open' );
expandos.content.removeClassName( 'expandos-closed' );
expandos.content.addClassName( 'expandos-open' );
}
else {
expandos.link.removeClassName( 'expandosLink-open' );
expandos.link.addClassName( 'expandosLink' );
expandos.content.removeClassName( 'expandos-open' );
expandos.content.addClassName( 'expandos-closed' );
}
},
collapse_all_expandos: function( expandos ) {
false;
for ( var i = 0 ; i < expandos.length ; i ++ ) {
this.toggle_expandos( expandos[i], true );
}
},
show_details: function( details ) {
false;
if ( Object.isUndefined( details ) ) {
details = this.current_details;
}
else {
if ( this.current_details && details != this.current_details ) {
Element.removeClassName( this.current_details.tab, 'infoModule-item-on' );
Element.addClassName( this.current_details.tab, 'infoModule-item' );
Element.removeClassName( this.current_details.tab, 'highlight-border' );
Element.removeClassName( this.current_details.tab, 'highlight' );
this.current_details.content.hide();
if ( details.omnitrack ) {
omniTracking.navigation_link( details.omnitrack, false );
}
}
this.current_details = details;
}
Element.removeClassName( details.tab, 'infoModule-item' );
Element.addClassName( details.tab, 'infoModule-item-on' );
Element.addClassName( details.tab, 'highlight-border' );
Element.addClassName( details.tab, 'highlight' );
this.reset_content_area();
this.collapse_all_expandos( details.expandos );
this.adjust_size();
details.content.show();
if ( !details.visited ) {
this.resize_content_images( details.content );
details.visited = true;
}
this.setup_content_view( { collapsed: true } );
new CookieTree( '_E', this.event_id, 'ei' ).set( 'i', details.state_index );
EventState.touch( this.event_id );
},
resize_content_images: function( content ) {
false;
var el = arguments[1] ? arguments[1] : content;
if ( el.nodeName.toUpperCase() == 'IMG' ) {
var image_width = Element.getWidth( el );
var content_width = Element.getWidth( content );
if ( image_width > content_width ) {
var new_width = content_width;
var new_height = Math.floor( (content_width / image_width) * Element.getHeight( el ) );
el.style.width = new_width + "px";
el.style.height = new_height + "px";
}
}
else {
var children = el.childElements();
if ( children.length ) {
for ( var i = 0 ; i < children.length ; i ++ ) {
this.resize_content_images( content, children[i] );
}
}
}
},
on_collapse_content: function() {
false;
this.collapse_all_expandos( this.current_details.expandos );
this.setup_content_view( { collapsed: true } );
},
setup_content_view: function( data ) {
false;
data = data || {};
this.$('viewLinks').hide();
this.expand_content_area();
var area_size = Element.getDimensions( this.$('content_area') );
if ( area_size.height > this.frame_area_height ) {
false;
this.$('viewLinks').show();
this.$('content_area').style.paddingBottom = '0px';
if ( data.collapsed )
this.collapse_content_area();
}
else {
this.$('content_frame').style.height = this.frame_area_height + "px";
}
},
reset_content_area: function() {
false;
this.$('viewLinks').hide();
this.$('content_area').style.height = '';
this.$('content_area').style.overflow = '';
this.$('content_area').style.paddingBottom = '';
this.$('content_frame').style.height = '';
},
on_expand_content: function() {
false;
this.reset_content_area();
this.setup_content_view();
},
expand_content_area: function() {
false;
this.$('moreLink').hide();
this.$('lessLink').show();
},
on_collapse_content: function() {
false;
this.reset_content_area();
this.collapse_all_expandos( this.current_details.expandos );
this.setup_content_view( { collapsed: true } );
},
collapse_content_area: function() {
false;
this.$('moreLink').show();
this.$('lessLink').hide();
this.$('content_area').style.overflow = 'hidden';
var view_links_height = Element.getHeight( this.$('viewLinks') );
var new_height = this.frame_area_height - view_links_height;
this.$('content_area').style.height = new_height + "px";
var shift = this.$('content_container').getHeight() - this.$('content_frame').getHeight();
this.$('content_area').style.height = new_height + shift + "px";
},
adjust_size: function() {
false;
var tabs_size = Element.getDimensions( this.$('tabs') );
this.$('event_info_module').style.height = tabs_size.height + "px";
this.$('content_container').style.height = tabs_size.height + "px";
var container_size = Element.getDimensions( this.$('content_container') );
var offset = container_size.height - tabs_size.height;
var frame_size = Element.getDimensions( this.$('content_frame') );
var area_size = Element.getDimensions( this.$('content_area') );
offset += ( frame_size.height - area_size.height);
this.frame_area_height = container_size.height - offset;
}
} );

