<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <title>Firefly playlist wizard</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <link rel="stylesheet" type="text/css" href="firefly.css" />
</head>
<script language="JavaScript" type="text/javascript">

function loadOpenerCriteria()
{ 
  objSpec = window.opener.document.getElementsByName("playlist_spec");
  args = objSpec[0].value.split(" ");
  comb = '';
  // 1. Convert string params with spaces to single array entries
  i = 2;
  while (i<args.length)
  { s = args[i];
    cB = s.charAt(0);
    cE = s.charAt(s.length-1);
    if ( (cB=='"') & (cE!='"'))
    { j = i;
      do
      { j++;
        s += (" "+args[j]);
        cE = s.charAt(s.length-1);
      } while (cE!='"');
      args.splice(i,(j-i+1),s);
    }
    i += 4;
  }
  // 2. Parse array into list
  if (((args.length%4)==3))
  { critIndex = Math.round(args.length / 4);
    critMax = critIndex;
    while (args.length>=3)
    { eleData = args.pop();
      eleComp = args.pop();
      eleField = args.pop();
      plSetCriterion(critIndex,eleField,eleComp,eleData);
      
      if (args.length>0)
      { if (critIndex==critMax)
        { comb = args.pop(); }
        else { blub = args.pop(); }
        critIndex--;
      }
    } 
    if (comb=='AND') plSetCriteriaCombination(0);
    else if (comb=='OR') plSetCriteriaCombination(1);
  }
}

function blocking(nr)
{
	if (document.layers)
	{
		current = (document.layers[nr].display == 'none') ? 'block' : 'none';
		document.layers[nr].display = current;
	}
	else if (document.all)
	{
		current = (document.all[nr].style.display == 'none') ? 'block' : 'none';
		document.all[nr].style.display = current;
	}
	else if (document.getElementById)
	{
		vista = (document.getElementById(nr).style.display == 'none') ? 'block' : 'none';
		document.getElementById(nr).style.display = vista;
	}
}

function visi(nr)
{
	if (document.layers)
	{
		vista = (document.layers[nr].visibility == 'hide') ? 'show' : 'hide'
		document.layers[nr].visibility = vista;
	}
	else if (document.all)
	{
		vista = (document.all[nr].style.visibility == 'hidden') ? 'visible'	: 'hidden';
		document.all[nr].style.visibility = vista;
	}
	else if (document.getElementById)
	{
		vista = (document.getElementById(nr).style.visibility == 'hidden') ? 'visible' : 'hidden';
		document.getElementById(nr).style.visibility = vista;

	}
}

function plRowHide(x)
{ //objRow = document.getElementById("rowcrit"+x);
  //objRow.visible = false;
  //visi("rowcrit"+x);
}

function plRowShow(x)
{ //objRow = document.getElementById("rowcrit"+x);
  //objRow.visible = true;
  //visi("rowcrit"+x);
  // vista = (document.getElementById("rowcrit"+x).style.visibility == 'hidden') ? 'visible' : 'hidden';
  // vista = 'visible';
	//	document.getElementById("rowcrit"+x).style.visibility = vista;
}

function plOutputRow(x,vis)
{ document.write('<tr id="rowcrit',x,'" style="visibility:');
  document.write(vis?'visible':'hidden');
  document.write(';"><td>Criterion ',x,':<\/td>',
'<td><select class="playlistfield" name="playlist_crit',x,'field" style="width:100%" onChange="javascript:plUpdateComp(\'',x,'\');plTemplateWizard()">',
'<optgroup label="Basic">',
'<option value="title">Title<\/option>',
'<option value="artist">Artist<\/option>',
'<option value="album">Album<\/option>',
'<option value="genre">Genre<\/option>',
'<option value="year">Year<\/option>',
'<option value="rating">Rating<\/option>',
'<option value="song_length">Length<\/option>',
'<option value="play_count">Play count<\/option>',
'<\/optgroup>',
'<optgroup label="Advanced">',
'<option value="track">Track<\/option>',
'<option value="total_tracks">Tracks total<\/option>',
'<option value="disc">Disc<\/option>',
'<option value="total_discs">Discs total<\/option>',
'<option value="comment">Comment<\/option>',
'<option value="type">Type<\/option>',
'<option value="composer">Composer<\/option>',
'<option value="orchestra">Orchestra<\/option>',
'<option value="grouping">Grouping<\/option>',
'<option value="url">URL<\/option>',
'<option value="description">Description<\/option>',
'<\/optgroup>',
'<optgroup label="Dates">',
'<option value="time_added">Added<\/option>',
'<option value="time_modified">Modified<\/option>',
'<option value="time_played">Played<\/option>',
'<\/optgroup>',
'<optgroup label="Technical">',
'<option value="bitrate">Bitrate<\/option>',
'<option value="samplerate">Samplerate<\/option>',
'<option value="file_size">Filesize<\/option>',
'<option value="bpm">Beats per minute<\/option>',
'<option value="compilation">Compilation<\/option>',
'<option value="fname">Filename<\/option>',
'<option value="path">Filepath<\/option>',
'<\/optgroup>',
'<\/select><\/td>',
'<td><select class="playlistfield" name="playlist_crit',x,'comp" style="width:100%" onChange="javascript:plTemplateWizard()">',
'<option value="=">=<\/option>',
'<\/select><\/td>',
'<td><input class="playlistfield" name="playlist_crit',x,'data" onChange="javascript:plTemplateWizard()" style="width:100%"/><\/td>');
  document.write('<\/tr>');
}

function plGetCriterion(x)
{ objField = document.getElementsByName("playlist_crit"+x+"field");
  objComp = document.getElementsByName("playlist_crit"+x+"comp");
  objData = document.getElementsByName("playlist_crit"+x+"data");
  y = '';
  if ((objField[0].value=='artist') 
   || (objField[0].value=='title')
   || (objField[0].value=='album')
   || (objField[0].value=='genre')
   || (objField[0].value=='comment')
   || (objField[0].value=='type')
   || (objField[0].value=='composer')
   || (objField[0].value=='orchestra')
   || (objField[0].value=='conductor')
   || (objField[0].value=='grouping')
   || (objField[0].value=='url')
   || (objField[0].value=='fname')
   || (objField[0].value=='path')
   || (objField[0].value=='description')
   || (objField[0].value=='codectype'))
   y = '"';
  return objField[0].value+' '+objComp[0].value+' '+y+objData[0].value+y;
}

function plSetCriterion(x,field,comp,data)
{ objField = document.getElementsByName("playlist_crit"+x+"field");
  objField[0].value = field;
  plUpdateComp(x);
  objComp = document.getElementsByName("playlist_crit"+x+"comp");
  objData = document.getElementsByName("playlist_crit"+x+"data");
  objComp[0].value = comp;
  if (data.substr(0,1)=='"')
    objData[0].value = data.substr(1, data.length-2);
  else
    objData[0].value = data;
}

function plSetCriteriaCombination(x)
{ objSep = document.getElementsByName("playlist_combine");
  objSep[x].checked = true;
}

function plIsUsed(x)
{ objData = document.getElementsByName("playlist_crit"+x+"data");
  if (objData[0].value!='') return true; else return false;
}

function plTemplateWizard()
{ objSpec = window.opener.document.getElementsByName("playlist_spec");
  objSep = document.getElementsByName("playlist_combine");
  if (objSep[0].checked) sep = ' AND '; else sep = ' OR ';
  criteria = plGetCriterion('1');
  if (plIsUsed('2')) criteria = criteria + sep + plGetCriterion('2');
  objSpec[0].value = criteria;
}

function plUpdateComp(x)
{ objField = document.getElementsByName("playlist_crit"+x+"field");
  objComp = document.getElementsByName("playlist_crit"+x+"comp");
  objComp[0].options.length = 0;
  objComp[0].options[0] = new Option('=','=');
  objComp[0].options[1] = new Option('not =','not =');
  if ((objField[0].value=='artist') 
   || (objField[0].value=='title')
   || (objField[0].value=='album')
   || (objField[0].value=='genre')
   || (objField[0].value=='comment')
   || (objField[0].value=='type')
   || (objField[0].value=='composer')
   || (objField[0].value=='orchestra')
   || (objField[0].value=='conductor')
   || (objField[0].value=='grouping')
   || (objField[0].value=='url')
   || (objField[0].value=='fname')
   || (objField[0].value=='path')
   || (objField[0].value=='codectype'))
  { objComp[0].options[2] = new Option('includes','includes');
    objComp[0].options[3] = new Option('not includes','not includes');
    objComp[0].options[4] = new Option('starts with','startswith');
    objComp[0].options[5] = new Option('not starts with','not startswith');
    objComp[0].options[6] = new Option('ends with','endswith');   
    objComp[0].options[7] = new Option('not ends with','not endswith');   
  } else if ((objField[0].value=='time_added')
   || (objField[0].value=='time_modified')
   || (objField[0].value=='time_played'))
  { objComp[0].options[2] = new Option('before','before');
    objComp[0].options[3] = new Option('after','after');
  } else
  { objComp[0].options[2] = new Option('>','>');
    objComp[0].options[3] = new Option('>=','>=');
    objComp[0].options[4] = new Option('<','<');
    objComp[0].options[5] = new Option('<=','<=');
  }
}

function plTemplatePlaylist()
{ objSpec = window.opener.document.getElementsByName("playlist_spec");
  objName = window.opener.document.getElementsByName("playlist_name");
  objTemplate = document.getElementsByName("playlist_template");
  switch (objTemplate[0].value)
  { case "60s":
      objSpec[0].value = 'year >= 1960 AND year <= 1970';
      objName[0].value = 'Music from the 60s';
      plSetCriterion(1,'year','>=','1960');
      plSetCriterion(2,'year','<=','1970');
      plSetCriterion(3,'title','=','');
      plSetCriterion(4,'title','=','');
      plSetCriterion(5,'title','=','');
      plSetCriteriaCombination(0);
      break;
    case "70s":
      objSpec[0].value = 'year >= 1970 AND year <= 1980';
      objName[0].value = 'Music from the 70s';
      plSetCriterion(1,'year','>=','1970');
      plSetCriterion(2,'year','<=','1980');
      plSetCriterion(3,'title','=','');
      plSetCriterion(4,'title','=','');
      plSetCriterion(5,'title','=','');
      plSetCriteriaCombination(0);
      break;
    case "80s":
      objSpec[0].value = 'year >= 1980 AND year <= 1990';
      objName[0].value = 'Music from the 80s';
      plSetCriterion(1,'year','>=','1980');
      plSetCriterion(2,'year','<=','1990');
      plSetCriterion(3,'title','=','');
      plSetCriterion(4,'title','=','');
      plSetCriterion(5,'title','=','');
      plSetCriteriaCombination(0);
      break;
    case "90s":
      objSpec[0].value = 'year >= 1990 AND year <= 2000';
      objName[0].value = 'Music from the 90s';
      plSetCriterion(1,'year','>=','1990');
      plSetCriterion(2,'year','<=','2000');
      plSetCriterion(3,'title','=','');
      plSetCriterion(4,'title','=','');
      plSetCriterion(5,'title','=','');
      plSetCriteriaCombination(0);
      break;
    case "00s":
      objSpec[0].value = 'year >= 2000';
      objName[0].value = 'Music from today';
      plSetCriterion(1,'year','>=','2000');
      plSetCriterion(2,'title','=','');
      plSetCriterion(3,'title','=','');
      plSetCriterion(4,'title','=','');
      plSetCriterion(5,'title','=','');
      plSetCriteriaCombination(0);
      break;
    case "onemonth":
      objSpec[0].value = 'time_added after 1 month before today';
      objName[0].value = 'Recently added';
      plSetCriterion(1,'time_added','after','1 month before today');
      plSetCriterion(2,'title','=','');
      plSetCriterion(3,'title','=','');
      plSetCriterion(4,'title','=','');
      plSetCriterion(5,'title','=','');
      plSetCriteriaCombination(0);
      break;
    case "metal":
      objSpec[0].value = 'genre includes "Metal" OR genre includes "Goth" OR genre includes "Hard"';
      objName[0].value = 'Metalheads';
      plSetCriterion(1,'genre','includes','Metal');
      plSetCriterion(2,'genre','includes','Goth');
      plSetCriterion(3,'genre','includes','Hard');
      plSetCriterion(4,'title','=','');
      plSetCriterion(5,'title','=','');
      plSetCriteriaCombination(1);
      break;
    case "psych":
      objSpec[0].value = 'genre includes "psych" OR genre includes "Psych" OR genre includes "Synth" OR ARTIST = "Pink Floyd"';
      objName[0].value = 'Psychosynth';
      plSetCriterion(1,'genre','includes','psych');
      plSetCriterion(2,'genre','includes','Psych');
      plSetCriterion(3,'genre','includes','Synth');
      plSetCriterion(4,'artist','=','Pink Floyd');
      plSetCriterion(5,'title','=','');
      plSetCriteriaCombination(1);
      break;
    case "":
      objName[0].value = 'Custom playlist';
      break;
  }
}
</script>

<body onLoad="loadOpenerCriteria();">
<form name="pleditor" action="">
<input type="hidden" name="playlist_id"/>
<table width="100%" cellspacing="0" style="font:icon;">

<tr><th>Wizard</th><th colspan="3"></th></tr>
<tr><td>Template:</td>
<td colspan="3"><select class="playlistfield" name="playlist_template" style="width:100%" onChange="javascript:plTemplatePlaylist()">
<option value="" selected="SELECTED">Custom playlist</option>
<option value="60s">Music from the 60s</option>
<option value="70s">Music from the 70s</option>
<option value="80s">Music from the 80s</option>
<option value="90s">Music from the 90s</option>
<option value="00s">Music from today</option>
<option value="onemonth">Recently added</option>
<option value="metal">Metalheads</option>
<option value="psych">Psychosynth</option>
</select></td></tr>

<script language="JavaScript" type="text/javascript">
plOutputRow(1,true);
plOutputRow(2,true);
plOutputRow(3,true);
plOutputRow(4,true);
plOutputRow(5,true);
</script>

<tr><td>Combine:</td>
<td colspan="3">
<input type="radio" name="playlist_combine" value=" AND " checked="CHECKED" onChange="javascript:plTemplateWizard()"> match all 
<input type="radio" name="playlist_combine" value=" OR " onChange="javascript:plTemplateWizard()"> match some 
</td></tr>
</table>
</form>

<script language="JavaScript" type="text/javascript">
loadOpenerCriteria();
</script>

<div style="text-align: center;">Check out the <a href="http://trac.fireflymediaserver.org/wiki/SmartPlaylists" target="_blank">Firefly Wiki</a> for details.</div>

</body></html>