// Cut off date for early registration
var cutoff = new Date();
cutoff.setFullYear(2010,5,2);	// June 1, 2010

// Cost calculation

// Fees
var fees = new Object();
// tokens
fees[0] = new fee('token','TK',0.9,1,0);
// passports
fees[1] = new fee('passport','DG',10,12,0);
fees[2] = new fee('passport','DJ',6,8,0);
fees[3] = new fee('passport','WG',18,22,0);
fees[4] = new fee('passport','WJ',10,14,0);
fees[5] = new fee('passport','WF',50,60,0);
// tourneys (**MUST BE GROUPED AND ORDERED BY DAY**)
fees[6] = new fee('activity','A1',25,30,1);
fees[7] = new fee('activity','A2',10,15,1);
fees[8] = new fee('activity','A3',10,15,1);
fees[9] = new fee('activity','A4',8,10,1);
fees[10] = new fee('activity','A5',8,10,1);
fees[11] = new fee('activity','A10',4,6,1);
fees[12] = new fee('activity','A6',25,30,2);
fees[13] = new fee('activity','A7',10,15,2);
fees[14] = new fee('activity','A8',10,12,2);
fees[15] = new fee('activity','A9',4,6,2);
fees[16] = new fee('activity','A11',4,6,2);

function fee(type,code,early,late,day)
{
	this.type = type;
	this.code = code;
	this.early = early;
	this.late = late;
	this.day = day;
}

/* Toggle passport form
 */
function togglePassports(c)
{
	if (c == null) {
		c = document.getElementById('gotpass');
	}
	if (c.checked){
		changeDiv('passports-form',"none");
	} else {
		changeDiv('passports-form',"");
	}
}

function updateTotal()
// Go through the form to calculate the total cost
{
	var total = 0;		// fee
	var tokens = 0;		// tokens
	var f = document.getElementById('form1');

	var code = '';		// fee code
	var qty = 0;		// quantity
	var cost = 0;		// cost
	var i = 0;			// counter
	var early = isEarly();		// is it early?
	
	for (i in fees)
	// total all the fee types & quantities
	{
		code = fees[i].code;
		cost = (early)? fees[i].early : fees[i].late;
		qty = parseFloat(f.elements['qty'+code].value);
		if (f.elements['chk'+code].checked && qty > 0)
		{
			total += cost * qty;
/*			if (code == 'TK')		// We need to include bonus tokens from packages
			{
				tokens =  qty;
			} */
		}
	}
	changeTotals(total,tokens)
}

function updateQty(code)
{
	var f = document.getElementById('form1');
	var x = f.elements['qty'+code];
	var n = parseFloat(x.value);
	if (f.elements['chk'+code].checked)		// Is the element checked?
	{
		if ( !n || n < 1 )
		{
			x.value = '1';
			x.focus();
			x.select();
		}
	} else {					// not checked, empty qty field
		x.value = '';
	}
	updateTotal();
}

function isEarly()
{
	var d = new Date();		// today's date
	var p = getCheckedValue(document.getElementById('form1').elements['payment_type']);

	if (p < 3 && d <= cutoff)
	{
		return true;
	}
	return false;
}

// Form validation

function validateForm(f)
{
	with (f)
	{
		if (fieldRequired(first_name,"First name is required.") == false)
		{
			first_name.focus();
			return false;
		}
		if (fieldRequired(last_name,"Last name is required.") == false)
		{
			last_name.focus();
			return false;
		}
		if (fieldRequired(email,"Email is required.") == false)
		{
			email.focus();
			return false;
		}
		if (checkEmail(email.value,"Invalid email address.") == false)
		{
			email.focus();
			return false;
		}
		if (checkRadio(payment_type,"Payment type is required.") == false)
		{
			return false;
		}
		if (!f.elements['readterms'].checked)
		{
			alert("You must confirm you've read the terms and conditions.");
			return false;
		}
	}
}

function checkPassportReqs(o)
/* When the user selects an activity, check to see if other activities are
 * selected and the passport requirements are met.
 */ 
{
	var f = document.getElementById('form1');
	if (f.elements['gotpass'].checked) {
		return true;
	}
	var checkbox;
	var code;
	var type;
	var passport = 0;
	var reqdays = '';
	var currday = 0;
	var day;
	var i;
	var patt;
	for (i in fees)
	{
		code = fees[i].code;
		type = fees[i].type;
		day = fees[i].day;
		checkbox = f.elements['chk'+code];
		if (type == 'passport' && checkbox.checked)
		{
			// Do we have a weekend passport? All activities can be selected.
			if (code.substring(0,1) == 'W')
			{
				return true;
			}
			// We have at least a day pass
			passport = 1;
		}
		if (type == 'activity' && currday != day && checkbox.checked)
		{
			patt = RegExp(day);
			reqdays += patt.test(reqdays) ? '' : day;
			currday = day;
		}
	}
	if(reqdays.length <= passport)
		return true;
	if(o.checked && reqdays.length >= 1 && passport < 1) {
		alert('Select a passport first.');
		o.checked = false;
	} else if(o.checked && reqdays.length > 1  && passport < 2) {
		alert('You have selected activities in both days. You must select a weekend passport, then select this activity again.');
		o.checked = false;
	} else if(!o.checked && reqdays.length >= 1 && passport < 1) {
		alert('You have selected some activities. Select another passport before removing this.');
		o.checked = true;
	} else if(!o.checked && reqdays.length > 1 && passport < 2) {
		alert('You have selected activities in both days. You cannot remove a weekend passport.');
		o.checked = true;
	}
	return false;
}

function checkQty(q)
{
	var patt = RegExp("^[1-9]?[0-9]?$")
	if(!patt.test(q.value))
	{
		alert('Invalid number');
		q.value = '';
	}
	return true;
}

function fieldRequired(f,t)
{
	with (f)
	{
		if (value == null || value == "")
		{
			alert(t);
			return false;
		} else {
			return true;
		}
	}
}

function checkEmail(e,t)
{
   var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
   if (reg.test(e) == false)
	{
      alert(t);
      return false;
   }
}

function checkRadio(r,t)
// Print a message if a radio button group doesn't have a value
// r = radio button group to check
// t = error message
{
	for (b = r.length-1; b > -1; b--) {
		if (r[b].checked)
		{
			return true
		}
	}
	alert(t)
	return false
}

function getCheckedValue(o)
{
	if(!o)
		return false;
	var l = o.length;
	if(l == undefined)
		if(o.checked)
			return o.value;
		else
			return false;
	for(var i = 0; i < l; i++)
	{
		if(o[i].checked)
		{
			return o[i].value;
		}
	}
	return false;
}

// Layout control
function toggleField(s,f,c)
{
	var e = document.getElementById(f)
	if (c.checked)
	{
		e.value=1
		changeDiv(s,'inline')
	} else {
		changeDiv(s,'none')
		e.value=0
	}
	updateTotal()
}

function changeTotals(x,y)
// x = early registration fee; y = tokens
{
	if (document.getElementById('total'))
	{
		document.getElementById('total').innerHTML = x.toFixed(2)
	}
	document.getElementById('tokens').innerHTML = y
}

function changeDiv(d,c)
{
  var s = getStyleObject(d);
  if (s != false)
  {
    s.display = c;
  }
}

function getStyleObject(o) {
  if (document.getElementById && document.getElementById(o)) {
    return document.getElementById(o).style;
  } else if (document.all && document.all(o)) {
    return document.all(o).style;
  } else {
    return false;
  }
}