/*
 * 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
jQuery(document).ready(JT_init);

function JT_init(){
	/* jQuery("a.jTip").hover(
		function(){JT_show(this.href,this.id,this.name)},
		function(){jQuery('#JT').hide().remove()}
	).click(function(){return false}); */	 
	var hoverIn = function(){JT_show(this.href,this.id,this.name)};
	var hoverOut = function(){jQuery('#JT').hide().remove()};
	jQuery("a.jTip").hoverIntent
	({
		sensitivity: 1, // sensitivity threshold (must be 1 or higher)
		interval: 100, // milliseconds for onMouseOver polling interval
		over: hoverIn, // onMouseOver callback function
		timeout: 100, // milliseconds delay before onMouseOut
		out: hoverOut // onMouseOut callback function
	}).click(function(){return false});	   
}

function JT_show(url,linkId,title){
	if(title == false)title="&nbsp;";
	var de = document.documentElement;
	var w = self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
	var hasArea = w - getAbsoluteLeft(linkId);
	var clickElementy = getAbsoluteTop(linkId) - 3; //set y position
	var queryString = url.replace(/^[^\?]+\??/,'');
	var params = parseQuery( queryString );
	
	if(params['width'] === undefined){params['width'] = 250};
	if(params['link'] !== undefined){
		jQuery('#' + linkId).bind('click',function(){window.location = params['link']});
		jQuery('#' + linkId).css('cursor','pointer');
	}
	
	if(hasArea>((params['width']*1)+75)){
		//right side
		jQuery("body").append("<div id='JT' style='width:"+params['width']*1+"px'><div id='JT_arrow_left'></div><div id='JT_close_left'>"+title+"</div><div id='JT_copy'><div class='JT_loader'><div></div></div>");
		var arrowOffset = getElementWidth(linkId) + 11;
		var clickElementx = getAbsoluteLeft(linkId) + arrowOffset; //set x position
	}else{
		//left side
		jQuery("body").append("<div id='JT' style='width:"+params['width']*1+"px'><div id='JT_arrow_right' style='left:"+((params['width']*1)+1)+"px'></div><div id='JT_close_right'>"+title+"</div><div id='JT_copy'><div class='JT_loader'><div></div></div>");
		var clickElementx = getAbsoluteLeft(linkId) - ((params['width']*1) + 15); //set x position
	}
	
	jQuery('#JT').css({left: clickElementx+"px", top: clickElementy+"px"});
	/* jQuery('#JT').show(); 
	jQuery('#JT_copy').load(url); */
	jQuery('#JT').hide().fadeIn(
		'normal', 
		function(){
			jQuery('#JT_copy').hide().load(url).fadeIn('normal')
		}
	);
	
}

/* 
	===== FIXED =====
	When <a></a> tag contains an image, firefox return object.offsetWidth=0 (IE working fine)
	To work around, use the following function to calculate the object.offsetWidth
*/
function getContentWidth(el){
	var frag = document.createDocumentFragment(); 
	var p1=document.createElement('DIV')
	var p2=document.createElement('DIV')
	p2.style.visibility='hidden'
	p1.style.width=el.style.width
	p1.style.height=el.style.height
	p2.style.position='absolute'
	p1.style.position='relative'
	p1.innerHTML=el.innerHTML
	document.body.appendChild(p2)
	p2.appendChild(p1)
	var w=p1.offsetWidth
	document.body.removeChild(p2)
	return w
}

function getElementWidth(objectId) {
	/* x = document.getElementById(objectId);
	return x.offsetWidth; */
	
	// Only use getContentWidth() function when content contains an image
	// alert(jQuery('*').index(jQuery('#'+objectId+' img')[0]));
	x = document.getElementById(objectId);
	if( jQuery('*').index(jQuery('#'+objectId+' img')[0]) != -1 ) {
		the_offset = getContentWidth(x); 
	} else {
		the_offset = x.offsetWidth;
	}
	return the_offset;
}

function getAbsoluteLeft(objectId) {
	// Get an object left position from the upper left viewport corner
	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 oLeft
}

function getAbsoluteTop(objectId) {
	// Get an object top position from the upper left viewport corner
	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 oTop
}

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;
}

function blockEvents(evt) {
	if(evt.target){
		evt.preventDefault();
	}else{
		evt.returnValue = false;
	}
}