
//slide
function AnimationFrame(left, top, width, height, time)
{
  this.Left = left;
  this.Top = top;
  this.Width = width;
  this.Height = height;
  this.Time = time;
 
  this.Copy = function(frame)
  {
    this.Left = frame.Left;
    this.Top = frame.Top;
    this.Width = frame.Width;
    this.Height = frame.Height;
    this.Time = frame.Time;
  }
 
  this.Apply = function(element)
  {
    element.style.left = Math.round(this.Left) + 'px';
    element.style.top = Math.round(this.Top) + 'px';
    element.style.width = Math.round(this.Width) + 'px';
    element.style.height = Math.round(this.Height) + 'px';
  }
}

function AnimationObject(element)
{
  if(typeof(element) == "string")
    element = document.getElementById(element);
 
  var frames = null; 
  var timeoutID = -1;
  var running = 0;
  var currentFI = 0;
  var currentData = null;
  var lastTick = -1;
  var callback = null;
 
  var prevDir = 0;
 
  this.AddFrame = function(frame)
  {
    frames.push(frame);
  }
 
  this.SetCallback = function(cb)
  {
    callback = cb;
  }
 
  this.ClearFrames = function()
  {
    if(running != 0)
      this.Stop();
    frames = new Array();
    frames.push(new AnimationFrame(0,0,0,0,0));
    frames[0].Time = 0;
    frames[0].Left = parseInt(element.style.left);
    frames[0].Top = parseInt(element.style.top);
    frames[0].Width = parseInt(element.style.width);
    frames[0].Height = parseInt(element.style.height);
    currentFI = 0;
    prevDir = 0;
    currentData = new AnimationFrame(0,0,0,0,0);   
  }
 
  this.ResetToStart = function()
  {
    if(running != 0)
      this.Stop();
    currentFI = 0;
    prevDir = 0;
    currentData = new AnimationFrame(0,0,0,0,0);
    frames[0].Apply(element);
  }
 
  this.ResetToEnd = function()
  {
    if(running != 0)
      this.Stop();
    currentFI = 0;
    prevDir = 0;
    currentData = new AnimationFrame(0,0,0,0,0);
    frames[frames.length - 1].Apply(element);
  }
 
  this.Stop = function()
  {
    if(running == 0)
      return;
    if(timeoutID != -1)
      clearTimeout(timeoutID);
    prevDir = running;
    running = 0;
  }
 
  this.RunForward = function()
  {
    if(running == 1)
      return;
    if(running == -1)
      this.Stop();
    if(frames.length == 1 || element == null)
      return; 
     
    lastTick = new Date().getTime();

    //Start from the begining
    if(prevDir == 0)
    {
      currentFI = 1;
      currentData.Time = 0;
      currentData.Left = parseInt(element.style.left);
      currentData.Top = parseInt(element.style.top);
      currentData.Width = parseInt(element.style.width);
      currentData.Height = parseInt(element.style.height);
      frames[0].Copy(currentData);
    }
    else if(prevDir != 1)
    {
      currentFI++;
      currentData.Time =
          frames[currentFI].Time - currentData.Time;
    }
     
    running = 1;
    animate();
  }
 
  this.RunBackward = function()
  {
    if(running == -1)
      return;
    if(running == 1)
      this.Stop();
    if(frames.length == 1 || element == null)
      return;
       
    lastTick = new Date().getTime();
   
    //Start from the end
    if(prevDir == 0)
    {
      currentFI = frames.length-2;
      currentData.Left = parseInt(element.style.left);
      currentData.Top = parseInt(element.style.top);
      currentData.Width = parseInt(element.style.width);
      currentData.Height = parseInt(element.style.height);
      currentData.Time = frames[frames.length-1].Time;
      frames[frames.length-1].Copy(currentData);
      currentData.Time = 0;
    }
    else if(prevDir != -1)
    {
      currentData.Time =
          frames[currentFI].Time - currentData.Time;
      currentFI--;
    }
     
    running = -1;
    animate();
  }
   
  function animate()
  {
    if(running == 0)
      return;
    var curTick = new Date().getTime();
    var tickCount = curTick - lastTick;
    lastTick = curTick;
   
    var timeLeft =
       frames[((running == -1) ? currentFI+1 : currentFI)].Time
       - currentData.Time;
   
    while(timeLeft <= tickCount)
    {
      currentData.Copy(frames[currentFI]);
      currentData.Time = 0;
      currentFI += running;
      if(currentFI>= frames.length || currentFI <0)
      {
        currentData.Apply(element);
        lastTick = -1;
        running = 0;
        prevDir = 0;
        if(callback != null)
          callback();
        return;
      }
      tickCount = tickCount - timeLeft;
      timeLeft =
        frames[((running == -1) ? currentFI+1 : currentFI)].Time
        - currentData.Time;
    }
   
    if(tickCount != 0)
    {
      currentData.Time += tickCount;
      var ratio = currentData.Time/
        frames[((running == -1) ? currentFI+1 : currentFI)].Time;

      currentData.Left = frames[currentFI-running].Left +
         (frames[currentFI].Left
         - frames[currentFI-running].Left)
         * ratio;

      currentData.Top = frames[currentFI-running].Top +
         (frames[currentFI].Top
         - frames[currentFI-running].Top)
         * ratio;
      currentData.Width = frames[currentFI-running].Width +
         (frames[currentFI].Width
         - frames[currentFI-running].Width)
         * ratio;

      currentData.Height = frames[currentFI-running].Height +
         (frames[currentFI].Height
         - frames[currentFI-running].Height)
         * ratio;
    }
   
    currentData.Apply(element);

    timeoutID = setTimeout(animate, 33);
  }
 
  this.ClearFrames();
}

//spy

var xmlHttp=null;
var timer=null;
var cu = "";
var rows = new Array();
var rowind = 0;
var reqcnt = 0;
var reqlim = 40;
var clearing = true;

function load() {
	if (clearing) {
		document.getElementById("items").innerHTML = "Items will appear very soon...";
		clearing = false;
	}
  if (reqcnt < reqlim) {
	  xmlHttp=GetXmlHttpObject();
	  if(xmlHttp==null){
	   alert("Browser does not support HTTP Request")
	   return;
	  }
	  var url="/spy/getItems.php?s="+site;
	  if (categ) {
		url = url+"&c="+categ;
	  } 
	  if (keyword) {
		url = url+"&k="+keyword;
	  }
	  url = url+"&r="+new Date().getTime();//fix add encryption - no need, get straight from ebay
	  xmlHttp.onreadystatechange=stateChanged;
	  xmlHttp.open("GET",url,true);
	  xmlHttp.send(null);
	  reqcnt++;
  }  
}

function displayCountdown(countdn,cd) {
 {
 if ((rowind < rows.length) && (countdn + rows[rowind].Offset) <= 0) {
	var toprow;
	if (toprow = document.getElementById(cd+rowind.toString())) {
		toprow.innerHTML = "0s"; 
	}
  rowind++;
  reDisplayRows();
 } 
  for (var i = rowind; i < rows.length; ++i) {
	var cntd = countdn + rows[i].Offset;
	if (cntd == 1) {
	//if (cntd == 0) {
		//start slide
	var animationObject = new AnimationObject('ep'+i.toString());
	animationObject.AddFrame(new AnimationFrame(0, -14, 600, 0, 500));
    animationObject.RunForward();
	}
		
	if (cntd < 0) {
		cntd = 0;
	}
	var secs = cntd % 60; 
	var totmins = (cntd - secs) / 60;
	var mins = totmins % 60;
	var tothours = (totmins - mins) / 60;
	var hours = tothours % 24;
	var totdays = (tothours - hours) / 24;
	var days = totdays % 31;
	var hourstr = "";
	if ((days > 0) || (tothours > 0)) {
		hourstr = hours + 'h ';
	}
	if (totmins > 0) {
		if (days > 0) {
			document.getElementById(cd+i.toString()).innerHTML = days+'d '+hourstr;
		} else {
		if (secs < 10) 
			secs = '0'+secs;			
			document.getElementById(cd+i.toString()).innerHTML = hourstr+mins+'m '+secs+'s';
		}
	} else {
	  document.getElementById(cd+i.toString()).innerHTML = secs+'s';
	}
  }
  //document.getElementById("ce").innerHTML = mins+'m '+secs+'s';
  timer = setTimeout('displayCountdown('+(countdn-1)+',\''+cd+'\');',999);
 }
}

function reDisplayRows() {
	//var ret = "<table style=\"width:100%;\"><tr><th style=\"width:10%;\">&nbsp;<\/th><th style=\"width:60%;\">&nbsp;<\/th><th style=\"width:15%;\"><small>Price ("+cu+")<\/small><\/th><th style=\"width:15%;\"><small>Time left<\/small><\/th><\/tr>";
	var ret = "<div style=\"width:600px\"><div class=\"tabletop\"><div class=\"narrowcol\"\">&nbsp;<\/div>\n<div class=\"widecol\">&nbsp;<\/div>\n<div class=\"pricecol\">Price ("+cu+")<\/div>\n<div class=\"timecol\">Time left<\/div>\n<\/div>";
	if (rowind < rows.length) {
		for (var i = rowind; i < rows.length; ++i) {
			ret = ret + rows[i].Text;
		}
	} else {
		if (reqcnt < reqlim) {
			ret = ret + "<div class=\"trow\"><div class=\"narrowcol\"\">&nbsp;<\/div><div class=\"widecol\">Loading...<\/div><div class=\"narrowcol\">&nbsp;<\/div><div class=\"narrowcol\">&nbsp;<\/div><\/div>";
		} else {
			ret = ret + "<div class=\"trow\"><div class=\"narrowcol\"\">&nbsp;<\/div><div class=\"widecol\">Kindly refresh the page to continue viewing.<\/div><div class=\"narrowcol\">&nbsp;<\/div><div class=\"narrowcol\">&nbsp;<\/div><\/div>";
		}
	}
	ret = ret + "<\/div>";
	document.getElementById("items").innerHTML=ret;
}

function stateChanged(){ 
 //if(xmlHttp.status==200){
 if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){
  if(xmlHttp.responseXML==null){
   return;
  }
  var error = 0;
  var si=xmlHttp.responseXML.getElementsByTagName("l");
  if(si.length==0){
	error = 117;
	document.getElementById("debug").innerHTML="error"+error;
	return;
  }
  if (error==0) {
   var ei=si[0].getElementsByTagName("error");
   if(ei.length > 0){
	error = 123;
    document.getElementById("debug").innerHTML="error"+error;
	return;
   }  
  }
  var ti=si[0].getElementsByTagName("it");
  /*var di=si[0].getElementsByTagName("di");
  if (di.length > 0) {
	document.getElementById("debug").innerHTML=(di[0].firstChild.nodeValue).toString()+" "+new Date().getTime();
  }*/
  var tttt=ti.length;
  if (tttt == 0) {
	var mi=si[0].getElementsByTagName("msg");
	if (mi.length > 0) {
		document.getElementById("items").innerHTML=(mi[0].firstChild.nodeValue).toString();		
	}
  } else {
  var ts = parseInt(0.001 * (new Date().getTime()));//si[0].getElementsByTagName("ts")[0].firstChild.nodeValue;
  cu = (si[0].getElementsByTagName("cu")[0].firstChild.nodeValue).toString();
  var coundown = 10;
  var next_refresh = false;
  var dex = 0;
  rowind = 0;
  rows = [];
  var ri;
  for (var i = 0; i < tttt; ++i) {
	  var id=ti[i].getElementsByTagName("id")[0].firstChild.nodeValue;
	  var sh=ti[i].getElementsByTagName("sh");//[0].firstChild.nodeValue;
	  var sp = "";
	  if (sh.length > 0) {
		sp = (sh[0].firstChild.nodeValue).toString();
	  }
	  var bc=parseInt(ti[i].getElementsByTagName("bc")[0].firstChild.nodeValue);
	  var bidcnt = bc.toString()+" bid";
	  if (bc != 1) {
		bidcnt = bidcnt + "s";
		if (bc == 0) {
			bidcnt = "<font color=\"#ff0000\">" + bidcnt + "<\/font>";
		}
	  } 
	  var ci=(ti[i].getElementsByTagName("ti")[0].firstChild.nodeValue).toString();
	  var li=(ti[i].getElementsByTagName("li")[0].firstChild.nodeValue).toString();
	  var pr= (ti[i].getElementsByTagName("pr")[0].firstChild.nodeValue).toString();
	  var ri=parseInt(ti[i].getElementsByTagName("ed")[0].firstChild.nodeValue) - ts;
	  if (!next_refresh) {
	  	if (ri > 0) {
	  		next_refresh = true;
			coundown = ri;
	  	}
	  }
	  if (ri > 0) {		
		var thisrow = "<div id=\"ep"+dex+"\" style=\"height:85px;width:600px;top:-1px;left:0px;overflow:hidden;z-index:0;\"><div class=\"imgcol\"><img src=\"http://thumbs3.ebaystatic.com/pict/"+id+"6464_1.jpg\" alt=\"\"\/><\/div><div class=\"widecol\"><a rel=\"nofollow\" href=\""+li+"\">"+ci+"<\/a><\/div><div class=\"pricecol\">"+pr+"<br \/>+"+sp+" p&amp;p<br \/>"+bidcnt+"<\/div><div class=\"timecol\" id=\"cd"+dex+"\">"+ri+"s<\/div></div>";
		var entry = {Offset:ri-coundown, Text:thisrow};
		rows.push(entry);
		++dex;
  	  }
  	}
	reDisplayRows();
	if (timer) {
		clearTimeout(timer);
	}
	if (ri < 2) {
		setTimeout("load();", 1000);
	} else {
		setTimeout("load();", 500*ri);
	}
	displayCountdown(coundown,"cd");
	//document.getElementById("debug").innerHTML=deb;
  }
 }
}

function GetXmlHttpObject(){
 if(xmlHttp!=null){
  delete xmlHttp;
 }
 try{
  // Firefox, Opera 8.0+, Safari
   xmlHttp=new XMLHttpRequest();
 }catch(e){
  //Internet Explorer
  try{ 
   xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  }catch(e){
   xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
 return xmlHttp;
}