
function CaObjProducts(productsJSON)
{
	this.products = productsJSON;

	this.filteredProducts = new Array();

	this.numPages = 0;

	this.caGetProducts = function(filtered)
	{
		if (typeof filtered == 'undefined')
			filtered = false;

		if (filtered)
			return this.filteredProducts;

		if (!this.products)
			return new Array();

		if (typeof this.products.length == 'undefined')
			return new Array(this.products);

		return this.products;
	}

	this.caSizeSortFunc = function(a, b)
	{
		return (a.sort > b.sort) ? 1 : ((a.sort < b.sort) ? -1 : 0);
	}

	this.caGetSizeArr = function()
	{
		var			sizeArr=new Array();
		var			sortArr=new Array();
		var			sizes;
		var			s;
		var			i;
		var			j;
		var			k;


		for (i=0;i<this.filteredProducts.length;i++)
		{
			sizes = this.caGetProductSizes(i, true);

			for (j=0;j<sizes.length;j++)
			{
				s = parent.parent.caTrimString(sizes[j].size);

				for (k=0;k<sizeArr.length;k++)
				{
					if (s == sizeArr[k].name)
						break;
				}

				if (k == sizeArr.length)
				{
					var		newObj=new Object();
					newObj.name = s;
					newObj.sort = sizes[j].computerSizeNumber;
					sizeArr[sizeArr.length] = newObj;
				}
			}
		}

		sizeArr.sort(this.caSizeSortFunc);
		for (i=0;i<sizeArr.length;++i)
		{
			sortArr[sortArr.length] = sizeArr[i].name;
		}

		return sortArr;
	}

	this.caGetColorArr = function()
	{
		var			i;
		var			j;
		var			c;
		var			colors=new Array();


		for (i=0;i<this.filteredProducts.length;i++)
		{
			c = this.filteredProducts[i].colourname;

			// Suchen, ob die Farbe bereits im Array existiert.
			for (j=0;j<colors.length;j++)
			{
				if (c == colors[j])
					break;
			}

			// Farbe hinzufügen, wenn nicht im Array.
			if (j == colors.length)
				colors[colors.length] = c;
		}

		colors.sort();

		return colors;
	}

	this.caGetBrandArr = function()
	{
		var			i;
		var			j;
		var			k;
		var			brand;
		var			s;
		var			brandArr=new Array();


		for (i=0;i<this.filteredProducts.length;i++)
		{
			brand = this.caGetProductBrands(i, true);

			for (j=0;j<brand.length;j++)
			{
				s = brand[j];

				for (k=0;k<brandArr.length;k++)
				{
					if (s == brandArr[k])
						break;
				}

				if (k == brandArr.length)
					brandArr[brandArr.length] = s;
			}
		}

		brandArr.sort();

		return brandArr;
	}

	this.caGetShapeArr = function()
	{
		var			i;
		var			j;
		var			k;
		var			shape;
		var			s;
		var			shapeArr=new Array();


		for (i=0;i<this.filteredProducts.length;i++)
		{
			shape = this.caGetProductShapes(i, true);

			for (j=0;j<shape.length;j++)
			{
				s = shape[j];

				for (k=0;k<shapeArr.length;k++)
				{
					if (s == shapeArr[k])
						break;
				}

				if (k == shapeArr.length)
					shapeArr[shapeArr.length] = s;
			}
		}

		shapeArr.sort();

		return shapeArr;
	}

	this.caGetStyleArr = function()
	{
		var			i;
		var			j;
		var			k;
		var			styl;
		var			s;
		var			stylArr=new Array();


		for (i=0;i<this.filteredProducts.length;i++)
		{
			styl = this.caGetProductStyles(i, true);

			for (j=0;j<styl.length;j++)
			{
				s = styl[j];

				for (k=0;k<stylArr.length;k++)
				{
					if (s == stylArr[k])
						break;
				}

				if (k == stylArr.length)
					stylArr[stylArr.length] = s;
			}
		}

		stylArr.sort();

		return stylArr;
	}

	this.caGetProductSizes = function(productNum, filtered)
	{
		var			products=this.caGetProducts(filtered);
		var			product;


		if (productNum >= products.length)
			return new Array();

		product = products[productNum];

		if (typeof product.size == 'undefined')
			return new Array();

		if (typeof product.size.length == 'undefined')
			return new Array(product.size);

		return product.size;
	}

	this.caGetProductBrands = function(productNum, filtered)
	{
		var			products=this.caGetProducts(filtered);
		var			product;
		var			brands;


		if (productNum >= products.length)
			return new Array();

		product = products[productNum];

		if (typeof product.brand == 'undefined')
			return new Array();

		if (product.brand.indexOf(';') >= 0)
			brands = product.brand.split(';');
		else
			brands = new Array(product.brand);

		return brands;
	}

	this.caGetProductShapes = function(productNum, filtered)
	{
		var			products=this.caGetProducts(filtered);
		var			product;
		var			shapes;


		if (productNum >= products.length)
			return new Array();

		product = products[productNum];

		if (typeof product.form == 'undefined')
			shapes = new Array();

		if (product.form.indexOf(';') >= 0)
			shapes = product.form.split(';');
		else
			shapes = new Array(product.form);

		return shapes;
	}

	this.caGetProductStyles = function(productNum, filtered)
	{
		var			products=this.caGetProducts(filtered);
		var			product;
		var			styles;


		if (productNum >= products.length)
			return new Array();

		product = products[productNum];

		if (typeof product.stil == 'undefined')
			styles = new Array();

		if (product.stil.indexOf(';') >= 0)
			styles = product.stil.split(';');
		else
			styles = new Array(product.stil);

		return styles;
	}

	this.caCheckSizeFilter = function(productNum, filterSizes)
	{
		var			sizes=this.caGetProductSizes(productNum, false);
		var			i;
		var			j;


		if (filterSizes.length == 0)
			return false;

		for (i=0;i<sizes.length;i++)
		{
			for (j=0;j<filterSizes.length;++j)
			{
				if (sizes[i].size == filterSizes[j])
					return false;
			}
		}

		return true;
	}

	this.caCheckColorFilter = function(productNum, filterColors)
	{
		var			products=this.caGetProducts(false);
		var			product;
		var			i;


		if (productNum >= products.length)
			return false;

		if (filterColors.length == 0)
			return false;

		product = products[productNum];

		for (i=0;i<filterColors.length;++i)
		{
			if (product.colourname == filterColors[i])
				return false;
		}

		return true;
	}

	this.caCheckBrandFilter = function(productNum, filterBrands)
	{
		var			brands=this.caGetProductBrands(productNum, false);
		var			i;
		var			j;


		if (filterBrands.length == 0)
			return false;

		for (i=0;i<brands.length;i++)
		{
			for (j=0;j<filterBrands.length;++j)
			{
				if (brands[i] == filterBrands[j])
					return false;
			}
		}

		return true;
	}

	this.caCheckShapeFilter = function(productNum, filterShapes)
	{
		var			shapes=this.caGetProductShapes(productNum, false);
		var			i;
		var			j;


		if (filterShapes.length == 0)
			return false;

		for (i=0;i<shapes.length;i++)
		{
			for (j=0;j<filterShapes.length;++j)
			{
				if (shapes[i] == filterShapes[j])
					return false;
			}
		}

		return true;
	}

	this.caCheckStyleFilter = function(productNum, filterStyles)
	{
		var			stls=this.caGetProductStyles(productNum, false);
		var			i;
		var			j;


		if (filterStyles.length == 0)
			return false;

		for (i=0;i<stls.length;i++)
		{
			for (j=0;j<filterStyles.length;++j)
			{
				if (stls[i] == filterStyles[j])
					return false;
			}
		}

		return true;
	}

	this.caFilterProducts = function(sizeFilter, colorFilter, brandFilter, shapeFilter, styleFilter)
	{
		var		products=this.caGetProducts(false);
		var		i;


		// Clear array.
		this.filteredProducts.length = 0;

		// Fill array by applying the filters.
		for (i=0;i<products.length;i++)
		{
			if (this.caCheckSizeFilter(i, sizeFilter))
				continue;
			if (this.caCheckColorFilter(i, colorFilter))
				continue;
			if (this.caCheckBrandFilter(i, brandFilter))
				continue;
			if (this.caCheckShapeFilter(i, shapeFilter))
				continue;
			if (this.caCheckStyleFilter(i, styleFilter))
				continue;

			this.filteredProducts[this.filteredProducts.length] = products[i];
		}

		// Calculate number of product pages.
		var		ppp=caCBNumPages.options[caCBNumPages.selection].value;
		this.numPages = Math.floor(this.filteredProducts.length / ppp) + ((this.filteredProducts.length % ppp > 0) ? 1 : 0);
	}

	this.caGetProductId = function(productNum)
	{
		var		products=this.caGetProducts(true);


		if (productNum >= products.length)
			return '';

		return products[productNum].pricedProductId;
	}

	this.caGetColorId = function(productNum)
	{
		var		products=this.caGetProducts(true);


		if (productNum >= products.length)
			return '';

		return products[productNum].colourId;
	}

	this.caGetStoerer = function(productNum)
	{
		var		products=this.caGetProducts(true);


		if (productNum >= products.length)
			return '';

		return (products[productNum].catalogStoerer == '0' ? '' : products[productNum].catalogStoerer);
	}

	this.caGetBrands = function(productNum)
	{
		var		products=this.caGetProducts(true);
		var		brands;


		if (productNum >= products.length)
			return new Array();

		if (typeof products[productNum].brand == 'undefined')
			return new Array();

		if (products[productNum].brand.indexOf(';') >= 0)
			brands = products[productNum].brand.split(';');
		else
			brands = new Array(products[productNum].brand);

		return brands;
	}

	this.caGetLogos = function(productNum)
	{
		var		products=this.caGetProducts(true);


		if (productNum >= products.length)
			return new Array();

		if (typeof products[productNum].catalogLogo == 'undefined')
			return new Array();

		if (products[productNum].catalogLogo.indexOf(';') >= 0)
			return products[productNum].catalogLogo.split(';');

		return new Array(products[productNum].catalogLogo);
	}

	this.caGetProductName = function(productNum)
	{
		var		products=this.caGetProducts(true);


		if (productNum >= products.length)
			return '';

		if (typeof products[productNum].ccProductName == 'undefined')
			return '';

		return products[productNum].ccProductName;
	}

	this.caGetColorName = function(productNum)
	{
		var		products=this.caGetProducts(true);


		if (productNum >= products.length)
			return '';

		if (typeof products[productNum].colourname == 'undefined')
			return '';

		return products[productNum].colourname;
	}

	this.caGetPriceNew = function(productNum)
	{
		var		products=this.caGetProducts(true);


		if (productNum >= products.length)
			return '';

		if (typeof products[productNum].PriceNew == 'undefined')
			return '';

		return products[productNum].PriceNew.replace(',', '.');
	}

	this.caGetPriceSale = function(productNum)
	{
		var		products=this.caGetProducts(true);


		if (productNum >= products.length)
			return '';

		if (typeof products[productNum].PriceSale == 'undefined')
			return '';

		return products[productNum].PriceSale.replace(',', '.');
	}

	this.caGetPrice = function(productNum)
	{
		var			strOut='';
		var			priceSale=this.caGetPriceSale(productNum);
		var			priceNew=this.caGetPriceNew(productNum);
		var			fPriceSale=parseFloat(priceSale);
		var			fPriceNew=parseFloat(priceNew);


		if (fPriceSale != fPriceNew)
		{
			strOut += '<div id="PriceSaleNew">'+priceNew.replace('.', ',')+'&nbsp;&euro;</div>';
			strOut += '<div id="PriceSale">'+priceSale.replace('.', ',')+'&nbsp;&euro;</div>';
		}
		else
		{
			strOut += '<div id="PriceRegular">'+priceNew.replace('.', ',')+'&nbsp;&euro;</div>';
		}

		return strOut;
	}

	this.caGetCatalogText = function(productNum)
	{
		var		products=this.caGetProducts(true);


		if (productNum >= products.length)
			return new Array();

		if (typeof products[productNum].catalogText == 'undefined')
			return new Array();

		if (products[productNum].catalogText.indexOf(';') >= 0)
			return products[productNum].catalogText.split(';');

		return new Array(products[productNum].catalogText);
	}

	this.caGetZusatzText = function(productNum)
	{
		var		products=this.caGetProducts(true);


		if (productNum >= products.length)
			return '';

		if (typeof products[productNum].produktZusatz == 'undefined')
			return '';

		return products[productNum].produktZusatz;
	}

	this.caGetArticles = function(productNum)
	{
		var		products=this.caGetProducts(true);


		if (productNum >= products.length)
			return new Array();

		if (typeof products[productNum].articleName == 'undefined')
			return new Array();

		if (typeof products[productNum].articleName.length == 'undefined')
			return new Array(products[productNum].articleName);

		return products[productNum].articleName;
	}

	this.caGetMaterialsShoe = function(article)
	{
		if (typeof article == 'undefined')
			return new Array();

		if (typeof article.materialShoe != 'undefined')
		{
			if (typeof article.materialShoe.length == 'undefined')
				return new Array(article.materialShoe);

			return article.materialShoe;
		}

		// für die Abfrage in 'product_layers.js', wenn kein materialShoe-Object vorhanden ist
		return new Array(new Object());
	}

	this.caGetMaterialDesc = function(material)
	{
		if (typeof material.description.length == 'undefined')
			return new Array(material.description);

		return material.description;
	}

	this.caGetShoeMaterial = function(materialId)
	{
		switch (materialId)
		{
			case 1:
				return 'echtes Leder';

			case 2:
				return 'Textil';

			case 3:
				return 'Synthetik';

			default:
				return '';
		}
	}

	this.caGetMaterialString = function(article, hasMoreArticles)
	{
		var			matStr='';
		var			materials;
		var			descArr;
		var			j;
		var			k;
		var			perc;


		if (typeof hasMoreArticles == 'undefined')
			hasMoreArticles = false;

		// Wenn kein Schuh.
		if (this.caGetMaterialsShoe(article)[0].upperText == '0')
		{
			materials = article.material;

			for (k=0;k<materials.length;k++)
			{
				descArr = this.caGetMaterialDesc(materials[k]);

				if (materials.length > 1)
				{
					switch (materials[k].materialRole)
					{
						case 'Lining':
							continue;

						case 'Inner':
							continue;

						case 'Padded':
							continue;

						case 'Padding':
							continue;

						case 'Outer':
						default:
							break;
					}
				}

				for (j=0;j<descArr.length;j++)
				{
					if (j > 0)
					{
						matStr += ' ...';
						break;
					}

					if (descArr[j].materialName == '0')
						continue;

					perc = String(descArr[j].materialPercentage).replace(',00', '');
					if (perc == '0')
						continue;

					matStr += perc + '% ' + descArr[j].materialName;
				}

				// Nicht doppelt anzeigen.
				if (matStr.indexOf(' ...') >= 0)
					break;

				if (materials.length > 1)
					matStr += ' ...';
				else if (hasMoreArticles == true)
					matStr += ' ...';

				break;
			}
		}
		else
		{
			//Für Schuhe
			materials = this.caGetMaterialsShoe(article);

			for (j=0;j<materials.length;j++)
			{
				if (typeof materials[j].upperText != 'undefined')
				{
					matStr += this.caGetShoeMaterial(parseInt(materials[j].upperText));
					break;
				}
			}

			if (matStr != '' && materials.length > 1)
				matStr += ' ...';
		}

		return matStr;
	}
}
