var d = document.datainput;
var submitting = 0;

var UTF8 = {
 	// public method for url encoding
	encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 		for (var n = 0; n < string.length; n++) {
 			var c = string.charCodeAt(n);
 			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 		}
 		return utftext;
	},
 
	// public method for url decoding
	decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;
 		while ( i < utftext.length ) {
 			c = utftext.charCodeAt(i);
 			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
 		}
 		return string;
	}
 }


function dodebug(txt) {
	var o = document.getElementById('debugtxt');
	if (!o)
		return;
	document.getElementById('debugtxt').value += txt + '\n';
}

function FireEvent(eventName, eventPar) {
	//dodebug('FireEvent:' + eventName + ':' + eventPar);
	switch (eventName) {
		case 'toggle' : Toggle(eventPar); break;
		case 'keypress': KeyPress(eventPar); Changed(eventPar); break; // NOTE: THE CHANGED EVENT IS ADDED AND CURRENTLY IN BETA!!!!
		case 'change' : Changed(eventPar); break;
		case 'click' : Changed(eventPar); break;
		case 'blur' : Blur(eventPar); break;
	}
	if (typeof systemHooks == 'function')
		systemHooks(eventName, eventPar);
	FireUserEvent(eventName, eventPar); // Provide a hook for user-script
}

function OptionChanged(eventPar) {
	//dodebug('OptionChanged:' + eventPar);
	var o = eval("d." + eventPar);
	if (!o)
		o = eval("d." + eventPar.substring(0,eventPar.indexOf('[')));
	if (o && o.checked) {
		var n = parseInt(o.value);
		SwapOptionText("E" + o.name + n);
		// all other options get de-selected so need a change-event:
		var pos = eventPar.indexOf('A');
		var base = eventPar.substring(0, pos);
		var val = parseInt(eventPar.substr(pos + 1));
		var len = eval("d." + base + "A").length;
		for (var cnt=0; cnt<len; cnt++) {
			var o2 = eval("d." + base + "A[" + cnt + "]");
			if (o2 == o)
				continue;
			FireEvent('change', base + "A[" + cnt + "]");
		}
	}
}

function SwapCheckboxText(eventPar) {
	//dodebug('SwapCheckboxText:' + eventPar);
	if (eval("d." + eventPar).value != '') {
		var o = eval("d." + eventPar.substr(1));
		if (!o.checked)
		FireEvent('toggle', o.name);
	}
}

function CheckboxChanged(eventPar) {
	//dodebug('CheckboxChanged:' + eventPar);
	if (!eval('d.' + eventPar).checked) { 
		var o = eval('d.E' + eventPar);
		if (o) {
			o.value = '';
		}
		return;
	}
	var pos = eventPar.indexOf('A');
	var base = eventPar.substr(1, pos - 1);
	try {
		c = new String(eval('Q' + base + 'Exclusives'));
	}   
	catch(e) { return; }
	if (c) {
		a = c.split(";");
		for (var t=1; t<a.length; t++) {
			o = eval('d.' + a[t]);
			if (o.checked && (o.name != eventPar))
				FireEvent('toggle', o.name);
		}
	}
}

function Toggle(eventPar) {
	dodebug('Toggle:' + eventPar);
	var o = eval("d." + eventPar);
	if (!o) // single response has only one option!
		o = eval("d." + eventPar.substring(0,eventPar.indexOf('[')));
	if (o) {
		dodebug('click:' + eventPar);
		o.click() 
	}
}

function getRadioValue(obj) {
	if (typeof obj == 'string') {
		var o = eval('d.' + obj.split('[')[0]) // assume name of one of the clickers
		if (o) {
			obj = o
		} else {
			var o = document.getElementById(obj + '_1'); // assume name of uservariable
			if (!o)
				return -1;
			obj = eval('d.' + o.name);
		}
	}
	if (!obj[0]) return(obj.checked);
	for (var i=0; i < obj.length; i++)
	if (obj[i].checked) 
		return parseInt(obj[i].value);
	return 0;
}

function setRadioValue(obj, val) {
	for (var i=0; i < obj.length; i++) {
		if (val == (i + 1)) {
			if (obj[i].checked)
				return;
			if (obj[i])
				obj[i].click();
		} else
			obj[i].checked = false;
	} 
}

function SwapOptionText(eventPar) {
	//dodebug('SwapOptionText:' + eventPar);
	o = eval("d.H" + eventPar);
	if (o)
		o.value = eval("d." + eventPar).value;
	var pos = eventPar.indexOf('A');
	var base = eventPar.substring(1, pos);
	var val = parseInt(eventPar.substr(pos + 1));
	var len = eval("d." + base + "A").length;
	if (o && o.value != '') {
		for (var cnt=0; cnt<=len; cnt++) {
			o = eval("d." + base + "A[" + cnt + "]");
			if (!o)	break;
			if (o.value == val) {
				o.click();
				break;
			}
		}
	}
	for (var cnt=0; cnt<eval("d." + base + "A.length"); cnt++) {
		var o = eval("d." + base + "A[" + cnt + "]");
		var cur = o.value;
		if (cur != val) {
			var o2 = eval("d.E" + base + "A"  + cur);
			if (o2)
				o2.value = "";
		}
	}
}

function Swap(eventPar) {
	//dodebug('Swap:' + eventPar);
	var o = eval("d.H" + eventPar);
	o.value = eval("d." + eventPar).value;
	var p = eval('d.' + eventPar + 'Empty');
	if (!p)
		return;
	if (!p.length) {
		if (o.value != '' && p.checked)
			p.click();
	} else {
		for (var cnt = 0; cnt < p.length; cnt++) {
			var o = p[cnt];
			if (o.checked) {
				o.checked = false;
				o.onclick()?o.onclick():'';
			}
		}
	}
}

function ClearTxt(eventPar) {
	//dodebug('ClearTxt:' + eventPar);
	var o = eval('d.H' + eventPar.substr(0, eventPar.indexOf('Empty')));
	var c = eval('d.' + eventPar);
	o.value = eval('d.' + eventPar + '.checked')?c.value:'';
	if (c.checked)
		eval('d.' + eventPar.substr(0, eventPar.indexOf('Empty'))).value = '';
}


function HitExclusive(eventPar) {
	//dodebug('HitExclusive:' + eventPar);
	if (!eval('d.' + eventPar).checked)
		return;
	var pos = eventPar.indexOf('A');
	var base = eventPar.substr(0, pos);
	var max = parseInt(eval(base + 'Max'));
	for (var cnt=1; cnt<=max; cnt++) {
		var o = eval('d.' + base + 'A' + cnt);
		if (o && o.name != eventPar && o.checked)
				FireEvent('toggle', o.name);
	}
}

function keyDown(eventPar) { 
	FireEvent('keypress', eventPar);
} 

function preloadImages() {
	var d=document; if(d.images){ if(!d.p) d.p=new Array();
	var i,j=d.p.length,a=preloadImages.arguments; for(var i=0; i<a.length; i++)
	if (a[i].indexOf("#")!=0){ d.p[j]=new Image; d.p[j++].src=a[i];}}
}

function validateCheckboxes(name, nr) {
	for (var i=1; i <= nr; i++) {
		if (eval('d.' + name + i) && eval('d.' + name + i).checked)
			return true;
	}
	return false;
}

function countCheckboxes(name, nr, mincnt, maxcnt) {
	var cnt = 0;
	for (var i=1; i <= nr; i++)
		if (eval('d.' + name + i) && eval('d.' + name + i).checked) {
			if(eval('d.' + name + i).value == 99999997) return true;
			cnt++;
		}
	if (mincnt > 0 && cnt < mincnt) { return false; }
	if (maxcnt > 0 && cnt > maxcnt) { return false; }
	return true;
}

var propagating = false;

function PropagateDontKnow(eventPar) {
	if (!eval('d.' + eventPar).checked)
		return;
	if (propagating) {
		return;
	}
	propagating = true;
	var pos = eventPar.indexOf('S');
	var base = eventPar.substr(1, pos - 1);
	c = new String(eval('Q' + base + 'Propagate'));
	a = c.split(";");
	var llGo = false;
	for (var t=1; t<a.length; t++) {
		if (llGo) {
			o = eval('d.' + a[t]);
			if (!o.checked) o.click(); //FireEvent('toggle', o.name);
		}
		if (eventPar == a[t]) {
			llGo = true;
		}
	}
	propagating = false;
}

if (document.layers) { 
//	document.captureEvents(Event.KEYDOWN); 
}

//document.onkeydown = keyDown;

function syncPic(eventPar, img1, img2, class1, class2) {
	//dodebug('syncPic:' + eventPar);
	var o = d[eventPar];
	var picID = (img1?'img':'clickText') + eventPar.replace('[', '').replace(']', '');
	var img = document.getElementById(picID);
	if (eventPar.indexOf('[') > 0) { // single response
		var base = eventPar.split('[')[0];
		var index = eventPar.split('[')[1].replace(']', '');
		var control = d[base][index];
	} else {
		var control = d[eventPar];
	}
	var theClassName = img.className.replace(class1, '').replace(class2, '');
	if (control.checked) {
		theClassName += ' ' + class2;
		if (img.className.toLowerCase() != theClassName.toLowerCase())
			img.className = theClassName;
		if (img1) {
			var src = window[picID + '_2'].src;
			if (img.src != src)
				img.src = src;
			img.blur();
		}
		var pos = eventPar.indexOf('A');
		var base = eventPar.substring(0, pos);
		var val = parseInt(eventPar.substr(pos + 1));
		if (!d[base + "A"]) // multiple response
			return;
		var len = d[base + "A"].length;
		for (var cnt=0; cnt<len; cnt++) {
			var o2 = d[base + "A[" + cnt + "]"];
			if (o2 == o)
				continue;
			FireEvent('change', base + "A[" + cnt + "]");
		}
	} else {
		theClassName += ' ' + class1;
		if (img.className.toLowerCase() != theClassName.toLowerCase())
			img.className = theClassName;
		if (img1) {
			var src = window[picID + '_1'].src;
			if (img.src != src)
				img.src = src;
		}
	}
}

function initPic(picID, img1, img2, activeImage) {
	var img = document.getElementById(picID);
	if (img1) {
		var varName1 = picID + '_1';
		window[varName1] = new Image();
		window[varName1].src = img1;
		var varName2 = picID + '_2';
		window[varName2] = new Image();
		window[varName2].src = img2;
		img.src = eval(activeImage=='1'?varName1:varName2).src;
	}
	img.style.display = 'block';
}

function getStyleVal(source_id, IEStyleName, CSSStyleName) {
	var elem = document.getElementById(source_id);
	if (elem.currentStyle) {
		result = elem.currentStyle[IEStyleName];
	} else if (window.getComputedStyle) {
		var compStyle = window.getComputedStyle(elem, "");
		result = compStyle.getPropertyValue(CSSStyleName);
	} else {
		result = "";
	}
	return result;
}

function getVal(id) {
	value = parseFloat(document.getElementById(id).value.replace(',', '.'));
	if (isNaN(value))
		return 0;
	return value;
}

function setVal(id, value) {
	o = document.getElementById(id);
	value = value.toString(); // else numeric 0 equals ''
	if (o.value != value) {
		o.value = value;
		if (o.onchange)
			o.onchange();
	}
}

function setTxt(id, txt) {
	o = document.getElementById(id);
	txt = txt.toString();
	if (o.value != txt) {
		o.value = txt;
		if (o.onchange)
			o.onchange();
	}
}

function runOnloadHooks() {
	if (!window.onloadHooks)
		return;
	for (var cnt = 0; cnt < window.onloadHooks.length; cnt++) {
		if (window.onloadHooks[cnt]) {
			var func = window.onloadHooks[cnt];
			window.onloadHooks[cnt] = null;
			func();
		}
	}
}

function registerOnloadHook(func) {
	if (!window.onloadHooks) {
		window.onloadHooks = new Array();
		if (window.onload && (window.onload!=runOnloadHooks)) {
			registerOnloadHook(window.onload);
		}
	}
	window.onloadHooks[window.onloadHooks.length] = (typeof func == 'function')?func:new Function(func);
	window.onload = runOnloadHooks;
}

registerOnloadHook(firstTextFocus);

function firstTextFocus() {
	var n = 0;
	while ((n < d.elements.length) && (d.elements[n].type == 'hidden'))
		n++;
	if ((d.elements[n] && d.elements[n].type=="text") || (d.elements[n] && d.elements[n].type=="textarea"))
		if (d.elements[n].className == 'textarea' || d.elements[n].className == 'inputbox')
			try { // in case it's in an invisible container it can't get focus
				d.elements[n].focus();
			} catch(err) {
			}
}


