if(ksp) {
}else{
	var ksp={};
}
ksp.Product = function(productJSONObject) {
	this.colorId = '';
	this.sizeId = '';
	this.skuId = '';
	this.priceData = productJSONObject.priceData;
	this.productPriceDisplay = productJSONObject.productPriceDisplay;
	this.quantity = 0;
	this.cp = productJSONObject.cp;
	this.globalCategoryId = productJSONObject.globalCategoryId;
	this.skus = productJSONObject.skus;
	this.productId = productJSONObject.productId;
	this.alternateViews = productJSONObject.alternateViews;
	this.availableSizes = productJSONObject.availableSizes;
	this.availableColors = productJSONObject.availableColors;
	this.mainImageURL = productJSONObject.mainImageURL;
	this.enhancedImageURL = productJSONObject.enhancedImageURL;
	this.familyImageURL = productJSONObject.familyImageURL;
	this.thumbnailImageURL = productJSONObject.thumbnailImageURL;
	this.largeSwatchImageURL = productJSONObject.largeSwatchImageURL;
	this.pageURL = productJSONObject.pageURL;
	this.colorChangeListeners = new Array();
	this.sizeChangeListeners = new Array();
	this.viewChangeListeners = new Array();
	this.qtyChangeListeners = new Array();
	this.skuChangeListeners = new Array();
	this.viewId = '';
	this.currentView = this;
	this.defaultViewId = '';
	var i=0;
	for(viewId in this.alternateViews) {
		if(i==0) {
			this.viewId = viewId;
			this.defaultViewId = viewId;
			this.currentView = this.alternateViews[viewId];
		}
		i++;
	}


	this.currentColorSlice = null;
	this.colorFirst = false;
	this.sizeFirst = false;
	this.addColorChangeListener = function(listener) {
		this.colorChangeListeners[this.colorChangeListeners.length] = listener;
	};
	this.addSizeChangeListener = function(listener) {
		this.sizeChangeListeners[this.sizeChangeListeners.length] = listener;
	};
	this.addViewChangeListener = function(listener) {
		this.viewChangeListeners[this.viewChangeListeners.length] = listener;
	};
	this.addQtyChangeListener = function(listener) {
		this.qtyChangeListeners[this.qtyChangeListeners.length] = listener;
	};
	this.addSkuChangeListener = function(listener) {
		this.skuChangeListeners[this.skuChangeListeners.length] = listener;
	};

	this.getAvailableSkus = function() {
		var availableSkus = new Array();
		if(this.colorId == '' && this.sizeId == '') {
			availableSkus = this.skus;
		} else if(this.colorId!='' && this.sizeId!='') {
			for(var i=0; i<this.skus.length;i++) {
				if(this.skus[i].sizeId==this.sizeId && this.skus[i].colorId==this.colorId) {
					availableSkus.push(this.skus[i]);
				}
			}
		}	else if(this.colorId!='') {
			for(var i=0; i<this.skus.length;i++) {
				if(this.skus[i].colorId==this.colorId) {
					availableSkus.push(this.skus[i]);
				}
			}
		} else if(this.sizeId!='') {
			for(var i=0; i<this.skus.length;i++) {
				if(this.skus[i].sizeId==this.sizeId) {
					availableSkus.push(this.skus[i]);
				}
			}
		}
		return availableSkus;
	}

	this.getAvailableSizes = function() {
		var sizes = new Array();
		if(this.colorId == '' || this.sizeFirst) {
			sizes = this.availableSizes;
		}else {
			var skus = this.skus;
			for(var i=0; i < skus.length; i++) {
				if(skus[i].colorId==this.colorId) {
					sizes.push({'id':skus[i].sizeId,'description':skus[i].size});
				}
			}
		}
		return sizes;
	}
	this.getAvailableColors = function() {
		var colors = new Array();
		if(this.sizeId == '' || this.colorFirst) {
			colors = this.availableColors;
		}else {
			var skus = this.skus;
			for(var i=0; i < skus.length; i++) {
				if(skus[i].sizeId==this.sizeId) {
					colors.push({'id':skus[i].colorId,'description':skus[i].color});
				}
			}
		}
		return colors;
	}

	this.getCurrentColorSliceValue = function() {
		return this.currentColorSliceValue;
	}
	this.getSkuById = function(id) {
		for(var i=0; i< this.skus.length; i++) {
			if(this.skus[i].sku_id == id) {
				return this.skus[i];
			}
		}
		return null;
	}
	this.getCurrentView = function() {
		return this.currentView;	
	}
	this.changeColor = function(colorId) {
		if(this.sizeId=='') {
			this.colorFirst = true;
		}
		this.colorId = colorId;
		//this should be updated to select the correct sku id
		this.currentColorSliceValue = null;
		for(var i=0; i < this.availableColors.length; i++) {
			if(this.availableColors[i].id == this.colorId) {
				this.currentColorSliceValue = this.availableColors[i];
				break;
			}
		}
//		this.changeSku(this.getCurrentColorSliceValue().availableSkuIds[0]);
		this.changeView();
		for(i=0; i < this.colorChangeListeners.length; i++) {
			this.colorChangeListeners[i].observeProductColorChange(this);
		}
		var availableSizes = this.getAvailableSizes();
		if(availableSizes.length==1 && availableSizes[0].description.toUpperCase()=='NO SIZE') {
					this.changeSize(availableSizes[0].id);
		}
		this.calculateSku();
		
		
		
	}

	this.changeSize = function(sizeId) {
		if(this.colorId=='') {
			this.sizeFirst = true;
		}
		this.sizeId = sizeId;

//		this.changeSku(this.getCurrentColorSliceValue().availableSkuIds[0]);
//		this.changeView(0);
		for(i=0; i < this.sizeChangeListeners.length; i++) {
			this.sizeChangeListeners[i].observeProductSizeChange(this);
		}
		this.calculateSku();
	}
	
	this.calculateSku = function() {
		var skuFound = false;
		for(i=0; i< this.skus.length; i++) {
			if(this.skus[i].colorId==this.colorId && this.skus[i].sizeId==this.sizeId) {
				this.changeSku(this.skus[i].sku_id);
				skuFound = true;
				break;
			}
		}
		if(!skuFound) {
			this.changeSku('');
		}
	}


	this.setQuantity = function(qty) {
		this.quantity = qty;
		for(var i=0; i < this.qtyChangeListeners.length; i++) {
			this.qtyChangeListeners[i].observeProductQtyChange(this);
		}
	}
	this.changeSku = function(skuId) {
		if(this.skuId!=skuId) {
			this.skuId = skuId;
			for(var i=0; i < this.skuChangeListeners.length; i++) {
				this.skuChangeListeners[i].observeProductSkuChange(this);
			}
		}
	}
	this.changeView = function(viewId) {
		if(viewId) {
			this.viewId = viewId;
		}
		this.currentView = this.alternateViews[this.viewId];
		if(this.getCurrentColorSliceValue()!=null) {
			if(this.getCurrentColorSliceValue().alternateViews[this.viewId]) {
				this.currentView = this.getCurrentColorSliceValue().alternateViews[this.viewId];
			} else {
				this.viewId = this.defaultViewId;
				this.currentView = this.getCurrentColorSliceValue();
			}
		}
		for(var i=0; i < this.viewChangeListeners.length; i++) {
			this.viewChangeListeners[i].observeProductViewChange(this);
		}
	}
	
	
	this.getFilteredPriceData = function() {
		
		
		var x = 7;
		var priceData = {};
		var availableSkus = null;
		var minBasePrice = 0;
		var maxBasePrice = 0;
		var minPrice = 0;
		var maxPrice = 0;
		if(this.productPriceDisplay == 'SKU+VP') {
			availableSkus = this.getAvailableSkus();
			for(var i=0; i<availableSkus.length; i++) {
				if(i==0 || availableSkus[i].basePrice>maxBasePrice) {
					maxBasePrice = availableSkus[i].basePrice;
				} 
				if (i==0 || availableSkus[i].basePrice<minBasePrice) {
					minBasePrice = availableSkus[i].basePrice;
				}
	
				if(i==0 || availableSkus[i].price>maxPrice) {
					maxPrice = availableSkus[i].price;
				}
				if (i==0 || availableSkus[i].price<minPrice) {
					minPrice = availableSkus[i].price;
				}
	
			}
			if(minPrice==maxPrice) {
				priceData.price = minPrice;
			} else {
				priceData.priceRange = {minPrice:minPrice,maxPrice:maxPrice}
			}

			if(minBasePrice!=minPrice || maxBasePrice!=maxPrice) {  // VP priced
				if(minBasePrice==maxBasePrice) {
					priceData.basePrice = minBasePrice;
				} else {
					priceData.basePriceRange = {minPrice:minBasePrice,maxPrice:maxBasePrice}
				}
			}
		} else if(this.productPriceDisplay == 'SKU') {
			availableSkus = this.getAvailableSkus();
			for(var i=0; i<availableSkus.length; i++) {
				if(i==0 || availableSkus[i].price>maxPrice) {
					maxPrice = availableSkus[i].price;
				}
				if (i==0 || availableSkus[i].price<minPrice) {
					minPrice = availableSkus[i].price;
				}
			}
			
			
		} else {
			priceData = this.priceData;			
		}
		return priceData;
		
	}

}
