//if set to true show mini cart animation on successful addToCart action.
var showMiniCartOnAddToCart = false;

function add2Cart(formId, buttonId, action, isCatalogTegut) {
	var parameters = formId.serialize(true);
	unbindCart(formId, buttonId);
	new Ajax.Request(action, {
		parameters : parameters,
		onSuccess : function(transport) {
			if(transport.responseText.isJSON()){
				processAdd2CartResponse(transport.responseText.evalJSON(), isCatalogTegut);
			}
		},
		onLoading : function(transport) {
			if(isCatalogTegut) {
				$('add-to-cart-spinner').show();
			}
		},
		onComplete : function(transport) {
			$('add-to-cart-spinner').hide();
			bindCart(formId, buttonId);
		}
	});
	
	return true;
}

function add2CartReload(formId, buttonId, action, isCatalogTegut) {
	var parameters = formId.serialize(true);
	unbindCartReload(formId, buttonId);
	new Ajax.Request(action, {
		parameters : parameters,
		onSuccess : function(transport) {
			if(transport.responseText.isJSON()){
				processAdd2CartResponse(transport.responseText.evalJSON(), isCatalogTegut);
			}
		},
		onLoading : function(transport) {
			if(isCatalogTegut) {
				$('add-to-cart-spinner').show();
			}
		},
		onComplete : function(transport) {
			$('add-to-cart-spinner').hide();
			document.location.href = document.location.href;
		}
	});
	
	return true;
}

function add2CartUpdateCartInfo(formId, buttonId, action, isCatalogTegut) {
	var parameters = formId.serialize(true);
	unbindCartReload(formId, buttonId);
	new Ajax.Request(action, {
		parameters : parameters,
		onSuccess : function(transport) {
			if(transport.responseText.isJSON()){
				processAdd2CartResponse(transport.responseText.evalJSON(), isCatalogTegut);
			}
		},
		onLoading : function(transport) {
			if(isCatalogTegut) {
				$('add-to-cart-spinner').show();
			}
		},
		onComplete : function(transport) {
			if(isCatalogTegut) {
				$('add-to-cart-spinner').hide();
			}
			updateCartInfo();
			bindCartReload(formId, buttonId);
		}
	});
	
	return true;
}

function processAdd2CartResponse(result, isCatalogTegut) {
	switch (result.severity) {
		case 0: 		
			updateCartInfo();
			if(!showMiniCartOnAddToCart && isCatalogTegut) {
				$('add-cart-success').show();
				setTimeout("hideCartBox()",3000);
			}
			clearMessage('add-cart-success-message');
			break;
		case 1: 
			updateCartInfo();
			if(!showMiniCartOnAddToCart && isCatalogTegut) {
				$('add-cart-success').show();
				setTimeout("hideCartBox()",3000);
			}
			showMessage(result.message, result.severity, 'add-cart-success-message');
			break;
		case 2: 
			if(!showMiniCartOnAddToCart && isCatalogTegut) {
				$('add-cart-success').show();
				setTimeout("hideCartBox()",3000);
			}
			showMessage(result.message, result.severity, 'add-cart-success-message');
			break;
	}
}

function updateCartInfo() {
	var cartInfoUrl = "templates_cms/cartNavigationElement.jsf?ignoreScheme=true";

	new Ajax.Request(cartInfoUrl, {
		onSuccess : function(transport) {
			processCartInfoResponse(transport.responseText);
		},
		onComplete : function(transport) {
			processCartInfoResponse(transport.responseText);
		}
	});
}


function processCartInfoResponse(responseText) {
	var miniCart = $('basket-span');
	miniCart.update(responseText);
	var miniCartOpenedId = 'mini-cart-opened';
	if (showMiniCartOnAddToCart) {
		Effect.SlideDown(miniCartOpenedId);
		closeMiniCart.delay(5, miniCartOpenedId);
	} else {
		miniCart.highlight({ startcolor: '#CCCCCC' ,endcolor: '#FFFFFF',  restorecolor: '#FFFFFF'});
	}
}

function closeMiniCart(miniCartOpenedId) {
	if ($(miniCartOpenedId).visible()) {
		Effect.SlideUp(miniCartOpenedId);
	}
}

function unbindCart(formId, buttonAddToCartId) {
	var form = formId;
	if (form){
		form.disable();
		form.stopObserving('submit', addToCart);
	}
	var addToCartBtn = $(buttonAddToCartId);
	addToCartBtn.disable();
	addToCartBtn.stopObserving('click', addToCart);
	addToCartBtn.addClassName('inactive');
}

function unbindCartReload(formId, buttonAddToCartId) {
	var form = formId;
	if (form){
		form.disable();
		form.stopObserving('submit', addToCartWithReload);
	}
	var addToCartBtn = $(buttonAddToCartId);
	addToCartBtn.disable();
	addToCartBtn.stopObserving('click', addToCartWithReload);
	addToCartBtn.addClassName('inactive');
}

function bindCart(formId, buttonAddToCartId) {
	var addToCartBtn = $(buttonAddToCartId);
	addToCartBtn.removeClassName('inactive');
	addToCartBtn.observe('click', addToCart);
	addToCartBtn.enable();
	var form = formId;
	form.observe('submit', addToCart);
	form.enable();
}

function bindCartReload(formId, buttonAddToCartId) {
	var addToCartBtn = $(buttonAddToCartId);
	addToCartBtn.removeClassName('inactive');
	addToCartBtn.observe('click', addToCartWithReload);
	addToCartBtn.enable();
	var form = formId;
	form.observe('submit', addToCartWithReload);
	form.enable();
}

function hideCartBox(){
	var el = $("add-cart-success");
	if (el){
		el.hide();
	}
}

function transferParameters(form1, form2){
	
	var sourceForm = $(form2);
	var targetForm = $(form1);
	if (!sourceForm){
			return true;
	}
	if (!targetForm){
		return true;
	}
	var elements = sourceForm.getElements();
	if (!elements){
		return true;
	}
	for (var i=0; i< elements.length; i++){
		var el = elements[i];
		var id = el.id;
		if(!id){
			continue;
		}
		var target = $("gift_voucher_" + id);
		if(target){
			target.value = el.value;
		}
		
	}
}
