/*
 * JTip
 * By Cody Lindley (http://www.codylindley.com)
 * Under an Attribution, Share Alike License
 * JTip is built on top of the very light weight jquery library.
 */

//on page load (as soon as its ready) call JT_init
//$(document).ready(JT_init);
var overId = null;
function JT_init(){
	$("a.jtip")
		   .hover(function(){JT_show(this.href,this.id,this.name)},function(){JT_remove()})
           .click(function(){return false});	  
}
function JT_show(url,linkId,title){
	overId = linkId;
	setTimeout(
		function(){
			if(overId == linkId)
				JT_show_(url,linkId,title)
		},
		200);
}

function JT_show_(url,linkId,title){
	if(title == false)title="&nbsp;";
	var de = document.documentElement;
	var windowWidth = self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
	var windowHeight = self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
	
	var elementDimension = {width:0, height:0};
	var childElement = findChild(document.getElementById(linkId) );

	if (childElement != undefined &&  childElement.width) {
		elementDimension.width = childElement.width;
		elementDimension.height = childElement.height;
	}

	var tipPosition = {left:0, top:0};
	var elementPosition = findPosition(childElement);
	var scrollOffset = getScrollXY();
	
	var queryString = url.replace(/^[^\?]+\??/,'');
	var params = parseQuery( queryString );
	
	if(params['width'] == undefined){params['width'] = 260};
	if(params['height'] == undefined){params['height'] = 350};
	if(params['link'] != undefined){
		$('#' + linkId).bind('click',function(){window.location = params['link']});
		$('#' + linkId).css('cursor','pointer');
	}
	
	var widthRight = windowWidth - elementPosition.left - params['width'];
	var heightAbove = elementPosition.top  - scrollOffset.y;
	var heightBelow = windowHeight + scrollOffset.y - elementPosition.top;
		
	//$("body").append("<div id='jt' style='width: "+(params['width']*1)+"px, height: "+(params['height']*1)+"px'><div id='jtTitle'>"+title+"</div><div id='jtCopy'><div class='jtLoader'></div></div></div>");		
	$("body").append("<div id='jt' onmouseover='JT_remove()'><div id='jtTitle'>"+title+"</div><div id='jtCopy'><div class='jtLoader'></div></div></div>");		
	$("body").append("</div>");
	$("body").append("</div>");
	
	if(widthRight > ((params['width']*1)+50)){
		
		tipPosition.left = elementPosition.left + (elementDimension.width*1) +10;
	}else{
		tipPosition.left = elementPosition.left - (params['width']*1) -10;
	}
	
	//console.log("heightBelow %d", heightBelow);
	
	if (heightAbove < 0 ) {

		tipPosition.top = elementPosition.top + (elementDimension.height*1);
		
	} else if (heightBelow > ((params['height']*1)+20) ) {
		tipPosition.top = elementPosition.top;
		
	} else {
		tipPosition.top = elementPosition.top - (params['height']*1) + (elementDimension.height*1);
	}
	if(tipPosition.top < 4){
		tipPosition.top = 4;
	}
	
	
	$('#jt').css({left: tipPosition.left+"px", top: tipPosition.top+"px", width: (params['width']*1)+"px", height: (params['height']*1)+"px"});		
	$('#jt').show();
	$('#jtCopy').load(url);
	
	return false;
}

function JT_remove(){
	overId = null;
	$('#jt').remove();
}

function getScrollXY() {
	var scrollOffset = {x:0, y:0};
  	if( typeof( window.pageYOffset ) == 'number' ) {
    	//Netscape compliant
    	scrollOffset.y = window.pageYOffset;
    	scrollOffset.x = window.pageXOffset;
  	} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    	//DOM compliant
    	scrollOffset.y = document.body.scrollTop;
    	scrollOffset.x = document.body.scrollLeft;
  	} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    	//IE6 standards compliant mode
    	scrollOffset.y = document.documentElement.scrollTop;
    	scrollOffset.x = document.documentElement.scrollLeft;
  	}
  	return scrollOffset;
}

function findChild(obj) {
	var i, isnode;
	for (i=0; i < obj.childNodes.length; i++) {
		var child = obj.childNodes[i];
		// if the node is an element and an IMG set the variable and exit the loop
  		if (child.nodeType==1 && /img/i.test(child.nodeName)) {
   			isnode=i;
   			break;
  		}
	}
	
	if (isnode == undefined)
		return undefined;
	
	return obj.childNodes[isnode];
}

function findImageDimensions(obj) {
	var i, isnode;
	for (i=0; i < obj.childNodes.length; i++) {
		var child = obj.childNodes[i];
		// if the node is an element and an IMG set the variable and exit the loop
  		if (child.nodeType==1 && /img/i.test(child.nodeName)) {
   			isnode=i;
   			break;
  		}
	}
	
	if (isnode == undefined)
		return undefined;
	
	var dimensions = {width:0, height:0};
	dimensions.width = obj.childNodes[isnode].getAttribute('width');
	dimensions.height = obj.childNodes[isnode].getAttribute('height');
	
	return dimensions;
}

function findPosition(obj) {
	var position = {top:0, left:0};
	if (obj.offsetParent) {
		position.left = obj.offsetLeft
		position.top = obj.offsetTop
		while (obj = obj.offsetParent) {
			position.left += obj.offsetLeft
			position.top += obj.offsetTop
		}
	}

	return position;
}

function parseQuery ( query ) {
   var Params = new Object ();
   if ( ! query ) return Params; // return empty object
   var Pairs = query.split(/[;&]/);
   for ( var i = 0; i < Pairs.length; i++ ) {
      var KeyVal = Pairs[i].split('=');
      if ( ! KeyVal || KeyVal.length != 2 ) continue;
      var key = unescape( KeyVal[0] );
      var val = unescape( KeyVal[1] );
      val = val.replace(/\+/g, ' ');
      Params[key] = val;
   }
   return Params;
}