// $Id: func.js,v 1.16.2.15 2007/01/05 08:06:25 max Exp $
/* victor kornev  http://www.arscommunity.com */

var current_taxes = [];

var product_thumbnail = document.getElementById('product_thumbnail');

var availObj = document.getElementById('product_avail');

// On Sale :: alteredcart.com //
function onsale_calculate_product_discount(price){

    if (discount_per_amount > 0)
        price = price_format((price/100)*(100-discount_per_amount));

    if (discount_abs_amount > 0)
        price = price_format(price - discount_abs_amount);

    return price;
}
// END On Sale :: alteredcart.com //


/*
	Rebuild page if some options is changed
*/



/* kornev, check div options */
function check_options_div(option, recurr) {
    select = _getById('po'+option);
    is_selected = false;
    if (recurr != 1)
    for (var i=0; i < select.options.length; i++) {
            is_selected |= (select.options[i].selected && _getById(select.options[i].value+'_div').className != 'size_options_disabled');
    }

    var is_new_recalc = 0;

    for (var i=0; i < select.options.length; i++) {
        div = _getById(select.options[i].value+'_div');
        if (div) {
            is_disabled = 0;
            selected_value = select.options[i].value;

            for (var x in variants) {
                if (!variants[x][1] || variants[x][1][option] != selected_value) continue;
                is_this_variant = true;
                for (k in variants[x][1]) {
                    if (!(k == option || getPOValue(k) == variants[x][1][k])) {
                        is_this_variant &= false;
                    }
                }
                if (is_this_variant) is_disabled = variants[x][0][1];
		    }

            select.options[i].style.color = '#000000';
            if (is_disabled == 0) {
                div.setAttribute("class", "size_options_disabled");
                div.setAttribute("className", "size_options_disabled"); 
                select.options[i].style.color = '#adadad';
//                select.options[i].disabled = true;
                if (select.options[i].selected) {
                    select.options[i].selected = false;
                    select.options.selectedIndex = 0;
                    if (!recurr) {
                        check_options_div(option, 1);
                        return 1;
                    }
                    is_new_recalc = 1;
                }
            }
            else if (select.options[i].selected || !is_selected) {
                div.setAttribute("class", "size_options_selected");
                div.setAttribute("className", "size_options_selected"); 
                if (select.options.selectedIndex != i) {
                    select.options[i].selected = true;
                    select.options.selectedIndex = i;
               
                    is_new_recalc = 1;
                }
                _getById('po'+option+'_cart').value = select.options[i].value;
                is_selected = true;
            }
            else {
                div.setAttribute("class", "size_options");
                div.setAttribute("className", "size_options"); 
            }
        }
    }

    return is_new_recalc;
}

function check_options(recurr, pid) {

if (!isset(pid)) var pid = '';
if (pid) {
product_thumbnail = document.getElementById('product_thumbnail'+pid);
availObj = document.getElementById('product_avail'+pid);
taxes = eval('taxes'+pid);
default_price = eval('default_price'+pid);
variants = eval('variants'+pid);
modifiers = eval('modifiers'+pid);
pconf_price = eval('pconf_price'+pid);
orig_price = eval('orig_price'+pid);
product_wholesale = eval('product_wholesale'+pid);
_product_wholesale = eval('_product_wholesale'+pid);
list_price = eval('list_price'+pid);
taxes = eval('taxes'+pid);
product_avail = eval('product_avail'+pid);
avail = eval('avail'+pid);
min_avail = eval('min_avail');
}

	var local_taxes = [];

	var is_rebuild_wholesale = false;

	var variantid = false;

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

	price = default_price;

	/* Find variant */

	document.cookie = "email_variantid=";

	for (var x in variants) {
		if (!variants[x] || !variants[x][1] || variants[x][1].length == 0)
			continue;
		variantid = x;
		for (var c in variants[x][1]) {
			if (getPOValue(c) != variants[x][1][c]) {
				variantid = false;
				break;
			}
		}

		if (variantid)
			break;
	}

	/* If variant found ... */
	if (variantid) {
        /* kornev, check div to disable */
        for(i in variants[variantid][1]) {
            is_size = _getById('po'+i+'_cart');
            if (is_size) {
                is_variant_changed = check_options_div(i, recurr);
                if (is_variant_changed == 1 && recurr != 1) {
                    check_options(1, pid);
                    return;
                }
            }
        }

		document.cookie = "email_variantid=" + variantid;
		colorid =  variants[variantid][1][for_swatches];
		price = variants[variantid][0][0];
		orig_price = variants[variantid][0][4];
		avail = variants[variantid][0][1];


		/* Get variant wholesale prices */
		if (variants[variantid][3]) {

			product_wholesale = [];

			for (var t in variants[variantid][3]) {

				var _tmp = modi_price(variants[variantid][3][t][2], cloneObject(variants[variantid][3][t][3]), variants[variantid][3][t][4]);

				product_wholesale[t] = [

					variants[variantid][3][t][0], 

					variants[variantid][3][t][1], 

					_tmp[0],

					[]

				];



				/* Get variant wholesale taxes */

				for (var c in _tmp[1]) {

					product_wholesale[t][3][c] = _tmp[1][c];

				}

			}

			is_rebuild_wholesale = true;

		}
		

		/* Get variant taxes */

		for (var t in local_taxes) {

			if (variants[variantid][2][t])

				local_taxes[t] = parseFloat(variants[variantid][2][t]);

		}



		if (!product_thumbnail && document.getElementById('MagicZoomPlusImageproduct_thumbnail'))
            product_thumbnail = document.getElementById('MagicZoomPlusImageproduct_thumbnail').firstChild;         



		/* Change product thumbnail */

		if (product_thumbnail) {
            if (!pid)
                MagicZoom_stopZooms();

            if (pid && variants[variantid][0][2].src && variants[variantid][0][2].width > 0 && variants[variantid][0][2].height > 0) {
                if (product_thumbnail.src != variants[variantid][0][2].src) {
                    product_thumbnail.src = variants[variantid][0][2].src;
// kornev, on the category list page it's not required
//                    product_thumbnail.width = variants[variantid][0][2].width;
//                    product_thumbnail.height = variants[variantid][0][2].height;
                }
            }
			else if (variants[variantid][0][2].src) {
                if (product_thumbnail.src != variants[variantid][0][2].src) {

                    if (!pid) {
                        product_thumbnail.src = variants[variantid][0][2].getAttribute('magiczoomplus_thumbnail');
                        product_thumbnail.parentNode.href = variants[variantid][0][2].src;
                    }
                    else {
                        product_thumbnail.src = variants[variantid][0][2].src;
                    }

/*
                    if (typeof(window.saved_product_thumbnail) != 'undefined' && saved_product_thumbnail)
                        saved_product_thumbnail = false;
*/

                    if (variants[variantid][0][6] && $.browser.msie)
                        pngFix(product_thumbnail);
                }

			} else if (product_thumbnail.src != product_image.src) {

                if (product_image.getAttribute('magiczoomplus_thumbnail')) {
                    product_thumbnail.src = product_image.getAttribute('magiczoomplus_thumbnail');
                    product_thumbnail.parentNode.href = product_image.src;

                    if (product_image.isPNG)
                        pngFix(product_thumbnail);
                }

			}
            if (!pid) {
                MagicZoom_findZooms();
                MagicThumb.refresh();

		    	document.cookie = "email_imgsrc=" + product_thumbnail.src;
			    document.cookie = "email_imgwidth=" + product_thumbnail.width;
    			document.cookie = "email_imgheight=" + product_thumbnail.height;
            }
		}

		/* Change product weight */

		if (document.getElementById('product_weight'))

			document.getElementById('product_weight').innerHTML = price_format(variants[variantid][0][3]);

		if (document.getElementById('product_weight_box'))

			document.getElementById('product_weight_box').style.display = parseFloat(variants[variantid][0][3]) > 0 ? "" : "none";



		/* Change product code */

		if (document.getElementById('product_code'))

			document.getElementById('product_code').innerHTML = variants[variantid][0][5];



	}



	if (pconf_price > 0)

		price = pconf_price;



	/* Find modifiers */

	var _tmp = modi_price(price, local_taxes, orig_price);

	price = _tmp[0];

	local_taxes = _tmp[1];

	if (!variantid) {

		product_wholesale = [];

		for (var t in _product_wholesale) {

			_tmp = modi_price(_product_wholesale[t][2], _product_wholesale[t][3].slice(0), _product_wholesale[t][4]);

			product_wholesale[t] = [

				_product_wholesale[t][0],

				_product_wholesale[t][1],

				_tmp[0],

				_tmp[1]

			];

		}

		is_rebuild_wholesale = true;

	}



	/* 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 */

	
/*rubymods start*/
  if (document.getElementById('product_price'+pid)) {
   if (alter_currency_symbol != "") {
     if (ruby_rates_display_only_alt == "Y")
       document.getElementById('product_price'+pid).innerHTML = alter_currency_symbol+price_format(wl_price*alter_currency_rate);
     else
document.getElementById('product_price'+pid).innerHTML = "("+ currency_symbol+price_format(wl_price) + ")";
   }
   else
		document.getElementById('product_price'+pid).innerHTML = '$'+price_format(price < 0 ? 0 : price);


	// On Sale :: alteredcart.com // 
	if (discount_per_amount > 0 || discount_abs_amount > 0){
	
	var original_price = price; 
	price = onsale_calculate_product_discount(price);
	
	if (document.getElementById('product_price'+pid))
    	document.getElementById('product_price'+pid).innerHTML = ' '+currency_symbol+price_format(price);
	
	}
	// END On Sale :: alteredcart.com // 


	/* Update alt. price */


	
}
  
    /* Update alt. price */
   if (alter_currency_rate > 0 && alter_currency_symbol != "" && document.getElementById('product_alt_price') && ruby_rates_display_only_alt != "Y")  {
		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) {
/*rubymods end*/
		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);
	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 = 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];

}



/*

	Check product options exceptions

*/

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;

}



/*

	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 (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)) {

			var wPrice = price-default_price+product_wholesale[x][2];

			document.getElementById('wp'+x).innerHTML = currency_symbol+price_format(wPrice < 0 ? 0 : wPrice);

		}

	}



	if (document.getElementById('product_price'+pid))
		document.getElementById('product_price'+pid).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;

}



/*

	Get product option value

*/

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;

}




