var Formicate = Class.create();
Formicate.prototype = {
	initialize: function(form) {
		this.fieldsets = form.getElementsByTagName('fieldset');
		this.formElems = form.getElements();
		this.form = form;
	},

	formicate: function() {
		for (var i=0; i<this.formElems.length;i++) {
			this.formElems[i].addClassName(this.formElems[i].type);
		}
		for(var i=0;i<this.fieldsets.length;i++) {
			var temp = this.fieldsets[i].immediateDescendants();
			for (var j=0; j<temp.length;j++) {
				if (temp[j].match('div')) {
					this.parseBlock(temp[j]);
				}
			}
		}
		this.form.show();
	},

	parseBlock: function(block) {
		var formitems = [];
		var legend = block.up('fieldset').down('legend');
		var labels = block.getElementsByTagName('label');
		for (var i=0;i<this.formElems.length;i++) {
			if (this.formElems[i].parentNode == block && this.formElems[i].type != 'hidden') {formitems.push(this.formElems[i])};
		}
		block.addClassName(formitems[0].type + "_div");
		for (var i=0; i<formitems.length;i++) {
			elem=formitems[i];
			labels[i].addClassName(elem.type + '_label');
			if (block.readAttribute('f_name')) {
				elem.setAttribute('name', block.readAttribute('f_name').replace(/[^\w| ]/g, '').strip().replace(/\s+/g, '_').toLowerCase());
				elem.id = block.readAttribute('f_name') + "_" + labels[i].innerHTML.strip().replace(/ /g, '_');
				if (block.firstChild.nodeName != '#text') {
					block.insertBefore(document.createTextNode(block.readAttribute('f_name') + " "),block.firstChild);
				}
			}
			if (elem.type == 'radio') {
			    !elem.name ? elem.setAttribute('name', legend.innerHTML.replace(/<br[^>]*>/gi, ' ').replace(/[\n\r]?/gi, '').replace(/[\t]+/g, ' ').replace(/[^\w| ]/g, '').strip().replace(/\s+/g, '_').toLowerCase()) : null;
			    elem.setAttribute('value', labels[i].innerHTML.strip());
			} else {
				!elem.name ? elem.name = labels[i].innerHTML.replace(/<br ?\/?>/gi, ' ').replace(/[\n\r]?/gi, '').replace(/[\t]+/g, ' ').replace(/[^\w]/g, '').strip().replace(/\s+/g, '_').toLowerCase() : null;
			}
			if(!elem.id) { elem.id = legend.innerHTML.strip().replace(/ /g, '_') + "_" + labels[i].innerHTML.strip().replace(/ /g, '_')};
			if (elem.nodeName.toLowerCase() == 'input') {
				var newElem = createNamedElement(elem.nodeName, elem.name);
				newElem.id = elem.id;
				newElem.type = elem.type;
				elem.parentNode.replaceChild(newElem, elem);
			}
			labels[i].setAttribute('for', elem.id);
		}
	}
}
Event.observe(window, 'load', function() {
	formicates = document.getElementsByClassName('jormit');
	for (i=0;i<formicates.length; i++) {
		formicates[i].formicate = new Formicate(formicates[i]);
		formicates[i].formicate.formicate();
	}
});

function createNamedElement(type, name) {
   var element = null;
   // Try the IE way; this fails on standards-compliant browsers
   try {
      element = document.createElement('<'+type+' name="'+name+'">');
   } catch (e) {
   }
   if (!element || element.nodeName != type.toUpperCase()) {
      // Non-IE browser; use canonical method to create named element
      element = document.createElement(type);
      element.name = name;
   }
   return element;
}


/*	function focusMe(event) {
		targetElem = Event.findElement(event, 'fieldset');
		targetElem.addClassName('selected');
		for (i=0; i<fieldsets.length; i++) {
			if (fieldsets[i] != targetElem) {
				if (fieldsets[i].hasClassName('selected')) {
					fieldsets[i].addClassName('checked');
				}
				fieldsets[i].removeClassName('selected');
			}
		}
	}*/
