
function toggleWhole() {
  document.forms[0].whole.checked = !document.forms[0].whole.checked;
}
function toggleSide() {
  document.forms[1].side.checked = !document.forms[1].side.checked;
  resetSide();
  updateSongList();
}
function resetSide() {
  if (checkScope("s")) {
    if (!document.forms[1].side.checked) {
      document.forms[0].scope.value = document.forms[0].scope.value.replace(re,"");
    }
  } else {
    if (document.forms[1].side.checked) {
      document.forms[0].scope.value += "s";
    }
  }
}
function toggleAlt() {
  document.forms[1].alt.checked = !document.forms[1].alt.checked;
  resetAlt();
  updateSongList();
}
function resetAlt() {
  if (checkScope("a")) {
    if (!document.forms[1].alt.checked) {
      document.forms[0].scope.value = document.forms[0].scope.value.replace(re,"");
    }
  } else {
    if (document.forms[1].alt.checked) {
      document.forms[0].scope.value += "a";
    }
  }
}
function toggleCovers() {
  document.forms[1].covers.checked = !document.forms[1].covers.checked;
  resetCovers();
  updateSongList();
}
function resetCovers() {
  if (checkScope("c")) {
    if (!document.forms[1].covers.checked) {
      document.forms[0].scope.value = document.forms[0].scope.value.replace(re,"");
    }
  } else {
    if (document.forms[1].covers.checked) {
      document.forms[0].scope.value += "c";
    }
  }
}
function toggleGuests() {
  document.forms[1].guests.checked = !document.forms[1].guests.checked;
  resetGuests();
  updateSongList();
}
function resetGuests() {
  if (checkScope("g")) {
    if (!document.forms[1].guests.checked) {
      document.forms[0].scope.value = document.forms[0].scope.value.replace(re,"");
    }
  } else {
    if (document.forms[1].guests.checked) {
      document.forms[0].scope.value += "g";
    }
  }
}
function toggleImprov() {
  document.forms[1].improv.checked = !document.forms[1].improv.checked;
  resetImprov();
  updateSongList();
}
function resetImprov() {
  if (checkScope("i")) {
    if (!document.forms[1].improv.checked) {
      document.forms[0].scope.value = document.forms[0].scope.value.replace(re,"");
    }
  } else {
    if (document.forms[1].improv.checked) {
      document.forms[0].scope.value += "i";
    }
  }
}
function getQuery() {
  if (document.location.search) {
    re = /query=([^&]+)/i;
	results = re.exec(document.location.search);
    return urlDecode(results[1]);
  } else {
    return "";
  }
}
function getWhole() {
  // The cookie should be set already by the time this executes.
  re = /whole=on/i;
  if (window.location.search.search(re) != "-1") {
    return true
  } else {
//  if (document.cookie.search(re) != "-1") {
//    return true
//  } else {
      // Default.
      return false;
//  }
  }
}
function checkScope(v) {
  re = new RegExp(v,"gi");
  if (document.forms[0].scope.value.search(re) == "-1") {
    return false;
  } else {
    return true;
  }
}
function writeScope() {
  // The cookie should be set already by the time this executes.
  re = /scope=([sacgi]*)/gi;
  if (window.location.search.search(re) != "-1") {
    document.write(RegExp.$1);
  } else {
    if (document.cookie.search(re) != "-1") {
      document.write(RegExp.$1);
    } else {
      document.write("sacgi");
    }
  }
}

function updateSongList() {
  var theRules = new Array();
  if (parent.frames["nav"].document.styleSheets[0].cssRules) {
    theRules = parent.frames["nav"].document.styleSheets[0].cssRules;
  } else if (parent.frames["nav"].document.styleSheets[0].rules) {
    theRules = parent.frames["nav"].document.styleSheets[0].rules;
  }
  var scopes = new Array();
  scopes["s"] = ["s","sa","sc","sg","si"];
  scopes["a"] = ["a","sa","ac","ag","ai"];
  scopes["c"] = ["c","sc","ac","cg","ci"];
  scopes["g"] = ["g","sg","ag","cg","gi"];
  scopes["i"] = ["i","si","ai","ci","gi"];
  for (x in scopes) {
    if (checkScope(x)) {
      for (y in scopes[x]) {
        for (var z = 0; z < theRules.length; z++) {
          if ((theRules[z].selectorText == "p." + scopes[x][y]) || (theRules[z].selectorText == "P." + scopes[x][y])) { // handle uppercase bug in IE and Safari
            theRules[z].style.display = "block"; 
          }
        }
      }
    }
  }
  for (x in scopes) {
    if (!checkScope(x)) {
      for (y in scopes[x]) {
        for (var z = 0; z < theRules.length; z++) {
          if ((theRules[z].selectorText == "p." + scopes[x][y]) || (theRules[z].selectorText == "P." + scopes[x][y])) { // handle uppercase bug in IE and Safari
            theRules[z].style.display = "none"; 
          }
        }
      }
    }
  }
}

function urlDecode(string) {
  re = new RegExp("%20","g");
  out = string.replace(re," ");
  re = new RegExp("\\+","g");
  out = string.replace(re," ");
  re = new RegExp("%3C","g");
  out = out.replace(re,"<");
  re = new RegExp("%3E","g");
  out = out.replace(re,">");
  re = new RegExp("%23","g");
  out = out.replace(re,"#");
  re = new RegExp("%7B","g");
  out = out.replace(re,"{");
  re = new RegExp("%7D","g");
  out = out.replace(re,"}");
  re = new RegExp("%7C","g");
  out = out.replace(re,"|");
  re = new RegExp("%5C","g");
  out = out.replace(re,"\\");
  re = new RegExp("%5E","g");
  out = out.replace(re,"^");
  re = new RegExp("%7E","g");
  out = out.replace(re,"~");
  re = new RegExp("%5B","g");
  out = out.replace(re,"[");
  re = new RegExp("%5D","g");
  out = out.replace(re,"]");
  re = new RegExp("%60","g");
  out = out.replace(re,"`");
  re = new RegExp("%3B","g");
  out = out.replace(re,"\;");
  re = new RegExp("%2F","g");
  out = out.replace(re,"\/");
  re = new RegExp("%3F","g");
  out = out.replace(re,"?");
  re = new RegExp("%3A","g");
  out = out.replace(re,":");
  re = new RegExp("%40","g");
  out = out.replace(re,"@");
  re = new RegExp("%3D","g");
  out = out.replace(re,"=");
  re = new RegExp("%26","g");
  out = out.replace(re,"&");
  re = new RegExp("%24","g");
  out = out.replace(re,"$");
  re = new RegExp("%25","g");
  out = out.replace(re,"%");
  return out;
}

