function genDateFromString(dateStr)
{
	var dateRegExp = new RegExp("([1-9]|([0-3][0-9]))\\/([1-9]|[0-1][0-9])\\/((20[0-1][0-9])|([0-1][0-9])|[0-9])", "i");
	if( dateRegExp.test(dateStr) )
	{
		var match = dateRegExp.exec(dateStr);
		var year = match[4];
		var month = match[3];
		var day = match[1];
		if( year < 2000 )
			year = 2000 + year;
		if( month == 0 )
			return new Date();
		if( month > 12 )
			return new Date();
		if( day == 0 )
			return new Date();
		if( day > 31 )
			return new Date();
		return new Date( year, month - 1, day, 6 );
			
	}
	return new Date();
}

//returns date generated from passed IDs
function genDate(oId)
{
	var dateStr = document.getElementById(oId.Date).value;
	return genDateFromString(dateStr);
}

function validateDate(oId, range)
{
	var date = genDate(oId);
	
	if (range && range[0] != "" && range[1] != "")
	{
		var start_date = genDateFromString(range[0]);
		var end_date = genDateFromString(range[1]);
		
		if (date < start_date)
			date = start_date;
		if (date > end_date)
			date = end_date;
			
		updateDateFields(oId, date);
	}
	else
	{
		updateDateFields(oId, date);
	}
}

function genDate2(oId)
{
	var oYear = document.getElementById(oId.Year);
	var oMonth = document.getElementById(oId.Month);
	var oDay = document.getElementById(oId.Day);

	if (!oYear || !oMonth || !oDay)
		return new Date();
	var year = oYear.value;
	var month = oMonth.value;
	var day = oDay.value;

	if( month == 0 )
		return new Date();
	if( month > 12 )
		return new Date();
	if( day == 0 )
		return new Date();
	if( day > 31 )
		return new Date();
	
	var numDays = getDaysInMonth(new Date( year, month - 1 ));
	if (day > numDays)
		day = numDays;

	return new Date( year, month - 1, day, 6 );
}

function getStringDate()
{

}

//updates fields with passed IDs to represent oDate value
function updateDateFields(oId, oDate)
{
	/*
	var oYear	= document.getElementById(oId.Year);
	var oMonth	= document.getElementById(oId.Month);
	var oDay	= document.getElementById(oId.Day);

	var day		= oDate.getDate();
	var month	= oDate.getMonth();
	var year	= oDate.getFullYear();

	oDay.selectedIndex		= day - 1;
	oMonth.selectedIndex	= month;

	for (var i = 0; i < oYear.options.length; ++i)
	{
		if (oYear.options[i].value == (year + ""))
		{
			oYear.selectedIndex = i;
			break;
		}
	}
	*/

	var day		= oDate.getDate();
	var month	= oDate.getMonth() + 1;
	var year	= oDate.getFullYear();
	
	var dateEdit = document.getElementById(oId.Date);
	if( dateEdit )
	{
		dateEdit.value = ( day < 10 ? ( "0" + day ) : day ) + "/" + ( month < 10 ? ( "0" + month ) : month ) + "/" + year;
	}

}

function getDaysInMonth(Date)
{
    var days;
    var month = Date.getMonth() + 1;
    var year  = Date.getFullYear();

    if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
    {
        return days = 31;
    }
    else if (month == 4 || month == 6 || month == 9 || month == 11)
    {
        return days = 30;
    }
    else if (month == 2)
    {
        if (isLeapYear(year))
        {
            return days = 29;
        }
        else
        {
            return days = 28;
        }
    }
}

function isLeapYear(Year)
{
    if (((Year % 4) == 0) && ((Year % 100) != 0) || ((Year % 400) == 0))
    {
        return true;
    }
    else
    {
        return false;
    }
}

function getEventObj(e)
{
	if(!e)e=window.event;
	return e;
}

function stopBubble(e)
{
	e=getEventObj(e);
	e.cancelBubble=true;
	if( e.stopPropagation )
		e.stopPropagation();
}

function getPos( element )
{
	var left = element.offsetLeft;
	var top = element.offsetTop;
	
	for (var parent = element.offsetParent; parent; parent = parent.offsetParent)
	{  
		left += parent.offsetLeft;
		top += parent.offsetTop;
	}

	return [top, left];
}

function getScrollOffset()
{
	var scrOfX = 0;
	var scrOfY = 0;
	
	if( typeof( window.pageYOffset ) == 'number' )
	{
		scrOfY = window.pageYOffset;
		scrOfX = window.pageXOffset;
	}
	else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) )
	{
   		scrOfY = document.body.scrollTop;
   		scrOfX = document.body.scrollLeft;
	} 
	else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) )
	{
   		scrOfY = document.documentElement.scrollTop;
   		scrOfX = document.documentElement.scrollLeft;
	}
	
	return { "x" : scrOfX, "y" : scrOfY };
}