/*
Form functions
Copyright(c) 2003 Ylab, Utrecht, NL
Author: Yohan Creemers
version 1.3.sigchi
*/
var isOpera =(navigator.userAgent.indexOf('Opera') > -1);
var isNav =((!isOpera) &&(navigator.appName == 'Netscape'));
var isIE  =((!isOpera) &&(navigator.appName.indexOf('Explorer') > -1 ));

function toggleStudent(){
	var frm = document.formRegistration;
	if(!frm || !frm.studentYes){return;}
	var isStudent = frm.studentYes.checked;
	displayEl('rowFnc', !isStudent);
	togglePrice();
}

function togglePrice(){
	var frm = document.formRegistration;
	if(!frm){return;}
	var hasDiscount;
	var isStudent = frm.studentYes && frm.studentYes.checked;

	if(frm.discountcodeNo){
		hasDiscount = frm.discountcodeNo && !frm.discountcodeNo.checked;
	}else{
		hasDiscount = frm.discountcode && frm.discountcode.value && codes.in_array(MD5(frm.discountcode.value.toUpperCase()));
	}

	if(isStudent){
		var price =(hasDiscount) ? rates.studentdiscount : rates.student;
	}
	else{
		var price =(hasDiscount) ? rates.discount : rates.full;
	}

	document.getElementById('pricedisplay').innerHTML = toTwoDec(price);
	document.getElementById('tbPaid').style.display = price ? '' : 'none';
	document.getElementById('trPrice').style.display = price ? '' : 'none';
	if(document.getElementById('trPrice2')){
		document.getElementById('pricedisplay2').innerHTML = toTwoDec(price);
		document.getElementById('trPrice2').style.display = price ? '' : 'none';
	}
	frm.price.value = price;
}

function errormsg(errorcode, guiName, val){
	switch(curLang){
		case 'en':
			switch(errorcode){
				case 1: alert('The field \'' + guiName + '\' is required.'); break;
				case 2: alert('The email address is invalid.'); break;
				case 3: alert('The phone number is invalid.\\nEnter a ten digit phone number.'); break;
				default: alert('Undefined error code: ' + errorcode);
			}
			break;
		default:
			switch(errorcode){
				case 1: alert('Het veld \'' + guiName + '\' moet ingevuld zijn.'); break;
				case 2: alert('Het e-mailadres is onvolledig.'); break;
				case 3: alert('Het telefoonnummer is onvolledig.\nVul een tiencijferig telefoonnummer in.'); break;
				default: alert('Ongedefineerde foutcode: ' + errorcode);
			}
	 }
}

function testRegExp(field, re){
	return new RegExp(re).test(field.value);
}

function validateEmail(field){
	return !testRegExp(field, '[<>"\;\, ]') && testRegExp(field, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');
}

function isNotNull(field, guiName){
	//validates if a field contains a value
	//field: input element text|hidden
	//guiName: fieldname to communicate with user
	if((!field.value) ||(field.value == '')){
		errormsg(1, guiName);
		if(field.focus){field.focus();}
		return false;
	}
	return true;
}

function isChecked(field, guiName, f){
	var i;

	if(!field){
		return true;
	}
	if(field && field.length != undefined){
		for(i=0; i<field.length ; i++){
			if(field[i].checked){
				return true;
			}
		}
	}else if(field.checked){
		return true;
	}
	errormsg(1, guiName);
	return false;
}

function isEmail(field, guiName, f){
	//validates if a textbox contains a valid email address
	if(!field.value) return true;
	if(!validateEmail(field)){
		if(field.focus){field.focus();}
		errormsg(2, guiName);
		return false;
	}
	return true;
}

function validateForm(frm){
	if(!curLang){
		curLang = frm['language'].value;
	}
	if(!isNotNull(frm.email, curLang=='en' ? 'Email address' : 'E-mailadres')) return false;
	if(!isEmail  (frm.email, curLang=='en' ? 'Email address' : 'E-mailadres')) return false;
	if(!isNotNull(frm.firstname, curLang=='en' ? 'First name' : 'Voornaam')) return false;
	if(!isNotNull(frm.lastname, curLang=='en' ? 'Last name' : 'Achternaam')) return false;
	if(frm.price.value > 0 && frm.paymentmethod.length){
		if(!isChecked(frm.paymentmethod, curLang=='en' ? 'Payment method' : 'Betaalwijze')) return false;
	}
	if(frm.btnSubmit){
		frm.btnSubmit.disabled = true;
	}
	return true;
}

function displayEl(id, b){
	el = document.getElementById(id);
	if(!el){return;}
	el.style.display =(b) ? '' : 'none';
}

function toEuro(number){
	number = toTwoDec(number);
	return '&euro;&nbsp;' + number;
}

function toTwoDec(number){
	if(isNaN(number)){return '-,--';}
	number =(Math.round(100 * number));
	if(number < 10){number = '0,0' + number;}
	else if(number < 100){number = '0,' + number;}
	else{
		number = number.toString()
		var n = number.length;
		number = number.slice(0,n-2) + ',' + number.slice(n-2,n);
	}
	return number;
}

function displayName(){
	var frm = document.getElementById('formRegistration');
	var lines = new Array();
	if(frm.firstname.value && frm.lastname.value){
		lines.push(frm.firstname.value + ' ' + frm.infix.value + ' ' + frm.lastname.value);
	}
	if(frm.organisation.value){
		lines.push(frm.organisation.value);
	}
	document.getElementById('lblNme').innerHTML = lines.join('<br />');
}

function switchLanguage(newLang){
	var i, elementId;

	if(curLang == newLang){
		return;
	}
	for(var id in aStrings[newLang]){
		var obj = document.getElementById(id);
		if(obj){
			obj.innerHTML = aStrings[newLang][id];
		}
	}
	for(i=0; i<aStrings.length; i++){
		elementId = 'lang-' + aStrings[i];
		document.getElementById(elementId).style.color = newLang==aStrings[i] ? '#ccc' : '#000';
	}
	togglePrice();
	document.formRegistration['language'].value=newLang;
	curLang = newLang;
}

function initLang(frm){
	var i, elementId, el, newLang, f;

	for(i=0; i<aStrings.length; i++){
		newLang = aStrings[i];
		elementId = 'lang-' + newLang;
		f = 'switchLanguage("' + newLang + '")';
		if(el = document.getElementById(elementId)){
			el.onclick = new Function(f);
			el.style.cursor = 'pointer';
			el.style.color = newLang==curLang ? '#ccc' : '#000';
		}
	}
	if(frm){
		switchLanguage(frm['language'].value);
	}
}

function initPage(){
	var frm = document.getElementById('formRegistration');
	if(frm){
		frm.firstname.onchange = displayName;
		frm.infix.onchange = displayName;
		frm.lastname.onchange = displayName;
		frm.organisation.onchange = displayName;
		displayName();
		togglePrice();
		initLang(frm);
	}
}

addLoadFunction('initPage();');
