$j(function () {
	var token;
	var brandPropertyType = 0;
	
	// find property type id for brands
	for (var id in window.productData.propertyTypes) {
		var pt = window.productData.propertyTypes[id];
		if (pt.key == 'Brand')
			brandPropertyType = id;
	}
	
	// find brand properties
	var brandNames = {};
	for (var id in window.productData.properties) {
		var prop = window.productData.properties[id];
		if (brandPropertyType == prop['type'])
			brandNames[id] = prop['val'];
	}
	
	var config = {
		sorting: $j('#sort-result'),
		properties: $j('#property-container li.property'),
		paging: {
			gui: {
				container: '.paging',
				prev: '.previous-page',
				next: '.next-page',
				currentPage: '.current',
				totalPages: '.total'
			},
			whitespaceAfterPage: true,
			totalPages: Panagora.filterJsData.totalPages,
			currentPage: Panagora.filterJsData.currentPage,
			urlTemplate: Panagora.filterJsData.urlTemplate,
			onFirstPage: function () { $j('.paging .previous-container').hide(); },
			onNotFirstPage: function () { $j('.paging .previous-container').show(); },
			onLastPage: function () { $j('.paging .next-container').hide(); },
			onNotLastPage: function () { $j('.paging .next-container').show(); },
			onPostNextPage: function (e) {
				if ($j('a.next-page').get(1) == e.originalTarget) {
					var firstItem = $j('#product-list .product:eq(0)');
					var newLeft = firstItem.offset().left - firstItem.css('margin-left').replace(/[^\d]/g,'');
					if ($j(window).scrollLeft() > newLeft)
						$j(window).scrollLeft(newLeft);
					$j(window).scrollTop($j('#page-container').offset().top - 20);
				}
			}
		},
		onPreAppendItem: function (element, item) {
			var brandName = '';
			for (var propertyId in item.props) {
				var p = window.productData.properties[propertyId];
				if (p && p.type == brandPropertyType) {
					brandName = p.val;
					break;
				}
			}
			$j('h4 a', element).text(brandName);
			$j('img', element).attr('alt', brandName +' '+ item.name);
			$j('a', element).each(function () {
				if (token)
					this.href += '#' + token;
			});
			return element;
		},
		productTemplate: {
			container: $j('#product-list'),
			element: '.product',
			link: '.plink',
			image: '.primary',
			imageSize: 'medium',
			name: '.name',
			description: '.description',
			price: '.price-container',
			priceTemplate: '<span class="price">{lowestPrice}</span>',
			varyingPriceTemplate: Panagora.filterJsData.varyingPriceTemplate,
			saleTemplate: '<del class="sale">{originalLowestPrice}</del><span class="sale">{lowestPrice}</span>',
			varyingPriceSaleTemplate: Panagora.filterJsData.varyingPriceSaleTemplate
		},
		onPostApplyFilter: function (items) {
			// Update total items
			$j('.totalitems').text(items.length);
			
			var datastring = 'productId=' + items.join('&productId=');
			
			if (token) {
				datastring  += "&token=" + token;
			}
			
			Panagora.post({
				url: Panagora.filterJsData.saveStateUrl,
				data: datastring,
				success: function(json) {
					if (!token) {
						$j('#product-list a').each(function () {
							this.href += "#" + json.Response;
						});
					}
					token = json.Response;
				}
			});
			
			$j('.property-type').each(function () {
				$j('.sub-property-type .property:not(.dimmed)', this).length == 0
					? $j(this).hide()
					: $j(this).show();
			});
		}
	};
	
	Panagora.PropertyMachine.setSortFunction('b', function (a, b) {
		var p1 = window.productData.products[a];
		var p2 = window.productData.products[b];
		var b1, b2;
		for (var pid in p1.props) if (brandNames[pid]) {
			b1 = brandNames[pid];
			break;
		}
		for (var pid in p2.props) if (brandNames[pid]) {
			b2 = brandNames[pid];
			break;
		}
		if (b1 > b2) return 1;
		else if (b1 < b2) return -1;
		return Panagora.PropertyMachine.sortFunctions.a(a, b);
	});
	
	Panagora.PropertyMachine.init(config);

	$j('#property-container').show();
});