muze.require("muze.event");
muze.namespace("muze.form");

muze.form.clearOnFocus = function() {
	return {
		attach : function() {
			inputs = document.getElementsByTagName("INPUT");
			for (i=0; i<inputs.length; i++) {
				if (inputs[i] && inputs[i].className && inputs[i].className.indexOf("muze_form_clearOnFocus") != -1) {
					inputelm = inputs[i];
					inputelm.initialvalue = inputelm.value;
					muze.event.attach(inputelm, "focus", muze.form.clearOnFocus.execute);
				}
			}
			divs = document.getElementsByTagName("DIV");
			for (i=0; i<divs.length; i++) {
				if (divs[i] && divs[i].className && divs[i].className.indexOf("muze_form_clearOnFocus") != -1) {
					inputs = divs[i].getElementsByTagName("INPUT");
					for (j=0; j<inputs .length; j++) {
						if (inputs [j]) {
							inputelm = inputs[j];
							inputelm.initialvalue = inputelm.value;
							muze.event.attach(inputelm, "focus", muze.form.clearOnFocus.execute);
						}
					}
				}
			}
					
		},
		execute : function() {
			if (this.value == this.initialvalue) {
				this.value = '';
			}
		}
	}
}();

muze.form.subselection = function() {
	return {
		attach : function() {
			inputs = document.getElementsByTagName("DIV");
			for (i=0; i<inputs.length; i++) {
				if (inputs[i] && inputs[i].className && inputs[i].className.indexOf("muze_form_subselection") != -1) {
					inputelm = inputs[i].getElementsByTagName("SELECT")[0];
					if (inputelm) {
						muze.event.attach(inputelm, "change", muze.form.subselection.execute);
					}
					radiooptions = inputs[i].getElementsByTagName("INPUT");
					for (j=0; j<radiooptions.length; j++) {
						if (radiooptions[j]) {
							muze.event.attach(radiooptions[j], "click", muze.form.subselection.execute);
							muze.event.attach(radiooptions[j], "change", muze.form.subselection.execute);
						}
					}
				}
			}			
		},
		execute : function() {
			inputs = this.form.getElementsByTagName("DIV");
			for (i=0; i<inputs.length; i++) {
				if (inputs[i] && inputs[i].className && inputs[i].className.indexOf("muze_form_subselection") != -1) {
					inputelm = inputs[i];
					inputelm.style.display = "none";
				}
				if (inputs[i] && inputs[i].className && inputs[i].className.indexOf(this.value+"_subselection") != -1) {
					inputelm = inputs[i];
					inputelm.style.display = "block";
				}
			}
		}
	}
}();

muze.form.textareaMaxLength = function() {
	return {
		attach : function() {
			inputs = document.getElementsByTagName("TEXTAREA");
			for (i=0; i<inputs.length; i++) {
				if (inputs[i] && inputs[i].className && inputs[i].className.indexOf("muze_form_textareaMaxLength") != -1) {
					inputelm = inputs[i];
					muze.event.attach(inputelm, "keypress", muze.form.textareaMaxLength.execute);
				}
			}			
		},
		execute : function(evt) {
			// FIXME: This requires invalid HTML, because maxlength attribute does not exist for textarea.
			var maxlength = parseInt(this.getAttribute("maxlength"));
			var keyCode = evt.keyCode ? evt.keyCode : evt.which ? evt.which : evt.charCode;

			if (maxlength && (this.value.length >= maxlength) && (keycode == 13 || keycode >= 33)) {
				muze.event.cancel(evt);
				return false;
			}
		}
	}
}();

muze.form.attachDefaults = function() {
	muze.form.textareaMaxLength.attach();
	muze.form.clearOnFocus.attach();
	muze.form.subselection.attach();
};

