// Budget Calculator

/*

	Budget Calculator:	v2.0 *** Removed createElement('table') as IE didn't output the table for versions 7 down. Replaced with pargraph and label tags. ***
	Autor:				Warren Tucker
	Date Created:		01/07/08
	Useage:				For creating a simple budget calculator 


*/
var add = 0;
var numPerson = 0;
var numPersonValue = 0;
var numFields = 0;
var totalDiv = '';

function createBud(which,id,div){

totalDiv = div;
var checkBoxName = '';
var textBoxName = '';
var hidden = '';

var i = 0;
var n =0;
var count = 0;
for(m=0;m < content.length; m++){
	
	
	if(content[m] == which){
		count++;
	}
}

while(i < content.length){


if(content[i] == which){
	var text = content[i][which][0];
	text = text + ' &pound;'+content[i][which][1];
	if(content[i][which].length == 1){
		
			
			var text = "<span class='title'>"+content[i][which][0]+"</span>";	
		var par = document.createElement('p');
		var label = document.createElement('label');
		label.id = 'firstLabel';
		label.innerHTML = text;
		par.appendChild(label);
		document.getElementById(id).appendChild(par);
		
		
		
	}else{
		
		if(content[i][which].length == 3 || content[i][which].length == 4){
			
			
			
			checkBoxName = "check" + i;
			hidden = 'hidden' + i;
			textBoxName = "text" + i;
			var par = document.createElement('p');
			var label = document.createElement('label');
			
			var hiddenfield = document.createElement('input');
			hiddenfield.type = 'hidden';
			hiddenfield.id = hidden;
			hiddenfield.value = content[i][which][1];
			
			
			
			
			var checkbox = document.createElement('input');
			checkbox.type = 'checkbox';
			checkbox.id = checkBoxName;
			checkbox.name = content[i][which][0];
			checkbox.value = content[i][which][1];
			checkbox.onclick = new Function('budCal(this,"'+textBoxName+'","'+hidden+'","","'+totalDiv+'")');
			
			
				
			if(content[i][which][3] == 'group'){
				var textfield = document.createElement('input');
				
				textfield.id = textBoxName;
				textfield.type = 'text'
				textfield.value = 1;
				textfield.maxlength = 3;
				textfield.size = 3;
				textfield.onchange = new Function('budCal(document.getElementById("'+checkBoxName+'"),"'+textBoxName+'","'+hidden+'","group","'+totalDiv+'")');
				
				label.innerHTML = text;
				
				par.appendChild(label);
				par.appendChild(checkbox);
				par.appendChild(textfield);
				par.appendChild(hiddenfield);
				document.getElementById(id).appendChild(par);
				
				
				
			}
			
			if(content[i][which][2] == 'group'){
				checkBoxName = "check" + i;
				hidden = 'hidden' + i;
				textBoxName = "text" + i;
					var par = document.createElement('p');
				var label = document.createElement('label');
				
				var hiddenfield = document.createElement('input');
				hiddenfield.type = 'hidden';
				hiddenfield.id = hidden;
				hiddenfield.value = content[i][which][1];
				
				var checkbox = document.createElement('input');
				checkbox.type = 'checkbox';
				checkbox.id = checkBoxName;
				checkbox.name = content[i][which][0];
				checkbox.value = content[i][which][1];
				checkbox.onclick = new Function('budCal(this,"'+textBoxName+'","'+hidden+'","group","'+totalDiv+'")');
				
				
				
				label.innerHTML = text;
				
				par.appendChild(label);
				par.appendChild(checkbox);
				par.appendChild(hiddenfield);
				document.getElementById(id).appendChild(par);	
			}
			
			
			
			if(content[i][which][2] == 'textfield'){
				var textfield = document.createElement('input');
				
				textfield.id = textBoxName;
				textfield.type = 'text'
				textfield.value = 1;
				textfield.maxlength = 3;
				textfield.size = 3;
				textfield.onchange = new Function('budCal(document.getElementById("'+checkBoxName+'"),"'+textBoxName+'","'+hidden+'","","'+totalDiv+'")');
				
				label.innerHTML = text;
				
				par.appendChild(label);
				par.appendChild(checkbox);
				par.appendChild(textfield);
				par.appendChild(hiddenfield);
				document.getElementById(id).appendChild(par);
				
				
				
			}else{
				if(content[i][which][2] == 'group' || content[i][which][3] == 'group'){
				}else{
				alert('There is no textfield '+ content[i][which][2]);
				}
				
			}
			
			
		}else{
		
			checkBoxName = "check" + i;
			hidden = 'hidden' + i;
			textBoxName = "text" + i;
				var par = document.createElement('p');
			var label = document.createElement('label');
			
			var hiddenfield = document.createElement('input');
			hiddenfield.type = 'hidden';
			hiddenfield.id = hidden;
			hiddenfield.value = content[i][which][1];
			
			var checkbox = document.createElement('input');
			checkbox.type = 'checkbox';
			checkbox.id = checkBoxName;
			checkbox.name = content[i][which][0];
			checkbox.value = content[i][which][1];
			checkbox.onclick = new Function('budCal(this,"'+textBoxName+'","'+hidden+'","","'+totalDiv+'")');
			
			
			label.innerHTML = text;
				
				par.appendChild(label);
				par.appendChild(checkbox);
				par.appendChild(hiddenfield);
				document.getElementById(id).appendChild(par);
			
			
		}
		
	}
		
	numFields++;
	
}
	
	i++;
	
}





}
	

var group = 0;

function budCal(element,id,hidden,isgroup,displayDiv){
	
	var hiddenField = document.getElementById(hidden);

	
	
		
		for(i=0; i < numFields; i++){
			var textid = "text"+i;
			var checkid = 'check'+i;
			
			
			
				if(element.checked == true){
			
					if(isgroup == 'group'){
						
						if(group == 1){
						alert('Please select only one option at a time');
						element.checked = false;
						
						if(document.getElementById(displayDiv).innerHTML){
					
							document.getElementById(displayDiv).innerHTML = '';
						}
						add = checkFields(element,id);
				
						
					
						add = formatNumber(add,'2',',','.','','','','');
					
						
						var text = 'Total &pound;'+add;
						document.getElementById(displayDiv).innerHTML = text;
						
						break;
						}else{
							if(document.getElementById(id)){	
							if(parseFloat(document.getElementById(id).value) && parseFloat(document.getElementById(id).value) > 0){
								
								if(textid == id){
									numPerson = document.getElementById(id).value;
									numPersonValue = hiddenField.value * parseFloat(document.getElementById(id).value);
									
									add = checkFields(element,id);
								
									add = add + numPersonValue;
									if(document.getElementById(displayDiv).innerHTML){
								
										document.getElementById(displayDiv).innerHTML = '';
									}
									add = formatNumber(add,'2',',','.','','','','');
									var text = 'Total &pound;'+add;
									document.getElementById(displayDiv).innerHTML = text;
								}
							}else{
								alert('Please enter a number greater then 0');
								break;
							}
						}else{
							
							
						
								
							if(document.getElementById(displayDiv).innerHTML){
						
								document.getElementById(displayDiv).innerHTML = '';
							}
							
							add = checkFields(element,id);
							
							add = add + parseFloat(hiddenField.value);
							add = formatNumber(add,'2',',','.','','','','');
						
							
							var text = 'Total &pound;'+add;
							document.getElementById(displayDiv).innerHTML = text;
						
						
					
								
						
					}
							
						}
					group = 1;
				
					}else{
						if(document.getElementById(id)){	
							if(parseFloat(document.getElementById(id).value) && parseFloat(document.getElementById(id).value) > 0){
								
								if(textid == id){
									numPerson = document.getElementById(id).value;
									numPersonValue = hiddenField.value * parseFloat(document.getElementById(id).value);
									
									add = checkFields(element,id);
								
									add = add + numPersonValue;
									if(document.getElementById(displayDiv).innerHTML){
								
										document.getElementById(displayDiv).innerHTML = '';
									}
									add = formatNumber(add,'2',',','.','','','','');
									var text = 'Total &pound;'+add;
									document.getElementById(displayDiv).innerHTML = text;
								}
							}else{
								alert('Please enter a number greater then 0');
								break;
							}
						}else{
							
							
						
								
							if(document.getElementById(displayDiv).innerHTML){
						
								document.getElementById(displayDiv).innerHTML = '';
							}
							
							add = checkFields(element,id);
							
							add = add + parseFloat(hiddenField.value);
							add = formatNumber(add,'2',',','.','','','','')
						
							
							var text = 'Total &pound;'+add;
							document.getElementById(displayDiv).innerHTML = text;
						
						
					
								
						
					}
				}	
			}else{
			
	
				
				if(document.getElementById(id)){	
					if(parseFloat(document.getElementById(id).value) && parseFloat(document.getElementById(id).value) > 0){
						
						if(textid == id){
		
							add = checkFields(element,id);
	
							if(document.getElementById(displayDiv).innerHTML){
						
								document.getElementById(displayDiv).innerHTML = '';
							}
							add = formatNumber(add,'2',',','.','','','','')
							var text = 'Total &pound;'+add;
							document.getElementById(displayDiv).innerHTML = text;
						}
						group = 0;
					}else{
						alert('Please enter a number greater then 0');
						break;
					}
				}else{
				
						group = 0;
			
					
						if(document.getElementById(displayDiv).innerHTML){
					
							document.getElementById(displayDiv).innerHTML = '';
						}
						add = checkFields(element,id);
						add = formatNumber(add,'2',',','.','','','','')
					
						
						var text = 'Total &pound;'+add;
						document.getElementById(displayDiv).innerHTML = text;
			
			
		
					
			
			}
		}
	}
	
	

}
	
	
	

function checkFields(element,id){
var textId = '';
var checkId = '';	
var addFields = 0;
var addNumPerson = 0;

	for(i=0; i < numFields; i++){
		textId = "text"+i;
		checkId = "check"+i;
		hidden = "hidden"+i;
		
		if(textId != id){
			
			if(document.getElementById(checkId) && document.getElementById(checkId).checked == true){
				
				if(document.getElementById(textId)){
					
					addNumPerson = document.getElementById(hidden).value * document.getElementById(textId).value;
					
					addFields = parseFloat(addFields) + parseFloat(addNumPerson);
					
				}else{
					if(checkId != id){
					
						var elementValue =document.getElementById(hidden).value;
						
						addFields = parseFloat(addFields) + parseFloat(elementValue);	
						
						
					}
				}
			}
		}
	
	}
	
	return addFields;
}
// End Budget Calulator


// number formatting function
// copyright Stephen Chapman 24th March 2006, 10th February 2007
// permission to use this function is granted provided
// that this copyright notice is retained intact

function formatNumber(num,dec,thou,pnt,curr1,curr2,n1,n2) {
	var x = Math.round(num * Math.pow(10,dec));
	if (x >= 0) 
	n1=n2='';
	var y = (''+Math.abs(x)).split('');
	var z = y.length - dec; 
	if (z<0) 
	z--; 
	for(var i = z; i < 0; i++) 
	y.unshift('0');
	y.splice(z, 0, pnt); 
	if(y[0] == pnt) 
	y.unshift('0'); 
	while (z > 3) 
	{
		z-=3; 
		y.splice(z,0,thou);
	}
	var r = curr1+n1+y.join('')+n2+curr2;
	return r;
	}
	
/* Sliding Divs */

var slideInUse = new Array();

function Slide(objId, options) {
	this.obj = document.getElementById(objId);
	this.duration = 1;
	this.height = parseInt(this.obj.style.height);

	if(typeof options != 'undefined') { this.options = options; } else { this.options = {}; }
	if(this.options.duration) { this.duration = this.options.duration; }
		
	this.up = function() {
		this.curHeight = this.height;
		this.newHeight = '1';
		if(slideInUse[objId] != true) {
			var finishTime = this.slide();
			window.setTimeout("Slide('"+objId+"').finishup("+this.height+");",finishTime);
		}
	}
	
	this.down = function() {
		this.newHeight = this.height;
		this.curHeight = '1';
		if(slideInUse[objId] != true) {
			this.obj.style.height = '1px';
			this.obj.style.display = 'block';
			this.slide();
		}
	}
	
	this.slide = function() {
		slideInUse[objId] = true;
		var frames = 30 * duration; // Running at 30 fps

		var tIncrement = (duration*2000) / frames;
		tIncrement = Math.round(tIncrement);
		var sIncrement = (this.curHeight-this.newHeight) / frames;

		var frameSizes = new Array();
		for(var i=0; i < frames; i++) {
			if(i < frames/2) {
				frameSizes[i] = (sIncrement * (i/frames))*4;
			} else {
				frameSizes[i] = (sIncrement * (1-(i/frames)))*4;
			}
		}
		
		for(var i=0; i < frames; i++) {
			this.curHeight = this.curHeight - frameSizes[i];
			window.setTimeout("document.getElementById('"+objId+"').style.height='"+Math.round(this.curHeight)+"px';",tIncrement * i);
		}
		
		window.setTimeout("delete(slideInUse['"+objId+"']);",tIncrement * i);
		
		if(this.options.onComplete) {
			window.setTimeout(this.options.onComplete, tIncrement * (i-2));
		}
		
		return tIncrement * i;
	}
	
	this.finishup = function(height) {
		this.obj.style.display = 'none';
		this.obj.style.height = height + 'px';
	}
	
	this.toggle = function(){
	
		if(Math.round(this.curHeight) == this.height){
			this.up();
		}else{
			this.down();
		}
	}
	
	
	
	return this;
}
