function Calendar(fieldname,obj_name){
	//calendar properties
	var current_date = new Date();
	var cur_day = current_date.getDate();
	var cur_month = current_date.getMonth();
	var cur_year = (""+current_date.getUTCFullYear());

	var sel_day = cur_day;
	var sel_month = cur_month;
	var sel_year = cur_year;
	var full_date = (1+sel_month) + "/" + sel_day + "/" + sel_year;
	
	var fieldname = fieldname;
	var obj_name = obj_name;
	var form = "form1";
	var testing = false;
	var months = new Array('January','February','March','April','May','June','July','August','September','October','November','December');	
	var dark_color = "#aaaaaa";	
	var light_color = "#ffffff";

	
	//calendar methods 
	this.getTodaysDate = GetTodaysDate;
	this.getSelectDay = GetSelectDay;
	this.getSelectMonth = GetSelectMonth;
	this.getSelectYear = GetSelectYear;
	this.getHiddenField = GetHiddenField;

	this.changeDay = ChangeDay;
	this.changeMonth = ChangeMonth;
	this.changeYear = ChangeYear;
	this.changeHidden = ChangeHidden;
	this.updateDate = UpdateDate;
	this.setDate = SetDate;
	this.darkenDate = DarkenDate;
	this.lightenDate = LightenDate;
	
	this.initiateCalendar = InitiateCalendar;
	//this.showFullDate = ShowFullDate;
	//this.showButton = ShowButton;
	//this.showCurrentYear = ShowCurrentYear;
	//*****************************
	
	function DarkenDate(){
		var dayfield = eval("document." + form + ".day" + obj_name);
		var monthfield = eval("document." + form + ".month" + obj_name);
		var yearfield = eval("document." + form + ".year" + obj_name);
		
		dayfield.style.background = dark_color;	
		monthfield.style.background = dark_color;	
		yearfield.style.background = dark_color;	
		
		//alert(field.value);
	}
	
	function LightenDate(){
		var dayfield = eval("document." + form + ".day" + obj_name);
		var monthfield = eval("document." + form + ".month" + obj_name);
		var yearfield = eval("document." + form + ".year" + obj_name);
		
		dayfield.style.background = light_color;	
		monthfield.style.background = light_color;	
		yearfield.style.background = light_color;	
	}
	
	function SetDate(date){
		var date1 = new Date(date);
		cur_month = date1.getMonth();
		cur_day = date1.getDate();
		cur_year = date1.getUTCFullYear();
		sel_day = cur_day;
		sel_month = cur_month;
		sel_year = cur_year;
	
		full_date = (1+cur_month) + "/" + cur_day + "/" + cur_year;
	}

	function GetTodaysDate(){
		return(cur_month + "/" + cur_day + "/" + cur_year);
	}
	
	function ShowCurrentYear(){
		return(cur_year);
	}
	
	function ChangeDay(day){
		sel_day = day;
		UpdateDate();
	}
	
	function ChangeMonth(month){
		sel_month = month;
		UpdateDate();
	}
	
	function ChangeYear(year){
		sel_year = year;
		UpdateDate();
	}
	
	function ChangeHidden(){
		var field = eval("document." + form + "." + fieldname); 
		//alert(field.value);
		field.value = full_date;
	}
	
	function UpdateDate(){
		var month_len = getMonthLength(sel_month,sel_year);
		
		if(month_len<sel_day){
			alert("invalid date selected, " + months[sel_month] + " only has " + month_len + " days");
			
			var field = eval("document." + form + ".day" + obj_name);
			var diff = sel_day - month_len;
			field.selectedIndex = field.selectedIndex-diff;
		
			ChangeDay(month_len);
		}
		
		full_date = (1+(sel_month/1)) + "/" + sel_day + "/" + sel_year;	
		ChangeHidden();
	}
	
	function ShowFullDate(){
		return(full_date);
	}
	
	function InitiateCalendar(){
		GetSelectDay();
		GetSelectMonth();
		GetSelectYear();
		
		GetHiddenField(fieldname);
		UpdateDate();
		//ShowButton();
	}
	
	function GetSelectDay(){
		var html = "<select name=day" + obj_name + " onchange='" + obj_name + ".changeDay(this.options[this.selectedIndex].value);'>";
	
		for (var index = 1;index <= 31; index++) {
			html = html + "<option value=" + index;
			if (index==cur_day){
				html = html + " selected";
			}
			html = html + ">" + index + "</option>";
		}
		html = html + "</select>"
		document.write(html);
	}
	
	function GetSelectMonth(){
		var html = "<select name=month" + obj_name + " onchange='" + obj_name + ".changeMonth(this.options[this.selectedIndex].value);'>";

		for (var index =0;index<months.length;index++) {
			html = html + "<option value=" + index;
			if (index==cur_month){
				html = html + " selected";
			}
			html = html + ">" + months[index] + "</option>";
		}

		html = html + "</select>"
		//alert(html);
		document.write(html);
	}
	
	function GetSelectYear(){
		var years = new Array("1950","1951","1952","1953","1954","1955","1956","1957","1958","1959","1960","1961","1962","1963","1964","1965","1966","1967","1968","1969","1970","1971","1972","1973","1974","1975","1976","1977","1978","1979","1980","1981","1982","1983","1984","1985","1986","1987","1988","1989","1990","1991","1992","1993","1994","1995","1996","1997","1998","1999","2000","2001","2002","2003","2004","2005","2006","2007","2008","2009","2010","2011","2012","2013","2014","2015");

		var html = "<select name=year" + obj_name + " onchange='" + obj_name + ".changeYear(this.options[this.selectedIndex].value);'>";
	
		for (var index = 0; index < years.length; index++) {
			html = html + "<option value=" + (""+years[index]);
			
			if (years[index]==cur_year){html = html + " selected";}
			html = html + ">" + years[index] + "</option>";
		}
		html = html + "</select>"
		//alert(cur_year);
		//alert(html);
		document.write(html);
	}
	
	function GetHiddenField(fieldname){
		var html;
		if(testing){
			html = "<br><br>" + fieldname + ": <input type='text' name='" + fieldname +"' value='"+ full_date + "'>";
		}
		else{
			html = "<input type='hidden' name='" + fieldname +"' value='"+ full_date + "'>";
		}
		//alert(html);
		document.write(html);
	}
	
	function ShowButton(){
		var html = "<button onclick='alert(" + obj_name + ".showFullDate());'>show full date</button>";
		document.write(html);
	}
	
	function getMonthLength(month,year) {
		var monthlength = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
		if (month==1 && (year/4==Math.floor(year/4) || year/400==Math.floor(year/400))) {
			return (29);
		}
		else{
			return (monthlength[month]);
		}
	}
}
