
/* javaBeats.FM main javascript lib */

function cell_on(cellobj)
{
  cellobj.style.background = highlight_color;
  cellobj.style.cursor = 'pointer';
}

function cell_off(cellobj)
{
  cellobj.style.background = menutext_color;
}

function cell_click(linkid)
{
  location.href = document.getElementById(linkid).href;
}

function track_over(oldstr, newstr, newcolor, rowid)
{
  var tbl_track = document.getElementById("tbl_track_" + rowid);
  var td_track_1 = document.getElementById("td_track_1_" + rowid);
  var td_track_2 = document.getElementById("td_track_2_" + rowid);

  tbl_track.style.backgroundImage = tbl_track.style.backgroundImage.replace(oldstr, newstr);
  td_track_1.style.borderLeftColor = newcolor;
  td_track_2.style.borderLeftColor = newcolor;
}

function track_small_over(newcolor, rowid)
{
  document.getElementById("tbl_track_small_" + rowid).style.background = newcolor;
}

function request_track(track_id)
{
  var randomnumber = Math.floor(Math.random() * timestamp);

  objwindow = dhtmlmodal.open("request_track", "iframe", "/request/?rand=" + randomnumber + "&trackid=" + escape(track_id), "javaBeats.FM Internet Radio :: Request Track #" + track_id, "width=420px,height=460px,center=1,resize=0,scrolling=0", "recal");
  objwindow.onclose = function()
  {
    // check for success
    var objsuccess = this.contentDoc.getElementById('_success');
    if (objsuccess)
    {
      var pin = document.createElement('img');
      if (pin)
      {
        pin.src = "/www/images/pin.gif";
        pin.title = "This track was requested less than one minute ago";
        pin.alt = pin.title;
        pin.hspace = "4";
        pin.align = "absmiddle";
        pin.style.cursor = "help";

        // find track title td
        var objtitle = document.getElementById('td_title_' + objsuccess.getAttribute('tag'));

        if (objtitle)
        {
          // append pin img to track title obj
          objtitle.appendChild(pin);
        }
      }
    }

    return true;
  }
}

function request_album(album_name)
{
  var randomnumber = Math.floor(Math.random() * timestamp);

  objwindow = dhtmlmodal.open("request_album", "iframe", "/request/?rand=" + randomnumber + "&album=" + escape(album_name), "javaBeats.FM Internet Radio :: Request Album", "width=420px,height=460px,center=1,resize=0,scrolling=0", "recal");
}

function preview_track(track_id)
{
  var randomnumber = Math.floor(Math.random() * timestamp);

  objwindow = dhtmlmodal.open("preview_track", "iframe", "/preview/?rand=" + randomnumber + "&trackid=" + escape(track_id), "javaBeats.FM Internet Radio :: Preview Track #" + track_id, "width=420px,height=460px,center=1,resize=0,scrolling=0", "recal");
}

function objwindow_close()
{
  if (objwindow)
  {
    objwindow.hide();
    objwindow = null;
  }
}

function prevpage()
{
  var browse_form = document.javabeats_browse;

  browse_form.pagenum.value = parseInt(browse_form.pagenum.value) - 1;
  browse_form.submit();
}

function nextpage()
{
  var browse_form = document.javabeats_browse;

  browse_form.pagenum.value = parseInt(browse_form.pagenum.value) + 1;
  browse_form.submit();
}

function gotopage(pagenum)
{
  var browse_form = document.javabeats_browse;

  browse_form.pagenum.value = parseInt(pagenum) - 1;
  browse_form.submit();
}

function view_mostrecent()
{
  var browse_form = document.javabeats_browse;

  browse_form.action = "/browse/";
  browse_form.pagenum.value = "0";
  browse_form.startswith.value = "";
  browse_form.genre.value = "";
  browse_form.keywords.value = "";
  browse_form.sortfield1.value = "Added";
  browse_form.sortdir1.value = "Desc";
  browse_form.sortfield2.value = "";
  browse_form.sortdir2.value = "";
  browse_form.submit();
}

function view_mostrequested()
{
  var browse_form = document.javabeats_browse;

  browse_form.action = "/browse/";
  browse_form.pagenum.value = "0";
  browse_form.startswith.value = "";
  browse_form.genre.value = "";
  browse_form.keywords.value = "";
  browse_form.sortfield1.value = "Requests";
  browse_form.sortdir1.value = "Desc";
  browse_form.sortfield2.value = "Popularity";
  browse_form.sortdir2.value = "Desc";
  browse_form.submit();
}

function view_mostpopular()
{
  var browse_form = document.javabeats_browse;

  browse_form.action = "/browse/";
  browse_form.pagenum.value = "0";
  browse_form.startswith.value = "";
  browse_form.genre.value = "";
  browse_form.keywords.value = "";
  browse_form.sortfield1.value = "Popularity";
  browse_form.sortdir1.value = "Desc";
  browse_form.sortfield2.value = "";
  browse_form.sortdir2.value = "";
  browse_form.submit();
}

function view_lastplayed()
{
  var browse_form = document.javabeats_browse;

  browse_form.action = "/browse/";
  browse_form.pagenum.value = "0";
  browse_form.startswith.value = "";
  browse_form.genre.value = "";
  browse_form.keywords.value = "";
  browse_form.sortfield1.value = "LastPlay";
  browse_form.sortdir1.value = "Desc";
  browse_form.sortfield2.value = "";
  browse_form.sortdir2.value = "";
  browse_form.submit();
}

function view_lastrequested()
{
  var browse_form = document.javabeats_browse;

  browse_form.action = "/browse/";
  browse_form.pagenum.value = "0";
  browse_form.startswith.value = "";
  browse_form.genre.value = "";
  browse_form.keywords.value = "";
  browse_form.sortfield1.value = "LastRequest";
  browse_form.sortdir1.value = "Desc";
  browse_form.sortfield2.value = "";
  browse_form.sortdir2.value = "";
  browse_form.submit();
}

function view_requested()
{
  var browse_form = document.javabeats_browse;

  browse_form.action = "/browse/";
  browse_form.pagenum.value = "0";
  browse_form.startswith.value = "";
  browse_form.genre.value = "";
  browse_form.keywords.value = "";
  browse_form.sortfield1.value = "Requested";
  browse_form.sortdir1.value = "Desc";
  browse_form.sortfield2.value = "LastRequest";
  browse_form.sortdir2.value = "Desc";
  browse_form.submit();
}

function move_request(trackid, direction)
{
  var cmd_form = document.javabeats_cmd;

  cmd_form.trackid.value = trackid;
  cmd_form.cmd.value = "move_request " + direction;
  cmd_form.submit();
}

function remove_request(trackid)
{
  if (confirm("Are you sure you want to remove this request?"))
  {
    var cmd_form = document.javabeats_cmd;

    cmd_form.trackid.value = trackid;
    cmd_form.cmd.value = "remove_request";
    cmd_form.submit();
  }
}

function menu_on(modname)
{
  var rowobj = document.getElementById("mnu_" + modname);
  if (rowobj) rowobj.style.background = menutext_color;
}

function menu_off(modname)
{
  var rowobj = document.getElementById("mnu_" + modname);
  if (rowobj) rowobj.style.background = highlight_color;
}

function swap_tracklist(oldid, newid)
{
  var oldobj = document.getElementById(oldid);
  var newobj = document.getElementById(newid);

  if (oldobj && newobj)
  {
    oldobj.style.display = "none";
    oldobj.style.visibility = "hidden";
    newobj.style.display = "inline";
    newobj.style.visibility = "visible";
  }
}

function show_gadget_popup()
{
  objwindow = dhtmlmodal.open("gadget_popup", "iframe", "/www/popups/gadget.html", "javaBeats.FM Internet Radio :: iGoogle Gadget", "width=650px,height=300px,center=1,resize=0,scrolling=0", "recal");
}

function bookmarks_over()
{
  var objText = document.getElementById("social_text");
  var objBar = document.getElementById("social_bookmarks");

  if (objText && objBar)
  {
    objText.style.color = '#ffff00';
    objBar.style.borderBottomColor = '#ffff00';
    objBar.style.borderBottomStyle = 'solid';
  }
}

function bookmarks_out()
{
  var objText = document.getElementById("social_text");
  var objBar = document.getElementById("social_bookmarks");

  if (objText && objBar)
  {
    objText.style.color = '#ffffff';
    objBar.style.borderBottomColor = '#ffffff';
    objBar.style.borderBottomStyle = 'dashed';
  }
}

function update_banner(no_refresh)
{
  var randomnumber = Math.floor(Math.random() * timestamp);

  var bannerObj = document.getElementById("javabeats_banner");
  var xmlHttp = null;

  try {
    // Firefox, Opera 8.0+, Safari, IE7+
    xmlHttp = new XMLHttpRequest(); // xmlHttp is now a XMLHttpRequest.
  } catch (e) {
    // Internet Explorer
    try {
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }

  xmlHttp.onreadystatechange = function() {

    if (xmlHttp.readyState == 4)
    {
      try {
        if (xmlHttp.status == 200)
        {
          bannerObj.innerHTML = xmlHttp.responseText;

          if (is_logged_in) init_banner();

          xmlHttp = null;
          if (no_refresh == undefined) setTimeout("update_banner()", update_timeout);
        }
      } catch (e) {
        xmlHttp = null;
        if (no_refresh == undefined) setTimeout("update_banner()", update_timeout);
      }
    }
  }

  xmlHttp.open("get","/banner/?rand=" + randomnumber);
  xmlHttp.send(null);
}

function update_stats()
{
  var randomnumber = Math.floor(Math.random() * timestamp);

  var statsObj = document.getElementById("javabeats_stats");
  var xmlHttp = null;

  try {
    // Firefox, Opera 8.0+, Safari, IE7+
    xmlHttp = new XMLHttpRequest(); // xmlHttp is now a XMLHttpRequest.
  } catch (e) {
    // Internet Explorer
    try {
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }

  xmlHttp.onreadystatechange = function() {

    if (xmlHttp.readyState == 4)
    {
      try {
        if (xmlHttp.status == 200)
        {
          statsObj.innerHTML = xmlHttp.responseText;

          xmlHttp = null;
          setTimeout("update_stats()", update_timeout);
        }
      } catch (e) {
        xmlHttp = null;
        setTimeout("update_stats()", update_timeout);
      }
    }
  }

  xmlHttp.open("get","/current_stats/?rand=" + randomnumber);
  xmlHttp.send(null);
}

function update_sidebar()
{
  var randomnumber = Math.floor(Math.random() * timestamp);

  var sidebarObj = document.getElementById("javabeats_sidebar");
  var xmlHttp = null;

  try {
    // Firefox, Opera 8.0+, Safari, IE7+
    xmlHttp = new XMLHttpRequest(); // xmlHttp is now a XMLHttpRequest.
  } catch (e) {
    // Internet Explorer
    try {
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }

  xmlHttp.onreadystatechange = function() {

    if (xmlHttp.readyState == 4)
    {
      try {
        if (xmlHttp.status == 200)
        {
          sidebarObj.innerHTML = xmlHttp.responseText;

          xmlHttp = null;
          setTimeout("update_sidebar()", update_timeout);
        }
      } catch (e) {
        xmlHttp = null;
        setTimeout("update_sidebar()", update_timeout);
      }
    }
  }

  xmlHttp.open("get","/sidebar/?rand=" + randomnumber);
  xmlHttp.send(null);
}

function update_session(referrer)
{
  var xmlHttp = null;

  try {
    // Firefox, Opera 8.0+, Safari, IE7+
    xmlHttp = new XMLHttpRequest(); // xmlHttp is now a XMLHttpRequest.
  } catch (e) {
    // Internet Explorer
    try {
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }

  xmlHttp.onreadystatechange = function() {

    if (xmlHttp.readyState == 4)
    {
      // success
      xmlHttp = null;
    }
  }

  xmlHttp.open("get","/session/?referrer=" + referrer);
  xmlHttp.send(null);
}

function radio_popup()
{
  window.open("/www/popups/flash_player.html", "radio_popup", "menubar=no,width=480,height=360,toolbar=no,scrollbars=no,resizable=no,titlebar=no,titlebar=no,location=no");
}

function code_highlight(obj)
{
  if (obj)
  {
    if (document.selection)
    {
      var rangeObj = document.body.createTextRange();
      if (rangeObj)
      {
        rangeObj.moveToElementText(obj);
        rangeObj.select();
      }

      if (window.clipboardData)
        window.clipboardData.setData("text", ((document.all) ? obj.innerText : obj.textContent));
    }
    else
    {
      var selectionObj = window.getSelection();

      if (selectionObj)
      {
        selectionObj.removeAllRanges();
        var rangeObj = document.createRange();

        if (rangeObj)
        {
          rangeObj.selectNode(obj);
          selectionObj.addRange(rangeObj);
        }
      }
    }
  }
}

function init_banner()
{
  var obj = document.getElementById("nowplaying_current");
  if (obj) at_attach("nowplaying_current", "nowplaying_mnu", "hover", "_y", undefined, "100");
}

function init_tracks()
{
  for (var t = 0; t < document.getElementsByName("jb_track").length; t++)
  {
    var tid = document.getElementsByName("jb_track")[t].id.split("_")[2];
    if (tid) at_attach("jb_track_" + tid, "track_mnu_" + tid, "hover", "_y", undefined, "100");
  }
}

function favorite_click(favObj, trackid)
{
  var randomnumber = Math.floor(Math.random() * timestamp);
  var xmlHttp = null;

  if (!cmd_refresh)
  {
    var mnuObj = favObj.parentNode.parentNode.parentNode.parentNode;
    if (mnuObj)
    {
      mnuObj.setAttribute("tag", "1");
      mnuObj.style.visibility = "hidden";
    }
  }

  var cmd = ((parseInt(favObj.getAttribute("tag")) > 0) ? "remove" : "add");

  try {
    // Firefox, Opera 8.0+, Safari, IE7+
    xmlHttp = new XMLHttpRequest(); // xmlHttp is now a XMLHttpRequest.
  } catch (e) {
    // Internet Explorer
    try {
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }

  xmlHttp.onreadystatechange = function() {

    if (xmlHttp.readyState == 4)
    {
      try {
        if (xmlHttp.status == 200)
        {
          if (xmlHttp.responseText.indexOf("SUCCESS:") >= 0)
          {
            if (!cmd_refresh)
            {
              mnuObj.setAttribute("tag", "0");
              var tid = mnuObj.id.split("_")[2];

              if (cmd == "add")
              {
                favObj.setAttribute("tag", "1");

                var fav = document.createElement('img');
                if (fav)
                {
                  fav.src = "/www/images/favorite.gif";
                  fav.title = "You marked this track as a Favorite less than one minute ago";
                  fav.alt = fav.title;
                  fav.hspace = "4";
                  fav.align = "absmiddle";
                  fav.id = "jb_track_fav_" + tid;

                  // find track title td
                  var objtitle = document.getElementById("td_title_" + trackid);
                  if (!objtitle) objtitle = document.getElementById("td_title_" + tid);
                  if (objtitle)
                  {
                    // append pin img to track title obj
                    objtitle.appendChild(fav);
                  }
                }

                var mnuItem = document.getElementById("track_mnu_item0_" + tid);
                if (mnuItem) mnuItem.innerHTML = '&nbsp;<img src="/www/images/mnu_unfavorite.gif" width="13" height="13" align="absmiddle" />&nbsp;Remove this track from your Favorites';
              }
              else if (cmd == "remove")
              {
                favObj.setAttribute("tag", "0");

                // find the fav. image
                var fav = document.getElementById("jb_track_fav_" + tid);
                if (fav)
                {
                  // find track title td
                  var objtitle = document.getElementById("td_title_" + trackid);
                  if (!objtitle) objtitle = document.getElementById("td_title_" + tid);
                  if (objtitle)
                  {
                    // append pin img to track title obj
                    objtitle.removeChild(fav);
                  }
                }

                var mnuItem = document.getElementById("track_mnu_item0_" + tid);
                if (mnuItem) mnuItem.innerHTML = '&nbsp;<img src="/www/images/mnu_favorite.gif" width="13" height="13" align="absmiddle" />&nbsp;Add this track to your Favorites';
              }
            }
            else
              document.javabeats_browse.submit();
          }
          else alert(xmlHttp.responseText);

          xmlHttp = null;
        }
      } catch (e) {
        xmlHttp = null;
      }
    }
  }

  xmlHttp.open("get","/ajax/?action=favorite+" + cmd + "&arg0=" + trackid + "&rand=" + randomnumber);
  xmlHttp.send(null);
}

function vote_click(voteObj, trackid)
{
  var randomnumber = Math.floor(Math.random() * timestamp);
  var xmlHttp = null;

  var mnuObj = document.getElementById("nowplaying_mnu");
  if (mnuObj)
  {
    mnuObj.setAttribute("tag", "1");
    mnuObj.style.visibility = "hidden";
  }

  var cmd = ((parseInt(voteObj.getAttribute("tag")) == 1) ? "like" :
    ((parseInt(voteObj.getAttribute("tag")) == 0) ? "dislike" : "unlike"));

  try {
    // Firefox, Opera 8.0+, Safari, IE7+
    xmlHttp = new XMLHttpRequest(); // xmlHttp is now a XMLHttpRequest.
  } catch (e) {
    // Internet Explorer
    try {
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }

  xmlHttp.onreadystatechange = function() {

    if (xmlHttp.readyState == 4)
    {
      try {
        if (xmlHttp.status == 200)
        {
          if (xmlHttp.responseText.indexOf("SUCCESS:") >= 0)
          {
            if (!cmd_refresh)
            {
              // update the banner
              update_banner(true);
            }
            else
              document.javabeats_browse.submit();
          }
          else alert(xmlHttp.responseText);

          xmlHttp = null;
        }
      } catch (e) {
        xmlHttp = null;
      }
    }
  }

  xmlHttp.open("get","/ajax/?action=vote+" + cmd + "&arg0=" + trackid + "&rand=" + randomnumber);
  xmlHttp.send(null);
}

function retrieve_results(result_id, offset)
{
  var randomnumber = Math.floor(Math.random() * timestamp);
  var xmlHttp = null;

  try {
    // Firefox, Opera 8.0+, Safari, IE7+
    xmlHttp = new XMLHttpRequest(); // xmlHttp is now a XMLHttpRequest.
  } catch (e) {
    // Internet Explorer
    try {
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }

  xmlHttp.onreadystatechange = function() {

    if (xmlHttp.readyState == 4)
    {
      try {
        if (xmlHttp.status == 200)
        {
          if (xmlHttp.responseText.indexOf("SUCCESS:") >= 0)
          {
            var javabeats_results = document.getElementById("javabeats_results_" + result_id);
            if (javabeats_results)
            {
              var res_output = xmlHttp.responseText.substr(xmlHttp.responseText.indexOf("SUCCESS:") + 9);
              res_output = res_output.replace(/id\=\"res_prevpages\"\sclass\=\"pagelink1\">([^<]+)<\/a>/i, "id=\"res_prevpages\" class=\"pagelink1\">«</a>");
              res_output = res_output.replace(/id\=\"res_nextpages\"\sclass\=\"pagelink1\">([^<]+)<\/a>/i, "id=\"res_nextpages\" class=\"pagelink1\">»</a>");

              javabeats_results.innerHTML = res_output;
              if (is_logged_in) init_tracks();

              for (var t = 0; t < document.getElementsByName("track_ad").length; t++)
                document.getElementsByName("track_ad")[t].src = "/ajax/?action=track_ad";
            }
          }
          else alert(xmlHttp.responseText);

          xmlHttp = null;
        }
      } catch (e) {
        xmlHttp = null;
      }
    }
  }

  xmlHttp.open("get","/ajax/?action=retrieve_results&arg0=" + result_id + "&arg1=" + offset + "&rand=" + randomnumber);
  xmlHttp.send(null);
}

function track_cmd(request_id)
{
  var randomnumber = Math.floor(Math.random() * timestamp);
  var xmlHttp = null;

  try {
    // Firefox, Opera 8.0+, Safari, IE7+
    xmlHttp = new XMLHttpRequest(); // xmlHttp is now a XMLHttpRequest.
  } catch (e) {
    // Internet Explorer
    try {
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }

  xmlHttp.onreadystatechange = function() {

    if (xmlHttp.readyState == 4)
    {
      try {
        if (xmlHttp.status == 200)
        {
          if (xmlHttp.responseText.indexOf("SUCCESS:") >= 0)
          {
            var javabeats_request = document.getElementById("javabeats_track_cmd_" + request_id);
            if (javabeats_request)
            {
              var res_output = xmlHttp.responseText.substr(xmlHttp.responseText.indexOf("SUCCESS:") + 9);
              javabeats_request.innerHTML = res_output;
            }
          }
          else alert(xmlHttp.responseText);

          xmlHttp = null;
        }
      } catch (e) {
        xmlHttp = null;
      }
    }
  }

  xmlHttp.open("get","/ajax/?action=track_cmd&arg0=" + request_id + "&rand=" + randomnumber);
  xmlHttp.send(null);
}
