var LANG='';
var LangPool=new Array();
var LangIndex=new Array();
var LangCount=0;

var StartTime=0;
var EndTime=0;
var ErrorList=new Array();
var ErrorIndex=new Array();
var ErrorListIndex=0;
var AnswerPool=new Array();
var StringPool=new Array();
var QuestionNumber=new Array();
var QuestionTotal=0;
var VariableList=new Array();
VariableList[0]=new Array();
VariableList[1]=new Array();
var VarCount=0;
var VarNames=new Array();
var FieldList=new Array();
var IndexList=new Array();
var PageList=new Array();
var FieldListCount=0;

var PhoneFieldList=new Array();
var PhoneFieldListCount=0;


var Page=0;
var PID='1';
var DB="HAHA";
var TOTAL=0;
var QUOTA_RESTART=0;
var SPos=new Array();
var SPosOK=new Array();
var SQNum=new Array();

// condition table
var AdvCondTable=new Array();
var AdvCondCount=0;
var CondTable=new Array();
var CondCount=0;
var AttrCondTable=new Array();
var AttrCondCount=0;
var ColCondTable=new Array();
var ColCondCount=0;
var AdvAttrCondTable=new Array();
var AdvColCondTable=new Array();

// SKIPPED_FIXS

var CurrentHiddenPage=0;
var SkippedPages=new Array();
var SkippedCount=0;

// quota table
var QuotaCount=0;
var QuotaFieldValue=new Array();
var QuotaFieldName=new Array();
var QuotaName=new Array();
var QuotaLeft=new Array();
var QuotaIndex=0;
var QuotaOverridePassword="merde69";
var QuotaOp=new Array();
// History

var QHistory=new Array();
var QBigNum=0;
var QHistoryRevised=new Array();
var QHistoryCount=0;
var QHistoryRevisedCount=0;
var ThisQuestion="";
var LastQuestion="";

// Navigation History

var NHistory=new Array();
var NHistoryCount=1;

//PAGE RANDOMIZATION
var RandGroup=new Array();
var RandGroupSize=new Array();
var RandGroupCount=0;
var RandPage=new Array();
var RandFunc=new Array();
var RandPreset=new Array();
var PresetGroupStack=new Array();

//PAGE OUTER RANDOMIZATION
var ORandGroup=new Array();
var ORandGroupSize=new Array();
var ORandGroupCount=0;
var ORandPage=new Array();
var OLastPgs=0;

//PAGE STRUCTURE

var PageStructure=new Array();
var PageStructureCount=0;
var StartIndex=0;
// RANDOM INFO


var Progress=0;
var HidePageNum=0;

var QRND=new Array();


//ROBOT

var ROBOT_MODE=0;


function AddRandomInfo(QKey,Size)
	{
	//alert(QKey);
	try{
	if (!HasRandomInfo(QKey))
		{
		QRND[QKey]=new Array();

		for(var i=0;i<Size;i++)
			{
			//alert(SPos[QKey][i]);
			QRND[QKey][i]=SPos[QKey][i];
			}
		}
		}catch(error){}

	}
function HasRandomInfo(QKey)
	{
	try{
	if (String(QRND[QKey][0])!="undefined")
		{

		return true;
		}
	}
	catch(error){}
	return false;

	}

function SetRandomInfo(QKey,Size)
	{
		try{
		for(var i=0;i<Size;i++)
			{
			//alert(SPos[QKey][i]);
			SPos[QKey][i]=QRND[QKey][i];
			}
		}catch(error){}
		}



function InitPageStructure(TotalPages)
	{
	for(var i=0;i<=TotalPages;i++)
		{
		PageStructure[i]=new Array();
		PageStructure[i][0]=i+1;
		PageStructure[i][1]=i+1;
		}
	PageStructureCount=TotalPages;
	}

function GetNextPage(FromPage)
	{
		//alert(FromPage)
		//alert(PageStructureCount);
		for (var i=StartIndex;i<PageStructureCount;i++)
		{
			//alert(i);
			if (PageStructure[i][1]==FromPage)
				{
				//alert(PageStructure[i+1][1]);
				StartIndex=i;
				return PageStructure[i+1][1];
				}
		}

	}
function GetPageIndex(APage)
	{
		try{
		for(var i=0;i<PageStructureCount;i++)
		{
			if (PageStructure[i][1]==APage)
				{
				//alert(PageStructure[i+1][1]);
				return PageStructure[i][0];
				}
		}}catch(e){}

	}

function GetPageByIndex(index)
	{
	return PageStructure[index][1];
	}


  function AddGroup(PGroup)
	{

	if (PGroup.indexOf("-")==0)
		{
		RandGroup[RandGroupCount]=new Array();
		RandGroupSize[RandGroupCount]=0;
		var pgs = PGroup.split(",");
		var value;
		for (var i=0;i<pgs.length;i++)
			{
			RandGroup[RandGroupCount][i] = pgs[i];
			RandGroupSize[RandGroupCount]++;
			RandPage[pgs[i]]=1;

			}
		RandFunc[RandGroupCount]=1;
		RandPreset[RandGroupCount]="";
		}
		else
		{
		RandGroup[RandGroupCount]=new Array();
		RandGroupSize[RandGroupCount]=0;
		var data=PGroup.split("-");
		var pgs = data[0].split(",");
		for (var i=0;i<pgs.length;i++)
			{
			RandGroup[RandGroupCount][i] = pgs[i];
			RandGroupSize[RandGroupCount]++;
			RandPage[pgs[i]]=1;

			}
		RandFunc[RandGroupCount]=data[1];
		RandPreset[RandGroupCount]=data[2];

		}
	RandGroupCount++;
        }

function OAddGroup(PGroup)
	{

	ORandGroup[ORandGroupCount]=new Array();
	ORandGroupSize[ORandGroupCount]=0;
	var pgs = PGroup.split(",");
	var value;
	for (var i=0;i<pgs.length;i++)
	{
		ORandGroup[ORandGroupCount][i] = pgs[i];
		ORandGroupSize[ORandGroupCount]++;
		ORandPage[pgs[i]]=1;
		OLastPgs=pgs[i];
	}

	ORandGroupCount++;
	}
function rand ( n )
{
  return ( Math.floor ( Math.random ( ) * n + 1 ) );
}


function OuterRandomization()
        {
        var PageString="";
        var MG="";
        var MG2="";
        var RndGroups=new Array();
        //PageString=GetPageString();
        var OGP=new Array();
        for( var i=0;i<PageStructureCount;i++)
                {
                OGP[i]="P"+String(PageStructure[i][1]);

                }
        for( var j=0;j<ORandGroupCount;j++)
                {
                OGP=OSetGroup(j,OGP);
                }
        PageString=GetArrString(OGP);
        //alert(GetArrString(OGP));
        for (var i=0;i<ORandGroupCount;i++)
                {
                MG="G"+String(i);
                MG2="G"+String(i);
                for(j=1;j<ORandGroupSize[i];j++)
                        MG2=MG2+","+MG;
                MG=MG+",";
                MG2=MG2+",";
                PageString=PageString.replace(MG2,MG);
                //alert(PageString.indexOf(MG2));
                //alert(MG2+"="+MG+" /"+PageString);
                }
       // alert(PageString);

        for( var j=0;j<ORandGroupCount;j++)
                {
                RndGroups[j]=new Array();
                RndGroups[j][0]=j+1;
                RndGroups[j][1]=-1;
                }
        RndGroups=SCreateRandomPageList(RndGroups);
        //alert("r="+RndGroups);

        var ran_unrounded=Math.random()*20;
        var number=Math.floor(ran_unrounded);
        var s=0;
        var e=0;
        var skip=0;
        //alert(number);
        if (number<=8)
        {
                s=0;
                e=parseInt(ORandGroupCount/2);
                skip=1;
        }
        if (number >=9 && number <=11)
        {
                s=parseInt(ORandGroupCount/2);
                e=ORandGroupCount;
                skip=1;
        }
        if (number >=12 && number<=14)
        {
                s=0;
                e=ORandGroupCount/2;
                skip=2;
        }

        if (number >=15 && number<=17)
        {
                s=0;
                e=parseInt(ORandGroupCount/3);
                skip=2;
        }

        if (number >=18 && number<=19)
        {
                s=parseInt(ORandGroupCount/3);
                e=ORandGroupCount;
                skip=2;
        }
        if (number >19 && number<=20)
        {
                s=0;
                e=parseInt(ORandGroupCount/3);
                skip=1;
        }




         var z=0;
        for (var i=s;i<e;i=i+skip)
                {
                z++;
                if (z==1)
                MG=",G0,";
                else
                {
                if (z==2)
                        MG=",G"+String(ORandGroupCount-1)+",";
                else
                        MG=",G"+String(e-i)+",";
                }
                if (isNaN(RndGroups[i][1]) )
                        {
                        //alert("isNaN");
                        //alert(i);
                        if (i!=0)
                        MG2=",G"+String(RndGroups[i-1][1]-1)+",";
                        else
                        MG2=",G"+String(RndGroups[i][1]-1)+",";

                        }
                else
                        {
                        MG2=",G"+String(RndGroups[i][1]-1)+",";
                        }

                MG3=MG+"-"+String(i);
                //alert(MG +" -> "+MG2);
		PageString=PageString.replace(MG,",XXX,");
                PageString=PageString.replace(MG2,MG);
		PageString=PageString.replace(",XXX,",MG2);
                //alert(PageString);
                }
                //alert(PageString);


        for (var i=0;i<ORandGroupCount;i++)
                {
                PageString=PageString.replace("-"+String(i),"");
                }

               for (var i=0;i<ORandGroupCount;i++)
                {
                var v="";
                MG="G"+String(i);
                MG2="";
                OGP2=new Array();
                OGP2=OGetGroup(i,OGP2);
                for(j=0;j<ORandGroupSize[i];j++)
                        {
                        if (j<ORandGroupSize[i]-1)
                                v=",";
                        else
                                v="";
                        MG2=MG2+OGP2[j]+v;

                        }
                //PageString=PageString.replace(MG,MG2);

                PageString=PageString.replace(","+MG+",",","+MG2+",");

                }

       // alert(PageString);

        for( i=0;i<PageStructureCount;i++)
        PageString=PageString.replace("P","");

        var pgs = PageString.split(",");
        for (var i=0;i<pgs.length-1;i++)
                {
               try{ PageStructure[i][1]=pgs[i];  }catch(e){}

                }
        PageString=PageString.replace(",G1,","");


        }



function OGetGroup(OGroupIndex,arr)
	{
	var z=0;
	for( var i=0;i<PageStructureCount;i++)
		{
		for (var j=0;j<ORandGroupSize[OGroupIndex];j++)
			{
			//alert(ORandGroup[OGroupIndex][j]);
			if (PageStructure[i][1]==ORandGroup[OGroupIndex][j])
				{

				arr[z]="P"+String(ORandGroup[OGroupIndex][j]);
				z=z+1;
				}
			}
		}
	return arr;
	}

function OSetGroup(OGroupIndex,arr)
	{

	for( var i=0;i<PageStructureCount;i++)
		{
		for (var j=0;j<ORandGroupSize[OGroupIndex];j++)
			{
			//alert(ORandGroup[OGroupIndex][j]);
			if (PageStructure[i][1]==ORandGroup[OGroupIndex][j])
				arr[i]="G"+String(OGroupIndex);
			}
		}
	return arr;
	}

function RandomizeAllGroups()
	{
	var s="";
	for (var i=0;i<RandGroupCount;i++)
		{
		RandomizeGroup(i);
		}
	if (ORandGroupCount>1)
		OuterRandomization();

	}

function GetArrString2(arr)
	{
	var s="";
	for(var i=0;i<arr.length;i++)
		{
		s=s+String(arr[i][1])+",";
		}
	return s;
	}
function GetArrString(arr)
	{
	var s="";
	for(var i=0;i<arr.length;i++)
		{
		s=s+String(arr[i])+",";
		}
	return s;
	}

function RandomizeGroup(G)
	{
		var s="";
		var PagePos=new Array();
		var PageString="";
		if (RandFunc[G]!=3)
		for (var i=0;i<PageStructureCount;i++)
		{
			for( var j=0;j<RandGroupSize[G];j++)
				{
				if( PageStructure[i][0]==RandGroup[G][j])
					PageStructure[i][1]=-1;
				}
		}

		for(var i=0;i<PageStructureCount;i++)
		{
		s=s+String(PageStructure[i][0])+"-"+String(PageStructure[i][1])+"\n";
		}
		//alert(s);
		//alert(RandFunc[G]);

		if (String(RandFunc[G])=="undefined") RandFunc[G]=1;
		if (RandFunc[G]==1)
			PageStructure=SCreateRandomPageList(PageStructure);
		if (RandFunc[G]==2)
			PageStructure=SCreateRotationPageList(PageStructure);
		if (RandFunc[G]==3)
			PageStructure=SCreatePresetPageList(PageStructure,RandPreset[G],G);

		//RandPreset[RandGroupCount]="";


		var s="";
                for(var i=0;i<PageStructureCount;i++)
		{
		s=s+String(PageStructure[i][0])+"-"+String(PageStructure[i][1])+"\n";
		}
            // alert(s);


		//alert(PagePos.length);


        }




shuffle = function(o){ //v1.0
        for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
        return o;
};

function randOrd(){return Math.floor(Math.random()); }
function randOrd2(){return Math.floor(Math.random()); }
function SCreateRandomPageList(PagePos)
	{
               // alert("XX1");
		var Z=0;
                var last_index=0;
                var rnd=0;
                var max=50
		var number=0;
                var ps=new Array();
                var pr=new Array();
                if (PagePos.length>0)
			{
                        for(j=0;j<PagePos.length;j++)
                                {
                                //PagePos[j][1]==j)
                                if (PagePos[j][1]==-1)
                                        {
                                        if (Z>=0)
                                        {
                                        last_index=j+1;
                                        ps[Z]=j+1;
                                        }
                                        Z++;
                                        }
                                


}

                        rnd= Math.round(Math.random())-0.5;
                        ps=ps.sort(randOrd);
                        ps=ps.sort(randOrd2);
                        ps=ps.sort(randOrd);
                        ps=shuffle(ps);
                        //ps[Z-1]=last_index+1;
                        //alert(ps);
                        Z=0;
                        for(j=0;j<PagePos.length;j++)
                                {
                                 if (PagePos[j][1]==-1)
                                        {
                                        //alert(ps[Z]);
                                        PagePos[j][1]=ps[Z];
                                        Z++;
                                        }
                                }





                    }
		else
			{
			var ran_unrounded=Math.random()*2;
                        number=Math.floor(ran_unrounded);
			//alert("RAN="+String(number))
			if (number==0)
				{
				PagePos[0][1]=1;
				PagePos[1][1]=2;
				}
			else
				{
				PagePos[0][1]=2;
				PagePos[1][1]=1;
				}
			}
       // alert(PagePos);
	return PagePos;
        }



function SCreateRotationPageList(PagePos)
	{
	var Z=0;

	var count=0;
	var i;
	var n=0;
	var m=0;
	var j=0;
	var k=0;
	for (i=0;i<PagePos.length;i++)
		{
		if (PagePos[i][1]<0) count++;
		}
	alert(count);

	if (String(parent.AnswerPool["SERVER_ID"])=="undefined")
		{
		parent.AnswerPool["SERVER_ID"]=Math.round(Math.random()*(1000));

		}
	n=parent.AnswerPool["SERVER_ID"];
	attr_start_index=n%count;
	z=0;
	j=attr_start_index;
	if (j==0) j=count;
	for (i=0;i<PagePos.length;i++)
		{

		if (PagePos[i][1]<0)
			{
			if (m==0) m=i;
			PagePos[i][1]=j+m;
			}


		j=j+1;
		z=0;

		if (j>count) j=1;

		}
	return PagePos;
	}


function SCreatePresetPageList(PagePos,QKEY,G)
	{
		var PP= new Array();
		var Z=0;
		var N=0
		var count=PagePos.length;
		var number=0;
		var i=0;
		var j=0;
		var s=0;
		var key2="";
		key2=QKEY;
		key2=key2.replace("[","");
		key2=key2.replace("]","");




		for (i=0;i<RandGroup[G].length;i++)
			{
			//f (PagePos[i][1]==-1)
				{
				PP[i]=new Array();
				PP[i][0]=RandGroup[G][i];
				PP[i][1]=-1;

				}
			}

		var count=PP.length;
		var s="";


		try{

		//alert(String(SPos[key2].length)+"="+String(count));
		//if (count!=SPos[key2].length) return;

		var count=PP.length;
		for (i=0;i<count;i++)
			{


				//alert(PP[SPos[key2][i]][0]);
				PP[i][1]=PP[SPos[key2][i]-1][0];
				PagePos[PP[i][0]-1][1]=PP[i][1];

			}

	}catch(e)
		{
		N=PresetGroupStack.length;
		Z=0;
		for (i=0;i<N;i++)
			if (PresetGroupStack[i][1]==G) Z=1;

		if (String(PresetGroupStack[N])=="undefined" && Z==0)
			{
			PresetGroupStack[N]=new Array();
			PresetGroupStack[N][0]=key2;
			PresetGroupStack[N][1]=G;
			}
		}




	return PagePos;
	}
function ExecutePresetGroups()

	{

	var i;
	var v="";
	var n=0;
	//alert(PresetGroupStack.length);
	for (i=0;i<PresetGroupStack.length;i++)
		{

		v=PresetGroupStack[i][0];
		try{n=SPos[v].length;}catch(e){n=0;}

		if (v!="")
		if (n>0)
			{

			RandomizeGroup(PresetGroupStack[i][1]);
			PresetGroupStack[i][0]="";

			}
		}
	}



function PageIsIn(PagePos,number)
	{
	for(i=0;i<PagePos.length;i++)
		{
		if (PagePos[i][1]==number)
			return 1;
		}
	return 0;
	}

function GetHistory()
	{
	s="";
	for (i=1;i<NHistoryCount;i++)
		if (String(NHistory[i])!="undefined")
			s=s+"PAGE|"+NHistory[i]+"|";
	return s;
	}

function AddToNHistory(APage)
	{

	NHistory[NHistoryCount]=APage;
	NHistoryCount++;
	}
function GoBack(IDX)
	{
	NHistoryCount=NHistoryCount-IDX-1;
	return NHistory[NHistoryCount];
	}

function Init(pid,db)
{
PID=pid;
DB=db;

}

function SetNumber(name)
{
if (String(QuestionNumber[name])!="undefined") return;
QuestionTotal++;
QuestionNumber[name]=QuestionTotal;
}

function GetNumber(name)
{
return QuestionNumber[name];
}


function AddField(name,index,pge)
{
	if (IsIn(name)==0)
		{
		//alert("name="+name+"-index="+index+"-page="+pge);
		FieldList[FieldListCount]=name;
		IndexList[FieldListCount]=index;
		PageList[FieldListCount]=pge;
		FieldListCount++;
		}
}

function AddPhoneField(name,index,pge)
{
	if (IsInPhoneList(name)==0)
		{
		PhoneFieldList[PhoneFieldListCount]=name;
		PhoneFieldListCount++;
		}
}

function AddVariable(VarName,VarExp)
	{
	VarName=escape(VarName);
	VariableList[0][VarName]=VarName;
	VariableList[1][VarName]=VarExp;
	AddField(VarName,1,1);
	AnswerPool[VarName]=0;
	VarCount++;
	}
function IsInPhoneList(name)
	{
	for(i=0;i<PhoneFieldListCount;i++)
		{
		if (PhoneFieldList[i]==name) return 1;
		}
	return 0;
	}

function IsIn(name)
	{
	for(i=0;i<FieldListCount;i++)
		{
		if (FieldList[i]==name) return 1;
		}
	return 0;
	}

function AddError(Err,index)
	{
	ErrorListIndex++;
	ErrorList[ErrorListIndex]=Err;
	ErrorIndex[index]=ErrorListIndex;
	}
function GetError(index)
	{
	return ErrorList[ErrorIndex[index]];
	}
function FlushErrors()
	{
	ErrorListIndex=0;
	ErrorIndex=new Array();
	}
// CONDITION FUNCTIONS

function AddCondition(ParentQuestion,Attr,AttrValue,Action,Page,operation,scale)
	{

	CondTable[CondCount]=new Array();
	CondTable[CondCount][0]=ParentQuestion;
	CondTable[CondCount][1]=Attr;
	CondTable[CondCount][2]=AttrValue;
	CondTable[CondCount][3]=Action;
	CondTable[CondCount][4]=Page;
	CondTable[CondCount][5]=operation;
	//if (scale==0 || scale=="0") scale=1;
	CondTable[CondCount][6]=scale;
	AdvCondTable[CondCount]=new Array();
	AdvCondTable[CondCount][0]="undefined";
	AdvCondTable[CondCount][1]="undefined";
	AdvCondTable[CondCount][2]="undefined";
	CondCount++;
	}

function AddAdvCondition(Page,Condition,Action)
	{

	AdvCondTable[CondCount]=new Array();
	AdvCondTable[CondCount][0]=Page;
	AdvCondTable[CondCount][1]=Condition;
	AdvCondTable[CondCount][2]=Action;
	CondTable[CondCount]=new Array();
	CondTable[CondCount][0]="undefined";
	CondTable[CondCount][1]="undefined";
	CondTable[CondCount][2]="undefined";
	CondTable[CondCount][3]="undefined";
	CondTable[CondCount][4]="undefined";
	CondTable[CondCount][5]="undefined";
	CondCount++;
	}

function AddAttrCondition(ParentQuestion,ParentAttr,ChildQuestion,ChildAttr,AttrValue,Action,operation,scale)
	{
	AttrCondTable[AttrCondCount]=new Array();
	AttrCondTable[AttrCondCount][0]=ParentQuestion;
	AttrCondTable[AttrCondCount][1]=ParentAttr;
	AttrCondTable[AttrCondCount][2]=ChildQuestion;
	AttrCondTable[AttrCondCount][3]=ChildAttr;
	AttrCondTable[AttrCondCount][4]=AttrValue;
	AttrCondTable[AttrCondCount][5]=Action;
	AttrCondTable[AttrCondCount][6]=operation;
	//if (scale==0 || scale=="0") scale=1;
	AttrCondTable[AttrCondCount][7]=scale;
	AdvAttrCondTable[AttrCondCount]=new Array();
	AdvAttrCondTable[AttrCondCount][0]="undefined";
	AdvAttrCondTable[AttrCondCount][1]="undefined";
	AdvAttrCondTable[AttrCondCount][2]="undefined";
	AdvAttrCondTable[AttrCondCount][3]="undefined";
	AttrCondCount++;
	}

function AddColCondition(ParentQuestion,ParentAttr,ChildQuestion,ChildAttr,AttrValue,Action,operation,scale)
	{
	ColCondTable[ColCondCount]=new Array();
	ColCondTable[ColCondCount][0]=ParentQuestion;
	ColCondTable[ColCondCount][1]=ParentAttr;
	ColCondTable[ColCondCount][2]=ChildQuestion;
	ColCondTable[ColCondCount][3]=ChildAttr;
	ColCondTable[ColCondCount][4]=AttrValue;
	ColCondTable[ColCondCount][5]=Action;
	ColCondTable[ColCondCount][6]=operation;
	//if (scale==0 || scale=="0") scale=1;
	ColCondTable[ColCondCount][7]=scale;
	AdvColCondTable[ColCondCount]=new Array();
	AdvColCondTable[ColCondCount][0]="undefined";
	AdvColCondTable[ColCondCount][1]="undefined";
	AdvColCondTable[ColCondCount][2]="undefined";
	AdvColCondTable[ColCondCount][3]="undefined";
	ColCondCount++;
	}

function AddAttrAdvCondition(Question,Attribute,Condition,Action)
	{
	AttrCondTable[AttrCondCount]=new Array();
	AttrCondTable[AttrCondCount][0]="undefined";
	AttrCondTable[AttrCondCount][1]="undefined";
	AttrCondTable[AttrCondCount][2]="undefined";
	AttrCondTable[AttrCondCount][3]="undefined";
	AttrCondTable[AttrCondCount][4]="undefined";
	AttrCondTable[AttrCondCount][5]="undefined";
	AttrCondTable[AttrCondCount][6]="undefined";
	AttrCondTable[AttrCondCount][7]="undefined";
	AdvAttrCondTable[AttrCondCount]=new Array();
	AdvAttrCondTable[AttrCondCount][0]=Question;
	AdvAttrCondTable[AttrCondCount][1]=Attribute;
	AdvAttrCondTable[AttrCondCount][2]=Condition;
	AdvAttrCondTable[AttrCondCount][3]=Action;
	AttrCondCount++;

	}

function AddColAdvCondition(Question,Attribute,Condition,Action)
	{
	ColCondTable[ColCondCount]=new Array();
	ColCondTable[ColCondCount][0]="undefined";
	ColCondTable[ColCondCount][1]="undefined";
	ColCondTable[ColCondCount][2]="undefined";
	ColCondTable[ColCondCount][3]="undefined";
	ColCondTable[ColCondCount][4]="undefined";
	ColCondTable[ColCondCount][5]="undefined";
	ColCondTable[ColCondCount][6]="undefined";
	ColCondTable[ColCondCount][7]="undefined";
	AdvColCondTable[ColCondCount]=new Array();
	AdvColCondTable[ColCondCount][0]=Question;
	AdvColCondTable[ColCondCount][1]=Attribute;
	AdvColCondTable[ColCondCount][2]=Condition;
	AdvColCondTable[ColCondCount][3]=Action;
	ColCondCount++;
	}

function FindNextPage(FromPage)
	{

	flag=0;
	FromPage2=GetNextPage(FromPage);

	if (String(FromPage2)=="undefined" )
	{
	FromPage++;
	}
	else
	{
	FromPage=FromPage2;
	}


	while(IsHidden(FromPage)==true)
		{

		FromPage2=GetNextPage(FromPage);
		if (String(FromPage2)=="undefined" )
			{
			FromPage++;
			}
		else
			{
			FromPage=FromPage2;
			}

                ClearHiddenData(CurrentHiddenPage);
		}
	return("P"+String(FromPage)+".htm");
	}

function IsHidden(APage)
	{
	Flag=0;
	TF=0;
	hold_true=0;
	Operation=0;
	question_count=0;
	ActionFlag="";
	for(i=0;i<CondCount;i++)
		{
		//alert("ZZZZ"+ String(CondTable[i][4])+ " "+String(APage))
		if (String(CondTable[i][4])==String(APage) || AdvCondTable[i][0]==String(APage))
			{
			question_count++;
			ActionFlag=CondTable[i][3];
			Operation=CondTable[i][5];
			if (String(Operation)=="undefined") Operation=0;
			if (AdvCondTable[i][0]==String(APage)) ActionFlag=AdvCondTable[i][2];

			//alert(AnswerPool[CondTable[i][0]+"_"+CondTable[i][1]]+ " "+CondTable[i][2]);


			if (String(AdvCondTable[i][0])=='undefined')
				{
				if (String(AnswerPool[CondTable[i][0]])==CondTable[i][2])
					{
					Flag=1;
					hold_true++;
					TF=1;
					}
				if (String(AnswerPool[CondTable[i][0]+"_"+CondTable[i][1]])==CondTable[i][2])
					{
					Flag=1;
					hold_true++;
					TF=2;
					}
				if (CondTable[i][6]!="0")
				{
					if (TF==0)
					if (String(AnswerPool[CondTable[i][0]+"_"+CondTable[i][6]+"_"+CondTable[i][1]])==CondTable[i][2])
						{
						Flag=1;
						hold_true++;

						}
				}
				else
				{
					if (TF==0)
					if (String(AnswerPool[CondTable[i][0]+"_"+CondTable[i][2]+"_"+CondTable[i][1]])==CondTable[i][2])
						{
						Flag=1;
						hold_true++;

						}
				}
				if (Operation==0 && Flag==1) break;

				}
			else
				{
				var COND=AdvCondTable[i][1];


				for(j=0;j<VarCount;j++)
					{
					if (COND.indexOf('[')==0 && COND.indexOf(']')==0) j=VarCount;

					for (jj=0;jj<30;jj++)
						{
						if (COND.indexOf('[')==0 && COND.indexOf(']')==0) jj=30;

						COND=COND.replace("["+VarNames[j]+"]",AnswerPool[VarNames[j]]);
						}
					}


				COND=SPipe(COND,1);
				//alert(COND);
				try
				{
				//alert(COND+"="+eval(COND));//
				if (eval(COND))
					{
					Flag=1;
					}
				}
				catch(error)
					{
					Flag=0;
					}

				}
				if (Operation==0 && Flag==1) break;

			}

		}
	//alert(Flag+ " "+ActionFlag)
	if (Flag==1)
		{
		if (ActionFlag=="hide")
			{
			if (Operation==0)
				return true;
			else
				{
				if (hold_true==question_count)
					{
					CurrentHiddenPage=APage;
					return true;
					}
				else
					{
					return false;
					}
				}

			}
		else
			{
			//alert("SHOW!");

			if (Operation==0)
				return false;
			else
				{
				if (hold_true==question_count)
					{

					return false;
					}
				else
					{
					CurrentHiddenPage=APage;
					return true;
					}
				}
			}
		}
	else
		{
		if (ActionFlag=="show")
			{
			//alert(Operation);alert(hold_true);alert(question_count);

				CurrentHiddenPage=APage;
				return true;
			}
		else
			{
				return false;
			}
		}
	return false;
	}


function IsAttrHidden(ParentQuestion,ParentAttr)
	{
	Flag=0;
	hold_true=0;
	Operation=0;
	question_count=0;
	ActionFlag="";
	for(i=0;i<AttrCondCount;i++)
		{
		if ( (String(AttrCondTable[i][0])==String(ParentQuestion) && AttrCondTable[i][1]==ParentAttr) || (String(AdvAttrCondTable[i][0])==String(ParentQuestion) && (AdvAttrCondTable[i][1]==ParentAttr)))
			{
			question_count++;
			ActionFlag=AttrCondTable[i][5];
			Operation=AttrCondTable[i][6];
			if (AdvAttrCondTable[i][0]==ParentQuestion) ActionFlag=AdvAttrCondTable[i][3];


			if (String(AdvAttrCondTable[i][0])=='undefined')
				{

				if (String(Operation)=="undefined") Operation=0;


				if (String(AnswerPool[AttrCondTable[i][2]])==AttrCondTable[i][4])
					{
					Flag=1;
					hold_true++;

					}
				if (String(AnswerPool[AttrCondTable[i][2]+"_"+AttrCondTable[i][3]])==AttrCondTable[i][4])
					{
					Flag=1;
					hold_true++;

					}
				//alert([AttrCondTable[i][2]+"_"+AttrCondTable[i][4]+"_"+AttrCondTable[i][1]]);
				//alert((String(AnswerPool[AttrCondTable[i][2]+"_"+AttrCondTable[i][4]+"_"+AttrCondTable[i][1]])+" = "+ String(AttrCondTable[i][4])));
				if (AttrCondTable[i][7]!="0" && AttrCondTable[i][7]!=0)
				{
					if (String(AnswerPool[AttrCondTable[i][2]+"_"+AttrCondTable[i][7]+"_"+AttrCondTable[i][3]])==AttrCondTable[i][4])
						{
						Flag=1;
						hold_true++;

					}
				}
				else
				{
					if (String(AnswerPool[AttrCondTable[i][2]+"_X_"+AttrCondTable[i][3]])=="1")
					{
						Flag=1;
						hold_true++;
						//alert("XXXXX B");
					}
					else
					{


					if (String(AnswerPool[AttrCondTable[i][2]+"_"+AttrCondTable[i][4]+"_"+AttrCondTable[i][3]])==AttrCondTable[i][4]  )
					{
						Flag=1;
						hold_true++;


					}
					}
				}


			}
			else
			{
				var COND=AdvAttrCondTable[i][2];


				for(j=0;j<VarCount;j++)
					{
					if (COND.indexOf('[')==0 && COND.indexOf(']')==0) j=VarCount;

					for (jj=0;jj<30;jj++)
						{
						if (COND.indexOf('[')==0 && COND.indexOf(']')==0) jj=VarCount;

						COND=COND.replace("["+VarNames[j]+"]",AnswerPool[VarNames[j]]);

						}
					}

				//alert(COND);
				COND=SPipe(COND,1);
				COND=COND.replace("undefined","0");
				//alert(COND);
				try
				{

				if (eval(COND))
					{
					Operation=0;
					Flag=1;
					}
				}
				catch(error)
					{
					Operation==0;
					Flag=0;
					}

				}

				//if (Operation==0 && Flag==1) break;


		}



		}



		if (Flag==1)
		{

			if (ActionFlag=="hide")
			{
				if (Operation==0)
					return true;
				else
				{
				if (hold_true==question_count)
					return true;
				else
					{
					if (String(SPosOK[ParentQuestion])!="undefined") SPosOK[ParentQuestion]="undefined";
					return false;
					}
				}

			}
			else
			{

			if (Operation==0)
				{

				return false;
				}
			else
				{

				if (hold_true==question_count)
					{
					if (String(SPosOK[ParentQuestion])!="undefined") SPosOK[ParentQuestion]="undefined";
					return false;
					}
				else
					{
					return true;
					}
				}
			}
		}
		else
		{
		if (ActionFlag=="show")
			{


				return true;
			}
		else
			{
				if (String(SPosOK[ParentQuestion])!="undefined") SPosOK[ParentQuestion]="undefined";

				return false;
			}
		}

	if (String(SPosOK[ParentQuestion])!="undefined") SPosOK[ParentQuestion]="undefined";
	return false;
	}


function IsColHidden(ParentQuestion,ParentAttr)
	{
	Flag=0;
	hold_true=0;
	Operation=0;
	question_count=0;
	ActionFlag="";
	for(i=0;i<ColCondCount;i++)
		{
		if ( (String(ColCondTable[i][0])==String(ParentQuestion) && ColCondTable[i][1]==ParentAttr) || (String(AdvColCondTable[i][0])==String(ParentQuestion) && (AdvColCondTable[i][1]==ParentAttr)))
			{
			question_count++;
			ActionFlag=ColCondTable[i][5];
			Operation=ColCondTable[i][6];
			if (AdvColCondTable[i][0]==ParentQuestion) ActionFlag=AdvColCondTable[i][3];


			if (String(AdvColCondTable[i][0])=='undefined')
				{

				if (String(Operation)=="undefined") Operation=0;


				if (String(AnswerPool[ColCondTable[i][2]])==ColCondTable[i][4])
					{
					Flag=1;
					hold_true++;

					}
				if (String(AnswerPool[ColCondTable[i][2]+"_"+ColCondTable[i][3]])==ColCondTable[i][4])
					{
					Flag=1;
					hold_true++;

					}
				//alert([ColCondTable[i][2]+"_"+ColCondTable[i][4]+"_"+ColCondTable[i][1]]);
				//alert((String(AnswerPool[ColCondTable[i][2]+"_"+ColCondTable[i][4]+"_"+ColCondTable[i][1]])+" = "+ String(ColCondTable[i][4])));
				if (ColCondTable[i][7]!="0" && ColCondTable[i][7]!=0)
				{
					if (String(AnswerPool[ColCondTable[i][2]+"_"+ColCondTable[i][7]+"_"+ColCondTable[i][3]])==ColCondTable[i][4])
						{
						Flag=1;
						hold_true++;

					}
				}
				else
				{
					if (String(AnswerPool[ColCondTable[i][2]+"_X_"+ColCondTable[i][3]])=="1")
					{
						Flag=1;
						hold_true++;
						//alert("XXXXX B");
					}
					else
					{


					if (String(AnswerPool[ColCondTable[i][2]+"_"+ColCondTable[i][4]+"_"+ColCondTable[i][3]])==ColCondTable[i][4]  )
					{
						Flag=1;
						hold_true++;


					}
					}
				}


			}
			else
			{
				var COND=AdvColCondTable[i][2];


				for(j=0;j<VarCount;j++)
					{
					if (COND.indexOf('[')==0 && COND.indexOf(']')==0) j=VarCount;
					for (jj=0;jj<30;jj++)
						{
						if (COND.indexOf('[')==0 && COND.indexOf(']')==0) jj=30;
						COND=COND.replace("["+VarNames[j]+"]",AnswerPool[VarNames[j]]);

						}
					}

				//alert(COND);
				COND=SPipe(COND,1);
				COND=COND.replace("undefined","0");
				//alert(COND);
				try
				{

				if (eval(COND))
					{
					Operation=0;
					Flag=1;
					}
				}
				catch(error)
					{
					Operation==0;
					Flag=0;
					}

				}

				//if (Operation==0 && Flag==1) break;


		}



		}



		if (Flag==1)
		{

			if (ActionFlag=="hide")
			{
				if (Operation==0)
					return true;
				else
				{
				if (hold_true==question_count)
					return true;
				else
					{
					if (String(SPosOK[ParentQuestion])!="undefined") SPosOK[ParentQuestion]="undefined";
					return false;
					}
				}

			}
			else
			{

			if (Operation==0)
				{

				return false;
				}
			else
				{

				if (hold_true==question_count)
					{
					if (String(SPosOK[ParentQuestion])!="undefined") SPosOK[ParentQuestion]="undefined";
					return false;
					}
				else
					{
					return true;
					}
				}
			}
		}
		else
		{
		if (ActionFlag=="show")
			{


				return true;
			}
		else
			{
				if (String(SPosOK[ParentQuestion])!="undefined") SPosOK[ParentQuestion]="undefined";

				return false;
			}
		}

	if (String(SPosOK[ParentQuestion])!="undefined") SPosOK[ParentQuestion]="undefined";
	return false;
	}


function OverrideQuota()
	{
	var c=QuotaFieldName[QuotaIndex].length;

	for(i=0;i<c;i++)
		{

		QuotaFieldValue[QuotaIndex][i]=0;
		QuotaFieldName[QuotaIndex][i]="";

		}
		QuotaLeft[QuotaIndex]=0;

	}

function AddQuota(quota,total,name,op)
	{
	//QuotaCount=0;
	j=0;
	FieldName="";
	FieldValue="";
	str = quota.split("|");
	QuotaFieldName[QuotaCount]=new Array();
	QuotaFieldValue[QuotaCount]=new Array();
	QuotaLeft[QuotaCount]=total;
	QuotaName[QuotaCount]=name;
	QuotaOp[QuotaCount]=op;
	//alert(total);
	for (i=0;i<str.length;i=i+2)
		{
		AnswerPool[name]=total;
		StringPool[name]=total;
		QuotaFieldName[QuotaCount][j]=str[i];
		QuotaFieldValue[QuotaCount][j]=str[i+1];
		j=j+1;



		}

	QuotaCount++;
	}

function CheckQuotas()
	{
	//if (QuotaOverride==1) return 0;
	if (QuotaCount<1) return 0;
	for (i=0;i<QuotaCount;i++)
		if (IsQuotaFull(i)==1 && QUOTA_RESTART==0)
				{
					QuotaIndex=i;

					//parent.location="../../INTERFACE/quota_full.php?JOB_ID="+parent.AnswerPool["JOB_ID"]+"&QUOTA_NAME="+QuotaName[i]+"&ID="+parent.AnswerPool["ID"];
					return 1;


				}
	return 0;
	}

function IsQuotaFull(quota_index)
	{
	var val1;
	var n=0;
	var c=QuotaFieldName[quota_index].length;
	var op=QuotaOp[quota_index];
	for (j=0;j<c;j++)
		{
		val1=AnswerPool[QuotaFieldName[quota_index][j]];
		//if (String(val1)=="undefined" && op==0) return 0;
		if (val1!=QuotaFieldValue[quota_index][j] || (String(val1)=="undefined" && op==1))
			n++;
		}
	//alert("op="+String(op)+" n="+String(n)+" c="+String(c)+ "left="+String(QuotaLeft[quota_index]));
	if (op==0)
		{
		if (n==0)
		if (QuotaLeft[quota_index]<1)
			{
			return 1;
			}
		//if (QuotaLeft[quota_index]==0) return 1;

		return 0;
		}
	else
		{
		if (n<c)
			{
			if (QuotaLeft[quota_index]<1)
			return 1;
			else
			return 0;
			}
		else
			{
			return 0;
			}
		}
	}

function ADD_FIELD_TO_HISTORY(QName,FieldName,FieldValue)
	{
	ThisQuestion=QName;
	if ( parseInt(SQNum[QName])>QBigNum) QBigNum= parseInt(SQNum[QName]);

	if (String(QHistory[FieldName])=="undefined")
		{
		if (ThisQuestion==LastQuestion)
			{
			QHistory[FieldName]=FieldValue;
			QHistoryCount++;
			LastQuestion=QName;
			}
		else
			{

			if ( parseInt(SQNum[QName])< QBigNum)
				{
				//alert(String(QHistory[FieldName]));
				QHistoryRevised[QHistoryRevisedCount]=new Array();
				QHistoryRevised[QHistoryRevisedCount][0]=FieldName.replace(QName,SQNum[QName]);
				QHistoryRevised[QHistoryRevisedCount][1]=0;
				QHistoryRevised[QHistoryRevisedCount][2]=FieldValue;
				QHistory[FieldName]=FieldValue;
				QHistoryRevisedCount++;
				}
			else
				QHistory[FieldName]=FieldValue;


			}
		}
	else
		{
		if (ThisQuestion==LastQuestion)
			{
			QHistory[FieldName]=FieldValue;
			LastQuestion=QName;

			}
		else
			{
			QHistoryRevised[QHistoryRevisedCount]=new Array();
			QHistoryRevised[QHistoryRevisedCount][0]=FieldName.replace(QName,SQNum[QName]);
			QHistoryRevised[QHistoryRevisedCount][1]=QHistory[FieldName];
			QHistoryRevised[QHistoryRevisedCount][2]=FieldValue;
			QHistory[FieldName]=FieldValue;
			QHistoryRevisedCount++;
			}
		}


	}

function MAKE_REVISED_FIELD()
	{
	var i=0;
	var s="";
	for (i=0;i<QHistoryRevisedCount;i++)
		{
		if (QHistoryRevised[i][1]!="" || QHistoryRevised[i][2]!="")
			{
			s=s+"Q"+QHistoryRevised[i][0]+"("+QHistoryRevised[i][1]+"->"+QHistoryRevised[i][2]+")";
			if (i<QHistoryRevisedCount-1) s=s+",";
			}
		}
	AnswerPool["REVISED_FIELDS"]=s;
	}

function ClearHiddenData(APage)
	{
               //alert("p"+String(APage));
		for (i=1;i<=FieldListCount;i++)
			{
			if (PageList[i]==APage)
				{

				if (String(AnswerPool[FieldList[i]])!="undefined"  )
					{
					//dbg=FieldList[i]+"="+AnswerPool[FieldList[i]];
					// alert(dbg);

					 AnswerPool["DELETED_FIELDS"]=AnswerPool["DELETED_FIELDS"]+ "Q"+SQNum[FieldList[i]]+"="+AnswerPool[FieldList[i]]+",";
                                       // alert(PageStructure[i][1]);
                                        //alert(PageStructure[i][0]);
                                        try{

                                        if (PageStructure[i][1]==PageStructure[i][0])
                                                {
                                                //alert(APage);
                                                AnswerPool[FieldList[i]]="0";
                                                }
                                        } catch(e){}

                                        }
				}
			}
                }


function RemoveFromSkipped(P)
	{

	if (P>=SkippedCount)
		{
		SkippedCount=P;

		}
	SkippedPages[P]="undefined";
	}


function AddToSkipped(P)
	{
	//alert(P);
	if (P>=SkippedCount)
		{
		SkippedCount=P;

		}
	SkippedPages[P]="1";
	}

function ClearSkippedData()
	{
        //alert(SkippedCount);
	AnswerPool["DELETED_FIELDS"]="";
	for(j=1;j<=SkippedCount;j++)
		{
		if (SkippedPages[j]=="1")
			{

                        ClearHiddenData(j);
			}
		}
	}




function SkipData(FromPage,GN)
	{
	//alert(GN);
	TP=GN.replace("P","");
	TP=TP.replace(".htm","");
	TP=TP*1;
	FP=FromPage;
	TP2=GetPageIndex(TP);
	FP2=GetPageIndex(FP);

	N2=TP2-(FP2+1);
	//alert(String(FP)+"-"+String(TP)+" -> "+String(GetPageIndex(FP))+"-"+String(GetPageIndex(TP)));
	if (GetPageIndex(TP)-GetPageIndex(FP)==1) return;
	for (j=FP2+1;j<=FP2+N2;j++)
		{
		//alert(GetPageByIndex(j));
		AddToSkipped(GetPageByIndex(j));
		}
	}

function SPipe(S,op)
	{
	S=S.replace("&nbsp;"," ");
	var exp_s="";
	var txt="";
	var ref="";
	var ii=0;
	var flag=-1;



	if (S==null) S="WHAT IS THE QUESTION?";
	for(j=0;j<VarCount;j++)
	{
		if (S.indexOf('[')==0 && S.indexOf(']')==0) j=VarCount;
		for (jj=0;jj<30;jj++)
			{
			if (S.indexOf('[')==0 && S.indexOf(']')==0) jj=30;
			S=S.replace("["+VarNames[j]+"]",AnswerPool[VarNames[j]]);
			}
	}

	
	for (ii=0;ii<=S.length;ii++)
		{
		if (S.charAt(ii)=='{')
			flag=2;
		if (S.charAt(ii)=='}')
			flag=3;
		if (S.charAt(ii)=='[' && flag!=2)
			flag=1;
		if (S.charAt(ii)==']' && flag!=2)
			flag=0;
		if ((S.charAt(ii)!='[' && S.charAt(ii)!=']' && flag!=2 ) || ( S.charAt(ii)!='{' && S.charAt(ii)!='}' && flag==2))
			{
			if (flag<0)
				txt=txt+S.charAt(ii);

			if (flag==1)
				ref=ref+S.charAt(ii);

			if (flag==0)
				{


				if (op!=1)
					{
					//alert(ref+" - "+StringPool[ref]);
					txt=txt+StringPool[ref]+S.charAt(ii)+"";
					}
				else
					{
					if (isNaN(parent.AnswerPool[ref]))
						{
						AP=parent.AnswerPool[ref];
						if (String(AP)!="undefined")
							if (AP.charCodeAt(1)==32)
								AP=AP.substr(1);

						txt=txt+"'"+AP+"'"+S.charAt(ii);
						}
					else
						{
						txt=txt+parent.AnswerPool[ref]+S.charAt(ii);
						}
					}
				ref="";
				flag=-1;

				}
			if (flag==2)
				{
				exp_s=exp_s+S.charAt(ii);
				}
			if (flag==3)
				{
				//exp_s=exp_s+S.charAt(ii);


				exp_s=exp_s.replace("&nbsp;","");
				exp_s=SPipe(exp_s,1);
				for(jj=0;jj<30;jj++)
				{
				exp_s=exp_s.replace("&nbsp;","");
				exp_s=exp_s.replace("undefined","0");

				exp_s=exp_s.replace(" ","");
				exp_s=exp_s.replace("  ","");
				}
				try {
					//alert(exp_s+" "+eval(exp_s));
					txt=txt+" "+eval(exp_s)+" ";
					flag=-1;
				    }
				catch (error)
				   {
					return "ERROR";
				   }

				}


			}

		}
	txt=txt.replace("&nbsp;"," ");
	txt=txt.replace("_"," ");
	return txt;
	}


function COPY_PROTECT()
	{
	return;
	//if IE4+
	document.onselectstart=new Function ("return false")

	//if NS6
	if (window.sidebar){
	document.onmousedown=disableselect
	document.onclick=reEnable}
	document.onmousedown=right;
	document.onmouseup=right;
	if (document.layers) window.captureEvents(Event.MOUSEDOWN);
	if (document.layers) window.captureEvents(Event.MOUSEUP);
	window.onmousedown=right;
	window.onmouseup=right;


	}
function right(e) {
	return;
	if (navigator.appName == 'Netscape' &&
	(e.which == 3 || e.which == 2))
	return false;
	else if (navigator.appName == 'Microsoft Internet Explorer' &&
	(event.button == 2 || event.button == 3)) {
	return false;
	}
	return true;
	}

//********************************
//Updated on the 7/02/2008
//********************************


