//-- form.js: Core Form validation routines
//-- last updated: 12/20/00
//-- Added Username and e-mail check enhancements

// GlobalVariables
var errors = false;

// Everything below this is used for the actual validation functions
// VARIABLEDECLARATIONS
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz";
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var whitespace = " \t\n\r";
var decimalPointDelimiter = ".";
var phoneNumberDelimiters = "()-+." + whitespace;
var validPhoneChars = digits + phoneNumberDelimiters;
var digitsInUSPhoneNumber = 10;
var ZIPCodeDelimiter = "-";
var invalidName = digits + whitespace + ',;:?!<>[]{}|\\~!@#$%^&*()/';
var validZIPCodeChars = digits+ZIPCodeDelimiter;
var validName = lowercaseLetters + uppercaseLetters + ZIPCodeDelimiter;
var validUserName = digits + lowercaseLetters + uppercaseLetters + decimalPointDelimiter;
var validWWWDomains = ".com/.net/.org/.edu/.mil/.gov/.arpa/.biz/.tv/.aero/.coop/.info/.int/.museum/.name";
var validCountryDomains = "";
	validCountryDomains += "";
	validCountryDomains += "";
	validCountryDomains += "";
var validDomains = "/" + validWWWDomains + "/" + validCountryDomains +  "/";

function setError(msg) {
	err_msg += msg;
	errors = true;
	return false;
}

function isEmpty(s){
	return ((s == null) || (s.length == 0));
}

function isWhitespace(s){
    if (isEmpty(s)) return true;
    for (var i = 0; i < s.length; i++) {   
        var c = s.charAt(i);
        if (whitespace.indexOf(c) == -1) return false;
    }
    return true;
}

function isRepeat(s){
	var su = s.toUpperCase();
	var comp_str = "";
    var base_chr = su.charAt(0);
    for (var i = 0; i < su.length; i++) {   
        comp_str += base_chr;
    }
	if (comp_str != su) return false;
    return true;
}

function isDigit(c) {
	return ((c >= "0") && (c <= "9"));
}

function isInteger(s) {  
    if (isEmpty(s)) return true;
    for (var i = 0; i < s.length; i++) {   
        var c = s.charAt(i);
        if (!isDigit(c)) return false;
    }
    return true;
}

function checkEmail(theField) {
    if (isWhitespace(theField.value)) {
      alert("Please enter your Email Address");
		return false;
  	 }
    else if (!isEmail(theField.value)) {
      alert("Please enter a valid Email Address - Construct");
		return false;
	 }
	else if (!isDomain(theField.value)) {
    alert("Please enter a valid Email Address - Domain");
	 return false;
	}
	return true;
}

function isDomain(s) {
	var domidx = s.lastIndexOf(".");
	var dom = s.substring(domidx);
	var dom_lc = dom.toLowerCase();
   var allValidDomains =  validDomains;
	if (localejsLoad) {
	  allValidDomains =  validDomains + buildTLD() + "/";
   }
   if (allValidDomains.indexOf("/" + dom_lc + "/") == -1) return false;
   return true;
}

function isEmail(s) {
	var atsign = s.indexOf("@");
	if (atsign == -1) return false;
	
	var user = s.substring(0, atsign);
	var domain = s.substring(atsign+1, s.length);

	if (isWhitespace(user)) return false;
	if (isWhitespace(domain)) return false;
	
	var dot = domain.indexOf(".");
	if (dot == -1) return false;
	return true;
}

function checkSelect(theField) {
	if (theField.options[theField.selectedIndex].value == -1) return false;
	return true;
}

function getSelect(theField) {
        if (!isEmpty(theField.options[theField.selectedIndex].value))
 	  return theField.options[theField.selectedIndex].value;
        else
 	  return theField.options[theField.selectedIndex].text;
}
function checkNumbers(theField, msg){
    var normalizedPhone = stripCharsInBag(theField.value, phoneNumberDelimiters);
    if (isWhitespace(normalizedPhone)) return setError(msg);
    else {
		if (!isInteger(normalizedPhone)) return setError(msg);
		else return true;
	}
}

function stripCharsInBag (s, bag){
    var returnString = "";;
    for (var i = 0; i < s.length; i++) {   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function isInCharBag(s, bag) {
    if (isEmpty(s)) return true;
    for (var i = 0; i < s.length; i++) {   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) return false;
    }
    return true;
}

function checkUsername(s) {
  if (isWhitespace(s) || isRepeat(s))
    return false;

  var ns = trim(s);

  if (ns.length < 6 || ns.length > 15)
    return false;
        
  return(isInCharBag(s, validUserName));
}

function checkName(s) {
  if (isWhitespace(s) || isRepeat(s))
    return false;
    
  var s1 = trim(s);
  if (s1 != stripCharsInBag(s1, invalidName))
    return false;
  
  return true;
}

function checkFormattedName(s) {
  if (isWhitespace(s) || isRepeat(s))
    return false;
    
  var s1 = trim(s);
  var tmp = s1.split(' ');
  for (i = 0; i < tmp.length; i++)
    if (tmp[i] != stripCharsInBag(tmp[i], invalidName))
      return(false);

  return true;
}

function checkStrict(theField, msg) {
	if (theField.value.length < 2) return setError(msg);
	if (isInteger(theField.value)) return setError(msg);
	if (isRepeat(theField.value)) return setError(msg);
	return true;
}

function ltrim ( s )
{
	return s.replace( /^\s*/, "" )
}

function rtrim ( s )
{
	return s.replace( /\s*$/, "" );
}

function trim ( s )
{
	return rtrim(ltrim(s));
}


function normalizeData(s, delim) {
  return(stripCharsInBag(s, delim).toUpperCase());
}

function isEqualData(s1, s2, delim)
{
  return(normalizeData(s1,delim) == normalizeData(s2,delim));
}

function escapeURL(p_text) {
  re1 = /\&/gi;
  re2 = / /gi;
  re3 = /\+/gi;
 var  p_str = p_text;
  p_str = p_str.replace(re1,"%26");
  p_str = p_str.replace(re2,"%2B");
  p_str = p_str.replace(re3,"%2B");
  return p_str;
}

// ------------------------------------------------------------------------- //
function getCookieData(label) {
var labelLen = label.length
var cLen = document.cookie.length
var i = 0
var cEnd
	while (i < cLen) {
	var j = i + labelLen
	if (document.cookie.substring(i,j) == label) {
		cEnd = document.cookie.indexOf(";",j)
		if (cEnd == -1) {
			cEnd = document.cookie.length
		}
	j++;
	return unescape(document.cookie.substring(j,cEnd))
	}

	i++
	}

	return "";
}
// ------------------------------------------------------------------------- //

function setCookie(name, value, time, ttype) {
	var exp = new Date();
	var cookieval = name + "=" + value + "; ";
	var date = exp.getTime();
	if (time > 0) {
      	if (ttype == "year") exp.setTime(date + (time * year)); 
		else if (ttype == "day") exp.setTime(date + (time * day));
		else if (ttype == "hour") exp.setTime(date + (time * hour));
		
      	cookieval += "expires=" + exp.toGMTString();
	}
    cookieval += "; domain=.oracle.com; path=/";
	document.cookie = cookieval;
}

function getCookie(foo) {
	return getCookieData(foo)
}

var formjsLoad = true;


