//alimento.js
//objects used to manage food data
//needs: utils.js
//(c)2001 A.M.C. SoftWorks

function Alimento(seed)
{
	//costruttore vuoto
	this.N_ALIMENTO	=""
	this.K_ALIMENTO	=0
	this.K_CATEGORIA=0
	for(var p in Alimento.nutrienti){
		this[p]=0
	}
	this.QUANTITA=100	//Quantità standard: 100g
	//costruttore di copia
	if(seed){
		for(var p in seed){
			this[p]=seed[p]
		}
	}
}
Alimento.prototype.dispButtons=function(Buttons)
{
	var sHtml=""
	for(var i=0;i<Buttons.length;i++){
		sHtml+=Buttons[i].display(this.K_ALIMENTO)
		if(i<Buttons.length-1){
			sHtml+="&nbsp;"
		}
	}
	return sHtml
}
Alimento.prototype.toHTML=function()
{
	var sHtml=""
	sHtml+="<html>\n"
	sHtml+="<head>\n"
	sHtml+="<title>"+this.N_ALIMENTO+"</title>\n"
	sHtml+="<link rel='stylesheet' type='text/css' href='../css/general.css'>\n"
	sHtml+="</head>\n"
	sHtml+="<body>\n<table width='100%'>\n"
	sHtml+="<tr><th colspan=3 class=tableTitle>Contenuto medio in nutrienti per "+sNumberFormat(this.QUANTITA,0)+"g"
	if(this.SCARTO>0){
		sHtml+=" di parte edibile ("+sNumberFormat(100-this.SCARTO,0)+"%)"
	}
	sHtml+=":</th></tr>\n"
	sHtml+="<tr><td colspan=3 class=normText><hr></td></tr>\n"
	for(var p in Alimento.nutrienti){
		if(this[p]){
			sHtml+="<tr><td class=label>"+Alimento.nutrienti[p].nome[0]+"</td><td class=numbers>"+sNumberFormat(this[p]*this.QUANTITA/100,2)+"</td><td class=normText>"+Alimento.nutrienti[p].unita+"</td></tr>\n"
		}
	}
	sHtml+="<tr><td colspan=3 class=normText><hr></td></tr>\n"
	sHtml+="<tr><td colspan=3 align=center><input type=button class=btn value=Chiudi onClick=\"window.close()\"></td></tr>\n"
	sHtml+="</table>\n"
	sHtml+="</body>\n"
	sHtml+="</html>\n"
	return sHtml
}
Alimento.prototype.showDetailWin=function()
{
	var aliDetailWin=window.open("",this.K_ALIMENTO,"dependent=yes,directories=no,height=450,width=280,hotkeys=no,location=no,menubar=no,resizable=yes,scrollbars=yes,status=no,toolbar=no")
	aliDetailWin.document.write(this.toHTML())
	aliDetailWin.document.close()
}
//Tipi, o macrocategorie
Alimento.tipi=[
	{K_TIPO:"CE",N_TIPO:"Cereali e derivati",file:"Cereali.js"},
	{K_TIPO:"VE",N_TIPO:"Ortaggi, verdure e legumi",file:"Verdura.js"},
	{K_TIPO:"FR",N_TIPO:"Frutta",file:"Frutta.js"},
	{K_TIPO:"CA",N_TIPO:"Carne",file:"Carne.js"},
	{K_TIPO:"PE",N_TIPO:"Prodotti della pesca",file:"Pesce.js"},
	{K_TIPO:"LA",N_TIPO:"Latte e derivati",file:"Latte.js"},
	{K_TIPO:"UO",N_TIPO:"Uova",file:"Uova.js"},
	{K_TIPO:"OG",N_TIPO:"Oli e grassi",file:"Condimenti.js"},
	{K_TIPO:"DO",N_TIPO:"Dolci, zucchero e dolcificanti",file:"Dolci.js"},
	{K_TIPO:"BE",N_TIPO:"Bevande",file:"Bevande.js"},
	{K_TIPO:"PV",N_TIPO:"Prodotti vari",file:"Vari.js"}
]
//Categorie merceologiche
Alimento.categorie=[
	{K_CATEGORIA:1001,K_TIPO:"VE",N_CATEGORIA:"tuberi, patate, fecola, preparati per gnocchi"},
	{K_CATEGORIA:2000,K_TIPO:"VE",N_CATEGORIA:"verdure miste"},
	{K_CATEGORIA:2001,K_TIPO:"VE",N_CATEGORIA:"germogli (soia, bambù) asparagi"},
	{K_CATEGORIA:2003,K_TIPO:"VE",N_CATEGORIA:"verdura a radice"},
	{K_CATEGORIA:2004,K_TIPO:"VE",N_CATEGORIA:"crucifere"},
	{K_CATEGORIA:2005,K_TIPO:"VE",N_CATEGORIA:"agliacee"},
	{K_CATEGORIA:2006,K_TIPO:"VE",N_CATEGORIA:"succhi di verdura"},
	{K_CATEGORIA:2007,K_TIPO:"VE",N_CATEGORIA:"funghi, tartufi"},
	{K_CATEGORIA:2008,K_TIPO:"VE",N_CATEGORIA:"verdure a foglia (insalata)"},
	{K_CATEGORIA:2009,K_TIPO:"VE",N_CATEGORIA:"verdure a frutto e a fiore (fagiolini, sedano, finocchi, cardi, carciofi, peperoni)"},
	{K_CATEGORIA:2010,K_TIPO:"VE",N_CATEGORIA:"olive, verdure sott’olio, sott’aceto, in agrodolce"},
	{K_CATEGORIA:2011,K_TIPO:"VE",N_CATEGORIA:"alghe"},
	{K_CATEGORIA:3000,K_TIPO:"VE",N_CATEGORIA:"verdure e legumi misti"},
	{K_CATEGORIA:3001,K_TIPO:"VE",N_CATEGORIA:"legumi"},
	{K_CATEGORIA:3002,K_TIPO:"VE",N_CATEGORIA:"farine di legumi"},
	{K_CATEGORIA:3004,K_TIPO:"VE",N_CATEGORIA:"prodotti della soia"},
	{K_CATEGORIA:4001,K_TIPO:"FR",N_CATEGORIA:"frutta fresca e bacche"},
	{K_CATEGORIA:4002,K_TIPO:"FR",N_CATEGORIA:"frutta cotta e conservata in scatola"},
	{K_CATEGORIA:4003,K_TIPO:"FR",N_CATEGORIA:"frutta secca e in guscio"},
	{K_CATEGORIA:4004,K_TIPO:"FR",N_CATEGORIA:"farine di frutta (castagne, cocco etc)"},
	{K_CATEGORIA:4010,K_TIPO:"FR",N_CATEGORIA:"succhi e spremute di frutta"},
	{K_CATEGORIA:6001,K_TIPO:"LA",N_CATEGORIA:"latte"},
	{K_CATEGORIA:6002,K_TIPO:"LA",N_CATEGORIA:"yogurt"},
	{K_CATEGORIA:6003,K_TIPO:"LA",N_CATEGORIA:"farine lattee, latte condensato e in polvere"},
	{K_CATEGORIA:7001,K_TIPO:"LA",N_CATEGORIA:"formaggi e latticini"},
	{K_CATEGORIA:8001,K_TIPO:"CE",N_CATEGORIA:"cereali in chicchi e preparazioni"},
	{K_CATEGORIA:8002,K_TIPO:"CE",N_CATEGORIA:"farine di cereali"},
	{K_CATEGORIA:8003,K_TIPO:"CE",N_CATEGORIA:"fiocchi, pop corn, crusca (anche in compresse) soffiati"},
	{K_CATEGORIA:8006,K_TIPO:"CE",N_CATEGORIA:"paste alimentari"},
	{K_CATEGORIA:8007,K_TIPO:"CE",N_CATEGORIA:"pasta ripiena (ravioli e tortellini)"},
	{K_CATEGORIA:9001,K_TIPO:"CE",N_CATEGORIA:"grissini, crackers, salatini, crostini"},
	{K_CATEGORIA:9002,K_TIPO:"CE",N_CATEGORIA:"pane, pane biscottato, pizza, focaccia, pasta per pane e pizza"},
	{K_CATEGORIA:10003,K_TIPO:"CA",N_CATEGORIA:"insaccati e salumi"},
	{K_CATEGORIA:10006,K_TIPO:"CA",N_CATEGORIA:"carne di equino (cavallo, asino)"},
	{K_CATEGORIA:10007,K_TIPO:"CA",N_CATEGORIA:"altri animali (diversi da bovini, suini, volatili, equini, ovini, conigli)"},
	{K_CATEGORIA:10008,K_TIPO:"CA",N_CATEGORIA:"frattaglie di equino"},
	{K_CATEGORIA:10010,K_TIPO:"CA",N_CATEGORIA:"carne di bovino adulto/manzo/vitellone"},
	{K_CATEGORIA:10030,K_TIPO:"CA",N_CATEGORIA:"carne di vitello"},
	{K_CATEGORIA:10040,K_TIPO:"CA",N_CATEGORIA:"carne in scatola"},
	{K_CATEGORIA:10041,K_TIPO:"CA",N_CATEGORIA:"frattaglie di bovino"},
	{K_CATEGORIA:10050,K_TIPO:"CA",N_CATEGORIA:"carne di volatili, pollo"},
	{K_CATEGORIA:10051,K_TIPO:"CA",N_CATEGORIA:"frattaglie di volatili, pate'"},
	{K_CATEGORIA:10060,K_TIPO:"CA",N_CATEGORIA:"carne di maiale"},
	{K_CATEGORIA:10061,K_TIPO:"CA",N_CATEGORIA:"frattaglie di maiale"},
	{K_CATEGORIA:10070,K_TIPO:"CA",N_CATEGORIA:"carne di coniglio, lepre"},
	{K_CATEGORIA:10071,K_TIPO:"CA",N_CATEGORIA:"frattaglie di coniglio, lepre"},
	{K_CATEGORIA:10080,K_TIPO:"CA",N_CATEGORIA:"carne di ovino"},
	{K_CATEGORIA:10081,K_TIPO:"CA",N_CATEGORIA:"frattaglie di ovino"},
	{K_CATEGORIA:11001,K_TIPO:"PE",N_CATEGORIA:"pesci vertebrati (freschi e surgelati)"},
	{K_CATEGORIA:11002,K_TIPO:"PE",N_CATEGORIA:"molluschi e crostacei"},
	{K_CATEGORIA:11003,K_TIPO:"PE",N_CATEGORIA:"pesci vertebrati (conservati sott’olio)"},
	{K_CATEGORIA:11004,K_TIPO:"PE",N_CATEGORIA:"pesci vertebrati (conservati)"},
	{K_CATEGORIA:12001,K_TIPO:"UO",N_CATEGORIA:"uova"},
	{K_CATEGORIA:13001,K_TIPO:"OG",N_CATEGORIA:"margarina"},
	{K_CATEGORIA:13002,K_TIPO:"OG",N_CATEGORIA:"oli e grassi vegetali (incluso burro di arachide e margarina vegetale)"},
	{K_CATEGORIA:13003,K_TIPO:"OG",N_CATEGORIA:"burro e grassi animali (esclusa panna)"},
	{K_CATEGORIA:13004,K_TIPO:"OG",N_CATEGORIA:"panna"},
	{K_CATEGORIA:14000,K_TIPO:"DO",N_CATEGORIA:"torrone"},
	{K_CATEGORIA:14001,K_TIPO:"DO",N_CATEGORIA:"cioccolatini, tavolette e creme spalmabili"},
	{K_CATEGORIA:14002,K_TIPO:"DO",N_CATEGORIA:"frutta candita"},
	{K_CATEGORIA:14003,K_TIPO:"DO",N_CATEGORIA:"zucchero e miele"},
	{K_CATEGORIA:14004,K_TIPO:"DO",N_CATEGORIA:"caramelle, liquirizia, confetti"},
	{K_CATEGORIA:14005,K_TIPO:"DO",N_CATEGORIA:"marmellate"},
	{K_CATEGORIA:14006,K_TIPO:"DO",N_CATEGORIA:"gelati, ghiaccioli"},
	{K_CATEGORIA:14007,K_TIPO:"DO",N_CATEGORIA:"dolcificanti"},
	{K_CATEGORIA:14008,K_TIPO:"DO",N_CATEGORIA:"sciroppi"},
	{K_CATEGORIA:15001,K_TIPO:"DO",N_CATEGORIA:"brioches, merendine non farcite"},
	{K_CATEGORIA:15002,K_TIPO:"DO",N_CATEGORIA:"fette biscottate"},
	{K_CATEGORIA:15003,K_TIPO:"DO",N_CATEGORIA:"creme e desserts al cucchiaio"},
	{K_CATEGORIA:15004,K_TIPO:"DO",N_CATEGORIA:"pasticcini (esclusa pasticceria da te')"},
	{K_CATEGORIA:15006,K_TIPO:"DO",N_CATEGORIA:"torte, preparati e basi per torte"},
	{K_CATEGORIA:15007,K_TIPO:"DO",N_CATEGORIA:"biscotti, pasticcini da te'"},
	{K_CATEGORIA:15008,K_TIPO:"DO",N_CATEGORIA:"brioches e merendine farcite ricoperte (anche krapfen e bomboloni ripieni)"},
	{K_CATEGORIA:15009,K_TIPO:"DO",N_CATEGORIA:"merendine a base di cioccolato (tipo mars, kit-kat)"},
	{K_CATEGORIA:16001,K_TIPO:"BE",N_CATEGORIA:"bevande analcoliche (birra analcolica, spuma, chinotto) e acqua minerale"},
	{K_CATEGORIA:17001,K_TIPO:"BE",N_CATEGORIA:"vino e spumanti"},
	{K_CATEGORIA:17002,K_TIPO:"BE",N_CATEGORIA:"amari e liquori dolci"},
	{K_CATEGORIA:17003,K_TIPO:"BE",N_CATEGORIA:"birra"},
	{K_CATEGORIA:17004,K_TIPO:"BE",N_CATEGORIA:"superalcolici, amari ad alta gradazione"},
	{K_CATEGORIA:17005,K_TIPO:"BE",N_CATEGORIA:"alcool"},
	{K_CATEGORIA:18001,K_TIPO:"BE",N_CATEGORIA:"te' (anche deteinato e solubile)"},
	{K_CATEGORIA:18002,K_TIPO:"BE",N_CATEGORIA:"caffe' (anche decaffeinato e solubile)"},
	{K_CATEGORIA:18003,K_TIPO:"BE",N_CATEGORIA:"cacao e polveri (Nesquick, etc)"},
	{K_CATEGORIA:18004,K_TIPO:"BE",N_CATEGORIA:"tisane d’erbe, infusi, anche solubili"},
	{K_CATEGORIA:18005,K_TIPO:"BE",N_CATEGORIA:"caffe' d’orzo, di cicoria (anche in tazza)"},
	{K_CATEGORIA:24001,K_TIPO:"PV",N_CATEGORIA:"sale, erbe aromatiche, altri aromatizzanti"},
	{K_CATEGORIA:24002,K_TIPO:"PV",N_CATEGORIA:"aceto di vino, di mele"},
	{K_CATEGORIA:24005,K_TIPO:"PV",N_CATEGORIA:"dadi, gelatina alimentare, estratti e prodotti a base di glutammato"},
	{K_CATEGORIA:24012,K_TIPO:"PV",N_CATEGORIA:"salse a base di maionese"},
	{K_CATEGORIA:24015,K_TIPO:"PV",N_CATEGORIA:"prodotti per la lievitazione"},
	{K_CATEGORIA:25001,K_TIPO:"PV",N_CATEGORIA:"brodi di carne e vegetali"},
	{K_CATEGORIA:26001,K_TIPO:"PV",N_CATEGORIA:"acqua"},
	{K_CATEGORIA:27001,K_TIPO:"PV",N_CATEGORIA:"sofficini"},
	{K_CATEGORIA:27002,K_TIPO:"PV",N_CATEGORIA:"omogeneizzati"},
	{K_CATEGORIA:27003,K_TIPO:"PV",N_CATEGORIA:"liofilizzati"},
	{K_CATEGORIA:28001,K_TIPO:"PV",N_CATEGORIA:"sughi"},
	{K_CATEGORIA:28002,K_TIPO:"PV",N_CATEGORIA:"minestre"},
	{K_CATEGORIA:28003,K_TIPO:"PV",N_CATEGORIA:"salse"},
	{K_CATEGORIA:28004,K_TIPO:"PV",N_CATEGORIA:"tartine"},
	{K_CATEGORIA:28005,K_TIPO:"PV",N_CATEGORIA:"pasti dietetici sostitutivi"}
]

//I dati contenuti nel DB sono considerati numeri puri, stante l'omogeneità di
//unità di misura tra i dati nel DB (sia BDA che NDB) e quelli delle DRI.
//L'unità di misura qui presente, dunque, serve solo per la presentazione dei
//dati a video.
Alimento.nutrienti={
	//Macronuntrienti
	Mac_H2O:{unita:"g",nome:["Acqua","Water"]},
	Mac_Cal:{unita:"kcal",nome:["Energia","Food energy"]},
	Mac_Pro:{unita:"g",nome:["Proteine","Protein"]},
	Mac_Gra:{unita:"g",nome:["Grassi","Total lipid"]},
	Mac_Cen:{unita:"g",nome:["Ceneri","Ash"]},
	Mac_Car:{unita:"g",nome:["Carboidrati","Carbohydrate"]},
	Mac_Fib:{unita:"g",nome:["Fibre","Total dietary fiber"]},
	Mac_Glu:{unita:"g",nome:["Zuccheri totali","Total sugars"]},
	Mac_Gsa:{unita:"g",nome:["Acidi grassi saturi","Saturated fatty acids"]},	//no DRI,DBA
	Mac_Gmi:{unita:"g",nome:["Acidi grassi monoinsaturi","Monounsaturated fatty acids"]},	//no DRI,DBA
	Mac_Gpi:{unita:"g",nome:["Acidi grassi polinsaturi","Polyunsaturated fatty acids"]},	//no DRI,DBA
	Mac_Col:{unita:"mg",nome:["Colesterolo","Cholesterol"]},	//no DRI,DBA
	//Minerali:
	Min_Ca:{unita:"mg",nome:["Calcio","Calcium"]},
	Min_Fe:{unita:"mg",nome:["Ferro","Iron"]},
	Min_Mg:{unita:"mg",nome:["Magnesio","Magnesium"]},//no DBA
	Min_P:{unita:"mg",nome:["Fosforo","Phosphorus"]},
	Min_K:{unita:"mg",nome:["Potassio","Potassium"]}, //no DRI
	Min_Na:{unita:"mg",nome:["Sodio","Sodium"]}, //no DRI
	Min_Zn:{unita:"mg",nome:["Zinco","Zinc"]},
	Min_Cu:{unita:"mg",nome:["Rame","Copper"]},
	Min_Mn:{unita:"mg",nome:["Manganese","Manganese"]},
	Min_Se:{unita:"&mu;g",nome:["Selenio","Selenium"]},	//no DBA
	Min_F:{unita:"mg",nome:["Fluoro","Fluoride"]},	//no DBA,NDB
	Min_I:{unita:"&mu;g",nome:["Iodio","Iodine"]},	//no DBA,NDB
	Min_As:{unita:"&mu;g",nome:["Arsenico","Arsenic"]},	//solo DRI
	Min_B:{unita:"&mu;g",nome:["Boro","Boron"]},	//solo DRI
	Min_Cr:{unita:"&mu;g",nome:["Cromo","Chromium"]},	//solo DRI
	Min_Sb:{unita:"&mu;g",nome:["Molibdeno","Molybdenum"]},	//solo DRI
	Min_Ni:{unita:"mg",nome:["Nickel","Nickel"]},	//solo DRI
	Min_Si:{unita:"mg",nome:["Silicio","Silicon"]},	//solo DRI
	Min_Va:{unita:"mg",nome:["Vanadio","Vanadium"]},	//solo DRI
	//Vitamine:
	Vit_A:{unita:"&mu;g",nome:["Vitamina A","Vitamin A"]},
	Vit_E:{unita:"mg",nome:["Vitamina E","Vitamin E"]},	//alpha-tocopherol equivalents
	Vit_B1:{unita:"mg",nome:["Tiamina","Thiamin"]},
	Vit_B2:{unita:"mg",nome:["Riboflavina","Riboflavin"]},
	Vit_B3:{unita:"mg",nome:["Niacina","Niacin"]},	//anche PP
	Vit_B5:{unita:"mg",nome:["Acido pantotenico","Pantothenic acid"]},
	Vit_B6:{unita:"mg",nome:["Vitamina B6","Vitamin B6"]},
	Vit_B9:{unita:"&mu;g",nome:["Folato","Folate"]},
	Vit_B12:{unita:"&mu;g",nome:["Vitamina B12","Vitamin B12"]},	//no DBA
	Vit_C:{unita:"mg",nome:["Vitamina C","Vitamin C"]},
	Vit_D:{unita:"&mu;g",nome:["Vitamina D","Vitamin D"]},
	Vit_H:{unita:"&mu;g",nome:["Biotina","Biotin"]},	//no DBA,NDB
	Vit_K:{unita:"&mu;g",nome:["Vitamina K","Vitamin K"]},
	Vit_Col:{unita:"mg",nome:["Colina","Choline"]}	//no DBA,NDB
/*
	SCARTO:{unita:"%",nome:["Scarto percentuale","Percent refuse"]}
*/
}
//Raggruppa array di Table contenenti Alimenti creando una tabella di oggetti
//di classe Alimento, i cui elementi sono in realtà degli aggregati di:
//alimenti in piatti, piatti in pasti, pasti in giornate o giornate in settimane
Alimento.aggregate=function(alimenti)
{
	//crea nuovo alimento aggregato
	var agg=new Alimento()
	//conterrà la quantità totale
	agg.QUANTITA=0.0
	//calcola riga
	for(var i=0;i<alimenti.length;i++){
		for(var p in Alimento.nutrienti){
			agg[p]+=alimenti[i].PERCENTUALE*(100-alimenti[i].SCARTO)*alimenti[i][p]/10000.0
		}
		agg.QUANTITA+=parseFloat(alimenti[i].QUANTITA,10)
	}
	//ogni aggregato è per definizione edibile al 100%, perché gli scarti
	//vengono eliminati nella trasformazione da alimenti in piatto
	agg.SCARTO=0.0
	return agg
}
Alimento.array=[]
Alimento.arrayInit=function(JSDB_Alimento_array)
{
	if(!JSDB_Alimento_array)
		return -1
	for(var i=0;i<JSDB_Alimento_array.length;i++){
		Alimento.array[Alimento.array.length]=new Alimento(JSDB_Alimento_array[i])
	}
	return Alimento.array.length
}

