function addUrlParamPair(queryString, paramPair) {
	return queryString ? (queryString + "&" + paramPair) : paramPair;
}

function setCookie(cookieName, cookieValue) {
	document.cookie = cookieName + "=" + escape(cookieValue) + "; path=/";
}

var dQuotePattern = /\"/g;
function getCookie(cookieName) {
	var c = document.cookie;
	var nameStart = c.indexOf(cookieName + "=");
	if (nameStart == -1) return undefined;
	var separatorPos = c.indexOf(";", nameStart);
	if (separatorPos == -1) separatorPos = c.length;
	var cStr = c.substring(nameStart, separatorPos);
	cStr = cStr.substring(cStr.indexOf("=") + 1, cStr.length);
	cStr = unescape(cStr);
	cStr = cStr.replace(dQuotePattern, "");
	return cStr;
}

function getXmlData(oXmlDoc) {
	if (!oXmlDoc || !oXmlDoc.childNodes) return false;
	var rootNode = false;
	for (var i = 0; i < oXmlDoc.childNodes.length; i++) {
		if (oXmlDoc.childNodes.item(i).nodeName == "data") rootNode = oXmlDoc.childNodes.item(i);
	}
	if (!rootNode || !rootNode.childNodes) {
		return false;
	}
	return rootNode.childNodes;
}

function checkAmount(lowerLimit)
{
        var amount = document.getElementById("amountForAvailabilityCheck").value;
        if (amount < lowerLimit)
        {
         alert("Minimum amount to order is " + lowerLimit);
         return false;
        }
        return true;
}

function getProductsAmount(url, onSuccessHandler, onErrorHandler, requestBody) {
	var xmlHttp = XmlHttp.create();
	xmlHttp.open("POST", url, false); // async
	xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xmlHttp.send(requestBody ? requestBody : "");
	if (xmlHttp.readyState == 4) {
		var oXmlDoc = xmlHttp.responseXML;
		if(!oXmlDoc || (oXmlDoc.parserError && oXmlDoc.parseError.errorCode != 0) || !oXmlDoc.documentElement) {
			var error;
			if (!oXmlDoc || oXmlDoc.parseError.errorCode == 0) {
 				error = "An error has occurred while loading data.\n\nResource URL: " + url + "\nStatus: " + xmlHttp.status + ", " + xmlHttp.statusText + "\n\nData:\n" + xmlHttp.responseText;
			} else {
				error = "An error has occurred while parsing data.\n\nResource URL: " + url + "\nReason: " + oXmlDoc.parseError.reason + "\nSource: " + oXmlDoc.parseError.srcText + "\nError code: " + oXmlDoc.parseError.errorCode + "\n\nData:\n" + oXmlDoc.responseText;
			}
			if (onErrorHandler) {
				onErrorHandler(url, error);
			}
			return;
		}
		onSuccessHandler(oXmlDoc);
	}
}

var onAmountSuccess = function(oXmlDoc) {
	try {
		if (!oXmlDoc || !oXmlDoc.childNodes) return;
	} catch (e) {
		throw e;
	}
	var node = getListNode(oXmlDoc, "items");
	var amount = node.getAttribute("amount");
	el = document.getElementById("cartProductsAmount");
	el.innerHTML = 'Total "${number}" products.'.replace(/\$\{number\}/g, amount);
}

function itemToAdd (quantity, comment) {
	  this.quantity = quantity;
	  this.comment = comment;
}	

function getPropertiesCount (obj) {
	var i = 0;
	for (property in obj) i++;
	return i;
}

function arrayContains(arr, value) {
	for (var arrValue in arr) if (arrValue == value) return true;
	return false;
}

function updatePrices(artNumbers, quantities) {
	if(row = document.getElementById('totalMyPriceContainer')) row.style.display = 'block';
	if(el = document.getElementById('shoppingCart')) {
		var els = document.getElementsByTagName('STRONG');
		for(var i = 0; i < els.length; i++) {
			var theEl = els[i];
			if(theEl.id.search(/myprice/i) != -1) theEl.innerHTML = '<img src="/export/system/modules/com.gridnine.opencms.modules.ms/resources/pics/ani-busy.gif" class="wait">';
		}
	}
	var requestBody = false;
	requestBody = "";
	for (i=0; i < artNumbers.length; i++)
	{
	 requestBody = addUrlParamPair(requestBody, "artNumbers=" + artNumbers[i]);
	} 
	for (i=0; i < artNumbers.length; i++)
	{
	 requestBody = addUrlParamPair(requestBody, "quantities=" + quantities[i]);
	} 
    
    var onUpdatePriceSuccess = function(oXmlDoc) 
    {
	 
	 try 
	 {
	  if (!oXmlDoc || !oXmlDoc.childNodes) return;
	  var rootNode = false;
	  for (var i = 0; i < oXmlDoc.childNodes.length; i++) 
	  {
	   if (oXmlDoc.childNodes.item(i).nodeName == "data") rootNode = oXmlDoc.childNodes.item(i);
	  }
	  if (!rootNode || !rootNode.childNodes) 
	  {
	   return;
	  }
	  var rootAttrs = rootNode.attributes;
	  var orderItems = rootNode.childNodes;
	  var total = 0;
	  //var listTotal = 0;
	  //var isListTotal = true;
	  var isTotal = true;
	  for (var i = 0; i < orderItems.length; i++) 
	  {
	   var item = orderItems.item(i);
	   if (item.nodeName == "item") 
	   {
		var attrs = item.attributes;
		try
		{
			var mpEl = document.getElementById("myprice_" + attrs.getNamedItem("artnr").nodeValue);
			if(mpEl) mpEl.innerHTML = attrs.getNamedItem("myprice").nodeValue;
			
			var mpStEl = document.getElementById("mypricesubtotal_" + attrs.getNamedItem("artnr").nodeValue);
			if(mpStEl) mpStEl.innerHTML = attrs.getNamedItem("mypricesubtotal").nodeValue;
			
			//var lpEl = document.getElementById("listprice_" + attrs.getNamedItem("artnr").nodeValue); 
	 		//if(lpEl) lpEl.innerHTML = attrs.getNamedItem("listprice").nodeValue;
	 	} catch(e){}
	   }
	  }
	  var mpTotalEl = document.getElementById("totalMyPrice");
      if (mpTotalEl) mpTotalEl.innerHTML = rootAttrs.getNamedItem("mypricetotal").nodeValue;	
      
      //var lpTotalEl = document.getElementById("totalListPrice");
      //if (lpTotalEl) lpTotalEl.innerHTML = rootAttrs.getNamedItem("listpricetotal").nodeValue;	
	} 
	catch (e) 
	{
	 throw e;
 	} 
    };
	
	doXmlRequest(
		'/system/modules/com.gridnine.opencms.modules.ms/pages/price_availability.jsp?locale=en',
		onUpdatePriceSuccess,
		null,
		//onShoppingCartUpdateStart,
		function(e) {alert(e);},
		requestBody
	);
}


// Function to check availability of product with article number

function checkAvailabilityForOneItem(formName, numberInForm){
	
	document.getElementById("result").innerHTML = '&nbsp;';
	
	i = numberInForm;
	artNum = document.forms[formName].elements['article'+numberInForm].value;
	quantity = document.forms[formName].elements['quantity'+numberInForm].value;

	var regex = new RegExp(/^\d+[.|,]?\d*$/i);
	var correct = quantity.match(regex);
	
	if (correct != null && correct > 0) {
		if (quantity > 6999) {
			document.getElementById("result").innerHTML = '<div class="red">Enter quantity from 1 to 6999!</div>';
			document.forms[formName].elements["quantity" + numberInForm].style.color = '#ee0000';
			document.forms[formName].elements["quantity" + numberInForm].focus();		
		} else{
			checkAvailabilityForOneItemInner(formName, numberInForm, artNum, quantity);	
		}
	} else {
		document.getElementById("result").innerHTML = '<div class="red">Enter quantity from 1 to 6999!</div>';
		document.forms[formName].elements["quantity" + numberInForm].style.color = '#ee0000';
		document.forms[formName].elements["quantity" + numberInForm].focus();
	}
}


// Inner function to check availability of product with article number 
function checkAvailabilityForOneItemInner(formName, numberInForm, artNum, quantity){
	var requestBody = false;
	requestBody = "";
	requestBody = addUrlParamPair(requestBody, "artNumbers=" + artNum);
	requestBody = addUrlParamPair(requestBody, "quantities=" + quantity);
    
	var onCheckAvailabilityStart = function(url){};

	var onCheckAvailabilityException = function(e){
		document.getElementById("result").innerHTML = '<div class="red">System error occurred. Try again.</div>';
		document.forms[formName].elements["quantity" + numberInForm].style.color = '#ee0000';
		document.forms[formName].elements["quantity" + numberInForm].focus();
	}; 

	var onCheckAvailabilitySuccess = function(oXmlDoc) {
		try {
			var orderItems = getXmlData(oXmlDoc);

			for (var i = 0; i < orderItems.length; i++) {
				var item = orderItems.item(i);
				if (item.nodeName == "item") {
					var attrs = item.attributes;
					try {
						var total = 0;
						var article = attrs.getNamedItem("artnr").nodeValue;
						var availability = attrs.getNamedItem("availability").nodeValue;
						
						if (availability == "-1"){
							document.getElementById("result").innerHTML = '<div class="red">This product is not available!</div>';
							var articleElement = document.getElementById("article" + numberInForm + "block");
							if (articleElement != null) articleElement.style.color = '#ee0000';
						} else {
							// Put in cart
							addToCart(article,quantity);
							document.forms[formName].elements["quantity" + numberInForm].style.color = '#000000';
						}
					} catch(e){} 
				}
			}
  
		} catch (e) {
			throw e;
 		} 
    };

    doXmlRequest(
		'/system/modules/com.gridnine.opencms.modules.ms/pages/price_availability.jsp?locale=en',
		onCheckAvailabilitySuccess,
		onCheckAvailabilityStart,
		onCheckAvailabilityException,
		requestBody
	);

}

// Function to check availability of table of products
function checkAvailabilityForAllItems(formName){
	document.getElementById("result").innerHTML = '&nbsp;';

	var artNumbers = new Array(40);
	var quantities = new Array(40);
	var somethingWrong = false;
	for (var i = 0; i < 40; i++) {
		artNumbers[i] = document.forms[formName].elements['article' + i].value;
		quantities[i] = document.forms[formName].elements['quantity' + i].value;
		
		var regexQuantity = new RegExp(/^\d+[.|,]?\d*$/i);
		var correctQuantity = quantities[i].match(regexQuantity);
		
		if (artNumbers[i] == '' && quantities[i] == '') continue;
		else if (artNumbers[i] == '') {
			somethingWrong = true;
			document.getElementById("name" + i + "block").innerHTML = '<div class="red1">Enter part number!</div>';
		}
		else if (quantities[i] == ''){
			somethingWrong = true;			
			document.getElementById("name" + i + "block").innerHTML = '<div class="red1">Enter quantity!</div>';
		}
		else if (correctQuantity == null || correctQuantity < 0 || quantities[i] > 6999) {
				somethingWrong = true;			
				document.getElementById("name" + i + "block").innerHTML = '<div class="red1">Enter quantity from 1 to 6999!</div>';			
		}
		else {
			document.getElementById("name" + i + "block").innerHTML = '&nbsp;';
		}	
	}
	if (!somethingWrong) {
		checkAvailabilityForAllItemsInner(formName, artNumbers, quantities);
	}
}



// Inner function to check availability of table of products
function checkAvailabilityForAllItemsInner(formName, artNumbers, quantities){
    var requestBody = false;
	requestBody = "";
	
	var j = 0;
	var correspondence = new Array(artNumbers.length);
	for (i=0; i < artNumbers.length; i++)
	{
		if (artNumbers[i] != ''){
	 		// Array [i,j]
	 		correspondence [j] = i;
	 		requestBody = addUrlParamPair(requestBody, "artNumbers=" + artNumbers[i]);
	 		requestBody = addUrlParamPair(requestBody, "quantities=" + quantities[i]);
	 		j++;
	 	}
	} 
	
	var onCheckAvailabilityStart = function(url){};

	var onCheckAvailabilityException = function(e){
		document.getElementById("result").innerHTML = '<div class="red">System error occurred. Try again.</div>';
	}; 
    
	var onCheckAvailabilitySuccess = function(oXmlDoc) {
		try {
		    
			var resultMessage = 'The products have been placed in your basket!';
 
			var orderItems = getXmlData(oXmlDoc);
			for (var i = 0; i < orderItems.length; i++) {
				var item = orderItems.item(i);
				if (item.nodeName == "item"){
					var attrs = item.attributes;
					try	{
						var total = 0;
						var article = attrs.getNamedItem("artnr").nodeValue;
						var availability = attrs.getNamedItem("availability").nodeValue;
						var name = attrs.getNamedItem("name").nodeValue;
						
						 
						var avals = availability.split(";");
						
						 for (var k = 0; k < avals.length; k++) {
							var q = avals[k].split(" ")[0];
							var d = avals[k].split(" ")[2];
							if (q != -1 && d != -1){
								total = total + parseInt(q);
							 }
						 }
						
						var k = correspondence[i];
						var nameElement = document.getElementById("name" + k + "block");
						if (name == "-1" || total == 0){
							nameElement.innerHTML = '<div class="red1">This product is not available!</div>';
							nameElement.style.color = '#ee0000';
						} else if (quantities[i] > total) {
							nameElement.innerHTML = '<div class="red1">This quantity of product is not available! Available only' + total + '</div>';
							nameElement.style.color = '#ee0000';
						} else {
							nameElement.style.color = '#000000';
							nameElement.innerHTML = name;
						}
					} catch(e){} 
				}//if
			}//for
		} catch (e){
			throw e;
		} 
   };

   doXmlRequest(
	'/system/modules/com.gridnine.opencms.modules.ms/pages/price_availability.jsp?locale=en',
	onCheckAvailabilitySuccess,
	onCheckAvailabilityStart,
	onCheckAvailabilityException,
	requestBody
);

}


// Function to check availability of table of products
// And put them in cart
function checkAvailabilityForAllItemsAndPutInCart(formName, isHistory){
	
	document.getElementById("result").innerHTML = '&nbsp;';
	
	var length = 0;
	if (isHistory == true) {
		var els = document.forms[formName].elements;
		for (var i = 0; i < els.length; i++) {
			if(els[i].name.indexOf('article') != -1) {
				length++;
			}
		}
	} else {
		length = 40;
	}
	var artNumbers = new Array(length);
	var quantities = new Array(length);
	var comments = new Array(length);
	var somethingWrong = false;
	for (var i = 0; i < length; i++) {
		artNumbers[i] = document.forms[formName].elements['article' + i].value;
		quantities[i] = document.forms[formName].elements['quantity' + i].value;
		if (!isHistory) comments[i] = document.forms[formName].elements['comment' + i].value; else comments[i] = "";
	}
	
	if (!somethingWrong) {
		checkAvailabilityForAllItemsPutInCartInner(formName, artNumbers, quantities, comments, isHistory);
	}
	
}

// Inner function to check availability of table of products
// And put them in cart
function checkAvailabilityForAllItemsPutInCartInner(formName, artNumbers, quantities, comments, isHistory){
	
	var requestBody = false;
	requestBody = "";
	
	var j = 0;
	var correspondence = new Array(artNumbers.length);
	for (i=0; i < artNumbers.length; i++)
	{
		if (artNumbers[i] != ''){
	 		correspondence [j] = i;
	 		requestBody = addUrlParamPair(requestBody, "artNumbers=" + artNumbers[i]);
	 		requestBody = addUrlParamPair(requestBody, "quantities=" + quantities[i]);
	 		j++;
	 	}
	} 
	
	
    var onCheckAvailabilityStart = function(url)
    {
    	// empty
    };
 
    var onCheckAvailabilityException = function(e)
    {
		document.getElementById("result").innerHTML = '<div class="red">System error occurred. Try again.</div>';
    }; 
        
    var onCheckAvailabilitySuccess = function(oXmlDoc) 
    {
	 try 
	 {
	  
	  if (!oXmlDoc || !oXmlDoc.childNodes) return;
	  var rootNode = false;
	  for (var i = 0; i < oXmlDoc.childNodes.length; i++) 
	  {
	   if (oXmlDoc.childNodes.item(i).nodeName == "data") rootNode = oXmlDoc.childNodes.item(i);
	  }
	  if (!rootNode || !rootNode.childNodes) 
	  {
	   return;
	  }
	  var orderItems = rootNode.childNodes;

	// Check availability
	  
	  var itemsToAdd = new Array();
	  
	  for (var i = 0; i < orderItems.length; i++) 
	   {
	    var item = orderItems.item(i);
	    if (item.nodeName == "item") 
	    {
	 	 var attrs = item.attributes;
		 try
		 {
		  var article = attrs.getNamedItem("artnr").nodeValue;
		  var name = attrs.getNamedItem("name").nodeValue;
		  var quantity = quantities[i];
		  var availability = attrs.getNamedItem("availability").nodeValue;
				
		  var k = correspondence[i];
		  var nameElement = document.getElementById("name" + k + "block");
												
		  if (availability == "-1" || name == "-1")
		  {
		   nameElement.innerHTML = '<div class="red1">This product is not available!</div>';
		   nameElement.style.color = '#ee0000';
		  } else {
		   nameElement.style.color = '#000000';
		   if(arrayContains(itemsToAdd, article)) {
			   if(arrayContains(itemsToAdd, article)) {
					quantity = parseInt(quantity) + parseInt(itemsToAdd[article].quantity);
	  			}
		   }
		   itemsToAdd[article] = new itemToAdd(quantity, comments[i]);
		   if(!isHistory) {
		   nameElement.innerHTML = name;
		  }
		}
				
		}
		catch(e){ alert(e);}
	   }
	  }
	// Put all in cart	
	 
	 addToCartBatch(itemsToAdd);
	 if (!isHistory) {
         if (document.forms[formName].elements['items']) document.forms[formName].elements['items'].value = '';
		 for (var i = 0; i < 40; i++) {
			document.forms[formName].elements['article' + i].value = '';
			document.forms[formName].elements['quantity' + i].value = '';
            document.forms[formName].elements['comment' + i].value = '';
			document.getElementById("name" + i + "block").innerHTML = '';
		 }
	 }
  
	} 
	catch (e) 
	{
		throw e;
 	} 
    };

    doXmlRequest(
		'/system/modules/com.gridnine.opencms.modules.ms/pages/price_availability.jsp?locale=en',
		onCheckAvailabilitySuccess,
		onCheckAvailabilityStart,
		onCheckAvailabilityException,
		requestBody
	);
	
}

function checkAvailabilityForExcel(formName){
	
	document.getElementById("result").innerHTML = '&nbsp;';
	
	var artNumbers = new Array();
	var quantities = new Array();
	
	var itemsValue = document.forms[formName].elements['items'].value;
        	
	var items = itemsValue.replace(/\r/g,"").split("\n");
		
	for (i=0; i < items.length; i++){
		if (items[i].indexOf("\t") != -1)	{
	 		 artNumbers[artNumbers.length] = items[i].split("\t")[0];
			 quantities[quantities.length] = items[i].split("\t")[1];
		}
	}
		
	checkAvailabilityForExcelInner(formName, artNumbers, quantities);
}

function checkAvailabilityForExcelInner(formName, artNumbers, quantities){
    var wait = document.getElementById('popupWait');
    if(wait) wait.style.display = 'block';
    var requestBody = false;
	requestBody = "";
	
	var buyButton = document.getElementById("buy_button");
	
	var correspondence = new Array(artNumbers.length);
	
	for (i=0; i < artNumbers.length; i++)
	{
		if (artNumbers[i] != ''){
	 		requestBody = addUrlParamPair(requestBody, "artNumbers=" + artNumbers[i]);
	 		requestBody = addUrlParamPair(requestBody, "quantities=" + quantities[i]);
	 	}
	} 
	
		
	var onCheckAvailabilityStart = function(url)
    {
    	// empty
    };
    
    var onCheckAvailabilityException = function(e)
    {
		document.getElementById("result").innerHTML = '<div class="red">System error occurred. Try again.</div>';
    }; 
    
    var onCheckAvailabilitySuccess = function(oXmlDoc) 
    {
	  var resultElement = document.getElementById("result");
	 try 
	 {
	  var everythingIsFine = false;
      
	  var orderItems = getXmlData(oXmlDoc);
      if(orderItems.length > 0) {
      	resultElement.innerHTML = "";
      	everythingIsFine = true;
      }	
      else {
      	resultElement.innerHTML = '<p>To order items, the text must be formatted as follows.<br /><br />ex:<br /><strong>Part no.</strong><img width="70" height="1" border="0" src="http://ws-maria/images/pixel.gif" alt="" /><strong>Quantity</strong><br />05155&nbsp;&nbsp;&nbsp;TAB-character&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;Return-character<br />05327&nbsp;&nbsp;&nbsp;TAB-character&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;Return-character<br /><br />The easiest is to enter the article no. and quantity in Excel, then copy and paste in the text field to the left.</p>';
      	buyButton.style.display = "none";
      }

      counter = 0;
      var itemsToAdd = new Array();
      for (var i = 0; i < orderItems.length; i++) {
    	  var item = orderItems.item(i);
    	  if (item.nodeName == "item") {
    		  var attrs = item.attributes;
    		  try {
				var article = attrs.getNamedItem("artnr").nodeValue;
				var availability = attrs.getNamedItem("availability").nodeValue;
				var name = attrs.getNamedItem("name").nodeValue;

				var innerHTML = resultElement.innerHTML + '<table><tr><td width="20">' + (counter+1) + '.</td><td width="80"><strong>' + article + '</strong></td><td width="40">' + quantities[counter] + '</td>';	
				if (name == "-1" || availability == "-1") {
					innerHTML = innerHTML + '<td style="color:#ee0000">This product is not available!</td></tr></table>';
				} else {
					resultElement.style.color = '#000000';
					innerHTML = innerHTML + '<td>' + name + '</td></tr></table>';
					if(arrayContains(itemsToAdd, article)) {
						quantities[i] = parseInt(quantities[i]) + parseInt(itemsToAdd[article].quantity);
		  			}
					itemsToAdd[article] = new itemToAdd(quantities[i], "");					
				}
				resultElement.innerHTML = innerHTML;
			} catch(e) {
				everythingIsFine = false;
			} 
		}
    	counter++;
	  }
	  
	  if (everythingIsFine) 
	  {
       buyButton.style.display = "block";
       document.getElementById("addToCartForExcelButton").onclick = function () { addToCartForExcel(itemsToAdd, 'ordertable'); }
  	  }
	} 
	catch (e) 
	{
		throw e;
 	}
 	if(wait) wait.style.display = 'none'; 
    };
    
    
    doXmlRequest(
		'/system/modules/com.gridnine.opencms.modules.ms/pages/price_availability.jsp?locale=en',
		onCheckAvailabilitySuccess,
		onCheckAvailabilityStart,
		onCheckAvailabilityException,
		requestBody
	);
}

function addToCartForExcel(itemsToAdd, formName){
	document.getElementById("buy_button").style.display="none";
	addToCartBatch(itemsToAdd);
    document.getElementById("items").value = '';
    document.getElementById("result").innerHTML = '<strong>The products have been placed in your basket!</strong>';
}

function addToCart(artNr, quantity)
{
 
 setCookie("cart_items", artNr, false);
 redirectFromCart();
 return;


  var onAddToCartSuccess = function(oXmlDoc) 
  {
   getProductsAmount('/system/modules/com.gridnine.opencms.modules.ms/elements/products_amount.jsp',
		onAmountSuccess,
		function(e) {alert(e); /*throw new Error(e);*/},
		""
		);
  }
	
  doXmlRequest(
		'/system/modules/com.gridnine.opencms.modules.ms/pages/add_to_cart.jsp?artnr=' + artNr + '&quantity=' + quantity,
		onAddToCartSuccess,
		function() {},
		function(e) {alert(e); /*throw new Error(e);*/},
		""
	);
}

function addToCartBatch(itemsToAdd) {
	var requestBody = "";
	for (artNr in itemsToAdd) {
		var item = itemsToAdd[artNr];
		var amount = item.quantity;
		var comment = item.comment;
		requestBody = addUrlParamPair(requestBody, "artnr=" + artNr);
		requestBody = addUrlParamPair(requestBody, "quantity=" + amount);
		requestBody = addUrlParamPair(requestBody, "comment=" + encode(comment, "utf8"));
	}
	
	var onAddToCartBatchSuccess = function(oXmlDoc) {
		getProductsAmount('/system/modules/com.gridnine.opencms.modules.ms/elements/products_amount.jsp',
		onAmountSuccess,
		function(e) {alert(e); /*throw new Error(e);*/},
		""
		);
	}
	
	doXmlRequest(
		'/system/modules/com.gridnine.opencms.modules.ms/pages/add_to_cart.jsp',
		onAddToCartBatchSuccess,
		function() {},
		function(e) {alert(e); /*throw new Error(e);*/},
		requestBody
	);
}

function setSelectionRange(input, selectionStart, selectionEnd) {
  if (input.setSelectionRange) {
    input.focus();
    input.setSelectionRange(selectionStart, selectionEnd);
  }
  else if (input.createTextRange) {
    var range = input.createTextRange();
    range.collapse(true);
    range.moveEnd('character', selectionEnd);
    range.moveStart('character', selectionStart);
    range.select();
  }
}

function loadSavedCart(artNumbers, quantities, comments) {
	var resultEl = document.getElementById("result");
	var wait = document.getElementById('popupWait');
    if(wait) wait.style.display = 'block';
    
    var requestBody = "";
    
   	for (i=0; i < artNumbers.length; i++) {
 		requestBody = addUrlParamPair(requestBody, "artNumbers=" + artNumbers[i]);
 		requestBody = addUrlParamPair(requestBody, "quantities=" + quantities[i]);
 		requestBody = addUrlParamPair(requestBody, "comments=" + comments[i]);
	} 
	
	var onLoadCartStart = function(url) {};

	var onLoadCartException = function(e) {
		resultEl.innerHTML = '<div class="red">System error occurred. Try again.</div>';
	};
	
	var onLoadCartSuccess = function(oXmlDoc) {
	try {
		var unavailableItems = new Array();
		var itemsToAdd = new Array();
		var resultMessage = 'The products have been placed in your basket!';
		var orderItems = getXmlData(oXmlDoc);
		
		for (var i = 0; i < orderItems.length; i++) {
			var item = orderItems.item(i);
			if (item.nodeName == "item") {
				var attrs = item.attributes;
				var article = attrs.getNamedItem("artnr").nodeValue;
				var availability = attrs.getNamedItem("availability").nodeValue;
				var name = attrs.getNamedItem("name").nodeValue;
	
				if (name == "-1" || availability == "-1"){
					unavailableItems[unavailableItems.length] = article + ' - ' + name;
				}	
				if(arrayContains(itemsToAdd, article)) {
					quantities[i] = parseInt(quantities[i]) + parseInt(itemsToAdd[article].quantity);
	  			}
				itemsToAdd[article] = new itemToAdd(quantities[i], comments[i]);
			}
		}
		
		if(getPropertiesCount(itemsToAdd) == 0) {
			resultMessage = 'Products are currently unavailable.';
		} else if(unavailableItems.length > 0) {
			resultMessage = 'Products have been added in cart with some exceptions.<br><ul>';
		
			if(unavailableItems.length > 0) {
				for(var article in unavailableItems) {
					resultMessage += '<li><strong>' + article + '</strong> - product is not available now.</li>';
				}
			}
 			resultMessage += '</ul><br>';
		}
			
  			addToCartBatch(itemsToAdd);
  			document.getElementById('result').innerHTML = resultMessage;
  			document.getElementById('popupWait').style.display = 'none';
	} catch (e) {
		throw e;
	} 
	};
	
   doXmlRequest(
	'/system/modules/com.gridnine.opencms.modules.ms/pages/price_availability.jsp?locale=en',
	onLoadCartSuccess,
	onLoadCartStart,
	onLoadCartException,
	requestBody
   );
}