// js4.js
var sAuto="";
function CW_PageHasLoaded() {

 if (eval(document.forms[0].CW_qasked)) {
   return true;
 } else {
   alert('Please wait until the page has loaded fully.');
   return false;
 }
}

function CW_SafeSubmit(oForm) {
  if (CW_PageHasLoaded()) {
    oForm.submit();
  }
}

function VMultiJS(oCbx,nMax) {
  var nCpt=0;
  var i=0;
  var bRet=true;
  var oCur=null;

  if(nMax==1) {
    var j=0;
    if(oCbx.checked===true) { j=1; }
    for(i=0;i<oCbx.form.elements.length;i++) {
      oCur=oCbx.form.elements[i];
      if((oCur.type=="checkbox") && (oCur.name==oCbx.name)) { oCur.checked=false; }
    }
    if(j==1) { oCbx.checked=true; }
  }
  else {
    for(i=0;i<oCbx.form.elements.length;i++) {
      oCur=oCbx.form.elements[i];
      if((oCur.type=="checkbox") && (oCur.name==oCbx.name)) {
        if(oCur.checked) {
          nCpt++;
          if(nCpt>nMax) { bRet=false; break; }
        }
      }
    }
    if(!bRet) {
      //alert(unescape("You cannot choose more than "+nMax+" items..."));
      oCbx.checked=false;
    }
  }
  return(bRet);
}

function VMultiJQ(oCbx,nMax) {
  var $o=$(oCbx);
  var bRet=true;

  if(nMax==1) {
    var b=$o.is(':checked');
    $("input:checkbox[name='"+$o.attr('name')+"']").removeAttr('checked');
    if(b) { $o.attr('checked','checked'); }
  }
  else {
    var nCpt=$("input:checkbox:checked[name='"+$o.attr('name')+"']").length;
    if(nCpt>nMax) {
      bRet=false;
      $o.removeAttr('checked');
    }
  }

  return(bRet);
}

function VMulti(oCbx,nMax) {
  if(typeof jQuery != "undefined") { return VMultiJQ(oCbx,nMax); }
  else { return VMultiJS(oCbx,nMax); }
}

function VFloat(sSrc) {
  var sBrw=navigator.appName.toUpperCase();
  var nVer=parseFloat(navigator.appVersion);
  var bOk=(((sBrw.substring(0,8)=="NETSCAPE") && (nVer>=2.02)) || ((sBrw.substring(0,9)=="MICROSOFT") && (nVer>=3)));
  var sRet="";
  var n=0;

  if(bOk) {
    for(var i=0;i<sSrc.length;i++) {
      var c=sSrc.charAt(i);
      if((c==".") || (c==",")) { 
        if (sRet=="") { sRet="0."; } else { if (n===0) { sRet+="."; } }
        n++;
      } else {
        if ((sRet=="") && (c=="-")) { sRet="-"; }
        else { if("0123456789".indexOf(c)!=-1) { sRet+=c; } }
      }
    }
    if (sRet.length >=1) {
      if (sRet.charAt(sRet.length-1)==".") { sRet=sRet.substring(0,sRet.length-1); }
    }
  }
  else { sRet=sSrc; }
  return(sRet);
}

function VNum(sSrc) {
  var sBrw=navigator.appName.toUpperCase();
  var nVer=parseFloat(navigator.appVersion);
  var bOk=(((sBrw.substring(0,8)=="NETSCAPE") && (nVer>=2.02)) || ((sBrw.substring(0,9)=="MICROSOFT") && (nVer>=3)));
  var sRet="";

  if(bOk) {
    for(var i=0;i<sSrc.length;i++) {
      var c=sSrc.charAt(i);
      if(c==".") { break; }
      else {
        if ((sRet=="") && (c=="-")) { sRet="-"; }
        else { if("0123456789".indexOf(c)!=-1) { sRet+=c; } }
      }
    }
  }
  else { sRet=sSrc; }
  if (sRet=="-") { sRet=""; }
  return(sRet);
}

function VRange(oTbx,nMin,nMax,sLang) {
  var sBrw=navigator.appName.toUpperCase();
  var nVer=parseFloat(navigator.appVersion);
  var bOk=(((sBrw.substring(0,8)=="NETSCAPE") && (nVer>=2.02)) || ((sBrw.substring(0,9)=="MICROSOFT") && (nVer>=3)));
  var bRet=true;

  if(bOk) {
    if((oTbx.value.length>0) && ((parseFloat(oTbx.value)<nMin) || (parseFloat(oTbx.value)>nMax))) {
      // IMPORTANT NOTE: These need to be encoded the same as the webpage - i.e. utf-8
      if(sLang=="fr") { alert("Saisissez une valeur entre "+nMin+" et "+nMax+"."); }
      else if (sLang=="de") { alert("Ungültiger Bereich: von "+nMin+" bis "+nMax+"."); }
      else if (sLang=="es") { alert("Rango inválido: de "+nMin+" a "+nMax+"."); }
      else if (sLang=="it") { alert("Range non valido: da "+nMin+" a "+nMax+"."); }
      else if (sLang=="se") { alert("Mata in ett tal mellan "+nMin+" och "+nMax+"."); }
      else if (sLang=="nl") { alert("Ongeldig aantal: van "+nMin+" tot "+nMax+"."); }
      else if (sLang=="jp") { alert("無効な範囲："+nMin+"～"+nMax); }
      else if (sLang=="no") { alert("Skriv inn en verdi mellom "+nMin+" og "+nMax+"."); }
      else if (sLang=="se") { alert("Fyll i ett värde mellan "+nMin+" och "+nMax+"."); }
      else if (sLang=="fi") { alert("Syötä luku väliltä "+nMin+" ja "+nMax+"."); }
      else if (sLang=="dk") { alert("Indtast en værdi mellem "+nMin+" og "+nMax+"."); }
      else if (sLang=="cn") { alert("请输入婴儿出生的年份-必须在"+nMin+"年至"+nMax+"年之间"); }
      else if (sLang=="rs") { alert("Kodirajte broj između "+nMin+" i "+nMax+"."); }
      else if (sLang=="he") { alert("רשום מספר בין "+nMin+" ל "+nMax); }
      else if (sLang=="ro") { alert("Vă rugăm să indicaţi o valoare între "+nMin+" şi "+nMax+"."); }
      else if (sLang=="hi") { alert(nMin+" और "+nMax+" के बीच का कोई मान दर्ज करें।"); }
      else if (sLang=="tr") { alert(nMin+" ile "+nMax+"arasında bir değer girin."); }
      else if (sLang=="pt") { alert("Digite um valor entre "+nMin+" e "+nMax+"."); }
      else if (sLang=="tl") { alert("Magbigay ng numero sa pagitan ng "+nMin+" and "+nMax+"."); }
      else if (sLang=="ceb") { alert("Paghatag sa numero sa tunga-tunga sa "+nMin+" ug "+nMax+"."); }
      else if (sLang=="hr") { alert("Unesi broj između "+nMin+" i "+nMax+"."); }
      else if (sLang=="ar") { alert("كودي رقم مابين "+nMin+"  و "+nMax); }
      else if (sLang=="dz") { alert("كودي رقم مابين "+nMin+"  و "+nMax); }
      else if (sLang=="lb") { alert("الاجابة خاطئة: ما بين "+nMin+" و "+nMax); }
      else if (sLang=="sa") { alert("ضع كود رقم بين "+nMin+" و "+nMax); }
      else if (sLang=="kz") { alert(nMin+" және "+nMax+" арасындағы санды кодтап қойыңыз"); }
      else if (sLang=="si") { alert("Zapiši število med "+nMin+" in "+nMax); }
      else { alert("Enter a value between "+nMin+" and "+nMax+"."); }
      oTbx.value="";
      bRet=false;

    }
  }

  return(bRet);
}

function autocheck(oTxt,sID) {
  if(typeof jQuery != "undefined") {
    if($(oTxt).val()!='') { $('#'+sID+':not(:checked)').trigger('click'); }
  }
  else {
    if((oTxt.value.length>0) && document.getElementById(sID)) { document.getElementById(sID).checked=true; }
  } 
}

function dbb1() { setTimeout("dbb2()",1); }

function dbb2() {
  try {
    window.history.forward();
  } catch (e) {
    // OK to ignore
  }
  setTimeout("dbb2()",500);
}

// about user //

// Resolution detection
function getResolution() {
  if (window.screen) {
    return screen.width + 'x' + screen.height;
  } else {
    return '';
  }
}

// Screen color depth detection
function getDepth() {
  if (window.screen) {
    return screen.colorDepth;
  } else {
    return '';
  }
}

function cqs(obj)
{ var screen=getResolution();
  var depth=getDepth();

  //  obj.screen.value=screen;
  //  obj.depth.value=depth;
}

// NOT USED SO FAR
function DelTxt(oForm,sName) { oForm.elements[sName].value=""; }
function VCbx(oCbx,sName) {
  var sBrw=navigator.appName.toUpperCase();
  var nVer=parseFloat(navigator.appVersion);
  var bOk=(((sBrw.substring(0,8)=="NETSCAPE") && (nVer>=2.02)) || ((sBrw.substring(0,9)=="MICROSOFT") && (nVer>=3)));

  if(bOk) {
    if(sAuto==sName) { oCbx.checked=true; sAuto=""; }
    else {
      sAuto="";
      if(!oCbx.checked) {
        for(var i=0;i<oCbx.form.elements.length;i++) {
          var oCur=oCbx.form.elements[i];
          if(oCur.name==sName) { oCur.value=""; break; }
        }
      }
    }
  }
}
function VText(oTxt,sName,sVal) {
  var sBrw=navigator.appName.toUpperCase();
  var nVer=parseFloat(navigator.appVersion);
  var bOk=(((sBrw.substring(0,8)=="NETSCAPE") && (nVer>=2.02)) || ((sBrw.substring(0,9)=="MICROSOFT") && (nVer>=3)));

  if(bOk) {
    if(oTxt.value!="") {
      for(var i=0;i<oTxt.form.elements.length;i++) {
        var oCur=oTxt.form.elements[i];
        if((oCur.name==sName) && (oCur.value==sVal)) { oCur.checked=true; sAuto=oTxt.name; break; }
      }
    }
  }
}

function selOther(oObj) {
  var i,j;
  var s='';

  for (i=0;i<oObj.options.length;i++) {
    if (oObj.options[i].selected) {
      s=oObj.options[i].value;
    }
  }

  i=1;
  while (i<selOther.args.length) {
     if (selOther.args[i]==s) {
       oObj.form.elements[selOther.args[i+1]].select();
     }
     i+=2;
  }
}

// Get the value of a form element as a number

function get(oForm,sName) {
  return(oForm.form.elements[sName].value*1.0);
}

// Set the value of a form element
function set(oForm,sName,sValue) {
  oForm.form.elements[sName].value=sValue;
  if (typeof(oForm.form.elements['_'+sName].value)!='undefined') {
    oForm.form.elements['_'+sName].value=sValue;
  }
}

// calc_col: Calculate the total for a column of integers

// oForm - An object containing the form object
// tPre - First part of question name (before Row part)
// Rows - array of the part of the question name that identifies the row
// tPost - Last part of question name (after Row part)
// tot - Row part of question name for the total cell

function calc_col(oForm,tPre,tPost,Rows,tot) {
  var n=0;

  for (var r=0;r<Rows.length;r++) {
    if(typeof(oForm.form.elements[tPre+Rows[r]+tPost])!='undefined') {
      n+=oForm.form.elements[tPre+Rows[r]+tPost].value*1;
    }
  }
  oForm.form.elements[tPre+tot+tPost].value=n;
  oForm.form.elements['_'+tPre+tot+tPost].value=n;
}

function xChoice(oCtrl,nVal) {
  if(oCtrl.checked) {
    for(var i=0;i<oCtrl.form.elements.length;i++) {
      var oC=oCtrl.form.elements[i];
      if((oC.name==oCtrl.name) && (oC.value!=oCtrl.value))  {
        if(oCtrl.value==nVal) { oC.checked=false; }
        else if(oC.value==nVal) {
          oC.checked=false;
          break;
        }
      }
    }
  }
}

// basic ranking solution: TO BE IMPROVED
function Rank1(oCtrl) {
  var sQ=oCtrl.name;
  var oRE=/\[[a-z0-9_]+\]$/;
  var sCtrl=sQ.replace(oRE,"");

  for(var i=0;i<oCtrl.form.elements.length;i++) {
    var oCur=oCtrl.form.elements[i];
    var sCur=oCur.name;
    if(sCur!==undefined) {
      sCur=sCur.replace(oRE,"");
      if((sCur==sCtrl) && (oCur.name!=oCtrl.name) && (oCur.value==oCtrl.value)) { oCur.checked=false; }
    }
  }
}

// reset question: types other than 'radio' to be implemeted
// @LNK:javascript:resetQst('myQ')$reset my Q@$
function resetQst(sID) {
  var oRE=new RegExp("^"+sID+"[\\[\\.\\@]");
  var a=document.getElementsByTagName('input');
  for(var i=0;i<a.length;i++) {
    if((a[i].name==sID) || oRE.test(a[i].name)) {
      if((a[i].type=="radio") || (a[i].type=="checkbox")) { a[i].checked=false; }
    }
  }
}

// generic function to add an option into a <select> list
function addOption(oSlct,sValue,sText,bSelected) {
  var oNew=document.createElement('OPTION');
  oNew.value=sValue;
  oNew.text=sText;
  if(bSelected) { oNew.selected=true; }
  try { oSlct.add(oNew,oSlct.options.length); }
  catch(e) { oSlct.add(oNew,null); }
}

// --- bind lists functions ---
// NEWPAGE("jscript=bindLists('mainQ:linkedQ')") to bind question linkedQ
// with question mainQ (binding done with roots of values (see Laurent
// for more details)

var aBList=[];
var oBList1;
var oBList2;

function updBList() {
  if(oBList1 && oBList2) {
    for(var i=oBList2.options.length-1;i>=0;i--) { oBList2.remove(i); }
    var n1=oBList1.selectedIndex;  
    var oRE=new RegExp("^[9_]|^"+(n1>=0 ? oBList1.options[n1].value : ""));
    for(i=0;i<aBList.length;i++) {
      if(aBList[i][0].match(oRE)) { addOption(oBList2,aBList[i][0],aBList[i][1],aBList[i][2]); }
    }
  }
}

function bindLists(sL) {
  var a=sL.split(":");
  oBList1=document.forms[0].elements[a[0]];
  oBList2=document.forms[0].elements[a[1]];

  if(oBList1 && oBList2) {
    for(var i=0;i<oBList2.options.length;i++) {  
      var oC=oBList2.options[i];
      aBList[i]=[oC.value,oC.text,oC.selected];
    }
    updBList();
    oBList1.onchange=updBList;
  }

}

function isNumberKey(evt) {
  var charCode = (evt.which) ? evt.which : evt.keyCode;
  return !(charCode > 31 && (charCode < 48 || charCode > 57));
}
// --- end of bind lists functions ---

function fullScreen() {
  window.moveTo(0,0);
  window.resizeTo(screen.availWidth,screen.availHeight);
}

