var alert_msg = '';
//	variants array:
//	0 - array:
//		0 -taxed price
// 		1 - quantity
// 		2 - variantid if variant have thumbnail
// 		3 - weight
// 		4 - original price (without taxes)
//	1 - array: varinat options as classid => optionid
//	2 - array: taxes as taxid => tax amount
var variants = new Array();
variants[0] = new Array(new Array(595.00, 999, '', '1.00', 595.00), new Array(), new Array());
variants[0][1][22] = 58;
variants[0][1][23] = 60;
variants[0][1][24] = 64;
variants[1] = new Array(new Array(595.00, 999, '', '1.00', 595.00), new Array(), new Array());
variants[1][1][22] = 59;
variants[1][1][23] = 60;
variants[1][1][24] = 64;
variants[2] = new Array(new Array(595.00, 999, '', '1.00', 595.00), new Array(), new Array());
variants[2][1][22] = 58;
variants[2][1][23] = 61;
variants[2][1][24] = 64;
variants[3] = new Array(new Array(595.00, 999, '', '1.00', 595.00), new Array(), new Array());
variants[3][1][22] = 59;
variants[3][1][23] = 61;
variants[3][1][24] = 64;
variants[4] = new Array(new Array(725.00, 999, '', '1.00', 725.00), new Array(), new Array());
variants[4][1][22] = 58;
variants[4][1][23] = 62;
variants[4][1][24] = 64;
variants[5] = new Array(new Array(725.00, 999, '', '1.00', 725.00), new Array(), new Array());
variants[5][1][22] = 59;
variants[5][1][23] = 62;
variants[5][1][24] = 64;
variants[6] = new Array(new Array(725.00, 999, '', '1.00', 725.00), new Array(), new Array());
variants[6][1][22] = 58;
variants[6][1][23] = 63;
variants[6][1][24] = 64;
variants[7] = new Array(new Array(725.00, 999, '', '1.00', 725.00), new Array(), new Array());
variants[7][1][22] = 59;
variants[7][1][23] = 63;
variants[7][1][24] = 64;
variants[8] = new Array(new Array(595.00, 999, '', '1.00', 595.00), new Array(), new Array());
variants[8][1][22] = 58;
variants[8][1][23] = 60;
variants[8][1][24] = 65;
variants[9] = new Array(new Array(595.00, 999, '', '1.00', 595.00), new Array(), new Array());
variants[9][1][22] = 59;
variants[9][1][23] = 60;
variants[9][1][24] = 65;
variants[10] = new Array(new Array(595.00, 999, '', '1.00', 595.00), new Array(), new Array());
variants[10][1][22] = 58;
variants[10][1][23] = 61;
variants[10][1][24] = 65;
variants[11] = new Array(new Array(595.00, 999, '', '1.00', 595.00), new Array(), new Array());
variants[11][1][22] = 59;
variants[11][1][23] = 61;
variants[11][1][24] = 65;
variants[12] = new Array(new Array(725.00, 999, '', '1.00', 725.00), new Array(), new Array());
variants[12][1][22] = 58;
variants[12][1][23] = 62;
variants[12][1][24] = 65;
variants[13] = new Array(new Array(725.00, 999, '', '1.00', 725.00), new Array(), new Array());
variants[13][1][22] = 59;
variants[13][1][23] = 62;
variants[13][1][24] = 65;
variants[14] = new Array(new Array(725.00, 999, '', '1.00', 725.00), new Array(), new Array());
variants[14][1][22] = 58;
variants[14][1][23] = 63;
variants[14][1][24] = 65;
variants[15] = new Array(new Array(725.00, 999, '', '1.00', 725.00), new Array(), new Array());
variants[15][1][22] = 59;
variants[15][1][23] = 63;
variants[15][1][24] = 65;
variants[16] = new Array(new Array(595.00, 999, '', '1.00', 595.00), new Array(), new Array());
variants[16][1][22] = 58;
variants[16][1][23] = 60;
variants[16][1][24] = 66;
variants[17] = new Array(new Array(595.00, 999, '', '1.00', 595.00), new Array(), new Array());
variants[17][1][22] = 59;
variants[17][1][23] = 60;
variants[17][1][24] = 66;
variants[18] = new Array(new Array(595.00, 999, '', '1.00', 595.00), new Array(), new Array());
variants[18][1][22] = 58;
variants[18][1][23] = 61;
variants[18][1][24] = 66;
variants[19] = new Array(new Array(595.00, 999, '', '1.00', 595.00), new Array(), new Array());
variants[19][1][22] = 59;
variants[19][1][23] = 61;
variants[19][1][24] = 66;
variants[20] = new Array(new Array(725.00, 999, '', '1.00', 725.00), new Array(), new Array());
variants[20][1][22] = 58;
variants[20][1][23] = 62;
variants[20][1][24] = 66;
variants[21] = new Array(new Array(725.00, 999, '', '1.00', 725.00), new Array(), new Array());
variants[21][1][22] = 59;
variants[21][1][23] = 62;
variants[21][1][24] = 66;
variants[22] = new Array(new Array(725.00, 999, '', '1.00', 725.00), new Array(), new Array());
variants[22][1][22] = 58;
variants[22][1][23] = 63;
variants[22][1][24] = 66;
variants[23] = new Array(new Array(725.00, 999, '', '1.00', 725.00), new Array(), new Array());
variants[23][1][22] = 59;
variants[23][1][23] = 63;
variants[23][1][24] = 66;
variants[24] = new Array(new Array(595.00, 999, '', '1.00', 595.00), new Array(), new Array());
variants[24][1][22] = 58;
variants[24][1][23] = 60;
variants[24][1][24] = 67;
variants[25] = new Array(new Array(595.00, 999, '', '1.00', 595.00), new Array(), new Array());
variants[25][1][22] = 59;
variants[25][1][23] = 60;
variants[25][1][24] = 67;
variants[26] = new Array(new Array(595.00, 999, '', '1.00', 595.00), new Array(), new Array());
variants[26][1][22] = 58;
variants[26][1][23] = 61;
variants[26][1][24] = 67;
variants[27] = new Array(new Array(595.00, 999, '', '1.00', 595.00), new Array(), new Array());
variants[27][1][22] = 59;
variants[27][1][23] = 61;
variants[27][1][24] = 67;
variants[28] = new Array(new Array(725.00, 999, '', '1.00', 725.00), new Array(), new Array());
variants[28][1][22] = 58;
variants[28][1][23] = 62;
variants[28][1][24] = 67;
variants[29] = new Array(new Array(725.00, 999, '', '1.00', 725.00), new Array(), new Array());
variants[29][1][22] = 59;
variants[29][1][23] = 62;
variants[29][1][24] = 67;
variants[30] = new Array(new Array(725.00, 999, '', '1.00', 725.00), new Array(), new Array());
variants[30][1][22] = 58;
variants[30][1][23] = 63;
variants[30][1][24] = 67;
variants[31] = new Array(new Array(725.00, 999, '', '1.00', 725.00), new Array(), new Array());
variants[31][1][22] = 59;
variants[31][1][23] = 63;
variants[31][1][24] = 67;

// modifiers array: as clasid => array: as optionid => array:
//	0 - price_modifier
//	1 - modifier_type
//	2 - taxes array: as taxid => tax amount
var modifiers = new Array();
// names array: as classid => class name
var names = new Array();
names[22] = "Housing";
names[23] = "Output";
names[24] = "Electrical Connection";
names[25] = "Pressure Range";
names[28] = "Voltage Range";

// taxes array: as taxid => tax amount
var taxes = new Array();

// exceptions array: as exctionid => array: as clasid => optionid
var exceptions = new Array();

// product_wholesale array: as id => array:
//	0 - quantity
//	1 - next quantity
//	2 - taxed price
//	3 - taxes array: as taxid => tax amount
//	4 - original price (without taxes)
var product_wholesale = new Array();

var exception_msg = "Warning! This combination of variants of the product options cannot be selected!";
var txt_out_of_stock = "Out of stock";
var pconf_price = 0
var default_price = 595.00;
var currency_symbol = "$";
var alter_currency_symbol = "";
var alter_currency_rate = 0.87;
var image_dir = "/cart/image.php?productid=&variantid=";
var txt_no = "No";
var list_price = 0.00;
var price = 595.00;
var orig_price = 595.00;
var current_taxes = new Array();
var mq = 50;
var dynamic_save_money_enabled = 'Y';
var is_unlimit = 'Y';


function check_options() {
var cnt, flag;

	var local_taxes = taxes.slice(0);
	price = default_price;
	var wp_found = -1;

	var select_avail = 1;
	if (document.getElementById('product_avail'))
		select_avail = document.getElementById('product_avail').options[document.getElementById('product_avail').selectedIndex].value;

	// Find wholesale price
	if (product_wholesale.length  > 0 && variants.length == 0) {
		for (var x = 0; x < product_wholesale.length; x++) {
			if (product_wholesale[x][0] <= select_avail && (product_wholesale[x][1] >= select_avail || product_wholesale[x][1] == 0)) {
				price = product_wholesale[x][2];
				local_taxes = product_wholesale[x][3].slice(0);
				wp_found = x;
				break;
			}
		}
	}

	// Find variant
	for (var x = 0; x < variants.length; x++) {
		if (variants[x][1].length == 0)
			continue;
		flag = true;
		for (var c in variants[x][1]) {
			if (document.getElementById('po'+c)) {
				if (document.getElementById('po'+c).value != variants[x][1][c]) {
					flag = false;
					break;
				}
			}
		}

		// If variant found ...
		if (flag) {
			price = variants[x][0][0];
			orig_price = variants[x][0][4];
			avail = variants[x][0][1];
			for (var t in local_taxes)
				if (variants[x][2][t])
					local_taxes[t] = parseFloat(variants[x][2][t]);
			if (variants[x][0][2] != '' && document.getElementById('product_thumbnail'))
				document.getElementById('product_thumbnail').src = image_dir+variants[x][0][2];
			if (document.getElementById('product_weight'))
				document.getElementById('product_weight').innerHTML = variants[x][0][3];
			break;
		}
	}

	if (pconf_price > 0)
		price = pconf_price;

	// Find modifiers
	var add_price = 0;
	for (var x in modifiers) {
		if (document.getElementById('po'+x).value) {
			if (modifiers[x][document.getElementById('po'+x).value]) {
				add_price += parseFloat(modifiers[x][document.getElementById('po'+x).value][1] == '$'?modifiers[x][document.getElementById('po'+x).value][0]:(price*modifiers[x][document.getElementById('po'+x).value][0]/100));
				for (var t in local_taxes) {
					if (modifiers[x][document.getElementById('po'+x).value][2][t]) {
						local_taxes[t] = parseFloat(local_taxes[t])+parseFloat(modifiers[x][document.getElementById('po'+x).value][1] == '$'?modifiers[x][document.getElementById('po'+x).value][2][t]:(orig_price*modifiers[x][document.getElementById('po'+x).value][0]/100*modifiers[x][document.getElementById('po'+x).value][2][t]/100));
					}
				}
			}
		}
	}
	price += add_price;

	// 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], 2);
		current_taxes[t] = local_taxes[t];
	}

	// Update price
	if (document.getElementById('product_price'))
		document.getElementById('product_price').innerHTML = currency_symbol+price_format(price, 2);

	// Update alt. price
	if (alter_currency_rate > 0 && alter_currency_symbol != "" && document.getElementById('product_alt_price'))
		document.getElementById('product_alt_price').innerHTML = "("+alter_currency_symbol+" "+price_format(price*alter_currency_rate, 2)+")";

	// Update Save %
	if (document.getElementById('save_percent') && list_price > 0 && dynamic_save_money_enabled == 'Y')
		document.getElementById('save_percent').innerHTML = (price < list_price) ? Math.round(100-(price/list_price)*100) : '0';

	if ((mq > 0 && avail > mq) || is_unlimit == 'Y')
		avail = mq;

	// Update product quantity
	if (document.getElementById('product_avail_txt'))
		document.getElementById('product_avail_txt').innerHTML = ((avail > 0)?(flag?avail:product_avail):txt_no);
	select_avail = min_avail;
	// Update product quantity selector
	if (document.getElementById('product_avail')) {
		if (document.getElementById('product_avail').options) {
			if (!isNaN(min_avail) && !isNaN(avail)) {
				var first_value = -1;
				if (document.getElementById('product_avail').options[0])
					first_value = document.getElementById('product_avail').options[0].value;
				if (first_value == min_avail) {
					if ((avail-min_avail+1) != document.getElementById('product_avail').options.length) {
						if (document.getElementById('product_avail').options.length > avail) {
							cnt = document.getElementById('product_avail').options.length;
							for (var x = avail; x < cnt; x++)
								document.getElementById('product_avail').options[document.getElementById('product_avail').options.length-1] = null;
						} else {
							cnt = document.getElementById('product_avail').options.length;
							for (var x = cnt+1; x <= avail; x++)
								document.getElementById('product_avail').options[cnt++] = new Option(x, x);
						}
					}
				} else {
					while (document.getElementById('product_avail').options.length > 0)
						document.getElementById('product_avail').options[0] = null;
					cnt = 0;
					for (var x = min_avail; x <= avail; x++)
						document.getElementById('product_avail').options[cnt++] = new Option(x, x);
				}
				if (document.getElementById('product_avail').options.length == 0)
					document.getElementById('product_avail').options[0] = new Option(txt_out_of_stock, 0);
			}
		}
		select_avail = document.getElementById('product_avail').options[document.getElementById('product_avail').selectedIndex].value;
	}

	// Update wholesale prices table
	if (product_wholesale.length  > 0 && variants.length == 0) {
		found = false;
		for (var x = 0; x < product_wholesale.length; x++) {
			if (!document.getElementById('wp'+x))
				continue;
			var wp_add_price = product_wholesale[x][2];
			for (var y in modifiers) {
				if (document.getElementById('po'+y).value) {
					if (modifiers[y][document.getElementById('po'+y).value]) {
						wp_add_price += parseFloat(modifiers[y][document.getElementById('po'+y).value][1] == '$' ? modifiers[y][document.getElementById('po'+y).value][0] : (product_wholesale[x][2]*modifiers[y][document.getElementById('po'+y).value][0]/100));
					}
				}
			}
			document.getElementById('wp'+x).innerHTML = currency_symbol+price_format(wp_add_price, 2);
		}
	}

	if ((alert_msg == 'Y') && (min_avail > avail))
		alert(txt_out_of_stock);
	
	// Check exceptions
	var ex_flag = check_exceptions();
	if (!ex_flag && (alert_msg == 'Y'))
		alert(exception_msg);
			
	if (document.getElementById('exception_msg'))
		document.getElementById('exception_msg').innerHTML = (ex_flag ? '' : exception_msg+"<BR><BR>");

	return true;
}

function check_exceptions() {
var x, cnt;

	for(x in exceptions) {
        flag = true;
		if(exceptions[x].length != names.length)
			continue;
        for(c in exceptions[x])
            if(document.getElementById('po'+c).value != exceptions[x][c]) {
                flag = false;
                break;
            }
		if(flag)
			return false;
	}
	return true;
}

function price_format(price, precision) {
var x, cnt, top, botom;
	precision = Math.pow(10, precision);
	price = Math.round(price*precision)/precision;
	top = Math.floor(price);
	bottom = Math.round((price-top)*precision)+precision;
	top = top+"";
	bottom = bottom+"";
	cnt = 0;
	for(x = top.length; x >= 0; x--) {
		if(cnt%3 == 0 && cnt > 0 && x > 0)
			top = top.substr(0,x)+","+top.substr(x,top.length);
		cnt++;
	}
	price = top+"."+bottom.substr(1,bottom.length);
	return price;
}

function product_option(classid) {
	if(!isNaN(classid)) {
		return document.getElementById(classid);
	} else if(names) {
		var x;
		for(x in names) {
			if(names[x] == classid) {
				if(document.getElementById('po'+x)) {
					return document.getElementById('po'+x);
				}
				break;
			}
		}
	}
	return false;
}

function product_options(name) {
var x;
	if(names)
		for(x in names)
			if(names[x] == name) {
				if(document.getElementById('po'+x)) {
					var obj = document.getElementById('po'+x);
					return (obj.type == 'select-one')?obj.options[obj.selectedIndex].text:obj.value;
				}
				break;
			}
	return false;
}