/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/

var $sl = {
	version: '1.0.0.0',
	deployment: 'ystore'
	};

/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/

/*
 * Ad insertion support
 */

$sl.show_banner_ad = function()
	{
		var banners = $$('#scraplovers_header .banner_ad');
		banners.invoke('hide');
		banners[Math.floor(Math.random()*(banners.length))].show();
	}

Event.observe(window, 'load', $sl.show_banner_ad.bind($sl), false);

/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/

/*
 * Dynamic paging support
 */

var gCurrentPageNumber = 0;	// the current page number to display
var gMaxPageNumber = 1;		// the largest page number to which the user can jump
var gStoreId = "";
var gRegularPriceLabel = "";
var gSalePriceLabel = "";
var gOutOfStockLabel = "";
var gOrderCgiUrl = 'http://order.store.yahoo.net/cgi-bin/wg-order?';
var gProductsPerRow = 3;
var gRowsPerPage = 3;
var gProductsPerPage = gProductsPerRow * gRowsPerPage;
var gStoreUrl = "";
var gPageSelectorTopId = "sl-paging-selector-top";
var gPageSelectorBottomId = "sl-paging-selector-bottom";
var gProducts = new Array();

function slComposeATag(page, href, title, contents)
{
	page.push('<a href="' + href + '"');
	if (title)
	{
		page.push(' title="' + title + '"');
	}
	page.push('>');
	page.push(contents);
	page.push('</a>');
}

function slComposeProductArrayShimRow(page)
{
	var colspan = 2*gProductsPerRow - 1;

	page.push('<tr><td colspan="' + colspan + '" height="5"></td></tr>');
}

function slComposeOrderCell(page, product)
{
	page.push('<td width="30%">');

	if (product.orderable)
	{
		page.push('<form method="post" action="' + gOrderCgiUrl + gStoreId + '">');
		page.push('<input name="vwitem" type="hidden" value="' + product.id + '">');
		page.push('<input name="vwcatalog" type="hidden" value="' + gStoreId + '">');
		page.push('<input type="submit" value="Order">');
		page.push('<input type="hidden" name=".autodone" value="' + document.URL + '">');
		page.push('</form>');
	}
	else
	{
		page.push('<span class="sl_paging_out_of_stock_label">' + gOutOfStockLabel + '</span>');
	}

	page.push('</td>');
}

function slComposeProductInfoCell(page, product)
{
	page.push('<td width="30%">');

	page.push('<span class="sl_paging_product_name">');
	slComposeATag(page, slGetProductUrl(product), product.name, product.name);
	page.push('</span><br>');
	if (product.caption && product.caption.length)
	{
		page.push('<span class="sl_paging_product_code">' + product.caption + '</span><br>');
	}
	page.push('<span class="sl_paging_product_code">' + product.code + '</span><br>');
	if (product.sale_price)
	{
		page.push('<span class="sl_paging_regular_price_label">' + gRegularPriceLabel + '</span>&nbsp;<span class="sl_paging_regular_price">$' + product.price + '</span><br>');
		page.push('<span class="sl_paging_sale_price_label">' + gSalePriceLabel + '</span>&nbsp;<span class="sl_paging_sale_price">$' + product.sale_price + '</span><br>');
	}
	else
	{
		page.push('<span class="sl_paging_price">$' + product.price + '</span><br>');
	}

	page.push('</td>');
}

function slComposeProductImageCell(page, product)
{
	page.push('<td width="30%">');
	slComposeATag(page, slGetProductUrl(product), product.name, product.image_url);
	page.push('</td>');
}

function slComposeProductRow(page, products)
{
	slComposeProductArrayShimRow(page);
	page.push('<tr valign="bottom" align="center">');
	for (i = 0; i < products.length; ++i)
	{
		slComposeProductImageCell(page, products[i]);
	}
	page.push('</tr>');
	page.push('<tr valign="top" align="center">');
	for (i = 0; i < products.length; ++i)
	{
		slComposeProductInfoCell(page, products[i]);
	}
	page.push('</tr>');
	page.push('<tr valign="center" align="center">');
	for (i = 0; i < products.length; ++i)
	{
		slComposeOrderCell(page, products[i]);
	}
	page.push('</tr>');
	slComposeProductArrayShimRow(page);
}

function slComposeAllProductRows(page, pageNumber)
{
	var startIndex = (pageNumber - 1)*gProductsPerPage;
	var endIndex = startIndex + gProductsPerRow;

	for (r = 0; r < gRowsPerPage; ++r, startIndex += gProductsPerRow, endIndex += gProductsPerRow)
	{
		if (endIndex > gProducts.length)
		{
			endIndex = gProducts.length;
		}

		slComposeProductRow(page, gProducts.slice(startIndex,endIndex));
		
		if (endIndex == gProducts.length)
		{
			break;
		}
	}
}

function slComposeGoToPageLink(page, pageNumber, isActive, contents)
{
	if (isActive)
	{
		slComposeATag(page, 'javascript:slGoToPage(' + pageNumber + ')', 'go to page ' + pageNumber, contents);
	}
	else
	{
		page.push(contents);
	}
}

function slComposeNavigationRow(page, page_selector_id)
{
	page.push('<div align="right" class="sl_paging_page_link">');
	page.push('Page:&nbsp;');
	slComposeGoToPageLink(page, gCurrentPageNumber - 1, gCurrentPageNumber != 1, '<');
	page.push('&nbsp;');
	page.push('<select id="' + page_selector_id + '" onChange="slGoToPage(this.options[this.selectedIndex].value)">');
	for (p = 1; p <= gMaxPageNumber; ++p)
	{
		page.push('<option value="' + p + '" title="go to page ' + p + '">');
		page.push(p);
		page.push('</option>');
	}
	page.push('</select>');
	page.push('&nbsp;');
	slComposeGoToPageLink(page, gCurrentPageNumber + 1, gCurrentPageNumber != gMaxPageNumber, '>');
	page.push('</div>');
}

function slComposeCurrentPage(page)
{
	if (gMaxPageNumber > 1)
	{
		slComposeNavigationRow(page, gPageSelectorTopId);
	}

	page.push('<table width="100%">');
	slComposeAllProductRows(page, gCurrentPageNumber);
	page.push('</table>');

	if (gMaxPageNumber > 1)
	{
		slComposeNavigationRow(page, gPageSelectorBottomId);
	}
}

function SLProduct(id, code, name, image_url, price, sale_price, orderable, caption)
{
	this.id = id;
	this.code = code;
	this.name = name;
	this.image_url = image_url;
	this.price = slNormalizeCurrencyValue(price);
	this.sale_price = slNormalizeCurrencyValue(sale_price);
	this.orderable = orderable;
	this.caption = caption;
}

function slNormalizeCurrencyValue(value)
{
	var result = false;

	if (value)
	{
		var valueInPennies = Math.round(100 * value);
		var truncatedValue = valueInPennies / 100;
		result = truncatedValue.toString();
	
		var decimalIndex = result.indexOf('.');
		if (-1 == decimalIndex)
		{
			result += '.00';
		}
		else if (decimalIndex == result.length - 1)
		{
			result += '00';
		}
		else if (decimalIndex == result.length - 2)
		{
			result += '0';
		}
	}

	return result;
}

function slGetProductUrl(product)
{
	return '' + product.id + '.html';
}

function slGoToPage(pageNumber)
{
	pageNumber = parseInt(pageNumber.toString());

	if (pageNumber < 1)
	{
		pageNumber = 1;
	}
	else if (pageNumber > gMaxPageNumber)
	{
		pageNumber = gMaxPageNumber;
	}

	if (pageNumber != gCurrentPageNumber)
	{
		gCurrentPageNumber = pageNumber;
		
		var pageContents = new Array();
		slComposeCurrentPage(pageContents);

		$("sl-paging-contents").innerHTML = pageContents.join('');
		$(gPageSelectorTopId).selectedIndex = gCurrentPageNumber - 1;
		$(gPageSelectorBottomId).selectedIndex = gCurrentPageNumber - 1;
	}
}

// This function is public, it is explicitly called from the generated html.
function slAddProduct(id, code, name, image, price, sale_price, orderable, caption)
{
	gProducts.push(new SLProduct(id, code, name, image, price, sale_price, orderable, caption));
}

// This function is public, it is explicitly called from the generated html.
function slInitPaging(storeId, storeUrl, regularPriceLabel, salePriceLabel, outOfStockLabel, productsPerRow, rowsPerPage)
{
	gStoreId = storeId;
	gStoreUrl = storeUrl;
	gRegularPriceLabel = regularPriceLabel;
	gSalePriceLabel = salePriceLabel;
	gOutOfStockLabel = outOfStockLabel;
	gProductsPerRow = productsPerRow;
	gRowsPerPage = rowsPerPage;
	gProductsPerPage = gProductsPerRow * gRowsPerPage;

	gMaxPageNumber = Math.floor(gProducts.length / gProductsPerPage);
	if (gMaxPageNumber * gProductsPerPage != gProducts.length)
	{
		++gMaxPageNumber;
	}

	slGoToPage(1);
}

/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
