if (!Innowise) var Innowise = {};

Innowise.lomake = {
	alustaOletusarvot: function(lomake, oletusarvot) {
		if (lomake) {
			//Kenttien oletusarvot kentän nimi - arvo -pareina:
			//Muotoa {'name': 'value', 'name': 'value'...}
			if (typeof(oletusarvot) !== 'undefined') {
				lomake.oletusarvot = oletusarvot;
			} else if (typeof(lomake.oletusarvot) === 'undefined') {
				lomake.oletusarvot = {};
				
				for (i=0; i < lomake.elements.length; i++) {
					var fieldName = lomake.elements[i].name;
					
					if (fieldName
						&& (lomake.elements[i].type.toLowerCase() == 'text'
							|| lomake.elements[i].type.toLowerCase() == 'textarea')
					) {
						lomake.oletusarvot[fieldName] = lomake.elements[i].value;
					}
				}
			}
			
			//alert(lomake.oletusarvot.toSource());
			
			// Lisätään lomakekentille eventit.
			for (i=0; i < lomake.elements.length; i++) {
				var fieldName = lomake.elements[i].name;
				
				if (fieldName
					&& (lomake.elements[i].type.toLowerCase() == 'text'
						|| lomake.elements[i].type.toLowerCase() == 'textarea')
				) {
					var jqElement = jQuery(lomake.elements[i]);
					jqElement.focus(function(ev) {
						Innowise.lomake.nollaaLomakekentta(this);
					});
					jqElement.blur(function(ev) {
						Innowise.lomake.palautaLomakekentta(this);
					});
				}
			}
		}
	},
	
	alustaPakolliset: function(lomake, pakolliset) {
		if (lomake) {
			//Pakolliset kentät.
			//Muotoa ['name', 'name'...]
			if (typeof(oletusarvot) !== 'undefined') {
				lomake.pakolliset = pakolliset;
			} else if (typeof(lomake.pakolliset) === 'undefined') {
				lomake.pakolliset = [];
				
				for (i=0; i < lomake.elements.length; i++) {
					var fieldName = lomake.elements[i].name;
					
					if (fieldName && lomake.elements[i].type.toLowerCase() == 'hidden'
							&& fieldName == 'required') {
						lomake.pakolliset = lomake.elements[i].value.split(',');
						for (avain in lomake.pakolliset) {
							lomake.pakolliset[avain] = jQuery.trim(lomake.pakolliset[avain]); 
						}
					}
				}
			}
		}
	},
	
	alustaLomake: function(lomake, oletusarvot, pakolliset) {
		Innowise.lomake.alustaOletusarvot(lomake, oletusarvot);
		Innowise.lomake.alustaPakolliset(lomake, pakolliset);
		
		jQuery(lomake).submit(function(ev) {
			var puuttuvat = new Array();

			//alert(this.toSource());
			
			Innowise.lomake.nollaaLomakekentat(this);
			
			for (avain in this.pakolliset) {
				//alert('Checking: '+pakolliset[avain]);
				if (typeof(this[this.pakolliset[avain]]) == 'undefined' || this[this.pakolliset[avain]].value == '') {
					puuttuvat.push(this.pakolliset[avain]);
					//alert(pakolliset[avain]+' is required.');
				}
			}

			//alert('Missing required fields: '+puuttuvat.toSource());

			if (puuttuvat.length != 0) {
				var virhe = '';
				for (avain in puuttuvat) {
					if (avain > 0) {
						virhe += "\n";
					}
					puuttuvat[avain] = puuttuvat[avain].charAt(0).toUpperCase()+puuttuvat[avain].substr(1);
					virhe += puuttuvat[avain]+' is required.';
				}

				for (avain in this) {
					Innowise.lomake.palautaLomakekentta(this[avain]);
				}

				alert(virhe);

				return false;
			}
			
			//Muutetaan ennen lähettämistä utf8-kentät iso8859:ksi
			for (i=0; i < lomake.elements.length; i++) {
				if (lomake.elements[i].value) {
					lomake.elements[i].value = Innowise.utf8.utf8ToISO8859(lomake.elements[i].value);
				}
			}

			return true;
		});
	},

	nollaaLomakekentat: function(lomake) {
		for (avain in lomake.oletusarvot) {
			var field = lomake[avain];
			if (field) {
				if (field.value == lomake.oletusarvot[avain]) {
					field.value = '';
				}
			}
		}
		return true;
	},

	nollaaLomakekentta: function(el) {
		//alert(el.value+"\n"+el.form.oletusarvot.toSource());
		if (el) {
			if (typeof(el.form.oletusarvot[el.name]) !== 'undefined' && el.value == el.form.oletusarvot[el.name]) {
				el.value = '';
			}
		}
	},

	palautaLomakekentta: function(el) {
		if (el) {
			if (typeof(el.form.oletusarvot[el.name]) !== 'undefined' && el.value == '') {
				el.value = el.form.oletusarvot[el.name];
			}
		}
	}
};

