var thisanchor='';
var isMacIE=false;
var starttime,endtime,duration,thispage,jsurveyfolder;
var sliderholdvalue=new Array();
// ### DC 20080814 CHECK FOR MAC IE BEFORE DOING ANYTHING ELSE
// ### DC CALLS REDARW SLIDER ROUTINES SO DON'T USE FOR OLDER SURVEYS WHERE INCLUDE OF JS AND CSS FOR SLIDERS ISN'T IN HEADER


checkMacIE();

window.onbeforeunload = obu;

function stopAllMedia(){
	try{
		var mediaArray=jsMediaString.split('|');
		for(var i=0;i<mediaArray.length;i++){
			thisone=mediaArray[i];
			if (thisone.length>0){
				//try{
				//	stopFlashMovieIE('VideoController'+thisone);
				//	}
				//catch(e){
					stopMedia('fc'+thisone);
				//}
			}
		}
	}
	catch(e){
		//alert(e);
	}
}

function getFlashObjectIE(inmoviename){
  if (window.document[inmoviename])
  {
    return window.document[inmoviename];
  }
  if (navigator.appName.indexOf("Microsoft Internet")==-1)
  {
    if (document.embeds && document.embeds[inmoviename])
      return document.embeds[inmoviename];
  }
  else
  {
    return document.getElementById(inmoviename);
  }
}

function stopFlashMovieIE(swf){
	var flashMovie=getFlashObjectIE(swf);
	flashMovie.stopPlay();
}

function obu() {
return 'If you do that you will lose all of your answers so far.\nTo navigate between pages please use the previous and next buttons';
}

function killobu() {
onbeforeunload = null;
//return true;
}

function accesskey(){
	//return false;
}

function clearplaceholdertext(incontrol){
	if(incontrol.value==placeholdertext){
		incontrol.value='';
	}
}

function putplaceholdertext(incontrol){
	if(incontrol.value.length==0){
		incontrol.value=placeholdertext;
	}
}

function isInPopUp(){
	if(window.opener!=null){return true} else {return false};
}

function noneoftheabove(initem){
// ### DC 20060725 CHANGED TO FIX SAFARI PROBLEM (IT CHECKED THEM ALL)
var n=document.getElementsByName(initem.name);
var l=n.length;
if (initem.type=='radio'){
	for(var i=0;i<l-1;i++){
		//n[i].checked=true;
		//n[i].click();
		n[i].checked=false;
		}
	initem.checked=true;
	}
	else
	n[l-1].checked=false;
}

function pcIsMet(inpage){
	var hold=false;
	var thisrequired;
	var thispagecondition=jspagearray[inpage];
	var thispcq=thispagecondition.split('=')[0]
	var thispca=thispagecondition.split('=')[1]
	var thispcansweroptionsarray=thispca.split(',');
	switch (jsquestionlabelsarray[thispcq].split('_')[3]){
		case 'r':
		case 'c':
			var thisq=document.getElementsByName(jsquestionlabelsarray[thispcq]);
			for(var i=0;i<thispcansweroptionsarray.length;i++){
				thisrequired=thispcansweroptionsarray[i];
				// ROTATION FIX
				for(var k=0;k<thisq.length;k++){
					if(thisq[k].value==thisrequired && thisq[k].checked==true){hold=true}
					}
				}
			break;
		case 'd':
			var thisq=document.getElementById(jsquestionlabelsarray[thispcq]);
			for(var i=0;i<thispcansweroptionsarray.length;i++){
				thisrequired=thispcansweroptionsarray[i];
				// NEEDS ROTATION FIX
				if(thisq.options[thisq.selectedIndex].value==thisrequired){hold=true;}
				}
			break;
		case 'x':
		case 'y':
		case 'w':
			//always check matrix value in hidden matrix value field
			var thisq=document.getElementsByName(jsquestionlabelsarray[thispcq]);
			for(var i=0;i<thispcansweroptionsarray.length;i++){
				thisrequired=thispcansweroptionsarray[i];
				res=document.getElementById(jsquestionlabelsarray[thispcq]).value;
				if(res.search(thisrequired+',')>-1){hold=true};;
				}
			break;
	}
	return hold;
}

// ### DC 20060131 EXTENDED TO ENSURE EACH ROW OF A MATRIX IS COMPLETED
function filledin(inq){
	var thistype=inq.split('_')[3];
	var thisqformid=inq.split('_')[1];
	var hold=false;
	switch (thistype){
		case 'r': //radio button
		case 'c': //checkbox
			var thisq=document.getElementsByName(inq);
			var thisqelements=thisq.length;
			for (var i=0;i<thisqelements;i++){
				if (thisq[i].checked==true){hold=true}
				}
			break;
		case 't':
			var thistext=document.getElementById(inq).value;
			if (thistext.length!=0 && thistext!=placeholdertext){hold=true};
			//alert(hold);
			break;
		case 'd': //drop down
		case 'm': //multi-select
			var thisq=document.getElementById(inq);
			if(thisq.selectedIndex>0){hold=true};
			break;
		case 'x': //matrix radio
		case 'y': //matrix checkbox
		case 'w': //matrix drop down
			var done=true;
			var thistext=document.getElementById(inq).value;
			var thismatrixcount=jsmatrix[thisqformid];
			if(thismatrixcount!='undefined'){
				for(i=0;i<thismatrixcount+1;i++){
					if(thistext.search((i+10)+'_')==-1){done=false;}
				}
			hold=done;
			}
			break;
	}
	return hold;
}

function inits(){
	checkserver();
	get_timezoneoffset();
	get_source();
	dorandom();
	if(document.getElementById('loading')){hidegif()};
	showHideCompulsory(1)
	// ### DC 20070606 FIX SO LABELS WORK ON FORM CONTROLS IN SAFARI
	fixFormLabels();
	// ### DC 20080610 GET SURVEYFOLDER FOR NEW PAGE COUNTER
	jsurveyfolder=document.getElementById('surveyfolder').value
	updatecounter(jsurveyfolder,0);
	// ### DC 20080623 IF PERMALINK THEN USE AJAX TO UPDATE EMAIL TO PERESULT=4
	var permalink=''+document.location.search;
	if(permalink.length>0){
		var rxs='^[a-f0-9]{8}I[0-9]*$';
		var rx=new RegExp(rxs,"gi");
		if(permalink.search(rx)>-1){
			emailClicked(permalink);
		}
	}

	document.getElementById('p1').style.display='inline';
	fdSliderController.redrawAll();
	showhidebuttons(1);
	if(isInPopUp()==true){document.getElementById('isInPopUp').value='1';}
	getstarttime();
	document.getElementById('buttons').style.display='inline';
}

function checkserver(){
// ### DC 20060924 IF ON FAILOVER SERVER THEN CHANGE FORM ACTION TO RELATIVE PATH
	var isFailover=get_cookie('failover');
	var formaction=document.getElementById('survey').action;
	if(formaction.slice(0,8)=='https://' && isFailover=='True'){
		formactionarray=formaction.split('/');
		document.getElementById('survey').action='/'+formactionarray[formactionarray.length-2]+'/'+formactionarray[formactionarray.length-1];
	}
}

function ok2Go(){
	stopAllMedia();
	var hold='x,';
	var thispqarray=pageqs[thispage].split('|');
	clear_errors(thispqarray);
	var thisqid;
	var thisqcode
	var thisvalidation;
	var thisqtype;
	for (var i=0;i<thispqarray.length-1;i++){
		thisqcode=thispqarray[i];
		thisqcodearray=thisqcode.split('_');
		thisqid=(thisqcodearray[1])*1;

// ### DC 20071013 NEW CODE TO ALLOW FOR HIDDEN COMPULSORY QUESTIONS TO BE UNANSWERED
		thisqdiv='div_q'+'_'+thisqid;
		if(document.getElementById(thisqdiv).style.display=='inline'){

			thisvalidation=thisqcodearray[2];
			switch(thisvalidation){
				case 'x':
					break;
				case 'X': //compulsory
					if(filledin(thisqcode)==false){
						setanchor(thisqid);
						//show error message
						hold+=(thisqcode+'X,');
						}
					break;
				case 'P': //UK postcode compulsory
					var thisvalue=document.getElementById(thisqcode).value;
					if(isEmpty(thisvalue)==true || isPostCodeCompulsory(thisvalue)==false){
						hold+=(thisqcode+'P,');
						setanchor(thisqid);
					}
					break;
				case 'p': //UK postcode
					var thisvalue=document.getElementById(thisqcode).value;
					if(isPostCode(thisvalue)==false && isEmpty(thisvalue)==false){
						hold+=(thisqcode+'p,');
						setanchor(thisqid);
						}
					break;
				case 'N': // number compulsory
					var thisvalue=document.getElementById(thisqcode).value;
					if(isEmpty(thisvalue)==true){
						hold+=(thisqcode+'N,');
						setanchor(thisqid);
						}
						else if(isNumericCompulsory(thisvalue)==false){
							hold+=(thisqcode+'n,');
							setanchor(thisqid);
						}
					break;
				case 'n': // number
					var thisvalue=document.getElementById(thisqcode).value;
					if(isNumeric(thisvalue)==false && isEmpty(thisvalue)==false){
						hold+=(thisqcode+'n,');
						setanchor(thisqid);
						}
					break;
				case 'nn': // matrix number
					var thismatrixcount=jsmatrix[thisqid];
					var temp;
					temp=true;
					if(thismatrixcount!='undefined'){
						for(var k=0;k<thismatrixcount+1;k++){
							thisone=document.getElementById(thisqcode+'_'+k+'_x').value.replace(' ','');
							if(isNaN(thisone)==true){temp=false}
						}
						if(temp==false){
							hold+=(thisqcode+'nn,');
							setanchor(thisqid);
						}
					}
					break;
				case 'NN': // matrix number compulsory
					var thismatrixcount=jsmatrix[thisqid];
					var temp;
					var tally;
					temp=true;
					tally=0;
					if(thismatrixcount!='undefined'){
						for(var k=0;k<thismatrixcount+1;k++){
							//NEEDS FIXING AS SPACES BUGGER UP ANALYSIS (NOW TRAPPED) - SO SHOULD TRIM BEFORE SAVE
							thisone=document.getElementById(thisqcode+'_'+k+'_x').value.replace(' ','');
							tally+=(thisone*1);
							//if(isNaN(thisone)==true || thisone.length==0){temp=false}
							if(isNaN(thisone)==true || thisone.length==0){temp=false}
						}
						if(temp==false || tally==0){
						// ### DC 20081008 ALLOW ALL ZEROES IF COMPULSORY
						//if(temp==false){
							hold+=(thisqcode+'NN,');
							setanchor(thisqid);
						}
					}
					break;
				case 'XX': // matrix text compulsory
					var thismatrixcount=jsmatrix[thisqid];
					var temp;
					temp=true;
					if(thismatrixcount!='undefined'){
						for(var ii=0;ii<thismatrixcount+1;ii++){
							thisone=document.getElementById(thisqcode+'_'+ii+'_x').value
							if(thisone.length==0 || thisone==placeholdertext){temp=false}
						}
						if(temp==false){
							hold+=(thisqcode+'XX,');
							setanchor(thisqid);
						}
					}
					break;
				case 'E': //email compulsory
					var thisvalue=document.getElementById(thisqcode).value;
					if((isEmpty(thisvalue)==true) && (thisvalidation=='E')){
						hold+=(thisqcode+'E,');
						setanchor(thisqid);
						}
						else if(thisvalue.length>0 && isEmailCompulsory(thisvalue)==false){
							hold+=(thisqcode+'e,');
							setanchor(thisqid);
						}
					break;
				case 'e': //email
					var thisvalue=document.getElementById(thisqcode).value;
					if((isEmpty(thisvalue)==true) && (thisvalidation=='E')){
						hold+=(thisqcode+'E,');
						setanchor(thisqid);
						}
						else if(thisvalue.length>0 && isEmail(thisvalue)==false){
							hold+=(thisqcode+'e,');
							setanchor(thisqid);
						}
					break;
				case 'Z': //zip compulsory
					var thisvalue=document.getElementById(thisqcode).value;
					if((isEmpty(thisvalue)==true) && (thisvalidation=='Z')){
						hold+=(thisqcode+'Z,');
						setanchor(thisqid);
						}
						else if(isZipCodeCompulsory(thisvalue)==false){
							hold+=(thisqcode+'z,');
							setanchor(thisqid);
						}
					break;
				case 'z': //zip
					var thisvalue=document.getElementById(thisqcode).value;
					if((isEmpty(thisvalue)==true) && (thisvalidation=='Z')){
						hold+=(thisqcode+'Z,');
						setanchor(thisqid);
						}
						else if(isZipCode(thisvalue)==false){
							hold+=(thisqcode+'z,');
							setanchor(thisqid);
						}
					break;
				case 'W': //web compulsory
					var thisvalue=document.getElementById(thisqcode).value;
					if((isEmpty(thisvalue)==true) && (thisvalidation=='W')){
						hold+=(thisqcode+'W,');
						setanchor(thisqid);
						}
						else if(isURLCompulsory(thisvalue)==false){
							hold+=(thisqcode+'w,');
							setanchor(thisqid);
						}
					break;
				case 'w': //web
					var thisvalue=document.getElementById(thisqcode).value;
					if((isEmpty(thisvalue)==true) && (thisvalidation=='W')){
						hold+=(thisqcode+'W,');
						setanchor(thisqid);
						}
						else if(isURL(thisvalue)==false){
							hold+=(thisqcode+'w,');
							setanchor(thisqid);
						}
					break;
			} //end case
		}
	} // end for
	return hold;
}

function ok2submit(){
	var OK=ok2Go();
	if(OK.length<3){
		return true
	}
	else{
		showerrs(OK);
		return false;
		}
}

// ### DC 20060107 SUBMIT WASN'T CHECKING COMPULSORY ON LAST PAGE SO ONSUBMIT RETURN REMOVED AND NEW TRYSUBMIT() ADDED
// ### DC 20080208 DISABLE SUBMIT BUTTON IF OK2GO
function trysubmit(){
	if(ok2submit()==true){
		getduration();
		document.getElementById('bSubmit').disabled=true;
		document.getElementById('survey').submit();
		}
}

// ### DC 20071012 CHANGED TO ALLOW PREVIOUS EVEN THE COMPULSORY NOT SATISFIED
// OK2GO ONLY CALLED WHEN GOING FORWARD
function changepage(direction){
	switch(direction){
		case '+':
			var OK=ok2Go();
			if (OK.length<3){
				gonext();
				break;
			}
			else{
				showerrs(OK);
				break;
			}
		case '-':
			goback();
			break;
		}
}

function doPagerSNR(inpage){
	/*
		img=document.getElementById('pager');
		if(img!=null){
			img.src='/images/pagecounter.gif?s='+document.getElementById('surveyfolder').value+'&p='+inpage;
			}
	*/
	updatecounter(jsurveyfolder,inpage-1);
	var snr1=document.getElementById('divRestore');
	var snrx=document.getElementById('divSave');
	switch (thispage){
		case 1:
			snr1.style.display='block';
			snrx.style.display='none';
			break;
		case maxpage:
			snr1.style.display='none';
			snrx.style.display='none';
			break;
		default:
			snr1.style.display='none';
			snrx.style.display='block';
			break;
	}
}

function goback(){
	if(thispage!=1){
		document.getElementById('p'+thispage).style.display='none';
		thispage=getNextPage(thispage,'--');
		document.getElementById('p'+thispage).style.display='inline';
		showhidebuttons(thispage)
		self.scrollTo(0,0);
		setprogress(thispage)
		showHideCompulsory(thispage);
		doPagerSNR(thispage);
		fdSliderController.redrawAll();
		}
}

function gonext(){
	if(thispage<(maxpage+1)){
		document.getElementById('p'+thispage).style.display='none';
		thispage=getNextPage(thispage,'++');

		//doRotation(thispage);

		document.getElementById('p'+thispage).style.display='inline';
		showhidebuttons(thispage)
		self.scrollTo(0,0);
		setprogress(thispage)
		showHideCompulsory(thispage);
		doPagerSNR(thispage);
		fdSliderController.redrawAll();
		}
}

function gotopage(inpage){
		document.getElementById('p'+thispage).style.display='none';
		thispage=inpage;
		document.getElementById('p'+thispage).style.display='inline';
		showhidebuttons(thispage)
		self.scrollTo(0,0);
		setprogress(thispage)
		showHideCompulsory(thispage);
		doPagerSNR(thispage);
}

function doRotation(inpage){
	try{
		var groups=jsrotation[inpage];
		if(groups.length==0){return;}
		var thisgroupsarray=groups.split(',');
		for(var i=0;i<thisgroupsarray.length;i++){
			if(thisgroupsarray[i].length>0){
				var s=thisgroupsarray[i].split('_')
				switch(s.length){
					case 3: //ordinary group
						randomizeContent('group'+thisgroupsarray[i]);
						break;
					case 5: //drop down
						var sel=s[0]+'_'+s[1]+'_'+s[2]+'_'+s[3];
						var rmode=s[4]*1;
						randomizeSelect(sel,rmode);
						break;
					case 6: //ranking
						var sel=s[0]+'_'+s[1]+'_'+s[2]+'_'+s[3]+'_';
						randomizeRanking(sel);
						break;
				}
			}
		}
		//clear rotations for this page so it does re-rotate after previous/next
		jsrotation[inpage]='';
	}
	catch(e){return;}
}

function showhidebuttons(thispage){
	var bn=document.getElementById('bNext');
	var bp=document.getElementById('bPrev');
	var bs=document.getElementById('bSubmit');
	bn.style.display='';
	bp.style.display='';
	bs.style.display='none';
	switch (thispage){
		case maxpage:
			bn.style.display='none';
			bp.style.display='';
			bs.style.display='';
			bs.value=jlexicon['submitAnswers'];
			break;
		case 1:
			bp.style.display='none';
			break;
	}

	// ### DC 20060302 ALWAYS HIDE PREVIOUS BUTTON ON A QUIZ
	// ### DC 20060414 COMMENTED OUT UNTIL IT IS MADE USER-SPECIFIED
	try{
		//if(isquiz()==true){bp.style.display='none';}
		}
	catch(e){
		//do nothing extra
	}

	// ### DC 20060208 CODE TO HANDLE EXIT PAGE AND SHOW MODIFIED SUBMIT BUTTON
	try{
		if(jspageisexitpagearray[thispage]==1){
			bn.style.display='none';
			bs.style.display='';
			bs.value=jlexicon['continue'];
		}
	}
	catch(e){var a=1}
	if(maxpage==1){bp.style.display='none';}
	document.getElementById('buttons').style.display='inline';
}

function dorandom(){
	//alert(maxpage);
	var lastchar;
	for(i=0;i<maxpage;i++){
		pq=pageqs[i+1];
		if (pq.length>0){
			qq=pq.split("|");
			if (qq.length>0){
				for (var ii=0; ii < qq.length-1; ii++) {
					lastchar=qq[ii].charAt(qq[ii].length-1);
					if(lastchar=='z'){
						fillrand(qq[ii]);
					}
				}
			}
		}
	}
}

function fillrand(infield){
	thisfield=document.getElementsByName(infield);
	thisfieldint=(infield.split('_')[1]);
	if (get_cookie(infield).length==0){
		thisoptsa=randomiser[thisfieldint].split('|');
		thisoptsl=thisoptsa.length;
		thisrand=Math.floor(Math.random()*thisoptsl,0);
		thischoice=thisoptsa[thisrand];
		}
	else thischoice=get_cookie(infield);

	thisfield[0].value=thischoice;
	thisfield[1].value='-'+thischoice;
	thistextfield='t_'+infield;
	thistext=document.getElementById(thistextfield);
	thistext.innerHTML=thischoice;
	set_cookie(infield,thischoice);
}

function set_cookie(inq,invalue){
	today=new Date();
	expires=new Date(today.getTime()+60*24*60*60);
	document.cookie=inq+"="+invalue +';path=/;expires='+expires.toGMTString();
}

function get_cookie(inq) {
	var jsearch = inq + "=";
	var returnvalue = "";
	//return;
	if (document.cookie.length > 0) {
		var offset = document.cookie.indexOf(jsearch);
		if (offset != -1) {
			offset += jsearch.length
			var end = document.cookie.indexOf(";", offset);
			if (end == -1){ end = document.cookie.length};
			returnvalue=unescape(document.cookie.substring(offset, end));
			}
		}
		return returnvalue;
}

function xdoselect(intarget){
	var args=xdoselect.arguments;
	//window.focus();
	if (args[1].length==0){return;}
	source=document.getElementById(args[0]);
	var chkarray=new Array(source.length);
	thisqsarray=args[1].split('|');
	var hold=new Array(thisqsarray.length)
	//initialise as hide
	for(i=0;i<thisqsarray.length;i++){
		hold[i]='-';
		testarray=args[i+2].split('|');
		for(j=0;j<testarray.length;j++){
			//rotation fix
			if(source.options[source.options.selectedIndex].value==testarray[j]){
				hold[i]='+';
				}
			}
		target='div_q_'+thisqsarray[i]
		switch (hold[i]){
			case '+':
				document.getElementById(target).style.display='inline';
				break;
			case '-':
				document.getElementById(target).style.display='none';
				break;
			}
		}
		fdSliderController.redrawAll();

}

function xdo(intarget){
	// TO BE REPLACED WITH XDO2
	var counter=0;
	var trace=document.getElementById('counter')
	var args=xdo.arguments;
	if (args[1].length==0){return;}
	source=document.getElementsByName(args[0]);
	var chkarray=new Array(source.length);
	// thisqsarray is array of questions controlled by this question
	thisqsarray=args[1].split('|');
	var hold=new Array(thisqsarray.length)
	// initialise as hide
	for(i=0;i<thisqsarray.length;i++){
		// go through controls in this array
		hold[i]='-';
		// testarray is values needed to show question
		testarray=args[i+2].split('|');
		for(j=0;j<testarray.length;j++){
			// go through condition values
			for(k=0;k<source.length;k++){
				if(source[k].checked==true && source[k].value==testarray[j]){
				hold[i]='+';
				}
			}
		}
		var target='div_q_'+thisqsarray[i];
		objTarget=document.getElementById(target);
		var targetDisplay=objTarget.style.display
		switch (hold[i]){
			case '+':
				objTarget.style.display='inline';
				break;
			case '-':
				objTarget.style.display='none';
				//ONLY DO CLEAR QUESTION IF QUESTION WAS PREVIOUSLY VISIBLE
				if(targetDisplay=='inline'){
					// ADDED '_' AS IT WAS FINDING 41 FOR 4 ETC
					var xq='q_'+thisqsarray[i]+'_';
					for (var j=0;j<pageqs.length;j++){
						try{
							onepageqarray=pageqs[j].split('|');
							for (k=0;k<onepageqarray.length;k++){
								if(onepageqarray[k].slice(0,xq.length)==xq){
									clearAnswers(onepageqarray[k]);
								}
							}
						}
						catch(e){
						//do nothing
						}
					}
				}
				break;
			}
		}
		fdSliderController.redrawAll();
}

function xdoMatrix(intarget){
	var args=xdoMatrix.arguments;
	var sourcearray=args[0].split('_');
	var source=document.getElementById(sourcearray[0]+'_' + sourcearray[1]+'_' + sourcearray[2]+'_' + sourcearray[3]);

	if (args[1].length==0){return;}
	var thisqsarray=args[1].split('|');
	var hold=new Array(thisqsarray.length)
	//initialise as hide

	for(i=0;i<thisqsarray.length;i++){
		hold[i]='-';
		testarray=args[i+2].split('|');
		for(j=0;j<testarray.length;j++){
			if(source.value.search(testarray[j]+',')>-1){
				hold[i]='+';
				}
			}
		target='div_q_'+thisqsarray[i]
		switch (hold[i]){
			case '+':
				document.getElementById(target).style.display='inline';
				break;
			case '-':
				document.getElementById(target).style.display='none';
				break;
			}
		}
			fdSliderController.redrawAll();

}

function time(){
var a,b;
a=b;
}

function setanchor(inq){
	if(thisanchor.length==0){
		thisanchor='|#v'+inq;
		//alert(thisanchor);
	}
}

function showerrs(instring){
var errstring='';
errarray=(instring.split('|')[0]).split(',');
for(i=1;i<errarray.length-1;i++){
	switch(errarray[i].split('_')[2]){
		case 'X':
			errstring=jlexicon['compulsoryQuestion'];
			break;
		case 'XX':
			errstring=jlexicon['compulsoryQuestions'];
			break;
		case 'P':
		case 'p':
			errstring=jlexicon['invalidPostcode'];
			break;
		case 'N':
		case 'n':
			errstring=jlexicon['invalidNumber'];
			break;
		case 'NN':
		case 'nn':
			errstring=jlexicon['invalidNumbers'];
			break;
		case 'E':
		case 'e':
			errstring=jlexicon['invalidEmailAddress'];
			break;
		case 'W':
		case 'w':
			errstring=jlexicon['invalidWebAddress'];
			break;
		case 'Z':
		case 'z':
			errstring=jlexicon['invalidZipCode'];
			break;
		}
		errfield=errarray[i].split('_')[0]+ '_'+ errarray[i].split('_')[1] + '_' + errarray[i].split('_')[2]+'v';
		errID=document.getElementById(errfield);
		errID.innerHTML='&nbsp;'+ errstring;
	}
	self.location=thisBaseURL+(thisanchor.split('|')[1]);
}

function clear_errors(errarray){
	var thispqcount=errarray.length;
	var errfield='';
	var errValidation='';
	var daggers;
	for (var i=0;i<thispqcount;i++){
		errfield=errarray[i].split('_')[0]+ '_'+ errarray[i].split('_')[1] + '_' + errarray[i].split('_')[2]+'v';
		errID=document.getElementById(errfield);
		errValidation=errarray[i].split('_')[2];
		switch(errValidation){
			case 'X':
			case 'XX':
				daggers='***';
				break;
			case 'P':
			case 'N':
			case 'NN':
			case 'E':
			case 'W':
			case 'Z':
				daggers='!!!';
				break;
			case 'p':
			case 'n':
			case 'nn':
			case 'e':
			case 'w':
			case 'z':
				daggers='&dagger;&dagger;&dagger;';
				break;
			}
		if(errID){errID.innerHTML=daggers};
	}
}

function hidegif(){
	document.getElementById('loading').style.display='none';
	document.getElementById('p1').style.display='inline';
	setprogress(1);
}

function setprogress(inpage){
	var scaler;
	switch(Math.floor(maxpage/10)){
		case 0: //UP TO 9
			scaler=18;
			break;
		case 1: //10 TO 19
			scaler=14;
			break;
		case 2: //20 TO 29
			scaler=10;
			break;
		case 3: //30 TO 39
			scaler=6;
			break;
		default:
			scaler=Math.floor(300/maxpage);
			break;
	}
	var ptext=document.getElementById('progresstext');
	// ### DC 20060212 MODIFY PROGRESS STATUS IF ON AN EXIT PAGE
	try{
		if(jspageisexitpagearray[thispage]==1){
			inpage=maxpage;
			}
		}
	catch(e){var a=1}
	var pagestogo=maxpage-inpage;

	var progress=document.getElementById('progress');
	var progressx=document.getElementById('progressx');
	var holdprogress;
	switch (progressStyle){
		case 0:
		case 10://none
			break;
		case 1: //progress bar
		case 11:
			switch(inpage){
				case 1:
					progress.style.width='2px';
					progressx.style.width=scaler*(pagestogo+1)-2+'px';
					holdprogress=jlexicon['SurveyComplete'];
					holdprogress=holdprogress.replace('[jpercentage]','0');
					ptext.innerHTML=holdprogress;
					break;
				default:
					progress.style.width=scaler*(inpage-1)+'px';
					progressx.style.width=scaler*(pagestogo+1)+'px';
					holdprogress=jlexicon['SurveyComplete'];
					holdprogress=holdprogress.replace('[jpercentage]',Math.floor(100*(inpage-1)/maxpage));
					ptext.innerHTML=holdprogress;
			}
			break;
		case 2: //text
		case 12:
			holdprogress=jlexicon['PageOf'];
			holdprogress=holdprogress.replace('[jpage]',inpage);
			holdprogress=holdprogress.replace('[jmaxpage]',maxpage);
			ptext.innerHTML=holdprogress;
			break;
		}
}

function showHideCompulsory(inpage){
	//
	var show;
	var compulsory=document.getElementById('compulsoryspan');
		compulsory.style.display='none';
	var validated=document.getElementById('validatedspan');
		validated.style.display='none';
	var cvalidated=document.getElementById('cvalidatedspan');
		cvalidated.style.display='none';
	var qs=pageqs[inpage];
	show1=qs.search(/_[X]_/);
		if(show1>-1){compulsory.style.display='inline'}
	show2=qs.search(/_[PNEWZ]_/);
		if(show2>-1){cvalidated.style.display='inline'}
	//double validation for new matrix
	show3=qs.search(/_[PNEWZ][PNEWZ]_/);
		if(show3>-1){cvalidated.style.display='inline'}
	show4=qs.search(/_[pnewz]_/);
		if(show4>-1){validated.style.display='inline'}
	show5=qs.search(/_[pnewz][pnewz]_/);
		if(show5>-1){validated.style.display='inline'}
}

function getNextPage(inpage,indir){
	var pCheckOK=false;
	while (pCheckOK==false){
		switch(indir){
			case '++':
				inpage++;
				break;
			case '--':
				inpage--;
				break;
			} //end switch
			if(jspagearray[inpage]=='-'){pCheckOK=true}
			else{
				pCheckOK=pcIsMet(inpage);
			}
	} //end while
	return inpage;
}


function get_timezoneoffset(){
	var today=new Date();
	document.getElementById('timezoneoffset').value=0+today.getTimezoneOffset();
}

function get_source(){
	jsq=''+document.location.search;
	if(jsq.length>0){document.getElementById('q000999').value=jsq.slice(1)};
}

function allRanked(that,limit){
	var c=document.getElementById(that);
	var sel=0;
	while(c.options[sel].text.slice(0,2)!='==') {
		sel++;

	}
	if (sel<limit){
		return false;
	}
	else{
		return true;
	}
}

function rankWithLimit(that,limit,direction){
	var OK2Go=false;
	var c=document.getElementById(that);
	var sel=c.selectedIndex;
	var isBar=(c.options[sel].text.slice(0,2)=='==');
	switch (allRanked(that,limit)){
		case true:
			switch(direction){
				case 'up':
					if(isBar==true){
						OK2Go=true;
					}
					else{
					if(sel!=(limit+1)){
						OK2Go=true;
						}
					}
					break;
				case 'down':
					if(isBar==false){
						OK2Go=true;
					}
					break;
			}
			break;
		case false:
			OK2Go=true;
			break;
	}
	if(OK2Go==true){
		switch(direction){
			case 'up':
				moveup(that);
				break;
			case 'down':
				movedown(that);
				break;
		}
	}
	else{
		alert(jlexicon['maxranked'].replace('[x]',limit));
		//alert('Maximum of '+limit+ ' items ranked - unrank an item first');
	}
}

function moveup(that) {
	thisobj=document.getElementById(that);
	var sel=thisobj.selectedIndex;
	if (sel<0){alert(jlexicon['noOptionSelected']);return;}
	if (sel>0) {
		var hold=thisobj.options[sel].value;
		var holdt=thisobj.options[sel].text;
		var hold2=thisobj.options[sel-1].value;
		var hold2t=thisobj.options[sel-1].text;
		thisobj.options[sel].value=hold2;
		thisobj.options[sel-1].value=hold;
		thisobj.options[sel].text=hold2t;
		thisobj.options[sel-1].text=holdt;
		thisobj.selectedIndex=sel-1;
		var harray=that.split('_');
		h=harray[0]+'_'+harray[1]+'_'+harray[2]+'_k';
		var s='';
		hobj=document.getElementById(h);
		for(i=0;i<thisobj.length;i++){
			s+=thisobj[i].value+',';
			}
		hobj.value=s;
		renumber(that)
		}
		else {
			alert(jlexicon['rankAtTop']);
		}

}

// ### DC 20061202 harray PARSING ADDED AS IT WAS ONLY WORKING FOR QFORMID WITH ONE DIGIT
function movedown(that) {
	thisobj=document.getElementById(that);
	var sel=thisobj.selectedIndex;
	if (sel<0){alert(jlexicon['noOptionSelected']);return;}
	if (sel<thisobj.options.length-1) {
		var hold=thisobj.options[sel].value;
		var hold2=thisobj.options[sel+1].value;
		var holdt=thisobj.options[sel].text;
		var hold2t=thisobj.options[sel+1].text;
		thisobj.options[sel].value=hold2;
		thisobj.options[sel+1].value=hold;
		thisobj.options[sel].text=hold2t;
		thisobj.options[sel+1].text=holdt;
		thisobj.selectedIndex=sel+1;
		var harray=that.split('_');
		h=harray[0]+'_'+harray[1]+'_'+harray[2]+'_k';
		var s='';
		hobj=document.getElementById(h);
		for(i=0;i<thisobj.length;i++){
			s+=thisobj[i].value+',';
			}
		hobj.value=s;
		renumber(that)
		}
			else alert(jlexicon['rankAtBottom']);
}

function renumber(that){
	thisobj=document.getElementById(that);
	hold=thisobj.selectedIndex;
	diff=false;
		for(var i=0;i<thisobj.options.length;i++){
			s=''+thisobj.options[i].text;
			//alert(s);
			v=thisobj[i].value;
			if (v=='-1'){diff=true;}
			else{
				if(s.substr(2,1)=='.'){s=s.slice(3)}
				if(diff==true){thisobj.options[i].text=s;
				}
				else {
				thisobj.options[i].text=formatnumber(i+1)+s;
				}
			}
		}
	thisobj.selectedIndex=hold;
}

function formatnumber(inint){
	strinint=''+inint
	switch (strinint.length){
		case 0:
			return inint+'.';
			break;
		case 1:
			return '_'+inint+'.';
			break;
		case 2:
			return inint+'.';
			break;
		default:
			return inint;
	}
}

function doDropDownMatrix(inq,invalue){
	//window.focus();
	// ### DC 20100108 DON'T SAVE VALUE IF SLIDER HAS RETURNED UNDEFINED
	if(invalue=='undefined'){
		return;
	}
	var qname=inq.name;
	qnamearray=qname.split('_');
	qhold=qnamearray[0]+'_'+qnamearray[1]+'_'+qnamearray[2]+'_'+qnamearray[3];
	var tObj=document.getElementById(qhold);
	var xrow=10+(qnamearray[4]*1);
	var ahold=tObj.value+'';
	var xfound;
	var xmode=inq.checked;
	if(ahold==''){xfound=-1}
	else {
		rxs=''+xrow + '_[0-9]{1,2},';
		rx=new RegExp(rxs,"gi");
		ahold=ahold.replace(rx,"")
		}
	ahold+=inq.value+',';
	tObj.value=ahold;
}


function doRadioMatrix(inq,invalue){
	//window.focus();
	var qname=inq.name;
	var qnamearray=qname.split('_');
	qhold=qnamearray[0]+'_'+qnamearray[1]+'_'+qnamearray[2]+'_'+qnamearray[3];
	var tObj=document.getElementById(qhold);
	var xrow=10+(qnamearray[4]*1);
	var ahold=tObj.value+'';
	var xfound;
	var xmode=inq.checked;
	if(ahold==''){xfound=-1}
	else {
		rxs=''+xrow + '_[0-9]{1,2},';
		rx=new RegExp(rxs,"gi");
		ahold=ahold.replace(rx,"")
		}
	ahold+=inq.value+',';
	tObj.value=ahold;
}

function doCheckboxMatrix(inq,invalue){
	var qname=inq.name;
	var qnamearray=qname.split('_');
	qhold=qnamearray[0]+'_'+qnamearray[1]+'_'+qnamearray[2]+'_'+qnamearray[3];
	var tObj=document.getElementById(qhold);
	var ahold=tObj.value+'';
	var xfound;
	var xmode=inq.checked;
	if(ahold==''){xfound=-1}
	else {xfound=ahold.search(''+invalue+',');}
	switch(xmode){
		case true:
			if(xfound==-1){tObj.value+=invalue+',';}
			break;
		case false:
			ahold=ahold.substr(0,xfound) + ahold.substr(xfound+5);
			re=/,,/g
			tObj.value=ahold.replace(re,',');
			break;
		}
}


function closeme(){
self.close();
}

function doPipe(invalue,insource,target){
if(target.length==0){return};
var textTargetArray=target.split('|');
for(i=0;i<textTargetArray.length-1;i++){
	intarget=textTargetArray[i];
	if (intarget.length>0){
		textTarget=document.getElementById('pipe_'+ intarget);
		if(jspipes[insource].length>0){
			textTarget.innerHTML=trimAll(jspipes[insource].split('|')[invalue]) + ' ';
			}
		else{
			textTarget.innerHTML=trimAll(invalue) + ' ';
		}
		// ### DC 20090324 FIXED JS SYNTAX ERROR HERE
		if((invalue+'').length>0){
			document.getElementById('div_q_'+intarget).style.display='inline';
			}
		else{
			document.getElementById('div_q_'+intarget).style.display='none';
			}
		} //end valid target
	} //end for
}

// ### DC 20080919 NEW FUNCTION ADDED AS PIPING FROM WRITE-IN WASN'T WORKING
function doPipeText(invalue,target){
	if(target.length==0){return};
	var textTargetArray=target.split('|');
	for(i=0;i<textTargetArray.length-1;i++){
		intarget=textTargetArray[i];
		if (intarget.length>0 && invalue.length>0 && invalue!=placeholdertext){
			textTarget=document.getElementById('pipe_'+ intarget);
			textTarget.innerHTML=invalue + ' ';
			document.getElementById('div_q_'+intarget).style.display='inline';
			}
		else{
			document.getElementById('div_q_'+intarget).style.display='none';
		}
	} //end for
}

function trimAll(instring){
return instring;
/*
	while (instring.substring(0,1) == ' '){
		instring = instring.substring(1, instring.length);
	}
	while (instring.substring(instring.length-1, instring.length) == ' '){
		instring = instring.substring(0,instring.length-1);
	}
	return instring;
*/
}

function maxcheckbox(inq,inchoice,inmax){
	var n=document.getElementsByName(inq);
	var checked=0;
	 for (var i=0;i<n.length;i++){
	 	if (n[i].checked==true){checked++};
	 }
	if(checked>inmax){
		// ### DC 20070402 CHANGED INCHOICE TO BE OBJECT NOT VALUE BECAUSE OF ROTATION
		try{
			inchoice.checked=false;
		}
		catch(e){
				n[inchoice].checked=false;
		}
		// FOR OTHER LANGUAGES WHERE MAX NUMBER ISN'T AT START OF STRING DO A REPLACE ON 3
		var al=jlexicon['maxCheckBoxes'];
		if(al.search('3')>-1){
				alert(al.replace('3',inmax));
			}
		else {
			alert(inmax + ' ' + al);
		}
	}
}

// ### DC 20060324 FUNCTIONS TO GET START AND END TIME FOR SURVEY COMPLETION AND SAVE DURATION IN FORM FIELD IN minutes
function getstarttime(){
	starttime=new Date;
}

function getduration(){
	endtime=new Date;
	duration=0+Math.ceil((endtime*1-starttime*1)/1000); //save duration in seconds
	try{
			document.getElementById('q100002').value=duration*1;
			}
		catch(e){
		}
}

function isquiz(){
	var hold=false;
	try{
			hold=document.getElementById('surveyquizstatus').value*1>0;
			}
		catch(e){
		}
	return hold;
}

function doTextMatrix(inq,invalue,inposition){
	var qname=inq.name;
	qnamearray=qname.split('_');
	qhold=qnamearray[0]+'_'+qnamearray[1]+'_'+qnamearray[2]+'_'+qnamearray[3];

	//if(qnamearray[2]=='nn'){invalue=invalue.replace(' ','');

	var tObj=document.getElementById(qhold);
	var tObjArray=tObj.value.split('¬');
	tObjArray[inposition]=invalue;
	tObj.value=tObjArray.join('¬');
}

function doConstantSumMatrix(inq,invalue,inposition){
	//alert(invalue + '='+inposition);
	var qname=inq.name;
	var qnamearray=qname.split('_');
	var cstotal=document.getElementById(qnamearray[0]+'_'+qnamearray[1]+'_c').value;
	if(cstotal.length==0 && invalue.length==0){ // COMPULSORY NOT CONSTANT SUM
		alert('no number');
		inq.value='0';
		inq.focus();
		return false;
	}
	else {
		if((isNaN(inq.value)==true || inq.value<0 || inq.value*1>cstotal*1 || invalue.length==0) && cstotal.length>0){
				alert('You must enter a number between 0 and '+ cstotal*1);
			inq.value='0';
			inq.focus();
			return false;
			}
		}

	qhold=qnamearray[0]+'_'+qnamearray[1]+'_CS';
	var cstarget=document.getElementById(qnamearray[0]+'_'+qnamearray[1]+'_'+qnamearray[2]+'_n')
	var tObj=document.getElementById(qhold);
	var tObjArray=tObj.value.split('¬');
	tObjArray[inposition]=invalue;
	tObj.value=tObjArray.join('¬');
	normalise(tObj,cstarget,cstotal)
}

function normalise(insource,intarget,intotal){
	//adjust all figures so they add up to constant sum
	var maxpos=0;
	var maxvalue=0;
	nInput=insource.value;
	nInputArray=nInput.split('¬');
	inOldTotal=eval(nInputArray.join('+'));
	var scaler=intotal/inOldTotal;
	for(i=0;i<nInputArray.length;i++){
		nInputArray[i]=Math.round(nInputArray[i]*scaler);
		//nInputArray[i]=(nInputArray[i]*scaler).toFixed(3-intotal.length).toFloat;
		//find highest value in array
		if (nInputArray[i]>maxvalue){
			maxpos=i;
			maxvalue=nInputArray[i];
			}
		}
	var interim=eval(nInputArray.join('+'));
	if(interim!=intotal){
		//adjust highest value to make exact total
		nInputArray[maxpos]=nInputArray[maxpos] + (intotal-interim);
		}
	intarget.value=nInputArray.join('¬');
}

function clearAnswers(inquestionid){
	switch(inquestionid.split('_')[3]){
		case 't':
			document.getElementById(inquestionid).value=placeholdertext;
			break;
		case 'd':
			document.getElementById(inquestionid).selectedIndex=0;
			break;
		case 'r':
		case 'c':
		case 'z':
		case 'n':
			var qoptions=document.getElementsByName(inquestionid);
			for(var i=0;i<qoptions.length;i++){
				qoptions[i].checked=false;
			}
			break;
		case 'x':
		case 'y':
			var rows=jsmatrix[inquestionid.split('_')[1]];
			for (row=0;row<rows+1;row++){
				var qoptions=document.getElementsByName(inquestionid+'_'+row);
				for(var i=0;i<qoptions.length;i++){
					qoptions[i].checked=false;
				}
			}
			break;
		case 'w':
			var rows=jsmatrix[inquestionid.split('_')[1]];
			for (row=0;row<rows+1;row++){
				var qoptions=document.getElementsByName(inquestionid+'_'+row);
				for(var i=0;i<qoptions.length;i++){
					qoptions[i].selectedIndex=0;
				}
			}
			break;
	}
}

function fixFormLabels(){
	var labels;
	// enable for Safari
	if(navigator.userAgent.indexOf("Safari")> 0){
		labels = document.getElementsByTagName("label");
		for(i=0; i<labels.length; i++){
			labels[i].onclick = function(){
				var target = document.getElementById(this.getAttribute('for'));
				// Checkboxes or radio button labels
				switch(target.type){
					case 'checkbox':
						target.checked = (target.checked==false)?true:false;
						break;
					case 'radio':
						target.click();
						break;
				}
			}
		}
	}
}

function xdo2(intarget){
	var counter=0;
	//jconditionalstarget['q_1_x_c']=new Array('3','4','5','11','6','7','8','9','10','2');
	//jconditionalsvalue['q_1_x_c']=new Array('0','1','2','8','3','4','5','6','7','8' );

	var args=xdo2.arguments;
	//if (args[1].length==0){return;}
	var thisname=args[0];
	var thisbuttonarray=document.getElementsByName(thisname);
	var hold;

	for(var t=0;t<jconditionalstarget[thisname].length;t++){
		// for each target
		hold='-';
		// find control values
		var controlarray=jconditionalsvalue[thisname][t].split('|');
		for(var c=0;c<controlarray.length;c++){
			//for each value
			onebutton=thisbuttonarray[controlarray[c]];
			//if checked then set hold=+ else hold=-
			if(onebutton.checked==true){
				hold='+';
			}
		}
		var target=document.getElementById('div_q_'+jconditionalstarget[thisname][t]);
		if(hold=='+'){
			target.style.display='inline';
			}
			else{
				target.style.display='none';
				//clear answers in targets
				}
		}
}

// ### DC 20080227 ADDED CALL FOR POPUPS FOR RULES ETC SO BUTTONS CAN DO SELF.CLOSE()
function openwindow(inURL){
	//var pu=window.open(inURL,'surveypopup','width=800,height=600,scrollbars=1,resizable=1,toolbar=1,menubar=1')
	var pu=window.open(inURL)
}

function checkMacIE(){
    var n = navigator.userAgent.toLowerCase();
    var mac = n.indexOf('mac') >-1;
    var ms = n.indexOf('msie')>-1;
    if(mac && ms){
     	isMacIE=true;
    	document.location.href='/survey_templates/iemac.asp';
     }
    else{
    	isMacIE=false;
    }
}

function showHideSlider(id,bool){
	id=id.split('^')[1];
	idArray=id.split('_');
	target=document.getElementById(idArray[0]+'_'+idArray[1]+'_'+idArray[2]+'_'+idArray[3]);
	switch (bool){
		case true:
			var row=idArray[4]*1+10;
			answerArray=target.value.split(',');
			for (var i=0;i<answerArray.length;i++){
				if(answerArray[i].length>0 && answerArray[i].split('_')[0]==row){
					sliderholdvalue[id]=answerArray[i];
					answerArray[i]='';
				}
			}
			target.value=answerArray.join(',').replace(',,',',');
			document.getElementById('fd-slider-handle-'+id).style.backgroundImage='url(/images/pad1x1.gif)';
			document.getElementById(id).disabled=true;
			//fdSliderController.disableSlider(id);
			break;
		case false:
			document.getElementById('fd-slider-handle-'+id).style.background='transparent url(/survey_templates/slider/slidergrey.gif) no-repeat 0px 0px';
			document.getElementById(id).disabled=false;
			//fdSliderController.enableSlider(id);
			target.value+=sliderholdvalue[id]+','
			break;
	}
	eval('doAgain_'+id+'(\''+id+'\')')
}

function markError(incontrol,bool){
	var pink="#ffc1c1";
	var white='#ffffff';
	switch (bool){
		case true:
			incontrol.style.backgroundColor=pink;
			break;
		case false:
			incontrol.style.backgroundColor=white;
			break;
	}
}

function getRandomIntUnder(incount){
	return Math.floor(Math.random()*incount);
}

function setRandomAnswer(){
	// gets number of radio buttons and then randomly selects one
	var args=setRandomAnswer.arguments;
	if(args.length==0){
		return;
	}
	// loop through numbers passed to function
	for(var a=0;a<args.length;a++){
		// inq is fID of a $$ question eg 1
		inq=args[a];
		// optionCount=how many options available in control question
			var optionCount=document.getElementsByName('q_'+inq+'_x_r').length;

		// get random option to select
			var ret=getRandomIntUnder(optionCount);

		// check random option in control question
			document.getElementById('q_'+inq+'_x_i_'+ret).checked=true;
		// hide control question
			document.getElementById('div_q_'+inq).style.display='none';
	}
}

function matrixNOTA(incontrol){
 	//alert(incontrol.id + '='+ incontrol.type);
 	var rowname=incontrol.name;
 	var controlArray=document.getElementsByName(rowname);
 	var controlCount=controlArray.length;
	var myIndexArray=incontrol.id.split('_');
	var row=myIndexArray[3];
	var target=document.getElementById(myIndexArray[0]+'_'+myIndexArray[1]+'_'+myIndexArray[2]+'_y');
	var v=target.value;
	if(incontrol.type=='radio'){
		//alert('clear: ' +v);
		rxs=''+row + '_[0-9]{1,2},';
		rx=new RegExp(rxs,"gi");
		v=v.replace(rx,"")
		target.value=v+row+'_'+(controlCount-1)+',';
		for (c=0;c<(controlCount-1);c++){
			document.getElementById(myIndexArray[0]+'_'+myIndexArray[1]+'_'+myIndexArray[2]+'_' + row + '_'+c).checked=false;
		}
	}
	else
	{
		var myIndex2Array=myIndexArray;
		myIndex2Array[4]=(controlCount-1)
		var newIndex=myIndex2Array.join('_');
		document.getElementById(newIndex).checked=false;
		//alert(row+'_'+(controlCount-1)+',');
		rxs=row+'_'+(controlCount-1)+',';
		rx=new RegExp(rxs,"gi");
		v=v.replace(rx,"")
		target.value=v;

	}

 }