function GetAbsoluteTop(elem) {
	var top = 0;
	while(elem.offsetParent) { top += elem.offsetTop; elem = elem.offsetParent;	}
	return top;
}

function GetAbsoluteLeft(elem) {
	var left = 0;
	while(elem.offsetParent) { left += elem.offsetLeft; elem = elem.offsetParent; }
	return left;
}

function ElemsOverlap(elemA, elemB) {
	var la,lb,ta,tb,wa,wb,ha,hb;
	la = GetAbsoluteLeft(elemA);  lb = GetAbsoluteLeft(elemB);
	ta = GetAbsoluteTop(elemA);   tb = GetAbsoluteTop(elemB);
	wa = elemA.offsetWidth;       wb = elemB.offsetWidth;
	ha = elemA.offsetHeight;      hb = elemB.offsetHeight;

	if(wa == 0 || wb == 0 || ha == 0 || hb == 0) return false;

	if(lb > la) {
		if((lb - la) >= wa) return false;
	} else if(lb < la) {
		if((la - lb) >= wb) return false;
	}

	if(tb > ta) {
		if((tb - ta) >= ha) return false;
	} else if(lb < la) {
		if((ta - tb) >= hb) return false;
	}

	return true;
}

function OpenWindow(url, args, target) {
	if(null == target) target = "_blank";
	var w = window.open(url, target, args);
	w.focus();
	return w;
}

function EscapeQueryTerms(qts) {
	return qts.replace(/"/g, "\\\"");
}

function SetPluginElementVisible(elem, visible) {
	elem = D_Elem(elem);
	if(UA_SAFARI) {
		elem.style.left = visible ? "0" : "8000px";
	} else if(UA_MSIE) {
	
		elem.style.display = visible ? "block" : "none";
		
		
	} else {
		elem.style.visibility = visible ? "visible" : "hidden";
	}
}


/**
 * Simple crossbrowser onDOMReady functionality
 * 
 * usage:
 * onDOMReady(function() {
 * 	myFunction();
 * });
 */
var onDOMReadyQueue = [];	

var onDOMReady = function(fn) {
	onDOMReadyQueue.push(fn);
	
	var init = function() {
		if ( arguments.fired ) return;
		arguments.fired = true;

		for (var i = 0; i < onDOMReadyQueue.length; i++) {
			var cb = onDOMReadyQueue.pop();
			cb();
		}

	};

	if (document.addEventListener) {
		document.addEventListener("DOMContentLoaded", init, false);
	}

	/*@cc_on @*/
	/*@if (@_win32)
	   document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
		var script = document.getElementById("__ie_onload");
	   script.onreadystatechange = function() {
		   if (this.readyState == "complete")
		   	init();
		}
	/*@end @*/

	if ( /WebKit/i.test(navigator.userAgent) ) {
	    var _timer = setInterval(function() {
	        if ( /loaded|complete/.test(document.readyState) )
				clearInterval(_timer);
	            init();
	    }, 10);
	}

	window.onload = init;
}



/////////////////////////////////////////////////
function syndeticsPlaceTOC()
{
   // See if there is a syndetics toc placeholder in sideinfo, if there is use it.
   // Otherwise, shove it at the end of the sideinfo div.
   if (D_ElemUnsafe('syndetics_toc'))
   {
      if (D_ElemUnsafe('syndetics_sideinfo'))
      {
         D_Elem('syndetics_sideinfo').appendChild(D_ElemUnsafe('syndetics_toc'));
      }
      else if (D_ElemUnsafe('sideinfo'))
      {
        D_Elem('sideinfo').appendChild(D_ElemUnsafe('syndetics_toc'));
      }
      
      // Make it visible.
      D_ElemUnsafe('syndetics_toc').style.display = "block";
   }
}

function xIsbnPlaceElements()
{
   // 1. Attempt to place any toc entry.
   if (D_ElemUnsafe('sideinfo') && D_ElemUnsafe('xisbn_toc'))
   {
     D_Elem('sideinfo').appendChild(D_ElemUnsafe('xisbn_toc'));
   }
   
   // Make it visible.
   if (D_ElemUnsafe('xisbn_toc'))
      D_ElemUnsafe('xisbn_toc').style.display = "block";
      
   // 2. Attempt to place the mini refine.
   if (D_ElemUnsafe('sideinfo'))
   {
     D_Elem('sideinfo').appendChild(D_ElemUnsafe('xisbn_minirefine'));
   }
   
   // Make it visible.
   D_ElemUnsafe('xisbn_minirefine').style.display = "block";
}

function forceReflow (){
    var rd = Content.GetResultDocument();
    var pb = rd.body.style.paddingBottom;
    rd.body.style.paddingBottom = "10px";
    D_Elem("content").style.paddingBottom = "10px";
    setTimeout(function(){
        rd.body.style.paddingBottom = pb;
        D_Elem("content").style.paddingBottom = 0;
    }, 10);
    
    if (Refine.GetBranchSel()) {
        Refine.GetBranchSel().parentNode.style.display = 'block';
    }
}

