﻿<?xml version="1.0" encoding="utf-8"?><Root><Survey VersionNumber="2" VersionName="1.31.0"><SurveyID>e7e6b8d2-465f-40f5-986c-52ec5fe3cb80</SurveyID><OrgId>d98564a9-a241-4bf2-b502-018cf75a9b72</OrgId><SurveyName>Least filled quota sample</SurveyName><Description /><Sealed>False</Sealed><Creator>test</Creator><TimeCreated>636154275935070000</TimeCreated><TimeModified>636154317334657248</TimeModified><TimeSealed>3155378903999970000</TimeSealed><Randomed>True</Randomed><HalfRandomed>False</HalfRandomed><NextQuestionID>11</NextQuestionID><ReadOnly>False</ReadOnly><Deleted>0</Deleted><ULAssembly /><ULClassName>SurveyToGo.UserLogic.Creator.SurveyLogicTempl</ULClassName><ULSource>&lt;?xml version="1.0" encoding="utf-16"?&gt;
&lt;UserLogicContents xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
  &lt;Items&gt;
    &lt;HData&gt;
      &lt;HTp&gt;ehtQuestion&lt;/HTp&gt;
      &lt;STp&gt;estLast&lt;/STp&gt;
      &lt;CTp&gt;echtLast&lt;/CTp&gt;
      &lt;QTp&gt;eqhtJumpingRule&lt;/QTp&gt;
      &lt;Key&gt;3&lt;/Key&gt;
      &lt;Name&gt;HandleQuestionJump_3&lt;/Name&gt;
      &lt;Behv&gt;ecsbDefault&lt;/Behv&gt;
      &lt;QDep /&gt;
      &lt;CDep /&gt;
      &lt;QJmp /&gt;
      &lt;CJmp /&gt;
      &lt;OJmp&gt;
        &lt;eJumpQuestionResult&gt;ejqrCancel&lt;/eJumpQuestionResult&gt;
      &lt;/OJmp&gt;
    &lt;/HData&gt;
    &lt;HData&gt;
      &lt;HTp&gt;ehtQuestion&lt;/HTp&gt;
      &lt;STp&gt;estLast&lt;/STp&gt;
      &lt;CTp&gt;echtLast&lt;/CTp&gt;
      &lt;QTp&gt;eqhtExpression&lt;/QTp&gt;
      &lt;Key&gt;1&lt;/Key&gt;
      &lt;Name&gt;QuestionExpression_1&lt;/Name&gt;
      &lt;Behv&gt;ecsbDefault&lt;/Behv&gt;
      &lt;QDep&gt;
        &lt;int&gt;2&lt;/int&gt;
      &lt;/QDep&gt;
      &lt;CDep /&gt;
    &lt;/HData&gt;
    &lt;HData&gt;
      &lt;HTp&gt;ehtQuestion&lt;/HTp&gt;
      &lt;STp&gt;estLast&lt;/STp&gt;
      &lt;CTp&gt;echtLast&lt;/CTp&gt;
      &lt;QTp&gt;eqhtStart&lt;/QTp&gt;
      &lt;Key&gt;7&lt;/Key&gt;
      &lt;Name&gt;QuestionStart_7&lt;/Name&gt;
      &lt;Behv&gt;ecsbDefault&lt;/Behv&gt;
      &lt;QDep /&gt;
      &lt;CDep /&gt;
    &lt;/HData&gt;
    &lt;HData&gt;
      &lt;HTp&gt;ehtQuestion&lt;/HTp&gt;
      &lt;STp&gt;estLast&lt;/STp&gt;
      &lt;CTp&gt;echtLast&lt;/CTp&gt;
      &lt;QTp&gt;eqhtStart&lt;/QTp&gt;
      &lt;Key&gt;6&lt;/Key&gt;
      &lt;Name&gt;QuestionStart_6&lt;/Name&gt;
      &lt;Behv&gt;ecsbDefault&lt;/Behv&gt;
      &lt;QDep /&gt;
      &lt;CDep /&gt;
    &lt;/HData&gt;
    &lt;HData&gt;
      &lt;HTp&gt;ehtQuestion&lt;/HTp&gt;
      &lt;STp&gt;estLast&lt;/STp&gt;
      &lt;CTp&gt;echtLast&lt;/CTp&gt;
      &lt;QTp&gt;eqhtStart&lt;/QTp&gt;
      &lt;Key&gt;5&lt;/Key&gt;
      &lt;Name&gt;QuestionStart_5&lt;/Name&gt;
      &lt;Behv&gt;ecsbDefault&lt;/Behv&gt;
      &lt;QDep /&gt;
      &lt;CDep /&gt;
    &lt;/HData&gt;
    &lt;HData&gt;
      &lt;HTp&gt;ehtQuestion&lt;/HTp&gt;
      &lt;STp&gt;estLast&lt;/STp&gt;
      &lt;CTp&gt;echtLast&lt;/CTp&gt;
      &lt;QTp&gt;eqhtStart&lt;/QTp&gt;
      &lt;Key&gt;4&lt;/Key&gt;
      &lt;Name&gt;QuestionStart_4&lt;/Name&gt;
      &lt;Behv&gt;ecsbDefault&lt;/Behv&gt;
      &lt;QDep /&gt;
      &lt;CDep /&gt;
    &lt;/HData&gt;
    &lt;HData&gt;
      &lt;HTp&gt;ehtChapter&lt;/HTp&gt;
      &lt;STp&gt;estLast&lt;/STp&gt;
      &lt;CTp&gt;echtEntranceRule&lt;/CTp&gt;
      &lt;QTp&gt;eqhtLast&lt;/QTp&gt;
      &lt;Key&gt;4&lt;/Key&gt;
      &lt;Name&gt;HandleChapterEnter_4&lt;/Name&gt;
      &lt;Behv&gt;ecsbDefault&lt;/Behv&gt;
      &lt;QDep&gt;
        &lt;int&gt;1&lt;/int&gt;
      &lt;/QDep&gt;
      &lt;CDep /&gt;
    &lt;/HData&gt;
    &lt;HData&gt;
      &lt;HTp&gt;ehtChapter&lt;/HTp&gt;
      &lt;STp&gt;estLast&lt;/STp&gt;
      &lt;CTp&gt;echtEntranceRule&lt;/CTp&gt;
      &lt;QTp&gt;eqhtLast&lt;/QTp&gt;
      &lt;Key&gt;2&lt;/Key&gt;
      &lt;Name&gt;HandleChapterEnter_2&lt;/Name&gt;
      &lt;Behv&gt;ecsbDefault&lt;/Behv&gt;
      &lt;QDep&gt;
        &lt;int&gt;1&lt;/int&gt;
      &lt;/QDep&gt;
      &lt;CDep /&gt;
    &lt;/HData&gt;
    &lt;HData&gt;
      &lt;HTp&gt;ehtSnippet&lt;/HTp&gt;
      &lt;STp&gt;estBucket&lt;/STp&gt;
      &lt;CTp&gt;echtLast&lt;/CTp&gt;
      &lt;QTp&gt;eqhtLast&lt;/QTp&gt;
      &lt;Key&gt;5&lt;/Key&gt;
      &lt;Name&gt;GetBucketValue_5&lt;/Name&gt;
      &lt;Behv&gt;ecsbDefault&lt;/Behv&gt;
      &lt;QDep&gt;
        &lt;int&gt;2&lt;/int&gt;
      &lt;/QDep&gt;
      &lt;CDep /&gt;
    &lt;/HData&gt;
    &lt;HData&gt;
      &lt;HTp&gt;ehtSnippet&lt;/HTp&gt;
      &lt;STp&gt;estBucket&lt;/STp&gt;
      &lt;CTp&gt;echtLast&lt;/CTp&gt;
      &lt;QTp&gt;eqhtLast&lt;/QTp&gt;
      &lt;Key&gt;4&lt;/Key&gt;
      &lt;Name&gt;GetBucketValue_4&lt;/Name&gt;
      &lt;Behv&gt;ecsbDefault&lt;/Behv&gt;
      &lt;QDep&gt;
        &lt;int&gt;2&lt;/int&gt;
      &lt;/QDep&gt;
      &lt;CDep /&gt;
    &lt;/HData&gt;
    &lt;HData&gt;
      &lt;HTp&gt;ehtSnippet&lt;/HTp&gt;
      &lt;STp&gt;estBucket&lt;/STp&gt;
      &lt;CTp&gt;echtLast&lt;/CTp&gt;
      &lt;QTp&gt;eqhtLast&lt;/QTp&gt;
      &lt;Key&gt;3&lt;/Key&gt;
      &lt;Name&gt;GetBucketValue_3&lt;/Name&gt;
      &lt;Behv&gt;ecsbDefault&lt;/Behv&gt;
      &lt;QDep&gt;
        &lt;int&gt;2&lt;/int&gt;
      &lt;/QDep&gt;
      &lt;CDep /&gt;
    &lt;/HData&gt;
    &lt;HData&gt;
      &lt;HTp&gt;ehtSnippet&lt;/HTp&gt;
      &lt;STp&gt;estBucket&lt;/STp&gt;
      &lt;CTp&gt;echtLast&lt;/CTp&gt;
      &lt;QTp&gt;eqhtLast&lt;/QTp&gt;
      &lt;Key&gt;2&lt;/Key&gt;
      &lt;Name&gt;GetBucketValue_2&lt;/Name&gt;
      &lt;Behv&gt;ecsbDefault&lt;/Behv&gt;
      &lt;QDep&gt;
        &lt;int&gt;2&lt;/int&gt;
      &lt;/QDep&gt;
      &lt;CDep /&gt;
    &lt;/HData&gt;
    &lt;HData&gt;
      &lt;HTp&gt;ehtSnippet&lt;/HTp&gt;
      &lt;STp&gt;estBucket&lt;/STp&gt;
      &lt;CTp&gt;echtLast&lt;/CTp&gt;
      &lt;QTp&gt;eqhtLast&lt;/QTp&gt;
      &lt;Key&gt;1&lt;/Key&gt;
      &lt;Name&gt;GetBucketValue_1&lt;/Name&gt;
      &lt;Behv&gt;ecsbDefault&lt;/Behv&gt;
      &lt;QDep&gt;
        &lt;int&gt;2&lt;/int&gt;
      &lt;/QDep&gt;
      &lt;CDep /&gt;
    &lt;/HData&gt;
  &lt;/Items&gt;
  &lt;Source&gt;// Question symbols
var Q_1 = null;var Q_2 = null;var Q_3 = null;var Q_4 = null;var Q_5 = null;var Q_6 = null;var Q_7 = null;var Q_8 = null;var Q_9 = null;

	function StartSurvey()
	{
		/*_@_SS_START_@*/

		/*_@_SS_END_@*/
	}

	/*_@_USERCODE_START_@*/
/***********************************************************************/

function Kad_ValidationBrandDisposition(qidx)
{
	var check = false;
	var at1=0;
	var at2=0;
	var a=1;
	for(a=1;a&amp;lt;=GetTopicCount(qidx);a++)
	{
		if(AnswerChoice(qidx,a)==1)
		{
			at1+=1;
		}
		if(AnswerChoice(qidx,a)==2)
		{
			at2+=1;
		}
	}
	if(at1&amp;gt;1 || at2&amp;gt;3)
	{
		check=true;
	}
	return check;
}

function Kad_GetCodes(arrayidxbrdcodes)
{
	var codes1=Array();
	var codes2=Array();
	var result=Array();
	var a=0;
	var b=0;
	var c=0;
	var n=0;
	for(a=0;a&amp;lt;arrayidxbrdcodes.length;a++)
	{
		codes1=stringSplit(arrayidxbrdcodes[a],"/");
		for(b=0;b&amp;lt;codes1.length;b++)
		{
			if(stringContains(codes1[b],"-"))
			{
				codes2=stringSplit(codes1[b],"-")
				for(c=0;c&amp;lt;codes2.length;c++)
				{
					result[n]=codes2[c];
					n+=1;
				}
			}
			else
			{
				result[n]=codes1[b];
				n+=1;
			}
		}
	}
	return result;
}

function Kad_BrandUmbrella(qidxfiltered,arrayidxbrdcodes)
{
	var result=Array();
	var a=0;
	var b=0;
	for(a=0;a&amp;lt;arrayidxbrdcodes.length;a++)
	{
		if(Contains(qidxfiltered,Kad_GetCodes(arrayidxbrdcodes[a])))
		{
			result[b]=a+1;
			b+=1;
		}
	}
	return result;
}

function Kad_CombineTomSpontAided(qidxtom,qidxspont,qidxaided,arrayothers)
{
	var a=1;
	var h=Array();
	var n=0;
	for(a=1;a&amp;lt;=arrayothers;a++)
	{
		if(Answer(qidxtom)==arrayothers[a-1] || Contains(qidxspont,arrayothers[a-1]))
		{
			SetAnswerVisible(qidxaided,arrayothers[a-1],true);
		}
	}
	for(a=1;a&amp;lt;=GetAnswerCount(qidxaided)-1;a++)
	{
		if(Answer(qidxtom)==a || Contains(qidxspont,a) || Contains(qidxaided,a))
		{
			h[n]=a;
			n=n+1;
		}
	}
	ClearAnswer(qidxaided);
	SetAnswer(qidxaided,h);
}

function Kad_CheckExistingBrand(qidxbrand,arraybrand)
{
	var a = 0;
	var h = false;
	var res = 0;
	var arr = GetAnswers(QRef(qidxbrand));
	var codes = Kad_GetCodes(arraybrand);
	for(a=0;a&amp;lt;arr.length;a++)
	{
		if(InArray(arraybrand[a],arr)==true)
		{
			h = true;
			break;
		}
	}
	return h;
}

function Kad_CheckExistingBrand(qidxbrand1,qidxbrand2,arraybrand)
{
	var a = 0;
	var h = false;
	var res = 0;
	var arr1 = GetAnswers(qidxbrand1);
	var arr2 = GetAnswers(qidxbrand2);
	var codes = Kad_GetCodes(arraybrand);
	for(a=0;a&amp;lt;codes.length;a++)
	{
		if(InArray(codes[a],arr1)==true &amp;amp;&amp;amp; InArray(codes[a],arr2)==false)
		{
			res = a + 1;
		}
	}
	if(res == codes.length)
	{
		h = true;
	}
	return h;
}

function Kad_RangeScore(totalscore,arrayscore)
{
	var scorecat=0;
	var a=0;
	for(a=0;a&amp;lt;arrayscore.length;a++)
	{
		if(totalscore&amp;lt;=arrayscore[a])
		{
			scorecat=a+1;
		}
	}
	return scorecat;
}

function Kad_GetRespondent(iteration,qidxday,qidxmonth,qidxyear,qidxrespname)
{
	var diff = Array();
	var arr = Array();
	var a = 1;
	var val = 0;
	var dtresp;
	for(a=1;a&amp;lt;=iteration;a++)
	{
		dtresp = Date(AnswerIter(QRef(qidxmonth),a)+ "/" + AnswerIter(QRef(qidxday),a)+ "/" + Today.Year);
		if(dtresp &amp;gt; Now)
		{
			dtresp = Date(AnswerIter(QRef(qidxmonth),a)+ "/" + AnswerIter(QRef(qidxday),a)+ "/" + (Today.Year - 1));
		}
		diff[a-1] = Round(TimeDiffDays(Now,dtresp));
	}
	val = diff[0];
	for(a=1;a&amp;lt;iteration;a++)
	{
		if(val &amp;gt; diff[a])
		{
			val = diff[a];
		}
	}
	SetAnswerVisible(CurrQues,false);
	for(a=1;a&amp;lt;=iteration;a++)
	{
		if(val == diff[a-1])
		{
			SetAnswerTextFormat(CurrQues,a,AnswerIter(QRef(qidxrespname),a)+" - "+AnswerIter(QRef(qidxday),a)+"/"+AnswerIter(QRef(qidxmonth),a)+"/"+AnswerIter(QRef(qidxyear),a));
			SetAnswerVisible(CurrQues,a,true);
		}
	}
}

function Kad_AgeCategory(age,arrayages)
{
	var agecat=0;
	var a=0;
	for(a=0;a&amp;lt;arrayages.length;a++)
	{
		if(age&amp;gt;=arrayages[a])
		{
			agecat=a+1;
		}
	}
	return agecat;
}

function Kad_GetAge(date,month,year)
{
	var res = 0;
	var lday = Today.Day;
	var lmonth = Today.Month;
	var lyear = Today.Year;

	if(lmonth &amp;gt; month){res = lyear - year;}
	if(lmonth &amp;lt; month){res = lyear - year - 1;}
	if(lmonth == month &amp;amp;&amp;amp; lday &amp;gt;= date){res = lyear - year;}
	if(lmonth == month &amp;amp;&amp;amp; lday &amp;lt; date){res = lyear - year - 1;}
	
	return res;
}

function Kad_IsAllMultiVisibleAnswerChecked(qidx)
{
	var a=1;
	var av=Array();
	var n=0;
	var hs=true;
	for(a=1;a&amp;lt;=GetAnswerCount(qidx);a++)
	{
		if(IsAnswerVisible(qidx,a))
		{
			av[n]=a;
			n+=1;
		}
	}
	for(a=0;a&amp;lt;av.length;a++)
	{
		if(NotContains(qidx,av[a]))
		{
			hs=false;
			break;
		}
	}
	return hs;
}


/***********************************************************************/



function MyMultipleSetFromMultipleArray (inDest, inSrc, inShow)
{
	var arr = GetAnswers(inSrc);
	
	for (var i = 0; i &amp;lt; arr.length; i++)
	{
		dblSetSpecificAnswer(inDest, arr[i], inShow);
	}
}





function CheckIDPSU()
{
      Vars["idInvRegEx"]="^......$";
      if (!dblIsRegEx(Vars["idInvRegEx"],Answer(CurrQues)))
      {
            return true;
      }
}

function ConvertToDp(a1,a2)
{

	for(var j = 0; j &amp;lt;=GetAnswerCount(QRef(a1));j++)
	{
		for (var i=0; i &amp;lt;=GetAnswerCount(QRef(a2)); i++)
		{
			if (ContainsOneOf(QRef(a1+i),j+1 ))
    		{
     		dblSetSpecificAnswer(QRef(a2+j),i+1,true);
   	   	    }
		}   
	}
}


function dblSetSpecificTopicChoicffffffe(inQ, inTopicIndex, inValue)
{
	var curTopics = GetTopicCount(inQ);
	var newAnswers=new Array();
	newAnswers.push(inValue);
	var i;
	var ansArr = GetAnswersChoice(inQ, inTopicIndex);
	for (i=0;i &amp;lt; ansArr.length;i++)
 	{
		newAnswers.push(ansArr[i]);
	}
	SetAnswerChoice(inQ, inTopicIndex, newAnswers);
}



/* sample general jump rule

var newIdx = FixJumpOrder(QRef(6),SelectedAnswerText(4),"Final");
if (newIdx != -1) {
	idx = newIdx;
	jump = eJumpQuestionResult.ejqrChapter;
}

*/
/*function FixJumpOrder(inStartQ,inOrder,inFinalChapter)
{
	var retVal = -1;
	var chapArr = inOrder.split(",");
	if (CurrQues==inStartQ) {
		retVal = GetChapterIdxFromName(chapArr[0]);
	}
	var jumpIdx = GetJumpChapterIdxOfQuestion(CurrQues, chapArr);
	if (jumpIdx != -1) {
		if (IsLastQuestionInChapter(CurrQues)) {
			Trace("Ned to jump, last question of: "+chapArr[jumpIdx]);
			jumpIdx +=1;
			if (jumpIdx &amp;lt; chapArr.length) {
				Trace("Jumping to: "+chapArr[jumpIdx]);
				retVal = GetChapterIdxFromName(chapArr[jumpIdx]);
			}
			else {
				Trace("Jumping to: "+inFinalChapter);
				retVal = GetChapterIdxFromName(inFinalChapter);
			}
		}
	}
	
	return retVal;
}

function IsLastQuestionInChapter(inQuestion) 
{
	var retVal = false;
	var chapterInfo = QuestionChapter(inQuestion);
	if (chapterInfo.Questions[chapterInfo.Questions.length-1] == inQuestion) {
		retVal = true;
	}
	return retVal;
}

function GetJumpChapterIdxOfQuestion(inQuestion, inJumpArray)
{
	var retVal = -1;
	var chapterInfo = QuestionChapter(inQuestion);
	for (var i=0; i&amp;lt;inJumpArray.length;i++) {
		if (chapterInfo.Name == inJumpArray[i]) {
			retVal = i;
			break;
		}
	}
	return retVal;
}

function GetChapterIdxFromName (inChapterName) 
{
	var retVal = -1;
	var chapterInfos = GetAllChapters();
	for(var i=0;i&amp;lt;chapterInfos.length;i++) {
		if (chapterInfos[i].Name == inChapterName) {
			retVal = chapterInfos[i].ID+1;
			break;
		}
	}
	return retVal;
}*/

function AreAllTopicsDifferent (inQIdx)
{
	var retVal = true;
	var topicAmount = GetTopicCount(inQIdx);
	var flag = false;
	
	for (var i = 1; i &amp;lt;= topicAmount; i++)
	{
		for (var j = 1; j &amp;lt;= topicAmount; j++)
		{
			if (i != j &amp;amp;&amp;amp;
				IsTopicVisible(inQIdx, i) &amp;amp;&amp;amp; IsTopicVisible(inQIdx, j) &amp;amp;&amp;amp;
				AnswerChoice(inQIdx, i) == AnswerChoice(inQIdx, j))
			{
				retVal = false;
				break;
			}
		}
		if (flag)
		{
			break;
		}
	}
	
	return retVal;
}

/** intage thailand **/

function TNS_SetQuesOrder(controlQuestion,variant0) 
{ 
var retVal=false; 
if (variant0==8) 
{ 
switch(Answer(controlQuestion)) 
{ 
case 1: RandomizeAnswers(CurrQues,[1,2,3,4,5,6,7,8]); break; 
case 2: RandomizeAnswers(CurrQues,[4,1,2,3,5,6,7,8]); break; 
case 3: RandomizeAnswers(CurrQues,[3,4,1,2,5,6,7,8]); break; 
case 4: RandomizeAnswers(CurrQues,[2,3,4,1,5,6,7,8]); break; 
case 5: RandomizeAnswers(CurrQues,[4,5,6,7,1,2,3,8]); break; 
case 6: RandomizeAnswers(CurrQues,[7,4,5,6,1,2,3,8]); break; 
case 7: RandomizeAnswers(CurrQues,[6,7,4,5,1,2,3,8]); break; 
case 8: RandomizeAnswers(CurrQues,[5,6,7,4,1,2,3,8]); break; 
} 
retVal=true; 
}
}
//################################ Prince ######################################
// ใช้สำหรับดึงอื่นๆที่พิมพ์ 5 บรรทัดมาไว้ในข้อปัจจุบัน
function SetOther(other,openEnd,start) 
{
SetAnswerVisible(CurrQues, false, false, start,start+1,start+2,start+3,start+4);
if (ContainsOneOf(QRef(other),start))
{
	var topic;
	var answer;
	for (topic = 1, answer = start; topic &amp;lt;= 5; answer++, topic++)
	{
		var text = AnswerChoice(QRef(openEnd), topic);
		if (text != "")
		{
			SetAnswerVisible(CurrQues, true, false, answer);
			SetAnswerTextFormat(CurrQues, answer, text);
		}
	}
}
}
function SetTopicOther(other,openEnd,start)
{
SetTopicVisible(CurrQues, false, false, start,start+1,start+2,start+3,start+4);
if (ContainsOneOf(QRef(other),start))
{
	var topic;
	var answer;
	for (topic = 1, answer = start; topic &amp;lt;= 5; answer++, topic++)
	{
		var text = AnswerChoice(QRef(openEnd), topic);
		if (text != "")
		{
			SetTopicVisible(CurrQues, true, false, answer);
			SetTopicTextFormat(CurrQues, answer, text);
		}
	}
}
}
// ใช้สำหรับการโชว์คำตอบ
// ถ้า eiei เป็น 1 คือติ๊ก 1 ค่า โชว์หลายค่า
// ถ้า eiei เป็น 2 คือติ๊ก หลายค่าโชว์ 1 ค่า
// ถ้า eiei เป็น 3 
function MultiSetVisible(QTarget,Qin,tick,startIdx,endIdx,eiei)
{
	if(eiei==1)
	{
		if(Contains(Qin,tick))
		{
		for(startIdx;startIdx&amp;lt;=endIdx;startIdx++)
			{
				SetAnswerVisible(QTarget,true,false,startIdx)
			}
		}
	}	
	else if(eiei==2)
	{
		for(startIdx;startIdx&amp;lt;=endIdx;startIdx++)
			{
				if(Contains(Qin,startIdx))
				{
				SetAnswerVisible(QTarget,true,false,tick)
				break
				}
			}
	}
	else if(eiei==3)
	{
		if(Contains(Qin,tick))
		{
		for(startIdx;startIdx&amp;lt;=endIdx;startIdx++)
			{
				SetTopicVisible(QTarget,true,false,startIdx)
			}
		}
	}
	else if(eiei==4)
	{
		for(startIdx;startIdx&amp;lt;=endIdx;startIdx++)
			{
				if(Contains(Qin,startIdx))
				{
				SetTopicVisible(QTarget,true,false,tick)
				break
				}
			}
	}	
}
// ใช้สำหรับการติ๊กคำตอบ
function MultiDblSetSpecificAnswer(QTarget,Qin,tick,startIdx,endIdx,eiei)
{
	if(eiei==1)
	{
		if(Contains(Qin,tick))
		{
		for(startIdx;startIdx&amp;lt;=endIdx;startIdx++)
			{
				dblSetSpecificAnswer(QTarget,startIdx,true)
			}
		}
	}	
	else if(eiei==2)
	{
		for(startIdx;startIdx&amp;lt;=endIdx;startIdx++)
			{
				if(Contains(Qin,startIdx))
				{
				dblSetSpecificAnswer(QTarget,tick,true)
				break
				}
			}
	}
}
// วิธีใช้ ถ้าหน้า 1 ตอบโค้ด 998 999  ContainsOneOfByCode(Qref(1),["998","999"])
//****** ใชกับเครื่องหมายตกใจไม่ได้ !ContainsOneOfByCode(Qref(1),["998","999"])
function MyContainsOneOfByCode(qIdx, codeArr)
{
    var retVal = false;

    for(var i=1; i &amp;lt;=codeArr.length; i++)
    {
        if(MyContainsByCode(qIdx,codeArr[i-1]))
        {
            retVal = true;
            break;
        }
    }

    return retVal;
}

function MyContainsByCode(qIdx, code)
{
    var retVal = Contains(qIdx,GetAnswerChoiceIdxByCode(qIdx,code));
    return retVal;
}
//เอ๋ยเอง ไป โชว์การ์ด MultiContainsOneOf([QRef(20),QRef(21)....],1)
function MultiContainsOneOf(QRefArr,Idx)
{
	var retVal = false;
	for(var i=1 ; i&amp;lt;=QRefArr.length ; i++)
	{
		if(Contains(QRefArr[i-1],Idx))
		{
			retVal = true
			return  retVal
		}
	}
	return retVal
}
// การดึงคำตอบโดยเรียงลำดับจากความถี่  ใช้ได้แค่กรณีที่ index ที่1 คือ ไปบ่อยสุด จนถึง ไม่ไปเลย
function FilterFrequency(curr,qref)
{
	for(var i = 1; i &amp;lt;= GetAnswerCount(CurrQues) ; i++)
	{
		if(ContainsOneOf(QRef(qref),i))
		{
		FilterAnswersByTopics(QRef(curr),QRef(qref),i)
		break
		}
	}
}
function AnswerRotateByNo(Qne,cons)
{
	var countMod = GetAnswerCount(CurrQues) - cons.length
	var newAnswers=new Array();
	var t = Answer(Qne)%countMod
	var k 
	if(t == 0)
		{
			t = countMod;
		}	
	for(k = t ; k &amp;lt;= countMod ; k++ )
		{
				newAnswers.push(k)
		}
	if(newAnswers.length != countMod)
		{	
			for(var j = 1 ; j &amp;lt; t ; j++ )
			{
				newAnswers.push(j)
			}
				//newAnswers.push(1)
		}
	for(var i = 0 ; i+1 &amp;lt;= cons.length ; i++)
			newAnswers.push(cons[i])
			
	RandomizeAnswers(CurrQues,newAnswers);
}
function SortRotateByNo(Qin,cons)  // Rotate Answer By No
{ 
	var newAnswers=new Array();
	
	if(Answer(Qin) % 2 == 1)
	{
		for(var i = 1; i &amp;lt;= GetAnswerCount(CurrQues) ; i++) 
        { 
           newAnswers.push(i); 
     	}
		RandomizeAnswers(CurrQues,newAnswers); 
	}


    if(Answer(Qin) % 2 == 0)// sort descending 
    {
        		 for(var i = GetAnswerCount(CurrQues)-cons.length ; i &amp;gt;= 1 ; i--) 
        		 { 
              		newAnswers.push(i);  
       		 	 }
			  
				for(var i = 0 ; i+1 &amp;lt;= cons.length ; i++)
				newAnswers.push(cons[i])
		 RandomizeAnswers(CurrQues,newAnswers);
	} 

}
//################################ End Prince ######################################




/** Ipsos napoleon franco scripts **/
function innovaip_EdadRango(intEdad) {
	if (intEdad&amp;gt;= 18 &amp;amp;&amp;amp; intEdad&amp;lt;= 19){
		return 1;
	}
	if (intEdad&amp;gt;= 20 &amp;amp;&amp;amp; intEdad&amp;lt;= 24){
	 return 2;
	}
	if (intEdad&amp;gt;= 25 &amp;amp;&amp;amp; intEdad&amp;lt;= 34){
	 return 3;
	}
	if (intEdad&amp;gt;= 35 &amp;amp;&amp;amp; intEdad&amp;lt;= 44){
	 return 4;
	}
	if (intEdad&amp;gt;= 45 &amp;amp;&amp;amp; intEdad&amp;lt;= 54){
	 return 5;
	}
	if (intEdad&amp;gt;= 55 &amp;amp;&amp;amp; intEdad&amp;lt;= 64){
	 return 6;
	}
    return -1;
}

function innovaip_EdadRango1(intEdad) {
	if (intEdad &amp;lt; 18){
		return 1;
	}
	if (intEdad &amp;gt;= 18 &amp;amp;&amp;amp; intEdad &amp;lt;= 64){
	 return 2;
	}
	if (intEdad &amp;gt; 64 &amp;amp;&amp;amp; intEdad &amp;lt;= 98){
	 return 3;
	}
	if (intEdad = 99){
	 return 4;
	}
	    return -1;
}

function innovaip_SortIntArray(intArray, arraySize, idx)
{
    if (arraySize == 1) return 1;
    
	var sortedArray = [];
				 //Prompt("ArraySize: " + arraySize);
	for (var i = 0;i&amp;lt;arraySize;i++) {
		sortedArray[i] = intArray[i];
		Prompt("item " + i + " is " + sortedArray[i]);
				 //Prompt( "Iteration: " + i + " = " + sortedArray[i] );
	}
	
	var numSwap = 1
	
	while (numSwap &amp;gt; 0) {
	    numSwap = 0;
		for (var j = 0;j&amp;lt;arraySize-1;j++) {
		    	 //Prompt("Comparing: " + sortedArray[j] + "," + sortedArray[j+1] )
			if (sortedArray[j] &amp;lt; sortedArray[j+1]) {
			    var temp;
				temp = sortedArray[j+1];
				sortedArray[j+1] = sortedArray[j];
				sortedArray[j] = temp;
				numSwap++;
			}
		}
				 //Prompt( "Swaps: " + numSwap );
	}
	
	var selectedAge = sortedArray[idx-1];
	Prompt("Selected age is " + selectedAge);
	
	var iterNum = 0
	
	for (var l = 0; l&amp;lt;= arraySize-1 ; l++) {
	    Prompt("Comparing:" + intArray[l] + "," + selectedAge )
		if ( intArray[l] == selectedAge) {
			return l;
		}
	}

	return 0;
}



function dblGetSubjectStoreColumn(inStoreName,inIDColumnName,inID)
{
	var retVal = null;
	try {
		var table = GetTableFromStore(inStoreName,"","@@"+inIDColumnName+"='"+inID+"'","");
		if (table != null &amp;amp;&amp;amp; table.ColumnCount &amp;gt;0) {
			var column = table[0];
			retVal = column;
		}
	}
	catch(err)
	{
		retVal = null;	
	}

	return retVal;
}



/*Valida que no se repitan los numeros/id de los contactos no efectivos*/

function ValidaNumeros2(Pregunta)
{
    for(var i= 1;i&amp;lt;=10;i++)
 	{
 		  
 		if(IterationIndex &amp;gt; 1)
 		{ 	
 			if(IterationIndex == i){continue;} 				
 		
 		  	if(Answer(Pregunta) == AnswerIter(Pregunta,i))
 		  	{	 		  		
 		  			//var respuesta= AnswerIter(9,i);
 		  	 		//Prompt("Respuesta en la pregunta 3: " + respuesta + "\n iteracción No. " + i.ToString());
 		  	 		return true;
 		    }
 		}  		 			
 		
    }
    
  	return false;
}

/*Valida y marca la edad exacta VS los rangos de Edad*/



function ValidarEdades(pregunta,r1,r2,pregunta2,respuesta)
{
	if(Answer(pregunta)&amp;gt;= r1 &amp;amp;&amp;amp; Answer(pregunta)&amp;lt;=r2)
	{
		SetAnswer(pregunta2,respuesta);		
	}

}

/* Valida que solo se acepten letras y no numeros en preguntas tipo texto
	parametro: cadena  ---&amp;gt; recibe el valor de la respuesta
 */

function ValidaSoloTexto(cadena)
{
	var patronLet = /^[a-zA-Z]*$/;	
	var patronNum = /^\d*$/;
	var respuesta = cadena.ToString();
	
	
	var arr = new Array();
	arr = respuesta;
	
	if(respuesta.search(patronNum) != 0)
	{	
		if(respuesta.search(patronLet) != 0 || arr.length &amp;lt; 3 )
		{			
			return true;
		}else
		{
			return false;
			
		}
    }else
    {
    	return true;
    }
    
}

/* recibe dos parametros*/

function ValidaMaximoDeCaracteres(cadena,limite)
{
	
	var respuesta = cadena.ToString().replace(/^\s+/g,'').replace(/\s+$/g,'');
	
	var arr = new Array();
	arr = respuesta;

	
	if(arr.length &amp;lt; limite )
	{			
		return true;
	}else
	{
		return false;
		
	}    
    
}



/* Validar solo números en una pregunta tipo texto y un minimo de 6 caracteres (validando cedulas de ciudadania) 

cedana -&amp;gt; la respuesta como texto
limite -&amp;gt; el minimo de caracteres aceptados

*/

function ValidaSoloNumeros(cadena,limite)
{
	var patronLet = /^[a-zA-Z]*$/;	
	var patronNum = /^\d*$/;
	var respuesta = cadena.ToString();
		
	var arr = new Array();
	arr = respuesta;
	
	if(respuesta.search(patronLet) != 0)
	{	
		if(respuesta.search(patronNum) != 0 || arr.length &amp;lt; limite )
		{			
			return true;
		}else
		{
			return false;
			
		}
    }else
    {    	
    	return true;
    }
    
}



/* Validar que la pregunta sea solo números y un máximo de caracteres

cadena -&amp;gt; la respuesta como texto
limite -&amp;gt; el minimo de caracteres aceptados

*/

function ValidaNumeros(cadena,limite)
{
	var patronLet = /^[a-zA-Z]*$/;	
	var patronNum = /^\d*$/;
	var respuesta = cadena.ToString();
		
	var arr = new Array();
	arr = respuesta;
	
	if(respuesta.search(patronLet) != 0)
	{	
		if(respuesta.search(patronNum) != 0 || arr.length &amp;gt; limite || respuesta == 0)
		{			
			return true;
		}else
		{
			return false;	
		}
    }else
    {    	
    	return true;
    }
    
}

//TBS Vietnam scripts

function dblNumOfCodesDupplicated(inQ)
{
	var retVal = 0;
	var i=0;
	var j=0;
	
	
	for (i=1; i&amp;lt;=GetTopicCount(inQ)-1;i++){
	{for (j=1;j&amp;lt;=GetTopicCount(inQ)-1;j++){
		if (IsTopicVisible(inQ,i) &amp;amp;&amp;amp; IsTopicVisible(inQ,i+j)&amp;amp;&amp;amp;AnswerChoice(inQ,i)==AnswerChoice(inQ,i+j)&amp;amp;&amp;amp;AnswerChoice(inQ,i)&amp;gt;=1) {
			retVal++;
		}}}
	}
	
	return retVal;
}

/*function TNS_SetQuesOrder(controlQuestion,variant0) 
{ 
	Prompt("answer of question index = " + Answer(controlQuestion).ToInt());
	var retVal=false; 
	if (variant0==8) 
	{ 
		switch(Answer(controlQuestion).ToInt()) 
		{ 
		case 1: RandomizeAnswers(CurrQues,[1,2,3,4,5,6,7,8]); break; 
		case 2: RandomizeAnswers(CurrQues,[4,1,2,3,5,6,7,8]); break; 
		case 3: RandomizeAnswers(CurrQues,[3,4,1,2,5,6,7,8]); break; 
		case 4: RandomizeAnswers(CurrQues,[2,3,4,1,5,6,7,8]); break; 
		case 5: RandomizeAnswers(CurrQues,[4,5,6,7,1,2,3,8]); break; 
		case 6: RandomizeAnswers(CurrQues,[7,4,5,6,1,2,3,8]); break; 
		case 7: RandomizeAnswers(CurrQues,[6,7,4,5,1,2,3,8]); break; 
		case 8: RandomizeAnswers(CurrQues,[5,6,7,4,1,2,3,8]); break; 
		} 
		retVal=true; 
	} 
	if (variant0==7) 
	{ 
		switch(Answer(controlQuestion).ToInt()) 
		{ 
		case 1: RandomizeAnswers(CurrQues,[1,2,3,4,5,6,7]); break; 
		case 2: RandomizeAnswers(CurrQues,[4,1,2,3,5,6,7]); break; 
		case 3: RandomizeAnswers(CurrQues,[3,4,1,2,5,6,7]); break; 
		case 4: RandomizeAnswers(CurrQues,[2,3,4,1,5,6,7]); break; 
		case 5: RandomizeAnswers(CurrQues,[4,5,6,7,1,2,3]); break; 
		case 6: RandomizeAnswers(CurrQues,[7,4,5,6,1,2,3]); break; 
		case 7: RandomizeAnswers(CurrQues,[6,7,4,5,1,2,3]); break; 
		case 8: RandomizeAnswers(CurrQues,[5,6,7,4,1,2,3]); break; 
		} 
		retVal=true; 
	}	
	return retVal; 
}*/

function TNS_rand(){
	return Math.floor(Math.random()*(999-100+1)+100);
}

function TNS_contains(arr,n) {
    var i = arr.length;
    while (i--) {
        if (arr[i] == n) {
            return true;
        }
    }
    return false;
}

function decodeArray(text){
	var array=[];
	var dcArray=[];
	var rndLetter=["А","Б","Е","И","К","Л","Р","С","Т","У"];
	var letter = /^[А-Я]/;
	var number = /^[0-9]/;
	var flag=false;
	
	for (var i=0;i&amp;lt;=text.length-1;i++){
		if (text.charAt(i).match(letter)||text.charAt(i).match(number)){
				array.push(text.charAt(i).toString());
		};
	};

	for (var i=0;i&amp;lt;=array.length-1;i++){
		if (array[i].match(number)){
			dcArray.push(array[i]);
		} else if (array[i].match(letter)) {
			if (!flag) {
				for (var j=0;j&amp;lt;=rndLetter.length-1;j++){
					if (array[i]==rndLetter[j]){
						dcArray.push(j);
						break;
					};
				};
				flag=true;
			} else {
				switch (array[i]) {
					case "К":
					case "Б":
					case "А":
						dcArray.push(1);
						break;
					case "У":
					case "Э":
						dcArray.push(2);
						break;
					case "Е":
					case "И":
						dcArray.push(3);
						break;
					case "Р":
					case "Т":
						dcArray.push(4);
						break;
					case "Л":
					case "С":
					case "Я":
						dcArray.push(5);
						break;
					default:
						dcArray.push(0);
						break;
				};
			};
		};
	};
	
	return dcArray;
}

function returnTimeDiff_Uni(timeDiff,t1,t2,t3,t4){
	var timeCode=[
		["К","Б","А"],
		["У","Э"],
		["Е","И"],
		["Р","Т"],
		["Л","С","Я"]
	];
	var rndLetter=["А","Б","Е","И","К","Л","Р","С","Т","У"];
	var rndTimeIdx=Math.floor((Math.random()*100)+1);
	var rndLetterIdx=Math.floor(Math.random()*10);
	
	var text=new String();	
	var i,j;
	
	if (timeDiff&amp;lt;t1){
		i=0;
		if (rndTimeIdx&amp;lt;33){
			j=0;
		} else if (rndTimeIdx&amp;gt;=33 &amp;amp;&amp;amp; rndTimeIdx&amp;lt;66) {
			j=1;
		} else if (rndTimeIdx&amp;gt;=66) {
			j=2;
		};
	} else if (timeDiff&amp;gt;=t1 &amp;amp;&amp;amp; timeDiff&amp;lt;t2){
		i=1;
		if (rndTimeIdx&amp;lt;=50){
			j=0;
		} else if (rndTimeIdx&amp;gt;50) {
			j=1;
		};
	} else if (timeDiff&amp;gt;=t2 &amp;amp;&amp;amp; timeDiff&amp;lt;t3){
		i=2;
		if (rndTimeIdx&amp;lt;=50){
			j=0;
		} else if (rndTimeIdx&amp;gt;50) {
			j=1;
		};
	} else if (timeDiff&amp;gt;=t3 &amp;amp;&amp;amp; timeDiff&amp;lt;t4){
		i=3;
		if (rndTimeIdx&amp;lt;=50){
			j=0;
		} else if (rndTimeIdx&amp;gt;50) {
			j=1;
		};
	} else if (timeDiff&amp;gt;=t4){
		i=4;
		if (rndTimeIdx&amp;lt;33){
			j=0;
		} else if (rndTimeIdx&amp;gt;=33 &amp;amp;&amp;amp; rndTimeIdx&amp;lt;66) {
			j=1;
		} else if (rndTimeIdx&amp;gt;=66) {
			j=2;
		};
	};
	
	text=rndLetter[rndLetterIdx]+timeCode[i][j];
		
	return text;
}

function generateCheckSum(array){
	var c=0;
	
	var invertedArray=[];
	
	var d=[
		   [0,1,2,3,4,5,6,7,8,9],
		   [1,2,3,4,0,6,7,8,9,5],
		   [2,3,4,0,1,7,8,9,5,6],
		   [3,4,0,1,2,8,9,5,6,7],
		   [4,0,1,2,3,9,5,6,7,8],
		   [5,9,8,7,6,0,4,3,2,1],
		   [6,5,9,8,7,1,0,4,3,2],
		   [7,6,5,9,8,2,1,0,4,3],
		   [8,7,6,5,9,3,2,1,0,4],
		   [9,8,7,6,5,4,3,2,1,0]
		];

	var p=[
	       [0,1,2,3,4,5,6,7,8,9],
	       [1,5,7,6,2,8,3,0,9,4],
	       [5,8,0,3,7,9,6,1,4,2],
	       [8,9,1,6,0,4,3,5,2,7],
	       [9,4,5,3,1,2,6,8,7,0],
	       [4,2,8,6,5,7,3,9,0,1],
	       [2,7,9,3,8,0,6,4,1,5],
	       [7,0,4,6,9,1,3,2,5,8]
	    ];
	
	var inv=[0, 4, 3, 2, 1, 5, 6, 7, 8, 9];
	
	for (var i=array.length-1;i&amp;gt;=0;i--){
		invertedArray.push(array[i]);
	}
	
	for (var i=0;i&amp;lt;invertedArray.length-1;i++){
		c=d[c][p[((i+1)%8)][invertedArray[i]]];
	}
	
//	array.push(c);
	
	return inv[c];
}





/*	Nome da Função:	IsRange
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Checar se existe um valor de-para
	Tipo Quest:		Single e Mult
	Exemplo:		IsRange(QRef(5), 18, 24);
*/
	function IsRange(inQIdx, inBegin, inEnd) {
		var retVal = false;
		for (var j = inBegin; j &amp;lt;= inEnd; j++) {
			if (Contains(inQIdx, j)) {
				retVal = true; break; }
		}
		return retVal;
	}

/*	Nome da Função:	IsRangeIter
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Checar se existe um valor de-para em um Iter
	Tipo Quest:		Single e Mult Iter
	Exemplo:		IsRange(QRef(5), 18, 24);
*/
	function IsRangeIter(inQIdx, inIter, inBegin, inEnd) {
		var retVal = false;
		for (var j = inBegin; j &amp;lt;= inEnd; j++) {
			if (ContainsIter(inQIdx, j, inIter)) {
				retVal = true; break; }
		}
		return retVal;
	}


/*	Nome da Função:	IsRangeChoice
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Checar se existe um valor de-para em questões Topics
	Tipo Quest:		Topics
	Exemplo:		IsRangeChoice(QRef(5), 1, 1,5);
*/
	function IsRangeChoice(inQIdx, inAnsIdx, inBegin, inEnd) {
		var retVal = false;
		for (var j = inBegin; j &amp;lt;=inEnd; j++) {
			if (AnswerChoice(inQIdx, inAnsIdx) == j) {
				retVal = true; break; }
		}
		return retVal;
	}

/*	Nome da Função:	checkMail
	Programador:	Internet (desconhecido)
	Data:			00/00/0000
	Descrição:		Checar se o email é válido
	Tipo Quest:		Strings
	Exemplo:		checkMail(Answer(100)); // checkMail(SelectedAnswerText(100));
*/
	function checkMail(mail) {
		var er = new RegExp(/^[A-Za-z0-9_\-\.]+@[A-Za-z0-9_\-\.]{2,}\.[A-Za-z0-9]{2,}(\.[A-Za-z0-9])?/);
		if (typeof(mail) == "string"){
			if (er.test(mail)) { return true; }
		} else if (typeof(mail) == "object"){
			if (er.test(mail.value)){ 
				return true; 
			}
		} else {
			return false;
			}
	}

/*	Nome da Função:	IsRight
	Programador:	Internet (desconhecido)
	Data:			00/00/0000
	Descrição:		Buscar valor À Direita
	Tipo Quest:		Strings
	Exemplo:		IsRight(Answer(100)); // IsRight(SelectedAnswerText(100));
*/
	function IsRight(str, n) {
		str = str.ToString();
		if (n &amp;lt;= 0)
			{ return ""; }
		else if (n &amp;gt; String(str).length)
			{ return str;}
		else {
			var iLen = String(str).length;
			return String(str).substring(iLen, iLen - n);
			}
	}

/*	Nome da Função:	IsLeft
	Programador:	Internet (desconhecido)
	Data:			00/00/0000
	Descrição:		Buscar valor À Esquerda
	Tipo Quest:		Strings
	Exemplo:		IsLeft(Answer(100)); // IsLeft(SelectedAnswerText(100));
*/
	function IsLeft(str, n) {
		str = str.ToString();
		if (n &amp;lt;= 0)
		    return "";
		else if (n &amp;gt; String(str).length)
		    return str;
		else
		    return String(str).substring(0,n);
	}

/*	Nome da Função:	BuscaCep (Inativa)
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Buscar Cep (Projeto Leroy)
	Tipo Quest:		Strings
	Exemplo:		BuscaCep(QRef(10), QRef(11), QRef(5));
*/
	function BuscaCep(inQidxCep, inQidxRua, inQidxCidade) {
		var retVal = false;
		var arrBaseCep = new Array();
		
			for (var i = 0; i &amp;lt; arrBaseCep.length; i++) {
				if (Answer(inQidxCep) == arrBaseCep[i].substr(0,8)) {	
					retVal = true;
					break; }
			}
		
			if (retVal) {
				SetAnswer(inQidxRua, arrBaseCep[i - 1].substr(9,102)); }
	}

/*	Nome da Função:	DBLIsValidPhone
	Programador:	Ron Tal
	Data:			00/00/0000
	Descrição:		Checar Telefone Válido (8 dígitos)
	Tipo Quest:		Numérica
	Exemplo:		DBLIsValidPhone(Answer(QRef(20));
	OBS:			Adaptado (9 dígitos SP) - 14/08/2012
*/


/*	Nome da Função:	IsContainsTo
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Busca um valor entre várias Questões
	Tipo Quest:		Single e Mult
	Exemplo:		IsContainsTo(QRef(108), QRef(111), 2);
*/
	function IsContainsTo(inQIdxBegin, inQIdxEnd, inAnswer) {
		var retVal = false;
		for (var j = inQIdxBegin; j &amp;lt;= inQIdxEnd; j++) {
			if (Contains(j, inAnswer)) {
				retVal = true; }
		}
		return retVal;
	}

/*	Nome da Função:	IsContainsRangeTo
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Busca um ou mais valores entre várias Questões
	Tipo Quest:		Single e Mult
	Exemplo:		IsContainsRangeTo(QRef(108), QRef(111), 2,10);
*/
	function IsContainsRangeTo(inQIdxBegin, inQIdxEnd,  inBegin, inEnd) {
		var retVal = false;
			for (var j = inQIdxBegin; j &amp;lt;= inQIdxEnd; j++) {		
				for (var k = inBegin; k &amp;lt;= inEnd; k++) {
					if (Contains(j, k)) {
						retVal = true; }
				}
			}
		return retVal;
	}

/*	Nome da Função:	IsSelectedAnswerRankingIdx
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Busca Index da Resposta Selecionada p/ Ranking
	Tipo Quest:		Ranking
	Exemplo:		IsSelectedAnswerRankingIdx(QRef(108), 1);
*/
	function IsSelectedAnswerRankingIdx(inQidx, inRank) {
		for (var i = 1; i &amp;lt;= GetAnswerCount(inQidx); i++) {
			if (ContainsSpecificRate(inQidx, inRank, i)) {
				break; }
		}
		return i;
	}

/*	Nome da Função:	IsSomaAnswer
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Soma uma sequência de Questões
	Tipo Quest:		Numéricas Single e Multi
	Exemplo:		IsSomaAnswers(QRef(90), QRef(100));
*/
//Função Soma Answer
	function IsSomaAnswer(inBegin, inEnd) {
		var intSoma = 0;
			for (var j = inBegin; j &amp;lt;=inEnd; j++)
				{ intSoma += Answer(j); }
		
		return intSoma;
	}

/*	Nome da Função:	IsSomaTopic
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Soma uma sequência de Questões
	Tipo Quest:		Numéricas Topics
	Exemplo:		IsSomaTopics(QRef(90), QRef(100));
*/
	function IsSomaTopic(inBegin, inEnd) {
		var intSoma = 0;
			for (var j = inBegin; j &amp;lt;= inEnd; j++)
				if (IsTopicVisible(CurrQues, j)) {
					intSoma += AnswerChoice(CurrQues, j); }
		
		return intSoma;
	}
	function IsSomaTopics(inQidx, inBegin, inEnd) {
		var intSoma = 0;
			for (var j = inBegin; j &amp;lt;= inEnd; j++)
				if (IsTopicVisible(inQidx, j)) {
					intSoma += AnswerChoice(inQidx, j); }
		
		return intSoma;
	}


/*	Nome da Função:	IsSearchOthers
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Busca Outras na Lista Fixa
	Tipo Quest:		Single e Multi
	Exemplo:		IsSearchOthers(AddtionalText(CurrQues), QRef(CurrQues)); /
					IsSearchOthers(SelectedAnswerText(CurrQues+1), QRef(CurrQues));
					Msg 'Verificar Outros vs Lista de Marcas.'
	OBS: 			Alterado dia 21/08 - inclusão do RegExp
*/
	function IsSearchOthers(inQidxOther, inQidxList) {
		var retVal = false;
		if (inQidxOther != '') {
			var arrList = new Array();
			
			for (var j=1;j&amp;lt;=GetAnswerCount(inQidxList);j++) {
				arrList[j-1] = IsTrim(IsUpper(GetAnswerOriginalText(inQidxList, j)));
			}
			
			var reList = new RegExp(arrList);
			var reAnswer = new RegExp(IsTrim(IsUpper(inQidxOther)));
			
			if (reAnswer.test(reList)) {
				Prompt("A resposta (ou alguma variante) digitada em outros '"+inQidxOther+"' está na lista de marcas. Verifique");
				retVal = true;
			}
		}
		return retVal;
	}

/*	Nome da Função:	IsTrim
	Programador:	Internet (desconhecido)
	Data:			00/00/0000
	Descrição:		Remove espaços
	Tipo Quest:		Strings
	Exemplo:		IsTrim(Answer(CurrQues)); / IsTrim(SelectedAnswerText(CurrQues));
*/
	function IsTrim(str) {
		str = str.ToString();
		return str.replace(/^\s+|\s+$/g,"");
	}

/*	Nome da Função:	IsLTrim
	Programador:	Internet (desconhecido)
	Data:			00/00/0000
	Descrição:		Remove espaços à Esquerda
	Tipo Quest:		Strings
	Exemplo:		IsLTrim(Answer(CurrQues)); / IsLTrim(SelectedAnswerText(CurrQues));
*/
	function IsLTrim(str) {
		str = str.ToString();
		return str.replace(/^\s+/,"");
	}
	 
/*	Nome da Função:	IsRTrim
	Programador:	Internet (desconhecido)
	Data:			00/00/0000
	Descrição:		Remove espaços à Direita
	Tipo Quest:		Strings
	Exemplo:		IsRTrim(Answer(CurrQues)); / IsRTrim(SelectedAnswerText(CurrQues));
*/
	function IsRTrim(str) {
		str = str.ToString();
		return str.replace(/\s+$/,"");
	}

/*	Nome da Função:	IsUpper
	Programador:	Internet (desconhecido)
	Data:			00/00/0000
	Descrição:		Letras em Maiúscula
	Tipo Quest:		Strings
	Exemplo:		IsUpper(Answer(CurrQues)); / IsUpper(SelectedAnswerText(CurrQues));
*/
	function IsUpper(str) {
		str = str.ToString();
		return str.toUpperCase();
	}
		
/*	Nome da Função:	IsUpper
	Programador:	Internet (desconhecido)
	Data:			00/00/0000
	Descrição:		Letras em Minúscula
	Tipo Quest:		Strings
	Exemplo:		IsLower(Answer(CurrQues)); / IsLower(SelectedAnswerText(CurrQues));
*/
	function IsLower(str) {
		str = str.ToString();
		return str.toLowerCase();
	}

/*	Nome da Função:	IsCheckAbertas
	Programador:	Clayton
	Data:			11/07/2012
	Descrição:		Checagem Abertas
	Tipo Quest:		Single
	Exemplo:		IsCheckAbertas([QRef(175), QRef(177), ...]);
*/
	function IsCheckAbertas(inQids)  {
		var retErro = '';
		var numOfQues = inQids.length;
			for (var j = 0; j &amp;lt; numOfQues; j++) {
				if (Answered(inQids[j]) &amp;amp;&amp;amp; NotAnswered(inQids[j] + 1))
					{ retErro += ('Questão : ' + VarName(inQids[j] + 1) + ' - Falta Resposta \n'); }
				if (NotAnswered(inQids[j]) &amp;amp;&amp;amp; Answered(inQids[j] + 1))
					{ retErro += ('Questão : ' + VarName(inQids[j] + 1) + ' - Sobra Resposta \n'); }
			}
			if (retErro != '') { ExtRefNum = 'Abertas - Erro'; }
				else { ExtRefNum = 'Abertas - Ok'; }
		return retErro;	
	}

/*	Nome da Função:	IsEncerre
	Programador:	Wilson Ruiz/Clayton Araujo
	Data:			16/08/2012
	Descrição:		Essa função verifica se uma questão foi respondida como encerre, se sim ela seta as váriáveis de filtro e ocorrência e vai para o encerramento da entrevista.
	Tipo Quest:		Simgle/Multiple/Topic
	Exemplo:		IsEncerre((Contains(CurrQues, 1)), QRef(42), QRef(44)) (Encerra se na questão atual a resposta for código 1)
*/
function IsEncerre(InFunction, InMsg, InOcor, InEncer){
	SetAnswer(InEncer, 2);
	if (InFunction) {
		Prompt("Se "+InMsg+". Agradeça e encerre.");
		SetAnswer(InOcor, VarName(CurrQues) + " = "+InMsg+".");
		SetAnswer(InEncer, 1);
	}
	return InFunction;
}

/*	Nome da Função:	IsArrend
	Programador:	Internet (desconhecido)
	Data:			24/09/2012
	Descrição:		Arredonda um número para o inteiro mais próximo, tanto para baixo quanto para cima. Por exemplo, o número 3.3 arredondado será 3, mas o número 3.8 arredondado será 4.
	Tipo Quest:		Numérica
	Exemplo:		
*/
function IsArrend(InValue, InDecimals){
	var retVal = Math.round(InValue * Math.pow(10, InDecimals)) / Math.pow(10, InDecimals);
	return retVal;
}

/*	Nome da Função:	IsArrendDown
	Programador:	Internet (desconhecido)
	Data:			24/09/2012
	Descrição:		Arredonda um número para o inteiro mais baixo
	Tipo Quest:		Numérica
	Exemplo:		
*/
function IsArrendDown(InValue, InDecimals){
	var retVal = Math.floor(InValue * Math.pow(10, InDecimals)) / Math.pow(10, InDecimals);
	return retVal;
}
/*	Nome da Função:	IsAnyOneOfVars
	Programador:	Clayton
	Data:			13/11/2012
	Descrição:		Busca 1 ou Mais valores entre 1 ou mais Variáveis
					Se Deseja saber onde o valor foi localizado, digite adicione true no final da função, senão, digite false;
	Tipo Quest:		Vars
	Exemplo:		IsAnyOneOfVars([1], [v1, v2], false) / IsAnyOneOfVars([1,2,3], [v1], false) / IsAnyOneOfVars([1,2,3], [v1,v2,v3], false)
*/
function IsAnyOneOfVars(inValues, inVars, inGetVar) {
	var retVal = false;
	var retVar = 0;
	var numOfValues = inValues.length;
	var numOfVars = inVars.length;
	
	for (var i=0; i&amp;lt;numOfValues; i++)
	{
		for (var j=0; j&amp;lt;numOfVars; j++)
		{
			if (inVars[j] == inValues[i])
			{
			retVal = true;
			retVar = j+1;
			break;
			}
		}
	}
	if (inGetVar)
	{
		return retVar;
	}
	else
	{	
		return retVal;
	}
}
/*	Nome da Função:	IsRangeOneOfVars
	Programador:	Clayton
	Data:			20/11/2012
	Descrição:		Busca valores de x a x entre 1 ou mais Variáveis
					Se Deseja saber onde o valor foi localizado, digite adicione true no final da função, senão, digite false;
	Tipo Quest:		Vars
	Exemplo:		IsRangeOneOfVars(1,10, [v1, v2], false) / IsRangeOneOfVars(1,3, [v1], false) / IsRangeOneOfVars(1,200, [v1,v2,v3], false)
*/
function IsRangeOneOfVars(inValueBegin, inValueEnd, inVars, inGetVar) {
	var retVal = false;
	var retVar = 0;
	var numOfVars = inVars.length;
	
	for (var i=inValueBegin; i&amp;lt;=inValueEnd; i++)
	{
		for (var j=0; j&amp;lt;numOfVars; j++)
		{
			if (inVars[j] == i)
			{
			retVal = true;
			retVar = j+1;
			break;
			}
		}
	}
	if (inGetVar)
	{
		return retVar;
	}
	else
	{	
		return retVal;
	}
}

/*	Nome da Função:	IsRangeCount
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Checar se existe um valor de-para e retorna a quantidade
	Tipo Quest:		Single e Mult
	Exemplo:		IsRange(QRef(5), 18, 24);
*/
	function IsRangeCount(inQIdx, inBegin, inEnd) {
		var retVal = 0;
		for (var j = inBegin; j &amp;lt;= inEnd; j++) {
			if (Contains(inQIdx, j)) {
				retVal += 1; }
		}
		return retVal;
	}

/*	Nome da Função:	IsRangeChoiceCount
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Checar se existe um valor de-para em questões Topics e retorna a quantidade
	Tipo Quest:		Topics
	Exemplo:		IsRangeChoice(QRef(5), 1, 1,5);
*/
	function IsRangeChoiceCount(inQIdx, inAnsIdx, inBegin, inEnd) {
		var retVal = 0;
		for (var j = inBegin; j &amp;lt;=inEnd; j++) {
			if (AnswerChoice(inQIdx, inAnsIdx) == j) {
				retVal += 1; }
		}
		return retVal;
	}

/*	Nome da Função:	IsContainsOneOfTopics
	Programador:	Clayton
	Data:			19/11/2012
	Descrição:		Checar se existe um/ou valor(es) em questões Topics
	Tipo Quest:		Topics
	Exemplo:		IsContainsOneOfTopics(QRef(5), 1, [1,2,5,4]);
*/
	function IsContainsOneOfTopics(inQTarget,inTopic,inAnswers)
	{
		var retVal = false;
		var numOfAnswers = inAnswers.length;
		for (var i=0;i&amp;lt;numOfAnswers;i++) {
			if (AnswerChoice(inQTarget,inTopic) == inAnswers[i]) {
				retVal = true;
				break;
			}
		}
		return retVal;
	}

/*	Nome da Função:	IsSetAnswersRangeVisible
	Programador:	Clayton
	Data:			
	Descrição:		Exibir/Ocultar respostas de X a X
	Tipo Quest:		Single e Multi
	Exemplo:		IsSetAnswersRangeVisible(CurrQues, true, true, 1, 10);
*/
function IsSetAnswersRangeVisible(inQIdx, inShow, inReset, inAnsBegin, inAnsEnd){
	var inAnswers = new Array();
	var i = 0;
	
	for (var j = inAnsBegin; j&amp;lt;=inAnsEnd; j++)
	{
		inAnswers[i] = j;
		i++;
	}
		
	SetAnswerVisible(inQIdx, inShow, inReset, inAnswers);

}
/*	Nome da Função:	IsSetTopicsRangeVisible
	Programador:	Clayton
	Data:			
	Descrição:		Exibir/Ocultar respostas de X a X
	Tipo Quest:		Topics
	Exemplo:		IsSetTopicsRangeVisible(CurrQues, true, true, 1, 10);
*/
function IsSetTopicsRangeVisible(inQIdx, inShow, inReset, inTopBegin, inTopEnd){
	var inTopics = new Array();
	var i = 0;
	
	for (var j = inTopBegin; j&amp;lt;=inTopEnd; j++)
	{
		inTopics[i] = j;
		i++;
	}
		
	SetTopicVisible(inQIdx, inShow, inReset, inTopics);
}
/*	Nome da Função:	IsGetIndexAnswers
	Programador:	Clayton
	Data:			17/12/2012
	Descrição:		Retornar os índices dos itens da lista em Matriz
	Tipo Quest:		RU/RM
	Exemplo:		IsGetIndexAnswers(QRef(1));
*/
function IsGetIndexAnswers(inQIdx){
	var inAnswers = new Array();
	var i = 0;
	
	for (var j=1;j&amp;lt;=GetAnswerCount(inQIdx);j++)
	{
		inAnswers[i] = j;
		i++;
	}
		
	return inAnswers;
}
/*	Nome da Função:	IsGetIndexAnswersExclude
	Programador:	Clayton
	Data:			17/12/2012
	Descrição:		Retornar os índices dos itens da lista em Matriz
	Tipo Quest:		RU/RM
	Exemplo:		IsGetIndexAnswersExclude(QRef(1), [1,2,3]);
*/
function IsGetIndexAnswersExclude(inQIdx, AnsExclude){
	var inAnswers = new Array();
	var i = 0;
	
	for (var j=1;j&amp;lt;=GetAnswerCount(inQIdx);j++)
	{
		if (IndexOfInt(j, AnsExclude)==-1)
		{	
			inAnswers[i] = j;
			i++;
		}
	}
		
	return inAnswers;
}
/*	Nome da Função:	IsGetIndexTopics
	Programador:	Clayton
	Data:			17/12/2012
	Descrição:		Retornar os índices dos itens da lista em Matriz
	Tipo Quest:		Topic
	Exemplo:		IsGetIndexTopics(QRef(1));
*/
function IsGetIndexTopics(inQIdx){
	var inTopics = new Array();
	var i = 0;
	
	for (var j=1;j&amp;lt;=GetTopicCount(inQIdx);j++)
	{
		inTopics[i] = j;
		i++;
	}
		
	return inTopics;
}

/*	Nome da Função:	IsGetNumOfTopicsWithValuesRange
	Programador:	Clayton
	Data:			04/01/2013
	Descrição:		Facilitando o uso da da função GetNumOfTopicsWithValues, para colocar um range nos valores
	Tipo Quest:		Topics
	Exemplo:		IsGetNumOfTopicsWithValuesRange(CurrQues, 20,97);
*/
function IsGetNumOfTopicsWithValuesRange(inQIdx, inBegin, inEnd) {
	var retVal = false;
		for (var j=inBegin;j&amp;lt;=inEnd;j++)
		{
			if (GetNumOfTopicsWithValues(inQIdx, j) &amp;gt; 0) { retVal = true; break;}
		}
	return retVal;
}

/*	Nome da Função:	IsDataNasc
	Programador:	Clayton
	Data:			16/01/2013
	Descrição:		Retorna a idade baseada na Data de Nascimento
	Tipo Quest:		Date
	Exemplo:		IsDataNasc(QRef(1));
*/
function IsDataNasc(inQIdxDataNasc)
{
	var retVal = 0;
	retVal = (Now.Year-Answer(inQIdxDataNasc).Year);
	if ((Answer(inQIdxDataNasc).Month &amp;gt; Now.Month) || (Answer(inQIdxDataNasc).Month == Now.Month &amp;amp;&amp;amp; Answer(inQIdxDataNasc).Day &amp;gt; Now.Day))
	{
		retVal = retVal-1;
	}
	return retVal;
}

/*	Nome da Função:	IsDataNascIter
	Programador:	Clayton
	Data:			16/01/2013
	Descrição:		Retorna a idade baseada na Data de Nascimento
	Tipo Quest:		Date Iter
	Exemplo:		IsDataNascIter(QRef(1), IterationIdex);
*/
function IsDataNascIter(inQIdxDataNasc, inIter)
{
	var retVal = 0;
	retVal = (Now.Year-Answer(inQIdxDataNasc).Year);
	if ((AnswerIter(inQIdxDataNasc, inIter).Month &amp;gt; Now.Month) || (AnswerIter(inQIdxDataNasc, inIter).Month == Now.Month &amp;amp;&amp;amp; AnswerIter(inQIdxDataNasc, inIter).Day &amp;gt; Now.Day))
	{
		retVal = retVal-1;
	}
	return retVal;
}

/*	Nome da Função:	IpsChekTrim
	Programador:	Wilson
	Data:			18-01-2013
	Descrição:		Essa função verifica se os valores digitados em uma questão aberta ou semi-aberta
					são apenas espaços, apenas números ou ambas as situações e retorna erro.
	Tipo Quest:		Aberta e Addictional Text
	Exemplo:		IpsChekTrim(true,true,false) | IpsChekTrim(false,false,true)&amp;amp;&amp;amp;Contains(CurrQues,1)
	Descrição do comando: IpsTrimTeste( ; nome da função
							true,		; aceita true/false. Se for true retorna erro caso a questão estiver apenas com espaços, se for false não aplica a checagem de espaços.
							true,		; aceita true/false. Se for true retorna erro caso a questão estiver apenas com números, se for false não aplica a checagem de números.
							false)		; aceita true/false. Faz a checagem de números e espaços para o Addictional Text. se estiver com false não checa o Addictional.
	Observação: Quando usar essa função para questões Addictional precisa vincular ao código fechado de outros.
*/
function IpsChekTrim(chkTxt,chkNum,chkAdd){
	var retVal = false;
	if (chkTxt){
		var txt = Answer(CurrQues).ToString()
		txt = txt.replace(/\s/g,'')
		if (txt == ''){
			retVal = true;
			return retVal;
		}
	}
	if (chkNum){
		var num = Answer(CurrQues).ToString()
		num = num.replace(/1|2|3|4|5|6|7|8|9|0|\s/g,'')
		if (num == ''){
			retVal = true;
			return retVal;
		}
	}
	if (chkAdd){
		var add = AdditionalText(CurrQues).ToString()
		add = add.replace(/1|2|3|4|5|6|7|8|9|0|\s/g,'')
		if (add == ''){
			retVal = true;
			return retVal;
		}
	}
}

/*	Nome da Função:	IpsChekTrimIterIter
	Programador:	Wilson
	Data:			28-02-2013
	Descrição:		Essa função verifica se os valores digitados em uma questão aberta ou semi-aberta
					são apenas espaços, apenas números ou ambas as situações e retorna erro.
	Tipo Quest:		Aberta e Addictional Text
	Exemplo:		IpsChekTrimIter(true,true,false) | IpsChekTrimIter(false,false,true)&amp;amp;&amp;amp;Contains(CurrQues,1)
	Descrição do comando: IpsTrimTeste( ; nome da função
							true,		; aceita true/false. Se for true retorna erro caso a questão estiver apenas com espaços, se for false não aplica a checagem de espaços.
							true,		; aceita true/false. Se for true retorna erro caso a questão estiver apenas com números, se for false não aplica a checagem de números.
							false)		; aceita true/false. Faz a checagem de números e espaços para o Addictional Text. se estiver com false não checa o Addictional.
	Observação: Quando usar essa função para questões Addictional precisa vincular ao código fechado de outros.
		    Texto padrão da mensagem(sugestão): ATENÇÃO: Não aceitar apenas números ou em branco!
*/
function IpsChekTrimIter(chkTxt,chkNum,chkAdd){
	var retVal = false;
	if (chkTxt){
		var txt = AnswerIter(CurrQues,IterationIndex).ToString()
		txt = txt.replace(/\s/g,'')
		if (txt == ''){
			retVal = true;
			return retVal;
		}
	}
	if (chkNum){
		var num = AnswerIter(CurrQues,IterationIndex).ToString()
		num = num.replace(/1|2|3|4|5|6|7|8|9|0|\s/g,'')
		if (num == ''){
			retVal = true;
			return retVal;
		}
	}
	if (chkAdd){
		var add = AdditionalTextIter(CurrQues,IterationIndex).ToString()
		add = add.replace(/1|2|3|4|5|6|7|8|9|0|\s/g,'')
		if (add == ''){
			retVal = true;
			return retVal;
		}
	}
}

/*	Nome da Função:	IsFilterAnswersByCods
	Programador:	Clayton
	Data:			28/02/13
	Descrição:		Filtrar pór código
	Tipo Quest:		Single e Multiple
	Exemplo:		IsFilterAnswersByCods(CurrQues, true, true, [10,11,13,9996,998,999]);
*/
function IsFilterAnswersByCods(inQIdx, inShow, inReset, inCods)
{
	var numOfCods = inCods.length;
	var inAnswers = new Array();

	for (var i=0;i&amp;lt;numOfCods;i++)
	{
		inAnswers[i] = GetAnswerChoiceIdxByCode(inQIdx,inCods[i]);
	}

	SetAnswerVisible(inQIdx, inShow, inReset, inAnswers);

}

/*	Nome da Função:	IsFilterTopicsByCods
	Programador:	Clayton
	Data:			28/02/13
	Descrição:		Filtrar pór código
	Tipo Quest:		Grid
	Exemplo:		IsFilterTopicsByCods(CurrQues, true, true, [10,11,13,9996,998,999], QRef(CurrQues-1));
*/
function IsFilterTopicsByCods(inQIdx, inShow, inReset, inCods, inQIdxCod)
{
	var numOfCods = inCods.length;
	var inTopics = new Array();

	for (var i=0;i&amp;lt;numOfCods;i++)
	{
		inTopics[i] = GetAnswerChoiceIdxByCode(inQIdxCod,inCods[i]);
	}

	SetTopicVisible(inQIdx, inShow, inReset, inTopics);

}

/*	Nome da Função:	IsFilterAnswersMarcasByCid
	Programador:	Clayton
	Data:			28/02/13
	Descrição:		Filtra as marcas do AddLists por cidade(neste Add List contém todas as marcas de cigarro)
	Tipo Quest:		Single e Multiple
	Exemplo:		IsFilterAnswersMarcasByCid(CurrQues, true, true, Answer(1));
	
	**Cidades GCS:
		Bauru					1
		São José do Rio Preto	2
		Belo Horizonte			3
		Recife					4
		Porto Alegre			5
		Curitiba				6
		Ribeirão Preto			7
		São Paulo				8
		Rio de Janeiro			9 **
*/
function IsFilterAnswersMarcasByCid(inQIdx, inShow, inReset, inCodCid)
{
	var inAnswers = new Array();
	var i = 0;
	var tblTable = GetTableFromStore("LISTA_DE_MARCAS_GCS","","cid_"+inCodCid+"=1","marca");
	for (var j=0; j&amp;lt;tblTable.RowCount; j++)
	{
		var rowRow = tblTable[j];
		if (rowRow["status_cod"]==1)
		{
			inAnswers[i] = rowRow["marca_cod"].ToInt();
			i++;
		}
	}
	
	IsFilterAnswersByCods(inQIdx, inShow, inReset, inAnswers);
}

/*	Nome da Função:	IsSetAnswerCodeLabel
	Programador:	Clayton
	Data:			05/03/13
	Descrição:		
	Tipo Quest:		Single e Multipe
	Exemplo:		IsSetAnswerCodeLabel(CurrQues, [42,43]);
*/
function IsSetAnswerCodeLabel(inQIdx, inIgnore)
{
	for (var j=1;j&amp;lt;=GetAnswerCount(inQIdx);j++)
	{
		SetAnswerText(inQIdx, j, AnswerCode(inQIdx, j)+'-'+GetAnswerOriginalText(inQIdx, j));
	}
	if (inIgnore!='undefined')
	{
		for (var j=0;j&amp;lt;inIgnore.length;j++)
		{
			SetAnswerText(inQIdx, inIgnore[j], GetAnswerOriginalText(inQIdx, inIgnore[j]));
		}
	}
}

/*	Nome da Função:	IsSetTopicCodeLabel
	Programador:	Clayton
	Data:			17/05/13
	Descrição:		
	Tipo Quest:		Topic
	Exemplo:		IsSetTopicCodeLabel(CurrQues, [42,43]);
*/
function IsSetTopicCodeLabel(inQIdx, inQIdxCod, inIgnore)
{
	for (var j=1;j&amp;lt;=GetTopicCount(inQIdx);j++)
	{
		SetTopicText(inQIdx, j, AnswerCode(inQIdxCod, j)+'-'+GetTopicOriginalText(inQIdx, j));
	}
	if (inIgnore!='undefined')
	{
		for (var j=0;j&amp;lt;inIgnore.length;j++)
		{
			SetTopicText(inQIdx, inIgnore[j], GetTopicOriginalText(inQIdx, inIgnore[j]));
		}
	}
}

/*	Nome da Função:	IsSortAnswersByCod
	Programador:	Clayton
	Data:			06/03/2013
	Descrição:		Ordenar Lista por Index
	Tipo Quest:		
	Exemplo:		
*/
function IsSortAnswersByCod(inQIdx)
{
	var inAnswersCod = new Array();
	var inAnswersIdx = new Array();
	for (var i=1;i&amp;lt;=GetAnswerCount(inQIdx);i++)
	{
		inAnswersCod[i-1] = AnswerCode(inQIdx, i);
		//Prompt("cod "+inAnswersCod[i-1]);
	}
	var inAnswersCod = inAnswersCod.sort(IsCrescente);
	for (var i=1;i&amp;lt;=GetAnswerCount(inQIdx);i++)
	{
		inAnswersIdx[i-1] = GetAnswerChoiceIdxByCode(inQIdx, inAnswersCod[i-1]);
		//Prompt("idx "+inAnswersIdx[i-1]);
	}	
	RandomizeAnswers(inQIdx, inAnswersIdx);
	/* Crescente */
		function IsCrescente(index1, index2)
		{
			return index1 - index2;
		}
	/* Decrescente */
		function IsDecrescente(index1, index2)
		{
			return index2 - index1;
		}
}

/*	Nome da Função:	IsRangeAll
	Programador:	Clayton
	Data:			09/04/2013
	Descrição:		Checar se existe todos os valores de-para
	Tipo Quest:		Single e Mult
	Exemplo:		IsRangeAll(QRef(5), 18, 24);
*/
	function IsRangeAll(inQIdx, inBegin, inEnd) {
		var intVal = 0;
		for (var j=inBegin;j&amp;lt;=inEnd;j++) { if (Contains(inQIdx, j)) { intVal++} }
		if (intVal==inEnd) { return true; }
		else { return false; }
	}

/*	Nome da Função:	IsContainsByOriginalText
	Programador:	Clayton
	Data:			15/04/2013
	Descrição:		Buscar Resposta por Original Text
	Tipo Quest:		Single e Mult
	Exemplo:		IsContainsByOriginalText(QRef(5), 'Outros');
*/
function IsContainsByOriginalText(inQues, inText)
{
	var retVal = false;
	for (var j=1;j&amp;lt;=GetAnswerCount(inQues);j++)
	{
		if (Contains(inQues, j) &amp;amp;&amp;amp; GetAnswerOriginalText(inQues, j)==inText) { retVal = true; break; }
	}
	return retVal;
}

/* 
	Nome da Função:	IsSetAnswersByCod
	Programador:	Clayton
	Data:			29/04/13
	Descrição:		
	Tipo Quest:		Single e Multipe
	Exemplo:		IsSetAnswersByCod(QRef(1), CurrQues);
*/
function IsSetAnswersByCod(inQIdx, inQIdxTarget)
{
	if (NumOfSelectedChoices(inQIdxTarget)&amp;gt;0)
	{
		var numOfAnswers = GetAnswers(inQIdxTarget);
		var codOfAnswers = new Array();
		
		for (var j=0; j&amp;lt;numOfAnswers.length; j++)
		{
			codOfAnswers[j] = GetAnswerChoiceIdxByCode(inQIdx, AnswerCode(inQIdxTarget, numOfAnswers[j]));
		}
		SetAnswer(inQIdx, codOfAnswers);
	}
	else
	{
		SetAnswer(inQIdx, GetAnswerChoiceIdxByCode(inQIdx, SelectedAnswerCode(inQIdxTarget)));
	}
}

/*	Nome da Função:	IsRangeVar
	Programador:	Clayton
	Data:			23/05/2013
	Descrição:		Checar se existe um valor de-para
	Tipo Quest:		Variável de Usuário
	Exemplo:		IsRangeVar(Var, 8,10);
*/
	function IsRangeVar(inVar, inBegin, inEnd) {
		var retVal = false;
		if (inVar&amp;gt;=inBegin &amp;amp;&amp;amp; inVar&amp;lt;=inEnd) { retVal = true; }
		return retVal;
	}

/*	Nome da Função:	IsContainsNumOfValues
	Programador:	Clayton
	Data:			27/05/2013
	Descrição:		Retorna o total de valores que a questão possui
	Tipo Quest:		Multiple
	Exemplo:		IsContainsNumOfValues(CurrQues, [1,2,3,4]);
*/
	function IsContainsNumOfValues(inQIdx, inAnswers) {
		var retVal = 0;
		for (var j=0;j&amp;lt;inAnswers.length;j++)
		{
			if (Contains(inQIdx, inAnswers[j])) { retVal++; }
		}
		return retVal;
	}

/*	Nome da Função:	IsContainsTopicsValues
	Programador:	Clayton
	Data:			27/05/2013
	Descrição:		Checa se há valores nos Tópics
	Tipo Quest:		Single Topic
	Exemplo:		IsContainsTopicsValues(CurrQues, [1,2,3,9], [1], false, false);
					false, false = Qlqer um dos Tópicos, Qlqer um dos Valores
					true, false = Todos os Tópicos, Qlqer um dos Valores
					true, true = Todos os Tópicos, Todos os Valores
*/
	function IsContainsTopicsValues(inQIdx, inTopics, inAnswers, inAllTopics, inAllAnswers) {
		var retVal = false;
		var intValTopic = 0;
		var intValAnswer = 0;
		
		for (var tpc=0;tpc&amp;lt;inTopics.length;tpc++)
		{
			if (!inAllTopics &amp;amp;&amp;amp; !inAllAnswers)
			{
				for (var ans=0;ans&amp;lt;inAnswers.length;ans++)
				{
					if (AnswerChoice(inQIdx, inTopics[tpc])==inAnswers[ans]) { retVal=true; break; }
				}
			}
			if (inAllTopics)
			{
				if (IsContainsOneOfTopics(inQIdx, inTopics[tpc], inAnswers)) { intValTopic++; }
			}
			if (inAllAnswers)
			{
				for (var ans=0;ans&amp;lt;inAnswers.length;ans++)
				{
					if (AnswerChoice(inQIdx, inTopics[tpc])==inAnswers[ans]) { intValAnswer++; }
				}
			}
		}
		if (inAllTopics &amp;amp;&amp;amp; intValTopic==inTopics.length) { retVal=true; }
		if (inAllAnswers &amp;amp;&amp;amp; intValAnswer==inAnswers.length) { retVal=true; }
		if ((inAllAnswers &amp;amp;&amp;amp; intValAnswer==inAnswers.length) &amp;amp;&amp;amp; (inAllTopics &amp;amp;&amp;amp; intValTopic==inTopics.length)) { retVal=true; }

		return retVal;
	}

/*	Nome da Função:	IsGetTopicsTextWithValues
	Programador:	Clayton
	Data:			04/06/2013
	Descrição:		Exibe o Texto dos Topics que Tem um determinado valor
	Tipo Quest:		Single Grid
	Exemplo:		IsGetTopicsTextWithValues(QRef(1), [1,2,3,4], [QRef(1),QRef(2)], [4,5]);
					Se não tiver Outros, coloque 0 IsGetTopicsTextWithValues(QRef(1), [1,2,3,4], [0], [0]);
*/
	function IsGetTopicsTextWithValues(inQIdx, inAnswers, inOuts, inAnswersOuts) {
		var retVal = "";
		var txtOut = "";
		var ans = 0;
		for (var tpc=1;tpc&amp;lt;=GetTopicCount(inQIdx);tpc++)
		{
				if (IsContainsOneOfTopics(inQIdx, tpc, inAnswers))
				{
					if (tpc==inAnswersOuts[ans])
					{
						txtOut = AdditionalText(inOuts[ans]) + Answer(inOuts[ans]);
						retVal += txtOut+", ";
						ans++;
					}
					else
					{
						retVal += GetTopicOriginalText(inQIdx, tpc)+", ";
					}
				}
		}
		return retVal.substring(0, retVal.length-2);
	}

/*	Nome da Função:	IsGetIdxTopicsWithValues
	Programador:	Clayton
	Data:			06/06/2013
	Descrição:		Exibe os IDXs dos Topics que Tem um determinado valor
	Tipo Quest:		Single Grid
	Exemplo:		IsGetIdxTopicsWithValues(QRef(1), [1,2,3,4]);
*/
	function IsGetIdxTopicsWithValues(inQIdx, inAnswers) {
		var retVal = new Array();
		var i = 0;
		for (var tpc=1;tpc&amp;lt;=GetTopicCount(inQIdx);tpc++)
		{
			if (IsContainsOneOfTopics(inQIdx, tpc, inAnswers))
			{
				retVal[i] = tpc; i++;
			}
		}
		return retVal;
	}

/*	Nome da Função:	IsRandomAnswersWithExclusive
	Programador:	Clayton
	Data:			06/03/2013
	Descrição:		Retorna as opções e rodízio e fixa determinados índices no fim da lista
	Tipo Quest:		Single
	Exemplo:		IsRandomAnswersWithExclusive(CurrQues, [10,11], false);
					inSet = true somente se for para setar a ordem do rodízio, se for para exibição deixe false;
*/
function IsRandomAnswersWithExclusive(inQIdx, inExcludeRandom, inSet)
{
		var retVal = new Array();
		var inAnswersIdx = new Array();
		var j = 0;
		for (var i=1;i&amp;lt;=GetAnswerCount(inQIdx);i++)
		{
			if (!InArray(i, inExcludeRandom))
			{
				inAnswersIdx[j] = i; j++;
			}
		}
		inAnswersIdx = RandomizeArray(inAnswersIdx);
		
		j = 0;
		for (var i=0;i&amp;lt;GetAnswerCount(inQIdx);i++)
		{	
			if (i&amp;lt;inAnswersIdx.length) { retVal[i] = inAnswersIdx[i]; }
			else { retVal[i] = inExcludeRandom[j]; j++; }
		}
		
		if (!inSet)
			{ RandomizeAnswers(inQIdx, retVal); }
		else if (inSet)
			{ return retVal; }
}

/*	Nome da Função:	IsRangeTopics
	Programador:	Clayton
	Data:			17/05/2013
	Descrição:		Retorna a soma dos valores em questões Topics
	Tipo Quest:		Topics
	Exemplo:		IsRangeTopics(QRef(5), 1,5)&amp;gt;0;
*/
	function IsRangeTopics(inQIdx, inTpcIn, inTpcEnd) {
		var retVal = 0;
		for (var j = inTpcIn; j &amp;lt;=inTpcEnd; j++) {
			if (AnswerChoice(inQIdx, j)&amp;gt;= 0) {
				retVal += AnswerChoice(inQIdx, j); }
		}
		return retVal;
	}

/*	Nome da Função:	IsSortAnswersWithExclusive
	Programador:	Clayton
	Data:			06/03/2013
	Descrição:		Retorna as opções em ordem de indice e fixa determinados índices no fim da lista
	Tipo Quest:		Single
	Exemplo:		IsSortAnswersWithExclusive(CurrQues, [10,11]);
*/
function IsSortAnswersWithExclusive(inQIdx, inExcludeRandom)
{
		var retVal = new Array();
		var inAnswersIdx = new Array();
		var j = 0;
		for (var i=1;i&amp;lt;=GetAnswerCount(inQIdx);i++)
		{
			if (!InArray(i, inExcludeRandom))
			{
				inAnswersIdx[j] = i; j++;
			}
		}
	
		j = 0;
		for (var i=0;i&amp;lt;GetAnswerCount(inQIdx);i++)
		{	
			if (i&amp;lt;inAnswersIdx.length) { retVal[i] = inAnswersIdx[i]; }
			else { retVal[i] = inExcludeRandom[j]; j++; }
		}
		
		RandomizeAnswers(inQIdx, retVal);
}

/*	Nome da Função:	IsContainsAnyIterRange
	Programador:	Clayton
	Data:			09/08/2013
	Descrição:		Buscar Valor no Iter
	Tipo Quest:		Single e Multiple
	Exemplo:		IsContainsAnyIterRange(CurrQues, 1, 10);
*/
function IsContainsAnyIterRange(inQIdx, inBegin, inEnd)
{
	var retVal = false;
	for (var j=inBegin; j&amp;lt;=inEnd; j++)
	{
		if (ContainsAnyIter(inQIdx, j))
		{
			retVal = true;
			break;
		}
	}
	return retVal;
}

/*	Nome da Função:	IsSetTextCod
	Programador:	Clayton
	Data:			14/08/2013
	Descrição:		Setar código(indíce) no lugar do label
	Tipo Quest:		Answer e Tópic
	Exemplo:		IsSetTextCod(inQIdx, inTopic)
*/
function IsSetTextCod(inQIdx, inTopic)
{
	if (inTopic)
	{
		for (var j=1;j&amp;lt;=GetTopicCount(inQIdx);j++)
		{
			SetTopicText(inQIdx, j, ""+j+"");
		}
	}
	else
	{	
		for (var j=1;j&amp;lt;=GetAnswerCount(inQIdx);j++)
		{
			SetAnswerText(inQIdx, j, ""+j+"");
		}
	}
}

/*	Nome da Função:	IsRemoveAcento
	Programador:	Internet
	Data:			21/08/2013
	Descrição:		Remove os Acentos da String
	Tipo Quest:		String
	Exemplo:		IsRemoveAcento("São Paulo");
*/
function IsRemoveAcento(strToReplace)
{
var str_acento= "áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇ";
var str_sem_acento = "aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC";
var nova="";
	for (var i = 0; i &amp;lt; strToReplace.length; i++)
	{
		if (str_acento.indexOf(strToReplace.charAt(i)) != -1) {
			nova+=str_sem_acento.substr(str_acento.search(strToReplace.substr(i,1)),1);
		} else {
			nova+=strToReplace.substr(i,1);
		}
	}
	return nova;
}

/*	Nome da Função:	IsSetValuesRandom
	Programador:	Clayton/Carla
	Data:			
	Descrição:		Escolhe X valores rodiziado com base nos parametros de X a X
	Tipo Quest:		Single
	Exemplo:		IsSetValuesRandom(CurrQues, 1, 1, 4, 0)
*/
function IsSetValuesRandom(inSet, inSize, inMin, inMax, inIgnore)
{
	if (NotAnswered(inSet))
	{
		do {
			var arraySort = new Array();
			arraySort = CreateRandomArray(inSize, inMin,inMax);
		} while (IsRangeOneOfVars(inMin, inMax,[inIgnore],false) &amp;amp;&amp;amp; IsAnyOneOfVars([inIgnore],[arraySort[0],arraySort[1]],false));
		
		var inAns = new Array();
		for (var j=0;j&amp;lt;inSize;j++)
		{
			inAns[j] = arraySort[j];
		}
		SetAnswer(inSet, inAns);
	}
}

/*	Nome da Função:	IsCheckIntCompra
	Programador:	Clayton
	Data:			04-11
	Descrição:		Checar Intenção de Compra entre Marca Mãe e Variante
	Tipo Quest:		Loop Single/Multiple
	Exemplo:		
*/
function IsCheckIntCompra(inQIdxMae, inIdxCodMae, inQIdxVar, inIdxCodVarIn, inIdxCodVarFim)
{
	var retVal = false;
	var i = 0;
	var k = 0;
	
	for (var j=inIdxCodVarIn;j&amp;lt;=inIdxCodVarFim;j++)
	{	
		if (AnsweredIter(inQIdxVar, j))
		{
			k++;
			if (AnswerIter(inQIdxVar, j)&amp;gt;AnswerIter(inQIdxMae, inIdxCodMae))
			{
				i++;
			}
		}
	}
	if (i == k)
	{
		Prompt("As variantes de "+IterationName+" não podem ter respostas maior do que "
			+AnswerIter(inQIdxMae, inIdxCodMae)+" para todas");
		retVal = true;
	}
	
	return retVal;
}

/*	Nome da Função:	IsCheckOrdemSelOutros
	Programador:	Clayton
	Data:			02/12/2013
	Descrição:		Checar se os outros foram selecionados na Ordem Outros 1, Outros 2, etc.
	Tipo Quest:		RU/RM
	Exemplo:		IsCheckOrdemSelOutros(CurrQues, 3, 12);
*/
function IsCheckOrdemSelOutros(inQues, inQtdeOuts, inIdxOut1)
{
	var retVal = false;
	var i = 2;
	for (var j=inIdxOut1+1;j&amp;lt;inIdxOut1+inQtdeOuts;j++)
	{
		if (IsAnswerVisible(inQues, j) &amp;amp;&amp;amp; IsAnswerVisible(inQues, j-1) &amp;amp;&amp;amp; Contains(inQues, j) &amp;amp;&amp;amp; !Contains(inQues, j-1))
		{
			Prompt("Por favor, escolha na Ordem Outros "+(i-1)+", Outros "+i+", etc.");
			retVal = true;
			break;
		}
		i++;
	}	
	return retVal;
}

/*	Nome da Função:	IsCheckEspEst (falta testar)
	Programador:	Clayton
	Data:			04/12/2013
	Descrição:		Checar se o que foi mencionado no Espontâneo está no estimulado, com a possibilidade de Ignorar NH/NS
	Tipo Quest:		RU/RM/Grid
	Exemplo:		IsCheckEspEst([QRef(2), QRef(3)], CurrQues, false, [11]);
*/
function IsCheckEspEst(inEsps, inEst, inGridEst, inIgnore)
{
	var retVal = false;

	for (var i=0;i&amp;lt;inEsps.length;i++)
	{
		for (var j=1;j&amp;lt;=GetAnswerCount(inEsps[0]);j++)
		{
			if (!InArray(j, inIgnore))
			{
				if (inGridEst)
				{
					if (IsTopicVisible(inEst, j) &amp;amp;&amp;amp; Contains(inEsps[i], j) &amp;amp;&amp;amp; !ContainsSpecificRate(inEst, 1, j))
					{
						Prompt("Em "+VarName(inEsps[i])+" selecionou a opção "+GetAnswerOriginalText(inEsps[i], j)+" devendo selecioná-la nesta questão. Verifique!");
						retVal = true;
					}
				} else {
					if (IsAnswerVisible(inEst, j) &amp;amp;&amp;amp; Contains(inEsps[i], j) &amp;amp;&amp;amp; !Contains(inEst, j))
					{
						Prompt("Em "+VarName(inEsps[i])+" selecionou a opção "+GetAnswerOriginalText(inEsps[i], j)+" devendo selecioná-la nesta questão. Verifique!");
						retVal = true;
					}
				}
			}
			if (retVal) { break; }
		}
		if (retVal) { break; }
	}
    return retVal;
}

/*	Nome da Função:	
	Programador:	
	Data:			
	Descrição:		
	Tipo Quest:		
	Exemplo:		
*/

/***************************************************************************************/

function NoMoreThanOneFirstAnswer(InQIdx)
{
	var count=0;
	var RetVal=false;
	for(var i=1; i&amp;lt;=GetTopicCount(InQIdx); i++)
	{
		if(AnswerChoice(InQIdx,i)==1)
		{
			count++;
		}
	}
	
	if(count&amp;gt;1)
	{
		RetVal=true;
	}

	return RetVal

}

function LessThan4Ans(InQIdx)
{
	var count3=0;
	var RetVal3=false;
	for(var i=1; i&amp;lt;=GetTopicCount(InQIdx); i++)
	{
		if(AnswerChoice(InQIdx,i)==2)
		{
			count3++;
		}
	}
	
	if(count3&amp;gt;3)
	{
		RetVal3=true;
	}

	return RetVal3

}




function dblToJSArray(inArray){
	var retVal = new Array();
		
	for(var i=0; i&amp;lt;inArray.length; i++){		
		retVal.push(inArray[i]);
	}	
	
	return retVal;
}

function dblColorFromRGB(red, green, blue){
	return (255&amp;lt;&amp;lt;24)+ (red&amp;lt;&amp;lt;16) + (green&amp;lt;&amp;lt;8) + blue;
}


function dblDistanceFromGPSFence (fenceLat, fenceLon)
{
	var pi = Math.PI;
	var fenceLatInRad=fenceLat* pi / 180;
	var fenceLonInRad=fenceLon* pi / 180;
	var targetLatInRad = GetGPSLocation().Latitude * pi / 180;
	var targetLonInRad = GetGPSLocation().Longitude * pi / 180;
	var dist = Math.acos(Math.sin(targetLatInRad) * Math.sin(fenceLatInRad) + Math.cos(targetLatInRad) * Math.cos(fenceLatInRad) * Math.cos(targetLonInRad - fenceLonInRad)) * 6371;
	
	return dist;
}

function dblIsInGPSFence (fenceLat, fenceLon, distInKM)
{
	var dist = dblDistanceFromGPSFence(fenceLat, fenceLon);
	var retVal = false;
	
	if(dist&amp;lt;distInKM){
	    retVal=true;}
	else{
	    retVal=false;
	}
	return retVal;
}

function dblDistanceBetweenTwoLocations (firstLat, firstLon, secondLat, secondLon)
{
	var pi = Math.PI;
	var firstLatInRad=firstLat* pi / 180;
	var firstLonInRad=firstLon* pi / 180;
	var targetLatInRad = secondLat * pi / 180;
	var targetLonInRad = secondLon * pi / 180;
	var dist = Math.acos(Math.sin(targetLatInRad) * Math.sin(firstLatInRad) + Math.cos(targetLatInRad) * Math.cos(firstLatInRad) * Math.cos(targetLonInRad - firstLonInRad)) * 6371;
	
	return dist;
}


function dblSumNumericGrid(inQ)
{
	var retVal=0;
	var numOfTopics=GetTopicCount(inQ);
	var i;
	
	for(i=1; i&amp;lt;=numOfTopics; i++)
	{
		if (IsTopicVisible(inQ,i)) {
			retVal+=AnswerChoice(inQ,i);
		}
	}
	
	return retVal;
}

function dblContainsOneOf(inQTarget,inAnswers)
{
	var retVal = false;
	var numOfAnswers = inAnswers.length;
	var i;
	for (i=0;i&amp;lt; numOfAnswers;i++) {
		if (Contains(inQTarget,inAnswers[i])) {
			retVal = true;
			break;
		}
	}
	return retVal;
}


//function dblContainsAll(inQTarget,inAnswers)
//{
//	var retVal = true;
//	var numOfAnswers = arguments.length-1;
//	var i;
//	for (i=0;i&amp;lt; numOfAnswers;i++) {
//		retVal = retVal &amp;amp;&amp;amp; Contains(inQTarget,arguments[i+1]);
//	}
//	return retVal;
//}

function dblContainsAllOf(inQTarget,inAnswers)
{
	var retVal = true;
	var numOfAnswers = inAnswers.length;
	var i;
	for (i=0;i&amp;lt; numOfAnswers;i++) {
		retVal = retVal &amp;amp;&amp;amp; Contains(inQTarget,inAnswers[i]);
	}
	return retVal;
}

function dblNumOfTopicsContains(inQ, inValueToCheck)
{
	var retVal = 0;
	var i=0;
	for (i=1; i&amp;lt;=GetTopicCount(inQ);i++){
		if (IsTopicVisible(inQ,i) &amp;amp;&amp;amp; AnswerChoice(inQ,i) == inValueToCheck) {
			retVal++;
		}
	}
	
	return retVal;
}

function dblNumOfTopicsContainsChoice(inQ, inValueToCheck)
{
	var retVal = 0;
	var i=0;
	for (i=1; i&amp;lt;=GetTopicCount(inQ);i++){
		if (IsTopicVisible(inQ,i) &amp;amp;&amp;amp; ContainsChoice(inQ,i,inValueToCheck)) {
			retVal++;
		}
	}
	
	return retVal;
}

function dblNumOfIterContains(inQ, inValueToCheck)
{
	var retVal = 0;
	var i=0;
	for (i=1; i&amp;lt;IterationIndex;i++){
		if (ContainsIter(inQ,inValueToCheck,i)) {
			retVal++;
		}
	}
	
	return retVal;
}


function dblSetSpecificTopic(inQ, inTopicIndex, inValue)
{
	var curTopics = GetTopicCount(inQ);
	var newAnswers=new Array();
	var newArIdx=0;
	var i;
	for (i=0;i&amp;lt; curTopics;i++) {
		var actualTopic = i+1;
		if (actualTopic == inTopicIndex) {
			newAnswers[i] = inValue;
		}
		else {
			newAnswers[i] = AnswerChoice(inQ,actualTopic);
		}
	}
	SetAnswer(inQ,newAnswers);
}

function dblSetSpecificTopicChoice(inQ, inTopicIndex, inValue)
{
	var curTopics = GetTopicCount(inQ);
	var newAnswers=new Array();
	newAnswers.push(inValue);
	var i;
	var ansArr = GetAnswersChoice(inQ, inTopicIndex);
	for (i=0;i &amp;lt; ansArr.length;i++)
 	{
		newAnswers.push(ansArr[i]);
	}
	SetAnswerChoice(inQ, inTopicIndex, newAnswers);
}

function dblSetSpecificAnswer(inQ, inAnswerIdx, inChecked)
{
	var curAnswers = GetAnswers(inQ);
	var newAnswers=new Array();
	var newArIdx=0;
	var i;
	for (i=0;i&amp;lt; curAnswers.length;i++) {
		if (curAnswers[i] != inAnswerIdx) {
			newAnswers[newArIdx] = curAnswers[i];
			newArIdx++;
		}
	}
	if (inChecked) {
		newAnswers[newArIdx] = inAnswerIdx;
	}
	if (newAnswers.length &amp;gt; 0) {
	
		SetAnswer(inQ,newAnswers);
	}
	else {
		ClearAnswer(inQ);
	}
}

function dblSetAnswersByAnswers(inQTarget,inQids)
{
	var numOfQues = inQids.length;
	var numOfAnswers = GetAnswerCount(inQids[0]);
	var i;
	for (i=1;i&amp;lt;= numOfAnswers;i++) {
		var contained = false;
		var j;
		for (j=0; j&amp;lt;numOfQues;j++) {
			contained = Contains(inQids[j],i);
			if (contained) {
				break;
			}
		}
		if (contained) {
			dblSetSpecificAnswer(inQTarget, i,true);
		}
	}
}

function dblSetAnswersByAnswersEx (inQTarget,inQids,inExcludeHiddenTargetAnswers)
{
	var numOfQues = inQids.length;
	var numOfAnswers = GetAnswerCount(inQids[0]);
	var i;
	// go over all answers and for each check if it exists in the source questions
	for (i=1;i&amp;lt;= numOfAnswers;i++) {
		var contained = false;
		var j;
		// go over all source questions and check if the answer is checked
		for (j=0; j&amp;lt;numOfQues;j++) {
			contained = Contains(inQids[j],i);
			if (contained) {
				break;
			}
		}
		// in case it was contained check if need to add to target question
		if (contained) {
			var addAnswer = true;
			if ((inExcludeHiddenTargetAnswers) &amp;amp;&amp;amp; !IsAnswerVisible(inQTarget,i)) {
				addAnswer = false;
			}
			if (addAnswer) {
				dblSetSpecificAnswer(inQTarget, i,true);
			}
		}
	}
}


function dblSumOfTopics (inQuesIdx)
{
      var retVal = 0;
      var i;
      var numOfTopics = GetTopicCount(inQuesIdx);
      for (i=0;i&amp;lt;numOfTopics;i++) {
            var currTopic = i+1;
            if (IsTopicVisible (inQuesIdx, currTopic)) {
                  var currValue = AnswerChoice(inQuesIdx, currTopic);
                  if (currValue != -99999) {
	                  retVal += currValue;
                  }
            }
      }


      return retVal;
}

function dblFormatNumberToCurrency(num) {
	var retVal = "";
	var num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
	num = "0";
	var sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	var cents = num%100;
	num = Math.floor(num/100).toString();
	var addZero = "";
	if(cents&amp;lt;10) {
		addZero = "0";
	}
	for (var i = 0; i &amp;lt; Math.floor((num.length-(1+i))/3); i++) {
		num = num.substring(0,num.length-(4*i+3))+','+num.substring(num.length-(4*i+3));
	}
	retVal = (((sign)?'':'-') + '$' + num + '.' +addZero+ cents)
	return retVal;
}

function dblToFloat(inNumber)
{
	var retVal = parseFloat(inNumber.toString().replace(",", "."));
	return retVal;
}


function dblSetAnswerVisible(inQTarget,inValue,inReset,inAnswers)
{
	var retVal = false;
	var numOfAnswers = inAnswers.length;
	var i;
	if (inReset) {
		SetAnswerVisible(inQTarget,true);
	}
	for (i=0;i&amp;lt; numOfAnswers;i++) {
		SetAnswerVisible(inQTarget, inAnswers[i], inValue);
	}
	return retVal;
}


function dblContainsByText(inQIdx, inText)
{
	var retVal = false;
	var i=0;
	for (i=0; i&amp;lt;GetAnswerCount(inQIdx); i++){
		var idx = i+1;
		var text = AnswerText(inQIdx,idx);
		if (text == inText) {
			if (Contains(inQIdx,idx)) {
				retVal = true;
				break;
			}
		}
	}
	return retVal;
}


function dblFilterAnswersByAnswersByText (inTargetQ, inShow,inSourceQ)
{
	SetAnswerVisible(inTargetQ,!inShow);	
	var i =0;
	for (i=0; i&amp;lt;GetAnswerCount(inTargetQ);i++){
		var idx = i+1;
		var text = AnswerText(inTargetQ,idx);
		if (dblContainsByText(inSourceQ,text)) {
			SetAnswerVisible(inTargetQ,idx,inShow);	
		}
	}
	
	return true;
}

function dblFilterTopicsByAnswersByText (inTargetQ, inShow, inSourceQ)
{
	SetTopicVisible(inTargetQ,!inShow);	
	var i=0;
	for (i=0; i&amp;lt;GetTopicCount(inTargetQ); i++){
		var idx = i+1;
		var text = GetTopicOriginalText(inTargetQ,idx);
		if (dblContainsByText(inSourceQ,text)) {
			SetTopicVisible(inTargetQ,idx,inShow);	
		}
	}
	
	return true;
}

function dblGetSubjectStoreRow(inStoreName,inIDColumnName,inID)
{
	var retVal = null;
	try {
		var table = GetTableFromStore(inStoreName,"","@@"+inIDColumnName+"='"+inID+"'","");
		if (table != null &amp;amp;&amp;amp; table.RowCount &amp;gt;0) {
			var row = table[0];
			retVal = row;
		}
	}
	catch(err)
	{
		retVal = null;	
	}

	return retVal;
}

function dblIsRegEx (pattern,value) {
	var pattern = new RegExp(pattern);
	return pattern.test(value);
}

function dblDateToSQLDate(inDate)
{
	var retVal = "";
	retVal = inDate.Year+"-"+inDate.Month+"-"+inDate.Day;	
	return retVal;
}

function dblOrderArray(inOrderArray, inDataArray)
{
	var retVal = CreateRandomArray(inOrderArray.length);
	var i = 0;
	for (i = 0; i &amp;lt; inOrderArray.length; i++) {
		retVal[i] = inDataArray[inOrderArray[i]-1];
	}
	return retVal;
} 

function dblRespondentID ()
{
	var retVal = "".concat("D", SID, "-", DeviceIndex);
	return retVal;
}


	/*_@_USERCODE_END_@*/

	//_@_AddHandler_@{ Begin Add Handlers
	//_@_AddHandler_@} End Add Handlers

	//_@_HandlerZone_@{
		function
		GetBucketValue_1()
		{
			return (Answer(3)==1) ? 1 : 0;
		}
		function
		GetBucketValue_2()
		{
			return (Answer(3)==2) ? 1 : 0;
		}
		function
		GetBucketValue_3()
		{
			return (Answer(3)==3) ? 1 : 0;
		}
		function
		GetBucketValue_4()
		{
			return (Answer(3)==4) ? 1 : 0;
		}
		function
		GetBucketValue_5()
		{
			return (Answer(3)==5) ? 1 : 0;
		}
		function
		HandleChapterEnter_2()
		{
			return (Answer(QRef(2)) != -1);
		}
		function
		HandleChapterEnter_4()
		{
			return (Answer(QRef(2)) == -1);
		}
		
		function QuestionStart_4()
		{
SetTextFormat(CurrQues, SelectedAnswerText(QRef(3)));
		}
		
		
		function QuestionStart_5()
		{
SetTextFormat(CurrQues, SelectedAnswerText(QRef(3)));
		}
		
		
		function QuestionStart_6()
		{
SetTextFormat(CurrQues, SelectedAnswerText(QRef(3)));
		}
		
		
		function QuestionStart_7()
		{
SetTextFormat(CurrQues, SelectedAnswerText(QRef(3)));
		}
		
		
		function QuestionExpression_1()
		{
var randomIndexesOrder = CreateRandomArray(GetAnswerCount(QRef(3)));
var len = randomIndexesOrder.length;
var currQuotaName = "";
var finalSelectedQuota = -1;
var maxDiff = 0;
var currDiff = 0;
for (var i = 0; i &amp;lt; len; i++)
{
	currQuotaName = AnswerText(QRef(3), randomIndexesOrder[i]);
	currDiff = QuotaMgr.GetQuotaTotal(currQuotaName) - QuotaMgr.GetQuotaCurrent(currQuotaName);
	if (currDiff &amp;gt; maxDiff)
	{
		maxDiff = currDiff;
		finalSelectedQuota = randomIndexesOrder[i];
	}
}

if (finalSelectedQuota != -1)
{
	SetAnswer(QRef(3), finalSelectedQuota);
}
return finalSelectedQuota;
		}
		
		
		function HandleQuestionJump_3(ioJump)
		{
			/*_@_CC_@{0}_@_CC_@*/
			ioJump.retVal = 2;//eJumpQuestionResult.ejqrCancel
			ioJump.outIdx = -2;
			if (1 &amp;lt; 0) {
			}
			
		}
		
	//_@_HandlerZone_@}


    function JSDBLInitAllScript()
    {
    }var eJumpQuestionResult = {ejqrNext:0, ejqrSubmit:1,ejqrCancel:2,ejqrFilter:3,ejqrNone:4,ejqrIndex:5,ejqrChapter:6};
var ePlatform = {None:0, Web:1, PC:2, PDA:4, MobileWeb:8, SmartPhone:16, Android:32, AllWindows:31, AllJSEnabled: 34, All:63};
var eAttachmentSource = {easDefault:0};
var eAskButtons = {OKCancel:0, YesNoCancel:1, YesNo:2};
var eAskResult = {None:0, OK:1, Yes:2, No:3, Cancel:4};
var eQuotaFilledResult = {Default:0,Filter:1,Cancel:2,Nothing:3};
var eExtraLabel = { MatrixLower:0, MatrixMiddle:1, MatrixUpper:2, MatrixIrrelevant:3, ScaleLower:4, ScaleMiddle:5, ScaleUpper:6, CountersTotal:7,CountersRemaining:8, NumericGridTotal:9, NumericGridRemaining:10 }; 

var eULQuestionType = {eqtYesNo: 0, 
eqtAmerican: 1, 
eqtNumeric: 2, 
eqtFreeText: 3, 
eqtMultiSelect: 4, 
eqtRating: 5, 
eqtScale: 6, 
eqtMatrix: 7, 
eqtMultiTopics: 8, 
eqtNoQuestion: 9, 
eqtDateTime: 10, 
eqtCounters: 11, 
eqtStopper: 12, 
eqtMassiveMultiSelect: 13, 
eqtExpression: 14, 
eqtMultiText: 15, 
eqtMultiNumeric: 16, 
eqtMultimedia: 17, 
eqtMultiTopicsSelect: 18, 
eqtGPSQuestion: 19, 
eqtListSource: 20, 
eqtPositionTopicsOnImage: 21, 
eqtNumOfTypes: 22};

var eRenderGridAlignment = {Top: 0, 
Center: 1, 
Bottom: 2};

var eInterviewExtraField = {AttemptsPerCompletedInterview: 0, 
AdherenceToMethodology: 1};
&lt;/Source&gt;
&lt;/UserLogicContents&gt;</ULSource><RestrictSPSS>False</RestrictSPSS><ExtraText1 /><ExtraBool1>False</ExtraBool1><ExtraBool2>False</ExtraBool2><ExtraInt1>-1</ExtraInt1><ExtraInt2>0</ExtraInt2><STGVersion>1.32.0.0</STGVersion><ULAssemblyData>AAEAAAD/////AQAAAAAAAAAMAgAAAEdVc2VyTG9naWNDcmVhdG9yLCBWZXJzaW9uPTEuMC4xLjMsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAKVN1cnZleVRvR28uVXNlckxvZ2ljLkNyZWF0b3IuQXNzZW1ibHlEYXRhEAAAAAZtVGFibGUNbVN1cnZleUNvbnN0cw9tU3VydmV5U25pcHBldHMNbUNoYXB0ZXJUYWJsZQ1tTGFzdEJ1Y2tldElEEW1MYXN0TWV0YUJ1Y2tldElED21TdXJ2ZXlJbml0Q29kZRBtU3VydmV5QmxvY2tDb2RlEW1MYXN0TGlzdFNvdXJjZUlEE21MYXN0Q3VzdG9tQWN0aW9uSUQHbUZsYXZvcg5tVXNlR2xvYmFsQ29kZQttVXNlT3JnQ29kZQ5tU3RyaWN0SlNDaGVjaxdtTGFzdEF0dGFjaG1lbnRTb3VyY2VJRA5tU3VydmV5TmF2Q29kZQMDAwMAAAEBAAAEAAAAAAEeU3lzdGVtLkNvbGxlY3Rpb25zLkhhc2h0YWJsZVtdHFN5c3RlbS5Db2xsZWN0aW9ucy5IYXNodGFibGUeU3lzdGVtLkNvbGxlY3Rpb25zLkhhc2h0YWJsZVtdHlN5c3RlbS5Db2xsZWN0aW9ucy5IYXNodGFibGVbXQgICAgkU3VydmV5VG9Hby5Vc2VyTG9naWMuQ3JlYXRvci5lRmxhdm9yAgAAAAEBAQgCAAAACQMAAAAJBAAAAAkFAAAACQYAAAAGAAAAAgAAAAYHAAAAAAkHAAAAAQAAAAEAAAAF+P///yRTdXJ2ZXlUb0dvLlVzZXJMb2dpYy5DcmVhdG9yLmVGbGF2b3IBAAAAB3ZhbHVlX18ACAIAAAACAAAAAQEBAQAAAAkHAAAABwMAAAAAAQAAAAYAAAADHFN5c3RlbS5Db2xsZWN0aW9ucy5IYXNodGFibGUJCQAAAAkKAAAACQsAAAAJDAAAAAkNAAAACQ4AAAAEBAAAABxTeXN0ZW0uQ29sbGVjdGlvbnMuSGFzaHRhYmxlBwAAAApMb2FkRmFjdG9yB1ZlcnNpb24IQ29tcGFyZXIQSGFzaENvZGVQcm92aWRlcghIYXNoU2l6ZQRLZXlzBlZhbHVlcwAAAwMABQULCBxTeXN0ZW0uQ29s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Z2ljLkNyZWF0b3IuSnVtcEluZm8CAAAAL1N1cnZleVRvR28uVXNlckxvZ2ljLkludGVyZmFjZXMuZVVMU2tpcEJlaGF2aW9yUQAAABxTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0HFN5c3RlbS5Db2xsZWN0aW9ucy5BcnJheUxpc3QcU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdAECAAAAAwAAAAAJUgAAAAlTAAAACVQAAAAFq////y9TdXJ2ZXlUb0dvLlVzZXJMb2dpYy5JbnRlcmZhY2VzLmVVTFNraXBCZWhhdmlvcgEAAAAHdmFsdWVfXwAIUQAAAAAAAAAJVgAAAAlXAAAACVgAAAAACgVFAAAAL1N1cnZleVRvR28uVXNlckxvZ2ljLkNyZWF0b3IuUXVlc3Rpb25FeHByZXNzaW9uBgAAABlRdWVzdGlvbkluZm8rbVF1ZXN0aW9uSWR4FlF1ZXN0aW9uSW5mbyttSGFzRXJyb3IiUXVlc3Rpb25JbmZvK21RdWVzdGlvbkRlcGVuZGVuY2llcyFRdWVzdGlvbkluZm8rbUNoYXB0ZXJEZXBlbmRlbmNpZXMDZXhwCHNob3J0RXhwAAADAwEACAEcU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdBxTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0AQIAAAABAAAAAAlZAAAACVoAAAAGWwAAANwEdmFyIHJhbmRvbUluZGV4ZXNPcmRlciA9IENyZWF0ZVJhbmRvbUFycmF5KEdldEFuc3dlckNvdW50KFFSZWYoMykpKTsNCnZhciBsZW4gPSByYW5kb21JbmRleGVzT3JkZXIubGVuZ3RoOw0KdmFyIGN1cnJRdW90YU5hbWUgPSAiIjsNCnZhciBmaW5hbFNlbGVjdGVkUXVvdGEgPSAtMTsNCnZhciBtYXhEaWZmID0gMDsNCnZhciBjdXJyRGlmZiA9IDA7DQpmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKQ0Kew0KCWN1cnJRdW90YU5hbWUgPSBBbnN3ZXJUZXh0KFFSZWYoMyksIHJhbmRvbUluZGV4ZXNPcmRlcltpXSk7DQoJY3VyckRpZmYgPSBRdW90YU1nci5HZXRRdW90YVRvdGFsKGN1cnJRdW90YU5hbWUpIC0gUXVvdGFNZ3IuR2V0UXVvdGFDdXJyZW50KGN1cnJRdW90YU5hbWUpOw0KCWlmIChjdXJyRGlmZiA+IG1heERpZmYpDQoJew0KCQltYXhEaWZmID0gY3VyckRpZmY7DQoJCWZpbmFsU2VsZWN0ZWRRdW90YSA9IHJhbmRvbUluZGV4ZXNPcmRlcltpXTsNCgl9DQp9DQoNCmlmIChmaW5hbFNlbGVjdGVkUXVvdGEgIT0gLTEpDQp7DQoJU2V0QW5zd2VyKFFSZWYoMyksIGZpbmFsU2VsZWN0ZWRRdW90YSk7DQp9DQpyZXR1cm4gZmluYWxTZWxlY3RlZFF1b3RhOwAFRgAAACtTdXJ2ZXlUb0dvLlVzZXJMb2dpYy5DcmVhdG9yLlF1ZXN0aW9uQWN0aW9uBQAAABlRdWVzdGlvbkluZm8rbVF1ZXN0aW9uSWR4FlF1ZXN0aW9uSW5mbyttSGFzRXJyb3IiUXVlc3Rpb25JbmZvK21RdWVzdGlvbkRlcGVuZGVuY2llcyFRdWVzdGlvbkluZm8rbUNoYXB0ZXJEZXBlbmRlbmNpZXMGQWN0aW9uAAADAwEIARxTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0HFN5c3RlbS5Db2xsZWN0aW9ucy5BcnJheUxpc3QCAAAABwAAAAAJXAAAAAldAAAABl4AAAA1U2V0VGV4dEZvcm1hdChDdXJyUXVlcywgU2VsZWN0ZWRBbnN3ZXJUZXh0KFFSZWYoMykpKTsBRwAAAEYAAAAGAAAAAAlfAAAACWAAAAAGYQAAADVTZXRUZXh0Rm9ybWF0KEN1cnJRdWVzLCBTZWxlY3RlZEFuc3dlclRleHQoUVJlZigzKSkpOwFIAAAARgAAAAUAAAAACWIAAAAJYwAAAAZkAAAANVNldFRleHRGb3JtYXQoQ3VyclF1ZXMsIFNlbGVjdGVkQW5zd2VyVGV4dChRUmVmKDMpKSk7AUkAAABGAAAABAAAAAAJZQAAAAlmAAAABmcAAAA1U2V0VGV4dEZvcm1hdChDdXJyUXVlcywgU2VsZWN0ZWRBbnN3ZXJUZXh0KFFSZWYoMykpKTsFSgAAACdTdXJ2ZXlUb0dvLlVzZXJMb2dpYy5DcmVhdG9yLkJ1Y2tldEluZm8KAAAAEFNuaXBwZXRJbmZvK21LZXkVU25pcHBldEluZm8rbUhhc0Vycm9yIVNuaXBwZXRJbmZvK21RdWVzdGlvbkRlcGVuZGVuY2llcyBTbmlwcGV0SW5mbyttQ2hhcHRlckRlcGVuZGVuY2llcwljb25kaXRpb24KYnVja2V0TmFtZQxkZWZhdWx0UXVvdGELdXNlclZpc2libGUHbWVzc2FnZQRoYXNoAAADAwQBAAABAQgBHFN5c3RlbS5Db2xsZWN0aW9ucy5BcnJheUxpc3QcU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdCZTdXJ2ZXlUb0dvLlVzZXJMb2dpYy5DcmVhdG9yLkNvbmRpdGlvbgIAAAAIAQIAAAAFAAAAAAloAAAACWkAAAAJagAAAAZrAAAACVByb2R1Y3QgNQAAAAAACQcAAAAGbQAAAAcxO1EyOkE0AUsAAABKAAAABAAAAAAJbgAAAAlvAAAACXAAAAAGcQAAAAlQcm9kdWN0IDQAAAAAAAkHAAAABnMAAAAHMTtRMjpBMwFMAAAASgAAAAMAAAAACXQAAAAJdQAAAAl2AAAABncAAAAJUHJvZHVjdCAzAAAAAAAJBwAAAAZ5AAAABzE7UTI6QTIBTQAAAEoAAAACAAAAAAl6AAAACXsAAAAJfAAAAAZ9AAAACVByb2R1Y3QgMgAAAAAACQcAAAAGfwAAAAcxO1EyOkExAU4AAABKAAAAAQAAAAAJgAAAAAmBAAAACYIAAAAGgwAAAAlQcm9kdWN0IDEAAAAAAAkHAAAABoUAAAAHMTtRMjpBMAVPAAAALVN1cnZleVRvR28uVXNlckxvZ2ljLkNyZWF0b3IuQ2hhcHRlckNvbmRpdGlvbgUAAAAWQ2hhcHRlckluZm8rbUNoYXB0ZXJJRBVDaGFwdGVySW5mbyttSGFzRXJyb3IhQ2hhcHRlckluZm8rbVF1ZXN0aW9uRGVwZW5kZW5jaWVzIENoYXB0ZXJJbmZvK21DaGFwdGVyRGVwZW5kZW5jaWVzCWNvbmRpdGlvbgAAAwMECAEcU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdBxTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0JlN1cnZleVRvR28uVXNlckxvZ2ljLkNyZWF0b3IuQ29uZGl0aW9uAgAAAAIAAAAEAAAAAAmGAAAACYcAAAAJ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</ULAssemblyData><NumOfQuestionsInPage>-1</NumOfQuestionsInPage><Version>7</Version><NextChapterID>5</NextChapterID><DefaultChapterDesc /><Flags>272629772</Flags><NextAnswerID>1</NextAnswerID><ClientData /><DefaultFont /><Comment /><ExternalSystem>-1</ExternalSystem><NextScoreID>1</NextScoreID><LocationStoreID>2032</LocationStoreID><NextScaleID>1</NextScaleID><Mode>0</Mode><DefTextPanelHeight>-1</DefTextPanelHeight><DefAnswerPanelHeight>-1</DefAnswerPanelHeight><SurveyFlags2>65792</SurveyFlags2><NumOfQuestionsPDA>-1</NumOfQuestionsPDA><NumOfQuestionsPC>-1</NumOfQuestionsPC><NumOfQuestionsSmartPhone>-1</NumOfQuestionsSmartPhone><NextLangID>0</NextLangID><QuestionCounterResetText /><QuestionNumericResetText /><QuestionStopperResetText /><QuestionFormSurveyCanceled /><QuestionFormSurveyFiltered /><QuestionFormCanotExit /><QuestionFormSureToCancelNoSave /><QuestionFormSureToCancel /><QuestionFormSaved /><PromptOnSubmitText /><PromptOnCancelText /><PromptOnFilterText /><StartWithLangID>-1</StartWithLangID><ReportFlags>0</ReportFlags><SurveyFlags3>54820992</SurveyFlags3><ClientTypes>54</ClientTypes><MDDScript /><MDDScriptOps /><MDDScriptRouting /><FlagIfDuredLessThan>0</FlagIfDuredLessThan><FlagIfDuredMoreThan>0</FlagIfDuredMoreThan><PropertiesAsString /><SurveyFlags4>0</SurveyFlags4><InternalProps /><SurveyLogicVersion>0</SurveyLogicVersion></Survey><SQs><ElemStr>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</ElemStr></SQs><SANs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6+MXDf979Ph42Vzl9dnTo53Hd+3vj39inTctgaDf9x7f9f56fDZ7h6b48fhN/q49ellXs/W0TXcf3+W/H7+eV3VLTbPl77+zs0f/p2/MZw4wve9DBrifzOoim5T5i2yRHx3//vd+f3ox+OzxCQ/kiD7X3x6/XteX+TVBzh/kn04OZnvb+5/eP9/e3zm/v/3w4NPp9v29fHr/PL83nRwQ2rb546d5mbf5DGMxvz7+znqxOlueV0fb1IP94/Hpu7bOMLbd9K7+9aSqyt2jZ1nZ5I/vep/It2fLdheA3R+K+VfLk3k+fSvddj/SNuZPO0j7PVD49psvngOLZ2V20QCK/PL4y3ae169X+ZQIxrR6LfTrfU69LBb5sgWQ7+bFxbwFFP3t8etpVef4QH55fNa8nmZlbkZq/nz8Kl/RhAIhwHmVXxb5lfsL350tZ/k7JqT/9+OXeX0eNjypyqr2Gsrfj58WzarMrt23wQeE2PG0LS7zozf1mhHTPx9/WRcXxTIrGVGaaLza/ezxyzpvcuKEmd+q9+Hjs0V2kQNb4vFVc7T76YMHD/buEdt2vpCGZzMM6qvnP5mV69z7lRgAFPX+Mt88zafeN/jr8atsOasWn9fVeiU08f5Wgtmp9/8ketGsQuqbr746e4rugVtet0XeHDev25o4iT/Napp9K+k88PAjVQkMd8+pBf2bWANqI9Qdu7fXHbsx3bE3qDv2vq7u2BvQHXs/0h230h17P9IdP9IdPwzdsXd73bEX0x33BnXHva+rO+4N6I57P9Idt9Id936kO36kO34YuuPe7XXHvZju2B/UHftfV3fsD+iO/R/pjlvpjv0f6Y4f6Y4fhu7Yv73u2I/pjvuDuuP+19Ud9wd0x/0f6Y5b6Y77P9IdP9IdPwzdYRt1dMf9G3Klr/JZVGvc35Al/XSz1njwoyzpB2mNB///yZL+SGv8v1tr7N5ea+z6WuP3ycuyuhpUHEMp0hsVx49SpB+mOH6UIv2R4vihKI6hFGlEcYQp0mL5dlBtDGVHb1QbP8qOfpja+FnLjv5IbfxIbdwmOxpRG0F29PM6z5eDemMoM3qj3vhRZvTD9MaPMqM/0hs/FL0xlBmN6I0gM/plnS0v8kHFMZQWvVFx/Cgt+mGK40dp0R8pjh+K4rh/e8VxP4hT1vWqHFYcn35dxfHpgOL49EeK41aK49MfKY4fKY4fhuL49PaK41NfcTwpMXkDauPB11UbDwbUxoP/d6uN/9eojQc/Uhs/Uhs/DLVhG3XUhi/hqjZ2fLWxs727k86qsszqJqo+Pt2wHvtgs/o4+NF67Aepj4Mfrcf+SH38cNTH7u3Vx66vPnZ3t+/drD+GlmVv1B8/Wpb9MP3xo2XZH+mPH4r+GFqWjeiPYFn23u72/Zv1x9D67I3640frsx+mP360Pvsj/fFD0R9D67MR/RGszy6IydJ2ni3TUI1E1cjQcu2NauRHy7UfpkZ+tFz7IzXys6RG8G9z9P8Aol7oN+9DAAA=</ElemStr></SANs><STos><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6zdVk949+n8AZjUmjDEAAAA=</ElemStr></STos><SCs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx65MG/xw9Pnt6tPP4Lv37+EW2yI++90VWLNOTebZq8/r7j+/yh49fr+vL/Joa5Q/yTycHs73t/U/vn2/v75zf33548Ol0+/5ePr1/nt+bTg4Imm3++Gle5m0+Qxfm18cvszpftvTt9u7ju/aPx8+ri2L6rMwuGrT2/nr8Kl/O8lr+uP/4rv8nddBM62LV0mCP3syLJqX/tfM8rauqTacyjLQ6T7Oy5M9/0Tpv0Li526wn29qA3lrytw0jPvqNk984+X2qdTrNlumS4NT5orrMqQUB11dGabacMVQH0UJbrJs2neTpGogGr4190AualPPrtGibdFVXq7xui7xJt5ZE8lE6cwMbpW3+rk3zdjq+Azq6ET9+gy/uHj0+fdfW2ZOqKnePnmVlkz++633ivt07elOv/S/39MuzZbvL8+H+sl/sYT7cH4/PZu+4KX4yAt9+88VzIHFSLRY0mfj1u3lxMW/xov72+PW0qnNwE75+la+quj3J2vyiqq97TNf5Wpu/KdqS3/4ie3dGDTMmATAJPnj8vGja19W6nuZnM/46+IAxfpkt8/LbghladD97/OrNM0PaVzTR1eLzulqvuK3/9+Oz5njaFpe50tX+GeDYvKlO32EEPWTdN49fWg44bl63NUkrOr8LEVUx3ffE9CRbTvOS2JYgXRb51c+uoO58o3KKcf1c8e3ON8m2/Un4EePGGHfPY1yW9B+x7Xuy7TeqbbtT8COmjTHtPY9pT5ezH3Hq7Th175vkVKb7j9gzYM+78Nz/H+m+jyToCwAA</ElemStr></SCs><SBNs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6ycvGv6X/lnXl/n12dOj/EH+6eRgtre9/+n98+39nfP72w8PPp1u39/Lp/fP83vTycHO47u2+eMn6+nbvKXf7j++a3/XT19ki/zoZV3N1tM2td/zp4+f5ufZumx/Yl212RFBDP5+/O2smR/tHv7E3qPj/cd3+S/qlBH9ZrDdvwFb+/17YnvvZwXbezdga79/T2z3flaw3bsBW/v9e2K7+7OC7e4N2Nrv3xPbnRBb/Nsc/T9HXTrknAMAAA==</ElemStr></SBNs><SATs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6+M3TXr36P8B2S/MCTEAAAA=</ElemStr></SATs><SSCOs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx69cnXzbp3aP/B1t6G+cyAAAA</ElemStr></SSCOs><SPs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx65dNevfo/wF1B76WMAAAAA==</ElemStr></SPs><RGs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jxq8+b9O7R/wNCnyKPMAAAAA==</ElemStr></RGs><CSs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jxyesmvXv0/wA+f8jSMAAAAA==</ElemStr></CSs><SSCs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx69cnTXr36P8B28cSlTEAAAA=</ElemStr></SSCs><QAs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jxTxw36d2j/wdMGPaGMAAAAA==</ElemStr></QAs><SLs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6+dNevfo/wH2fa4zMAAAAA==</ElemStr></SLs><STes><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6zd5k949+n8Axy2WxjEAAAA=</ElemStr></STes><SMBs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6y+eNPwv/bOuL/Prs6dH+YP808nBbG97/9P759v7O+f3tx8efDrdvr+XT++f5/emk4Odx3dt88dP1tO3eUu/0af2d/30RbbI07tHj5/m59m6bH9iXbUZ2gV/P35zvcrxKf98/BPrvGkJa4Kyvfv4rvfn45dZnS9b/cL+8fir5ck8p+5mx8vmiob8hPBCr3dlYN/M6Hbjozt6kV+lr+d53prv+dPbjPje+4x454c+4L2BAb+sq9l62jbvPd69yHj3Bob7HvN7l5n4/wHWkVNI9AIAAA==</ElemStr></SMBs></Root>