var NUMBER_SEARCH = 1;
var WORD_SEARCH = 2;

var SS1978 = 0;
var HYMNES = 1;
var GL = 2;
var DP = 3;

var NUMBER_TEMPLATE = 1,
	TITLE_TEMPLATE = 2,
	TUNE_TEMPLATE = 4,
	METER_TEMPLATE = 8,
	SINGLE_TEMPLATE = 16;

function BookEntry (n, ns, dbn, lang, f)
{
	this.Name = n;
	this.NumberOfSongs = ns;
	this.BookId = dbn;
	this.Language = lang;
	this.Flags = f;
}

var SongBooks = new Array(4);
SongBooks[SS1978] = new BookEntry("Spiritual Songs 1978 Edition", 500, "ss1978", NUMBER_TEMPLATE|TITLE_TEMPLATE|TUNE_TEMPLATE|METER_TEMPLATE|SINGLE_TEMPLATE);
SongBooks[HYMNES] = new BookEntry("Hymnes et Cantinques", 271, "french", NUMBER_TEMPLATE|TITLE_TEMPLATE|SINGLE_TEMPLATE);
SongBooks[GL] = new BookEntry("Geistliche Lieder", 180, NUMBER_TEMPLATE|TITLE_TEMPLATE|SINGLE_TEMPLATE);
SongBooks[DP] = new BookEntry("Russian ", 180, NUMBER_TEMPLATE|TITLE_TEMPLATE|SINGLE_TEMPLATE);


function SimpleSearch_OnSearch(TheForm, SongBook)
{
  var SearchText = TheForm.search.value;
  var SearchType = 0;
  //alert("SimpleSearch_OnSearch(TheForm, " +SongBook+")");
  if (SearchText  == "")
  {
    alert("Please enter a number or phrase into the search field.");
    TheForm.search.focus();
    return (false);
  }
    //Determine the type of search...
  if (SearchText.length > 1 && SearchText.length <= 3)
  {
    //alert("Checking for Number XYZ");
	var checkOK = "0123456789";
  	var checkStr = SearchText ;
  	var allValid = true;
  	var validGroups = true;
  	var decPoints = 0;
  	var allNum = "";
  	var i = 0;
  	for (i = 0;  i < checkStr.length;  i++)
  	{
    	ch = checkStr.charAt(i);
    	for (j = 0;  j < checkOK.length;  j++)
      		if (ch == checkOK.charAt(j))
        		break;
    	if (j == checkOK.length)
    	{
      		allValid = false;
      		break;
    	}
    
    	allNum += ch;
  	}
  
  	//alert("getting search type (WORD|NUMBER)"); 
  	if (!allValid)
  	{
    	if(i  && SearchText != "10s" && SearchText != "10S")
    	{
      		alert("Please enter only a number or keywords for titles and tunes in the search field.");
      		TheForm.search.focus();
      		return (false);
    	}
    	else SearchType = WORD_SEARCH;
		//alert("Searching for word");
  	}
  	else SearchType = NUMBER_SEARCH;
	//alert("Searching for Number");
  }
  else SearchType = WORD_SEARCH;
  //alert("Searching for word 2");
  var location = "";//?search=" + SearchText + "&order_by=SongIndex&order=abc";;

  //alert(SongBooks[SongBook].Name);
  var book = "&book=";
  switch(SongBook)
  {
  	case SS1978: book = ""; break;
	default:
		book += SongBooks[SongBook].BookId + "&language=" + SongBooks[SongBook].Language;
		break;
  }
  
  switch(SearchType)
  {
  	case WORD_SEARCH:
  		//location = "/beta/browsesongs.php?search=" + SearchText + "&order_by=SongIndex&order=abc" + "&view=search" + SongBooks[SongBook].BookId + "&language=" + SongBooks[SongBook].Language;;
  	  	return true;
  	case NUMBER_SEARCH:
		if(SearchText > 500)
		{
			alert("Please enter a song number less than " + SongBooks[SongBook].NumberOfSongs + ".");
			TheForm.search.focus();
			return false;
		}
  		//if(SearchText.length == 1) SearchText = "00" + SearchText;
  		//if(SearchText.length == 2) SearchText = "0" + SearchText;
  		//location = "/beta/browsesongs.php?SongIndex=" + SearchText + "&view=single&" +book ;
  	    return true;;
  	default:
  	  return false;
  }
  //alert(location);
  //document.location = location;
 
  return false;
}

function FastPlay_OnPlay(TheForm, SongBook)
{
	var SearchText = TheForm.search.value;
	//alert("fastplay");
	if (SearchText  == "")
  {
    alert("Please enter a song number in the FastPlay field.");
    TheForm.search.focus();
    return (false);
  }

  if (SearchText.length < 1)
  {
    switch (SongBook) {
		case SS1978:
			alert("Please enter a valid song number (1 - 500) in the FastPlay field.");
			break;
		case HYMNES:
			alert("Please enter a valid song number (1 - 271) in the FastPlay field.");
			break;
			case GL:
			alert("Please enter a valid song number (1 - 180) in the FastPlay field.");
			break;
		case DP:
			alert("Please enter a valid song number (1 - 180) in the FastPlay field.");
			break;
	}
    TheForm.search.focus();
    return (false);
  }

  if (SearchText.length > 3)
  {
    switch (SongBook) {
		case SS1978:
			alert("Please enter a valid song number (1 - 500) in the FastPlay field.");
			break;
		case HYMNES:
			alert("Please enter a valid song number (1 - 271) in the FastPlay field.");
			break;
		case GL:
			alert("Please enter a valid song number (1 - 180) in the FastPlay field.");
			break;
		case DP:
			alert("Please enter a valid song number (1 - 180) in the FastPlay field.");
			break;
	}
    TheForm.search.focus();
    return (false);
  }
  
  var checkOK = "0123456789";
  var checkStr = SearchText;
  var allValid = true;
  var validGroups = true;
  var decPoints = 0;
  var allNum = "";
  for (i = 0;  i < checkStr.length;  i++)
  {
    ch = checkStr.charAt(i);
    for (j = 0;  j < checkOK.length;  j++)
      if (ch == checkOK.charAt(j))
        break;
    if (j == checkOK.length)
    {
      allValid = false;
      break;
    }
    if (ch == ".")
    {
      allNum += ".";
      decPoints++;
    }
    else
      allNum += ch;
  }
  if (!allValid)
  {
     switch (SongBook) {
		case SS1978:
			alert("Please enter a valid song number (1 - 500) in the FastPlay field.");
			break;
		case HYMNES:
			alert("Please enter a valid song number (1 - 271) in the FastPlay field.");
			break;
		case GL:
			alert("Please enter a valid song number (1 - 180) in the FastPlay field.");
			break;
		case DP:
			alert("Please enter a valid song number (1 - 180) in the FastPlay field.");
			break;

	}
    TheForm.search.focus();
    return (false);
  }

  if (decPoints > 1 || !validGroups)
  {
        switch (SongBook) {
		case SS1978:
			alert("Please enter a valid song number (1 - 500) in the FastPlay field.");
			break;
		case HYMNES:
			alert("Please enter a valid song number (1 - 271) in the FastPlay field.");
			break;
		case GL:
			alert("Please enter a valid song number (1 - 180) in the FastPlay field.");
			break;
		case DP:
			alert("Please enter a valid song number (1 - 180) in the FastPlay field.");
			break;
	}
    TheForm.search.focus();

    return (false);
  }

  var chkVal = allNum;
  var prsVal = parseFloat(allNum);
  var MaxSongs = SongBooks[SongBook].NumberOfSongs;//"500";

	if (chkVal != "" && (!(prsVal <= MaxSongs) || !(prsVal > "0")))
  {
	switch (SongBook) {
		case SS1978:
			alert("Please enter a song number from 1 to 500 in the FastPlay field.");
			break;
		case HYMNES:
			alert("Please enter a song number from 1 to 271 in the FastPlay field.");
			break;
		case GL:
			alert("Please enter a song number from 1 to 180 in the FastPlay field.");
			break;
		case DP:
			alert("Please enter a song number from 1 to 180 in the FastPlay field.");
			break;
	}
    TheForm.search.focus();
    return (false);
  }
  
  
	if(SearchText.length == 1) SearchText = "00" + SearchText ;
	if(SearchText.length == 2) SearchText = "0" + SearchText ;
//	alert(TheForm.bandwidth.checked);
	//if(!TheForm.bandwidth.checked)
	switch(SongBook)
	{
		case SS1978:
			document.location = "/mp3/SpiritualSongs"+ SearchText + ".mp3";
			break;
		case HYMNES:
			document.location = "/hymnes/mp3/HetC"+ SearchText + ".mp3";
			break;
		case GL:
		case DP:
			document.location = "/gl/mp3/GL"+ SearchText + ".mp3";
			break;
	}
	//else
		//document.location = "/mp3-lb/SpiritualSongs-lb"+ SearchText + ".mp3";
	return true;
}
var METHOD_PERFECT = 0, METHOD_ALL = 1, METHOD_ANY = 2, METHOD_PERFECT = 3;
var HEADER_NUMBER = 0, HEADER_TITLE = 1, HEADER_TUNE = 2, HEADER_METER = 3;
var ORDER_NUMBER = 0, ORDER_TITLE = 1, ORDER_TUNE = 2, ORDER_METER = 3;
var EMPTY_FIELD = -1;

function GetFormHeader(TheForm)
{
	for(i = 0; i <= 3; ++i)
	{
		if(TheForm.header[i].checked)
			return i;
	}
	return 4;
}

function AdvancedSearch_OnSearch(TheForm, SongBook)
{
  var SearchText = TheForm.search.value;
  var SearchType = 0;
    var SearchMethod = TheForm.method.value;
  var SearchOnly = SongBook == SS1978 ? TheForm.header.value : 0; 
  var SortBy = TheForm.order_by.value;
  /*alert("Search " + SearchText +"method = " + SearchMethod +
		" header = " + SearchOnly + 
		" order_by = " +SortBy );*/
  //alert("Search " + SearchText + "\n"		+ "method = " + TheForm.tagName		);

if (SearchText  == "")
  {
    alert("Please enter a number or phrase into the search field.");
    TheForm.search.focus();
    return (false);
  }
    //Determine the type of search...
  var HasNumbers = false;
  if (SearchText.length > 1 && SearchText.length <= 3)
  {
    //alert("Checking for Number XYZ");
	var checkOK = "0123456789";
  	var checkStr = SearchText ;
  	var allValid = true;
  	var validGroups = true;
  	var decPoints = 0;
  	var allNum = "";
  	var i = 0;
  	for (i = 0;  i < checkStr.length;  i++)
  	{
    	ch = checkStr.charAt(i);
    	for (j = 0;  j < checkOK.length;  j++)
      		if (ch == checkOK.charAt(j))
			{
        		HasNumbers = true;
				break;
			}
    	if (j == checkOK.length)
    	{
      		allValid = false;
      		break;
    	}
    
    	allNum += ch;
  	}
  
  	
  	if (!allValid)
  	{
    	if(i  && SearchText != "10s" && SearchText != "10S")
    	{
      		alert("Please enter only a number or keywords for titles and tunes in the search field.");
      		TheForm.search.focus();
      		return (false);
    	}
    	else SearchType = WORD_SEARCH;
  	}
  	else SearchType = NUMBER_SEARCH;
  }
  else SearchType = WORD_SEARCH;
  
  var location = "";//?search=" + SearchText + "&order_by=SongIndex&order=abc";;
  //alert(SearchType);
  switch(SearchType)
  {
  	case WORD_SEARCH:
		if(HasNumbers)
		{
			if((SearchOnly == "SongTitle" || SearchOnly == "SongTune") && (SearchMethod == "exact" || SearchMethod == "perfect"))
			{
				alert("You have entired a phrase which contains a number, but have chosen to search only the fields \"Title\" or \"Tune\" with an exact phrase or perfect match \'Search Method\'.\n"+
				  "Titles and Tunes do not have numbers.  Please set Search Only to Song Number or all, if you wish to search for a Song Number.");
				return false;
			}
		}
  		//location = "/cgi-bin/search.pl?search=" + SearchText + "&order_by=SongIndex&order=abc";
		return true;
  	case NUMBER_SEARCH:
		if(SearchOnly != "" && SearchOnly != "SongIndex")
		{
			alert("You have entered a Song Number, but have chosen to search only the fields \"Title\", \"Tune\" or \"Meter\".\n"+
				  "Please set Search Only to Song Number or all, if you wish to search for a Song Number.");
			return false;
		}
		if(SearchText > SongBooks[SongBook].NumberOfSongs)
		{
			alert("Please enter a song number less than " + SongBooks[SongBook].NumberOfSongs);
			TheForm.search.focus();
			return false;
		}
  		//if(SearchText.length == 1) SearchText = "00" + SearchText;
  		//if(SearchText.length == 2) SearchText = "0" + SearchText;
  		//location = "/cgi-bin/display.pl?SongIndex=" + SearchText + "&view=single";
		return true;
  	  break;
  	default:
  	  return false;
  }
  //alert(location);
  //document.location = location;
 
  return true;
}
