var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var whitespace = " \t\n\r";
var decimalPointDelimiter = "."
var defaultEmptyOK = true;

/*========================================================================================
' Generic functions
'========================================================================================*/

function isLetterOrDigit (c) {   return (isLetter(c) || isDigit(c))
}

function isAlphanumeric (s) {   var i;
	if (isEmpty(s)) 
	   if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
	   else return (isAlphanumeric.arguments[1] == true);
	for (i = 0; i < s.length; i++) {   
		var c = s.charAt(i);
		if (! (isLetter(c) || isDigit(c) ) )
		return false;
	}

	return true;
}

/*========================================================================================
' Text based functions
'========================================================================================*/

function isLetter (c) {   return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) )
}

function isEmpty(s) {
	s=""+s;
	return ((s == null) || (s.length == 0));
}

function stripCharsInBag (s, bag) {   var i;
	var returnString = "";
	for (i = 0; i < s.length; i++) {   
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1) returnString += c;
	}

	return returnString;
}

function isValidEmail(emailad) {
  if(emailad=="" && defaultEmptyOK) return true;

   var exclude=/[^@\-\.\w]|^[_@\.\-]|[\._\-]{2}|[@\.]{2}|(@)[^@]*\1/;
   var check=/@[\w\-]+\./;
   var checkend=/\.[a-zA-Z]{2,3}$/;

   if(((emailad.search(exclude) != -1) ||
       (emailad.search(check)) == -1) ||
       (emailad.search(checkend) == -1)){
      return false;
   } else {
      return true;
   }
}

function stripCharsNotInBag (s, bag) {   var i;
	var returnString = "";
	for (i = 0; i < s.length; i++) {   
		var c = s.charAt(i);
		if (bag.indexOf(c) != -1) returnString += c;
	}

	return returnString;
}

function stripWhitespace (s) {   return stripCharsInBag (s, whitespace)
}

function isWhitespace (s) {   var i;
	if (isEmpty(s)) return true;
	for (i = 0; i < s.length; i++) {   
		var c = s.charAt(i);
		if (whitespace.indexOf(c) == -1) return false;
	}

	return true;
}

function charInString (c, s) {   for (i = 0; i < s.length; i++) {   if (s.charAt(i) == c) return true;
	}

	return false
}

function stripInitialWhitespace (s) {   var i = 0;
	while ((i < s.length) && charInString (s.charAt(i), whitespace))
	   i++;
	return s.substring (i, s.length);
}

function isAlphabetic (s) {   var i;
	if (isEmpty(s)) 
	   if (isAlphabetic.arguments.length == 1) return defaultEmptyOK;
	   else return (isAlphabetic.arguments[1] == true);
	for (i = 0; i < s.length; i++) {   
		var c = s.charAt(i);
		if (!isLetter(c))
		return false;
	}

	return true;
}

/*========================================================================================
' Numeric based functions
'========================================================================================*/

function isDigit (c) {   return ((c >= "0") && (c <= "9"))
}

function isInteger (s) {   var i;
	if (isEmpty(s)) 
	   if (isInteger.arguments.length == 1) return defaultEmptyOK;
	   else return (isInteger.arguments[1] == true);
	for (i = 0; i < s.length; i++) {   
		var c = s.charAt(i);
		if (!isDigit(c)) return false;
	}

	return true;
}

function isSignedInteger (s) {   if (isEmpty(s)) 
	   if (isSignedInteger.arguments.length == 1) return defaultEmptyOK;
	   else return (isSignedInteger.arguments[1] == true);

	else {
		var startPos = 0;
		var secondArg = defaultEmptyOK;

		if (isSignedInteger.arguments.length > 1)
			secondArg = isSignedInteger.arguments[1];
		s = new String(s+'');
		// skip leading + or -
		if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
		   startPos = 1;	
		return (isInteger(s.substring(startPos, s.length), secondArg))
	}
}

function isPositiveInteger (s) {   var secondArg = defaultEmptyOK;
	if (isPositiveInteger.arguments.length > 1)
		secondArg = isPositiveInteger.arguments[1];
	return (isSignedInteger(s, secondArg)
		 && ( (isEmpty(s) && secondArg)  || (parseInt (s) > 0) ) );
}

function isNonnegativeInteger (s) {   var secondArg = defaultEmptyOK;
	if (isNonnegativeInteger.arguments.length > 1)
		secondArg = isNonnegativeInteger.arguments[1];
	return (isSignedInteger(s, secondArg)
		 && ( (isEmpty(s) && secondArg)  || (parseInt (s) >= 0) ) );
}

function isNegativeInteger (s) {   var secondArg = defaultEmptyOK;
	if (isNegativeInteger.arguments.length > 1)
		secondArg = isNegativeInteger.arguments[1];
	return (isSignedInteger(s, secondArg)
		 && ( (isEmpty(s) && secondArg)  || (parseInt (s) < 0) ) );
}

function isNonpositiveInteger (s) {   var secondArg = defaultEmptyOK;
	if (isNonpositiveInteger.arguments.length > 1)
		secondArg = isNonpositiveInteger.arguments[1];
	return (isSignedInteger(s, secondArg)
		 && ( (isEmpty(s) && secondArg)  || (parseInt (s) <= 0) ) );
}

function isFloat (s) {   var i;
	var seenDecimalPoint = false;
	if (isEmpty(s))
	   if (isFloat.arguments.length == 1) return defaultEmptyOK;
	   else return (isFloat.arguments[1] == true);
	if (s == decimalPointDelimiter) return false;
	for (i = 0; i < s.length; i++) {   
		var c = s.charAt(i);
		if ((c == decimalPointDelimiter) && !seenDecimalPoint) seenDecimalPoint = true;
		else if (!isDigit(c)) return false;
	}

	return true;
}

/*========================================================================================
' Application specific functions
'========================================================================================*/

function isValidPassword(strPassword){
	if(strPassword=="") return false;
	if(strPassword.length<7) return false;
	
	var bChar=false;
	var bDigit=false;
	
	for(i=0;i<strPassword.length;i++){
		var c = strPassword.charAt(i);
		if(!(isLetterOrDigit(c))) return false;
		if(isLetter(c)) bChar = true;
		if(isDigit(c)) bDigit = true;
	}
	
	if(bChar && bDigit){
		return true;
	} else {
		return false;
	}
}

