// ==UserScript==
// @name           AllegroTools for IE
// @namespace      http://www.thesebas.net/
// @description    kilka narzędzi pomocnych w przegladaniu Allegro (original version by thesebas, IE port by _pawelsky_) // v0.20061214.8
// @include        http*://*allegro.pl/*
// @exclude        http*://*allegro.pl/show_user.php?*
// ==/UserScript==

var auctions =  new Array();

function getSeller(str){
  return str.match(/<b><span class="uname".*?<\/b>/g);
}

function getEndTime(str){
  return str.match(/<span class="small">\(.{3} \d{2} .{3} \d{4} \d{2}:\d{2}:\d{2} .+?\)<\/span>/g);
}

function getAuctionNumberFromLink(str){
  str.match(/item(\d*)_/g);
  return RegExp.$1;
}

function getHiddenAuctions(){
  var c = document.cookie;
}


function makeDate(str){
//<span class="small">(pon 04 gru 2006 19:59:30 CET)</span>
  var PATTERN = new Array('sty','lut','mar','kwi','maj','cze','lip','sie','wrz','paź','lis','gru','CET');
  var REPLACE = new Array('jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec', -1);
  var data = str.match(/\d{2} .{3} \d{4} \d{2}:\d{2}:\d{2} /g)[0];

  for(var i=0; i<12; i++){
    data = data.replace(PATTERN[i], REPLACE[i]);
  }

  return Date.parse(data);
}

function select()
{
  if (arguments.length>1) {
    var node = arguments[0];
    for (var i=1; i<arguments.length; i++) {
      if (typeof(arguments[i])=='string') {
        node = node.getElementById(arguments[i]);
      } else {
        var nodeIdx = arguments[i];
        var children = node.childNodes;
        if (nodeIdx<children.length) {
          node = children[nodeIdx];
        } else {
          node = null;
          break;
        }
      }
    }
  }
  return node;
}

function processAuctionTable(table, auctions)
{
  if (table)
  {
    var rows = table.firstChild.childNodes;
    // Skip non-auction rows (ones without title field)
    for(var i = 0; i<rows.length;i++)
    {
      if (select(rows[i], 0, 0, 0, 0, 1, 0, 0) != null)
      {
        auctions.push(rows[i]);
      }
    }
  }  
}  

function parseResponse()
{
  for(var i=0; i<auctions.length; i++)
  {
    var req = auctions[i].req;
    if (req)
    {
      if (req.readyState == 4) // readyState == complete
      {
        auctions[i].req = false;
        if (req.status == 200) // status == OK
        {
          var responseText = req.responsetext;
          var titleField = select(auctions[i], 0, 0, 0, 0, 1);
          var dateField = select(auctions[i], 3);
          var seller = getSeller(responseText);
          var endTime = getEndTime(responseText)[0];

          var span = document.createElement('span');
          span.innerHTML = seller;
          titleField.appendChild(span);

          var d = new Date();
          d = (makeDate(endTime)-d.getTime())/1000;

          var ss = Math.floor(d%60);
          var mm = Math.floor((d/60)%60);
          var hh = Math.floor((d/60/60));

          var span = document.createElement('span');
          span.innerHTML = hh+"h "+mm+"m "+ss+"s";
          dateField.removeChild(dateField.firstChild);
          dateField.appendChild(span);
        }
        break;
      }
    }
  }
}

function prepareXMLHttpRequest()
{
  var req = false;
  // branch for native XMLHttpRequest object
  if(window.XMLHttpRequest && !(window.ActiveXObject)) {
    try {
    req = new XMLHttpRequest();
    } catch(e) {
    req = false;
    }
  // branch for IE/Windows ActiveX version
  } else if(window.ActiveXObject) {
    try {
      req = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      try {
        req = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(e) {
        req = false;
      }
    }
  }
  
  return req;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function allegrotools()
{
  var node, classAttr;
  var tables = document.getElementsByTagName("table");

  // First find tables with Auction listings and store all listed auction nodes
  for (var i = 0; i < tables.length; ++i)
  {
    node = tables[i];
    classAttr = node.getAttribute('className');
    if((classAttr) && (classAttr == "listing_f" || classAttr == "listing_r"))
    {
      processAuctionTable(node, auctions);
    }
  }

  // Process auction nodes
  for(var i=0; i<auctions.length;i++)
  {
    var req = prepareXMLHttpRequest();
    if(req)
    {
      req.onreadystatechange = parseResponse;
      auctions[i].req = req;
      req.open("GET", select(auctions[i], 0, 0, 0, 0, 1, 0, 0).getAttribute("href"), true);
      req.send(null);
    }
  }
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Start Allegro Tools script
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
allegrotools()
