var row;
document.observe('dom:loaded', function() {	
	$$('.product').each(function(elem, i) {
		elem.down('.sku input').clear();
		elem.down('.quantity input').clear().disable();
		if (i == 0) {
			elem.down('.sku input').activate();
		} else { 
			row = elem.remove();
		}
	});
	addEventHandlers();
});

var request = "";

function addEventHandlers() {
	$$('.sku input').each(function(elem) {
		elem.stopObserving('keydown');
		elem.observe('keydown', function(event) {
			var oldValue = $F(elem);
			elem.observe('keyup', function(event) {
				elem.stopObserving('keyup');
				if ($F(elem) != oldValue && $F(elem).length == 5) {
					var id = elem.identify();
					var parent = elem.up('tr');
					if (id.substr(id.length - 1) == $$('.product').length - 1) {
						row.down('.sku label').writeAttribute('for','sku-' + $$('.product').length);
						row.down('.sku input').writeAttribute('id','sku-' + $$('.product').length);
						row.down('.quantity label').writeAttribute('for','quantity-' + $$('.product').length);
						row.down('.quantity input').writeAttribute('id','quantity-' + $$('.product').length);
						parent.insert({after:row.cloneNode(true)});
						addEventHandlers();
					}
					var qtyInput = elem.up('td').next('.quantity').down('input');
					qtyInput.enable().activate();
					var toBGColor = '';
					new Ajax.Request('/ajax/product/getProduct.asp', {
						method: 'get',
						parameters: { 'sku':$F(elem), 'qty':qtyInput },
						onSuccess: function(transport, json) {
							parent.removeClassName('error');
							parent.down('.description').update(json.description);
							parent.down('.price').update(formatCurrency(json.price));
							var qty = $F(parent.down('.quantity input'));
							parent.down('.subtotal').update(formatCurrency(json.price * qty));
							toBGColor = parent.getStyle('backgroundColor');
							parent.setStyle({ background: '#A6FF79' });
						},
						onFailure: function() {
							parent.addClassName('error');
							parent.down('.description').update('Product Not Found');
							toBGColor = parent.getStyle('backgroundColor');
							parent.setStyle({ background: '#FF6456' });
						},
						onComplete: function() {	
							Effect.Queues.get(parent.identify()).invoke('cancel');
							new E0ffect.Morph(parent, {
								style: {
									background: toBGColor
								},
								duration: 0.5,
								afterFinish: function() {
									parent.setStyle({ background: '' });										
								}
							});						
						}
					});
				}
			});
		});
	});
	$$('.quantity input').each(function(elem) {
		elem.stopObserving('keydown');
		elem.observe('keydown', function(event) {
			var oldValue = $F(elem);
			elem.observe('keyup', function(event) {
				elem.stopObserving('keyup');
				if ($F(elem) != oldValue) {
					var id = elem.identify();
					var parent = elem.up('tr');
					var qtyInput = elem.up('td').down('input');		
					var qty = $F(id);
					var sku = $F(parent.down('.sku input'));
					new Ajax.Request('/ajax/product/getProduct.asp', {
						method: 'get',
						parameters: { 'sku':sku, 'qty':qty  },
						onSuccess: function(transport, json) {
							parent.down('.price').update(formatCurrency(json.price));
							var price = json.price;
							toBGColor = parent.getStyle('backgroundColor');
							parent.setStyle({ background: '#A6FF79' });
						},
						onFailure: function() {
							parent.addClassName('error');
							parent.down('.description').update('Product Not Found');
							toBGColor = parent.getStyle('backgroundColor');
							parent.setStyle({ background: '#FF6456' });
						},
						onComplete: function() {
							var price = parent.down('.price').innerHTML.replace("$","");
							parent.down('.subtotal').update(formatCurrency(Math.abs(price * qty)));
							$('runningTotal').update("");
							$$('.subtotal').each(function(elem) {
								var oldTotal = ($('runningTotal').innerHTML.replace("$","") * 1) ;
								thisTotal = (elem.innerHTML.replace("$","") * 1);
								if (!isNaN(thisTotal)) {
									$('runningTotal').update(formatCurrency(oldTotal + thisTotal));
								}
							});
						}
					});	
					
				}
			});
		});
	});
	
}

function formatCurrency(num) { 
	return !isNaN(num) ? '$' + parseFloat(num).toFixed(2) : '?????';
}
