function slideShow(elem) {
    return (function () {
        var next_elem = (elem.next().length > 0) ? elem.next() : $('#slide-images p:first');
        elem.fadeOut(1000);
        next_elem.fadeIn(1000);
        setTimeout(slideShow(next_elem), 5000);
    });
}

function billboardSlideShow(elem) {
    return (function () {
        var next_elem = (elem.next().length > 0) ? elem.next() : $('#billboard .billboard-slide:first');
        elem.fadeOut(1000);
        next_elem.fadeIn(1000);
        setTimeout(billboardSlideShow(next_elem), 10000);
    });
}

var SizeSelect = {
  $label: null,
  
  hoverOn: function () {
    if (SizeSelect.$label === null) {
      SizeSelect.$label = $(this).parents('ul').siblings('label').children('span');
    }
    
    var soldOutText = '';
    if (!$(this).hasClass('sold_out')) {
      $(this).addClass('current');
    } else {
      soldOutText = ' sold out';
    }
    
    SizeSelect.$label.text($(this).text() + soldOutText);
  },
  
  hoverOff: function () {
    if (!$(this).hasClass('sold_out')) {
      $(this).removeClass('current');
    }
    
    var $selectedSize = $(this).parent().children('.selected'),
        sizeText = $selectedSize.length ? $selectedSize.children('a').text() : '';
    SizeSelect.$label.text(sizeText);
  },
  
  click: function (event) {
    event.preventDefault();
    
    if (!$(this).parent().hasClass('sold_out')) {
      $(this).parent().siblings().removeClass('selected');
      $(this).parent().addClass('selected');
      $('#size_selection').val($(this).attr('rel'));
      SizeSelect.$label.text($(this).text());
    }
  }
};

$(document).ready(function () {
    if ($('#slide-images').length > 0) {
        var elem = $('#slide-images p:first');
        setTimeout(slideShow(elem), 4000);
    }

    (function () {
        if ($('.billboard-slide').length > 0) {
            var elem = $('#billboard .billboard-slide:first');
            elem.show();
            setTimeout(billboardSlideShow(elem), 8000);
        }
    })();
    
    if ($('#locate_page').length > 0) {
        if ($('.locations_page').length == 1) {
            $('#more_locations').hide();
        } else {
            $('#more_locations').click(function (event) {
                event.preventDefault();
                var page = $('.locations_page.current');
                var next_page = (page.next().length > 0) ? page.next() : $('.locations_page:first');
                page.hide('drop', { direction: 'down' }, 'slow');
                setTimeout(function () {
                    page.removeClass('current');
                    next_page.show('slide', { direction: 'up' }).addClass('current').css('opacity', '.99');
                }, 500);
            });
        }
    }
    
    $('#email_address').focus(function () {
        if ($(this).val() == 'Enter your email address here') {
            $(this).val('').css('color', '#222222');
        }
    });
    
    $('#mailinglist_form').submit(function (event) {
       event.preventDefault();
       var that = $(this);
       $.post($(this).attr('action'), $(this).serialize(), function (data, textStatus) {
           if (data.status == 'OK') {
               $(that).parent().append($("<h5>Thanks for Subscribing!</h5>").css('display', 'none').fadeIn());
               $(that).remove();
           } else {
               $(that).children('.errors').text(data.errors[0]).fadeIn();
           }
       }, 'json');
    });
    
    $('.view_spec').click(function (event) {
        event.preventDefault();
        $('.description').hide('drop', { direction: 'down' });
        $('.specs').show('slide', { direction: 'up' }).css('opacity', '.999');
    });
    
    $('.view_desc').click(function (event) {
        event.preventDefault();
        $('.specs').hide('drop', { direction: 'down' });
        $('.description').show('slide', { direction: 'up' }).css('opacity', '.999');
    });
    
    $('.item_info .views').hover(function () {
        $('.item_photos img').hide();
        $('.item_photos img.' + $(this).attr('rel')).show();
    });
    
    $('#size_select li').hover(SizeSelect.hoverOn, SizeSelect.hoverOff);  
    $('#size_select a').click(SizeSelect.click);
    
    $('body:not(#gift_card_page) #item_form button').click(function (event) {
      event.preventDefault();
      if ($('#size_select li:not(.sold_out)').length === 0) {
        $('.notifyme').trigger('click');
        return false;
      } else if ($('#size_selection').val() == 0) {
        $('#item_form .size_notice').fadeIn('slow');
        return false;
      }

      $('#item_form').submit();
    });
    
    $('#item_form .color_select li').hover(function () {
      $('#displayed_color').text($(this).children('a').text().toLowerCase());
      $('.item_photos div').hide();
      $('.item_photos div.color-' + $(this).children('a').attr('rel')).show();
      
      if ($(this).children('a').attr('data-price') !== undefined) {
        $('#item_form .price span.price').text('$' + $(this).children('a').attr('data-price'));
      } else {
        $('#item_form .price span span').text('$' + $('#item_form .price span span').attr('rel'));
      }
    }, function () {
      $('#displayed_color').text($('#displayed_color').attr('rel').toLowerCase());
      
      if ($('#displayed_color').attr('data-price') !== undefined) {
        $('#item_form .price span.price').text($('#displayed_color').attr('data-price'));
      } else {
        $('#item_form .price span span').text('$' + $('#item_form .price span span').attr('rel'));
      }
    });
    
    $('#item_form .color_select li').click(function (event) {
      event.preventDefault();
      var color_link = $(this).children('a');
      var that = $(this);
      
      $('#item_form .color_select li span.selected').remove();
      $(this).append("<span class=\"selected\">&nbsp;</span>");
      $('#displayed_color').attr('rel', color_link.text().toLowerCase());
      $('#color_selection').val(color_link.attr('rel'));
      
      if (color_link.attr('data-price') !== undefined) {
        $('#displayed_color').attr('data-price', '$' + color_link.attr('data-price'));
      } else {
        $('#displayed_color').removeAttr('data-price');
      }
      
      $.get($('#item_form .size').attr('rel'),
        {
          item_id: $('#cart_item').val(),
          color: $('#displayed_color').attr('rel').toLowerCase()
        },
        function (data, textStatus) {
          var buttonDiv = $('#item_form > div.column.last');

          if (data.length > 0) {
            $('#item_form .size').empty().append(data);
            $('#size_select li').hover(SizeSelect.hoverOn, SizeSelect.hoverOff);  
            $('#size_select a').click(SizeSelect.click);

            if (that.hasClass('not_available')) {
              $('#size_select li').addClass('sold_out');
            }

            if ($("#size_select li:not('.sold_out')").length > 0) {
              buttonDiv.show();
              $('#notifyme').hide();
            } else {
              buttonDiv.hide();
              $('#notifyme').show();
            }

			$('#item_form div.price > span').empty();
			$('#item_form div.price span').append($('#new_price').html());
			toggleNotification();
          }
        }
      );
    });
    
    if ($('#item_page .categories a.item.current').length > 1) {
        $('#item_page .categories > .products > ul').hide();
    }
    
    $('#shop_home_page .color_select li').hover(function () {
      var item = $(this).parent().parent();
      var price_elem = item.find('span.price');
      
      if ($(this).children('a').attr('data-price') !== undefined) {
        price_elem.text('$' + $(this).children('a').attr('data-price'));
      } else {
        price_elem.text('$' + price_elem.attr('rel'));
      }
      
      $.getJSON(
        item.attr('data-href'),
        {
          item_id: item.attr('rel'),
          color_id: $(this).children('a').attr('rel')
        },
        function (data, textStatus) {
          if (data.status == '200') {
            item.children('a.photo').children('img').attr('src', data.image_url);
          }
        }
      );
    });
    
    $('#copy_billing_to_shipping').click(function () {
        $('#billing_info input').each(function () {
            $('#shipping_' + $(this).attr('id')).val($(this).val());
        });
        
        $('#billing_info select').each(function () {
            $('#shipping_' + $(this).attr('id')).find('option[value=' + $(this).val() + ']').attr('selected', true);
        });
    });
    
    if ($('#nav_categories').height() > $('#side_column .categories').height()) {
	  var moreLinks = [
		'#press_page #side_column .more_link',
		'#journal_page #side_column .more_link',
		'#locate_page #side_column .more_link'
	  ];

      $(moreLinks.join()).click(function (event) {
        event.preventDefault();
        var mt = $('#nav_categories').css('margin-top').replace('px', '');
        var h  = $('#nav_categories').height();
        var ph = $('#side_column .categories').height();
        
        if (Math.abs(mt) + ph < h) {
          $('#nav_categories').animate({ marginTop: '-=' +  ph}, 1000);
        } else {
          $('#nav_categories').animate({ marginTop: '0'}, 1000);
        }
      });
      
      if ($('#side_column .categories a.current')) {
        var offset = $('#side_column .categories a.current').offset().top + 20;
        var cat_h  = $('#side_column .categories').height();
        var m      = (parseInt(offset / (cat_h + 16), 10) - 1) * -1;
        
        if (offset > cat_h && m <= -1) {
          $('#nav_categories').css('margin-top', (m * cat_h) + 'px');
        }
      }
    } else {
      $('#side_column .more_link').hide();
    }
    
    if ($('#shop_home_page #items').height() > $('#shop_home_page #main_content').height()) {
      $('#shop_home_page #main_content .more_link').click(function (event) {
        event.preventDefault();
        var mt = $('#shop_home_page #items').css('margin-top').replace('px', '');
        var h  = $('#shop_home_page #items').height();
        var ph = $('#shop_home_page #main_content').height();
        
        if (Math.abs(mt) + ph < h) {
          $('#shop_home_page #items').animate({ marginTop: '-=' +  ph}, 1000);
        } else {
          $('#shop_home_page #items').animate({ marginTop: '0'}, 1000);
        }
      });
    } else {
      $('#shop_home_page #main_content .more_link').hide();
    }
    
    $('#journal_page #main_content .entry:last .more_link').remove();
    
    $('#journal_page #main_content .entry .more_link').click(function (event) {
      event.preventDefault();
      var div = $(this).parents('div.entry');
      var target = (div.next().length) ? div.next() : false;
      
      if (target) {
        div.hide('drop', { direction: 'down' }, function () {
          target.show('slide', { direction: 'up' }).css('opacity', '.999');
        });
      } else {
        return;
      }
    });

    $('.availability_signup').delegate('.close_ajax', 'click', function (event) {
      event.preventDefault();
      $(this).parent().remove();
    });

    $('.availability_form').delegate('.close', 'click', function (event) {
      event.preventDefault();
      $(this).parents('.availability_form').fadeOut('fast');
    });

    $('.availability_signup').submit(function () {
      var form = $(this);
      $.post(form.attr('action'),
             form.serialize(),
             function (res) {
               var msg = $('<p class="msg">');
               if (res.status == 'ERR') {
                 msg.text(res.message).addClass('error');
                 msg.append('&nbsp;<a href="#" style="color:#999" class="close_ajax quiet">hide message</a>');

                 $('.availability_signup .signup .last .msg').remove();
                 $('.availability_signup .signup .last').prepend(msg);
               }

               if (res.status == 'OK') {
                 msg.text(res.message);
                 $('.availability_signup .signup .last .fields').hide();
                 $('.availability_signup .signup .last .msg').remove();
                 $('.availability_signup .signup .last').prepend(msg);
                 msg.append('<br/><br/><a href="#" style="color:#999" class="close quiet">close this panel</a>');
               }
             },
             'json'
            );
      return false;
    });

    var openAvailForm = function (colorName, isAvailable) {
      $('.availability_form').fadeIn('fast');
      $('.availability_signup .signup .last .fields').show();
      $('.availability_signup .signup .last .msg').remove();

      $('.availability_form .message').
        find('.spring_availability').toggle(!isAvailable).end().
        find('.out_of_stock').toggle(isAvailable);

      $('#notify_color').val(colorName);
    };

    $('body').delegate('.notifyme', 'click', function (event) {
      event.preventDefault();
      var swatch = $('ul.color_select li .selected').parents('li'),
          colorName = swatch.attr('data-color'),
          isAvailable = swatch.hasClass('available'),
          soldOut = $('#size_select li:not(.sold_out)').length === 0; 
      if (isAvailable && !soldOut) { return; }
      openAvailForm(colorName, isAvailable);
    });

    var buttonDiv = $('#item_form > div.column.last');
    if ($("#size_select li:not('.sold_out')").length > 0) {
      buttonDiv.show();
      $('#notifyme').hide();
    } else {
      buttonDiv.hide();
      $('#notifyme').show();
    }

	var toggleNotification = function () {
      var swatch = $('ul.color_select li .selected').parents('li'),
          isAvailable = swatch.hasClass('available'),
          soldOut = $('#size_select li:not(.sold_out)').length === 0; 
      if (isAvailable && !soldOut) { return; }
      $('.notifyme .spring_availability').toggle(!isAvailable);
      $('.notifyme .out_of_stock').toggle(isAvailable && soldOut);
	};
	toggleNotification();
});

$(window).load(function () {
    // Automatic side column filling
   (function () {
     var column = $('body.extended_page #side_column');
     if (column.length === 0) { return; }

     var container = $('#content .main_content'),
         containerHeight = container.height(),
         columnHeight = column.height();

     if (columnHeight < containerHeight) {
       $('#side_column').css('height', containerHeight);
     }
   })();
});

jQuery.fn.supersleight = function(settings) {
	settings = jQuery.extend({
		imgs: true,
		backgrounds: true,
		shim: '/images/layout/x.gif',
		apply_positioning: true
	}, settings);
	
	return this.each(function(){
		if (jQuery.browser.msie && parseInt(jQuery.browser.version, 10) < 7 && parseInt(jQuery.browser.version, 10) > 4) {
			jQuery(this).find('*').andSelf().each(function(i,obj) {
				var self = jQuery(obj);
				// background pngs
				if (settings.backgrounds && self.css('background-image').match(/\.png/i) !== null) {
					var bg = self.css('background-image');
					var src = bg.substring(5,bg.length-2);
					var mode = (self.css('background-repeat') == 'no-repeat' ? 'crop' : 'scale');
					var styles = {
						'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='" + mode + "')",
						'background-image': 'url('+settings.shim+')'
					};
					self.css(styles);
				}

				// image elements
				if (settings.imgs && self.is('img[src$=png]')){
					var imgStyles = {
						'width': self.width() + 'px',
						'height': self.height() + 'px',
						'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + self.attr('src') + "', sizingMethod='scale')"
					};
					self.css(imgStyles).attr('src', settings.shim);
				}

				// apply position to 'active' elements
				if (settings.apply_positioning && self.is('a, input') && (self.css('position') === '' || self.css('position') == 'static')){
					self.css('position', 'relative');
				}
			});
		}
	});
};

