var win = new PopupWindow('popupcontents');
win.autoHide();
var shapes = getShapes();

function settitle(target, title){
    if(typeof target != 'undefined'){
        target.title = title;
    }
}

function setcursor(event, target){
    var matched = getIntersected(event);
    if(matched.length >= 1){
        switchCursor('pointer');
        if(matched.length == 1){
        	settitle(target, matched[0].name + "  Click to view it");
        }else{
            settitle(target, matched.length + " items under the mouse.  Click to select one.");
        }
    }else{
        switchCursor('default');
        settitle(target, '');
    }
    return true;
}

function truncate(s){
    if(s.length < 25){
    	return s;
    }
	var lastspace = 25;
	for(var i = 0; i < 25 && i < s.length; i++){
	  if(s.charAt(i) == ' '){
	  	lastspace = i;
	  }
	}
	return s.substring(0, lastspace) + '...';
}

function showpopup(event){
    var ul = document.getElementById('dynamicList');
    while(ul.childNodes.length){
      ul.removeChild(ul.childNodes.item(0));
    }
    var matched = getIntersected(event);
    if(matched.length == 1){
      window.location = matched[0].href;
      return;
    }else if(matched.length > 1){
	    for(var i = 0; i < matched.length; i++){
            li = document.createElement('li');
            a = document.createElement('a');
            a.href = matched[i].href;
            a.title = matched[i].name;
            if(typeof matched[i].image != 'undefined'){
                img = document.createElement('img');
                img.src = matched[i].image;
                a.appendChild(img);
            }
            a.appendChild(document.createTextNode(truncate(matched[i].name)));
            li.appendChild(a);
            ul.appendChild(li);
	    }
	    win.showPopup('popupanchor');
    }else{
        win.hidePopup('popupanchor');
    }
}

function getIntersected(event){
    if(typeof event.offsetX == 'undefined'){
      offsets = getOffsets(event);
      event.offsetX = offsets.offsetX;
      event.offsetY = offsets.offsetY;
    }
    var matched = [];
    for(var i = 0; i < shapes.length; i++){
        if(shapes[i].intersects(event.offsetX, event.offsetY)){
          win.offsetX = event.offsetX;
          win.offsetY = event.offsetY + 10;
          matched.push(shapes[i]);
        }
    }
    return matched;
}

function getTarget(evt){
  var target = evt.target;
  if(typeof target == 'undefined'){
      return target;
  }
  if (typeof target.offsetLeft == 'undefined') {
    target = target.parentNode;
  }
  return target;
}
    
function getOffsets (evt) {
  var target = getTarget(evt);
  var pageCoords = getPageCoords(target);
  var eventCoords = {
    x: window.pageXOffset + evt.clientX,
    y: window.pageYOffset + evt.clientY
  };
  var offsets = {
    offsetX: eventCoords.x - pageCoords.x,
    offsetY: eventCoords.y - pageCoords.y
      };
  return offsets;
}

function getPageCoords (element) {
  var coords = {x : 0, y : 0};
  while (element) {
    coords.x += element.offsetLeft;
    coords.y += element.offsetTop;
    element = element.offsetParent;
  }
  return coords;
}

