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

// GlobalVariables
var errors 			= false;
var isEmp			= false;
var tmp_email		= "";
var emp_str			= "@oracle"

// These are the error messages returned through the alert window
var fullname 		= '"Name" is empty.\n';
var send_list 		= '"Send To" is either empty or invalid.\n';
var subj 			= '"Subject" is empty.\n';
var messg 		    = '"Message" is empty.\n';

var user_id 		= '"Username" is either empty or invalid.\n';
var user_id2		= '"Username" contains invalid characters\n';
var pass 			= '"Password" is either empty or invalid.\n';
var pass_confirm 	= '"Password" was not confirmed properly.\n';
var first_name 		= '"First Name" is either empty or invalid.\n';
var last_name 		= '"Last Name" is either empty or invalid.\n';
var e_mail 		    = '"E-mail Address" is either empty or invalid.\n';
var e_mail_dom 		= '"E-mail Address" appears to be an invalid domain.\n';
var e_mail_emp		= '"E-Mail Address" is not changeable for Oracle Employee accounts.\n';
var country 		= '"Country" is not selected.\n';
var company 		= '"Company" is either empty or invalid.\n';
var title 			= '"Title" is either empty or invalid.\n';
var address 		= '"Address" is either empty or invalid.\"\n';
var city 			= '"City" is either empty or invalid.\n';
var state 			= '"State" is either empty or invalid.\n';
var zip 			= '"Zip/Postal Code" is either empty or invalid.\n';
var phone 		    = '"Phone Number" is either empty or invalid.\n';
var fax 			= '"FAX Number" is either empty or invalid.\n';
var lang			= '"Language" is not selected.\n';
var profile1		= '"Job Role" is not selected.\n';
var profile2		= '"Business Industry" is not selected.\n';
var profile3		= '"Industry Relationship" is not selected.\n';
var opp_pin			= '"OPP Pin#" is either empty or invalid.\n';

// 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 ZIPCodeDelimeter = "-";
var validZIPCodeChars = digits+ZIPCodeDelimeter;
var validUsername = digits + lowercaseLetters + uppercaseLetters + decimalPointDelimiter;
var validWWWDomains = "/.com/.net/.org/.edu/.mil/.gov/.int/";
var validCountryDomains = "/.ac/.ad/.ae/.af/.ag/.ai/.al/.am/.an/.ao/.aq/.ar/.as/.at/.au/.aw/.az/.ba/.bb/.bd/.be/.bf/.bg/.bh/.bi/.bj/.bm/.bn/.bo/.br/.bs/.bt/.bv/.bw/.by/.bz/.ca/.cc/.cd/.cf/.cg/.ch/.ci/.ck/.cl/.cm/.cn/.co/.cr/.cu/.cv/.cx/.cy/.cz/.de/.dj/.dk/.dm/.do/.dz/.ec/.ee/.eg/.eh/.er/.es/.et/.fi/.fj/.fk/.fm/.fo/.fr/.ga/.gd/.ge/.gf/.gg/.gh/.gi/.gl/.gm/.gn/.gp/.gq/.gr/.gs/.gt/.gu/.gw/.gy/";
	validCountryDomains += "/.hk/.hm/.hn/.hr/.ht/.hu/.id/.ie/.il/.im/.in/.io/.iq/.ir/.is/.it/.je/.jm/.jo/.jp/.ke/.kg/.kh/.ki/.km/.kn/.kp/.kr/.kw/.ky/.kz/.la/.lb/.lc/.li/.lk/.lr/.ls/.lt/.lu/.lv/.ly/.ma/.mc/.md/.mg/.mh/.mk/.ml/.mm/.mn/.mo/.mp/.mq/.mr/.ms/.mt/.mu/.mv/.mw/.mx/.my/.mz/.na/.nc/.ne/.nf/.ng/.ni/.nl/.no/.np/.nr/.nu/.nz/.om/.pa/.pe/.pf/.pg/.ph/.pk/.pl/.pm/.pn/.pr/.ps/.pt/.pw/.py/";
	validCountryDomains += "/.qa/.re/.ro/.ru/.rw/.sa/.sb/.sc/.sd/.se/.sg/.sh/.si/.sj/.sk/.sl/.sm/.sn/.so/.sr/.st/.sv/.sy/.sz/.tc/.td/.tf/.tg/.th/.tj/.tk/.tm/.tn/.to/.tp/.tr/.tt/.tv/.tw/.tz/.ua/.ug/.uk/.um/.us/.uy/.uz/.va/.vc/.ve/.vg/.vi/.vn/.vu/.wf/.ws/.ye/.yt/.yu/.za/.zm/.zr/.zw/";
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, msg) {
	//Add Employee email change check
//	if (isEmp) {
//		if (tmp_email != theField.value) {
//			theField.value = tmp_email;
//			return setError(e_mail_emp);
//		}
//	}
    if (isWhitespace(theField.value)) return setError(msg);
    else if (!isEmail(theField.value)) return setError(msg);
	else if (!isDomain(theField.value)) return setError(e_mail_dom);
	return true;
}

function checkEmail2(theField, msg) {
    if (!isEmail(theField.value)) return setError(msg);
	else if (!isDomain(theField.value)) return setError(e_mail_dom);
	return true;
}

function isDomain(s) {
	var domidx = s.lastIndexOf(".");
	var dom = s.substring(domidx);
	var dom_lc = dom.toLowerCase();
	if (validDomains.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 checkUserID (theField, msg) {
	var s = theField.value.toLowerCase();
	for (var i = 0; i < s.length; i++) {   
        var c = s.charAt(i);
        if (whitespace.indexOf(c) != -1) return setError(msg);
		if (validUsername.indexOf(c) == -1) return setError(user_id2);
	}
	if (s.indexOf(emp_str) !=-1) return setError(user_id2);
	if (!isWhitespace(theField.value) && theField.value.length >= 6 && theField.value.length <= 30) return true;
    return setError(msg);
}

function checkPassword(theField,checkField, msg) {
	if ((!isWhitespace(theField.value) && theField.value.length >= 6) && (!isWhitespace(checkField.value) && checkField.value.length >= 6)) {
		if (theField.value == checkField.value) return true;
		else return setError(msg);
	}
	return setError(msg);
}

function checkString(theField, msg) {
    if (isWhitespace(theField.value)) return setError(msg);
	return true;
}

function checkPacked(theField, msg) {
    if (isWhitespace(theField.value)) return setError(msg);
	if (theField.value == "/") return setError(msg);
	return true;
}

function checkSelect(theField, msg) {
	if (theField.options[theField.selectedIndex].value == -1 || isWhitespace(theField.value)) return setError(msg);
	return true;
}

function checkRadio(theField, msg) {
	var radioChecked = false;
	for (var i=0; i< theField.length; i++) {
		if (theField[i].checked) radioChecked = true;
	}
	if (!radioChecked) return setError(msg);
	return true;
}

function checkCheckGroup(form, prefix, startnum, endnum, msg) {
	var checkChecked = false;
	for (var i=startnum; i=endnum; i++) {
		checkChecked = eval ("form." + prefix + i + ".checked");
	}
	if (!checkChecked) return setError(msg);
	return true;
}

function checkNumbers(theField, msg){
	if (theField.value == null || theField.value == "") return setError(msg);
	//Fix employee prestuffed '---' value
	if (theField.value == "---" && isEmp == true) return true;
    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 checkStrict(theField, msg) {
	if (theField.value.length < 3) return setError(msg);
	if (isInteger(theField.value)) return setError(msg);
	if (isRepeat(theField.value)) return setError(msg);
	return true;
}

function checkDate(theField, msg) {
//	window.onerror=null 
// for all other strange errors

	var err=0

	if (theField.value.length != 10) err=1
	dia = theField.value.substring(0, 2)// day
	sep1 = theField.value.substring(2, 3)// '/'
	mes = theField.value.substring(3, 5)// month
	sep2 = theField.value.substring(5, 6)// '/'
	ano = theField.value.substring(6, 10)// year

	// test basico de error
	if (dia<1 || dia>31) err = 1
	if (mes<1 || mes>12) err = 1
	if (ano<1900 || ano>2999) err = 1
	if ((sep1 != '/' || sep2 != '/') && (sep1 != '-' || sep2 != '-')) err = 1

	//test avanzado de error

	// meses de 30 dias
	if (mes==4 || mes==6 || mes==9 || mes==11){
		if (dia==31) err=1
	}
	// febrero, ano bisiesto
	if (mes==2){
		// feb
		var g=parseInt(ano/4)
		if (isNaN(g)) {
			err=1
		}
		if (dia>29) err=1
		if (dia==29 && ((ano/4)!=parseInt(ano/4))) err=1
	}

	if (err==1) return setError(msg);
	return true;
}


function checkRut(theField, msg) {

	var texto = theField.value;
	var tmpstr = "";
	for ( i=0; i < theField.value.length ; i++ )
		if ( texto.charAt(i) != ' ' && texto.charAt(i) != '.' && texto.charAt(i) != '-' )
			tmpstr = tmpstr + texto.charAt(i);

	largo = tmpstr.length;
	rut = tmpstr.substring(0, largo-1) + ""
	dv = tmpstr.substring(largo-1, largo) + ""

	if (largo < 2) return setError(msg);
	
	//validar caracteres del rut
	for (i=0; i < largo-1 ; i++ )
		if (rut.charAt(i) !="0" && rut.charAt(i) != "1" && rut.charAt(i) !="2" && rut.charAt(i) != "3" && rut.charAt(i) != "4" && rut.charAt(i) !="5" && rut.charAt(i) != "6" && rut.charAt(i) != "7" && rut.charAt(i) !="8" && rut.charAt(i) != "9")
			return setError(msg);

	//validar caracteres del dv
	if (dv != '0' && dv != '1' && dv != '2' && dv != '3' && dv != '4' && dv != '5' && dv != '6' && dv != '7' && dv != '8' && dv != '9' && dv != 'k'  && dv != 'K')
		return setError(msg);

	//validat nulidad
	if (rut == null || dv == null )
		return setError(msg);
	
	//validar dv
	var dvr = '0'
	suma = 0
	mul  = 2
	for (i= rut.length -1 ; i >= 0; i--) {
		suma = suma + rut.charAt(i) * mul
		if (mul == 7) mul = 2
		else mul++
	}
	res = suma % 11
	if (res==1) dvr = 'k'
	else if (res==0) dvr = '0'
	else {
		dvi = 11-res
		dvr = dvi + ""
	}

	if ( dvr != dv.toLowerCase() ) return setError(msg);
    return true;
}
var formjsLoad = true;

