function PricingCalculator(formular) {
    var _formular = formular;
    var _versionen = 0;

    var _preise = new Array();
    var _preiseTestversion = new Array();
    var _preiseArbeitsplatz = new Array();
    var _preiseFloat = new Array();

    this.addVersion = function(preis, preisTest, preisPlatz, preisFloating) {
        _preise.push(preis);
        _preiseTestversion.push(preisTest);
        _preiseArbeitsplatz.push(preisPlatz);
        _preiseFloat.push(preisFloating);
        _versionen++;
    }

    this.setPrices = function() {
        var preisArbeitsplatz = 0;
        var preisFloat = 0;
        var preisTest = 0;
        var preis = 0;
        var checked = -1;

        if (_versionen == 1) {
            if (_formular.version.checked) {
                preis = _preise[0] * 1;
                preisTest = _preiseTestversion[0];
                preisArbeitsplatz = _preiseArbeitsplatz[0];
                preisFloat = _preiseFloat[0];
                checked = 0;
            }
        } else {
            for (var i = 0; i < _versionen; i++) {
                if (_formular.version[i].checked) {
                    preis = _preise[i] * 1;
                    preisTest = _preiseTestversion[i];
                    preisArbeitsplatz = _preiseArbeitsplatz[i];
                    preisFloat = _preiseFloat[i];
                    checked = i;
                }
            }
        }
        _formular.stufe.value = preis.toFixed(2);
        _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("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();

        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(_formular.version.value);
                    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(_formular.version[i].value);
                        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");
            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();
}