var Dennis = window.Dennis || {};

var Review = Dennis.Review || {};


var Manufacturer = Dennis.Manufacturer || {};

Manufacturer.Class = function(id, name)
{
	var _id = id;
	var _name = name;
	
	
	return {
		getName		: function()
		{
			return _name;
		},
		
		getId		: function()
		{
			return _id;
		}
	};
};


Review.Class = function() {
	
	return {	
		getType			: function()
		{
			return 'Review';
		}	
	};
};



Review.factory = function(id, partCode, name, uri, image, manufacturer, price, rating, masterId)
{
	var _review, _id, _name, _uri, _image, _partCode, _manufacturer, _price, _rating, _productId, _selected, _masterId;
	if (!id) {
		return null;
	}
	_id				= id;
	_name			= name;
	_uri			= uri;
	_image			= image;
	_manufacturer 	= manufacturer;
	_price			= price;
	_rating			= rating;
	_partCode		= partCode;
	_masterId		= masterId;
	_review 		= new Review.Class();
	
	/**
	 * Private function to set the ID of the Review.
	 */
	var setId = function(id) 
	{ 
		_id = id;
	};
	
	
	/**
	 * Public function to return the Review ID
	 */
	var getId = function()
	{
		return _id;
	};
	
	/**
	 * Return the name (headline) of the Review
	 */
	var getName = function()
	{
		return _name;	
	};
	
	/**
	 * Return the manufacturer name
	 */
	var getManufacturer = function()
	{
		return _manufacturer;
	};
	
	
	/**
	 * Set the manufacturer name
	 */
	var setManufacturer = function(manufacturer)
	{
		_manufacturer = manufacturer;
	};
	
	/**
	 * Return the part code for this review
	 */
	var getPartCode = function()
	{
		return _partCode;
	};
	
	/**
	 * Set the part code
	 */
	var setPartCode = function(partCode)
	{
		_partCode = partCode; 
	};
	
	var getProductId = function()
	{
		return _productId;
		
	};
	
	var setProductId = function(productId)
	{
		_productId = productId;
	};
	
	/**
	 * Return the URI for the review
	 */
	var getUri = function()
	{
		return _uri;
	};
	/**
	 * Set the URI of the Review
	 */
	var setUri = function(uri)
	{
		_uri = uri;
	};
	
	/**
	 * Return the Image for the review
	 */
	var getImage = function()
	{
		return _image;
	};
	/**
	 * Set the Image of the Review
	 */
	var setImage = function(image)
	{
		_image = image;
	};
	
	
	/**
	 * Return the price of the product as reviewed
	 */
	var getPrice = function()
	{
		return _price;
	};
	
	/**
	 * Set the as-reviewed price
	 */
	var setPrice = function(price)
	{
		_price = price;
	};
	/**
	 * Return the rating of the review
	 */
	var getRating = function()
	{
		return _rating;
	};
	
	/**
	 * Set the rating of the review
	 */
	var setRating = function(rating)
	{
		_rating = rating;
	};
	/**
	 * Set whether this has been selected or not
	 */
	var setSelected = function(selected)
	{
		_selected = (selected) ? true : false;
	};
	
	/**
	 * Get if this has been selected
	 */
	var getSelected = function()
	{
		return _selected;
	};
	
	var setMasterId = function(masterId)
	{
		_masterId = masterId;
	};
	
	var getMasterId = function()
	{
		return _masterId;
	};
	
	
	_review.getId 			= getId;
	_review.setId 			= setId;
	_review.getName			= getName;
	_review.getManufacturer = getManufacturer;
	_review.setManufacturer = setManufacturer;
	_review.getPartCode		= getPartCode;
	_review.setProductId	= setProductId;
	_review.getProductId	= getProductId;
	_review.setPartCode		= setPartCode;
	_review.getUri			= getUri;
	_review.setUri			= setUri;
	_review.getImage		= getImage;
	_review.setImage		= setImage;
	_review.getPrice		= getPrice;
	_review.setPrice		= setPrice;
	_review.getRating		= getRating;
	_review.setRating		= setRating;
	_review.setSelected		= setSelected;
	_review.getSelected		= getSelected;
	_review.setMasterId		= setMasterId;
	_review.getMasterId		= getMasterId;
	
	_review = Dennis.addListenEvent(_review);
	
	_review.on('select', 'setSelected', !_review.getSelected());	
	return _review;

};