function tFix(wert,ds){
       var wert=(wert.toFixed)?wert.toFixed(ds):
        Math.floor(wert)+"."+(Math.pow(10,ds)+Math.round((wert-Math.floor(wert))*Math.pow(10,ds))+"").substr(1,ds);
	return wert;
}

function determinePricesSum(productRef, quantity, actual_price){
	var tmp = -1;
	if (actual_price == -1)
		return -1;

	if(retailsetList[productRef] != null){
		tmp = determineRetailsetPrice(productRef);
		if (tmp == -1){
			return -1;
		}
		else {
			var price = tmp*quantity + actual_price;
			return price;
		}
	}
	else{
		tmp = determineProductPrice(productRef);
		if (tmp == -1){
			return -1;
		}
		else {
			var price = tmp*quantity + actual_price;
			return price;
		}
	}
	
	return actual_price;
}	

function determineProductPrice(productRef){
	if(ncdr.priceProductRefs[productRef]){
		var price_ele = document.getElementById(ncdr.priceProductRefs[productRef][0]);
		if (price_ele){
			var inner = price_ele.innerHTML;

			// delete the ","
			inner = inner.replace(/\,/, "");
			// delete currency and its followed blank
			inner = inner.replace(/.+\s/,"")
			
			var price = Number(inner);
			if (inner != "" && !isNaN(price)){
      	 		return price;
      	 	}
      	 }
	}
	
	return -1;
}

function determineRetailsetPrice(productRef){
	var retailSet = retailsetList[productRef];
	var length = retailSet.length;
	var retailSetPrice = 0;
	for(var i=0;i<length;i++){
		retailSetPrice = determinePricesSum(retailsetList[productRef][i]["ProductRef"], retailsetList[productRef][i]["Quantity"], retailSetPrice);
	}
	
	return retailSetPrice;
}


function applyEnfinityPriceFormatting(price){
	var display_price = "";
	var price_length = price.length;
	var display_price_1 = price.substring(0, price_length-3);
	var display_price_2 = price.substring(price_length-3, price_length);
	
	var length = display_price_1.length;
	for(var i = (length-1); i>=0; i--){
		var c = display_price_1.charAt(i);
		display_price = c + display_price;
		if ((i != (length-1)) && (i!=0) && ((length-i)%3 == 0)){
			display_price = "," + display_price;
		}
		
	}
	return (display_price+display_price_2);
}

function determineCurrency(productRef){
	if(retailsetList[productRef] == null){
		return getProductCurrency(productRef);
	}
	else{
		return getRetailsetCurrency(productRef);
	}
}

function getRetailsetCurrency(productRef){
	var retailSetCurrency = "?";
	if(ncdr.priceProductRefs[productRef]){
		var retailSet = retailsetList[productRef];
		var length = retailSet.length;
		for(var i=0;i<length;i++){
			retailSetCurrency = getProductCurrency(retailsetList[productRef][i]["ProductRef"]);
			if (retailSetCurrency != "?")
				break;
		}	
	}
	
	return retailSetCurrency;
}



function getProductCurrency(productRef){
	if(ncdr.priceProductRefs[productRef]){
		var price_ele = document.getElementById(ncdr.priceProductRefs[productRef][0]);
		if (price_ele){
			var inner = price_ele.innerHTML;

			// get currency 
			var currency = inner.match(/.+\s/,"")
			
			if (currency == null || currency == "")
				return "? ";
			else
				return currency;
      	 }
	}
	
	return "? ";
}

function performPriceCalculation(){
	var price = 0;
	var listprice = 0;
	for(var rs in retailsetList){
		if(ncdr.priceProductRefs[rs] != null){
			var length = ncdr.priceProductRefs[rs].length;
			for(var j=0;j<length;j++){
				var price_ele_id = ncdr.priceProductRefs[rs][j];
				var price_ele = document.getElementById(price_ele_id);
				if (price_ele != null){
					price = determinePricesSum(rs, 1, 0);
					if (Number(price) == -1){
						price = "Call Sun";
					}
					else{
						currency = determineCurrency(rs);
						listprice = determineListPricesSum(rs, 1, 0, "1");
						if ((Number(price) < Number(listprice))){
							showListPrice(rs, listprice, currency);
						}
						price = applyEnfinityPriceFormatting(tFix(price,2));
						price = currency + price;
					}
					price_ele.innerHTML = price;
	      	 	}			
			}
		}
	}
}

function determineListPricesSum(productRef, quantity, actual_price, suffix){
	if(retailsetList[productRef] != null){
		var price = determineRetailsetListPrice(productRef)*quantity + actual_price;
		return price;
	}
	else{
		var price = determineProductListPrice(productRef,suffix)*quantity + actual_price;
		return price;
	}
	
	return actual_price;
}

function determineProductListPrice(productRef,suffix){
	var price_ele = document.getElementById("ListPrice"+suffix+"_"+productRef);
	if (price_ele){
		var inner = price_ele.innerHTML;

		// delete the ","
		inner = inner.replace(/\,/, "");
		// delete currency and its followed blank
		inner = inner.replace(/.+\s/,"")
		
		var price = Number(inner);
		if (!isNaN(price)){
  	 		return price;
  	 	}
  	 }
	
	return 0;
}

function determineRetailsetListPrice(productRef){
	var retailSet = retailsetList[productRef];
	var length = retailSet.length;
	var retailSetListPrice = 0;
	for(var i=0;i<length;i++){
		retailSetListPrice = determineListPricesSum(retailsetList[productRef][i]["ProductRef"], retailsetList[productRef][i]["Quantity"], retailSetListPrice, "");
	}
	return retailSetListPrice;
}

function showListPrice(productRef, price, currency){
	price = applyEnfinityPriceFormatting(tFix(price,2));
	price = currency + price;
	
	var listprice1 = document.getElementById("ListPrice1_"+productRef);
	var listprice2 = document.getElementById("ListPrice2_"+productRef); 
	
	if(listprice1 != null){
		listprice1.innerHTML = price;
		listprice1.style.display = "inline";
	}
	if(listprice2 != null){
		listprice2.innerHTML = price;
		listprice2.style.display = "inline";
	}
}
