/********************************************************************************
 *
 * Pregnancy Calculator
 * Created for the Visable Embryo, 2006
 *
 ********************************************************************************/

var MILLISECONDS_PER_DAY = 86400000;
var DAYS_TO_BIRTH = 266 * MILLISECONDS_PER_DAY;
var EMPTY_STRING = /^\s*$/ ;	
var today = new Date();

function calculateDueDate(form) {
	var periodDate = form.periodDate.value;
	var ovulationDate = form.ovulationDate.value;
	var estimatedDueDate = form.estimatedDueDate.value;

	var daysInCycle = parseInt(form.daysInCycle.value) * MILLISECONDS_PER_DAY;
	var lutealPhaseLength = parseInt(form.lutealPhaseLength.value) * MILLISECONDS_PER_DAY;
	
	if (EMPTY_STRING.test(periodDate) && EMPTY_STRING.test(ovulationDate)) {
		alert("Please enter at least one of: Period Date or Conception Date.");
		form.periodDate.focus();
		return false;
	}
	
	if (!EMPTY_STRING.test(periodDate)) {
		periodDate = new Date(periodDate);
		ovulationDate = new Date();
		ovulationDate.setTime( periodDate.getTime() + daysInCycle - lutealPhaseLength );
		estimatedDueDate = new Date();
		estimatedDueDate.setTime( ovulationDate.getTime() + DAYS_TO_BIRTH );		
	}
	else if(!EMPTY_STRING.test(ovulationDate)) {
		periodDate = new Date();
		ovulationDate = new Date(ovulationDate);
		periodDate.setTime(ovulationDate.getTime() - daysInCycle + lutealPhaseLength );
		estimatedDueDate = new Date();
		estimatedDueDate.setTime( ovulationDate.getTime() + DAYS_TO_BIRTH );
	}
	
	
	form.periodDate.value =  periodDate.dateFormat(Date.patterns.ShortDatePattern);
	form.ovulationDate.value =  ovulationDate.dateFormat(Date.patterns.ShortDatePattern);
	form.estimatedDueDate.value =  estimatedDueDate.dateFormat(Date.patterns.ShortDatePattern);
	
	return false;//return false, never actually submit
}

function calculateConceptionDate(form) {	
	var periodDate = new Date();
	var ovulationDate = new Date();
	var estimatedDueDate = form.estimatedDueDate.value;

	var daysInCycle = parseInt(form.daysInCycle.value) * MILLISECONDS_PER_DAY;
	var lutealPhaseLength = parseInt(form.lutealPhaseLength.value) * MILLISECONDS_PER_DAY;
	
	if (EMPTY_STRING.test(estimatedDueDate)) {
		alert("Please enter a value for Estimated Due Date.");
		form.estimatedDueDate.focus();
		return false;
	}
	
	estimatedDueDate = new Date(estimatedDueDate);
	ovulationDate.setTime( estimatedDueDate.getTime() - DAYS_TO_BIRTH );
	periodDate.setTime( ovulationDate.getTime() - lutealPhaseLength );

	form.periodDate.value =  periodDate.dateFormat(Date.patterns.ShortDatePattern);
	form.ovulationDate.value =  ovulationDate.dateFormat(Date.patterns.ShortDatePattern);
	form.estimatedDueDate.value =  estimatedDueDate.dateFormat(Date.patterns.ShortDatePattern);
	
	return false;//return false, never actually submit
}