function displayDiv(elmName, refElm, topDiff, leftDiff) {
	$(elmName).show();
	var scrolloffset = Position.realOffset(refElm);
	var pos = Position.cumulativeOffset(refElm);
	var offsets_x = pos[0]-scrolloffset[0];
	var offsets_y = pos[1];
	$(elmName).style.left = offsets_x + leftDiff + 'px';
	$(elmName).style.top = offsets_y + topDiff  + 'px';
	
	new Draggable(elmName);
}

function displayDiv2(elmName, top, left, bottom, right) {
	
  offsets = [];
  offsets = getScrollXY();
  
  // set the XY according to the given param and then add scroll offsets 
	if (top != null) {
		$(elmName).style.top  = top + offsets[1] + 'px';
	}

	if (left != null) {
		$(elmName).style.left = left + offsets[0] + 'px';
	}

	if (bottom != null) {
		$(elmName).style.bottom = bottom + offsets[0] + 'px';
	}
  
	if (right != null) {
		$(elmName).style.right = right + offsets[0] + 'px';
	}
  
	
  $(elmName).show();
  new Draggable(elmName, {handle:'popup_header'});
  
}


function mouseoverBox(text_elm, target, refElm, topDiff, leftDiff) {
	$(target).update($(text_elm).innerHTML);
	displayDiv(target, refElm, topDiff, leftDiff);
}

function hideDiv(elmName) {
	//var divElm = document.getElementById(elmName);
	//divElm.style.display = 'none';
	$(elmName).hide();
}

function toggleDiv(elmName, refElm, topDiff, leftDiff) {
	$(elmName).toggle();
	$(elmName).style.top = findPosY(refElm) + topDiff  + 'px';
	$(elmName).style.left = findPosX(refElm) + leftDiff + 'px';
}

function findPosX(o) {
	// Get an object left position from the upper left viewport corner
	// Tested with relative and nested objects
	//o = document.getElementById(objectId)
	oLeft = o.offsetLeft            // Get left position from the parent object
	while(o.offsetParent!=null) {   // Parse the parent hierarchy up to the document element
		oParent = o.offsetParent    // Get parent object reference
		oLeft += oParent.offsetLeft // Add parent left position
		o = oParent
	}
	// Return left postion
	return oLeft
}

function findPosY(o) {
	// Get an object top position from the upper left viewport corner
	// Tested with relative and nested objects
	//o = document.getElementById(objectId)
	oTop = o.offsetTop            // Get top position from the parent object
	while(o.offsetParent!=null) { // Parse the parent hierarchy up to the document element
		oParent = o.offsetParent  // Get parent object reference
		oTop += oParent.offsetTop // Add parent top position
		o = oParent
	}
	// Return top position
	return oTop
}	

function getScrollXY() {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return [ scrOfX, scrOfY ];
}

function displayDiv3(elmName, e) {
  // step 1
  var tempX = 0;
  var tempY = 0;
  var offset = 5;

  // step 2
  obj = $( elmName );
  if (obj==null) return;

  // step 3
  if (document.all) {
    tempX = event.clientX + document.documentElement.scrollLeft;
    tempY = event.clientY + document.documentElement.scrollTop;
  } else {
    tempX = e.pageX;
    tempY = e.pageY;
  }

  // step 4
  if (tempX < 0){tempX = 0}
  if (tempY < 0){tempY = 0}

  // step 5
  obj.style.top  = (tempY + offset) + 'px';
  obj.style.left = (tempX + offset) + 'px';

  // step 6
	obj.style.display = 'block';
  obj.style.visibility = 'visible';
  //$(elmName).show();
  new Draggable(elmName);
}

function showDivAtMouse( src, obj, e ) {

  // step 1
  var tempX = 0;
  var tempY = 0;
  var offset = 5;
  var objHolder = obj;

  // step 2
  obj = $( obj );
  if (obj==null) return;
	obj.update($(src).innerHTML);	

  is_ie = document.all ? true : false;
  // step 3
  if (is_ie) {
    tempX = event.clientX + document.documentElement.scrollLeft;
    tempY = event.clientY + document.documentElement.scrollTop;
  } else {
    tempX = e.pageX;
    tempY = e.pageY;
  }
  // step 4
  if (tempX < 0){tempX = 0}
  if (tempY < 0){tempY = 0}

  // step 5
  obj.style.top  = (tempY + offset) + 'px';
  obj.style.left = (tempX + offset) + 'px';

  // step 6
	obj.style.display = 'block';
  obj.style.visibility = 'visible';
	
}

function opacity(id, opacStart, opacEnd, millisec) {
    //speed for each frame
    var speed = Math.round(millisec / 100);
    var timer = 0;

    //determine the direction for the blending, if start and end are the same nothing happens
    if(opacStart > opacEnd) {
        for(i = opacStart; i >= opacEnd; i--) {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    } else if(opacStart < opacEnd) {
        for(i = opacStart; i <= opacEnd; i++)
            {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    }
}

//change the opacity for different browsers
function changeOpac(opacity, id) {
    var object = document.getElementById(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
}

function closeDiv(id) {
  var obj = document.getElementById(id);
  obj.style.display='none'
}
function fadeout(id) {
  var obj = document.getElementById(id);
  opacity(id, 100, 0, 500);
  setTimeout("closeDiv('" + id + "')", 500);
}

