/**
 * Product comparsion widget for search and browse
 * Allow customers to select comparison products and manage their 
 * selected list as well as submit for comparison.
 * The widget is applied as a progressive enhancement to exisiting functionality.
 * 
 * @author Rozario Chivers, Anna Huang, Tony Kabalan, James Baker (created 09:00 11/02/2008)
 */

if (!console) var console = {log: function() {}};

// set up Argos Product Comparison namespace
if (!argos) var argos = {};
if (!argos.product) argos.product = {};

argos.product.comparison = {			// default pixel positioning for widget 
	PERSIST_NAME : "comparisonWidget",	// selected product persistence name 
	productList : [], 					// local copy of selected products		

	setProducts : function(productList) {
		argos.product.comparison.productList = productList;
	},

	Product : function(partNum, title, productId, desc, href) {
		this.partNum = partNum;
		this.title = title;
		this.productId = productId;
		this.desc = desc;
		this.href = href;
		this.obj = {};
		
		this.bindObj = function(name, obj) {
			this.obj[name] = obj;
		}
		
		this.unbindObj = function(name) {
			delete this.obj[name];
		}
		
		this.getObj = function(name) {
			return this.obj[name];
		}		
	},

	addProduct : function(product) {
		argos.product.comparison.productList.push(product);
	},
	
	/**
	 * Replace a product at its current index if an existing product
	 * with the same part number is found.
	 * @param {Object} partNum part number of the product
	 * @param {Object} product the new product
	 */
	replaceProduct : function(partNum, product) {
		var comparison = argos.product.comparison;	// reduce namespace
		
		for(var i=0; i<comparison.productList.length;i++) {				
			if (comparison.productList[i].partNum == partNum) {
				comparison.productList[i] = product;
				break;
			}
		}	
	},

	getProduct : function(partNum) {
		var comparison = argos.product.comparison;	// reduce namespace
		var product;

		for(var i=0; i<comparison.productList.length;i++) {				
			if (comparison.productList[i].partNum == partNum) {
				product = comparison.productList[i];
				break;
			}
		}	
		
		return product;
	},

	removeProduct : function(partNum) {
		var comparison = argos.product.comparison;	// reduce namespace
		
		for(var i=0; i<comparison.productList.length;i++) {	
			if (comparison.productList[i].partNum == partNum) {
				comparison.removeProducts(i,1);
				break;
			}
		}
	},
	
	removeSavedProduct : function(partNum) {		
		var comparison = argos.product.comparison;	// reduce namespace
		var productList = comparison.retrieveSavedProducts();
		
		for(var i=0; i<productList.length;i++) {				
			if (productList[i].partNum == partNum) {
				productList.splice(i,1);
				break;
			}
		}	
		
		argos.utils.persistence.persist(comparison.PERSIST_NAME, productList);	
	},

	removeProducts : function(start, qty) {
		var comparison = argos.product.comparison;	// reduce namespace		
		comparison.productList.splice(start,qty);
	},

	removeAllProducts : function() {
		var comparison = argos.product.comparison;	// reduce namespace
		comparison.removeProducts(0,comparison.productList.length);
	},

	removeAllSavedProducts : function() {
		argos.product.comparison.removeAllProducts();	
		argos.product.comparison.saveProducts();
	},
	
	saveProducts : function() {
		var comparison = argos.product.comparison;	// reduce namespace	
		var cookieName = comparison.PERSIST_NAME;	
		argos.utils.persistence.persist(cookieName, comparison.productList);
	},

	restoreSavedProducts : function() {
		var comparison = argos.product.comparison;	// reduce namespace
		var productList = comparison.retrieveSavedProducts();

		if (productList) {
			comparison.productList = comparison.retrieveSavedProducts();
		}
	},

	retrieveSavedProducts : function() {
		var productList = []; 
		var cookieName = argos.product.comparison.PERSIST_NAME;		
		
		return argos.utils.persistence.retrieve(cookieName) || [];
	},

	retrieveLocalProducts : function() {
		return argos.product.comparison.productList;
	}
}

$(document).ready(function() {
	$('th span.nojb').each(function(index) {
		s  = $(this).text();
		if (s.search("Age range") > -1) {
			$(this).parent().parent().hide();
		}
	});	
});
