function InitSkipHireForm() {
	// Update the collection date when the delivery date is changed
	var field = document.getElementById('field_order_form-hire_delivery_date');
	var selects = field.getElementsByTagName('select');
	var fields = [selects[0], selects[1], field.getElementsByTagName('input')[0]];
	
	// Swap the month and day selects
	fields[0].parentNode.removeChild(fields[1]);
	fields[0].parentNode.insertBefore(fields[1], fields[0]);
	
	var addDays = function(date, days) {
		var ms = days * 24 * 60 * 60 * 1000;
		return new Date(date.valueOf() + ms);
	};
	var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
	var dayNames = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
	var updateDaysOfMonth = function() {
		var month = parseInt(fields[1].value) - 1;
		var year = parseInt(fields[2].value);
		for(var d = 1; d <= 31; d++) {
			var date = new Date(year, month, d)
			if(date && !isNaN(date.getDate())) {
				if(date.getMonth() == month) {
					fields[0].options[d].text = dayNames[date.getDay()] + " " + d;
				} else {
					fields[0].options[d].text = "";
				}
			} else {
				fields[0].options[d].text = d;
			}
		}
	}
	
	var updateCollectionDate = function() {
		var day = parseInt(fields[0].value);
		var month = parseInt(fields[1].value) - 1;
		var year = parseInt(fields[2].value);
		var date = new Date(year, month, day);
		if(date && !isNaN(date.getDate()) && date.getMonth() == month && date > new Date()) {
			var collectionDate = addDays(date, ORAN_SKIP_HIRE_DAYS);
			if(!ORAN_SKIP_HIRE_SUNDAY_COLLECTION && collectionDate.getDay() == 0) { // Sunday
				collectionDate = addDays(collectionDate, 1)
			};
			var collectionDateString = dayNames[collectionDate.getDay()] + " " + collectionDate.getDate() + " " + monthNames[collectionDate.getMonth()] + " " + collectionDate.getFullYear();
		} else {
			var collectionDateString = "--";
		}
		// Update the displayed date
		var collectionDateField = document.getElementById('collection_date');
		var children = collectionDateField.childNodes;
		for(var i = 0; i < children.length; i++) {
			collectionDateField.removeChild(children[i]);
		}
		collectionDateField.appendChild(document.createTextNode(collectionDateString));
		var collectionDateWrapper = document.getElementById('collection_date_wrapper');
		if(collectionDateString == "--") {
			collectionDateWrapper.style.display = 'none';
		} else {
			collectionDateWrapper.style.display = '';
		}
	};
	
	var monthYearChange = function() {
		updateDaysOfMonth();
		updateCollectionDate();
	}
	
	fields[0].onclick = fields[0].onchange = fields[0].onkeyup = updateCollectionDate;
	fields[1].onclick = fields[1].onchange = fields[1].onkeyup = monthYearChange;
	fields[2].onclick = fields[2].onchange = fields[2].onkeyup = monthYearChange;

	updateDaysOfMonth();
	updateCollectionDate();
	
	// Show/hide the "Other" field as the waste type is changed
	var wasteTypeSelect = document.getElementById('id_order_form-waste_type');
	var wasteTypeOtherField = document.getElementById('id_order_form-waste_type_other');
	var wasteTypeWarning = document.getElementById('waste-type-warning');
	var showHideWasteTypeOther = function() {
		if(wasteTypeSelect.value == 'other') {
			wasteTypeOtherField.readOnly = false;
			wasteTypeOtherField.disabled = false;
			wasteTypeOtherField.className = '';
			wasteTypeWarning.style.display = '';
		} else {
			wasteTypeOtherField.readOnly = true;
			wasteTypeOtherField.disabled = true;
			wasteTypeOtherField.className = 'readonly';
			wasteTypeWarning.style.display = 'none';
		}
	};
	wasteTypeSelect.onclick = showHideWasteTypeOther;
	wasteTypeSelect.onchange = showHideWasteTypeOther;
	showHideWasteTypeOther();
};

function InitSkipHireBillingForm() {
	var copyBillingAddressFromDeliveryAddress = function() {
		var copyFrom = [
			['id_billing_form-billing_address_street_1', 'id_order_form-delivery_address_street_1'],
			['id_billing_form-billing_address_street_2', 'id_order_form-delivery_address_street_2'],
			['id_billing_form-billing_address_town', 'id_order_form-delivery_address_town'],
			['id_billing_form-billing_address_postcode', 'id_order_form-delivery_address_postcode']
		];
		for(var i = 0; i < copyFrom.length; i++) {
			var item = copyFrom[i];
			document.getElementById(item[0]).value = document.getElementById(item[1]).value;
		}
	};
	
	var copyDeliveryAddressButton = document.getElementById('copy-delivery-address');
	if(copyDeliveryAddressButton) {
		copyDeliveryAddressButton.onclick = copyBillingAddressFromDeliveryAddress;
	}
};