var smonths = new Array("01","02","03","04","05","06","07","08","09","10","11","12");
//var smonths = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
var monthsDay = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

var date;

var dom = document.getElementById ? true : false;
var all = document.all ? true : false;

var selDate;
var fieldSep = "/";

function y2k(number) {
  return (number < 1000)?(number + 1900):number;
}

function yearAsString(number)
{
	var nr = 1900;
	if (number > 2000)
		nr = number - 2000;
	else
		nr = nr - 1900;
	var sepYear = (number<10) ? "0" : ""; 
	return sepYear + number;
}

function yearAsNumber(number)
{
	
	var nr = 0;
	if (typeof(number) == "string")
		if (number.substr(0,1) == "0")
		{
			number = number.substr(1,1);
		}
	/*
	if (parseInt(number) >= 49)
		nr = parseInt(number) + 1900;
	else
		nr = parseInt(number) + 2000;

	return nr;
	*/
	return parseInt(number);
}

function DD(d) 
{
	var day = d.getDate();
	var month = d.getMonth();
	var year = y2k(d.getYear());
	var sepDay = (day<10) ? "0" : ""; 
	var s = smonths[month] + fieldSep + sepDay + day + fieldSep + yearAsString(year);
	return s;
}

function ValidateDate(s)
{
	var today = new Date();
	if(s.length!=10) return false;
	
	
	var sep = s.substr(2,1);
	if (sep != fieldSep) return false;
	sep = s.substr(5,1);
	if (sep != fieldSep) return false;
	
	var sday = s.substr(3,2);
	if (sday.substr(0,1) == "0")
	{
		sday = sday.substr(1,1);
	}
	var day = parseInt(sday);
	if (isNaN(day)) return false;
	
	if(day<1 || day>31) return false;
	
	var syear = s.substr(6,4);
	if (syear.substr(0,1) == "0")
	{
		syear = syear.substr(1,1);
	}

	var year = parseInt(syear);
	
	if (isNaN(year)) return false;
	
	if(year<2000 || syear>2050) return false;
	
	var smonth = s.substr(0,2);
	//checking if past date
	if (smonth == '08')
		var month = 7;
	else
		var month = parseInt(smonth) -1;
	if (pastDate(year, month, day))
		return false;
		
	var mfound = false;
	var mx = 0;
	while (mfound==false || mx<12)
	{ 
		if(smonth==smonths[mx])
		{
		 mfound = true;
		
	  	 if (day>monthsDay[mx]) 
			 { 
				 if (!(mx==1 && day==29 && year%4==0))
				 {
				  return false;
				  }
			  }
		}
		mx++;
	}
	return mfound;
}

function myParseDate(s)
{
	var d = new Date();
	
	if (!ValidateDate(s)) return d;
	
	var sday = s.substr(3,2);
	if (sday.substr(0,1) == "0")
	{
		sday = sday.substr(1,1);
	}
	var day = parseInt(sday);
	
	var syear = s.substr(6,4);
	
	if (syear.substr(0,1) == "0")
	{
		syear = syear.substr(1,1);
	}
	var year = parseInt(syear);
	var smonth = s.substr(0,2);
	var mfound = false;
	var mx = 0;
	while (mfound==false || mx<12)
	{ 
		if(smonth==smonths[mx])
		{
		 mfound = true;
		 break;
		}
		mx++;
	}
	
	if (smonth.substr(0,1) == "0")
	{
		smonth = smonth.substr(1,1);
	}
	var month = parseInt(smonth)-1;
	d = new Date(yearAsNumber(year), month, day, 9, 0, 0, 0);
	
	return d;
}
	
function GetField(fieldID)
{

	if (dom || all)
	{
		return document.getElementById(fieldID);
	}
	return null;
}

function GetOpenerField(fieldID)
{
	if (dom || all)
	{
		return document.getElementById(fieldID);
	}
	return null;
}

function GetOpenerFieldValue(fieldID)
{
	var myObj = GetOpenerField(fieldID);
	return myObj.value;
}

function DatesEqual(d1, y,m,d)
{
	var result = ((y2k(d1.getYear()) == y) && (d1.getMonth() == m) && (d1.getDate() == d));
	return result; 
}

function day(trigger, target, d)
{
	var myObj;
	myObj = GetOpenerField(trigger);
	var dat = new Date(theYear, theMonth, d, 9, 0, 0, 0);
	var day1 = new Date();
	day1.setDate(day1.getDate());
	day1.setHours(9);
	day1.setMinutes(0);
	day1.setSeconds(0);
	day1.setMilliseconds(0);

	if (dat < day1) {
		alert("You must select current or future date.");
		myObj.value = "";
	} else {
		myObj.value = DD(dat);
		toggle_display(target);

	}
	myObj.focus();
}

/* ---------------------------------------------------------------------- */

function prev_month(trigger, target)
{
	m = date.getMonth();
	y = y2k(date.getYear());
	
	if (m>0)
		m--
	else{
		m=11;
		y--;
	}
	date.setMonth(m);
	date.setYear(y);
		
	disp(trigger, target);
}

function next_month(trigger, target)
{
	m = date.getMonth();
	y = y2k(date.getYear());
	
	if (m<11)
		m++
	else{
		m=0;
		y++;
	}
	
	date.setMonth(m);
	date.setYear(y);
	
	disp(trigger, target);
		
		/* --------- */
}
/* ---------------------------------------------------------------------- */

function init(trigger)
{
	var myObj = GetOpenerFieldValue(trigger);
	selDate =  myParseDate(myObj);
	date = new Date(y2k(selDate.getYear()), selDate.getMonth(), selDate.getDate());
}

function disp(trigger, target){
	var today = new Date();
	var months = Array("January", "February", "March", "April", "May", "June", "July", "August",
		 "September", "October", "November", "December");
	var mdays = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	
	theYear = y2k(date.getYear());
	theMonth = date.getMonth();
	
	if (theYear%4==0)
		mdays[1]++;
		
	var sel = false;
	date.setDate(1);
	var fday = date.getDay();
	
	var caltext;
	caltext = '';
	
	//cday = fday;
	if (fday != 0){
		caltext = '<tr align=center>'
		for (var i=0; i<fday; i++)
			caltext = caltext + '<td>&nbsp;<\/td>'
	}
	for (var i=0; i<mdays[theMonth]; i++){
		if (fday == 0 ){
			caltext = caltext+'<tr align=center>';
			var cls='cal_holiday';
		} else{
			if (fday == 6 )
				var cls='cal_holiday';
			else
				var cls='cal_weekday';
		}
			
		sel = DatesEqual(selDate, theYear, theMonth, i+1); 

		if(sel) cls = cls + '_selected';
		
		if ((i+1) < date.getDate())
		{
			caltext = caltext+'<td class=' + cls + ' onclick="day(\'' + trigger + '\',' + '\'' + target + '\',' + (i+1) +  ',1)">'
		}
		else
		{
			if (fday == 0 ||  fday == 6)
				caltext = caltext+'<td class=' + cls + '>'
			else
				caltext = caltext+'<td class=' + cls + ' onclick="day(\'' + trigger + '\',' + '\'' + target + '\',' + (i+1) +  ',1)">'
		}
		
		caltext = caltext + (i+1)
		
		caltext = caltext + '<\/td>'
		
		if (fday == 6)
			caltext = caltext + '<\/tr>\n'
		fday = ++fday%7;
	}
	if (fday != 0){
		for (var i=fday; i<7; i++){
			caltext = caltext + '<td>&nbsp;<\/td>'
		}
	}
	
	caltext = caltext + '<\/tr>';
	
	var navBtnContent = '<td class=\"cal_button\">\n<a href=\"javascript:;\" onclick=\"javascript:prev_month(\'' + trigger +'\', \'' + target + '\');\">\n&laquo;\n<\/a>\n<\/td>\n';
	if ((theYear < y2k(today.getYear())) || ((theYear == y2k(today.getYear())) && (theMonth == today.getMonth())))
		var navBtnContent = '<td class=\"cal_button_off\">&laquo;<\/td>\n';
		
	var navBtnContent2 = '<td class=\"cal_button\">\n<a href=\"javascript:;" onclick=\"javascript:next_month(\'' + trigger +'\', \'' + target + '\');\">\n&raquo;\n<\/a>\n<\/td>\n';

caltext =
	'<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" class=\"calendar\">\n'+
	'<tr>\n'+
	 navBtnContent +
	'<td colspan=5 class=\"month\">'+months[theMonth] + ', ' + yearAsString(theYear) + '<\/td>\n'+
	 navBtnContent2 +
	'<\/tr>\n'+
	'<tr>\n'+
	'<th class=cal_red>Su<\/th>\n'+
	'<th>Mo<\/th>\n'+
	'<th>Tu<\/th>\n'+
	'<th>We<\/th>\n'+
	'<th>Th<\/th>\n'+
	'<th>Fr<\/th>\n'+
	'<th>Sa<\/th>\n'+
	'<\/tr>\n'+
	caltext +
	'<\/table>\n';
	
	var calObj = GetField(target);
	calObj.innerHTML = caltext;
}

function pastDate(y, m, d){
	var today = new Date();
	if (y < y2k(today.getYear()))
		return true
	else 
		if (y == y2k(today.getYear()))
		{
			if (m < today.getMonth())
			{
				return true
			}
			else 
			{
				if ((m == today.getMonth()) && (d < today.getDate()))
					return true;
			}
		}
	return false;
}

function ChooseDate(trigger, target)
{
	init(trigger);
	disp(trigger, target);
	toggle_display(target);
}

function reset_date_value(trigger_id, target_id)
{
	try
	{
		var trigger = document.getElementById(trigger_id);
		trigger.value = '';	
		var target = document.getElementById(target_id);
		target.style.display = 'none';	
	}
	catch(err){}
}
