// Allowed values for type:
// Currency, Phone, Email, AlphaNumber, Number, Date
function checkInput(e, type) {
	var key;
	var keychar;
	
	if (window.event)
	   key = window.event.keyCode;
	else if (e)
	   key = e.which;
	else
	   return true;
	
	keychar = String.fromCharCode(key);
	keychar = keychar.toLowerCase();
	type = type.toLowerCase();
	
	// control keys
	if ((key==null) || (key==0) || (key==8) || (key==9) || (key==13) || (key==27)) {
		return true;
	}
	else if (type == "currency") {
		if ((("0123456789$.,").indexOf(keychar) > -1))
			return true;
		else
			return false;
	}
	else if (type == "phone") {
		if ((("0123456789-()").indexOf(keychar) > -1))
			return true;
		else
			return false;
	}
	else if (type == "email") {
		if ((("0123456789abcdefghijklmnopqrstuvwxyz@._-").indexOf(keychar) > -1))
			return true;
		else
			return false;
	}
	else if (type == "number") {
		if ((("0123456789").indexOf(keychar) > -1))
			return true;
		else
			return false;
	}
	else if (type == "alphanumber") {
		if ((("0123456789abcdefghijklmnopqrstuvwxyz").indexOf(keychar) > -1))
			return true;
		else
			return false;
	}
	else if (type == "time") {
		if ((("0123456789:").indexOf(keychar) > -1))
			return true;
		else
			return false;
	}
	else if (type == "date") {
		if ((("0123456789/").indexOf(keychar) > -1))
			return true;
		else
			return false;
	}
	else {
	   return false;
	}
}

function isNumber(inputVal) {
	var oneDecimal = false;
	var inputStr = inputVal.toString();
	if (inputStr.length == 0)
		return false;
	for (var i = 0; i < inputStr.length; i++) {
		var oneChar = inputStr.charAt(i);
		if (oneChar == "." && !oneDecimal) {
			oneDecimal = true;
			continue;
		}
		if (oneChar < "0" || oneChar > "9") {
			return false;
		}
	}
	return true;
}

function isPosInteger(inputVal) {
	var inputStr = inputVal.toString();
	if (inputStr.length == 0)
		return false;
	for (var i = 0; i < inputStr.length; i++) {
		var oneChar = inputStr.charAt(i);
		if (oneChar < "0" || oneChar > "9") {
			return false;
		}
	}
	return true;
}

function adjustDecimalsForCurrency(inputVal) {
	var oneChar = "";
	var inputStr = inputVal.toString();
	if (inputStr == "") {
		return "";
	}
	var outputStr = ""
	var oneDecimal = false;
	var count = 0;
	var overFlowFlag = false;
	for (var i = 0; i < inputStr.length; i++) {
		oneChar = inputStr.charAt(i);
		if (oneChar == "." && !oneDecimal) {
			oneDecimal = true;
			outputStr = outputStr + oneChar;
			continue;
		}
		if (oneDecimal) {
			count += 1;
		}
		if (count > 2) {
			overFlowFlag = true;
			break;
		}
		outputStr = outputStr + oneChar;
	}
	if (overFlowFlag && Number(oneChar) > 5) {
		oneChar = outputStr.charAt(outputStr.length - 1);
		oneChar = Number(oneChar) + 1;
		outputStr = outputStr.substring(0, outputStr.length - 1) + oneChar.toString();
	}
	if (!oneDecimal)
		outputStr = outputStr + ".00"
	if (count == 1)
		outputStr = outputStr + "0"
	return outputStr;
}

function isCurrency(val) {
	val = val.replace(/\s/g, "");
    if(val.search(/^\$?\d{1,3}(,?\d{3})*(\.\d{1,2})?$/) == -1) {
         return false;
    }
	else {
		return true;
	}
}

function isDate(val) {
	var regdate1 = new RegExp("^[0-1]?[0-9]\/[0-3]?[0-9]\/[0-9]{4}$", "gi");
	var regdate2 = new RegExp("^[0-9]?[0-9]\/[0-9]?[0-9]\/[0-9]{2}$", "gi");
	if (!regdate1.test(val) && !regdate2.test(val)) {
		return false;
	}
	var datePieces = new Array();
	datePieces = val.split("/");
	monthval = parseInt(datePieces[0], 10);
	dayval = parseInt(datePieces[1], 10);
	yearval = parseInt(datePieces[2], 10);
	if (monthval < 1 || monthval > 12) {
		return false;
	}
	
	if ((monthval == 1 || monthval == 3 || monthval == 5 || monthval == 7 || monthval == 8 || monthval == 10 || monthval == 12) && (dayval < 1 || dayval > 31)) {
		return false;
	}
	else if ((monthval == 4 || monthval == 6 || monthval == 9 || monthval == 11) && (dayval < 1 || dayval > 30)) {
		return false;
	}
	else if (monthval == 2 ) {
		if (dayval < 1 )
		{
			return false;
		}
		else if (isLeapYear(yearval) && dayval > 29) {
			return false;
		}
		else if (!isLeapYear(yearval) && dayval > 28) {
			return false;
		}
	}
	if (datePieces[2].length == 2) {
		//put validation for 2 digit year when we can think of it.
	}
	else if (datePieces[2].length == 4) {
		if (yearval < 1900 || yearval > 2100) {
			return false;
		}
	}
	else {
		return false;
	}
	return true;
}

function isTime(timeVal) {
	var val = timeVal;
	if (timeVal.indexOf(":") < 0)
		return false;
	var timePieces = new Array();
	timePieces = timeVal.split(":")
	if (timePieces.length < 2)
		return false;
	if (timePieces[0] > 12)
		return false;
	if (timePieces[1] > 60)
		return false;
	if (timePieces.length == 3) {
		if (timePieces[2] > 60)
			return false;
	}
	return true;
}

function formatYear(val, prefix) {
	if (val == "")
		return val;
	var datePieces = new Array();
	datePieces = val.split("/");
	if (datePieces[2].length == 2) {
		val = datePieces[0] + "/" + datePieces[1] + "/" + prefix + datePieces[2]
	}
	return val;
}

function y2k(number) { 
	return (number < 1000) ? number + 1900 : number;
}

function formatDateTo4DigitYear(date, base) { 
	return (date < 100) ? date + base : date;
}

function daysBetween(date1,date2) {
    var difference =
        Date.UTC(y2k(date1.getYear()),date1.getMonth(),date1.getDate(),0,0,0)
	     - Date.UTC(y2k(date2.getYear()),date2.getMonth(),date2.getDate(),0,0,0);
    return difference/1000/60/60/24;
}

function getLastDayOfMonth(date) {
	var daysofmonth   = new Array( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	var daysofmonthLY = new Array( 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

	if (isLeapYear(y2k(date.getYear()))) {
		daysofmonth = daysofmonthLY;
	}
	
	return daysofmonth[date.getMonth()];
}

function isLeapYear(year) {
    if ((year/4)   != Math.floor(year/4))   return false;
    if ((year/100) != Math.floor(year/100)) return true;
    if ((year/400) != Math.floor(year/400)) return false;
    return true;
}


