function Basket(dataDelivry, dataPayment, dataAddon, dataAdditionalList, price ) {
    this.dataDelivry = dataDelivry||{};
    this.dataPayment = dataPayment||{};
    this.dataAddon = dataAddon||{};
    this.dataAdditionalList = dataAdditionalList||{};
    this.price = price||0;
    //this.dPrice = dPrice||0;
    //this.pPrice = pPrice||0;
}

Basket.prototype.$ = function (oid) {
    if (typeof oid == "object") {
        return oid;
    }
    if (!oid) {
        return null;
    }
    oid = document.getElementById(oid);
    if (oid) {
        return oid;
    } else {
        return null;
    }
};

Basket.prototype.inicjalize = function (oForm, preDelivry, prePayment, preAddon, pField, dpField, ppField, prePrice) {
    var el, self = this;
    this.oFrom = this.$(oForm);
    this.preDelivry = preDelivry||'';
    this.prePayment = prePayment||'';
    this.preAddon = preAddon||'';
    this.prePrice = prePrice||'';
    this.oPrice = this.$(pField);
    this.odPrice = this.$(dpField);
    this.opPrice = this.$(ppField);    
    this.actual = {};
    this.actual[self.preDelivry] = 0;
    this.actual[self.prePayment] = 0;
    this.actual[self.preAddon] = [];
    this.actual[self.prePrice] = [];
    for (var i = 0, ln = this.oFrom.elements.length; i < ln; i++) {
        el = this.oFrom.elements[i];
        if (self.getInputData(el) === true) {
            el.onclick = function () {
                self.setPrice(this);
            }
            if (el.checked) {
                self.addActual(el);
            }
        }
    }
}

Basket.prototype.addActual = function (ob) {
    var self = this;
    switch (ob.iType) {
        case self.preDelivry:
            self.actual[ob.iType] = 'd'+ob.identifier;
            self.actual[self.prePrice] = ob.identifier;
            break;
        case self.prePayment:
            self.actual[ob.iType] = 'p'+ob.identifier;
            break;
        case self.preAddon:
            if (self.actual[self.preAddon][ob.identifier]) {
                self.actual[self.preAddon][ob.identifier] = 0;
            } else {
                self.actual[self.preAddon][ob.identifier] = ob.identifier;
            }
        default:
            return false;
        break;
    }
    return true;
}

Basket.prototype.getInputData = function (ob) {
    var pre = '', self = this;
    if (typeof ob.id != 'undefined') {
        pre = ob.id.split('-', 2);
    }
    if (typeof pre[0] == 'undefined' || typeof pre[0] == 'undefined') {
        return false;
    }
    switch (pre[0]) {
        case self.preDelivry:
        case self.prePayment:
        case self.preAddon:
        case self.prePrice:
            ob.iType = pre[0];
            ob.identifier = pre[1];
            return true;
        default:
            return false;
        break;
    }
}

Basket.prototype.setPrice = function(ob) {
    var self = this, price = {};
    switch (ob.iType) {
        case self.preDelivry:
        case self.prePayment:
        case self.preAddon:
            self.addActual(ob);
            price = self.getPrice();
            self.oPrice.innerHTML = '<nobr>' + price.all + ' zł</nobr>';
            self.odPrice.innerHTML = '<nobr>' + price.delivery + ' zł</nobr>';
            self.opPrice.innerHTML = '<nobr>' + price.payment + ' zł</nobr>';
            //self.prePrice.innerHTML = '<nobr>' + price.deliveryAdditionall + ' zł</nobr>';
            
            //for(var i = 1, ln = price.deliveryAdditionallInfo.length; i <= ln; i++) {
            for(var i in price.deliveryAdditionallInfo) {
                document.getElementById(self.prePrice + '-' + i).innerHTML = '<nobr>' + price.deliveryAdditionallInfo[i] + ' zł</nobr>';
            }
            return true;
        default:
            return false;
        break;
    }
}

Basket.prototype.getPrice = function () {
    var self = this, prices = {'all':self.price, 'delivery':0, 'payment':0, 'deliveryAdditionallInfo':[]}, el, pDid, pPid, pDidA, percent = 0;

    pDid = self.actual[self.preDelivry]||'';
    if (pDid && typeof self.dataDelivry[pDid] != 'undefined') {
        prices.delivery += self.dataDelivry[pDid]*1;
    }
        
    pPid = self.actual[self.prePayment]||'';
    if (pPid && typeof self.dataPayment[pPid] != 'undefined') {
        if (self.dataPayment[pPid].match('%')) {
            percent = self.dataPayment[pPid].replace('\s', '');
            percent = self.dataPayment[pPid].replace('%', '');
            percent = self.dataPayment[pPid].replace(',', '.');
            percent = parseFloat(percent);
        } else {
            prices.all += self.dataPayment[pPid]*1;
        }
    }

    pDid = pDid.replace('d', '');
    for (var i = 0, ln = self.actual[self.preAddon].length; i < ln; i++) {
        el = self.actual[self.preAddon][i]||0;
        if (el && typeof self.dataAddon[pDid + '-' + el] != 'undefined') {
            prices.delivery += self.dataAddon[pDid + '-' + el]*1;
        }
    }
    
    pDidA = pDid;
    //alert(self.dataAdditionalList);
    
    var ids = self.dataAdditionalList.split(',');
    //alert(ids);
    //for(i in ids) {
    for (var i = 0, ln = ids.length; i < ln; i++) {
        el = ids[i];
        //alert(el);
        //alert('---' + pDidA + '-' + el + '----');
        if (pDidA && typeof self.dataAddon[pDidA + '-' + el] != 'undefined') {
            //alert(self.dataAddon[pDidA + '-' + el]);
            prices.deliveryAdditionallInfo[el] = self.dataAddon[pDid + '-' + el]*1;
        }  else {
            prices.deliveryAdditionallInfo[el] = 0;
        }
    }  
    //alert(prices.deliveryAdditionallInfo);
    
    
    
    if (pPid && typeof self.dataPayment[pPid] != 'undefined') {
        if (self.dataPayment[pPid].match('%')) {
            prices.payment = Math.round(self.price * percent)/100;
        } else {
            prices.payment = self.dataPayment[pPid]*1;        
        }
    } else {
        prices.payment = 0;
    }
    //alert(prices.payment);
    prices.all += Math.round(self.price * percent)/100;
    prices.all += prices.delivery*1;
    return prices;
}

