if (tilt) tilt.attachEvent(document, "contentreceived", function() {

	var inputs = document.getElementsByTagName("input");
	var datetimeInputs = [];
	for(var i = 0; i < inputs.length; i++)
	{
		var input = inputs[i];
		if (input.className.indexOf("date") >= 0)
		{
			datetimeInputs[datetimeInputs.length] = input;
		}
	}
	for(var i = 0; i < datetimeInputs.length; i++)
	{
		bindDateTimePicker(datetimeInputs[i]);
	}

	function bindDateTimePicker(input)
	{
		var element = input.parentNode;
		
		if (input.className.indexOf("date") < 0)
		{
			return;
		}
		
		var date = GetDate(input.value);
		// hide the input
		input.style.display = "none";
		
		// create payload
		var payload = { 
			oldInput : input, 
			dateOnly : element.className == "DateOnly" 
		};

		// create new input fields:

		// 1. Month
		var select = document.createElement("SELECT");
		select.size = 1;
		var optgroup = document.createElement("OPTGROUP");
		optgroup.setAttribute("label", "Month");
		
		AddOption(optgroup, 1, "Jan");
		AddOption(optgroup, 2, "Feb");
		AddOption(optgroup, 3, "Mar");
		AddOption(optgroup, 4, "Apr");
		AddOption(optgroup, 5, "May");
		AddOption(optgroup, 6, "Jun");
		AddOption(optgroup, 7, "Jul");
		AddOption(optgroup, 8, "Aug");
		AddOption(optgroup, 9, "Sep");
		AddOption(optgroup, 10, "Oct");
		AddOption(optgroup, 11, "Nov");
		AddOption(optgroup, 12, "Dec"); 

		select.appendChild(optgroup);
		select.selectedIndex = date.getMonth();

		element.appendChild(select); 

		payload.month = select;

		// 2. Day
		select = document.createElement("SELECT");
		select.size = 1;
		optgroup = select.appendChild(document.createElement("OPTGROUP"));
		optgroup.setAttribute("label", "Day");

		for(var i = 1; i < 32; i++)
		{
			AddOption(optgroup, i);
		}
		
		select.selectedIndex = date.getDate() - 1;

		element.appendChild(select); 
		payload.day = select;
		
		// 3. Year
		select = document.createElement("SELECT");
		select.size = 1;
		optgroup = select.appendChild(document.createElement("OPTGROUP"));
		optgroup.setAttribute("label", "Year");
		var year = date.getFullYear();
		
		for(var i = year - 3; i < (year + 6); i++)
		{
			AddOption(optgroup, i);
		}
		
		select.selectedIndex = 3;

		element.appendChild(select); 
		payload.year = select;
		
		element.appendChild(document.createTextNode(" "));

		if (!payload.dateOnly)
		{
			// 4. Hour
			select = document.createElement("SELECT");
			optgroup = select.appendChild(document.createElement("OPTGROUP"));
			optgroup.setAttribute("label", "Hour");
			select.size = 1;
			
			for(var i = 1; i <= 12; i++)
			{
				AddOption(optgroup, i);
			}
			
			var hours = date.getHours();
			var ampm = 0;
			if (hours == 0)
			{
				hours = 12;
			}
			else
			{
				if (hours >= 12)
				{
					ampm = 1;
					if (hours > 12)
					{
						hours = hours - 12;
					}
				}
			}
			
			select.selectedIndex = hours - 1;

			element.appendChild(select); 
			payload.hour = select;
			
			element.appendChild(document.createTextNode(":"));

			// 4. Minute
			select = document.createElement("SELECT");
			optgroup = select.appendChild(document.createElement("OPTGROUP"));
			optgroup.setAttribute("label", "Minute");
			select.size = 1;
			
			
			AddOption(optgroup, "00");
			AddOption(optgroup, "05");
			AddOption(optgroup, "10");
			AddOption(optgroup, "15");
			AddOption(optgroup, "20");
			AddOption(optgroup, "25");
			AddOption(optgroup, "30");
			AddOption(optgroup, "35");
			AddOption(optgroup, "40");
			AddOption(optgroup, "45");
			AddOption(optgroup, "50");
			AddOption(optgroup, "55");
			
			select.selectedIndex = date.getMinutes() / 5;

			element.appendChild(select); 
			payload.minute = select;
			
			// 5. AM/PM
			select = document.createElement("SELECT");
			optgroup = select.appendChild(document.createElement("OPTGROUP"));
			optgroup.setAttribute("label", "AM/PM");
			select.size = 1;
			
			AddOption(optgroup, "AM");
			AddOption(optgroup, "PM");
			
			select.selectedIndex = ampm;

			element.appendChild(select); 
			payload.ampm = select;
		
		}

		// attach to submit event
		var form = input.form;
		
		if (form)
		{
			if (!form.dateTimeProperties)
			{
				form.dateTimeProperties = new Array();
				tilt.attachEvent(form, "submit", OnSubmitDateTime);
			}
			form.dateTimeProperties[form.dateTimeProperties.length] = payload;
		}
	}

	function AddOption(optgroup, name, value)
	{
		var option = optgroup.appendChild(document.createElement("option"));
		option.appendChild(document.createTextNode(value ? value : name));
		option.name = name;
	}

	function GetDate(value)
	{
		var date;
		if (!value || value.length == 0)
		{
			date = new Date();
		}
		else
		{
			date = new Date(value);
		}
		var year = date.getFullYear();
		if (year < 1950)
		{
			date.setFullYear(year + 100);
		}
		return date;
	}

	function OnSubmitDateTime(form)
	{
		for(var i = 0; i < form.dateTimeProperties.length; i++)
		{
			var payload = form.dateTimeProperties[i];
			var result = 
				GetPayloadValue(payload.month) + "/" +
				GetPayloadValue(payload.day) + "/" +
				GetPayloadValue(payload.year);
			if (!payload.dateOnly)
			{
				result +=	
					" " +
					GetPayloadValue(payload.hour) + ":" +
					GetPayloadValue(payload.minute) + " " +
					GetPayloadValue(payload.ampm);
			}
			payload.oldInput.value = result;
		}
		return true;
	}

	function GetPayloadValue(payloadSelect)
	{
		return payloadSelect.options[payloadSelect.selectedIndex].name;
	}

});
