function jNumericChange(evt, obj)
{
	bIsDirty = true;
	var nChar = (evt.which ? evt.which : event.keyCode);
	return (nChar < 48 || nChar > 57 ? false : true);
}


function j4DigitChange(evt, obj)
{
	bIsDirty = true;
	var nChar = (evt.which ? evt.which : event.keyCode);
	if (nChar < 48 || nChar > 57) return false;
	var nLength = obj.value.length;
	if (nLength >= 4) return false;
	return true;
}

function jDecimalChange(evt, obj)
{
	bIsDirty = true;
	var nChar = (evt.which ? evt.which : event.keyCode);
	if ((nChar < 48 || nChar > 57) && nChar != 46) return false;
	if (nChar == 46 && obj.value.indexOf('.') != -1) return false; // Check for dot
	return true;
}

function jDateChange(evt, obj)
{
	bIsDirty = true;
	if (document.selection.type == 'Text')
		document.selection.clear();
	
	var nChar = (evt.which ? evt.which : event.keyCode);
	if (nChar < 47 || nChar > 57) return false;
	
	var nState = obj.value.length;
	switch (nState)
	{
		case 0: return (nChar == 47 ? false : true);
		case 1:	if (nChar == 47) { obj.value = '0' + obj.value + '/'; return false; } else return true;
		case 2: if (nChar != 47) { obj.value = obj.value + '/' + String.fromCharCode(nChar); return false; } else return true;
		case 3: return (nChar == 47 ? false : true);
		case 4: if (nChar == 47) 
			{ obj.value = obj.value.substr(0, 3) + '0' + obj.value.substr(3, 1) + '/'; return false; } else return true;
		case 5: if (nChar != 47) { obj.value = obj.value + '/' + String.fromCharCode(nChar); return false; } else return true;
		case 6: return (nChar == 47 ? false : true);
		case 7: return (nChar == 47 ? false : true);
		case 8: return (nChar == 47 ? false : true);
		case 9: return (nChar == 47 ? false : true);
	
		default:
			return false;
	}
}

function jDateValidate(obj)
{
	// FIX: error when 1/1/
	if (obj.value.length == 0) return true;
	var nSlash = obj.value.search('/');
	if (nSlash == -1) { alert('The field ' + obj.name + ' does not contain a valid date!'); return false; };
	var strMonth = obj.value.substr(0, nSlash);
	var nMonth = new Number(strMonth);
	if (nMonth < 1 || nMonth > 12) { alert('The field ' + obj.name + ' does not contain a valid date!'); return false; };

	var strDayYear = obj.value.substr(nSlash+1);
	nSlash = strDayYear.search('/');
	if (nSlash == -1) { alert('The field ' + obj.name + ' does not contain a valid date!'); return false; };
	var strDay = strDayYear.substr(0, nSlash);
	var nDay = new Number(strDay);
	if (nDay < 1 || nDay > 31) { alert('The field ' + obj.name + ' does not contain a valid date!'); return false; };

	var strYear = strDayYear.substr(nSlash+1);
	if (strYear.length == 0) { alert('The field ' + obj.name + ' does not contain a valid date!'); return false; };
	var nYear = new Number(strYear);
	if (nYear >= 0 && nYear < 50) 
	{ obj.value = strMonth + '/' + strDay + '/' + (nYear + 2000); return true; }

	if (nYear >= 50 && nYear < 100) 
	{ obj.value = strMonth + '/' + strDay + '/' + (nYear + 1900); return true; }
	
	if (nYear < 1900 || nYear > 2100) { alert('The field ' + obj.name + ' does not contain a valid date!'); return false; };
	
	return true;
}

String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g,"").replace(/\s+/g," ");
}

// Dirty record maintanance
var bIsDirty = false;
function onMenuClick()
{
	return (!bIsDirty || confirm('Warning! All unsaved changes will be lost!'));
}

// Outcomes submission check
function jOutcomesSubmission()
{
	// Check the 'Fill Later' checkbox for CARS
	if ((document.getElementById('CARSFillNow') && document.getElementById('CarsFillNow').checked) || document.getElementById('CARSOnly'))
	{
		if (document.getElementsByName('casemgr_id')[0].value == '')
		{
			alert('You must select a case manager!');
			return false;
		}
	}

	// Check the 'Fill Later' checkbox for surveys
	if ((document.getElementById('ServFillNow') && document.getElementById('ServFillNow').checked) || document.getElementById('ServOnly'))
	{
		var elements = document.forms[0].elements;
		for(var i = 0 ; i < elements.length ; ++i) 
			if (elements[i].type == 'radio')
			{
				var radiogroup = elements[elements[i].name]; // get the whole set of radio buttons.
				var itemchecked = false;
				for(var j = 0 ; j < radiogroup.length && !itemchecked ; ++j)
					if(radiogroup[j].checked) itemchecked = true;

				if (!itemchecked)
				{
					alert('Please complete ' + elements[i].name);
					return false;
				}
			}
	}
	return true;
}
//Victor::Get the last day of Feb.  29 or 28 ?
function jLastDayofFeb(){
	//get Current Time
	var currentTime = new Date()
	var thisyear = currentTime.getFullYear();
	
	if((thisyear%4) !=0){
		//e.g. 2007 cannot be mod by 4
		return 28;
	}else{
		//e.g. 2008 can be mod by 4,so there are 29 days in Feb. 2008
		return 29;
	}
}
function jLastDayOfMonth(month)
{
	if (month == 2)
		return jLastDayofFeb();
	else if (month == 1 || month == 3 || month == 5 || month == 7 || 
			 month == 8 || month == 10 || month == 12)
		return 31;
	else
		return 30;
}

function jSelectDate(dateid, nameFrom, nameTo)
{
	var oFrom = document.getElementsByName(nameFrom)[0];
	var oTo = document.getElementsByName(nameTo)[0];
	var now = new Date();
	if (dateid >= 1 && dateid <= 12)
	{
		oFrom.value = dateid + '/01/' + now.getFullYear();
		oTo.value = dateid + '/' + jLastDayOfMonth(dateid) + '/' + now.getFullYear();
	}
	else if (dateid == 21)
	{
		oFrom.value = '07/01/' + now.getFullYear();
		oTo.value = '06/30/' + (now.getFullYear()+1);
	}
	else if (dateid == 22)
	{
		oFrom.value = '01/01/' + now.getFullYear();
		oTo.value = (now.getMonth()+1) + '/' + now.getDate() + '/' + now.getFullYear();
	}
	else if (dateid == 20)
	{
		oFrom.value = '03/01/' + now.getFullYear();
		oTo.value = (now.getMonth()+1) + '/' + now.getDate() + '/' + now.getFullYear();
	}
	else if (dateid == 23)
	{
		oFrom.value = '01/01/' + now.getFullYear();
		oTo.value = '12/31/' + now.getFullYear();
	}
	else if (dateid == 24)
	{
		oFrom.value = '01/01/' + (now.getFullYear()-1);
		oTo.value = '12/31/' + (now.getFullYear()-1);
	}
	else if (dateid == 25)
	{
		var before = new Date;
		before.setDate(now.getDate()-30);
		oFrom.value = before.getMonth() + '/' + before.getDate() + '/' + before.getFullYear();
		oTo.value = now.getMonth() + '/' + now.getDate() + '/' + now.getFullYear();
	}
	else if (dateid == 26)
	{
		var before = new Date;
		before.setDate(now.getDate()-182);
		if (before.getMonth() == 0)
			oFrom.value = 12 + '/' + before.getDate() + '/' + (before.getFullYear()-1);
		else
			oFrom.value = before.getMonth() + '/' + before.getDate() + '/' + before.getFullYear();
		oTo.value = now.getMonth() + '/' + now.getDate() + '/' + now.getFullYear();
	}
}

function jDisplayPanel(id, button, movex, movey)
{
	var oPanel = document.getElementById(id);
	if (oPanel.style.display == 'none')
	{
		var oPos = button;
		var posX = 0; posY = 0;
		if( oPos.offsetParent )
			for(;oPos.offsetParent; oPos = oPos.offsetParent ) 
			{ posX += oPos.offsetLeft; posY += oPos.offsetTop; }
		else
			{ posX = oPos.x; posY = oPos.y; }
		oPanel.style.display = '';
		oPanel.style.left = (posX + movex) + 'px';
		oPanel.style.top = (posY + movey) + 'px';
	} 
	else 
		oPanel.style.display = 'none';
	
	return oPanel;
}

function jHidePanel(id)
{
	document.getElementById(id).style.display = 'none';
}

	