jQuery.noConflict(); 

function initArrayObject(protoEl, addEl, removeEls, onAddFn, onRemoveFn)
{
	jQuery(addEl).click(function(evt) {
		evt.preventDefault();
		var el = jQuery(protoEl).clone(true).removeAttr('id').removeClass('prototype').insertBefore(jQuery(evt.target).parent());
		if(!el.is('li')) {
			el = el.wrap('<li class="array-object">');
		}
		var index = Math.round(Math.random() * 9999);
		var suffix = '-' + index;
		jQuery('*[id]', el).each(function() {
			jQuery(this).attr('id', jQuery(this).attr('id') + suffix);
		});
		jQuery('*[name]', el).each(function() {
			jQuery(this).attr('name', jQuery(this).attr('name').replace('[prototype]', '[' + index + ']'));
		});
		jQuery('label[for]', el).each(function() {
			jQuery(this).attr('for', jQuery(this).attr('for') + suffix);
		});
		if(onAddFn) {
			onAddFn(el);
		}
	});
	
	jQuery(removeEls).click(function(evt){
		evt.preventDefault();
		var el = jQuery(evt.target).parents('li');
		var remove = true;
		if(onRemoveFn) {
			remove = onRemoveFn(el);
		}
		if(remove != false)
		{
			el.remove();
		}
	});
}

function initRegister(products, prototypeEl, addVisitorEl, priceEl, currencyEl)
{
	var productSelector = jQuery(prototypeEl).parents('form').find('select[name=product]');
	var setVisitorCount = function(visitorCount)
	{
		var product, selectedProductName = productSelector.val();
		if(products.length > 1)
		{
			for(var i = 0; i < products.length; i++)
			{
				if(products[i].name == selectedProductName)
				{
					product = products[i];
					break;
				}
			}
		}
		else if(products.length == 1)
		{
			product = products[0];
		}
		if(!product || !product.price)
		{
			jQuery(priceEl).parent().hide();
		}
		else
		{
			jQuery(priceEl).parent().show();
			var rebate = 0;
			for(var limit in product.rebates) {
				if(limit <= visitorCount) {
					rebate = product.rebates[limit];
				}
			}
			jQuery(priceEl).text(visitorCount * product.price * (100 - rebate)/100);
			jQuery(currencyEl).text(product.currency);
		}
	}
	
	var updatePrice = function(){
		setVisitorCount(jQuery('.visitor').length - 1);
	}
	
	var onAddFn = function(el)
	{
		el.hide();
		el.fadeIn('slow', function() {
			jQuery(':input', el).get(0).focus();
		});
		setVisitorCount(jQuery('.visitor').length - 1);
	}
	
	var onRemoveFn = function(el)
	{
		el.fadeOut('fast', function() {
			el.remove();
		});
		setVisitorCount(jQuery('.visitor').length - 2);
		return false;
	}
	
	productSelector.change(updatePrice);
	initArrayObject(prototypeEl, addVisitorEl, '.remove', onAddFn, onRemoveFn);
	updatePrice();
}
