// form type names.
var tilaukset			= "tilaukset";
var osoitteenmuutokset	= "osoitteenmuutokset";
var peruutukset			= "peruutukset";

// class names for cross-referencing with css.
var kelpo = 'kelpo';
var kelvoton = 'kelvoton';

function disableSubmit() {
	document.getElementById('submit').disabled = true;
}
function enableSubmit() {
	document.getElementById('submit').disabled = false;
}
function trim(string) {
	if (typeof(string) != 'string')	{
		alert('string = ' + string);
		return string;
	}
	return string.replace(/^\s+|\s+$/g, '');
}
function validateKommenttiteksti() {
	// TODO.
	return true;
}
function validateKommentti() {
	if (validationOn()) {
		validatePerustiedot();
		validateKommenttiteksti();
	}
}
function anySetInPerustiedot(tyyppi) {
	var tyyppi = (tyyppi == null ? '' : tyyppi);
	var perus = false;
	if (trim(document.getElementById(tyyppi + 'nimi').value) != '')					perus = true;
	if (trim(document.getElementById(tyyppi + 'osoite').value) != '')				perus = true;
	if (trim(document.getElementById(tyyppi + 'postinumero').value) != '')			perus = true;
	if (trim(document.getElementById(tyyppi + 'postitoimipaikka').value) != '')		perus = true;
	return perus;
}
function validateVanhat() {
	return validatePerustiedot();
}
function validateUudet() {
	return validateOsoitetiedot('uusi');
}
function validateLahja() {
	if (anySetInPerustiedot('lahja'))	return validatePerustiedot('lahja');
	else								return true;
}
function validateTilaaja() {
	return (validatePerustiedot() && validateEmail());
}
function validateTilaus() {
	if (validationOn()) {
		enableSubmit();
		if (!validateTilaaja())	disableSubmit();
		if (!validateLahja())	disableSubmit();
		if (!validateLehdet())	disableSubmit();
	}
}
function validateOsoitteenmuutos() {
	if (validationOn()) {
		enableSubmit();
		if (!validateVanhat())	disableSubmit();
		if (!validateUudet())	disableSubmit();
	}
}
// http://www.devarticles.com/c/a/JavaScript/Form-Validation-with-JavaScript-Regular-Expressions-Part-2/2/
// (fixed; dots were unescaped in the original.)
function validateEmail(tyyppi) {
	var tyyppi = (tyyppi == null ? '' : tyyppi);
	var email = true;
	var element = document.getElementById(tyyppi + 'email');
	if (element.value != '') {
		var emailRegxp = /^([\w]+)(\.[\w]+)*@([\w]+)(\.[\w]{2,3}){1,2}$/;
		if (!emailRegxp.test(element.value)) {
			email = false;
			element.className = kelvoton;
		}	else element.className = kelpo;
	}	else element.className = kelpo;
	return email;
}
function validatePostinumero(string) {
	var numero = true;
	if (trim(string) == '')			numero = false;
	if ((trim(string)).length != 5)	numero = false;
	if (isNaN(string))				numero = false;
	return numero;
}
function validateOsoitetiedot(etuliite) {
	var etuliite = (etuliite == null ? '' : etuliite);
	var tiedot = true;
	var element;
	var taytettavat = [etuliite + 'osoite', etuliite + 'postitoimipaikka'];
	
	for (key in taytettavat) {
		element = document.getElementById(taytettavat[key]);
		if (trim(element.value) == '') {
			tiedot = false;
			element.className = kelvoton;
		}	else element.className = kelpo;
	}
	element = document.getElementById(etuliite + 'postinumero');
	if (!validatePostinumero(element.value)) {
		tiedot = false;
		element.className = kelvoton;
	}	else element.className = kelpo;
	return tiedot;
}
function validatePerustiedot(etuliite) {
	var etuliite = (etuliite == null ? '' : etuliite);
	var tiedot = validateOsoitetiedot(etuliite);
	var element = document.getElementById(etuliite + 'nimi');
	if (trim(element.value) == '') {
		tiedot = false;
		element.className = kelvoton;
	}	else element.className = kelpo;
	return tiedot;
}
function validatePeruuttaja() {
	return (validatePerustiedot() && validateEmail());
}
function validateLehdet() {
	var lehdet = false;
	if (document.getElementById('kirppu').checked) 			lehdet = true;
	if (document.getElementById('helppoKirppu').checked)	lehdet = true;
	if (document.getElementById('rastiRistikot').checked)	lehdet = true;
	if (document.getElementById('lastenKirppu').checked)	lehdet = true;
	return lehdet;
}
function validatePeruutus() {
	if (validationOn()) {
		enableSubmit();
		if (!validatePeruuttaja())	disableSubmit();
		if (!validateLehdet())		disableSubmit();
	}
}
function validateForm(tyyppi) {
	if (tyyppi == null)						return true;
	if (tyyppi == tilaukset)				validateTilaus();
	else if (tyyppi == osoitteenmuutokset)	validateOsoitteenmuutos();
	else if (tyyppi == peruutukset)			validatePeruutus();
}
function unhilight(nimi) {
	if (nimi == '')			return true;
	var element = document.getElementById(nimi);
	if (element == null)	return true;
	element.className = kelpo;
}
function unhilightEmail(tyyppi) {
	var tyyppi = (tyyppi == null ? '' : tyyppi);
	unhilight(tyyppi + 'email');
}
function unhilightPerustiedot(tyypit) {
	if (tyypit == null)	return true;
	var korostetut = ['nimi', 'osoite', 'postinumero', 'postitoimipaikka'];
	for (tyyppi in tyypit)
		for (korostettu in korostetut)
			unhilight(tyypit[tyyppi] + korostetut[korostettu]);
	
	return true;
}
function unhilightTilaus() {
	var tyypit = ['', 'lahja'];
	unhilightPerustiedot(tyypit);
	unhilightEmail();
}
function unhilightOsoitteenmuutos() {
	var tyypit = ['', 'uusi'];
	unhilightPerustiedot(tyypit);
	unhilightEmail('uusi');
}
function unhilightPeruutus() {
	var tyypit = [''];
	unhilightPerustiedot(tyypit);
	unhilightEmail();
}
function unhilightForm(tyyppi) {
	if (tyyppi == null)						return true;
	if (tyyppi == tilaukset)				unhilightTilaus();
	else if (tyyppi == osoitteenmuutokset)	unhilightOsoitteenmuutos();
	else if (tyyppi == peruutukset)			unhilightPeruutus();
}
function toggleValidation(tyyppi) {
	var validation = document.getElementById('validation');
	if (validation == null)		return true;
	if (validation.checked)		validateForm(tyyppi);
	else {
		unhilightForm(tyyppi);
		enableSubmit();
	}
}
function validationOn() {
	var validation = document.getElementById('validation');
	if (validation == null)	return false;	// the default.
	return validation.checked;
}
function validateHaku() {
	enableSubmit();
	if (trim(document.getElementById('lehtipiste').value) == '')	disableSubmit();
}
function focusNext(element) {
	if (element == null)	return;
	
	var form = document.getElementsByTagName('form')[0];
	var elements = new Array();
	for (var i=0; i<form.length; i++ ) {
		var el = form.elements[i]; 
		if (el.type == "textarea" || el.type == "text" || el.type == "checkbox" || el.type == "submit")	elements.push(el);
	}
	var next = elements[element.tabIndex];
	var submitCheck = document.getElementById('submit_check');
	if (next == submitCheck)	next = document.getElementById('submit');
	if (next && next.focus)		next.focus();
}
// http://www.cambiaresearch.com/c4/029c978b-aac5-472e-97a8-95b256f5febd/How-Can-I-Use-Javascript-to-Allow-Only-Numbers-to-Be-Entered-in-a-TextBox.aspx
function isNumberKey(evt)
{
	var charCode = (evt.which ? evt.which : evt.keyCode);
	var target = getTarget(evt);
	if (charCode == 13) {
		focusNext(target);
		return false;
	}
	if (validationOn()) {
		if (charCode > 31 && (charCode < 48 || charCode > 57))	return false;
		else													return true;
	}
	else	return true;
}
function getTarget(evt) {
	var target;
	// http://www.w3schools.com/js/tryit.asp?filename=try_dom_event_srcelement
	if (evt.target) target = evt.target
	else if (evt.srcElement) target = evt.srcElement
	if (target.nodeType == 3) // defeat Safari bug
		target = target.parentNode;
	
	return target;
}
// http://www.javascriptkit.com/javatutors/navigator.shtml
function isIE55() {
	var version=0
	if (navigator.appVersion.indexOf("MSIE")!=-1){
		var temp=navigator.appVersion.split("MSIE")
		version=parseFloat(temp[1])
	}
	
	if (version<=5.5 && version > 0)	return true;
	else								return false;
}
function disableEnterKey(evt)
{
	if (isIE55()) {
		return true;
	}
	
	var charCode = (evt.which ? evt.which : evt.keyCode);
	var target = getTarget(evt);

	if (charCode == 13) {
		focusNext(target);
		return false;
	}
	else			return true;
}

