// JavaScript Document

function updateCost()
{
	var master = getRadioValues();
	
	master = resolveConflicts(master);
	
	// Number of newsletters (sheets * num pages per newsletter)
	var numBooks = parseFloat(master['Quantity']['value']);
	var numSheets = parseFloat(numBooks * parseFloat(NumOfPages[master['NumOfPages']['value']]));
	//alert ('oldBooks = '+oldBooks+'; numBooks = '+numBooks);
	//alert ('oldSheets = '+oldSheets+'; numSheets = '+numSheets);
	
	var cost = 0.00;
	
	// Base Cost Update (quantity cost [by color choice] * size multiplier * paper type multiplier)
	var size = parseFloat(Costs['PageSize'][master['PageSize']['value']]);
	var type = parseFloat(Costs['PaperType'][master['PaperType']['value']]);
	var quan = parseFloat(Costs[master['ColorChoice']['value']][numBooks]);
	var mult = parseFloat(NumOfPages[master['NumOfPages']['value']]);
	//alert ('old size = '+size+'; type = '+type+'; quan = '+quan+'; mult = '+mult);
	cost += size*quan*type*mult;
	//alert ('cost = '+cost);
	
	// Folding (quantity * fold multiplier)
	var add = parseFloat(Costs['Fold'][master['Fold']['value']])*numSheets;
	//alert('fold subt = $'+subt+'; add = $'+add);
	cost += add;
	
	// Staples
	var add = parseFloat(Costs['Staple'][master['Staple']['value']])*numBooks;
	//alert('fold subt = $'+subt+'; add = $'+add);
	cost += add;
	
	// Seals
	var add = parseFloat(Costs['WaferSeal'][master['WaferSeal']['value']])*numBooks;
	//alert('fold subt = $'+subt+'; add = $'+add);
	cost += add;
	
	// Hard Copy Proof
	if (master['HardcopyProof']['value'] == 'y') cost += parseFloat(Costs['Proof']);
		
	if (master['RemitEnvelope']['value'] == 'y')
	{
		document.getElementById('EnvelopeBlock').style.display = 'block';
		cost += Envelope[master['EnvelopeType']['value']][numBooks];
		cost += Envelope[master['EnvelopeAttachment']['value']] * numBooks;
	}
	else document.getElementById('EnvelopeBlock').style.display = 'none';

	var costDisplay = document.getElementById('CostCalcAmnt');
	costDisplay.innerHTML = '$'+cost.toFixed(2);
}

function resolveConflicts(master)
{
	// get all the radio group elements that could be disabled
	for (var i = 0; i < radioNames.length; i++)
	{
		var group = document.getElementsByName(radioNames[i]);
		for(var j = 0; j < group.length; j++)
		{
			// enable all inputs
			group[j].disabled = false;
			var text = document.getElementById(group[j].name+'_'+group[j].value+'_Text');
			if (text != null)
			{
				// remove any added formatting
				text.style.fontStyle = 'normal';
				text.style.color = '#000000';
				// may need more style formatting
			}
		}
	}
	
	var myName = '';
	var names = Array();
	var check = Array();
	
	for (var i = 0; i < radioNames.length; i++)
	{
		myName = radioNames[i];
		switch (myName)
		{
			case 'ColorChoice':
				if (master[myName]['value'] == 'Black')
				{
					names.push('PaperType');
					if (check['PaperType'] != undefined) check['PaperType'].push('100GlossCover');
					else check['PaperType'] = Array('100GlossCover');
				}
				if (master[myName]['value'] == '2Color')
				{
					names.push('PaperType');
					if (check['PaperType'] != undefined) check['PaperType'].push('100GlossCover');
					else check['PaperType'] = Array('100GlossCover');
				}
				if (master[myName]['value'] == '4Color')
				{
					names.push('PaperType');
					if (check['PaperType'] != undefined) check['PaperType'].push('80MatteCover');
					else check['PaperType'] = Array('80MatteCover');
				}
			break;
			case 'PaperType':
				if (master[myName]['value'] == '80MatteCover')
				{
					names.push('ColorChoice');
					if (check['ColorChoice'] != undefined) check['ColorChoice'].push('4Color');
					else check['ColorChoice'] = Array('4Color');
				}
				if (master[myName]['value'] == '100GlossCover')
				{
					names.push('ColorChoice');
					if (check['ColorChoice'] != undefined) check['ColorChoice'].push('Black');
					else check['ColorChoice'] = Array('Black');
					check['ColorChoice'].push('2Color');
				}
			break;
			case 'NumOfPages':
				if (master[myName]['value'] == '1')
				{
					names.push('Staple');
					if (check['Staple'] != undefined) check['Staple'].push('y');
					else check['Staple'] = Array('y');
					
					names.push('Fold');
					if (check['Fold'] != undefined) check['Fold'].push('Quarters');
					else check['Fold'] = Array('Quarters');
				}
				if (master[myName]['value'] == '2')
				{
					names.push('Staple');
					if (check['Staple'] != undefined) check['Staple'].push('n');
					else check['Staple'] = Array('n');
					names.push('Fold');
					if (check['Fold'] != undefined) check['Fold'].push('None');
					else check['Fold'] = Array('None');
				}
				if (master[myName]['value'] == '3')
				{
					names.push('Staple');
					if (check['Staple'] != undefined) check['Staple'].push('n');
					else check['Staple'] = Array('n');
					names.push('Fold');
					if (check['Fold'] != undefined) check['Fold'].push('None');
					else check['Fold'] = Array('None');
				}
			break;
			case 'Staple':
				if (master[myName]['value'] == 'y')
				{
					names.push('Fold');
					if (check['Fold'] != undefined) check['Fold'].push('None');
					else check['Fold'] = Array('None');
					check['Fold'].push('Thirds');
				}
				if (master[myName]['value'] == 'n')
				{
					names.push('EnvelopeAttachment');
					if (check['EnvelopeAttachment'] != undefined) check['EnvelopeAttachment'].push('Staple');
					else check['EnvelopeAttachment'] = Array('Staple');
					names.push('Fold');
					if (check['Fold'] != undefined) check['Fold'].push('Quarters');
					else check['Fold'] = Array('Quarters');
				}
			break;
			case 'Fold':
				if (master[myName]['value'] == 'Half')
				{
				}
				if (master[myName]['value'] == 'Quarters')
				{
					names.push('Staple');
					if (check['Staple'] != undefined) check['Staple'].push('n');
					else check['Staple'] = Array('n');
					names.push('NumOfPages');
					if (check['NumOfPages'] != undefined) check['NumOfPages'].push('1');
					else check['NumOfPages'] = Array('1');
				}
				if (master[myName]['value'] == 'Thirds')
				{
					names.push('Staple');
					if (check['Staple'] != undefined) check['Staple'].push('y');
					else check['Staple'] = Array('y');
					names.push('EnvelopeAttachment');
					if (check['EnvelopeAttachment'] != undefined) check['EnvelopeAttachment'].push('Staple');
					else check['EnvelopeAttachment'] = Array('Staple');
				}
				if (master[myName]['value'] == 'None')
				{
					names.push('Staple');
					if (check['Staple'] != undefined) check['Staple'].push('y');
					else check['Staple'] = Array('y');
					
					names.push('EnvelopeAttachment');
					if (check['EnvelopeAttachment'] != undefined) check['EnvelopeAttachment'].push('Staple');
					else check['EnvelopeAttachment'] = Array('Staple');
					check['EnvelopeAttachment'].push('Insert');
					
					names.push('WaferSeal');
					if (check['WaferSeal'] != undefined) check['WaferSeal'].push('y');
					else check['WaferSeal'] = Array('y');
				}
			break;
			case 'RemitEnvelope':
				if (master[myName]['value'] == 'n')
				{
					names.push('EnvelopeType');
					if (check['EnvelopeType'] != undefined) check['EnvelopeType'].push('Black1');
					else check['EnvelopeType'] = Array('Black1');
					check['EnvelopeType'].push('Black2');
					check['EnvelopeType'].push('2Color1');
					check['EnvelopeType'].push('2Color2');
					
					names.push('EnvelopeAttachment');
					if (check['EnvelopeAttachment'] != undefined) check['EnvelopeAttachment'].push('Staple');
					else check['EnvelopeAttachment'] = Array('Staple');
					check['EnvelopeAttachment'].push('Insert');
					check['EnvelopeAttachment'].push('Separate');
				}
			break;
			case 'EnvelopeAttachment':
				if (master['RemitEnvelope']['value'] == 'y')
				{
					if (master[myName]['value'] == 'Staple')
					{
						names.push('Fold');
						if (check['Fold'] != undefined) check['Fold'].push('None');
						else check['Fold'] = Array('None');
						check['Fold'].push('Thirds');
						names.push('Staple');
						if (check['Staple'] != undefined) check['Staple'].push('n');
						else check['Staple'] = Array('n');
					}
					if (master[myName]['value'] == 'Insert')
					{
						names.push('Fold');
						if (check['Fold'] != undefined) check['Fold'].push('None');
						else check['Fold'] = Array('None');
					}
				}
			break;
			case 'WaferSeal':
				if (master[myName]['value'] == 'y')
				{
					names.push('Fold');
					if (check['Fold'] != undefined) check['Fold'].push('None');
					else check['Fold'] = Array('None');
				}
			break;
			default:
			break;
		}
	}
	
	if (names.length > 0)
	{
		for (var i = 0; i < names.length; i++)
		{
			var name = names[i];
			var values = check[name];
			
			var group = document.getElementsByName(name);
			for (var j = 0; j < group.length; j++)
			{
				for (var k = 0; k < values.length; k++)
				{
					if (group[j].value == values[k])
					{
						group[j].disabled = true;
						var text = document.getElementById(group[j].name+'_'+group[j].value+'_Text');
						if (text != null)
						{
							text.style.fontStyle = 'italic';
							text.style.color = '#999999';
						}
					}
				}
			}
		}	
	}
	
	var changed = false;
	for (var i = 0; i < radioNames.length; i++)
	{
		var group = document.getElementsByName(radioNames[i]);
		for(var j = 0; j < group.length; j++)
		{
			// enable all inputs
			if (group[j].disabled && group[j].checked)
			{
				for (var k=0; k < group.length; k++)
				{
					//alert(radioNames[i]+': '+k);
					if (!group[k].disabled)
					{
						//alert('changing '+group[k].name+' to '+group[k].value);
						group[k].checked = true;
						changed = true;
						break;
					}
				}
			}
		}
	}
	
	if (changed) master = resolveConflicts(getRadioValues());
	
	return(master);
}

function checkSpecificConflict(groupName,valueToCheck)
{
	var radioGroup = document.getElementsByName(groupName);
	for (var i = 0; i < radioGroup.length; i++)
	{
		if (radioGroup[i].checked == true && radioGroup[i].value == valueToCheck) return(false);
	}
	return (true);
}

function getSelectedValue(radioGroup)
{
	for (var i = 0; i < radioGroup.length; i++)
	{
		if (radioGroup[i].checked == true) return(radioGroup[i].value);
	}
}

function getRadioValues()
{
	// returns a master array of type:
	// radio group name => array
		// 'value' => the selected value of the radio group (new value)
		// 'hidden' => reference to "Current_NAME" hidden input
		// 'current' => current value (old value)
		// 'changed' => boolean true if this was changed (the value of the current input does not match the selected value)
		
	var new_master = Array();
	for (var i = 0; i < radioNames.length; i++)
	{
		var myName = radioNames[i];
		var subArray = Array();
		subArray['value'] = getSelectedValue(document.getElementsByName(myName));
		new_master[myName] = subArray;
	}
	return (new_master);
}

function setInitialValues()
{
	// check all default radios
	for (var i = 0; i < radioNames.length; i++)
	{
		var name = radioNames[i];
		var group = document.getElementsByName(name);
		for (var j = 0; j < group.length; j++)
		{
			if (group[j].value == initialValues[name])
			{
				group[j].checked = true;
			}
			// assign the updateCost() function to every radio's onclick event
			group[j].onclick = updateCost;
		}
	}
	updateCost();
	
	// initialize the floating cost box
	initCostBox();
}