$('html').addClass('js');
$(document).ready(function() {
  // videos
  if (typeof $.fn.media !== 'undefined'){
    $.fn.media.defaults.flvPlayer = '/assets/flash/mediaplayer.swf';
    $('a.media').media({
      caption: false
    });
  };
  
  // open rel="external" links in new window
  $('a[rel="external"]').click( function() {
      window.open( $(this).attr('href') );
      return false;
  });
  
  // corner badges
  $('td.loc').wrapInner('<div></div>');
  $('tr.Canceled td.loc div').append('<img src="/assets/images/badge-canceled.png" class="corner-badge">');
  $('tr.Delayed td.loc div').append('<img src="/assets/images/badge-delayed.png" class="corner-badge">');

  // cycle
    if (typeof $.fn.cycle !== 'undefined') {
      // define scrollDownAndFade transition
      $.fn.cycle.transitions.scrollDownAndFade = function($cont, $slides, opts) {
          $cont.css('overflow','hidden');
          opts.before.push(function(curr, next, opts) {
              $(this).show();
              opts.cssBefore.top = 0-next.offsetHeight;
              opts.cssBefore.opacity = -1;
              opts.animOut.top = curr.offsetHeight;
          });
          opts.cssFirst = { top: 0 };
          opts.animIn   = { top: 0, opacity: 1 };
          opts.animOut  = { opacity: -1 };
          opts.cssAfter = { display: 'none' };
      };
      // news ticker
      $('#ticker ul.entries').cycle({ 
        		fx:     'scrollDownAndFade', 
            speed:  700, 
            timeout: 5000,
            pause: true
        });
      // slideshow
      $('.slideshow .slides')
      .after('<div class="pager"><a href="#" id="prev-slide" class="prev-next">previous</a><ul class="hnav nav" title="previous"></ul><a href="#" id="next-slide" class="prev-next" title="next">next</a></div>')
      .cycle({ 
        fx: 'fade',
        prev: '#prev-slide',
        next: '#next-slide',
        speed:  700, 
        timeout: 10000,
        pause: true,
        pager:  '.pager ul',
        pagerAnchorBuilder: function(idx, slide){ 
          return '<li><a href="#">' + (+idx+1) + '</a></li>';
        }
      });
  	  // center the pager
  	  var $pager = $('.slideshow .pager');
  	  $pager.css('marginLeft', - $pager.width() / 2);
    };
    
  // biglinks
  if (typeof $.fn.biglinks !== 'undefined') {
    $('.category-list li, .biglink').biglinks();
  };
  
  // tabs
  if (typeof $.fn.tabs !== 'undefined') {
    
    var $browser = $('.browser').tabs(); 
    $browser.tabs();
    $browser.find('.js-hide').removeClass('js-hide');
    $browser.append('<div class="controls"><a href="#" class="prev">Previous</a><a href="#" class="next">Next</a></div>');
    
    $browser.find('.controls a').click(function(event) {
      event.preventDefault();
      var $tabs = $browser.find('.ui-tabs-nav li'),
          tabsLength = $tabs.length;
      if ($(this).is('.next')) {
        $tabs.index($('.ui-state-active')) == tabsLength-1 ?
          $browser.tabs('select', 0) :
          $browser.tabs('select', $tabs.index($('.ui-state-active'))+1);
      } else {
        $tabs.index($('.ui-state-active')) == 0 ?
          $browser.tabs('select', tabsLength-1) : 
          $browser.tabs('select', $tabs.index($('.ui-state-active'))-1);        
      }

    });
    $browser.keyup(function(event) {
      if (event.which == 39) {
        $('a.next', this).triggerHandler('click');
      } else if (event.which == 37) {
        $('a.prev', this).triggerHandler('click');        
      }
    });
  };
  
  
  $recordset = $('.recordset');
  
  // row striping non-schedule recordsets
  $recordset.filter(function() {
    return !$(this).parents('.schedule').length;
  })
  .find('tr:nth-child(even)').addClass('alt');
  
  
  
  // filter by location

  // only bother with this if there is a location filter on the page
  if ($('#location-filter').length) {
    
    // set variables
    var $locationFilter = $('#location-filter'),
        $checkboxes = $locationFilter.find(':checkbox'),
        $allbutAll = $checkboxes.not('#filter-all'),
        $events = $('.schedule tr');
    
    
    // auto check/uncheck checkboxes
    var setCheckboxes = function(cb) {
      var allbutAllChecked = function() {
        return $allbutAll.filter(':checked').length == $allbutAll.length;
      };
      
      if (cb.id == 'filter-all') {
        if (cb.checked == true) {
          $checkboxes.attr('checked', true);
        } else if (allbutAllChecked()) {
          $checkboxes.attr('checked', false);
        }
      } else {
         $('#filter-all').attr({checked: allbutAllChecked() ? true: false});
      }
      
    };

    // schedule recordsets
    function stripeScheduleRows() {
      $recordset.each(function(index) {
        var $thisTable = $(this);
        $thisTable.find('tbody')
        .removeClass('alt')
          .filter(':visible:odd')
          .addClass('alt')
        .end();
        
        $thisTable
          .find('tr:visible')
            .find('th span').removeClass('replace')
          .end()
            .filter(function() {
              return $(this).prevAll(':visible').length;
            })
              .find('th span').addClass('replace');
      });
      
    };
    function hideSubTimes() {
      $recordset.each(function(index) {
         $(this).find('tbody')
        .removeClass('alt')
          .filter(':visible:odd')
          .addClass('alt');
      });
    }
    // hide/show events
    function filterlocation() {
      if ($('#filter-all').is(':checked')) {
        $events.removeClass('hide');
      } else {
        $allbutAll.each(function() {
          var loc = this.id.split('-'),
              locPrefix = loc.shift(),
              loc = loc.join('-');
          $events.filter('.loc-' + loc)[this.checked == true ? 'removeClass' : 'addClass']('hide');
          
        });
      }
      $recordset
        .find('tbody')
        .removeClass('hide')
        .filter(function() {
          return !$('tr:visible', this).length;
        }).addClass('hide');
      if ( !$('#check-one').length ) {
        $('<div id="check-one" class="recordset-notice error">Please select at least one location to view events.</div>')
        .hide()
        .appendTo('.schedule');
      }
      if ($checkboxes.filter(':checked').length) {
        $('#check-one').hide();
      } else {
         $('#check-one').slideDown('fast'); 
      }
      stripeScheduleRows();
    }; 

    // Firefox retains checkbox state on refresh, so hide/show on doc ready
    filterlocation();

    $('.schedule').tabs({
      show: function() {
        filterlocation();
      }
    });
    
    // set checkboxes and hide/show events on click
    $checkboxes.click(function() {
      setCheckboxes(this);
      filterlocation();
    }); 
  } // location-filter stuff
  
  // first and last cell in each row
  $recordset
    .find('tr')
      .children(':first-child').addClass('first')
    .end()
      .children(':last-child').addClass('last');
  
    
  // zoom icon
  $('a[rel="shadowbox"] img').after('<img class="icn-zoom" src="/assets/images/icn-zoom.png" alt="Click to zoom">');
  
  if (typeof $.fn.shadowbox !== 'undefined'){
    $('a[rel=shadowbox][href$=.php]')
      .attr({'rel': 'shadowbox;width=560;'});
    var sboptions = {
      animate: false,
      resizeDuration: 0, 
      assetURL:  '/scripts/shadowbox/',
      loadingImage: 'loading.gif',
      overlayBgImage: 'overlay-85.png',      
      flvPlayer: 'flvplayer.swf', 
      keysClose:          ['c', 27],
      onOpen: function(el) {
        if (document.getElementById('shadowbox_container')) {
          document.getElementById('shadowbox_container').className = el.type;// == 'iframe' ? '' : 'shadowbox_' + el.type;
        }
      }
    };


    // ie6 only options
    if ($.browser.msie === true 
          && parseInt($.browser.version,10) < 7
          && typeof $.fn.ifixpng != 'undefined'
        ) {
      sboptions.onFinish = function() {
        $('#shadowbox_nav_close')
        .find('a').ifixpng().end();
      };
    }

    Shadowbox.init(sboptions);    
    
  };
  
}); // document.ready

// Ampersands
// http://patrickhaney.com/thinktank/2008/08/19/automatic-awesompersands
$(document).ready(function() {
  $(":header:contains('&')")
  .contents()
  .each(
    function() {
      if( this.nodeType == 3 ) {
        $(this)
        .replaceWith( this
          .nodeValue
          .replace( /&/g, "<span class='amp'>&</span>" )
        );
      }
    }
  );
});

// pngfix
$(document).ready(function() {
  if (typeof $.fn.ifixpng !== 'undefined') {
    $.ifixpng('/assets/images/pixel.gif');
  }
});

// columns
$(document).ready(function() {
  if (typeof $.fn.columns !== 'undefined') {
      $('.columns-2').columns({columns: 2, columnWrapper: '<div class="group"></div>'});
      $('.columns-3').columns({columns: 3, columnWrapper: '<div class="group"></div>'});
      $('.columns-4').columns({columns: 4, columnWrapper: '<div class="group"></div>'});
  }
});

// advanced selecting
$(document).ready(function() {
  $('dd').filter(function() {
    return $(this).is(':last-child') || $(this).next('dt').length;
  }).addClass('last');
});

// forms
$(document).ready(function() {
  if (typeof $.fn.defaulttext !== 'undefined') {
    $('.optional').defaulttext({
      text: 'title'
    });
  }
  
  if (typeof $.fn.tinyvalidate !== 'undefined'){
    var $contactForm = $('#contact-form');

    var submitOptions = {
      clearForm: true,
      beforeSubmit: function() {
        $('<span class="loading"><img src="/assets/images/loading.gif" alt="sending... " /></span>').prependTo('div.actions');
        $('<div class="overlay"></div>').css({opacity: '.4'}).appendTo($contactForm);
      },
      success: function(responseText) {
        $contactForm.slideUp(200, function() {        
          var response = $('<div>' + responseText + '</div>').find('p.intro').html();
          $('.loading').insertAfter(this).addClass('error').html(response);
        });
        $('div.overlay').fadeOut(100, function() {
          $(this).remove();
        });
      }
    };

    $contactForm.tinyvalidate({
      positionElement: ['inline','form'],
      primaryEvent: 'blur',
      secondaryEvent: 'submit',
      submitDetails: false,
      submitOverride: function() {
        $contactForm.ajaxSubmit(submitOptions);
      }
    });
  };
});
