function findParentOfClass(el, parentClass) {
	var p = el;
	while (p.parentNode && p.className != parentClass) {
	    p = p.parentNode;
	}
	if (p && p.className == parentClass) return p;
	return null;
}

function findChildOfClass(el, childClass) {
	var a = el.childNodes;
	var i, p;
	for (i = 0; i < a.length; i++) {
		p = a[i];
		if (p.className == childClass) return p;
		p = findChildOfClass(p, childClass);
		if (p) return p;
	}
	return null;
}

function get_coords(d) {
  var x = 0;
  var y = 0;
  var p = d;
  while (p.offsetParent) {
      x += p.offsetLeft;
      y += p.offsetTop;
    p = p.offsetParent;
  }
  var n = new Object();
  n.x = x;
  n.y = y;
  return n;
}

var zooming;
var dezooming;
var iterating = false;

function dezoom() {
  if (!zooming) return;
    dezooming = zooming;
    zooming = undefined;
    dezooming.targx = dezooming.origx + 4;
    dezooming.targy = dezooming.origy + 4;
    dezooming.targw = dezooming.origw;
    dezooming.targh = dezooming.origh;
    dezooming.origx = dezooming.curx;
    dezooming.origy = dezooming.cury;
    dezooming.origw = dezooming.curw;
    dezooming.origh = dezooming.curh;
    dezooming.newthumb.style.border = '1px solid white';
    dezooming.newimage.style.display = 'none';
    dezooming.one_minus_lambda = 0.8;
    dezooming.newimage.loaded = true;
    if (!iterating) iterate();  
}

function getscrollpos() {
  var r = new Object();
  if (window.innerWidth == undefined) {
    r.w = document.body.clientWidth;
    r.h = document.body.clientHeight;
    r.x = document.body.scrollLeft;
    r.y = document.body.scrollTop;
    r.max_y = document.body.scrollHeight;
  }
  else {
    r.w = window.innerWidth;
    r.h = window.innerHeight;
    r.x = window.scrollX;
    r.y = window.scrollY;
    r.max_y = window.scrollMaxY;
  }
  return r;
}

function imagezoom(link, imgurl) {
  dezoom();
  zooming = new Object();
  zooming.origimg = findChildOfClass(link, "expand_img");
  var coords = get_coords(zooming.origimg);
  zooming.curx = zooming.origx = coords.x - 5;
  zooming.cury = zooming.origy = coords.y - 5;
  zooming.curw = zooming.origw = zooming.origimg.width;
  zooming.curh = zooming.origh = zooming.origimg.height;
  zooming.curopacity = 0;
  zooming.targopacity = 100;
  zooming.newthumb = zooming.origimg.cloneNode(false);
  zooming.newthumb.style.position = "absolute";
  zooming.newthumb.style.left = zooming.origx + "px";
  zooming.newthumb.style.top = zooming.origy + "px";
  zooming.newthumb.style.border = "5px solid white";
  zooming.newthumb.style.zIndex = "100";
  zooming.newimage = document.createElement("img");
  zooming.newimage.style.position = "absolute";
  zooming.newimage.style.left = zooming.origx + "px";
  zooming.newimage.style.top = zooming.origy + "px";
  zooming.newimage.style.border = "5px solid white";
  zooming.newimage.style.zIndex = "120";
  zooming.newimage.style.visibility = "hidden";  
  zooming.imageloaded = false;
  zooming.newimage.onload = function() { this.loaded = true; }
  zooming.one_minus_lambda = 0.93;
  document.getElementById('insertimageshere').appendChild(zooming.newimage);
  document.getElementById('insertimageshere').appendChild(zooming.newthumb);
  zooming.newimage.src = imgurl;
  zooming.origimg.style.visibility = "hidden";
  zooming.link = link;
  
  var scrollpos = getscrollpos();
  wW = scrollpos.w;
  wH = scrollpos.h;
  wX = scrollpos.x;
  wY = scrollpos.y;
  zooming.targw = 640;
  zooming.targh = 480;
  zooming.targx = (wW - zooming.targw) / 2 + wX;
  zooming.targy = (wH - zooming.targh) / 2 + wY;   
  
  var lft = document.getElementById('lostfocusthingy');
  lft.style.left = "-10px";
  lft.style.top = zooming.origy - 20 + "px";
  lft.onblur = function () { dezoom(); };
  lft.focus();
   
  if (!iterating) iterate();
}

var lastiterationtime;
function iterate() {
  var more = false;
  
  if (!iterating) {
    iterating = true;
    lastiterationtime = (new Date()).getTime();
    }

  var now = (new Date()).getTime();
  var delta_t = now - lastiterationtime;
  lastiterationtime = now;

  if (zooming) 
    more = more || step(zooming, delta_t);
  if (dezooming)
    more = more || step(dezooming, delta_t);
  
  if (!more && dezooming) {
    if (dezooming.origimg) 
      dezooming.origimg.style.visibility = 'visible';
    if (dezooming.newimage) 
      dezooming.newimage.parentNode.removeChild(dezooming.newimage);
    if (dezooming.newthumb) 
      dezooming.newthumb.parentNode.removeChild(dezooming.newthumb);
    dezooming = undefined;
  }
  
  if (more) setTimeout("iterate()", 10);
  else iterating = false;
  }

function apply_step(obj, cur, targ, lambda, one_minus_lambda) {
  var orig = eval("obj." + cur);
  eval("obj." + cur + " = obj." + targ + " * lambda + obj." + cur
    + " * one_minus_lambda;");
  return Math.abs(orig - eval("obj." + cur));
}

function step(obj, delta_t) {
  var one_minus_lambda = Math.pow(obj.one_minus_lambda, delta_t / 10);
  var lambda = 1 - one_minus_lambda;
  var opacity_omlambda = Math.pow(0.98, delta_t / 10);
  var opacity_lambda = 1 - opacity_omlambda;
  
  var change = 0;
  
  change += apply_step(obj, "curx", "targx", lambda, one_minus_lambda);
  change += apply_step(obj, "cury", "targy", lambda, one_minus_lambda);
  change += apply_step(obj, "curw", "targw", lambda, one_minus_lambda);
  change += apply_step(obj, "curh", "targh", lambda, one_minus_lambda);
      
  if (obj.newimage.loaded) {
    obj.newimage.style.visibility = "visible";
    change += apply_step(obj, "curopacity", 
      "targopacity", opacity_lambda, opacity_omlambda);
    var curop = Math.ceil(obj.curopacity);
    obj.newimage.style.MozOpacity = curop / 100;
    obj.newimage.style.opacity = curop / 100;
    obj.newimage.style.filter = "filter: alpha(Opacity=" + curop + "); ";
  }
  
  obj.newimage.style.left 
    = obj.newthumb.style.left 
    = obj.curx + "px";
  obj.newimage.style.top
    = obj.newthumb.style.top 
    = obj.cury + "px";
  obj.newimage.style.width 
    = obj.newthumb.style.width 
    = obj.curw + "px";
  obj.newimage.style.height 
    = obj.newthumb.style.height 
    = obj.curh + "px";

  if (change < 0.1 && change > 0 && obj.newimage.loaded) {
    return false;
    }
  return true; 
}

function richresize(what) {
  ctht = what.scrollHeight + 25;
  if (!ctht) return;
  if (ctht < 100) ctht = 100;
  if ((parseInt(what.style.height) || 0) > ctht + 25) {
    what.style.height = ctht + "px";
  }
  if ((parseInt(what.style.height) || 0) < ctht - 25) {
    what.style.height = ctht + "px";
  }
}

var windowIsLoaded = 0;
var adel;
window.onload = function () { 
  windowIsLoaded = 1; 
  adel = document.getElementById('leftads');
  if (adel) adwalk(adel);
  adel = document.getElementById('rightads');
  if (adel) adwalk(adel);
  }

function adwalk(el) {
  var coords = get_coords(el);
  var scrollpos = getscrollpos();
  
  if (!el.origPos) el.origPos = coords;
  
  if (coords.y + el.offsetHeight < scrollpos.y - 30) {
    //Move the element down the page, below the fold again
    var newpos = (scrollpos.y + scrollpos.h);
    if (newpos + el.offsetHeight > scrollpos.max_y) 
      newpos = scrollpos.max_y - el.offsetHeight;
    el.style.position = 'absolute';
    el.style.top = newpos + "px";
//    el.style.left = coords.x + "px";
    
  }
  
  if (coords.y > scrollpos.y + scrollpos.h + 30) {
    //Move the element up
    var newpos = scrollpos.y - el.offsetHeight;
    if (newpos < el.origPos.y) newpos = el.origPos.y;
    
      el.style.position = 'absolute';
      el.style.top = newpos + "px";
//      el.style.left = coords.x + "px";
        
  }
  
  setTimeout(function () {adwalk(el);}, 300);
}

