observe_header_links = function () {
/**
	// login link
	jQuery ('.jsLogin').click (function () {
		var popover = environmentManager.create_popover ("login");
		popover.attach_to_element ($("link_login"), { xSourcePoint: "right", xDestPoint: "right", ySourcePoint: "top", yDestPoint: "top", xPixelOffset: 80, yPixelOffset: -35 });
		popover.get_content_block_object ()
			.set_content_source_url ("/ajax_login.php");
//			.set_content_html ("hello there");
		popover.get_shell_object ()
			.set_title ("Log in to Charity Hampers")
			.set_width ("425px");
		popover.show ();
	});
/**/
}

observe_cart_forms = function () {

	// if there are no forms on the page then don't continue
	var temp = $$(".jsCartForm");
	if (!temp.length)
		return true;

	for (var count = 0; count < temp.length; count++) {
		var url = $(temp[count].id).readAttribute ("action");

		$(temp[count].id).observe ("submit", function (event) {
			event.stop ();

			var requestParameters = $(this.id).serialize (true);
			ajaxManager.request (url, { 'method': 'post', parameters: requestParameters }, 'add_to_cart_' + this.id);
		});
	}
}

observe_navigation_select = function (domId) {

	$(domId).observe ("change", function () {
		document.location.href = $(domId).value;
	});
}

observe_checkout_copy_address_down_fields = function () {

	// if there are no forms on the page then don't continue
	var element = $("link_copyFromInvoiceAddress");
	if (element) {

		$(element).observe ("click", function (event) {

			if (contentBlock = environmentManager.get_content_block ('content_checkout')) {

				// company name
				if (($(contentBlock.convert_dom_id ('companyName'))) && ($(contentBlock.convert_dom_id ('deliveryCompanyName')))) {
					$(contentBlock.convert_dom_id ('deliveryCompanyName')).value = $(contentBlock.convert_dom_id ('companyName')).value;
					highlight_content (contentBlock.convert_dom_id ('deliveryCompanyName'));
				}

				// delivery addressee
				if (($(contentBlock.convert_dom_id ('firstName'))) && ($(contentBlock.convert_dom_id ('lastName'))) && ($(contentBlock.convert_dom_id ('deliveryAddressee')))) {
					$(contentBlock.convert_dom_id ('deliveryAddressee')).value = $(contentBlock.convert_dom_id ('firstName')).value + " " + $(contentBlock.convert_dom_id ('lastName')).value;
					highlight_content (contentBlock.convert_dom_id ('deliveryAddressee'));
				}

				// delivery contact number
				if (($(contentBlock.convert_dom_id ('contactNumber'))) && ($(contentBlock.convert_dom_id ('deliveryContactNumber')))) {
					$(contentBlock.convert_dom_id ('deliveryContactNumber')).value = $(contentBlock.convert_dom_id ('contactNumber')).value;
					highlight_content (contentBlock.convert_dom_id ('deliveryContactNumber'));
				}

				// street address 1
				if (($(contentBlock.convert_dom_id ('invoiceAddressStreetName'))) && ($(contentBlock.convert_dom_id ('deliveryStreetName')))) {
					$(contentBlock.convert_dom_id ('deliveryStreetName')).value = $(contentBlock.convert_dom_id ('invoiceAddressStreetName')).value;
					highlight_content (contentBlock.convert_dom_id ('deliveryStreetName'));
				}

				// street address 2
				if (($(contentBlock.convert_dom_id ('invoiceAddressStreet2'))) && ($(contentBlock.convert_dom_id ('deliveryStreet2')))) {
					$(contentBlock.convert_dom_id ('deliveryStreet2')).value = $(contentBlock.convert_dom_id ('invoiceAddressStreet2')).value;
					highlight_content (contentBlock.convert_dom_id ('deliveryStreet2'));
				}

				// suburb
				if (($(contentBlock.convert_dom_id ('invoiceAddressSuburbText'))) && ($(contentBlock.convert_dom_id ('deliverySuburbText')))) {
					$(contentBlock.convert_dom_id ('deliverySuburbText')).value = $(contentBlock.convert_dom_id ('invoiceAddressSuburbText')).value;
					highlight_content (contentBlock.convert_dom_id ('deliverySuburbText'));
				}

				// country
				if (($(contentBlock.convert_dom_id ('invoiceAddressCountryId'))) && ($(contentBlock.convert_dom_id ('deliveryCountryId')))) {
					$(contentBlock.convert_dom_id ('deliveryCountryId')).value = $(contentBlock.convert_dom_id ('invoiceAddressCountryId')).value;
					highlight_content (contentBlock.convert_dom_id ('deliveryCountryId'));
				}

				// state (id)
				if (($(contentBlock.convert_dom_id ('invoiceAddressStateId'))) && ($(contentBlock.convert_dom_id ('deliveryStateId')))) {
					$(contentBlock.convert_dom_id ('deliveryStateId')).value = $(contentBlock.convert_dom_id ('invoiceAddressStateId')).value;
					highlight_content (contentBlock.convert_dom_id ('deliveryStateId'));
				}

				// state (text)
				if (($(contentBlock.convert_dom_id ('invoiceAddressStateText'))) && ($(contentBlock.convert_dom_id ('deliveryStateText')))) {
					$(contentBlock.convert_dom_id ('deliveryStateText')).value = $(contentBlock.convert_dom_id ('invoiceAddressStateText')).value;
					highlight_content (contentBlock.convert_dom_id ('deliveryStateText'));
				}

				// postcode
				if (($(contentBlock.convert_dom_id ('invoiceAddressPostcode'))) && ($(contentBlock.convert_dom_id ('deliveryPostcode')))) {
					$(contentBlock.convert_dom_id ('deliveryPostcode')).value = $(contentBlock.convert_dom_id ('invoiceAddressPostcode')).value;
					highlight_content (contentBlock.convert_dom_id ('deliveryPostcode'));
				}

			}
		});
	}



	// 
	var temp = $$(".jsCopyAddressDown");
	if (temp.length) {

		for (var count = 0; count < temp.length; count++) {
			element = $(temp[count]);

			// get this element's id
			var itemNumber = element.id.match (/[0-9]+/);

			$(element).observe ("click", function (event) {

				// get this element's id
				var itemNumber = this.id.match (/[0-9]+/);
	
				if (contentBlock = environmentManager.get_content_block ('content_checkout')) {

					var fieldClasses = ["jsDeliveryCompanyName", "jsDeliveryDeliveryContactNumber", "jsDeliveryStreetName", "jsDeliveryStreet2", "jsDeliverySuburbText", "jsDeliveryCountryId", "jsDeliveryStateId", "jsDeliveryStateText", "jsDeliveryPostcode"];

					for (var count2 = 0; count2 < fieldClasses.length; count2++) {

						var className = fieldClasses[count2];

						// company name
						var temp = $$("." + className);
						var value = '';
						for (var count = 0; count < temp.length; count++) {
							var element = $(temp[count]);

							if (count == itemNumber)
								value = $(temp[count]).value;
							else if (count > itemNumber) {
								$(temp[count]).value = value;
								highlight_content ($(temp[count]).id);
							}
						}
					}
				}
			});
		}
	}
	return true;
}

observe_limit_chars = function () {

	var charLengths = [200];

	for (var count2 = 0; count2 < charLengths.length; count2++) {

		var className = "jsLimitChars" + charLengths[count2];
		var temp = $$("." + className);
		if (temp.length) {

			for (var count = 0; count < temp.length; count++) {
				element = $(temp[count]);

				eval (
					'$(element).observe ("keydown", function (event) {'
					+ '	if (this.value.length > ' + charLengths[count2] + ')'
					+ '		this.value = this.value.substr (0, ' + charLengths[count2] + ');'
					+ '});'
					+ '$(element).observe ("keyup", function (event) {'
					+ '	if (this.value.length > ' + charLengths[count2] + ')'
					+ '		this.value = this.value.substr (0, ' + charLengths[count2] + ');'
					+ '});'
					+ '$(element).observe ("change", function (event) {'
					+ '	if (this.value.length > ' + charLengths[count2] + ')'
					+ '		this.value = this.value.substr (0, ' + charLengths[count2] + ');'
					+ '});'
				);
			}
		}
	}
}














align_elements = function (elementNamesArray, forceAlign, message) {
	var previousYOffset = 0;
	var maxHeight = 0;
	var inspectedElements = new Array ();
	var wereVisible = new Array ();

	// find out which ones were originally shown and show them anyway
	for (var count = 0; count < elementNamesArray.length; count++) {
		var liElementName = elementNamesArray[count];
		if ($(liElementName)) {
			wereVisible[count] = $(liElementName).visible ();
			$(liElementName).show ();
			$(liElementName).setStyle ({'height': 'auto'});
		}
	}

	for (var count = 0; count < elementNamesArray.length; count++) {
		var liElementName = elementNamesArray[count];

		if ($(liElementName)) {

			// see if this item has a different y offset to the previous items
			var temp = Position.cumulativeOffset ($(liElementName));

			var yOffset = parseInt (temp[1]);

			if ((yOffset != previousYOffset) && (inspectedElements.length > 0) && (!forceAlign)) {

				// adjust the height of each of the items in the row
				if ((inspectedElements.length > 1)) {
					for (var count2 = 0; count2 < inspectedElements.length; count2++)
						$(inspectedElements[count2]).setStyle ( { "height" : maxHeight + "px" } );
				}

				// start the list of inspected elements off again
				var previousYOffset = 0;
				var maxHeight = 0;
				var inspectedElements = new Array ();

				// the row above this element has changed,  re-calculate it's offset
				var temp = Position.cumulativeOffset ($(liElementName));
				var yOffset = parseInt (temp[1]);
			}

			// record the height of the current item
			var temp = $(liElementName).getDimensions ();
			var height = parseInt (temp.height);
			if (height > maxHeight)
				maxHeight = height;
			inspectedElements[inspectedElements.length] = liElementName;

//if (liElementName == 'descriptionBlockDiningGeneric')
//				alert (yOffset + " " + message + " " + height);

			previousYOffset = yOffset;
		}
	}

	// if there are any elements that were left over
	if (inspectedElements.length > 0) {
		// adjust the height of each of the items in the row
		for (var count2 = 0; count2 < inspectedElements.length; count2++)
			$(inspectedElements[count2]).setStyle ( { "height" : maxHeight + "px" } );
	}

	// return each element back to it's original show/hide status
	for (var count = 0; count < elementNamesArray.length; count++) {
		var liElementName = elementNamesArray[count];
		if ($(liElementName)) {
			if (!wereVisible[count])
				$(liElementName).hide ();
		}
	}

	return true;
}

vertically_center_elements = function (elementNamesArray) {

	for (var count = 0; count < elementNamesArray.length; count++) {
		var element = $(elementNamesArray[count]);
		if ($(element)) {
			var parentElement = element.ancestors ().first ();

			var heightElement = parseInt (element.getStyle ('height'));
			var heightParentElement = parseInt (parentElement.getStyle ('height'));
			var newHeight = String (parseInt ((heightParentElement - heightElement) / 2));

			element.setStyle ( { "marginTop": newHeight + "px" });
		}

	}

	return true;
}