﻿// Smart-Survey Javascript File
// <-- Start

function firstfocus()
  {
	  var forms = document.forms || [];
	  for(var i = 0; i < forms.length; i++){
		  for(var j = 0; j < forms[i].length; j++){
			  if(forms[i][j].type != "hidden" && forms[i][j].disabled != true && forms[i][j].style.display != 'none'){
				  forms[i][j].focus();
				  return;
			  }
		  }
	  }
  };
	  
//window.onload = firstfocus; 

function popUp(URL) {
day = new Date();
id = day.getTime();
eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=0,location=0,statusbar=1,menubar=0,resizable=1,width=370,height=130,left = 490,top = 437');");
}

function popUp2(URL) {
day = new Date();
id = day.getTime();
eval("page" + id + " = window.open('" + URL + "', '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=1,menubar=0,resizable=1,width=370,height=200,left = 490,top = 437');");
}

//

function AttachFile(sid,qid,uid,fake){ 
	popUp('/sys/upload.asp?d=49535860&l=1256464&tt=53265623626623&i=' + sid + '&q=' + qid + '&v=' + uid)
}

function DeleteFile(sid,qid,aid){ 
	popUp('/sys/upload_del.asp?i=' + sid + '&q=' + qid + '&aid=' + aid)
}

//

function fileUploaded(sid,qid,filename,aid){ 
	var attachhtml;
	attachhtml = document.getElementById('attach' + qid + '').innerHTML;
	if (attachhtml == '') {attachhtml = '<br><br><strong>Attached Files:</strong>'}
	attachhtml = attachhtml + '<span id="att' + aid + '"><br>&nbsp;&nbsp;&nbsp;&bull; ' + filename;
	attachhtml = attachhtml + ' <a href="javascript:DeleteFile(' + sid + ',' + qid + ',' + aid + ')"><img align="absmiddle" border="0" src="/images/icons/delete.gif" alt="Delete" title="Delete" /></a></span>';
	document.getElementById('attach' + qid + '').innerHTML = attachhtml;
}

//

function fileDeleted(aid){ 
	document.getElementById('att' + aid + '').innerHTML = '';
}
//

function elementlist(list){ 
	var a = new Array();
	var n = 0;
	a = list.split(',');
	do {
		toggleonoff(a[n])
	} 
	while (++n < a.length);
}

//

function toggleonoff(elementname){ 
	eval('document.frmSurvey.' + elementname + '.checked = false')
}

//

function toggleonoffother(elementnametotoggle, elementnametocheck) {
	if (eval('document.getElementById("' + elementnametocheck + '").value.length == 0')) 
		{eval('document.getElementById("' + elementnametotoggle + '").checked = false');}
	else
		{eval('document.getElementById("' + elementnametotoggle + '").checked = true');}
}

//



var letters=' ABCÇDEFGHIJKLMNÑOPQRSTUVWXYZabcçdefghijklmnñopqrstuvwxyzàáÀÁéèÈÉíìÍÌïÏóòÓÒúùÚÙüÜ'
var numbers='1234567890'
var signs=',.:;@-\''
var mathsigns='+-=()*/'
var custom='<>#$%&?¿'

function alpha(e,allow) {
     var k;
     k=document.all?parseInt(e.keyCode): parseInt(e.which);
     return (allow.indexOf(String.fromCharCode(k))!=-1);
}

function currencyFormat(fld, milSep, decSep, e) {
	var sep = 0;
	var key = '';
	var i = j = 0;
	var len = len2 = 0;
	var strCheck = '0123456789.-';
	var aux = aux2 = '';
	var whichCode = (window.Event) ? e.which : e.keyCode;
	if (whichCode == 13) return false;  // Enter
	if (whichCode == 8) return true;  // delete
	if (whichCode == 0) return true;  // not char but could be delete
	key = String.fromCharCode(whichCode);  // Get key value from key code
	if (strCheck.indexOf(key) == -1) return false;  // Not a valid key
	return true;
}

//

function goBack(iVal,lastQ){
	document.forms.frmSurvey.b.value = 1;
	document.forms.frmSurvey.submit();
}

//

function goTimesUp(lastQ){
	document.forms.frmSurvey.b.value = 2;
	document.forms.frmSurvey.submit();
}

//

function goSave(iUserID,iSurveyID,iLang,txtLang) {
	//var text = 'Are you sure you want to Save and Continue this\nsurvey another time?\n\nPlease note that anything you may have completed \non this current page will not be saved. \n\n Click "OK" to Save.'
	
	//if(iLang=2){var text = '"هل أنت متأكد من حفظ الإستبيان، والإستمرار فى وقت لاحق؟ برجاء الإنتباه فلم يتم الحفظ فى الصفحة الحالية، ضغط ""موافق"" للحفظ'}
	
	if (confirm(txtLang)) {
		document.location = "v.asp?sc=1&u=" + iUserID + "&i=" + iSurveyID + "";
	}
}

//

function checkbox(id) {   
	if (document.getElementById("cb" + id).checked == true) {
		document.getElementById("cb" + id).checked = false; 
		document.getElementById("img" + id).src = "images/icons/unchecked.gif"; 
	} else {
		document.getElementById("cb" + id).checked = true;  
		document.getElementById("img" + id).src = "images/icons/checked.gif"; 
	}
}  

//

function optionbutton(id,other) {   
	var b = other
	var temp = new Array();
	temp = b.split(',');
	for (x in temp)
	{document.getElementById("img" + temp[x]).src = "images/icons/unselect.gif"; }
	if (document.getElementById("rb" + id).checked == true)
		{	}   
 	else {		
		document.getElementById("rb" + id).checked = true;  
		document.getElementById("img" + id).src = "images/icons/select.gif"; 
		}
}  

//

function tooltip(tip) {
    if(!document.getElementById('tooltip')) newelement('tooltip');
    var lixlpixel_tooltip = document.getElementById('tooltip');
    lixlpixel_tooltip.innerHTML = tip;
    lixlpixel_tooltip.style.display = 'block';
    document.onmousemove = getmouseposition;
}

//

function exit() {
    document.getElementById('tooltip').style.display = 'none';
}

//
// Additional Functions
//

function checkPreferredCompareMatrix(QID,qtext,isRequired,isPreferred,total_lines,hasQText)
{ if (isPreferred)
  { if (validateRequiredGeneralSilent(QID))
    { removeFromPreferredArrays(QID);
    }
  }
  if (isRequired)
  { if (!validateRequiredGeneral(QID,qtext, hasQText)) return false;
  }
  var k=0; var frm=findForm("Question"+QID); var i=0;
  while (i<frm.length && frm[i]!=null && frm[i].name!=null)
  { if (frm[i].name.indexOf("R"+QID+"_")>=0)
    { if (frm[i].checked) {k++;}
    } i++;
  }
  if (k==total_lines || k==0) return true;
  var answerFromBundle="Please answer the question below: \n".replace(/(.*):\s*$/,"$1");
  alert ('    '+answerFromBundle+(hasQText?':\n'+qtext:""));
  scrollToQuestion='#Q'+QID;
  window.setTimeout(scrollToSomeQuestion, 250);
  return false;
}

//

function checkRankGrid(QID,qtext,isRequired,isPreferred,requiredCount,rowCount,uniqueAnswers)
{ if (isPreferred)
  { if (validateRequiredGeneralSilent(QID))
    { removeFromPreferredArrays(QID);
    }
    return true;
  }
  var requiredMsg;
  if (requiredCount==rowCount)
  { requiredMsg='   '+"Please answer all rows in question: \n"+qtext;
  }
  else
  { requiredMsg='   '+"Please answer at least"+' ';
    if (requiredCount!=1) requiredMsg+=requiredCount+" "+"rows";
    else requiredMsg+="1 row";
    requiredMsg+=' '+"in question: \n"+qtext;
  }
  if (isRequired || isPreferred)
  { if (!validateRequiredGeneralSilent(QID)){
      alert (requiredMsg);
      scrollToQuestion='#Q'+QID;
      window.setTimeout(scrollToSomeQuestion, 250);
      return false;
    }
  }

  var k=0; var frm=findForm("Question"+QID); var i=0;var str="";
  var checkedCount=0; var usedValues=new Array();
  var usedDuplicate=false; //
  while (i<frm.length && frm[i]!=null && frm[i].name!=null)
  {  var elem=frm[i];
     if (elem.name.indexOf("R"+QID+"_")>=0)
     {  if (elem.checked)
        { checkedCount++;
          if (uniqueAnswers && (!usedDuplicate))
          { var val=elem.value;
            if (usedValues[val]==1) usedDuplicate=true;
            else usedValues[val]=1;
          }
        }
     }  i++;
  }
  if (!usedDuplicate)
  { if (checkedCount>=requiredCount) return true;
    if (checkedCount==0) return true; //
  }
  var msg="";
  if (usedDuplicate)
  { msg="In the question: \n"+'"'+qtext+'" \n\n ';
    msg+="you can use each column only once.";
  }
  else
  { msg=requiredMsg;
  }
  alert(msg);
  scrollToQuestion='#Q'+QID;
  window.setTimeout(scrollToSomeQuestion, 250);
  return false;
}

function getCountCheckedCheckboxes(QID)
{ var count=0;
  var frm=findForm('Question'+QID);
  for(var i=0; i<frm.length; i++)
  { var elem=frm[i];
    if (elem==null) continue;
    var ename=elem.name;
    if (ename==null) continue;
    if (ename.indexOf("R"+QID)==0) {if (elem.value!=0 && elem.checked) count++;}
  }
  return count;
}

function alertExclusive(qtext)
{ alert("The selection combination made on this question is not allowed.\nPlease check your answers");
}

function alertMinMaxReq(qtext,minRequired,maxAllowed)
{ if (minRequired<=1)
  { alert('   '+"You may only check"+' '+ maxAllowed +' '+"answers to this question: \n"+qtext);
  }
  else
  if (maxAllowed==0)
  { alert('   '+"Please choose at least"+' '+ minRequired +' '+"answers to this question: \n"+qtext);
  }
  else
  if(minRequired==maxAllowed)
  { alert('   '+"Please choose exactly"+' '+ minRequired +' '+"answers to this question: \n"+qtext);
  }
  else
  { alert('   '+"You may only check from"+' '+minRequired+' '+"to"+' '+maxAllowed+' '+"answers to this question: \n"+qtext);
  }
}

//

function checkCheckboxes(QID,qtext,isRequired,isPreferred,minRequired,maxAllowed,exclusiveAID, hasQText)
{ if (exclusiveAID<=0)
  { if (isPreferred)
    { if (validateRequiredGeneralSilent(QID)) removeFromPreferredArrays(QID);
    }
    if (isRequired)
    { if (!validateRequiredGeneral(QID,qtext, hasQText)) return false;
    }
    if (maxAllowed==0 && minRequired<=1) return true;
    var count=getCountCheckedCheckboxes(QID);
    if ((count<=maxAllowed || maxAllowed==0) && (count==0 || count>=minRequired)) return true;
    alertMinMaxReq(qtext,minRequired,maxAllowed);
    scrollToQuestion='#Q'+QID;
    window.setTimeout(scrollToSomeQuestion, 250);
    return false;
  }
  else
  { var exclusiveAnswered=false;
    var nonExclusiveAnsweredCount=0;
    var frm=findForm('Question'+QID);
    for (var j=0; j<frm.length; j++)
    { var elem=frm[j];
      if (elem!=null && elem.type=="checkbox" && elem.name.indexOf("R"+QID)==0 && elem.value==exclusiveAID)
      { if (elem.checked) exclusiveAnswered=true;
      }
      else if (elem!=null && elem.type=="checkbox" && elem.name.indexOf("R"+QID)==0 && elem.value!=exclusiveAID)
      { if (elem.checked) nonExclusiveAnsweredCount++;
      }
    }
    if (exclusiveAnswered && nonExclusiveAnsweredCount>0)
    { alertExclusive(qtext);
      scrollToQuestion='#Q'+QID;
      window.setTimeout(scrollToSomeQuestion, 250);
      return false;
    }
    if (isRequired && nonExclusiveAnsweredCount==0 && !exclusiveAnswered)
    { if (!validateRequiredGeneral(QID,qtext, hasQText)) return false;
    }
  }
  return true;
}

function getCountCheckedInListbox(QID)
{ var count=0; var frm=findForm('Question'+QID);
  for(var i=0; i<frm.length; i++)
  { var elem=frm[i];
    if (elem==null) continue;
    var ename=elem.name;
    if (ename==null) continue;
    if (ename.indexOf("R"+QID)==0)
    { var opts=elem.options;
      //
      for(var j=1; j<opts.length; j++) {if (opts[j].selected) count++;}
    }
  }
  return count;
}

//

function checkListbox(QID,qtext,isRequired,isPreferred,minRequired,maxAllowed, hasQText)
{ if (isPreferred)
  { if (validateRequiredGeneralSilent(QID)) removeFromPreferredArrays(QID);
  }
  if (isRequired)
  { if (!validateRequiredGeneral(QID, qtext, hasQText)) return false;
  }
  if (maxAllowed==0 && minRequired<=1) return true;
  var count=getCountCheckedInListbox(QID);
  if ((count<=maxAllowed || maxAllowed==0) &&
      (count==0 || count>=minRequired)) return true;
  alertMinMaxReq(qtext,minRequired,maxAllowed);
  scrollToQuestion='#Q'+QID;
  window.setTimeout(scrollToSomeQuestion, 250);
  return false;
}

//

function fillArray(frm)
{ var i=0; var retArray=new Array(); var count=1;
  while (i<frm.length)
  { if (frm[i]!=null && frm[i].name!=null && frm[i].name.indexOf('other')==0)
    { retArray[count]=frm[i]; count++;
    }
    i++;
  }
  retArray[0]=0; return retArray;
}

function getTotalElement(frm)
{ var i=0;
  while (i<frm.length)
  { if (frm[i]!=null && frm[i].name!=null && frm[i].name.indexOf('total')==0) return frm[i];
    i++;
  }
  return null;
}

function checkvalue(focusObj,alert_on,preffix,suffix,decimal_place,decimal_divider,thousend_divider)
{ var value=subStringInteger(focusObj.value,preffix,suffix,decimal_place,decimal_divider,thousend_divider);
  if (value.length==0 || isNaN(parseInt(value,10)))
  { if (alert_on) focusObj.focus();
    return false;
  }
  return true;
}

//

function subStringAsInteger(value,preffix,suffix,decimal_place,decimal_divider,thousend_divider)
{ //return null, if not parseable string
  var ret=removeSpaces(value);
  value=removeSuffix(ret,suffix);
  value=appendZeroes(value,decimal_place,decimal_divider);
  value=removeDecimal(value,decimal_place,decimal_divider);
  value=removePreffix(value,preffix);
  value=removeLeadingZeroes(value);
  return ret;
}

function subStringInteger(value,preffix,suffix,decimal_place,decimal_divider,thousend_divider)
{ //return the number without checking NaN (return 0 in this case)
  value=subStringAsInteger(value,preffix,suffix,decimal_place,decimal_divider,thousend_divider);
  if (value==null || value.length==0) return "";
  var decimal=value.indexOf(decimal_divider)>=0;
  value=removeNaNs(value,decimal_divider,thousend_divider);
  value=extractNumbers(value,decimal_divider);
  value=normalizeNumber(value,decimal_place,decimal_divider);
  return value;
}

//

function fixFormat(value,preffix,suffix,decimal_place,decimal_divider,thousend_divider)
{ value=""+removeLeadingZeroes(value); var stopSignal=false;
  if (value.charAt(0)=='0')
  { var res="";
    while (i<value.length)
    { if (stopSignal) res+=value.charAt(i);
      else if (value.charAt(i)!='0' || value.charAt(i+1)==decimal_divider.charAt(0)) {stopSignal=true;res+=value.charAt(i);} i++;
    }
    value=res;
  }
  var foundDot=value.indexOf(decimal_divider);
  if (foundDot<0)
  { var i=0; if (decimal_place>=0) value+=decimal_divider;
    while (i<decimal_place) {value+="0"; i++;}
  }
  else
  { var i=0; var len=value.length-foundDot;
    while (len+i<=decimal_place) {value+="0"; i++;}
  }
  var negativeValue=value.indexOf("-")>=0;
  var i=value.indexOf(decimal_divider)-1;
  var res="";
  var j=0;
  while(i>=0)
  { if (j==3 && negativeValue && i>0||
        j==3 && !negativeValue) {
           /*if (preffix.indexOf("$")>=0)*/
           res+=thousend_divider;
           j=0;
    }
    j++;
    res+=value.charAt(i);
    i-=1;
  }
  var suf=value.substring(value.indexOf(decimal_divider)+1,value.indexOf(decimal_divider)+1+decimal_place);
  value="";i=res.length-1;
  while (i>=0) {value+=res.charAt(i);i-=1;}
  if (value.length==0) value="0";
  if (decimal_place>0) value+=decimal_divider+suf;
  var result=value;
  if (preffix.length>0) result=preffix+" "+value;
  if (suffix.length>0) result+=" "+suffix;
  return result;
}

function intvalue(focusObj,dontFill,value_obj,preffix,suffix,decimal_place,decimal_divider,thousend_divider)
{ var value=subStringInteger(value_obj.value,preffix,suffix,decimal_place,decimal_divider,thousend_divider);
  if (!dontFill && value_obj==focusObj && value_obj.value!=null && value_obj.value.length>0)
  { //
    value_obj.value=fixFormat(value,preffix,suffix,decimal_place,decimal_divider,thousend_divider);
  }
  var res=parseFloat(value);
  if (isNaN(res)) res=0;
  if (!dontFill && value_obj.value!=null && value_obj.value.length>0)
  { value_obj.value=fixFormat(res,preffix,suffix,decimal_place,decimal_divider,thousend_divider);
  }
  return res;
}

//

function removeDecimal(value,decimal_place,decimal_divider)
{ if (value.indexOf(decimal_divider)>0) return value.substring(0,value.indexOf(decimal_divider)+decimal_place+1);
  return value;
}
function appendZeroes(value,decimal_place,decimal_divider)
{ var idx=value.indexOf(decimal_divider);
  while (idx>0 && value.length-idx<=decimal_place) value+="0";
  return value;
}
function removePreffix(value, preffix)
{ if (preffix.length>0)
  { var idx=value.indexOf(preffix);
    if (idx>=0) value=value.substring(idx+preffix.length,value.length);
  }
  return value;
}
function removeSuffix(value, suffix)
{  if (value==null || value.length==0) return value;
   if (value.indexOf(suffix)>0) return value.substring(0,value.indexOf(suffix));
   return value;
}

//

function normalizeNumber(value,decimal_place,decimal_divider)
{  if (value.length==0) value="0";
   if (value.indexOf(decimal_divider)==0)
   { value="0"+value;
   }
   if (value.indexOf(decimal_divider)>=0)
   {  var begin=value.substring(0,value.indexOf(decimal_divider));
      var end=value.substring(value.indexOf(decimal_divider)+1);
      if (end.length>decimal_place) {end=end.substring(0,decimal_place);}
      while (end.length<decimal_place) end+="0";
      value=begin+decimal_divider+end;
   }
   else
   {  if (decimal_place>0) value+=decimal_divider;
      while (decimal_place>0) {value+="0";decimal_place--;}
   }
   return value;
}

//

function roundToDigits(decValue, digits){ 
	var v=decValue;
	for (var i=0; i<digits; i++) v=v*10;
	v=Math.round(v);
	for (var i=0; i<digits; i++) v=v/10;
	return v;
}

//

function checkSum(focusObj,fromBody,output_alert,qtext,QID,total_min,total_max, answer_required,preffix,suffix,decimal_place,decimal_divider,thousend_divider) { 
  var ok=false; var i=1; var total_sum=0; var count=0; var missing_value=null;
  var checkArray=fillArray(findForm("Question"+QID));
  var totalElement=getTotalElement(findForm("Question"+QID));
  if (isNaN(checkArray.length)) return true;
  if (total_min==null) total_min=-Number.MAX_VALUE;
  if (total_max==null) total_max=Number.MAX_VALUE;

  while (i<checkArray.length)
  { if (checkvalue(checkArray[i],false,preffix,suffix,decimal_place,decimal_divider,thousend_divider)) count++;
    else missing_value=checkArray[i]; i++;
  } i=1;
  while (i<checkArray.length)
  { total_sum+=intvalue(focusObj,fromBody,checkArray[i],preffix,suffix,decimal_place,decimal_divider,thousend_divider);
    i++;
  }
  total_sum=roundToDigits(total_sum, decimal_place);
  if (totalElement!=null) totalElement.value=total_sum;
  if (count==0)
  { if (!answer_required) {ok=true; return ok;}
  }
  if (total_sum!=total_min && total_min==total_max)
  { if (count+2>=checkArray.length && missing_value!=null)
    { if (total_min-total_sum>0)
      { missing_value.value=fixFormat(total_min-total_sum,preffix,suffix,decimal_place,decimal_divider,thousend_divider); ok=true;
        if (totalElement!=null) totalElement.value=fixFormat(total_min,preffix,suffix,decimal_place,decimal_divider,thousend_divider);
      }
      else
      { if (!fromBody) missing_value.value=fixFormat(0,preffix,suffix,decimal_place,decimal_divider,thousend_divider); ok=false;
        if (totalElement!=null) totalElement.value=fixFormat(total_sum,preffix,suffix,decimal_place,decimal_divider,thousend_divider);
      }
      return ok;
    }
    else if (answer_required)
    { i=1; while (i<checkArray.length) {if (!checkvalue(checkArray[i],output_alert,preffix,suffix,decimal_place,decimal_divider,thousend_divider)) break; i++;}
    }
  }
  else ok=true;
  if (totalElement!=null) totalElement.value=fixFormat(total_sum,preffix,suffix,decimal_place,decimal_divider,thousend_divider);
  if (total_min<total_max && total_sum>=total_min && total_sum<=total_max)
  { ok=true; return ok;
  }
  if (missing_value==null && !isNaN(checkArray.length) && checkArray.length>1) missing_value=checkArray[checkArray.length-1];
  if (total_min<=total_max && total_sum<total_min)
  { ok=false;
    if (output_alert)
    { var msg = "In the question: \n"+'"' + qtext + '" \n\n '
      msg += "Sum total is less than"+' ' + total_min;
      alert(msg);
      scrollToQuestion='#Q'+QID;
      window.setTimeout(scrollToSomeQuestion, 250);
      missing_value.focus();
    }
  }
  if (total_min<=total_max && total_sum>total_max)
  { ok=false;
    if (output_alert)
    { var msg = "In the question: \n"+'"' + qtext + '" \n\n '
      msg += "Sum total exceeds"+' ' + total_max;
      alert(msg);
      scrollToQuestion='#Q'+QID;
      window.setTimeout(scrollToSomeQuestion, 250);
      missing_value.focus();
    }
  }
  return ok;
}

//

function onunloadSaving(onsubmit,onbefore)
{ var hasData=false;
  for (var i=0; i<document.theForm.elements.length; i++)
  { var elem=document.theForm.elements[i];
    if (elem.value!=null || elem.selectedIndex>0)
    { if (elem.value!=null && elem.name.indexOf("other")>=0 && elem.value.length>0)
      { hasData=true; break;
      }
    }
    if (elem.name.indexOf("other")>=0) continue;
    if (elem.value!=null && elem.checked)
    { hasData=true; break;
    }
    else
    { if (elem.selectedIndex>0)
      { hasData=true; break;
      }
    }
  }
  if (onbefore) {if (!hasData) return false; else return true;}
  if (!hasData) return;
  showBeforeAlert=false;
  document.theForm.onunload.value='1';
  document.theForm.target="_self";
  document.theForm.submit();
}

function disableShowBeforeAlert()
{ showBeforeAlert=false;
}

function getShowBeforeAlert()
{ return showBeforeAlert; }

function onbeforeAlert()
{ if (getShowBeforeAlert() && onunloadSaving(false,true))
 { return "You are about to leave this survey. We will attempt to save all answers up to this point. You can leave now and come back to complete this survey later, or, continue to answer this survey.\n\nAre you sure you want to leave this survey?\n\nOK - Leave and come back later\nCancel - Continue with survey now";
 } //
}

function disableEnterKey(e)
{
     var key;

     if(window.event)
          key = window.event.keyCode;     //IE
     else
          key = e.which;     //firefox

     if(key == 13)
          return false;
     else
          return true;
}
//window.onbeforeunload=onbeforeAlert;


//  End -->

