// Created By: Stewart Smith - WGBH Interactive
// for use with mootools v1.11
// include other js files
document.write('');
document.write('');
// include the comments functionality
// uncommented by mitch_smith 80080508
document.write('');
// commented out by mitch_smith 80080508
/*var amexComments = {
addComment:function(){
return;
},
loadComments:function(){
return;
}
}; */
var curQuestionID;
var presidents = {
// nmaing conventions
ncVidFormats: ['_qt', '_wm', '_flv', '_rm'],
main_clip_info: {},
now_playing_list: {},
now_playing_order: {},
now_playing_vid_group: '',
now_playing_vid_name: '',
now_playing_vid_id: '',
accordian: {}, //handle to the accordian obj
accordian_open: '', //handle to the toggler of the open section
// add an Fx.Scroll obj for the window
scroll_fx: new Fx.Scroll(window, {
wait: 500,
duration: 500,
transition: Fx.Transitions.Quad.easeIn
}),
init: function(){
if( $E('.main_clip_info') )
presidents.init_main_clip_info();
if( $('chapter_nav') )
presidents.init_now_playing();
if( $('prez_watch_nav') )
presidents.init_prez_watch_nav();
if( $('cnt_accordian') )
presidents.init_accordian();
if( $('social_bookmarking') ){
amex.addCSS('../../c/social.css');
SocialBookmarking.replaceDIV('social_bookmarking');
}
if( $('rate_it') )
presidents.init_ratings();
// Define and setup comments
// if( 1 == 2 ){
amexComments = new AMEXComments({
urlFlag:"/wgbh/amex/presidents/comments/flag.php",
urlAdd:"/wgbh/amex/presidents/comments/add.php",
updateAdd:"comments_add_result",
updateFlag:"comments_flag_result",
xmlPath:"/wgbh/amex/presidents/2008/pages/" ,
formAdd : 'comments_add' ,
submitButton : 'comments_submit' ,
onComplete : this.onCommentAdded
});
disQuestion();
checkLogin();
// }
},
// STEW start 03.20.2008
init_ratings: function(){
},
// STEW end 03.20.2008
init_main_clip_info: function(){
element = $E('.main_clip_info');
presidents.now_playing_vid_id = element.getProperty('video_id');
//alert('hi: ' + element.getProperty('video_id'));
presidents.main_clip_info['default'] = {
h1_html: ( element.getFirst().getNext().getTag == 'h1' ) ? element.getFirst().getNext().getProperty('innerHTML') : $E('.main_clip_info h1 span.normal').getParent().getProperty('innerHTML'),
clip_title: ( $E('span.clip_title', element) ) ? $E('span.clip_title', element).getText() : '',
clip_duration: ( $E('span.clip_duration', element) ) ? $E('span.clip_duration', element).getText() : '',
clip_blurb: ( $E('span.clip_blurb', element) ) ? $E('span.clip_blurb', element).getText() : ''
};
presidents.main_clip_info[0] = {
h1_html: ( element.getFirst().getNext().getTag == 'h1' ) ? element.getFirst().getNext() : $E('.main_clip_info h1 span.normal').getParent(),
clip_title: ( $E('span.clip_title', element) ) ? $E('span.clip_title', element) : element.appendChild( new Element('span').addClass('clip_title') ),
clip_duration: ( $E('span.clip_duration', element) ) ? $E('span.clip_duration', element) : element.appendChild( new Element('span').addClass('clip_duration') ),
clip_blurb: ( $E('span.clip_blurb', element) ) ? $E('span.clip_blurb', element) : element.appendChild( new Element('span').addClass('clip_blurb') )
};
},
set_main_clip_info: function(vid_name){
if(vid_name && presidents.now_playing_list[vid_name]){
presidents.main_clip_info[0].h1_html.setHTML( presidents.now_playing_list[vid_name].h1_html );
presidents.main_clip_info[0].clip_title.setHTML( presidents.now_playing_list[vid_name].clip_title );
presidents.main_clip_info[0].clip_duration.setHTML( presidents.now_playing_list[vid_name].clip_duration );
presidents.main_clip_info[0].clip_blurb.setHTML( presidents.now_playing_list[vid_name].clip_blurb );
}else{
if( presidents.now_playing_vid_name != '' && presidents.now_playing_list[presidents.now_playing_vid_name]){
// if an active video
presidents.main_clip_info[0].h1_html.setHTML( presidents.now_playing_list[presidents.now_playing_vid_name].h1_html );
presidents.main_clip_info[0].clip_title.setHTML( presidents.now_playing_list[presidents.now_playing_vid_name].clip_title );
presidents.main_clip_info[0].clip_duration.setHTML( presidents.now_playing_list[presidents.now_playing_vid_name].clip_duration );
presidents.main_clip_info[0].clip_blurb.setHTML( presidents.now_playing_list[presidents.now_playing_vid_name].clip_blurb );
}else{
// use the original page default
presidents.main_clip_info[0].h1_html.setHTML( presidents.main_clip_info['default'].h1_html );
presidents.main_clip_info[0].clip_title.setHTML( presidents.main_clip_info['default'].clip_title );
presidents.main_clip_info[0].clip_duration.setHTML( presidents.main_clip_info['default'].clip_duration );
presidents.main_clip_info[0].clip_blurb.setHTML( presidents.main_clip_info['default'].clip_blurb );
}
}
},
init_now_playing: function() {
// ******************************************************
// CHAPTER BLURBS: read and store the Now Playing list
// ******************************************************
var chapter_blurbs = $ES('.cnt_now_playing div');
if ( chapter_blurbs.legth == 0 ) return;
// get vid_group from id like current_reagan_01
presidents.now_playing_vid_group = chapter_blurbs[0].id.slice(8, chapter_blurbs[0].id.length-3);
//alert('presidents.now_playing_vid_group: ' + presidents.now_playing_vid_group + ' (' + presidents.now_playing_vid_group.length + ')');
chapter_blurbs.each(function(element) {
// get vid_name and play order from id like current_reagan_01
var vid_name = element.id.slice(8, element.id.length);
var play_order = presidents.get_play_order_from_href( element.id.slice(element.id.length-2, element.id.length) + '.html' );
if( play_order.slice(0,1) == '0' ){
play_order = play_order.slice(1,play_order.length);
}
//alert(presidents.now_playing_vid_group + ', Chapter ' + play_order + '');
presidents.now_playing_order[play_order] = vid_name;
presidents.now_playing_list[vid_name] = {
list_id: element.id,
vid_name: vid_name,
play_order: play_order,
film_chapter: ( $E('p', element) ) ? $E('p', element).getText() : '',
/* 2008-04-30 - mitch_smith@wgbh.org :
h1_html: presidents.now_playing_vid_group + ', Chapter ' + play_order + '', */
h1_html: ' Chapter: ',
clip_title: ( $E('span.clip_title', element) ) ? $E('span.clip_title', element).getText() : '',
clip_duration: ( $E('span.clip_duration', element) ) ? $E('span.clip_duration', element).getText() : '',
clip_blurb: ( $E('span.clip_blurb', element) ) ? $E('span.clip_blurb', element).getText() : ''
};
// SAVE TO PLAYLIST link
// id with 'np' for Now Playing
var save_lnk = new Element('a').setProperty('id','np_' + vid_name).setText('Save').setProperty('href','#').addEvent('click', presidents.save_np_lnk_click);
element.appendChild(save_lnk);
});
//alert('vid_name: ' + presidents.now_playing_list['reagan_03'].clip_title);
// ********************************
// CHAPTER NAV SQUARES
// ********************************
var chapter_nav = $$('#chapter_nav a');
chapter_nav.each(function(element) {
// replace box imgs with a span
// var chapter_nav_lnk = new Element('span').setHTML(' ');
// set data vars on each link
var aryH1 = element.getFirst().alt.split(': ');
element.h1_html = aryH1[0] + ', ' + aryH1[1] + '';
element.play_order = presidents.get_play_order_from_href(element.href);
element.vid_name = aryH1[0].toLowerCase() + '_' + element.play_order; // with leading zero
// add h1_html to now_playing_list for main_clip_info obj
// presidents.now_playing_list[element.vid_name].h1_html = element.h1_html;
// the active chapter image has no class
if( !element.getFirst().hasClass('roll') ){
//alert('NOW PLAYING: ' + element.getFirst().alt);
// chapter_nav_lnk.addClass('active');
element.addClass('active');
presidents.now_playing_vid_name = element.vid_name;
}
// strip leading zero
if( element.play_order.slice(0,1) == '0' ){
element.play_order = element.play_order.slice(1,1);
}
// element.empty(); // remove img
// element.appendChild(chapter_nav_lnk); // add span
element.addEvent('mouseenter', function(e){
presidents.set_main_clip_info(this.vid_name);
});
element.addEvent('mouseleave', function(e){
presidents.set_main_clip_info();
});
/*
element.addEvent('click', function(e){
event = new Event(e);
event.stop();
try{ window.location = this.linkto; }catch(e){}
});
*/
});
},
get_play_order_from_href: function(thisHREF){
if( !thisHREF ) return '';
// strip any vid format info from link
presidents.ncVidFormats.each(function(element) {
thisHREF = thisHREF.replace( new RegExp(element+'\.'), '.' );
});
return thisHREF.slice(thisHREF.length-7, thisHREF.length-5);
},
save_np_lnk_click: function(e) {
e = new Event(e).stop();
alert(this.id);
},
init_prez_watch_nav: function() {
$ES('.righty img', 'prez_watch_nav').each( function(element){
var isActive = false;
element.title = '';
if( element.getParent().getTag() == 'a' ){
// the vids ARE online
if( element.getParent().getPrevious() ){
if( element.getParent().getPrevious().getTag() != 'h2' ){
// if the link doesn't already have an h2 in front - add it
new Element('h2').setHTML( element.alt ).addClass('hide').addClass('oneline').injectBefore( element );
}else{
// if the link already has an h2 in front - add active class and don't add events
isActive = true;
element.getParent().getPrevious().addClass('active');
}
}else{
// if there is a link but no previous elem then vid is first in the list and not the active group
new Element('h2').setHTML( element.alt ).addClass('hide').addClass('oneline').injectBefore( element );
}
}else{
// the vids are NOT online
var aryAlt = element.alt.split(/\s+/);
var tmpHTML = aryAlt[0] + '
';
for( var i=1; i < aryAlt.length; i++){
tmpHTML += aryAlt[i] + ' ';
}
tmpHTML = tmpHTML.trim() + '';
new Element('h2').setHTML( tmpHTML ).addClass('hide').injectBefore( element );
}
// hide and show the h2 on mouseover and mouseout for not active
if ( !isActive ){
element.addEvent('mouseover', function(e){
new Element(this).getPrevious().toggleClass('hide');
});
element.addEvent('mouseout', function(e){
new Element(this).getPrevious().toggleClass('hide');
});
}
});
},
init_accordian: function(){
// create the accordian
presidents.accordian = new Accordion('h3.toggler', 'div.toggle_section', {
display: false,
alwaysHide: true,
onComplete: function(e){
// if all sections closed scroll to top
var allClosed = true;
$ES('div.toggle_section', 'cnt_accordian').each( function(element){
if( element.getStyle('visibility') != 'hidden' ){
allClosed = false;
}
});
if( allClosed ){
presidents.scroll_fx.toTop();
presidents.accordian_open = '';
}else{
presidents.scroll_fx.scrollTo( 0, presidents.accordian_open.getTop() );
}
},
onActive: function(toggler, element){
toggler.addClass('active');
presidents.accordian_open = toggler;
},
onBackground: function(toggler, element){
toggler.removeClass('active');
}
}, $('cnt_accordian'));
}
};// end presidents obj
// **********************************
// **********************************
function disQuestion(){
// element = $E('.main_clip_info');
// presidents.now_playing_vid_id = element.getProperty('video_id');
// alert(presidents.now_playing_vid_id);
if( presidents.now_playing_vid_id )
displayQuestion( presidents.now_playing_vid_id, users.display_name );
}
window.addEvent('domready', presidents.init);
window.addEvent('load', disQuestion);
// **********************************
// **********************************
// functions from the RoguePDX dase.js file
function onCommentSubmitted ( ){
var err = false;
var strOut = '';
// Check if comment is too long
if ( $( 'comments_form_commenttxt' ).getValue().length > 5000 ){
strOut = 'Your comment is too long. Please condense it and try again.';
err = true;
}else if ( !err && $( 'comments_form_commenttxt' ).getValue().length == 0 ){
// Check if comment is blank
strOut = 'You forgot to write something for your comment. Please try again.';
err = true;
}
if( err ){
alert( strOut );
}else{
amexComments.addComment( curQuestionID );
}
}
/**
* Displays the specified question's content below the Flash content
* @param {String} pQuestionID ID of selected question.
* @param {String} pQuestionString Question text to display in comment title.
*/
function displayQuestion ( pQuestionID , pQuestionString )
{
if ( pQuestionID != undefined && pQuestionID != null && pQuestionID != '' )
{
curQuestionID = pQuestionID;
// Display question's comments
amexComments.loadComments( pQuestionID );
// Set comment title
$( 'comments_questionTitle' ).setHTML( pQuestionString );
// update url w/ hash and pQuestionID so we can use that in Share elements
window.location.hash = pQuestionID;
checkLogin();
//doFix();
}
}
// generic page update function for GA. this way if the base url changes we can change it here rather than updating and recompiling flash
// flash passed in the action, podcast, bio,
function updateAnalytics( action, arg1, arg2 )
{
var ptUpdate;
var baseRef = "/presidents/2008/questions/";
switch( action )
{
// update w/ arg1 is link for these
case "podcast":
case "bio":
case "postroll":
ptUpdate = arg1;
break;
case "question":
// update w/ arg1 is question ID
// create virtual folder reference
ptUpdate = baseRef + arg1;
break;
case "clip":
// update w/ arg1 is question ID, arg2 is clip title
// create virtual folder reference
ptUpdate = baseRef + arg1 + "/" + arg2;
break;
case "clip_end":
// update w/ arg1 is question ID, arg2 is clip title
ptUpdate = baseRef + arg1 + "/" + arg2 + "-complete";
break;
default:
break;
}
pageTracker._trackPageview( ptUpdate );
}
function checkLogin ( )
{
// If user is logged in..
if ( Cookie.get( "amex.user_id" ) != undefined &&
Cookie.get( "amex.user_id" ) != false &&
curQuestionID != undefined &&
curQuestionID != '' )
{
// Show comment form
$( 'loginRegister' ).set( { 'styles':{ 'display':'none' } } );
$( 'submitComment' ).set( { 'styles':{ 'display':'block' } } );
$( 'comments_login' ).set( { 'styles':{ 'display':'none' } } );
$( 'comments_form' ).set( { 'styles':{ 'display':'block' } } );
// Update form fields
$( 'comments_add' ).user_id.value = Cookie.get( 'amex.user_id' );
$( 'comments_add' ).video_id.value = curQuestionID;
$( 'comments_form_name' ).innerHTML = Cookie.get( "amex.user_name" );
$( 'comments_form_initials' ).innerHTML = Cookie.get( "amex.user_initials" );
}
// If user isn't logged in...
else if ( curQuestionID != undefined && curQuestionID != '' )
{
// Show login prompts
$( 'loginRegister' ).set( { 'styles':{ 'display':'block' } } );
$( 'submitComment' ).set( { 'styles':{ 'display':'none' } } );
$( 'comments_login' ).set( { 'styles':{ 'display':'block' } } );
$( 'comments_form' ).set( { 'styles':{ 'display':'none' } } );
// Update form fields
$( 'comments_add' ).user_id.value = '';
$( 'comments_add' ).video_id.value = '';
$( 'comments_form_name' ).setHTML = '';
$( 'comments_form_initials' ).setHTML = '';
$( 'comments_questionTitle' ).setHTML('');
// Update login links with latest question id from hash
updateLoginLinks();
}
}
/**
* Updates all login links with latest question ID in the hash.
*/
function updateLoginLinks ( )
{
// var arrLoginLinks = getElementsByClassName( document , "a" , "loginRegisterLink" );
var arrLoginLinks = $$( 'a.loginRegisterLink' );
// Loop through and update links
var iLink = arrLoginLinks.length;
var bareHref;
while ( iLink-- )
{
bareHref = arrLoginLinks[ iLink ].href;
hashIndex = bareHref.indexOf( '#' );
if ( hashIndex >= 0)
{
bareHref = bareHref.substring( 0 , hashIndex );
}
arrLoginLinks[ iLink ].href = bareHref + window.location.hash;
}
}
/**
* Expands the specified comment to display it in its entirety.
* @param {Object} pID Comment ID.
*/
function expandComment( pID )
{
// Hide preview block
var previewBlock = document.getElementById( "copy_preview_c" + pID );
previewBlock.style.display = "none";
// Hide expand link
var expandLink = document.getElementById( "expand_c" + pID );
expandLink.style.display = "none";
// Display full text block
var fulltextBlock = document.getElementById( "copy_full_c" + pID );
fulltextBlock.style.display = "block";
// Display collapse link
var expandLink = document.getElementById( "collapse_c" + pID );
expandLink.style.display = "block";
}
/**
* Collapses the specified comment back to preview mode.
* @param {Number} pID Comment ID.
*/
function collapseComment( pID )
{
// Display preview block
var previewBlock = document.getElementById( "copy_preview_c" + pID );
previewBlock.style.display = "block";
// Display expand link
var expandLink = document.getElementById( "expand_c" + pID );
expandLink.style.display = "inline";
// Hide full text block
var fulltextBlock = document.getElementById( "copy_full_c" + pID );
fulltextBlock.style.display = "none";
// Hide collapse link
var expandLink = document.getElementById( "collapse_c" + pID );
expandLink.style.display = "none";
}
// EMAIL to friend
function email()
{
// using AMEX sendtofriend. has a hidden SSI REFERER value in it
url = "../../sendtofriend.html";
window.open(url,'tell_friend','toolbar=no,width=605,height=380');
}
// Written by Jonathan Snook, http://www.snook.ca/jonathan
// Add-ons by Robert Nyman, http://www.robertnyman.com
function parseXML(xml /* req.responseXML */) {
var obj = { _text : "" };
var child = xml.firstChild;
while (child) {
if (child.nodeName == "#text") {
obj._text += child.nodeValue;
} else if (child.nodeType == 1) {
if (typeof obj[child.nodeName] == "undefined") {
obj[child.nodeName] = [];
}
obj[child.nodeName][obj[child.nodeName].length] = parseXML(child);
}
child = child.nextSibling;
}
var att = xml.attributes;
var i = 0;
if (att) { // there are attributes
for (var i = 0; i < att.length; i++) {
obj[att[i].name] = att[i].value;
}
}
if (obj._text.match(/^\s*$/)) {
delete obj._text;
}
return obj;
}