// function to access form fields and values

var form_field_types = new Object();
var form_field_titles = new Object();
var form_field_onsethandlers = new Object();

function rtrv(obj) {
	var rs, i;

	if(obj.type == "checkbox")
		return obj.checked?"true":"false";

	if(obj.type == "text" || obj.type == "file" || obj.type == "textarea" || obj.type == "hidden")
		return obj.value;
		
	if(obj.type == "select-one")
		return obj.options[obj.selectedIndex].value;

	if(obj.type == "select-multiple") {
		rs = "";
		for(i=0; i<obj.length; i++)
			if(obj.options[i].selected)
				rs = rs?(rs+"|"+obj.options[i].value):(obj.options[i].value);
		return rs;
	}

	if(obj.length) {
		if(obj[0].type == "radio") {
			for(i=0; i<obj.length; i++)
				if(obj[i].checked)
					return obj[i].value;
			return "";
		}
	}

	alert("Unknown input field '"+obj.name+"', please contact the webmaster!");
}

function get_key(obj) {
	var key;

	if(obj.name) {
                if(obj.name.indexOf("[") == -1) {
                        key = obj.name;
                } else {
                        key = obj.name.substring(0,obj.name.indexOf("["));
                }
        } else {
                key = obj.id;
        }
        return key;
}

function load(obj) {
	var key, val;

	if(!obj) {
		alert ("Unknown input field, please contact the webmaster!");
		return "";
	}

        key = get_key(obj);
    	val = rtrv(obj);

   	if(val == "") // empty field
     		return "";

     	if(form_field_types[key] == "n" || form_field_types[key] == "an") {
        	if(val.indexOf(",") != -1) {
                	val = val.replace(/,/ ,'.');
                        stor(obj, val);
        	}

            	val = parseFloat(val);
		if(isNaN(val)) {
        		val = "";
      			stor(obj, val);
         	}
	} else if(form_field_types[key] == "d") {
        	if(val == "--")
   			val = "";
	} else if(obj.type == "checkbox" && form_field_types[key] == "b") { // bool as checkbox
		if(val == "true")
			val = "1"; // FIXME: bool coding TRUE!
		else
			val = "";  // uncheck means NULL 
	}

	return val;
}

function stor(obj, value) {
	var key, day, month, year, d, i;

	if(!obj) 
		return;
        key = get_key(obj);

	if(obj.type == "checkbox") {
		if(value == "false" || value == "0")
			value = 0;
		obj.checked = value?1:0;

		if((handler = form_field_onsethandlers[key]) != "") 
			eval(handler);

		return;
	}

        if(form_field_types[key] == "d") {
                if(!value || typeof(value) == 'string' && !value.length) {
                        value = day = month = year = '';
                } else if(isNaN(value)) {
                        day = value.substr(8, 2);
                        month = value.substr(5, 2);
                        year = value.substr(0, 4);
                } else {
                        d = new Date();
                        d.setTime(value);
                        day = d.getDate();
                        if (day < 10) 
				day = '0' + day;
                        month = d.getMonth()+1;
                        if (month < 10) 
				month = '0' + month;
                        year = d.getFullYear();
                        value = year + "-" + month + "-" + day;
                }

                obj.value = value;
                stor(ffe(obj.name+"_dy"), day);
                stor(ffe(obj.name+"_mn"), month);
                stor(ffe(obj.name+"_yr"), year);
                return;
        }

	if(obj.type == "text" || obj.type == "textarea" || obj.type == "hidden") {
		obj.value = value;
		return;
	}
		
	if(obj.type == "select-one") {
		for(i=0; i<obj.length; i++)
			if(obj.options[i].value == value) {
				obj.selectedIndex = i;
				break;
			}

		if((handler = form_field_onsethandlers[key]) != "") 
			eval(handler);

		return;
	}

	if(obj.type == "select-multiple") {
		// select-multiple not supported (does not make sense)
		return;
	}

	if(obj.length) {
		if(obj[0].type == "radio") {
			for(i=0; i<obj.length; i++)
				if(obj[i].value == value)
					obj[i].checked = true;
				else
					obj[i].checked = false;

			if((handler = form_field_onsethandlers[obj[0].name]) != "") 
				eval(handler);

			return;
		}
	}

	alert("Unknown assignment object '"+obj.name+"', please contact the webmaster!");
}

