var Tx_Mevshop_ProductList = new Class({

	Implements: [Options],
	options:{
		Tx_Mevshop_ProductSearch : null 	// hier wird die Instanz der Produktsuche übergeben, falls vorhanden
	},

	/**
	 * Construktor
	 * @param container Die Tabelle, die die Produkliste darstellt
	 * @param options Zusätzliche Optionen
	 */
	initialize: function(container, options) {
		this.container = container;
		this.setOptions(options);




		this.productRows = this.container.getElements('tbody tr');

			// jeder Produktzeile ein Produktobjekt instanziieren
		this.productRows.each(function(element) {
			var productConstructor = window['Tx_Mevshop_Product'];
			var sku = element.getElement('td.itemno').firstChild.nodeValue;
			if ('15' === sku.substr(0, 2)) {
				productConstructor = window['Tx_Mevshop_Product'].AE10;
			} else if ('50' === sku.substr(0, 2)) {
				switch (element.getElement('.teileGruppe').get('text')) {
					case 'A':
						productConstructor = window['Tx_Mevshop_Product'].Configurable.A20;
						break;
					default:
						productConstructor = window['Tx_Mevshop_Product'].Configurable.EFG20;
						break;
				}
			}

			new productConstructor(element, {
				sku: sku,
				uid: element.getElement('span.itemId').get('text'),
				guiElements: {
					amount: element.getElement('input.amount'),
					toCart: element.getElement('img.addToCart'),
					itemPriceCell: element.getElement('td.itemprice')
				},
				tgr: element.getElement('.teileGruppe').get('text'),
				ownerList: this
			});
		});

		//this.getInitPrices();
		//this.initCartFunction();
		this.initFunctionRow();
	},


	/**
	 * Generiert die Tabellenzeile, die (derzeit) für die Sortierbuttons ist.
	 */
	initFunctionRow: function() {

			// derzeige Überschriftenzeile Klonen und als Funktionszeile einfügen
		var theRow = this.container.getElement('thead tr.captions')
			.clone()
			.replaces(this.container.getElement('tr.functions'))
			.set('class', 'functions');

			// alle Elemente leeren ("empty" geht nicht)
		theRow.getChildren().set('text','');


		if(this.options.Tx_Mevshop_ProductSearch) {
			this.options.Tx_Mevshop_ProductSearch.applySortables(theRow);
		} else {

				// den derzeitigen GET-Query-String holen
			var searchObj = $H(window.location.search.slice(1).replace(/\&\=$/, '').parseQueryString());	// slice(1) entfernt den leading '?' von location.search, außerdem wird ein ggf. angehängtes &= entfernt.


			var activeElem = theRow.getElement('th[rel='+searchObj.sortBy+']');
			if(!activeElem) activeElem = theRow.getFirst();

				// Klasse des aktiven Elements setzen:
			activeElem.addClass('sort-desc'==searchObj.sortOrder ? 'sort-desc' : 'sort-asc');



				// ...und Sortierfunktion applizieren:
			theRow.getChildren().addEvent('click', function(evt){
				elem = document.id(evt.target);

				var sortParams = $H({
					'sortBy':elem.get('rel'),
					'sortOrder': (elem.hasClass('sort-asc') ? 'sort-desc' : 'sort-asc')
				});

				window.location.search = '?' + sortParams.combine(searchObj).toQueryString().cleanQueryString();

			}.bind(this));
		}
	}
});




Element.implement({
	attachTx_Mevshop_ProductList: function(options) {
		if('table'==this.get('tag')) {
			this.store('Tx_Mevshop_ProductList', new Tx_Mevshop_ProductList(this, options));
		}
		return this;
	}
});



window.addEvent('domready', function() {
	$$('table.articlelist').attachTx_Mevshop_ProductList();
});
