function PricingCalculator(formular) {
	var _formular = formular;
	var _versionen = 0;

	var _preise_einzel = new Array();
	var _preise_netz = new Array();
	var _preiseTestversion = new Array();
	var _preiseArbeitsplatz_einzel = new Array();
	var _preiseArbeitsplatz_netz = new Array();
	var _preiseFloat = new Array();

	this.addVersion = function(preis_einzel, preis_netz, preisTest,
			preisPlatz_einzel, preisPlatz_netz, preisFloating) {
		_preise_einzel.push(preis_einzel);
		_preise_netz.push(preis_netz);
		_preiseTestversion.push(preisTest);
		_preiseArbeitsplatz_einzel.push(preisPlatz_einzel);
		_preiseArbeitsplatz_netz.push(preisPlatz_netz);
		_preiseFloat.push(preisFloating);
		_versionen++;
	}

	this.chooseTyp = function(which_Nr) {
		if (isNaN(which_Nr))
			return;
		if (which_Nr == 0 || which_Nr == 1)
			_formular.typ[which_Nr].checked = true;

		this.setTyp();
	}
	this.setTyp = function() {
		var versionenwert;
		if (_versionen == 1) {
			versionenwert = _formular.typ[0].checked ? _preise_einzel[0]
					: _formular.typ[1].checked ? _preise_netz[0] : "n/A";
			_formular.preis.value = isNaN(versionenwert) ? versionenwert
					: (versionenwert * 1).toFixed(2);
			if (_formular.version.checked)
				this.setPrices();
		} else {
			for ( var i = 0; i < _versionen; i++) {
				versionenwert = _formular.typ[0].checked ? _preise_einzel[i]
						: _formular.typ[1].checked ? _preise_netz[i] : "n/A";
				_formular.preis[i].value = isNaN(versionenwert) ? versionenwert
						: (versionenwert * 1).toFixed(2);
				if (_formular.version[i].checked)
					this.setPrices();
			}
		}
	}
	this.setPrices = function() {
		var preisArbeitsplatz = 0;
		var preisFloat = 0;
		var preisTest = 0;
		var preis = 0;
		var checked = -1;

		if (!(_formular.typ[0].checked || _formular.typ[1].checked)) {
			alert("Wählen Sie zwischen der Netzwerk- und der Einzelplatzversion");
			return;
		}

		if (_versionen == 1) {
			if (_formular.version.checked) {
				preis = _formular.typ[0].checked ? _preise_einzel[0]
						: _formular.typ[1].checked ? _preise_netz[0] : "n/A";
				preis = isNaN(preis) ? preis : (preis * 1).toFixed(2);
				preisTest = _formular.typ[0].checked ? _preiseTestversion[0] * 1
						: "n/A";
				preisArbeitsplatz = _formular.typ[0].checked ? _preiseArbeitsplatz_einzel[0]
						: _formular.typ[1].checked ? _preiseArbeitsplatz_netz[0]
								: "n/A";
				preisArbeitsplatz = isNaN(preisArbeitsplatz) ? preisArbeitsplatz
						: (preisArbeitsplatz * 1).toFixed(2);
				preisFloat = _preiseFloat[0];
				checked = 0;
			}
		} else {
			for ( var i = 0; i < _versionen; i++) {
				if (_formular.version[i].checked) {
					preis = _formular.typ[0].checked ? _preise_einzel[i]
							: _formular.typ[1].checked ? _preise_netz[i]
									: "n/A";
					preis = isNaN(preis) ? preis : (preis * 1).toFixed(2);
					preisTest = _formular.typ[0].checked ? _preiseTestversion[i] * 1
							: "n/A";
					preisArbeitsplatz = _formular.typ[0].checked ? _preiseArbeitsplatz_einzel[i]
							: _formular.typ[1].checked ? _preiseArbeitsplatz_netz[i]
									: "n/A";
					preisArbeitsplatz = isNaN(preisArbeitsplatz) ? preisArbeitsplatz
							: (preisArbeitsplatz * 1).toFixed(2);
					preisFloat = _preiseFloat[i];
					checked = i;
				}
				_formular.preis[i].value = _formular.typ[0].checked ? (_preise_einzel[i] * 1)
						.toFixed(2)
						: _formular.typ[1].checked ? (_preise_netz[i] * 1)
								.toFixed(2) : "n/A";
			}
		}
		_formular.stufe.value = preis;
		_formular.testpreis.value = isNaN(preisTest) ? preisTest : parseInt(
				preisTest).toFixed(2);

		// Testversion gibt es nur als Einzelplatz
		if (_formular.test.checked) {
			_formular.stufe.value = isNaN(preisTest) ? preisTest : parseInt(
					preisTest).toFixed(2);
			_formular.appreis.value = "";
			_formular.floatpreis.value = "";
			_formular.floatcount.value = "";
			_formular.apcount.value = "";
		} else {
			if (isNaN(preisArbeitsplatz)) {
				_formular.appreis.value = preisArbeitsplatz;
				_formular.apcount.value = "";
			} else
				_formular.appreis.value = parseInt(preisArbeitsplatz)
						.toFixed(2);

			if (isNaN(preisFloat)) {
				_formular.floatpreis.value = preisFloat;
				_formular.floatcount.value = "";
			} else
				_formular.floatpreis.value = parseInt(preisFloat).toFixed(2);
		}
		if (checked >= 0)
			calcPrices();
		else
			alert("Bitte wählen Sie zuerst ein Produkt aus.");
			// alert("Please choose a product first");
	}

	var calcPrices = function() {
		var apCount = _formular.apcount.value;
		var apPreis = isNaN(_formular.appreis.value) ? 0
				: _formular.appreis.value;
		var floatCount = _formular.floatcount.value;
		var floatPreis = isNaN(_formular.floatpreis.value) ? 0
				: _formular.floatpreis.value;
		var grundver = parseInt(_formular.stufe.value);
		var netto = 0;
		var mwst = 0;
		var erg = 0;
		var brutto = 0;

		if (isNaN(apCount)) {
			alert("Bitte geben Sie die gewünschte Anzahl ein\n\roder lassen Sie das Feld leer.");
			// alert("Please insert a number\n\rblank means 0.");
			do {
				apCount = apCount.substr(0, apCount.length - 1);
			} while (isNaN(apCount));
			_formular.apcount.value = apCount;
			_formular.apcount.focus();
		}
		if (isNaN(floatCount)) {
			alert("Bitte geben Sie die gewünschte Anzahl ein\n\roder lassen Sie das Feld leer.");
			// alert("Bitte geben eine Ganzzahl\n\roder nichts (entspricht
			// 0)\n\rein.");
			// alert("Please insert a number\n\rblank means 0.");
			do {
				floatCount = floatCount.substr(0, floatCount.length - 1);
			} while (isNaN(floatCount));
			_formular.floatcount.value = floatCount;
			_formular.floatcount.focus();
		}
		apCount = apCount > 0 ? apCount : 0;
		floatCount = floatCount > 0 ? floatCount : 0;

		// berechne Preist für weitere Arbeitsplätze unf floating
		_formular.apgesamt.value = (isNaN(apPreis) && apCount != 0) ? "n/A"
				: (apCount * apPreis).toFixed(2);
		_formular.floatgesamt.value = (isNaN(floatPreis) && floatCount != 0) ? "n/A"
				: (floatCount * floatPreis).toFixed(2);

		// nettopreis berechnen
		netto = grundver + (apCount * apPreis) + (floatCount * floatPreis);
		_formular.netto.value = isNaN(netto) ? "n/A" : netto.toFixed(2);

		mwst = netto * 0.19;
		brutto = netto + mwst;
		_formular.mwst.value = isNaN(mwst) ? "n/A" : mwst.toFixed(2);
		_formular.brutto.value = isNaN(brutto) ? "n/A" : brutto.toFixed(2);
	}
	// this.setShippingPrice = function() {
	// if (_formular.shippingValue[1].checked)
	// _formular.versand.value = _formular.shippingValue[1].value;
	// else
	// _formular.versand.value = _formular.shippingValue[0].value;
	// calcPrices();
	// }

	this.AddToCart = function() {
		var item_name = "";
		var item_names = new Array();
		var quantity = new Array();
		var item_typ = "";

		item_typ = _formular.typ[0].checked ? "-einzel"
				: _formular.typ[1].checked ? "-netz" : "-einzel";

		if (_versionen == 1) {
			if (_formular.version.checked) {
				item_name = _formular.version.value;
				if (!_formular.test.checked) { // Basisversion nur hinzufügen
					// wenn NICHT die Testversion
					// gewählt ist!
					item_names.push(item_name + item_typ);
					quantity.push(1);
				}
			}
		} else {
			for ( var i = 0; i < _versionen; i++) {
				if (_formular.version[i].checked) {
					item_name = _formular.version[i].value;
					if (!_formular.test.checked) { // Basisversion nur
						// hinzufügen wenn NICHT die
						// Testversion gewählt ist!
						item_names.push(item_name + item_typ);
						quantity.push(1);
					}
				}
			}
		}

		// Testversion
		if (_formular.test.checked) {
			item_names.push(item_name + "-Test");
			quantity.push(1);
		}

		// weitere ap
		if (_formular.apgesamt.value > 0) {
			item_names.push(item_name + "-full" + item_typ);
			quantity.push(_formular.apcount.value);
		}
		// weitere float
		if (_formular.floatgesamt.value > 0) {
			item_names.push(item_name + "-float");
			quantity.push(_formular.floatcount.value);
		}
		var amount = _formular.brutto.value;

		if (amount > 0) {
			put_in_cart(item_names.join("@"), "ins", quantity.join("@"));
		} else
			alert("Bitte wählen Sie zuerst ein gültiges Produkt");
			// alert("Please choose a valid product first");
	}
}

function OpenInfo(url) {
	popup = window.open(url, "information",
			'width=350,height=330,status=no,scrollbars=yes,resizable=no');
	popup.focus();
}
