function $u(did){
	return document.getElementById(did);
}

function hlHit(group){
	for(var i=1;i<5;i++){
		if(group<5 && $u('gr'+i).style.color!='0e2b8d'){
			$u('gr'+i).style.color = '000000';
		}
	}if(group!=5){
		$u('gr'+group).style.color = '0e2b8d';
	}
}

function Debug(){
	Information='frmPregCalc.MenstruationCycleLength.value: '+frmPregCalc.MenstruationCycleLength.value+'\n';
	alert(Information);
}

function SetNumberOfDaysInDropDownForAll(){
    SetNumberOfDaysInDropDown(frmPregCalc.LMP_Day, frmPregCalc.LMP_DOW, frmPregCalc.LMP_Month.value, frmPregCalc.LMP_Year.value);
    SetNumberOfDaysInDropDown(frmPregCalc.CD_Day, frmPregCalc.CD_DOW, frmPregCalc.CD_Month.value, frmPregCalc.CD_Year.value);
    SetNumberOfDaysInDropDown(frmPregCalc.EDD_Day, frmPregCalc.EDD_DOW, frmPregCalc.EDD_Month.value, frmPregCalc.EDD_Year.value);
    //SetNumberOfDaysInDropDown(frmPregCalc.USG_Day, frmPregCalc.USG_DOW, frmPregCalc.USG_Month.value, frmPregCalc.USG_Year.value);
    SetNumberOfDaysInDropDown(frmPregCalc.AOP_Day, frmPregCalc.AOP_DOW, frmPregCalc.AOP_Month.value, frmPregCalc.AOP_Year.value);
}

function LoadDefaultValues(){
	LoadLastValues();
}

function PreloadImages(){
	ImagePreload = new Image();
	for(ImageCounter=1; ImageCounter<=36; ImageCounter++)ImagePreload.src = './baby_age_'+ImageCounter+'.gif';
}

function LoadLastValues(){
    CurrentDate=new Date();

    MenstruationCycleLength=GetCookie('MenstruationCycleLength'); //alert (MenstruationCycleLength);
    LMP_Year=GetCookie('LastMenstrualPeriodYear');
    LMP_Month=GetCookie('LastMenstrualPeriodMonth');
    LMP_Day=GetCookie('LastMenstrualPeriodDay');

    if(MenstruationCycleLength==null)MenstruationCycleLength=UsualMenstruationCycleLength;
    if(LMP_Year==null)LMP_Year=New_DateFormat(CurrentDate, 'YYYY');
    if(LMP_Month==null)LMP_Month=New_DateFormat(CurrentDate, 'MM');
    if(LMP_Day==null)LMP_Day=New_DateFormat(CurrentDate, 'DD');

	frmPregCalc.MenstruationCycleLength.value=MenstruationCycleLength; //alert (MenstruationCycleLength);
    frmPregCalc.LMP_Year.value=LMP_Year;
    frmPregCalc.LMP_Month.value=LMP_Month;
    frmPregCalc.LMP_Day.value=LMP_Day;
}

function PopulateDateLists(){
    for(i=21; i<=35; i++)AddOptionToSelectList(frmPregCalc.MenstruationCycleLength, i, i);
    for(i=1; i<=30; i++)AddOptionToSelectList(frmPregCalc.LMP_Day, LZ(i), LZ(i));
    for(i=1980; i<=2020; i++)AddOptionToSelectList(frmPregCalc.LMP_Year, i, i);
    for(i=1; i<=30; i++)AddOptionToSelectList(frmPregCalc.CD_Day, LZ(i), LZ(i));
    for(i=1980; i<=2020; i++)AddOptionToSelectList(frmPregCalc.CD_Year, i, i);
    for(i=1; i<=30; i++)AddOptionToSelectList(frmPregCalc.EDD_Day, LZ(i), LZ(i));
    for(i=1980; i<=2020; i++)AddOptionToSelectList(frmPregCalc.EDD_Year, i, i);
    
    AddOptionToSelectList(frmPregCalc.USG_Day, '', '');
    AddOptionToSelectList(frmPregCalc.USG_Year, '', '');
    AddOptionToSelectList(frmPregCalc.USG_AgeWeeks, '', '');
    AddOptionToSelectList(frmPregCalc.USG_AgeDays, '', '');
    for(i=1; i<=30; i++)AddOptionToSelectList(frmPregCalc.USG_Day, LZ(i), LZ(i));
    for(i=2006; i<=2020; i++)AddOptionToSelectList(frmPregCalc.USG_Year, i, i);
    for(i=0; i<=45; i++)AddOptionToSelectList(frmPregCalc.USG_AgeWeeks, i, i);
    for(i=0; i<=6; i++)AddOptionToSelectList(frmPregCalc.USG_AgeDays, i, i);
    
    for(i=1; i<=30; i++)AddOptionToSelectList(frmPregCalc.AOP_Day, LZ(i), LZ(i));
    for(i=1980; i<=2020; i++)AddOptionToSelectList(frmPregCalc.AOP_Year, i, i);
    AddOptionToSelectList(frmPregCalc.AOP_AgeWeek, '', '');
    AddOptionToSelectList(frmPregCalc.AOP_AgeDay, '', '');
    for(i=0; i<=45; i++)AddOptionToSelectList(frmPregCalc.AOP_AgeWeek, i, i);
    for(i=0; i<=6; i++)AddOptionToSelectList(frmPregCalc.AOP_AgeDay, i, i);
}

function SetWeekDays(){
	frmPregCalc.LMP_DOW.value=New_DateFormat(new Date(frmPregCalc.LMP_Year.value, frmPregCalc.LMP_Month.value, frmPregCalc.LMP_Day.value), "EEEE");
	frmPregCalc.CD_DOW.value=New_DateFormat(new Date(frmPregCalc.CD_Year.value, frmPregCalc.CD_Month.value, frmPregCalc.CD_Day.value), "EEEE");
	frmPregCalc.USG_DOW.value=New_DateFormat(new Date(frmPregCalc.USG_Year.value, frmPregCalc.USG_Month.value, frmPregCalc.USG_Day.value), "EEEE");
	frmPregCalc.EDD_DOW.value=New_DateFormat(new Date(frmPregCalc.EDD_Year.value, frmPregCalc.EDD_Month.value, frmPregCalc.EDD_Day.value), "EEEE");
}

function ShowCalendar_FertilityRange(){
	DateFrom=new Date(frmPregCalc.LMP_Year.value, frmPregCalc.LMP_Month.value-1, frmPregCalc.LMP_Day.value, 5, 0, 0, 0);
	DateTo=New_DateAdd(DateFrom, parseInt(frmPregCalc.MenstruationCycleLength.value)*4);

	YearFrom=New_DateFormat(DateFrom, 'YYYY');
	YearTo=New_DateFormat(DateTo, 'YYYY');
	MonthFrom=New_DateFormat(DateFrom, 'MM');
	MonthTo=New_DateFormat(DateTo, 'MM');

	Months='';
    MonthsSeperator='';
	for(YearCounter=YearFrom; YearCounter<=YearTo; YearCounter++){
	    MonthStart=1;
	    MonthEnd=12;
	    if(YearCounter==YearFrom)MonthStart=MonthFrom;
	    if(YearCounter==YearTo)MonthEnd=MonthTo;
	    for(MonthCounter=MonthStart; MonthCounter<=MonthEnd; MonthCounter++){
	        if(Months!='')MonthsSeperator=',';
	        Months=Months+MonthsSeperator+YearCounter+'|'+MonthCounter;
		}
	}


DaysToHighLight=frmPregCalc.LMP_Year.value+'|'+frmPregCalc.LMP_Month.value+'|'+frmPregCalc.LMP_Day.value;
MenstruationCycleLength=frmPregCalc.MenstruationCycleLength.value;

    //Fiend current date
    CurrentDate=new Date();  
    CYYYY=New_DateFormat(CurrentDate, 'YYYY');
    CMM=New_DateFormat(CurrentDate, 'MM');
    CDD=New_DateFormat(CurrentDate, 'DD');

	CalendarURL='./calendar_fertility.php?Months='+Months+'&DaysToHighLight='+DaysToHighLight+'&MenstruationCycleLength='+MenstruationCycleLength+'&UsualMenstruationCycleLength='+UsualMenstruationCycleLength+'&CYYYY='+CYYYY+'&CMM='+CMM+'&CDD='+CDD+'';

//	window.open(CalendarURL);
//window.open(CalendarURL,toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=1,resizable=0,width=450,height=600,left = 287,top = 84);
window.open(CalendarURL, '', 'scrollbars,resizable,height=675,width=720,left = 150,top = 24');

}

function ShowCalendar_DueDateRange (){
    CurrentDate=new Date();
    CYYYY=New_DateFormat(CurrentDate, 'YYYY');
    CMM=New_DateFormat(CurrentDate, 'MM');
    CDD=New_DateFormat(CurrentDate, 'DD');
    CalendarURL='./calendar_duedaterange.php?YYYY='+frmPregCalc.EDD_Year.value+'&MM='+frmPregCalc.EDD_Month.value+'&DD='+frmPregCalc.EDD_Day.value+'&CYYYY='+CYYYY+'&CMM='+CMM+'&CDD='+CDD+'';
    window.open(CalendarURL, '', 'scrollbars,resizable,height=400,width=720,left = 150,top = 84');
}
function ShowCalendar_MenstrualRecord(){
    CurrentDate=new Date();
    CYYYY=New_DateFormat(CurrentDate, 'YYYY');
    CMM=New_DateFormat(CurrentDate, 'MM');
    CalendarURL='./calendar_anual.php?Y='+frmPregCalc.LMP_Year.value+'&M='+frmPregCalc.LMP_Month.value;
    window.open(CalendarURL, '', 'scrollbars,resizable,height=500,width=650,left = 150,top = 84');
}

function MenstruationCycleLength_SetCookie(){
	var expDays = 30;
	var exp = new Date();
	exp.setTime(exp.getTime() + (expDays*24*60*60*1000));
	SetCookie('MenstruationCycleLength', frmPregCalc.MenstruationCycleLength.value, exp);
}

function ShowCalendar_CycleDays() {
  var YY = frmPregCalc.LMP_Year.value;
  var MM = frmPregCalc.LMP_Month.value;
  var DD = frmPregCalc.LMP_Day.value;
  var CurrentDate=new Date();
  var CY=New_DateFormat(CurrentDate, 'YYYY');
  var CM=New_DateFormat(CurrentDate, 'MM');
  var CD=New_DateFormat(CurrentDate, 'DD');
  var Date1=new Date(YY, MM-1, DD, 5, 0, 0, 0);
  var Date2 = New_DateAdd(Date1, -14);
  CalendarURL='./calendar_cycle.php?Y='+New_DateFormat(Date2, 'YYYY')+'&M='+New_DateFormat(Date2, 'MM')+'&D='+New_DateFormat(Date2, 'DD')+'&CD='+CD+'&CM='+CM+'&CY='+CY;
  window.open(CalendarURL, '', 'scrollbars,resizable,height=675,width=700,left = 150,top = 14');
}

function LMP_SetCookie(){
	var expDays = 30;
	var exp = new Date();
	exp.setTime(exp.getTime() + (expDays*24*60*60*1000));
	SetCookie('LastMenstrualPeriodYear', frmPregCalc.LMP_Year.value, exp);
	SetCookie('LastMenstrualPeriodMonth', frmPregCalc.LMP_Month.value, exp);
	SetCookie('LastMenstrualPeriodDay', frmPregCalc.LMP_Day.value, exp);
}

function CalculateConceiveDate(){
	DateFrom=new Date(frmPregCalc.LMP_Year.value, frmPregCalc.LMP_Month.value-1, frmPregCalc.LMP_Day.value, 5, 0, 0, 0);
	DaysToAdd=DaysToConceiveSinceLastMenstrualPeriod + (frmPregCalc.MenstruationCycleLength.value - UsualMenstruationCycleLength);
	DateAdded=New_DateAdd(DateFrom, DaysToAdd);

	Set_CD(New_DateFormat(DateAdded, 'YYYY'), New_DateFormat(DateAdded, 'MM'), New_DateFormat(DateAdded, 'DD'));
}

function CalculateEstimatedDueDate(){
	DateFrom=new Date(frmPregCalc.LMP_Year.value, frmPregCalc.LMP_Month.value-1, frmPregCalc.LMP_Day.value, 5, 0, 0, 0);
	DaysToAdd=DaysEstimatedDueDateSinceLastMenstrualPeriod+(frmPregCalc.MenstruationCycleLength.value-UsualMenstruationCycleLength);
	DateAdded=New_DateAdd(DateFrom, DaysToAdd);

	Set_EDD(New_DateFormat(DateAdded, 'YYYY'), New_DateFormat(DateAdded, 'MM'), New_DateFormat(DateAdded, 'DD'));
}

function CalculateFromLastMenstruationDate(ResetUSGInputs){
	//alert('Entering: CalculateFromLastMenstruationDate()');
	
    ResetAOPToCurrentDate();//Reset AOP dropdown date selectors to current date;

    CalculateConceiveDate();
    CalculateEstimatedDueDate();
    CalculateGestationalAge(true);
    
    //SetWeekDays();

    LMP_SetCookie();
    MenstruationCycleLength_SetCookie();
//alert('ResetUSG: '+ResetUSGInputs);
    if(ResetUSGInputs)ResetUSG();
}

function CalculateFromConceiveDate(){
	DateFrom=new Date(frmPregCalc.CD_Year.value, frmPregCalc.CD_Month.value-1, frmPregCalc.CD_Day.value, 5, 0, 0, 0);
	DaysToAdd=0-DaysToConceiveSinceLastMenstrualPeriod+(UsualMenstruationCycleLength-frmPregCalc.MenstruationCycleLength.value);
	DateAdded=New_DateAdd(DateFrom, DaysToAdd);

	Set_LMP(New_DateFormat(DateAdded, 'YYYY'), New_DateFormat(DateAdded, 'MM'), New_DateFormat(DateAdded, 'DD'));

    CalculateFromLastMenstruationDate(true);
}

function CalculateFromEstimatedDueDate(){
	DateFrom=new Date(frmPregCalc.EDD_Year.value, frmPregCalc.EDD_Month.value-1, frmPregCalc.EDD_Day.value, 5, 0, 0, 0);
	DaysToAdd=DaysEstimatedDueDateSinceLastMenstrualPeriod*(-1)-(frmPregCalc.MenstruationCycleLength.value-UsualMenstruationCycleLength);
	DateAdded=New_DateAdd(DateFrom, DaysToAdd);

	Set_LMP(New_DateFormat(DateAdded, 'YYYY'), New_DateFormat(DateAdded, 'MM'), New_DateFormat(DateAdded, 'DD'));

    CalculateFromLastMenstruationDate(true);
}

function CalculateFromUSG(){
	USG_AgeInWeeks = parseInt(frmPregCalc.USG_AgeWeeks.value);
	USG_AgeInDays = parseInt(frmPregCalc.USG_AgeDays.value);
	USG_Age = USG_AgeInWeeks*7+USG_AgeInDays; //alert(USG_Age);

	DateFrom=new Date(frmPregCalc.USG_Year.value, frmPregCalc.USG_Month.value-1, frmPregCalc.USG_Day.value, 5, 0, 0, 0);
	DaysToAdd=0-(frmPregCalc.MenstruationCycleLength.value-UsualMenstruationCycleLength)-USG_Age;
	DateAdded=New_DateAdd(DateFrom, DaysToAdd);

	Set_LMP(New_DateFormat(DateAdded, 'YYYY'), New_DateFormat(DateAdded, 'MM'), New_DateFormat(DateAdded, 'DD'));

    CalculateFromLastMenstruationDate(false);
}

function Set_LMP(Year, Month, Day){
    frmPregCalc.LMP_Year.value=Year;
    frmPregCalc.LMP_Month.value=Month;
	SetNumberOfDaysInDropDown(frmPregCalc.LMP_Day, frmPregCalc.LMP_DOW, frmPregCalc.LMP_Month.value, frmPregCalc.LMP_Year.value);
    frmPregCalc.LMP_Day.value=Day;
	SetDayOfWeekInDropDown(frmPregCalc.LMP_DOW, Day, Month, Year);
}

function Set_CD(Year, Month, Day){
    frmPregCalc.CD_Year.value=Year;
    frmPregCalc.CD_Month.value=Month;
	SetNumberOfDaysInDropDown(frmPregCalc.CD_Day, frmPregCalc.CD_DOW, frmPregCalc.CD_Month.value, frmPregCalc.CD_Year.value);
    frmPregCalc.CD_Day.value=Day;
	SetDayOfWeekInDropDown(frmPregCalc.CD_DOW, Day, Month, Year);
}

function Set_USG(Year, Month, Day){
    frmPregCalc.USG_Year.value=Year;
    frmPregCalc.USG_Month.value=Month;
	SetNumberOfDaysInDropDown(frmPregCalc.USG_Day, frmPregCalc.USG_DOW, frmPregCalc.USG_Month.value, frmPregCalc.USG_Year.value);
    frmPregCalc.USG_Day.value=Day;
	SetDayOfWeekInDropDown(frmPregCalc.USG_DOW, Day, Month, Year);
}

function Set_EDD(Year, Month, Day){
    frmPregCalc.EDD_Year.value=Year;
    frmPregCalc.EDD_Month.value=Month;
	SetNumberOfDaysInDropDown(frmPregCalc.EDD_Day, frmPregCalc.EDD_DOW, frmPregCalc.EDD_Month.value, frmPregCalc.EDD_Year.value);
    frmPregCalc.EDD_Day.value=Day;
	SetDayOfWeekInDropDown(frmPregCalc.EDD_DOW, Day, Month, Year);
}

function Set_AOP(Year, Month, Day){
    frmPregCalc.AOP_Year.value=Year;
    frmPregCalc.AOP_Month.value=Month;
	SetNumberOfDaysInDropDown(frmPregCalc.AOP_Day, frmPregCalc.AOP_DOW, frmPregCalc.AOP_Month.value, frmPregCalc.AOP_Year.value);
    frmPregCalc.AOP_Day.value=Day;
	SetDayOfWeekInDropDown(frmPregCalc.AOP_DOW, Day, Month, Year);
}

function CalculateGestationalAge(SuppressError){
	DateFrom=new Date(frmPregCalc.LMP_Year.value, frmPregCalc.LMP_Month.value-1, frmPregCalc.LMP_Day.value, 5, 0, 0, 0);
	DateTo=new Date(frmPregCalc.AOP_Year.value, frmPregCalc.AOP_Month.value-1, frmPregCalc.AOP_Day.value, 5, 0, 0, 0);
	AgeDays=New_DateDifferenceInDays(DateTo, DateFrom)-(frmPregCalc.MenstruationCycleLength.value-UsualMenstruationCycleLength);

	AgeWeeks=parseInt(AgeDays/7);
	AgeDays=AgeDays-(AgeWeeks*7);
    
    if((AgeWeeks*7)+AgeDays>45*7+6){
        AgeWeeks=AgeDays='';
        if(!SuppressError)alert('Age of pregnancy cannot exceed 45 weeks and 6 days.');
	}

    if(AgeDays<0){
        AgeWeeks=AgeDays='';
        if(!SuppressError)alert('Date to calculate pregnancy age cannot be prior to the last menstruation date.');
	}

	frmPregCalc.AOP_AgeWeek.value=AgeWeeks;
	frmPregCalc.AOP_AgeDay.value=AgeDays;

    SetBabyImage();
}

function CalculateDateToAgeOfPregnancy(){
	DateFrom=new Date(frmPregCalc.LMP_Year.value, frmPregCalc.LMP_Month.value-1, frmPregCalc.LMP_Day.value, 5, 0, 0, 0);
	DaysToAdd=(parseInt(frmPregCalc.AOP_AgeWeek.value)*7)+parseInt(frmPregCalc.AOP_AgeDay.value);
	DateAdded=New_DateAdd(DateFrom, DaysToAdd+(frmPregCalc.MenstruationCycleLength.value-UsualMenstruationCycleLength));

	Set_AOP(New_DateFormat(DateAdded, 'YYYY'), New_DateFormat(DateAdded, 'MM'), New_DateFormat(DateAdded, 'DD'));
	SetBabyImage();
}

function SetBabyImage(){
	document['PregCalc_BabyAgeImage'].src='./baby_age_'+frmPregCalc.AOP_AgeWeek.value+'.gif';
}

function ResetUSG(){
	frmPregCalc.USG_DOW.value='';
	frmPregCalc.USG_Day.value='';
	frmPregCalc.USG_Month.value='';
	frmPregCalc.USG_Year.value='';
    frmPregCalc.USG_AgeWeeks.value='';
    frmPregCalc.USG_AgeDays.value='';
}

function ResetAOPToCurrentDate(){
    CurrentDate=new Date();
	Set_AOP(New_DateFormat(CurrentDate, 'YYYY'), New_DateFormat(CurrentDate, 'MM'), New_DateFormat(CurrentDate, 'DD'));
}

function ResetData(){
	for(var i=1;i<5;i++){
		$u('gr'+i).style.backgroundColor = 'ffffff';
	}

	ResetUSG();
    
    frmPregCalc.MenstruationCycleLength.value='28';

    CurrentDate=new Date();
    LMP_Year=New_DateFormat(CurrentDate, 'YYYY');
    LMP_Month=New_DateFormat(CurrentDate, 'MM');
    LMP_Day=New_DateFormat(CurrentDate, 'DD');
    Set_LMP(LMP_Year, LMP_Month, LMP_Day);

    Set_USG('', '', '');
	frmPregCalc.USG_AgeDays.value='';
	frmPregCalc.USG_AgeWeeks.value='';
	frmPregCalc.USG_DOW.value='';

    ResetAOPToCurrentDate()
	CalculateFromLastMenstruationDate(true);
}