//Checks for blank field 
function isBlankField(fieldvalue)  {        
  if(trim(fieldvalue) == "") { 
  	return(true); 
  } 
  return(false); 
} 

function isEmpty(cInString) {
	if(cInString.search(/\S/) == -1) {
		return true;
	} else {
		return false;
	}
}
	
function ltrim(fstr) {
	var str;
	var tStr;
	var i,k, j=0;
	str = fstr.toString();
	for(i=0; i<str.length; i++) {
		if (str.charAt(i) != " ")
			break;
	}
	tStr = str.substr(i);
	return tStr;		
}

function rtrim(fStr) {
	var str;
	var tStr;
	var i,k, j=0;
	str = fStr.toString();
	for (i=str.length-1; i>0; i--) {
		if(str.charAt(i) != " ") break;
	}
	tStr = str.substr(0,i+1)

	return tStr;		
}

function trim(fStr) {
	return ltrim(rtrim(fStr));
}

function isEmail(s) {  
	// there must be >= 1 character before @, so we
	// start looking at character position 1
	// (i.e. second character)
	var i = 1;
	var sLength = s.length;
	
	if(s.indexOf("..")!= -1) return false;
	if(s.indexOf("@.")!= -1) return false;
	if(s.indexOf(".@")!= -1) return false;
	if(s.indexOf("@@")!= -1) return false;
	if(s.charAt(0)=="@") return false;
	if(s.charAt(0)==".") return false;
	if(s.charAt(sLength-1)==".") return false;
	if (CheckForInvalidEmailChars(s) == 1 )return false;
		
	// look for @
	while ((i < sLength) && (s.charAt(i) != "@"))
	{ i++ }
	
	if(i+1<sLength) {
	  if(s.indexOf("@",i+1)!= -1) return false;
	}
	
	if((i >= sLength) || (s.charAt(i) != "@")) return false;
	else i += 2;
	
	// look for .
	while ((i < sLength) && (s.charAt(i) != "."))
	{ i++ }
	
	// there must be at least one character after the .
	if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
	else return true;
}

function isDigits(num) {
	for(i=0; i<num.length; i++) {
		if("0123456789".indexOf(num.charAt(i)) == -1) return false;
	}
	return true;
}

function isNumeric(cInString) {
	if(!isNaN(cInString)) {
		return true;
	} else {
		return false;
	}
}

function isInt(cInString) {
	if(isNumeric(cInString)) {
		if(cInString == parseInt(cInString)){
			return true;
		} else if(isEmpty(cInString)) {
			return true;
		} else {
			return false;
		}
	} else {
		return false;
	}
}

function isDate(cInString)
{
	if(cInString.indexOf('/',0) == -1){ // if no slash
		return false;
	} else if(cInString.indexOf('/',cInString.indexOf('/',0)+1) == -1){ // no second slash
		return false;
	} else {
		
		var cMonth = cInString.split('/')[0];
		var cDay = cInString.split('/')[1];
		var cYear = cInString.split('/')[2];
		if(isNaN(cMonth) || isNaN(cDay) || isNaN(cYear)) return false;
		
		var nMonth = parseInt(cMonth,10);
		var nDay = parseInt(cDay,10);
		var nYear = parseInt(cYear,10);
				
		if(isNaN(nMonth) || isNaN(nDay) || isNaN(nYear)){ // has slashes but letters too!
			return false;
		} else if( !inRange(nMonth,1,12) || !inRange(nDay,1,31) ) { //|| !inRange(nYear,1900,9999) ){ // out or valid numeric range for dates.
				return false;
		}
		var nHours = 0;
		var nMinutes = 0;
		var nSeconds = 0;
		
		// check number of days in months since JavaScript just rolls things forward!
		switch(nMonth)
		{
			case 2: // February
			{
				var lIsLeap = false;
				if( (((nYear % 4) == 0) && ((nYear % 100) != 0)) || ((nYear % 400) == 0) ) {
					lIsLeap = true;
				}
				if(lIsLeap){
					if(nDay > 29){
						return false;
					}
				} else if(nDay > 28){
					return false;
				}
				break;
			}
			case 4: // April
			{
				if(nDay > 30){
					return false;
				}
				break;
			}
			case 6: // June
			{
				if(nDay > 30){
					return false;
				}
				break;
			}
			case 9: // September
			{
				if(nDay > 30){
					return false;
				}
				break;
			}
			case 11: // November
			{
				if(nDay > 30){
					return false;
				}
				break;
			} // the rest of the months already fall in the range check above.
		} // end month checking
	}
	return true;		
}

function inRange(nNumber, nMin, nMax)
{
	nNumber = parseFloat(nNumber);
	nMin = parseFloat(nMin);
	nMax = parseFloat(nMax);
	
	if(nNumber >= nMin){
		if(nNumber <= nMax){
			return true;
		}
	} else {
		return false;
	}
}

function CheckForInvalidEmailChars(strTxt) {
	var invalidChars, chrallow;
	invalidChars = "<>;:(),+=\/*&$%#^ ?~`";
	
	var i, n, mc, x;
	chrallow = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.@-'"
	n = strTxt.length;
	for (i=0; i<n; i++) {
		mc = strTxt.charAt(i);
		if(chrallow.indexOf(mc,0) == -1) {
			return 1;
		}
		if(invalidChars.indexOf(mc,0) != -1) {
			return 1;
		}
		else { //check for space
			if((mc.indexOf('"',0)!=-1) || (mc.indexOf(' ',0) != -1)) {
				return 1;
			}
		}
	}
	return 0;
}

function CheckForInvalidChars(strTxt, charAllowList) {
	var i, n, mc, x;
	n = strTxt.length;
 	for(i=0; i<n; i++) {
		mc = strTxt.charAt(i);
		if(charAllowList.indexOf(mc,0) == -1) {
			return 1;
		}
	}
	return 0;
}
	
function CheckPassword(strTxt, charAllowList) {
	var i, n, mc, x;
	var numfnd, chrfnd, allfnd, repeatchr, repeatcnt, rptfnd;
	n = strTxt.length;
	numfnd = 0;
	chrfnd = 1;
	repeatchr = "";
	repeatcnt = 0;
	rptfnd = 0;
	for(i=0; i<n; i++) {
		mc = (strTxt.charAt(i));
		if(charAllowList.indexOf(mc,0)==-1) {
			chrfnd=0;
		}
		((repeatchr == mc)? (repeatcnt = repeatcnt) : (repeatcnt = 1));
		((repeatchr == mc)? (repeatcnt = repeatcnt + 1) : (repeatchr = mc));
		if (repeatcnt > 3) {
			rptfnd=1;
		}
		if(isNaN(mc)) {
			((numfnd == 0)? numfnd=0 : numfnd=1);
		}
		else {
			numfnd = 1;
		}
	}
	allfnd = 1; //ok
	if ((chrfnd == 0) || (numfnd == 0) /*|| (rptfnd == 1)*/) {
		allfnd = 0;
	}
	return allfnd;
}
