/**********************************************************************************************/
// getElementsByAnything
// http://www.getelementsby.com/

function getElementsByAnything(){var elements=new Array();for(var i=0,len=arguments.length;i<len;i++){var element=arguments[i];if(typeof element=='string'){var matched=document.getElementById(element);if(matched){elements.push(matched)}else{var allels=(document.all)?document.all:document.getElementsByTagName('*');var regexp=new RegExp('(^| )'+element+'( |$)');for(var i=0,len=allels.length;i<len;i++)if(regexp.test(allels[i].className))elements.push(allels[i])}if(!elements.length)elements=document.getElementsByTagName(element);if(!elements.length){elements=new Array();var allels=(document.all)?document.all:document.getElementsByTagName('*');for(var i=0,len=allels.length;i<len;i++)if(allels[i].getAttribute(element))elements.push(allels[i])}if(!elements.length){var allels=(document.all)?document.all:document.getElementsByTagName('*');for(var i=0,len=allels.length;i<len;i++)if(allels[i].attributes)for(var j=0,lenn=allels[i].attributes.length;j<lenn;j++)if(allels[i].attributes[j].specified)if(allels[i].attributes[j].nodeValue==element)elements.push(allels[i])}}else{elements.push(element)}}if(elements.length==1){return elements[0]}else{return elements}}
// end of getElementsByAnything()
/**********************************************************************************************/

/**********************************************************************************************/
function submitSelectOnEnterKey(formidobj,submitidobj)
{
	// initialize gotform as the form element
	if (!document.getElementById(formidobj)) return false;
	var gotform = document.getElementById(formidobj);

	// initialize gotselects as all the select elements within gotform
	if (!gotform.getElementsByTagName("select")) return false;
	var gotselects = gotform.getElementsByTagName("select");

	// initialize gotsubmit as what submits the form
	if (!document.getElementById(submitidobj)) return false;
	var gotsubmit = document.getElementById(submitidobj);

	for (var i=0;i<gotselects.length;i++)
	{
		gotselects[i].onkeypress = function onEnterpress(e)
		{
			//define any varible
			var KeyPress;

			//if which property of event object is supported
			if(e && e.which)
			{
				e = e;

				//character code is contained in NN4's which property
				KeyPress = e.which;
			}
			else
			{
				e = event;

				KeyPress = e.keyCode;
			}

			//13 is the key code of enter key
			if(KeyPress == 13)
			{
				gotform.submit();

				return false;
			}
			else
			{
				return true;
			}
		}
	}
}
// end of submitSelectOnEnterKey()
/**********************************************************************************************/

/**********************************************************************************************/
// pass it something, check if is valid element or if it is id to get element, returns element if found. Sanity check for functions and if you use this function 20 times through all your functions calls to get the same element you only do 1 DOM traverse by using whatever it returns
function get_element(thing)
{
	if (typeof(thing) == 'undefined' || !thing)
	{
		return null;
	}
	else if (typeof(thing.tagName) == 'undefined' || !thing.tagName)
	{
		if (document.all)
		el = document.getElementById(thing) ? document.getElementById(thing) : document.all[thing];
	else
		el = document.getElementById(thing);

		if (el)
			return el;
		else
			return null;
	}
	else if (thing.tagName)
	{
		return thing;
	}
	else
	{
		return null;
	}
} // end of get_element()
/**********************************************************************************************/

/**
Checks if an element has a class
@param  el              element to check. Can be the id or the actual element
@param  searched_class  class to checked

@return boolean
**/
function has_class(el, searched_class)
{
  if (typeof(searched_class) == 'undefined')
    return false;

  // check valid parameter
 el = get_element(el);

  if (!el)
    return false;

  var class_array = el.className.split(' ');

  for(var i in class_array)
  {
    if (class_array[i] == searched_class)
      return true;
  }
  return false;
}

/**
Adds a class to an element
@param  el            element whose class to add. Can be the id or the actual element
@param  add_class     class to be added

@return nothing
**/
function add_class(el, added_class)
{
  if (typeof(added_class) == 'undefined')
    return false;

  // check valid parameter
  el = get_element(el);

  // if element doesn't exist, or class already there, or no class to add
  if (!el || has_class(el, added_class))
      return false;

  el.className = el.className + ' ' + added_class;

  return true;
}

/**
Removes a class from an element
@param  el            element whose class to remove. Can be the id or the actual element
@param  remove_class  class to be removed

@return nothing
**/
function remove_class(el, removed_class)
{
  if (typeof(removed_class) == 'undefined')
    return false;

  // check valid parameter
  el = get_element(el);

  // if element doesn't exist, or class not there, or no class to remove
  if (!el)
    return false;

  var class_array = el.className.split(' ');
  var class_changed = false;

  for (var i in class_array)
  {
    if (class_array[i] == removed_class)
    {
      // delete removed_class
      class_array.splice(i, 1);
      class_changed = true;
    }
  }

  if (class_changed)
    el.className = class_array.join(' ');

  return class_changed;
}

/**
Changes class of element
@param  el            element whose class to toggle. Can be the id or the actual element
@param  add_class     class to be added
@param  remove_class  clas to be removed

@return nothing
**/
// function toggle_class(el, added_class, removed_class)
// {
//   if (added_class)
//     add_class(el, added_class);
//
//   if (removed_class)
//     remove_class(el, removed_class);
// }

// new function to be tested
function toggle_class(el, added_class, removed_class)
{
  // check if adding
  add = false;
  if (typeof(added_class) != 'undefined' && added_class)
    add = true;

  // check if removing
  remove = false;
  if (typeof(removed_class) != 'undefined' && removed_class)
    remove = true;

  // if not adding or removing return
  if (!add && !remove )
    return false;

  el = get_element(el);

  // if element doesn't exist
  if (!el)
    return false;

  var class_array = el.className.split(' ');
  var class_changed = false;

  for (var i in class_array)
  {
    if (remove && class_array[i] == removed_class)
    {
      // delete removed_class
      class_array.splice(i, 1);
      class_changed = true;
    }

    if (add && class_array[i] == added_class)
      add = false;
  }

  if (add)
  {
    class_array[class_array.length] = added_class;
    class_changed = true;
  }

  if (class_changed)
    el.className = class_array.join(' ');

  return class_changed;
}

// sets or resets a box on focus/blur
function handle_edit_box(box, default_value, focused, disabledclass)
{
  var box = get_element(box);

  if (!box) return false;

    // old and busted
    //var val = trim(box.value).toLowerCase();

    // new hotness
	//var val = box.value.trim().toLowerCase();
	var val = box.value;
	val = val.toLowerCase();

	var def_val = default_value.toLowerCase();

  // if focused and non-default, value and black
  // if non-focused and non-default, value and black
  if (val !== def_val && val !== '')
  {
    remove_class(box, disabledclass);
    box.style.color='#000';
    return;
  }

  // if focused and default value, blank and black
  if (focused && (val === def_val || val === ''))
  {
    box.style.color = '#000';
    remove_class(box, disabledclass);
    box.value = '';
    return;
  }

  // if non-focused and default value, default and gray
  if (!focused)
  {
    if (val === def_val || val === '')
    {
      box.style.color = '#999';
      add_class(box, disabledclass);
      box.value = default_value;
    }
    else
    {
      box.style.color = '#000';
      remove_class(box, disabledclass);
    }
    return;
  }
}
/**********************************************************************************************/

/**********************************************************************************************/
function doclearInput(inputobj,stringobj,classobj)
{
	// initialize input element
	if (!get_element(inputobj)) return false;
	var gotinput = get_element(inputobj);

	gotinput.onfocus = function()
	{
		handle_edit_box(gotinput,stringobj,true,classobj);
	}
}
// end of doclearInput()
/**********************************************************************************************/

/**********************************************************************************************/
function doresetInput(inputobj,stringobj,classobj)
{
	// initialize input element
	if (!get_element(inputobj)) return false;
	var gotinput = get_element(inputobj);

	gotinput.onblur = function()
	{
		handle_edit_box(gotinput,stringobj,false,classobj);
	}
}
// end of doresetInput()
/**********************************************************************************************/

/**********************************************************************************************/
function doHideShowAdvancedSearch(elementobj)
{
	// initialize input element
	if (!document.getElementById(elementobj)) return false;
	var gotelement = document.getElementById(elementobj);

	gotelement.onclick = function()
	{
		HideShowAdvancedSearch('advanced_search_controls');
	}
}
// end of doHideShowAdvancedSearch()
/**********************************************************************************************/

/**********************************************************************************************/
function doclearJSFields(formidobj)
{
	// initialize form element
	if (!document.getElementById(formidobj)) return false;
	var gotform = document.getElementById(formidobj);

	gotform.onsubmit = function()
	{
		clearJSFields();
	}
}
// end of doclearJSFields()
/**********************************************************************************************/

