/*
 * Some new changes
 * Circa. Summer 2011
 */

// Define them templates!
var templates = {};
var views = {};
var View = Backbone.View.extend({});
$('script[type="text/template"]').each(function() {
  var $this = $(this);

  templates[ $(this).attr('id') ] = $(this).html();
  views[ $(this).attr('id') ] = (Backbone.View.extend({
    render: function(_data) {

      _data = _data || DATA;

      // $(this.el).html( Mustache.to_html( $this.html(), DATA ) );
      try {
        var html = Mustache.to_html( $this.html(), _data, templates );
        // console.log( html );
        $(this.el).html( html );
      } catch(error) {
        alert( 'There has been a template error: \n\n' + error.message + '\n\nWhen processing: ' + $this.attr('id') );
      }
    }
  }));

});

// Clean up data
DATA.contact.right_columns = [];
var currentColumn = {title:DATA.contact.right_column_title,items:[]};
_(DATA.contact.right_column_items).each(function(right_column_item) {
  
  // check if the currentColumn has more than 3
  if( currentColumn.items.length >= 3 ) {
    DATA.contact.right_columns.push(currentColumn);
    currentColumn = {title:"&nbsp;",items:[]};
  }

  currentColumn.items.push(right_column_item);
});
DATA.contact.right_columns.push(currentColumn);

_(DATA.directors).each(function(director, i) {
  
  // check if the director has bio data
  DATA.directors[i].show_bio = DATA.directors[i].bio ? true : false;
  
});

// Display the loader
HARPOON.stage.rapidUnload();
HARPOON.stage.position();

// Backbone router
var ROUTER = new (Backbone.Router.extend({

  routes: {
    "":                                    "directors",
    "/":                                   "directors",
    "/:filter/":                           "directors",
    
    "/:filter/:director/":                 "directorWithoutArticle",
    "/:filter/:director/:article":         "director",
    "/director/:director/":                 "singleDirectorWithoutArticle",
    "/director/:director/:article":        "singleDirector",
    
    "/about":                              "about",
    "/contact":                            "contact",
  },

  setTitle: function(title) {
    $('#body > .title-strip').html( title );
  },

  pageCleanup: function(options) {
  
  	options = options || {};

    if( !options || !options.keepThumbs ) {
      $('#body .thumbs').stop(true).fadeOut(0, function() { $(this).remove(); });
    }

    if( options && options.hideControls ) {
      $('.overlay .previous,.overlay .next').fadeTo(300,0);
    } else {
      $('.overlay .previous,.overlay .next').fadeTo(300,1);
    }
    
    if( !options || !options.director ) {
      HARPOON.stage.activeDirector = null;
    }

    HARPOON.stage.registerItems(null, (options.itemWidth || null));
    HARPOON.stage.reload();

    HARPOON.stage.onload();
    HARPOON.stage.bind();
    
    HARPOON.navi.refresh();
  },

  directors: function( director ) {
  
  	if( !DATA.directors_navigation.length ) {
  		director = DATA.directors_navigation;
  	} else {
  
	    if( director && director != '' ) {
	      _.each(DATA.directors_navigation, function(d) {
	        if( d._slug == director ) {
	          director = d;
	        }
	      });
	    } else {
	      director = DATA.directors_navigation[0];
	    }
	  
	  }
  
    var template = new views['directors-index']({el: '#body .stage .inside'});
    template.render( director || false );

    HARPOON.magicAssets.itemWidth = 365;

    this.setTitle('Directors');
    this.pageCleanup();
  },
  
  /*
   * These are accessories
   */
  directorWithoutArticle: function(filter, director) {
    this.director(filter, director, null);
  },
  
  singleDirectorWithoutArticle: function(director) {
    this.director(null, director, null);
  },
  
  singleDirector: function(director, article) {
    this.director(null, director, article);
  },

  /*
   * This is the real deal
   */
  director: function(filter, director, article) {
  
    // Store the active collection
    if( HARPOON.stage.activeDirector ) {
      if(
        HARPOON.stage.activeDirector.filter == filter &&
        HARPOON.stage.activeDirector.director == director
      ) {

        // figure out the article index
        HARPOON.stage.item.go( $('.stage .inside .item').index( $('#' + article) ) );
        
        return;

      }
    }
    
    HARPOON.stage.activeDirector = {filter: filter, director: director};

    // data to use
    var _data = DATA.directors[0];

    // Find the director
    for (var i = 0; i < DATA.directors.length; i++) {
      if( DATA.directors[i]._slug == director ||  DATA.directors[i]._link == ROUTER.getDirectorUrl().substr(0,ROUTER.getDirectorUrl().length-1) ) {
        _data = DATA.directors[i];
      }
    };

    _data = _.extend( _data );

    // Check if there's a filter
    var deleteIndices = [];
    for (var i = 0; i < _data.videos.length; i++) {
      if( _data.videos[i].show_only_on ) {

        var keep = false;

        if( _.isArray(_data.videos[i].show_only_on) ) {
          
          for (var j = 0; j < _data.videos[i].show_only_on.length; j++) {
            keep = keep ? keep : ( _data.videos[i].show_only_on[j]._slug == filter );
          };

        } else {
          
          keep = ( _data.videos[i].show_only_on._slug == filter );

        }

        if( !keep ) {
          _data.videos[i].hide = true;
        } else {
          _data.videos[i].hide = false;
        }

      } else {
        _data.videos[i].hide = false;
      }
    };

    var template = new views['director-index']({el: '#body .stage .inside'});
    template.render( _data );

    if( !$('#body .thumbs').length ) { $('<div class="thumbs"></div>').appendTo('#body'); }
    var template = new views['video-thumbs']({el: '#body .thumbs'});
    template.render( _data );

    HARPOON.magicAssets.itemWidth = 730;
    HARPOON.videos.setup();
    HARPOON.stage.centerBio();

    this.setTitle('Directors');
    this.pageCleanup({keepThumbs: true, director: true});

    HARPOON.stage.item._current = -1;
    
    if( article ) {
      HARPOON.stage.item.go( $('.stage .inside .item').index( $('#' + article) ) );
    } else {
      HARPOON.stage.item.go(0);
    }
  },
  
  getDirectorUrl: function() {
    if( HARPOON.stage.activeDirector ) {
      return '/' + ( !HARPOON.stage.activeDirector.filter ? "directors" : HARPOON.stage.activeDirector.filter ) + '/' +  HARPOON.stage.activeDirector.director + '/';
    }
  },

  about: function() {
    var template = new views['about-body']({el: '#body .stage .inside'});
    template.render();

    this.setTitle('About');
    HARPOON.stage.show
    this.pageCleanup({hideControls:true});
  },

  contact: function() {
    var template = new views['contact']({el: '#body .stage .inside'});
    template.render();

    this.setTitle('Contact');

		var itemWidth = ($(template.el).find('.column').length * 300);
    this.pageCleanup({hideControls:true, itemWidth: itemWidth });
    
		$('#body .stage .inside .item.static').width(itemWidth)
  },

}))();

Backbone.history.start({pushState: false});
