/**
* $Id: tooltip.js 33621 2010-04-08 11:06:22Z iargent $
* @author Eber Herrera 
*
*/

function GSI_Widget_Tooltip(){
	
	this.name = 'tooltip';
	this.loadOrder = 1;
	this.overTooltip = false;
	var active = true;
	
		
	var _mthis = this;
	
	var loadSteps = 1;
	
	this.getLoadSteps = function(){
		return loadSteps;
	}
	
	var load = function(){
		var tRes = true;
		try{
			if (typeof GSI=="undefined") return false;
		} catch(e){
			return false;
			}
		return tRes;
	};
	
	this.setActive = function (){
		active = true;
	};
	
	this.setInactive = function (){
		active = false;
	};
	
	this.show = function(DOM, title, content, URL, width, pos, floating){
		if (!active) return;
		if(!title) title="&nbsp;";
		pos = pos ? pos : ''; 
		var de = document.documentElement;
		var w = self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
		var hasArea = w - getAbsoluteLeft(DOM);
		var clickElementy = getAbsoluteTop(DOM) - 3; //set y position
		var params = new Array();
		if (URL) {
			var queryString = URL.replace(/^[^\?]+\??/,'');
			params = parseQuery( queryString );
			if(params['width'] === undefined){params['width'] = 250};
			if(params['link'] !== undefined){
				$(DOM).bind('click',function(){window.location = params['link']});
				$(DOM).css('cursor','pointer');
			}
		} else {
			params['width'] =  width ? width : 250;
		}
		
		
		if(pos.toLowerCase() != "r" && hasArea>((params['width']*1)+75)){
			$("body").append("<div id='GSI_JT' style='width:"+params['width']*1+"px'><div id='GSI_JT_arrow_left'></div><div id='GSI_JT_close_left'>"+title+"</div><div id='GSI_JT_copy'><div class='GSI_JT_loader'><div></div></div>");//right side
			var arrowOffset = getElementWidth(DOM) + 11;
			var clickElementx = getAbsoluteLeft(DOM) + arrowOffset; //set x position
		}else{
			$("body").append("<div id='GSI_JT' style='width:"+params['width']*1+"px'><div id='GSI_JT_arrow_right' style='left:"+((params['width']*1)+1)+"px'></div><div id='GSI_JT_close_right'>"+title+"</div><div id='GSI_JT_copy'><div class='GSI_JT_loader'><div></div></div>");//left side
			var clickElementx = getAbsoluteLeft(DOM) - ((params['width']*1) + 15); //set x position
		}
		
		$('#GSI_JT').css({left: clickElementx+"px", top: clickElementy+"px"});
		if (floating) $('#GSI_JT').css({position: "fixed"});
		$('#GSI_JT').show().hover(function(){_mthis.overTooltip=true;},function(){_mthis.overTooltip=false;});
		if (URL) $('#GSI_JT_copy').load(url);
		else if (content) $('#GSI_JT_copy').html(content);
		else _mthis.hide();
		
	};
	
	this.hide = function(){
		//return;
		$('#GSI_JT').hide().remove();
	};
	
	var getElementWidth = function (DOMobject) {
		return DOMobject.offsetWidth;
	}
	
	var getAbsoluteLeft = function (DOMobject) {
		// Get an object left position from the upper left viewport corner
		o = DOMobject;
		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;
	}
	
	var getAbsoluteTop = function (DOMobject) {
		// Get an object top position from the upper left viewport corner
		o = DOMobject;
		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;
	}
	
	var parseQuery = function  ( 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;
	}
	
	this.init = function(){
		if (!load()) {
			GSI.updateProgressBar(_mthis.name +" "+ GSI.dict.getText('JSAPI', 'widget_initiation_error'));
			return false;
		}
		_mthis.loaded=true;
		GSI.updateProgressBar(_mthis.name +" "+ GSI.dict.getText('JSAPI', 'widget_initiated'));
		return true;
	};
}
GSI_Widget_Tooltip.prototype=new GSI_Widget();

var tW = new GSI_Widget_Tooltip();
GSI.widgets.loadWidget(tW);
