/* Copyright © 2003-2008 United Parcel Service of America, Inc. All rights reserved.
   Edit: 30-Apr-2008 */

	var persistentState = false;
	var mouseOutTimer;
	var mouseOnTimer;
	var elemntClicked;
	var onDelayTime = 150;
	var offDelayTime = 500;
	var divAttached = null;
	var contentIdArr = new Array();
	var popupCreated = false;
	var PGX = (function(){
	var pgx = {};

	//To know the Visible page width
	pgx.pageWidth = function() {
		return window.innerWidth != null? window.innerWidth : document.documentElement && document.documentElement.clientWidth ?       document.documentElement.clientWidth : document.body != null ? document.body.clientWidth : null;
	}; 

	//To know the Visible page Height
	pgx.pageHeight = function() {
		return  window.innerHeight != null? window.innerHeight : document.documentElement && document.documentElement.clientHeight ?  document.documentElement.clientHeight : document.body != null? document.body.clientHeight : null;
	}; 

	// Get the handle of object by Id
	pgx.resolveObject = function(s) {
		if (document.getElementById && document.getElementById(s)!=null) {
			return document.getElementById(s);
		}
		else if (document.all && document.all[s]!=null) {
			return document.all[s];
		}
		else if (document.anchors && document.anchors.length && document.anchors.length>0 && document.anchors[0].x) {
			for (var i=0; i<document.anchors.length; i++) {
				if (document.anchors[i].name==s) { 
					return document.anchors[i]
				}
			}
		}
	};

	// Retrieve the position and size of an object
	pgx.get = function(o) {

		if (typeof(o)=="string") {
			o = pgx.resolveObject(o);
		}
		
		if (o==null) {
			return null;
		}
		
		var left = 0;
		var top = 0;
		var width = 0;
		var height = 0;
		var parentNode = null;
		var offsetParent = null;

		
		offsetParent = o.offsetParent;
		var originalObject = o;
		var el = o; 
		while (el.parentNode!=null) {
			el = el.parentNode;
			if (el.offsetParent==null) {
			}
			else {
				var considerScroll = true;

				if (window.opera) {
					if (el==originalObject.parentNode || el.nodeName=="TR") {
						considerScroll = false;
					}
				}
				if (considerScroll) {
					if (el.scrollTop && el.scrollTop>0) {
						top -= el.scrollTop;
					}
					if (el.scrollLeft && el.scrollLeft>0) {
						left -= el.scrollLeft;
					}
				}
			}

			if (el == offsetParent) {
				left += o.offsetLeft;
				if (el.clientLeft && el.nodeName!="TABLE") { 
					left += el.clientLeft;
				}
				top += o.offsetTop;
				if (el.clientTop && el.nodeName!="TABLE") {
					top += el.clientTop;
				}
				o = el;
				if (o.offsetParent==null) {
					if (o.offsetLeft) {
						left += o.offsetLeft;
					}
					if (o.offsetTop) {
						top += o.offsetTop;
					}
				}
				offsetParent = o.offsetParent;
			}
		}
		

		if (originalObject.offsetWidth) {
			width = originalObject.offsetWidth;
		}
		if (originalObject.offsetHeight) {
			height = originalObject.offsetHeight;
		}
		var arr = [left,top,width,height];
		return arr;
	};

	// Get the outer width of an object, including borders, padding, and margin
	pgx.getOuterWidth = function(o) {
		if (pgx.defined(o.offsetWidth)) {
			return o.offsetWidth;
		}
		return null;
	};

	// Determine if a reference is defined
	pgx.defined = function(o) {
		return (typeof(o)!="undefined");
	};

	// Get the outer height of an object, including borders, padding, and margin
	pgx.getOuterHeight = function(o) {
		if (pgx.defined(o.offsetHeight)) {
			return o.offsetHeight;
		}
		return null;
	};

	//Show the Popup OnMouseOver or OnMouseClicked
	pgx.hh_open = function(linkObj, strContentDivId, popupType, ev){
		if(popupCreated){
			clearTimeout(mouseOutTimer);
			ev = ev.type;
			var f = function() {PGX.openHoverHelp(linkObj, strContentDivId, popupType, ev);};
			mouseOnTimer = setTimeout(f, onDelayTime);
		}
	};

	//Open the HoverHelp immediately when gets called.
	pgx.openHoverHelp = function(linkObj, strContentDivId, popupType, ev){

			if(popupType == 0){//ToolTip
				if(persistentState == true && ev != 'click'){
					return;
				}
				persistentState = false;
			}else if(popupType == 1){ //Persistant
				persistentState = true;

			}else{
				persistentState = false;
			}

			var oDivObject = pgx.resolveObject('oDiv');

			divAttached = pgx.resolveObject(strContentDivId);

			if (oDivObject.hasChildNodes())
			{
			   var children = oDivObject.childNodes;
			   for (var i = 0; i < children.length; i++) 
			   {
				children[i].style.visibility = "hidden";
				children[i].style.display = "none";
				document.getElementsByTagName('body')[0].appendChild(children[i]);
			   }
			}
			divAttached.style.visibility = "";
			divAttached.style.display = "";
			oDivObject.appendChild(divAttached);
			pgx.placeObject(linkObj, 'popupHelp', strContentDivId);
	};

	//Place the object next to "linkedObj" object. 
	pgx.placeObject = function(linkedObj, objToBePlaced, strContentDivId){
		clearTimeout(mouseOnTimer);

		var idFound = false;

		for(var i=0;i<contentIdArr.length;i++){
			if(contentIdArr[i]==strContentDivId)
				idFound = true;
		}
		
		if(!idFound){
			dcsMultiTrack("gApps.hh_id", strContentDivId);
			contentIdArr[contentIdArr.length] = strContentDivId;
		}


		var ObjToBePlaced = pgx.resolveObject(objToBePlaced);
		var calloutRight = pgx.resolveObject('arrowImgRight');
		var calloutLeft = pgx.resolveObject('arrowImgLeft');
		var calloutTop = pgx.resolveObject('arrowImgTop');
		var calloutBottom = pgx.resolveObject('arrowImgBottom');

		ObjToBePlaced.style.visibility = "";

		var linkedObjDetails = pgx.get(linkedObj);
		
		var leftOfLinkedObj = linkedObjDetails[0];
		var topOfLinkedObj = linkedObjDetails[1];
		var widthOfLinkedObj = linkedObjDetails[2];
		var heightOfLinkedObj = linkedObjDetails[3];
		

		ObjToBePlaced.style.position = "absolute";

		var arr = pgx.leftTopRightBottom(linkedObj, ObjToBePlaced);

		if(arr[2] == false && arr[0] == false && arr[3] == false && arr[1] == false){

				calloutRight.style.visibility = "hidden";
				calloutLeft.style.visibility = "";
				calloutTop.style.visibility = "hidden";
				calloutBottom.style.visibility = "hidden";

				calloutLeft.style.position = "absolute";
				calloutLeft.style.top = (topOfLinkedObj - (pgx.getOuterHeight(calloutLeft)/2)) + (pgx.getOuterHeight(linkedObj)/2) + 'px';
				calloutLeft.style.left = leftOfLinkedObj + widthOfLinkedObj +'px';

				ObjToBePlaced.style.top = (topOfLinkedObj - (pgx.getOuterHeight(ObjToBePlaced)/2)) + (pgx.getOuterHeight(linkedObj)/2) + 'px';
				ObjToBePlaced.style.left = (leftOfLinkedObj + widthOfLinkedObj + pgx.getOuterWidth(calloutRight)) - 9 +'px';

		}else{
			if(arr[2] == true){
				//place right
					calloutRight.style.visibility = "hidden";
					calloutLeft.style.visibility = "";
					calloutTop.style.visibility = "hidden";
					calloutBottom.style.visibility = "hidden";

					calloutLeft.style.position = "absolute";
					calloutLeft.style.top = (topOfLinkedObj - (pgx.getOuterHeight(calloutLeft)/2)) + (pgx.getOuterHeight(linkedObj)/2) + 'px';
					calloutLeft.style.left = leftOfLinkedObj + widthOfLinkedObj +'px';
					ObjToBePlaced.style.top = (topOfLinkedObj - (pgx.getOuterHeight(ObjToBePlaced)/2)) + (pgx.getOuterHeight(linkedObj)/2) + 'px';
					ObjToBePlaced.style.left = leftOfLinkedObj + widthOfLinkedObj + pgx.getOuterWidth(calloutLeft) - 9 +'px';

			}else{
				if(arr[0] == true){
					//place left
					calloutRight.style.visibility = "";
					calloutLeft.style.visibility = "hidden";
					calloutTop.style.visibility = "hidden";
					calloutBottom.style.visibility = "hidden";

					calloutRight.style.position = "absolute";
					calloutRight.style.top = (topOfLinkedObj - (pgx.getOuterHeight(calloutRight)/2)) + (pgx.getOuterHeight(linkedObj)/2) + 'px';
					calloutRight.style.left = leftOfLinkedObj - pgx.getOuterWidth(calloutRight)+ 'px';
					ObjToBePlaced.style.top = (topOfLinkedObj - (pgx.getOuterHeight(ObjToBePlaced)/2)) + (pgx.getOuterHeight(linkedObj)/2) + 'px';
					ObjToBePlaced.style.left = leftOfLinkedObj - (pgx.getOuterWidth(ObjToBePlaced) + pgx.getOuterWidth(calloutRight)) + 9 +  'px';

				}else{
					if(arr[3] == true){
						//place bottom
						calloutRight.style.visibility = "hidden";
						calloutLeft.style.visibility = "hidden";
						calloutTop.style.visibility = "";
						calloutBottom.style.visibility = "hidden";

						calloutTop.style.position = "absolute";
						calloutTop.style.top = topOfLinkedObj + heightOfLinkedObj + 'px';
						calloutTop.style.left  = (leftOfLinkedObj - (pgx.getOuterWidth(calloutTop)/2)) + (pgx.getOuterWidth(linkedObj)/2) + 'px';
						ObjToBePlaced.style.top = topOfLinkedObj + heightOfLinkedObj + pgx.getOuterHeight(calloutTop) - 9 + 'px';
						ObjToBePlaced.style.left  = (leftOfLinkedObj - (pgx.getOuterWidth(ObjToBePlaced)/2)) + (pgx.getOuterWidth(linkedObj)/2) + 'px';

					}else{
						//place top
						calloutRight.style.visibility = "hidden";
						calloutLeft.style.visibility = "hidden";
						calloutTop.style.visibility = "hidden";
						calloutBottom.style.visibility = "";

						calloutBottom.style.position = "absolute";
						calloutBottom.style.top = topOfLinkedObj - pgx.getOuterHeight(calloutBottom) + 'px';
						calloutBottom.style.left  = (leftOfLinkedObj - (pgx.getOuterWidth(calloutBottom)/2)) + (pgx.getOuterWidth(linkedObj)/2) + 'px';
						ObjToBePlaced.style.top = topOfLinkedObj - (pgx.getOuterHeight(ObjToBePlaced) + pgx.getOuterHeight(calloutBottom)) + 9 + 'px';
						ObjToBePlaced.style.left  = (leftOfLinkedObj - (pgx.getOuterWidth(ObjToBePlaced)/2)) + (pgx.getOuterWidth(linkedObj)/2) + 'px';

					}
				}
			}
		}
		return true;
	};

	//Provide Right Space Detail For ObjectToBePlaced, according to its width.
	pgx.rightSpaceForObjectToBePlaced = function(linkedObj){
		var linkedObjDetails = pgx.get(linkedObj);
		
		var leftOfLinkedObj = linkedObjDetails[0];
		var topOfLinkedObj = linkedObjDetails[1];
		var widthOfLinkedObj = linkedObjDetails[2];
		var heightOfLinkedObj = linkedObjDetails[3];

		var rightSpace = pgx.pageWidth() - ((leftOfLinkedObj + widthOfLinkedObj) - document.body.scrollLeft);
		return rightSpace;
	};

	//Provide Left Space Detail For ObjectToBePlaced, according to its width.
	pgx.leftSpaceForObjectToBePlaced = function(linkedObj){
		var linkedObjDetails = pgx.get(linkedObj);
		
		var leftOfLinkedObj = linkedObjDetails[0];

		var leftSpace = leftOfLinkedObj - document.body.scrollLeft;
		return leftSpace;
	};

	//Provide Top Space Detail For ObjectToBePlaced, according to its width.
	pgx.topSpaceForObjectToBePlaced = function(linkedObj){
		var linkedObjDetails = pgx.get(linkedObj);
		
		var leftOfLinkedObj = linkedObjDetails[0];
		var topOfLinkedObj = linkedObjDetails[1];
		var widthOfLinkedObj = linkedObjDetails[2];
		var heightOfLinkedObj = linkedObjDetails[3];

		var topSpace = topOfLinkedObj - document.body.scrollTop;
		return topSpace;
	};
	
	//Provide Bottom Space Detail For ObjectToBePlaced, according to its width.
	pgx.bottomSpaceForObjectToBePlaced = function(linkedObj){
		var linkedObjDetails = pgx.get(linkedObj);
		
		var leftOfLinkedObj = linkedObjDetails[0];
		var topOfLinkedObj = linkedObjDetails[1];
		var widthOfLinkedObj = linkedObjDetails[2];
		var heightOfLinkedObj = linkedObjDetails[3];

		var bottomSpace = pgx.pageHeight() - ((topOfLinkedObj + heightOfLinkedObj) - document.body.scrollTop);
		return bottomSpace;
	};

	//Provide the details about the space from Left Top Right Bottom.
	pgx.leftTopRightBottom = function(linkedObj, ObjToBePlaced){
			var linkedObjDetails = pgx.get(linkedObj);

			var leftOfLinkedObj = linkedObjDetails[0];
			var topOfLinkedObj = linkedObjDetails[1];
			var widthOfLinkedObj = linkedObjDetails[2];
			var heightOfLinkedObj = linkedObjDetails[3];

			var topSpace = pgx.topSpaceForObjectToBePlaced(linkedObj);
			var bottomSpace = pgx.bottomSpaceForObjectToBePlaced(linkedObj);
			var leftSpace = pgx.leftSpaceForObjectToBePlaced(linkedObj);
			var rightSpace = pgx.rightSpaceForObjectToBePlaced(linkedObj);

			var widthOfObjToBePlaced = pgx.getOuterWidth(ObjToBePlaced);
			var heightOfObjToBePlaced = pgx.getOuterHeight(ObjToBePlaced);

			var arr = new Array();

			if(leftSpace > (widthOfObjToBePlaced + 34)){
				arr[0] = true;
			}else{
				arr[0] = false;
			}

			if(topSpace > (heightOfObjToBePlaced + 34)){
				arr[1]= true;
			}else{
				arr[1] = false;
			}

			if(rightSpace > (widthOfObjToBePlaced + 34)){
				arr[2] = true;
			}else{
				arr[2] = false;
			}

			if(bottomSpace > (heightOfObjToBePlaced + 34)){
				arr[3]= true;
			}else{
				arr[3] = false;
			}
			return arr;
			
	};


	//To get the Applied Style on the element.
	pgx.getStyle = function(oElm, strCssRule){ 
		var strValue = "";
		if(document.defaultView && document.defaultView.getComputedStyle){
			if(document.defaultView.getComputedStyle(oElm, "")) {
				strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
			}
		}
		else if(oElm.currentStyle){
			strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
				return p1.toUpperCase();
			});
			strValue = oElm.currentStyle[strCssRule];
		}
		return strValue;
	};

	//Create the Hover Help Frame and make it invisible.
	pgx.createPopup = function(){
		  var popupDiv = document.createElement('div');
		  popupDiv.setAttribute('id',"popupHelp");
		  popupDiv.setAttribute('class',"hh_popupMainDiv");

		  var topDiv = document.createElement('div');
		  topDiv.setAttribute('id',"topDiv");
		  topDiv.className = "hh_topShadow";
		  topDiv.innerHTML = "&nbsp;";
		  popupDiv.appendChild(topDiv);

		  var middleDiv = document.createElement('div');
		  middleDiv.setAttribute('id',"oDiv2");
		  middleDiv.className = "hh_sideShadow";
		  popupDiv.appendChild(middleDiv);

		  isIE = (document.all) ? true:false;
		  var innerTable;
		  if(isIE){
			  innerTable = document.createElement('<table cellspacing="0" cellpadding="0">');
		  }
		  else{
			  innerTable = document.createElement('table');
	   		  innerTable.setAttribute('cellspacing',"0");
	  		  innerTable.setAttribute('cellpadding',"0");
		  }

		  innerTable.setAttribute('id',"innerTable");
		  innerTable.className = "innerTableClass";
		  middleDiv.appendChild(innerTable);

		  var tBody = document.createElement('tbody');
		  innerTable.appendChild(tBody);

		  var tableRow = document.createElement('tr');
		  tBody.appendChild(tableRow);

		  var leftTD = document.createElement('td');
   		  if(pgx.getStyle(document.body, "direction") != 'ltr'){
		  	leftTD.className = "leftShadowRTL";
		  }else{
		  	leftTD.className = "leftShadow";
		  }
		  leftTD.innerHTML = "&nbsp;";
		  tableRow.appendChild(leftTD);

		  var centerTD = document.createElement('td');
		  centerTD.className = "centerTD";
		  tableRow.appendChild(centerTD);

		  var centerDiv = document.createElement('div');
 		  centerDiv.setAttribute('id',"oDiv");
		  centerDiv.className = "textBlock";
		  centerTD.appendChild(centerDiv);

		  var rightTD = document.createElement('td');
		  if(pgx.getStyle(document.body, "direction") != 'ltr'){
		  	rightTD.className = "rightShadowRTL";
		  }else{
		  	rightTD.className = "rightShadow";
		  }
  		  rightTD.innerHTML = "&nbsp;";
		  tableRow.appendChild(rightTD);
			
		  var bottomDiv = document.createElement('div');
		  bottomDiv.setAttribute('id',"bottomDiv");
		  bottomDiv.className = "hh_bottomShadow";
		  bottomDiv.innerHTML = "&nbsp;";
		  popupDiv.appendChild(bottomDiv);

		  eval("document.getElementsByTagName('body')[0].appendChild(popupDiv)");


		  var calloutRight = document.createElement('div');
		  calloutRight.id = "arrowImgRight";
		  calloutRight.className = "calloutRight";
		  eval("document.getElementsByTagName('body')[0].appendChild(calloutRight)");

		  var calloutLeft = document.createElement('div');
		  calloutLeft.id = "arrowImgLeft";
		  calloutLeft.className = "calloutLeft";
		  eval("document.getElementsByTagName('body')[0].appendChild(calloutLeft)");

		  var calloutTop = document.createElement('div');
		  calloutTop.id = "arrowImgTop";
		  calloutTop.className = "calloutTop";
		  eval("document.getElementsByTagName('body')[0].appendChild(calloutTop)");

		  var calloutBottom = document.createElement('div');
		  calloutBottom.id = "arrowImgBottom";
		  calloutBottom.className = "calloutBottom";
		  eval("document.getElementsByTagName('body')[0].appendChild(calloutBottom)");

		  popupDiv.style.visibility = "hidden";
		  calloutRight.style.visibility = "hidden";
		  calloutLeft.style.visibility = "hidden";
		  calloutTop.style.visibility = "hidden";
		  calloutBottom.style.visibility = "hidden";
		  popupCreated = true;
	};

	//Close the Popup after provided time(in milliseconds)
	pgx.hh_hide = function(){
			clearTimeout(mouseOnTimer);
			mouseOutTimer = setTimeout("PGX.hh_close()",parseInt(offDelayTime));
	};

	//Close the Popup Immediately
	pgx.hh_close = function(){
		if(!persistentState && popupCreated){
			
			var popupObj = pgx.resolveObject('popupHelp');
			var calloutRight = pgx.resolveObject('arrowImgRight');
			var calloutLeft = pgx.resolveObject('arrowImgLeft');
			var calloutTop = pgx.resolveObject('arrowImgTop');
			var calloutBottom = pgx.resolveObject('arrowImgBottom');
			
			popupObj.style.visibility = "hidden";

			calloutRight.style.visibility = "hidden";
			calloutLeft.style.visibility = "hidden";
			calloutTop.style.visibility = "hidden";
			calloutBottom.style.visibility = "hidden";

			persistentState = false;
		}
	};

	//Check whether this child is in this parent or not.
	pgx.isChild = function(oChild, sParent) {
	      var oParent = oChild;			
	      while (oParent = oParent.parentNode) {
       	  if (oParent.id == sParent.id) {
	            return true;
       	  }
	      }
	      return false;
	};

	pgx.loopThroughParents = function(obj,pattern){
		var parentObj = obj;
		var pattern = new RegExp(pattern,"i");
		while(parentObj.parentNode && typeof(parentObj.parentNode)!='undefined'){
			if(parentObj.id !=''){
				if(parentObj.id.search(pattern) != -1){
					return true;
				}
			}
			parentObj = parentObj.parentNode;
		}
		return false;
	};	

	//Initialization
	pgx.init = function(){
       pgx.createPopup();
	};

	return pgx;
})();
	
	//On Document click close the Hover Help.
	document.onclick = function(evt){
		if(window.event){
			var tagName = window.event.srcElement.tagName;
			elemntClicked = window.event.srcElement;
		}else{
			var tagName = evt.target.tagName;
			elemntClicked = evt.target;
		}

		if(divAttached!=null){
			var el = PGX.isChild(elemntClicked, divAttached);
		}else{
			var el = false;
		}

		if(PGX.loopThroughParents(elemntClicked,"_pgx_hh_linkedText")){
			var e2 = true;
		}else{
			var e2 = false;
		}

		if(!el && !e2){
			var popupObj = PGX.resolveObject('popupHelp');
			var calloutRight = PGX.resolveObject('arrowImgRight');
			var calloutLeft = PGX.resolveObject('arrowImgLeft');
			var calloutTop = PGX.resolveObject('arrowImgTop');
			var calloutBottom = PGX.resolveObject('arrowImgBottom');

			
			popupObj.style.visibility = "hidden";
			calloutRight.style.visibility = "hidden";
			calloutLeft.style.visibility = "hidden";
			calloutTop.style.visibility = "hidden";
			calloutBottom.style.visibility = "hidden";

			persistentState = false;	
		}
	}

	window.onload = PGX.init;
