// Asynchronous Javascript and XML (AJAX) ordering tools
// Version 1.1
// (c) e-Buzz bv (SvI), 2007
// v1.1 --> 20070903 SvI 740.170 redirect to url with target;

function removeErrorMsg(parentNode) {
	var childs = parentNode.childNodes;
	for (var i=0; i < childs.length; i++) {
		if (childs[i].nodeType == 1) {
			var elId = childs[i].getAttribute("id");
			if (elId.substring(0, 5) == "error") parentNode.removeChild(childs[i]);
		}
	}
}

function updateLineInfo(lineNumber, quantityOrdered){
	var infoEl = document.getElementById("info" + lineNumber);
	var orderedId = "sumOrd" + lineNumber;
	var ordLineNumberEl = document.getElementById(orderedId);
	if (ordLineNumberEl) {
		updateChildTextNode(ordLineNumberEl, getTranslation("traOrdered") + " " + quantityOrdered);
	} else {
		htm = document.getElementsByTagName('html')[0].id;
		bod = document.getElementsByTagName('body')[0].id;
		elmCls = 'bgcolor';
		if (htm == 'E25' || bod == 'INFOPR3N' || bod == 'INFOPR4N' ) elmCls = 'shop_field';
		elmType = 'span';
		if (bod == 'INFOPR3N' || (elmCls == 'shop_field' && bod == 'INFOPR3')) elmType = 'div';
		appElementNodeText(infoEl, elmType, orderedId, elmCls, getTranslation("traOrdered") + " " + quantityOrdered);
	}
}

function updateShoppingBasket(orderLines, currencySign, subtotalAmount, subtotalBudget, budgetPos) {
	var orderLinesEl = document.getElementById("orderLines");
	var subtotalEl = document.getElementById("subtotalAmount");
	var subtotalEl2 = document.getElementById("subtotalBudget");
	var checkOutEl = document.getElementById("checkOut");
	if (orderLinesEl) {
		// Standard in document update of shopping basket
		updateChildTextNode(orderLinesEl, orderLines);
		if (subtotalEl) updateChildTextNode(subtotalEl, currencySign + " " + subtotalAmount);
		if (subtotalEl2) {
			updateChildTextNode(subtotalEl2, currencySign + " " + subtotalBudget);
			var tr_Class = document.getElementById("posNegBudget").className;
			if (!budgetPos && tr_Class.indexOf('_neg') == -1) tr_Class = tr_Class + '_neg';
			if (budgetPos && tr_Class.indexOf('_neg') >= 0) tr_Class = tr_Class.substring(0, tr_Class.indexOf('_neg'));
			document.getElementById("posNegBudget").setAttribute("class", tr_Class);
			document.getElementById("posNegBudget").className = tr_Class;        
		}	
		if (checkOutEl) checkOutEl.style.display = "block";
	} else {
		// Update shoppingbasket in other frame or customised html document
		updateCustomShoppingBasket(orderLines, currencySign, subtotalAmount, subtotalBudget, budgetPos);
	}
}

function updateOrder (dummy, XMLresponse) {
	// Response mode
	var error = XMLresponse.getElementsByTagName("error");
	var warning = XMLresponse.getElementsByTagName("warning");
	var forward = XMLresponse.getElementsByTagName("forward");
	var shoppingBar = XMLresponse.getElementsByTagName("shoppingBar");
	var updateAccountDetails = XMLresponse.getElementsByTagName("updAccDetails");
	var ordLineNoteActive;
	if (error.length == 0) {
		if (document.forms['shopBasket']) {//v.w. bestel promotie in order03
			document.forms['shopBasket'].action.value='0';
			document.forms['shopBasket'].submit();
		}
		errorOnPage = false;
		var orderedLine = XMLresponse.getElementsByTagName("orderedLine");
		var shoppingBasket = XMLresponse.getElementsByTagName("shoppingBasket");
		// Data
		var lineNumber = orderedLine[0].getAttribute("lineNumber");
		var quantityOrderedTotal = orderedLine[0].getElementsByTagName("QuantityOrderedTotal").item(0).firstChild.data;
		var minimalOrderQuantity = orderedLine[0].getElementsByTagName("minimalOrderQuantity").item(0).firstChild.data;
		var orderLines = shoppingBasket[0].getElementsByTagName("orderLines").item(0).firstChild.data;
		var currencySign = shoppingBasket[0].getElementsByTagName("subtotalAmount").item(0).getAttribute("currencySign");
		var subtotalAmount = shoppingBasket[0].getElementsByTagName("subtotalAmount").item(0).firstChild.data;
		if (shoppingBasket[0].getElementsByTagName("subtotalBudget").length > 0) {
			var budgetPos = false;
			var subtotalBudget = shoppingBasket[0].getElementsByTagName("subtotalBudget").item(0).firstChild.data;
			if (shoppingBasket[0].getElementsByTagName("subtotalBudget").item(0).getAttribute("sign") == 'pos') {
				budgetPos = true;
			}
		} else {
			var subtotalBudget;
		}  
		// elements
		if (document.getElementById("ordQty" + lineNumber)) {
			var ordLineQuantity = document.getElementById("ordQty" + lineNumber);
		} else if (document.getElementById("promordQty" + lineNumber)) {
			var ordLineQuantity = document.getElementById("promordQty" + lineNumber);
		} else if (document.getElementById("promo_ordQty" + lineNumber)) {
			var ordLineQuantity = document.getElementById("promo_ordQty" + lineNumber);
		}
		if (document.getElementById("orderButton" + lineNumber)) {
			var orderButton = document.getElementById("orderButton" + lineNumber);
		} else if (document.getElementById("promorderButton" + lineNumber)) {
			var orderButton = document.getElementById("promorderButton" + lineNumber);
		} else if (document.getElementById("promo_orderButton" + lineNumber)) {
			var orderButton = document.getElementById("promo_orderButton" + lineNumber);
		}
		if (document.getElementById("ordLineNote" + lineNumber)) {
			var ordLineNote = document.getElementById("ordLineNote" + lineNumber);
			ordLineNoteActive = true;
		} else {
			ordLineNoteActive = false;
		}
		// Update ordered
		updateLineInfo(lineNumber, quantityOrderedTotal);
		if (dupPrd) {
			ordLineQuantity.value = minimalOrderQuantity;
		} else {
			ordLineQuantity.value = quantityOrderedTotal;
			updateChildTextNode(orderButton, getTranslation("traChange"));	
		}
		if (ordLineNoteActive) ordLineNote.value = '';
		//	Update shoppingBasket
		updateShoppingBasket(orderLines, currencySign, subtotalAmount, subtotalBudget, budgetPos);
		if (forward.length > 0) {			
			// Forward to external site
			var url = forward[0].getElementsByTagName("url").item(0).firstChild.data;
			if (forward[0].getElementsByTagName("url").item(0).getAttribute("target")) {
				var target = forward[0].getElementsByTagName("url").item(0).getAttribute("target");
				if (forward[0].getElementsByTagName("url").item(0).getAttribute("width")) {
					var width = forward[0].getElementsByTagName("url").item(0).getAttribute("width");
				} else {
					var width = "640";
				}
				if (forward[0].getElementsByTagName("url").item(0).getAttribute("height")) {
					var height = forward[0].getElementsByTagName("url").item(0).getAttribute("height");
				} else {
					var height = "380";
				}
				switch (target) {
        case '_panel' :
          new_panel(url);        
          break;
        default :
  				document.getElementById("popupLink").onclick = function () {
  					//	document.getElementById('question').style.display = 'none';
  					window.open(url, target, "resizable=1, width="+width+", height="+height+", left=200, top=200, status");
  					return false;
  				}
  				document.getElementById("question").style.display = "block";
  			}	
			} else {
				window.location.href = url;
			}
		}
		if (shoppingBar.length > 0) {
			var barError = XMLresponse.getElementsByTagName("barError");
			var percentageOrderWeight = shoppingBar[0].getElementsByTagName("orderWeight").item(0).firstChild.data;
			setProgressBarBgPos('percentMass', percentageOrderWeight);                  			
			if (parseInt(percentageOrderWeight) != 0) insertHTML(document.getElementById('pMass'), percentageOrderWeight + '%');
			var percentageOrderVolume = shoppingBar[0].getElementsByTagName("orderVolume").item(0).firstChild.data;
			setProgressBarBgPos('percentVolume', percentageOrderVolume);
			if (parseInt(percentageOrderVolume) != 0) insertHTML(document.getElementById('pVolume'), percentageOrderVolume + '%');      
			if (barError.length > 0) showLineError(barError);
		}
	} else {
		showLineError(error);
	}
	if (warning.length > 0) showLineError(warning);
	try { //deal with related items appearing twice in infopr4n
		var prdCod = orderedLine[0].getAttribute("productCode");
		document.getElementById('promo_ordQty'+prdCod).value = document.getElementById('ordQty'+prdCod).value;
		document.getElementById('promo_orderButton'+prdCod).innerHTML = document.getElementById('orderButton'+prdCod).innerHTML;
		document.getElementById('promo_orderButton'+prdCod).title = document.getElementById('sumOrd'+prdCod).innerHTML;
	}
	catch(e) {}
	if (updateAccountDetails.length > 0) {
		var url = '/easyorder/ajdetbox?pageId='+pageId+'&mode='+cssCode;
		var funct = 'show'+cssCode+'Details';
		doAjax(url, eval(funct));
	}
}
var errorOnPage = false; //uit infoprXX naar hier v.w. bestellen uit promoties 
function updOrd(formName, parmCod, lineSeq, prdCod, ordQtyEl, noteEl, prdOrdQty, prdOrdWeightEl) {
	var noteActive;
	// Encode prdCod
	var prdCod = encodeURIComponent(prdCod);
	//if (errorOnPage != false) {
	if (Boolean(errorOnPage)) {
		var errorOnPageEl = document.getElementById(errorOnPage);
		removeErrorMsg(errorOnPageEl);
	}
	try {var ordQty = document.forms[formName].elements[ordQtyEl].value;}
	catch(e) {var ordQty = document.getElementsByName(ordQtyEl)[0].value;}
	try {var n = document.forms[formName].elements[noteEl];}
	catch(e) {var n = document.getElementsByName(noteEl)[0];}
	if (n) {
		try {var note = document.forms[formName].elements[noteEl].value;}
		catch(e) {var note = document.getElementsByName(noteEl)[0].value;}
		//try/catch i.v.m.  vreemde uitzonderingen in ie7, zie dev. issue 260, 508; OvdZ
		noteActive = true;
	} else {
		noteActive = false;
	}
	var weight = 0;
	try {var n = document.forms[formName].elements[prdOrdWeightEl];}
	catch(e) {var n = document.getElementsByName(prdOrdWeightEl)[0];}
	if (n) {
	try {var weight = document.forms[formName].elements[prdOrdWeightEl].value;}
	catch(e) {var weight = document.getElementsByName(prdOrdWeightEl)[0].value;}
	}	
 	var config = '';
 	try {var c = document.forms[formName].elements['ordSub' +prdCod];}
 	catch(e) {var c = document.getElementsByName('ordSub' +prdCod)[0];}
 	if (c) {
	 	try {var config = document.forms[formName].elements['ordSub' +prdCod].value;}
	 	catch(e) {var config = document.getElementsByName('ordSub' +prdCod)[0].value;}
 	}
	if (note) {
		var uri = "parm=" + parmCod + "&linenumber=" + lineSeq + "&prdcod=" + prdCod + "&ordqty=" + ordQty + "&note=" + note + "&prdordQty=" + prdOrdQty + "&prdordWeight=" + weight + "&prdConfig=" + config;
	} else {
		var uri = "parm=" + parmCod + "&linenumber=" + lineSeq + "&prdcod=" + prdCod + "&ordqty=" + ordQty + "&prdordQty=" + prdOrdQty + "&prdordWeight=" + weight + "&prdConfig=" + config;
	}
	url  = "/easyorder/updorder?" + uri;
	loadXMLDoc(url);
}

var productSequence; //  zet volgnummer in global var,  o.a. voor add2template
function useSequence(seq) {
	productSequence = seq;
}
// SB juli 2008 Add product 2 order template
function add2OrderTemplate(template, product, quantity) {
	var url = 'ajAdd2Tmpl?myTmpl=' +template+ '&tmplProduct=' +product+ '&ordQty=' +quantity+ '&sequence=' +productSequence + '&type=' + arguments[3];
	doAjax(url, updateLine);
}

function updateLine() {
	if (this.req.responseXML.getElementsByTagName('updated')[0].firstChild) {
		var message = this.req.responseXML.getElementsByTagName('updated')[0].firstChild.nodeValue;
		var seq = this.req.responseXML.getElementsByTagName('sequence')[0].firstChild.nodeValue;
		var infoEl = document.getElementById("infoErr"+seq);
		// Display message
		/*removeErrorMsg(infoEl);
		appElementNodeText(infoEl, "span", "error"+seq, "error", message);
		errorOnPage = "infoErr" + seq;*/
		if (infoEl.style.display == 'none') infoEl.style.display = 'block !important'; //order03
		insertHTML(infoEl,message)
	}
}

function showLineError(error) {
	var lineNumber = error[0].getAttribute("lineNumber");
	var errorMsg = error[0].getElementsByTagName("message").item(0).firstChild.data;
	// Elements
	var infoEl = document.getElementById("infoErr"+lineNumber);				
	// Display error message
	// infoEl.className = "infoErr";
	appElementNodeText(infoEl, "span", "error"+lineNumber, "error", errorMsg);
		if (document.getElementById("ordQty" + lineNumber)) {
			var ordQtyEl = document.getElementById("ordQty" + lineNumber);
		} else if (document.getElementById("promordQty" + lineNumber)) {
			var ordQtyEl = document.getElementById("promordQty" + lineNumber);
		} else if (document.getElementById("promo_ordQty" + lineNumber)) {
			var ordQtyEl = document.getElementById("promo_ordQty" + lineNumber);
		}
	ordQtyEl.focus();
	errorOnPage = "infoErr" + lineNumber;
}

