(function($){
  $(document).ready( function() {

    $('#searchdetailfrm #select_type').change(function() {
      if( $(this).val() == 'all' ) {
        $('#searchdetailfrm #news_type').hide();
        $('#searchdetailfrm #news_type').attr('disabled',true);

        $('#searchdetailfrm #product_type').hide();
        $('#searchdetailfrm #product_type').attr('disabled',true);
      };
      if( $(this).val() == 'news' ) {
        $('#searchdetailfrm #news_type').show();
        $('#searchdetailfrm #news_type').removeAttr('disabled');

        $('#searchdetailfrm #product_type').hide();
        $('#searchdetailfrm #product_type').attr('disabled',true);
      }
      if( $(this).val() == 'products' ) {
        $('#searchdetailfrm #product_type').show();
        $('#searchdetailfrm #product_type').removeAttr('disabled');

        $('#searchdetailfrm #news_type').hide();
        $('#searchdetailfrm #news_type').attr('disabled',true);
      }
    });

    $('#pubdetail-left a.cover_images').click(function() {
      $('img.main_image').hide();
      $(this).relatedElement().show();
      return false;
    });

    $('.conference_tabs a').click(function() {
      $('.conference_tab_contents').hide();
      $('div[data-tab-name="'+$(this).attr('rel')+'"]').show();
      return false;
    });

    ////////////////////////////
    //  Cart Page JavaScript  //
    ////////////////////////////
    $.enableCartQuantities();

    $('#cart-main .quantity input[type=text]').live('change', function() {
      var val = Math.abs(parseInt($(this).val()));
      if ( val < 1 ) { val = 1; }
      if ( isNaN(val) ) { val = 1; }
      if ( val > 99 ) { val = 99; }
      $(this).val( val );
      $(this).siblings('.spinner').show();
      $(this).attr('readonly', true);

      $.ajax({
        url: $(this).parent('form').attr('action')+'.js',
        type: 'PUT',
        data: {'cart_item[quantity]': $(this).val()},
        success: function(html) {
          $('#cart-details').html(html);
          $.reloadCart();
          $.enableCartQuantities();
        },
        error: function(xhr, textStatus, errorThrown) {
          $.reloadCart();
        }
      });

      return false;
    });

    $('button.quantity_updown, a.quantity_updown').live('click', function() {
      var el = $(this).parents('.quantity').find('input[type=text]');
      if ( el.attr('readonly') ) { return false; }
      if ( $(this).hasClass('up') )
      {
        el.val(parseInt(el.val())+1);
      } else {
        el.val(parseInt(el.val())-1);
      }
      if ( parseInt(el.val()) < 1 ) { el.val(1) }
      el.trigger('change');
      return false;
    });

    $('div.quantity input#quantity').change( function() {
      var val = Math.abs(parseInt($(this).val()));
      if ( val < 1 ) { val = 1; }
      if ( isNaN(val) ) { val = 1; }
      if ( val > 99 ) { val = 99; }
      $(this).val( val );
    });

    $('#cart_table .remove_item').live('click', function() {
      $.ajax({
        url: $(this).attr('href'),
        type: 'DELETE',
        success: function(html) {
          $('#cart_table').html(html);
          $.reloadCart();
        },
        error: function(xhr, textStatus, errorThrown) {
          $.reloadCart();
        }
      });
      return false;
    });


    $('#cartinfo-left button.frmbutton.add').click(function() {
      $('#add_spinner').show();
      $.ajax({
        url: $(this).attr('href'),
        type: 'POST',
        data: {'cart_item[quantity]': $('#quantity').val(), 'cart_item[product_id]': $(this).attr('data-product-id')},
        success: function() {
          $('#add_spinner').hide();
          if ( $.browser.msie ) {
            $('#add_success').show();
            setTimeout("$('#add_success').hide();", 6000);
          } else {
            $('#add_success').show().fadeOut(6000);
          }
          $.reloadCart();
        },
        error: function(xhr, textStatus, errorThrown) { }
      });
      return false;
    });

    $('#formats a.frmbutton_smalladd').click(function() {
      var button = $(this);
      button.parent().find('.adding').show();
      $.ajax({
        url: $(this).attr('href'),
        type: 'POST',
        data: {'cart_item[quantity]': $(this).prev('select').val(), 'cart_item[product_id]': $(this).attr('data-product-id')},
        success: function() {
          button.parent().find('.adding').hide();
          button.parent().find('.added').show().fadeOut(6000);
          $.reloadCart();
        },
        error: function(xhr, textStatus, errorThrown) { }
      });
      return false;
    });


    // FAQ show/hide answer code
    $('div.faq div.question').click(function() {
      $(this).parent().find('div.answer').toggle();
      return false;
    });

    $('#search_box, #query').click( function() {$(this).val('').unbind('click');} );

    $('.fancybox').fancybox({titleShow: false});
    
    $('.paginated_list_container .pagination a').live('click', function() {
      $(this).parents('.paginated_list_container').load($(this).attr('href').replace(/(#.*)?$/, '&format=js$1'));
      return false;
    });
    
    $('#cart_terms_and_conditions').change( function() {
      var button = $('.button-checkout').removeClass('inactive').attr('disabled', null);
      if ( !$(this).is(':checked') ) { button.addClass('inactive').attr('disabled', 'disabled'); }
    }).change();
    
    // IE Fix
    if ($.browser.msie) {
      $('input[type="checkbox"]').click(function() {
        this.blur();
        this.focus();
      });
      $('button#checkout-button').click(function() {
        $(this).parents('form').submit();
      });
    }

    $('button#top-checkout-button').click(function() {
      $('form#checkout-form').submit();
    });

  });

  $.fn.extend({
    relatedElement: function() {
      return $('#'+$(this).attr('rel'));;
    }
  });

  $.extend({
    reloadCart: function (){ $('span#cart').load('/cart.js'); },
    enableCartQuantities: function(){ $('.quantity form input[type=text]').attr('disabled',''); }
  });
})(jQuery);

Function.prototype.curry = function() {
  var fn = this, args = Array.prototype.slice.call(arguments);
  return function() {
    return fn.apply(this, args.concat(
      Array.prototype.slice.call(arguments)));
  };
};