// define buildUp Methods for StandAloneElements
	function createLine(){
		// setup Line Object and childNodes
		myLine = new clsObject("Line");
			myLine.addObject(new clsObject("Product"));
			myLine.addObject(new clsObject("Discount"));
			myLine.addObject(new clsObject("Weight"));
			myLine.addObject(new clsObject("QuantityOrdered"));
			myLine.addObject(new clsObject("Tax"));
			myLine.addObject(new clsObject("Price"));
			myLine.addObject(new clsObject("Variants"));
			myLine.addObject(new clsObject("Internal"));
		// setup Price childNodes
		myPrice = myLine.getFirstItem("Price");
			myPrice.addObject(new clsObject("Net"));
			myPrice.addObject(new clsObject("Gross"));
		// setup Net childNodes
		myNet = myPrice.getFirstItem("Net");
			myNet.addObject(new clsObject("SingleUnit"));
			myNet.addObject(new clsObject("LineTotal"));
		// setup Gross childNodes
		myGross = myPrice.getFirstItem("Gross");
			myGross.addObject(new clsObject("SingleUnit"));
			myGross.addObject(new clsObject("LineTotal"));
		// return Line-Object to Caller
		return myLine;
		};
// ** 0001
	function callParameters(){
		myQueryStringData = XML.getFirstItem("Config").getFirstItem("QueryStringData").getValue();
		if(myQueryStringData!=""&&myQueryStringData!=null){
			parameters = myQueryStringData.split("&");
			};
		};
// ** 0002			
	function build(products,parIndex){
	var relProducts = new Array();
	var values = new Array();
		if (parameters.length > 0){
	  		var index = parameters[parIndex].charAt(parameters[parIndex].indexOf("=") - 1);
			var value = unescape(parameters[parIndex].substring(parameters[parIndex].indexOf("=")+1));
			// select * from products where field[index + 5] = item
			for(var i=0;i<products.length;i++){
				if(products[i][parseInt(index) + 5]==value){
					relProducts[relProducts.length] = products[i];
					};
				};
			// add values of specified item from relProducts
			for(var i=0;i<products.length;i++){
				// if values already defined
				if(values.length!=0){
					addValue = true
					for(var j=0;j<values.length;j++){
						if(products[i][parseInt(index) + 5]==values[j]){
							addValue = false;
							};
						};
					if(addValue) values[values.length] = products[i][parseInt(index) + 5]
					}
				// else add value to array
				else{
					values[values.length] = products[i][parseInt(index) + 5];
					};
				};
			// print routine
			globalValues[index] = values;
			parIndex++
			if(parIndex<parameters.length - 1){
				build(relProducts,parIndex)
				};
			};
		};
// ** 0003
	function printVariants(){
		var rString = "";
		if(globalValues){
			if(globalValues.length>0){
				rString += "<form name=\"variants\">";
				for(var i=0;i<globalValues.length;i++){
					rString += "<tr>";
					rString += "<td class='prdetailvariantlabel'>" + items[i] + "</td>";
					rString += "<td><select onChange=\"resetPage(this[this.selectedIndex].text," + i + ")\">";
					if(globalValues[i].length>0){
						for(var j=0;j<globalValues[i].length;j++){
							rString += "<option";
							// check for selected item
							if(parameters.length>0){
								for(var k=0;k<parameters.length-1;k++){
									var parIndex = parameters[k].charAt(parameters[k].indexOf("=") - 1 );
									var parValue = unescape(parameters[k].substring(parameters[k].indexOf("=")+1));
									if((parIndex==i)&&(globalValues[i][j]==parValue)) rString += " selected";
									};
								};
							rString += ">" + globalValues[i][j];
							};
						};
					rString += "</select></td>";
					rString += "</tr>";
					};
				rString += "</form>";
				};
			};
		return(rString);
		};
// ** 0004
	function resetPage(text,index){
		var pathname = "";
		for(var i=0;i<parameters.length-1;i++){
			var parIndex = parameters[i].charAt(parameters[i].indexOf("=") - 1 );
			var parValue = unescape(document.variants.elements[parIndex][document.variants.elements[parIndex].selectedIndex].text);
			if(index==parIndex){
				var addText = "search" + parIndex + "=" + escape(text) + "&"
				pathname = addText + pathname;
				}
			else{
				var addText = "search" + parIndex + "=" + escape(parValue) + "&"
				pathname += addText;
				};
			};
		pathname += "{EOL}";
		XML.getFirstItem("Config").getFirstItem("QueryStringData").putValue(pathname);
		safeData();
		location.href = location.href;
		};
// ** 0005
	function detectActProd(){
		// detect values
		if(globalValues.length>0){
			for(var i=0;i<globalValues.length;i++){
				if(globalValues[i].length>0){
					var valFound = false;
					for(var j=0;j<globalValues[i].length;j++){
						// check for selected item
						if(parameters.length>0){
							for(var k=0;k<parameters.length-1;k++){
								var parIndex = parameters[k].charAt(parameters[k].indexOf("=") - 1);
								var parValue = unescape(parameters[k].substring(parameters[k].indexOf("=")+1));
								if((parIndex==i)&&(globalValues[i][j]==parValue)){
									valFound = true;
									values[i] = parValue;
									};
								};
							};
						};
					if(!valFound) values[i] = globalValues[i][0];
					};
				};
			};
		// detecting actual ProductCombination
		if(proComb.length>0){
			for(var i=0;i<proComb.length;i++){
				if(values.length>0){
					var prodFound = true;
					for(var j=0;j<values.length;j++){
						if(values[j]!=proComb[i][j+5]){
							prodFound = false
							};
						};
					if(prodFound) actualProd = proComb[i];
					}
				else{
					actualProd = proComb[0];
					};
				};
			};
		};
// ** 0006
	function Element(Prod_nr,Title,Subtitle,Price,Tax,PriceUnit,Unitdesc,Variants,LnkAdress,Discount,Minorder){
		this.Prod_nr = Prod_nr;
		this.Title = Title;this.Subtitle = Subtitle;
		this.Price = Price;this.Tax = Tax;
		this.PriceUnit = PriceUnit;this.Unitdesc = Unitdesc;
		this.Variants = Variants;
		this.LnkAdress = LnkAdress;
		this.Discount = Discount;
		this.Minorder = Minorder;
		};
// ** 0007
	function addToBag(anElement,Amount){
		Amount = parseInt(Amount);
		with(this){
			var taxamount = taxarea[parseInt(XML.getFirstItem("Config").taxarea)][parseInt(anElement.Tax) + 1];
			var update = -1;
			myLines = XML.getFirstItem("Order").getFirstItem("OrderBody").getFirstItem("OrderLines").childNodes
			for(var i=0;i<myLines.length;i++){
				if(myLines[i].getFirstItem("Product").code==actualProd[0]){
					update = i;
					break;
					};
				};
			// product already in shoppingcard
			if(update>-1){
				// detect position of prod_nr in shoppingcart
				myLines[i].getFirstItem("QuantityOrdered").amount = Amount;
				myVariants = "";
				if(document.variants){
					for(var j=0;j<document.variants.elements.length;j++){
						myVariants += items[j] + ";" + document.variants.elements[j][document.variants.elements[j].selectedIndex].text + "@";
						};
					};
				myVariants += "{EOL}";
				myLines[i].getFirstItem("Internal").variants = myVariants;
				if(boolPriceTaxIncl){
					myLines[i].getFirstItem("Price").getFirstItem("Net").getFirstItem("LineTotal").putValue(TFormatCurrencyValue( actualProd[3] * Amount * ( 1 - taxamount/( 100 + taxamount )), objLeadCurrency ) );
					myLines[i].getFirstItem("Price").getFirstItem("Gross").getFirstItem("LineTotal").putValue(TFormatCurrencyValue( actualProd[3] * Amount, objLeadCurrency ) );
					}
				else{
					myLines[i].getFirstItem("Price").getFirstItem("Net").getFirstItem("LineTotal").putValue(TFormatCurrencyValue( actualProd[3] * Amount, objLeadCurrency ) );
					myLines[i].getFirstItem("Price").getFirstItem("Gross").getFirstItem("LineTotal").putValue(TFormatCurrencyValue( actualProd[3] * Amount * ( 1 + taxamount/100 ), objLeadCurrency ) );
					};
				}
			// add product to shoppingcart
			else{
				myLine = createLine();
				myProduct = myLine.getFirstItem("Product");
					myProduct.code = actualProd[0];
					myProduct.desc1 = actualProd[1];
					myProduct.desc2 = actualProd[2];
				myQuantityOrdered = myLine.getFirstItem("QuantityOrdered");
					myQuantityOrdered.amount = Amount;
					myQuantityOrdered.unit = anElement.Unitdesc;
				myInternal = myLine.getFirstItem("Internal")
					myInternal.price = actualProd[3];
					myInternal.address = anElement.LnkAdress;
					myInternal.navIndex = XML.getFirstItem("Config").getFirstItem("NavigationIndex").getValue();
					myInternal.discount = anElement.Discount;
					myInternal.minOrder = anElement.Minorder;
					myVariants = "";
					if(document.variants){
						for(var i=0;i<document.variants.elements.length;i++){
							myVariants += items[i] + ";" + document.variants.elements[i][document.variants.elements[i].selectedIndex].text + "@";
							};
						};
					myInternal.variants = myVariants;
				myWeight = myLine.getFirstItem("Weight");
					myWeight.unit = objWeight.charSymbol;
					myWeight.amount = actualProd[4];
				myTax = myLine.getFirstItem("Tax");
					myTax.taxclass = anElement.Tax;
					myTax.rate = taxamount;
				myPrice = myLine.getFirstItem("Price");
					myPrice.unit = anElement.PriceUnit;
				myNet = myPrice.getFirstItem("Net");
				myGross = myPrice.getFirstItem("Gross");
					
				
				if(boolPriceTaxIncl){
					myNet.getFirstItem("SingleUnit").putValue(TFormatCurrencyValue( parseFloat(actualProd[3]) * ( 1 - taxamount/( 100 + taxamount ) ), objLeadCurrency ) );
					myNet.getFirstItem("LineTotal").putValue(TFormatCurrencyValue( parseFloat(actualProd[3]) * Amount * ( 1 - taxamount/( 100 + taxamount ) ), objLeadCurrency ) );
					myGross.getFirstItem("LineTotal").putValue(TFormatCurrencyValue( parseFloat(actualProd[3]), objLeadCurrency ) );
					myGross.getFirstItem("LineTotal").putValue(TFormatCurrencyValue( parseFloat(actualProd[3]) * Amount, objLeadCurrency ) );
					}
				else{
					myNet.getFirstItem("SingleUnit").putValue(TFormatCurrencyValue( parseFloat(actualProd[3]), objLeadCurrency ) );
					myNet.getFirstItem("LineTotal").putValue(TFormatCurrencyValue( parseFloat(actualProd[3]) * Amount, objLeadCurrency ) );
					myGross.getFirstItem("LineTotal").putValue(TFormatCurrencyValue( parseFloat(actualProd[3]) * ( 1 + taxamount/100 ), objLeadCurrency ) );
					myGross.getFirstItem("LineTotal").putValue(TFormatCurrencyValue( parseFloat(actualProd[3]) * Amount * ( 1 + taxamount/100 ), objLeadCurrency ) );
					};
				myLines[myLines.length] = myLine;
				};
			safeData();
			location.href="orderform.htm";
			};
		};
// ** 0008
	function displPrice(anEntry){
		var taxamount = taxarea[XML.getFirstItem("Config").taxarea][parseInt(Product.Tax) + 1];
		if(boolDisplTaxIncl){
			if(boolPriceTaxIncl) return(anEntry[3] / Product.PriceUnit)
			else return(anEntry[3] * ( 1 + taxamount/100 ) / Product.PriceUnit);
			}
		else{
			if(boolPriceTaxIncl) return(anEntry[3] * ( 1 - taxamount/( 100 + taxamount ) ) / Product.PriceUnit)
			else return(anEntry[3] / Product.PriceUnit);
			};
		};
// ** 0010
	var parameters = new Array();
// ** 0011
	var values = new Array();
// ** 0012
	var globalValues = new Array();
// ** 0013
	var proComb = new Array();
// ** 0014
	var actualProd;
// ** 0016
	callParameters();
