/* 
jubilat interface javascript 
Copyright 2010, Fund for the City of New York
All rights reserved.

This source file is distributable subject to the terms of the
FCNY Open Source License. 
*/

// slides object
var slides = { "version":"2.0" }
slides.showindex = 0;
slides.activeslides = {};
slides.slides = {};
slides.showslide = function ( id, first ) {
  var slide = $(id);
  if ( !slide ) return;
  // which show?
  var showindex = this.slides[ id ];
  if ( !showindex ) {
    log("Got slide but no registered show for it!");
    return;
  }
  // hide cover slide
  if( this.cover_slide ) {
    this.cover_slide.style.display = 'none';
  }
  if ( this.activeslides[ showindex ] ) {
    this.activeslides[ showindex ].style.display = 'none';
    signal( this.activeslides[ showindex ], "inactive" );
  }
  this.activeslides[ showindex ] = slide;
  this.activeslides[ showindex ].style.display = 'block';
  var videoid = getNodeAttribute( slide, "videoid" );
  if ( videoid && !first ) {
    log("Playing",videoid);
    window.setTimeout( "$('flowplayer"+videoid+"').DoPlay()", 1000 );
  }
  signal( this.activeslides[ showindex ], "active" )
}
slides.activeIcon = function ( e ) {
  var src = e.src();
  var icon = $( "t_"+src.id )
  addElementClass( icon, "active" );
  //log("Activated",src.id,"icon",icon.id);
}

slides.inactiveIcon = function ( e ) {
  var src = e.src();
  var icon = $( "t_"+src.id )
  removeElementClass( icon, "active" );
  //log("Deactivated",src.id);
}
slides.clickhandler = function ( e ) {
  if ( e.mouse().button["left"]==true ) {
//    e.stop();
    var target = e.src();
    if ( target.tagName!="A" ) return;
    target.blur();
    var id = target.hash.substr(1);
    this.showslide( id );
  }
}
slides.navhandler = function ( e ) {
  var target = e.target();
  if ( target.tagName=="IMG" ) {
    target = target.parentNode;
  }
  if ( target.tagName!="A" ) return;
  if ( hasElementClass( target, "pagenav") ) return;
//  e.stop();
  target.blur();
  var id = target.hash.substr(1);
  this.showslide( id );
}
slides.init = function( slideshow ) {
  this.showindex++;
  log("Init for slideshow",this.showindex,"with slideshow",slideshow);
  // find slidenav links
  iterateElementsByTagAndClassName ( "div", "slide", slideshow, function( navs, i ) {
    logDebug( "Found slidenav",navs[i], slides.activeslides );
    connect( navs[i], "onclick", slides, "navhandler" );
  });
  // find slideholder links
  iterateElementsByTagAndClassName ( "a", "slidenav", slideshow, function( navs, i ) {
    logDebug( "Found slidenav",navs[i], slides.activeslides );
    connect( navs[i], "onclick", slides, "clickhandler" );
  });
  // find cover
  this.cover_slide = getFirstElementByTagAndClassName("div", "cover", slideshow);
  // set activeslide
  this.activeslides[ this.showindex ] = false;
  // map slides to this slideshow
  var allslides = getElementsByTagAndClassName( "div", "slide", slideshow );
  var mylength = allslides.length;
  for ( var i=0; i < mylength; i++ ) {
    this.slides[ allslides[i].id ] = this.showindex;
    if ( hasElementClass( allslides[i], "cover") ) {
      this.activeslides[ this.showindex ] = allslides[i];
    }
  }
  log("Found",mylength,"slides, showing first.");
  if( this.cover_slide == null ) {
    this.showslide( allslides[0].id, true );
  }
}
slides.factory = function() {
  var shows = getElementsByTagAndClassName( "div", "show", $("Canvas") );
  var showslength = shows.length;
  logDebug("shows:", shows);
  for ( var s=0; s < showslength; s++ ) {
    slides.init( shows[s] );
  }
  var medias = getElementsByTagAndClassName( "div", "media", $("Canvas") );
  var mediaslength = medias.length;
  logDebug("medias:", medias);
  for ( var s=0; s < mediaslength; s++ ) {
    slides.init( medias[s] );
  }
  // show a different slide if requested
  if ( window.location.hash ) {
    var id = window.location.hash.substr(1);
    var isslide = $(id);
    if ( isslide && hasElementClass( isslide, "slide" ) ) {
      log("Showing slide on this page",id);
      this.showslide( id, true );
    }
  }
}
connect( window, "ondomload", slides, "factory" );


// circles
var circles = { "version": "1.0" }
circles.clickhandler = function( e ) {
  var src = e.src();
  log("Clicked", src.id );
  var cbox = getInputById( src.id.substr(7), src.parentNode );
  if ( cbox ) {
    log("cbox",cbox.id,"checked:",cbox.checked);
    if ( cbox.checked ) {
      cbox.checked = false;
      src.src = "/www-jubilat/subscribecircle.gif";
    }
    else {
      cbox.checked = true;
      src.src = "/www-jubilat/subscribecircle-active.gif";
    }
  }
}
circles.init = function() {
  iterateElementsByTagAndClassName ( "input", "circle", $("Object"), function( elements, i ) {
    logDebug( "Found circle",elements[i] );
    var isactive = "";
    if ( elements[i].checked ) {
      isactive = '-active';
    }
    var cimg = IMG({ "src": "/www-jubilat/subscribecircle"+isactive+".gif", "id": "circle_"+elements[i].id, "align": "absmiddle" });
    insertSiblingNodesAfter( elements[i], cimg );
    connect( cimg, "onclick", circles, "clickhandler" );
    elements[i].style.display = "none";
  });
}
connect( window, "ondomload", circles, "init" );

// radiocircles
var radiocircles = { "version": "1.0" }
radiocircles.clickhandler = function( e ) {
  var src = e.src();
  log("Clicked", src.id );
  var cbox = getInputById( src.id.substr(7), src.parentNode );
  var hiddenid = 'hidden_' + src.id.substr(7, src.id.length-9 );
  var chidden = $( hiddenid )
  if ( cbox ) {
    log("cbox",cbox.id,"checked:",cbox.checked);
    if ( cbox.checked ) {
      cbox.checked = false;
      src.src = "/www-jubilat/subscribecircle.gif";
      if ( chidden ) {
        chidden.style.display = 'none';
      }
    }
    else {
      cbox.checked = true;
      src.src = "/www-jubilat/subscribecircle-active.gif";
      if ( chidden ) {
        chidden.style.display = 'table-row-group';
      }
      // radio-ness:
      iterateElementsByTagAndClassName ( "input", "radiocircle", $("Object"), function( elements, i ) {
        //log("Found radiocircle with name",elements[i].name,"and id",elements[i].id);
        if ( elements[i].name==cbox.name && elements[i].id != cbox.id ) {
          //log("Found radiocircle with name",cbox.name,"and id",elements[i].id);
          var mycircle = $( 'circle_' + elements[i].id );
          elements[i].checked = false;
          mycircle.src = "/www-jubilat/subscribecircle.gif";
        }
      });
    }
  }
}
radiocircles.init = function() {
  iterateElementsByTagAndClassName ( "input", "radiocircle", $("Object"), function( elements, i ) {
    logDebug( "Found circle",elements[i] );
    var isactive = "";
    if ( elements[i].checked ) {
      isactive = '-active';
    }
    var cimg = IMG({ "src": "/www-jubilat/subscribecircle"+isactive+".gif", "id": "circle_"+elements[i].id, "align": "absmiddle" });
    insertSiblingNodesAfter( elements[i], cimg );
    connect( cimg, "onclick", radiocircles, "clickhandler" );
    elements[i].style.display = "none";
    if ( isactive ) {
      var hiddenid = 'hidden_' + elements[i].id.substr(0, elements[i].id.length-2 );
      log( "Hidden id", hiddenid );
      var chidden = $( hiddenid );
      if ( chidden ) {
        chidden.style.display = 'table-row-group';
      }
    }
  });
}
connect( window, "ondomload", radiocircles, "init" );
