// $Id: func.js,v 1.11 2005/12/01 14:51:35 max Exp $

var product_thumbnail = document.getElementById('product_thumbnail');
var availObj = document.getElementById('product_avail');

//
// Rebuild page if some options is changed
//
function check_options() {
var cnt, flag, select_avail, _tmp;
var local_taxes = new Array();
var is_variant = false;

	for (var t in taxes)
		local_taxes[t] = taxes[t][0];
	price = default_price;

	// 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) {
			is_variant = true;
			price = variants[x][0][0];
			orig_price = variants[x][0][4];
			avail = variants[x][0][1];

			// Get variant wholesale prices
			if (variants[x][3]) {
				product_wholesale = new Array();
				for (var t in variants[x][3]) {
					var _tmp = modi_price(variants[x][3][t][2], variants[x][3][t][3].slice(0), variants[x][3][t][4]);
					product_wholesale[t] = new Array(variants[x][3][t][0],variants[x][3][t][1],_tmp[0], new Array());

					// Get variant wholesale taxes
					for (var c in _tmp[1]) {
						product_wholesale[t][3][c] = _tmp[1][c];
					}
				}
				rebuild_wholesale();
			}

			if (variants[x][2])
				taxes = variants[x][2];

			for (var t in local_taxes) {
				if (variants[x][2][t])
					local_taxes[t] = parseFloat(variants[x][2][t]);
			}

			if (!product_thumbnail)
				product_thumbnail = document.getElementById('product_thumbnail');

			if (product_thumbnail) {
				if (variants[x][0][2].src && variants[x][0][2].width > 0 && variants[x][0][2].height > 0) {
					if (product_thumbnail.src != variants[x][0][2].src) {
						product_thumbnail.src = variants[x][0][2].src;
						product_thumbnail.width = variants[x][0][2].width;
						product_thumbnail.height = variants[x][0][2].height;
					}
				} else if (document.getElementById('product_thumbnail').src != product_image.src) {
					product_thumbnail.src = product_image.src;
					product_thumbnail.width = product_image.width;
					product_thumbnail.height = product_image.height;
				}
			}

			if (document.getElementById('product_weight'))
				document.getElementById('product_weight').innerHTML = variants[x][0][3];

			break;
		}
	}

	if (pconf_price > 0)
		price = pconf_price;

	// Find modifiers
	_tmp = modi_price(price, local_taxes, orig_price);
	price = _tmp[0];
	local_taxes = _tmp[1];
	if (!is_variant) {
		product_wholesale = new Array();
		for (var t in _product_wholesale) {
			_tmp = modi_price(_product_wholesale[t][2], _product_wholesale[t][3], _product_wholesale[t][4]);
			product_wholesale[t] = new Array(_product_wholesale[t][0],_product_wholesale[t][1],_tmp[0],_tmp[1]);
		}
		rebuild_wholesale();
	}

	// 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]);
		}
		current_taxes[t] = local_taxes[t];
	}

	// Update form elements
	// Update price
	if (document.getElementById('product_price'))
		document.getElementById('product_price').innerHTML = currency_symbol+price_format(price);

	// 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)+")";

	// Update Save %
	if (document.getElementById('save_percent') && document.getElementById('save_percent_box') && list_price > 0 && dynamic_save_money_enabled == 'Y') {
		if (price <= list_price) {
			document.getElementById('save_percent_box').style.display = '';
			document.getElementById('save_percent').innerHTML = Math.round(100-(price/list_price)*100);
		} else {
			document.getElementById('save_percent_box').style.display = 'none';
			document.getElementById('save_percent').innerHTML = '0';
		}
	}

	// Update product quantity
	if (document.getElementById('product_avail_txt'))
		document.getElementById('product_avail_txt').innerHTML = ((avail > 0) ? (flag ? avail : product_avail) : txt_no);

	if ((mq > 0 && avail > mq+min_avail) || is_unlimit == 'Y')
		avail = mq+min_avail-1;

	select_avail = min_avail;
	// Update product quantity selector
	if (!availObj)
		availObj = document.getElementById('product_avail');
	if (availObj) {
		if (availObj.options) {
			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) {
					if ((avail-min_avail) != availObj.options.length) {
						if (availObj.options.length > avail-min_avail) {
							var cnt = availObj.options.length;
							for (var x = avail-min_avail; x < cnt-1; x++)
								availObj.options[availObj.options.length-1] = null;
						} else {
							var cnt = availObj.options.length;
							for (var x = cnt+min_avail; x <= avail; x++)
								availObj.options[cnt++] = new Option(x, x);
						}
					}
				} else {
					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);

	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_html+"<BR><BR>");

	return true;
}

//
// Calculate product price with price modificators 
//
function modi_price(_price, _taxes, _orig_price) {
var return_price = _price;

	// List modificators
	for (var x2 in modifiers) {
		if (!document.getElementById('po'+x2).value)
			continue;

		if (!modifiers[x2][document.getElementById('po'+x2).value])
			continue;

		// Get selected option
		var elm = modifiers[x2][document.getElementById('po'+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] += (elm[1] == '$' ? elm[2][t2] : (_orig_price*elm[0]/100*elm[2][t2]/100));
			}
		}
	}
	return [return_price, _taxes];
}

//
// Check product options exceptions
//
function check_exceptions() {
	if (!exceptions)
		return true;

	// List exceptions
	for (var x in exceptions) {
		if (isNaN(x))
			continue;
		var cnt = 0;
		var orig_cnt = 0;
        for (var c in exceptions[x]) {
            if (document.getElementById('po'+c).value == exceptions[x][c]) {
				cnt++;
            }
			orig_cnt++;
		}
		if (orig_cnt == cnt)
			return false;
	}
	return true;
}

//
// Get product option object by class name / class id
//
function product_option(classid) {
	if (!isNaN(classid))
		return document.getElementById(classid);

	if (!names)
		return false;

	for (var x in names) {
		if (names[x] != classid)
			continue;
		if (document.getElementById('po'+x)) {
			return document.getElementById('po'+x);
		}
		break;
	}

	return false;
}

//
// 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 = '<br /><table cellpadding="2" cellspacing="2"><tr class="TableHead"><td align="right"><b>'+lbl_quantity+'&nbsp;:&nbsp;</b></td>';
	for (var x in product_wholesale) {
		if (product_wholesale[x][0] == 0)
			continue;
		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>';
	}

	// Display wholesale prices
	str += '</tr><tr bgcolor="#EEEEEE"><td align="right"><b>'+lbl_price+(taxes.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])+'</td>';
	}

	str += '</tr></table>';

	// Display wholesale prices taxes
	if (taxes.length > 0) {
		str += '<br /><table><tr><td class="FormButton" valign="top"><b>*'+txt_note+':</b>&nbsp;</td><td nowrap="nowrap" valign="top">';
		for (var x in taxes) {
			str += substitute(lbl_including_tax, 'tax', taxes[x][1])+'<br />';
		}
		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 (product_wholesale[x][0] <= qty && (product_wholesale[x][1] >= qty || product_wholesale[x][1] == 0)) {
			wl_price = product_wholesale[x][2];
			wl_taxes = product_wholesale[x][3].slice(0);
			found = true;
		}
		if (document.getElementById('wp'+x))
			document.getElementById('wp'+x).innerHTML = currency_symbol+price_format(price-default_price+product_wholesale[x][2]);
	}

	document.getElementById('product_price').innerHTML = currency_symbol+price_format(wl_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((wl_price)*alter_currency_rate)+")";

	for (var x in taxes) {
		if (document.getElementById('tax_'+x) && current_taxes[x])
			document.getElementById('tax_'+x).innerHTML = currency_symbol+price_format(wl_taxes[x]);
	}

	return true;
}

//
// Get product option value by class name / or class id
//
function product_options(name) {
var obj = false;
	if (!names || !name)
		return false;

	if (isNaN(name)) {
		for (var x in names) {
			if (names[x] == name) {
				obj = document.getElementById('po'+x);
				continue;
			}
		}
	} else {
		obj = document.getElementById('po'+name);
	}

	if (!obj)
		return false;

	return (obj.type == 'select-one') ? obj.options[obj.selectedIndex].text : obj.value;
}


