/**
 * @author buenger
 */
function Radio (a_divId, a_formElementName) {
	
	this.id;
	this.name = "Radio";
	this.type = "FormElement";
	
	var div;
	var formElementName;
	var label;
	var formElements;
	var _isRequired;
	var _isCheckable = true;
	
	var _self = this;
	
	this.check = function() {
		return test();
	}
	
	this.value = function () {
		return div.getElements("input").getProperty("checked").indexOf(true);
	}
	
	this.formValue = function () {
		var value;
		div.getElements("input").each (function (a_item, a_index){
			if (a_item.getProperty("checked") != true) return;
			value = a_item.value;
		});
		return value;
	}
	
	this.getCheckable = function () {
		return _isCheckable;
	}
		
	this.setCheckable = function(a_isCheckable) {
		_isCheckable = a_isCheckable;
		if (!_isCheckable) _self.unerror();
	}
	
	this.error = function() {
		var i, input, name;
		for (i = 0; i < formElements.length; i++) {
			input = formElements[i]
			name = input.getProperty("id");
			$$("label[for="+name+"]")[0].style.backgroundColor = "#F1E322";
			input.addEvent("click", _self.unerror);
		}
	}
	
	this.unerror = function() {
		var i, input, name;
		for (i = 0; i < formElements.length; i++) {
			input = formElements[i];
			name = input.getProperty("id");
			$$("label[for="+name+"]")[0].style.backgroundColor = "";
			input.removeEvent("click", _self.unerror);
		}
	}
	
	this.remove = function () {
		div.parentNode.removeChild(div);
	}
	
	this.addDependency = function (a_id, a_valueFnc, a_compareFnc, a_handleFnc) {
		var el = Form.idMap[a_id];
		el.addEvent("propChange", function () {
			var value = el[a_valueFnc]();
			var compareResult = CompareFunctions[a_compareFnc](value);
			_self[a_handleFnc](compareResult);
		});
	}
	
	function test () {
		var ctrl = _self.value() != -1;
		return (isRequired()) ? ctrl: true;
	}
	
	function init (a_divId, a_formElementName) {		
		_self.id = a_divId;
		formElementName = a_formElementName;
		window.addEvent("load", handleWindowLoad);
	}
	
	function isRequired  () {
		return _isRequired;
	}
	
	this.getLabel = function() {
		return (label !== null) ? label.innerHTML.replace(/\*/g,"") : false;
	}
	
	function handleWindowLoad () {
		window.removeEvent("load", handleWindowLoad);
		
		div = $(_self.id);	
		label = div.getElements("label")[0];
		_isRequired = (div.getProperty("required") != null) ? true: false;
		formElements = $$("input[name="+formElementName+"]");
		$$("input[name="+formElementName+"]").addEvent("click", handleValueChange);
	}
	
	function handleValueChange () {
		_self.fireEvent("propChange");
	}
	
	//MOOTOOLS EVENTS
	$extend(this, new Events());
	
	init (a_divId, a_formElementName);
}
