function switchRow(row, dir)
{
  var tbl = row.parentNode;
  var cnt = tbl.rows.length;
  var tArray = new Array();
   
  for (i = 0; i < cnt; i++)
  {
    if (row == tbl.rows[i])
    {
      if (dir.toLowerCase() == "down")
      {
        if (i < cnt - 1)
        {
          tArray.push(tbl.removeChild(tbl.rows[i + 1]));
          tArray.push(tbl.removeChild(row));
          for (j = i; j < cnt - 2; j++)
            tArray.push(tbl.removeChild(tbl.rows[i]));
          for (j = i; j < cnt; j++)
            tbl.appendChild(tArray[j - i]);
          return true;
        }
      }
      else
      {
        if (i > 0)
        {
          tArray.push(tbl.removeChild(row));
          for (j = i - 1; j < cnt - 1; j++)
            tArray.push(tbl.removeChild(tbl.rows[i - 1]));
          for (j = i - 1; j < cnt; j++)
            tbl.appendChild(tArray[j - i + 1]);
          return true;
        }
      }
      break;
    }
  }
  return false;
}

function editField(prompt, fld, req, datatype)
{
  if (!edit(prompt, fld.value, req, datatype))
  {
    try
    {
      fld.focus();
      fld.select();
    }
    catch (e) 
    { }
    return false;
  }
  else
    return true;
}

function edit(prompt, inStr, req, datatype)
{
  var bSts = true;
  if (req == "Y" && inStr == "")
  {
    alert("'" + prompt + "' field is required.");
    return false;
  }
  if (req != "Y" && inStr == "")
    return true;

  switch (datatype)
  {
    case "MONEY":
      bSts = editMoney(inStr);
      break;
    case "DATE":
      bSts = editDate(inStr);
      break;
    case "TIME":
      bSts = editTime(inStr);
      break;
    case "INT":
      bSts = editInt(inStr);
      break;
    case "PHONE":
      bSts = editPhone(inStr);
      break;
    case "TEXT":
    default:
      break;
  }

  if (!bSts)
    alert("Value entered for '" + prompt + "' field is not valid " + datatype + ".");

  return bSts;
}

function editPhone(inStr)
{
  var bSts = true;
  var str = new String(inStr);
  var pieces = inStr.split("-");

  if (pieces.length == 1)
  {
    if (pieces[0].length != 10 || NaN(pieces[0]))
      bSts = false;
  }
  else if (pieces.length == 3)
  {
    if (pieces[0].length != 3 || pieces[1].length != 3 || pieces[2].length != 4 || 
        NaN(pieces[0]) || NaN(pieces[1]) || NaN(pieces[2]))
      bSts = false;
  }
  else
    bSts = false;

  return bSts;
}

function editExtension(filename, validList)
{
  var pieces = filename.split(".");
  var extension = pieces[pieces.length - 1].toLowerCase();
  for (i = 0; i < validList.length; i++)
  {
    if (extension == validList[i])
      return true;
  }
  return false;
}

function editDate(inStr)
{
  var str = new String(inStr);
  var pieces = inStr.split("-");
  if (pieces.length != 3)
  {
    pieces = inStr.split("/");
    if (pieces.length != 3)
      return false;
  }

  if (pieces[0].length > 2)
  {
    year = pieces[0];
    mon = pieces[1];
    day = pieces[2];
  }
  else
  {
    mon = pieces[0];
    day = pieces[1];
    year = pieces[2];
  }

  if (isNaN(mon) || isNaN(day) || isNaN(year))
    return false;

  d = new Date();
  d.setDate(1);
  d.setYear(year);
  d.setMonth(mon - 1);
  d.setDate(day);

  if ((d.getYear() != year && d.getFullYear() != year) || d.getMonth() + 1 != mon || d.getDate() != day)
    return false;

  return true;
}

function editMoney(inStr)
{
  if (inStr == "")
    return true;
  var str = new String(inStr);
  if (str.substr(0, 1) == "$")
    str = str.substr(1);
  if (isNaN(str))
    return false;

  return true;
}

function editInt(inStr)
{
  if (isNaN(inStr))
    return false;

  if (isNaN(parseInt(inStr, 10)))
    return false;

  return true;
}

function editTime(inStr)
{
  var str = new String(inStr);
  var ampm = "";
  var hour = 0;
  var minutes = 0;
  var pos;

  str = str.toUpperCase();
  if ((pos = str.indexOf("A")) < 0)
    pos = str.indexOf("P");
  if (pos >= 0)
  {
    ampm = str.substr(pos, 1);
    str = str.substr(0, pos);
  }

  pieces = str.split(":");
  if (pieces.length > 2)
    return false;
  if (isNaN(pieces[0]))
    return false;
  hour = parseInt(pieces[0], 10);
  if (pieces.length == 2)
  {
    if (isNaN(pieces[1]))
      return false;
    minutes = parseInt(pieces[1], 10);
  }
  if (ampm == "")
  {
    if (hour < 0 || hour > 24)
      return false;
    if (hour == 24 && minutes > 0)
      return false;
  }
  else
  {
    if (hour < 1 || hour > 12)
      return false;
  }
  if (minutes < 0 || minutes > 59)
    return false;

  return true;
}

//--------------------


var dirtyDivs = new Array();

   function StrTrim(str)
   {
     var pieces = str.split(" ");
     for (var i = 0; i < pieces.length; i++)
       if (pieces[i] != "")
         return pieces[i];
     return new String("");
   }

   function InArray(value, array)
   {
     for (var i = 0; i < array.length; i++)
     {
       if (value == array[i])
         return true;
     }
     return false;
   }

   function EditTag(tag)
   {
     var allowables = new Array("STRONG", "/STRONG", "B", "/B", "I", "/I", "EM", "/EM", "U", "/U", "BR", "P", "/P");
     var pieces = StrTrim(tag).split(" ");

     if (InArray(pieces[0].toUpperCase(), allowables))
       return "<" + pieces[0] + ">";
     else
       return "";
   }

   function ReplaceSpecialChar(inChar, outChar, str)
   {
     var pieces = str.split(String.fromCharCode(inChar));
     str = pieces[0];
     for (var i = 1; i < pieces.length; i++)
       str += outChar + pieces[i];
     return str;
   }

   function Scrub(dirty)
   {
     var text = new Array();
     var tags = new Array();

     // Get rid of CR and LF characters.
     var str = new String(dirty);
     var pieces = str.split('\n');
     str = "";
     for (var i = 0; i < pieces.length; i++)
       str += pieces[i];
     pieces = str.split('\r');
     str = "";
     for (var i = 0; i < pieces.length; i++)
       str += pieces[i];

     // Translate special characters that do not display well in some browsers.
     str = ReplaceSpecialChar(8211, '-', str);
     str = ReplaceSpecialChar(8216, '\'', str);
     str = ReplaceSpecialChar(8217, '\'', str);

     // Get rid of any <SCRIPT>
     var temp = str.toUpperCase();
     pieces = temp.split('<SCRIPT');
     if (pieces.length > 1)
     {
       var pos = 0;
       var newStr = str.substr(pos, pieces[0].length);
       pos += pieces[0].length;
       for (var i = 1; i < pieces.length; i++)
       {
         pieces2 = pieces[i].split('</SCRIPT');
         for (var j = 0; j < pieces2.length - 1; j++)
         {
           pos += pieces2[j].length + 7;
         }
         if (j > 0)
         {
           newStr += str.substr(pos, pieces2[j].length + 8);
           pos += pieces2[j].length + 8;
         }
       }
       str = newStr;
     }

     // Split into text and tag arrays.
     pieces = str.split('<');
     text.push(pieces[0]);

     for (var i = 1; i < pieces.length; i++)
     {
       pieces2 = pieces[i].split('>');
       if (pieces2.length == 2)
       {
         tags.push(EditTag(pieces2[0]));
         text.push(pieces2[1]);
       }
       else
         alert("Problem: '" + pieces[i] + "'")
     }

     str = "";
     for (i = 0; i < text.length - 1; i++)
     {
       str += text[i];
       str += tags[i];
     }
     str += text[i];

//     alert("str='" + str + "'");
     return str;
   }

   function Save()
   {
     alert(artifact_description_ID.innerHTML);
     var str = Scrub(artifact_description_ID.innerHTML);
     alert(str);
     artifact_description_ID.innerHTML = str;
     f.artifact_description.value = str;
   }

   function Pasted(src)
   {
     dirtyDivs.push(src);
     setTimeout('TimerPop()', 0);
     event.returnValue = true;
   }

   function TimerPop()
   {
     var el = null;
     while (dirtyDivs.length > 0)
     {
       el = document.getElementById(dirtyDivs.pop());
       el.innerHTML = Scrub(el.innerHTML);
     }
   }


