jQuery(function(){
  $('#overlay').fadeTo(0, 0);
  
  $('#barcode_form').bind('submit', function(e) {
    $(this).ajaxSubmit({
      target: '#order_item',
      success: loginRedirectCheck
    });
    $('#barcode').attr({'value': ''});
    return false;
  });

  $('.auto-focus').ready( function() {
    $('.auto-focus').focus();
  });
  
  $('.collapse').bind('click', function(e) {
    if ($(this).hasClass('opened'))
    {
      $(this).removeClass('opened');
      $(this).next().hide();
    } else {
      $(this).addClass('opened');
      $(this).next().show();
    }
    return false;
  });
  $('#update_stock_form').submit( function(e) {
    var barcode = $('#id_barcode').attr('value');
    $(this).ajaxSubmit({
      error: function() {
        $('#messages').remove();
        $('#content_container').prepend('<div id="messages">'
          +'<div class="sidebar-left"><p>Hinweis</p></div>'
          +'<div class="content messages"><ul><li>'
          +'Barcode '+ barcode +' wurde nicht gefunden.</li></ul></div></div>');
      },
      success: function(data) {
        $('#item'+barcode).html($(data).eq(0).html());
        $('#messages').remove();
        $('#content_container').prepend($(data).eq(2).html());
        loginRedirectCheck();
      }
    });
    $('#id_barcode').attr({'value': ''});
    return false;
  });

  $('.order-item-cancel > fieldset > input').live('click', function(e) {
    var $form = $(this).parent('fieldset').parent('form');
    $($form).ajaxSubmit({
      target: $($form),
      success: loginRedirectCheck
    });
    return false;
  });

  $('[id*=reservation_form] > fieldset > input').live('click', function(e) {
    var $form = $(this).parent('fieldset').parent('form');
    var id = $($form).parent().attr('id');
    $($form).ajaxSubmit({
      target: '#'+id,
      success: loginRedirectCheck
    });
    return false;
  });

  $('[class*=date_id]').live('mouseover', function(e) 
  {
    cl = $(this).attr("class").split(' ');
    $('.'+cl[1]).addClass('over');
  });
  
  $('[class*=date_id]').live('mouseout', function(e)
  {
    $('[class*=date_id]').removeClass('over');
  });
  
  $('.has_hours').live('mouseover', function(e)
  {
    $('.has_hours').removeClass('over');
    $(this).addClass('over');
  });
  
  $('.has_hours').live('mouseout', function(e)
  {
    
    $(this).removeClass('over');
  });

  $('.has_hours').live('click', function(e)
  {
    $('.has_hours').removeClass('over').removeClass('clickover');
    $(this).addClass('clickover');
    $('.calendar-hours').hide();
    $('.date-hour-'+$(this).attr('title')).fadeIn();
  });

  $('input.quantity').live('keyup', function(e)
  {
    delay = 800;
    if (e.keyCode == 13)
    { 
      delay = 0;
      $(this).blur();
    };
    globals.current_requests++;
    var $theForm = $(this).parent('fieldset').parent('form');
    $theForm.animate({opacity: 1}, (delay/globals.current_requests), function() {
      if (globals.current_requests == 1)
      {
        $theForm.ajaxSubmit({
          target: '#basket',
          beforeSubmit: toggleOverlay(0.7),
          success : formSuccess
        });
      } else {
        globals.current_requests--;
      }
    });
    return false;
  });
  
  $('.basket_form_multiple').live('click', function(e) {
    if (globals.current_requests > 1)
      return false;
    $('#overlay').css({
      width: $(this).width()+20,
      height: $(this).height()+20,
      top: $(this).offset().top-12,
      left: $(this).offset().left-12-$('body').scrollLeft()
    });

    $('#overlay').show();

    var pk = $(this).children('fieldset').children(':checked').val();
    globals.current_requests++;
    $(this).next().next('div').hide();
    if (pk != undefined)
    {
      $(this).ajaxSubmit({
        target: '#basket',
        beforeSubmit: toggleOverlay(0.7),
        success : formSuccess
      });
    } else {
      var pk = $(this).children('fieldset').children(':checkbox').val();
      toggleOverlay(0.7);
      $.post('/buchung/basket/remove/', 
        {loanable_item_id: pk}, 
        function(data, textStatus) {
          $('#basket').html(data);
          formSuccess(data, textStatus);
      });
    }
  });
  
  $('.basket_form').live('click', function(e)
  {
    var cl = $(this).attr("class").split(' ');
    
    $('#overlay').css({
      width: $(this).width()*$('.'+cl[1]).length,
      height: $(this).height(),
      top: $(this).offset().top,
      left: $('.'+cl[1]+':first').offset().left-$('body').scrollLeft()
    });
    $('#overlay').show();
    
    globals.current_requests++;
    $(this).ajaxSubmit({
      target: '#basket',
      beforeSubmit: toggleOverlay(0.7),
      success : formSuccess
    });
    
    var action = $(this).attr('action');
    if (!$(this).hasClass('selected')) {
      action = action.replace('add','remove');
      $('.'+cl[1]).addClass('selected').removeClass('over');
    } else {
      $('.'+cl[1]).removeClass('selected').removeClass('over');
      action = action.replace('remove','add');
    }
    $('.'+cl[1]).attr({'action': action});

    return false;
  });
  
  $('.get-category-items').live('click', function(e)
  {
    var $li = $(this).parent('p').parent('li');
    var href = $(this).attr('href');
    $li.children('.category_details').toggle();
    var $target = $li.next('li');
    if ($target.html() == "")
    {
      $target.show();
      $target.load(
        href,
        {},
        function (responseText, textStatus, XMLHttpRequest) {
            loginRedirectCheck(responseText);
      });
    } else {
      $target.toggle();
    }

    return false;
  });
  
  $('[class*=get-calendar]').live('click', function(e)
  {
    if ($(this).hasClass('opened'))
    {
      if (!$(this).parent().hasClass('first'))
      {
        $(this).parent().addClass('margin_top');
      }
      $(this).parent().addClass('margin_bottom');
      $(this).removeClass('opened');
      $(this).next().show();
      var id = $(this).attr("title");
      if ($(this).attr('href') == "")
      {
        $('#item-calendar-'+id).text('Eine oder mehrere erforderliche Vorraussetzungen zur Ausleihe fehlen...');
        return false;
      }
      $('#item-calendar-'+id).text('Kalender wird geladen...');
      $('#item-calendar-'+id).load(
        $(this).attr('href'), 
        {}, 
        function (responseText, textStatus, XMLHttpRequest) {
          loginRedirectCheck(responseText);
      });
    } else {
      $(this).addClass('opened');
      $(this).next().hide();
      $(this).parent().removeClass('margin_bottom').removeClass('margin_top');
    }
    return false;
  });
  
  $('.date-booked').live('click', function(e)
  {
    $('.tooltip').remove();
    globals.stickyToolTip = true;
    showTooltip(this, e);
    $('.tooltip').prepend('<a href="javascript:removeTooltip()">X </a>');
  });
  
  $('.date-booked').live('mouseover', function(e) {
    if (!globals.stickyToolTip) {
      showTooltip(this, e);
    };
  });
  
  $('.date-booked').live('mouseout', function(e) {
    if (!globals.stickyToolTip) {
      removeTooltip();
    }
  });
  
  $('.show_all_periods').live('click', function () {
    $(this).next('.booking_period_list').toggle();
  });
  $('.show_all_periods_for_id').live('click', function() {
    var id = $(this).attr('href').substr(1);
    $('.item_'+id).toggle();
  });
  
  $('.basket_remove > fieldset > input').live('click', function (e) {
    var id = $(this).siblings('[name=loanable_item_id]').attr('value');
    var $form = $(this).parent('fieldset').parent('form');
    $($form).ajaxSubmit({
      target: '#basket',
      success : basketReloadSuccess
    });
    var f = $('[class^=basket_form][class*='+id+']');
    var action = f.attr('action');
    if (action !== undefined)
    {
      f.removeClass('selected');
      f.attr({'action': action.replace('remove', 'add')});
    }
    return false;
  });
  
  $('.datepicker').attr('readonly', 'readonly');
  $('.datepicker').datepicker();
  $('.datepicker').datepicker('option', 
    {dateFormat: 'yy-mm-dd',
     constrainInput: false,
     dayNamesMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
     dayNames: ['Sonntag', 'Montag', 'Dienstag',
      'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
     duration: 0,
     firstDay: 1,
     gotoCurrent: true,
     monthNames: ['Januar','Februar','März',
      'April','Mai','Juni','Juli','August',
      'September','Oktober','November','Dezember'],
     nextText: "Nächster Monat",
     prevText: "Vorheriger Monat",
     showAnim: "slideDown"
    });
  $('.search_start_date').datepicker('option',
    { beforeShow: getStartDateRange }
  );
  $('.search_end_date').datepicker('option',
    { beforeShow: getEndDateRange }
  );
  
  $('#booking_period_search_form').bind('reset', function() {
    $('.item_bp_checkbox, .basket_form_multiple').remove();
    $('input#id_search_start_date,input#id_search_end_date')
      .attr('value', '');
    $.post("/buchung/basket/set_booking_period/", {reset: '1'}, function() {});
    return false;
  });
  
  $('#booking_period_search_form').live('submit', function() {
    $.post('/buchung/basket/set_booking_period/', 
    {
      search_start_date: $('input#id_search_start_date').val(),
      search_end_date: $('input#id_search_end_date').val()
    }, function() 
    {

      $('#inventory_list > .items:not(:empty)').each( function(i) {
        var $target = $(this);
        $target.load(
          $(this).prev('li').children('p').children('a').attr('href'),
          {},
          function (responseText, textStatus, XMLHttpRequest) {
              loginRedirectCheck(responseText);
        });
      });
      
    });
    return false;
  });
  
});

function getStartDateRange (input) {
  max = getDateOffset($('#id_search_end_date').val());
  return {
    minDate: 0,
    maxDate: (0 < max ? max : null)
  };
};

function getEndDateRange (input) {
  min = getDateOffset($('#id_search_start_date').val());
  return {
    minDate: (0 < min ? min : 0),
    maxDate: min+60
  };
};

function getDateOffset (dateString) {
  if (dateString.indexOf('-') == -1)
    return null;

  var arr  = dateString.split('-');
  if (!arr.length == 3)
    return null;
  
  var today = new Date();
  var d = new Date(arr[0], arr[1]-1, arr[2]);
  
  var diff = Math.ceil((d - today)/86400000);

  return diff;
}

function loginRedirectCheck(responseText) {
  if (responseText.indexOf('Anmelden') != -1) {
    window.location = "/benutzer/login/";
  }
}

function toggleOverlay (val) {
  $('#overlay').stop().fadeTo(500, val, function() {
    if (val == 0) {
      $('#overlay').hide();
    };
  });
}

function basketReloadSuccess(responseText, statusText)
{
  loginRedirectCheck(responseText);
}

function formSuccess (responseText, statusText) {
  loginRedirectCheck(responseText);
  toggleOverlay(0);
  $('.item_changed').animate({backgroundColor: 'white'}, 2000);
  globals.current_requests--;
}

function showTooltip (elem, e) {
  content = $(elem).next('span').html();
  if (content != null)
  {
    $('body').prepend('<div class="tooltip">Gebucht von '+content+'</div>');
    $('.tooltip').css({'left': e.pageX+10, 'top': e.pageY+10 });
  }
}
function removeTooltip () {
  globals.stickyToolTip = false;
  $('.tooltip').animate({margin: 0}, 1500).remove();
}

var globals = {
  stickyToolTip: false,
  current_requests: 0
};

