var tableData = new Object();
	tableData.categories = new Array();
var lastSortField;
var lastSortDirection;
var shopLinkBase = 'http://www.homedepot.com/webapp/wcs/stores/servlet/BuildLinkToHomeDepot?linktype=product&id=';
var selectedChBox = new Array();

var stPrintTable = '<table id="printtable" cellpadding="0" cellspacing="0" border="0">';
	stPrintTable += '<thead><tr><th>SKU</th><th>Product Description</th><th>Vendor Name</th></thead>';
var endPrintTable = '<tfoot><tr><td colspan="3">';
	if (PageName == 'alternative') {
		endPrintTable += '<img src="images/backgrounds/print_footer_alt.gif" id="print_footer" />';
	}else {
		endPrintTable += '<img src="images/backgrounds/print_footer.gif" id="print_footer" />';
	}
	endPrintTable += '</td></tr></tfoot>';
	endPrintTable += '</table>';
	endPrintTable += '<div style="width:100%;float:left;display:inline;"><p class="footnote">* Additional products are also available special order</p><p class="footnote">** Products are subject to change over the tax credit period</p></div>';

function compressSCB() {
	selectedChBox = selectedChBox.compact();
	selectedChBox = selectedChBox.uniq();
}

//checks all the boxes in a category
function checkedAll(prodlist) {
	var catID = prodlist.getAttribute('id');

	var formEl = $$('#tblform input[parentid='+catID+']');
	for (var f =0; f < formEl.length; f++) {
		var frmcb = formEl[f];
		var prodID = frmcb.getAttribute('id');
		if (prodlist.checked == true){
	 		frmcb.checked = true;
			selectedChBox.push(prodID);
		} else {
	 		frmcb.checked = false;
			selectedChBox[selectedChBox.indexOf(prodID)] = null;
		}
	}

	compressSCB();
}

function printChecked(objcheckbox){
	var prodID = objcheckbox.getAttribute('id');
	if (objcheckbox.checked == false){
		// selectedChBox[selectedChBox.indexOf(prodID)] = null;
	}else{
		selectedChBox.push(prodID);
	}

	compressSCB();
}

function printPage(printtype) {
	if (printtype == 'all') {
		var chkboxes = $('tblform').getInputs('checkbox');
		for (var c=0;c<chkboxes.length;c++) {
			var chkbx = chkboxes[c];
			if (chkbx.getAttribute('parentid') != null) {
				selectedChBox.push(chkbx.getAttribute('id'));
				chkbx.checked = true;
			}
		}
		compressSCB();
		printTable(printtype);
	} else {
		if (selectedChBox.length == 0) {
			alert('Please select at least one product to print.');
		} else {
			printTable(printtype);
		}
	}
}

function printTable(printType){
	var writehtml = '';
	var sku = '';
	var description = '';
	var vendor = '';

	for (var i=0;i<tableData.categories.length;i++){
		var categoryElement = tableData.categories[i];
		var products = categoryElement.products;

		for (var p=0; p<products.length; p++) {
			sku = products[p].sku;
			description = products[p].description;
			vendor = products[p].vendor;

			if (printType == 'selected'){
				for (var z=0;z<selectedChBox.length;z++){
					if (sku == selectedChBox[z]){
						writehtml += '<tr><td style="border-bottom:1px solid;">'+sku+'</td><td style="border-bottom:1px solid;">'+description+'</td><td style="border-bottom:1px solid;">'+vendor+'</td></tr>';
					}
				}
			}
			else{
				writehtml += '<tr><td style="border-bottom:1px solid;">'+sku+'</td><td style="border-bottom:1px solid;">'+description+'</td><td style="border-bottom:1px solid;">'+vendor+'</td></tr>';
			}
		}
	}
	$('print_page').innerHTML = stPrintTable + writehtml + endPrintTable;
	print();
}

//alternates the bg color of the rows in the table
function alternate(id){
   var table = $(id);
   var rows = table.getElementsByTagName('tr');
   for(t = 0; t < rows.length; t++){
 //to change the bg of the alternating rows
	 if(t % 2 == 0){
	   rows[t].className = 'roweven';
	 }else{
	   rows[t].className = 'rowodd';
	 }
   }
}

function buildProdTypeDD() {
	var categories = tableData.categories;

	if (categories.length > 1) {
		var optElemAll = new Element('option',{'value':'all'}).update('View All');
		$('productDDList').insert(optElemAll);
	}

	for (var c=0;c<categories.length;c++) {
		var categoryName = categories[c].name;

		var optElem = new Element('option',{'value':categoryName}).update(categoryName);
		$('productDDList').insert(optElem);
	}
}

function getAllProducts() {
	getProducts('alternative,doors,windows,hvac,roofing,insulation');
}

function getProducts(prodcategories){
	var xmlCategories = prodcategories.split(',');

	for (var x=0;x<xmlCategories.length;x++) {
		var XMLcategory = xmlCategories[x];
		var request = new Ajax.Request('xml/'+XMLcategory+'.xml',{
			method: 'get',
			asynchronous: false
		});


		var XMLresponse = request.transport.responseXML;

		var categories = XMLresponse.getElementsByTagName('category');

		for (var i=0;i<categories.length;i++) {

			var categoryObject = new Object();
			var categoryElement = categories[i];

			categoryObject.name = categoryElement.getAttribute('header');
			categoryObject.products = new Array();

			var products = categoryElement.getElementsByTagName('productrow');

			for (var p = 0; p<products.length; p++)
			{
				var productObject = new Object();
				var productElement = products[p];

				productObject.sku = productElement.getAttribute('sku');
				productObject.description = productElement.getAttribute('description');
				productObject.vendor = productElement.getAttribute('vendor');
				productObject.omsid = productElement.getAttribute('omsid');
				productObject.shoplink = shopLinkBase+productObject.omsid+'&cm_sp=Event-_-'+SiteName+'-_-'+forTracking+'-_-'+productObject.omsid+HomeDepot.linkParamsAppended;;
				productObject.extracta = productElement.getAttribute('extracta');
				productObject.extraurl = productElement.getAttribute('extraurl');
				productObject.extratag = productElement.getAttribute('tag');

				categoryObject.products.push(productObject);

			}
			categoryObject.visible = true;
			tableData.categories.push(categoryObject);
		}
	}

	buildProdTypeDD();
	createProductTable();
}

function createProductTable(){
	var tablerows = '';
	var printtablerows = '';
	$('producttable').innerHTML = '';
	var categories = tableData.categories;

	for (var i=0;i<categories.length;i++) {
		var catObj = categories[i];
		if (catObj.visible) {
			var categoryName = catObj.name;
			tablerows += '<tr class="headerrow"><td class="headers_chkbox"><input type="checkbox" name="checkall" id="'+categoryName+'" onclick="checkedAll(this);" /></td><td colspan="4" class="headers">'+categoryName+'</td></tr>';

			var products = catObj.products;

			for (var p=0; p<products.length; p++)
			{
				var sku = products[p].sku;
				var description = products[p].description;
				var vendor = products[p].vendor;
				var omsid = products[p].omsid;
				var shoplink = products[p].shoplink;
				var extraurl = products[p].extraurl;
				var extratag = products[p].extratag;
				var shopCTA = (omsid!='') ? '<a href="'+shoplink+'" class="prodshoponline"><img src="images/buttons/btn_arrow_shop.gif" style="vertical-align:top;" /><span>Shop Now</span></a>' : '&nbsp;';

				var cta = shopCTA;
				if (extraurl!='') {
					if (extraurl.indexOf('?') != -1) {
						extratag = '&cm_sp='+extratag;
					} else {
						extratag = '?cm_sp='+extratag;
					}
					var xtraCTAevar47 = '';
					if (extraurl.indexOf('homedepot.com') < 0 && extraurl.indexOf('http') == 0) {
						xtraCTAevar47 = ' offsitelink="'+extratag+'"';
					}
					cta = '<a href="'+extraurl+extratag+'" class="prodshoponline"'+xtraCTAevar47+'><img src="images/buttons/btn_arrow_shop.gif" style="vertical-align:top;" /><span>'+products[p].extracta+'</span></a>';
				}

				tablerows += '<tr>';
				tablerows += '<td width="50" class="chkbox"><input type="checkbox" name="'+sku+'" id="'+sku+'" parentid="'+categoryName+'" onclick="printChecked(this);" /></td>';
				tablerows += '<td width="100">'+ sku +'</td>';
				tablerows += '<td width="300">'+ description +'</td>';
				tablerows += '<td>'+ vendor +'</td>';
				tablerows += '<td class="prodshoponline" width="155">'+cta+'</td>';
				tablerows += '</tr>';
				printtablerows += '<tr><td>'+ sku +'</td><td>'+ description +'</td><td>'+ vendor +'</td></tr>';
			}
		}
	}

	var sortOverlay = function(width, height){
		var overlay = '';
		//need an identifier for the href so that it knows what column to sort
		overlay += '<img src="'+rootPath+'images/spacer.gif" style="width:'+width+'px;height:'+height+'px;z-index:4;position:absolute;" />';
		return overlay;
	}

	var sortImage = '<img src="images/graphics/carat_sort.gif" align="absmiddle" style="margin-right:5px;" id="arrowimg" />';

	var startTable = '<form id="tblform">';
	startTable += '<table id="table" cellpadding="0" cellspacing="0" border="1">';
	startTable += '<thead><tr><th width="50">Print</th><th width="100"><a href="javascript:sortProducts(\'sku\')">'+sortOverlay(100,20)+'</a>'+sortImage+'SKU</th><th width="300"><a href="javascript:sortProducts(\'description\')">'+sortOverlay(300,20)+'</a>'+sortImage+'Product Description</th><th width="">Vendor Name</th><th></th></thead>';
	var endTable = '</table>';
	endTable += '</form>';
	$('producttable').innerHTML = startTable + tablerows + endTable;
	alternate('table');
}

function sortProducts(fieldName){
	var categories = tableData.categories;

		if(lastSortField == fieldName && lastSortDirection == "DESC")
		{
			// switch directions
			lastSortDirection = "ASCD";
		}
		else
		{
			lastSortDirection = "DESC";
		}
	for (var i=0;i<categories.length;i++)
	{
		var cat = categories[i];


		if(fieldName == 'sku')
				cat.products.sort(skuComparer);
			else if(fieldName == 'description')
				cat.products.sort(descriptionComparer);
			else if(fieldName == 'vendor')
				cat.products.sort(vendorComparer);
	}

	lastSortField = fieldName;
	createProductTable();
}


function skuComparer(prod1, prod2){
	if(lastSortDirection == "DESC"){
		return (prod1.sku.replace('-','') - prod2.sku.replace('-',''));
	}else {
		return (prod2.sku.replace('-','') - prod1.sku.replace('-',''));
 	}
}

function descriptionComparer(prod1, prod2){
	if(lastSortDirection == "DESC"){
		if (prod1.description < prod2.description){
			return -1;
		}else {
			return 1;
		}
		return 0;
	}else {
		if (prod1.description > prod2.description){
			return -1;
		}else {
			return 1;
		}
		return 0;
 	}

}

function filterproducts(val) {
	var categories = tableData.categories;
	for (var c=0;c<categories.length;c++) {
		var categoryName = categories[c].name;
		if (categoryName == val || val == 'all') {
			tableData.categories[c].visible = true;
		} else {
			tableData.categories[c].visible = false;
		}
	}

	createProductTable();

	callOmniture_evar47('Event-_-'+SiteName+'-_-Product_Sort-_-'+val, SiteName);
}

