/* global fields */
var MEMO_ARTICLES_MAX_QUANTITY = 20;
var EMAIL_REGEX = /^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.([a-zA-Z]){2,4})$/;
var gMemoController = null;
var gAddArticleToMemoTexts = null;

$(document)
	.ready(initMemoFlashCookie)
	.ready(initAddArticleToMemoTexts);

function initMemoFlashCookie() {
	// init swf object to <div> element with id 'memo-articles-swf-object' (Template: mini_memo.isml)
	swfobject.embedSWF(
		tWebRoot + "/flash/MemoArticles.swf", "memo-articles-swf-object", "1", "1", "9.0.0", false,
		{}, {}, {}, 
		function(pCallback) {
			if (pCallback.success) {
				initMemoController();
			} else {
				$('#memo-articles-quantity-wrapper').html(""); // clear round brackets that wraps the quantity of the memo articles in the metaheader
				$('.memo-thickbox-link').live('click', function() { // metaheader memo link
					tb_show(null, tFlashNotAvailableURL, 'false'); // function 'tb_show' inside thickbox.js, 'tFlashNotAvailableURL' inside metaheader.isml
				});
				$('#price-memo-row a').live('click', function() { // detailview memo link
					tb_show(null, tFlashNotAvailableURL, 'false'); // function 'tb_show' inside thickbox.js, 'tFlashNotAvailableURL' inside metaheader.isml
				});
				$('.left-nav-content').find("a[href*='Template=memo']").each(function() { // add class to the left navigation memo link inside "My Jelmoli"
					$(this).addClass('my_jelmoli_memo_link');
				});
				$('.my_jelmoli_memo_link').each(function() { // add parameter "isFlashNotAvailable=true" to all memo links
					var lMyJelmoliMemoLink = $(this).attr('href');
					lMyJelmoliMemoLink = lMyJelmoliMemoLink.replace("?", "?isFlashNotAvailable=true&");
					$(this).attr('href', lMyJelmoliMemoLink);
				});
			}
		}
	);
}

function initMemoHandling() {
	initMemoArticlesAvailability(); // init KAL
	initDeletePliEventHandler();
	initAcceptPliEventHandler();
	initDeleteAllPliEventHandler();
	initAcceptAllPliEventHandler();
	initProductDetailsEventHandler();
	initMemoEventHandler();
	initLinkArrows(); // function 'initLinkArrows' inside basics.js
	
	gMemoController.isInit = true;
}

function initMemoController() {
	gMemoController = new MemoController();
	gMemoController.init();
}

function MemoController() {
	this.loggedIn = false;
	this.isInit = false;
	this.articles = new Array();
	
	this.init = function() {
		if ("true" == tLoggedIn) { // 'tLoggedIn' inside mini_user.isml
			this.loggedIn = true;
			if (typeof(tMemoProfileArticles) != "undefined" && tMemoProfileArticles.length > 0) { // 'tMemoProfileArticles' inside mini_user.isml 
				this.updateMemoArticles(tMemoProfileArticles);
			} else {
				this.getMemoArticlesByExternalInterface();
			}
		} else {
			this.getMemoArticlesByExternalInterface();
		}
		this.initMemoThickboxLink();
	}
	
	this.articleToMemoEventHandler = function(pArticle) {
		if (MEMO_ARTICLES_MAX_QUANTITY == this.articles.length) {
			return gAddArticleToMemoTexts.maxLength;
		} else if (this.articleAlreadyExists(pArticle)) {
			return gAddArticleToMemoTexts.exists;
		} else {
			this.updateMemoArticles(pArticle);
			return gAddArticleToMemoTexts.added;
		}
	}
	
	this.addArticleToMemo = function(pArticle) {
		this.articles.push(pArticle);
	}
	
	this.addArticlesToMemo = function(pArticles) {
		for (var i = 0; i < pArticles.length; i++) {
			this.addArticleToMemo(pArticles[i]);
		}
	}
	
	this.updateMemoArticles = function(pParam) {
		this.updateMemoArticlesByExternalInterface(pParam);
	}
	
	this.initMemoThickboxLink = function() {
		$('.memo-thickbox-link').live('click', function() {
			// if already another thickbox is shown, close it
			if ($('#TB_window').length > 0) {
				$('#TB_overlay').remove();
				$('#TB_window').remove();
			}
			var lMemoArticlesLayerURL = getMemoArticlesLayerURL();
			tb_show(null, lMemoArticlesLayerURL, 'false'); // function 'tb_show' inside thickbox.js
		});
	}
	
	this.updateDOM = function() {
		var lArticlesQuantity = (this.articles != null) ? this.articles.length : 0;
		$('#memo-articles-quantity').html(lArticlesQuantity);
	}
	
	this.articleAlreadyExists = function(pArticle) {
		for (var i = 0; i < this.articles.length; i++) {
			// check if article is already in this memo controller articles array
			// this check is promo independent
			if (this.articles[i].productRef.substr(0, 6) == pArticle.productRef.substr(0, 6) && this.articles[i].size == pArticle.size) {
				return true;
			}
		}
		return false;
	}
	
	this.updateMemoArticlesByExternalInterface = function(pParam) {
		// if method parameter is not an array - build an array
		if ("undefined" == typeof(pParam.length)) {
			pParam = new Array(pParam);
		}
		$('#memo-articles-swf-object')
			.externalInterface({
		        method: 'updateMemoArticles',
		        args: [pParam],
		        success: function(pProductLineItemArray) {
//					alert("success: " + pProductLineItemArray.length);
					updateMemoProfileAndController(pProductLineItemArray);
		        },
		        error: function(pError) {
//			        alert("error: " + pError);
		        }
		    });
	}
	
	this.getMemoArticlesByExternalInterface = function() {
		$('#memo-articles-swf-object')
			.externalInterface({
		        method: 'getMemoArticles',
//		        args: [],
		        success: function(pProductLineItemArray) {
//					alert("success: " + pProductLineItemArray);
					if (pProductLineItemArray != null && pProductLineItemArray.length > 0) {
						gMemoController.addArticlesToMemo(pProductLineItemArray);
					}
					gMemoController.updateDOM();
		        },
		        error: function(pError) {
//		        	alert("error: " + pError);
		        }
		    });
	}
	
	/* Generates a KAL request string */
	this.toKalRequest = function() {
		var requestString = '<?xml version="1.0" encoding="utf-8"?>';
		requestString += '<tns:KALAvailabilityRequest xmlns:tns="http://www.heine.de/KAL" ';
		requestString += 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ';
		requestString += 'xsi:schemaLocation="http://www.heine.de/KAL http://www.heine.de/KAL/KALAvailabilityRequestSchema.xsd">';
		requestString += "<Articles>";
		
		// iterate over memo articles
		for (var i in this.articles) {
			var lArticleSKU = this.articles[i].productRef.split("@")[0];
			var lArticleNo = lArticleSKU.split("-")[0];
			var lArticleSize = lArticleSKU.split("-")[1];
			var lArticlePromo = this.articles[i].articleNo.substr(6);
			var lArticleCompany = "0";
			
			requestString += "<Article>";
			requestString += "<CompleteCatalogItemNo>" + lArticleNo + "</CompleteCatalogItemNo>";
			requestString += "<SizeAlphaText>" + lArticleSize + "</SizeAlphaText>";
			requestString += "<Std_Promotion>" + lArticlePromo + "</Std_Promotion>";
			requestString += "<CustomerCompanyID>" + lArticleCompany + "</CustomerCompanyID>";
			requestString += "</Article>";
		}
		
		requestString += "</Articles></tns:KALAvailabilityRequest>";
		return requestString;
	}
}

function getMemoArticlesLayerURL() {
	var lMemoArticlesLayerURL = tMemoArticlesLayerURL; // 'tMemoArticlesLayerURL' inside header_subs/mini_memo.isml
	if (gMemoController.articles != null && gMemoController.articles.length > 0) {
		var lPliParams  = "&" + getProductLineItemsAsParams();
		lMemoArticlesLayerURL += lPliParams;
	}
	return lMemoArticlesLayerURL;
}

function getProductLineItemsAsParams() {
	var lPliParams = "pliCount=" + gMemoController.articles.length;
	for (var i in gMemoController.articles) {
		var lTmpPli = gMemoController.articles[i];
		lPliParams += "&pli_" + i + "_productRef=" + escape(lTmpPli.productRef);
		lPliParams += "&pli_" + i + "_imageUrl=" + escape(lTmpPli.imageUrl);
		lPliParams += "&pli_" + i + "_name=" + escape(lTmpPli.name);
		lPliParams += "&pli_" + i + "_articleNo=" + escape(lTmpPli.articleNo);
		lPliParams += "&pli_" + i + "_color=" + escape(lTmpPli.color);
		lPliParams += "&pli_" + i + "_dim3=" + escape(lTmpPli.dim3);
		lPliParams += "&pli_" + i + "_size=" + escape(lTmpPli.size);
		lPliParams += "&pli_" + i + "_quantity=" + escape(lTmpPli.quantity);
		lPliParams += "&pli_" + i + "_totalPrice=" + escape(lTmpPli.totalPrice);
	}
	return lPliParams;
}

function updateMemoProfileAndController(pProductLineItemArray) {
	gMemoController.articles = new Array(); // reset memo controller articles
	if (pProductLineItemArray != null && pProductLineItemArray.length > 0) {
		gMemoController.articles = pProductLineItemArray;
		if (gMemoController.loggedIn) {
			var lMemoProfileArticlesSaveURL = tMemoProfileArticlesSaveURL; // 'tMemoProfileArticlesSaveURL' inside mini_memo.isml
			var lTmpArticleSKU = pProductLineItemArray[0].productRef.split("@")[0];
			lMemoProfileArticlesSaveURL += "?sku=" + lTmpArticleSKU;
			for (var i = 1; i < pProductLineItemArray.length; i++) {
				lTmpArticleSKU = pProductLineItemArray[i].productRef.split("@")[0];
				lMemoProfileArticlesSaveURL += escape(",") + lTmpArticleSKU;
			}
			$.get(lMemoProfileArticlesSaveURL); // update memo articles of current profile
		}
	} else {
		if (gMemoController.loggedIn) {
			var lMemoProfileArticlesDeleteURL = tMemoProfileArticlesSaveURL + "?sku="; // 'tMemoProfileArticlesSaveURL' inside mini_memo.isml
			// delete memo articles of current profile
			$.get(lMemoProfileArticlesDeleteURL); 
		}
	}
	gMemoController.updateDOM();
	
	if ((typeof(tLayer) != "undefined") && ("false" == tLayer) && (!gMemoController.isInit)) { // 'tLayer' inside memo.isml
		initMemoHandling();
	}
}

function updateDOM_pliCount() {
	$('#pliCount').text($('.pli-info').length);
}

function updateDOM_noArticlesText() {
	var l$EmptyText = $('#memo-no-articles-text');
	l$EmptyText = l$EmptyText.removeClass('none');
	$('#memo-button-to-open-login-layer').hide();
	$('#memo-button-to-send-to-friends').hide();
	$('#memo-site-body').html(l$EmptyText);
	initLinkArrows(); // function 'initLinkArrows' inside basics.js
}

function initMemoArticlesAvailability() {
	if (gMemoController.articles != null && gMemoController.articles.length > 0) {
		var lKalRequestURL = window.location.protocol + '//' + window.location.host + '/KAL/AvailabilityServlet';
		var lKalRequestParams = gMemoController.toKalRequest();
		
		$.ajax({
			type: "POST",
			async: false,
			url: lKalRequestURL,
	    	data: lKalRequestParams,
	    	processData: false,
	        dataType: "xml",
	        timeout: 2000,
	        contentType: "application/xml; charset=UTF-8",
	        success: function(pAjaxKalResponse) {
				handleAjaxKalResponse(pAjaxKalResponse);
			}
	    });
	}
}

function initDeletePliEventHandler() {
	$('div.delete-pli').click(function() {
		var lPliProductRef = $(this).attr('id');
		var lPliSku = lPliProductRef.split("@")[0];
		$('#memo-articles-swf-object')
        	.externalInterface({
                method: 'deletePliFromMemoArticles',
                args: [lPliProductRef],
                success: function (pProductLineItemArray) {
//        			alert("success: " + pProductLineItemArray);
        			updateMemoProfileAndController(pProductLineItemArray);
        			if (pProductLineItemArray != null && pProductLineItemArray.length > 0) {
            			// update DOM
            			$('#pli-table-container-memo tr.' + lPliSku).remove(); // kill pli row from table
            			updateDOM_pliCount();
        			} else if ((pProductLineItemArray != null) && (0 == pProductLineItemArray.length)) {
        				updateDOM_noArticlesText();
        			}
                },
                error: function(pError) {
//                	alert('there was an error: ' + pError);
                }
        	});
		setLandmark("page","&pc=MZ_delete_einzeln");
	});
}

function initAcceptPliEventHandler() {
	$('div.accept-pli').click(function() {
		var l$Pli = $(this);
		var lDivIdSplit = l$Pli.attr('id').split("||");
		if (lDivIdSplit.length >= 2) {
			var lPliProductRef = lDivIdSplit[0];
			var lPliQuantity = lDivIdSplit[1];
			$('td.pli-events div.accept-pli').hide();
			$('td.pli-events div.delete-pli').hide();
			var l$AjaxLoader = l$Pli.prev('div.ajax-loader');
			l$AjaxLoader.show();
			$('#header-basket-mini-view').html($('#header-basket-mini-view-loader-wrapper').html()); // show ajax loader
			
			$('#memo-articles-swf-object')
	        	.externalInterface({
	                method: 'deletePliFromMemoArticles',
	                args: [lPliProductRef],
	                success: function (pProductLineItemArray) {
//	        			alert("success: " + pProductLineItemArray);
	        			updateMemoProfileAndController(pProductLineItemArray);
	        			if (pProductLineItemArray != null) {
	        				// update basket with selected article style/variation
	        				var lAddToBasketAjaxURL = tAddSingleToBasketURL + "?ProductRefID=" + lPliProductRef + "&Quantity=" + lPliQuantity; // 'tAddSingleToBasketURL' inside memo.isml
	        				$.get(lAddToBasketAjaxURL, function() {
	        					// when basket update complete, refresh the header basket mini view
	        					$.get(tHeaderBasketMiniViewURL, function(pAjaxResponseData) { // 'tHeaderBasketMiniViewURL' inside memo.isml
	        						$('#header-basket-mini-view').html(pAjaxResponseData);
	        						// when header basket mini view is updated, update memo DOM
	        						l$Pli.prev().remove(); // remove 'div' element with ajax loader
	        						l$Pli.next().remove(); // remove 'div' element with delete button
	        						l$Pli.next().show(); // show message that this pli is in basket
	        						l$Pli.parents('tr').prev().prev('tr.none').remove(); // remove 'tr' element represents this pli information
	        						l$Pli.remove(); // remove self 'div' element
	        						$('td.pli-events div.accept-pli').show();
	        						$('td.pli-events div.delete-pli').show();
	        						updateDOM_pliCount();
	        					});
	        				});
	        			}
	                },
	                error: function(pError) {
//	                	alert('there was an error: ' + pError);
	                }
        	});
		}
		setLandmark("page","&pc=MZ_WK_einzeln");
	});
}

function initDeleteAllPliEventHandler() {
	$('#delete-all').click(function() {
        $('#memo-articles-swf-object')
    		.externalInterface({
	            method: 'killMemoArticles',
	            success: function(pData) {
//	                alert('success! flash returned: ' + pData);
    				updateMemoProfileAndController(null);
    				updateDOM_noArticlesText();
	            },
	            error: function(pError) {
//	                alert('there was an error: ' + pError);
	            }
	    	});
        setLandmark("page","&pc=MZ_delete_all");
	});
}

function initAcceptAllPliEventHandler() {
	$('#accept-all').click(function() {
		var lPliCount = $('#pliCount').html();
		if (lPliCount > 0) {
			$('#memo-articles-swf-object')
	    		.externalInterface({
		            method: 'killMemoArticles',
		            success: function (pData) {
//		                alert('success! flash returned: ' + pData);
	    				// start: load all pli information from DOM and update the basket
		    			var lAddToBasketURLParams = "&li_count=" + lPliCount;
		    			$('.pli-info').each(function() {
		    				lAddToBasketURLParams += "&" + $(this).attr('id');
		    			});
		    			var lAddToBasketAjaxURL = tAddMultiToBasketURL + lAddToBasketURLParams; // 'tAddMultiToBasketURL' inside memo.isml
		    			$('#header-basket-mini-view').html($('#header-basket-mini-view-loader-wrapper').html()); // show ajax loader
		    			$.get(lAddToBasketAjaxURL, function() {
		    				$.get(tHeaderBasketMiniViewURL, function(pAjaxResponseData) { // 'tHeaderBasketMiniViewURL' inside memo.isml
		    					$('#header-basket-mini-view').html(pAjaxResponseData);
		    				});
		    			});
		    			// end: load all pli information from DOM and update the basket
	    				updateMemoProfileAndController(null);
	    				updateDOM_noArticlesText();
		            },
		            error: function(pError) {
//		                alert('there was an error: ' + pError);
		            }
		    	});
		} else {
			updateDOM_noArticlesText();
		}
		setLandmark("page","&pc=MZ_WK_all");
	});
}

function initProductDetailsEventHandler() {
	$('.product-details-td > a').live('click', function() {
		setLandmark("page","&pc=MZ_Produktdetails");
	});
}

function getMemoLoginInputValidation(pEmailValue, pPasswordValue) {
	pEmailValue = $.trim(pEmailValue);
	pPasswordValue = $.trim(pPasswordValue);
	
	if (pEmailValue.length < 6 || pEmailValue.search(EMAIL_REGEX) < 0) {
		return "invalidEMail";
	}
	if (pPasswordValue.length < 6) {
		return "invalidPassword";
	}
	return "valid";
}

function getSendMemoToFriendsInputValidation(pMyName, pFriendsEmailValue1, pFriendsEmailValue2, pFriendsEmailValue3, pMyEmailValue) {
	pMyName = $.trim(pMyName);
	pFriendsEmailValue1 = $.trim(pFriendsEmailValue1);
	pFriendsEmailValue2 = $.trim(pFriendsEmailValue2);
	pFriendsEmailValue3 = $.trim(pFriendsEmailValue3);
	pMyEmailValue = $.trim(pMyEmailValue);
	
	if (0 == pMyName.length) {
		return "invalidName";
	}
	if (0 == pFriendsEmailValue1.length && 0 == pFriendsEmailValue2.length && 0 == pFriendsEmailValue3.length) {
		return "invalidFriendsEmail";
	}
	if (pFriendsEmailValue1.length > 0 && (pFriendsEmailValue1.length < 6 || pFriendsEmailValue1.search(EMAIL_REGEX) < 0)) { // if friends email 1 is set and invalid
		return "invalidFriendsEmail_1";
	}
	if (pFriendsEmailValue2.length > 0 && (pFriendsEmailValue2.length < 6 || pFriendsEmailValue2.search(EMAIL_REGEX) < 0)) { // if friends email 2 is set and invalid
		return "invalidFriendsEmail_2";
	}
	if (pFriendsEmailValue3.length > 0 && (pFriendsEmailValue3.length < 6 || pFriendsEmailValue3.search(EMAIL_REGEX) < 0)) { // if friends email 3 is set and invalid
		return "invalidFriendsEmail_3";
	}
	if (pMyEmailValue.length < 6 || pMyEmailValue.search(EMAIL_REGEX) < 0) {
		return "invalidMyEMail";
	}
	
	return "valid";
}

function initMemoEventHandler() {
	$('#memo-button-to-login').click(function() {
		// reset error handling
		$('#memo-login-layer-error-text').text("").hide();
		$('#memo-login-layer-form').find('.error-border').removeClass('error-border');
		
		var l$EmailINPUT = $('#memo-login-layer-email');
		var l$PasswordINPUT = $('#memo-login-layer-password');
		var lValidationResult = getMemoLoginInputValidation(l$EmailINPUT.val(), l$PasswordINPUT.val());
		switch (lValidationResult) {
			case "valid": 
				var lLoginParams = "&Email=" + l$EmailINPUT.val() + "&EPassword=" + l$PasswordINPUT.val();
				var lMyAccountLoginAjaxURL = tMyAccountLoginURL + lLoginParams; // 'tMyAccountLoginURL' inside memo.isml
				
				// hide memo login layer
				$('#memo-login-layer').slideUp('slow', function() {
					// when slide up animation complete
					$('#memo-site-body').hide(); // hide memo content
					$('#memo-site-ajax-loader').show(); // show memo ajax loader
					
					$.get(lMyAccountLoginAjaxURL, function(pAjaxHTMLResponse) {
						if (pAjaxHTMLResponse.indexOf('welcome.isml') != -1) { // login successful
							gMemoController.loggedIn = true;
							
							var lMemoProfileArticlesStartPos = pAjaxHTMLResponse.indexOf('tMemoProfileArticles');
							var lMemoProfileArticlesEndPos = pAjaxHTMLResponse.indexOf('];', lMemoProfileArticlesStartPos) + 2; // '+ 2' because the string ends at '];'
							var lMemoProfileArticles = eval(pAjaxHTMLResponse.substring(lMemoProfileArticlesStartPos, lMemoProfileArticlesEndPos));	
			
							gMemoController.updateMemoArticles(lMemoProfileArticles);
							var lMemoArticlesLayerURL = getMemoArticlesLayerURL();
							// update thickbox content with memo articles
							$('#TB_ajaxContent').load(lMemoArticlesLayerURL);
							
							// update meta header login content
							$('#header-content-mini-view').load(tMetaHeaderAccountMiniViewURL); // 'tMetaHeaderAccountMiniViewURL' inside memo.isml
						
						} else { // login not successful (response template: 'my_jelmoli_subs/formular_login.isml' contains the error message)
							var lAjaxResponseErrorText = $(pAjaxHTMLResponse).find('div.error-msg').text();
							$('#memo-site-ajax-loader').hide(); // hide memo ajax loader
							$('#memo-site-body').show(); // hide memo content
							$('#memo-login-layer-error-text').text(lAjaxResponseErrorText).show(); // show error text
							// show memo login layer
							$('#memo-login-layer').slideDown('slow');
						}
					
					}).error(function(pError) {
//						alert("Error: " + pError)
					});
				});
				break;
				
			case "invalidEMail":
				l$EmailINPUT.addClass('error-border');
				var lErrorText = ("fr_CH" == tCurrentLocaleID) 
					? "Veuillez indiquer votre adresse e-mail valide." 
					: "Bitte geben Sie Ihre gültige E-Mail-Adresse ein.";
				$('#memo-login-layer-error-text').text(lErrorText).show();
				break;
				
			case "invalidPassword":
				l$PasswordINPUT.addClass('error-border');
				var lErrorText = ("fr_CH" == tCurrentLocaleID) 
					? "[fr_CH] Bitte vervollständigen Sie Ihre Eingaben!" 
					: "Bitte vervollständigen Sie Ihre Eingaben!";
				$('#memo-login-layer-error-text').text(lErrorText).show();
				break;
				
		}
	});
	
	$('#memo-button-to-send-memo').click(function() {
		var l$MemoFriendsLayerForm = $('#memo-friends-layer-form');
		// reset error handling
		$('#memo-friends-layer-error-text').text("").hide();
		l$MemoFriendsLayerForm.find('.error-border').removeClass('error-border');
		
		var l$MyNameINPUT = $('#memo-friends-layer-my-name');
		var l$FriendsEmail1INPUT = $('#memo-friends-layer-friends-email-1');
		var l$FriendsEmail2INPUT = $('#memo-friends-layer-friends-email-2');
		var l$FriendsEmail3INPUT = $('#memo-friends-layer-friends-email-3');
		var l$MyEmailINPUT = $('#memo-friends-layer-my-email');
		var lValidationResult = getSendMemoToFriendsInputValidation(l$MyNameINPUT.val(), l$FriendsEmail1INPUT.val(), l$FriendsEmail2INPUT.val(), l$FriendsEmail3INPUT.val(), l$MyEmailINPUT.val());
		switch (lValidationResult) {
			case "valid":
				// update form action URL with current product line items
				var lFormActionURL = l$MemoFriendsLayerForm.attr('action');
				l$MemoFriendsLayerForm.attr('action', lFormActionURL + "?" + getProductLineItemsAsParams());
				
				l$MemoFriendsLayerForm.find('input.memo-friends-email').each(function(pIndex) {
					var l$Self = $(this);
					if ($.trim(l$Self.val()).length > 0) { // check if a friend email is set in this input field
						l$Self.attr('name', 'MailTo'); // add parameter 'name' to this input field before ajax request
						l$MemoFriendsLayerForm.ajaxSubmit(); // 'ajaxSubmit' inside jquery.form.js
						l$Self.attr('name', ''); // reset parameter 'name' to this input field after ajax request
					}
				});
				l$MemoFriendsLayerForm.attr('action', lFormActionURL); // restore form action URL
				
				// fire landmark for each used e-mail field
				if ($.trim(l$FriendsEmail1INPUT.val()).length > 0) {
					setLandmark("page", "&pc=MZ_Email_1");
				}
				if ($.trim(l$FriendsEmail2INPUT.val()).length > 0) {
					setLandmark("page", "&pc=MZ_Email_2");
				}
				if ($.trim(l$FriendsEmail3INPUT.val()).length > 0) {
					setLandmark("page", "&pc=MZ_Email_3");
				}
				// fire landmark for this send button
				setLandmark("page", "&pc=MZ_Freunde_send");
				
				// hide memo friends layer
				$('#memo-friends-layer').slideUp('slow', function() {
					// when slide up animation complete
					var lButtonText = ("fr_CH" == tCurrentLocaleID)
						? "Votre mémo a été transmis" 
						: "Ihr Merkzettel wurde versandt";		
					$('#memo-button-to-open-friends-layer-text').text(lButtonText);
					
					var lMyEmail = "";
					if (gMemoController.loggedIn) {
						lMyEmail = $('#memo-friends-layer-my-email').val();
					}
					l$MemoFriendsLayerForm.find('input').attr('value', ''); // reset form input fields
					$('#memo-friends-layer-my-email').val(lMyEmail); // restore my email after resetting form input fields
					l$MemoFriendsLayerForm.find('textarea').attr('value', ''); // reset form textarea
				});
				break;
				
			case "invalidName":
				l$MyNameINPUT.addClass('error-border');
				var lErrorText = ("fr_CH" == tCurrentLocaleID)
					? "Veuillez saisir votre nom." 
					: "Bitte geben Sie Ihren Namen ein.";
				$('#memo-friends-layer-error-text').text(lErrorText).show();
				break;
				
			case "invalidFriendsEmail":
				l$FriendsEmail1INPUT.addClass('error-border');
				var lErrorText = ("fr_CH" == tCurrentLocaleID)
					? "Veuillez indiquer une adresse e-mail valide pour vos amis." 
					: "Bitte geben Sie eine gültige E-Mail-Adresse für Ihre Freunde ein.";
				$('#memo-friends-layer-error-text').text(lErrorText).show();
				break;
				
			case "invalidFriendsEmail_1":
				l$FriendsEmail1INPUT.addClass('error-border');
				var lErrorText = ("fr_CH" == tCurrentLocaleID)
					? "Veuillez indiquer une adresse e-mail valide pour vos amis." 
					: "Bitte geben Sie eine gültige E-Mail-Adresse für Ihre Freunde ein.";
				$('#memo-friends-layer-error-text').text(lErrorText).show();
				break;
				
			case "invalidFriendsEmail_2":
				l$FriendsEmail2INPUT.addClass('error-border');
				var lErrorText = ("fr_CH" == tCurrentLocaleID)
					? "Veuillez indiquer une adresse e-mail valide pour vos amis." 
					: "Bitte geben Sie eine gültige E-Mail-Adresse für Ihre Freunde ein.";
				$('#memo-friends-layer-error-text').text(lErrorText).show();
				break;
				
			case "invalidFriendsEmail_3":
				l$FriendsEmail3INPUT.addClass('error-border');
				var lErrorText = ("fr_CH" == tCurrentLocaleID)
					? "Veuillez indiquer une adresse e-mail valide pour vos amis." 
					: "Bitte geben Sie eine gültige E-Mail-Adresse für Ihre Freunde ein.";
				$('#memo-friends-layer-error-text').text(lErrorText).show();
				break;
				
			case "invalidMyEMail":
				l$MyEmailINPUT.addClass('error-border');
				var lErrorText = ("fr_CH" == tCurrentLocaleID)
					? "Veuillez indiquer votre adresse e-mail valide." 
					: "Bitte geben Sie Ihre gültige E-Mail-Adresse ein.";
				$('#memo-friends-layer-error-text').text(lErrorText).show();
				break;
				
		}
	});
	
	$('#memo-no-articles-back-button').live('click', function() {
		tb_remove();
	});
	
	// show and hide memo login layer
	$('#memo-button-to-open-login-layer').click(function() {
		$('#memo-login-layer').slideDown('slow');
		setLandmark("page","&pc=MZ_save");
	});
	$('#memo-login-layer-headline').click(function() {
		$('#memo-login-layer').slideUp('slow');
	});
	
	// show and hide memo send to friends layer
	$('#memo-button-to-open-friends-layer').click(function() {
		$('#memo-friends-layer').slideDown('slow');
		setLandmark("page","&pc=MZ_Freunde");
	});
	$('#memo-friends-layer-headline').click(function() {
		$('#memo-friends-layer').slideUp('slow');
	});

}

function handleAjaxKalResponse(pAjaxKalResponse) {
	$(pAjaxKalResponse).find('Article')
		.each(function() {
			var l$KalArticle = $(this);
			var lKalArticleNo = l$KalArticle.find('CompleteCatalogItemNo').first().text();
			var lKalArticleSize = l$KalArticle.find('SizeAlphaText').first().text();
			var lKalDeliveryDesignation = l$KalArticle.find('DeliveryDesignation').first().text();
			lKalDeliveryDesignation = parseInt(lKalDeliveryDesignation);
			var lKalDeliveryStatement = l$KalArticle.find('DeliveryStatement').first().text();
			lKalDeliveryStatement = parseInt(lKalDeliveryStatement);
							
			// update DOM with pli availability
			for (var i in gMemoController.articles) {
				var lTempPli = gMemoController.articles[i];
				var lTempPliSKU = lTempPli.productRef.split("@")[0];
				var lTempPliArticleNo = lTempPliSKU.split("-")[0];
				var lTempPliSize = lTempPliSKU.split("-")[1];
				if ((lTempPliArticleNo == lKalArticleNo) && (lTempPliSize == lKalArticleSize)) {
					switch (lKalDeliveryDesignation) {
						case 0:
							var lAvailabilityStatement = char2Swiss(entity2char(availability.slbMessage)); // availability object inside 'availability.js'
							$('#pli-availability-' + lTempPliSKU).addClass('slb-message').text(lAvailabilityStatement);
							break;
						case 1:
							var lAvailabilityStatement = char2Swiss(entity2char(availability.niliMessage)); // availability object inside 'availability.js'
							$('#pli-availability-' + lTempPliSKU).addClass('availability').text(lAvailabilityStatement);
							break;
						case 2:
							var lAvailabilityStatement = char2Swiss(entity2char(availability.naliMessage[lKalDeliveryStatement])); // availability object inside 'availability.js'
							// zu behandeln wie ausverkauft: An das Datenobjekt 2/103 wird 1/0 geschrieben
							if (2 == lKalDeliveryDesignation && 103 == lKalDeliveryStatement) {
								lAvailabilityStatement = char2Swiss(entity2char(availability.niliMessage)); // availability object inside 'availability.js'
							}
							$('#pli-availability-' + lTempPliSKU).addClass('availability').text(lAvailabilityStatement);
							break;
					}
				}
			}
		});
}

function initAddArticleToMemoTexts() {
	if ("fr_CH" == tCurrentLocaleID) {
		gAddArticleToMemoTexts = {
				added: "Cet article a été ajouté au <a class='memo-thickbox-link' href='#'>mémo</a>.", // 'memo-thickbox-link' inside mini_memo.isml
				exists: "Cet article figure déjŕ sur votre <a class='memo-thickbox-link' href='#'>mémo</a>.",
				maxLength: "Votre <a class='memo-thickbox-link' href='#'>mémo</a> a atteint le nombre maximal de " + MEMO_ARTICLES_MAX_QUANTITY + " articles."
			}
	} else {
		gAddArticleToMemoTexts = {
				added: "Der Artikel wurde auf Ihren <a class='memo-thickbox-link' href='#'>Merkzettel</a> gelegt.", // 'memo-thickbox-link' inside mini_memo.isml
				exists: "Dieser Artikel ist bereits auf Ihrem <a class='memo-thickbox-link' href='#'>Merkzettel</a>.",
				maxLength: "Es sind bereits " + MEMO_ARTICLES_MAX_QUANTITY + " Artikel auf Ihrem <a class='memo-thickbox-link' href='#'>Merkzettel</a>."
			}
	}
}
