var day_width = 41;
var max_offset = 0;
var lock_day_anim = false;
var lock_month_anim = false;

// var mouse_over_day_event_popup = false;

$(document).ready(function(){

  // activate curr month
  setCurrMonth();
  
  // initial load of days
  loadDays();
  
  // hide popup on mose leave
  $('#dayPopWrap').mouseleave(function(){
    $('#dayPopWrap').hide();
  });
  
  /**
   * month selector functionality
   */
  $('div.month').click(function(){
    
    // set var in form
    $('#curr_month').val($(this).attr('id'));
    
    // reset day
    $('#day_from').val(0);
    $('#day_to').val(0);
    
    // submit form
    $('#mainSearchForm').submit();
    
  });
  
  /**
   * day back
   */
  $('#calNavDayBack').click(function(){
    
    if(!lock_day_anim)
    {
      lock_day_anim = true;
      
      console.log('day back: offset = ' + $('#calNavDaysStageInner').position().left);

      if($('#calNavDaysStageInner').position().left < 0)
      {
        // move left
        $('#calNavDaysStageInner').animate(
          {'left': '+=' + day_width + 'px'},
          'fast',
          null,
          function(){
            lock_day_anim = false;
          }
        );
      }
      else
      {
        lock_day_anim = false;
      }
    }
    else
    {
      console.log('day back locked');
    }
    
  });
  
  /**
   * day forward
   */
  $('#calNavDayForward').click(function(){
    
    if(!lock_day_anim)
    {
      lock_day_anim = true;
      
      // get inner width
      var inner_width = $('#calNavDaysStageInner').width();

      console.log('day forward: offset = ' + $('#calNavDaysStageInner').position().left + ' | max_offset = ' + max_offset);

      if($('#calNavDaysStageInner').position().left > 0 - max_offset)
      {
        // move left
        $('#calNavDaysStageInner').animate(
          {'left': '-=' + day_width + 'px'},
          'fast',
          null,
          function(){
            lock_day_anim = false;
          }
        );
      }
      else
      {
        lock_day_anim = false;
      }
    }
    else
    {
      console.log('day forward locked');
    }
    
  });
  
  /**
   * month back
   */
  $('#calNavMonthBack').click(function(){
    
    if(!lock_month_anim)
    {
      lock_month_anim = true;
      
      console.log('month back');

      if($('#calNavMonthsStageInner').position().left < 0)
      {
        // move left
        $('#calNavMonthsStageInner').animate(
          {'left': '0px'},
          'fast',
          null,
          function(){
            lock_month_anim = false;
          }
        );
      }
      else
      {
        // january so go to prev year
        // set month to december
        $('#curr_month').val(12);
        
        $('div#calNavYearBack').trigger('click');
        
        lock_month_anim = false;
      }
    }
    else
    {
      console.log('month back locked');
    }
    
  });
  
  /**
   * month forward
   */
   $('#calNavMonthForward').click(function(){

     if(!lock_month_anim)
     {
       lock_month_anim = true;

       console.log('month forward');

       if($('#calNavMonthsStageInner').position().left == 0)
       {
         // move left
         $('#calNavMonthsStageInner').animate(
           {'left': '-43px'},
           'fast',
           null,
           function(){
             lock_month_anim = false;
           }
         );
       }
       else
       {
         // december so goto next year
         // set month to january
         $('#curr_month').val(1);
         
         $('div#calNavYearForward').trigger('click');
         
         lock_month_anim = false;
       }
     }
     else
     {
       console.log('month forward locked');
     }

   });
  
  /**
   * year back
   */
  $('div#calNavYearBack').click(function(){
    
    // dec year
    $('#curr_year').val(parseInt($('#curr_year').val()) - 1);
    
    // click jan
    // $('div#1').trigger('click');
    
    // submit form
    $('#mainSearchForm').submit();
    
  });
  
  /**
   * year forward
   */
  $('div#calNavYearForward').click(function(){
    
    // dec year
    $('#curr_year').val(parseInt($('#curr_year').val()) + 1);
    
    // click jan
    // $('div#1').trigger('click');
    
    // submit form
    $('#mainSearchForm').submit();
    
  });
  
  /**
   * range from up
   */
  $('#drNumFromUp').click(function(){
    
    if(parseInt($('#drNumFrom').html()) < $('div.day').length)
    {
      $('#drNumFrom').html(parseInt($('#drNumFrom').html()) + 1);
      
      // inc to date if needed
      if(parseInt($('#drNumFrom').html()) > parseInt($('#drNumTo').html()))
      {
        $('#drNumToUp').trigger('click');
      }
    }
    
  });
  
  /**
   * range from down
   */
  $('#drNumFromDown').click(function(){
    
    if(parseInt($('#drNumFrom').html()) > 1)
    {
      $('#drNumFrom').html(parseInt($('#drNumFrom').html()) - 1);
    }
    
  });
  
  /**
   * range to up
   */
  $('#drNumToUp').click(function(){
    
    if(parseInt($('#drNumTo').html()) < $('div.day').length)
    {
      $('#drNumTo').html(parseInt($('#drNumTo').html()) + 1);
    }
    
  });
  
  /**
   * range to down
   */
  $('#drNumToDown').click(function(){
    
    if(parseInt($('#drNumTo').html()) > 1)
    {
      $('#drNumTo').html(parseInt($('#drNumTo').html()) - 1);
      
      // dec from date if needed
      if(parseInt($('#drNumTo').html()) < parseInt($('#drNumFrom').html()))
      {
        $('#drNumFromDown').trigger('click');
      }
    }
    
  });
  
  /**
   * date range submit
   */
  $('a#drRefresh').click(function(){
    
    // set range in form
    $('#day_from').val($('#drNumFrom').html());
    $('#day_to').val($('#drNumTo').html());
    
    // submit form
    $('#mainSearchForm').submit();
  });
  
});

/**
 * loads days for month via ajax
 */
function loadDays()
{
  $('#calNavDaysStage').load(
    '/eventCalendar/getCalendarDays',
    {
      month: $('#curr_month').val(),
      year: $('#curr_year').val()
    },
    function(){
      
      /**
       * day mouseover
       */
      $('div.day').hover(
        function(){
          // close existing open popup
          $('#dayPopWrap').hide();
          
          // lookup day
          getDayEvents(this);
        },
        function(){
          // $('#dayPopWrap').hide();
        }
      );
      
      /**
       * day selector functionality
       */
      $('div.day').click(function(e){
        
        if(e.shiftKey)
        // shift click
        {
          console.log('day shift click');
          
          // get req day
          var req_day = parseInt($(this).html());
          
          // set date range
          if(req_day <= $('#day_from').val())
          {
            $('#day_to').val($('#day_from').val());
            $('#day_from').val(req_day);
          }
          else
          {
            $('#day_to').val(req_day);
          }
          
          // submit form
          $('#mainSearchForm').submit();
        }
        else
        // regular click
        {
          console.log('day regular click');
          
          // set date range to single day
          $('#day_from').val($(this).html());
          $('#day_to').val($(this).html());
          
          // submit form
          $('#mainSearchForm').submit();
        }
        
      });
      
      // set max offset
      max_offset = ($('#calNavDaysStageInner').width() - (day_width * 12));
      
      // set range in selector
      $('#drNumFrom').html($('div.day.active:first').html());
      $('#drNumTo').html($('div.day.active:last').html());
      
      /**
       * show range
       */
      showRange();
    }
  );
}

/**
 * sets the curr month tab and scrolls if needed
 */
function setCurrMonth()
{
  // set active
  $('div#' + $('#curr_month').val()).addClass('active');
  
  // slide left or righ based on current month
  if($('#curr_month').val() < 7)
  // transition to x = 0
  {
    $('#calNavMonthsStageInner').animate({"left": "0px"}, 'slow');
  }
  else
  // transition to y = 0
  {
    $('#calNavMonthsStageInner').animate({"left": "-43px"}, 'slow');
  }
}

/**
 * shows the selected range
 */
function showRange()
{
  // get start day
  var start_day_div = $('div.day.active:first');
  
  // get position (date)
  var day_num = start_day_div.html();
  
  // calc required offset to show at far left
  var offset = (day_num - 1) * day_width;
  
  // adjust if greater than max_offset
  if(offset > max_offset)
  {
    offset = max_offset;
  }
  
  // scroll
  $('#calNavDaysStageInner').animate({'left': '-=' + offset + 'px'}, 'slow');
}

/**
 * on mouse over of day, lookup event (if has class full)
 */
function getDayEvents(day_div)
{
  console.log('getDayEvents: ' + $(day_div).attr('class'));
  
  if($(day_div).hasClass('full'))
  {
    console.log('lookup day');
    
    // get day
    var day = $(day_div).html();
    
    // format date
    var date_str = new Date();
    
    date_str.setFullYear(
      $('#curr_year').val(),
      $('#curr_month').val() - 1,
      day
    );
    
    // enter date into title
    $('#dayPopDate').html(date_str.toDateString());

    // send ajax request
    $('#dayPopInner ul').load(
      '/eventCalendar/getDayEvents',
      { req_day: day },
      function(){
        $('#dayPopLoading').hide();
      }
    );
    
    // position popup to div
    var day_offset = $(day_div).offset();
    $('#dayPopWrap').css('left', day_offset.left - 108);
    $('#dayPopWrap').css('top', day_offset.top + 45);
    
    // show popup
    $('#dayPopInner ul').html();
    $('#dayPopLoading').show();
    $('#dayPopWrap').show();
  }
  else
  {
    console.log('day empty');
  }
}