String.prototype.endsWith = function(s) { return this.length >= s.length && this.substr(this.length - s.length) == s; } String.prototype.startsWith = function(s) { return this.length >= s.length && this.substr(0, s.length) == s; } function round(value,precision) { var exp = Math.pow(10,precision); return Math.round(value*exp)/exp; } var products = new Array(); var productRatios = new Array(); var activeField; function addProduct(product,ratio) { var index = products.length; products[index] = product; productRatios[index] = ratio; } addProduct("Bułka tarta",1.667); addProduct("Cukier",1.15); addProduct("Cukier puder",1.37); addProduct("Fasola drobna",1.25); addProduct("Groch",1.25); addProduct("Kasza manna",1.35); addProduct("Mak",1.676); addProduct("Margaryna",1.087); addProduct("Masło",1.087); addProduct("Mąka kukurydziana",1.25); addProduct("Mąka pszenna (typ 500)",1.47); addProduct("Mąka pszenna chlebowa (typ 720)",1.63); addProduct("Mąka pszenna razowa (typ 2000)",1.73); addProduct("Mąka żytnia chlebowa (typ 720)", 1.70); addProduct("Mąka żytnia razowa (typ 2000)", 1.8); addProduct("Mąka ziemniaczana",1.05); addProduct("Miód",0.71); addProduct("Mleko",1); addProduct("Ocet",1); addProduct("Olej",1.1); addProduct("Oliwa z oliwek",1.095); addProduct("Proszek do pieczenia",1.15); addProduct("Ryż",1.089); addProduct("Soczewica",1.25); addProduct("Sól kuchenna",0.825); addProduct("Spirytus",1.25); addProduct("Smalec",1.15); addProduct("Śmietana 18%",1.12); addProduct("Wino",1.02); addProduct("Wódka",1.087); addProduct("Woda",1); var amountRatios = new Array(); amountRatios["Gram"] = 1; amountRatios["Kilogram"] = 1000; amountRatios["Pound"] = 453.6; amountRatios["Ounce"] = 28.35; var amountRounds = new Array(); amountRounds["Gram"] = 0; amountRounds["Kilogram"] = 2; amountRounds["Pound"] = 2; amountRounds["Ounce"] = 1; var volumeRatios = new Array(); volumeRatios["Glass"] = 250; volumeRatios["Milliliter"] = 1; volumeRatios["Teaspoon"] = 5; volumeRatios["Tablespoon"] = 15; volumeRatios["Pint"] = 568; volumeRatios["Ounce"] = 28.41; var volumeRounds = new Array(); volumeRounds["Glass"] = 2; volumeRounds["Milliliter"] = 0; volumeRounds["Teaspoon"] = 1; volumeRounds["Tablespoon"] = 1; volumeRounds["Pint"] = 2; volumeRounds["Ounce"] = 1; function initialize() { document.chooseForm.amountGram.value = 100; fillProducts(""); } function fillProducts(filter) { var productsSelect = document.chooseForm.productsSelect; if(!filter) { filter = ""; } filter = filter.toLowerCase(); productsSelect.options.length = 0; for(var i=0; i < products.length; i++) { if(filter.length==0 || products[i].toLowerCase().indexOf(filter) != -1) { productsSelect.options[productsSelect.options.length] = new Option(products[i],productRatios[i]); } } productsSelect.options[0].selected = true; productSelected(); } function productSelected() { var productsSelect = document.chooseForm.productsSelect; if(activeField!==undefined) { recalculate(activeField); } else { recalculate(document.chooseForm.amountGram); } } function productSearched() { var searchString = document.chooseForm.productSearch.value; fillProducts(searchString); } function recalculate(field) { //cursorPosition = field.selectionStart; //alert(cursorPosition); //document.chooseForm.productSearch.value = cursorPosition; if(field.value.indexOf(',')>0) field.value = field.value.replace(',','.'); var numberRegExp = new RegExp("^[0-9\.,]*$"); if(!numberRegExp.test(field.value)) field.value = field.value.replace(/[^0-9\.,]*/ig,''); //field.selectionStart = cursorPosition; //check for double decimal separator var firstSep = field.value.indexOf("."); var secondSep = firstSep>0?field.value.indexOf(".",firstSep+1):-1; if(firstSep>0 && secondSep>firstSep) { field.value = field.value.substring(0,secondSep); } if(field.value[field.value.length-1]=='.') return; var reset = false; if(field.value.length == 0) { reset = true; } var ratio = 1; var volumeRatio = document.chooseForm.productsSelect.options[document.chooseForm.productsSelect.selectedIndex].value; if(field.id.startsWith("amount")) { ratio = field.value * amountRatios[field.id.substring(6)]; }else if(field.id.startsWith("volume")) { ratio = field.value * volumeRatios[field.id.substring(6)] / volumeRatio; } for(var i = 0; i < document.chooseForm.elements.length; i++) { var currentElement = document.chooseForm.elements[i]; if(currentElement == field) continue; if(currentElement.id.startsWith("amount")) { if(reset) { currentElement.value = ''; continue; } currentElement.value = round(ratio / amountRatios[currentElement.id.substring(6)], amountRounds[currentElement.id.substring(6)]); } if(currentElement.id.startsWith("volume")) { if(reset) { currentElement.value = ''; continue; } currentElement.value = round(ratio / volumeRatios[currentElement.id.substring(6)] * volumeRatio, volumeRounds[currentElement.id.substring(6)]); } } } function selectInput(field) { addClass(field,"form-selected"); activeField = field; for(var i = 0; i < document.chooseForm.elements.length; i++) { var currentElement = document.chooseForm.elements[i]; if(currentElement == field) continue; removeClass(currentElement,"form-selected"); } } function addClass(item, classname) { var obj = item if (typeof item=="string") { obj = document.getElementById(item) } obj.className += " " + classname } function removeClass(item, classname) { var obj = item if (typeof item=="string") { obj = document.getElementById(item) } var classes = ""+obj.className while (classes.indexOf(classname)>-1) { classes = classes.replace (classname, "") } obj.className = classes }