/*
*	Number of days in a month.
*/
function daysInMonth(year, month) 
{
	var ds = String(month+1)+'/0/'+String(year);
	var dd = new Date(ds);
	return dd.getDate();
}

/*
*	Set days based on months.
*/
function SetDays(logicalname)
{
	// Get SELECT items.
	var monthField = document.getElementById(logicalname+'_Month');
	var month = monthField.options[monthField.selectedIndex].value;
	alert('month = ' + month);
	
	var dayField = document.getElementById(logicalname+'_Day');
	
	var yearField = document.getElementById(logicalname+'_Year');
	var year;
	
	if (yearField.selectedIndex >= 0)
	{
		year = yearField.options[yearField.selectedIndex].value;
	}
	else
	{
		var now = new Date();
		year = now.getFullYear();
	}
	
	alert('year = ' + year);
	
	var numDays = daysInMonth(year, month);
	
	if (numDays == 30)
	{
		dayField.options[dayField.options.length] = null;
	}
	else if (numDays == 29)
	{
		dayField.options[dayField.options.length] = null;
		dayField.options[dayField.options.length-1] = null;
	}
	else if (numDays = 28)
	{
		dayField.options[dayField.options.length] = null;
		dayField.options[dayField.options.length-1] = null;
		dayField.options[dayField.options.length-2] = null;
	}
}


//_______________________________________________________
//
//	HomeData Pub Date
//_______________________________________________________
function GetWeek(nowDay)
{
	if (nowDay >= 1 && nowDay <= 4)
	{
		nowWeek = 1;
	}
	else if (nowDay >= 5 && nowDay <= 11)
	{
		nowWeek = 2;
	}
	else if (nowDay >= 12 && nowDay <= 18)
	{
		nowWeek = 3;
	}
	else if (nowDay >= 19 && nowDay <= 25)
	{
		nowWeek = 4;
	}
	else if (nowDay >= 26 && nowDay <= 31)
	{
		nowWeek = 5;
	}
	else
	{
		alert('Week range not found');
	}
	
	return nowWeek;
}

function SetField(field, value, debug)
{
	if (debug)
	{
		alert('SetField ' + field.id + '.selectedIndex = ' + field.selectedIndex + ', value = ' + value + ', ' + field.id + '.options.length = ' + field.options.length);
		alert(field.id + '.options.length = ' + field.options.length);
	}
	
	for (var i=0; i < field.options.length; i++)
	{
		if (field.options[i].value == value)
		{
			if (debug)
			{
				alert('Setting index = ' + i);
			}
			field.selectedIndex = i;
			break;
		}
	}
	return;
}

function SetPubDateDefault()
{
	//alert('inside pubdate default');
	
	var fromMonthField	= document.getElementById('PUB_DATE_FromMonth');
	
	if (fromMonthField != null)
	{
		var fromYearField	= document.getElementById('PUB_DATE_FromYear');
		var fromWeekField	= document.getElementById('PUB_DATE_FromWeek');
		var toMonthField	= document.getElementById('PUB_DATE_ToMonth');
		var toYearField		= document.getElementById('PUB_DATE_ToYear');
		var toWeekField		= document.getElementById('PUB_DATE_ToWeek');
		
		var now = new Date();
	
		var nowMonth = now.getMonth() + 1;
		var nowYear = now.getFullYear();
		var nowDay = now.getDate();
		var nowWeek = 0;
		
		nowWeek = GetWeek(nowDay);
		
		SetField(fromMonthField, nowMonth, false);
		SetField(fromYearField, nowYear, false);
		SetField(fromWeekField, nowWeek, false);
		SetField(toMonthField, nowMonth, false);
		SetField(toYearField, nowYear, false);
		SetField(toWeekField, nowWeek, false);
	}
}

function SetSeasonalDateDefault()
{
	//alert('inside seasonal date');

	var monthField = document.getElementById('SeasSuppValue_Month');
	
	if (monthField != null)
	{
		var dayField	= document.getElementById('SeasSuppValue_Day');
		var yearField	= document.getElementById('SeasSuppValue_Year');
		
		var now = new Date();
		
		var nowMonth = now.getMonth() + 1;
		var nowYear = now.getFullYear();
		var nowDay = now.getDate();
		
		SetField(monthField, nowMonth, false);
		SetField(dayField, nowDay, false);
		SetField(yearField, nowYear, false);
	}
}

function y2k(number) 
{ 
	return (number < 1000) ? number + 1900 : number;
}


/***********************************************
*	Set pubdateHotlines variable
*	Alert user that their last selection will be
*	kept.
*	
***********************************************/
var pubdateHotlineMRU;
function SetPubdateHotlines(type)
{
	if (pubdateHotlineMRU != type && pubdateHotlineMRU != null && typeof(pubdateHotlineMRU) != 'undefined')
	{
		// Alert user only one of the fields can be used.
		alert('Hotline and Publication Date can not both be used in the same count.\n\nYour most recent selection will be retained.');
		
		// Clear other fields, either hotlines or pub_date.
		if (pubdateHotlineMRU == 'HOTLINES')
		{
			//alert('clearning hotlines ...');
			clearHotlines();
		}
		else if (pubdateHotlineMRU == 'PUB_DATE')
		{
			//alert('clearning pubdate ...');
			clearPubDate();
		}
	}
	
	pubdateHotlineMRU = type;
	
	document.getElementById('PUBDATE_HOTLINES').value = type;
}


function clearPubDate()
{
	var fromMonthField	= document.getElementById('PUB_DATE_FromMonth');
	var fromYearField	= document.getElementById('PUB_DATE_FromYear');
	var fromWeekField	= document.getElementById('PUB_DATE_FromWeek');
	var toMonthField	= document.getElementById('PUB_DATE_ToMonth');
	var toYearField		= document.getElementById('PUB_DATE_ToYear');
	var toWeekField		= document.getElementById('PUB_DATE_ToWeek');
	
	SetField(fromMonthField, 0, false);
	SetField(fromYearField, 0, false);
	SetField(fromWeekField, 0, false);
	SetField(toMonthField, 0, false);
	SetField(toYearField, 0, false);
	SetField(toWeekField, 0, false);
}

function clearHotlines()
{
	var hotline1	= document.getElementById('HOTLINES_1');
	var hotline2	= document.getElementById('HOTLINES_2');
	var hotline3	= document.getElementById('HOTLINES_3');
	var hotline4	= document.getElementById('HOTLINES_4');
	var hotline5	= document.getElementById('HOTLINES_5');
	var hotline6	= document.getElementById('HOTLINES_6');
	
	hotline1.checked = false;
	hotline2.checked = false;
	hotline3.checked = false;
	hotline4.checked = false;
	hotline5.checked = false;
	hotline6.checked = false;
}

function SetPubDate(timeDesc, name)
{
	var days;
	var now = new Date();
	
	var fromMonthField	= document.getElementById('PUB_DATE_FromMonth');
	
	if (fromMonthField != null)
	{
		var fromYearField	= document.getElementById('PUB_DATE_FromYear');
		var fromWeekField	= document.getElementById('PUB_DATE_FromWeek');
		var toMonthField	= document.getElementById('PUB_DATE_ToMonth');
		var toYearField		= document.getElementById('PUB_DATE_ToYear');
		var toWeekField		= document.getElementById('PUB_DATE_ToWeek');
		
		var nowMonth	= toMonthField.options[toMonthField.selectedIndex].value;
		var nowYear		= toYearField.options[toYearField.selectedIndex].value;		
		var week		= toWeekField.options[toWeekField.selectedIndex].value;
		var nowDay		= now.getDate();
		
		switch (timeDesc)
		{
			case "7DAYS":
				
				var date = new Date();
				//alert('date = ' + date);
				var newDate = new Date(Date.UTC(y2k(date.getYear()),date.getMonth(),date.getDate()-7));
				//alert('newDate = ' + date);
				year = newDate.getYear();
				day = newDate.getDate();
				month = newDate.getMonth()+1;
				week = GetWeek(day);
				break;
				
			case "14DAYS":
				var date = new Date();
				var newDate = new Date(Date.UTC(y2k(date.getYear()),date.getMonth(),date.getDate()-14));
				year = newDate.getYear();
				day = newDate.getDate();
				month = newDate.getMonth()+1;
				week = GetWeek(day);
				break;
				
			case "1MONTH":
				var date = new Date();
				var newDate = new Date(Date.UTC(y2k(date.getYear()),date.getMonth()-1,date.getDate()));
				year = newDate.getYear();
				day = newDate.getDate();
				month = newDate.getMonth()+1;
				week = GetWeek(day);
				break;
				
			case "2MONTH":
				var date = new Date();
				var newDate = new Date(Date.UTC(y2k(date.getYear()),date.getMonth()-2,date.getDate()));
				year = newDate.getYear();
				day = newDate.getDate();
				month = newDate.getMonth()+1;
				week = GetWeek(day);
				break;
				
			case "3MONTH":
				var date = new Date();
				var newDate = new Date(Date.UTC(y2k(date.getYear()),date.getMonth()-3,date.getDate()));
				year = newDate.getYear();
				day = newDate.getDate();
				month = newDate.getMonth()+1;
				week = GetWeek(day);
				break;
				
			case "6MONTH":
				var date = new Date();
				var newDate = new Date(Date.UTC(y2k(date.getYear()),date.getMonth()-6,date.getDate()));
				year = newDate.getYear();
				day = newDate.getDate();
				month = newDate.getMonth()+1;
				week = GetWeek(day);
				break;
			
			default:
				alert('Not a valid option.');
				break;
		}
		
		SetField(fromMonthField, month, false);
		SetField(fromYearField, year, false);
		SetField(fromWeekField, week, false);
		
		return;
	}
	
}

//_______________________________________________________
//
//	Validate demographic page.
//	Checks dropdowns (dates, etc.), text boxes (numeric
//	ranges, etc.), etc.
//_______________________________________________________
function validateDemographics(obj,recalc)
{
	var inputs = document.getElementsByTagName('input');
	var valid = true;
	var rangeValid = true;
	var re_NUMERIC = new RegExp(/\d+/);
	var persistenceUpdateDate = document.getElementById('max:AccuData_CTL_CowDemographics:0:ProductUpdateDate');

	// ------------------------------------------------------------
	// 08/03/07 - jwh 02
	// ---
	// recalc is used in some places as an optional param. added a
	// check for this along with a default value for recalc.
	// ------------------------------------------------------------
	if ( recalc === undefined )
		recalc = false;

	if (persistenceUpdateDate != null)
	{
		persistenceUpdateDate = persistenceUpdateDate.value.split('/');

		var myDate = new Date();
		if(persistenceUpdateDate[0] != null && persistenceUpdateDate[1] != null && persistenceUpdateDate[2] != null)
			myDate.setFullYear(persistenceUpdateDate[2],persistenceUpdateDate[0] - 1, persistenceUpdateDate[1]);
	}
	
	// Default values.
	//populateUncheckedDefaultValues();
	
	// Seasonal flag.
	if (document.getElementById('SeasSuppValue_Month') != null)
	{
		var frmMonth = document.getElementById('SeasSuppValue_Month');
		var frmYear = document.getElementById('SeasSuppValue_Year');
		var frmDay = document.getElementById('SeasSuppValue_Day');
		
		if (frmMonth.selectedIndex > 0 || frmYear.selectedIndex > 0 || frmDay.selectedIndex > 0)
		{
			var seasonDate = new Date();
			seasonDate.setFullYear(frmYear.value, frmMonth.value - 1, frmDay.value);
			if (myDate != null && seasonDate > myDate)
				alert ("You have selected a mail date " + frmMonth.value + "/" + frmDay.value + "/" + frmYear.value + " which is beyond the current CASS certification date " + (myDate.getMonth() + 1) + "/" + myDate.getDate() + "/" + myDate.getFullYear() + " on this file. You may place an order using this mail date; however, you will not be able to presort the order.");

			if (frmMonth.selectedIndex == 0 || frmYear.selectedIndex == 0 || frmDay.selectedIndex == 0)
			{
				valid = false;
				setTextFieldAlert(frmMonth);
				setTextFieldAlert(frmYear);
				setTextFieldAlert(frmDay);
			}
			else 
			{
				var day = parseInt(frmDay.options[frmDay.selectedIndex].value);
				var month = parseInt(frmMonth.options[frmMonth.selectedIndex].value);
				var year = parseInt(frmYear.options[frmYear.selectedIndex].value);
				var days = parseInt(daysInMonth(year, month));
				/*
				alert('month = ' + month);
				alert('day = ' + day);
				alert('year = ' + year);
				alert('days in month = ' + days);
				*/
				if (day > days)
				{
					valid = false;
					setTextFieldAlert(frmMonth);
					//setTextFieldAlert(frmYear);
					setTextFieldAlert(frmDay);
				}
			}
		}
		
	}
	
	// Date Ranges.
	var inputs_select = document.getElementsByTagName('select');
	//alert('inputs_select.length = ' + inputs_select.length);
	for(var j=0; j < inputs_select.length; j++) 
    {
		var dateRangeValid = true;
		var input_select = inputs_select[j]
		
		//alert(input_select.name + '.selectedIndex = ' + input_select.selectedIndex + ', selectedValue = ' + input_select.options[input_select.selectedIndex].text);
		//alert('input_select.name.indexOf(\'MonthRange_From_Month\') = ' + input_select.name.indexOf('MonthRange_From_Month'));
		
		// Found first dropdown for BirthRange || MonthYearRange and it has a selected value.
		if (input_select.name.indexOf(':BirthRange_From_Month') >= 0 || input_select.name.indexOf(':MonthYearRange_From_Month') >= 0
			|| input_select.name.indexOf(':BirthYear_From_Year') >= 0 || input_select.name.indexOf(':BirthMonth_From_Month') >= 0
			|| input_select.name.indexOf(':MonthDayYearRange_From_Month') >= 0 || input_select.name.indexOf(':YearRange_From_Year') >= 0
			|| input_select.name.indexOf(':MonthRange_From_Month') >= 0 || input_select.name.indexOf(':MonthYearWeekRange_From_Month') >= 0 
			|| input_select.name.indexOf(':YYMM_Range_From_Month') >= 0)
		{
			var bMonthYearSelected = false;
			var bMonthSelected = false;
			var bYearSelected = false;
			var bMonthYearWeekSelected = false;
			var bMonthDayYearSelected = false;

			if (input_select.name.indexOf('BirthRange_From_Month') >= 0 || input_select.name.indexOf(':MonthYearRange_From_Month') >= 0 || input_select.name.indexOf(':YYMM_Range_From_Month') >= 0)
			{
				var fromMonthField = input_select;
				var fromYearField = inputs_select[j+1];
				var toMonthField = inputs_select[j+2];
				var toYearField = inputs_select[j+3];
				
				if (fromMonthField.selectedIndex > 0 || fromYearField.selectedIndex > 0 || toMonthField.selectedIndex > 0 || toYearField.selectedIndex > 0)
				{
					bMonthYearSelected = true;
				}
			}
			else if (input_select.name.indexOf(':BirthYear_From_Year') >= 0 || input_select.name.indexOf(':YearRange_From_Year') >= 0)
			{
				var fromYearField = input_select;
				var toYearField = inputs_select[j+1];
				
				if (fromYearField.selectedIndex > 0 || toYearField.selectedIndex > 0)
				{
					bYearSelected = true;
				}
			}
			else if (input_select.name.indexOf(':BirthMonth_From_Month') >= 0 || input_select.name.indexOf(':MonthRange_From_Month') >= 0)
			{
				var fromMonthField = input_select;
				var toMonthField = inputs_select[j+1];
				
				if (fromMonthField.selectedIndex > 0 || toMonthField.selectedIndex > 0)
				{
					bMonthSelected = true;
				}
			}
			else if (input_select.name.indexOf(':MonthYearWeekRange_From_Month') >= 0)
			{
				var fromMonthField = input_select;
				var fromYearField = inputs_select[j+1];
				var fromWeekField = inputs_select[j+2];
				var toMonthField = inputs_select[j+3];
				var toYearField = inputs_select[j+4];
				var toWeekField = inputs_select[j+5];
				
				if (fromMonthField.selectedIndex > 0 || fromYearField.selectedIndex > 0 || fromWeekField.selectedIndex
					|| toMonthField.selectedIndex > 0 || toYearField.selectedIndex > 0 || toWeekField.selectedIndex)
				{
					bMonthYearWeekSelected = true;
				}
			}
			else if (input_select.name.indexOf(':MonthDayYearRange_From_Month') >= 0)
			{
				var fromMonthField	= input_select;
				var fromDayField	= inputs_select[j+1];
				var fromYearField	= inputs_select[j+2];
				var toMonthField	= inputs_select[j+3];
				var toDayField		= inputs_select[j+4];
				var toYearField		= inputs_select[j+5];
				
				if (fromMonthField.selectedIndex > 0 || fromDayField.selectedIndex > 0 || fromYearField.selectedIndex
					|| toMonthField.selectedIndex > 0 || toDayField.selectedIndex > 0 || toYearField.selectedIndex)
				{
					bMonthDayYearSelected = true;
				}
			}
			
			// If any of the values are selected, make sure the other 3 are as well.
			if (bMonthYearSelected || bYearSelected || bMonthSelected || bMonthYearWeekSelected || bMonthDayYearSelected)
			{
				// If any of the other values are not selected, error.
				
				// From & To Month
				if (bMonthYearSelected || bMonthSelected || bMonthYearWeekSelected || bMonthDayYearSelected)
				{
					// From_Month
					if (fromMonthField.selectedIndex <= 0)
					{
						dateRangeValid = false;
						setTextFieldAlert(fromMonthField);
					}
					else
					{
						resetTextFieldAlert(fromMonthField);
					}
					//To_Month
					if (toMonthField.selectedIndex <= 0)
					{
						dateRangeValid = false;
						setTextFieldAlert(toMonthField);
					}
					else
					{
						resetTextFieldAlert(toMonthField);
					}
				}
				// From & To Year
				if (bMonthYearSelected || bYearSelected || bMonthYearWeekSelected || bMonthDayYearSelected)
				{
					// From_Year
					if (fromYearField.selectedIndex <= 0)
					{
						dateRangeValid = false;
						setTextFieldAlert(fromYearField);
					}
					else
					{
						resetTextFieldAlert(fromYearField);
					}
					// To_Year
					if (toYearField.selectedIndex <= 0)
					{
						dateRangeValid = false;
						setTextFieldAlert(toYearField);
					}
					else
					{
						resetTextFieldAlert(toYearField);
					}
				}
				// From & To Day
				if (bMonthDayYearSelected)
				{
					if (fromDayField.selectedIndex <= 0)
					{
						dateRangeValid = false;
						setTextFieldAlert(fromDayField);
					}
					else
					{
						resetTextFieldAlert(fromDayField);
					}
					if (toDayField.selectedIndex <= 0)
					{
						dateRangeValid = false;
						setTextFieldAlert(toDayField);
					}
					else
					{
						resetTextFieldAlert(toDayField);
					}
				}
				// From & To Week
				if (bMonthYearWeekSelected)
				{
					if (fromWeekField.selectedIndex <= 0)
					{
						dateRangeValid = false;
						setTextFieldAlert(fromWeekField);
					}
					else
					{
						resetTextFieldAlert(fromWeekField);
					}
					if (toWeekField.selectedIndex <= 0)
					{
						dateRangeValid = false;
						setTextFieldAlert(toWeekField);
					}
					else
					{
						resetTextFieldAlert(toWeekField);
					}
				}
				
				// If selections are valid, compare dates.
				if (dateRangeValid)
				{
					
					// Get year fields selected values.
					if (bMonthYearSelected || bYearSelected || bMonthYearWeekSelected || bMonthDayYearSelected)
					{
						fromYear	= fromYearField.options[fromYearField.selectedIndex].value;
						toYear		= toYearField.options[toYearField.selectedIndex].value;
					}
					// Get month fields selected values.
					if (bMonthYearSelected || bMonthSelected || bMonthYearWeekSelected || bMonthDayYearSelected)
					{
						fromMonth	= fromMonthField.options[fromMonthField.selectedIndex].value;
						toMonth		= toMonthField.options[toMonthField.selectedIndex].value;
					}
					// Get day fields selected values.
					if (bMonthDayYearSelected)
					{
						fromDay	= fromDayField.options[fromDayField.selectedIndex].value;
						toDay	= toDayField.options[toDayField.selectedIndex].value;
					}
					// Get wek fields selected values.
					if (bMonthYearWeekSelected)
					{
						fromWeek	= fromWeekField.options[fromWeekField.selectedIndex].value;
						toWeek	= toWeekField.options[toWeekField.selectedIndex].value;
					}
					// Validate MonthDayYear Fields.
					if (bMonthDayYearSelected)
					{
						var fromDate = new Date(fromYear, fromMonth, fromDay);
						var toDate = new Date(toYear, toMonth, toDay);
						
						if (toDate < fromDate)
						{
							setTextFieldAlert(fromMonthField);
							setTextFieldAlert(fromYearField);
							setTextFieldAlert(fromDayField);
							setTextFieldAlert(toMonthField);
							setTextFieldAlert(toYearField);
							setTextFieldAlert(toDayField);
							alert('From-date must not be after To-date.');
							return false;
						}
						else
						{
							resetTextFieldAlert(fromMonthField);
							resetTextFieldAlert(fromYearField);
							resetTextFieldAlert(fromDayField);
							resetTextFieldAlert(toMonthField);
							resetTextFieldAlert(toYearField);
							resetTextFieldAlert(toDayField);
						}
					}
					else if (bMonthYearWeekSelected)
					{
						var fromDate = new Date(fromYear, fromMonth, fromWeek);
						var toDate = new Date(toYear, toMonth, toWeek);
						
						if (toDate < fromDate)
						{
							setTextFieldAlert(fromMonthField);
							setTextFieldAlert(fromYearField);
							setTextFieldAlert(fromWeekField);
							setTextFieldAlert(toMonthField);
							setTextFieldAlert(toYearField);
							setTextFieldAlert(toWeekField);
							alert('From-date must not be after To-date.');
							return false;
						}
						else
						{
							resetTextFieldAlert(fromMonthField);
							resetTextFieldAlert(fromYearField);
							resetTextFieldAlert(fromWeekField);
							resetTextFieldAlert(toMonthField);
							resetTextFieldAlert(toYearField);
							resetTextFieldAlert(toWeekField);
						}
					}
					else if (bMonthYearSelected)// Validate MonthYear Fiields.
					{
						if ((fromYear > toYear) || (fromYear == toYear && fromMonth > toMonth))
						{
							setTextFieldAlert(fromMonthField);
							setTextFieldAlert(fromYearField);
							setTextFieldAlert(toMonthField);
							setTextFieldAlert(toYearField);
							alert('From-date must be before To-date.');
							return false;
						}
						else
						{
							resetTextFieldAlert(fromMonthField);
							resetTextFieldAlert(fromYearField);
							resetTextFieldAlert(toMonthField);
							resetTextFieldAlert(toYearField);
						}
					}
					else if (bMonthSelected)
					{
						if (fromMonth > toMonth)
						{
							setTextFieldAlert(fromMonthField);
							setTextFieldAlert(toMonthField);
							alert('From-month must be before To-month.');
							return false;
						}
						else
						{
							resetTextFieldAlert(fromMonthField);
							resetTextFieldAlert(toMonthField);
						}
					}
					else if (bYearSelected)
					{
						if (fromYear > toYear)
						{
							setTextFieldAlert(fromYearField);
							setTextFieldAlert(toYearField);
							alert('From-year must be before To-year.');
							return false;
						}
						else
						{
							resetTextFieldAlert(fromYearField);
							resetTextFieldAlert(toYearField);
						}
					}
				}
				else
				{
					valid = false;
				}
			}
		}
    }
	
	
	// For each input elemenet.
	for(var k=0; k < inputs.length; k++) 
    {   
		var numericRangeValid = true;
        var input = inputs[k];

        // Skip unnecessary fields.
        if (input.type !== 'text' 
			|| input.name.indexOf('UnCheckedDefaults') >= 0 
			|| input.name.indexOf('AccuData_CTL_Logon') >= 0) 
		{
			continue;
		}
		
        // If textbox contains anything, validate.
        if (input.name.indexOf('RangeValues_From') >= 0)
		{
			var fromField = input;
			var toField   = inputs[k+1];
			
			fromField.value = fromField.value.replace(/,/g, "");
			toField.value	= toField.value.replace(/,/g, "");
			
			//alert(fromField.value);
			//alert(toField.value);
			
			//alert('Validating   ' + input.name + ' (' + input.value + ')');
			
			// If any of the 2 fields have, make sure the other has one as well.
			if (toField.value.length > 0)
			{
				// From-field.
				if (!re_NUMERIC.test(fromField.value))
				{
					numericRangeValid = false;
					setTextFieldAlert(fromField);
				}
				else
				{
					resetTextFieldAlert(fromField);
				}
				// To-field.
				if (!re_NUMERIC.test(toField.value))
				{
					numericRangeValid = false;
					setTextFieldAlert(toField);
				}
				else
				{
					resetTextFieldAlert(toField);
				}
				// Is first value > second value.
				if (numericRangeValid)
				{
					if (eval(toField.value) < eval(fromField.value))
					{
						setTextFieldAlert(fromField);
						setTextFieldAlert(toField);
						alert('Second value must be less than the first value in a range.');
						return false;
					}
					else
					{
						resetTextFieldAlert(fromField);
						resetTextFieldAlert(toField);
					}
				}
				else
				{
					valid = false;
				}
			}
		}
    }


    if (!valid)
    {
		if (!rangeValid)
		{
			alert('Range invalid. First value must be less than the second value.');
		}
		else
		{
			alert('Some fields are not in the correct format. Please verify all values.');
		}
		return false;
    }

	valid = DOB_DOBUseCheck ();
	if (valid)
	{
		 _doPostBack(obj);
		 if (recalc == true)
		 {
			RecalcCalculating();
		 }
	}
}

function DOB_DOBUseCheck ()
{
	var valid = true;
	var productID = document.getElementById('ProductID');
	if (productID != null && (productID.value == "6" || productID.value == "5"))
	{
		var dobIsSelected = false;
		var useIsSelected = false;
		var dobTable = document.getElementById('DOB_table');
		if (dobTable != null)
		{
			var inputs = dobTable.getElementsByTagName('select');
			for(var k=0; k < inputs.length; k++) 
    			{   
				if(inputs[k].value.trim().length > 0)
					dobIsSelected = true;
			}
		}

		var useTable = document.getElementById('DOB_FLAG_table');
		if (useTable != null)
		{
			var inputs = useTable.getElementsByTagName('input');
			for(var k=0; k < inputs.length; k++) 
    			{   
				if(inputs[k].type == 'radio' && inputs[k].checked && inputs[k].id != 'NullChoice')
					useIsSelected = true;
			}
      	  	}

		if (dobIsSelected && !useIsSelected)
		{
			alert('"Date of Birth" and "Date of Birth Use" must be used in conjunction with each other.');
			valid = false;
		}
		else if (!dobIsSelected && useIsSelected)
		{
			alert('"Date of Birth" and "Date of Birth Use" must be used in conjunction with each other.');
			valid = false;
		}
	}

	return valid;		
}

String.prototype.trim = function () {  return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");};

//________________________________________________________
//
//	Demographics - additional selections
//________________________________________________________
function toggleDemographicValues(name)
{	
	var logicalNameRow = document.getElementById(name);
	var	arrowImage = document.getElementById(name + '_arrowImage');
	
	if (logicalNameRow.style.display == 'none')
	{
		logicalNameRow.style.display = 'block';
		
		var checkboxID = name + '_1';
		var frmFirstCheckbox = document.getElementById(checkboxID);
		
		if (frmFirstCheckbox !== null || typeof(frmFirstCheckBox) !== 'undefined')
		{
			frmFirstCheckbox.focus();
		}
		else
		{
			var textboxID = name + '_1';
			var frmFirstTextBox = document.getElementById(textboxID);
			frmFirstTextBox.focus();
		}
		
		arrowImage.src = 'images/bullet_arrow_down_blue.png'; // todo: change to class=
	}
	else
	{
		logicalNameRow.style.display = 'none';
		arrowImage.src = 'images/bullet_arrow_right_blue.png'; // todo: change to class=
	}
}


//________________________________________________________
//
//	Demographics - select all for items containing > 5 values.
//________________________________________________________
function toggleSelectAllDemographicValues(logicalname, bChecked)
{
	var bValue;
	
	(bChecked) ? bValue=true : bValue=false;
	
	var inputs = document.getElementsByTagName('input');
	
	for(var k=0; k < inputs.length; k++) 
    {   
        var input = inputs[k];
        
        if (input.type !== 'checkbox')
		{ 
			continue;
		} 
		
		if (input.value.indexOf(logicalname) >= 0)
		{
			//alert('checking: ' + input.name + ', ' + input.value);
			input.checked = bValue;
		}
	}
}


//________________________________________________________
//
//	Demographics - confirm item move to new tab.
//________________________________________________________
function moveItemConfirm(itemName, operatorType, obj)
{
	var newOperatorType;
	
	(operatorType == 'AND') ? newOperatorType = 'OR' : newOperatorType = 'AND';
	
	var str = itemName + ' is already in the ' + operatorType + ' tab. \n';
	str += 'Click OK to move it to the ' + newOperatorType + ' tab, otherwise click Cancel.';
	
	if (confirm(str))
	{
		_doPostBack(obj);
	}
	else
	{
		return false;
	}
}


//________________________________________________________
//
//	Demographics - additional selections display.
//________________________________________________________
/*
shownTables = new Array();
function showAdditionalSelections(logicalname, subcatid)
{
	//var firstPlace = document.getElementById('FirstPlace');
	var showTable = document.getElementById(logicalname + '_table');
	var tableName = logicalname + '_table';
	var arrayName;
	
	bTableFound = false;
	for (var i=0; i < shownTables.length; i++)
	{
		if (shownTables[i] == tableName)
		{
			bTableFound = true;
			break;
		}
	}
	
	if (!bTableFound)
	{
		var myTable = document.getElementById('mainTable');
		var newRow = myTable.insertRow(0);
		var newCell = newRow.insertCell(0);
		
		showTable.style.display = 'block';
		newCell.innerHTML = showTable.outerHTML;		
		//alert('showTable.outerHTML = ' + showTable.outerHTML);
		showTable.outerHTML = '<table></table>';
		showTable.style.display = 'none';
		
		shownTables.push(tableName);
		
		// Seasonal Suppress Date - set default values.
		if (document.getElementById('max:AccuData_CTL_CowDemographics:0:SeasonalDateLogicalNames') != null)
		{
			//alert('setting seasonal date to present date');
			var seasonalMonth = document.getElementById('max:AccuData_CTL_CowDemographics:0:SeasonalDate_Month');
			var seasonalDay = document.getElementById('max:AccuData_CTL_CowDemographics:0:SeasonalDate_Day');
			var seasonalYear = document.getElementById('max:AccuData_CTL_CowDemographics:0:SeasonalDate_Year');
			var presentDate = new Date();		
			var presentDay = presentDate.getDate();
			var presentMonth = presentDate.getMonth() + 1;
			var presentYear = presentDate.getFullYear();
			//alert(presentMonth + '/' + presentDay + '/' + presentYear);
			for (var q=0; q < seasonalMonth.options.length; q++)
			{
				var compare = "";
				if (presentMonth < 10)
				{
					compare = '0' + presentMonth;
				}
				else
				{
					compare = presentMonth;
				}
				if (seasonalMonth.options[q].value == compare)
				{
					seasonalMonth.selectedIndex = q;
					break;
				}
			}
			for (var w=0; w < seasonalDay.options.length; w++)
			{
				var compare = "";
				if (presentDay < 10)
				{
					compare = '0' + presentDay;
				}
				else
				{
					compare = presentDay;
				}
				if (seasonalDay.options[w].value == compare)
				{
					seasonalDay.selectedIndex = w;
					break;
				}
			}
			for (var r=0; r < seasonalYear.options.length; r++)
			{
				if (seasonalYear.options[r].value == presentYear)
				{
					seasonalYear.selectedIndex = r;
					break;
				}
			}
		}
		
		//alert(subcatid);
		if (subcatid == 0)
		{
			arrayName = 'a' + tableName;
		}
		else
		{
			arrayName = 'a' + subcatid + '_table';
		}
		//alert(arrayName);
		var arr = eval(arrayName);
		
		for (var j=0; j < arr.length; j++)
		{
			for(var k=0; k < defaultValueIDs.length; k++)
			{
				//alert(arr[j] + '==' + defaultValueIDs[k]);
				if (arr[j] == defaultValueIDs[k])
				{
					document.getElementById(arr[j]).checked = true;
					//alert('default value found: ' + arr[j] + '=' + defaultValueIDs[k]);
					break;
				}
			}
		}
		
		// If DOB, display DOB_USE_FLAG as well.
		if (logicalname == 'DOB')
		{
			showTable = document.getElementById('DOB_USE_FLAG_table');
			tableName = 'DOB_USE_FLAG_table';
			bDOBUSETableFound = false;
			for (var i=0; i < shownTables.length; i++)
			{
				if (shownTables[i] == tableName)
				{
					bDOBUSETableFound = true;
					break;
				}
			}
			if (!bDOBUSETableFound)
			{
				showAdditionalSelections('DOB_USE_FLAG', 0);
			}
		}
		else if (logicalname == 'DOB_USE_FLAG') // If DOB_USE_FLAG, display DOB as well.
		{
			showTable = document.getElementById('DOB_table');
			tableName = 'DOB_table';
			bDOBTableFound = false;
			for (var i=0; i < shownTables.length; i++)
			{
				if (shownTables[i] == tableName)
				{
					bDOBTableFound = true;
					break;
				}
			}
			if (!bDOBTableFound)
			{
				showAdditionalSelections('DOB', 0);
			}
		}
		
		window.location.href = '#r';
	}
}
*/

//________________________________________________________
//
//	Default values.
//________________________________________________________
defaultValueIDs = new Array();
/*
function markDefault(name)
{
	document.getElementById(name).checked = true;
}
*/


//________________________________________________________
//
//	Focus find field for demographics.
//________________________________________________________
/*
function findFocus(fieldName)
{
	var field = document.getElementById(fieldName);
	field.focus();	
}
*/


//________________________________________________________
//
//	Add item to unchecked default values.
//________________________________________________________
/*
uncheckedDefaultValues = new Array();
function addUncheckedDefaultValue(field)
{
	if (field.checked == true)
	{
		uncheckedDefaultValues.push(field.value);
	}
}
*/


//________________________________________________________
//
//	Populate unchecked values field from array.
//________________________________________________________
/*
function populateUncheckedDefaultValues()
{
	var field = document.getElementById('max:AccuData_CTL_CowDemographics:0:UnCheckedDefaults');
	for (var i=0; i < uncheckedDefaultValues.length; i++)
	{
		if (i==0)
		{	
			field.value += uncheckedDefaultValues[i];
		}
		else
		{
			field.value += "," + uncheckedDefaultValues[i];
		}
	}
}
*/


//________________________________________________________
//
//	Check default values and expand their parent table.
//________________________________________________________
/*
function setDefaultValues()
{
	var inputs = document.getElementsByTagName('input');
	
	for(var k=0; k < inputs.length; k++) 
    {   
        var input = inputs[k];
        
        if (input.type != 'checkbox') 
	{
		continue; 
	}
		
		var valueArray = input.split("|");
		
		if (valueArray[3].indexOf('(Default)') >= 0)
		{
			addUncheckedDefaultValue(input);
		}
	}
}
*/




