<!--
var Languages = {
enRank3:    "Please rank 3 attributes, one in each column.",
enUnique3:  "Please make sure each ranking selection is unique.",
enRead:     "Please confirm that you have read all of the information on this page.",
enLikely:   "Please indicate if you are likely to use this version",
enAlloc:    "Please check your allocation of patients for this version by line of therapy.  You indicated you are likely to use this version but you have not allocated any patients.",
enNoAlloc:  "You indicated you are likely to use this version but you have not allocated any patients.",
deRank3:    "Bitte bringen Sie die drei Merkmale in eine Rangfolge, indem Sie in jede Spalte einen Wert eingeben.",
deUnique3:  "Sie müssen in jedes Feld eine andere Zahl eingeben.",
deRead:     "Bitte bestätigen Sie, dass Sie alle Informationen auf dieser Seite gelesen haben.",
deLikely:   "Bitte geben Sie an, ob Sie diese Version voraussichtlich einsetzen würden.",
deAlloc:    "Bitte überprüfen Sie den Anteil Ihrer in den verschiedenen Therapielinien mit dieser Version behandelten Patienten.",
deNoAlloc:  "Sie haben angegeben, dass Sie diese Version voraussichtlich einsetzen würden, aber keinen Prozentsatz von behandelten Patienten eingegeben.",
frRank3:    "Veuillez classer les 3 attributs, un par colonne.",
frUnique3:  "Veuillez vous assurer que chaque classement n'a été sélectionné qu'une seule fois.",
frRead:     "Veuillez confirmer que vous avez lu toutes les informations figurant sur cette page.",
frLikely:   "Veuillez indiquer si vous êtes susceptible d'utiliser cette version.",
frAlloc:    "Veuillez vérifier la répartition de vos patients pour cette version par ligne de traitement.",
frNoAlloc:  "Vous avez indiqué être susceptible d'utiliser cette version mais vous n'avez pas indiqué de nombre de patients.",
enNumNA:    "Input must be a number >= 0, without a comma or decimal, or NA.",
enNumNA2:    "Please make sure that your minimal requirements to prescribe are not greater than your value for more than 50% of patients.",
esNumNA:    "Debe introducir un número >= 0 sin comas ni decimales, o NA.",
esNumNA2:    "Por favor, asegúrese de que sus requerimientos mínimos para prescribir no rebasan el valor que Usted asignó para más de 50% de los pacientes.",
frNumNA:    "La donnée d'entrée doit être un chiffre >=0, sans virgule ni décimal, ou s/o",
frNumNA2:    "Veuillez vous assurer que vos exigences minimales pour prescrire ne sont pas plus grandes que votre valeur pour plus de 50% des patients.",
enAll:    "Please answer all questions.",
enRadio:    "You forgot to select one or more buttons.",
enCk:     "Please check at least one check box for each question or a row, if it's a table.",
enText:   "You can not leave a response box empty on this screen.",
enDropdown:   "Please select an option from the selection menu.",
enOsRadioNoTextTable:    "Please specify in the text box.",
enOsRadioNoText:    "Please specify in the text box.",
enOsRadioNoRadio:    "You have specified in the text box, please select the radio button before that item.",
enOsNoRadioTable:    "You have specified in the text box, please choose an answer for that item.",
enOsCkNoText:    "You have selected 'other specify', please specify in the text box.",
enOsCkNoCk:    "You have specified in the text box, please select the check box before that item.",
enNone:    "If you have chosen 'None' as your answer, please de-select others.",
enDK:    "If you have chosen 'Don\'t Know' as your answer, please de-select others.",
enNum:    "Input must be a number >= 0, without a comma or decimal.",
enDero:    "Input must be a number >= 0.",
enPer:    "Input must be a number between 0 and 100, with no decimals.",
enRank:   "Please check your answer.  Make sure it's in the correct range and each rank number is used only once.",
enRankCol:   "Please make sure that no items are the same rank.",
enRate:   "Please rate in the correct range.",
enSum100:   "Please make sure sum is 100.",
enSum1000:   "Please make sure sum is 1000.",
enCo:   "Your Importance and Concern answers on this screen seem to follow a similar pattern.  Please confirm that this is how you wish to respond. Click 'OK' to continue, Click 'CANCEL' to adjust your answers.",
enConfirm:   "You have chosen to stop the survey.  Are you sure?  Although you will return to this page, any questions that you have answered on this screen will need to be reanswered.",
enNotDigit:   "Please make sure your response is a number.",
deAll:  "Beantworten Sie bitte alle Fragen.",
deRadio:  "Sie haben vergessen, ein oder mehrere Optionsfelder auszuwählen.",
deCk:  "Bitte markieren Sie mindestens ein Auswahlfeld für jede Frage bzw. Zeile, falls es eine Tabelle ist.",
deText:  "Sie können auf dieser Bildschirmseite kein Antwortfeld freilassen.",
deDropdown:  "Bitte wählen Sie eine Option aus dem Auswahlmenü.",
deOsRadioNoTextTable:  "Bitte im Textfeld erläutern.",
deOsRadioNoText:  "Bitte im Textfeld erläutern.",
deOsRadioNoRadio:  "Sie haben eine Angabe im Textfeld gemacht, bitte klicken Sie das Optionsfeld vor diesem Punkt an.",
deOsNoRadioTable:  "Sie haben eine Angabe im Textfeld gemacht, bitte wählen Sie für diesen Punkt eine Antwort aus.",
deOsCkNoText:  "Sie haben 'Sonstiges - bitte angeben' ausgewählt; bitte machen Sie die Angabe im Textfeld.",
deOsCkNoCk:  "Sie haben eine Angabe im Textfeld gemacht, bitte markieren Sie das Auswahlfeld vor diesem Punkt.",
deNone:  "Wenn Sie 'Keine' als Antwort gewählt haben, können Sie keine anderen Antworten auswählen.",
deDK:  "Wenn Sie 'Ich weiß nicht' als Antwort gewählt haben, können Sie keine anderen Antworten auswählen.",
deNum:  "Bitte eine Zahl >= 0 ohne Komma oder Dezimalstelle eingeben.",
deDero:   "Bitte eine Zahl >= 0 eingeben.",
dePer:  "Bitte eine Zahl zwischen 0 und 100 ohne Dezimalstellen eingeben.",
deRank:  "Bitte überprüfen Sie Ihre Angabe. Achten Sie darauf, dass sie im zulässigen Bereich liegt und jede Rangnummer nur einmal verwendet wird.",
deRankCol:  "Achten Sie bitte darauf, dass nicht mehrere Angaben dieselbe Rangstufe haben.",
deRate:  "Bitte im zulässigen Bereich bewerten.", 
deSum100:  "Die Summe muss 100 betragen.",
deSum1000:  "Die Summe muss 1000 betragen.", 
deCo:  "Ihre Antworten hinsichtlich Bedeutung und Bedenken auf dieser Bildschirmseite scheinen stets dem gleichen Muster zu folgen. Bitte bestätigen Sie, dass Sie wirklich so antworten möchten. Klicken Sie auf 'OK', um fortzufahren, oder auf 'RÜCKGÄNGIG MACHEN', um Ihre Antworten abzuändern.",
deConfirm:  "Sie sind dabei, die Befragung abzubrechen. Möchten Sie wirklich abbrechen?",
deNotDigit:  "Bitte eine Zahl eingeben.",
frAll:  "Veuillez répondre à toutes les questions.",
frRadio:  "Vous avez oublié de sélectionner une ou plusieurs réponses.",
frCk:  "Veuillez cocher une boite, au minimum, pour chaque question ou rang, si c’est un tableau.",
frText:  "Vous ne pouvez pas laisser vide la boite de réponse sur cet écran. ",
frDropdown:  "Veuillez sélectionner une option du menu de sélection.",
frOsRadioNoTextTable:  "Veuillez specifiez dans la boite de dialogue.",
frOsRadioNoText:  "Veuillez specifiez dans la boite de dialogue.",
frOsRadioNoRadio:  "Vous avez écrit dans la boite de dialogue, veuillez sélectionner le bouton radio en avant",
frOsNoRadioTable:  "Vous avez écrit dans la boite de dialogue, veuillez choisir une réponse.",
frOsCkNoText:  "Vous avez sélectionné ‘autre, spécifiez’, veuillez spécifier dans la boite de dialogue.",
frOsCkNoCk:   "Vous avez écrit dans la boite de dialogue, veuillez cocher la boite à cocher en avant.",
frNone:  "Si vous avez coché la case ‘aucun’, veuillez décocher les autres.",
frDK:  "Si vous avez coché la case ‘Ne sait pas’, veuillez décocher les autres.",
frNum:  "l'input doit être un numéro >= O, sans virgule ni point.",
frDero:  "L'input doit être un numéro >= O.",
frPer:  "L'input doit être un numéro entre 0 et 100, sans décimaux.",
frRank:  "Veuillez vérifier votre réponse.  Assurez-vous que la réponse est entre les limites données et que chaque numéro de classement est utilisé une seule fois.",
frRankCol:  "Veuillez assurer que vous n’utiliser pas un numéro de classement plusieurs fois.",
frRate:  "Veuillez classifier entre les limites données.",
frSum100:  "Veuillez vérifier que la somme est 100.",
frSum1000:  "Veuillez vérifier que la somme est 1000.",
frCo:  "Vos réponses pour les sections de 'l’importance' et 'les préoccupations'  semblent à suivre une tendance similaire.  Veuillez confirmer que vous souhaitez répondre de cette manière.  Cliquez sur 'OK' pour continuer, cliquer 'Annuler' pour changer vos réponses.",
frConfirm:  "Vous avez décidé d’arrêter l’enquête.  Êtes-vous sûr de vouloir l’arrêter?",  
frNotDigit:  "Veuillez vérifier que votre réponse est un numéro.",
itAll:    "Risponda a tutte le domande.",
itRadio:    "Ha dimenticato di selezionare uno o più pulsanti.",
itCk:     "Spunti almeno una casella per ogni domanda o riga se si tratta di una tabella.",
itText:   "Non può lasciare una casella di risposta vuota in questa schermata.",
itDropdown:   "Selezioni un'opzione dal menu di selezione.",
itOsRadioNoTextTable:    "Specifichi nella casella di testo.",
itOsRadioNoText:    "Specifichi nella casella di testo.",
itOsRadioNoRadio:    "Lei ha specificato nella casella di testo; selezioni il radiopulsante prima di questa voce.",
itOsNoRadioTable:    "Lei ha specificato nella casella di testo; scelga una risposta per questa voce.",
itOsCkNoText:    "Lei ha selezionato 'Altro (specificare)'; specifichi nella casella di testo.",
itOsCkNoCk:    "Lei ha specificato nella casella di testo; selezioni la casella di controllo prima di questa voce.",
itNone:    "Se ha scelto 'Nessuno' come risposta, deselezioni le altre.",
itDK:    "Se ha scelto 'Non so' come risposta, deselezioni le altre.",
itNum:    "Il valore inserito deve essere un numero >= 0, senza virgola o cifre decimali.",
itDero:    "Il valore inserito deve essere un numero >= 0.",
itPer:    "Il valore inserito deve essere un numero compreso tra 0 e 100, senza cifre decimali.",
itRank:   "Controlli la sua risposta. Si assicuri che rientri nell'intervallo corretto e che ogni numero di valutazione venga usato solo una volta.",
itRankCol:   "Si assicuri che nessuna voce abbia la stessa valutazione.",
itRate:   "Assegni una valutazione utilizzando numeri che rientrino nell'intervallo corretto.",
itSum100:   "Si assicuri che la somma sia 100.",
itSum1000:   "Si assicuri che la somma sia 1000.",
itCo:   "Le sue risposte per Importanza e Preoccupazione su questa schermata sembrano seguire un andamento similare. Confermi che questo è il modo in cui desidera rispondere. Faccia clic su 'OK' per proseguire o su 'ANNULLA' per modificare le risposte.",
itConfirm:   "Lei ha scelto di interrompere il sondaggio. È sicuro?",
itNotDigit:   "Si assicuri che la sua risposta sia un numero.",
esAll:    "Por favor, responda todas las preguntas.",
esRadio:    "Ha olvidado seleccionar uno o más botones.",
esCk:     "Por favor, marque al menos una casilla para cada pregunta o fila, si se trata de una table.",
esText:   "No puede dejar una casilla de respuesta vacía en esta pantalla.",
esDropdown:   "Por favor, elija  una opción en el menú de selección.",
esOsRadioNoTextTable:    "Por favor, especifique en el recuadro.",
esOsRadioNoText:    "Por favor, especifique en el recuadro.",
esOsRadioNoRadio:    "Ha especificado en el recuadro. Por favor, elija el botón radio antes de ese elemento.",
esOsNoRadioTable:    "Ha especificado en el recuadro. Por favor, elija una respuesta para ese elemento.",
esOsCkNoText:    "Ha elegido 'Otro - especifique'. Por favor, especifique en el recuadro.",
esOsCkNoCk:    "Ha especificado en el recuadro. Por favor, elija la casilla antes de ese elemento.",
esNone:    "Si ha elegido la respuesta 'Ninguno', desmarque las demás casillas.",
esDK:    "Si ha elegido la respuesta 'No sé', desmarque las demás casillas.",
esNum:    "La entrada debe ser un número >= 0, sin comas ni decimales.",
esDero:    "La entrada debe ser un número >= 0.",
esPer:    "La entrada debe ser un número entre 0 y 100, sin decimales.",
esRank:  "Por favor, marque su respuesta.  Asegúrese de que esté en la gama correcta y de que cada número de rango se utilice solamente una vez.",
esRankCol:   "Asegúrese de que no haya elementos del mismo rango.",
esRate:   "Por favor, valore en la gama correcta.",
esSum100:   "Por favor, asegúrese de que suma 100.",
esSum1000:   "Por favor, asegúrese de que suma 1000.",
esCo:   "Sus respuestas de Importancia y Preocupación en esta pantalla parecen seguir un patrón similar.  Por favor, confirme que quiere responder así. Haga clic en 'Aceptar' para continuar, o haga clic en 'CANCELAR' para modificar sus respuestas.",
esConfirm:   "Ha decidido parar la encuesta.  ¿Está seguro?",
esNotDigit:   "Por favor, asegúrese de que su respuesta sea un número.",
ukAll:    "Please answer all questions.",
ukRadio:    "You forgot to select one or more buttons.",
ukCk:     "Please check at least one check box for each question or a row, if it's a table.",
ukText:   "You can not leave a response box empty on this screen.",
ukDropdown:   "Please select an option from the selection menu.",
ukOsRadioNoTextTable:    "Please specify in the text box.",
ukOsRadioNoText:    "Please specify in the text box.",
ukOsRadioNoRadio:    "You have specified in the text box, please select the radio button before that item.",
ukOsNoRadioTable:    "You have specified in the text box, please choose an answer for that item.",
ukOsCkNoText:    "You have selected 'other specify', please specify in the text box.",
ukOsCkNoCk:    "You have specified in the text box, please select the check box before that item.",
ukNone:    "If you have chosen 'None' as your answer, please de-select others.",
ukDK:    "If you have chosen 'Don\'t Know' as your answer, please de-select others.",
ukNum:    "Input must be a number >= 0, without a comma or decimal.",
ukDero:    "Input must be a number >= 0.",
ukPer:    "Input must be a number between 0 and 100, with no decimals.",
ukRank:   "Please check your answer.  Make sure it's in the correct range and each rank number is used only once.",
ukRankCol:   "Please make sure that no items are the same rank.",
ukRate:   "Please rate in the correct range.",
ukSum100:   "Please make sure sum is 100.",
ukSum1000:   "Please make sure sum is 1000.",
ukCo:   "Your Importance and Concern answers on this screen seem to follow a similar pattern.  Please confirm that this is how you wish to respond. Click 'OK' to continue, Click 'CANCEL' to adjust your answers.",
ukConfirm:   "You have chosen to stop the survey.  Are you sure?",
ukNotDigit:   "Please make sure your response is a number.",
jpAll:  "全ての質問にお答えください",
jpRadio:  "ボタンの選択を忘れています",
jpCk:  "それぞれの質問または表の場合は１列に最低１個のチェックボックスにチェックしてください",
jpText:  "このスクリーンでは応答ボックスを空白のままにしないでください",
jpDropdown:  "選択メニューからオプションを選んでください",
jpOsRadioNoTextTable:  "テキストボックスに指定してください",
jpOsRadioNoText:  "テキストボックスに指定してください",
jpOsRadioNoRadio:  "テキストボックスに指定されましたのでそれの前にあるレイディオボタンを選択してください",
jpOsNoRadioTable:  "テキストボックスに指定されましたのでそれに対する回答を選択してください",
jpOsCkNoText:  "’その他、具体的に記入’を選択されましたのでテキストボックスに指定してください.",
jpOsCkNoCk:  "テキストボックスに指定されましたのでその前のチェックボックスを選択してください。",
jpNone:  "もし'どれでも無し’を回答として選択された場合は他の回答は選択からはずしてください",
jpDK:  "もし’わからない’を回答として選択された場合は他の回答は選択からはずしてください",
jpNum:  "インプットはコンマ，小数を含まない０以上の数でなければなりません",
jpDero:  "インプットは０以上の数でなければなりません",
jpPer:  "インプットは少数なしの０と１００の間の数でなければなりません",
jpRank:  "先生の回答を確認してください.　正しい範囲に収まっているかそしてランク番号が１回のみ使用されていることを確かめてください",
jpRankCol:  "同じランクが１回以上ついていないかを確かめてください",
jpRate:  "評価の範囲が正しいか確かめてください。",
jpSum100:  "合計が100になることを確かめてください",
jpSum1000:  "合計が1000になることを確かめてください",
jpCo:  "このスクリーンにおける先生の'重要'と'懸念'の応答のパターンが良く似ています.　このように応答することが先生の意志であることを確認してください.　このまま継続したい場合，OKをクリックしてください.　回答を調整したい場合はCANCELをクリックして下さい.",
jpConfirm:  "調査を中止する選択をされましたが，確かですか?",
jpNotDigit:  "先生の回答が数値であることを確かめてください"
};


/************************** conventions ****************************
/ None - 98
/ DK - 99
/ Other - 97
/ _num - for numbers
/ _per - for percents
********************************************************************/

function stopSurvey(lang)
{
   msgHandle = lang+"Confirm";

   if (confirm(Languages[msgHandle]))
   {
      document.survey.action = "./stopSurvey.pl";
      document.survey.submit();
   }
}

/*******************  function ckCompleteLanguage(lang,ret) *******************/
/* basic form checking                                                        */
/* validate other specify                                                     */
/* loosly validate None and DK for check boxes                                */
/* check isNumber for text box                                                */
/* check isPercent for text box                                               */
/* returns nohting.  submit form if the form is all filled out correctly.     */
/* ret=1, returns 1 or 0; ret=0 use as check complete, do not return anything */
/******************************************************************************/
function ckCompleteLanguage(lang,ret)
{
   var s = document.survey;
   var checks=0;              // count number of check boxes been checked
   var checkCk=0;
   var splitCheckboxName = '';
   var checkboxName = '';
   var radioName;
   var radios=0;              // count number of radio buttons been checked
   var radioCk=0;
   var finish=1;              // flag, if there is incorrect info in the form, this is set to 0
   var i;
   var msgHandle = '';

   var pat = /_sp$/;

   for (i=0; i< s.length && finish; i++)
   {
      // namename contains the name of the form array element[i]
      var namename = s.elements[i].name;

      // can not handle the case when the user enters white spaces
      if ((s.elements[i].type == 'text') || (s.elements[i].type == 'textarea'))
      {
         var pattern = /_os$|_sp$/;  //by convention other specify text box names end in 'os'
                                      //exclude other specify from text box completion check
         if ( !pattern.test(namename) )
         {
            if(s.elements[i].value == "" || s.elements[i].value == null)
            {
               msgHandle = lang+"Text";
              alert(Languages[msgHandle]);

              s.elements[i].focus();
             finish = 0;
            }
         }
      }// end text

      checks = 0;
      checkCk = 0;

      //need to check at least one
      if (s.elements[i].type == 'checkbox' && !pat.test(namename))
      {
         splitCheckboxName = '';
         checkboxName = '';

         checkCk=0;
         splitCheckboxName = s.elements[i].name.split(/\_/);  // splitCheckboxName[0] will hold the name
         checkboxName = splitCheckboxName[0];

         while(i < s.length && (s.elements[i].type == 'checkbox' || s.elements[i].type == 'text') && splitCheckboxName[0] == checkboxName )
         {
            if(s.elements[i++].checked)
            {
               checkCk=1;
               checks++;
            }

            if(i < s.length)
            {
               splitCheckboxName = s.elements[i].name.split(/\_/);  // splitCheckboxName[0] will hold the name
            }
         }

         i--;

         if( checkCk == 0)
         {
               msgHandle = lang+"Ck";
              alert(Languages[msgHandle]);
              s.elements[i].focus();
             finish = 0;
         }
      }// end checkboxes

      //only one needs to be checked
      if (s.elements[i].type == 'radio' && !pat.test(namename))
      {
         radioName = namename;
         radioCk=0;

         var n=0;
         for(n=0; n <s.length; n++)
         {
            if(s.elements[n].type == 'radio' && s.elements[n].name == namename && s.elements[n].checked)
            {
               radioCk=1;
               radios++;
            }
         }

         if(radioCk == 0)
         {
            msgHandle = lang+"Radio";
            alert(Languages[msgHandle]);
            s.elements[i].focus();
            finish = 0;
         }
      } // end radios

      if (s.elements[i].type == 'select-one')
      {
         if (s.elements[i].options[0].selected) // option is the default one says -- select one --
         {
            msgHandle = lang+"Dropdown";
            alert(Languages[msgHandle]);
            s.elements[i].focus();
            s.elements[i].selected();
            finish = 0;
         }
      }// end drop down selection
   }// end for loop

   if(finish)  //validate other specify
   {
      var j = 0;

      for (i=0; i< s.length && finish; i++)
      {
         // namename contains the name of the form array element[i]
         var namename = s.elements[i].name;

         // can not handle the case when the user enters white spaces
         if ((s.elements[i].type == 'text') || (s.elements[i].type == 'textarea'))
         {
            var pattern = /_os$/;  //by convention other specify text box names end in 'os'
            if ( pattern.test(namename) )   //there is other specify on the page
            {
               j = i;
               j--;

               if(s.elements[i].value == "" || s.elements[i].value == null)//text box empty
               {
                  if(s.elements[j].checked)
                  {
                     if(s.elements[j].type == "radio")     //for radio
                     {
                        msgHandle = lang+"OsRadioNoText";
                     }
                     else                             //for checkbox
                     {
                        msgHandle = lang+"OsCkNoText";
                     }

                     alert(Languages[msgHandle]);
                     s.elements[j].focus();
                     finish = 0;
                  }
               }
               else                    //text box filled
               {
                  if(!s.elements[j].checked) //not checked
                  {
                     if(s.elements[j].type == "radio")     //for radio
                     {
                        msgHandle = lang+"OsRadioNoRadio";
                     }
                     else                             //for checkbox
                     {
                        msgHandle = lang+"OsCkNoCk";
                     }

                     alert(Languages[msgHandle]);
                     s.elements[j].focus();
                     finish = 0;
                  }
               }//else s.elements[j].checked
            }//if pattern
         } //end if text
      }//end loop
   }//end if


   if(finish) //isNumber
   {
      for (i=0; i< s.length && finish; i++)
      {
         var namename = s.elements[i].name;

         if ((s.elements[i].type == 'text')  && s.elements[i].value != 'DK' && s.elements[i].value != 'dk')
         {
            var pattern = /_num$/;  //by convention number text box names end in 'num'

            if (pattern.test(namename) )
            {
               if(s.elements[i].value.match(/\D/) || s.elements[i].value == "" || s.elements[i].value == null || s.elements[i].value < 0)
               {
                  msgHandle = lang+"Num";
                  alert(Languages[msgHandle]);
                  s.elements[i].focus();
                  finish = 0;
               }
            }
         } // end text
      }
   }

   if(finish) //isPercent
   {
      for (i=0; i< s.length && finish; i++)
      {
         var namename = s.elements[i].name;

         if ((s.elements[i].type == 'text')  && s.elements[i].value != 'DK' && s.elements[i].value != 'dk')
         {
            var pattern = /_per$/;  //by convention percent number text box names end in 'per'

            if (pattern.test(namename) )
            {
              if(s.elements[i].value.match(/\D/) || s.elements[i].value == "" || s.elements[i].value == null || s.elements[i].value < 0  || s.elements[i].value > 100)
              {
                  msgHandle = lang+"Per";
                  alert(Languages[msgHandle]);
                  s.elements[i].focus();
                  finish = 0;
               }
            }
        } // end text
      }
   }

   if(finish) //isDero, number with decimal and 0
   {
      for (i=0; i< s.length && finish; i++)
      {
         var namename = s.elements[i].name;

         if ((s.elements[i].type == 'text')  && s.elements[i].value != 'DK' && s.elements[i].value != 'dk')
         {
            var pattern = /_dero$/;  //by convention number text box with decimals names end in 'dec'

            if (pattern.test(namename) )
            {
               if( !(s.elements[i].value.match(/^\d+(\.\d+)?$/)) || s.elements[i].value == "" || s.elements[i].value == null || s.elements[i].value < 0)
               {
                  msgHandle = lang+"Dero";
                  alert(Languages[msgHandle]);
                  s.elements[i].focus();
                  finish = 0;
               }
            }
        } // end text
      }
   }

   if(finish) //validate None (98) for check boxes
   {
      for (i=0; i< s.length && finish; i++)
      {
         // namename contains the name of the form array element[i]
         var namename = s.elements[i].name;
         var exceptionCkCounter = 0;
         var regularCkCounter = 0;

         checks = 0;
         checkCk = 0;

         //need to check at least one
         if (s.elements[i].type == 'checkbox')
         {
            splitCheckboxName = '';
            checkboxName = '';

            checkCk=0;
            splitCheckboxName = s.elements[i].name.split(/\_/);  // splitCheckboxName[0] will hold the name
            checkboxName = splitCheckboxName[0];

            while(i < s.length && (s.elements[i].type == 'checkbox' || s.elements[i].type == 'text') && splitCheckboxName[0] == checkboxName )
            {
               if(s.elements[i].checked)
               {
                  checkCk=1;
                  checks++;

                  if(s.elements[i].value == 98)
                  {
                     exceptionCkCounter++;
                  }
                  else
                  {
                     regularCkCounter++;
                  }
                }

                i++;

                if(i < s.length)
                {
                  splitCheckboxName = s.elements[i].name.split(/\_/);  // splitCheckboxName[0] will hold the name
                }
            }

            i--;

            if( exceptionCkCounter > 0 && regularCkCounter > 0)
            {
               msgHandle = lang+"None";
               alert(Languages[msgHandle]);
               s.elements[i].focus();
               finish = 0;
            }
       }// end checkboxes
     }// end for loop
   }//end if

   if(finish) //loosely validate DK (99) for Check boxes
   {
      for (i=0; i< s.length && finish; i++)
      {
         // namename contains the name of the form array element[i]
         var namename = s.elements[i].name;
         var exceptionCkCounter = 0;
         var regularCkCounter = 0;

         checks = 0;
         checkCk = 0;
          //need to check at least one
         if (s.elements[i].type == 'checkbox')
         {
            splitCheckboxName = '';
            checkboxName = '';

            checkCk=0;
            splitCheckboxName = s.elements[i].name.split(/\_/);  // splitCheckboxName[0] will hold the name
            checkboxName = splitCheckboxName[0];

            while(i < s.length && (s.elements[i].type == 'checkbox' || s.elements[i].type == 'text') && splitCheckboxName[0] == checkboxName )
            {
               if(s.elements[i].checked)
               {
                  checkCk=1;
                  checks++;

                  if(s.elements[i].value == 99)
                  {
                     exceptionCkCounter++;
                  }
                  else
                  {
                     regularCkCounter++;
                  }
               }

               i++;

               if(i < s.length)
               {
                  splitCheckboxName = s.elements[i].name.split(/\_/);  // splitCheckboxName[0] will hold the name
               }
            }

            i--;

            if( exceptionCkCounter > 0 && regularCkCounter > 0)
            {
               msgHandle = lang+"DK";
               alert(Languages[msgHandle]);
               s.elements[i].focus();
               finish = 0;
            }
         }// end checkboxes
      }// end for loop
   }//end if

   if(ret == 1)
   {
      return finish;
   }
   else
   {
      if (finish )
      {
         s.submit();
      }
   }
}

function ckCompleteAndSpeeder(lang,speederFlag,timeLen)
{
   var s = document.survey;
   var finish = ckCompleteLanguage(lang,1);

   if(finish)
   {
      if(speederFlag == 1)
      {
         var ctime=new Date();
         var diff=Math.floor( (ctime.getTime()-stime.getTime())/1000 );

         if(diff < timeLen)
         {
            alert("please spend a little more time on this page.");
            s.warned.value=1;
            finish = 0;
         }

         if(finish)
         {
            s.submit();
         }
     }
     else
     {
         s.submit();
     }
  }
}

/***************************  function rank(lang) ************************/
/* basic form checking                                                   */
/* validate ranking using drop down box                                  */
/* validate ranking using text box                                       */
/* validate ranking using radios                                         */
/* returns nohting.  submit form if the form is all filled out correctly.*/
/*************************************************************************/
function rank(lang,speederFlag,timeLen,varStart,minRank,maxRank,dataType)
{
   var finish = ckCompleteLanguage(lang,1);

   if(finish)
   {
      var s = document.survey;
      var ranks = new Array(maxRank+1);
      var i = 0;
      var j = 0;
      var k = 0;

      for(i=0; i < ranks.length; i++)
      {
            ranks[i] = 0;
      }

      if(dataType == "select one")
      {
         for (i=0; i< s.length; i++)
         {
            var namename = s.elements[i].name;

            if ( namename.match(varStart))
            {
               for(j=0; j<ranks.length; j++)
               {
                  if(s.elements[i].options[j].selected)
                  {  ranks[j]++;  }
               }
            }
         }
      }

      if(dataType == "text")
      {
         for (i=0; i< s.length && finish; i++)
         {
            var namename = s.elements[i].name;

            if ((s.elements[i].type == 'text')  && s.elements[i].value != 'DK' && s.elements[i].value != 'dk')
            {
               if(s.elements[i].value.match(/\D/) || s.elements[i].value == "" || s.elements[i].value == null || s.elements[i].value < 0)
               {
                  msgHandle = lang+"Num";
                  alert(Languages[msgHandle]);
                  s.elements[i].focus();
                  finish = 0;
               }
            }
         } // end for

         for (i=0; i< s.length; i++)
         {
            var namename = s.elements[i].name;

            if (namename.match(varStart))
            {
               if(s.elements[i].value > maxRank || s.elements[i].value < minRank)
               {
                  finish = 0;
                  break;
               }
               ranks[s.elements[i].value]++;
            }
         }
      }

      if(dataType == "radio")
      {
         //i=0 surveyID
         //i=1 uid
         //i=2 callPage
         //i=3 priorPage
         //i=4 first of first radio row
         //i=10 first of second radio row
         //for example, checked from left to right, so
         //i are:                3  11 19 27 35 43 50
         //rank should be:  1 2    3      4     5     6     6

         for(i=0; i< s.length; i++)
         {
            if(s.elements[i].type == "radio" && s.elements[i].checked)
            {
               k = (i-4)%maxRank+1;
               ranks[k]++;
            }
         }
      }

      if(finish)
      {
         for(k=0; k<ranks.length; k++)
         {
            if(ranks[k] > 1)
            {
               finish = 0;
               break;
            }
         }
      }

      if( finish )
      {
         if(speederFlag == 1)
         {
            var ctime=new Date();
            var diff=Math.floor( (ctime.getTime()-stime.getTime())/1000 );

            if(diff < timeLen)
            {
               alert("please spend a little more time on this page.");
               finish = 0;
            }

            if(finish)
            {
               s.submit();
            }
         }
         else
         {
            s.submit();
         }
      }
      else
      {
         msgHandle = lang+"Rank";
         alert(Languages[msgHandle]);
      }
   }
}

/***************************  function rate(lang) ************************/
/* basic form checking                                                   */
/* validate ranting using text box                                       */
/* returns nohting.  submit form if the form is all filled out correctly.*/
/*************************************************************************/
function rate(lang,speederFlag,timeLen,varStart,minRate,maxRate)
{
   var finish = ckCompleteLanguage(lang,1);
   var s = document.survey;

   if(finish)
   {
      for (var i=0; i< s.length; i++)
      {
         var namename = s.elements[i].name;

         if (s.elements[i].type == "text" && namename.match(varStart))
         {
            if(s.elements[i].value < minRate || s.elements[i].value > maxRate )
            {
               finish = 0;
               break;
            }
         }
      }
   }

   if( finish )
   {
      if(speederFlag == 1)
      {
         var ctime=new Date();
         var diff=Math.floor( (ctime.getTime()-stime.getTime())/1000 );

         if(diff < timeLen)
         {
            alert("please spend a little more time on this page.");
            finish = 0;
         }

         if(finish)
         {
            s.submit();
         }
       }
       else
       {
            s.submit();
       }
   }
   else
   {
            msgHandle = lang+"Rate";
           alert(Languages[msgHandle]);
   }
}

//RateTriple($language,"p03101","p03102","p03103",1,5);
function rateTriple(lang,speederFlag,timeLen,varStart1,varStart2,varStart3,minRate,maxRate)
{
   var finish = ckCompleteLanguageReturns(lang,1);
   var s = document.survey;

   if(finish)
   {
      for (var i=0; i< s.length; i++)
      {
         var namename = s.elements[i].name;

         if (s.elements[i].type == "text" && (namename.match(varStart1) || namename.match(varStart2) || namename.match(varStart3)))
         {
            if(s.elements[i].value < minRate || s.elements[i].value > maxRate )
            {
               finish = 0;
               break;
            }
         }
      }
   }

   if( finish )
   {
      if(speederFlag == 1)
      {
         var ctime=new Date();
         var diff=Math.floor( (ctime.getTime()-stime.getTime())/1000 );

         if(diff < timeLen)
         {
            alert("please spend a little more time on this page.");
            finish = 0;
         }

         if(finish)
         {
            s.submit();
         }
      }
      else
      {
         s.submit();
      }
   }
   else
   {
      msgHandle = lang+"Rate";
      alert(Languages[msgHandle]);
   }
}

function is100(lang,speederFlag,timeLen,varName)
{
   var s = document.survey;
   var i;
   var msgHandle = '';
   var finish = 1;

   if( ckCompleteLanguage(lang,1) == 1)
   {
      for (i=0; i< s.length && finish; i++)
      {
         var namename = s.elements[i].name;

          if ((s.elements[i].type == 'text'))
          {
            if(namename.match(varName))
            {
               if(s.elements[i].value != 100)
               {
                  finish = 0;
                  msgHandle = lang+"Sum100";
                  alert(Languages[msgHandle]);
               }
            }
          }
      }
   }
   else
   {
      finish = 0;
   }

   if(finish)
   {
      if(speederFlag == 1)
      {
         var ctime=new Date();
         var diff=Math.floor( (ctime.getTime()-stime.getTime())/1000 );

         if(diff < timeLen)
         {
            alert("please spend a little more time on this page.");
            finish = 0;
         }

         if(finish)
         {
            s.submit();
         }
      }
      else
      {
            s.submit();
      }
   }
}


/////////////////////////// for slide timer /////////////////////////

function stimer(lang)
{
   var s = document.survey;
   var timeLen = 5;
   var finish = 1;

   var ctime=new Date();

   var diff=Math.floor( (ctime.getTime()-stime.getTime())/1000 );

   if(diff < timeLen)
   {
      alert("please spend a little more time on this page.");
      finish = 0;
   }

   if(finish)
   {
      s.submit();
   }
}

function correlationOld(lang,speederFlag,timeLen,len,varaStart,varbStart,maxR)  //innosight Citrix project as an example
{
   var finish = ckCompleteLanguage(lang,1);
   var s = document.survey;

   var colAval = 0;
   var colBval = 0;
   var sumA = 0.0;
   var sumB = 0.0;
   var avgA = 0.0;
   var avgB = 0.0;
   var sumCov = 0.0; //Sum((x-xBar)(y-yBar)
   var sumSx = 0.0;  //Sum(sqare(x-xBar))
   var sumSy = 0.0;  //Sum(sqare(y-yBar))
   var Cov = 0.0;
   var Sx = 0.0;
   var Sy = 0.0;
   var correlation = 0.0;

   var arA = new Array(len);
   var arB = new Array(len);

    if(finish)
    {
        var indiA = 0;
        var indiB = 0;

        for (var i=0; i< s.length;)
        {
            var namename = s.elements[i].name;

            if (namename.match(varaStart))
            {
               var s1 = eval("document.survey."+namename);
               for(var j=0; j<s1.length; j++)
               {
                    if(s1[j].checked) colAval = j+1;
               }
               sumA = sumA+colAval;
                      arA[indiA++] = colAval;
               i=i+5;
            }
            else
            {
                i++;
            }

            namename = s.elements[i].name;

            if (namename.match(varbStart))
            {
               var s2 = eval("document.survey."+namename);
               for(var j=0; j<s2.length; j++)
               {
                    if(s2[j].checked) colBval = j+1;
               }
               sumB = sumB+colBval;
                      arB[indiB++] = colBval;
               i=i+5;
            }
            else
            {
                i++;
            }
        }

        avgA = sumA/len;
        avgB = sumB/len;

        for(var i=0; i < len; i++)
        {
            sumCov = sumCov+(arA[i]-avgA)*(arB[i]-avgB);
            sumSx = sumSx + Math.pow((arA[i]-avgA),2);
            sumSy = sumSy + Math.pow((arB[i]-avgB),2);
        }

        Cov = sumCov/(len-1);
        Sx = Math.sqrt(sumSx/(len-1));
        Sy = Math.sqrt(sumSy/(len-1));

        correlation = Cov/(Sx*Sy);

        if(correlation > maxR || Sx == 0 || Sy == 0 )
        {
            finish=0;
        }

        if( finish )
        {
            if(speederFlag == 1)
            {
                var ctime=new Date();
                var diff=Math.floor( (ctime.getTime()-stime.getTime())/1000 );

                if(diff < timeLen)
                {
                   alert("please spend a little more time on this page.");
                   finish = 0;
                }

                if(finish)
                {
                   s.submit();
                }
            }
            else
            {
               s.submit();
            }
        }
        else
        {
            msgHandle = lang+"Co";

            if (confirm(Languages[msgHandle]))
            {
                s.submit();
            }//if
        }//else
    }//if
}//function

//Citrix DM project as an example, Jan, 2008
//correlation(language, speeder Flag, time should spend on this page, number of rows,first column var start with,2nd column var start with,max ratio,rating scale length,first radio start at,number of columns)
function correlation(lang,speederFlag,timeLen,len,varaStart,varbStart,maxR,scaleLen,fr,nofcols)  //innosight Citrix project as an example
{
   var finish = 1;  // ckCompleteLanguage(lang,1);  --- check for radio selection as we parse the table for the data values
   var s = document.survey;

   var colAval = 0;
   var colBval = 0;
   var sumA = 0.0;
   var sumB = 0.0;
   var avgA = 0.0;
   var avgB = 0.0;
   var sumCov = 0.0; //Sum((x-xBar)(y-yBar)
   var sumSx = 0.0;  //Sum(sqare(x-xBar))
   var sumSy = 0.0;  //Sum(sqare(y-yBar))
   var Cov = 0.0;
   var Sx = 0.0;
   var Sy = 0.0;
   var correlation = 0.0;

   var arA = new Array(len);
   var arB = new Array(len);

   if(finish)
   {
         var indiA = 0;
         var indiB = 0;
         var firstradio = fr;
         var lastradio = fr+scaleLen*nofcols*(len-1);

         for (var i=firstradio; i< lastradio && finish; i=i+1*scaleLen)  // go through the loop row by row
         {
               var foundARadio = 0;
               var foundBRadio = 0;

               var namename = s.elements[i].name;

               var s1 = eval("document.survey."+namename);

               for(var j=0; j<s1.length; j++)
               {
                    if(s1[j].checked)
                    {
                       colAval = j+1;
                       foundARadio = 1;
                    }
               }
               if (!foundARadio)
               {
                  finish = 0;
                  // break;
               }

               sumA = sumA+colAval;
               arA[indiA++] = colAval;

               i=i+1*scaleLen;

               namename = s.elements[i].name;

               var s2 = eval("document.survey."+namename);

               for(var j=0; j<s2.length; j++)
               {
                    if(s2[j].checked)
                    {
                       colBval = j+1;
                       foundBRadio = 1;
                    }
               }
               if (!foundBRadio)
               {
                  finish = 0;
                  // break;
               }

               sumB = sumB+colBval;
               arB[indiB++] = colBval;
         }

         if( !finish ) // a radio group was not checked somewhere
         {
             msgHandle = lang+"Radio";
             alert(Languages[msgHandle]);
             s.elements[i].focus();
         }
         else  // calc the corr stuff
         {
             avgA = sumA/len;

             avgB = sumB/len;

            for(var i=0; i < len; i++)
            {
               sumCov = sumCov+(arA[i]-avgA)*(arB[i]-avgB);
               sumSx = sumSx + Math.pow((arA[i]-avgA),2);
               sumSy = sumSy + Math.pow((arB[i]-avgB),2);
            }

            Cov = sumCov/(len-1);
            Sx = Math.sqrt(sumSx/(len-1));
            Sy = Math.sqrt(sumSy/(len-1));

            correlation = Cov/(Sx*Sy);

            if(correlation > maxR || Sx == 0 || Sy == 0 )
            {
                  finish=0;
            }

            if( finish )
            {
               if(speederFlag == 1)
               {
                   var ctime=new Date();
                   var diff=Math.floor( (ctime.getTime()-stime.getTime())/1000 );

                   if(diff < timeLen)
                   {
                      alert("please spend a little more time on this page.");
                      finish = 0;
                   }

                   if(finish)
                   {
                      s.submit();
                   }
               }
               else
               {
                  s.submit();
               }
            }
            else
            {
                msgHandle = lang+"Co";
                if (confirm(Languages[msgHandle]))
                {
                   s.submit();
                 }//if
            }//else
         }//else
    }//if
}//function

//sd(language, speeder Flag, time should spend on this page, number of rows,first column var start with,max standard deviation,rating scale length,first radio start at)
function sd(lang,speederFlag,timeLen,len,varaStart,maxSD,scaleLen,fr)  //innosight Citrix project as an example
{
   var finish = 1;  // ckCompleteLanguage(lang,1);  --- check for radio selection as we parse the table for the data values
   var s = document.survey;

   var colAval = 0;
   var sumA = 0.0;
   var avgA = 0.0;
   var sumSx = 0.0;  //Sum(sqare(x-xBar))
   var Sx = 0.0;

   var arA = new Array(len);

   if(finish)
   {
        var indiA = 0;
        var firstradio = fr;
        var lastradio = fr+scaleLen*(len-1);

         for (var i=firstradio; i<= lastradio && finish; i=i+1*scaleLen)  // go through the loop row by row
         {
               var foundARadio = 0;
               var namename = s.elements[i].name;
               var s1 = eval("document.survey."+namename);
               for(var j=0; j<s1.length; j++)
               {
                    if(s1[j].checked)
                    {
                       colAval = j+1;
                       foundARadio = 1;
                    }
               }
               if (!foundARadio)
               {
                  finish = 0;
                  // break;
               }

               sumA = sumA+colAval;
               arA[indiA++] = colAval;
         }

         if( !finish ) // a radio group was not checked somewhere
         {
             alert("Please answer the question.");
         }
         else  // calc the corr stuff
         {
            avgA = sumA/len;

            for(var i=0; i < len; i++)
            {
               sumSx = sumSx + Math.pow((arA[i]-avgA),2);
            }

            Sx = Math.sqrt(sumSx/(len-1));

            if(Sx < maxSD )
            {
                  finish=0;
            }

            if( finish )
            {
               if(speederFlag == 1)
               {
                   var ctime=new Date();
                   var diff=Math.floor( (ctime.getTime()-stime.getTime())/1000 );

                   if(diff < timeLen)
                   {
                      alert("please spend a little more time on this page.");
                      finish = 0;
                   }

                   if(finish)
                   {
                      s.submit();
                   }
               }
               else
               {
                  s.submit();
               }
            }
            else
            {
                if (confirm("Your ratings for these items have little variation.  Is this your intent?  We greatly value your input and want to make sure that you are taking the survey carefully. Please confirm that this is how you wish to respond. Click 'OK' to continue, Click 'CANCEL' to adjust your answers."))
                {
                   s.submit();
                }//if
            }//else
         }//else
    }//if
}//function

function noCk()
{
  var s = document.survey;
  s.submit();
}

function submit()
{
  var s = document.start;
  s.submit();
}

/********************************** Rollover Effects ********************************/
var arrayOfRolloverClasses = new Array();
var arrayOfClickClasses = new Array();
var activeRow = false;
var activeRowClickArray = new Array();

   function highlightTableRow()
   {
      var tableObj = this.parentNode;
      if(tableObj.tagName!='TABLE')tableObj = tableObj.parentNode;

      if(this!=activeRow){
         this.setAttribute('origCl',this.className);
         this.origCl = this.className;
      }
      this.className = arrayOfRolloverClasses[tableObj.id];

      activeRow = this;

   }

   function clickOnTableRow()
   {
      var tableObj = this.parentNode;
      if(tableObj.tagName!='TABLE')tableObj = tableObj.parentNode;

      if(activeRowClickArray[tableObj.id] && this!=activeRowClickArray[tableObj.id]){
         activeRowClickArray[tableObj.id].className='';
      }
      this.className = arrayOfClickClasses[tableObj.id];

      activeRowClickArray[tableObj.id] = this;

   }

   function resetRowStyle()
   {
      var tableObj = this.parentNode;
      if(tableObj.tagName!='TABLE')tableObj = tableObj.parentNode;

      if(activeRowClickArray[tableObj.id] && this==activeRowClickArray[tableObj.id]){
         this.className = arrayOfClickClasses[tableObj.id];
         return;
      }

      var origCl = this.getAttribute('origCl');
      if(!origCl)origCl = this.origCl;
      this.className=origCl;

   }

   function addTableRolloverEffect(tableId,whichClass,whichClassOnClick)
   {
      arrayOfRolloverClasses[tableId] = whichClass;
      arrayOfClickClasses[tableId] = whichClassOnClick;

      var tableObj = document.getElementById(tableId);
     /* var tBody = tableObj.getElementsByTagName('TBODY');

      if(tBody){
         var rows = tBody[0].getElementsByTagName('TR');
      }else{
*/
       var rows = tableObj.getElementsByTagName('TR');
//      }

      for(var no=0;no<rows.length;no++){
         rows[no].onmouseover = highlightTableRow;
         rows[no].onmouseout = resetRowStyle;

         //if(whichClassOnClick){
         //   rows[no].onclick = clickOnTableRow;
         //}
      }

   }
/********************************** Rollover Effects Ends ********************************/

function submitThenClose()
{
  var s = document.start;
  s.submit();
  window.close();
}

//-->



