// GENERAL CLASS SWAPPERS
function swapThis(obj, newClass) {
    obj.className = newClass;
}

function swapThat(obj_id, newClass) {          // Netscape Compatible
	var thingie=document.getElementById(obj_id);
	thingie.className=newClass;
}

function appendThis(obj, addedClass) {
	obj.className += addedClass;
}

function unappendThis(obj, unaddedClass) {
	obj.className = obj.className.replace(new RegExp(unaddedClass), "");
}

function appendThat(obj_id, addedClass) {
	var thingie = document.getElementById(obj_id);
	thingie.className += addedClass;
}

function unappendThat(obj_id, unaddedClass) {
	var thingie = document.getElementById(obj_id);
	thingie.className = thingie.className.replace(new RegExp(unaddedClass), "");
}

function toggle(obj_id, disp) {
	var obj = document.getElementById(obj_id);
	if (disp!='' && disp!=null) {obj.style.display=disp;}
	else if (obj.style.display=='block') {obj.style.display='none';}
	else {obj.style.display='block';}
}

function toggleVis(obj_id, vis) {
	var obj = document.getElementById(obj_id);
	if (vis!='' && vis!=null) {obj.style.visibility=vis;}
	else if (obj.style.visibility=='visible') {obj.style.visibility='hidden';}
	else {obj.style.visibility='visible';}
}

// TODO - duplicates toggle() so callers can be inlined
function toggleThat(obj_id, disp) {
	toggle(obj_id, disp);
}

function lslidehover(me) {
	if (me.className == 'slideR3loff') {
	me.className = 'slideR3loffOver';}
	else me.className = 'slideR3lonOver';
}

function lslideoff(me) {
	if (me.className == 'slideR3loffOver') {
	me.className = 'slideR3loff';}
	else me.className = 'slideR3lon';
}

function lslideclick(me) {
	if (me.className == 'slideR3loffOver') {
	me.className = 'slideR3lonOver';}
	else me.className  = 'slideR3loffOver';
}

// FORM-SPECIFIC CLASS SWAPPERS
function hoverField(me)  {
    if (me.className != 'formInputFieldSelected') {
        if (me.className == 'formInputField') me.className='formInputFieldHover';
        else me.className = 'formInputFieldFilledHover';
    }
}

function hoverOffField(me)  {
    if (me.className != 'formInputFieldSelected') {
        if (me.className == 'formInputFieldHover') me.className='formInputField';
        else me.className = 'formInputFieldFilled';
    }
}

function focusField(me) {
    me.className = 'formInputFieldSelected';
}

function blurField(me) {
    me.className = 'formInputField';
}

// MACROMEDIA FUNCTIONS
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_goToURL() { //v3.0
  var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
  for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

// this function determines whether the event is the equivalent of the microsoft
// mouseleave or mouseenter events. eliminates firefox flicker onmouseover and onmouseout
// caused by bubbling up of events to/from child objects.
// copied from http://dynamic-tools.net/toolbox/isMouseLeaveOrEnter/
function isMouseLeaveOrEnter(e, handler) {
	if (document.getElementById('dummy')) document.getElementById('dummy').value = e.type;

	if (e.type != 'mouseout' && e.type != 'mouseover') return false;

	var reltg = e.relatedTarget ? e.relatedTarget : e.type == 'mouseout' ? e.toElement : e.fromElement;
	while (reltg && reltg != handler) reltg = reltg.parentNode;
	return (reltg != handler);
}

// generic form functions
function isEnter(event) {
	var keycode;
	if(window.event)
		keycode = window.event.keyCode;
	else if(event)
		keycode = event.which;
	else
		return false;

	return keycode == 13;
}

function submitOnEnter(field, event) {
	if(!isEnter(event))
		return true;

	field.form.submit();
	return false;
}

function limitCharacters(field, maxlen) {
	if (field.value.length > maxlen) {
		field.value = field.value.substring(0, maxlen);
	}
}

function selectCheckboxById(id){
	document.getElementById(id).checked = 'true';
}

function highlightElement(elementId) {
	element = document.getElementById(elementId);
	element.focus();
	element.select();
}

function submitForm(formName, submitButtonValue) {
	document.forms[formName].submit_button.value=submitButtonValue;
	document.forms[formName].submit();
}

function toggleSelectFields(direction) {
	var selectFields = document.getElementsByTagName("select");
	var newVis = direction == 'hidden' ? 'hidden' : 'visible';

	for (i = 0; i < selectFields.length; i++) {
		selectFields[i].style.visibility = newVis;
	}
}
