/*
 * requiredAttr.js: Cross-browser required attribute implementation.
 * NOTE should work in IE 8+ and any other browser
 * 2011-07-10
 *
 * By Marcus Hauser, http://marcus.lugsp.at/
 * Public Domain.
 * NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
 */

/*global self, document */

/*! @source http://marcus.lugsp.at/js/standard/requiredAttr.js*/

if(typeof document !== "undefined" && !("required" in document.createElement("input")))
{
	(function (view)
	{
		"use strict";

		// define variables and functions
		var
		protos = [
			(view.HTMLInputElement || view.InputElement).prototype,
			(view.HTMLSelectElement || view.SelectElement).prototype,
			(view.HTMLTextAreaElement || view.InputTextAreaElement).prototype
			],
		requiredGetter = function()
		{
			if(this.hasAttribute("required"))
			{
				return true;
			}
			return false;
		},
		requiredSetter = function(flag)
		{
			if(flag)  // true
			{
				this.setAttribute("required", "");
			}
			else  // false
			{
				if(this.hasAttribute("required"))
				{
					this.removeAttribute("required");
				}
			}
		};

		// install getters and setters
		for(var i = 0; i < protos.length; i++)
		{
			var proto = protos[i];
			if(Object.defineProperty)
			{
				Object.defineProperty(proto, "required",
				{
					"get": requiredGetter,
					"set": requiredSetter
				});
			}
			else if(Object.__defineGetter__ && Object.__defineSetter__)
			{
				proto.__defineGetter__("required", requiredGetter);
				proto.__defineSetter__("required", requiredSetter);
			}
		}
	}(self));
}

