/**
* @version $Id: item.js 35996 2010-04-22 15:51:25Z tosho $
*/


//===========================================================================//

var select_child_cache = Array();

/**
 * @todo Add parent_profile support!
 */
function select_child(form, column, width, height, rel_html_url, width_large, height_large) {

	var search_data = {};

	// walk the parent-selectable-columns
	// and look for the search data ...
	//
	for (var parent_profile_id in parent_selectable_columns) {
		for (var column_name in parent_selectable_columns[parent_profile_id]) {
			if (form.elements['children_' + parent_selectable_columns[parent_profile_id][column_name]] + '_' + parent_profile_id) {
				// @todo search_data does is not per profile!!! (also below should be fixed)
				search_data[column_name] = form.elements['children_' + column_name + '_' + parent_profile_id].options[form.elements['children_' + column_name + '_' + parent_profile_id].selectedIndex].text;
			}
		}		
	}

	// there is a child already selected by the url ?
	// then change the search data
	//
	var selected_child_sku = get_selected_child_sku();
	if (!column && selected_child_sku) {
		search_data = {"sku" : selected_child_sku };
		}

	// walk the actual parent data, and
	// look for a search data match ...
	//
	for (var key in parent_data) {
		
		var matches = true;
		for (var search_key in search_data) {
			if (trim(search_data[search_key]) != trim(parent_data[key][search_key])) {
				matches = false;
				break;
				}
			}

		if (!matches) {
			continue;
			}

		apply_child(key, form, width, height, rel_html_url, width_large, height_large);


		break; // stop after first match
	}
}


/**
*/
function apply_child(key, form, width, height, rel_html_url, width_large, height_large) {
	
	if (typeof parent_data != 'object') {
		return;
		}

	// is this the toolkit ?
	//
	try {
		var toolkit = (typeof jQuery.order.add.cart != 'undefined');
	}
	catch(err) {
		var toolkit = false;
	}

	// the sku is put in the "id" element of the form!
	//
	form.id.value = parent_data[key]['sku'];

		// default handler for populating the parent_data
		//
		var parent_data_populate = function(i, form) {

			// populate "static" elements
			//
			var element = document.getElementById(i);
			if (element) {
				element.innerHTML = parent_data[key][i];
				element.value = parent_data[key][i];
				}
			
			// populate "inputs"
			//
			if (form.elements[i]) {
				form.elements[i].value = parent_data[key][i];
				}
			}

	for (var i in parent_data[key]) {

		switch (i) {
			case 'id' :
				break;

			case 'store_price':
				if (toolkit) {
					form.elements['price'].value =
						(typeof parent_data[key]['original'][i] != 'undefined')
							? parent_data[key]['original'][i]
							: parent_data[key][i];
					}
				parent_data_populate(i, form);
				break;
				
			case 'description':
				if (toolkit) {
					form.elements['description'].value = parent_data[key]['original']['__toString'];
					} else {
					parent_data_populate(i, form);
					}
				break;

			case 'quantity':
				if (!toolkit) {
					parent_data_populate(i, form);
					}
				break;
				
			case 'min_quantity':
				if (toolkit) {
					form.elements['quantity'].value = parent_data[key]['original'][i];
					} else {
					parent_data_populate(i, form);
					}
				break;
				
			default :
				parent_data_populate(i, form);
				break;
			}
		}

	if (parent_data[key]['applied_inventory_control']) {
		if (parent_data[key]['store_quantity'] > 0 || (parent_data[key]['applied_inventory_control'] == 'no_control')) {
			buy = 'buy';
		} else if (parent_data[key]['applied_inventory_control'] == 'backorder') {
			buy = 'backorder';
		} else if (parent_data[key]['applied_inventory_control'] == 'in_stock_email') {
			buy = 'in_stock_email';
		} else {
			// hide
			buy = '';
		}

		if (buy) {
			var buttons = Array('item_buy_button', 'item_buy_button_buy', 'item_buy_button_backorder', 'item_buy_button_in_stock_email');
			for (var i = 0; i < buttons.length; i++) {
				var element = document.getElementById(buttons[i]);
				if (element) {
					element.style.display = (element.id == 'item_buy_button_' + buy) ? 'block' : 'none';
				}
			}
		}
	}

	if (parent_data[key]['default_image'] && document.images.product_image) {
		var sku = parent_data[key]['default_image'];
		sku = sku.substring(0, sku.length - 4); // strip off .jpg
		var url = rel_html_url + "index.php?type=bare&page=image&smarty_param_type=product&redirect=1&id=" + escape(sku) + "&width=" + width + "&height=" + height;
		document.images.product_image.src = url;


		var product_image_link = document.getElementById('product_image_link')
		if (product_image_link) {
			jQuery.ajax(
			{
				url: rel_html_url + "index.php?type=bare&page=image&smarty_param_type=product&id=" + escape(sku) + "&width=" + width_large + "&height=" + height_large,
				async: true,
				dataType: 'html',
				complete: function (xhr)
				{
					product_image_link.href = xhr.responseText;
				},
				error: function (xhr)
				{ }
				});
			}
		}
	
	}

/**
*/
function get_selected_child_sku() {
	var u = parse_url(document.location);
	if (typeof u.params.child != 'undefined') {
		return u.params.child;
		}
	return false;
	}

/**
*/
var validate_item_elements = Array();

/**
*/
function validate_item(form) {
	for (var i = 0; i < validate_item_elements.length; i++) {
		var value;
		switch (form.elements[validate_item_elements[i].name].type) {
			case 'radio':
				break;

			case 'select-multiple':
				break;

			case 'text':
			case 'select-one':
			case 'checkbox':
			default:
				value = form.elements[validate_item_elements[i].name].value;
				break;
		}

		if (validate_item_elements[i].required && value == '') {
			form.elements[validate_item_elements[i].name].focus();
			alert(validate_item_elements[i].title + ' is required.');
			return false;
		}
	}

	return true;
}
 