		function updateModel( modelName, dependantModelName )
		{
			var dateField = document.getElementById( modelName );
			var monthField = document.getElementById( modelName + "_month" );
			var dayField = document.getElementById( modelName + "_day" );
			var yearField = document.getElementById( modelName + "_year" );
			var previousDate = new Date( dateField.value );

      if (!(previousDate.getMonth() == monthField.selectedIndex
          && previousDate.getYear() == yearField.options[yearField.selectedIndex].value)) {
			  updateDays( modelName );
			}

			if( dateField && monthField && dayField && yearField )
			{
				dateField.value = monthField.options[monthField.selectedIndex].value  + "/" + dayField.options[dayField.selectedIndex].value + "/" + yearField.options[yearField.selectedIndex].value;

				if( dependantModelName && previousDate )
				{
					var dependantModel = document.getElementById( dependantModelName );

					if( dependantModel )
					{
						var dependantDate = new Date( dependantModel.value );
						var dateDiff = dependantDate.getTime() - previousDate.getTime();
						var newDate = new Date( dateField.value );

						dependantDate.setTime( newDate.getTime() + dateDiff );
						dependantModel.value = ( dependantDate.getMonth() + 1 ) + "/" + ( dependantDate.getDate()) + "/" + dependantDate.getFullYear();
						updateView( dependantModel );
					}
				}
			}

		}

    function updateDays( modelName )
    {
			var monthField = document.getElementById( modelName + "_month" );
			var dayField = document.getElementById( modelName + "_day" );
			var yearField = document.getElementById( modelName + "_year" );
      var monthValue = monthField.options[monthField.selectedIndex].value;
      var yearValue = yearField.options[yearField.selectedIndex].value;
      var dayIndex = dayField.selectedIndex;

			dayField.options.length = 0;    // clear select box

      // populate day drop down
      var i = 1;
      var renderDate = new Date();
      renderDate.setDate(i);
      renderDate.setMonth(monthField.selectedIndex);
      renderDate.setYear(yearValue);
      while(renderDate.getMonth() == (monthField.selectedIndex))
      {
        dayField.options[dayField.options.length] = new Option(i,i);
        renderDate.setDate(++i);
      }

      // select previously selected day
      dayField.selectedIndex = dayIndex;
      if (dayField.selectedIndex < 0) dayField.selectedIndex = dayField.options.length-1;
    }

		function updateView( model )
		{
			var monthField = document.getElementById( model.id + "_month" );
			var dayField = document.getElementById( model.id + "_day" );
			var yearField = document.getElementById( model.id + "_year" );
		 	var modelDate = new Date( model.value );

			if( monthField && dayField && yearField && modelDate )
			{
				monthField.selectedIndex = modelDate.getMonth();
		    updateDays( model.id );
				dayField.selectedIndex = modelDate.getDate() - 1;

				for( var i = 0; i < yearField.options.length; i++ )
				{
					if( yearField.options[i].value == modelDate.getFullYear())
					{
						yearField.selectedIndex = i;
					}
				}
			}
		}
