function bshop(el, module, id, hash) {
	var url = 'index.html?_func=addbasket&_nrdr=1&_mode=' + module + '&_id=' + id + '&_nc=' + getUniqueID();
	if (hash) {
		url += '&_slid=' + hash;
	};
	var add = !el.className.match(/saved/);
	if (add) {
		var fc = true;
		Ext.select('form[id^=soptform]').each( function(f) {
			var elements = {};
			f.select('*[name^=sopt]').each( function(i) {
				if (i.dom.name !== "" && typeof i.dom.name !== "undefined") {
					var disabled = i.dom.getAttribute('disabled');
					if (disabled !== 'disabled') {
						if (!elements[i.dom.name]) {
							elements[i.dom.name] = {
								count : 0,
								selected : 0
							};
						};
						switch (i.dom.type) {
							case "checkbox":
								elements[i.dom.name].count++;
								if (i.dom.checked) {
									elements[i.dom.name].selected++;
								}
								;
								break;
							case "radio":
								elements[i.dom.name].count++;
								if (i.dom.checked) {
									elements[i.dom.name].selected++;
								}
								;
								break;
							case "select-one":
							case "select-multiple":
								elements[i.dom.name].count++;
								for ( var o = 0; o < i.dom.options.length; o++) {
									if (i.dom.options[o].selected) {
										elements[i.dom.name].selected++;
									}
								}
								;
								break;
							default:
								break;
						}
					};
				};
			});
			for ( var k in elements) {
				if (elements[k].selected == 0) {
					fc = false;
				}
			};
			url += '&' + Ext.Ajax.serializeForm(f.dom);
		});
		if (fc !== true) {
			msgBox(translate('Achtung'), translate('Auswahl unvollst&auml;ndig!'), 'ok');
			return (false);
		}
	} else {
		url += '&_rm=1';
	};
	Ext.Ajax.request( {
		url : url,
		method : 'get',
		success : function(req) {
			var param = decode(req.responseText);
			if (param.baskets) {
				foreach(param.baskets, function(v, k) {
					var basketcount = Ext.get('basket_count_' + k);
					if (basketcount) {
						basketcount.dom.innerHTML = v;
					}
				});
			};
			switch (param.status) {
				case 'added':
					//msgBox(translate('Warenkorb'), translate('Der Artikel wurde im Warenkorb gespeichert'), 'ok');
					break;
				case 'removed':
					//msgBox(translate('Warenkorb'), translate('Der Artikel wurde aus dem Warenkorb entfernt'), 'ok');
					break;
				case 'exists':
					msgBox(translate('Warenkorb'), translate('Dieser Artikel befindet sich bereits im Warenkorb'), 'ok');
					break;
			};
			var linkfile = Ext.get(el);
			if (linkfile) {
				if (linkfile.dom.name && (linkfile.dom.name != '')) {
					var elm = Ext.select('a[name=' + linkfile.dom.name + ']');
					elm.each( function(lnk) {
						lnk.dom.title = param.title;
						//lnk.dom.innerHTML = param.text;
						switch (param.status) {
							case 'added':
								lnk.dom.className = 'shop_saved shop_' + module + '_saved';
								if ((typeof spinners != 'undefined') && spinners['s' + hash]) {
									spinners['s' + hash].setValue(1);
								}
								;
								break;
							case 'removed':
								lnk.dom.className = 'shop shop_' + module;
								if ((typeof spinners != 'undefined') && spinners['s' + hash]) {
									spinners['s' + hash].setValue(0);
								}
								;
								break;
						}
					});
				} else {
					linkfile.dom.title = param.title;
					linkfile.dom.innerHTML = param.text;
					switch (param.status) {
						case 'added':
							linkfile.dom.className = 'shop_saved shop_' + module + '_saved';
							if ((typeof spinners != 'undefined') && spinners['s' + hash]) {
								spinners['s' + hash].setValue(1);
							}
							;
							break;
						case 'removed':
							linkfile.dom.className = 'shop shop_' + module;
							if ((typeof spinners != 'undefined') && spinners['s' + hash]) {
								spinners['s' + hash].setValue(0);
							}
							;
							break;
					}
				}
			}
		}
	});
};