// $Id: exceptions.js 7528 2009-05-25 08:35:08Z zeke $ var except = {}; var exceptnone = {}; var exceptions = {}; var pr_i = {}; // option images var pr_a = {}; // option amount var pr_o = {}; // option exceptions var pr_d = {}; // discount var pr_c = {}; // default product codes var hide = {}; var price = {}; var exclude_from_calculate = {}; var updated_price = {}; var list_price = {}; var variant_images = {}; var dni = 0; var ind = 0; var i = 0; var j = 0; var recursion = 0; // images var new_ref = {}; var image_changed = {}; var detailed_changed = {}; var default_image = {}; var default_href = {}; var tax_data = {}; var update_ids = {}; var ids_lines = {}; // Number of digits in decimal part var decplaces = 2; // // Check all products for exceptions // function fn_check_all_exceptions(one) { recursion = 0; ind = 0; for (var iii in pr_o) { if (!document.getElementById('warning_' + iii)) { delete pr_o[iii]; delete pr_i[iii]; delete pr_a[iii]; delete pr_d[iii]; delete pr_c[iii]; delete exceptions[iii]; delete except[iii]; delete price[iii]; continue; } if (fn_check_exceptions(iii) == false) { if (one == true) { return false; } } } return true; } // ***************************************** P R O D U C T P R I C E **********************************/ // // Changes product price concerning option modifiers // function fn_calculate_tax_rates(id, price) { var taxed_price = parseFloat(price); var _tax = 0; var previous_priority = 0; var previous_price, _tax, _is_zero, base_price; var taxes = tax_data[id]; for (key in taxes) { if (!taxes[key]['tax_id']) { taxes[key]['tax_id'] = key; } if (taxes[key]['priority']) { taxes[key]['priority'] = 1; } _is_zero = parseFloat(taxed_price); if (!_is_zero) { tax_data[id][key]['tax_subtotal'] = 0; continue; } base_price = (taxes[key]['priority'] == previous_priority) ? previous_price : taxed_price; if (taxes[key]['rate_type'] == 'P') { // Percent dependence // If tax is included into the price if (taxes[key]['price_includes_tax'] == 'Y') { _tax = base_price - base_price / ( 1 + (parseFloat(taxes[key]['rate_value']) / 100)); // If tax is NOT included into the price } else { _tax = base_price * (parseFloat(taxes[key]['rate_value']) / 100); taxed_price += _tax; } } else { _tax = parseFloat(taxes[key]['rate_value']); // If tax is NOT included into the price if (taxes[key]['price_includes_tax'] != 'Y') { taxed_price += _tax; } } previous_priority = taxes[key]['priority']; previous_price = base_price; _pow = Math.pow(10, decplaces); pow_tax = Math.round(_tax * _pow); tax_data[id][key]['tax_subtotal'] = pow_tax / _pow; } } // This function calculates the new product price and updates values function fn_update_product_price(id, orig_price) { if (exclude_from_calculate[id]) { return false; } var modifiers = {}; var original_price = (typeof(orig_price) == 'undefined') ? parseFloat(price[id]) : orig_price; // Original product price var sec_original_price = 0; // Original price (secondary currency) var product_price = 0; // Product price with discounts and taxes var sec_product_price = 0; // Product price with discounts and taxes (secindary currency) var list_pr = (typeof(list_price[id]) != 'undefined') ? parseFloat(list_price[id]) : 0; // List price // Apply option modifiers for (i in pr_o[id]) { if (!document.getElementById(pr_o[id][i]['id']) || document.getElementById(pr_o[id][i]['id']).disabled == true) { continue; } modifiers[i] = pr_o[id][i]['m'][pr_o[id][i]['selected_value']]; if (typeof(modifiers[i]) == 'undefined') { continue; } if (modifiers[i].substring(0, 1) == 'A') { original_price += parseFloat(jQuery.formatPrice(modifiers[i].substring(1, modifiers[i].length-1), decplaces)); list_pr += parseFloat(jQuery.formatPrice(modifiers[i].substring(1, modifiers[i].length-1), decplaces)); } else if(modifiers[i].substring(0, 1) == 'P') { original_price += parseFloat(jQuery.formatPrice(price[id] * parseFloat(modifiers[i].substring(1, modifiers[i].length-1))/100, decplaces)); list_pr += parseFloat(jQuery.formatPrice(price[id] * parseFloat(modifiers[i].substring(1, modifiers[i].length-1))/100, decplaces)); } } updated_price[id] = jQuery.formatNum(original_price, decplaces, true); sec_original_price = parseFloat(jQuery.formatPrice(original_price / currencies.secondary.coefficient, decplaces)); sec_list_pr = parseFloat(jQuery.formatPrice(list_pr / currencies.secondary.coefficient, decplaces)); // Product quantity on cart/checkout page var qty = document.getElementById('amount_' + id) ? parseInt(document.getElementById('amount_' + id).value) : 1; // If we have discounts, skip list price calculations var discount_value = 0; // absolute discount var prc_discount_value = 0; // percent discount var discounted_price = original_price; // discounted price, equals pure price by default var sec_discounted_price = original_price / currencies.secondary.coefficient; // discounted price for secondary currency // Discounts if (pr_d[id] && (pr_d[id]['A'] || pr_d[id]['P'])) { // Discount value (for unit) discount_value = parseFloat(jQuery.formatPrice(original_price * pr_d[id]['P']/100 + pr_d[id]['A'], decplaces)); if (discount_value > original_price) { discount_value = original_price; } // Discount percent value prc_discount_value = parseFloat(jQuery.formatPrice((original_price * pr_d[id]['P']/100 + pr_d[id]['A'])/original_price*100, 0)); if (prc_discount_value > 100) { prc_discount_value = 100; } // Discounted price (unit) discounted_price = jQuery.formatPrice(original_price - discount_value); // Discounted price (unit) - secondary currency sec_discounted_price = jQuery.formatPrice(discounted_price / currencies.secondary.coefficient, decplaces); // List price } else if (typeof(list_price[id]) != 'undefined') { discount_value = parseFloat(jQuery.formatPrice(list_pr - original_price, decplaces)); prc_discount_value = parseFloat(jQuery.formatPrice((list_pr - original_price)/ list_pr * 100, 0)); } // Discount value (unit) - secondary currency sec_discount_value = jQuery.formatPrice(discount_value / currencies.secondary.coefficient, decplaces); product_price = original_price - ((pr_d[id] && (pr_d[id]['A'] || pr_d[id]['P'])) ? discount_value : 0); // correct resulting product price sec_product_price = sec_original_price - ((pr_d[id] && (pr_d[id]['A'] || pr_d[id]['P'])) ? sec_discount_value : 0); // correct resulting product price var tx_price = discounted_price; // base price for taxation with discount (if exist) var alt_tx_price = sec_discounted_price; // base price for taxation for secondary currency // Taxes var tax_subtotal = tax_excluded = 0; var sec_tax_subtotal = sec_tax_excluded = 0; if (tax_data[id]) { // Tax value (unit) fn_calculate_tax_rates(id, discounted_price); for (_k in tax_data[id]) { tax_subtotal += parseFloat(tax_data[id][_k]['tax_subtotal']); if (tax_data[id][_k]['price_includes_tax'] != 'Y') { tax_excluded += parseFloat(tax_data[id][_k]['tax_subtotal']); } } // Tax value (unit) - secondary currency fn_calculate_tax_rates(id, sec_discounted_price); for (_k in tax_data[id]) { sec_tax_subtotal += parseFloat(tax_data[id][_k]['tax_subtotal']); if (tax_data[id][_k]['price_includes_tax'] != 'Y') { sec_tax_excluded += parseFloat(tax_data[id][_k]['tax_subtotal']); } } } product_price = (cart_prices_w_taxes == true) ? product_price + tax_excluded : product_price; sec_product_price = (cart_prices_w_taxes == true) ? sec_product_price + sec_tax_excluded : sec_product_price; var product_subtotal = product_price * qty; var sec_product_subtotal = sec_product_price * qty; update_ids[id] = { 'original_price': {P: original_price, S: sec_original_price}, // original price with modifiers 'old_price': {P: original_price, S: sec_original_price}, // original price with modifiers 'discounted_price': {P: discounted_price, S: sec_discounted_price}, // original_price - discount_value 'list_price' : {P: list_pr, S: sec_list_pr}, // list price for the product 'tax_value': {P: tax_subtotal, S: sec_tax_subtotal}, 'discount_value': {P: discount_value, S: sec_discount_value}, 'prc_discount_value': {E: prc_discount_value}, 'prc_discount_value_label': {E: prc_discount_value}, 'product_price': {P: product_price, S: sec_product_price}, // original_price - discount_value + tax_value 'tax_subtotal': {P: tax_subtotal * qty, S: sec_tax_subtotal * qty}, 'discount_subtotal': {P: discount_value * qty, S: sec_discount_value * qty}, 'product_subtotal': {P: product_subtotal, S: sec_product_subtotal}, 'product_subtotal_2': {P: product_subtotal, S: sec_product_subtotal} }; fn_update_product_prices_block(update_ids[id], id); // If all product prices eq 0 than show standart price block if (!(parseFloat(discounted_price) && parseFloat(original_price) && parseFloat(product_price)) && document.getElementById('line_zero_price_' + id)) { document.getElementById('line_zero_price_' + id).style.display = ''; } else if (document.getElementById('line_zero_price_' + id)) { document.getElementById('line_zero_price_' + id).style.display = 'none'; } return true; } function fn_update_product_prices_block(ids, id) { var elm; for (var k in ids) { // Primary price elm = $('#' + k + '_' + id); if (elm.length) { if (typeof(ids[k]['E']) != 'undefined') { elm.html(Math.round(ids[k]['E'])); } else if (typeof(ids[k]['P']) != 'undefined') { elm.html(jQuery.formatNum(ids[k]['P'], decplaces, true)); } } // Secondary price elm = $('#sec_' + k + '_' + id); if (elm.length) { elm.html(jQuery.formatNum(ids[k]['S'], decplaces, false)); } // Discount label/line with discounts elm = $('#line_' + k + '_' + id); if (elm.length) { if ((ids[k]['E'] && parseFloat(ids['original_price']['P'])) || parseFloat(ids[k]['P']) || parseFloat(ids[k]['S'])) { elm.show(); } else { elm.hide(); } } } return true; } // ***************************************** Product code **********************************/ // // Changes product code to the code of combination // function fn_change_sku(id) { var key = ''; var pcode = $('#product_code_' + id); var sku = $('#sku_' + id); if (!pcode.length) { return false; } sku.show(); for (var i in pr_o[id]) { if (!$('#' + pr_o[id][i]['id']).length) { continue; } if (pr_o[id][i]['inventory'] == 'Y') { key += pr_o[id][i]['option_id'] + '_' + pr_o[id][i]['selected_value'] + '_'; } } for (var i in pr_a[id]) { if (key == i) { if (pr_a[id][i]['product_code']) { pcode.html(pr_a[id][i]['product_code']); return true; } } } if (pr_c[id] != '') { pcode.html(pr_c[id]); } else { sku.hide(); } return true; } // ***************************************** A M O U N T I N S T O C K **********************************/ // // Changes amount in stock if product inventory is in track with options // function fn_change_amount(id) { var key = ''; var pqty = $('#qty_' + id); // input with qty var pstock = $('#qty_in_stock_' + id); // qty in stock line var padd = $('#cart_buttons_block_' + id); // add to cart button var spadd = $('#cart_add_block_' + id); var badd = $('#bulk_addition_' + id); // bulk add to cart checkbox for (var i in pr_o[id]) { if (!$('#' + pr_o[id][i]['id']).length) { continue; } if (pr_o[id][i]['inventory'] == 'Y') { key += pr_o[id][i]['option_id'] + '_' + pr_o[id][i]['selected_value'] + '_'; } } for (var i in pr_a[id]) { if (key == i) { if (pr_a[id][i]['amount']) { if (pr_a[id][i]['amount'] > 0) { pstock.html(pr_a[id][i]['amount'] + ' ' + lang.items); pqty.show(); padd.show(); spadd.show(); badd.attr('disabled', false); } else { pstock.html('' + lang.text_out_of_stock + ''); pqty.hide(); padd.hide(); spadd.hide(); badd.attr('disabled', true); } return true; } } pstock.html('' + lang.text_out_of_stock + ''); pqty.hide(); padd.hide(); spadd.hide(); badd.attr('disabled', true); } return true; } // **************************************************** I M A G E S ********************************************/ // // Calculates options hash and check wether image is available for this combination // function fn_check_option_image(id) { var key=''; for (i in pr_o[id]) { if (!document.getElementById(pr_o[id][i]['id'])) { continue; } if (pr_o[id][i]['inventory'] == 'Y') { key += (key != '' ? "_" : "") + pr_o[id][i]['option_id'] + "_" + pr_o[id][i]['selected_value']; } } var thumbnail = $(".cm-thumbnails", $('#product_images_' + id)).eq(0); if (thumbnail.parent('a').length && default_href[id] == '') { thumbnail.insertAfter(thumbnail.parent('a')); thumbnail.prev().remove(); } else if (!thumbnail.parent('a').length && default_href[id] != '') { thumbnail.wrap(''); } var thumb_obj = $('.cm-thumbnails-mini', $('#product_images_' + id)).eq(0); if (detailed_changed[id] == "Y") { if (thumb_obj.length) { thumb_obj.attr('href', default_href[id]); } if ($('#detailed_href1_' + id).length) { $('#detailed_href1_' + id).attr('href', default_href[id]); } if ($('#detailed_href2_' + id).length) { $('#detailed_href2_' + id).attr('href', default_href[id]); } detailed_changed[id] = ""; } for (i in pr_i[id]) { if (key == pr_i[id][i]['options']) { if (fn_change_image(id, i)) { return true; } } } if (image_changed[id] == "Y") { if (thumb_obj.length) { $('img', thumb_obj).attr('src', default_image[id]['src-mini']); } $('#det_img_' + id).attr('alt', default_image[id]['alt']); $('#det_img_' + id).attr('src', default_image[id]['src']); image_changed[id] = ""; } return false; } function fn_change_image(id, row) { var thumb_obj = $('.cm-thumbnails-mini').eq(0); if (thumb_obj.length) { if (pr_i[id][row]['icon']) { $('img', thumb_obj).attr('src', pr_i[id][row]['icon']['src-mini']); } thumb_obj.click(); } var thumbnail = $(".cm-thumbnails", $('#product_images_' + id)).eq(0); if (pr_i[id][row]['detailed_id'] != '' && pr_i[id][row]['detailed_id'] != '0') { if (thumb_obj.length) { thumb_obj.attr('href', pr_i[id][row]['detailed']['image_path']); } if (!thumbnail.parent('a').length) { thumbnail.wrap(''); } if ($('#detailed_href1_' + id).length) { $('#detailed_href1_' + id).attr('href', pr_i[id][row]['detailed']['image_path']); } if ($('#detailed_href2_' + id).length) { $('#detailed_href2_' + id).attr('href', pr_i[id][row]['detailed']['image_path']); $('#detailed_href2_' + id).parent().show(); } detailed_changed[id] = "Y"; } else { if (thumb_obj.length) { thumb_obj.attr('href', default_href[id]); } if (!default_href[id] || pr_i[id][row]['image_id']) { if (thumbnail.parent('a').length) { thumbnail.insertAfter(thumbnail.parent('a')); thumbnail.prev().remove(); } $('#detailed_href2_' + id).parent().hide(); } else { thumbnail.parent('a').attr('href', default_href[id]); $('#detailed_href1_' + id).attr('href', default_href[id]); $('#detailed_href2_' + id).attr('href', default_href[id]).show(); } detailed_changed[id] = ""; } if (pr_i[id][row]['image_id'] != 0) { $('#det_img_' + id).attr('src', pr_i[id][row]['icon']['src']); $('#det_img_' + id).attr('alt', pr_i[id][row]['icon']['alt']); image_changed[id] = "Y"; return true; } return false; } // ************************************************** E X C E P T I O N S ****************************************/ // // Check all selected options variants in exceptions // function fn_check_exceptions(id) { var m = 0; n = 0; k = 0; index = 0; if (typeof(pr_o[id]) == 'undefined') { return true; } // Define Selected values for each option for (i in pr_o[id]) { if (!document.getElementById(pr_o[id][i]['id'])) { continue; } if (pr_o[id][i]['type'] == 'S') { pr_o[id][i]['selected_value'] = document.getElementById(pr_o[id][i]['id']).value; } else if (pr_o[id][i]['type'] == 'C') { if (document.getElementById(pr_o[id][i]['id']).checked) { pr_o[id][i]['selected_value'] = document.getElementById(pr_o[id][i]['id']).value; } else { pr_o[id][i]['selected_value'] = false; } } else if (pr_o[id][i]['type'] == 'R'){ for (var k = 0; k < document.getElementById(pr_o[id][i]['id']).getElementsByTagName("INPUT").length; k++) { if (document.getElementById(pr_o[id][i]['id']).getElementsByTagName("INPUT")[k].checked == true) { pr_o[id][i]['selected_value'] = document.getElementById(pr_o[id][i]['id']).getElementsByTagName("INPUT")[k].value; } } } } // Checks the image for an option combination fn_check_option_image(id); // Change the amount fn_change_amount(id); // Change the sku fn_change_sku(id); if (typeof(exceptions[id]) != 'undefined') { // Resets all variants in the selectboxes fn_empty_selectboxes(id); // Function that calculates how many options in exception if (fn_calculate_matches(id) == false) { return false; } if (exception_style == 'warning' && document.getElementById('warning_' + id)) { $('#warning_' + id).hide(); fn_disable(id); return true; } // Disables options that have status disabled in exception and other exceptions sutisfied fn_disable(id); // This section fills the array with options considering the exceptions that should be hided for (m = 0; m < exceptions[id].length; m++) { // Cylcle all exceptions for the product if (except[id][m] == fn_array_length(pr_o[id]) - 1) { var k_inc = 0; if (!hide[id]) { hide[id] = {}; } for (k in pr_o[id]) { // Cycle all options of the product if (!hide[id][k]) { hide[id][k] = {}; } if ((pr_o[id][k]['selected_value'] != exceptions[id][m][k_inc]) && (exceptions[id][m][k_inc] != '-1')) { var j_inc = 0; for (var j in pr_o[id][k]['v']) { // Cycle all option variants if (j == exceptions[id][m][k_inc]) { if (pr_o[id][k]['type'] == 'S') { hide[id][k][j] = 'Y'; } if (pr_o[id][k]['type'] == 'C') { document.getElementById('unchecked_'+pr_o[id][k]['id']).value = pr_o[id][k]['selected_value']; document.getElementById(pr_o[id][k]['id']).disabled = true; } if (pr_o[id][k]['type'] == 'R') { document.getElementById(pr_o[id][k]['id']).getElementsByTagName("INPUT")[j_inc].disabled = true; } } j_inc ++; } } k_inc ++; } } } fn_rebuild_options(id); } // Update the product price due to selected variants fn_update_product_price(id); fn_set_hook('check_exceptions', [id]); if (recursion == false) { recursion = true; fn_check_exceptions(id); } return true; } function fn_rebuild_options(id) { // The sections fills the selectboxes with values considering excepted variants if (!hide[id]) { hide[id] = {}; } for (m in pr_o[id]) { j = 0; if (!hide[id][m]) { hide[id][m] = {}; } for (var k in pr_o[id][m]['v']) { if (!hide[id][m][k]) { hide[id][m][k] = ''; } // If this variant shouldn't be hided and this option is selectbox than add this variant if ((hide[id][m][k] != 'Y') && (pr_o[id][m]['type'] == 'S')) { if (document.getElementById(pr_o[id][m]['id'])) { document.getElementById(pr_o[id][m]['id']).options[j] = new Option(pr_o[id][m]['v'][k], k); // Check if this variants was selected before the check exceptions function called if (pr_o[id][m]['selected_value'] == k) { document.getElementById(pr_o[id][m]['id']).options[j].selected = true; } } j ++; } hide[id][m][k] = ''; } } } function fn_calculate_matches(id) { // Calculate the mathes between exceptions and selected variants at the moment except[id] = {}; exceptnone[id] = {}; if (exception_style == 'warning') { $('#warning_' + id).hide(); } for (var m = 0; m < exceptions[id].length; m++) { k = 0; n = 0; j = 0; except[id][m] = 0; exceptnone[id][m] = 0; for (var k in pr_o[id]) { if (pr_o[id][k]['selected_value'] == exceptions[id][m][j]) { n ++; except[id][m] = n; } if (exceptions[id][m][j] == '-1') { n ++; except[id][m] = n; } if (exceptions[id][m][j] == '-2') { exceptnone[id][m] += 1; } j ++; } } for (var m = 0; m < exceptions[id].length; m++) { if (except[id][m] == fn_array_length(pr_o[id])) { if (exception_style == 'warning') { $('#warning_' + id).show(); fn_empty_selectboxes(id); fn_disable(id); return false; } // Change selected variants to avoid exception fn_all_excepted(id); } } } // // Cleans all values from selectboxes and enables all options // function fn_empty_selectboxes(id) { for (i in pr_o[id]) { if (!document.getElementById(pr_o[id][i]['id'])) { continue; } if (pr_o[id][i]['type'] == 'S') { if (exception_style != 'warning') { document.getElementById(pr_o[id][i]['id']).options.length = 0; } document.getElementById(pr_o[id][i]['id']).disabled = false; } else if (pr_o[id][i]['type'] == 'C') { document.getElementById(pr_o[id][i]['id']).disabled=false; } else if (pr_o[id][i]['type'] == 'R'){ for (var k = 0; k < document.getElementById(pr_o[id][i]['id']).getElementsByTagName("INPUT").length; k++) { document.getElementById(pr_o[id][i]['id']).getElementsByTagName("INPUT")[k].disabled = false; } } } } // // Disables options if the the other exception variants are selected and the option has "disable" status // function fn_disable(id) { for (i = 0; i < exceptions[id].length; i++) { if (except[id][i] == fn_array_length(pr_o[id]) - exceptnone[id][i]) { j = 0; for (var k in pr_o[id]) { if (exceptions[id][i][j] == '-2') { if (pr_o[id][k]['type'] == 'S') { document.getElementById(pr_o[id][k]['id']).disabled = true; } else if (pr_o[id][k]['type'] == 'C') { document.getElementById(pr_o[id][k]['id']).disabled = true; } else if (pr_o[id][k]['type'] == 'R'){ for (var j = 0; j < document.getElementById(pr_o[id][k]['id']).getElementsByTagName("INPUT").length; j++) { document.getElementById(pr_o[id][k]['id']).getElementsByTagName("INPUT")[j].disabled = true; } } } j ++; } } } } // // Function that called if curent selected values are in exception // function fn_all_excepted(id) { var opt_id = pr_o[id][fn_key_by_iter(pr_o[id], 0)]['option_id']; var var_id = fn_key_by_iter(pr_o[id][fn_key_by_iter(pr_o[id], 0)]['v'], 0); for (var i = 0; i < exceptions[id].length; i++) { if (except[id][i] == fn_array_length(pr_o[id])) { // if option has -disregard- exception variant if (exceptions[id][i][dni]=='-1') { dni ++; opt_id = pr_o[id][fn_key_by_iter(pr_o[id], dni)]['option_id']; ind = 0; var_id = fn_key_by_iter(pr_o[id][fn_key_by_iter(pr_o[id], dni)]['v'], ind); } /* if (pr_o[id][opt_id]['type'] == 'S') { //pr_o[id][opt_id]['v'][var_id]['hide'] = 'Y'; } else if (pr_o[id][opt_id]['type'] == 'C') { document.getElementById(pr_o[id][opt_id]['id']).checked=true; } else if (pr_o[id][opt_id]['type'] == 'R') { document.getElementById(pr_o[id][opt_id]['id']).getElementsByTagName("INPUT")[var_id].disabled = true; }*/ // Next option variant index is selected else Change option if (ind != fn_array_length(pr_o[id][opt_id]['v'])-1) { ind ++; var_id = fn_key_by_iter(pr_o[id][fn_key_by_iter(pr_o[id], dni)]['v'], ind); } else { if (pr_o[id][opt_id]['type'] == 'S') { pr_o[id][opt_id]['selected_value'] = fn_key_by_iter(pr_o[id][opt_id]['v'], ind); } else if (pr_o[id][opt_id]['type'] == 'C') { document.getElementById(pr_o[id][opt_id]['id']).disabled=false; document.getElementById(pr_o[id][opt_id]['id']).checked=false; } else if (pr_o[id][opt_id]['type'] == 'R') { document.getElementById(pr_o[id][opt_id]['id']).getElementsByTagName("INPUT")[0].checked = true; } dni ++; opt_id = pr_o[id][fn_key_by_iter(pr_o[id], dni)]['option_id']; ind = 0; var_id = fn_key_by_iter(pr_o[id][fn_key_by_iter(pr_o[id], dni)]['v'], ind); } // This section select the next variant in the option if (pr_o[id][opt_id]['type'] == 'S') { pr_o[id][opt_id]['selected_value'] = pr_o[id][opt_id]['v'][var_id]['variant_id']; } else if (pr_o[id][opt_id]['type'] == 'C') { document.getElementById(pr_o[id][opt_id]['id']).checked=true; document.getElementById(pr_o[id][opt_id]['id']).disabled=true; for (var iii in pr_o[id][opt_id]['v']) { pr_o[id][opt_id]['selected_value'] = iii; } document.getElementById('unchecked_'+pr_o[id][opt_id]['id']).value = pr_o[id][opt_id]['selected_value']; } else if (pr_o[id][opt_id]['type'] == 'R') { document.getElementById(pr_o[id][opt_id]['id']).getElementsByTagName("INPUT")[ind].checked = true; pr_o[id][opt_id]['selected_value'] = var_id; } } } fn_calculate_matches(id); } // Function that called if curent selected values are in exception function fn_array_length(array) { var result = 0; for (var i in array) { result ++; } return result; } // Function finds a key by it's index function fn_key_by_iter(array, iter) { var result = 0, j = 0, i = 0; for (var i in array) { if (j == iter) { return i; } j ++; } return false; } // // Variant image functions // function fn_change_variant_image(product_id, option_id, variant_id) { if (typeof(variant_images[product_id]) !== 'undefined' && typeof(variant_images[product_id][option_id]) !== 'undefined') { for (key in variant_images[product_id][option_id]) { if (document.getElementById('det_img_variant_image_' + product_id + '_' + key)) { document.getElementById('det_img_variant_image_' + product_id + '_' + key).className = (key == variant_id) ? 'product-variant-image-selected' : 'product-variant-image-unselected'; } } } } function fn_set_option_value(product_id, option_id, value) { if (pr_o[product_id][option_id]['type'] == 'S') { // select $('#option_' + product_id + '_' + option_id).val(value).change(); } else if (pr_o[product_id][option_id]['type'] == 'R') { // radio var elm = $('#option_' + product_id + '_' + option_id); $(':radio[value=' + value + ']', elm).click(); } return true; }