/* library.js */

function ListFindNoCase(list, value)
{
  var returnValue = -1;
  var i = 0;
  var delimiter = ',';
  var _tempArray = new Array();
  if(ListFindNoCase.arguments.length == 3) delimiter = ListFindNoCase.arguments[2];
  list = list.toLowerCase();
  value = value.toLowerCase();
  _tempArray = list.split(delimiter);
  for(i = 0; i < _tempArray.length; i++)
  {
    if(_tempArray[i] == value)
    {
      returnValue = i;
      break;
    }
  }
  return returnValue;
};

function toggleDisabled(oForm, bDisabled)
{
  if(toggleDisabled.arguments.length < 3) return;
  for(var i = 2; i < toggleDisabled.arguments.length; i++)
  {
    element = oForm.elements[toggleDisabled.arguments[i]];
    if(element)
    {
      if(typeof element.length != 'undefined' && element.length > 0 && typeof element[0].type != 'undefined' && ListFindNoCase('checkbox,radio', element[0].type) != -1)
      {
        for(var j = 0; j < element.length; j++)
          element[j].disabled = bDisabled;
      }
      else
      {
        element.disabled = bDisabled;
        if(ListFindNoCase('input,textarea,select', element.tagName) != -1)
        {
          if(ListFindNoCase('checkbox,radio,button,submit,reset', element.type) == -1)
          {
            if(!element.enabledClass && !element.disabled) element.enabledClass = element.className;
            if(!element.disabledClass && element.disabled) element.disabledClass = element.className;
            element.className = (bDisabled) ? element.disabledClass : element.enabledClass;
            if(element.type.toLowerCase() == 'file' && element.reset)
              element.reset();
          }
          if(element.type.toLowerCase() == 'select-one')
          {
            if(bDisabled)
            {
              if(element.selectedIndex != -1)
                element.defaultSelected = element.selectedIndex;
              element.selectedIndex = -1;
            }
            else
            {
              if(typeof element.defaultSelected != 'undefined')
                element.selectedIndex = element.defaultSelected;
              element.defaultSelected = element.selectedIndex;
            }
          }
        }
      }
    }
  }
//  if(!bDisabled && ListFindNoCase('text,password,textarea,checkbox,radio,select-one,select-multiple,submit,reset,button', form.elements[toggleDisabled.arguments[2]].type) != -1) form.elements[toggleDisabled.arguments[2]].focus();
}

/* toggle_displayed.js */

var toggledDisplay = new Object();

function toggleDisplayed(bDisplayed)
{
  if(!document.getElementById || toggleDisplayed.arguments.length < 2) return;
  var displayed = new Object();
      displayed['true'] = '';
      displayed['false'] = 'none';
  for(var i = 1; i < toggleDisplayed.arguments.length; i++)
  {
    oDisplay = document.getElementById(toggleDisplayed.arguments[i]);
    if(oDisplay)
    {
      oDisplay.style.display = displayed[bDisplayed];
      if(typeof toggledDisplay[toggleDisplayed.arguments[i]] != 'undefined')
        toggledDisplay[toggleDisplayed.arguments[i]] = !bDisplayed;
    }
  }
}

function newWindow(href, target, width, height)
{
  var returnValue = false;
  var features = (width != null && height != null) ? ((arguments.length == 4) ? 'scrollbars,status,width=' + width + ',height=' + height : ((arguments[4]) ? arguments[4] + ',width=' + width + ',height=' + height : 'width=' + width + ',height=' + height)) : ((arguments.length > 4) ? arguments[4] : null);
  if(width != null && height != null && window.screen)
  {
    var pxLeft = ((screen.availWidth - width - 10) * .5);
    var pxTop = ((screen.availHeight - height - 30) * .5);
    features += ',left=' + pxLeft + ',top=' + pxTop + ',x=' + pxLeft + ',y=' + pxTop;
  }
  if(!window.open)
    returnValue = true;
  else
  {
    if(features != null)
      self[target + 'Win'] = window.open(href, target, features);
    else
      self[target + 'Win'] = window.open(href, target);
    if(!self[target + 'Win'])
      alert('You appear to be using pop-up blocking software.\n\nYou are trying to use a feature of this site that uses a pop-up window.\n\nPlease disable your pop-up blocker or enable pop-ups for this site.');
    else if(self[target + 'Win'].focus)
      self[target + 'Win'].focus();
  }
  return returnValue;
}

function sentenceList(list, concatenator)
{
  var returnValue = list;
  var delimiter = ',';
  var _tempArray = new Array();
  if(sentenceList.arguments.length == 3) delimiter = sentenceList.arguments[2];
  _tempArray = list.split(delimiter);
  if(_tempArray.length)
    returnValue = _tempArray[0];
  for(var i = 1; i < _tempArray.length - 1; i++)
    returnValue += ', ' + _tempArray[i];
  if(_tempArray.length > 2)
    returnValue += ',';
  if(_tempArray.length > 1)
    returnValue += ' ' + concatenator + ' ' + _tempArray[_tempArray.length - 1];
  return returnValue;
};

function getFirstChild(oElement)
{
  var returnValue = null;
  for(var i = 0; i < oElement.childNodes.length; i++)
  {
    if(oElement.childNodes[i].nodeType == 1)
    {
      returnValue = oElement.childNodes[i];
      break;
    }
  }
  return returnValue;
};

function addError(oElement, sError)
{
  var firstChild = getFirstChild(oElement.parentNode);
  var oError = (firstChild.tagName.toLowerCase() == 'p') ? firstChild : null;
  if(!oError)
  {
    oError = document.createElement('P');
      oError.className = 'error';
    oElement.parentNode.insertBefore(oError, firstChild);
  }
  oError.innerHTML = sError;
  if(!Element.hasClassName(oElement.parentNode, 'error'))
    Element.addClassName(oElement.parentNode, 'error');
}

function removeError(oElement)
{
  var firstChild = getFirstChild(oElement.parentNode);
console.log(firstChild);
  var oError = (firstChild.tagName.toLowerCase() == 'p') ? firstChild : null;
  if(oError)
  {
    if(oError.removeNode)
      oError.removeNode(true);
    else if(oError.parentNode.removeChild)
      oError.parentNode.removeChild(firstChild);
    Element.removeClassName(oElement.parentNode, 'error');
  }
}

var acceptTypes = {};

function validateInput(oElement, role)
{
	var returnValue = true;
	var filePath, fileName, fileExt;
	if(oElement.value)
	{
		filePath = (oElement.value.indexOf('/')) ? oElement.value.split('/') : oElement.value.split('\\');
		fileName = filePath[filePath.length - 1].split('.');
		fileExt = fileName[fileName.length - 1].toLowerCase();
		if(acceptTypes[role].indexOf(fileExt) == -1)
		{
			addError(oElement, 'Files may only be of type: ' + sentenceList(acceptTypes[role].join(','), ' or '));
			returnValue = false;
		}
    else if(fileName.indexOf('\\') != -1 || fileName.indexOf('/') != -1 || fileName.indexOf(':') != -1 || fileName.indexOf('*') != -1 || fileName.indexOf('?') != -1 || fileName.indexOf('"') != -1 || fileName.indexOf('<') != -1 || fileName.indexOf('>') != -1 || fileName.indexOf('|') != -1)
    {
			addError(oElement, 'A filename cannot contain any of the following characters: \ / : * ? " < > |');
			returnValue = false;
    }
		else
			removeError(oElement);
	}
	else
		removeError(oElement);
	return returnValue;
}
