/**
 * poetry society javascript include
 * Copyright 2009 Fund for the City of New York
 * 
 * This is free software. Use and distribution are subject to the terms
 * of the FCNY Open Source Software License. See license.txt, or
 * http://fred.fcny.org/fcny-ossl.txt
 */

function toggleShareThis( id ) {
  var st = $( id );
  if ( !st.open ) {
    st.open = true;
    st.style.display = "block";
  }
  else {
    st.style.display = "none";
    st.open = false;
  }
}

function sharePrint( id ) {
  // add printme to item (and its sidebars if necessary
  var items = iterateElementsByTagAndClassName( "div", "item", $("Object"), function( elements, i ) { 
    if( elements[i].id != id ) {
      addElementClass( elements[i], "noprint" );
    }
    else {
      addElementClass( elements[i], "printme" );
    }
  } );
  // printer stylesheet takes care of the rest
  window.print();
  // remove printme
  for ( var i=0; i < items.length; i++ ) {
    if( items[i].id != id ) {
      removeElementClass( items[i], "noprint" );
    }
    else {
      removeElementClass( items[i], "printme" );
    }
  }
}

// main object for all bcna global vars
var bcna = { "version":"1.0" };
bcna.hash = false;

// slides object
bcna.slides = { "version":"1.0" }

bcna.slides.showindex = 0;
bcna.slides.activeslides = {};
bcna.slides.slides = {};
bcna.slides.currentslide = 0;
bcna.slides.links = new Array();

bcna.slides.showslide = function ( id ) {
  // "deactivate" old links
  if( bcna.slides.currentslide && bcna.slides.links[bcna.slides.currentslide] ) {
    forEach( bcna.slides.links[bcna.slides.currentslide], function( ele ) {
      removeElementClass(ele, 'active');
    });
  }
  // "activate" new links
  if( bcna.slides.links[id] ) {
    forEach( bcna.slides.links[id], function( ele ) {
      addElementClass(ele, 'active');
    });
  }
  bcna.slides.currentslide = id;
  bcna.hash = '#'+id;
  
  var slide = $(id);
  if ( !slide ) return;
  // which show?
  var showindex = bcna.slides.slides[ id ];
  if ( !showindex ) {
    log("Got slide but no registered show for it!");
    return;
  }
  if ( bcna.slides.activeslides[ showindex ] ) {
    bcna.slides.activeslides[ showindex ].style.display = 'none';
  }
  bcna.slides.activeslides[ showindex ] = slide;
  bcna.slides.activeslides[ showindex ].style.display = 'block';
  var videoid = getNodeAttribute( slide, "videoid" );
  if ( videoid ) {
    log("Playing",videoid);
    window.setTimeout( "$('flowplayer"+videoid+"').DoPlay()", 1000 );
  }
}

bcna.slides.clickhandler = function ( e ) {
  e.stop();
  var target = e.src();
  if ( target.tagName!="A" ) return;
  var id = target.hash.substr(1);
  target.blur();
  bcna.slides.showslide( id );
}

bcna.slides.navhandler = function ( e ) {
  e.stop();
  var target = e.target();
  if ( target.tagName!="A" ) return;
  target.blur();
  var id = target.hash.substr(1);
  bcna.slides.showslide( id );
}

bcna.slides.init = function( slideshow ) {
  bcna.slides.showindex++;
  log("Init for slideshow",bcna.slides.showindex,"with slideshow",slideshow);
  // find slidenav links
  iterateElementsByTagAndClassName ( "div", "slidenav", slideshow, function( navs, i ) {
    //log( "Found slidenav",navs[i], bcna.slides.activeslides );
    connect( navs[i], "onclick", bcna.slides, "navhandler" );
  });
  // find slideholder links
  var firstSlide = false;
  iterateElementsByTagAndClassName ( "a", "slideclick", slideshow, function( navs, i ) {
    //log( "Found slidenav",navs[i], bcna.slides.activeslides );
    connect( navs[i], "onclick", bcna.slides, "clickhandler" );
    id = navs[i].hash.substr(1);
    if( !bcna.slides.links[id] ) {
      bcna.slides.links[id] = new Array();
    }
    bcna.slides.links[id].push(navs[i]);
    if( !firstSlide && navs[i].hash ) {
      firstSlide = navs[i].hash.substr(1);
    }
  });
  bcna.slides.currentslide = firstSlide;
  
  // set activeslide
  bcna.slides.activeslides[ bcna.slides.showindex ] = false;
  // map slides to this slideshow
  var allslides = getElementsByTagAndClassName( "div", "slide", slideshow );
  var mylength = allslides.length;
  for ( var i=0; i < mylength; i++ ) {
    bcna.slides.slides[ allslides[i].id ] = bcna.slides.showindex;
    if ( hasElementClass( allslides[i], "cover") ) {
      bcna.slides.activeslides[ bcna.slides.showindex ] = allslides[i];
    }
  }
}

bcna.slides.factory = function() {
  var shows = getElementsByTagAndClassName( "div", "show", $("Canvas") );
  var showslength = shows.length;
  for ( var s=0; s < showslength; s++ ) {
    bcna.slides.init( shows[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);
      bcna.slides.showslide( id );
    }
  }
  else if( bcna.slides.currentslide ) {
    bcna.slides.showslide( bcna.slides.currentslide );
  }
}

/* sorting mechanism */
bcna.sorter = {"Version": "1.0"};

bcna.sorter.items = new Array();
bcna.sorter.sortoptions = {};
bcna.sorter.currentsort = false;
bcna.sorter.currentsortElement = false;
bcna.sorter.itemscontainer = false;
bcna.sorter.sortdirection = -1;

// function to sort based on what bcna.sorter.currentsort is
bcna.sorter.compareFunction = function( a, b ) {
  var sortby = 'title';
  if( bcna.sorter.currentsort ) {
    sortby = bcna.sorter.currentsort;
  }
  
  a = a[sortby];
  b = b[sortby];
  r = 0;
  if(a > b) r = -1;
  if(a < b) r = 1;
  r *= bcna.sorter.sortdirection;
  return r;
}

bcna.sorter.sorthandler = function( e ) {
  e.stop();
  var target = e.src();
  if( target.tagName != "A" || bcna.sorter.items.length == 0 ) return;
  
  // remove active
  if( bcna.sorter.currentsortElement ) {
    removeElementClass(bcna.sorter.currentsortElement, 'active');
    removeElementClass(bcna.sorter.currentsortElement, 'asc');
    removeElementClass(bcna.sorter.currentsortElement, 'desc');
  }
  
  bcna.sorter.currentsortElement = target;
  
  newsort = target.getAttribute('sortby');
  if( newsort == bcna.sorter.currentsort ) {
    bcna.sorter.sortdirection *= -1;
  }
  else {
    tmpSort = -1;
    // sort by given order
    if( target.getAttribute('sortdir') ) {
      tmpSort = parseInt(target.getAttribute('sortdir'));
    }
    // sort asc order by default
    bcna.sorter.sortdirection = tmpSort;
  }
  bcna.sorter.currentsort = newsort;
  
  // update UI
  if( bcna.sorter.sortdirection == 1 ) {
    addElementClass(target, 'asc');
//    removeElementClass(target, 'desc');
  }
  else {
    addElementClass(target, 'desc');
//    removeElementClass(target, 'asc');
  }
  
  // start sorting
  bcna.sorter.items.sort(bcna.sorter.compareFunction);
  
  // "refresh" display
//  bcna.sorter.itemscontainer.innerHTML = '';
  forEach( bcna.sorter.items, function( ele ) {
    appendChildNodes(bcna.sorter.itemscontainer, ele);
  });
  
  addElementClass(target, 'active');
}

bcna.sorter.init = function( ele ) {
  // get all items to sort and their properties
  iterateElementsByTagAndClassName ( "*", "sorteritem", ele, function( opt, i ) {
    opt[i].title = opt[i].getAttribute('title');
    opt[i].date = opt[i].getAttribute('dateval');
    opt[i].neighborhood = opt[i].getAttribute('neighborhoodval');
    opt[i].business = opt[i].getAttribute('businessval');
    bcna.sorter.items.push(opt[i]);
  });
  bcna.sorter.itemscontainer = bcna.sorter.items[0].parentNode;
  
  log("Going to sort", bcna.sorter.items.length, "in ", ele);
  
  // get sort options
  firstSort = false;
  iterateElementsByTagAndClassName ( "a", "sorteroption", ele, function( opt, i ) {
    connect( opt[i], "onclick", bcna.sorter, "sorthandler" );
    bcna.sorter.sortoptions[i] = opt[i].getAttribute('sortby');
    if( !firstSort ) {
      firstSort = opt[i];
    }
  });
  
  bcna.sorter.currentsortElement = firstSort;
  bcna.sorter.currentsort = firstSort.getAttribute('sortby');
  addElementClass(firstSort, 'active');
  if( firstSort.getAttribute('sortdir') ) {
    bcna.sorter.sortdirection = parseInt(firstSort.getAttribute('sortdir'));
  }
  // update UI
  if( bcna.sorter.sortdirection == 1 ) {
    addElementClass(firstSort, 'asc');
  }
  else {
    addElementClass(firstSort, 'desc');
  }
}

bcna.sorter.factory = function() {
  var sorters = getElementsByTagAndClassName( "div", "sorter", $("Canvas") );
  for ( var s=0; s < sorters.length; s++ ) {
    bcna.sorter.init( sorters[s] );
  }
}

connect( window, "ondomload", bcna.sorter, "factory" );
connect( window, "ondomload", bcna.slides, "factory" );

