var Calendar = {
	
	now: function() {
		var d = new Date();
		return (d.getMonth()+1) + "/" + d.getDate() + "/" + d.getFullYear() + " " 
			  + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds();
	},
	
	human_date: function(d) {
		if(!d) {
			return Calendar.now();
		}
		var mmddyy_regex = /(....)-(.{1,2})-(.{1,2})/;
		if(mmddyy_regex.test(d)) {
			var mdy_parts = mmddyy_regex.exec(d);
			return mdy_parts[2] + "/" + mdy_parts[3] + "/" + mdy_parts[1];
		} else {
			return "-1";
		}
	},
	
	dbDate: function(d) {
		var mmddyy_regex = /(.{1,2})\/(.{1,2})\/(....)/;
		if(mmddyy_regex.test(d)) {
			var mdy_parts = mmddyy_regex.exec(d);
			return mdy_parts[3] + "-" + mdy_parts[1] + "-" + mdy_parts[2];
		} else {
			return "-1";
		}
	},
	
	
	JSDate_to_dbDate: function(d) {
		d = d.getMonth() + "/" + d.getDate() + "/" + d.getFullYear();
		var mmddyy_regex = /(.{1,2})\/(.{1,2})\/(....)/;
		if(mmddyy_regex.test(d)) {
			var mdy_parts = mmddyy_regex.exec(d);
			mdy_parts[1]++;
			if(mdy_parts[1] < 10) {
				mdy_parts[1] = "0" + mdy_parts[1];
			}
			if(mdy_parts[2] < 10) {
				mdy_parts[2] = "0" + mdy_parts[2];
			}
			return mdy_parts[3] + "-" + mdy_parts[1] + "-" + mdy_parts[2];
		} else {
			return "-1";
		}
	},
	
	
	splitDate: function(d) {
		var mmddyy_regex = /(.{1,2})\/(.{1,2})\/(....)/;
		if(mmddyy_regex.test(d)) {
			var d_ar = mmddyy_regex.exec(d);
			return new Array(d_ar[3], d_ar[1], d_ar[2]);
		}
		
		var yyyymmdd_regex = /(....)\-(.{1,2})\-(.{1,2})/;
		if(yyyymmdd_regex.test(d)) {
			var d_ar = yyyymmdd_regex.exec(d);
			return d_ar.slice(1);
		}
		
		alert("Calendar.splitDate failed: " + d);
	},
	
	makeUTC: function(date_ar) {
		if(!is_array(date_ar)) {
			date_ar = this.splitDate(date_ar);
		}
		
		var lhs = new Date();
		lhs.setYear(date_ar[0]);
		lhs.setMonth(date_ar[1]);
		lhs.setDate(date_ar[2]);
		var utc = Date.UTC(lhs.getFullYear(),lhs.getMonth()+1,lhs.getDate());
		delete lhs;
		return utc;
	},
	
	cmpDate: function(lhs,rhs) {
		var lhs_utc = this.makeUTC(lhs);
		var rhs_utc = this.makeUTC(rhs);
		
		
		if(lhs > rhs) {
			return 1;
		}
		
		if(lhs < rhs) {
			return -1;
		}
		
		return 0;		
	},
	
	
	valiDates: function(lhs,mhs,rhs) {
		lhs = this.makeUTC(lhs);
		mhs = this.makeUTC(mhs);
		rhs = this.makeUTC(rhs);
		
		return ((lhs < mhs) && (mhs < rhs));
	},
	
	
	calculate_weeks: function(startDate, endDate) {
		var startDate_ar;
		if(!is_array(startDate)) {
			startDate_ar = this.splitDate(startDate);
		} else {
			startDate_ar = startDate;
		}
		
		var lhs = this.makeUTC(startDate_ar);
		
		
		var endDate_ar;
		if(!is_array(endDate)) {
			endDate_ar = this.splitDate(endDate);
		} else {
			endDate_ar = endDate;
		}
		
		var rhs = this.makeUTC(endDate_ar);
		
		
		var diff =  rhs - lhs;
		
		var secs_in_day = 24 * 60 * 60;
		var days = diff / secs_in_day;
		var weeks = Math.round((days / 7) / 1000); //7 days in a week...
		return weeks;
	},
	
	set_calendar: function(id_suffix,target_date) {
		if(!target_date) {
			target_date = this.JSDate_to_dbDate(new Date());
		}
		var d_ar = this.splitDate(target_date);
		var y = "obj_year_" + id_suffix;
		var m = "obj_month_" + id_suffix;
		var d = "obj_day_" + id_suffix;
		
		Selectbox.set(y,Selectbox.find(y,d_ar[0]));
		Selectbox.set(m,Selectbox.find(m,d_ar[1]));
		Selectbox.set(d,Selectbox.find(d,d_ar[2]));
	},
	
	read_calendar: function(id_suffix) {
		var y = "obj_year_" + id_suffix;
		var m = "obj_month_" + id_suffix;
		var d = "obj_day_" + id_suffix;
		if (typeof(arguments[1]) == "undefined") {
			return Selectbox.get(y) + "-" + Selectbox.get(m) + "-" + Selectbox.get(d);
		} else {
			return Selectbox.get(m) + "/" + Selectbox.get(d) + "/" + Selectbox.get(y);
		}
	},
	
	configure: function(startYear,endYear,id_suffix) {
		var years = new Array();
		for(var i=startYear;i<endYear+1;i++) {
			years.push(i);
		}
		
		var days = new Array();
		for(var i=1;i<32;i++) {
			days.push(i);
		}
		
		var months = {
			"01": "January",
			"02": "February",
			"03": "March",
			"04": "April",
			"05": "May",
			"06": "June",
			"07": "July",
			"08": "August",
			"09": "September",
			"10": "October",
			"11": "November",
			"12": "December"
		};
		
		Selectbox.fill("obj_year_" + id_suffix,years);
		Selectbox.fill("obj_month_" + id_suffix,months);
		Selectbox.fill("obj_day_" + id_suffix,days);
	}
	
};








////////////////////

