//My date functions

//Constants
var dayInMilli = 1000*60*60*24;   

function getPreviousStatementDate() {
	var dtNow = new Date();	
	dtNow.setMonth (dtNow.getMonth() - 1);
	dtNow.setDate("28");
	return getShortDate(dtNow);
}

//Returns previous day in Date format
function getPreviousDay(dtDate) {
   if (arguments.length == 0) {
       dtDate = new Date();
   }		
   return new Date(dtDate - dayInMilli);	
}

//Returns full month name
function getMonthName(dtDate) {
   if (arguments.length == 0) {
       dtDate = new Date();
   }					
	var monthNames = new Array(11)
	monthNames[0] = "January";
	monthNames[1] = "February";
	monthNames[2] = "March";
	monthNames[3] = "April";
	monthNames[4] = "May";
	monthNames[5] = "June";
	monthNames[6] = "July";
	monthNames[7] = "August";
	monthNames[8] = "September";
	monthNames[9] = "October";
	monthNames[10] = "November";
	monthNames[11] = "December";
	return monthNames[dtDate.getMonth()];
}	

//Returns in format 'HH:MM AM/PM CST'
function getTimeString (dtDate) {
   if (arguments.length == 0) {
       dtDate = new Date();
   }						
	var Hours = dtDate.getHours();
	var Mins = dtDate.getMinutes();
	var Time = (Hours >= 12) ? "PM" : "AM";			
	if (Hours > 12) {
		Hours -= 12;
	}
	if (Hours == 0) {
		Hours = 12;
	}
	if (Mins < 10) {
		Mins = "0" + Mins;
	}					
	
	return Hours + ":" + Mins + " " + Time + ' CST';	
}

//Returns in format 'March 1, 2006'
function getLongDate (dtDate) {
   if (arguments.length == 0) {
       dtDate = new Date();
   }			
	themonth = getMonthName(dtDate);
	thedate = dtDate.getDate();
	theyear = dtDate.getFullYear();
	if (thedate < 10) {
		thedate = "0" + thedate;	
	}
	return themonth + " " + thedate + ", " + theyear;			
}    		

//Returns in format 'MM/DD/YYYY'
function getShortDate(dtDate) {
   if (arguments.length == 0) {
       dtDate = new Date();
   }			
	var theyear = dtDate.getFullYear();
	var themonth = dtDate.getMonth() + 1;	//Months are 0 base
	var thedate = dtDate.getDate();
	
	if (themonth < 10) {
		themonth = "0" + themonth;
	}
	
	if (thedate < 10) {
		thedate = "0" + thedate
	}
	
	return themonth + '/' + thedate + '/' +theyear + '';		
}	

function getDateFromString(dateStr) {
	//Assumes MM/DD/YY or MM/DD/YYYY format
	var dateParts = new Array();		
	var dividerArray = new Array("/", "-");
	
	for (var i = 0; i < dividerArray.length; i++) {
		var dChar = dividerArray[i];
		if (dateStr.indexOf(dChar) > -1) {
			dateParts = dateStr.split(dChar);						
			if (dateParts.length > 0 && dateParts.length < 3) {
				//not enough parts
				return "";	
			}
			if (dateParts.length == 3) {
				break;	
			}
		}	
	}	
		
	if (dateParts.length == 0) {
		//no dividers
		if (dateStr.length == 6 || dateStr.length == 8) {
			//assumes either a 2 or 4 digit year	
			dateParts = [dateStr.substr(0, 2), dateStr.substr(2, 2), dateStr.substr(4, dateStr.length - 4)];
			
			if (dateParts[0] > 12) {
				return "";	
			}				
			if (dateParts[1] > 31) {
				return "";	
			}		
		} else {
			//Some other amount of digits which is impossible to get a date from
			return "";	
		}	
		
		//A safe assumption
		if (dateParts[2].length == 2) {
			dateParts[2] = "20" + dateParts[2];	
		}
	}	
		
	dateStr = dateParts[0] + "/" + dateParts[1] + "/" + dateParts[2];		
	//This checks for well-formed, not validity
	var isValid = RegExp(/^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/).test(dateStr);			
	if (isValid) {		
		return new Date(dateStr);		
	} else {
		return "";	
	}
}


function getMonth (monthNum) {
    if (parseInt(monthNum) <= 0) {
        monthNum = monthNum + 12;       
    }    
    if (monthNum < 10) {
        monthNum = "0" + monthNum;
    }
    return monthNum;
}

//Retire
//function formatDate(month, date) {				
//    var oneDay = 24 * 60 * 60 * 1000;
//    var dateStr = "";
//    var dtNow = new Date();    
//    
//    //month is 1 base (Jan == 1, NOT Jan == 0)
//    var dtYear = dtNow.getFullYear();    
//    var dtMonth = dtNow.getMonth();
//    
//		if (dtNow.getMonth() + 1 <= 0) {						
//			// month: 12-36 = -24
//			var tmpMonth = Math.abs(month);
//			var result;	
//			// result: |-24| / 12 = 2		
//			result = parseInt(tmpMonth / 12);						
//			// year: 2004 - 2 = 2002
//			dtYear = dtYear - result - 1;
//			// month: -24 + (2 * 12) = 0 == 12
//		  	month = month + (result * 12);
//		}
//    dateStr = getMonth(month) + "/" + date + "/" + dtYear;
//    return dateStr;
//}

function buildDate(monthOffset, date) {	
	var dtNow = new Date();
	dtNow.setMonth(dtNow.getMonth() + monthOffset);
	dtNow.setDate(date);
	dtNow.setHours(0,0,0,0);	//Make sure we are at midnight.  Helps with date checking later
	return dtNow;
}
