e2fbc745-4fcb-409c-8e70-e61aa99b4e9f1835fc1b-9a8c-4c68-9fdd-af94d17e166eUsing External List Falseidooffen6353729292129300006353731084698827623155378903999970000TrueFalse7False0SurveyToGo.UserLogic.Creator.SurveyLogicTempl<?xml version="1.0" encoding="utf-16"?>
<UserLogicContents xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Items>
<HData>
<HTp>ehtQuestion</HTp>
<STp>estLast</STp>
<CTp>echtLast</CTp>
<QTp>eqhtValidationRule</QTp>
<Key>3</Key>
<Name>HandleQuestionValidate_3</Name>
<Behv>ecsbDefault</Behv>
<QDep />
<CDep />
</HData>
<HData>
<HTp>ehtSnippet</HTp>
<STp>estListSource</STp>
<CTp>echtLast</CTp>
<QTp>eqhtLast</QTp>
<Key>2</Key>
<Name>GetListSource_2</Name>
<Behv>ecsbDefault</Behv>
<QDep />
<CDep />
<DispName>Brands</DispName>
</HData>
<HData>
<HTp>ehtSnippet</HTp>
<STp>estListSource</STp>
<CTp>echtLast</CTp>
<QTp>eqhtLast</QTp>
<Key>1</Key>
<Name>GetListSource_1</Name>
<Behv>ecsbDefault</Behv>
<QDep />
<CDep />
<DispName>Variants</DispName>
</HData>
</Items>
<Source> function StartSurvey()
{
/*_@_SS_START_@*/
/*_@_SS_END_@*/
}
/*_@_USERCODE_START_@*/
// Use to count the number of topics not blank (SingleChoiceGrid)
function dblNumOfTopicsNotBlank(inQ)
{
var retVal = 0;
var i=0;
for (i=1; i<=GetTopicCount(inQ);i++){
if (IsTopicVisible(inQ,i) && (AnswerChoice(inQ,i) >=1 &&AnswerChoice(inQ,i) <1000) || AnswerChoice(inQ,i)!="" ) {
retVal++;
}
}
return retVal;
}
//
function dblNumOfTopicsNotBlankText(inQ)
{
var retVal = 0;
var i=0;
for (i=1; i<=GetTopicCount(inQ);i++){
if (IsTopicVisible(inQ,i) && AnswerChoice(inQ,i)!="" ) {
retVal++;
}
}
return retVal;
}
// Check code dupplicated
function dblNumOfCodesDupplicated(inQ)
{
var retVal = 0;
var i=0;
var j=0;
for (i=1; i<=GetTopicCount(inQ)-1;i++){
{for (j=1;j<=GetTopicCount(inQ)-1;j++){
if (IsTopicVisible(inQ,i) && IsTopicVisible(inQ,i+j)&&AnswerChoice(inQ,i)==AnswerChoice(inQ,i+j)&&AnswerChoice(inQ,i)>=1) {
retVal++;
}}}
}
return retVal;
}
// This function can't be used.
function dblMissingCodesInGrid(inQ)
{
var retVal = 0;
var i=0;
var j=0;
var k=0;
var str=""
var add=" "
for (i=1; i<=GetTopicCount(inQ);i++)
{if (IsTopicVisible(inQ,i))
{var txt = IntArrayToString(GetAnswersChoice(inQ, i));
for (k=1;k<=GetAnswerCount(inQ);k++)
{if (txt.IndexOf(k)!=-1)
{var str1=k+add;
if (str.IndexOf(k)==-1)
{str=str.concat(str1);}}}}}
//
for (var i=1;1<=GetAnswerCount(inQ);i++)
{
var str2="";
if (str.IndexOf(k)!=-1)
{var str1=k+add;
str=str2.concat(str1);}}
//
for (k=1;k<=9;k++)
{if (str.IndexOf(k)!=-1)
{var ch=str.charAt(str.IndexOf(k)+3);
if (ch!="")
{var k1=k+1;
if (str.IndexOf(k1)==-1)
{for (k=k1;k<=10;i++)
{if (str.IndexOf(k)==-1)
{retVal=retVal+1;}}}}}}
var retVal1=retVal;
//
for (k=10;k<=GetAnswerCount-1;k++)
{if (str.IndexOf(k)!=-1)
{var ch=str.charAt(str.IndexOf(k)+3);
if (ch!="")
{var k1=k+1;
if (str.IndexOf(k1)==-1)
{for (k=k1;k<=GetAnswerCount;i++)
{if (str.IndexOf(k)==-1)
{retVal1=retVal1+1;}}}}}}
return retVal1;
}
//
function dblSumOfCodesInLoop(inQ,inAnswerIdx,inMaxIter)
{
var retVal = 0;
var i=0;
for (i=1; i<=inMaxIter;i++){
if (AnswerIter(inQ,i)==inAnswerIdx) {
retVal++;
}
}
return retVal;
}
//
function dblSumOfLessCodesInLoop(inQ,inAnswerIdx,inMaxIter)
{
var retVal = 0;
var i=0;
for (i=1; i<=inMaxIter;i++){
if (AnswerIter(inQ,i)<inAnswerIdx && AnswerIter(inQ,i)>0) {
retVal++;
}
}
return retVal;
}
//
function dblSumOfGreaterCodesInLoop(inQ,inAnswerIdx,inMaxIter)
{
var retVal = 0;
var i=0;
for (i=1; i<=inMaxIter;i++){
if (AnswerIter(inQ,i)>inAnswerIdx) {
retVal++;
}
}
return retVal;
}
//
function dblBlankScale(inQ,inMaxScale)
{
var retVal = 0;
var count=1
var i=0;
for (i=1; i<=GetTopicCount(inQ);i++){
{for (var j=1;j<=inMaxScale;j++)
if (IsTopicVisible(inQ,i) && AnswerChoice(inQ,i)!=j) {
count++;
}
}}
if (count=1) {retVal=1;}
return retVal;
}
//
function dblSumOfCodesInGrid(inQ,inAnswerIdx,inMaxTopic)
{
var retVal = 0;
var i=0;
for (i=1; i<=inMaxTopic;i++){
if (AnswerChoice(inQ,i)==inAnswerIdx) {
retVal++;
}
}
return retVal;
}
// Sum of selected codes in a range. - use for multiple choice
function dblSumOfCodesBetween(inQ,Min,Max)
{
var retVal = 0;
for (var i=Min; i<=Max;i++){
if (Contains(inQ,i)) {
retVal++;
}
}
return retVal;
}
//Use for text question related.
function dblNumOfTopicsTextNotBlank(inQ)
{
var retVal = 0;
var i=0;
for (i=1; i<=GetTopicCount(inQ);i++){
if (IsTopicVisible(inQ,i) && AnswerChoice(inQ,i) !="") {
retVal++;
}
}
return retVal;
}
//
function dblSumOfCodesBetweenInGrid(inQ,Min,Max,inMaxTopic)
{
var retVal = 0;
var j=0
for (j=1; j<=inMaxTopic;j++)
{for (var i=Min; i<=Max;i++){
if (AnswerChoice(inQ,j)==i) {
retVal++;
}
}}
return retVal;
}
function dblMaxTopicInNumericGrid(inQ)
{
var retVal = 0;
var temp=1
for (var j=2; j<=GetTopicCount(inQ);j++)
{
if (AnswerChoice(inQ,temp)>AnswerChoice(inQ,j))
{
retVal= temp
}
else {retVal= j; temp=j}
}
return retVal;
}
function dblNumOfTopicsBlankText(inQ)
{
var retVal = 0;
var i=0;
for (i=1; i<=GetTopicCount(inQ);i++){
if (IsTopicVisible(inQ,i) && AnswerChoice(inQ,i)=="" ) {
retVal++;
}
}
return retVal;
}
//
function dblNumOfVisibleCodes(inQ)
{
var retVal = 0;
var i=0;
for (i=1; i<=GetAnswerCount(inQ);i++){
if (IsAnswerVisible(inQ,i)==true) {
retVal++;
}
}
return retVal;
}
//
//
function dblSumOfGreaterCodesInGrid(inQ,inAnswerIdx,inMaxTopic)
{
var retVal = 0;
var i=0;
for (i=1; i<=inMaxTopic;i++){
if (AnswerChoice(inQ,i)>inAnswerIdx) {
retVal++;
}
}
return retVal;
}
//
//
function dblSumOfLessCodesInGrid(inQ,inAnswerIdx,inMaxTopic)
{
var retVal = 0;
var i=0;
for (i=1; i<=inMaxTopic;i++){
if (AnswerChoice(inQ,i)<inAnswerIdx) {
retVal++;
}
}
return retVal;
}
//
function TnsSumVisibleTopic(inQ)
{
var retVal = 0;
var i=0;
for (i=1; i<=GetTopicCount(inQ);i++){
if (IsTopicVisible(inQ,i)==true) {
retVal++;
}
}
return retVal;
}
//
function TnsFindIndexOfArray(index,Array)
{
var Array
var i=0
for (var i = 0; i < Array.length; i++)
{
if (Array[i]==index)
{
return i; //i là vị trí của index
}
}
return -1; // không có trả về -1 vì 0 là vị trí đầu tiên trong mảng
}
//K.Thanh
//Check valid câu trả lời PHẢI nằm trong những câu trả lời ở câu hỏi trước đó. (VD: Q1 - Answer 1,2,3 || Q2 - Answer must be in the range 1 to 3) MA
function ValidCheckIfCurrentAnswerIsSelectedInPreviousQuestion(InQ, PreviousQuestionToCheck){
var result = false;
for(var i = 1 ; i <= NumOfSelectedChoices(InQ); i++){
//Prompt(AnswerChoice(CurrQues,i))
if(!(Contains(PreviousQuestionToCheck,AnswerChoice(InQ,i)))){
result = true;
}
}
return result;
}
//K.Thanh
//Check valid câu trả lời PHẢI nằm trong những câu trả lời ở câu hỏi trước đó. (VD: Q1 - Answer 1,2,3 || Q2 - Answer must be in the range 1 to 3) MA
function ValidCheckIfCurrentAnswerIsSelectedInPreviousQuestionSA(InQ, PreviousQuestionToCheck){
var result = false;
for(var i = 1 ; i <= NumOfSelectedChoices(InQ); i++){
//Prompt(AnswerChoice(CurrQues,i))
if(!(Contains(PreviousQuestionToCheck,Contains(InQ,i)))){
result = true;
}
}
return result;
}
//K.Thanh
//Check valid câu trả lời KHÔNG nằm trong những câu trả lời ở câu hỏi trước đó. (VD: Q1 - Answer 1,2,3 || Q2 - Answer must be in the range 1 to 3) MA
function ValidCheckIfCurrentAnswerIsNotSelectedInPreviousQuestion(InQ, PreviousQuestionToCheck){
var result = false;
for(var i = 1 ; i <= NumOfSelectedChoices(InQ); i++){
//Prompt(AnswerChoice(CurrQues,i))
if((Contains(PreviousQuestionToCheck,AnswerChoice(InQ,i)))){
result = true;
}
}
return result;
}
//K.Thanh
//Check valid cho single choice grid, nếu 1 answer có từ 2 topic trở lên (hay dùng với các câu ghi nhận thứ tự trả lời).
//Note: numberIndexOfAnswer : là số lượng answer không tính câu "không biết/không nhớ" hoặc "khác."
function checkValidForDuplicatingAnswerInSingleChoiceGrid(inQ, numberIndexOfAnswer){
for(var i = 1; i <= numberIndexOfAnswer; i++){
if(GetNumOfTopicsWithValues(inQ,i)>=2){
return true;
break;
}
}
}
// Dan
// Check Mod in topic
function TNSCheckModInGrid(inQ, Num){
var temp=0
for(var i = 1; i <= GetTopicCount(inQ); i++){
if(AnswerChoice(inQ,i)%Num!= 0){
temp++;
}
}
return temp;
}
// Dan Test chơi cho vui
function test (InQuota, MaxBrand)
{var a = new Array();
while(a.length <MaxBrand) {
var n = Random(MaxBrand)+1;
if (IndexOf(n,a)==-1 && QuotaMgr.GetQuotaCurrent("'"+InQuota+"'")<=2) a.push(n);
}
return a;}
// KT
// Divisor by a given number (check xem có chia hết hay ko) (Grid)
function TNSCheckDivisorByGivenNumber(inQ, Num){
var result = false;
for(var i = 1; i <= GetTopicCount(inQ); i++){
if(AnswerChoice(inQ,i)%Num != 0){
result = true;
break;
}
}
return result;
}
// function for BAT project.
function BAT_SEC_Definition (InSourceQ, InPerQ, SecQ)
{
var sum=0; var ans=0;
for(var i=1; i<=GetTopicCount(InSourceQ); i++)
{ans=AnswerChoice(InSourceQ,i);
switch(i){
case 1:ans*=3;break;
case 2:ans*=20;break;
case 3:ans*=27;break;
case 4:ans*=7;break;
case 5:ans*=13;break;
case 6:ans*=40;break;
case 7:ans*=67;break;
case 8:ans*=47;break;
case 9:ans*=82;break;
case 10:ans*=180;break;
case 11:ans*=250;break;
case 12:ans*=400;break;}
sum+=ans;}
//Calculating point/person
var pp=Math.round(sum/AnswerChoice(InPerQ,1));
//Set SEC
ClearAnswer(SecQ);
if (pp<=17) {SetAnswer(SecQ,5);}
if (pp>17 && pp <=48) {SetAnswer(SecQ,4);}
if (pp>48 && pp <=80) {SetAnswer(SecQ,3);}
if (pp>80 && pp <=134) {SetAnswer(SecQ,2);}
if (pp>134) {SetAnswer(SecQ,1);}
}
function BAT_Stick_Group(InSourceQ, GroupQ)
{
ClearAnswer(GroupQ);
if(Answer(InSourceQ)>=5&&Answer(InSourceQ)<=10){SetAnswer(GroupQ,2);}
if(Answer(InSourceQ)>=11&&Answer(InSourceQ)<=15){SetAnswer(GroupQ,3);}
if(Answer(InSourceQ)>=16&&Answer(InSourceQ)<=20){SetAnswer(GroupQ,4);}
if(Answer(InSourceQ)>=21&&Answer(InSourceQ)<=25){SetAnswer(GroupQ,5);}
if(Answer(InSourceQ)>=26&&Answer(InSourceQ)<=30){SetAnswer(GroupQ,6);}
if(Answer(InSourceQ)>=31&&Answer(InSourceQ)<=35){SetAnswer(GroupQ,7);}
if(Answer(InSourceQ)>=36&&Answer(InSourceQ)<=40){SetAnswer(GroupQ,8);}
if(Answer(InSourceQ)>=41){SetAnswer(GroupQ,9);}
}
function BAT_SmokingLength (AgeQ, TargetQ)
{
SetAnswerVisible(TargetQ,true);
if (Answer(AgeQ)==18)
{for (var i=4;i<=8;i++)
{SetAnswerVisible(TargetQ,[i],false);}}
else if (Answer(AgeQ)==19)
{for (var i=5;i<=8;i++)
{SetAnswerVisible(TargetQ,[i],false);}}
else if ((Answer(AgeQ)>=20) && (Answer(AgeQ)<=22))
{for (var i=7;i<=8;i++)
{SetAnswerVisible(TargetQ,[i],false);}}
else if ((Answer(AgeQ)>22) && (Answer(AgeQ)<=28))
{for (var i=8;i<=8;i++)
{SetAnswerVisible(TargetQ,[i],false);}}
}
function BAT_Check_Personal_Income (TargetQ, PersonQ, OccupQ, HIncomeQ)
{
SetAnswerVisible(TargetQ,false);
// Total=1
if (AnswerChoice(PersonQ,1)==1) {SetAnswerVisible(TargetQ,Answer(HIncomeQ),true);}
// Total > 1
if (AnswerChoice(PersonQ,1)>1)
// Earning = 1
{if (AnswerChoice(PersonQ,2)==1) {for (var i=1;i<=Answer(HIncomeQ);i++) {SetAnswerVisible(TargetQ,i,true);}}
/*{if (AnswerChoice(PersonQ,2)==1)
// Earning = Respondent
{if (Answer(OccupQ)>4) {SetAnswerVisible(TargetQ,Answer(HIncomeQ),true);}
// Earning != Respondent
if (Answer(OccupQ)<4) {SetAnswerVisible(TargetQ,1,true);}}}*/
// Earning >=1
if (AnswerChoice(PersonQ,2)>1) {for (var i=1;i<Answer(HIncomeQ);i++) {SetAnswerVisible(TargetQ,i,true);}}}
}
function BAT_CheckYearOnly(AgeQ)
{
var C_Year=(Answer(AgeQ).ToInt())-18;
return C_Year;
}
function BAT_CheckYear(AgeQ,PeriodQ,YearQ)
{ SetAnswerVisible(YearQ,true);
for (var i=1;i<GetAnswerCount(PeriodQ);i++)
{if (Answer(PeriodQ)==i) {switch(i){
case 1: SetAnswerVisible(YearQ,false); SetAnswerVisible(YearQ,1,true); break;
case 2: SetAnswerVisible(YearQ,false); SetAnswerVisible(YearQ,1,true); break;
case 3: SetAnswerVisible(YearQ,false); for (var j=1;j<=2;j++) {SetAnswerVisible(YearQ,j,true);} break;
case 4: SetAnswerVisible(YearQ,false); for (var j=1;j<=2;j++) {SetAnswerVisible(YearQ,j,true);} break;
case 5: SetAnswerVisible(YearQ,false); for (var j=1;j<=3;j++) {SetAnswerVisible(YearQ,j,true);} break;
case 6: SetAnswerVisible(YearQ,false); for (var j=1;j<=6;j++) {SetAnswerVisible(YearQ,j,true);} break;
case 7: SetAnswerVisible(YearQ,false); for (var j=1;j<=11;j++) {SetAnswerVisible(YearQ,j,true);} break;}}}
//
if (Answer(PeriodQ)==8)
{var C_Year=(Answer(AgeQ).ToInt())-18; SetAnswerVisible(PeriodQ,false);
for (var i=1;i<=C_Year;i++) {SetAnswerVisible(YearQ,i,true);}}
}
function BAT_CheckMonth(AgeQ,PeriodQ,MonthQ)
{
SetAnswerVisible(MonthQ,true);
for (var i=1;i<GetAnswerCount(PeriodQ);i++)
{if (Answer(PeriodQ)==i) {switch(i){
case 1: SetAnswerVisible(MonthQ,false); for (var j=2;j<=4;j++) {SetAnswerVisible(MonthQ,j,true);} break;
case 2: SetAnswerVisible(MonthQ,false); for (var j=5;j<=6;j++) {SetAnswerVisible(MonthQ,j,true);} break;
case 3: SetAnswerVisible(MonthQ,false); for (var j=7;j<=12;j++) {SetAnswerVisible(MonthQ,j,true);} SetAnswerVisible(MonthQ,1,true);break;
case 4: SetAnswerVisible(MonthQ,false); for (var j=1;j<=7;j++) {SetAnswerVisible(MonthQ,j,true);} break;
case 5: SetAnswerVisible(MonthQ,false); for (var j=8;j<=12;j++) {SetAnswerVisible(MonthQ,j,true);} SetAnswerVisible(MonthQ,1,true);break;
case 6: SetAnswerVisible(MonthQ,false); for (var j=1;j<=12;j++) {SetAnswerVisible(MonthQ,j,true);} break;
case 7: SetAnswerVisible(MonthQ,false); for (var j=1;j<=12;j++) {SetAnswerVisible(MonthQ,j,true);} break;}}}
}
//********************** MB function ***********************//
// ******** BE2a order control. ********//
function MB_BE2a (Max, Loc, ArrayQ, OrderQ)
{
if (Loc == "None") {Loc="";}
//
var a = new Array();
var b = new Array();
var Num=0;
var Rand, Start,m1,m2,m3,Rand1
// Get Quota
for (var j=1;j<=Max;j++)
{var temp=Loc+ "BE2a_1_"+j;
if (QuotaMgr.HasFilledQuota(temp)==false)
{a.push(j);}
}
Prompt(a.ToString());
// Create Rotation Array
m1=Random(a.length);
m2=a[m1];
Prompt(m2);
Prompt(Loc+"BE2a_1_"+ m2);
Prompt(QuotaMgr.GetQuotaCurrent(Loc+ "BE2a_1_"+ m2));
Rand=CreateCyclicArray(Max,m2);
for (var i=0;i<=Rand.length-1;i++)
{b[i]=Rand[i];}
ClearAnswer(ArrayQ);
ClearAnswer(OrderQ);
SetAnswer(ArrayQ,b.ToString());
SetAnswer(OrderQ,b);
}
//*********Q2-Q6 Order control *********//
function MB_Q2 (NumB,ArrayQ)
{
if (NotAnswered(ArrayQ))
{ClearAnswer(ArrayQ);
var temp=CreateRandomArray(NumB);
var ArrQ2=new Array();
for (var i=0;i<temp.length;i++)
{ArrQ2.push(temp[i]);}
Prompt(ArrQ2.ToString());
SetAnswer(ArrayQ,ArrQ2.ToString());}
}
//********AD's Control *************//
function MB_AD (ListOfBrands, maxAdshow, DummyAdQ, AdQinLoop,Loc)
{
if (Loc == "None") {Loc="";}
var arr = StringToIntArray(ListOfBrands);
//
var NotFull=new Array();
var needToBeFill = new Array();
var adShow = new Array();
// Get All Quota not full.
for (var j=0;j<arr.length;j++)
{var temp= Loc+"_AD"+arr[j];
if (QuotaMgr.HasFilledQuota(temp)==false)
{NotFull.push(arr[j]);}
}
Prompt(NotFull.ToString());
// Random pick 2 AD's from Not full.
while(adShow.length<maxAdshow){
var ad = Random(NotFull.length)
if(IndexOf(NotFull[ad],adShow)==-1){
adShow.push(NotFull[ad]); dblSetSpecificAnswer(DummyAdQ,NotFull[ad],true);
}
}
//*************************************
var a = new Array();
var b = new Array();
var Num=0;
var Rand, Start,m1,m2,m3,Rand1
// Get Quota Order Not full.
for (var j=0;j<maxAdshow;j++)
{var temp= Loc+"_AD"+adShow[j]+"_1";
if (QuotaMgr.HasFilledQuota(temp)==false)
{a.push(adShow[j]); Num++;}
}
Prompt(a.ToString());
// Create Rotation Array
m1=Random(a.length)+1;
Rand=CreateCyclicArray(maxAdshow,m1);
Prompt(Rand.length);
for (var i=0;i<Rand.length;i++)
{b[i]=adShow[Rand[i]-1];
SetAnswerIter(AdQinLoop,i+1,b[i]); Prompt(b[i]);
}
}
function MB_GetQuota_Ad (NumOfBrands, Loc,CurrentQ)
{
var ArrQuo=new Array()
for (var i=1;i<=NumOfBrands;i++)
{var temp=Loc+"_AD"+i
ArrQuo.push(QuotaMgr.GetQuotaCurrent(temp));}
//
for (var i=1;i<=NumOfBrands;i++)
{var temp=Loc+"_AD"+i+"_1"
ArrQuo.push(QuotaMgr.GetQuotaCurrent(temp));}
//
ArrQuo.push(QuotaMgr.GetQuotaCurrent(Loc));
ClearAnswer(CurrentQ);
SetAnswer(CurrentQ,ArrQuo);
}
function MB_DummySpon(StartQ, Interval, MaxQ)
{
var Spon= new Array()
for (var i=0;i<MaxQ;i++)
{var temp=GetAnswers(StartQ+(i*Interval));
for (var j=0;j<temp.length;j++)
{Spon.push(temp[j]);}}
return Spon;
}
function MB_Hide_Net(InQ, ArrayNet)
{
var temp=StringToIntArray(ArrayNet)
for (var i=0;i<temp.length;i++)
{SetAnswerVisible(InQ,temp[i],false);}
}
function MB_Hide_Unspecified(InQ, ArrayUn)
{
var temp=StringToIntArray(ArrayUn)
for (var i=0;i<temp.length;i++)
{SetAnswerVisible(InQ,temp[i],false);}
}
function MB_Hide_Reserved(InQ, ArrayRe)
{
var temp=StringToIntArray(ArrayRe)
for (var i=0;i<temp.length;i++)
{SetAnswerVisible(InQ,temp[i],false);}
}
function MB_SetNet(SourceQ, TargetQ, NetAnswer, Variant)
{
var temp=StringToIntArray(Variant);
var Ques=StringToIntArray(SourceQ);
for (var j=0;j<Ques.length;j++)
{for (var i=0;i<temp.length;i++)
{if (Contains(Ques[j],temp[i]))
dblSetSpecificAnswer(TargetQ,temp[i],true);}}
}
function MB_AD_Week15_AD1_3 (ListOfBrands, maxAdshow, DummyAdQ, AdQinLoop,Loc)
{
if (Loc == "None") {Loc="";}
var arr = StringToIntArray(ListOfBrands);
//
var NotFull=new Array();
var needToBeFill = new Array();
var adShow = new Array();
// Get All Quota not full.
for (var j=0;j<arr.length;j++)
{var temp= Loc+"_AD"+arr[j];
if (QuotaMgr.HasFilledQuota(temp)==false)
{NotFull.push(arr[j]);}
}
Prompt(NotFull.ToString());
// Random pick 2 AD's from Not full.
while(adShow.length<maxAdshow){
var ad = Random(NotFull.length)
if(IndexOf(NotFull[ad],adShow)==-1){
adShow.push(NotFull[ad]); dblSetSpecificAnswer(DummyAdQ,NotFull[ad],true);
}
}
//*************************************
var a = new Array();
var b = new Array();
var Num=0;
var Rand, Start,m1,m2,m3,Rand1
// Get Quota Order Not full.
for (var j=0;j<maxAdshow;j++)
{var temp= Loc+"_AD"+adShow[j]+"_1";
if (QuotaMgr.HasFilledQuota(temp)==false)
{a.push(adShow[j]); Num++;}
}
Prompt(a.ToString());
// Create Rotation Array
m1=Random(a.length)+1;
Rand=CreateCyclicArray(maxAdshow,m1);
Prompt(Rand.length);
for (var i=0;i<Rand.length;i++)
{b[i]=adShow[Rand[i]-1];
SetAnswerIter(AdQinLoop,i+3,b[i]); Prompt(b[i]);
}
}
//*************** for MILO *********************//
function dblSumOfCodesBetweenInLoop(inQ,Min,Max,inMaxIter)
{
var retVal = 0;
var j=0
for (j=1; j<=inMaxIter;j++)
{for (var i=Min; i<=Max;i++){
if (AnswerIter(inQ,j)==i) {
retVal++;
}
}}
return retVal;
}
function dblSumOfCodesInSpecificTopics(inQ,inAnswerIdx,MinTopic, MaxTopic)
{
var retVal = 0;
var i=0;
for (i=MinTopic; i<=MaxTopic;i++){
if (AnswerChoice(inQ,i)==inAnswerIdx) {
retVal++;
}
}
return retVal;
}
function dblSumNumericGridb(inQ)
{
var retVal=0;
var numOfTopics=GetTopicCount(inQ);
var i;
for(i=1; i<=numOfTopics; i++)
{
if (IsTopicVisible(inQ,i) && AnswerChoice(inQ,i)>=1) {
retVal+=AnswerChoice(inQ,i);
}
}
return retVal;
}
function MB_AD_Energy (ListOfBrands, maxAdshow, AwareAds, DummyAdQ, AdQinLoop,Loc)
{
if (Loc == "None") {Loc="";}
var arr = StringToIntArray(ListOfBrands);
//
ClearAnswer(DummyAdQ);
var NotFull=new Array();
var needToBeFill = new Array();
var adShow = new Array();
// Get All Quota not full.
for (var j=0;j<arr.length;j++)
{var temp= Loc+"_AD"+arr[j];
if (QuotaMgr.HasFilledQuota(temp)==false)
{NotFull.push(arr[j]);}
}
Prompt(NotFull.ToString());
// Random pick 2 AD's from Not full.
while(adShow.length<maxAdshow){
var ad = Random(NotFull.length)
if(IndexOf(NotFull[ad],adShow)==-1){
adShow.push(NotFull[ad]); dblSetSpecificAnswer(DummyAdQ,NotFull[ad],true);
}
}
//************* 2 Full Ads ************************
var a = new Array();
var b = new Array();
var Rem=new Array();
var Num=0;
var Rand, Start,m1,m2,m3,Rand1
// Get Quota Order Not full.
for (var j=0;j<maxAdshow;j++)
{var temp= Loc+"_AD"+adShow[j]+"_1";
if (QuotaMgr.HasFilledQuota(temp)==false)
{a.push(adShow[j]); Num++;}
}
Prompt(a.ToString());
// Create Rotation Array
m1=Random(a.length)+1;
Rand=CreateCyclicArray(maxAdshow,m1);
Prompt(Rand.length);
for (var i=0;i<Rand.length;i++)
{b[i]=adShow[Rand[i]-1];
SetAnswerIter(AdQinLoop,i+1,b[i]); Prompt(b[i]);
}
// Gets Ads remained
for (var i=0;i<NotFull.length;i++)
{if (IndexOf(NotFull[i],adShow)==-1) {Rem.push(NotFull[i]);}}
//************* 2 Awares *********************
var Num=0;
var a1 = new Array();
var b1 = new Array();
var Awa= new Array();
// Random pick 2 AD's from Not full.
while(Awa.length<AwareAds){
var ad = Random(Rem.length)
if(IndexOf(Rem[ad],Awa)==-1){
Awa.push(Rem[ad]); dblSetSpecificAnswer(DummyAdQ,Rem[ad],true);
}
}
// Get Quota Order Not full.
for (var j=0;j<Awa.length;j++)
{var temp= Loc+"_AD"+Awa[j]+"_3";
if (QuotaMgr.HasFilledQuota(temp)==false)
{a1.push(Awa[j]); Num++;}
}
Prompt(a1.ToString());
// Create Rotation Array
m1=Random(a1.length)+1;
Rand=CreateCyclicArray(AwareAds,m1);
Prompt(Rand.length);
for (var i=0;i<Rand.length;i++)
{b1[i]=Awa[Rand[i]-1];
SetAnswerIter(AdQinLoop,i+3,b1[i]); Prompt(b1[i]);
}
}
function dblSumOfCodesInSpecificIters(inQ,inAnswerIdx,MinIter, MaxIter)
{
var retVal = 0;
var i=0;
for (i=MinIter; i<=MaxIter;i++){
if (AnswerIter(inQ,i)==inAnswerIdx) {
retVal++;
}
}
return retVal;
}
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;
var retVal;
retVal=dist;
return retVal;
}
function dblIsInGPSFence (fenceLat, fenceLon, distInKM)
{
var dist = dblDistanceFromGPSFence(fenceLat, fenceLon);
var retVal = false;
if(dist<distInKM){
retVal=true;}
else{
retVal=false;
}
return retVal;
}
function dblSumNumericGrid(inQ)
{
var retVal=0;
var numOfTopics=GetTopicCount(inQ);
var i;
for(i=1; i<=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< 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< numOfAnswers;i++) {
// retVal = retVal && Contains(inQTarget,arguments[i+1]);
// }
// return retVal;
//}
function dblContainsAllOf(inQTarget,inAnswers)
{
var retVal = true;
var numOfAnswers = inAnswers.length;
var i;
for (i=0;i< numOfAnswers;i++) {
retVal = retVal && Contains(inQTarget,inAnswers[i]);
}
return retVal;
}
function dblNumOfTopicsContains(inQ, inValueToCheck)
{
var retVal = 0;
var i=0;
for (i=1; i<=GetTopicCount(inQ);i++){
if (IsTopicVisible(inQ,i) && AnswerChoice(inQ,i) == inValueToCheck) {
retVal++;
}
}
return retVal;
}
function dblNumOfIterContains(inQ, inValueToCheck)
{
var retVal = 0;
var i=0;
for (i=1; i<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< curTopics;i++) {
var actualTopic = i+1;
if (actualTopic == inTopicIndex) {
newAnswers[i] = inValue;
}
else {
newAnswers[i] = AnswerChoice(inQ,actualTopic);
}
}
SetAnswer(inQ,newAnswers);
}
function dblSetSpecificAnswer(inQ, inAnswerIdx, inChecked)
{
var curAnswers = GetAnswers(inQ);
var newAnswers=new Array();
var newArIdx=0;
var i;
for (i=0;i< curAnswers.length;i++) {
if (curAnswers[i] != inAnswerIdx) {
newAnswers[newArIdx] = curAnswers[i];
newArIdx++;
}
}
if (inChecked) {
newAnswers[newArIdx] = inAnswerIdx;
}
if (newAnswers.length > 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<= numOfAnswers;i++) {
var contained = false;
var j;
for (j=0; j<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<= numOfAnswers;i++) {
var contained = false;
var j;
// go over all source questions and check if the answer is checked
for (j=0; j<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) && !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<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<10) {
addZero = "0";
}
for (var i = 0; i < 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(CurrQues,true);
}
for (i=0;i< numOfAnswers;i++) {
SetAnswerVisible(inQTarget, inAnswers[i], inValue);
}
return retVal;
}
function dblContainsByText(inQIdx, inText)
{
var retVal = false;
var i=0;
for (i=0; i<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<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<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 && table.RowCount >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 < inOrderArray.length; i++) {
retVal[i] = inDataArray[inOrderArray[i]-1];
}
return retVal;
}
function checkPrice (inQindex){
var retVal=true;
var ans = Answer(QRef(inQindex));
var row = dblGetSubjectStoreRow("Drinks","VRCode",Answer(QRef(2)));
if ((ans>=row["PriceMin"])&&(ans<=row["PriceMax"])){
retVal=false;
}
return retVal;
}
/*_@_USERCODE_END_@*/
//_@_AddHandler_@{ Begin Add Handlers
//_@_AddHandler_@} End Add Handlers
//_@_HandlerZone_@{
function
GetListSource_1(list)
{
/*
use FillFromXXXX to fill the "list" variable.
Example:
FillFromStore(list, "DemoStoreName");
*/
FillFromStore(list,"Drinks","Variants", "VRCode", "BRCode='" + Answer(QRef(1)) +"'","");
}
function
GetListSource_2(list)
{
/*
use FillFromXXXX to fill the "list" variable.
Example:
FillFromStore(list, "DemoStoreName");
*/
FillFromStore(list, "Drinks","Brands","BRCode", "", "");
}
function HandleQuestionValidate_3(ioValid)
{
/*_@_CC_@{1}_@_CC_@*/
ioValid.outMessage = "";
ioValid.outID = -1;
ioValid.retVal = true;
if (1 < 0) {{
}}
if (checkPrice(CurrQues)) {
ioValid.retVal = false;
ioValid.outMessage = "Not in price range";
ioValid.outID = 1;
return;
}
}
//_@_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};
</Source>
</UserLogicContents>FalseFalseFalse-101.32.0.0AAEAAAD/////AQAAAAAAAAAMAgAAAEdVc2VyTG9naWNDcmVhdG9yLCBWZXJzaW9uPTEuMC4xLjMsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAKVN1cnZleVRvR28uVXNlckxvZ2ljLkNyZWF0b3IuQXNzZW1ibHlEYXRhEAAAAAZtVGFibGUNbVN1cnZleUNvbnN0cw9tU3VydmV5U25pcHBldHMNbUNoYXB0ZXJUYWJsZQ1tTGFzdEJ1Y2tldElEEW1MYXN0TWV0YUJ1Y2tldElED21TdXJ2ZXlJbml0Q29kZRBtU3VydmV5QmxvY2tDb2RlEW1MYXN0TGlzdFNvdXJjZUlEE21MYXN0Q3VzdG9tQWN0aW9uSUQHbUZsYXZvcg5tVXNlR2xvYmFsQ29kZQttVXNlT3JnQ29kZQ5tU3RyaWN0SlNDaGVjaxdtTGFzdEF0dGFjaG1lbnRTb3VyY2VJRA5tU3VydmV5TmF2Q29kZQMDAwMAAAEBAAAEAAAAAAEeU3lzdGVtLkNvbGxlY3Rpb25zLkhhc2h0YWJsZVtdHFN5c3RlbS5Db2xsZWN0aW9ucy5IYXNodGFibGUeU3lzdGVtLkNvbGxlY3Rpb25zLkhhc2h0YWJsZVtdHlN5c3RlbS5Db2xsZWN0aW9ucy5IYXNodGFibGVbXQgICAgkU3VydmV5VG9Hby5Vc2VyTG9naWMuQ3JlYXRvci5lRmxhdm9yAgAAAAEBAQgCAAAACQMAAAAJBAAAAAkFAAAACQYAAAABAAAAAgAAAAYHAAAAAAYIAAAAhwJmdW5jdGlvbiBjaGVja1ByaWNlIChpblFpbmRleCl7DQoJdmFyIHJldFZhbD10cnVlOw0KCXZhciBhbnMgPSBBbnN3ZXIoUVJlZihpblFpbmRleCkpOw0KCXZhciByb3cgPSBkYmxHZXRTdWJqZWN0U3RvcmVSb3coIkRyaW5rcyIsIlZSQ29kZSIsQW5zd2VyKFFSZWYoMikpKTsNCgkNCgkJaWYgKChhbnM+PXJvd1siUHJpY2VNaW4iXSkmJihhbnM8PXJvd1siUHJpY2VNYXgiXSkpew0KCQkJcmV0VmFsPWZhbHNlOw0KCQl9DQpyZXR1cm4gcmV0VmFsOw0KfQ0KDQoNCgMAAAABAAAABff///8kU3V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0b3IuVmFsaWRhdGVJbmZvAgAAAAIAAAADAAAAAAlJAAAACUoAAAAJSwAAAAVHAAAAK1N1cnZleVRvR28uVXNlckxvZ2ljLkNyZWF0b3IuTGlzdFNvdXJjZUluZm8GAAAAEFNuaXBwZXRJbmZvK21LZXkVU25pcHBldEluZm8rbUhhc0Vycm9yIVNuaXBwZXRJbmZvK21RdWVzdGlvbkRlcGVuZGVuY2llcyBTbmlwcGV0SW5mbyttQ2hhcHRlckRlcGVuZGVuY2llcwNleHAIbGlzdE5hbWUAAAMDAQEIARxTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0HFN5c3RlbS5Db2xsZWN0aW9ucy5BcnJheUxpc3QCAAAAAgAAAAAJTAAAAAlNAAAABk4AAAChAS8qDQp1c2UgRmlsbEZyb21YWFhYIHRvIGZpbGwgdGhlICJsaXN0IiB2YXJpYWJsZS4NCkV4YW1wbGU6DQpGaWxsRnJvbVN0b3JlKGxpc3QsICJEZW1vU3RvcmVOYW1lIik7DQoqLw0KRmlsbEZyb21TdG9yZShsaXN0LCAiRHJpbmtzIiwiQnJhbmRzIiwiQlJDb2RlIiwgIiIsICIiKTsgBk8AAAAGQnJhbmRzAUgAAABHAAAAAQAAAAAJUAAAAAlRAAAABlIAAADCAS8qDQp1c2UgRmlsbEZyb21YWFhYIHRvIGZpbGwgdGhlICJsaXN0IiB2YXJpYWJsZS4NCkV4YW1wbGU6DQpGaWxsRnJvbVN0b3JlKGxpc3QsICJEZW1vU3RvcmVOYW1lIik7DQoqLw0KDQpGaWxsRnJvbVN0b3JlKGxpc3QsIkRyaW5rcyIsIlZhcmlhbnRzIiwgIlZSQ29kZSIsICJCUkNvZGU9JyIgKyBBbnN3ZXIoUVJlZigxKSkgKyInIiwiIik7BlMAAAAIVmFyaWFudHMESQAAABxTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0AwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24FAAAICAlUAAAAAAAAAAAAAAABSgAAAEkAAAAJVAAAAAAAAAAAAAAABUsAAAApU3VydmV5VG9Hby5Vc2VyTG9naWMuQ3JlYXRvci5WYWxpZGF0ZUluZm8CAAAACmNvbmRpdGlvbnMGbmV4dElEBAA9U3VydmV5VG9Hby5Vc2VyTG9naWMuQ3JlYXRvci5WYWxpZGF0ZUluZm8rVmFsaWRhdGVDb25kaXRpb25bXQIAAAAIAgAAAAlVAAAAAgAAAAFMAAAASQAAAAlUAAAAAAAAAAAAAAABTQAAAEkAAAAJVAAAAAAAAAAAAAAAAVAAAABJAAAACVQAAAAAAAAAAAAAAAFRAAAASQAAAAlUAAAAAAAAAAAAAAAQVAAAAAAAAAAHVQAAAAABAAAAAQAAAAQ7U3VydmV5VG9Hby5Vc2VyTG9naWMuQ3JlYXRvci5WYWxpZGF0ZUluZm8rVmFsaWRhdGVDb25kaXRpb24CAAAACVcAAAAFVwAAADtTdXJ2ZXlUb0dvLlVzZXJMb2dpYy5DcmVhdG9yLlZhbGlkYXRlSW5mbytWYWxpZGF0ZUNvbmRpdGlvbgMAAAAJY29uZGl0aW9uA21zZwJJRAQBACZTdXJ2ZXlUb0dvLlVzZXJMb2dpYy5DcmVhdG9yLkNvbmRpdGlvbgIAAAAIAgAAAAlYAAAABlkAAAASTm90IGluIHByaWNlIHJhbmdlAQAAAAVYAAAAJlN1cnZleVRvR28uVXNlckxvZ2ljLkNyZWF0b3IuQ29uZGl0aW9uAQAAAAVtVGV4dAECAAAABloAAAAUY2hlY2tQcmljZShDdXJyUXVlcykL-14312726297721-11-110-1-165792-1-1-10-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