IRIS.util.FormUtils = function() {

	return {

		setChecked: function( element, checked ) {
			if( typeof element == 'string' ) {
				element = document.getElementById(element);
			}
			if( element ) {
				element.checked = checked;
			}
		},

		setAllChecked: function( form, inputName, checked ) {
			if( typeof form != 'object' ) {
				form = document.getElementById(form);
			}
			for( var i = 0; i < form.elements.length; i++ ) {
				var element = form.elements[i];
				if( element.name == inputName ) {
					element.checked = checked;
				}
			}
		},
	
		setSelected: function( select, selectedOption, bool, createOption ) {
			if( typeof select != 'object' ) {
				select = document.getElementById(select);
			}
			if( typeof selectedOption == 'boolean' ) {
				for( var i = 0; i < select.options.length; i++ ) {
					select.options[i].selected = selectedOption;
				}
			}
			else {
				if( typeof bool == 'undefined' ) {
					bool = true;
				}
				if( typeof selectedOption == 'integer' ) {
					select.options[selectedIndex].selected = bool;
				}
				else {
					var found = false;
					for( var i = 0; i < select.options.length; i++ ) {
						if( select.options[i].value == selectedOption ) {
							select.options[i].selected = true;
							found = true;
						}
					}
					if( !found && createOption ) {
						FormUtils.addOption(select, selectedOption).selected = true;
					}
				}
			}
		},
	
		addOption: function( select, value, label ) {
			if( typeof label == 'undefined' ) {
				label = value;
			}
			var option = new Option(value, label);
			try {
				select.add(option,null);
			}
			catch (e) {
				select.add(option,select.length);
			}
			return option;
		},
	
		clearForm: function( element ) {
			while( element.tagName != 'FORM' ) {
				element = element.parentNode;
			}
			if( element ) {
				var form = element;
				var str = '';
				for( var i = 0; i < form.elements.length; i++ ) {
					element = form.elements[i];
					if( element.tagName == 'SELECT' ) {
						element.selectedIndex = false;
						for( var j = 0; j < element.options.length; j++ ) {
							element.options[j].selected = false;
						}
					}
					else if( element.type == 'radio' || element.type == 'checkbox' ) {
						element.checked = false;
					}
					else if( element.type != 'submit' && element.type != 'reset'
							&& element.type != 'button' && element.type != 'hidden' ) {
						element.value = '';
					}
				}
			}
		},

		insertAtCaret: function(obj, text) {
			if(document.selection) {
				obj.focus();
				var orig = obj.value.replace(/\r\n/g, "\n");
				var range = document.selection.createRange();

				if(range.parentElement() != obj) {
					return false;
				}

				range.text = text;

				var actual = tmp = obj.value.replace(/\r\n/g, "\n");

				for(var diff = 0; diff < orig.length; diff++) {
					if(orig.charAt(diff) != actual.charAt(diff)) break;
				}

				for(var index = 0, start = 0; 
					tmp.match(text) 
						&& (tmp = tmp.replace(text, "")) 
						&& index <= diff; 
					index = start + text.length
				) {
					start = actual.indexOf(text, index);
				}
			} else if(obj.selectionStart) {
				var start = obj.selectionStart;
				var end   = obj.selectionEnd;
				obj.value = obj.value.substr(0, start) 
					+ text 
					+ obj.value.substr(end, obj.value.length);
			}
			if(start != null) {
				this.setCaretTo(obj, start + text.length);
			} else {
				obj.value += text;
			}
		},

		setCaretTo: function(obj, pos) {
			if(obj.createTextRange) {
				var range = obj.createTextRange();
				range.move('character', pos);
				range.select();
			} else if(obj.selectionStart) {
				obj.focus();
				obj.setSelectionRange(pos, pos);
			}
		}

	}

}();