Ext.namespace ('fcbm.model');

fcbm.model.FormuleLeuco = function () {

	return {
		elements: new Array(),
		
		parseJSON: function(jsonObject){
			for (var i = 0; i < jsonObject.length; i++) {
				var cur = jsonObject[i];
				this.elements.push({
					id: cur.id,
					value: parseFloat(cur._text)
				});
			}
		},
		
		getFormuleLeucoArray: function(){
			return this.elements;
		},
		
		getData: function () {
			var tab = new fcbm.i18n.FormuleLeuco().getTranslationArray();
			var data = [];
			
			for (var i = 0; i < this.elements.length; i++) {
				var cur = this.elements[i];
				for (var j = 0; j < tab.length; j++) {
					var curRef = tab[j];
					if (cur.id == curRef.id) {
						data.push([j+1, cur.id, curRef.abbrev, curRef.shortName, curRef.name, cur.value, curRef.special]);
						break;
					}
				}
			}
			
			return data;
		},
		
		getAbbrevById: function (id) {
			var tab = new fcbm.i18n.FormuleLeuco().getTranslationArray();
			
			for (var j = 0; j < tab.length; j++) {
				var curRef = tab[j];
				if (id == curRef.id)
					return curRef.abbrev;
			}

		},
		
		getDataObjects: function () {
			var tab = new fcbm.i18n.FormuleLeuco().getTranslationArray();
			var data = [];
			
			for (var i = 0; i < this.elements.length; i++) {
				var cur = this.elements[i];
				for (var j = 0; j < tab.length; j++) {
					var curRef = tab[j];
					if (cur.id == curRef.id) {
						data.push({
							idx: j+1,
							id: cur.id,
							abbrev: curRef.abbrev,
							shortName: curRef.shortName, 
							name: curRef.name, 
							value: cur.value, 
							nb: 0,
							percent: 0,
							milliardieme: 0,
							special: curRef.special
						});
						break;
					}
				}
			}
			
			data.sort(function (a, b) {
				return (a.idx > b.idx ? 1 : -1);					
			});
			
			return data;
		},
		
		getDataStore: function () {
			var data = this.getData();
			
			var ds = new Ext.data.Store({
				proxy: new Ext.data.MemoryProxy(data),
				reader: new Ext.data.ArrayReader(
					{}, 
					[
						{name: 'idx'},
						{name: 'id'},
						{name: 'abbrev'},
						{name: 'shortName'},
						{name: 'name'},
						{name: 'value'},
						{name: 'special'},
					]
				),
				sortInfo:{field: 'idx', direction: "ASC"}
			});
			ds.load();
			
			return ds;
		},
		
		getDataStoreAtlas: function (gb) {
			var data = [];
				var leucoCountNb = 0;
				var totalRef = 0;
				var fl = this.getDataObjects();
				for (var i=0; i<fl.length; i++) {
					var nb = fl[i].value;
					if (nb != null && id != 'ERB')
						leucoCountNb += nb;
				}
				for (var i=0; i<fl.length; i++) {
					var cur = fl[i];
					cur.nb = cur.value;
					cur.percent = (leucoCountNb == 0 ? 0 : Math.round(cur.nb / leucoCountNb * 100));
					cur.percentRef = (totalRef == 0 ? 0 : Math.round(cur.value / leucoCountNb * 100));
					if (cur.id != 'ERB')
						cur.milliardieme = (leucoCountNb == 0 ? 0 : Math.round(cur.nb * gb / leucoCountNb * 10) / 10);
					else
						cur.milliardieme = "";
					data.push ([
						(cur.idx == fl.length ? cur.idx + 1 : cur.idx),
						cur.id,
						cur.abbrev,
						cur.shortName,
						cur.name,
						cur.value,
						cur.special,
						cur.nb,
						cur.percent,
						cur.milliardieme,
						cur.percentRef
					]);
				}
				// total
				data.push ([
					fl.length,
					"id",
					"abbrev",
					"shortName",
					"Nombre de leucocytes",
					-1,
					1,
					leucoCountNb,
					100,
					gb,
					100
				]);
				
				var leucoCountDataStore = new Ext.data.Store({
					proxy: new Ext.data.MemoryProxy(data),
					reader: new Ext.data.ArrayReader(
						{}, 
						[
							{name: 'idx'},
							{name: 'id'},
							{name: 'abbrev'},
							{name: 'shortName'},
							{name: 'name'},
							{name: 'value'},
							{name: 'special'},
							{name: 'nb'},
							{name: 'percent'},
							{name: 'milliardieme'},
							{name: 'percentRef'}
						]
					),
					sortInfo:{field: 'idx', direction: "ASC"}
				});
				leucoCountDataStore.load();
				return leucoCountDataStore;
			}
		
	}
};
