



function EviivoUnitSelectInitialise()
{

	if (document.getElementById('EviivoAvailabilityResults'))
	{
		RoomResultsInputs = document.getElementById('EviivoAvailabilityResults').getElementsByTagName('input');
		for (var i = 0; i < RoomResultsInputs.length; i++)
		{
			var x = RoomResultsInputs.item(i);
			if (x.type.toLowerCase()=='checkbox')
			{
				AvCalAddEventListener(x, 'change', EviivoUnitSelectOnChange);
				AvCalAddEventListener(x, 'click', EviivoUnitSelectOnChange);
			}

		}

	}

}


function EviivoUnitSelectOnChange() {
	if (this.name != '') {
		//.. moz
		var o = this;
	} else {
		//.. ie
		var o = window.event.srcElement;
	}
	//alert('Changed ' + o.id);
	EviivoUnitCalculateTotal();
}



function EviivoUnitCalculateTotal()
{
	var total = 0;

	if (document.getElementById('EviivoAvailabilityResults'))
	{
		RoomResultsInputs = document.getElementById('EviivoAvailabilityResults').getElementsByTagName('input');
		for (var i = 0; i < RoomResultsInputs.length; i++)
		{
			var x = RoomResultsInputs.item(i);
			if (x.type.toLowerCase() == 'checkbox')
			{
				if (x.checked)
				{
					thisPrice = parseFloat(document.getElementById(x.id + '-price').value)
				}
				else
				{
					thisPrice = 0;
				}

				total += thisPrice;

			}
		}
	}
	document.getElementById('AvCalTotal').lastChild.data = String.fromCharCode(163) + MakePrice(total);
}







function AvCalInitialise() {

	var elmStartDate = document.getElementById('anchorStartDate');
	if(elmStartDate != null) AddEventListener(elmStartDate, 'click', ShowStartDateCalendar);

	var elmEndDate = document.getElementById('anchorEndDate');
	if(elmEndDate != null) AddEventListener(elmEndDate, 'click', ShowEndDateCalendar);

	if (document.getElementById('roomSelection')) {
		AvCalSelects = document.getElementById('roomSelection').getElementsByTagName('select');
		for (var i = 0; i < AvCalSelects.length; i++) {
			var x = AvCalSelects.item(i);
			if (AvCalGetName(x) == 'unit') {
				AvCalAddEventListener(x, 'change', AvCalOnChange);
				var unitkey = AvCalGetUnit(x,'actual');
				var unitid = AvCalGetUnit(x,'full');
				var y = document.getElementById('occu_' + unitid);
				var z = document.getElementById('occuC_' + unitid);
				AvCalRenderSelect(x,y);
				AvCalRenderSelect(x,z);
				AvCalShowChildAges(z);
				AvCalAddEventListener(y, 'change', AvCalOnChange);
				AvCalAddEventListener(z, 'change', AvCalOnChange);
			}
		}
	}
}

function AvCalCheckLinkedUnits(o) {
	if (document.getElementById('roomSelection')) {
		AvCalSelects = document.getElementById('roomSelection').getElementsByTagName('select');
		for (var i = 0; i < AvCalSelects.length; i++) {
			var x = AvCalSelects.item(i);
			if (AvCalGetName(x) == 'unit') {
				if ((AvCalGetUnit(o,'full') != AvCalGetUnit(x,'full')) && (AvCalGetUnit(o,'linked') == AvCalGetUnit(x,'linked'))) {
					AvCalRenderSelect(o, x);
				}
			}
		}
	}
}


function AvCalCalculatePrices() {
	if (document.getElementById('roomSelection')) {
		AvCalSelects = document.getElementById('roomSelection').getElementsByTagName('select');
		var total = 0;
		for (var i = 0; i < AvCalSelects.length; i++) {
			var x = AvCalSelects.item(i);
			if (AvCalGetName(x) == 'unit') {
				var subtotal = 0;
				var unitid = AvCalGetUnit(x, 'full');
				var unitkey = AvCalGetUnit(x, 'actual');
				var prices = AvCalGetData(unitkey, 'prices');
				var y = document.getElementById('occu_' + unitid);
				var z = document.getElementById('occuC_' + unitid);
				if (y) {
					var ad = parseInt(y.value);
				} else {
					var ad = 0;
				}
				if (z) {
					var ch = parseInt(z.value);
				} else {
					var ch = 0;
				}
				for (var j = 0; j = prices.length; j++) {
					if (AvCalGetData(unitkey,'basis') == 'per per') {
						subtotal += prices.shift() * (ad + ch);
					} else {
						subtotal += prices.shift() * x.value;
					}
				}
				total += subtotal;
				document.getElementById('data_' + unitkey).parentNode.lastChild.data = String.fromCharCode(163) + MakePrice(subtotal);
			}
		}
		document.getElementById('AvCalTotal').lastChild.data = String.fromCharCode(163) + MakePrice(total);
	}
}

function AvCalGetData(unitkey, type) {
	if (document.getElementById('data_' + unitkey)) {
		var data = document.getElementById('data_' + unitkey).value.split(',');
		if (type == 'maxunit') {
			data = data.slice(0,1);
		} else if (type == 'minocc') {
			data = data.slice(1,2);
			if (data == 0 || data == null) data = 1;
		} else if (type == 'maxocc') {
			data = data.slice(2,3);
		} else if (type == 'basis') {
			data = data.slice(3,4);
		} else if (type == 'prices') {
			data = data.slice(4);
		}
		return data;
	} else {
		return null;
	}
}

function AvCalGetName(obj) {
	if (obj) {
		var name = obj.name.substring(0,obj.name.indexOf('_',0));
	} else {
		var name = null;
	}
	return name;
}

function AvCalGetUnit(obj,type) {
	if (obj) {
		var unit = obj.name.substring(obj.name.indexOf('_',0)+1,obj.name.length);
		if (unit.indexOf('_',0) > 0) {
			if (type == 'actual') {
				//.. individiual unit key
				unit = unit.substring(unit.indexOf('_',0)+1,unit.length);
			} else if (type == 'linked') {
				//.. master linked unit key
				unit = unit.substring(0,unit.indexOf('_',0));
			} else if (type == 'full') {
				//.. full string
			}
		}
		return unit;
	} else {
		return null;
	}
}

function AvCalChildrenEnabled(obj) {
	if (document.getElementById('occuC_' + AvCalGetUnit(obj,'full'))) {
		return true;
	} else {
		return false;
	}
}

function AvCalOnChange() {
	if (!document.all) {
		//.. moz
		var o = this;
	} else {
		//.. ie
		var o = window.event.srcElement;
	}
	var unitid = AvCalGetUnit(o,'full');
	var unitkey = AvCalGetUnit(o,'actual');
	var x = document.getElementById('unit_' + unitid);
	var y = document.getElementById('occu_' + unitid);
	var z = document.getElementById('occuC_' + unitid);
	if (AvCalGetName(o) == 'unit') {
		//AvCalCheckLinkedUnits(o);
		AvCalRenderSelect(x,y);
		AvCalRenderSelect(x,z);
	} else if (AvCalGetName(o) == 'occu') {
		AvCalRenderSelect(y,z);
	} else if (AvCalGetName(o) == 'occuC') {
		AvCalRenderSelect(z,y);
	}
	AvCalShowChildAges(z);
	AvCalCalculatePrices();
}


function AvCalShowChildAges(x) {
	if (document.getElementById('occuC_' + AvCalGetUnit(x,'full') + '_childages') != null) {
		var o = document.getElementById('occuC_' + AvCalGetUnit(x,'full') + '_childages');
		var l = o.previousSibling;
		if (x.value < 1) {
			o.className = 'hidden';
			l.className = 'hidden';
		} else {
			o.className = '';
			l.className = '';
		}
	}
}

function AvCalRenderSelect(o, obj) {
	if (obj) {
		var unitid = AvCalGetUnit(o,'full');
		var unitkey = AvCalGetUnit(o,'actual');
		var x = document.getElementById('unit_' + unitid);
		var y = document.getElementById('occu_' + unitid);
		var z = document.getElementById('occuC_' + unitid);
		if (x.value < 1) {
			obj.selectedIndex = 0;
			obj.className = 'hidden';
			AvCalRemoveOptions(obj);
			AvCalCreateOptions(obj, 0, 0);
		} else {
			var minOcc = AvCalGetData(unitkey,'minocc');
			var maxOcc = AvCalGetData(unitkey,'maxocc');
			var iOldVal = obj.value;
			obj.className = '';
			if (AvCalChildrenEnabled(x)) {
				if (y) {
					var ad = parseInt(y.value);
				} else {
					var ad = 0;
				}
				if (z) {
					var ch = parseInt(z.value);
				} else {
					var ch = 0;
				}
				if (AvCalGetName(o) == 'unit') {
					var maxVal = x.value * maxOcc;
				} else if (AvCalGetName(o) == 'occu') {
					var maxVal = x.value * maxOcc - ad;
				} else if (AvCalGetName(o) == 'occuC') {
					var maxVal = x.value * maxOcc - ch;
				}
				AvCalRemoveOptions(obj);
				AvCalCreateOptions(obj, 0, maxVal);
			} else {
				AvCalRemoveOptions(obj);
				AvCalCreateOptions(obj, 0, x.value * maxOcc);
			}
			for(i=0;i<obj.options.length;++i)
				if (obj.options[i].value==iOldVal) obj.options[i].selected = true;
		}
	}
}

function AvCalCreateOptions(obj, min, max) {
	for (var i = min; i <= max; i++) {
		AvCalAddOption(obj, i, i);
	}
}

function AvCalRemoveOptions(obj) {
	while (obj.firstChild) {
		obj.removeChild(obj.firstChild);
	}
}

function AvCalAddOption(obj, val, txt) {
	var o = document.createElement("OPTION");
	var t = document.createTextNode(txt);
	o.setAttribute("value",val);
	o.appendChild(t);
	obj.appendChild(o);
}

function AvCalAddEventListener(obj, type, action) {
	if (obj) {
		if (typeof window.addEventListener != 'undefined') {
			//.. gecko, safari, konqueror and standard
			obj.addEventListener(type, action, false);
		} else if(typeof document.addEventListener != 'undefined') {
			//.. opera 7
			obj.addEventListener(type, action, false);
		} else if(typeof window.attachEvent != 'undefined') {
			//.. win/ie
			obj.attachEvent('on' + type, action);
		}
	}
}

function MakePrice(amount) {
	var i = parseFloat(amount);
	if (isNaN(i)) {
		i = 0.00;
	}
	var minus = '';
	if (i < 0) {
		minus = '-';
	}
	i = Math.abs(i);
	i = parseInt((i + .005) * 100);
	i = i / 100;
	var s = new String(i);
	if(s.indexOf('.') < 0) {
		s += '.00';
	}
	if (s.indexOf('.') == (s.length - 2)) {
		s += '0';
	}
	s = minus + s;
	return s;
}

