var current_taxes = [];
var product_thumbnail = document.getElementById('product_thumbnail');
var availObj = document.getElementById('product_avail');
var default_price = 0;
function check_options(info) {

    option_str = "";

    var req = new Subsys_JsHttpRequest_Js();
    req.onreadystatechange = function() {
        if (req.readyState == 4) { 
            if (req.responseJS!="no") {
                if (req.responseJS.result != "") {

                    var local_taxes = [];
                    var is_rebuild_wholesale = false;
                    var variantid = false;
                    for (var t in taxes)
                        local_taxes[t] = taxes[t][0];

                    options = req.responseJS.valid_options;
                    variant = req.responseJS.variant;
 
                    if (variant != "") {
                        if (document.getElementById('wl_table'))
                            document.getElementById('wl_table').innerHTML = "";
                        product_wholesale = [];
                        orig_price = variant["price"];
                        avail = variant["avail"];
                        variantid = variant["variantid"];
                        
                        tmp = modi_price(orig_price, variant["taxes"], orig_price); 
                        default_price = tmp[0];
                        price = orig_price;
                        if (variant["wholesale"]) {
                            for (var t in variant["wholesale"]) {
                                var _tmp = modi_price(variant["wholesale"][t]["taxed_price"], cloneObject(variant["wholesale"][t]["taxes"]), variant["wholesale"][t]["price"]);
                                product_wholesale[t] = [
                                    variant["wholesale"][t]["quantity"],
                                    variant["wholesale"][t]["next_quantity"],
                                    _tmp[0],
                                    []
                                        ];
                                /* Get variant wholesale taxes */
                                for (var c in _tmp[1]) {
                                    product_wholesale[t][3][c] = _tmp[1][c];
                                }
                            }
                            is_rebuild_wholesale = true;
                        }
                        /* Change product weight */
                        if (document.getElementById('product_weight'))
                            document.getElementById('product_weight').innerHTML = price_format(variant["weight"]);
                        if (document.getElementById('product_weight_box'))
                            document.getElementById('product_weight_box').style.display = parseFloat(variant["weight"]) > 0 ? "" : "none";

                        /* Change product code */
                        if (document.getElementById('product_code'))
                            document.getElementById('product_code').innerHTML = variant["productcode"];
                        var _tmp = modi_price(price, local_taxes, orig_price);
                        price = _tmp[0];
                        local_taxes = _tmp[1];

                        /* Update taxes */
                        for (var t in local_taxes) {
                            if (document.getElementById('tax_'+t)) {
                                document.getElementById('tax_'+t).innerHTML = currency_symbol+price_format(local_taxes[t] < 0 ? 0 : local_taxes[t]);
                            }
                            current_taxes[t] = local_taxes[t];
                        }

                        if (is_rebuild_wholesale)
                            rebuild_wholesale();

                        /* Update form elements */
                        /* Update price */
                        if (document.getElementById('product_price'))
                            document.getElementById('product_price').innerHTML = currency_symbol+price_format(price < 0 ? 0 : price);

                        /* Update alt. price */
                        if (alter_currency_rate > 0 && alter_currency_symbol != "" && document.getElementById('product_alt_price')) {
                            var altPrice = price*alter_currency_rate;
                            document.getElementById('product_alt_price').innerHTML = "("+alter_currency_symbol+" "+price_format(altPrice < 0 ? 0 : altPrice)+")";
                        }

                        /* Update Save % */
                        if (document.getElementById('save_percent') && document.getElementById('save_percent_box') && list_price > 0 && dynamic_save_money_enabled) {
                            var save_percent = Math.round(100-(price/list_price)*100);
                            if (save_percent > 0) {
                                document.getElementById('save_percent_box').style.display = '';
                                document.getElementById('save_percent').innerHTML = save_percent;
                            } else {
                                document.getElementById('save_percent_box').style.display = 'none';
                                document.getElementById('save_percent').innerHTML = '0';
                            }
                        }

                        /* Update product quantity */
                        if (document.getElementById('product_avail_txt')) {
                            if (avail > 0) {
                                document.getElementById('product_avail_txt').innerHTML = substitute(txt_items_available, "items", (variantid ? avail : product_avail));
                            } else {
                                document.getElementById('product_avail_txt').innerHTML = lbl_no_items_available;
                            }
                        }

                        if ((mq > 0 && avail > mq+min_avail) || is_unlimit)
                            avail = mq+min_avail-1;

                        var select_avail = min_avail;
                        /* Update product quantity selector */
                        if (!availObj)
                            availObj = document.getElementById('product_avail');

                        if (availObj && availObj.tagName.toUpperCase() == 'SELECT') {
                            if (!isNaN(min_avail) && !isNaN(avail)) {
                                var first_value = -1;
                                if (availObj.options[0])
                                    first_value = availObj.options[0].value;

                                if (first_value == min_avail) {

                                    /* New and old first value in quantities list is equal */
                                    if ((avail-min_avail+1) != availObj.options.length) {
                                        if (availObj.options.length > avail) {
                                            var cnt = availObj.options.length;
                                            for (var x = (avail < 0 ? 0 : avail); x < cnt; x++)
                                                availObj.options[availObj.options.length-1] = null;
                                        } else {
                                            var cnt = availObj.options.length;
                                            for (var x = cnt+1; x <= avail; x++)
                                                availObj.options[cnt++] = new Option(x, x);
                                        }
                                    }
                                } else {

                                    /* New and old first value in quantities list is differ */
                                    while (availObj.options.length > 0)
                                        availObj.options[0] = null;
                                    var cnt = 0;
                                    for (var x = min_avail; x <= avail; x++)
                                        availObj.options[cnt++] = new Option(x, x);
                                }
                                if (availObj.options.length == 0)
                                    availObj.options[0] = new Option(txt_out_of_stock, 0);
                            }
                            select_avail = availObj.options[availObj.selectedIndex].value;
                        }

                        check_wholesale(select_avail);
                    } else {
                        if (document.getElementById('product_weight'))
                            document.getElementById('product_weight').innerHTML = ""; 
                        if (document.getElementById('product_code'))
                            document.getElementById('product_code').innerHTML = ""; 
                        /* Update price */
                        if (document.getElementById('product_price'))
                            document.getElementById('product_price').innerHTML =""; 
                    }


                    for (classid in options)  {
                        optObj = document.getElementById("po"+classid);
                        if (options[classid] == "ignore") {
                            optObj.disabled = false;
                            continue;
                        }
                        selected = optObj.options[optObj.selectedIndex].value;
                        while (optObj.options.length>0) {
                            optObj.removeChild(optObj.options[0]);
                        }
                        kk = -1;
                        if (use_select_one == "Y") {
                            optObj.options[0] = new Option(lbl_select_option_form_list, "-1");
                            kk++;
                        }
                        if (selected == -1)  optObj.selectedIndex = 0;

                        for (counter in options[classid]) {

                            kk++;
                            optObj.options[kk] = new Option(options[classid][counter]["option_name"],options[classid][counter]["optionid"])
                                if (options[classid][counter]["optionid"] == selected) optObj.selectedIndex = kk;
                        }
                        optObj.disabled = false;
                    }

                }
            }
            else {

            }
        }
    }
    if (names != undefined) {
        options = [];
        for (i in names) {
            optObj = document.getElementById("po"+i);
            if ( optObj && optObj.tagName.toUpperCase() == 'SELECT' && names[i]["is_modifier"] == "") {
                options[i] = optObj.value;
                optObj.disabled = true;
            }
        }
    }

    current_option = [];

    if (opt_elem != -1) {
        opt_elem_obj = document.getElementById(opt_elem);
        current_option = {classid: opt_elem , optionid: opt_elem_obj.value}
    } else {
        current_option = {classid: opt_elem , optionid: -1}
    }

    req.caching = true;
    req.open('GET', 'ajax_variants_control.php', true);
    req.send({ add_productid: productid,current_option: current_option, options: options , "XCARTSESSNAME":Math.random()});

}

function modi_price(_price, _taxes, _orig_price) {
var return_price = round(_price, 2);

    /* List modificators */
    for (var x2 in modifiers) {
        var value = getPOValue(x2);
        if (!value || !modifiers[x2][value])
            continue;

        /* Get selected option */
        var elm = modifiers[x2][value];
        return_price += parseFloat(elm[1] == '$' ? elm[0] : (_price*elm[0]/100));

        /* Get tax extra charge */
        for (var t2 in _taxes) {
            if (elm[2][t2]) {
                _taxes[t2] += parseFloat(elm[1] == '$' ? elm[2][t2] : (_orig_price*elm[2][t2]/100));
            }
        }
    }

    return [return_price, _taxes];
}

/*
    Rebuild wholesale tables
*/
function rebuild_wholesale() {

    var obj = document.getElementById('wl_table');
    if (!obj)
        return false;

    /* Clear wholesale span object if product wholesale prices service array is empty */
    if (!product_wholesale || product_wholesale.length == 0) {
        obj.innerHTML = "";
        return false;
    }

    /* Display headline */
    var str = '';
    var i = 0;
    for (var x in product_wholesale) {
        if (product_wholesale[x][0] == 0)
            continue;

        if (i == 0)
            str += '<br /><table cellpadding="2" cellspacing="2"><tr class="TableHead"><td align="right"><b>'+lbl_quantity+':&nbsp;</b></td>';

        str += '<td>'+product_wholesale[x][0];
        if (x == product_wholesale.length-1) {
            str += '+';
        } else if (product_wholesale[x][0] < product_wholesale[x][1]) {
            str += '-'+product_wholesale[x][1];
        }
        str += '&nbsp;'+(product_wholesale[x][0] == 1 ? lbl_item : lbl_items)+'</td>';
        i++;
    }

    if (i == 0)
        return false;

    /* Display wholesale prices taxes */
    var tax_str = '';
    if (taxes.length > 0) {
        for (var x in taxes) {
            if (current_taxes[x] > 0)
                tax_str += substitute(lbl_including_tax, 'tax', taxes[x][1])+'<br />';
        }
    }

    /* Display wholesale prices */
    str += '</tr><tr bgcolor="#EEEEEE"><td align="right"><b>'+lbl_price+(tax_str.length > 0 ? '*' : '')+':&nbsp;</b></td>';
    for (var x in product_wholesale) {
        if (product_wholesale[x][0] == 0)
            continue;
        str += '<td>'+price_format(product_wholesale[x][2] < 0 ? 0 : product_wholesale[x][2])+'</td>';
    }

    str += '</tr></table>';

    if (tax_str.length > 0)
        str += '<br /><table><tr><td class="FormButton" valign="top"><b>*'+txt_note+':</b>&nbsp;</td><td nowrap="nowrap" valign="top">'+tax_str+'</td></tr></table>';

    str += '<br />';
    obj.innerHTML = str;

    return true;
}

/*
    Display current wholesale price as product price
*/
function check_wholesale(qty) {
    if (product_wholesale.length == 0)
        return true;

    var wl_taxes = current_taxes.slice(0);
    var wl_price = price;
    var found = false;
    for (var x = 0; x < product_wholesale.length; x++) {
        if (parseInt(product_wholesale[x][0]) <= qty && (parseInt(product_wholesale[x][1]) >= qty || parseInt(product_wholesale[x][1]) == 0) && parseInt(product_wholesale[x][0])>0) {
            wl_price = product_wholesale[x][2];
            wl_taxes = product_wholesale[x][3].slice(0);
            found = true;
        }
        if (document.getElementById('wp'+x)) {
            var wPrice = price-default_price+product_wholesale[x][2];
            document.getElementById('wp'+x).innerHTML = currency_symbol+price_format(wPrice < 0 ? 0 : wPrice);
        }
    }

    if (found != true) {
        wl_price = default_price;
    }

    if (document.getElementById('product_price'))
        document.getElementById('product_price').innerHTML = currency_symbol+price_format(wl_price < 0 ? 0 : wl_price);
    if (alter_currency_rate > 0 && alter_currency_symbol != "" && document.getElementById('product_alt_price')) {
        var altPrice = wl_price*alter_currency_rate;
        document.getElementById('product_alt_price').innerHTML = "("+alter_currency_symbol+" "+price_format(altPrice < 0 ? 0 : altPrice)+")";
    }

    /* Update Save % */
    if (document.getElementById('save_percent') && document.getElementById('save_percent_box') && list_price > 0 && dynamic_save_money_enabled) {
        var save_percent = Math.round(100-((wl_price < 0 ? 0 : wl_price)/list_price)*100);
        if (save_percent > 0) {
            document.getElementById('save_percent_box').style.display = '';
            document.getElementById('save_percent').innerHTML = save_percent;
        } else {
            document.getElementById('save_percent_box').style.display = 'none';
            document.getElementById('save_percent').innerHTML = '0';
        }
    }


    for (var x in taxes) {
        if (document.getElementById('tax_'+x) && wl_taxes[x] && current_taxes[x]) {
            document.getElementById('tax_'+x).innerHTML = currency_symbol+price_format(wl_taxes[x] < 0 ? 0 : wl_taxes[x]);
        }
    }

    return true;
}

function check_exceptions() {
    if (!exceptions)
        return true;

    /* List exceptions */
    for (var x in exceptions) {
        if (isNaN(x))
            continue;

        var found = true;
        for (var c in exceptions[x]) {
            var value = getPOValue(c);
            if (!value)
                return true;

            if (value != exceptions[x][c]) {
                found = false;
                break;
            }
        }
        if (found)
            return false;
    }

    return true;
}

function getPOValue(c) {
    if (!document.getElementById('po'+c) || document.getElementById('po'+c).tagName.toUpperCase() != 'SELECT')
        return false;
    return document.getElementById('po'+c).options[document.getElementById('po'+c).selectedIndex].value;
}

/*
    Get product option object by class name / class id
*/
function product_option(classid) {
    if (!isNaN(classid))
         return document.getElementById("po"+classid);

    if (!names)
        return false;

    for (var x in names) {
        if (names[x]['class_name'] != classid)
            continue;
        return document.getElementById('po'+x);
    }

    return false;
}

/*
    Get product option value by class name / or class id
*/
function product_option_value(classid) {
    var obj = product_option(classid);
    if (!obj)
        return false;

    if (obj.type != 'select-one')
        return obj.value;

    var classid = parseInt(obj.id.substr(2));
    var optionid = parseInt(obj.options[obj.selectedIndex].value);
    if (names[classid] && names[classid]['options'][optionid])
        return names[classid]['options'][optionid];

    return false;
}


