$(document).ready(function() {
  initFavoriteLinks();  
  initComingSoonPurchaseLinks();
  initTabs();
  initPrintButton();
  initTheatreMap();
});

// init tabs
function initTabs() {
  jQuery('ul.tabset').jqueryTabs({
    addToParent:true,
    holdHeight:false,
    activeClass:'active',
    tabLinks:'a.tab',
    fadeSpeed:0,
    event:'click'
  });
}

// jquery tabs plugin
jQuery.fn.jqueryTabs = function(_options){
  // default options
  var _options = jQuery.extend({
    addToParent:false,
    holdHeight:false,
    activeClass:'active',
    tabLinks:'a.tab',
    fadeSpeed:300,
    event:'click'
  },_options);

  return this.each(function(){
    var _holder = jQuery(this);
    var _fadeSpeed = _options.fadeSpeed;
    var _activeClass = _options.activeClass;
    var _addToParent = _options.addToParent;
    var _holdHeight = _options.holdHeight;
    var _tabLinks = jQuery(_options.tabLinks, _holder);
    var _tabset = (_addToParent ? _tabLinks.parent() : _tabLinks);
    var _event = _options.event;
    var _animating = false;

    // tabs init
    _tabLinks.each(function(){
      var _tmpLink = jQuery(this);
      var _tmpTab = jQuery(_tmpLink.attr('href'));
      var _classItem = (_addToParent ? _tmpLink.parent() : _tmpLink);
      if(_tmpTab.length) {
        if(_classItem.hasClass(_activeClass)) _tmpTab.show();
        else _tmpTab.hide();
      }
    });

    // tab switcher
    function switchTab(_switcher) {
      if(!_animating) {
        var _link = jQuery(_switcher);
        var _newItem = (_addToParent ? _link.parent() : _link);
        var _newTab = jQuery(_link.attr('href'));
        if(_newItem.hasClass(_activeClass)) return;

        var _oldItem = jQuery(_addToParent ? _tabset : _tabLinks).filter('.'+_activeClass);
        var _oldTab = jQuery(jQuery(_addToParent ? _oldItem.children('a') : _oldItem).attr('href'));
        if(_newTab.length) {
          _animating = true;

          if(_oldItem.length) {            
            _newItem.addClass(_activeClass);
            _oldItem.removeClass(_activeClass);

            var _parent = _oldTab.parent();
            if(_holdHeight) _parent.css({height:_parent.height()});

            _oldTab.fadeOut(_fadeSpeed,function(){
              _newTab.fadeIn(_fadeSpeed,function(){
                _animating = false;
              });
              if(_holdHeight) _parent.css({height:'auto'});
            });
          } else {
            _newItem.addClass(_activeClass);
            _newTab.fadeIn(_fadeSpeed,function(){
              _animating = false;
            });
          }
        }
      }
    }

    // control
    _tabLinks.each(function(){
      jQuery(this).bind(_event,function(){
        switchTab(this);
        return false;
      });
    });
  });
}

function initComingSoonPurchaseLinks() {

  jQuery('ul.coming-soon').each(function () {
    var _holder = $(this);
    var _ajaxLinks = _holder.find('.purchase-ajax-link');
    var _ajaxLinkIndex;
    
    // ajax content loaders
    _ajaxLinks.each(function (ind) {
      var _link = $(this);
      var _target;
      var _showtimesFor;
      var _showtimeDate = new Date(_link.find('a').attr('showtime_date'));
          
      _showtimesFor = $('#showtimes-for');
      _target = 'theatre-showtimes.aspx?node_id=' + _link.find('a').attr('node_id') + '&showtime_date=' + (_showtimeDate.getMonth() + 1) + '/' + _showtimeDate.getDate() + '/' + _showtimeDate.getFullYear();
      
      _link.click(function () {
        
        $.ajax({
            url: _target,
            success: function (msg) {
              var _divHolder;
              var _openers;
              
              _divHolder = $('div.showtime-results-holder');
              
              _divHolder.html(msg);
              _divHolder.show();
              
              _openers = jQuery('a.showtime-popup');
              initPopups(_openers);
              
              _showtimesFor.html(buildShowtimeForDivDate(_link.find('a').attr('showtime_date')));
        
              setDayPickerButton(_showtimeDate);
              
              $('#tab-5').toggle();
              $('a[href$="#tab-5"]').parent().removeClass('active');
              $('#tab-4').toggle();
              $('a[href$="#tab-4"]').parent().addClass('active');
            },
            error: function () {
              alert('AJAX Error!');
            }
        });
        return false;
      });
    });
  });
}

function buildShowtimeForDivDate(formattedShowtimeDate){
  var _showtimeDate = new Date(formattedShowtimeDate);
  
  return '<strong>Showtimes for:</strong>' + _showtimeDate.toLocaleDateString();
}

function setDayPickerButton(showtimeDate) {
  jQuery('ul.week-item').each(function () {
    var _holder = $(this);
    var _ajaxLinks = _holder.find('.day-picker-ajax-link');
    var _ajaxLinkIndex;
    var _dateSelected = (showtimeDate.getMonth() + 1) + '/' + showtimeDate.getDate() + '/' + showtimeDate.getFullYear();
    
    // ajax content loaders
    _ajaxLinks.each(function (ind) {
      var _link = $(this);
      var _dateSelected = (showtimeDate.getMonth() + 1) + '/' + showtimeDate.getDate() + '/' + showtimeDate.getFullYear();
      
      _ajaxLinks.each(function (ind) {
        $(this).removeClass('active');
      });
      
      if(_dateSelected == $(this).find('a').attr('showtime_date')) {
        $(this).addClass('active');
        return false;
      }
      else if(ind == 7) {
        $(this).addClass('active');
      }
    });
  });
}
  
function initPrintButton()
{
  var _queryParam;
  $('#printShowtimes').click(function(){
  
    _queryParam = 'node_id='+$('#hidNodeID').val();
    
    if (location.hash!='') 
      _queryParam += '&showtime_date='+(location.hash).substring(1)
    else if($('#hidShowtimeDate').val().length > 0)
      _queryParam += '&showtime_date='+$('#hidShowtimeDate').val()
        
    window.open('TheatreDetailPrint.aspx?'+_queryParam,'mywindow','width=400,height=400,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,copyhistory=no,resizable=yes')
  });  
}
                             
function initFavoriteLinks() {
  $('.favorite').each(function() {
    var lLink = $(this);
    var lTheaterID = lLink.attr('rel');
    
    if (lLink.attr('init') == null)
    {
      lLink.attr('init', '1');
      
      lLink.click(function() {
        var lFavorite = lLink.parents('#div-get-tickets').length > 0;
  
        if (lLink.find('.favorite-img-on').length > 0)
          sendRemoveFavTheater(lTheaterID, theaterRemoved, null);
        else
          sendAddFavTheater(lTheaterID, theaterAdded, null);
      });
    }
  });
}


function theaterAdded(vResponse) {
  $('.favorite[rel=' + vResponse + ']').each(function() {
    var lHolder = $(this);
    var lLink = lHolder.find('.with-tooltip').first();
    var lImg = lLink.find('img').first();
      
    lLink.attr('_f', false);
    lLink.attr('title', 'Remove Theatre');
    lImg.removeClass('favorite-img-off');
    lImg.addClass('favorite-img-on');
    lImg.attr('src', '/images/favstar_on.png');
    
    initTooltips(lHolder);
  });
}


function theaterRemoved(vResponse) {
  $('.favorite[rel=' + vResponse + ']').each(function() {
    var lHolder = $(this);
    var lLink = lHolder.find('.with-tooltip').first();
    var lImg = lLink.find('img').first();
    
    lLink.attr('_f', false);
    lLink.attr('title', 'Add Theatre');
    lImg.removeClass('favorite-img-on');
    lImg.addClass('favorite-img-off');
    lImg.attr('src', '/images/favstar_off.png');
    
    initTooltips(lHolder);
  });
}


function getQuerystring(key, default_)
{
  if (default_==null) default_="";
  key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regex = new RegExp("[\\?&]"+key+"=([^&#]*)");
  var qs = regex.exec(window.location.href);
  if(qs == null)
    return default_;
  else
    return qs[1];
}

function initTheatreMap() {

  jQuery('ul.tabset').each(function () {
    var _holder = $(this);
    var _ajaxLinks = _holder.find('.tab-map');
    var _ajaxLinkIndex;
    
    // ajax content loaders
    _ajaxLinks.each(function (ind) {
      var _link = $(this);
      
      _link.click(function () {
        var _mapContent = $('#tab-2').find('.content-box-b').html();
        var _target;
        _target = 'theatredetailmap.aspx?node_id=' + getQuerystring('node_id'); 
  
        if ($.trim(_mapContent).replace('&nbsp;','').length == 0) 
        { 
          $.ajax({
              url: _target,
              success: function (msg) {
                var _divHolder;
                var _openers;
                
                _divHolder = $('#tab-2').find('.content-box-b');
                _divHolder.html(msg);
                _divHolder.show();
              },
              error: function () {
                alert('AJAX Error!');
              }
            }); //end of ajax calls
          } //end if condition
        
        $('#tab-2').show();
        $('a[href$="#tab-2"]').parent().addClass('active');
        $('#tab-1').css('display','none');
        $('a[href$="#tab-1"]').parent().removeClass('active');
        $('#tab-3').css('display','none');
        $('a[href$="#tab-3"]').parent().removeClass('active');        
        
        return false;
        });
      });
    });
}
