var debug = false;
var filenameAllowedChars = 'abcdefghijklmnopqrstuvwxyz0123456789_\.\-';
var fnbc = new Array(' ','~','`','!','@','#','\$','%','\^','&','*','(',')',
  '\"','\'',':',';','?','\/','\\','>','<', ',');
var fnrc = new Array('-','','','','','','','','','','','','',
  '','','','','','','','','','');


function checkKeypress(field)
{

}

function urlEnter(field)
{
  if (field.value == '')
  {
    field.value = 'http://www.'; 
  }
  return;}
function urlExit(field)
{
  if (field.value == 'http://www.')
  {
    field.value = ''; 
  }
  return;}

function confirmDelete(form, action, message)
{
	var msg = "Are you sure you want to permanently delete " + message + "?";
  if (confirm(msg))
  {
	  form.action = action;
	  return true; 
  }	
  return false;
}


function validateFileNameInput(field)
{
  var val = field.value;
  if (! validateFileName(val))
  {
    alert('Valid filenames contain only characters, digits, dashes, underscores and periods');
    for (var i = 0; i < fnbc.length; i++)
    { 
      res = val.indexOf(fnbc[i]);
      while ( res != -1 )
      { 
        val = val.replace(fnbc[i], fnrc[i]); 
        res = val.indexOf(fnbc[i]);
      }
    }
    field.value = val;
    field.focus();
    return false;
  }
  return true;
}

function validateFileName(val)
{
  
  // do a regex ^ match for allowed chars (case-insensitive)
  var regex = new RegExp('[^' + filenameAllowedChars + ']', 'i');
  var res = regex.test(val);  return(!res); 
} 


function validateMediaForm(form)
{
  var ok = true;
  if (debug)
  { return true; }

  
  // check for required fields
  var rf = new Array();
  rf[0] = form.name;
  rf[1] = form.url;
  rf[2] = form.mediaFile;
  
  var rm = new Array();
  rm[0] = 'Display Name';
  rm[1] = 'File Name';
  rm[2] = 'File to Upload';
  
  var len = rf.length;
  for (var i = 0; i < len; i++)
  {
    field = rf[i];
    if (field.value == '')
    {
      alert ('Please enter your ' + rm[i]);
      rf[i].focus();
      return false;
    }
  }
    
  return ok;
}


function doKeywords(list, field)
{
  buf = '';
  len = list.length;
  for (var i = 0; i < len; i++)
  {
    if (buf.length > 0) { buf += ','; }
    buf += list.options[i].value;
  }
  field.value = buf;
  return true;}


function addKeywords(fromname, toname)
{
  fromlist = eval('document.forms[0].' + fromname);
  tolist = eval('document.forms[0].' + toname);
  
  if (fromlist.selectedIndex == -1) // nada
  { 
    alert('Please select a keyword to add it'); 
    return true; 
  }
  
  fromlen = fromlist.length;
  
  for (var i = 0; i < fromlen; i++) 
  {
    if (fromlist.options[i].selected)
    {
      f = fromlist.options[i];
      f.selected = false;
      if (checkDupeOption(f, tolist))
      {
        o = new Option(f.text, f.value, false, false) ;
        tolist.add(o, null);
      }
    }
  }
  
  //tolist.selectedIndex = -1;
  //fromlist.selectedIndex = -1;
  
  return true;
}

function checkDupeOption(opt, list)
{
  len = list.length;
  
  for (var i = 0; i < len; i++) 
  {
    topt = list.options[i];
    if (topt.text == opt.text)
    { return false; }
  }
  return true;}

function removeKeywords(fromname)
{
  fromlist = eval('document.forms[0].' + fromname);
  
  if (fromlist.selectedIndex == -1) // nada
  { 
    alert('Please select a keyword to remove it'); 
    return true; 
  }
  
  fromlen = fromlist.length;
  
  for (var i = 0; i < fromlen; i++) 
  {
    if (fromlist.options[i].selected)
    {
      fromlist.options[i].selected = false;
      fromlist.remove(i);
    }
  }
  fromlist.selectedIndex = -1;  
  return true;
}


function validateActionForm(form)
{
  // deal with the keywords
  doKeywords(form.keywords, form.selectedKeywords);
  
  var ok = true;
  if (debug)
  { return true; }
  //return ok;
  
  // check for required fields
  var rf = new Array();
  //rf[0] = form.title;
  rf[0] = form.body;
  
  var rm = new Array();
  //rm[0] = 'Title';
  rm[0] = 'Body Text';
  
  var len = rf.length;
  for (var i = 0; i < len; i++)
  {
    field = rf[i];
    if (field.value == '')
    {
      alert ('Please enter the ' + rm[i]);
      rf[i].focus();
      return false;
    }
  }  
  
  return ok;
}

function validateDigits(field, name, numDigits, lessOK)
{
  if (debug)
  { return true; }

  if (field.value == '') { return true; }
  
  if (! lessOK) { lessOK = false; } else { lessOK = true; }
  var val = field.value;
  var len = val.length;
  
  if (! isInt(val)) 
  {
    alert('The ' + name + ' must be numeric'); 
    field.focus();
    //field.select();
    return false;
  }
  
  if (len > numDigits)
  {
    alert('The ' + name + ' cannot be more than ' + numDigits + ' numeric digits'); 
    field.focus();
    //field.select();
    return false;
  }

  if (! lessOK && len != numDigits)
  {
    alert('The ' + name + ' must be exactly ' + numDigits + ' numeric digits'); 
    field.focus();
    //field.select();
    return false;
  }

  return true;
}


function isInt(value)
{
/*
  if (parseInt(value) != value)
  { return false; }
  else
  { return true; }
*/
  var validChars = "0123456789";
  var ok = true;
  var c;

 
  for (i = 0; i < value.length && ok == true; i++) 
  { 
    c = value.charAt(i); 
    if (validChars.indexOf(c) == -1) 
    { ok = false; }
  }
  return ok; 
}



function changeClass(newclass, item)
{
  item.className = newclass;	
}


function selectDefault(action)
{
  switch (action)
  {
    case 'loginForm':
    case 'login':
      document.login.username.focus();
      document.login.username.select();
      break;
    case 'actionDetail':
      document.forms[0].actionTypeId.focus(); 
      break;
    case 'viewdistro':
      document.forms[0].categoryId.focus(); 
      break;
      
    default:
      if (document.forms.length == 0)
      { break; }
      el = document.forms[0].elements.length;
      for (var i = 0; i < el; i++)
      {
        if (document.forms[0].elements[i].type != "hidden")
        {
          document.forms[0].elements[i].focus();
          document.forms[0].elements[i].select();
          break;
        }
      }
  }    
  return;
}



function helpWindow(url)
{
  popupWin(url, 'help', 400, 550, 'yes');
}

function lookupWindow(url)
{
  popupWin(url, 'shithead', 400, 350, 'yes');
}

function footnotesWindow(url)
{
  popupWin(url, 'shithead', 450, 550, 'yes');
}

function journalCoverWindow(url)
{
  popupWin(url, 'shithead', 450, 350);
}


var popwin;
function popupWin(url, name, h, w, scroll, resize, utils) 
{
  var msg = '\nUSAGE: popupWin(<url>, <name>, <height>, <width>[, <scroll>, <resize>, <utils>])';
  
  // check for required params
  if (url == null || url == "")
  {
    alert("You must pass in a URL" + msg);
    return;
  }
  if (name == null || name == "")
  {
    alert("You must pass in a window name" + msg);
    return;
  }
  if (h == null || h == "")
  {
    alert("You must pass in a window height" + msg);
    return;
  }
  if (w == null || w == "")
  {
    alert("You must pass in a window width" + msg);
    return;
  }
 
  // set screen size/position
  var winl = (screen.width - w) / 2;
  var wint = (screen.height - h) / 2;
  var opts = 'height='+h+',width='+w+',top='+wint+',left='+winl;
  
  // if utils passed in, set a bunch of options
  if (utils != null && (utils == "yes" || utils == "true" || utils == "on" || utils == "1"))
  {
    opts += ",location=yes,menubar=yes,statusbar=yes,status=yes";
  }
  else
  {
    opts += ",location=no,menubar=no,statusbar=no,status=no";
  }
  
  // scroll and resize are optional
  if (scroll != null && (scroll == "yes" || scroll == "true" || scroll == "on" || scroll == "1"))
  {
    opts += ",scrollbars=yes";
  }
  else
  {
    opts += ",scrollbars=no";
  }
  if (resize != null && (resize == "yes" || resize == "true" || resize == "on" || resize == "1"))
  {
    opts += ",resizable=yes";
  }
  else
  {
    opts += ",resizable=no";
  }
 
  popwin = window.open(url,name,opts);
  if (parseInt(navigator.appVersion) >= 4)
  { popwin.focus(); }
}



function handlePopupKeywords(form)
{
  re = new RegExp('_', 'g');
  buf = '';
  ilen = form.elements.length;
  for (var i = 0; i < ilen; i++)
  {
    e = form.elements[i];
    if (e.type == 'button')
    { continue; }
    if (e.type == 'checkbox' && e.checked)
    {
      value = e.value.replace(re, ' ');
      if (buf.length > 0)
      { buf += ', '; }
      buf += value;
    }
  }
  target = window.opener.document.searchbox.kw;
  if (target.value.length > 0)
  { target.value += ', '; }
  target.value += buf;
  window.close();
  return;
}

function showitem(id)
{
  document.getElementById(id).style.visibility="visible";
}
function hideitem(id)
{
  document.getElementById(id).style.visibility="hidden";
}

function setContent(id, val)
{
  elem = document.getElementById(id);
  elem.style.visibility = "hidden";
  elem.style.content = val;
  elem.style.visibility = "visible";
}


function setImageNames(form)
{
  title = form.title.value;
  lcTitle = title.toLowerCase();
  res = lcTitle.indexOf(' ');
  while ( res != -1 )
  { 
    lcTitle = lcTitle.replace(' ', '-'); 
    res = lcTitle.indexOf(' ');
  }
  imgSmall = 'images/artwork/' + lcTitle + '-small.jpg';
  imgLarge = 'images/artwork/' + lcTitle + '.jpg';
  if (form.imgSmall.value.length == 0)
  { form.imgSmall.value = imgSmall; }
  if (form.imgLarge.value.length == 0)
  { form.imgLarge.value = imgLarge; }
  return;
}
