/*
  Dog Biscuit's "Yes & Led Zeppelin Trading Pages"
  Search form script
  Rev. 1.023 : 4 November 2004
  Copyright (C) 2001-2004 by JMK
  All rights reserved worldwide
*/

function Format(aName, aLabel, anOpt)
{
  this.name = aName;
  this.label = aLabel;
  this.opt = anOpt;
}

function get_form()
{
  return document.forms[0];
}

function init_checkboxes(aName, anItems, aValues)
{
  var v = '|' + aValues + '|';
  for (var n in anItems)
    get_form()['input' + aName + n].checked = v.indexOf('|' + n + '|') >= 0;
}

function init_form()
{
  if (!(params.opt & optSilent))
    with (get_form())
    {
      with (inputband)
        for (var i = 0; i < options.length; i++)
          with (options[i])
            selected = value == params.band;
      onchange_inputband();
      with (inputtour)
      {
        options[0].selected = !params.tour;
        for (var i = 1; i < options.length; i++)
          with (options[i])
            selected = params.tour && params.tour.indexOf(value) >= 0;
      }
      with (inputtrax)
      {
        options[0].selected = !params.trax;
        var reg = new RegExp('^(' + params.trax + ')$', 'i');
        for (var i = 1; i < options.length; i++)
          with (options[i])
            selected = reg.test(value);
      }
      if (params.keywords)
        inputkeywords.value = params.keywords.replace(/\|/g, '\r\n');
      if (params.media)
        init_checkboxes('media', mediatypes, params.media);
      if (params.source)
        init_checkboxes('source', sources, params.source);
      if (params.grade)
        init_checkboxes('grade', grades, params.grade);
      var opt = params.opt & optUser;
      var n = 0;
      for (var i = 0; i < formats.length; i++)
        if (formats[i].opt == opt)
        {
          n = i;
          break;
        }
      inputformat.options.selectedIndex = n;
    }
}

function main(aQuery)
{
  parse_query(aQuery);
  var result = new_header(false) + new_ads() + '<br><br>';
  result += '<div align="center"><font size="4">Search for Recording Titles...</font>' +
    '<form name="searchform" onReset="return false;" onSubmit="return false;">' +
    '<table border="1" cellpadding="4" cellspacing="4" width="1%" id="MusicSearch" bgcolor="#D3EEFF">' +
    '<tr><td align="center" colspan="5" nowrap>' +
    '<b>Select Catalog:</b> ' + new_artistSelector() +
    '</td></tr>' +
    '<tr>' +
    '<td width="1%" align="center" colspan="2" nowrap><strong>' + 'Select Band(s) / Tour(s)' + '</strong>' +
    '<br>' +
    '<select multiple size="5" name="inputtour"></select></td>\r\n' +
    '<td width="1%" align="center" colspan="3" nowrap><strong>' + 'Select Track(s)' + '</strong><br>' +
    '<select multiple size="5" name="inputtrax"></select></td>\r\n' +
    '</tr>\r\n<tr>' +
    '<td align="center" valign="top" colspan="5" nowrap><strong>' +
    'Keywords: Date, Venue, Recording Title, Catalog # (all optional)' +
    '<br>' +
    '<textarea name="inputkeywords" rows="5" cols="80"></textarea>\r\n' +
    '</tr>\r\n<tr>' +
    new_checkbox('media', 'Media', 1, 2) +
    new_checkbox('source', 'Source(s)', 2, 6) +
    new_checkbox('grade', 'Grade(s)', 2, 2) +
    '</tr>\r\n<tr>' +
    new_checkboxes('media', mediatypes, 2) +
    new_checkboxes('source', sources, 3) +
    new_checkboxes('grade', grades, 1) +
    '</tr>\r\n<tr>' +
    '<td width="5%" align="center" colspan="2"><strong>What to show</strong><br>' +
    '<select name="inputformat">\r\n';
  for (var n in formats)
    with (formats[n])
      result += '<option value="' + name + '">' + label + '\r\n';
  result +=
    '</select></td>' +
    '<td width="5%" align="right" valign="bottom" colspan="3">' +
    '<button name="resetbutton" onClick="reset_form()">Reset</button>&nbsp;' +
    '<button name="searchbutton" onClick="onclick_searchbutton()">Search Now</button>' +
    '</td></tr>\r\n' +
    '</table></form>\r\n</div>' +
    new_footer(false);
  document.write(result);
  init_form();
}

function new_artistSelector()
{
  var result = '<select name="inputband" onChange="onchange_inputband()">\r\n';
  for (var n in bands)
    result += '<option value="' + n + '">' + bands[n].name + '\r\n';
  result += '</select>';
  return result;
}

function new_check(aName, aLabel, aChecked)
{
  var s = 'input' + aName;
  return '<input type="checkbox" name="' + s + '" id="' + s + '" onClick="onclick_' + s + '()"' +
    (aChecked ? ' checked>' : '') + '<label for="' + s + '"><strong>' + aLabel + '</strong></label>';
}

function new_checkbox(aName, aLabel, aCols, aWidth)
{
  return '<td width="' + aWidth + '%" align="center" colspan="' + aCols + '">' +
    new_check(aName, aLabel, true) + '</td>\r\n';
}

function new_checkboxes(aName, anItemArray, aCols)
{
  var n = 0;
  var h = '<td width="' + aCols + '%" valign="top" colspan="1" nowrap>';
  var result = h;
  for (var i in anItemArray)
  {
    if (++n > 6)
    {
      result += '</td>' + h;
      n = 1;
    }
    var s = '"input' + aName + i + '"';
    result += '<input type="checkbox" name=' + s + ' value="' + i + '" id=' + s + ' checked>' +
      '<label for=' + s + '>' + harden(anItemArray[i]) + '</label><br>\r\n';
  }
  return '</td>' + result;
}

function onchange_inputband()
{
  with (get_form().inputband)
    params.band = options[selectedIndex].value;
  with (get_form().inputtour)
  {
    options.length = 0;
    options[0] = new Option(any, '', true, true);
    for (var n in tours)
      with (tours[n])
        if (!params.band || band == params.band)
          options[options.length] = new Option(name, tour, false, false);
  }
  with (get_form().inputtrax)
  {
    options.length = 0;
    options[0] = new Option(any, '', true, true);
    for (var n in trax[params.band])
    {
      var track = trax[params.band][n];
      if (track.length > 46)
        track = track.replace(/\(.*/, '');
      options[options.length] = new Option(track, n, false, false);
    }
  }
}

function onclick_inputgrade()
{
  reset_checkboxes('grade', grades, get_form().inputgrade.checked);
};

function onclick_inputmedia()
{
  reset_checkboxes('media', mediatypes, get_form().inputmedia.checked);
};

function onclick_inputsource()
{
  reset_checkboxes('source', sources, get_form().inputsource.checked);
};

function onclick_searchbutton()
{
  read_form();
  show_results();
}

function prepare_keywords(aKeywords)
{
  return aKeywords.replace(/[^\r\n\w]+/g, ' ').replace(/ *\r\n? *| *\n\r? */g, '|').replace(/ *\|[ \|]*/g, '|').replace(/^\||\|$/g, '');
}

function read_checkboxes(aName, anItems)
{
  var result = '';
  var all = true;
  for (var n in anItems)
    if (get_form()['input' + aName + n].checked)
      result += '|' + n;
    else
      all = false;
  return all ? null : result.substring(1);
}

function read_form()
{
  with (get_form())
  {
    params.tour     = read_select(inputtour.options);
    params.trax     = read_select(inputtrax.options);
    params.keywords = prepare_keywords(get_form().inputkeywords.value);
    params.media    = read_checkboxes('media', mediatypes);
    params.source   = read_checkboxes('source', sources);
    params.grade    = read_checkboxes('grade', grades);
    params.opt      = (params.opt & optSystem) | formats[inputformat.selectedIndex].opt;
  }
  consolidate_params();
}

function read_input(aName)
{
  with (get_form()['input' + aName])
    return value == '' ? null : value;
}

function read_select(anItems)
{
  var q = '';
  for (var n = 0; n < anItems.length; n++)
    with (anItems[n])
      if (selected && value > '')
        q += '|' + value;
  return q == '' ? null : q.substring(1);
}

function reset_checkboxes(aName, anItems, aValue)
{
  var s = 'input' + aName;
  get_form()[s].checked = aValue;
  for (var i in anItems)
    get_form()[s + i].checked = aValue;
}

function reset_form()
{
  if (confirm('Reset all input selections to their default values?'))
  {
    with (get_form())
    {
      inputtour.selectedIndex = 0;
      inputtrax.selectedIndex = 0;
      inputkeywords.value = '';
      reset_checkboxes('media', mediatypes, true);
      reset_checkboxes('source', sources, true);
      reset_checkboxes('grade', grades, true);
    }
  }
}

var formats = new Array
(
  new Format('ALL'   , 'All Text & Graphics', optDefault),
  new Format('TEXT'  , 'Detailed Text'      , optFullText),
  new Format('LIST'  , 'Title List'         , optListPage),
  new Format('THUMBS', 'Thumbnails'         , optThumbnails),
  new Format('CAT'   , 'Media Index'        , optCatalog)
);

var grades = new Array;

grades['A+'] = 'A+';
grades['A' ] = 'A';
grades['A-'] = 'A-';
grades['B+'] = 'B+';
grades['B' ] = 'B';
grades['B-'] = 'B-';
grades['C+'] = 'C+';
grades['C' ] = 'C';
grades['C-'] = 'C-';
grades['D+'] = 'D+';
grades['D' ] = 'D';
grades['D-'] = 'D-';

var mediatypes = new Array;

mediatypes['CD'    ] = 'CD';
mediatypes['VCD'   ] = 'VCD';
mediatypes['DVD'   ] = 'DVD';
mediatypes['DVD-A' ] = 'DVD-A';
mediatypes['CD-ROM'] = 'CD-ROM';
mediatypes['VHS'   ] = 'VHS';

