function checkDemographics(formNum) {
 var feedback = new Object;

 // Translate these only 
    var alertMsgStem = "A response is required for the question about ";
    feedback['age'] =  "YOUR AGE";
    feedback['bmo'] =  "YOUR BIRTH MONTH";
    feedback['bdy'] =  "YOUR BIRTH DAY";
    feedback['bye'] =  "YOUR BIRTH YEAR";
    feedback['edu'] =  "YOUR EDUCATION";
    feedback['gen'] =  "YOUR GENDER";
    feedback['ori'] =  "YOUR SEXUAL ORIENTATION";
    feedback['eth'] =  "YOUR ETHNICITY";
    feedback['mas'] =  "YOUR MARITAL STATUS";
    feedback['ahi'] =  "YOUR ANNUAL HOUSEHOLD INCOME";
    feedback['dep'] =  "DEPRESSION";
    feedback['anx'] =  "ANXIETY DISORDERS";
    feedback['bip'] =  "BIPOLAR I OR II";
    feedback['sch'] =  "SCHIZOPHRENIA OR SCHIZOAFFECTIVE DISORDER";
    feedback['the'] =  "TREATMENT BY THERAPY";
    feedback['lif'] =  "TREATMENT BY LIFE COACHING";
    feedback['pre'] =  "TREATMENT BY PRESCRIBED MEDICATIONS";
    feedback['rel'] =  "YOUR RELIGION";
    feedback['cou'] =  "YOUR COUNTRY";
    feedback['zp1'] =  "YOUR ZIP CODE - FIRST DIGIT"; 
    feedback['zp2'] =  "YOUR ZIP CODE - SECOND DIGIT"; 
    feedback['zp3'] =  "YOUR ZIP CODE - THIRD DIGIT"; 
    var alertMsgEnd =  ".";
 //

 // Note: checks done below are shown after the double slashes; revise if not
 // appropriate in another language. Also rejects text values starting with "[", 
 // selection values of "."

 // Items that are not required are not checked.

 var reqQuestionRegExp    = /[^_]r$/i;       // required question regex
 var reqQuestionNumRegExp = /^Q0*(.*)r$/i;   // question number regex
 var reqQuestionNum       = ""; 
 var oldName = "";  // avoids repeats on radio button groups
 var missingResponse = false;

 for (var i = 0; i  < document.forms[formNum].elements.length; i++) {
  var e =      document.forms[formNum].elements[i];
  var eName =  e.name;
  // examine only question elements with names that end in r (req'd), 
  // but not _r (subquestion r); check radio button sets only once
  if( eName.match( reqQuestionRegExp ) && eName != oldName) { 
   switch( e.type ){
    case "radio": 
      missingResponse = !optionSelected( eval( "document.forms[0]." + eName ) ); break;
    case "select-one": 
      missingResponse = e.value == "."; break;
    case "textarea": 
      missingResponse = ( e.value.length<3 || e.value.charAt(0) == "[" ); break;
    case "text": 
      missingResponse = ( e.value.length<3 || e.value.charAt(0) == "["  ); break;
    default: missingResponse = false;
   }
   if ( missingResponse ) {
    // extract question number and display error message
    e.focus();
    reqQuestionNum = eName.substr(1,3);   // extract question code name
    alert( alertMsgStem + feedback[reqQuestionNum] + alertMsgEnd );
    return false;
   }
   oldName = eName;
  }
 }
 return true; // ok to submit form
}
function optionSelected(oGroup) {
 for ( var i = 0; i  < oGroup.length; i++ ) {
  if ( oGroup[i].checked && oGroup[i].value != "." ) { return 1; }        
 }
 return 0;
}
