var formutil = 
{ 
	/// <summary>Form Utilities</summary>
};

formutil.setReadOnly = function() 
{
	///	<summary>Makes all form fields with class="readonly" readonly (because the readonly attribute only works on text inputs and textareas).</summary>
	///	<remarks>In case users have JavaScript turned off, fields should be marked disabled="disabled"; this method will unset the disabled property after making the field readonly.</remarks>
	for (i = 0, n = document.forms.length; i < n; i++) {
		for (j = 0, m = document.forms[i].elements.length; j < m; j++) {
			var field = document.forms[i].elements[j];
			if (field.className && field.className.match(/\breadonly\b/i)) {
				switch (field.type.toLowerCase()) {
					case "text" :
					case "password" :
					case "textarea" :
						field.readOnly = true;
						field.disabled = false;
						break;
					case "checkbox" :
					case "submit" :
					case "reset" :
					case "button" :
						field.onclick = formutil.cancelClick;
						field.disabled = false;
						break;
					case "radio" :
						field.onclick = formutil.cancelRadioClick;
						field.disabled = false;
						break;
					case "select-one" :
					case "select-multiple" :
						field.onchange = formutil.cancelSelectChange;
						field.disabled = false;
						break;
				}
			}
		}
	}
};

formutil.cancelClick = function(event) 
{
	///	<summary>Prevents activating buttons or checking checkboxes by cancelling the click event.</summary>
	///	<remarks>Onclick event handler.</remarks>
	if (event && event.preventDefault) {
		event.preventDefault(); // standards-compliant browsers
	}
	else {
		window.event.returnValue = false; // Internet Explorer
	}
};

formutil.cancelRadioClick = function(event) 
{
	///	<summary>Prevents changing a radio button selection by re-selecting the default after each click.</summary>
	///	<remarks>Onclick event handler.</remarks>
	var radios = this.form.elements[this.name]
	for (i = 0, n = radios.length; i < n; i++) {
		radios[i].checked = radios[i].defaultChecked;
	}
};

formutil.cancelSelectChange = function(event) 
{
	///	<summary>Prevents changing a select selection by re-selecting the default after each change.</summary>
	///	<remarks>Onchange event handler.</remarks>
	var options = this.options;
	for (i = 0, n = options.length; i < n; i++) {
		options[i].selected = options[i].defaultSelected;
	}
};

window.addLoadEvent = window.addLoadEvent || function(handler)
{
	/// <summary>Adds handlers to window.onload</summary>
	/// <param name="handler" type="function"></param>
	var oldonload = window.onload;
	if (typeof window.onload != 'function')	{
		window.onload = handler;
	} else {
		window.onload = function() {
			if (oldonload) { oldonload(); }
			handler();
		}
	}	
}

window.addLoadEvent(formutil.setReadOnly);

