// Bob Willson
// 14th December 2005
spec=new Array(16);
for (i=0;i<16;i++) {
  spec[i]="";
  }
var add_text="";      
function clearinput() {  var i;  for (i=0;i<document.forms.length;i++) {
    document.forms[i].reset();
    }  }

function nextpage(href,string) {
 location.href = href + '?' + string;
 }
//</head><body>
//<a href="javascript:nextpage('apage.html',MyName);">Next Page</a>
//</body></html>
// From Evolt article by Peter-Paul Koch - contribution by tarquinwj 13-06-02
/* works with IE 4+, NS4, NS6 and other Gecko, OmniWeb, Opera (4) 5+,
iCab, IceBrowser, Esape 4, HotJava 3, Konqueror and, as long as they
follow the standards, loads more */
function findCoords(e) {
   var posX = 0, posY = 0;
   if( !e ) { e = window.event; } if( !e ) { return [ 0, 0 ]; }
   if( typeof( e.pageX ) == 'number' ) {
      posX = e.pageX; posY = e.pageY;
   } else {
      if( typeof( e.clientX ) == 'number' ) {
         posX = e.clientX; posY = e.clientY;
         if( document.body && ( document.body.scrollTop || document.body.scrollLeft ) && !( window.opera || window.debug || navigator.vendor == 'KDE' ) ) {
               posX += document.body.scrollLeft; posY += document.body.scrollTop;
         }  else {
            if( document.documentElement && ( document.documentElement.scrollTop || document.documentElement.scrollLeft ) && !( window.opera || window.debug || navigator.vendor == 'KDE' ) ) {
               posX += document.documentElement.scrollLeft; posY += document.documentElement.scrollTop;
            }
         }
      }
   }
   return [ posX, posY ];
}

// findPosX and findPosy from Find Position section of Peter-Paul Koch 5-08-02
function findPosX(obj){
  var curleft = 0;
  if (document.getElementById || document.all){
    while (obj.offsetParent){
      curleft += obj.offsetLeft;
      obj = obj.offsetParent;
      }
    }
  else if (document.layers){
    curleft += obj.x;
    }
  return curleft;
  }

function findPosY(obj) {
  var curtop = 0;
  if (document.getElementById || document.all) {
    while (obj.offsetParent) {
      curtop += obj.offsetTop;
      obj = obj.offsetParent;
      }
    }
  else if (document.layers) {
    curtop += obj.y;
    }
  return curtop;
  }
  
function str_real(num,fieldw,places) {   var result;  result=num.toString();  if (result.indexOf(".")==-1) {
    result+=".000000000000";
    }
  else {
    result+="000000000000";
    }
  result=result.substring(0,result.indexOf(".")+places+1);
  if (places==0) {
    result=result.substring(0,result.indexOf("."));
    }
  while (result.length<fieldw) {
    result=" "+result;
    }
  return result;
  }
      
function allAnswered() {
  var missed="";
  var nmiss=0;
  var i;
  var j;
  var qn=1;
  for (i=0;i<document.forms.length;i++) {
    for (j=1;typeof(eval("document.forms[i].q"+qn))!="undefined";j++) {
      if (eval("document.forms[i].q"+qn+".value=='' ||"
          +"document.forms[i].q"+qn+".value==null")) {        nmiss++;        missed+=" q"+qn;        if (nmiss > 4) {
          alert("You seem to have missed answering "+missed
                +". You must complete the questionnaire by making a "
                +"response to every item.");
          return false;
          }        }      qn++;
      }
    }     
  if (nmiss > 0) {
    alert("You seem to have missed answering question(s) "+missed
          +". You must complete the questionnaire by making a "
          +"response to every item.");
    return false;
    }  return true;  
  }


// Shuffle function
function shuffle(len) {  var i;  var j;  var tmp;
  for (i=1; i<=len; i++) {
    idx[i]=i;
    }
  for (i=len; i>1; i--) {
    j=0;
    while (j<1) {
      j=Math.round(Math.random()*i-0.5);
      }
    tmp=idx[i];
    idx[i]=idx[j];
    idx[j]=tmp;
    }
  }

// get some text function - gets a generally short string for fixed format
function gettext(qnumber, len, qstatement) {
  document.write("<tr valign=top>"
    +"<td><b><big>",qnumber,".</big></b></td>"
    +"<td colspan=5>",qstatement,"</td></tr>"
    +"<tr valign=top>"
    +"<td></td>"
    +"<td> <input type='TEXT' name=q",
    qnumber," size=",len," maxlength=",len,">"
    +" </td></tr>");
    document.write("</tr><tr valign=top><td> <br></td><td></td></tr>");  }

// get long unstructured text function for return at end of results
function getlongtext(qnumber, len, qstatement) {
  document.write("<tr valign=top>"
    +"<td><b><big>",qnumber,".</big></b></td>"
    +"<td colspan=5>",qstatement,"</td></tr>"
    +"<tr valign=top>"
    +"<td></td>"
    +"<td><input type='HIDDEN' name=q",qnumber," value='0'>"    +"<input type='TEXT' name=qtext",qnumber," size=",len," maxlength=",len,     " onChange='add_text+=\" Q",qnumber,"_\"+this.value; this.form.q",qnumber,".value=\"1\"'>"
    +" </td></tr>");    document.write("</tr><tr valign=top><td> <br></td><td></td></tr>");  }
// get a number function
function getnum(qnumber, lo, hi, qstatement) {
  var len;
  len=(hi.toString()).length;
  document.write("<tr valign=top>"
    +"<td><b><big>",qnumber,".</big></b></td>"    +"<input type='HIDDEN' name=q",qnumber," value=''>"  
    +"<td colspan=5>",qstatement,"</td></tr>"
    +"<tr valign=top>"
    +"<td></td>"
    +"<td><input type='TEXT' name=qtext",
    qnumber," size=",len," maxlength=",len,
    " onchange='valcheck(this,",lo,",",hi,");"    +" this.form.q",qnumber,".value=this.form.qtext",qnumber,".value'>"
    +"</td></tr>");    document.write("</tr><tr valign=top><td> <br></td><td></td></tr>");  }

// check that a number is in range
function valcheck(item,min,max) {
  if ((parseInt(item.value) < min) || (parseInt(item.value) > max)) {
    alert("Please enter a number in the range " + min + " to " + max);
    item.value="";
    }
  }

// get some text from a textarea function
function gettextarea(qnumber, nrows, ncols, qstatement) {
  document.write("<tr valign=top>"
    +"<td><b><big>",qnumber,".</big></b></td>"
    +"<td colspan=5>",qstatement,"</td></tr>"
    +"<tr valign=top>"
    +"<td></td>"
    +"<td><input type='HIDDEN' name=q",qnumber," value='0'>"    +"<textarea name=qtext",qnumber," rows=",nrows," cols=",ncols,
    " onChange='add_text+=\" Q",qnumber,"_\"+this.value; this.form.q",qnumber,".value=\"1\"'>"
    +"</textarea></td></tr>");    document.write("</tr><tr valign=top><td> <br></td><td></td></tr>");  }
// Horizontal alternatives function
// Now deals with up to 10 alternatives. Column widths may need tuning.
function horalt(qnumber, qstatement, alt1, alt2, alt3, alt4,
                alt5, alt6, alt7, alt8, alt9, alt10, alt11, alt12) {
  var i;
  var nalt;
  var alt;
  colwidth=new Array(90,90,20,15,15,15,14,13,11,10,9,8,7);
  document.write("<tr valign=top>"
    +"<td><b><big>",qnumber,".</big></b></td>"
    +"<td colspan=12>",qstatement,"</td></tr>"
    +"<tr valign=top nowrap>"
    +"<td width=4%></td>");
  nalt=0;
  for (i=1; i<=12; i++) {
    eval("alt=alt"+i);
    if (alt!=null) { 
      nalt++;
      }
    }  document.write("<input type='HIDDEN' name=q"+qnumber+" value=''>");  
  for (i=1; i<=12; i++) {
    eval("alt=alt"+i);
    if (alt!=null) {      eval("document.write(\"<td width="+colwidth[nalt]+"% align=center nowrap>"
        +"<input type=\'RADIO\' name=rq"+qnumber
        +" onClick=\'this.form.q"+qnumber+".value="+i+"\'><br>"+alt+"</td>\")");
      }
    }  
  document.write("</tr><tr valign=top><td> <br></td><td></td></tr>");  }
// Multipoint rating function
function rate(qnumber, qstatement, alt1, alt2, npoints) {
  var i;
  document.write("<tr valign=top>"
    +"<td><b><big>",qnumber,".</big></b></td>"
    +"<td colspan=13>",qstatement,"</td></tr>"
    +"<tr valign=top nowrap>"
    +"<td width=4%></td>"
    +"<td width=15% align=right nowrap>", alt1, "</td>");  document.write("<input type='HIDDEN' name=q"+qnumber+" value=''>");  
  for (i=1; i<=npoints; i++) {
    eval("document.write(\"<td width=5% align=center nowrap>"
      +"<input type=\'RADIO\' name=rq"+qnumber
      +" onClick=\'this.form.q"+qnumber+".value="+i+"\'></td>\")");
    }
  document.write("<td width=15% align=left nowrap>", alt2, "</td>"
    +"</tr><tr> </tr>");  document.write("<tr valign=top><td> <br></td><td></td></tr>");
  }

// Vertical alternatives function
// Now deals with up to 15 alternatives.
function vertalt(qnumber, qstatement, alt1, alt2, alt3,
                 alt4, alt5, alt6, alt7, alt8, alt9, alt10, alt11, alt12,
                 alt13, alt14, alt15) {
  var i;
  var alt;
  document.write("<tr valign=top>"
    +"<td><b><big>",qnumber,".</big></b></td>");  if (qstatement!="") {
    document.write("<td colspan=13>",qstatement,"</td></tr>");
    }  document.write("<input type='HIDDEN' name=q"+qnumber+" value=''>");  
  for (i=1; i<=15; i++) {
    eval("alt=alt"+i);    if (alt!=null) { 
      if ((qstatement!="")||(i>1)) {        document.write("<tr valign=top><td></td>");        }//      eval("document.write(\"<td><input type=\'RADIO\' name=rq"+qnumber
//        +" onClick=\'this.form.q"+qnumber+".value="+i+"+this.form.q"+qnumber+".value.substr(1)\'>"//        +alt+spec[i]+"</td></tr>\")");
        document.write("<td><input type=\'RADIO\' name=rq",qnumber,
        " onClick=\'this.form.q",qnumber,".value=",i,"+this.form.q",qnumber,".value.substr(1)\'>",        alt,spec[i],"</td></tr>");
      }    spec[i]="";    }  
  document.write("<tr valign=top><td> <br></td><td></td></tr>");
  }// Alter a vertical alternative to include an "Other - please specify: "
function specify(qnumber, altno, len) {
  spec[altno]="&nbsp;<input type='TEXT' name=q"+qnumber+"alt"+altno+" size="+len+" maxlength="+len
              +" onChange='this.form.q"+qnumber+".value="+altno+"+this.value;"              +" this.form.rq"+qnumber+"["+(altno-1)+"].checked=true'>";
  }
// Alter a vertical alternative to include an "Other - please specify: "
function elaborate(qnumber, altno, len) {  spec[altno]="&nbsp;<input type='TEXT' name=q"+qnumber+"alt"+altno+" size="+len+" maxlength="+len
              +" onChange='this.form.q"+qnumber+".value="+altno+";"              +" this.form.rq"+qnumber+"["+(altno-1)+"].checked=true;"
              +" add_text+=\" Q"+qnumber+"."+altno+"_\"+this.value'>";  }

//              +" onChange='this.form.q"+qnumber+".value=this.form.q"+qnumber+".value.substr(0,"+(altno-1)+")"//              +"+(this.checked ? 1 : 0)+this.form.q"+qnumber+".value.substr("+altno+")+this.value;"//              +" onChange='this.form.q"+qnumber+".value="+altno+"+this.value;"// Vertical options function
// Now deals with up to 15 options (checkboxes).
function vertopt(qnumber, qstatement, opt1, opt2, opt3,
                 opt4, opt5, opt6, opt7, opt8, opt9, opt10, opt11, opt12,
                 opt13, opt14, opt15) {
  var i;  var j;  var opt;  var str='';  document.write("<tr valign=top>"
    +"<td><b><big>",qnumber,".</big></b></td>"
    +"<td colspan=13>",qstatement,"</td></tr>");  for (i=1; i<=15; i++) {
    eval("opt=opt"+i);    if (opt==null) {      break;      }
    else {
      str=str.concat("0");
      }    }
  document.write("<input type='HIDDEN' name=q"+qnumber+" value='",str,"'>");  
// eval("document.write(\"<input type='HIDDEN' name=q"+qnumber+" value="+str+">\")");  
  for (i=1; i<=15; i++) {    j=i-1;    eval("opt=opt"+i);    if (opt!=null) { 
//      eval("document.write(\"<tr valign=top><td></td>"
//        +"<td><input type=\'CHECKBOX\' name=rq"+qnumber
//        +" onClick=\'this.form.q"+qnumber+".value=this.form.q"+qnumber+".value.substr(0,"+j+")"//        +"+(this.checked ? 1 : 0)+this.form.q"+qnumber+".value.substr("+i+")\'>"+opt+spec[i]+"</td></tr>\")");
      document.write("<tr valign=top><td></td>"
        +"<td><input type=\'CHECKBOX\' name=rq",qnumber,
        " onClick=\'this.form.q",qnumber,".value=this.form.q",qnumber,".value.substr(0,",j,")"        +"+(this.checked ? 1 : 0)+this.form.q",qnumber,".value.substr(",i,")\'>",opt,spec[i],"</td></tr>");
      }
    spec[i]="";    }  
  document.write("<tr valign=top><td> <br></td><td></td></tr>");
  }

// Alter a vertical option to include an "Other - please specify: "
function specifyopt(qnumber, altno, len) {
  spec[altno]="&nbsp;<input type='TEXT' name=q"+qnumber+"alt"+altno+" size="+len+" maxlength="+len
              +" onChange='this.form.q"+qnumber+".value=this.form.q"+qnumber+".value.substr(0,"+(altno-1)+")"              +"+1+this.form.q"+qnumber+".value.substr("+altno+")+this.value;"              +" this.form.rq"+qnumber+"["+(altno-1)+"].checked=true'>";
  }

function elaborateopt(qnumber, altno, len) {  spec[altno]="&nbsp;<input type='TEXT' name=q"+qnumber+"alt"+altno+" size="+len+" maxlength="+len
              +" onChange='this.form.q"+qnumber+".value=this.form.q"+qnumber+".value.substr(0,"+(altno-1)+")"              +"+1+this.form.q"+qnumber+".value.substr("+altno+");"              +" this.form.rq"+qnumber+"["+(altno-1)+"].checked=true;"
              +" add_text+=\" Q"+qnumber+"."+altno+"_\"+this.value'>";
  }
function showtick(link, quest, tidx, e) {
  coords=new Array(2);
  var linex;
  var liney;
  var offset;
  var num;  coords=findCoords(e);
  linex=findPosX(link);
  liney=findPosY(link);
  num=Math.round((coords[0]-linex)/4);
  quest.value=num.toString();
  while (quest.value.length<3) {
    quest.value=" "+quest.value;
    }
//  alert("score "+quest.value);
  offset=bw.ns4? -9: bw.ns6? 0: bw.ie? 0:0;   qline_obj[tidx].moveIt(coords[0]-2,liney+offset);
  qline_obj[tidx].css.visibility='visible';  }

// mark a tick on a line function
function markline(formno, qnumber, tidx, alt1, alt2, qstatement) {
  document.write("<tr valign=top>"
    +"<td width=50><b><big>",qnumber,".</big></b></td>");
  if (qstatement!=null) {    document.write("<td colspan=13>",qstatement,"</td></tr>"
      +"<tr valign=top nowrap>"
      +"<td width=50></td>");    }  document.write("<td width='200'align=center>",alt1,"</td>"
    +"<td width='400' height='10'>"
    +"<input type='HIDDEN' name=q",qnumber," value=''>"    +"<a href='javascript:void(0)' name=q",qnumber,"ref"
    +" onClick='showtick(this,document.form",formno,".q",qnumber,",",tidx,",event)'>"
    +"<div><img src='graphics/3w3b3w.gif' width='400' height=9 border='0'></div>"
    +"<img src='graphics/line1.gif' width='1' height='0' border='0'></a></td>"
    +"<td width='200'align=center>",alt2,"</td>"
    +"</tr>");
  }

// construct sufficient hidden tick objects
function maketick(qnumber, nticks) {
  for (i=0; i<nticks; i++) {
    document.write("<div id='q",qnumber+i,"tick'"
    +" style=\"position:absolute; top:0; left:200; visibility:hidden\">"
    +"<img src='graphics/line1.gif' height='20' width='3'></div>");    tick="q"+(qnumber+i)+"tick";
    qline_obj[i]=new lib_obj(tick);    }
  }
