ATGSvcs.rec_builder("bqCustomRecBuilder", 
	function (slot_name, rec_data) {

	// Set up the containing div
	var recBuilder = document.createElement("div");
	recBuilder.id = ATGSvcs.rec_id(slot_name, rec_data.productId);
	recBuilder.className = "cs-rec";

	// Product title & hyperlink
	var title = document.createElement("span");
	title.className = "recs-prodTitle";
	title.innerHTML = ATGSvcs.util.trunc(rec_data.name, 60);
	title.title = rec_data.name;
	
	var textLink = document.createElement("a");
	textLink.href = rec_data.url.replace("http://www.diy.com", "");
	textLink.appendChild(title);

	// Product image & link
	var imageSpan = document.createElement("span");
	imageSpan.className = "recs-prodImage";
	
	var image = document.createElement("img");
	var sS7Host = (("https:" == document.location.protocol) ? "https://a248.e.akamai.net/f/248/9086/30d/origin-g1" : "http://s7g1");
	if(rec_data.image === null || rec_data.image === "")
	{
		image.src = sS7Host + ".scene7.com/is/image/BandQ/image_coming_soon?$116x116_generic$=";
	}
	else
	{
		image.src = sS7Host + rec_data.image.substr(rec_data.image.indexOf("."));
	}
	image.alt = 'Image of ' + rec_data.name;
	
	var imageLink = document.createElement("a");
	imageLink.href = rec_data.url.replace("http://www.diy.com", "");
	imageLink.appendChild(image);
	imageSpan.appendChild(imageLink)

	// Rating stars & text eg XXXOO (5)
	var formattedRating = null;
	var avgRating = rec_data.averageRating;
	if (avgRating !== null)
	{
		formattedRating = avgRating.toString().replace(".", "_");
		if((avgRating > 0) && (formattedRating.length == 1)) formattedRating += "_0";
	}			
	
	var ratingStars = document.createElement("span");
	ratingStars.className = "recs-ratingStars";

	var ratingImg = document.createElement("img");
	ratingImg.src = '/diy/jsp/bq/images/ratings/rating-' + formattedRating + '.gif';
	
	var ratingText = document.createElement("span");
	ratingText.className = "recs-ratingText";

	if(rec_data.numberOfReviews > 0)
	{
		ratingImg.alt = 'Average rating: ' + rec_data.averageRating + ' out of 5';
		ratingText.innerHTML = '&nbsp;(' + rec_data.numberOfReviews + ')';
	}
	else
	{
		ratingImg.alt = 'Not yet reviewed';
		ratingText.innerHTML = '';
	}
	
	ratingStars.appendChild(ratingImg);
	ratingStars.appendChild(ratingText);

	// Promo text, or if none display 'recommended'
	var promoText = document.createElement("span");
	if (rec_data.promoText === null || rec_data.promoText === "")
	{
		promoText.className = 'recs-promoTextRecommended';
		promoText.innerHTML = 'recommended';
	}
	else
	{
		promoText.className = 'recs-promoText';
		promoText.innerHTML = rec_data.promoText;
	}
	
	// Prefix the current price with 'only', or 'now' if a was-price is set
	var pricePromotionalText = 'only ';
	
	// Was price, if one is available
	var wasPrice = document.createElement("span");
	if(rec_data.wasPrice != null)
	{
		wasPrice.className = "recs-wasPrice";
		wasPrice.innerHTML = 'was ' + ATGSvcs.price(slot_name, rec_data.wasPrice);
		pricePromotionalText = 'now ';
	}
	
	// Current price
	var currentPrice = document.createElement("span");
	currentPrice.className = "recs-currentPrice";
	currentPrice.innerHTML = pricePromotionalText + ATGSvcs.price(slot_name, rec_data.price);
	
	// Put it all together in the desired order (top to bottom)
	recBuilder.appendChild(promoText);
	recBuilder.appendChild(imageSpan);
	recBuilder.appendChild(ratingStars);
	recBuilder.appendChild(currentPrice);
	recBuilder.appendChild(wasPrice);
	recBuilder.appendChild(textLink);
	
	return recBuilder;
});

