$(document).ready(function(){
	$('.color-choices').enable_color_choice();
	$('.detail-photos').enable_detail_photo_switcher();
	$('.large-photos').enable_large_photo_switcher();	
	$('.add-to-cart-on-click, .add-to-cart').add_to_cart_click();
	$('.cart-items > ul > li > form > button').remove_from_cart_click();
		
	$('.products-list li:nth-child(3n)').addClass('third');
	$('.products-list li:nth-child(2n)').addClass('second');	
	
	$('li.has-hover-state').hover(function(){
		$(this).addClass("over");
	}, function(){
		$(this).removeClass("over");
	});
	
	$('.detail-nav').next_photo();
	$('select#sizes').set_quantities_for_size();
	$('select#sizes').set_photos_for_skus();
	$('a.sizing-chart').get_sizing_chart();

	enable_smooth_scroll();
});

jQuery.fn.next_photo = function()
{
	return this.each(function(){
		var total = $('ul.product-photos li').length;
		var position = 0;
		if (total > 1) 
		{
			$('.detail-nav a.next').removeClass('inactive');
			$('.detail-nav a.prev').addClass('inactive');
			$('.detail-nav a.next').click(function(){
				if (position < (total-1))
				{
					position++;					
					$('.detail-nav .prev').removeClass('inactive');
					$('ul.product-photos li').addClass('hidden');
					$('ul.product-photos li:eq('+position+')').removeClass('hidden');
					if (position >= length) $('.detail-nav .next').addClass('inactive');
				}
				return false;
			});
			$('.detail-nav a.prev').click(function(){
				if (position > 0)
				{
					position--;
					$('.detail-nav .next').removeClass('inactive');
					$('ul.product-photos li').addClass('hidden');
					$('ul.product-photos li:eq('+position+')').removeClass('hidden');
					if (position == 0) $('.detail-nav .prev').addClass('inactive');
				}
				return false;
			});			
		}
	});
};

jQuery.fn.add_to_cart_click = function(){
	return this.each(function(){
		{
			var form = $(this).parent().parent().parent();
			$(form).form_has_dialog("left", function(data, new_ele){
				$('div.header').replaceWith(data.html);
				$('.cart.hidden').set_check_cart();
				$('.cart, .header').color_alert();
			});
			$(this).click(function(){  
				var cart_errors = ''

				if (!$('select[name=quantity]').val())
					$('td.field-errors.quantity').show();
				else
					$('td.field-errors.quantity').hide();

				if (!$('select[name=key]').val())
					$('td.field-errors.size').show();
				else
					$('td.field-errors.size').hide();
				
				if (cart_errors)
					alert(cart_errors);
				else
				{
					$(form).submit();
					return false;
				}
			});
		}
	});
};

$.fn.remove_from_cart_click = function(){
	return this.each(function(){
		var form = $(this).parent();
		$(form).form_has_dialog("left", function(data, new_ele){
			$('div.header').replaceWith(data.html);
			$('.cart.hidden').set_check_cart();
			$('.cart, .header').color_alert();
		});
	});
}

$.fn.color_alert = function()
{
	return this.each(function()
	{
		$(this).css("background-color", "#ffe400").animate({backgroundColor: "#fff200"}, 500);
	});
}

$.fn.enable_color_choice = function(){
	return this.each(function(){
		var ele = this;
		ele.name_of_color = $('a.selected', this).html();
		$(ele).append('<dd class="color-name">'+ele.name_of_color+'</dd>');		
		// On hover, append a DD with the name of the color. Remove on mouseout.
		$('.color-choice', ele).hover(function(){
			var name_of_color = $('a', this).html();
			$('.color-name', ele).html(name_of_color);
		}, function(){
			$('.color-name', ele).html(ele.name_of_color);			
		});
		$('.color-choice', ele).click(function(){
			var name_of_color = $('a', this).html();
			ele.name_of_color = name_of_color;
			$('.color-name', ele).html(name_of_color);
			$('a.selected', ele).removeClass('selected');
			$('a', this).addClass('selected');
			var newsrc = $('a', this).attr('href');
			$('.artwork-image').attr('src', newsrc);
			return false;
		});
	});
};

$.fn.enable_detail_photo_switcher = function(){
	return this.each(function(){
		var ele = this;
		var swapto = $('.detail-photo').get(0);
		
		$('ol li', ele).click(function(){      
			var new_photo = $('a', this).attr('href');
			$(swapto).attr('src', new_photo);
			$('li', ele).removeClass('active');
			$(this).addClass('active');
			return false;
		});
	});
};

$.fn.enable_large_photo_switcher = function(){
	return this.each(function(){
		var ele = this;
		var swapto = $('.large-photo').get(0);
		
		$('li', ele).click(function(){      
			var new_photo = $('a', this).attr('href');
			$(swapto).attr('src', new_photo);
			$('li', ele).removeClass('active');
			$(this).addClass('active');
			return false;
		});
	});
};

$.fn.init_sizes = function()
{
	return this.each(function()
	{
		$(this).remove_duplicates();
	});
}

function arr_to_options(arr, initial)
{
	var options = '<option value="">'+initial+'</option>';
	$.each(arr, function(key, value)
	{
		options += '<option value="'+value.val+'">'+value.name+'</option>';
	});

	return options;
}

$.fn.get_sizing_chart = function()
{
	return this.each(function()
	{
		$('#sizing-chart a').live('click', function()
		{
			$.unblockUI();
		});

		$(this).click(function()
		{
			$.getJSON($(this).attr('href'), function(data)
			{
				$.blockUI({
					message: data.html,
					css: {
						top: '20%',
						cursor: 'default'
					}
				});
			});
			return false;
		});
	});
}

$.fn.set_photos_for_skus = function()
{
	return this.each(function()
	{
		$(this).change(function()
		{
			$.getJSON('/fabric/'+$(this).val(), function(data)
			{
				if (data.image)
				{
					$('.detail img').replaceWith(data.image);
				}
				if (data.desc)
				{
					$('.brief-desc > div').html(data.desc);
				}
			});
		});
	});
}

$.fn.set_quantities_for_size = function()
{
	return this.each(function()
	{
		$(this).change(function()
		{
			var quantity = Number(quantities[$(this).val()]);

			var options = '<option val="">QUANTITY</option>';

			for (var i=1; i < quantity+1; i++)
			{
				options += '<option val='+i+'>'+i+'</option>';
			}

			$('select#quantity').html(options);
		});
	});
}

function get_matching_by(field,attr,arr)
{
	var matches = new Array();
	$.each(arr, function(index, value)
	{
		if (value[field+'_pk'] == value[field+'_pk'] || pk==null)
		{
			var item = { 
				'val': value[field+'_pk'], 
				'name': value[field+'_name'] 
			};

			matches.push(item);
		}
	});

	return matches;
}

function get_item_by_pk(pk,arr)
{
	$.each(arr, function(key, value)
	{
		if (value.pk == pk) return value;
	});
}

$.fn.remove_duplicates = function()
{
	return this.each(function()
	{
		var a = new Array();
		$(this).children("option").each(function(x){
			test = false;
			b = a[x] = $(this).val();
			for (i=0;i<a.length-1;i++)
			{
				if (b ==a[i]) test =true;
			}
			if (test) $(this).remove();
		});
	});
} 

function enable_smooth_scroll() {
    function filterPath(string) {
        return string.replace(/^\//,'').replace(/(index|default).[a-zA-Z]{3,4}$/,'').replace(/\/$/,'');
    }

    var locationPath = filterPath(location.pathname);
    
    var scrollElement = 'html, body';
    $('html, body').each(function () {
        var initScrollTop = $(this).attr('scrollTop');
        $(this).attr('scrollTop', initScrollTop + 1);
        if ($(this).attr('scrollTop') == initScrollTop + 1) {
            scrollElement = this.nodeName.toLowerCase();
            $(this).attr('scrollTop', initScrollTop);
            return false;
        }    
    });
    
    $('a[href*=#]').each(function() {
        var thisPath = filterPath(this.pathname) || locationPath;
        if  (   locationPath == thisPath
                && (location.hostname == this.hostname || !this.hostname)
                && this.hash.replace(/#/, '')
            ) {
                if ($(this.hash).length) {
                    $(this).click(function(event) {
                        var targetOffset = $(this.hash).offset().top;
                        var target = this.hash;
                        event.preventDefault();
                        $(scrollElement).animate( { scrollTop: targetOffset - 104 }, 500);
                    });
                }
        }
    });
}


