/* DeskflowGeneral.js */

/* GLOBAL CONSTANTS */
var minPasswordStrength = 0;

function y2k(number)    { return (number < 1000) ? number + 1900 : number; }

var today = new Date();
var day   = today.getDate();
var month = today.getMonth();
var year  = y2k(today.getYear());

function padout(number) { return (number < 10) ? '0' + number : number; }

function getInternetExplorerVersion() {
  var rv = -1; // Return value assumes failure.
  if (navigator.appName == 'Microsoft Internet Explorer') {
    var ua = navigator.userAgent;
    var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat( RegExp.$1 );
  }
  return rv;
}

//Work with "required" fields array
//Javascript_Required_Fields
function fieldRequired( textObj ) {
	var tJRF = ","+Javascript_Required_Fields+",";
	var tFN = ","+textObj.name+",";
	var isRequired = tJRF.indexOf(tFN)>=0;
	if (isRequired) fieldNoReadOnly(textObj);
	return isRequired;
} //function fieldIsEmpty


function fieldExists( textObj ) {
	return (textObj!= undefined)
} //function fieldIsEmpty

function fieldExistsRequired(textObj) {
	if ( fieldExists(textObj) ) {
		return fieldRequired(textObj);
	}
	return false;
}

function fieldExistsRequiredEmpty( textObj ) {
	if ( fieldExistsRequired(textObj) ) {
		return fieldIsEmpty((textObj));

	} else return false;
}

function fieldIsEmpty( textObj ) {
	if (fieldExists(textObj)) {
		if ( (textObj.value==undefined) || (textObj.value == null) || (textObj.value=="") ){
			return true;
		}
		if ( textObj.value.length == 0 ) {
			return true ;
		} else {
			for ( var i = 0 ; i < textObj.value.length ; ++i ) {
				var ch = textObj.value.charAt(i) ;
				if ( ch != ' ' && ch != '\t' ) {
					return false ;
				}
			}
			return true ;
		}
	} else {
		//alert('sss');
	}
} //function fieldIsEmpty

function fieldNoReadOnly( textObj ) {
	if (textObj.disabled) {
		textObj.readonly = false;
		textObj.disabled = false;
		textObj.className="inputBox";
		doHighlightObject(textObj);
	}
}

function selectObjectIsEmpty( selectObj ) {
	if (fieldExists(textObj)) {
		if ( selectObj.selectedIndex == -1 )
			return true ;
		else
			return false ;
	}
} //function selectObjectIsEmpty

function formatPostalCodeByID( idObj, postalCodeFormatType ) {
	var textObj = document.getElementById(idObj);
	return formatPostalCode( textObj, postalCodeFormatType );
}
function formatPostalCode( textObj, postalCodeFormatType ) {
	var postalCodeFormat = '';
	if (postalCodeFormatType=='') {
		return true;
	} else if (postalCodeFormatType=='USCAN') {
		//US and Canada
		var postalCodeFormat = /^((\d{5}-\d{4})|(\d{5})|([AaBbCcEeGgHhJjKkLlMmNnPpRrSsTtVvXxYy]\d[A-Za-z]\s?\d[A-Za-z]\d))$/;
	} else if (postalCodeFormatType=='AR') {
		//Argentina
		postalCodeFormat = /^([A-HJ-TP-Z]{1}\d{4}[A-Z]{3}|[a-z]{1}\d{4}[a-hj-tp-z]{3})$/;
	} else if (postalCodeFormatType=='DM') {
		//Dutch
		postalCodeFormat = /^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/;
	} else if (postalCodeFormatType=='UK') {
		//UK
		postalCodeFormat = /^[A-Za-z]{1,2}[\d]{1,2}([A-Za-z])?\s?[\d][A-Za-z]{2}$/;
	} else if (postalCodeFormatType=='DE') {
		//Germany
		postalCodeFormat = /\b((?:0[1-46-9]\d{3})|(?:[1-357-9]\d{4})|(?:[4][0-24-9]\d{3})|(?:[6][013-9]\d{3}))\b/;
	} else if (postalCodeFormatType=='USCANUK') {
		//US, Canada, UK
		postalCodeFormat = /^((\d{5}-\d{4})|(\d{5})|([AaBbCcEeGgHhJjKkLlMmNnPpRrSsTtVvXxYy]\d[A-Za-z]\s?\d[A-Za-z]\d)|([A-Za-z]{1,2}[\d]{1,2}([A-Za-z])?\s?[\d][A-Za-z]{2}))$/;
	}
	
	if (postalCodeFormat!='') {
		if (fieldIsEmpty(textObj)) {
			return true;
		} else if (postalCodeFormat.test(textObj.value)) {
			return true;
		} else {
			alert( langDic["Please type your postal / zip code."] );
			return false;
		}
	} else {
		return true;
	}
} //formatPostalCode




function formatPhoneNumberByID( idObj, fIsFaxNumber ) {
	var textObj = document.getElementById(idObj);
	return formatPhoneNumber( textObj, fIsFaxNumber );
}
function formatPhoneNumber( textObj, fIsFaxNumber ) {
	var  sDigitsOnly     = new String() ;
	var  sNewPhoneNumber = new String() ;
	if (textObj==undefined) return;
	if ( textObj.value==undefined) return;
	if ( textObj.value==null) return;
	if ( textObj.value.charAt(0) == "+" ) {
		return;
	}
	for ( var i = 0 ; i < textObj.value.length ; ++i ) {
		var  ch = textObj.value.charAt(i) ;
		if ( ch >= '0' && ch <= '9' )
			sDigitsOnly += ch ;
	}

	if (sDigitsOnly.substring( 0, 3 )=="011") {
		textObj.value = sDigitsOnly ;
		return
	}
	if (sDigitsOnly.substring(0,1)=="1") {
		sDigitsOnly=sDigitsOnly.substring(1,sDigitsOnly.length)
	}
	switch( sDigitsOnly.length ) {
		case 7: {
			var   sTmp = new String() ;
			sTmp = sDigitsOnly.substring( 0, 3 ) ;
			sNewPhoneNumber = sTmp + "-" + sDigitsOnly.substring( 3, 7 ) ;
		}
		break ;
		case 10: {
			var   sAreaCode = new String() ;
			var   sExchange = new String() ;
			sAreaCode = sDigitsOnly.substring( 0, 3 ) ;
			sExchange = sDigitsOnly.substring( 3, 6 ) ;
			sNewPhoneNumber = "(" + sAreaCode + ") " + sExchange + "-" + sDigitsOnly.substring( 6, 10 ) ;
		}
		break ;

		default:
			if ( sDigitsOnly.length < 10 ) {
				sNewPhoneNumber = sDigitsOnly ;
			} else if ( fIsFaxNumber == true ) {
				var   sAreaCode = new String() ;
				var   sExchange = new String() ;

				sAreaCode = sDigitsOnly.substring( 0,  3 ) ;
				sExchange = sDigitsOnly.substring( 3,  6 ) ;
				sNewPhoneNumber  = "(" + sAreaCode + ") " + sExchange + "-" ;
				sNewPhoneNumber += sDigitsOnly.substring( 6, sDigitsOnly.length + 1 ) ;
			} else {
				var   sAreaCode = new String() ;
				var   sExchange = new String() ;
				var   sLastFour = new String() ;

				sAreaCode = sDigitsOnly.substring( 0,  3 ) ;
				sExchange = sDigitsOnly.substring( 3,  6 ) ;
				sLastFour = sDigitsOnly.substring( 6, 10 ) ;

				sNewPhoneNumber  = "(" + sAreaCode + ") " + sExchange + "-" + sLastFour ;
				sNewPhoneNumber += " ext. " + sDigitsOnly.substring( 10, sDigitsOnly.length + 1 ) ;
			}
			break ;
	}
	textObj.value = sNewPhoneNumber ;
} //function formatPhoneNumber

function formatPhoneNumberAUSByID( idObj, fIsFaxNumber ) {
	var textObj = document.getElementById(idObj);
	return formatPhoneNumberAUS( textObj, fIsFaxNumber );
}
function formatPhoneNumberAUS( textObj, fIsFaxNumber ) {
	var  sDigitsOnly     = new String() ;
	var  sNewPhoneNumber = new String() ;

	for ( var i = 0 ; i < textObj.value.length ; ++i ) {
		var  ch = textObj.value.charAt(i) ;
		if ( ch >= '0' && ch <= '9' )
			sDigitsOnly += ch ;
	}

	if (sDigitsOnly.substring( 0, 3 )=="011") {
		textObj.value = sDigitsOnly ;
		return
	}
	if(sDigitsOnly.substring(0,1)=="1") {
		sDigitsOnly=sDigitsOnly.substring(1,sDigitsOnly.length)
	}

	switch( sDigitsOnly.length ) {

		case 7: {
			var   sTmp = new String() ;
			sTmp = sDigitsOnly.substring( 0, 3 ) ;
			sNewPhoneNumber = sTmp + "-" + sDigitsOnly.substring( 3, 7 ) ;
		}
		break ;

		case 10: {
			var   sAreaCode = new String() ;
			var   sExchange = new String() ;
			if ( textObj.name == "CellPhoneNumber") {
				//XXXX XXX XXX
				sAreaCode = sDigitsOnly.substring( 0, 4 ) ;
				sExchange = sDigitsOnly.substring( 4, 7 ) ;
				sNewPhoneNumber = sAreaCode + " " + sExchange + " " + sDigitsOnly.substring( 7, 10 ) ;
			} else {
				//(XX) XXXX XXXX
				sAreaCode = sDigitsOnly.substring( 0, 2 ) ;
				sExchange = sDigitsOnly.substring( 2, 6 ) ;
				sNewPhoneNumber = "(" + sAreaCode + ") " + sExchange + " " + sDigitsOnly.substring( 6, 10 ) ;
			}
		}
		break ;

		case 11: {
			var sIntCCode = new String() ;
			var sIntACode = new String() ;
			var sExchange = new String() ;
			if ( textObj.name == "HomePhoneNumber" || textObj.name == "BusinessPhoneNumber") {
				// +XX X  XXXX XXXX
				sIntCCode = sDigitsOnly.substring( 0, 2 ) ;
				sIntACode = sDigitsOnly.substring( 2, 3 ) ;

				sExchange = sDigitsOnly.substring( 3, 7 ) ;
				sNewPhoneNumber = "+" + sIntCCode + " " + sIntACode+ " " +sExchange + " " + sDigitsOnly.substring( 7, 11 ) ;
			} else {
				sNewPhoneNumber = sDigitsOnly;
			}
		}
		break ;

		case 12: {
			var sIntCCode = new String() ;
			var sIntACode = new String() ;
			var sExchange = new String() ;
			if ( textObj.name == "HomePhoneNumber" || textObj.name == "BusinessPhoneNumber") {
				// +xx xx xxxx xxxx
				sIntCCode = sDigitsOnly.substring( 0, 2 ) ;
				sIntACode = sDigitsOnly.substring( 2, 4 ) ;

				sExchange = sDigitsOnly.substring( 4, 8 ) ;
				sNewPhoneNumber = "+" + sIntCCode + " " + sIntACode+ " " +sExchange + " " + sDigitsOnly.substring( 8, 12 ) ;
			} else {
				sNewPhoneNumber = sDigitsOnly;
			}
		}
		break ;

		default:
			if ( sDigitsOnly.length < 10 ) {
				sNewPhoneNumber = sDigitsOnly ;
			} else if ( fIsFaxNumber == true ) {
				var   sAreaCode = new String() ;
				var   sExchange = new String() ;
				sAreaCode = sDigitsOnly.substring( 0,  3 ) ;
				sExchange = sDigitsOnly.substring( 3,  6 ) ;
				sNewPhoneNumber  = "(" + sAreaCode + ") " + sExchange + "-" ;
				sNewPhoneNumber += sDigitsOnly.substring( 6, sDigitsOnly.length + 1 ) ;
			} else {
				sNewPhoneNumber = sDigitsOnly ;
			}
		break ;
	}
	textObj.value = sNewPhoneNumber ;
} //function formatPhoneNumberAUS

function emailAddressValid( emailStr ) {
	//http://javascript.internet.com/forms/email-address-validation.html?email=larisa%40theshermans.name
	/* The following variable tells the rest of the function whether or not to verify that the address ends in a two-letter country or well-known TLD.  1 means check it, 0 means don't. */
	var checkTLD=1;
	/* The following is the list of known TLDs that an e-mail address must end with. */
	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
	/* The following pattern is used to check if the entered e-mail address fits the user@domain format.  It also is used to separate the username from the domain. */
	var emailPat=/^(.+)@(.+)$/;
	/* The following string represents the pattern for matching all special characters.  We don't want to allow special characters in the address. These characters include ( ) < > @ , ; : \ " . [ ] */
	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	/* The following string represents the range of characters allowed in a username or domainname.  It really states which chars aren't allowed.*/
	var validChars="\[^\\s" + specialChars + "\]";
	/* The following pattern applies if the "user" is a quoted string (in which case, there are no rules about which characters are allowed and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com is a legal e-mail address. */
	var quotedUser="(\"[^\"]*\")";
	/* The following pattern applies for domains that are IP addresses, rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal e-mail address. NOTE: The square brackets are required. */
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	/* The following string represents an atom (basically a series of non-special characters.) */
	var atom=validChars + '+';
	/* The following string represents one word in the typical username. For example, in john.doe@somewhere.com, john and doe are words. Basically, a word is either an atom or quoted string. */
	var word="(" + atom + "|" + quotedUser + ")";
	// The following pattern describes the structure of the user
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	/* The following pattern describes the structure of a normal symbolic domain, as opposed to ipDomainPat, shown above. */
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

	/* Begin with the coarse pattern to simply break up user@domain into different pieces that are easy to analyze. */
	var matchArray=emailStr.match(emailPat);
	if (matchArray==null) {
		/* Too many/few @'s or something; basically, this address doesn't even fit the general mould of a valid e-mail address. */
		//alert("Email address seems incorrect (check @ and .'s)");
		return false;
	}
	var user=matchArray[1];
	var domain=matchArray[2];

	for (i=0; i<user.length; i++) {
		if (user.charCodeAt(i)>127) {
			//alert("Ths username contains invalid characters.");
			return false;
		}
	}
	for (i=0; i<domain.length; i++) {
		if (domain.charCodeAt(i)>127) {
			//alert("Ths domain name contains invalid characters.");
			return false;
		}
	}

	// See if "user" is valid 
	if (user.match(userPat)==null) {
		// user is not valid
		//alert("The username doesn't seem to be valid.");
		return false;
	}

	/* if the e-mail address is at an IP address (as opposed to a symbolic host name) make sure the IP address is valid. */
	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		// this is an IP address
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				//alert("Destination IP address is invalid!");
				return false;
			}
		}
		return true;
	}

	// Domain is symbolic name.  Check if it's valid.
	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;
	for (i=0;i<len;i++) {
		if (domArr[i].search(atomPat)==-1) {
			//alert("The domain name does not seem to be valid.");
			return false;
		}
	}

	/* domain name seems valid, but now make sure that it ends in a known top-level domain (like com, edu, gov) or a two-letter word, representing country (uk, nl), and that there's a hostname preceding  the domain or country. */
	if (checkTLD && domArr[domArr.length-1].length!=2 && 
	domArr[domArr.length-1].search(knownDomsPat)==-1) {
		//alert("The address must end in a well-known domain or two letter " + "country.");
		return false;
	}

	// Make sure there's a host name preceding the domain.
	if (len<2) {
		//alert("This address is missing a hostname!");
		return false;
	}

	// If we've gotten this far, everything's valid!
	return true;
} //function emailAddressValid

//--------------

function validateFormSearch( formObj ) {
	rff = formObj.elements["rff"].value;
	if ((rff.length==0) || (rff=='')) {
		return true;
	} else {
		rff = ';' + rff + ';'

		var count = 0;
		for (i=0;i<formObj.length; i++) {
			if ( ((formObj.elements[i].name!='')||(formObj.elements[i].name.length>0)) && (rff.indexOf(';'+formObj.elements[i].name+';')>=0) ) {
				if (formObj.elements[i].type=='text') {
					//Remove * or %
					var rffv = formObj.elements[i].value;
					rffv = rffv.replace(/[ ]/g,'');
					rffv = rffv.replace(/[*]/g,'');
					rffv = rffv.replace(/[%]/g,'');
					formObj.elements[i].value = rffv;
					if ( (rffv.length=0) || (rffv=='') || (rffv = null) ) {
						formObj.elements[i].focus();
						
						alert(langDic['Please enter a value.']);
						return false;
					}
				} else if (formObj.elements[i].type=='select-multiple') {
					var rffv = formObj.elements[i].value;
					rffv = rffv.replace(/[ ]/g,'');
					rffv = rffv.replace(/[*]/g,'');
					rffv = rffv.replace(/[%]/g,'');
					if ( (rffv.length=0) || (rffv=='') || (rffv = null) ) {
						formObj.elements[i].focus();
						alert(langDic['Please select a value.']);
						return false;
					}
				}

			} //if
		} //for
	} //rff
	return true;
} //validateFormSearch

function validateFormData( formObj ) {
	formObjE = formObj.elements["FirstName"];
	if ( fieldExistsRequiredEmpty(formObjE) ) {
		alert(langDic["Please type your first name."]) ;
		formObjE.focus() ;
		return false ;
	}

	if ( fieldExistsRequiredEmpty(formObj.LastName) ) {
		alert( langDic["Please type your last name."] ) ;
		formObj.LastName.focus() ;
		return false ;
	}

	if ( fieldExistsRequiredEmpty(formObj.Address1) ) {
		alert( langDic["Please type your street address."] ) ;
		formObj.Address1.focus() ;
		return false ;
	}

	if ( fieldExistsRequiredEmpty(formObj.City) ) {
		alert( langDic["Please specify city."] ) ;
		formObj.City.focus() ;
		return false ;
	}

	if ( fieldExistsRequiredEmpty(formObj.Province) ) {
		alert( langDic["Please specify province / state / district."] ) ;
		formObj.Province.focus() ;
		return false ;
	}

	if ( fieldExistsRequiredEmpty(formObj.PostalCode) ) {
		alert( langDic["Please type your postal / zip code."] ) ;
		formObj.PostalCode.focus() ;
		return false ;
	}

	if ( fieldExistsRequiredEmpty(formObj.Country) ) {
		alert( langDic["Please specify country."] ) ;
		formObj.Country.focus() ;
		return false ;
	}

	if ( fieldExistsRequiredEmpty(formObj.HomePhoneNumber) ) {
		alert( langDic["Please type your home phone number."] ) ;
		formObj.HomePhoneNumber.focus() ;
		return false ;
	}
	
	if ( fieldExistsRequiredEmpty(formObj.BusinessPhoneNumber) ) {
		alert( langDic["Please type your business phone number."] ) ;
		formObj.BusinessPhoneNumber.focus() ;
		return false ;
	}
	if ( fieldExistsRequiredEmpty(formObj.CellPhoneNumber) ) {
		alert( langDic["Please type your mobile phone number."] ) ;
		formObj.CellPhoneNumber.focus() ;
		return false ;
	}
	
	if ( fieldExistsRequiredEmpty(formObj.HomePhoneNumber) && fieldExistsRequiredEmpty(formObj.CellPhoneNumber)) {
		alert(langDic["Please type either your home or mobile phone number."]);
		formObj.HomePhoneNumber.focus();
		return false;
	}

	if (!EmailAddressUnqiueChecker_TF) {
		alert(langDic["E-Mail address is invalid. Please type a valid e-mail address."]) ;
		formObj.EMailAddress.focus() ;
		return false ;
	}
	if ( fieldExistsRequiredEmpty(formObj.EMailAddress) ) {
		alert( langDic["Please type your e-mail address."] ) ;
		formObj.EMailAddress.focus() ;
		return false ;
	} else if ( fieldExists(formObj.EMailAddress) ) {if ( !emailAddressValid(formObj.EMailAddress.value) ) {
		alert( langDic["E-Mail address is invalid. Please type a valid e-mail address."] ) ;
		formObj.EMailAddress.focus() ;
		return false ;
	} }

	if ( fieldExistsRequiredEmpty(formObj.Origin2) ) {
		alert( langDic["Please specify how you found the site."] ) ;
		formObj.Origin2.focus() ;
		return false ;
	}

	
	//Education_Position_Required_Count
	//Education History #1
	var field_Suffix = '';
	for (var x = 1; x <= Education_Position_Required_Count; x++) {

		field_Suffix = '_' + x +'';
		formObjE = formObj.elements["Degree"+field_Suffix];
		if ((Education_Position_Required_Count==1) && (fieldExists(formObjE)==false)) {
			field_Suffix = '_';
		}

		formObjE = formObj.elements["Degree"+field_Suffix];
		if ( fieldExistsRequiredEmpty(formObjE) ) {
			alert( langDic["Please specify a degree type."] ) ;
			formObjE.focus() ;
			return false ;
		}

		formObjE = formObj.elements["DegreeName"+field_Suffix];
		if ( fieldExistsRequiredEmpty(formObjE) ) {
			alert( langDic["Please specify a degree name."] ) ;
			formObjE.focus() ;
			return false ;
		}

		formObjE = formObj.elements["Major"+field_Suffix];
		if ( fieldExistsRequiredEmpty(formObjE) ) {
			alert( langDic["Please specify a major."] ) ;
			formObjE.focus() ;
			return false ;
		}
		
		formObjE = formObj.elements["GPA"+field_Suffix];
		if ( fieldExistsRequiredEmpty(formObjE) ) {
			alert( langDic["Please specify your GPA."] ) ;
			formObjE.focus() ;
			return false ;
		}

		formObjE = formObj.elements["GradDate"+field_Suffix];
		if ( fieldExistsRequiredEmpty(formObjE) ) {
			alert( langDic["Please specify your graduation date."] ) ;
			formObjE.focus() ;
			return false ;
		}

		formObjE = formObj.elements["Institution"+field_Suffix];
		if ( fieldExistsRequiredEmpty(formObjE) ) {
			alert( langDic["Please specify a university."] ) ;
			formObjE.focus() ;
			return false ;
		}
	} // FOR - EDUCATION

	//Current Employment
	//Employment_Position_Required_Count
	var field_Suffix = '';
	for (var x = 1; x <= Employment_Position_Required_Count; x++) {

		if (x==1) {
			field_Suffix = ''
		} else {
			field_Suffix = '_' + (x-1) +'';
		}

		/*
		field_Suffix = '_' + x +'';
		formObjE = formObj.elements["Degree"+field_Suffix];
		if ((Education_Position_Required_Count==1) && (fieldExists(formObjE)==false)) {
			field_Suffix = '_';
		}
		*/

		
		formObjE = formObj.elements["StartDateMonth"+field_Suffix];
		if ( fieldExistsRequired(formObjE) ) {
			if (fieldExistsRequiredEmpty(formObjE)) {
				alert( langDic["Please specify a month for your most recent position."]+" {StartDateMonth"+field_Suffix+"}" ) ;
				formObjE.focus() ;
				return false ;
			}
		}
		formObjE = formObj.elements["StartEmpYear"+field_Suffix];
		if ( fieldExistsRequired(formObjE) ){
			if (fieldExistsRequiredEmpty(formObjE)) {
				alert( langDic["Please specify a year for your most recent position."] ) ;
				formObjE.focus() ;
				return false ;
			}
		} else {
			formObjE = formObj.elements["StartEmpYear"+field_Suffix];
			if ( (fieldIsEmpty(formObjE)) && (fieldIsEmpty(formObj.elements["StartDateMonth"+field_Suffix])) ) {
				//Do nothing
			} else {
				if ( fieldExists(formObjE) ) {
					if (formObjE.value < 1900 || formObj.elements["StartEmpYear"].value > 2100){
						alert(langDic["Employment Start Date : Invalid date range."]);
						formObjE.focus();
						return false;
					}

					formObjE = formObj.elements["StartDate"+field_Suffix];
					if ( fieldExists(formObjE) ) {
					formObjE.value = formObj.elements["StartDateMonth"+field_Suffix].value + "/" +
						formObj.elements["StartDateDay"+field_Suffix].value + "/" + formObj.elements["StartEmpYear"+field_Suffix].value ;
					}
				}
			}
		}

		formObjE = formObj.elements["EndEmpYear"+field_Suffix];
		if ( fieldExistsRequired(formObjE) ) {
			if (formObjE.value < 1900 || formObjE.value > 2100){
				alert(langDic["Employment End Date : Invalid date range."]);
				formObjE.focus();
				return false;
			}
			//Check for endate
			formObjE = formObj.elements["EndDate"+field_Suffix];
			if ( fieldExists(formObjE) ) {
				if (formObj.elements["EndDateMonth"+field_Suffix].value == "" || formObj.elements["EndEmpYear"+field_Suffix].value == "") {
					formObjE.value = "";
				} else {
					formObjE.value = formObj.elements["EndDateMonth"+field_Suffix].value + "/" + formObj.elements["EndDateDay"+field_Suffix].value + "/" + formObj.elements["EndEmpYear"+field_Suffix].value;
				}
			}
		}

		formObjE = formObj.elements["PositionTitle"+field_Suffix];
		if ( fieldExistsRequiredEmpty(formObjE) ) {
			alert( langDic["Please specify a position title for your current position."] ) ;
			formObjE.focus() ;
			return false;
		}

		formObjE = formObj.elements["CompanyName"+field_Suffix];
		if ( fieldExistsRequiredEmpty(formObjE) ) {
			alert( langDic["Please specify a company name for your current position."] ) ;
			formObjE.focus() ;
			return false ;
		}

		formObjE = formObj.elements["RoleCode1"+field_Suffix];
		if ( fieldExistsRequiredEmpty(formObjE) ) {
			alert( langDic["Please specify a Job Function."] ) ;
			formObjE.focus() ;
			return false ;
		}
		
		formObjE = formObj.elements["Salary"+field_Suffix];
		if ( fieldExistsRequiredEmpty(formObjE) ) {
			alert( langDic["Please specify the Salary for the Position."] ) ;
			formObjE.focus() ;
			return false ;
		}
		formObjE = formObj.elements["PayRate"+field_Suffix];
		if ( fieldExistsRequiredEmpty(formObjE) ) {
			alert( langDic["Please specify the Pay Rate for the Position."] ) ;
			formObjE.focus() ;
			return false ;
		}
		formObjE = formObj.elements["Bonus"+field_Suffix];
		if ( fieldExistsRequiredEmpty(formObjE) ) {
			alert( langDic["Please specify the Bonus for the Position."] ) ;
			formObjE.focus() ;
			return false ;
		}
		formObjE = formObj.elements["BonusHigh"+field_Suffix];
		if ( fieldExistsRequiredEmpty(formObjE) ) {
			alert( langDic["Please specify the Maximum Bonus for the Position."] ) ;
			formObjE.focus() ;
			return false ;
		}
		formObjE = formObj.elements["TotalCompensation"+field_Suffix];
		if ( fieldExistsRequiredEmpty(formObjE) ) {
			alert( langDic["Please specify the Total Compensation for the Position."] ) ;
			formObjE.focus() ;
			return false ;
		}
		formObjE = formObj.elements["TotalCompHigh"+field_Suffix];
		if ( fieldExistsRequiredEmpty(formObjE) ) {
			alert( langDic["Please specify the Maximum Total Compensation for the Position."] ) ;
			formObjE.focus() ;
			return false ;
		}

	} //FOR - EMPLOYMENT

	if ( fieldExistsRequiredEmpty(formObj.ResumeDoc) ) {
		alert( langDic["Please provide a resume for upload to our site."] ) ;
		formObj.ResumeDoc.focus() ;
		return false ;
	} else {
		if ( (fieldExists(formObj.ResumeDoc)) && (fieldIsEmpty(formObj.ResumeDoc)==false) ) {
			if ( !resumeValid(formObj, formObj.ResumeDoc.value) ) {
				alert( resumeNotValidErrorMessage(formObj) );
				formObj.ResumeDoc.focus() ;
				return false ;
			}
		}
	}

	// Username - Passowrd
	formObjE = formObj.elements["LoginName"];
	if (formObjE!=undefined) {
		if ( fieldExistsRequiredEmpty(formObjE) ) {
			alert( langDic["Please type the Login Name to use to update your information."] ) ;
			formObjE.focus() ;
			return false ;
		}
	}
	formObjE1 = formObj.elements["Password"];
	if (formObjE1!=undefined) {
		if ( fieldExistsRequiredEmpty(formObjE1) ) {
			alert( langDic["Please type the Password to use to update your information."] ) ;
			formObjE1.focus() ;
			return false ;
		}
		if (minPasswordStrength>=0 && minPasswordStrength>getPasswordStrength( formObjE1.value ) ) {
			alert( langDic["The password provided is not strong enough.  Please add numbers and other non-alphabetical characters like !."] ) ;
			formObjE1.focus() ;
			return false ;
		}
		formObjE2 = formObj.elements["Password2"];
		if ( fieldExistsRequiredEmpty(formObjE2) ) {
			alert( langDic["Please re-type the Password to use to update your information."] ) ;
			formObjE2.focus() ;
			return false ;
		}
		if ( fieldExists(formObjE1) && fieldExists(formObjE2) ) {
			if (formObjE1.value!=formObjE2.value) {
				alert( langDic["Please verify that both Password values are identical."] ) ;
				formObjE2.focus();
				return false ;
			}
		}
	}
	if (fieldExists(formObj.waiver)) {
		if ( !formObj.waiver.checked ) {
			alert(langDic["This application will not be submitted unless you certify that you have read and understand all matters discussed in the Privacy Policy and User Terms and Conditions Agreement."] );
			return false;
		}
	}
	return true ;
}

function resumeValid(formObj, sResumeFileSpec ) {
	var  iExtensionPos = sResumeFileSpec.lastIndexOf( "." ) ;
	if ( iExtensionPos == -1 )
		return false ;

	var sExtension = new String() ;
	sExtension = sResumeFileSpec.substring(iExtensionPos, sResumeFileSpec.length + 1).toLowerCase() ;
	sValidExtensions = ".doc.docx.txt.rtf.pdf.htm.html.";
	if ( fieldExists( formObj.elements["Resume_FileExt_Type"]) ) {
		var resumeFileExtType = formObj.elements["Resume_FileExt_Type"].value;
		if (resumeFileExtType=="MSDOC")
			sValidExtensions = ".doc.docx.";
		else if (resumeFileExtType=="PDF")
			sValidExtensions = ".pdf.";
		else if (resumeFileExtType=="MSDOCPDF")
			sValidExtensions = ".doc.docx.txt.rtf.pdf.";
	}
	var resumeFileExtTF = ((sValidExtensions.indexOf(sExtension+"."))>=0);
	//if (!resumeFileExtTF) {
	//	alert('sValidExtensions:= '+sValidExtensions+' :: sExtension:= '+sExtension+'! ['+sValidExtensions.indexOf(sExtension+".")+']');
	//}
	return resumeFileExtTF;
}

function resumeNotValidErrorMessage(formObj) {
	resumeErrorStr = langDic["We only support resumes of the following format:"]+" .doc, .txt, .pdf, .htm, .html and .rtf.";
	if ( fieldExists( formObj.elements["Resume_FileExt_Type"]) ) {
		var resumeFileExtType = formObj.elements["Resume_FileExt_Type"].value;
		if (resumeFileExtType=="MSDOC")
			resumeErrorStr = langDic["We only support resumes of the following format:"]+" .doc.";
		else if (resumeFileExtType=="PDF")
			resumeErrorStr = langDic["We only support resumes of the following format:"]+" .pdf.";
		else if (resumeFileExtType=="MSDOCPDF")
			resumeErrorStr = langDic["We only support resumes of the following format:"]+" .doc, .txt, .rtf, .pdf";
	}
	return resumeErrorStr;
}


function onCheckNum(o,theMin, theMax) {
	if(isNaN(o.value)){
		alert(langDic["Please enter a numeric value."]); 
		o.value=""; 
		return false;
	}else if (parseFloat(o.value)<theMin || parseFloat(o.value)>theMax){
		alert(langDic["The value given is out of range of"]+" "+theMin+" - "+theMax+"!");
		if (parseFloat(o.value)<=theMin) o.value = theMin;
		if (parseFloat(o.value)>=theMax) o.value = theMax;
		return false;
	}
	var chkboxname = o.name.replace('SQ3','SQ1')+'';
	o.form.elements[chkboxname].checked = true;
	return true;
}


// Declaring valid date character, minimum year and maximum year
var dtCh= "/";
var minYear=1900;
var maxYear=2100;

function isInteger(s){
	var i;
	for (i = 0; i < s.length; i++){
		// Check that current character is number.
		var c = s.charAt(i);
		if (((c < "0") || (c > "9"))) return false;
	}
	// All characters are numbers.
} //function isInteger

function stripCharsInBag(s, bag){
	var i;
	var returnString = "";
	// Search through string's characters one by one.
	// If character is not in bag, append to returnString.
	for (i = 0; i < s.length; i++){
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1) returnString += c;
	}
	return returnString;
} //function stripCharsInBag

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
	// EXCEPT for centurial years which are not also divisible by 400.
	return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}

function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
	}
	return this
} //function DaysArray

function isDate(dtStr){
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strMonth=dtStr.substring(0,pos1)
	var strDay=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	mymonth=parseInt(strMonth)
	myday=parseInt(strDay)
	myyear=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		alert(langDic["The date format should be :"]+" mm/dd/yyyy")
		return false
	}
	if (strMonth.length<1 || mymonth<1 || mymonth>12){
		alert(langDic["Please enter a valid month."])
		return false
	}
	if (strDay.length<1 || myday<1 || myday>31 || (mymonth==2 && myday>daysInFebruary(year)) || myday > daysInMonth[strMonth]){
		alert(langDic["Please enter a valid day."])
		return false
	}
	if (strYear.length != 4 || myyear==0 || myyear<minYear || myyear>maxYear){
		alert(langDic["Please enter a valid 4 digit year between"]+" "+minYear+" "+langDic["and"]+" "+maxYear+".")
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert(langDic["Please enter a valid date."])
		return false
	}
	return true
} //function isDate


function myForbidden() {
	document.applicationForm.StartDate.disabled=true;
	document.applicationForm.EndDate.disabled=true;
	document.applicationForm.FirstName.focus();
return true;
} //function myForbidden


/* ************************************************************
Created: 20060120Author:  Steve Moitozo <god at zilla dot us> -- geekwisdom.comDescription: This is a quick and dirty password quality meter written in JavaScript so that the password does not pass over the network.License: MIT License (see below)Modified: 20060620 - added MIT LicenseModified: 20061111 - corrected regex for letters and numbersThanks to Zack Smith -- zacksmithdesign.com---------------------------------------------------------------Copyright (c) 2006 Steve Moitozo <god at zilla dot us>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------
************************************************************ */
function updateStrength(objP) {
	var pValue = 0;
	if (objP.value!=undefined) { 
		pValue = getPasswordStrength(objP.value); 
		//Now look up common field values
	}
	
	var pWidth = (100/40)*pValue;
	var objS = document.getElementById('psStrength'+objP.name+'');
	if (pWidth>= 100) pWidth = 100;
	objS.style.width = pWidth+'px';
	
	var objS = document.getElementById('psPercentValue'+objP.name+'');
	if (objS!=undefined) {
		objS.value = Math.round((pValue/50) * 100);
	}
	var objS = document.getElementById('psNumberValue'+objP.name+'');
	if (objS!=undefined) {
		if (pValue>50) pValue = 50;
		objS.value = pValue;
	}
	var objS = document.getElementById('psTextLabelValue'+objP.name+'');
	if (objS!=undefined) {
		objS.value = strVerdict;
	}
}
var intScore   = 0
var strVerdict = "weak"	
function getPasswordStrength(passwd){
	var strLog     = ""
	intScore   = 0
	strVerdict = "weak"	
	
	// PASSWORD LENGTH
	if (passwd.length==0)                         // length 4 or less
	{
	
	}
	else if (passwd.length<5)                         // length 4 or less
	{
		intScore = (intScore+3)
		strLog   = strLog + "3 points for length (" + passwd.length + ")\n"
	}
	else if (passwd.length>4 && passwd.length<8) // length between 5 and 7
	{
		intScore = (intScore+6)
		strLog   = strLog + "6 points for length (" + passwd.length + ")\n"
	}
	else if (passwd.length>7 && passwd.length<16)// length between 8 and 15
	{
		intScore = (intScore+12)
		strLog   = strLog + "12 points for length (" + passwd.length + ")\n"
	}
	else if (passwd.length>15)                    // length 16 or more
	{
		intScore = (intScore+18)
		strLog   = strLog + "18 point for length (" + passwd.length + ")\n"
	}
	
	
	 // LETTERS
	if (passwd.match(/[a-z]/)) // [verified] at least one lower case letter
	{
	intScore = (intScore+1)
	} if (passwd.match(/[A-Z]/)) // [verified] at least one upper case letter
	{
	intScore = (intScore+5)
	} // NUMBERS
	if (passwd.match(/\d+/)) // [verified] at least one number
	{
	intScore = (intScore+5)
	} if (passwd.match(/(\d.*\d.*\d)/)) // [verified] at least three numbers
	{
	intScore = (intScore+5)
	} // SPECIAL CHAR
	if (passwd.match(/[!,@#$%^&*?_~]/)) // [verified] at least one special character
	{
	intScore = (intScore+5)
	} if (passwd.match(/([!,@#$%^&*?_~].*[!,@#$%^&*?_~])/)) // [verified] at least two special characters
	{
	intScore = (intScore+5)
	} // COMBOS
	if (passwd.match(/[a-z]/) && passwd.match(/[A-Z]/)) // [verified] both upper and lower case
	{
	intScore = (intScore+2)
	} if (passwd.match(/\d/) && passwd.match(/\D/)) // [verified] both letters and numbers
	{
	intScore = (intScore+2)
	} // [Verified] Upper Letters, Lower Letters, numbers and special characters
	if (passwd.match(/[a-z]/) && passwd.match(/[A-Z]/) && passwd.match(/\d/) && passwd.match(/[!,@#$%^&*?_~]/))
	{
	intScore = (intScore+2)
	}

	if (intScore>0 && checkFieldContent!=undefined) {
		if (checkFields='Y' && checkFieldContent!='') {
			fcA = checkFieldContent.split(',');
			var fcC = fcA.length;
			var fcWords = new Array();
			var fcWordsC = -1;
			for (var A = 0; A < fcC; A++) { 
				var objW = document.getElementById(fcA[A]);
				if (objW!=undefined) {
					var objWv = objW.value;
					if (objWv!='' && objWv!=null) {
						objWv = objWv.toLowerCase();
						fcWordsC = fcWordsC + 1;
						fcWords[fcWordsC] = '';
						for (var W = 0; W < objWv.length; W++) {
							if ((objWv[W]>='a' && objWv[W]<='z') || (objWv[W]>='0' && objWv[W]<='9')) {
								fcWords[fcWordsC] = fcWords[fcWordsC]+objWv[W];
							} else {
								fcWordsC = fcWordsC + 1;
								fcWords[fcWordsC] = '';
							} //if
						} //for
					} // null
				} // undefined
			} //loop
			var objPv = passwd;
			var objPv = objPv.toLowerCase();
			
			for (var W = 0; W < fcWords.length; W++) {
				if (objPv.indexOf(fcWords[W])>=0) {
					intScore = intScore - fcWords[W].length;
					if (objPv.indexOf(fcWords[W])==0) intScore = intScore - fcWords[W].length;
					if (objPv==fcWords[W]) intScore = 0;
					if (intScore<0) intScore = 0;
				}
			}
		}
	}
	
	if(intScore < 10)
	{
	   strVerdict = langDic["very weak"];
	}
	else if (intScore > 11 && intScore <= 17)
	{
	   strVerdict = langDic["weak"];
	}
	else if (intScore > 18 && intScore <= 25)
	{
	   strVerdict = langDic["mediocre"];
	}
	else if (intScore > 26 && intScore <= 34)
	{
	   strVerdict = langDic["strong"];
	}
	else if (intScore > 34 && intScore <= 45)
	{
	   strVerdict = langDic["stronger"];
	}
	else
	{
	   strVerdict = langDic["very strong"];
	}
	return intScore;
}	

function showNextPanelClick(panelType,panelID) {
	if (panelType=='edu') {
		var btn = document.getElementById('EducationShow'+panelID+'');
		btn.style.display='none';
		var pnl = document.getElementById('educationpanel_'+(panelID+1)+'');
		pnl.style.display='inline';
	} else if (panelType=='emp') {
		var btn = document.getElementById('EmploymentShow'+panelID+'');
		btn.style.display='none';
		var pnl = document.getElementById('employmentpanel_'+(panelID+1)+'');
		pnl.style.display='inline';
	}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}


var EmailAddressUnqiueChecker_TF = true;
var EmailAddressUnqiue_RT = "";
var EmailAddressUnqiue_AN = "";
var EmailAddressUnqiue_WI = -1;
function EmailAddressUnqiueChecker() {
	var edtEM = document.getElementById('EMailAddress');
	if (edtEM==undefined) return false;
	if (fieldIsEmpty(edtEM)) return false;
	if  (document.getElementById('ajaxEmailAddressResults')!=undefined) return false;
	
	var divResult = document.createElement('div');
	divResult.setAttribute('id','ajaxEmailAddressResults');
	divResult.innerHTML = '';
	edtEM.parentNode.appendChild(divResult);
	if (document.addEventListener) {
		edtEM.addEventListener( 'change', ajaxEmailAddressUnqiueChecker, false );
		edtEM.addEventListener( 'blur', ajaxEmailAddressUnqiueChecker, false );
	} else {
		edtEM.attachEvent( 'onchange', ajaxEmailAddressUnqiueChecker, false );
		edtEM.attachEvent( 'onblur', ajaxEmailAddressUnqiueChecker, false );
	}
}
function ajaxEmailAddressUnqiueChecker() {
	//execute the AJAX code here
	e_url = "/_includes/client/_ajaxrequest.asp"
	e_form_params = "ajaxrequesttype="+EmailAddressUnqiue_RT+""+
		"&an="+EmailAddressUnqiue_AN+""+
		"&wi="+EmailAddressUnqiue_WI+""
	;
	var e_obj = document.getElementById('EMailAddress');
	if (e_obj!=undefined) e_form_params = e_form_params+'&ApplicationEmailAddress='+e_obj.value;
	
	var e_obj = document.getElementById('txtrq__LoginName');
	if (e_obj!=undefined) e_form_params = e_form_params+'&ApplicationLoginName='+e_obj.value;
	var e_obj = document.getElementById('entxt__LoginName');
	if (e_obj!=undefined) e_form_params = e_form_params+'&ApplicationLoginName='+e_obj.value;
	YAHOO.util.Connect.asyncRequest('POST', e_url, cbExistingEmailAddress,e_form_params);
	if(YAHOO.util.Connect.isCallInProgress(cbExistingEmailAddress)) {
		YAHOO.util.Connect.abort(cbExistingEmailAddress);
	}
	return false;
}

var cbExistingEmailAddress = { 
	success: ajaxEmailAddressUnqiue_success, 
	failure: ajaxEmailAddressUnqiue_failure, 
	argument:['wrkflw','web'],
	timeout: 50000
} 

function ajaxEmailAddressUnqiue_success(o) {
	if (o.responseText=='!') {
		ajaxEmailAddressUnqiue_failure(o);
		return false;
	}
	var divEmail = document.getElementById('ajaxEmailAddressResults');
	if (divEmail==undefined) return false;
	if (o.responseText=='OK') {
		divEmail.innerHTML='';
		EmailAddressUnqiueChecker_TF = true;
	} else {
		divEmail.innerHTML= o.responseText;
		EmailAddressUnqiueChecker_TF = false;
	}
}
function ajaxEmailAddressUnqiue_failure(o) { alert(langDic['Error in checking for duplicate email address.']); }
