function verifyDateValid(year, month, day, hours, mins, secs) {
	//need to subtract 1 for month
	var valDate = new Date(year, (parseInt(month) - 1), day, hours, mins, secs, 0);
	
	var isValidDate = (valDate.getFullYear() == parseInt(year) && valDate.getMonth() == (parseInt(month) - 1) && valDate.getDate() == parseInt(day) && valDate.getHours() == parseInt(hours) && valDate.getMinutes() == parseInt(mins) && valDate.getSeconds() == parseInt(secs))? true: false;

	return isValidDate;
}

function getNumDaysInMonth(month, year) {
	var numDaysArr = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	var numDays = numDaysArr[month - 1];
	if (month == 2 && isLeapYear(year)) numDays = 29;
	return numDays;
}

function isLeapYear(year) {
	if ( (year % 4) == 0) { // It is exactly divisible by 4
		if ( (year % 100) == 0) { // It is exactly divisible by 100
			var result = ((year % 400) == 0); //Is it also exactly divisible by 400?
		} else {
			var result = 1;
		}
	} else { // It is not exactly divisible by 4 - It is not a leap year
		var result = 0;
	}

	return result;
}

function intToMonth(intVal, mode) { // mode = [null/long | short], 1 = January
	intVal = (1 * intVal) - 1;

	var monthArr = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
	var monthShortArr = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");

	if (mode == "short") {
		return monthShortArr[intVal];
	} else {
		return monthArr[intVal];
	}
}

function monthToInt(monthString, mode) { // mode = [null | padZero]
	var monthInt;

	switch (monthString) {
		case "Jan":
		case "January":
				monthInt = 1;
				break;
		case "Feb":
		case "February":
				monthInt = 2;
				break;
		case "Mar":
		case "March":
				monthInt = 3;
				break;
		case "Apr":
		case "April":
				monthInt = 4;
				break;
		case "May":
				monthInt = 5;
				break;
		case "Jun":
		case "June":
				monthInt = 6;
				break;
		case "Jul":
		case "July":
				monthInt = 7;
				break;
		case "Aug":
		case "August":
				monthInt = 8;
				break;
		case "Sep":
		case "September":
				monthInt = 9;
				break;
		case "Oct":
		case "October":
				monthInt = 10;
				break;
		case "Nov":
		case "November":
				monthInt = 11;
				break;
		case "Dec":
		case "December":
				monthInt = 12;
				break;
	}

	//if (mode == "padZero" && monthInt < 10) monthInt = "0"+monthInt;
	if (mode == "padZero") monthInt = calPad(monthInt);

	return monthInt;
}

function abbrevMonthToLongMonth(month_abbrev) {
	month_abbrev = month_abbrev.toLowerCase();

	var month_long = "Unknown-Month";
	
	switch (month_abbrev) {
		case "jan":
				month_long = "January";
				break;
		case "feb":
				month_long = "February";
				break;
		case "mar":
				month_long = "March";
				break;
		case "apr":
				month_long = "April";
				break;
		case "may":
				month_long = "May";
				break;
		case "jun":
				month_long = "June";
				break;
		case "jul":
				month_long = "July";
				break;
		case "aug":
				month_long = "August";
				break;
		case "sep":
				month_long = "September";
				break;
		case "oct":
				month_long = "October";
				break;
		case "nov":
				month_long = "November";
				break;
		case "dec":
				month_long = "December";
				break;
	}
	
	return month_long;
}

function timeZoneFromOffsetHours(offset_hours) {
	var timezone = "N/A";
	
	switch (offset_hours) {
		case 7:
				timezone = "PDT";
				break;
		case 8:
				timezone = "PST";
				break;
	}	
	
	return timezone;
}

function getDateFormat(date, format) {
	var date_string = "";
	
	if (format == "default" || isEmpty(format)) {
		date_string = date.getDate()+" "+intToMonth(date.getMonth() + 1, "short")+" "+date.getFullYear()+" "+calPad(date.getHours())+":"+calPad(date.getMinutes())+" "+timeZoneFromOffsetHours(date.getTimezoneOffset() / 60);
	}
	
	return date_string;
}

function createDateISO8601(iso_string) {
	var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
        "(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
        "(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
	var d = iso_string.match(new RegExp(regexp));

	var offset = 0;
	var date = new Date(d[1], 0, 1);

	if (d[3]) { date.setMonth(d[3] - 1); }
	if (d[5]) { date.setDate(d[5]); }
	if (d[7]) { date.setHours(d[7]); }
	if (d[8]) { date.setMinutes(d[8]); }
	if (d[10]) { date.setSeconds(d[10]); }
	if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); }
	if (d[14]) {
			offset = (Number(d[16]) * 60) + Number(d[17]);
			offset *= ((d[15] == '-') ? 1 : -1);
	}

	offset -= date.getTimezoneOffset();
	time = (Number(date) + (offset * 60 * 1000));

	return new Date(time);
}

/*
Date.prototype.setISO8601 = function (string) {
    var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
        "(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
        "(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
    var d = string.match(new RegExp(regexp));

    var offset = 0;
    var date = new Date(d[1], 0, 1);

    if (d[3]) { date.setMonth(d[3] - 1); }
    if (d[5]) { date.setDate(d[5]); }
    if (d[7]) { date.setHours(d[7]); }
    if (d[8]) { date.setMinutes(d[8]); }
    if (d[10]) { date.setSeconds(d[10]); }
    if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); }
    if (d[14]) {
        offset = (Number(d[16]) * 60) + Number(d[17]);
        offset *= ((d[15] == '-') ? 1 : -1);
    }

    offset -= date.getTimezoneOffset();
    time = (Number(date) + (offset * 60 * 1000));
    this.setTime(Number(time));
}
*/

