// DCA contact.js
// Copyright 2008, DeFinis Computer Associates
// Wantage, NJ 07419  All rights reserved.
// Validate contact Form 07/27/2008
// Establish global Arrays for Day and Month Names */

var dayNames=new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
var monthNames=new Array("January","February","March","April","May","June","July","August","September","October","November","December");

function getCurTime() {
	curDateTime=new Date();
	curYear=curDateTime.getFullYear();
	curMonthNbr=curDateTime.getMonth();
	curDayNbrOfWeek=curDateTime.getDay();
	curDayNbrOfMonth=curDateTime.getDate();
	
	curLocalHours=curDateTime.getHours();
	curLocalMinutes=curDateTime.getMinutes();
	curLocalSeconds=curDateTime.getSeconds();
	if (curLocalMinutes<10)
		curLocalMinutes="0"+curLocalMinutes;
	if (curLocalSeconds<10)
		curLocalSeconds="0"+curLocalSeconds;

	curUTCTime = curDateTime.toUTCString();
	curDateTime = curDateTime.toLocaleTimeString();

	var retrnData=dayNames[curDayNbrOfWeek]+', '+monthNames[curMonthNbr]+' '+curDayNbrOfMonth+', '+curYear+', '+curLocalHours +':'+curLocalMinutes +':'+curLocalSeconds+' Local Time '+'\n';
	return retrnData;
}

function taLimit(evt) {
/* Copyright 2009, All rights reserved. DeFinis Computer Associates */
	var evtObj;						// Contains event object
	var elementTarget;		// Contains either the srcElement (IE) or the evt.target property
	if (evt.srcElement){	// The browser is IE
		evtObj = window.event;
		elementTarget = evt.srcElement;
	} else {							// The browser is non-IE
		evtObj = evt;
		elementTarget = evt.target;
	}
	
//	var maxLength = elementTarget.rows * elementTarget.cols;
	var maxLength=0;
	if(document.all)
		maxLength = document.getElementById('myMsgMax').innerText;
	else
		maxLength = document.getElementById('myMsgMax').innerHTML;		

	var taCounter=0;
	var keyHit = evtObj.type;
	var keyCode = evtObj.keyCode;
	if (keyCode == 8) {
		taBackspace(evt);
		return;
	}
	
	taCounter = maxLength - document.frmContact.MESSAGE.value.length -1;
	
	if (document.frmContact.MESSAGE.value.length==maxLength){
		document.frmContact.MESSAGE.value = document.frmContact.MESSAGE.value.substring(0,maxLength);
		alert("You may not exceed " + maxLength + " characters.  Message truncated.");
		return false;
	}else{
		if(document.all)
			document.getElementById('myCounter').innerText = taCounter;
		else
			document.getElementById('myCounter').innerHTML = taCounter;		
	}
}	// End taLimit()

function taBackspace(evt) {
	var elementTarget;		// Contains either the srcElement (IE) or the evt.target property
	if (evt.srcElement){	// The browser is IE
		elementTarget = evt.srcElement;
	} else {							// The browser is non-IE
		elementTarget = evt.target;
	}
	keyHit = evt.type;
	keyCode = evt.keyCode;

	var maxLength=0;
	if(document.all)
		maxLength = document.getElementById('myMsgMax').innerText;
	else
		maxLength = document.getElementById('myMsgMax').innerHTML;		
	
	if (document.frmContact.MESSAGE.value.length>maxLength){
		document.frmContact.MESSAGE.value = document.frmContact.MESSAGE.value.substring(0,maxLength);
		var taCounter = maxLength - document.frmContact.MESSAGE.value.length;
		if(document.all){
			document.getElementById('myCounter').innerText = taCounter;
		}else{
			document.getElementById('myCounter').innerHTML = taCounter;
		}
		alert("Message too long.  Truncated to " + maxLength + " characters.");
		document.getElementById('MESSAGE').focus();
		document.getElementById('MESSAGE').select();				
		return false;
	}
	
	var taCounter = maxLength - document.frmContact.MESSAGE.value.length;
	if(document.all)
		document.getElementById('myCounter').innerText = taCounter;
	else
		document.getElementById('myCounter').innerHTML = taCounter;
}	// End taBackspace()

function validateCityStateZip(){
	var stateArray = " AL AK AZ AR AS CA CO CT DC DE FL GA GU HI ID IL IN IA KS KY LA ME MH MD MA MI MN MS MO MT NE NV NH NJ NM NY NC ND MP OH OK OR PA PR RI SC SD TN TX UT VT VA VI WA WI WV WY AE AA AP";
	var state = document.frmContact.CITYSTATEZIP.value.toUpperCase();
	var commaAtPosition = 0;
	var stateAbbrev = '';
	var cityName = '';
	var zipCode = '';
	var zipPtr = 0;
	var selState=0;

	if(state.length < 10)
		return 1;	// content missing or invalid format.
	
	commaAtPosition = state.indexOf(',');
	zipPtr=state.lastIndexOf(" ")+1; 
	zipCode = state.substr(zipPtr,state.length - zipPtr);
	stateAbbrev = state.substr(zipPtr-4,3);
	if(commaAtPosition != -1){
		cityName = state.substr(0,state.indexOf(" ")-1);
	}else{
		cityName = state.substr(0,state.indexOf(" "));
	}
	if(cityName.length == 0)
		return 2;		// city name not found on this line
	if(stateAbbrev.indexOf(',') >0)
		return 3;		// cannot find state.  Possible missing space.
	if(zipCode.length < 5 || isNaN(zipCode.substr(0,5)) || zipCode.length == 10 && zipCode.substr(5,1) != '-' || zipCode.length == 10 && isNaN(zipCode.substr(6,4)) || zipCode.length > 5 && zipCode.length < 10)
		return 4;		// zip code has invalid length or format .
	for (x1=0;x1<state.length;x1++) {
		for(x2=0;x2<stateArray.length;x2+=3) {
			if (state.substr(x1,3).indexOf(stateArray.substr(x2,3))!=-1){
			  selState = state.substr(x1,3);
			  break;
			}
		}
	}
	if(!selState){
		return 5;	// valid state not found on this line
	}
	var ZIP = new Number(zipCode.substr(0,3));
	var ZIPrange = false;
	switch(selState.substr(1,2)){case "AL":ZIPrange=(ZIP>=350&&ZIP<=369);break;case "AK":ZIPrange=(ZIP>=995&&ZIP<=999);break;case "AZ":ZIPrange=(ZIP>=850&&ZIP<=865);break;case "AR":ZIPrange=((ZIP>=716&&ZIP<=729)||(ZIP==755));break;case "AS":ZIPrange=(ZIP==967);break;case "CA":ZIPrange=(ZIP>=900&&ZIP<=966);break;case "CO":ZIPrange=(ZIP>=800&&ZIP<=816);break;case "CT":ZIPrange=(ZIP>=60&&ZIP<=69);break;case "DC":ZIPrange=(ZIP>=200&&ZIP<=205);break;case "DE":ZIPrange=(ZIP>=197&&ZIP<=199);break;case "FL":ZIPrange=((ZIP>=320&&ZIP<=349)&&(ZIP != 343&&ZIP !=345&&ZIP!=348));break;case "GA":ZIPrange=(ZIP>=300&&ZIP<=319);break;case "GU":ZIPrange=(ZIP==969);break;case "HI":ZIPrange=(ZIP>=967&&ZIP<=968);break;case "ID":ZIPrange=(ZIP>=832&&ZIP<=838);break;case "IL":ZIPrange=(ZIP>=600&&ZIP<=629);break;case "IN":ZIPrange=(ZIP>=460&&ZIP<=479);break;case "IA":ZIPrange=(ZIP>=500&&ZIP<=528);break;case "KS":ZIPrange=(ZIP>=660&&ZIP<=679);break;case "KY":ZIPrange=(ZIP>=400&&ZIP<=427);break;case "LA":ZIPrange=(ZIP>=700&&ZIP<=714);break;case "ME":ZIPrange=(ZIP>=39&&ZIP<=49);break;case "MH":ZIPrange=(ZIP==969);break;case "MD":ZIPrange=(ZIP>=206&&ZIP<=219);break;case "MA":ZIPrange=((ZIP>=10&&ZIP<=27)||(ZIP==55));break;case "MI":ZIPrange=(ZIP>=480&&ZIP<=499);break;case "MN":ZIPrange=(ZIP>=550&&ZIP<=567);break;case "MS":ZIPrange=(ZIP>=386&&ZIP<=397);break;case "MO":ZIPrange=(ZIP>=630&&ZIP<=658);break;case "MT":ZIPrange=(ZIP>=590&&ZIP<=599);break;case "NE":ZIPrange=(ZIP>=680&&ZIP<=693);break;case "NV":ZIPrange=(ZIP>=889&&ZIP<=898);break;case "NH":ZIPrange=(ZIP>=30&&ZIP<=38);break;case "NJ":ZIPrange=(ZIP>=70&&ZIP<=89);break;case "NM":ZIPrange=(ZIP>=870&&ZIP<=884);break;case "NY":ZIPrange=((ZIP>=90&&ZIP<=149)||(ZIP==4)||(ZIP==63));break;case "NC":ZIPrange=(ZIP>=269&&ZIP<=289);break;case "ND":ZIPrange=(ZIP>=580&&ZIP<=588);break;case "MP":ZIPrange=(ZIP==969);break;case "OH":ZIPrange=(ZIP>=430&&ZIP<=458);break;case "OK":ZIPrange=(ZIP>=730&&ZIP<=749);break;case "OR":ZIPrange=(ZIP>=970&&ZIP<=979);break;case "PA":ZIPrange=(ZIP>=150&&ZIP<=196);break;case "PR":ZIPrange=(ZIP>=6&&ZIP<=9);break;case "RI":ZIPrange=(ZIP>=28&&ZIP<=29);break;case "SC":ZIPrange=(ZIP>=290&&ZIP<=299);break;case "SD":ZIPrange=(ZIP>=570&&ZIP<=577);break;case "TN":ZIPrange=(ZIP>=370&&ZIP<=385);break;case "TX":ZIPrange=((ZIP>=750&&ZIP<=799)||(ZIP==885));break;case "UT":ZIPrange=(ZIP>=840&&ZIP<=847);break;case "VT":ZIPrange=(ZIP>=50&&ZIP<=59);break;case "VA":ZIPrange=((ZIP>=220&&ZIP<=246)||(ZIP==201));break;case "VI":ZIPrange=(ZIP==8);break;case "WA":ZIPrange=(ZIP>=980&&ZIP<=994);break;case "WI":ZIPrange=(ZIP>=530&&ZIP<=549);break;case "WV":ZIPrange=(ZIP>=247&&ZIP<=268);break;case "WY":ZIPrange=(ZIP>=820&&ZIP<=831);break;case "AE":ZIPrange=(ZIP>=90&&ZIP<=98);break;case "AA":ZIPrange=(ZIP==340);break;case "AP":ZIPrange=(ZIP>=962&&ZIP<=966);break;default: ZIPrange=0;	}
	if(!ZIPrange)
		return 6;
	return 0;
}
function validateWorkPhone() 
{
	var workPhone = document.getElementById('WORKPHONE').value;
	var	bestTime = document.getElementById('BESTTIME').value;
	if(bestTime.toUpperCase().indexOf("WORK") != -1){
		if(document.getElementById('WORKPHONE').value == ''){
			alert("You must enter a valid Work Phone Number if you want to be called at work.");
			document.getElementById('WORKPHONE').focus();
			document.getElementById('WORKPHONE').select();				
		}
	}
}
function validateMsg() {
//	var msg = document.getElementById('MESSAGE').value;
	var msg = document.frmContact.MESSAGE.value;
	vc=0;
	for (i=0;i<msg.length;i++) {
    if ("aeiou".indexOf(msg.substr(i,1).toLowerCase())!=-1){
        vc++;
    }
	}
	if(vc == 0 && isNaN(msg) || msg.length == 0)
		return false;
	else
		return true;
}

function fnValidateForm(formName)
{
  var x  = 0;
  var FormOk  = true;
	var ItemName = '';
	var ItemValue = '';
	var myForm = document.forms[formName];
	
// *** INTERNAL FIELD NAMES ***
	fldNames = new Array(
		"NAME",
		"ADDRESS",
		"CITYSTATEZIP",
		"PHONE",
		"EXT",
		"EMAIL",
		"BESTTIME",
		"MESSAGE",
		"code"
	);
	captionNames = new Array(
		'Name',
		'Address',
		'City, State, Zip',
		'Phone',
		'Extension',
		'E-Mail Address',
		'Best Time to Call',
		'Message',
		'Security Code'
	);

	var ItemCount = fldNames.length;
	var ItemRequired = false;
	var captionPtr = 0;
	
  while ((x < myForm.elements.length)&&myForm.elements[x].name != 'undefined'&&(FormOk)){
		ItemName = myForm.elements[x].name;
		ItemValue = myForm.elements[x].value;
		// Set the Caption Pointer
	
		for (captionPtr=0;captionPtr<ItemCount;captionPtr++){
			if(ItemName == fldNames[captionPtr]){
				break;
			}
		}	

		// Check if required field is empty
		if (myForm.elements[x].className.indexOf("cRequiredFld") != -1){
			if (ItemValue.length == 0){
			  FormOk = false;
				alert(captionNames[captionPtr] + ' is a required item.');
				myForm.elements[x].focus();
				myForm.elements[x].select();
				return FormOk;				
			}
		}

		if(ItemName == "CITYSTATEZIP"){
			if (myForm.elements[x].className.indexOf("cRequiredFld") != -1 || ItemValue.length > 0) {
				var fieldName = 'City, State  Zip - ';
				var retCode = validateCityStateZip();
				if(retCode > 0){
					FormOk = false;
					myForm.elements[x].focus();
					myForm.elements[x].select();
					switch(retCode){
						case 1:alert(fieldName + 'Content missing or Format invalid.');break;									
						case 2:alert(fieldName + 'City Name not found on this line.');break;
						case 3:alert('Cannot find State.  Possible missing space, invalid State abbreviation or Zip code issue.');break;
						case 4:alert(fieldName + 'Zip Code has invalid content or format.');break;
						case 5:alert(fieldName + 'Valid State not found on this line.');break;
						case 6:alert(fieldName + 'Zip Code is incorrect.');break;
						default:alert(fieldName + 'City, State  Zip Code is invalid due to undetermined cause.');break;
					}
					return FormOk;
				}				
			}
		}
					
		//	Required or not, must be valid format if present		
		if(ItemName.indexOf("PHONE") != -1 || ItemName.indexOf("FAX") != -1){
			if (myForm.elements[x].className.indexOf("cRequiredFld") != -1 || ItemValue.length > 0) {
				var myRegExp=/^\d{3}-\d{3}-\d{4}$/;		// 3 digits followed by hyphen followed by 3 digits followed by hyphen followed by 4 digits
				if(!myRegExp.test(ItemValue) || ItemValue.substr(0,1) < "2" || ItemValue.substr(4,1) < "2" || ItemValue.substr(8,4) < "0001"){
					FormOk = false;
					alert("Please enter a correct " + captionNames[captionPtr] + " formatted as shown.");
					myForm.elements[x].focus();
					myForm.elements[x].select();
					return FormOk;				
				}
			}
		}

		if(ItemName.indexOf("EXT") != -1){
			if(ItemValue.length > 0){
				if(myForm.elements[x-1].value.length == 0) {
					FormOk = false;
					alert(captionNames[captionPtr]+" must be Blank or associated Phone Number is missing");
					myForm.elements[x].focus();
					myForm.elements[x].select();
					return FormOk;				
				}else if(isNaN(ItemValue) || myForm.elements[x-1].value.length == 0) {	// EXT must immediately follow WORKPHONE
					FormOk = false;
					alert(captionNames[captionPtr]+" must be Numeric");
					myForm.elements[x].focus();
					myForm.elements[x].select();
					return FormOk;				
				}
			}
		}

		if(ItemName == "EMAIL"){
			if (myForm.elements[x].className.indexOf("cRequiredFld") != -1 || ItemValue.length > 0) {
				var myRegExp1=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
				if(!myRegExp1.test(ItemValue)){
					FormOk = false;
					alert(captionNames[captionPtr] + " has an invalid format.");
					myForm.elements[x].focus();
					myForm.elements[x].select();				
					return FormOk;				
				}
			}
		}
		
		if(ItemName == "BESTTIME"){
			if(ItemValue.toUpperCase().indexOf("WORK") != -1){
				if(document.getElementById('WORKPHONE').value == ''){
					FormOk = false;
					alert("You must enter a valid Work Phone Number if you want to be called at work.");
					document.getElementById('WORKPHONE').focus();
					document.getElementById('WORKPHONE').select();				
					return FormOk;				
				}else{
					document.getElementById('WORKPHONE').className = 'cOptionalFld';
				}
			}
		}
		
		if(ItemName == "MESSAGE"){
			var maxMsgLen=0;
			var msgSent = 'MSG.SENT:';

			if(document.all){
				maxMsgLen = document.getElementById('myMsgMax').innerText;
			}else{
				maxMsgLen = document.getElementById('myMsgMax').innerHTML;
			}
			// chk for literal from prior attempt.  If present, truncate msg area and reset the counter for chars remaining.
			if(ItemValue.toUpperCase().indexOf(msgSent) != -1){	
				var stop = ItemValue.lastIndexOf(msgSent) -3;
				myForm.elements['MESSAGE'].value=ItemValue.substring(0, stop);
				if(document.all){
					document.getElementById('myCounter').innerText = maxMsgLen - stop; //taCounter;
				}else{
					document.getElementById('myCounter').innerHTML = maxMsgLen - stop; //taCounter;
				}
			}else{

				// no literal from prior attempt found, so now check for overflow length
				if(ItemValue.length > maxMsgLen){
					FormOk = false;
					alert("Your Message was truncated to the maximum allowable length of " + maxMsgLen + " in contact.js");
					document.getElementById('MESSAGE').value = document.frmContact.MESSAGE.value.substring(0,maxMsgLen);
					if(document.all){
						document.getElementById('myCounter').innerText = 0; //taCounter;
					}else{
						document.getElementById('myCounter').innerHTML = 0; //taCounter;
					}

					document.getElementById('MESSAGE').focus();
					document.getElementById('MESSAGE').select();				
					return FormOk;				
				}
			}
		}
		
    x ++;
  }

	return FormOk;
		
}

function formSubmit(formName){
// last updated 10-02-2009	
	var msgSent = 'MSG.SENT:';
	var myForm = document.forms[formName];

	if(window.event)
		window.event.returnValue = false;
		
  if(fnValidateForm(formName)){
		if (confirm ("Data is valid.  Click O.K. to Send.")){
			if(document.all){									// if IE
				if(myForm.action.substring(0,7).toLowerCase()	== 'mailto:'){
					alert("\n"+'Please do not block messages that may follow.  Click Yes/OK'+"\n"+"\n");
				}
				var timeSubmitted = getCurTime();
				myForm.elements['hiddenMSGSENT'].value=timeSubmitted;		// Timestamp message with time sent
//				myForm.elements['MESSAGE'].value+=' ' + "\n";		// Required for IE only.
//				myForm.elements['MESSAGE'].value+=' ';		// Required for IE only.
				myForm.elements['MESSAGE'].value+="\n";		// Required for IE only.
				myForm.submit();
				if(window.event){
					window.event.returnValue = true;
					return;
				}else{
					return false;
				}
			}else if(document.getElementById){		// If other than IE
				if(myForm.action.substring(0,7).toLowerCase()	== 'mailto:'){	
					alert("\n"+'Please do not block messages that may follow.  Click Yes/OK, then,'+"\n\n"+'Your E-mail software may then be waiting for your response.  If so, Click SEND to continue'+"\n"+"\n");
				}
				var timeSubmitted = getCurTime();
				myForm.elements['hiddenMSGSENT'].value=timeSubmitted;		// Timestamp message with time sent
				myForm.submit();
				return false;
			}
		}
		return false;
	}
	return false;
}	// End formsubmit()

function formReset(formName,rtrnLoc){	
// last updated 04-16-2009	
	var myForm = document.forms[formName]
	if (confirm ("Are you sure you want to clear the entire form?")){
		window.location = rtrnLoc;
		return false;
	}else{
		return true;	// 		return false in HTML;
	}
}	// End formReset()

