var bgErrClr = '#9be59b'
function zipForm (form) {
	var passed = true
	if(!fldChkZip(form.elements['area_zip'],bgErrClr)) passed = false
	else stateUpdate(form,'upd_city','area_city','area_zip','zip_go','Please wait - updating city list...')
	return passed
}
function stateUpdate (form, tid, cid, zid, bid, str) {
	var obj
	recordPosition(form)
	if(obj=getObjectId(cid)) { obj.style.display = 'none'; obj.selectedIndex = 0; }
	if(obj=getObjectId(zid)) { obj.style.display = 'none'; obj.selectedIndex = 0; }
	if(obj=getObjectId(bid)) obj.style.display = 'none'
	if(obj=getObjectId(tid)) {
		(obj.childNodes.length) ?
			obj.childNodes[0].nodeValue = str :
			obj.appendChild(document.createTextNode(str))
		obj.style.display = ''
	}
	form.submit()
	return
}
function cityUpdate (form, tid, zid, bid) {
	var obj
	recordPosition(form)
	if(obj=getObjectId(zid)) { obj.style.display = 'none'; obj.selectedIndex = 0; }
	if(obj=getObjectId(bid)) obj.style.display = 'none'
	if(obj=getObjectId(tid)) obj.style.display = ''
	form.submit()
	return
}
function registerForm (form) {
	var rtn = checkName(form.elements['client_fname'],bgErrClr)
	var msg = (rtn.length) ? "First name: "+rtn : ''
	rtn = checkName(form.elements['client_lname'],bgErrClr)
	if(rtn.length) msg += "\nLast name: "+rtn
	rtn = checkEmail(form.elements['client_email'],bgErrClr)
	if(rtn.length) msg += "\n"+rtn
	if(msg) alert(msg)
	return (msg)?false:true
}
function confirmForm (form) {
	var passed = true, obj = form.elements['pwd']
	recordPosition(form)
	if(obj && !fldChkTxt(obj,bgErrClr)) passed = false
	if(!passed) alert('You must provide a password because this email address\nis already associated with a registered account.')
	return passed
}
function loginForm (form) {
	var passed = true
	if(!fldChkTxt(form.elements['client_email'],bgErrClr)) passed = false
	if(!fldChkTxt(form.elements['client_passwd'],bgErrClr)) passed = false
	if(!passed) alert('Missing or invalid input')
	return passed
}
function pwdHelp (form) {
	var passed = true
	if(!fldChkTxt(form.elements['client_email'],bgErrClr)) passed = false
	if(!passed) alert('Missing or invalid input')
	return passed
}
function pwdForm (form) {
	var passed = true
	if(!fldChkTxt(form.elements['_regPass'],bgErrClr)) {
		passed = false
		alert('Missing or invalid input')
	}
	if(!fldChkPwds(form.elements['_regPass1'],form.elements['_regPass2'],bgErrClr)) passed = false
	return passed
}
function reservDest (form, sel) {
	var adr, air, obj
	if(sel==1) { adr = 'none'; air = '' } else { adr = ''; air = 'none' }
	if(obj=getObjectId('airport_row')) obj.style.display = air
	if(obj=getObjectId('reserv_airport'))
		air = (sel==0 || obj.selectedIndex==0)?'none':''
	if(obj=getObjectId('airline_row')) obj.style.display = air
	if(obj=getObjectId('flight_row')) obj.style.display = air
	if(obj=getObjectId('address_row')) obj.style.display = adr
	if(obj=getObjectId('city_row')) obj.style.display = adr
	return
}
function companyUpdate () {
	var obj, c=0, s=-1
	if(obj=getObjectId('co_id')) {
		var form = obj.form
		var slot = (obj.type=='select-one') ? obj.selectedIndex : 0 // 'Any Avail' or company
		if(!isEmpty(idArr) && !isEmpty(mapArr)) {
			for(var i=0; i<idArr.length; i++)
				if(obj=getObjectId(idArr[i])) {
					if(mapArr[slot][i])
					{	obj.style.display = ''; s = i; c++ }
					else obj.style.display = 'none'
				}
			if(c==1 && s>=0)
				form.elements['reserv_payment'][s].checked = true
		}
		if(obj=getObjectId('message')) {
			c = (!isEmpty(msgArr) && msgArr[slot].length)?1:0
			obj.style.display = (c) ? '' : 'none';
			setNodeHTML('message',(c) ? msgArr[slot] : '')
		}
		if(obj=getObjectId('lead_time')) {
			c = (isEmpty(ltArr)) ? 60 : ltArr[slot]
			if(c>=60) c = c/60
			s = (c==1) ? 'hour' : ((c<15) ? 'hours':'minutes')
			setNodeStr('lead_time',c+' '+s)
		}
	}
	return
}
function paymentUpdate (form) {
	var obj
	if((obj=getObjectId('co_id')) && obj.value!=-1)
		form.submit()
	return
}
function airportUpdate (sel) {
	var i, l, obj
	var disp = (sel.options.length>0 && sel.selectedIndex==0) ? 'none' : ''
	if(obj=getObjectId('reserv_airline')) {
		if(sel.selectedIndex>0) {
		// save iata code of selected airline
			var al = (obj.selectedIndex==0) ? null : obj.options[obj.selectedIndex].value
		// update airline select list
			obj.options.length = 1
			obj.selectedIndex = 0
			for(i=1, l=0; l<almArr[sel.selectedIndex-1].length; l++)
				if(almArr[sel.selectedIndex-1][l])
					obj.options[i++] = new Option(alnArr[l][1],alnArr[l][0],0,(al==alnArr[l][0]))
		}
		obj.style.display = disp
	}
	resetBg(sel,'#fff')
	if(obj=getObjectId('arlabel')) obj.style.display = disp
	if(obj=getObjectId('flight_row')) obj.style.display = disp
	return
}
function reservForm (form) {
	var tMin, chkflt = false, msg = '', passed = true
	recordPosition(form)
	if(obj=getObjectId('co_id')) {
		var slot = (obj.type=='select-one') ? obj.selectedIndex : 0 // 'Any Avail' or company
		tMin = ((isEmpty(ltArr)||slot>=ltArr.length) ? 3600 : ltArr[slot])*60
	}
	else tMin = 3600
	if(!fldChkSel(form.elements['area_state'],bgErrClr,0)) passed = false
	if(!fldChkSel(form.elements['area_city'],bgErrClr,0)) passed = false
	if(!fldChkUSPhone(form.elements['reserv_phone'],bgErrClr)) passed = false
	if(!fldChkTxt(form.elements['reserv_pu_addr'],bgErrClr)) passed = false
	if(!fldChkRad(getObjectId('building'),form.reserv_pu_bldg,bgErrClr)) passed = false
	if(!fldChkCardRad(getObjectId('paycards'),form.reserv_payment,bgErrClr)) passed = false
	if(!fldChkInt(form.elements['reserv_pu_fares'],bgErrClr)) passed = false
	if(getObjectId('airport_row').style.display=='') {
		if(!fldChkSel((obj=form.elements['reserv_airport']),bgErrClr,0)) passed = false
		else chkflt = true
		if(obj.length>1 && obj.selectedIndex==(obj.length-1) &&
			!fldChkTxt(form.elements['reserv_instr'],bgErrClr)) passed = false
	}
	else {
		if(!fldChkTxt(form.elements['reserv_dst_addr'],bgErrClr)) passed = false
		if(!fldChkSel(form.elements['reserv_dst_city'],bgErrClr,0)) passed = false
	}
	if(!passed) msg = "\nMissing or invalid input"
	var rtn = checkName(form.elements['reserv_fname'],bgErrClr)
	if(rtn.length) msg += "\nFirst name: "+rtn
	rtn = checkName(form.elements['reserv_lname'],bgErrClr)
	if(rtn.length) msg += "\nLast name: "+rtn

	var obj = form.elements['reserv_pu_timeYr']
	var year = parseInt((obj.type=='hidden')?obj.value:obj.options[obj.selectedIndex].text,10)
	obj = form.elements['reserv_pu_timeMon']
	var month = monthAbbr2Int(obj.options[obj.selectedIndex].text)-1
	obj = form.elements['reserv_pu_timeDay']
	var day = parseInt(obj.options[obj.selectedIndex].text,10)
	obj = form.elements['reserv_pu_timeHr']
	var hour = parseInt(obj.options[obj.selectedIndex].value,10)
	obj = form.elements['reserv_pu_timeMin']
	var min = parseInt(obj.options[obj.selectedIndex].text,10)
	var pickup = new Date(year,month,day,hour,min,0)
	var today = new Date()
	var minMS = today.getTime() + (tMin*1000)
	if(minMS>=pickup.getTime())
		msg += "\nPickup time must be at least " +
			((tMin>=3600) ? tMin/3600+' hour(s)' : tMin/60+' minutes') +
			' from now.'
	else if(chkflt) {
		obj = form.elements['reserv_flt_timeYr']
		year = parseInt((obj.type=='hidden')?obj.value:obj.options[obj.selectedIndex].text,10)
		obj = form.elements['reserv_flt_timeMon']
		month = monthAbbr2Int(obj.options[obj.selectedIndex].text)-1
		obj = form.elements['reserv_flt_timeDay']
		day = parseInt(obj.options[obj.selectedIndex].text,10)
		obj = form.elements['reserv_flt_timeHr']
		hour = parseInt(obj.options[obj.selectedIndex].value,10)
		obj = form.elements['reserv_flt_timeMin']
		min = parseInt(obj.options[obj.selectedIndex].text,10)
		var flt = new Date(year,month,day,hour,min,0)
		if(flt.getTime()<pickup.getTime())
			msg += "\nFlight time is before your pick-up time!"
		else if((flt.getTime()-pickup.getTime())<(30*60000))
			alert('WARNING: Your flight time is less than 30 minutes from your pickup time.')
		if((obj=form.elements['reserv_airline']) && obj.length>1 && obj.selectedIndex==(obj.length-1) &&
			!fldChkTxt(form.elements['reserv_instr'],bgErrClr))
			msg += "\nMissing the name of the airline."
	}
	rtn = checkEmail(form.elements['reserv_email'],bgErrClr)
	if(rtn.length) msg += "\n"+rtn
	if(msg.length)
	{	passed = false; alert(msg) }
	else
		passed = true
	return passed
}
function fldChkCardRad (parObj, fldObj, clr) {
	var id, passed = true
	if(parObj && fldObj && fldObj[0].type=='radio') {
		passed = false
		for(var i=0; i<fldObj.length; i++) {
			obj = getObjectId(fldObj[i].value.toLowerCase())
			if(fldObj[i].checked && obj.style.display!='none')
			{	passed = true; break }
		}
		if(!passed) parObj.style.background = clr
	}
	return passed
}
function updForm (form) {
	var msgArr = new Array
	var f1 = form.elements['client_email']
	var f2 = form.elements['_email']
	if(f1 && f2 && (f1.value.length || f2.value.length)) {
		var a = fldChkTxt(f1,bgErrClr)
		var b = fldChkTxt(f2,bgErrClr)
		if(!a||!b)
			msgArr.push('Missing or invalid input')
		else if(!fldChkEmail(f1,bgErrClr))
			msgArr.push('Invalid email address')
		else if(f1 && f2 && f1.value.length && f1.value != f2.value) {
			doSelection(f2, bgErrClr)
			msgArr.push('Email addresses mismatch')
		}
	}
	var rtn = checkName(form.elements['client_fname'],bgErrClr)
	if(rtn.length)
		msgArr.push('First name: '+rtn)
	rtn = checkName(form.elements['client_lname'],bgErrClr)
	if(rtn.length)
		msgArr.push('Last name: '+rtn)
	if((f1=form.elements['client_phone']) && !fldChkUSPhone(f1,bgErrClr))
		msgArr.push('Missing or invalid phone number')
	if(msgArr.length) alert(msgArr.join("\n"))
	return (msgArr.length)?false:true
}
function fdbckForm (form) {
	var passed = true
	if(!fldChkTxt(form.elements['fdbck_message'],bgErrClr)) passed = false
	if(!passed) alert('Missing or invalid input')
	if(!fldChkEmail(form.elements['fdbck_sender'],bgErrClr)) passed = false
	return passed
}
function zipsForm (form,cntMax) {
	var fld, passed = true
	for(var count=0; count<cntMax; count++) {
		if((fld=form.elements['zip_'+count]) && fld.value!='' && !fldChkZip(fld,bgErrClr))
			passed = false
	}
	if(!passed) alert('Missing or invalid input')
	if(!fldChkEmail(form.elements['email'],bgErrClr)) passed = false
	return passed
}
function setDayNums (prefix, mtFlg) {
	var obj, mobj, select, days = 31
	if(obj=getObjectId(prefix+'Yr')) {
		var dayCnt = getDaysofYear(obj.value)
		if((mobj=getObjectId(prefix+'Mon')) && (select=mobj.options[mobj.selectedIndex].text)!='')
			days = dayCnt[monthAbbr2Int(select)]
	}
	if(obj=getObjectId(prefix+'Day')) {
		if(obj.options[obj.selectedIndex].text!='' && mobj.options[mobj.selectedIndex].text=='')
			mobj.selectedIndex++
		select = obj.selectedIndex
		obj.options.length = (mtFlg) ? days+1 : days
		for(var count=0, cnt=1; count<obj.options.length; count++)
			obj.options[count].text = (mtFlg && count==0) ? '' : cnt++
		if(select>(count=obj.options.length-1)) obj.selectedIndex=count
	}
	return
}
function addDirections (fld, hdn, ctl) {
	var obj, form = fld.form
	if(obj=getObjectId(hdn))
		obj.value = (fld.checked)?1:0
	if(obj=getObjectId(ctl))
		obj.className = (fld.checked) ?'directOn':'directOff'
	if(form.timeout) form.timeout.disabled = !fld.checked
	if(form.action)
		for(var count=0; count<form.action.length; count++)
			form.action[count].disabled = !fld.checked
	return
}
function highlightFAQ (id, total) {
	var obj
	for(var i=1; i<=total; i++)
		if(obj=getObjectId('faq'+i))
			obj.style.backgroundColor = (i==id) ? bgErrClr : '#fff'
	return
}