var quickViewCache = new Object();

function hiddenQuickView()
{
  elQV = document.getElementById('quickViewDiv');
  elQV.style.visibility = 'hidden';
  elQV.innerHTML = '';
}

function showQuickView(elParent, sUrl)
{
  var context = undefined;
  context = quickViewCache[sUrl];
  if(context==undefined)
  {
    context='<img src="../images/indicator.gif" border="0"/> Loading... ';
    showQuickViewContext(elParent, context);
    ajaxGet(sUrl, loadQuickViewContext, elParent);
  }
  else
  {
    showQuickViewContext(elParent, context);
  }
}

function showQuickViewContext(elParent, context)
{
  var elQV = document.getElementById('quickViewDiv');
  elQV.innerHTML = context;	
  var maxh = getPageBottomPosition()-10;
  var r = getAbsolutePos(elParent);
  var x = r.x+20;
  var y = (r.y+elQV.offsetHeight<maxh) ? r.y-2 : maxh-elQV.offsetHeight;
  
  elQV.style.top = y + "px";
  elQV.style.left = x + "px";
  elQV.style.visibility = 'visible';
}

function loadQuickViewContext(sUrl, sContext, elParent)
{
  quickViewCache[sUrl] = sContext;
  showQuickView(elParent, sUrl);
}

function ajaxGet(sUrl, fResponseHandler, oId)
{
  var req = false;	  

  if(window.XMLHttpRequest)
  {
    req = new XMLHttpRequest();
  }
  else if(window.ActiveXObject)
  {
    req = new ActiveXObject("Microsoft.XMLHTTP");
  }
  else
  {
    alert('error ajax create request');
  }

  req.onreadystatechange = function()
  {
    if(req.readyState == 4)
    {
	  if(req.status == 200)
      {
        fResponseHandler(sUrl, req.responseText, oId);
      }
      else
      {
        alert('error ajax response');
      }
    }
  };
  req.open('GET', sUrl, true);
  req.send(null);
}

function getAbsolutePos(el)
{
 var SL = 0, ST = 0;
 var is_div = /^div$/i.test(el.tagName);
 if (is_div && el.scrollLeft){SL = el.scrollLeft;}
 if (is_div && el.scrollTop) {ST = el.scrollTop;}
 var r = {x:el.offsetLeft - SL, y:el.offsetTop - ST};
 if (el.offsetParent) {var tmp = this.getAbsolutePos(el.offsetParent); r.x += tmp.x; r.y += tmp.y;}
 return r;
}
function getPageBottomPosition()
{
var h;
if (self.innerHeight) h = self.innerHeight+self.pageYOffset;
else if(document.documentElement) h = document.documentElement.clientHeight + document.documentElement.scrollTop;
else if(document.body) h = document.body.clientHeight+document.body.scrollTop;
return h;
}
