var StartWithSunday = false;
var DayNames		= new Array('M', 'T', 'W', 'T', 'F', 'S', 'S');
var MonthNames      = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');

var DateFormat      = 'dd/MM/yyyy';

var _currDate  = new Date();
var _currYear  = _currDate.getFullYear();
var _currMonth = (_currDate.getMonth()+1);
var _currDay   = _currDate.getDate();
var TodayStr		= DateFormat.replace('yyyy', _currYear).replace('yy', _currYear).replace('MM', datepicker_FixLen(_currMonth)).replace('M', datepicker_FixLen(_currMonth)).replace('dd', datepicker_FixLen(_currDay)).replace('d', datepicker_FixLen(_currDay));



function datepicker_BuildCalendar(elm, year, month, day, iy, im, id)
{
	var _daysInMonth = new Array(31, (((0==(year % 4)) && (0!=(year % 100))) || (0 == year % 400) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

	if(iy==null && im==null && id==null)
	{
		iy = year;
		im = month;
		id = day;
	}

	var _prevYear = year;
	var _prevMonth = (month-1);
	if(_prevMonth==0)
	{
		_prevYear = (_prevYear-1);
		_prevMonth = 12;
	}

	var _nextYear = year;
	var _nextMonth = (month+1);
	if(_nextMonth==13)
	{
		_nextYear = (_nextYear+1);
		_nextMonth = 1;
	}

	var _currDate  = new Date();
	var _currYear  = _currDate.getFullYear();
	var _currMonth = (_currDate.getMonth()+1);
	var _currDay   = _currDate.getDate();

	month = (month-1);

	var _grid = '<table cellspacing="0" width="150" onmouseover="document.getElementById(\'' + elm + '_datepicker\').style.visibility = \'visible\';" cellpadding="0" border="0">';

	_grid += '\n<tr>';
	_grid += '<td align="center" style="font-family: Marlett; font-size: 16px; background-color: #D7D7E5;"><a style="text-decoration: none; color: #000000" href="javascript: datepicker_BuildCalendar(\'' + elm + '\', ' + _prevYear + ', ' + _prevMonth + ', 0, ' + iy + ', ' + im + ', ' + id + ');">3</a></td>';
	_grid += '<td colspan="7" align="center" style="font-family: Verdana, sans-serif; font-size: 11px; background-color: #D7D7E5; color: #000000; font-weight: normal;">' + MonthNames[month] + ' ' + year + '</td>';
	_grid += '<td align="center" style="font-family: Marlett; font-size: 16px; background-color: #D7D7E5;"><a style="text-decoration: none; color: #000000" href="javascript: datepicker_BuildCalendar(\'' + elm + '\', ' + _nextYear + ', ' + _nextMonth + ', 0, ' + iy + ', ' + im + ', ' + id + ');">4</a></td>';
	_grid += '</tr>\n';

	_grid += '<tr><td>&nbsp;</td>';
	for(i=0; i<7; i++)
	{
		_grid += '<td style="font-family: Verdana, sans-serif; font-size: 11px; color: #000000; font-weight: normal;">&nbsp;' + DayNames[i] + '&nbsp;</td>';
	}
	_grid += '<td>&nbsp;</td></tr>\n';

	_grid += '\n<tr>';
	_grid += '<td align="center"><img src="" height="1" width="1" alt="-" style="display: none;" /></td>';
	_grid += '<td colspan="7" align="center" style="height: 1px; background-color: #C0C0C0"><img src="" height="1" width="1" alt="-------" style="display: none;" /></td>';
	_grid += '<td align="center"><img src="" height="1" width="1" alt="-" style="display: none;" /></td>';
	_grid += '</tr>\n';

	var _firstDayOfMonth = new Date(year, month, 1).getDay();
	var _dayOfMonthOfFirstSunday = (7 - _firstDayOfMonth + ((StartWithSunday) ? 1 : 2) );
	var _howMannyDays = 7;

	_grid += '<tr><td>&nbsp;</td>';
	var _nullweek = '';
	for (var _intWeek = 0; _intWeek < 6; _intWeek++)
	{
		var _week = '';
		for (var _intDay = -7; _intDay < _howMannyDays-7; _intDay++)
        {
			var _dayOfMonth = (_intWeek * 7) + _intDay + _dayOfMonthOfFirstSunday - 7;
			if (_dayOfMonth <= 0)
            {
            	_week += '<td>&nbsp;</td>';
            	if((_howMannyDays-8)==_intDay && _intWeek==0)
            	{
            		_nullweek = _week;
            		_week = '';
            	}
            }
            else if(_dayOfMonth==_currDay && (month+1)==_currMonth && year==_currYear)
            {
            	if(_dayOfMonth==id && (month+1)==im && year==iy)
            	{
					/*today selected*/
					_week += '<td style="font-weight: normal; font-family: Verdana, sans-serif; font-size: 11px; border: 1px solid #FF0000; background-color: #FFCC00;" align="middle" onmouseover="this.style.border = \'1px solid #FFCC00\';" onmouseout="this.style.border = \'1px solid #FF0000\';"><a style="text-decoration: none; color: #000000; font-weight: normal;" href="javascript:datepicker_SetDate(\'' + elm + '\', ' + year + ', ' + (month+1) + ', ' + _dayOfMonth + ');">' + datepicker_FixLen(_dayOfMonth) + '</a></td>';
				}
				else
				{
					/*today*/
					_week += '<td style="font-weight: normal; font-family: Verdana, sans-serif; font-size: 11px; border: 1px solid #FF0000; background-color: #FFFFFF;" align="middle" onmouseover="this.style.border = \'1px solid #FFCC00\';" onmouseout="this.style.border = \'1px solid #FF0000\';"><a style="text-decoration: none; color: #000000; font-weight: normal;" href="javascript:datepicker_SetDate(\'' + elm + '\', ' + year + ', ' + (month+1) + ', ' + _dayOfMonth + ');">' + datepicker_FixLen(_dayOfMonth) + '</a></td>';
				}
            }
            else if(_dayOfMonth==id && (month+1)==im && year==iy)
            {
            	/*selectedday*/
            	_week += '<td style="font-weight: normal; font-family: Verdana, sans-serif; font-size: 11px; border: 1px solid #FFCC00; background-color: #FFCC00;" align="middle" onmouseover="this.style.border = \'1px solid #FFCC00\';" onmouseout="this.style.border = \'1px solid #FFCC00\';"><a style="text-decoration: none; color: #000000; font-weight: normal;" href="javascript:datepicker_SetDate(\'' + elm + '\', ' + year + ', ' + (month+1) + ', ' + _dayOfMonth + ');">' + datepicker_FixLen(_dayOfMonth) + '</a></td>';
            }
            else if(_dayOfMonth<=_daysInMonth[month])
            {
            	/*other*/
                _week += '<td style="font-weight: normal; font-family: Verdana, sans-serif; font-size: 11px; border: 1px solid #FFFFFF; background-color: #FFFFFF;" align="middle" onmouseover="this.style.border=\'1px solid #FFCC00\';" onmouseout="this.style.border=\'1px solid #FFFFFF\';"><a style="text-decoration: none; color: #000000; font-weight: normal;" href="javascript:datepicker_SetDate(\'' + elm + '\', ' + year + ', ' + (month+1) + ', ' + _dayOfMonth + ');">' + datepicker_FixLen(_dayOfMonth) + '</a></td>';
            }
            else
            {
            	_week += '<td class="datepicker_noday">&nbsp;</td>';
            }
            if(_intDay==-1 || _intDay==6)
            {
            	if(_week!='')
            	{
            		_week += '<td>&nbsp;</td></tr>\n' + ((_intWeek<5) ? '<tr><td>&nbsp;</td>' : '');
            	}
            	else
            	{
            		_nullweek += '<td>&nbsp;</td><td height=\"13\"><img src=\"\" height=\"13\" width=\"1\" />&nbsp;</td></tr>\n';
            	}
            }
		}
		_grid += _week;
	}
	_grid += _nullweek
	_grid += '\n<tr>';
	_grid += '<td align="center"><img src="" height="1" width="1" alt="-" style="display: none;" /></td>';
	_grid += '<td colspan="7" align="center" style="height: 1px; background-color: #C0C0C0"><img src="" height="1" width="1" alt="-------" style="display: none;" /></td>';
	_grid += '<td align="center"><img src="" height="1" width="1" alt="-" style="display: none;" /></td>';
	_grid += '</tr>\n';
	_grid += '<tr><td colspan="9" align="center" style="font-weight: normal; font-family: Verdana, sans-serif; font-size: 11px;"><a style="text-decoration: none; color: #000000; font-weight: normal;" href="javascript: datepicker_BuildCalendar(\'' + elm + '\', ' + _currYear + ', ' + _currMonth + ', ' + _currDay + ', ' + iy + ', ' + im + ', ' + id + ');">' + TodayStr + '</a></td></tr>\n';
	_grid += '</tr></table>';
	document.getElementById(elm + '_datepicker').innerHTML = '';
	document.getElementById(elm + '_datepicker').innerHTML = _grid;
}

function datepicker_Show(elm)
{
	var _currDate  = new Date();
	var _currYear  = _currDate.getFullYear();
	var _currMonth = (_currDate.getMonth()+1);
	var _currDay   = _currDate.getDate();
	var _obj = document.getElementById(elm);
	document.getElementById(elm + '_datepicker').style.visibility = 'visible';
	document.getElementById(elm + '_datepicker').style.top = datepicker_getAbsY(document.getElementById(elm + '_datepickerButton'));
	document.getElementById(elm + '_datepicker').style.left = datepicker_getAbsX(document.getElementById(elm + '_datepickerButton'));
	
	if(_obj.value!='')
	{
		var _regex = new RegExp(/(\d*)\/(\d*)\/(\d\d\d\d)/);
		var _regex2 = new RegExp(/(\d*)\.(\d*)\.(\d\d\d\d)/);
		if(_regex.test(_obj.value))
		{
			//datepicker_BuildCalendar(elm, parseInt(RegExp.$3), parseInt(datepicker_CutPrefix(RegExp.$1)), parseInt(datepicker_CutPrefix(RegExp.$2)));
			datepicker_BuildCalendar(elm, parseInt(RegExp.$3), parseInt(datepicker_CutPrefix(RegExp.$2)), parseInt(datepicker_CutPrefix(RegExp.$1)));
		}
		else if(_regex2.test(_obj.value))
		{
			datepicker_BuildCalendar(elm, parseInt(RegExp.$3), parseInt(datepicker_CutPrefix(RegExp.$2)), parseInt(datepicker_CutPrefix(RegExp.$1)));
		}
		else
		{
			datepicker_BuildCalendar(elm, _currYear, _currMonth, _currDay);
		}
	}
	else
	{
		datepicker_BuildCalendar(elm, _currYear, _currMonth, _currDay);
	}
}

function datepicker_SetDate(elm, year, month, day)
{
	var _obj = document.getElementById(elm);
	
	_obj.value = DateFormat.replace('yyyy', year).replace('yy', year).replace('MM', datepicker_FixLen(month)).replace('M', datepicker_FixLen(month)).replace('dd', datepicker_FixLen(day)).replace('d', datepicker_FixLen(day));
	_obj.click();
	document.getElementById(elm + '_datepicker').style.visibility = 'hidden';
}

function datepicker_FixLen(i)
{
	return (((i+'').length!=2) ? '0' + i : i);
}

function datepicker_CutPrefix(i)
{
	return (( (i+'').substring(0,1)=='0' ) ? (i+'').substring(1) : i);
}

function datepicker_getAbsX(elt)
{
    return (elt.x) ? elt.x : datepicker_getAbsPos(elt,"Left");
}

function datepicker_getAbsY(elt)
{
    return (elt.y) ? elt.y : datepicker_getAbsPos(elt,"Top");
}

function datepicker_getAbsPos(elt,which)
{
    iPos = 0;
    while (elt != null)
    {
        iPos += elt["offset" + which];
        elt = elt.offsetParent;
    }
    return iPos;
}

