/*HEY v9.6 specific version of rollover.js -- not for use by other ENERGY STAR applications. *
 *Much of the code below is now superfluous -- clean-up TBD 
 *accomodating reposition of tooltip if below the fold to be resolved in 9.6.1 */
var rob={
	//CSS classes
	showClass:'show_rob',/*CSS class to apply to tooltip element to display*/
	hideClass:'hide_rob',/*CSS class to apply to tooltip element to hide*/
	now_showing:null,/*tooltip DOM node*/
	/* "Bounding Box?" */
	winWidth:null,
	winHeight:null,
	
/* Initialize functionality */
init:function(){
	var d=document;
	if(!d.getElementById || !d.createTextNode){return;}		
	if (window.innerWidth) { /* Not IE */
		rob.winWidth = window.innerWidth;
		rob.winHeight = window.innerHeight;
	} else if ( d.documentElement && typeof d.documentElement.clientWidth!='undefined' && d.documentElement.clientWidth!=0 ) { /* IE */
		rob.winWidth = d.documentElement.clientWidth;
		rob.winHeight = d.documentElement.clientHeight;
	} else if ( d.body && typeof d.body.clientWidth!='undefined') { /* Something Else */
		rob.winWidth = d.body.clientWidth;
		rob.winHeight = d.body.clientHeight;
	};		
	rob.initLinks();
},

	initLinks:function(){
		if(document.getElementsByTagName('a')[0]){
			var links=document.getElementsByTagName('a');
			for(var i=0;i<links.length;i++){
				curr_link = links[i];
				var link_class=curr_link.className;				
				if(link_class=="rollover"){				
					var ro_destination=curr_link.href.toString().match(/#(.*)/)[1];
					var ro_target=document.getElementById(ro_destination);
					rob.cssjs('add',ro_target,rob.hideClass);
					rob.addEvent(curr_link,'focus',rob.showBox,false);
					rob.addEvent(curr_link,'mouseover',rob.showBox,false);
					rob.addEvent(curr_link,'click',rob.showBox,false);	
					rob.addEvent(curr_link,'mouseout',rob.hideBox,false);
					rob.addEvent(curr_link,'blur',rob.hideBox,false);
					rob.fixSafari(curr_link);			
				}
			}
			var areas=document.getElementsByTagName('area');
			for(var i=0;i<areas.length;i++){
				var area_class=areas[i].className;				
				if(area_class=="rollover"){				
					var ro_destination=areas[i].href.toString().match(/#(.*)/)[1];
					var ro_target=document.getElementById(ro_destination);
					rob.cssjs('add',ro_target,rob.hideClass);
					rob.addEvent(areas[i],'focus',rob.showBox,false);
					rob.addEvent(areas[i],'mouseover',rob.showBox,false);
					rob.addEvent(areas[i],'mouseout',rob.hideBox,false);
					rob.addEvent(areas[i],'blur',rob.hideBox,false);
					rob.fixSafari(areas[i]);			
				}
			}
		}
	},

	showBox:function(e){
		var event_info = rob.getTarget(e);				
		var selected_link = event_info.e_target;
		var curr_target = rob.getTarget(e).e_target;
		var toshow = selected_link.getAttribute('href').toString().match(/#(.*)/)[1];
		/* jQuery objects */
		var toshow = selected_link.hash;
		var target 	= jQuery(event_info.e_target);
		var box 	= jQuery(toshow);
		if(target && box){			
				
		var event_x=event_info.posx; //x pos rel to entire doc less #wrap offset.
		var event_y=event_info.posy; //y pos rel to entire doc
		var window_y = event_info.winy; //y pos rel to window
		var window_x = event_info.winx; //x position of event relative to window
		
		var rob_pad = 20; //space btw event and box corner
		var v_offset = -rob_pad/2; //vertical offset of box, default set if no conflict
		var h_offset = -rob_pad/2; //horizontal offset of box, default set if no conflict
			
			//hide selects
			var selects=document.getElementsByTagName('select');
			for(var i=0;i<selects.length;i++){
				selects[i].style.visibility = "hidden";
			}
			
			//hide objects
			var objects=document.getElementsByTagName('object');
			for(var i=0;i<objects.length;i++){
				objects[i].style.visibility = "hidden";
			}
			
			//apply show class to rob content and set-up tooltip position.
			rob.now_showing = box[0];//document.getElementById(toshow);
			
			/*need ofset top/left too*/
			var offsetTop = selected_link.offsetTop;
			var offsetLeft = selected_link.offsetLeft;	
			

			
			//get rob size
			var pop_h = rob.now_showing.scrollHeight;
			var pop_w = rob.now_showing.scrollWidth;
			
			//get dif btw rob x/y & screen w/h
			
			var room_bot = rob.winHeight - window_y; /* was window_y */
			var room_right = rob.winWidth - window_x; /*was event_x*/			
			
			//see if there is a conflict and adjust offsets
			if (pop_h + rob_pad > room_bot) {
				v_offset = pop_h - room_bot + rob_pad;
			}
			if (pop_w + rob_pad > room_right) {
				h_offset = pop_w - h_offset;
			}
			//alert("scrolltop: " + document.body.scrollTop + "\nwinHeight: " + rob.winHeight + "\nroom_bot: " + room_bot + "\ne_y: " + event_y + "\ne_x: " + event_x + "\nwindow_x: " + window_x + "\nv_offset: " + v_offset + "\npop_h: " + pop_h + "\ntop: " + (event_y - v_offset));
			//position rob
			var target_offset = target.offset();
			target_offset.left += 20; /*only applicable to HEY [?] tooltip rollover*/
			target_offset.top; /*-= v_offset; <-- does not work with focus/click */
			box.offset(target_offset);
			
			rob.cssjs('remove',rob.now_showing,rob.hideClass);
			rob.cssjs('add',rob.now_showing,rob.showClass);
			//rob.now_showing.style.left = offsetLeft /*- h_offset*/ + "px";
			//rob.now_showing.style.top = offsetTop /*- v_offset*/ + "px";
			//rob.now_showing.style.left = event_x - h_offset + "px";
			//rob.now_showing.style.top = event_y - v_offset + "px";
		}
		rob.cancelClick(e);
	},
	hideBox:function(){
		
		rob.cssjs('remove',rob.now_showing,rob.showClass);
		rob.now_showing.style.left = "-1000em";
		rob.now_showing.style.top = "-1000em";
		rob.cssjs('add',rob.now_showing,rob.hideClass);

		//show selects
		var selects=document.getElementsByTagName('select');
		for(var i=0; i < selects.length; i++){
			selects[i].style.visibility = "visible";
		}		
			
		//show objects
		var objects=document.getElementsByTagName('object');
		for(var i=0; i < objects.length; i++){
			objects[i].style.visibility = "visible";
		}
	},
/* helper methods */
	fixSafari:function(node){
		node.onclick = function() { return false; }; // Safari
	},
	
getTarget:function(e){
	var e_target = window.event ? window.event.srcElement : e ? (e.currentTarget? e.currentTarget : e.target ): null;		
	if (!e_target){return false;}

	var targ;
	var posx = 0;
	var posy = 0;
	var winx = 0;
	var winy = 0;
	/*
	var wrapOffset = 0;
	var wrapEl = document.getElementById('wrap');
	wrapOffset = wrapEl.offsetLeft;
	*/
	var wrapXOffset = document.getElementById('wrap').offsetLeft;	
		
	while ((e_target.nodeName.toLowerCase() != 'a') && (e_target.nodeName.toLowerCase() != 'area')) {
		e_target = e_target.parentNode;
		}
		
	if(e.type=="mouseover"){
		winx = e.clientX;
		winy = e.clientY;
		if (e.pageX && e.pageY){
			posx = e.pageX;
			posy = e.pageY;			
		} else if (e.clientX && e.clientY) {
			posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
			posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
		}			
	} else if (e.type=="focus") {
		winy = e_target.offsetTop - document.documentElement.scrollTop;			
		if (e.target) {
			targ = e.target;
		} else if (e.srcElement) {
			targ = e.srcElement;
		}
		if (targ.offsetParent) {
			do {
			posx += targ.offsetLeft;
			posy += targ.offsetTop;
			} while (targ = targ.offsetParent);
		}
		winy = posy;
	}
		//Disabled dependency upon specific page structure.
		//posx = posx - wrapXOffset;
	
	return {
		e_target:e_target,
		posx:posx,
		posy:posy,
		winx:winx,
		winy:winy
	}			
}, /* /getTarget */

	cancelClick:function(e){
		if (window.event){
			window.event.cancelBubble = true;
			window.event.returnValue = false;
			return;
		}
		if (e){
			e.stopPropagation();
			e.preventDefault();
		}
	},

	addEvent: function(elm, evType, fn, useCapture){
		if (elm.addEventListener) 
		{
			elm.addEventListener(evType, fn, useCapture);
			return true;
		} else if (elm.attachEvent) {
			var r = elm.attachEvent('on' + evType, fn);
			return r;
		} else {
			elm['on' + evType] = fn;
		}
	},
	// cssjs tests 
	cssjs:function(a,o,c1,c2){
		switch (a){
			case 'swap':
				o.className=!rob.cssjs('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);
			break;
			case 'add':
				if(!rob.cssjs('check',o,c1)){o.className+=o.className?' '+c1:c1;}
			break;
			case 'remove':
				var rep=o.className.match(' '+c1)?' '+c1:c1;
				o.className=o.className.replace(rep,'');
			break;
			case 'check':
				return new RegExp("(^|\\s)" + c1 + "(\\s|$)").test(o.className)
			break;
		}
	}
}
rob.addEvent(window, 'load', rob.init, false);
