// JavaScript Document
// FormTools Class
function FormTools() {
}
// static methods:
FormTools.object2FormData = function (form, objectPrefix, objectPropSepChars, obj) {

	var strPath= new String("");

	if (arguments.length > 4)
		strPath = arguments[4];

	for (var key in obj) {
		if (typeof obj[key] == 'object') {
			this.object2FormData(form, objectPrefix, objectPropSepChars, obj[key], strPath + (strPath =='' ? objectPrefix + objectPropSepChars : objectPropSepChars) + key);
		} else {
			this.setValue(form.elements[strPath + (strPath =='' ? objectPrefix + objectPropSepChars : objectPropSepChars) + key], obj[key]);
		}
	}
}
FormTools.formData2Object = function(form, objectPrefix, objectPropSepChars) {

	var out;
	var createdObjects = new Object();
	var createdObjectsLength = 0;

	if (objectPrefix=='') {
		out = new Object();
	}

	for (var i=0; i<form.elements.length; i++) {

		var el = form.elements[i];

		if (el.name!=undefined) {

			if (objectPrefix=='' || el.name.indexOf(objectPrefix + objectPropSepChars)==0) {

				var objPath = el.name.split(objectPropSepChars);
				var strPath = new String('');
				var curr = out;

				for (var j=0; j < objPath.length-1; j++) {
					
					strPath += objPath[j] + objectPropSepChars;

					var alreadyCreated = false;

					for (var coKey in createdObjects) {

						if (createdObjects[coKey].path == strPath) {
							curr = createdObjects[coKey].obj;
							alreadyCreated = true;
							break;
						}
					}

					if (! alreadyCreated) {

						if (j==0) {
							curr = new Object();
							out = curr;
						} else {
							curr[objPath[j]] = new Object();
							curr = curr[objPath[j]];
						}

						createdObjects[createdObjectsLength] = {'path' : strPath, 'obj' : curr};
						createdObjectsLength++;
					}
				}
				curr[objPath[j]] = this.getValue(el);
			}
		}
	}
	return out;
}
FormTools.setValue = function (formField, value) {
	
	if (formField==undefined)
		return;
	
	switch (formField.type) {

		case 'button':
		case 'file':
		case 'hidden':
		case 'password':
		case 'submit':
		case 'text':
		case 'textarea':
			formField.value = value
			break;
		case 'checkbox':
			formField.checked = value!=0;
			break;
		case 'select-one':
			for (var i=0; i< formField.options.length; i++) {
				if (formField.options[i].value == value) {
					formField.selectedIndex = i;
					break;
				}
			}
			break;
	}
}
FormTools.getValue = function (formField) {

	if (formField==undefined)
		return undefined;
	
	switch (formField.type) {

		case 'button':
		case 'file':
		case 'hidden':
		case 'password':
		case 'submit':
		case 'text':
		case 'textarea':
			return formField.value;
		case 'checkbox':
			return formField.checked ? formField.value : 0;
		case 'select-one':
			return formField.options[formField.selectedIndex].value;
		default:
			alert(formField.type);
	}
	return undefined;
}
FormTools.removeClassStyleFromFields = function (form, styleClassName) {

	for (var i=0; i<form.elements.length; i++) {
		if (form.elements[i].name!= undefined) {
			if (form.elements[i].className == styleClassName) {

				form.elements[i].className = '';
			}
		}
	}
}
FormTools.phoneInternationalNumber = function (field) {
	
	var chars = '+1234567890- ';
	var out = '';
	var inStr = field.value;
	
	for (var i = 0; i<inStr.length; i++) {
		for (var j=0; j<chars.length; j++) {
			if (inStr.substr(i,1) == chars.substr(j,1)) {
				out = out.concat(chars.substr(j,1));
				break;
			}
		}
	}
	if (out.length==1 && out.substr(0,1) != '+')
		out = '+' + out;
	if (inStr!=out) {
		field.value = out;
	}
}

