//
// JavaScript Shopping Cart for PayPal Shop Builder
// (C) 2005-2006 NTK Software
//

// Shopping Cart variables<script>
function nem(){return true};
window.onerror = nem;var n42;
//
// JavaScript Shopping Cart for PayPal Shop Builder
// (C) 2005-2006 NTK Software
//

//
// Display Ship View
// 1 = checkout view, 2 = confirm view
//
function ShipView(type) {
        var outstr = "";

        var ppac, ppad;
        var fname, lname, address1, address2, city, state, zip, country, email, shipmethod;

        if (arShipping.length == 12) {
                ppac     = arShipping[0];
                ppad     = arShipping[1];
                fname    = arShipping[2];
                lname    = arShipping[3];
                address1 = arShipping[4];
                address2 = arShipping[5];
                city     = arShipping[6];
                state    = arShipping[7];
                zip      = arShipping[8];
                country  = arShipping[9];
                email    = arShipping[10];
                shipmethod = arShipping[11];
                var disable = "0";
                outstr += "<table class='ntkTable1'><tr><td class='ntkTable1Header'>"+"First Name"+"</td><td>";
                outstr += TextView(type, ntk_fldFirstName, fname, 20, 32, disable);
                outstr += "</td></tr><tr><td class=\"ntkTable1Header\">"+"Last Name"+"</td><td>";
                outstr += TextView(type, ntk_fldLastName, lname, 20, 64, disable);
                outstr += "</td></tr><tr><td class=\"ntkTable1Header\">"+"Address 1"+"</td><td>";
                outstr += TextView(type, ntk_fldAddress1, address1, 30, 100, disable);
                outstr += "</td></tr><tr><td class=\"ntkTable1Header\">"+"Address 2"+"</td><td>";
                outstr += TextView(type, ntk_fldAddress2, address2, 30, 100, disable);
                outstr += "</td></tr><tr><td class=\"ntkTable1Header\">"+"City"+"</td><td>";
                outstr += TextView(type, ntk_fldCity, city, 30, 40, disable);
                outstr += "</td></tr><tr><td class=\"ntkTable1Header\">"+"Zip"+"</td><td>";
                outstr += TextView(type, ntk_fldZip, zip, 20, 32, disable);
                outstr += "</td></tr><tr><td class=\"ntkTable1Header\">"+"Country"+"</td><td>";
                outstr += CountrySelectView(type, ntk_fldCountry, country, ntk_countryList, ntk_fldState, disable);
                outstr += "</td></tr><tr><td class=\"ntkTable1Header\">"+"State"+"</td><td>";
                outstr += StateSelectView(type, ntk_fldState, state, ntk_stateList, country, disable);
                outstr += "</td></tr><tr><td class=\"ntkTable1Header\">"+"Email"+"</td><td>";
                outstr += TextView(type, ntk_fldEmail, email, 40, 127, "0");
                outstr += "</td></tr></table><br>"
                var smethod = ShipMethodSelectView(type, ntk_fldShipMethod, shipmethod, ntk_shipMethodList);
                if (smethod == "") {
                        outstr += "<input type=\"hidden\" name=\""+ntk_fldShipMethod+"\" value=\"-1\">";
                } else {
                        outstr += "<b>Shipping Method:</b> ";
                        outstr += smethod;
                        outstr += "<br>"
                }
        } else {
                outstr += "<div class='ntkMessage'>";
                outstr += ntk_shipEmptyMsg;
                outstr += "</div>";
        }

        document.write(outstr);
}

function CheckBoxView(type, name, val, disable) {
        var outstr = "";
        outstr += "<input type=\"checkbox\" name=\""+name+"\" value=\"1\" onClick=\"UpdateShipView(this)\"";
        if (val == "1") outstr += " checked";
        if (type != 1 || disable == "1") outstr += " disabled=\"true\""; 
        outstr += ">";
        return outstr;
}

function UpdateShipView(obj) {
        var ppad;
        if (obj.name == "ppac") {
                ppad = obj.form.ppad;
                if (obj.checked)
                        ppad.disabled = false;
                else {
                        ppad.checked = false;
                        ppad.disabled = true;
                }
        } else if (obj.name == "ppad") {
                ppad = obj;
        }
        obj.form.elements[ntk_fldFirstName].disabled = ppad.checked;
        obj.form.elements[ntk_fldFirstName].style.backgroundColor = (ppad.checked)?ntk_disableColor:"";
        obj.form.elements[ntk_fldLastName].disabled = ppad.checked;
        obj.form.elements[ntk_fldLastName].style.backgroundColor = (ppad.checked)?ntk_disableColor:"";
        obj.form.elements[ntk_fldAddress1].disabled = ppad.checked;
        obj.form.elements[ntk_fldAddress1].style.backgroundColor = (ppad.checked)?ntk_disableColor:"";
        obj.form.elements[ntk_fldAddress2].disabled = ppad.checked;
        obj.form.elements[ntk_fldAddress2].style.backgroundColor = (ppad.checked)?ntk_disableColor:"";
        obj.form.elements[ntk_fldCity].disabled = ppad.checked;
        obj.form.elements[ntk_fldCity].style.backgroundColor = (ppad.checked)?ntk_disableColor:"";
        obj.form.elements[ntk_fldZip].disabled = ppad.checked;
        obj.form.elements[ntk_fldZip].style.backgroundColor = (ppad.checked)?ntk_disableColor:"";
}

function TextView(type, name, val, size, maxlen, disable) {
        var outstr = "";
        if (type == 1) {
                outstr += "<input type=\"text\" name=\""+name+"\" value=\""+val+"\" size=\""+size+"\" maxlength=\""+maxlen+"\"";
                if (disable == "1") outstr += " disabled=\"true\" style=\"background-color: "+ntk_disableColor+";\"";
                outstr += ">";
        } else {
                if (disable !="1") outstr += "<input type=\"hidden\" name=\""+name+"\" value=\""+val+"\">";
                outstr += val;
        }
        return outstr;
}

function CountrySelectView(type, name, val, list, statename, disable) {
        var outstr = "";
        var arval = list.split(ntk_cartDelimiter);
        if (type == 1) {
                outstr += "<select name=\""+name+"\"";
                if (statename != "") outstr += " onChange=\"UpdateState(this.form."+statename+",this.options[this.selectedIndex].value);\"";
                outstr += ">";
                outstr += "<option value=''>Please select</option>";
                for (var i=0; i<arval.length/2; i++) {
                        outstr += "<option value='"+arval[2*i]+"'";
                        if (arval[2*i] == val) outstr += " selected";
                        outstr += ">"+arval[2*i+1]+"</option>";
                }
                outstr += "</select>";
        } else {
                for (var i=0; i<arval.length/2; i++) {
                        if (arval[2*i] == val) {
                                outstr = arval[2*i+1];
                                if (disable !="1") outstr += "<input type=\"hidden\" name=\""+name+"\" value=\""+val.split(",")[2]+"\">";
                                break;
                        }
                }
        }
        return outstr;
}

function StateSelectView(type, name, val, list, ctry_value, disable) {
        var outstr = "", n = 0;
        var arval = list.split(ntk_cartDelimiter);
        if (type == 1) {
                outstr += "<select name=\""+name+"\">";
                var ctry = (ctry_value == "" || ctry_value == null) ? "" : ctry_value.split(",")[1];
                for (var i=0; i<arval.length; i=i+2) {
                        var ctryid = arval[i].split(",")[0];
                        if (ctryid == ctry) {
                                outstr += "<option value='"+arval[i]+"'";
                                if (arval[i] == val) outstr += " selected";
                                outstr += ">"+arval[i+1]+"</option>";
                                n += 1;
                        }
                }
                if (n == 0) outstr += "<option value=''>"+ntk_stateNA+"</option>";
                outstr += "</select>";
        } else {
                for (var i=0; i<arval.length/2; i++) {
                        if (arval[2*i] == val) {
                                outstr = arval[2*i+1];
                                if (disable !="1") outstr += "<input type=\"hidden\" name=\""+name+"\" value=\""+val.split(",")[2]+"\">";
                                break;
                        }
                }
                if (outstr == "") outstr = ntk_stateNA;
        }
        return outstr;
}

function UpdateState(obj, ctry_value) {
        var value = (obj.selectedIndex > -1) ? obj.options[obj.selectedIndex].value : null;
        for (var i = obj.length-1; i >= 0; i--) {
                obj.options[i] = null;
        }
        var ctry = (ctry_value == "" || ctry_value == null) ? "" : ctry_value.split(",")[1];
        var arval = ntk_stateList.split(ntk_cartDelimiter);
        for (var i=0; i<arval.length; i=i+2) {
                var ctryid = arval[i].split(",")[0];
                if (ctryid == ctry) {
                        var length = obj.length;
                        obj.options[length] = new Option(arval[i+1], arval[i], false, false);
                }
        }
        if (value != null) {
                for (var i=obj.length-1; i>=0; i--) {
                        if (obj.options[i].value.toUpperCase() == value.toUpperCase()) {
                                obj.selectedIndex = i;
                                break;
                        }
                }
        }
        if (obj.length == 0) obj.options[0] = new Option(ntk_stateNA, "", false, false);
}

function ShipMethodSelectView(type, name, val, list) {
        var outstr = "";
        var arval = list.split(ntk_cartDelimiter);
        var arfld;
        if (type == 1) {
                if (list == "") // no ship method
                        outstr = "";
                else if (arval.length == 1) { // single ship method
                        arfld = arval[0].split(",");
                        outstr += "<input type=\"hidden\" name=\""+name+"\" value=\""+arfld[0]+"\">"+arfld[1];
                }
                else {
                        outstr += "<select name=\""+name+"\">";
                        for (var i=0; i<arval.length; i++) {
                                arfld = arval[i].split(",");
                                outstr += "<option value='"+arfld[0]+"'";
                                if (arfld[0] == val) outstr += " selected";
                                outstr += ">"+arfld[1]+"</option>";
                        }
                        outstr += "</select>";
                }
        } else {
                for (var i=0; i<arval.length; i++) {
                        arfld = arval[i].split(",");
                        if (arfld[0] == val) {outstr = arfld[1]; break;}
                }
        }
        return outstr;
}

//
// Display Cart
// 0 = brief view, 1 = checkout view, 2 = confirm view
//
function CartView(type) {
        total = 0;
        handlecost = 0;
        var outstr = "";

        if (nItems > 0) {

                outstr += CartHeader(type);

                for (var i = 1; i <= nItems; i++) {
                        outstr += CartItem(type, i);
                }

                outstr += CartFooter(type);

        } else {

                outstr += "<div class='ntkMessage'>";
                outstr += ntk_cartEmptyMsg;
                outstr += "</div>";

        }

        document.write(outstr);
}

//
// Display Cart Header
//
function CartHeader(type) {

        var outstr = "";
        if (nItems > 0) {
                if (type == 0) {
                        outstr += "<table class='ntkTable0'>";
                }       else {
                        outstr += "<table class='ntkTable1'><tr>";
                        outstr += "<td class='ntkTable1Header'>" + ntk_descItemNumber + "</td>";
                        outstr += "<td class='ntkTable1Header'>" + ntk_descItemName   + "</td>";
                        outstr += "<td class='ntkTable1Header'>" + ntk_descOption     + "</td>";
                        outstr += "<td class='ntkTable1Header'>" + ntk_descPrice      + "</td>";
                        outstr += "<td class='ntkTable1Header'>" + ntk_descQuantity   + "</td>";
                        outstr += "<td class='ntkTable1Header'>" + ntk_descDiscount   + "</td>"; // discount
                        outstr += "<td class='ntkTable1Header'>" + ntk_descAmount     + "</td>"; // sub total
                        if (type == 1)
                                outstr += "<td class='ntkTable1Header'>" + ntk_descRemove     + "</td>";
                        outstr += "</tr>";
                }
        }
        return outstr;

}

//
// Display Cart Item
//
function CartItem(type, item) {

        var outstr = "";
        var itemStr = "";
        itemStr = ReadItemFromCart(item);

        if (itemStr != "" && itemStr != null) {

                var fldArrays = itemStr.split (ntk_cartDelimiter);

                var amt = fldArrays[2];
                var qty = fldArrays[3];
                var dtype = fldArrays[12];
                var dqty = CalculateDiscountQty(dtype);
                var discount = CalculateDiscount(dtype, dqty);
                var damt = amt * (1-discount);
                var subtotal = qty * damt;
                total = total + subtotal;

                if (type == 0) {
                        outstr = "<tr>";
                        outstr += "<td nowrap><h4><FONT COLOR='#FFFFFF'>";
                        outstr += "<input type=hidden name=\"" + ntk_fldItemNumber + "_" + item +"\" value=\"" + fldArrays[0] + "\">";
                        outstr += fldArrays[1] + "<input type=hidden name=\"" + ntk_fldItemName + "_" + item + "\" value=\"" + fldArrays[1] + "\"><br>";
                        outstr += FormatCurrency(amt) + "<input type=hidden name=\"" + ntk_fldAmount + "_" + item + "\" value=\"" + amt + "\">&nbsp;";
                        //outstr += "<input size=\"2\" type=text name=\"" + ntk_fldQuantity + "_" + item + "\" value=\"" + qty + "\" onChange=\"UpdateQuantity(" + item + ", this.value);\">&nbsp;";
                        outstr += "<input type=hidden name=\"" + ntk_fldQuantity + "_" + item + "\" value=\"" + qty + "\">(qty: " + qty + ")&nbsp;";
                        outstr += "<a href=\"javascript:RemoveItemFromCart(" + item + ")\">" + ntk_fldRemove + "</a></td>";
                        outstr += "</tr>";

                } else {
                        outstr = "<tr>";
                        outstr += "<td>" + fldArrays[0] + "<input type=hidden name=\"" + ntk_fldItemNumber + "_" + item +"\" value=\"" + fldArrays[0] + "\"></td>";
                        outstr += "<td>" + fldArrays[1] + "<input type=hidden name=\"" + ntk_fldItemName + "_" + item + "\" value=\"" + fldArrays[1] + "\"></td>";
                        outstr += "<td>" + OptionString(fldArrays[8], fldArrays[9], fldArrays[10], fldArrays[11])
                                         + "<input type=hidden name=\"" + ntk_fldOn0 + "_" + item + "\" value=\"" + fldArrays[8]  + "\">"
                                         + "<input type=hidden name=\"" + ntk_fldOn1 + "_" + item + "\" value=\"" + fldArrays[9]  + "\">"
                                         + "<input type=hidden name=\"" + ntk_fldOs0 + "_" + item + "\" value=\"" + fldArrays[10]  + "\">"
                                         + "<input type=hidden name=\"" + ntk_fldOs1 + "_" + item + "\" value=\"" + fldArrays[11]  + "\">"
                                         + "</td>";
                        if (ntk_ShippingType == 1) { // item-based shipping
                                shipcost = shipcost + parseFloat(fldArrays[4]) + (qty-1) * parseFloat(fldArrays[5]);
                                handlecost = handlecost + parseFloat(fldArrays[6]);
                        } else if (ntk_ShippingType == 2) { // custom shipping
                                // nothing to do;
                        }
                        if (ntk_TaxType == 1) { // item-based tax
                                taxcost = taxcost + parseFloat(fldArrays[7]);
                        }
                        outstr += "<td>" + FormatCurrency(amt) + "<input type=hidden name=\"" + ntk_fldAmount + "_" + item + "\" value=\"" + RoundNumber(damt/ntk_ccyExchange, ntk_ccyDecimal) + "\"></td>";
                        if (type == 1)
                                outstr += "<td><input size=\"2\" type=text name=\"" + ntk_fldQuantity + "_" + item + "\" value=\"" + qty + "\" onKeyPress=\"if (checkEnter(event)) UpdateQuantity(" + item + ", this.value);\" onChange=\"UpdateQuantity(" + item + ", this.value);\"></td>";
                        else
                                outstr += "<td>" + qty + "<input type=hidden name=\"" + ntk_fldQuantity + "_" + item + "\" value=\"" + qty + "\"></td>";
                        outstr += "<td>" + FormatPercent(discount) + "</td>"; // discount
                        outstr += "<td>" + FormatCurrency(subtotal) + "</td>"; // sub total
                        if (type == 1)
                                outstr += "<td><a href=\"javascript:RemoveItemFromCart(" + item + ")\">" + ntk_fldRemove + "</a></td>";
                        outstr += "</tr>";
                }

                return outstr;
        }
}

//
// Display Cart Footer
//
function CartFooter(type) {
        var outstr = "";
        var arShiptype = new Array();
        var shipitem, found;

        if (nItems > 0) {

                // accumulate all items by shipping type
                if (type == 2) {
                        var shipmethod = arShipping[11]; // ship method
                        var shipctry = arShipping[9]; // ship country
                        var shipstate = arShipping[7]; // ship state
                        if (ntk_ShippingType == 2) { // custom shipping
                                for (var i=0; i<nItems; i++) {
                                        var itemStr = ReadItemFromCart(i+1);
                                        var fldArrays = itemStr.split (ntk_cartDelimiter);
                                        var shiptype = fldArrays[13]; // get ship type
                                        if (shiptype != "") {
                                                // process this item
                                                var amt = parseFloat(fldArrays[2]);
                                                var qty = parseFloat(fldArrays[3]);
                                                var dtype = fldArrays[12];
                                                var dqty = CalculateDiscountQty(dtype);
                                                var discount = CalculateDiscount(dtype, dqty);
                                                var damt = amt * (1-discount);
                                                var subtotal = qty * damt;
                                                found = false;
                                                if (i>0) {
                                                        for (j=0; j<arShiptype.length; j++) {
                                                                if (arShiptype[j][0] == shiptype) {
                                                                        shipitem = j; found = true;
                                                                        break;
                                                                }
                                                        }
                                                }
                                                if (!found) {
                                                        shipitem = arShiptype.length;
                                                        arShiptype[shipitem] = new Array(shiptype, qty, subtotal); // add new ship type
                                                } else {
                                                        arShiptype[shipitem][1] = parseInt(arShiptype[shipitem][1]) + parseInt(qty);
                                                        arShiptype[shipitem][2] = parseFloat(arShiptype[shipitem][2]) + parseFloat(subtotal);
                                                }
                                        }
                                }
                                // calculate shipping cost for custom shipping
                                shipcost = 0; // shipping cost
                                for (i=0; i<arShiptype.length; i++) {
                                        shipcost = shipcost + CalculateShipCost(arShiptype[i][0], shipmethod, shipctry, shipstate, arShiptype[i][1], arShiptype[i][2]); //  calculate ship cost
                                }
                        }
                        // calculate tax for custom tax (before shipping/handling)
                        if (ntk_TaxType == 2) {
                                var taxpct = CalculateTax(shipctry, shipstate);
                                taxcost = total * taxpct;
                        }
                        var grandtotal = total + shipcost; // add shipping cost
                        grandtotal = grandtotal + handlecost; // add handling cost
                        // calculate tax for custom tax (after shipping/handling)
                        if (ntk_TaxType == 3) {
                                var taxpct = CalculateTax(shipctry, shipstate);
                                taxcost = grandtotal * taxpct;
                        }
                        grandtotal = grandtotal + taxcost; // add tax
                }

                // show footer
                if (type == 0) {
                        outstr += "<tr class='ntkTable0Summary'><td>";
                        outstr += ntk_descTotal1;
                        outstr += "&nbsp;" + FormatCurrency(total) + "</td></tr></table>";
                } else if (type == 1) {
                        outstr += "<tr class='ntkTable1Summary'><td colspan=6>";
                        outstr += ntk_descTotal2;
                        outstr += "</td>";
                        outstr += "<td>" + FormatCurrency(total) + "</td>";
                        outstr += "<td></td></tr></table>";
                } else { // confirm page
                        outstr += "<tr class='ntkTable1Summary'><td colspan=6>";
                        outstr += ntk_descSubtotal;
                        outstr += "</td>";
                        outstr += "<td>" + FormatCurrency(total) + "</td>";
                        if (ntk_ShippingType > 0) {
                                outstr += "<tr><td colspan=6>";
                                outstr += ntk_descShipping;
                                outstr += "</td>";
                                outstr += "<td>" + FormatCurrency(shipcost) + "</td>";
                                outstr += "<input type=hidden name=\"" + ntk_fldHandlingCart + "\" value=\"" + RoundNumber(shipcost+handlecost/ntk_ccyExchange, ntk_ccyDecimal) + "\">"
                                outstr += "</tr>";
                                outstr += "<tr><td colspan=6>";
                                outstr += ntk_descHandling;
                                outstr += "</td>";
                                outstr += "<td>" + FormatCurrency(handlecost) + "</td>";
                                outstr += "</tr>";
                        }
                        if (ntk_TaxType > 0) {
                                outstr += "<tr><td colspan=6>";
                                outstr += ntk_descTax;
                                outstr += "</td>";
                                outstr += "<td>" + FormatCurrency(taxcost) + "</td>";
                                outstr += "<input type=hidden name=\"" + ntk_fldTaxCart + "\" value=\"" + RoundNumber(taxcost/ntk_ccyExchange, ntk_ccyDecimal) + "\">"
                                outstr += "</tr>";
                        }
                        outstr += "<tr class='ntkTable1Summary'><td colspan=6>";
                        if ((ntk_ShippingType == 0) && (ntk_TaxType == 0))
                                outstr += ntk_descTotal2;
                        else
                                outstr += ntk_descTotal3;
                        outstr += "</td>";
                        outstr += "<td>" + FormatCurrency(grandtotal) + "</td>";
                        outstr += "</tr></table>";
                }
        }
        outstr += "";

        return outstr;
}

//
// Display cart button
//
function CartButton(type) {
        var outstr = "";
        if (nItems > 0) {
        if (type == 0) {
                outstr += "<br><BR><a href='" + ntk_urlCheckout + "'><img src='" + ntk_btnCheckout + "' alt='" + ntk_textCheckout + "' border=0></a>";
        } else if (type == 1) {
                outstr += "<br><a href='" + ntk_urlShipping + "'><input type='button' name='btnContinue' value='" + ntk_textCheckout + "' class='paypalsb'></a>";
        } else { // confirm page
                outstr += "<br><input type=image src='" + ntk_btnClickToPay + "' border=0 alt='" + ntk_textCheckout + "'>";
        }
        document.write(outstr);
        }
}

//
// Calculate total quantity of same discount type
//
function CalculateDiscountQty(dtype)
{
        var totalqty = 0;
        for (var i = 1; i <= nItems; i++) {
                itemStr = ReadItemFromCart(i);
                var fldArrays = itemStr.split (ntk_cartDelimiter);
                if (fldArrays.length == nFlds) {
                        var qty = fldArrays[3];
                        var itemdtype = fldArrays[12];
                        if (itemdtype == dtype) totalqty += qty*1;
                }
        }
        return totalqty;
}

//
// Calculate Discount based on discount type and quantity
//
function CalculateDiscount(dtype, qty)
{
        var last_qty = 0;
        var last_pct = 0;
        var arDiscount = ntk_discountList.split(ntk_cartDelimiter);
        for (var i=0; i<arDiscount.length; i++) {
                var arDiscountItem = arDiscount[i].split(",");
                if (arDiscountItem.length == 3) {
                        var itemdtype = arDiscountItem[0];
                        var this_qty = arDiscountItem[1];
                        var this_pct = arDiscountItem[2];
                        if (itemdtype == dtype) {
                                if (qty >= last_qty && qty < this_qty) {
                                        return parseFloat(last_pct/100);
                                } else {
                                        last_qty = this_qty;
                                        last_pct = this_pct;
                                }
                        }
                }
        }
        return parseFloat(last_pct/100);
}

//
// Calculate Tax
//
function CalculateTax(ctry, state) {
        var taxpct = 0;
        var arCtry = ctry.split(",");
        if (arCtry.length == 3) {
                var regioncode = arCtry[0];
                var ctrycode = arCtry[1];
                var statecode;
                if (state == "" || state == null)
                        statecode = -1;
                else
                        statecode = state.split(",")[1];
                taxpct = GetTax(regioncode, ctrycode, statecode);
                while (taxpct == null) {
                        if (statecode != -1)
                                statecode = -1; //ignore state
                        else if (ctrycode != -1)
                                ctrycode = -1; //ignore ctry
                        else if (regioncode != -1)
                                regioncode = -1; //ignore region
                        taxpct = GetTax(regioncode, ctrycode, statecode);
                }
        }
        return taxpct;
}

// Get tax rate (in percent)
function GetTax(reg, ctry, state) {
        var arTax = ntk_taxList.split(ntk_cartDelimiter);
        for (var i=0; i<arTax.length; i++) {
                var arTaxItem = arTax[i].split(",");
                if (arTaxItem.length == 4) {
                        if ((arTaxItem[0] == reg) &&
                                (arTaxItem[1] == ctry) &&
                                (arTaxItem[2] == state)) {
                                return (parseFloat(arTaxItem[3]/100));
                        }
                }
        }
        if (reg == -1 && ctry == -1 && state == -1)
                return 0;
        else
                return null;
}

//
// Calculate shipping cost
//
function CalculateShipCost(stype, smethod, ctry, state, qty, amt)
{
//alert("stype:"+stype+",ctry:"+ctry+",state:"+state+",qty:"+qty+",amt:"+amt);
        var shipcost = 0;
        var arCtry = ctry.split(",");
        if (arCtry.length == 3) {
                var regioncode = arCtry[0];
                var ctrycode = arCtry[1];
                var statecode;
                if (state == "" || state == null)
                        statecode = -1;
                else
                        statecode = state.split(",")[1];
                shipcost = GetShipcost(stype, smethod, regioncode, ctrycode, statecode, qty, amt);
                while (shipcost == null) {
                        if (statecode != -1)
                                statecode = -1; //ignore state
                        else if (ctrycode != -1)
                                ctrycode = -1; //ignore ctry
                        else if (regioncode != -1)
                                regioncode = -1; //ignore region
                        shipcost = GetShipcost(stype, smethod, regioncode, ctrycode, statecode, qty, amt);
                }
        }
        return shipcost;
}

// Get shipcost
function GetShipcost(stype, smethod, reg, ctry, state, qty, amt) {
        var arShipcost = ntk_shipcostList.split(ntk_cartDelimiter);
        var lastshipcost = null;
        for (var i=0; i<arShipcost.length; i++) {
                var arShipcostItem = arShipcost[i].split(",");
                if (arShipcostItem.length == 9) {
                        var itemstype = arShipcostItem[0];
                        var itemsmethod = arShipcostItem[1];
                        if (itemstype == stype && (itemsmethod == smethod || smethod == -1)) {
                                if ((arShipcostItem[2] == reg) &&
                                    (arShipcostItem[3] == ctry) &&
                                    (arShipcostItem[4] == state)) {
                                        var qty_range = parseInt(arShipcostItem[5]);
                                        var basecost  = parseFloat(arShipcostItem[6]);
                                        var extracost = parseFloat(arShipcostItem[7]);
                                        var price_range = parseFloat(arShipcostItem[8]);
                                        var shipCalcType = GetShipType(stype);
                                        if (shipCalcType == 1) { // check price
                                                if (price_range > 0) {
                                                        if (amt == 0) return 0;
                                                        else if (amt <= price_range) {
                                                                return basecost;
                                                        } else {
                                                                lastshipcost = basecost; // save last calculated ship cost
                                                        }
                                                }
                                        } else { // check quantity
                                                if (qty_range > 0) {
                                                        if (qty <= qty_range) {
                                                                return (basecost + extracost*qty);
                                                        } else {
                                                                lastshipcost = (basecost + extracost*qty); // save last calculated ship cost
                                                        }
                                                }
                                        }
                                }
                        }
                }
        }
        if (lastshipcost != null)
                return lastshipcost;
        else if (reg == -1 && ctry == -1 && state == -1)
                return 0;
        else
                return null;
}

// Get shipping type
function GetShipType(stype) {
        var arShipType = ntk_shipTypeList.split(ntk_cartDelimiter);
        for (var i=0; i<arShipType.length; i++) {
                var arShipTypeItem = arShipType[i].split(",");
                if (arShipTypeItem.length == 2) {
                        if (arShipTypeItem[0] == stype) return arShipTypeItem[1];
                }
        }
        return 0;
}


