

function Container(n,v){
	this.name = n;
	this.container = v;
	this.volume = new Volume(v);
}



function Volume(v){
	this.value = v;
	this.unit = 'oz';
	this.system = 'us';
	this.toMetric = toMetric;      
	this.toUS = toUS;	
}


function toMetric(){
	if (this.system!='metric'){
		this.system = 'metric';
 		this.unit = 'mL';
		this.value = this.value *  29.5;
	}	
	return this.value;	
}


function toUS(){ 
	if (this.system!='us'){	
 		this.system = 'us';
 		this.unit = 'oz';
		this.value = this.value / 29.5;
	}	
	return this.value;
}


function Drink(p){
	this.drink = p;	
	this.totalparts = 0;
	this.arMixture = eval("["+this.drink+"]");
	this.parts = new Array();
	
	for (i=0;i<this.arMixture.length;i++) this.totalparts +=  parseInt(this.arMixture[i]);       
}



Drink.prototype.makeIn = function(container) {
	
	dsystem = eval(container+'.volume.system');
	
	if (dsystem=='metric') eval(container+'.volume.toUS()'); // when make, always convert to US first
	
	size = eval(container+'.volume.value');
		
	for (i=0;i<this.arMixture.length;i++) {
		thispart = ((parseInt(this.arMixture[i])/this.totalparts) * size);
		this.parts[i] = new Volume(thispart);		
	}
	
	if (dsystem=='metric') { //reconvert to metric if needed 
		this.toMetric(); 
		eval(container+'.volume.toMetric()');
	}
	
	Containers.refresh();
	Containers.hilite(container);
	this.refresh();
}

Drink.prototype.refresh = function(){ 
		
	for (i=0;i<this.parts.length;i++) {		
		p = i + 1; 
			
		o = document.getElementById('parts'+p);
		o.innerHTML = (this.parts[i].value!=0)?smartRound(this.parts[i].value).toFixed(1):'';
		
		u = document.getElementById('unit'+p);	
    	u.innerHTML = (this.parts[i].value!=0)?this.parts[i].unit:'Splash of';
	}

}

Drink.prototype.toMetric = function(){
	for (i=0;i<this.parts.length;i++) this.parts[i].toMetric();
	this.refresh();
}

Drink.prototype.toUS = function(){
	for (i=0;i<this.parts.length;i++) this.parts[i].toUS();
	this.refresh();
}

function smartRound(num){	
	var result;
	var dec = num - Math.floor(num);
	
	if (num <= 0.5) {
		result = 0.5;
	} else if (dec <= 0.333) {	
		result = Math.floor(num);	
	} else if (dec > 0.333 && dec <= 0.666) {
		result = Math.floor(num) + 0.5;
	} else if (dec > 0.666) {	
		result = Math.ceil(num)	
	}		
	return result;
}


Containers = new Array();
Containers.system = 'us';
Containers.selected = '';

Containers.toMetric = function() { 
	if (this.system!='metric') 	for (i=0;i<this.length;i++)	this[i].volume.toMetric();
	this.system = 'metric';
	this.refresh();
	this.hilite(this.selected);
}

Containers.toUS = function() { 
	if (this.system!='us') 	for (i=0;i<this.length;i++)	this[i].volume.toUS();
	this.system = 'us';
	this.refresh();
	this.hilite(this.selected);
}

Containers.refresh = function (){ 
	for (i=0;i<this.length;i++){		
		eval('tmp = document.getElementById("'+this[i].name+'")');
		tmp.innerHTML = this[i].volume.value + " " + this[i].volume.unit;		
	} 
}

Containers.hilite = function (container){ 
	for (i=0;i<this.length;i++){
		if (this[i].name==container.toString()) document.getElementById(container).innerHTML = document.getElementById(container).innerHTML.toString().bold();
		this.selected = container;	
	}
}


function setMeasurement(sys){
	
    usImg = document.getElementById('use_us');
    metricImg = document.getElementById('use_metric');
    
	switch (sys){
		case 'us':
			usImg.src = usImg.src.replace('off','on');
			metricImg.src = metricImg.src.replace('on','off');			
			Containers.toUS();
			drink.toUS();
			break;
			
		case 'metric':
			usImg.src = usImg.src.replace('on','off');
			metricImg.src = metricImg.src.replace('off','on');			
			Containers.toMetric();
			drink.toMetric();
			break;		
	}
}