var POUND = '£';
var DOB_FIELD_ID_DAY = 'date_field_0_day';
var DOB_FIELD_ID_MONTH = 'date_field_0_month';
var DOB_FIELD_ID_YEAR = 'date_field_0_year';

function recalc()
{
	var divs = document.getElementsByTagName('DIV');
	for(var i in divs)
	{
		if(divs[i].className=='tab')
		{
			var inputs = divs[i].getElementsByTagName('INPUT');
			for(var j=0;j<inputs.length;j++)
			{
				if(inputs[j].type=='checkbox')
				{
					inputs[j].onclick();
					break;
				}
			}
		}
	}
}
function calc(parentNode,totalID)
{
	var grandTotal = 0;
	var inputs = parentNode.getElementsByTagName('input');
	for(var i=0;i<inputs.length;i++)
	{
		try{
			var id = inputs[i].id.match(/b_([a-zA-Z0-9_\-]+)/)[1];
			if(inputs[i].checked)
			{
				var total = getPrice(inputs[i]);//parseFloat(document.getElementById('p_'+id).value);
				grandTotal+=total;
				if(inputs[i].parentNode.className.indexOf(' checked')==-1)
				{
					inputs[i].parentNode.className+=' checked';
				}
			}
			else
			{
				inputs[i].parentNode.className=inputs[i].parentNode.className.split(' checked').join('');
			}
		}catch(e){
			//alert(e);
		}
	}
	if(Number.prototype.toFixed)
	{
		grandTotal = grandTotal.toFixed(2);
	}
	document.getElementById(totalID).value = POUND+grandTotal;

	//Now calculate the grand total
	var frm = document.getElementById(totalID);
	while(frm.nodeName.toLowerCase()!='form')
	{
		frm = frm.parentNode;
	}
	var grandTotal = 0;
	var inputs = frm.getElementsByTagName('input');
	for(var i=0;i<inputs.length;i++)
	{
		if(inputs[i].id.indexOf('bfTotal_')!=-1)
		{
			grandTotal+=parseFloat(inputs[i].value.split(POUND).join(''));
		}
	}
	//Apply any discount
	//var discount = getDiscount();
	//grandTotal = grandTotal-discount; //Now not used
	//Round
	if(Number.prototype.toFixed)
	{
		grandTotal = grandTotal.toFixed(2);
	}
	document.getElementById('grandTotal').value = POUND+grandTotal;

}
function cloneFieldset(fieldset)
{
	//Clone the fieldset
	var cloned = fieldset.cloneNode(true);
	//Append a remove icon
	var img = new Image();
	img.src = '/assets/images/icons/subtract_persons.gif';
	img.className = 'addChild';
	img.onclick = function(){
		this.parentNode.parentNode.parentNode.removeChild(this.parentNode.parentNode);
		//decrement the child counter
		CHILD_COUNT--;
		//Refresh the tabs
		window.TABS.refresh();
		//Refresh the discounts
		getDiscount();
	}
	//Insert the icon after the add icon
	cloned.getElementsByTagName('IMG')[1].parentNode.appendChild(img);
	cloned = fieldset.parentNode.insertBefore(cloned,fieldset.nextSibling);
	//Increment the child counter (for discounts)
	CHILD_COUNT++;

	//Refresh the tabs
	window.TABS.refresh();
	//Refresh the discount
	//getDiscount();//Not used
}
function getAgeInYears(dob)
{
	var m = dob.match(/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/);
	
	if(null==m)
	{
		alert('Please enter the date of birth in the format yyyy-mm-dd');
		return false;
	}
	
	var d = dob.split('-');	
	var dd = WEEKS_END_DATE.split('-');
	
	dd[0] = parseInt(dd[0]);
	dd[1] = parseInt(dd[1].replace(/^0+/,''));
	dd[2] = parseInt(dd[2].replace(/^0+/,''));
	
	
	var now = new Date();
	
	year_diff = dd[0] - d[0];
	month_diff = dd[1] - d[1];
	day_diff   = dd[2] - d[2];
	
//	if (day_diff < 0 || month_diff < 0) {year_diff--;}

	if ((day_diff < 0 && month_diff == 0) || month_diff < 0) {year_diff--;}

	
	
	
	
	return year_diff;
}
function getDiscount()
{
	var weeksWithBookings = getWeeksBooked();
	var totalDiscount = weeksWithBookings*WEEK_BOOKED_UNIT_DISCOUNT;

	var totalDiscount = CHILD_COUNT*totalDiscount;

	if(totalDiscount>0)
	{
		if(Number.prototype.toFixed)
		{
			totalDiscount = totalDiscount.toFixed(2);
		}
		document.getElementById('fullWeekDiscount').value = '-'+POUND+totalDiscount;
	}
	else
	{
		document.getElementById('fullWeekDiscount').value = '-';
	}
	return totalDiscount;
}
function getPrice(input)
{
	var m = input.name.match(/\[([a-z_]+)\]$/);
	if(m)
	{
		var dob = document.getElementById(DOB_FIELD_ID_YEAR).value+'-'+document.getElementById(DOB_FIELD_ID_MONTH).value+'-'+document.getElementById(DOB_FIELD_ID_DAY).value;
		
		
		if(!dob)
		{
			return;
		}
		else
		{
			
			//alert(dob);
			var ageInYears=getAgeInYears(dob);
			if(ageInYears!==false)
			{
				if(ageInYears<8)
				{
					var ageGroup = 'under_8';
				}
				else
				{
					var ageGroup = 'over_8';
				}
			}			
			var priceId = m[1]+'_'+ageGroup;
			var priceInput = document.getElementById(priceId);
			if(priceInput)
			{			
				return parseFloat(priceInput.value);
			}
		}
	}
	return 0;
}
function getWeeksBooked()
{
	//Get the container form
	var frm = document.getElementById('grandTotal').form;
	var tables = frm.getElementsByTagName('TABLE');
	var currentWeek = -1;
	var weekTotals = [];
	for(var i=0;i<tables.length;i++)
	{
		//Create an array of days corresponding to the columns of the table
		var days = new Array();
		var thead = tables[i].getElementsByTagName('TR');
		var ths = thead[0].getElementsByTagName('TH');
		//Note: omit first cell as this doesn't hold a day
		for(var j=1;j<ths.length;j++)
		{
			try{
				//Create an object that holds the columns date info
			var html = new String(ths[j].innerHTML);
			var weekday = html.match(/([A-Z][a-z]{2})/)[1];
			var day = html.match(/([0-9]{1,2})/)[1];
			var month = html.match(/([A-Z][a-z]{2})<\/small>/)[1];
			if(weekday=='Mon')
			{
				currentWeek++;
				weekTotals[currentWeek] = 0;
			}
			days[j] = {weekday:weekday,day:day,month:month,week:currentWeek};
			}catch(e){}
		}
		//Now cycle through the table rows assigning a pointer to the relevant column date info for each cell
		var trs = tables[i].getElementsByTagName('TR');
		//Remember to omit the first row
		for(var j=1;j<trs.length;j++)
		{
			var tds = trs[j].getElementsByTagName('TD');
			for(var k=0;k<tds.length;k++)
			{
				if(days[k])
				{
					tds[k].DAY = days[k];
					var inputs = tds[k].getElementsByTagName('INPUT');
					for(var l=0;l<inputs.length;l++)
					{
						if(inputs[l].id.indexOf('b_')!=-1 && inputs[l].name.indexOf('price_full_day')!=-1)
						{
							if(inputs[l].parentNode.className.indexOf(' checked')!=-1)
							{
								weekTotals[tds[k].DAY.week]++;
							}
						}
					}
				}
			}
		}
	}

	var weeksWithBookings = 0;
	for(var i=0;i<weekTotals.length;i++)
	{
		if(weekTotals[i]>=4)
		{
			weeksWithBookings++;
		}
	}
	
	//alert(weeksWithBookings);
	return weeksWithBookings;
}
function showLocationPriceList(locationSelector)
{
	var i = 0;
	var loc;
	var opts = locationSelector.getElementsByTagName('OPTION');
	for(var i=0;i<opts.length;i++)
	{
		if(true==opts[i].selected)
		{
			loc = i;
		}
	}
	var i = 0;
	var div=document.getElementById('location_'+i);
	while(div)
	{
		i==loc ? div.style.display = 'block' : div.style.display = 'none';
		div=document.getElementById('location_'+(i++));
	}
}