﻿Ext.namespace('AV');
AV.NFTip = function(config)
{
	var _curArrowId = 'imgArrowUL'; 
	var _hideProc = 1;
	var _hideDelay = config.hideDelay ? config.hideDelay : 100; 
	var _config = config;
	
	var _arrowImgCur, _arrowImgUL, _arrowImgUR, _arrowImgLL, _arrowImgLR, _content;
	
	var hideTip = function()
	{
		Ext.get(_tip).setVisible(false);
		Ext.get(_arrowImgCur).setVisible(false);
	}
	var onOut = function(e) { _hideProc = setTimeout(hideTip, 100); }
	var clearTO = function() { clearTimeout(_hideProc); }
	var onOver = function(e)
	{
		clearTO();
	
		_content.update(_config.getContentFn(e.getTarget()));
		
		var scroll = Ext.get(document).getScroll();
		var scrollTop = (scroll && scroll.top) ? scroll.top : 0;
		var scrollLeft = (scroll && scroll.left) ? scroll.left : 0;
	  
		var viewWidth = Ext.lib.Dom.getViewWidth();     
		var viewHeight = Ext.lib.Dom.getViewHeight();
		var scrollBot = scrollTop + viewHeight;
	   
		var targetBox = Ext.get(e.getTarget()).getBox();
		var tipBox = _tip.getBox();
		var arrowBox = _arrowImgCur.getBox();
		
		_arrowImgCur.dom.style.visibility = 'hidden';

		// target is in E hemisphere or it's an AV Lite site.
		if (targetBox.x > ((viewWidth/2) + scrollLeft) || AV.site_type_id === '2' || AV.site_type_id === '7')
		{	
			tipBox.x = (targetBox.x - tipBox.width - 18);
			arrowBox.x = tipBox.width - 28;
			
			// target is in SE quadrant
			if (targetBox.y > ((viewHeight/2) + scrollTop))
			{	
				tipBox.y = (((targetBox.bottom < scrollBot) ? targetBox.bottom : scrollBot) - tipBox.height + 15);
				_arrowImgCur = _arrowImgLR;
				arrowBox.y = tipBox.height - 85;
			}
			// target is in NE quadrant
			else
			{	
				tipBox.y = (((targetBox.y > scrollTop) ? targetBox.y : scrollTop) - 15);
				_arrowImgCur = _arrowImgUR;
				arrowBox.y = 21;
			}
		}
		// target is in W hemisphere
		else
		{
			tipBox.x = targetBox.right + 15;
			arrowBox.x = -32;
			
			// target is in SW quadrant
			if (targetBox.y > ((viewHeight/2) + scrollTop))
			{	
				tipBox.y = (((targetBox.bottom < scrollBot) ? targetBox.bottom : scrollBot) - tipBox.height + 15);
				_arrowImgCur = _arrowImgLL;
				arrowBox.y = tipBox.height - 85;
			}
			// target is in NW quadrant
			else
			{	
				tipBox.y = (((targetBox.y > scrollTop) ? targetBox.y : scrollTop) - 15);
				_arrowImgCur = _arrowImgUL;
				arrowBox.y = 21;
			}
		}

		_tip.setLeftTop(tipBox.x, tipBox.y);
		_arrowImgCur.setLeftTop(arrowBox.x, arrowBox.y);
		
		_arrowImgCur.setVisible(true);
		_tip.setVisible(true);
	}

	_tip = new Ext.Layer({shim: true, constrain:false});
	if (Ext.isIE)
	{
		_tip.update('<img class="pngFix ttArrow arrowUL" alt="" src="/library/tooltip/NFTip-Images/point-nw.png" style="position:absolute; top:10px; left:-43px;"/>' +
			'<img class="pngFix ttArrow arrowUR" alt="" src="/library/tooltip/NFTip-Images/point-ne.png" style="visibility:hidden; position:absolute; top:10px; left:227px;"/>' +
			'<img class="pngFix ttArrow arrowLL" alt="" src="/library/tooltip/NFTip-Images/point-sw.png" style="visibility:hidden; position:absolute; top:30px; left:-43px;"/>' +
			'<img class="pngFix ttArrow arrowLR" alt="" src="/library/tooltip/NFTip-Images/point-se.png" style="visibility:hidden; position:absolute; top:30px; left:227px;"/>' +
		'<table id="ttContainer" cellpadding="0" cellspacing="0" border="0">' +
			'<tr>' +
				'<td class="pngFix" style="background-image: url(/library/tooltip/NFTip-Images/nw.png); height:28px; width:28px;"></td>' +
				'<td class="pngFix" style="background-image: url(/library/tooltip/NFTip-Images/n.png); height:28px; "></td>' +
				'<td class="pngFix" style="background-image: url(/library/tooltip/NFTip-Images/ne.png); height:28px; width:28px;"></td>' +
			'</tr>' +
			'<tr>' +
				'<td class="pngFix" style="background-image: url(/library/tooltip/NFTip-Images/w.png); width:28px;"></td>' +
				'<td style="background-color:#ffffff;"><div class="ttContent"></div></td>' +
				'<td class="pngFix" style="background-image: url(/library/tooltip/NFTip-Images/e.png); width:28px;"></td>' +
			'</tr>' +
			'<tr>' +
				'<td class="pngFix" style="background-image: url(/library/tooltip/NFTip-Images/sw.png); height:28px; width:28px;"></td>' +
				'<td class="pngFix" style="background-image: url(/library/tooltip/NFTip-Images/s.png); height:28px; "></td>' +
				'<td class="pngFix" style="background-image: url(/library/tooltip/NFTip-Images/se.png); height:28px; width:28px;"></td>' +
			'</tr>' +
		'</table>');
	}
	else
	{
		_tip.update('<img class="pngFix ttArrow arrowUL" alt="" src="/library/tooltip/NFTip-Images/point-nw.png" style="position:absolute; top:10px; left:-43px;"/>' +
				'<img class="pngFix ttArrow arrowUR" alt="" src="/library/tooltip/NFTip-Images/point-ne.png" style="visibility:hidden; position:absolute; top:10px; left:227px;"/>' +
				'<img class="pngFix ttArrow arrowLL" alt="" src="/library/tooltip/NFTip-Images/point-sw.png" style="visibility:hidden; position:absolute; top:30px; left:-43px;"/>' +
				'<img class="pngFix ttArrow arrowLR" alt="" src="/library/tooltip/NFTip-Images/point-se.png" style="visibility:hidden; position:absolute; top:30px; left:227px;"/>' +
				'<div id="ttContainer" style="display:inline-block">' +
					'<div style="background: transparent url(/library/tooltip/NFTip-Images/nw.png) no-repeat scroll 0 0; overflow:hidden; padding-left:28px;">' +
						'<div style="background: transparent url(/library/tooltip/NFTip-Images/ne.png) no-repeat scroll right 0; overflow:hidden; padding-right:28px;">' +
							'<div style="background: transparent url(/library/tooltip/NFTip-Images/n.png) repeat-x scroll 0 0; height:28px; overflow:hidden"></div>' +
						'</div>' +
					'</div>' +
					'<div style="background: transparent url(/library/tooltip/NFTip-Images/w.png) repeat-y scroll 0 0; overflow:hidden; padding-left:28px;">' +
						'<div style="background: transparent url(/library/tooltip/NFTip-Images/e.png) repeat-y scroll right 0; overflow:hidden; padding-right:28px;">' +
							'<div class="ttContent" style="background-color:#ffffff;"></div>' +
						'</div>' +
					'</div>' +
					'<div style="background: transparent url(/library/tooltip/NFTip-Images/sw.png) no-repeat scroll 0 0; overflow:hidden; padding-left:28px;">' +
						'<div style="background: transparent url(/library/tooltip/NFTip-Images/se.png) no-repeat scroll right 0; overflow:hidden; padding-right:28px;">' +
							'<div style="background: transparent url(/library/tooltip/NFTip-Images/s.png) repeat-x scroll 0 0; height:28px; overflow:hidden"></div>' +
						'</div>' +
					'</div>' +
				'</div>');
	}

	_arrowImgUL = _tip.child('img.arrowUL');
	_arrowImgUR = _tip.child('img.arrowUR');
	_arrowImgLL = _tip.child('img.arrowLL');
	_arrowImgLR = _tip.child('img.arrowLR');
	_arrowImgCur = _arrowImgUL;
	_content = _tip.child('div.ttContent');
	
	var els = Ext.select(config.targets, false);
	els.on('mouseover', onOver);
	els.on('mouseout', onOut);
	if (Ext.isSafari4) { els.on('click', onOut); }// fix for iPad not closing tooltip
	
	var arrows = Ext.select("img.ttArrow", false)
	arrows.on('mouseover', clearTO);
	arrows.on('mouseout', onOut);
	
	var ttCont = Ext.get('ttContainer');
	ttCont.on('mouseover', clearTO);
	ttCont.on('mouseout', onOut);
}
