function obj(i) {return document.getElementById(i)}

function hideq(q,s,i) {
	if(i && !s){var a=document.all(i.name); for(var k=0;k<a.length;k++){if(a[k].checked && a[k].sl) {var b=a[k].sl.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 testq() {
	var a=document.getElementsByTagName('DIV'); var msg='';
	for(var k=a.length-1;k>=0;k--) {
		if(a[k].m=='1' && a[k].style.display!='none' && (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);
			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.nodeValue=='') {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,'')+"'"); return false}
	return true;
}

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][0-9]|3[01])([/])(0[13578]|10|12)([/])([1-2][0,9][0-9][0-9]))|(([0][1-9]|[12][0-9]|30)([/])(0[469]|11)([/])([1-2][0,9][0-9][0-9]))|((0[1-9]|1[0-9]|2[0-8])([/])(02)([/])([1-2][0,9][0-9][0-9]))|((29)(\.|-|\/)(02)([/])([02468][048]00))|((29)([/])(02)([/])([13579][26]00))|((29)([/])(02)([/])([0-9][0-9][0][48]))|((29)([/])(02)([/])([0-9][0-9][2468][048]))|((29)([/])(02)([/])([0-9][0-9][13579][26])))/
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;
				}
			}
		}
	}
}
