function in_array(stringToSearch, arrayToSearch) {
	for (s = 0; s < arrayToSearch.length; s++) {
		thisEntry = arrayToSearch[s].toString();
		if (thisEntry == stringToSearch) {
			return true;
		}
	}
	return false;
}
function addEvent(obj, evType, fn){
if (obj.addEventListener){
	obj.addEventListener(evType, fn, true);
	return true;
} else if (obj.attachEvent){
	var r = obj.attachEvent("on"+evType, fn);
	return r;
} else {
	return false;
}
}
String.prototype.toProperCase = function(){
return this.toLowerCase().replace(/\w+/g,function(s){
	return s.charAt(0).toUpperCase() + s.substr(1);
})
}
function replace_append(subject, replacewith, find){
	if(subject.indexOf(find) != -1) { // replace
		reg = new RegExp(find, 'g')
		return subject.replace(reg, replacewith);
	} else { // append
		return subject + ' ' + replacewith;
	}
}

function event_object(e) { // gets object for addEvents
	if (typeof e == 'undefined') {
		return window.event;
	}
	if (typeof e.target != 'undefined') {
		return e.target;
	} else if (typeof e.srcElement != 'undefined') {
		return e.srcElement;
	} else {
		return;
	}
}
function nicename(name) {
	chop = name.substr(name.indexOf('_')+1, name.length);
	// abbv hack
		caps = ['mi', 'ssn'];
		if(in_array(chop, caps)) return chop.toUpperCase();
	var words = new Array();
	words = chop.split('_');

	ret = '';
	for(i=0;word=words[i];i++) {
		if(word.length > 1) {
			ret = ret + word + ' ';
		}
	}

	return ret.toProperCase();
}

function oninputfocus(event) {
	input = event_object(event);
	if(input.type == 'text') {
		if(input.value == nicename(input.name)) { // use this, not class because of never_describe
			input.value = '';
			input.className = replace_append(input.className, 'filled', 'describe');
		} else return;
	}
}
function oninputblur(event) {
	input = event_object(event);
	if(input.type != 'text') return;
	if(input.value == '') {
		describe_field(input);
	}
}
function oninputclick(event, input) { // input is if we manually need to run this function: onlabelclick
	if(typeof input == 'undefined') input = event_object(event);
	if(!input) return false;
	if(input.type == 'radio') { // boldface the appropriate label, and un-bold others
		labels = input.parentNode.getElementsByTagName('label');
		for (var i = 0; (label = labels[i]); i++) {
			if(input.id == label.htmlFor) {
				label.style.fontWeight = 'bold';
			} else {
				label.style.fontWeight = 'normal';
			}
		}
	}
}
function onlabelclick(event) {
	label = event_object(event);
	input = document.getElementById(label.htmlFor);
	oninputclick(event, input);
}
function describe_field(input) {
	if(input.className.indexOf('never_describe') == -1) {
		input.className = replace_append(input.className, 'describe', 'filled');
		input.value = nicename(input.name);
	}
}
function onsubmitclean(event) {
	event.returnvalue = false;
	if(event.preventDefault) event.preventDefault();

	theform = event_object(event);

	inputs = theform.getElementsByTagName('input');
	ready = 1;
	missing_required = new Array;
	for (var i = 0; (input = inputs[i]); i++) {
		if(input.className.indexOf('required') != -1) {
			if(input.type == 'text' && (input.value == nicename(input.name) || input.value == '')) {
				ready = 0;
				missing_required.push(input.name);
			}
		}
	}

	if(ready == 1) {
		for (var i = 0; (input = inputs[i]); i++) { // clear labels
			if(input.type == 'text' && input.value == nicename(input.name)) {
				input.value = '';
			}
		}
		theform.submit();
		return true;
	} else { // not ready to submit
		if(missing_required.length > 0) { // required fields empty
			missing_text = '';
			for (var i=0; (missing=missing_required[i]); i++) {
				// try to highlight it
				if(document.getElementById('ff_' + missing) != null) {
					document.getElementById('ff_' + missing).className += ' required_alert';
				}

				missing_text += nicename(missing) + "\n";
			}

			alert('Please fill in the following required fields: \n' + missing_text);
		}

		return false;
	}
}


function form_init(id, blur) {
	if(window.location.href.indexOf('firefly') != -1 ) {
		return false;
	}
	theform = document.getElementById(id);
	inputs = theform.getElementsByTagName('input');
	for (var i = 0; (input = inputs[i]); i++) { //
		if(input.type == 'text' && (input.value == '' || input.value == nicename(input.name))) {
			describe_field(input);
		} else if(input.type == 'radio') {
			if(input.checked == true) oninputclick(false, input);
			input.className = 'non_text';
		} else if(input.type == 'checkbox') {
			input.className = 'non_text';
		}
		addEvent(input, 'focus', oninputfocus);
		addEvent(input, 'blur', oninputblur);
		addEvent(input, 'click', oninputclick);

		// optional, additional onblur function

		if(blur != null) {
			addEvent(input, 'blur', blur);
		}

		// autocreate add ids for each TEXT input ff_name -- ?bad?
		if(input.type == 'text') {
			input.id = 'ff_' + input.name;
		}
	}
	labels = theform.getElementsByTagName('label');
	for (var i = 0; (label = labels[i]); i++) {
		addEvent(label, 'click', onlabelclick);
	}
	addEvent(theform, 'submit', onsubmitclean);

}

