/**
 * Get Today's date
 */
function getTodaysDate(){
	var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
	var date = new Date();
	return months[date.getMonth()] + " " + date.getDate() + ", " + date.getYear();
}
 
/**
 * Format an amount into a string representing the currency equivelant
 */
function formatCurrency(amount) {
	if(isNaN(amount))
		amount = "0";
	sign = (amount == (amount = Math.abs(amount)));
	amount = Math.floor(amount*100+0.50000000001);
	cents = amount%100;
	amount = Math.floor(amount/100).toString();
	if(cents<10)
		cents = "0" + cents;
	for (var i = 0; i < Math.floor((amount.length-(1+i))/3); i++)
		amount = amount.substring(0,amount.length-(4*i+3))+','+
	amount.substring(amount.length-(4*i+3));
	return (((sign)?'':'-') + '$' + amount + '.' + cents);
}

/**
 * Format an amount into a string with the passed in number of decimal positions
 */
function formatNumber(number, decplaces) {
	number = number.replace("$","");
	if (isNaN(number)){
		alert("You must enter a number");
		return false;
	}

	var str = "" + Math.round(eval(number) * Math.pow(10,decplaces));
	while (str.length <= decplaces) {
		str = "0" + str;
	}
	var decpoint = str.length - decplaces;

	return str.substring(0,decpoint) + "." + str.substring(decpoint, str.length);
}

/**
 * Validate that the field pssed in is in a valid date format.
 * The desc argument is teh description of the field which will be displayed in an alert if the 
 * field is not in a valid date format.
 */
function validateDate(date_field, desc) {
	if (date_field.value == null){
		return true;
	}
	var in_date = stripCharString(date_field.value," ");
	in_date = in_date.toUpperCase();
	var date_is_bad = 0;
	if (!allowInString(in_date,"/0123456789T+-"))
			date_is_bad = 1; // invalid characters in date
	if (!date_is_bad) {
			var has_rdi = 0;
			if (in_date.indexOf("T") >= 0){
					has_rdi = 1;
			}
			if (!date_is_bad && has_rdi && (in_date.indexOf("T") != 0)) {
					date_is_bad = 2; // relative date index character is not in first position
			}
			if (!date_is_bad && has_rdi && (in_date.length == 1)) {
					var d = new Date();
					var return_month = parseInt(d.getMonth() + 1).toString();
					return_month = (return_month.length==1 ? "0" : "") + return_month;
					var return_date =  parseInt(d.getDate()).toString();
					return_date = (return_date.length==1 ? "0" : "") + return_date;
					in_date = return_month + "/" + return_date + "/" + get_full_year(d);
					has_rdi = 0; // date doesn't have rdi char anymore (will also cause failure of add'l rdi checks, which is a good thing)
			}
			if (!date_is_bad && has_rdi && (in_date.length > 1) && !(in_date.charAt(1) == "+" || in_date.charAt(1) == "-")) {
					date_is_bad = 3; // length of rdi string is greater than 1 but second char is not "+" or "-"
			}
			if (!date_is_bad && has_rdi && isNaN(parseInt(in_date.substring(2,in_date.length),10))) {
					date_is_bad = 4; // rdi value is not a number
			}
			if (!date_is_bad && has_rdi && (parseInt(in_date.substring(2,in_date.length),10) < 0)) {
					date_is_bad = 5; // rdi value is not a positive integer
			}
			if (!date_is_bad && has_rdi) {
					var d = new Date();
					ms = d.getTime();
					offset = parseInt(in_date.substring(2,in_date.length),10);
					if(in_date.charAt(1) == "+") {
							ms += (86400000 * offset);
					} else {
							ms -= (86400000 * offset);
					}
					d.setTime(ms);
					var return_month = parseInt(d.getMonth() + 1).toString();
					return_month = (return_month.length==1 ? "0" : "") + return_month;
					var return_date =  parseInt(d.getDate()).toString();
					return_date = (return_date.length==1 ? "0" : "") + return_date;
					in_date = return_month + "/" + return_date + "/" + get_full_year(d);
					has_rdi = 0;
			}
	}
	if (!date_is_bad) {
			var date_pieces = new Array();
			date_pieces = in_date.split("/");
			if (date_pieces.length == 2) {
					var d = new Date();
					in_date = in_date + "/" + get_full_year(d);
					date_pieces = in_date.split("/");
			}
			if (date_pieces.length != 3 || parseInt(date_pieces[0],10) < 1 || parseInt(date_pieces[0],10) > 12
							|| parseInt(date_pieces[1],10) < 1 || parseInt(date_pieces[1],10) > 31
							|| (date_pieces[2].length != 2 && date_pieces[2].length != 4)) {
					date_is_bad = 6;  // date is not in format of m[m]/d[d]/yy[yy]
			}
	}
	if (date_is_bad) {
		alert(desc + " is not a valid date.\nPlease enter a valid date using the format (mm/dd/yyyy)");
		date_field.focus();
		return (false);
	}
	var ms = Date.parse(in_date);
	var d = new Date();
	d.setTime(ms);
	var return_date = d.toLocaleString();
	var return_month = parseInt(d.getMonth() + 1).toString();
	return_month = (return_month.length==1 ? "0" : "") + return_month;
	var return_date =  parseInt(d.getDate()).toString();
	return_date = (return_date.length==1 ? "0" : "") + return_date;
	return_date = return_month + "/" + return_date + "/" + get_full_year(d);
	date_field.value = return_date;
	return true;
}       

/**
 * This function is used in conjunction with the validate_date function.
 * It returns the full year of the Date object passed in.
 */
function get_full_year(d) {
		var y = ""
		if (d.getFullYear() != null)
		{
			y = d.getFullYear();
			if (y < 1970) y+= 100;
		} else
		{
			y = d.getYear();
			if (y > 69  && y < 100) y += 1900;
			if (y < 1000) y += 2000;
		}
		return y;
}
/**
 * This function is used in conjunction with the validate_date function.
 * It returns the full year of the Date object passed in.
 */
function stripCharString (InString, CharString)  {
		var OutString="";
   for (var Count=0; Count < InString.length; Count++)  {
		var TempChar=InString.substring (Count, Count+1);
	  var Strip = false;
	  for (var Countx = 0; Countx < CharString.length; Countx++) {
		var StripThis = CharString.substring(Countx, Countx+1)
		 if (TempChar == StripThis) {
				Strip = true;
			break;
		 }
	  }
	  if (!Strip)
		OutString=OutString+TempChar;
   }
		return (OutString);
}

/**
 * This function is used in conjunction with the validateDate function.
 * It returns the full year of the Date object passed in.
 */
function allowInString (InString, RefString)  {
		if(InString.length==0) return (false);
		for (var Count=0; Count < InString.length; Count++)  {
		var TempChar= InString.substring (Count, Count+1);
	  if (RefString.indexOf (TempChar, 0)==-1)
		return (false);
   }
   return (true);
}

/**
 * Trim leading and trailing spaces from string
 */
function trim(str)
{
  return( (""+str).replace(/^\s*([\s\S]*\S+)\s*$|^\s*$/,'$1') );
}

function getFutureDate(days, months, years){
	var oneDayMS = 1000*60*60*24;
	var yearsMS = 365*years*oneDayMS;
	var monthsMS = months/12*365*oneDayMS;
	var daysMS = (days*oneDayMS) + monthsMS + yearsMS;

	var today = new Date();
	var endDateMS = today.getTime() + daysMS;

	var endDate = new Date(endDateMS);

	return endDate;
}

function getPastDate(days, months, years){
	var oneDayMS = 1000*60*60*24;
	var yearsMS = 365*years*oneDayMS;
	var monthsMS = months/12*365*oneDayMS;
	var daysMS = (days*oneDayMS) + monthsMS + yearsMS;

	var today = new Date();
	var endDateMS = today.getTime() - daysMS;

	var endDate = new Date(endDateMS);
	
	return endDate;
}

/**
 * Format the passed in date to the passed in format
 * 	Currently handles to following formats
 *	'mm/dd/yyyy'
 */
function formatDt(inDate, format){
	var month;
	var date;
	var year;
	var outDate;
	
	if (format=='mm/dd/yyyy'){
		month = inDate.getMonth() + 1;
		if (month < 10){
			month ="0" + month;
		}		
		date = inDate.getDate();
		if (date < 10){
			date ="0" + date;
		}
		year = inDate.getFullYear();
		outDate = month + "/" + date + "/" + year;
	}
	return outDate;
}

function encodeURL(url){
	var newURL = "";
	if(url != null)	{
		var index = 0;
		var code;
		var len = String(url).length();
		for (var  i=0; i<len; i++){
			var ch = url.charAt(i);
			if (ch == ' ') code = "%20";
			else if (ch == '%') code = "%25";
			else if (ch == ',') code = "%2C";
			else if (ch == ';') code = "%3B";
			else if (ch == '\b') code = "%08";
			else if (ch == '\t') code = "%09";
			else if (ch == '\n') code = "%0A";
			else if (ch == '\f') code = "%0C";
			else if (ch == '\r') code = "%0D";

			if (code != null){
				newURL += url.substring(index,i) + code;
				index = i + 1;
				code = null;
			}
		}

	}
	if (index < len)
		newURL += url.substring(index, len);

	return newURL;
}


/**
 * Restore the single quotes which were stripped from the string
 */
function restoreQuotes(string){
	while (string.indexOf("\^") > 0){
		string = string.replace('\^','\'');
	}	

	return string;
}
