/*
	sTip - jQuery dependant ToolTip function.

	Version 0.4.2, 10/2011.
	Copyright Sami Puro.
*/


var browser=getBrowser();
var headers=new Array();
var canHide=new Array();
var timer=0;


$(document).ready(function () {
	prepareToolTips();
});



function prepareToolTips(divid) {
	if (divid && divid!='') {
		var name='#' + divid + ' div';
	} else
		var name='div';
	$(name).each(function() {
		if (this.className!='tooltipdiv')
			return;
		$(this).html(toolTipHeader() + $(this).html() + toolTipFooter());
	});
}


function loadAjaxToolTips(divid) {
	headers=new Array();

	setTimeout(function() {
		prepareToolTips(divid);
	}, 100);
}



var trigger='';
var tipShow=new Number(0);
var tips=new Array();

function showTip(tip, trigger2, pos) {

	trigger=$(trigger2);
	if (!pos)
		pos='';
	if (browser==10)
		var delay=100;
	else
		var delay=400;
	tipShow.Timer("showTip2('" + tip + "', '" + pos + "');", delay, true);
}


//	tooltip pos: 0/null/1 = top, 2 = bottom, 3 = left, 4 = right
function showTip2(tip, pos) {

	// Hide others.
	$("div.[id^='tooltip']").fadeOut(150);

	var tipname=tip;
	var tip=$(document.getElementById(tip));
	if (!tip || tip.is(":visible") || tip.is(":animated"))
		return;

	if (!pos || pos==null || pos=='') {
		var top=trigger.position().top - tip.outerHeight() - 10;
		var left = trigger.position().left - ((tip.outerWidth()/2) - 10);
		var right = trigger.position().left + tip.outerWidth() + 10;

		pos=1;
		if (right>viewportWidth())
			pos=3;
		if (top<5)
			pos=2;
		if (left<5)
			pos=4;
	}

	if (!headers[tipname] || headers[tipname]!=pos) {
		tip.html(toolTipArrow(tipname, pos));
		if (!headers[tipname]) {
			canHide[tipname]=1;
			tip.hover(function() { canHide[tipname]=0; }, function() { canHide[tipname]=1; hideTip(tipname) });
		}
		headers[tipname]=pos;
	}

	var top=trigger.position().top - tip.outerHeight();
	var height = tip.outerHeight() + trigger.outerHeight();
	if (pos==2)
		top += height;	// bottom
	else if (pos==3 || pos==4)
		top += (height / 2);
	else if (pos==1)
		top += 3;

	var width = trigger.outerWidth() + tip.outerWidth();
	var left = trigger.position().left + trigger.outerWidth();
	if (pos==3)
		left -= width;		// left
	else if (pos==4)
		left += 0;		// right
	else
		left -= width / 2;

	if (browser!=10 && !tips[tipname]) {
//		if (pos==3)
//			left-=15;
//		else if (pos==4)
//			left+=15;
//		else
//			left-=15;
		tips[tipname]=1;
	}
	top=Math.round(top);
	left=Math.round(left);

	var margin=trigger.css("margin-left");
	if (margin!=null && margin!='' && strpos(margin, 'px')!==false)
		left+=Math.round(margin.substring(0,strpos(margin, 'px')));

	tip.css({position:'absolute', 'z-index': '500', top: top, left: left});
	tip.fadeIn(300);
}


function hideTip(tip) {
	tipShow.EndTimer();

	var tipname=tip;
	var tip=$(document.getElementById(tip));

	timer = setTimeout(function() {
		if (canHide[tipname]<1)
			return;
		if (!tip.is(":visible"))
			return;
		tip.fadeOut(300);
	}, 10);
}


function toolTipHeader() {
	if (browser==10)
		return '<table class="tooltip"><tr><td class="corner topleftIE"></td><td class="topIE"></td><td class="corner toprightIE"></td></tr><tr><td class="leftIE"></td><td class="tooltip_content">';
	else if (browser==2)
		return '<table class="tooltip"><tr><td class="corner topleft"></td><td class="topSafari"></td><td class="corner topright"></td></tr><tr><td class="left"></td><td class="tooltip_content">';
	else
		return '<table class="tooltip"><tr><td class="corner topleft"></td><td class="top"></td><td class="corner topright"></td></tr><tr><td class="left"></td><td class="tooltip_content">';
}


function toolTipFooter() {
	if (browser==10)
		return '</td><td class="rightIE"></td></tr><tr><td class="corner bottomleftIE"></td><td class="bottomIE"></td><td class="corner bottomrightIE"></td></tr></table>';
	else
		return '</td><td class="right"></td></tr><tr><td class="corner bottomleft"></td><td class="bottom"></td><td class="corner bottomright"></td></tr></table>';
}


//	tooltip pos: 0/null/1 = top, 2 = bottom, 3 = left, 4 = right
function toolTipArrow(tipname, pos) {
	var tip=document.getElementById(tipname);
	if (!tip || tip==null)
		return;

	var fieldnames=new Array('bottom', 'top', 'right', 'left');
	var fieldname=fieldnames[(pos-1)];
	if (browser==10)
		fieldname+='IE';

	for (a=0; a<fieldnames.length; a++) {
		var name=fieldnames[a];
		if (browser==10)
			name+='IE';
		if (name==fieldname && (name=='bottom' || name=='top' || name=='bottomIE' || name=='topIE')) {
			var data='<img style="display:block;';
			if (browser==2 && name=='bottom')
				data=data + 'position: relative; top: -1px;';
			data=data + '" width="30" alt="" src="/layout/script/jquery/css/tooltip/bubble-tail-' + (fieldnames[a]) + (browser==10 ? '.gif' : '.png') + '">';
		} else if (name==fieldname && (name=='right' || name=='left' || name=='rightIE' || name=='leftIE'))
			var data='<img style="display:block;" width="28" alt="" src="/layout/script/jquery/css/tooltip/bubble-tail-' + (fieldnames[a]) + (browser==10 ? '.gif' : '.png') + '">';
		else
			var data='';

		$("#" + tipname + " ." + name).each(function() {
			if (this.className==name)
				$(this).html(data);
		});
	}

	return $(tip).html();
}


function strpos (haystack, needle, offset) {
    var i = (haystack+'').indexOf(needle, (offset ? offset : 0));
    return i === -1 ? false : i;
}


function viewportWidth() {
	return self.innerWidth || (document.documentElement.clientWidth || document.body.clientWidth);
}

function viewportHeight() {
	return self.innerHeight || (document.documentElement.clientHeight || document.body.clientHeight);
}


Number.prototype.Timer = function(s, iT, bUrge) {
	if(!this.value || bUrge)
		this.value = window.setTimeout(s, iT);
}

Number.prototype.EndTimer = function() {
	if(this.value) {
		window.clearTimeout(this.value);
		this.value = 0;
	}
}


function getBrowser() {
	if (/MSIE (\d+\.\d+);/.test(navigator.userAgent))
		return 10;
	else if (/Safari\//.test(navigator.userAgent) || /Chrome\//.test(navigator.userAgent))
		return 2;
	else
		return 1;

}


