// Fokusoidaan ekan formin eka tekstikentta [[ TODO: htmlareat ]]
function d4focusfirst() {
	return;
	if(document.forms[0]) {
		for(i=0; i<document.forms[0].elements.length; i++) {
			var e = document.forms[0].elements[i];
			// parentit mukana, jotta piilotetun divin sisalla olevat tekstikentat eivat aiheuta virheita tassa
			if(e != null && !e.disabled && (e.type == 'text' || e.type == 'textarea')
			   && e.parentNode && e.parentNode.style.display != 'none') {
			    try { e.focus() } catch(e){};
				return;
				
			} else if(e != null && e.type == 'hidden' && typeof(window['D4EE_FIELDS']) != "undefined") {
			    if(D4EE_FIELDS[e.name] != null) {
				    try { D4EE_FIELDS[e.name].elem.focus() } catch(ex){};
                    return;
				}
			}
		}
	}
}

// TODO: nama johonkin parempaan paikkaan
function d4show() {
	var ids = d4show.arguments;
	for(i=0; i<ids.length; i++) {
		e = document.getElementById(ids[i]);
		if(e) {
			e.style.display = '';
		}
	}
}
function d4hide() {
	var ids = d4hide.arguments;
	for(i=0; i<ids.length; i++) {
		e = document.getElementById(ids[i]);
		if(e) {
			e.style.display = 'none';
		}
	}
}

function _d4readFormElement(e) {
	var ret = {};
	if(e.type=='checkbox') {
		if(e.checked) {
			ret.name = e.name;
			ret.value = "on";
		}
	} else if(e.type=='radio') {
		if(e.checked && e.value) {
			ret.name = e.name;
			ret.value = e.value;
		}
	} else if (e.type=='select-one') {
		if(e.options[e.selectedIndex].value != "") {
			ret.name = e.name;
			ret.value = e.options[e.selectedIndex].value;
		}
	} else if(e.type=='hidden' || e.type=='text' || e.type == 'textarea') {
		if(e.value != "") {
			ret.name = e.name;
			ret.value = e.value;
		}
	}
	return ret;
}

// haetaan formin tiedot query_string-muotoon.
function d4getQs(f, ignore_prefix) {

	var qs = '';

	if(f._FREE_PARAMS && f._FREE_PARAMS.value != "") {
		qs = '&' + f._FREE_PARAMS.value;
    }

	for(var i=0 ; i<f.elements.length ; i++) {
		var e=f.elements[i];
		
		if(e.name && e.name.length >0 && e.name != "_FREE_PARAMS" && e.IGNORE_QS != "true" && (ignore_prefix == null || e.name.indexOf(ignore_prefix) != 0)) {
			var data = _d4readFormElement(e);
			if(data.name) {
				qs += '&' + encodeURIComponent(data.name) + '=' + encodeURIComponent(data.value);
			}
		}
	}
	// substr: stripataan eka &-merkki pois
	// replace: ei escapeteta merkkeja $, {, }
	return qs.substr(1).replace(/(%\w\w)/g,
		function (str, hex) {
	    	var repl = {
		    	'%24': '$',
				'%7B': '{',
				'%7D': '}'
			};
			return repl[hex] ? repl[hex] : hex;
		}
	);
}

// asetetaan formin arvot querystringin mukaan

function d4putQs(f, qs) {
	
	var hash = d4qs2hash(qs);
	
	var free_params = {};

	for(var k in hash) {
		if(f.elements[k] && f.elements[k].IGNORE_QS != "true") {

			var e = f.elements[k];
			var val = hash[k];

			if(e.type=='checkbox') {
				e.checked = (val ? true : false);
				
			} else if (e.type=='select-one') {
			
				e.selectedIndex = 0; // nollataan aluksi
				for(var j=0; j<e.options.length; j++) {
					if(e[j].value == val) {
						e.selectedIndex = j;
						break;
					}
				}
			
			} else if(e.type=='hidden' || e.type=='text' || e.type == 'textarea') {
				e.value = val;
			}

		} else {
			free_params[k] = hash[k];
		}
	}

	if(f._FREE_PARAMS) {
		f._FREE_PARAMS.value = d4hash2qs(free_params);
	}
}

function d4createSubForm(container_id, remove) {
	var f = document.createElement('form');
	var types=['input','select','textarea'];
	for(t in types) {
		var elems = document.getElementById(container_id).getElementsByTagName(types[t]);
		for(i=0; i<elems.length; i++) {
			var data = _d4readFormElement(elems[i]);
			if(data.name) {
				var input = document.createElement('input');
				input.name = data.name;
				input.value = data.value;
				f.appendChild(input);
			}
			
			if(remove) {
				// tämä bugaa: jos kenttiä poistetaan jo tässä vaiheessa, ainakaan kuvan
				// kirkkauden "välisäädöt" eivät toimi, koska kentät poistuvat liian
				// aikaisin lomakkeelta. vaikuttaisi toimivan ihan oikein ilman tätä poistoa,
				// joten hus pois. FB: 2332. --JP 2009-07-01
				// elems[i].parentNode.removeChild(elems[i]);
			}
						

		}
	}
	return f;
}
															

function d4formRecordInitialState(f) {
	f.INITIAL_STATE = d4getQs(f);
}

function d4formChanged(f) {
	var current_state = d4getQs(f);
//	var w = window.open('about:blank');
//	w.document.write("----initial------\n" + f.INITIAL_STATE + "\----current----\n" + current_state);
	
	return current_state != f.INITIAL_STATE;
}

//Form.prototype.d4putQs = _d4putQs;
//Form.prototype.d4getQs = _d4getQs;


