function notify(m) { alert(m); }

$(document).ready(function() {
	if (!$('h3.product').length) return;
	
	function addCommas(nStr)
	{
		nStr += '';
		x = nStr.split('.');
		x1 = x[0];
		x2 = x.length > 1 ? '.' + x[1] : '';
		var rgx = /(\d+)(\d{3})/;
		while (rgx.test(x1)) {
			x1 = x1.replace(rgx, '$1' + ',' + '$2');
		}
		return x1 + x2;
	}
	
	var price_ranges = [];
	var price_type = special_offer ? 'offer' : (($('.bulk-discounts').length == 1) ? 'ranged' : 'variant');
	
	if ($('.bulk-discounts').length) {
		var discounts = $('.bulk-discounts');
		discounts.find('tbody tr').each(function() {
			var range = /((\d+)\+)|((\d+)(.*?)(\d+))/.exec($(this).find('td:eq(0)').text());
			if (!range[4]) range = [parseInt(range[2]), 0];
			else range = [parseInt(range[4]), parseInt(range[6])];
			var price = /([\d\.,]+)/.exec($(this).find('td:eq(1)').text().replace(',', ''))[1];
			price_ranges.push([range, parseFloat(price)]);
		})
	}

	var rows = 0;
	
	function genQuantity() {
		var html = '<select class="quantity" name="quantity[]">';
		for (var i = 1; i <= 50; i++) {
			html += '<option value="' + i + '">' + i + '</option>';
		}
		return html + '</select>';
	}
	
	function fixPrices() {
		// we also fix weight. did i mention that?
		if (price_type == 'ranged') {
			var qty = 0;
			var weight = 0;
			$('.artwork-add-list select.quantity').each(function() {
				qty += parseInt($(this).val());
			});
			var weight = (poster ? 0.5 : 0) + qty * variant_weights[default_variant];
		//	var sel_quantity = $(this).val();
			for (var i = 0; i < price_ranges.length; i++) {
				if ((price_ranges[i][0][0] <= qty && price_ranges[i][0][1] >= qty) || (price_ranges[i][0][0] <= qty && price_ranges[i][0][1] == 0)) {
					$('.artwork-add-list tbody tr').each(function() {
						var sel_qty = parseInt($(this).find('select.quantity').val());
						$(this).find('.row-price span').text('£' + addCommas((price_ranges[i][1] * sel_qty).toFixed(2)));
					});
				}
			}
			$('.total_weight').text(weight.toFixed(2));
		}
		else if (price_type == 'variant') {
			var weight = poster ? 0.5 : 0;
			$('.artwork-add-list tbody tr').each(function() {
				if (!$(this).find('.quantity').length) return;
				var variant = $(this).find('.variantsel').val();
				var qty = $(this).find('.quantity').val();
				var price = variant_prices[variant];
				weight += variant_weights[variant] * qty;
				$(this).find('.row-price span').text('£' + addCommas((price * qty).toFixed(2)));
			});
			$('.total_weight').text(weight.toFixed(2));
		}
		else if (price_type == 'offer') {
			var weight = poster ? 0.5 : 0;
			$('.artwork-add-list tbody tr').each(function() {
				if (!$(this).find('.quantity').length) return;
				var price = special_offer;
				var qty = $(this).find('.quantity').val();
				weight += variant_weights[default_variant] * qty;
				$(this).find('.row-price span').text('£' + addCommas((price * qty).toFixed(2)));
			});
			$('.total_weight').text(weight.toFixed(2));
		}
		
	}
	
	function wireVariants($row) {
		var selector_list = $row.find('.attribute-selector');
		$row.find('.attribute-selector').change(function() {
			var t = $(this);
			if (t.val() == '0') {
				var tidx = selector_list.index(t);
				for (var i = tidx + 1; i < selector_list.length; i++) {
					var ts = $(selector_list.get(i));
					ts.attr('disabled', 'disabled');
					ts.find('option').css('disabled', '');
					ts.attr('selectedIndex', 0);
				}
				//$('#varsubmit').attr('disabled', 'disabled');
			}
			else {
				var tidx = selector_list.index(t);
				var ts = $(selector_list.get(tidx+1));
				if (ts) {
					ts.attr('disabled', '');
				}

				// get selected values
				var sel_values = [];
				for (var i = 0; i <= tidx; i++) {
					var ts = $(selector_list.get(i));
					if (ts.val() == 0) break;
					sel_values.push(parseInt(ts.val()));
				}

				var matching_variants = [];
				while (!matching_variants.length) {
					matching_variants = [];
					for (var vid in variant_values) {
						var add = true;
						for (var i = 0; i < sel_values.length; i++) {
							if (!($.inArray(sel_values[i], variant_values[vid]) >= 0)) {
								add = false;
								break;
							}
						}
						if (add) {
							matching_variants.push(vid);
						}
					}

					if (!matching_variants.length) sel_values.pop();
					if (!sel_values.length) break;
				}
				// get real matching variant that matches all selected values
				var rsel_values = [];
				for (var i = 0; i < selector_list.length; i++) {
					var ts = $(selector_list.get(i));
					if (ts.val() == 0) break;
					rsel_values.push(parseInt(ts.val()));
				}

				var real_variant = [];


				for (var vid in variant_values) {
					var add = true;
					for (var i = 0; i < rsel_values.length; i++) {
						if (!($.inArray(rsel_values[i], variant_values[vid]) >= 0)) {
							add = false;
							break;
						}
					}
					if (add) {
						real_variant.push(vid);
					}
				}
				if (real_variant.length == 1) {
					//$('#varsubmit').attr('disabled', '');
				}
				else {
					//$('#varsubmit').attr('disabled', 'disabled');
				}
				if (real_variant.length) {
					real_variant = real_variant[0];
					$row.find('.variantsel').val(real_variant);
					//priceChanger(real_variant);
				}


				// get values available to choose
				var available_values = [];
				for (var i = 0; i < matching_variants.length; i++) {
					var values = variant_values[matching_variants[i]];
					available_values = $.merge(available_values, values);
				}
				available_values = $.unique(available_values);

				for (var i = tidx + 1; i < selector_list.length; i++) {
					var ts = $(selector_list.get(i));
					ts.find('option').each(function() {
						if ($(this).val() == 0) return;
						if ($.inArray(parseInt($(this).val()), available_values) == -1) {
							$(this).attr('disabled', 'disabled');
							if ($(this).parent().val() == $(this).val()) $(this).parent().val('0');
						}
						else {
							$(this).attr('disabled', '');
						}
					});
				}

			}
			fixPrices();	
		});
	}
	
	function artwork(e) {
		rows++;
		$('.aec').fadeIn(400);
		
		var attribute_cols = '';
		
		$('.attribute-proto').each(function() {
			attribute_cols += '<td>' + $(this).clone().find('select').addClass('attribute-selector').end().html() + '</td>';
		});
		var button = '<input type="button" value="Upload Artwork" />';
		if (!logged_in) button = "Please <a href='/login'>log in</a> to upload artwork";
		var row = $(
			'<tr>' +
			(requires_artwork ? '	<td class="col-artwork"><div style="text-align: center;"><input type="hidden" name="artwork_id[]" value="0" />' + button + '</div></td>' : '') +
			attribute_cols +
			'	<td>' + genQuantity() + '<input type="hidden" name="variant[]" class="variantsel" value="' + default_variant + '" /></td>' +
			'	<td class="row-price"><span>?</span></td>' +
			'	<td class="col-action"><img src="/skin/displayunlimited/image/product-del.png" /></td>' +
			'</tr>'
		).find('input').click(function() {
			var span = $(this);
			
			show_dialog('artwork', function(result) {
				span.parent().parent().html($('<div><input type="hidden" name="artwork_id[]" value="' + result.artwork_id + '" /><img src="/artwork/get/' + result.artwork_id + '/thumbnail" style="height: 48px;" /> ' + result.artwork_filename + '</div>'));
			});
		}).end().find('.col-action img').css('cursor', 'pointer').click(function() {
			$(this).parent().parent().remove();
			rows--;
			if (!rows) {
				$('.aec').hide();
			}
			fixPrices();
		}).end().find('select.quantity').change(function() {
			fixPrices();
		}).end();
		
		if (price_type == 'variant') wireVariants(row);
		
		$('.artwork-add-list tbody .add-row').before(row);
		fixPrices();
	}
	
	$('.artwork-selector').live("click", artwork);
	
	$('.product-add-artwork').click(function() {
		$('.artwork-column').append($('<input type="button" value="Select artwork" name="artwork" class="artwork-selector" />'));
		$('.quantity-column').append($('<br />'));
		$('.quantity-column').append($('.quantity-column').find('select').eq(0).clone());
	});
	
	$('.add-exhibition').click(function() {
		$(this).parents('form').submit();
	});

	$('.thumb').click(function() {
		var newSrc = $(this).find('img').get(0).src.replace('thumbnails/', '');
		$('.product-img').get(0).src = newSrc;
	});
	
	artwork();

});