function obj(i) {return document.getElementById(i)}

function hideq(q,s,i) {
	if(i && !q){q=i.getAttributeNode('sl').nodeValue}
	if(i && !s){
		var a=document.getElementsByName(i.name);
		for(var k=0;k<a.length;k++){
			if(a[k].checked && a[k].getAttributeNode('sl').nodeValue) {
				var b=(a[k].getAttributeNode('sl').nodeValue+'').split(',');
				for(var x=0;x<b.length;x++){
					if(b[x]!='' && (','+q+',').indexOf(','+b[x]+',')>-1){
						s=true; x=999; k=999
					}
				}
			}
		}
	}
	var a=(q+'').split(',');
	for(var k=0;k<a.length-1;k++){
		obj('q_mque-'+a[k]).style.display=s?'block':'none'
	}
}

function filterq(q,i,ft) {
	if(i && !q){q=i.getAttributeNode('fl').nodeValue} var qa;
	if(!q) {
		var x=(ft=='c' || ft=='r'?document.getElementsByName(i.name):i.options);
		for(var k=0;k<x.length;k++){if(aNode(x[k],'fl')){qa=aNode(x[k],'fl')}}
	} else {qa=(q+',').split(',')[0]}

	if(ft=='c'){
		var a=document.getElementsByName(i.name); q='';
		for(var k=0;k<a.length;k++){if(a[k].checked) {q+=(!q?'':',')+aNode(a[k],'fl')}}
	}

	if(qa) {
		oi=document.getElementById('sopt'+qa); if(!oi){oi=findSel(qa)}
		if(oi) {
			if(oi.tagName=='SELECT') {
				if(!oi.hsel) {
					var ns=oi.cloneNode(true); ns.style.display='none'; ns.name='hs-'+oi.name; oi.hsel=document.body.appendChild(ns);
				} else {var ns=oi.hsel}
				while(oi.options.length>1){var c=oi.options[1]; oi.removeChild(c)}
				for(var z=0;z<ns.options.length;z++) {
					var o=ns.options[z];
					if((','+q+',').indexOf(','+o.value+',')>-1){
						var nop=o.cloneNode(true);
						oi.appendChild(nop);
					}
				}
			} else {
				oi=(oi.tagName=='td'?oi:oi.childNodes[0]).childNodes[0];
				var qi=document.getElementById(oi.name.replace(/q_f/i,'q_m'));
				for(var z=0;z<2;z++){
					var r=qi.getElementsByTagName(z==0?'TD':'TR');
					for(var y=0;y<r.length;y++){
						if(r[y].id.substr(0,4)=='sopt'){
							r[y].style.display=((','+q+',').indexOf(','+r[y].id.substr(4)+',')==-1?'none':'block');
							checkCol(r[y]);
						}
					}
				}
			}
		}
	}
}

function selChange(i) {
	var o=i.options[i.selectedIndex];
	var v=o.getAttributeNode('hv'); if(v){eval(v.nodeValue)}
	var hasF=0; for(var k=0;k<i.options.length;k++){if(aNode(i.options[k],'fv')!=''){hasF=1; k=999}}
	if(hasF){filterq(aNode(o,'fv'),i)}
}

function aNode(i,n) {return (!i.getAttributeNode(n)?'':i.getAttributeNode(n).nodeValue)}

function findSel(v) {
	var oa=document.getElementsByTagName('SELECT');
	for(var k=0;k<oa.length;k++) {	
		for(var z=0;z<oa[k].options.length;z++) {
			if(oa[k].options[z].value==v){
				if(oa[k].name.substr(0,6)=='hs-q_f') {
					return document.getElementsByName(oa[k].name.substr(3))[0];
				} else {
					return oa[k];
				}
			}
		}
	}
	return false;
}

function checkCol(i) {
	var tb=i.parentNode; var c=0;
	for(var k=0;k<tb.childNodes.length;k++) {
		if(tb.childNodes[k].nodeType==1){if(gStyle(tb.childNodes[k]).display!='none'){c=1; k=999}}
	}
	tb.parentNode.parentNode.style.display=(!c?'none':'');
}

function gStyle(i) {return (!i.currentStyle?i.style:i.currentStyle)}

function testq() {
	var a=document.getElementsByTagName('DIV'); var msg='';
	for(var k=a.length-1;k>=0;k--) {
		if(a[k].m=='1' && gStyle(a[k]).display!='none' && (a[k].className=='q_main q_r2' || a[k].className=='q_main' || a[k].className=='q_main_c')) {
			var fid=a[k].id.replace(/^q_m/,''); var i; var cni=a[k].childNodes[(a[k].className=='q_main_c'?1:0)]; cni.className=(cni.className+'').replace(/[\s]*q_errp/gi,'');
			var lobj=obj('q_l'+fid);
			var l=lobj.childNodes[1].innerHTML;
			switch(true) {
				case (a[k].t=='text'): i=obj('q_f'+fid); if(i.value=='') {msg=l}; break;
				case (a[k].t=='textarea'): i=obj('q_f'+fid); if(i.childNodes.length==0) {msg=l}; break;
				case (a[k].t=='droplist'): i=obj('q_f'+fid); if(i.options(i.selectedIndex).value=='') {msg=l}; break;
				case (a[k].t=='radio' || a[k].t=='checkbox'):
					var b=obj('q_form').elements('q_f'+fid); var isf=false;
					for(var z=0;z<b.length;z++) {if(b[z].checked) {isf=true;z=b.length}}
					if(!isf) {msg=l}
					break;
				case (a[k].t=='matrix' || a[k].t=='matrix_radio' || a[k].t=='matrix_droplist' || a[k].t=='matrix_checkbox'):
					var s=a[k].getElementsByTagName('SELECT');
					if(s){if(s.length){
						for(var z=s.length-1;z>=0;z--) {
							if(s[z].value==''){
								var tr=s[z].parentNode.parentNode;
								msg=tr.childNodes[0].innerHTML+':\n'+tr.parentNode.childNodes[0].childNodes[s[z].parentNode.cellIndex].childNodes[0].innerHTML;
							}
						}
					}}
					var s=a[k].getElementsByTagName('INPUT');
					if(s){if(s.length){
						for(var z=s.length-1;z>=0;z--) {
							var tr=s[z].parentNode.parentNode;
							var tmsgA=tr.childNodes[0].innerHTML;
							var tmsgB=tr.parentNode.childNodes[0].childNodes[s[z].parentNode.cellIndex].childNodes[0].innerHTML;
							switch(true) {
								case (s[z].type=='text'): if(s[z].value=='') {msg=tmsgA+':\n'+tmsgB}; break;
								case (s[z].type=='radio' || s[z].type=='checkbox'):
									var b=obj('q_form').elements(s[z].name); var isf=false;
									for(var y=0;y<b.length;y++) {if(b[y].checked) {isf=true;y=b.length}}
									if(!isf) {msg=tmsgA}
									break;
							}
						}
					}}
					break;
			}
		}
		if(msg!='') {
			alert("Please answer the question:\n'"+(msg).replace(/[<][^<>]+[>]/gi,'')+"'");
			try {
				var m=obj('q_m'+fid); var cm=m.childNodes[(m.className=='q_main_c'?1:0)];
				m.scrollIntoView(true)
				cm.className=cm.className+' q_errp';
			} catch(e) {}
			return false
		}
	}
	return true;
}

function doCh(i,r) {
	var o=i.parentNode.previousSibling.childNodes[0]; 
	if(o.fireEvent) {
		o.checked=(!r?true:!o.checked);
		o.fireEvent('onclick');
	} else {
		if(o.dispatchEvent) {
			var oEvent = document.createEvent("MouseEvents");
			oEvent.initMouseEvent("click",true,true,window,1,1,1,1,1,false,false,false,false,0,o);
			o.dispatchEvent(oEvent);
		}
	}
}

function doExcl(t) {
	var i=event.srcElement;
	var a=document.all(i.name);
	if(i.checked) {
		for(var k=0;k<a.length;k++) {
			if(a[k].excl) {
				if(!t) {a[k].checked=false; a[k].fireEvent("onClick")}
			} else {
				if(t) {a[k].checked=false; a[k].fireEvent("onClick")}
			}
		}
	}
}

function testKey(i) {
	//try {
		var allow=true; var k = new getKey(event);
		switch(k.keytype) {
			case 'paste': try { if(!testValue(clipboardData.getData('Text'),i.f)) {allow=false} } catch(e) {allow=false} break;
			case 'function': break;
			default:
				switch(i.f) {
					case 'integer': if(k.keytype!='numeric') {allow=false} break;
					case 'decimal': if(k.keytype!='numeric' && k.keytype!='npunct') {allow=false} break;
					case 'date': if(k.keytype!='numeric' && k.keytype!='dpunct') {allow=false} break;
					case 'aupost': if(k.keytype!='numeric') {allow=false} break;
					default: break;
				}
				break;
		}
		if(i.max>0) {if(k.keytype!='function' && i.value.length>=i.max) {allow=false}}
		if(!allow) {event.keyCode=0; event.returnValue=false;}
	//} catch(e) {}
}

function testValue(v,f) {
	var re='';
	switch(f) {
		case 'numeric': re=/[^\d]/; break;
		case 'decimal': re=/[^\d\.\-]/; break;
		case 'date': re=/[^\d\/\-\\]/; break;
	}
	if(re!='') {if(re.test(v)) {return false}}
	return true;
}

function getKey(e) {
	var k=e.keyCode; var s=event.shiftKey; var c=event.ctrlKey;
	switch(true) {
		case (c && k==86): this.keytype='paste'; break;
		case (!s && !c && ((k>47 && k<58) || (k>95 && k<106))): this.keytype='numeric'; break;
		case (!c && ((k>64 && k<91) || k==32)): this.keytype='alpha'; break;
		case (!s && !c && (k==191 || k==220 || k==111 || k==189)): this.keytype='dpunct'; break;
		case (!s && !c && (k==190 || k==189 || k==109 || k==110)): this.keytype='npunct'; break;
		case (!c && ((k>185 && k<223) || (k>105 && k<112))): this.keytype='punct'; break;
		case (true): this.keytype='function'; break;
	}
}

function doprint(s) {
	try {
		if(s) {ClearHeader()} else {ResetHeader()}
	} catch(e) {}
//	dolist(document.getElementsByTagName('DIV'),s,'block');
//	dolist(document.getElementsByTagName('SPAN'),s,'inline');
}

function dolist(a,s,d) {
	for(var k=0;k<a.length;k++) {
		if(a[k].className=='q_main_c' || a[k].className=='q_if' || a[k].className=='q_num') {
			if(s) {
				a[k].oldstyle=a[k].style.display; a[k].style.display=d;
			} else {
				a[k].style.display=a[k].oldstyle; a[k].oldstyle='';
			}
		}
	}
}

var glb_vfld;      // retain vfld for timer thread
function setFocusDelayed()
{
  glb_vfld.focus()
}

function setfocus(i)
{
  glb_vfld = i;
  setTimeout( 'setFocusDelayed()', 100);
}
function fq(i){
var regexp = new Array();
if (i.f=='custom'){
regexp['custom']=i.fc;
regexp['customerror']='Invalid Format';
};
if (i.f=='text')return true;

//Array of reg expressions followed by the error msg.
regexp['email']=/^[^@]+@[^@.]+\.[^@]*\w\w$/;regexp['emailerror']="Invalid email address";
regexp['decimal']=/^-?\d*(\.\d+)?$/;regexp['decimalerror']="Invalid Decimal number";
regexp['integer']=/^(\+|-)?\d+$/;regexp['integerError']="invalid Integer";
regexp['social']=/^(?!000)([0-6]\d{2}|7([0-6]\d|7[012]))([ -]?)(?!00)\d\d\3(?!0000)\d{4}$/;regexp['socialerror']="Invalid Social Security Number";
regexp['uscaphone']=/^[01]?[- .]?\(?[2-9]\d{2}\)?[- .]?\d{3}[- .]?\d{4}$/; regexp['uscaphoneError']="Invalid phone number";
regexp['uscazip']=/^((\d{5}-\d{4})|(\d{5})|([abceghjklmnprstvxy]\d[a-z]\s?\d[a-z]\d))$/i
regexp['uscaziperror']="Invalid Zip Code";
regexp['auphone']=/^([\(]?0[2378][\)]?[ -]?[\d]{4}[ -]?[\d]{4}|(04[\d]{2}|1[893]00)[ -]?[\d]{3}[ -]?[\d]{3}|13[ -]?[\d]{2}[ -]?[\d]{2})$/ 
regexp['auphoneerror']="Invalid Phone number";
regexp['usdate']=/^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/
regexp['usdateerror']="Invalid Date. Please enter a date in MM/DD/YYYY format.";
regexp['audate']=/^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/
regexp['audateerror']="Invalid Date. Please enter a date in DD/MM/YYYY format.";
regexp['percent']=/^([1-9]|[1-9]\d|100)$/;regexp['percenterror']="Invalid percentage";
regexp['money']=/^[$]?-?\d*(\.\d+)?$/;regexp['moneyerror']="Invalid currency";
regexp['aupost']=/^\d{4}$/; regexp['auposterror']="Invalid post code";
regexp['intphone']=/((\(\d{3,4}\)|\d{3,4}-)\d{4,9}(-\d{1,5}|\d{0}))|(\d{4,12})/;regexp['intphoneerror']="Invalid phone number";
regexp['abn']=/^([\d]{2}[ ]?)?[\d]{3}[ ]?[\d]{3}[ ]?[\d]{3}$/; regexp['abnerror']="Invalid ABN / ACN";


var error=regexp[i.f+'error'];

  var tfld = i.value;tfld = tfld.replace(/^\s+|\s+$/g, '')

  if (!regexp[i.f].test(tfld)) {
    alert(error);
	setfocus(i);
    return false;}
  return true;
};



function lgth(i)
{
var val; val=i.value.length;
if(i.f=='integer' || i.f=='decimal')val=parseFloat(i.value);
if ((i.min > 0 || i.max > 0) && val>0){
	if ((val < i.min) || (val > i.max))
	{
	mesg = "You have entered " + val + " character(s)\n";
	mesg += "Valid entries are between " + i.min + " and "+i.max+" characters.\n";
	mesg += "Please verify your input and submit again.";
	if(i.f=='integer' || i.f=='decimal')val=parseFloat(i.value);
	mesg = "Please enter a number between " + i.min +" and " + i.max;
	alert(mesg);
	
	i.focus();
	return (false);
	}
}
return (true);
}

function scrollChange(id,auto) {
	if(auto) {
		var i=id; id=i.id.replace(/sld[-]/,''); var s=1000-i.childNodes(0).scrollLeft;
		v = Math.round(i.max-(s/1000*(i.max-i.min)));
	} else {
		var i = document.all('sld-'+id);
		v = document.all('q_f'+id).value; if(v=='') {v=i.min}
		var z=i.childNodes(0).childNodes(0).childNodes(0);
		z.style.marginLeft=1000*(v/(i.max-i.min))+'px'; z.id='z'+id; setTimeout("obj('"+z.id+"').scrollIntoView(true)",1);
	}
	i.nextSibling.childNodes(0).innerText=v;
	document.all('q_f'+id).value=v;
}

function allocate(i,q) {
	var a=i.name.split('_'); var v1=0; var v2=0; var ns=';'; var wrong=false;
	var alloc='alloc'+a[1].substring(1);
	var b=document.all('q_'+a[1].replace(/^f/,'m')).getElementsByTagName('INPUT');
	for(var k=0;k<b.length;k++) {
		if(b[k].value!='') {
			var x=parseFloat(b[k].value); if(x<0) {x=0}
			switch(q) {
				case 'rank': ns+=b[k].value+';'; if(x>v1) {v1=x} break;
				default: v1+=(!x?0:x); if(!x) {b[k].value=0} break;
			}
		}
	}
	switch(q) {
		case 'rank': v1++; v2=''; for(var k=1;k<v1;k++) {if(ns.indexOf(';'+k+';')==-1) {v2+=(v2==''?'':', ')+k}} wrong=(v2!=''); break;
		default: v2=parseFloat(document.all(alloc+'a').v)-v1; wrong=(v1<0 || v2<0); break;
	}
	document.all(alloc+'a').innerText=v1; document.all(alloc+'b').innerText=v2;
	document.all(alloc+'a').parentNode.style.color=(wrong?'red':'');
}

function oc(i,r) {var o=i.parentNode.previousSibling.childNodes[0]; o.checked=(!r?true:!o.checked)}
function rc(i) {oc(i,true)}

function fillAll(clr) {
	var a=document.getElementsByTagName('DIV'); var msg='';
	for(var k=a.length-1;k>=0;k--) {
		if(a[k].className=='q_main q_r2' || a[k].className=='q_main' || a[k].className=='q_child') {
			var fid=a[k].id.replace(/^q_m/,''); var i;
			var lobj=obj('q_l'+fid);
			if(clr) {
				switch(true) {
					case (a[k].t=='text'): i=obj('q_f'+fid); i.value==''; break;
					case (a[k].t=='textarea'): i=obj('q_f'+fid); i.nodeValue=''; break;
					case (a[k].t=='droplist'): i=obj('q_f'+fid); i.selectedIndex=0; break;
					case (a[k].t=='radio' || a[k].t=='checkbox'): var b=obj('q_form').elements('q_f'+fid); for(var z=0;z<b.length;z++) {b[z].checked=false} break;
				}
			} else {
				switch(true) {
					case (a[k].t=='text'): i=obj('q_f'+fid); if(i.value=='') {i.value=(i.f=='integer'?'20':'Fill Value')}; break;
					case (a[k].t=='textarea'): i=obj('q_f'+fid); if(i.nodeValue=='') {i.nodeValue='Fill Value'}; break;
					case (a[k].t=='droplist'): i=obj('q_f'+fid); if(i.options(i.selectedIndex).value=='') {i.selectedIndex=1}; break;
					case (a[k].t=='radio' || a[k].t=='checkbox'):
						var b=obj('q_form').elements('q_f'+fid); var isf=false;
						for(var z=0;z<b.length;z++) {if(b[z].checked) {isf=true;z=b.length}}
						if(!isf) {var m=parseInt(b.length/2); b[m].checked=true}
						break;
				}
			}
		}
	}
}