// Simple Javascript validation/calculation engine
// 2009-03-09 - Joel Derksen	- Initial creation

var formName = 'customform';
var grandTotalId = 'CEL_0_121971';
var retrigger = false;
var retriggerInProgress = false;
var defaultsActivated = false;
// Enter each section for calculation here. Each section has it's own pair of braces {}
// 'total_id':<id of textbox for total; set to '' if there is no total box>
// 'options':[] (array of JSON objects)
//   Each option should have the 'tag' and 'amount' attributes, designating the HTML tag of the element, and the numerical
//   total to add if that element is selected
//   All additional attributes will be used to identify the element (you can use any HTML attribute the element possesses,
//   e.g. name, value, type, id, etc.)
var sections = [
	{
		'total_id':'CEL_0_121937',
		'options':[
			{ 'tag':'input',	'name':'CEL_0_121925',	'value':'(Poets) Graduate Credit ($730)',									'amount':730 },
			{ 'tag':'input',	'name':'CEL_0_121925',	'value':'(Poets) Undergraduate Credit ($730)',								'amount':730 },
			{ 'tag':'input',	'name':'CEL_0_121925',	'value':'(Poets) Training ($535)',											'amount':535 },
			{ 'tag':'input',	'name':'CEL_0_121925',	'value':'(Cree) Undergraduate Credit ($730)',								'amount':730 },
			{ 'tag':'input',	'name':'CEL_0_121925',	'value':'(Cree) Training ($535)',											'amount':535 },
			{ 'tag':'input',	'name':'CEL_0_121925',	'value':'(Food) Undergraduate Credit ($730)',								'amount':730 },
			{ 'tag':'input',	'name':'CEL_0_121925',	'value':'(Food) Training ($535)',											'amount':535 },
			{ 'tag':'input',	'name':'CEL_0_121925',	'value':'None',		'isDefault':true,											'amount':0,
				'constraints':[
					{ 'action':'affectOthers',	'cond':'unchecked',	'otherIdentifier':"[name=CEL_0_122575][value=Lunch]",	'otherAttr':'checked=checked' },
					{ 'action':'affectOthers',  'cond':'checked', 'otherIdentifier':
						"[name=CEL_0_122615],[name=CEL_0_122617],[name=CEL_0_122569],[name=CEL_0_122571],[name=CEL_0_122573],[name=CEL_0_122575],"+
						"[name=CEL_0_122577]",	'otherAttr':'checked=<blank>' },
					{ 'action':'alterOption',	'cond':'unchecked',	'sectionTotalId':'CEL_0_121963',	'ids':{'name':'CEL_0_122575', 'value':'Lunch'},	'set':'amount=0'},
					{ 'action':'alterOption',	'cond':'checked',	'sectionTotalId':'CEL_0_121963',	'ids':{'name':'CEL_0_122575', 'value':'Lunch'},	'set':'amount=8.80'}
				]
			},
			
			
			{ 'tag':'input',	'name':'CEL_0_121927',	'value':'(Change) Undergraduate Credit ($730)',								'amount':730 },
			{ 'tag':'input',	'name':'CEL_0_121927',	'value':'(Change) Training ($535)',											'amount':535 },
			{ 'tag':'input',	'name':'CEL_0_121927',	'value':'(Skills) Undergraduate Credit ($730)',								'amount':730 },
			{ 'tag':'input',	'name':'CEL_0_121927',	'value':'(Skills) Training ($535)',											'amount':535 },
			{ 'tag':'input',	'name':'CEL_0_121927',	'value':'(Mennonite) Graduate Credit ($730)',								'amount':730 },
			{ 'tag':'input',	'name':'CEL_0_121927',	'value':'(Mennonite) Undergraduate Credit ($730)',							'amount':730 },
			{ 'tag':'input',	'name':'CEL_0_121927',	'value':'(Mennonite) Training ($535)',										'amount':535 },
			{ 'tag':'input',	'name':'CEL_0_121927',	'value':'None',		'isDefault':true,											'amount':0,
				'constraints':[
					{ 'action':'affectOthers',	'cond':'unchecked',	'otherIdentifier':"[name=CEL_0_122585][value=Lunch]",	'otherAttr':'checked=checked' },
					{ 'action':'affectOthers',  'cond':'checked', 'otherIdentifier':
						"[name=CEL_0_122579],[name=CEL_0_122581],[name=CEL_0_122583],[name=CEL_0_122585],[name=CEL_0_122587]", 'otherAttr':'checked=<blank>' },
					{ 'action':'alterOption',	'cond':'unchecked',	'sectionTotalId':'CEL_0_121963',	'ids':{'name':'CEL_0_122585', 'value':'Lunch'},	'set':'amount=0'},
					{ 'action':'alterOption',	'cond':'checked',	'sectionTotalId':'CEL_0_121963',	'ids':{'name':'CEL_0_122585', 'value':'Lunch'},	'set':'amount=8.80'}
				]
			},


			{ 'tag':'input',	'name':'CEL_0_122567',	'value':'(Justice) Undergraduate Credit ($730)',							'amount':730 },
			{ 'tag':'input',	'name':'CEL_0_122567',	'value':'(Justice) Training ($535)',										'amount':535 },
			{ 'tag':'input',	'name':'CEL_0_122567',	'value':'(Congregational) Graduate Credit ($730)',							'amount':730 },
			{ 'tag':'input',	'name':'CEL_0_122567',	'value':'(Congregational) Undergraduate Credit ($730)',						'amount':730 },
			{ 'tag':'input',	'name':'CEL_0_122567',	'value':'(Congregational) Training ($535)',									'amount':535 },
			{ 'tag':'input',	'name':'CEL_0_122567',	'value':'None',		'isDefault':true,											'amount':0,
				'constraints':[
					{ 'action':'affectOthers',	'cond':'unchecked',	'otherIdentifier':"[name=CEL_0_122593][value=Lunch]",	'otherAttr':'checked=checked' },
					{ 'action':'affectOthers',  'cond':'checked', 'otherIdentifier':
						"[name=CEL_0_122589],[name=CEL_0_122591],[name=CEL_0_122593],[name=CEL_0_122595],[name=CEL_0_122597],[name=CEL_0_122627],"+
						"[name=CEL_0_122629]", 'otherAttr':'checked=<blank>' },
					{ 'action':'alterOption',	'cond':'unchecked',	'sectionTotalId':'CEL_0_121963',	'ids':{'name':'CEL_0_122593', 'value':'Lunch'},	'set':'amount=0'},
					{ 'action':'alterOption',	'cond':'checked',	'sectionTotalId':'CEL_0_121963',	'ids':{'name':'CEL_0_122593', 'value':'Lunch'},	'set':'amount=8.80'}
				]
			}
		]
	},
	{
		'total_id':'CEL_0_121963',
		'options':[
			{ 'tag':'input',	'name':'CEL_0_122615',	'value':'Breakfast',				'amount':5.50 },
			{ 'tag':'input',	'name':'CEL_0_122615',	'value':'Lunch',					'amount':8.80 },
			{ 'tag':'input',	'name':'CEL_0_122615',	'value':'Supper',					'amount':11.50 },

			{ 'tag':'input',	'name':'CEL_0_122617',	'value':'Breakfast',				'amount':5.50 },
			{ 'tag':'input',	'name':'CEL_0_122617',	'value':'Lunch',					'amount':8.80 },
			{ 'tag':'input',	'name':'CEL_0_122617',	'value':'Supper',					'amount':11.50 },

			{ 'tag':'input',	'name':'CEL_0_122569',	'value':'Breakfast',				'amount':5.50 },
			{ 'tag':'input',	'name':'CEL_0_122569',	'value':'Lunch',					'amount':8.80 },
			{ 'tag':'input',	'name':'CEL_0_122569',	'value':'Supper',					'amount':11.50 },

			{ 'tag':'input',	'name':'CEL_0_122571',	'value':'Breakfast',				'amount':5.50 },
			{ 'tag':'input',	'name':'CEL_0_122571',	'value':'Lunch',					'amount':8.80 },
			{ 'tag':'input',	'name':'CEL_0_122571',	'value':'Supper',					'amount':11.50 },

			{ 'tag':'input',	'name':'CEL_0_122573',	'value':'Breakfast',				'amount':5.50 },
			{ 'tag':'input',	'name':'CEL_0_122573',	'value':'Lunch',					'amount':8.80 },
			{ 'tag':'input',	'name':'CEL_0_122573',	'value':'Supper',					'amount':11.50 },

			{ 'tag':'input',	'name':'CEL_0_122575',	'value':'Breakfast',				'amount':5.50 },
			{ 'tag':'input',	'name':'CEL_0_122575',	'value':'Lunch',					'amount':8.80 },
			{ 'tag':'input',	'name':'CEL_0_122575',	'value':'Supper',					'amount':11.50 },

			{ 'tag':'input',	'name':'CEL_0_122577',	'value':'Breakfast',				'amount':5.50 },
			{ 'tag':'input',	'name':'CEL_0_122577',	'value':'Lunch',					'amount':8.80 },
			{ 'tag':'input',	'name':'CEL_0_122577',	'value':'Supper',					'amount':11.50 },
			
			{ 'tag':'input',	'name':'CEL_0_122619',	'value':'Breakfast',				'amount':5.50,
				constraints:[
					{ 'action':'uncheck',	'cond':'attr "[name=\'CEL_0_121925\'][value=\'None\'],[name=\'CEL_0_121927\'][value=\'None\']" all checked C:true' }
				] },
			{ 'tag':'input',	'name':'CEL_0_122619',	'value':'Lunch',					'amount':8.80,
				constraints:[
					{ 'action':'uncheck',	'cond':'attr "[name=\'CEL_0_121925\'][value=\'None\'],[name=\'CEL_0_121927\'][value=\'None\']" all checked C:true' }
				] },
			{ 'tag':'input',	'name':'CEL_0_122619',	'value':'Supper',					'amount':11.50,
				constraints:[
					{ 'action':'uncheck',	'cond':'attr "[name=\'CEL_0_121925\'][value=\'None\'],[name=\'CEL_0_121927\'][value=\'None\']" all checked C:true' }
				] },

			{ 'tag':'input',	'name':'CEL_0_122621',	'value':'Breakfast',				'amount':5.50,
				constraints:[
					{ 'action':'uncheck',	'cond':'attr "[name=\'CEL_0_121925\'][value=\'None\'],[name=\'CEL_0_121927\'][value=\'None\']" all checked C:true' }
				] },
			{ 'tag':'input',	'name':'CEL_0_122621',	'value':'Lunch',					'amount':8.80,
				constraints:[
					{ 'action':'uncheck',	'cond':'attr "[name=\'CEL_0_121925\'][value=\'None\'],[name=\'CEL_0_121927\'][value=\'None\']" all checked C:true' }
				] },
			{ 'tag':'input',	'name':'CEL_0_122621',	'value':'Supper',					'amount':11.50,
				constraints:[
					{ 'action':'uncheck',	'cond':'attr "[name=\'CEL_0_121925\'][value=\'None\'],[name=\'CEL_0_121927\'][value=\'None\']" all checked C:true' }
				] },			

			{ 'tag':'input',	'name':'CEL_0_122579',	'value':'Breakfast',				'amount':5.50 },
			{ 'tag':'input',	'name':'CEL_0_122579',	'value':'Lunch',					'amount':8.80 },
			{ 'tag':'input',	'name':'CEL_0_122579',	'value':'Supper',					'amount':11.50 },

			{ 'tag':'input',	'name':'CEL_0_122581',	'value':'Breakfast',				'amount':5.50 },
			{ 'tag':'input',	'name':'CEL_0_122581',	'value':'Lunch',					'amount':8.80 },
			{ 'tag':'input',	'name':'CEL_0_122581',	'value':'Supper',					'amount':11.50 },

			{ 'tag':'input',	'name':'CEL_0_122583',	'value':'Breakfast',				'amount':5.50 },
			{ 'tag':'input',	'name':'CEL_0_122583',	'value':'Lunch',					'amount':8.80 },
			{ 'tag':'input',	'name':'CEL_0_122583',	'value':'Supper',					'amount':11.50 },

			{ 'tag':'input',	'name':'CEL_0_122585',	'value':'Breakfast',				'amount':5.50 },
			{ 'tag':'input',	'name':'CEL_0_122585',	'value':'Lunch',					'amount':8.80 },
			{ 'tag':'input',	'name':'CEL_0_122585',	'value':'Supper',					'amount':11.50 },

			{ 'tag':'input',	'name':'CEL_0_122587',	'value':'Breakfast',				'amount':5.50 },
			{ 'tag':'input',	'name':'CEL_0_122587',	'value':'Lunch',					'amount':8.80 },
			{ 'tag':'input',	'name':'CEL_0_122587',	'value':'Supper',					'amount':11.50 },

			{ 'tag':'input',	'name':'CEL_0_122623',	'value':'Breakfast',				'amount':5.50,
				constraints:[
					{ 'action':'uncheck',	'cond':'attr "[name=\'CEL_0_121927\'][value=\'None\'],[name=\'CEL_0_122567\'][value=\'None\']" all checked C:true' }
				] },
			{ 'tag':'input',	'name':'CEL_0_122623',	'value':'Lunch',					'amount':8.80,
				constraints:[
					{ 'action':'uncheck',	'cond':'attr "[name=\'CEL_0_121927\'][value=\'None\'],[name=\'CEL_0_122567\'][value=\'None\']" all checked C:true' }
				] },
			{ 'tag':'input',	'name':'CEL_0_122623',	'value':'Supper',					'amount':11.50,
				constraints:[
					{ 'action':'uncheck',	'cond':'attr "[name=\'CEL_0_121927\'][value=\'None\'],[name=\'CEL_0_122567\'][value=\'None\']" all checked C:true' }
				] },

			{ 'tag':'input',	'name':'CEL_0_122625',	'value':'Breakfast',				'amount':5.50,
				constraints:[
					{ 'action':'uncheck',	'cond':'attr "[name=\'CEL_0_121927\'][value=\'None\'],[name=\'CEL_0_122567\'][value=\'None\']" all checked C:true' }
				] },
			{ 'tag':'input',	'name':'CEL_0_122625',	'value':'Lunch',					'amount':8.80,
				constraints:[
					{ 'action':'uncheck',	'cond':'attr "[name=\'CEL_0_121927\'][value=\'None\'],[name=\'CEL_0_122567\'][value=\'None\']" all checked C:true' }
				] },
			{ 'tag':'input',	'name':'CEL_0_122625',	'value':'Supper',					'amount':11.50,
				constraints:[
					{ 'action':'uncheck',	'cond':'attr "[name=\'CEL_0_121927\'][value=\'None\'],[name=\'CEL_0_122567\'][value=\'None\']" all checked C:true' }
				] },

			{ 'tag':'input',	'name':'CEL_0_122589',	'value':'Breakfast',				'amount':5.50 },
			{ 'tag':'input',	'name':'CEL_0_122589',	'value':'Lunch',					'amount':8.80 },
			{ 'tag':'input',	'name':'CEL_0_122589',	'value':'Supper',					'amount':11.50 },

			{ 'tag':'input',	'name':'CEL_0_122591',	'value':'Breakfast',				'amount':5.50 },
			{ 'tag':'input',	'name':'CEL_0_122591',	'value':'Lunch',					'amount':8.80 },
			{ 'tag':'input',	'name':'CEL_0_122591',	'value':'Supper',					'amount':11.50 },

			{ 'tag':'input',	'name':'CEL_0_122593',	'value':'Breakfast',				'amount':5.50 },
			{ 'tag':'input',	'name':'CEL_0_122593',	'value':'Lunch',					'amount':8.80 },
			{ 'tag':'input',	'name':'CEL_0_122593',	'value':'Supper',					'amount':11.50 },

			{ 'tag':'input',	'name':'CEL_0_122595',	'value':'Breakfast',				'amount':5.50 },
			{ 'tag':'input',	'name':'CEL_0_122595',	'value':'Lunch',					'amount':8.80 },
			{ 'tag':'input',	'name':'CEL_0_122595',	'value':'Supper',					'amount':11.50 },

			{ 'tag':'input',	'name':'CEL_0_122597',	'value':'Breakfast',				'amount':5.50 },
			{ 'tag':'input',	'name':'CEL_0_122597',	'value':'Lunch',					'amount':8.80 },
			{ 'tag':'input',	'name':'CEL_0_122597',	'value':'Supper',					'amount':11.50 },

			{ 'tag':'input',	'name':'CEL_0_122627',	'value':'Breakfast',				'amount':5.50 },
			{ 'tag':'input',	'name':'CEL_0_122627',	'value':'Lunch',					'amount':8.80 },
			{ 'tag':'input',	'name':'CEL_0_122627',	'value':'Supper',					'amount':11.50 },

			{ 'tag':'input',	'name':'CEL_0_122629',	'value':'Breakfast',				'amount':5.50 },
			{ 'tag':'input',	'name':'CEL_0_122629',	'value':'Lunch',					'amount':8.80 },
			{ 'tag':'input',	'name':'CEL_0_122629',	'value':'Supper',					'amount':11.50 }
		]
	},
	{
		'total_id':'CEL_0_122613',
		'options':[
			{ 'tag':'input',	'name':'CEL_0_122603',	'amount':29.50 },
			{ 'tag':'input',	'name':'CEL_0_122605',	'amount':41.50 }
		]
	},
	{
		'total_id':'',
		'options':[
			{ 'tag':'input',	'name':'CEL_0_121967',										'amount':50,
				'constraints':[
					{ 'action':'check',		'cond':'date after 2010-04-01' },
					{ 'action':'uncheck',	'cond':'attr "[name=\'CEL_0_121925\'][value*=\'(Arts)\']" any checked C:true' },
					{ 'action':'disable',	'cond':'always' }
				]
			},
			{ 'tag':'input',	'name':'SKIP_CART',											'amount':0,
				'constraints':[
					{ 'action':'value',		'cond':'attr "[name=\'CEL_0_122009\'][value*=\'online\']" any checked C:true', 'value':'0' },
					{ 'action':'value',		'cond':'attr "[name=\'CEL_0_122009\'][value*=\'online\']" any checked C:false', 'value':'1' }
				]
			},
/* 			{ 'tag':'input',	'name':'CEL_0_122009',										'amount':0 }, */
			{ 'tag':'input',	'name':'CEL_0_122599',	'value':'I will not purchase on-campus meals',
				'constraints':[
					{ 'action':'affectOthers',	'cond':'checked',	'otherIdentifier':"[value=Breakfast],[value=Lunch],[value=Supper]",	'otherAttr':'checked=<blank>,disabled=disabled' }/*
,
					{ 'action':'affectOthers',	'cond':'unchecked',	'otherIdentifier':"[value=Breakfast],[value=Lunch],[value=Supper]",	'otherAttr':'disabled=<blank>' }
*/
				]
			},
			{ 'tag':'input',	'name':'CEL_0_122599',	'value':'I will purchase on-campus meals',
				'constraints':[
					{ 'action':'affectOthers',	'cond':'checked',	'otherIdentifier':"[value=Breakfast],[value=Lunch],[value=Supper]",	'otherAttr':'disabled=<blank>' }/*
,
					{ 'action':'affectOthers',	'cond':'unchecked',	'otherIdentifier':"[value=Breakfast],[value=Lunch],[value=Supper]",	'otherAttr':'checked=<blank>,disabled=disabled' }
*/
				]
			},
			{ 'tag':'input',	'name':'CEL_0_122607',
				'constraints':[
				{ 'action':'affectOthers',	'cond':'checked',	'otherIdentifier':"#CEL_0_122603,#CEL_0_122605",	'otherAttr':'value=<blank>,disabled=disabled' },
					{ 'action':'affectOthers',	'cond':'unchecked',	'otherIdentifier':"#CEL_0_122603,#CEL_0_122605",	'otherAttr':'disabled=<blank>' }
				]
			}
		]
	}
];

var attachedEvents = false;
var calculationInProgress = false;

function calculateCosts()
{	
	if(calculationInProgress) return;
	
	calculationInProgress = true;
	var grandTotal = 0;
	
	for(var i = 0; i < sections.length; i++)
	{
		if(instid)
			sections[i].total_id = sections[i].total_id.replace(/_0_/, '_' + instid + '_');
		
		var totalBox = (sections[i].total_id.length > 0 ? $('#' + sections[i].total_id) : '');
		var idString;
		var o;
		var option;
		var total = 0;
		
		if(totalBox) totalBox.attr('disabled', 'disabled');
		
		for(var j = 0; j < sections[i].options.length; j++)
		{
			o = sections[i].options[j];
			
			idString = o.tag;
			
			for(var k in o)
			{
				if(k == 'tag' || k == 'amount' || k == 'constraints' || k == 'isDefault') continue;
				
				if(instid)
					eval('o.' + k + ' = o.' + k + '.replace(/_0_/, "_" + instid + "_");');
					
				idString += '[' + k + '="' + eval('o.' + k) + '"]';
			}
			
			option = $(idString);
			
			if(!defaultsActivated && o.isDefault) {
				option.attr('checked', 'checked');
			}
			
			if(!attachedEvents)
			{
				option.blur(calculateCosts);
				option.keyup(calculateCosts);
				option.click(calculateCosts);
			}
						
			if(o.constraints && o.constraints.length > 0)
			{
				var c;
				for(var k = 0; k < o.constraints.length; k++)
				{
					c = o.constraints[k];

					if(evaluateCondition(c.cond, option))
					{
						switch(c.action)
						{
							case 'disable':
								option.attr('disabled', 'disabled');
								break;
							case 'enable':
								option.attr('disabled', '');
								break;
							case 'check':
								option.attr('checked', 'checked');
								break;
							case 'uncheck':
								option.attr('checked', '');
								break;
							case 'hide':
								option.hide();
								break;
							case 'show':
								option.show();
								break;
							case 'value':
								option.val(c.value);
								break;
							case 'affectOthers':
								affectOthers(c.otherIdentifier, c.otherAttr);
								break;
							case 'alterOption':
								alterOption(c.sectionTotalId, c.ids, c.set);
								break;
						}
					}
				}
			}
			
			switch(option.attr('type'))
			{
				case 'radio':
				case 'checkbox':
					if(option.attr('checked') && /^[0-9.]+$/.test(o.amount)) {
						// Reload object in case it changed
						o = sections[i].options[j];

						total += o.amount;
					}
					break;
				case 'text':
				case 'hidden':
					if(!isNaN(option.val()) && /^[0-9]+$/.test(option.val()))
						total += parseFloat(option.val()) * o.amount;
					break;
			}

		}
		
		if(totalBox) totalBox.val('$' + total.toFixed(2));
		grandTotal += total;
	}
	
	if(instid)
		grandTotalId = grandTotalId.replace(/_0_/, '_' + instid + '_');
	
	$('#' + grandTotalId).attr('disabled', 'disabled').val('$' + grandTotal.toFixed(2));
	$('#pass_value').val(grandTotal.toFixed(2));
	
	if(!attachedEvents) $('form[name="' + formName + '"]').submit(formSubmit);
		
	attachedEvents = true;
	calculationInProgress = false;
	defaultsActivated = true;
	
	if(retrigger) {
		if(!retriggerInProgress) {
			retrigger = false;
			retriggerInProgress = true;
			setTimeout('calculateCosts();', 100);
		}
		else {
			retrigger = false
			retriggerInProgress = false;
		}
	}
}

function evaluateCondition(cond, option)
{
	var tokens = cond.split(' ');
	
	var t = tokens.shift();
	
	switch(t)
	{
		case 'date':
			return evaluateDateCond(tokens);
		case 'attr':
			return evaluateAttrCond(tokens);
		case 'checked':
			return option.attr('checked');
		case 'unchecked':
			return !option.attr('checked');
		case 'always':
			return true;
	}
}

function evaluateDateCond(tokens)
{
	var op = tokens.shift();
	var dStr = tokens.join(' ');

	var input = Date.fromString(dStr);
		
	var now = new Date();
		
	switch(op)
	{
		case 'after':
			return (now > input);
		case 'before':
			return (now < input);
		case 'equal':
			return (now == input);
		case 'eqorafter':
			return (now >= input);
		case 'eqorbefore':
			return (now <= input);
	}
}

function evaluateAttrCond(tokens)
{
	var idStr = tokens.shift();
	
	if(idStr.charAt(0) == '"')
	{
		while(idStr.charAt(idStr.length - 1) != '"' && tokens.length > 0)
			idStr += ' ' + tokens.shift();
			
		idStr = idStr.substr(1, idStr.length - 2);
	}
	
	if(instid)
		idStr = idStr.replace(/_0_/g, '_' + instid + '_');

	var anyall = tokens.shift();
	if(anyall != 'all' && anyall != 'any')
		anyall = 'any';
		
	var attribute = tokens.shift();
	
	var value = '';
	
	while(tokens.length > 0)
		value += (value.length > 0 ? ' ' : '') + tokens.shift();
		
	var command = false;
	
	if(value.substr(0, 2) == 'C:')
	{
		command = true;
		value = value.substring(2);
	}
	
	var retVal = (anyall == 'any' ? false : true);
	
	$(idStr).each(function(i) {
		if(anyall == 'any' && $(this).attr(attribute) == (command ? eval(value) : value))
			retVal = true;
		else if(anyall == 'all' && $(this).attr(attribute) != (command ? eval(value) : value))
			retVal = false;
	});
	
	return retVal;
}

function affectOthers(id, attr)
{
	var ids = id.split(',');
	var idString = 'input' + ids.join(',input');

	var o = $(idString);
/* 	alert('id = ' + id + "\n" + 'idString = ' + idString + "\n" + o + '; ' + o.attr('id')); */
	var attrs = attr.split(',');
	var tmp;
	for(var a = 0; a < attrs.length; a++) {
		tmp = attrs[a].split('=');

		if(tmp[1] == '<blank>') tmp[1] = '';
		
		o.attr(tmp[0], tmp[1]);
	}
	
	retrigger = true;
}

function alterOption(totalId, ids, set)
{
	var sIn = -1;
	var oIn = -1;
	
	for(var i = 0; i < sections.length; i++) {
		if(sections[i].total_id == totalId)
			sIn = i;
/* 			break; */
	}
	
	if(sIn < 0)
		return;
		
	for(var i = 0; i < sections[sIn].options.length; i++) {
		var match = true;
		
		for(var j in ids) {
			if(eval('sections[sIn].options[i].' + j + ' != ids.' + j))
				match = false;
		}
		
		if(match) {
			oIn = i;
/* 			break; */
		}
	}
	
	var sets = set.split(',');
	
	for(var cS = 0; cS < sets.length; cS++) {
		var curSet = sets[cS].split('=');
		
/* 		console.log('Before = '+sections[sIn].options[oIn].amount); */
		eval('sections[sIn].options[oIn].' + curSet[0] + ' = ' + curSet[1] + ';');
/* 		console.log('After = '+sections[sIn].options[oIn].amount + " (s["+sIn+"], o["+oIn+"])"); */
	}
	
	retrigger = true;
}

function formSubmit()
{
	for(var i = 0; i < sections.length; i++)
	{
		var totalBox = (sections[i].total_id.length > 0 ? $('#' + sections[i].total_id) : '');
		if(totalBox) totalBox.attr('disabled', '');
		
		var o, idString, option;
		
		for(var j = 0; j < sections[i].options.length; j++)
		{
			o = sections[i].options[j];
			
			idString = o.tag;
			for(var k in o)
			{
				if(k == 'tag' || k == 'amount' || k == 'constraints') continue;
				
				idString += '[' + k + '="' + eval('o.' + k) + '"]';
			}
			
			option = $(idString);
			
			option.attr('disabled', '');
			
			if(o.amount != 'undefined' && o.amount == 0)
				option.attr('checked', '');
		}
	}
	
	$('#' + grandTotalId).attr('disabled', '');
}

$(calculateCosts);

$(function() {
	$('#CEL_0_122609month option, #CEL_0_122611month option').each(function() {
		var t = $(this);
		if(t.val() != '' && t.val() != '06' && t.val() != '07')
			$(this).remove();
	});
});
