// Data holders
var start = 0;  // Start at record 0 (First one)
var show = 30;  // 20 results per page
var r_top = '<table border="0" cellspacing="1" cellpadding="4" width="95%" class="srest"><tr><td class="titlebg" align="center" colspan="4">%P1%</td></tr><tr><td class=titlebg colspan=4><a name="results"></a><b>Found %M% matches:</b> (Displaying %S% - %E%)</td></tr><tr><td class=titlebg width=12% align=center valign=top><b>Preview</b></td><td class=titlebg width=64% ><b>Name</b><br>(<a href="" onClick="return resort(0);">A-Z</a> :: <a href="" onClick="return resort(1);">Z-A</a>)</td><td class=titlebg width=12% align=center><b>Rating</b><br>(<a href="" onClick="return resort(2);">+</a>/<a href="" onClick="return resort(3);">-</a>)</td><td class=titlebg width=12% align=center><b>D/Ls</b><br>(<a href="" onClick="return resort(4);">+</a>/<a href="" onClick="return resort(5);">-</a>)</td></tr>';
var r_row = '<tr><td class="wbg2" align="center"><a href="view.php?sec=2&id=%I%"><img src="sprites/shots/P%T%0.gif"></a></td><td class="wbg2"><a href="view.php?sec=2&id=%I%">%N%</a></td><td class="wbg2" align="center">%R%</td><td class="wbg2" align="center">%D%</td></tr>';
var r_end = '<tr><td class="titlebg" align="center" colspan=4>%P2%</td></tr></table>';
var btn;

// Sorting sub-functions
function byNa(a,b) { x = a[1].toLowerCase(); y = b[1].toLowerCase(); return ((x < y) ? -1 : ((x > y) ? 1 : 0)); }
function byNd(a,b) { x = b[1].toLowerCase(); y = a[1].toLowerCase(); return ((x < y) ? -1 : ((x > y) ? 1 : 0)); }
function byRa(a,b) { return a[2] - b[2]; }
function byRd(a,b) { return b[2] - a[2]; }
function byDa(a,b) { return a[3] - b[3]; }
function byDd(a,b) { return b[3] - a[3]; }

var g_list=Array();
var g_sort=0;
var g_start=0;

// Setting filters is the only time we request new data. All sorting is done by the client.
function resort(sort)
{
 switch (sort)
 {
  case 1:  g_list.sort(byNd); break;
  case 2:  g_list.sort(byRa); break;
  case 3:  g_list.sort(byRd); break;
  case 4:  g_list.sort(byDa); break;
  case 5:  g_list.sort(byDd); break;
  default: g_list.sort(byNa);
 }

 renderlist();
 return false;
}

// Apply filters and update the list
function setfilt()
{
 btn.value="Updating...";
 btn.disabled = true;

 var ff = document.getElementById('spf').value;
 var fc = document.getElementById('spc').value;
 var fp = document.getElementById('spp').value;
 var fg = document.getElementById('spg').value;
 
 sendHTTPRequest("sprite", "f="+ff+"&c="+fc+"&p="+fp+"&g="+fg);
}

// Standard function invoked by HTTP object receiving data
/******************************************************************************************/
// Processes server's response
function update()
{
 responseXml = HTTPObj.responseXML;
 xmlDoc = responseXml.documentElement;
 tags = xmlDoc.getElementsByTagName("tag");

 switch (tags[0].firstChild.data)
 {
  case "SPRITES":
   res = xmlDoc.getElementsByTagName("res");
   g_list = Array();
   g_start=0;
   for (x=0; x<res.length; x++) g_list[x] = res[x].firstChild.data.split("|");
   break;

  case "ERROR":
   msg = xmlDoc.getElementsByTagName("msg")[0].firstChild.data;
   document.getElementById('results').innerHTML = '<table width="95%" cellpadding="0" cellspacing="0" border="0"><tr><td class="newshead" align="center"><span class="poster">'+msg+'</span></td></tr></table>';
   break;

  default:
   alert("Error processing server response!");
 }

 renderlist();
 btn.value="Update filter";
 btn.disabled = false;
}




// Render the list
function renderlist()
{


 if (g_list.length == 0) return false;
 g_start = g_start * 1; //Annoying bug with dropdown data being considered text
 
 // Generate a list of page numbers w/ links
 var pagestr = "";
 var numpages = Math.floor(g_list.length / show)+1;
 var curpage = Math.floor(g_start/show);
// alert(g_start);

 var prevpage = (curpage > 1) ? curpage-1 : 0;
 var nextpage = (curpage < numpages-1) ? curpage+1 : numpages-1;
 
 pagestr = "<a href='' onClick='g_start=" + (prevpage * show) + "; return renderlist();'>Prev.</a> &nbsp;&nbsp;";
 pagestr = pagestr + "<select id='pgsl'onChange='g_start=(document.getElementById(\"pgsl\").value); return renderlist();'>";
 
 for (x=0; x<numpages; x++)
  pagestr = pagestr + "<option value='"+(x*show)+"'"+((x==curpage)? "selected='selected'" : "")+">Page "+(x+1)+"</option>";

 pagestr = pagestr + "</select> &nbsp;&nbsp;";
 pagestr = pagestr + "<a href='' onClick='g_start=" + (nextpage * show) + "; return renderlist();'>Next</a> ";

 var rt = r_top.replace(/%P1%/g, pagestr);
 rt = rt.replace(/%M%/g, g_list.length);
 rt = rt.replace(/%S%/g, g_start+1);
 rt = rt.replace(/%E%/g, ((g_start+show > g_list.length) ? g_list.length : g_start+show) );

 for (var x=g_start; x<(g_start+show) && x<g_list.length; x++)
 {
  var tr = r_row.replace(/%I%/g, g_list[x][0]);
  tr = tr.replace(/%I%/g, g_list[x][0]); // ID
  tr = tr.replace(/%N%/g, g_list[x][1]); // Name
  tr = tr.replace(/%R%/g, g_list[x][2]); // Rating
  tr = tr.replace(/%D%/g, g_list[x][3]);
  var fname = "0000000" + g_list[x][0];
  tr = tr.replace(/%T%/g, fname.substring(fname.length-7,fname.length));
  rt = rt + tr;
 }
 
 pagestr = pagestr.replace(/pgsl/g, "pgsl2");
 rt = rt + r_end.replace(/%P2%/g, pagestr);;

 document.getElementById('results').innerHTML = rt;
 
 
 return false;
}