///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
//THIS CONTAINS COMMON APPLICATION LEVEL JAVASCRIPTS
///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////

//testing teting ttinsdf

///////////////////////////////////////////////////////////////////////////////////////////////
// SHORT ALERT 'a'
// DESC: JUST 'a', INSTEAD OF SPELLING OUT ALERT ALL THE TIME
// I SUPPOSE THIS NEEDS TO BE IN BOTH GLOBAL AND SPECIFIC NAME SPACE, IT WONT, JUST MIGRATE
function a(sz_Alert){alert(sz_Alert); }
//a = CMS.Gen.a; // this should work though, right? just a pointer
///////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////
function $$(){ // double dollar buddy
    try {
        return Selector.findChildElements(document, $A(arguments));
    } 
    catch (err) {
		a(err);
        //CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/$$');
    }
}
///////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////
// AUTHOUR: WBQ
// CREATED: 2006-12-14
// CALLED BY BODY- ONLOAD/UNLOAD TO CLEAR FORM VALUES TO INTIALLY SET VALUES (BY CODE). MOZILLA TENDS TO KEEP VALUES, EVEN WHEN WE DON'T WANT IT TO
function fj_clearForms(){
    try {
        var i;
        for (i = 0; (i < document.forms.length); i++) {
            document.forms[i].reset();
        }
    } 
    catch (err) {
		a(err);
        //CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/clearForms');
    }
}
///////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////
function fj_changeInvalidChars(elementID, str){
    try {
        if (str != 'undefined') {
            sReplace = str.replace(/&/gi, "and");
            $(elementID).value = sReplace;
        }
        
    } 
    catch (err) {
		a(err);
        //CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/changeInvalidChars');
    }
}
///////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////
// AUTHOUR: WBQ
// CREATED: 2003
// THESE THREE FUNCTIONS CHANGE CELL COLOR FOR FORM FIELD ERROR CHECKING, USER FEEDBACK -WBQ
function CC(sz_CellName, sz_Color){
    try {
		if(sz_Color) sz_Color = sz_Color; 
		else sz_Color = 'pink'; // default
        $(sz_CellName).style.backgroundColor = sz_Color;
        $(sz_CellName).focus();
    } 
    catch (err) {
		a(err);
        //CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/CC');
    }
}

// CHANGES THE CELL BACK TO ORIGINAL COLOR
function CB(sz_CellName){
    try {
        $(sz_CellName).style.backgroundColor = '';
    } 
    catch (err) {
		a(err);
        //CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/CB');
    }
}
// CREATES 'DIRTY' CELL (CHANGES IT TO BLUE-ISH COLOR ON CHANGE
function CD(sz_CellName){
    try {
		CC(sz_CellName, '#dfeaf4'); // LETS SEE IF THAT WORKS
        //$(sz_CellName).style.backgroundColor = '#dfeaf4';
    } 
    catch (err) {
		a(err);
        //CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/CD');
    }
}
///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////
function fj_FormfieldToList(field, type){
    try {
        var result = "";
        var list = "";
        
        if (field == "undefined") 
            return "";
        if (field.length == null) 
            return field.value;
        
        if (type == 'checkbox') {
            for (var i = 0; i < field.length; i++) {
                if (field[i].checked) 
                    list += field[i].value + ",";
            }
        }
        else {
            for (var i = 0; i < field.length; i++) {
                if (field[i].value != "") 
                    list += field[i].value + ",";
            }
        }
        result = list.replace(/,$/, "");
        return result;
    } 
    catch (err) {
		a(err);
        //CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/formfieldToList');
    }
}


///////////////////////////////////////////////////////////////////////////////////////////////
// PASSWORD CHECK EMAIL VALIDITY
// AUTHOUR: WBQ
// UPDATED: 2006-01-07
// DESCRIPTION: A standard email checker, makes sure it is abc@abc.net or abc@abc.uk format more or less
function fj_IsValidEmail(email){
    try {
        if (/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(email)) {
            //		alert("Thats a good one!");
            return true;
        } //else	//		alert("Thats a bad one!");
        return false;
    } 
    catch (err) {
		a(err);
        //CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/emailCheck');
    }
}

///////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////
// CHECK ZIP CODE VALIDITY
// DESCRIPTION: A standard zip code checker - accounts for 5 or 5+4 zips
function fj_IsValidZip(vZip){
    try {
        //alert(vZip);
        var ValidChars = "0123456789-";
        var hyphencount = 0;
        
        //IF THE ZIP IS NOT 5 OR 10 CHARACTERS
        if (vZip.length != 5 && vZip.length != 10) {
            return false;
        }
        //CHECK TO SEE IF THE ZIP IS USING NUMBERS AND ONE HYPHEN ONLY
        for (var i = 0; i < vZip.length; i++) {
            temp = "" + vZip.substring(i, i + 1);
            if (temp == "-") 
                hyphencount++;
            if (ValidChars.indexOf(temp) == "-1") {
                return false;
            }
            //CHECK FOR ONLY ONE HYPHEN
            if ((hyphencount > 1) || ((vZip.length == 10) && "" + vZip.charAt(5) != "-")) {
                return false;
            }
        }
        return true;
    } 
    catch (err) {
		a(err);
        //CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/validateZIP');
    }
}

///////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////
// CHECK IF A VALUE IS A VALID 9 DIGIT ROUTING NUMBER
// DESCRIPTION: Checks if a value is a valid routing number. Returns true or false.
// this could use the mod10 algorythm as well.... 
function fj_IsValidABARoutingNumber(sNum){
    try {
        var ValidChars = "0123456789";
        var Char;
        //IF THE ROUTING NUMBER IS NOT 9 CHARACTERS
        if (sNum.length != 9) {
            return false;
        }
        for (i = 0; i < sNum.length; i++) {
            Char = sNum.charAt(i);
            if (ValidChars.indexOf(Char) == -1) {
                return false;
            }
        }
        return true;
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/isRoutingNum');
	   a(err);
    }
}

// maybe the one above can call this one, then it is cohesive and modular
// Run through each digit and calculate the total. 
function fj_ValidateABARoutingNumber(t) {
	var n = 0; 
	for (i = 0; i < t.length; i += 3) {
		 n += parseInt(t.charAt(i), 10) * 3 + parseInt(t.charAt(i + 1), 10) * 7 + parseInt(t.charAt(i + 2), 10); 
	 } 
	 
	 // If the resulting sum is an even multiple of ten (but not zero), // the aba routing number is good. 
	 
	 if (n != 0 && n % 10 == 0)
	 	return true; 
	 else return false; 
 }



///////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////
// CHECK IF A VALUE IS CURRENCY
// AUTHOUR: WBQ
// UPDATED: 2006-01-07
// DESCRIPTION: Checks if a value is a valid currency unit or number. Returns true or false.
function fj_IsValidCurrency(sText, c_Symbol){
    try {
		var ValidChars;
        var isValid = true;
        var Char;

		if(c_Symbol){
			ValidChars = "0123456789.," + c_Symbol; // append whatever currency symbol they pass in 
		} 
		else {
			ValidChars = "0123456789.$,"; // default to us currency	
		}
        for (i = 0; i < sText.length && isGood == true; i++) {
            Char = sText.charAt(i);
            if (ValidChars.indexOf(Char) == -1) {
                isValid = false; 
				break;
            }
        }
        return isValid; //= false or true
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/isCurrency');
	   a(err);
    }
}
///////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////
// CHECK IF A VALUE IS AN INTEGER
// AUTHOUR: WBQ
// UPDATED: 2006-01-07
// DESCRIPTION: Checks if a value is a Integer, no decimal allowed. Returns true or false.
function fj_isValidInteger(szText){
    try {
        var ValidChars = "0123456789";
        var IsNumber = true;
        var Char;
        for (i = 0; i < szText.length && IsNumber == true; i++) {
            Char = szText.charAt(i);
            if (ValidChars.indexOf(Char) == -1) {
                IsNumber = false;
            }
        }
        return IsNumber; //= false or true
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/isInteger');
	   a(err);
    }
}

///////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////
// CHECK IF A VALUE IS AN NUMBER, DECIMAL ALLOWED
// AUTHOUR: WBQ
// UPDATED: 2006-01-07
// DESCRIPTION: Checks if a value is a number or float. Returns true or false.
function fj_IsValidNumber(sText){
    try {
        var ValidChars = "0123456789.";
        var IsNumber = true;
        var Char;
        for (i = 0; i < sText.length && IsNumber == true; i++) {
            Char = sText.charAt(i);
            if (ValidChars.indexOf(Char) == -1) {
                IsNumber = false;
            }
        }
        return IsNumber; //= false or true
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/isNumber');
	   a(err);
    }
}


///////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////
// stripDollarSign(string)
// AUTHOUR: WBQ
// UPDATED: 2006-01-07
// DESCRIPTION: Strips out dollar signs and commas and returns the string
function fj_StripDollarSign(sText){
    try {
        re = /\$/gi; //pull out dollar signs
        var string = sText;
        newVal = string.replace(re, "");
        re = /,/gi; //pull out commas
        newVal = newVal.replace(re, "");
        return newVal;
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/stripDollarSign');
    }
}

///////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////
// checkRadioValues(object)
// AUTHOUR: WBQ
// UPDATED: 2006-08-18
// DESCRIPTION: CHECKS RADIO BUTTON ELEMENTS AND RETURNS THE CHECKED VALUE OR NULL
function fj_CheckRadioValues(f){
    try {
        // CHECK RADIO BUTTONS
        var theValue = null;
        for (i = 0; i < f.length; i++) {
            if (f[i].checked) {
                theValue = f[i].value;
                //alert(theValue);
                break;
            }
        }
        return theValue;
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/checkRadioValues');
    }
}

///////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////
// The famous $ buddy, modifed as needed
// MODAUTHOUR: WBQ
// CREATED: 2007-04-25
// DESCRIPTION: CHECKS WHATEVER YOU PASS IN (OBJECT OR LITERAL) AND RETURNS THE ELEMENT ID...
// YOU CAN ALSO PASS MULTIPLE ELEMENTS AND GET THEM BACK AS WELL

function $(){
    try {
        var elements = new Array();
        for (var i = 0; i < arguments.length; i++) {
            var element = arguments[i];
            if (typeof element == 'string') 
                element = document.getElementById(element);
            if (arguments.length == 1) 
                return element;
            elements.push(element);
        }
        return elements;
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/$');
    }
}

///////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////
// toggleEL 
// MODAUTHOUR: WBQ
// CREATED: 2007-04-25
// DESCRIPTION: - pass in an element object or id string and it flips its visibility, dependent on the Dollar Buddy

function toggleEl(obj){
        var el = $(obj);
        el.style.display = (el.style.display != 'none' ? 'none' : 'block');
}

///////////////////////////////////////////////////////////////////////////////////////////////	


///////////////////////////////////////////////////////////////////////////////////////////////
// hideEL 
// MODAUTHOUR: WBQ
// CREATED: 2007-04-25
// DESCRIPTION: Pass in a list of elements to hide, all in one function! Cool!
function hideEl(){
    try {
        for (var i = 0; i < arguments.length; i++) {
            $(arguments[i]).style.display = 'none';
        }
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/hideEl');
    }
}

///////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////
// showEL 
// MODAUTHOUR: WBQ
// CREATED: 2007-04-25
// DESCRIPTION: Pass in a list of elements to show, all in one function! Cool!
function showEl(){
    try {
        for (var i = 0; i < arguments.length; i++) {
            $(arguments[i]).style.display = 'block';
        }
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/showEl');
    }
}

///////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////
// getSelectedElements
// MODAUTHOUR: WBQ
// CREATED: 2007-06-29
// DESCRIPTION: LOOPS ACROSS SELECT ELEMENT AND RETURNS SELECTED VALUES
// RETURNS FOR BOTH MULTI OR SINGLE EVEN IF SINGLE-SELECT HAS NO OFFICIAL 'SELECTION'
function getSelectedElements(elem){
    try {
        var i = 0;
        var q = ',';
        var elemList = '';
        var elem = $(elem);
        
        for (var i = 0; i < elem.options.length; i++) {
            if (elem.options[i].selected) 
                elemList += (elem[i].value + ',');
        }
        if (elemList.length != 0) {
            elemList = listClean(elemList);
        }
        if (elemList.length == 0) 
            elemList = elem.value;//THIS CATCHES A VALUE IF IT IS NOT A MULTISELCT, AND NO SPECIFIC SELECT VALUE IS GIVEN, THE DISPLAYED VALUE WILL GO IN (ON SINGLE SELECT ONLY)
        return elemList;
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/getSelectedElements');
    }
}

///////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////
// listClean
// MODAUTHOUR: WBQ
// CREATED: 2007-06-29
// DESCRIPTION: REMOVES TRAILING DELIMITERS  IN A LIST
function listClean(list, del){
    try {
        var list = list; //required
        var del = (del == null) ? ',' : del;//set to comma if not passed in
        if (list.length != 0) {
            if (list.lastIndexOf(del) == list.length - 1) {//then the last char is the delimiter, strip it so we have a clean list
                list = list.substr(0, list.length - 1);
            }
        }
        return list;
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/listClean');
    }
}

///////////////////////////////////////////////////////////////////////////////////////////////






///////////////////////////////////////////////////////////////////////////////////////////////
// pass the element to collapse and the image to swap
function toggle(el, img, typ){
    try {
        var theImg = $(img); // || null;
        var theEle = $(el);
        if (typ == 1) {
            var minImg = '/_images/vista/layout/ns-collapse.gif';
            var maxImg = '/_images/vista/layout/ns-expand.gif';
        }
        else {
            var minImg = '/_images/gray/layout/ns-collapse.gif';
            var maxImg = '/_images/gray/layout/ns-expand.gif';
        }
        
        
        if (theEle.style.display == 'none') {
            theEle.style.display = 'block';
            /*if(theImg != null)*/
            theImg.src = minImg;
        }
        else 
            if (theEle.style.display == 'block') {
                theEle.style.display = 'none';
                /*if(theImg != null)*/
                theImg.src = maxImg;
            }
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/toggle');
    }
}

///////////////////////////////////////////////////////////////////////////////////////////////

// what is this function for? anyone? anyone? ANYONE? -wbq

function checkThisThingy(field){
    try {
        var i;
        if (eval(field[0].checked)) {
            for (i = 0; i < field.length; i++) 
                field[i].checked = true;
            LL(field);
            return "Uncheck All";
        }
        else {
            for (i = 0; i < field.length; i++) 
                field[i].checked = false;
            UU(field);
            return "Check All";
        }
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/check');
    }
}

function LL(field){
    field.disabled = true;
}

function UU(field){
    field.disabled = false;
}



// validation - mask fields
// 
//Example onBlur="currencymask(this);"
//
//start
function fj_CurrencyMask(t){
    try {
        var patt = /(\d*)\.{1}(\d{0,2})-/;
        var donepatt = /^(\d*)\.{1}(\d{2})$/;
        var str = t.value;
        var result;
        if (!str.match(donepatt)) {
            result = str.match(patt);
            if (result != null) {
                t.value = t.value.replace(/[^\d]/gi, '');
                str = result[1] + '.' + result[2];
                t.value = str;
            }
            else {
                if (t.value.match(/[^\d]/gi)) 
                    t.value = t.value.replace(/[^\d]/gi, '');
            }
        }
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/currencymask');
    }
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function fj_FormatCurrency(num){
    try {
        num = num.toString().replace(/\$|\,/g, '');
        if (isNaN(num)) 
            num = "0";
        sign = (num == (num = Math.abs(num)));
        num = Math.floor(num * 100 + 0.50000000001);
        cents = num % 100;
        num = Math.floor(num / 100).toString();
        if (cents < 10) 
            cents = "0" + cents;
        for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++) 
            num = num.substring(0, num.length - (4 * i + 3)) + ',' +
            num.substring(num.length - (4 * i + 3));
        return (((sign) ? '' : '-') + '$' + num + '.' + cents);
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/formatCurrency');
    }
}

///////////////////////////////////////////////////////////////////////////////////////////////

// DATE VALIDATE, CHECK THAT THE DATE IS WITH IN A SET RANGE, ALSO THAT THE DATE IS VALID

function fj_isValidDate(fld){
    try {
        field = $(fld);
        CB(fld);
        if (fld.value != '') {
            var RegExPattern = /^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;
            var errorMessage = 'Please enter valid date as month, day, and four digit year.\nYou may use a slash, hyphen or period to separate the values.\nThe date must be a real date. 2-30-2000 would not be accepted.\nFormat mm/dd/yyyy.';
            if ((fld.value.match(RegExPattern)) && (fld.value != '')) {
                //alert('Date is OK');
                CB(fld);
                return true;
            }
            else {
                alert(errorMessage);
                CC(fld);
                //alert('Date is BAD'); 
                return false;
            }
        }
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/validateDate');
    }
}


// END DATE VALIDATION
///////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////
// AUTHOR: SMG
// CREATED:   06/27/2007
// FORM VALIDATION, VALIDATE FORM ELEMENTS IF USER CLICKES THE SAVE BUTTON
// ARGUMENTS:
//  - FORM NAME 
//  - PATTERN1 TO SEARCH I.E. IF THE TARGET FORM ELEMENT IS CALLED mortgage1ORIGINATION, 'mortgage' WOULD BE THE PATTERN1
//  - TYPE TO VALIDATE I.E. 'date' (date is the only one defined so far)
//  - PATTERN2 ARRAY I.E. var patternArray = new Array('ORIGINATION','LASTPAYMENT','NEXTPAYMENT','FCDATE');
// MUST ADD THE FOLLOWING TO THE SAVE BUTTON CALL: if(validateAllForm('RESEARCH_PROPERTY', 'mortgage', 'date', patternArray) == true){ --- DO ANYTHING THAT NEEDS TO BE DONE, I.E. AJAX SAVE --- }else{}
// ADD CASE STATEMENTS IF NEEDED FOR EACH TYPE OF VALIDATION WITH VALIDATION CODE IN IT.

function fj_ValidateFullForm(formName, pattern1, type, pattern2){
    try {
        var formLength = $(formName).elements.length;
        //alert(formLength);
        
        var tempNum = 0;
        
        for (var valRBi = 0; valRBi < formLength; valRBi++) {
            var strTemp = '';
            var strTemp = $(formName).elements[valRBi].id;
            var strTempVal = $(formName).elements[valRBi].value;
            //search for every form element that starts with pattern1
            if (strTemp.match(pattern1)) {
                //----------------------------------------------
                //ADD FOR STATEMENTS AS NEEDED TO VALIDATE DIFFERENT TYPES OF FIELDS
                //----------------------------------------------
                switch (type) {
                    case 'date':
                        for (var valRBj = 0; valRBj < pattern2.length; valRBj++) {
                            if (strTemp.match(pattern2[valRBj])) {
                                //CALL VALIDATEDATE() IF STRING IS FOUND IN THE ID
                                if (strTempVal == '' || validateDate($(strTemp)) == true) {
                                //IF IT IS BLANK OR A GOOD ADDRESS DO NOTHING
                                }
                                else {
                                    //IF IT IS A BAD ADDRESS
                                    tempNum = tempNum + 1;
                                }
                            }
                        }
                        break;
                    case 'float':
                        for (var valRBj = 0; valRBj < pattern2.length; valRBj++) {
                            if (strTemp.match(pattern2[valRBj])) {
                                //CALL VALIDATEDATE() IF STRING IS FOUND IN THE ID
                                if (strTempVal == '' || isNumber($(strTemp).value) == true) {
                                //IF IT IS BLANK OR A GOOD NUMBER DO NOTHING
                                }
                                else {
                                    //IF IT IS A BAD ADDRESS
                                    alert('Please enter a valid number. Please do not include commas in dollar amounts.');
                                    CC($(strTemp));
                                    $(strTemp).focus();
                                    tempNum = tempNum + 1;
                                }
                            }
                        }
                        break;
                    case 'test':
                        alert('testing...');
                        break;
                }
            }
        }
        //IF ANY FIELD FAILS VALIDATION, RETURN A FALSE
        if (tempNum > 0) {
            //alert('fail');
            return false;
        }
        else {
            //alert('success');
            return true;
        }
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/validateAllForm');
	   a(err);
    }
}

// END FORM VALIDATION
///////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////
// PASS IN THE CELL 
function fj_PhoneMask(t){
    try {
        var patt1 = /(\d{3}).*(\d{3}).*(\d{4})/;
        var patt2 = /^\((\d{3})\).(\d{3})-(\d{4})$/;
        var str = t.value;
        var result;
        if (!str.match(patt2)) {
            result = str.match(patt1);
            if (result != null) {
                t.value = t.value.replace(/[^\d]/gi, '');
                str = result[1] + '.' + result[2] + '.' + result[3];
                t.value = str;
            }
            else {
                if (t.value.match(/[^\d]/gi)) 
                    t.value = t.value.replace(/[^\d]/gi, '');
            }
        }
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/phonemask');
	   a(err);
    }
}
///////////////////////////////////////////////////////////////////////////////////////////////



///////////////////////////////////////////////////////////////////////////////////////////////
function fj_isValidSSN(ssn){
    try {
        var matchArr = ssn.match(/^(\d{3})-?\d{2}-?\d{4}$/);
        var numDashes = ssn.split('-').length - 1;
        if (matchArr == null || numDashes == 1) {
            alert('Invalid SSN. Must be 9 digits or in the form xxx-xx-xxxx.');
            msg = "does not appear to be valid";
            
        }
        else 
            if (parseInt(matchArr[1], 10) == 0) {
                alert("Invalid SSN: SSN's can't start with 000.");
                msg = "does not appear to be valid";
            }
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/SSNValidation');
	   a(err);
    }
}
///////////////////////////////////////////////////////////////////////////////////////////////



///////////////////////////////////////////////////////////////////////////////////////////////
function fj_SSNMask(t){
    try {
        var patt = /(\d{3}).*(\d{2}).*(\d{4})/;
        var donepatt = /^(\d{3})-(\d{2})-(\d{4})$/;
        var str = t.value;
        var result;
        if (!str.match(donepatt)) {
            result = str.match(patt);
            if (result != null) {
                t.value = t.value.replace(/[^\d]/gi, '');
                str = result[1] + '-' + result[2] + '-' + result[3];
                t.value = str;
            }
            else {
                if (t.value.match(/[^\d]/gi)) 
                    t.value = t.value.replace(/[^\d]/gi, '');
                SSNValidation(t.value);
            }
        }
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/ssnmask');
	   a(err);
    }
}
///////////////////////////////////////////////////////////////////////////////////////////////



///////////////////////////////////////////////////////////////////////////////////////////////
function fj_InterestRateMask(t){
    try {
        var patt = /(\d*)\.{1}(\d{0,3})-/;
        var donepatt = /^(\d*)\.{1}(\d{3})$/;
        var str = t.value;
        var result;
        if (!str.match(donepatt)) {
            result = str.match(patt);
            if (result != null) {
                t.value = t.value.replace(/[^\d]/gi, '');
                str = result[1] + '.' + result[2];
                t.value = str;
            }
            else {
                if (t.value.match(/[^\d]/gi)) 
                    t.value = t.value.replace(/[^\d]/gi, '');
            }
        }
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/intratemask');
	   a(err);
    }
}

///////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////
function fj_NumberMask(fld, decSep, e){
	// not really sure what this one does anymore...
    try {
        var sep = 0;
        var key = '';
        var i = j = 0;
        var len = len2 = 0;
        var strCheck = '0123456789';
        var aux = aux2 = '';
        var whichCode = (window.Event) ? e.which : e.keyCode;
        if (whichCode == 13) 
            return true; // Enter
        if (whichCode == 8) 
            return true; // Delete (Bug fixed)
        key = String.fromCharCode(whichCode); // Get key value from key code
        if (strCheck.indexOf(key) == -1) 
            return false; // Not a valid key
        len = fld.value.length;
        for (i = 0; i < len; i++) 
            if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) 
                break;
        aux = '';
        for (; i < len; i++) 
            if (strCheck.indexOf(fld.value.charAt(i)) != -1) 
                aux += fld.value.charAt(i);
        aux += key;
        len = aux.length;
        if (len == 0) 
            fld.value = '';
        if (len == 1) 
            fld.value = '0' + decSep + '0' + aux;
        if (len == 2) 
            fld.value = '0' + decSep + aux;
        if (len > 2) {
            aux2 = '';
            for (j = 0, i = len - 3; i >= 0; i--) {
                if (j == 3) {
                    aux2;
                    j = 0;
                }
                aux2 += aux.charAt(i);
                j++;
            }
            fld.value = '';
            len2 = aux2.length;
            for (i = len2 - 1; i >= 0; i--) 
                fld.value += aux2.charAt(i);
            fld.value += decSep + aux.substr(len - 2, len);
        }
        return false;
    } 
    catch (err) {
       //// CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/numbermask');
	   a(err);
    }
}
///////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////
function fj_ValidateFieldNumeric(id_Field, sz_Fieldname){
		// YOU CAN PASS A CELL TO THIS ONE AND IT WILL MAKE SURE IT IS ANUMBER AND ALERT IF NOT
    try {
        var strValidChars = "0123456789.-";
        var strChar;
        var blnResult = true;
        var ele = $(id_Field);
		if(sz_Fieldname){
			var elenm = sz_Fieldname; // should be text passed in like a label	
		} else{
			var elenm = ele.name; 
		}
		var strString = ele.value;
		
        CD(ele);// assumes you call it on change and it sets it to dirty
        if (strString.length == 0) 
            return false;
        
        //  test strString consists of valid characters listed above
        for (i = 0; i < strString.length && blnResult == true; i++) {
            strChar = strString.charAt(i);
            if (strValidChars.indexOf(strChar) == -1) {
                CC(ele);
                alert(field.toUpperCase() + ' must be numeric');
            }
        }
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/numericCheckAlert');
	   a(err);
    }
}
///////////////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function fj_SetPredictiveDspDiv(divID, parentID, display){
	// hum..... 
    try {
        var x = $(parentID).offsetLeft;
        var y = $(parentID).offsetTop + $(parentID).offsetHeight;
        var parent = $(parentID);
        while (parent.offsetParent) {
            parent = parent.offsetParent;
            x += parent.offsetLeft;
            y += parent.offsetTop;
        }
        var div = $(divID);
        div.style.fontFamily = "Verdana, Geneva, Arial, Helvetica, sans-serif";
        div.style.fontSize = "100%";
        div.style.padding = "4px";
        div.style.width = '140px';
        div.style.border = "1px solid black";
        div.style.position = "absolute";
        div.style.left = x + "px";
        div.style.top = y + "px";
        div.style.backgroundColor = "#fff";
        div.style.zIndex = 10000;
        div.style.display = display;
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/setPredictiveDspDiv');
	   a(err);
    }
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function fj_ArrayClear (toClear){
    try {
        for (var j = 1; j <= toClear.length; j++) 
            toClear[j] = false;
    } 
    catch (err) {
       // CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/clearArray');
	   a(err);
    }
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// THIS IS COLDFUSION 8 ENV ONLY
/*function cfWindowResize(sz_windowName, n_width, n_height)
{
    try 
    {
        ColdFusion.Window.getWindowObject(sz_windowName).setContentSize(n_width, n_height);
    } 
    catch (err) 
    {
         //CMS.Ajax.Util.fj_GenError(err, '/_scripts/_general.js/clearArray');
		 a(err);
    }
}*/
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


