// NS-Header and page initialization, general functions

function addEvent(elm, evType, fn, useCapture)
// Based on the original concept by Scott Andrew
{
	if (elm.addEventListener){
		elm.addEventListener(evType, fn, useCapture);
		return true;
	} else if (elm.attachEvent){
		var r = elm.attachEvent("on"+evType, fn);
		return r;
	} else {
		alert("Could not add event!");
	}
}
// Trim leading and trailing whitespace from strings
function trim(s) {
	return s.replace(/^\s+|\s+$/g, "");
}

// Adjust NS header height
function doResize() { 
     var clheight, headheight;
     if (self.innerHeight) // all except Explorer 
     { clheight = self.innerHeight; } 
     else if (document.documentElement && document.documentElement.clientHeight) // Explorer 6 Strict Mode 
     { clheight = document.documentElement.clientHeight; } 
     else if (document.body) // other Explorers 
     { clheight = document.body.clientHeight; } 
     headheight = document.getElementById('idheader').clientHeight;
     if (clheight < headheight ) {clheight = headheight + 1;}
     document.getElementById('idcontent').style.height = clheight - document.getElementById('idheader').clientHeight +'px';
            
    } 

// Fix horizontal lines and percentage width tables for IE in XHTML mode

function badIEfix() {
 	$("hr").each(function() {
 	    var lineStyle, lineThick;
 		lineStyle = $(this).attr("style");
 		lineStyle = lineStyle.substring(lineStyle.indexOf("#",7));
 		lineThick = $(this).attr("size");
 		lineStyle = 'style="width: auto; border-top: ' + lineThick + 'px solid ' + lineStyle + '; margin: 5px 0; padding: 0;"';
 		// alert(lineStyle);
 		// $(this).replaceWith('Golly Gumdrops');
 		$(this).replaceWith('<div ' + lineStyle +'><p>&nbsp;</p></div>');
 	});
 	
     	$("div#innerdiv table").each(function() {
          var tabWidth, newTabWidth, tabPercent, winWidth, match;
          var re = /WIDTH:\s+?\d{1,3}%/;
          var rePct = /WIDTH:\s+?(\d{1,3})%;/im;
          tabWidth = $(this).attr("style");
          if (tabWidth.search(re)!=-1) {
		  	  	match = rePct.exec(tabWidth);
		  		tabPercent = match[1]/100;
		  		winWidth = $("div#innerdiv").innerWidth();
		  		newTabWidth = Math.round(winWidth * tabPercent);
          	tabWidth = tabWidth.replace(re,"width: " + newTabWidth + "px");
            $(this).attr("style", tabWidth);
            $(this).attr("IEmustDie", tabPercent);
             }
 	});
}
		$(window).resize(function(){
		    $("div#innerdiv table[IEmustDie]").each(function() {
             var tabPercent, tabStyle, winWidth, tabWidth, newTabWidth, match;
             var re = /width:\s+?\d{1,3}px;/i;
             tabPercent = $(this).attr('IEmustDie');
             tabStyle = $(this).attr('style');
          	winWidth = $("div#innerdiv").innerWidth();
          	tabWidth = re.exec(tabStyle);
          	newTabWidth = "WIDTH: " + Math.round(winWidth * tabPercent) + "px;";
          	tabStyle = tabStyle.replace(tabWidth,newTabWidth);
          	$(this).attr("style", tabStyle);
          	});
		});

function nsrInit() { 
   	   // Set up the navigation row for active JavaScript version 
   	   if (self.innerHeight) {
   	   document.getElementById('scriptNavHead').style['display'] = "table-row";
   	   } else {
   	   // For brain-dead Internet Explorer
   	   document.getElementById('scriptNavHead').style['display'] = "block";
   	   }
   	   document.getElementById('noScriptNavHead').style['display'] = "none";
     contentbody = document.getElementById('idcontent'); 
     if (contentbody) { 
       contentbody.className = 'nonscroll'; 
       document.getElementsByTagName('body')[0].className = 'nonscroll'; 
       document.getElementsByTagName('html')[0].className = 'nonscroll'; 
      } 
   } 
 
 // Get URL of the current topic 
function getHref(topPage,urlText,urlTip) {
   var refPara;
   var refAddress = document.location.href.replace(/\#.*$/,"");
   refAddress = refAddress.replace(/\?.*?$/,"");
   refAddress = refAddress.replace(/\/(?!.*?\/)/,"\/"+topPage+"\?");
   refPara =  '<p class="help-url"><b>'+urlText+'&nbsp;</b><a href="' + refAddress;
   refPara = refPara + '" target="_top" title="'+urlTip+'">' + refAddress + '</a></p>';
   return refPara;
   }

// Mail feedback functions

/* function mailFB(subject, recipient, topicpath, topicid, fbbody) {
var headerText = unQuot(subject);
var fb1 = "mailto:" + escape(recipient) + "?subject=" + headerText;
var titlePath = unQuot(topicpath);
var fb2 = "&body=Ref:%20" + titlePath + "%20ID:%20"+topicid+"%0A%0D%0A%0D" + unQuot(fbbody) + "%0A%0D%0A%0D";
var fb = fb1 + fb2;
return document.location.href=fb;
} */

function mailFB(topicid) {
var headerText = unQuot(getMailParams("mailsubject"));
var recipient = getMailParams("mailrecipient");
// Remove "closing" tag automatically generated by some browsers for 
// email addresses enclosed in < and > characters.
recipient = recipient.replace(/<\/.*?>/,"");
// Identify and correct upcased email address created by some browsers
var re = /<[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}>/g;
if (re.test(recipient)) {
	var tmp = re.exec(recipient)[0];
	recipient.replace(tmp,tmp.toLowerCase());
	}
var titlePath = unQuot(getMailParams("mailpath"));
var fbbody = unQuot(getMailParams("mailbody"));
var fb1 = "mailto:" + recipient + "?subject=" + headerText;
var fb2 = "&body=Ref:%20" + titlePath + "%20ID:%20"+topicid+"%0A%0D%0A%0D" + fbbody + "%0A%0D%0A%0D";
var fb = fb1 + fb2;
return document.location.href=fb;
}

function getMailParams(paramID) {
	var param = document.getElementById(paramID).innerHTML;
	return param;
	}

// Check if the current page is a Webhelp or CHM search results topic
function SearchCheck() 
{
  var foundHilite = window.location.search.lastIndexOf("zoom_highlight") > 0;
  if (!foundHilite) {
    var fontTags = document.getElementsByTagName("FONT");
    if (fontTags.length > 0) {
      var hStyle = "";
      for (var cCheck = 0; cCheck < fontTags.length; cCheck++) {
        hStyle = fontTags[cCheck].style.cssText;
        if (hStyle.indexOf("BACKGROUND-COLOR") == 0) {
	  foundHilite = true;
          break; 
        }
      }
    }
  }  return foundHilite;     
}

// Clean up email link strings
function unQuot(varStr) {

varStr = varStr.replace(/'/g, "`");
varStr = varStr.replace(/&gt;/g, ">");
varStr = varStr.replace(/&lt;/g, "<");
varStr = varStr.replace(/&quot;/g, '`');
varStr = varStr.replace(/&amp;/g, '&');
varStr = escape(varStr);
varStr = varStr.replace(/%E2|%E0|%E5|%E1|%E3/g,'a');
varStr = varStr.replace(/%C5|%C0|%C1|%C2|%C3/g,'A');
varStr = varStr.replace(/%C7/g,'C');
varStr = varStr.replace(/%E7/g,'c');
varStr = varStr.replace(/%E9|%EA|%EB|%E8/g,'e');
varStr = varStr.replace(/%C9|%CA|%C8|%CB/g,'E');
varStr = varStr.replace(/%u0192/g,'f');
varStr = varStr.replace(/%EF|%EE|%EC|%ED/g,'i');
varStr = varStr.replace(/%CF|%CD|%CE|%CC/g,'I');
varStr = varStr.replace(/%F1/g,'n');
varStr = varStr.replace(/%D1/g,'N');
varStr = varStr.replace(/%F4|%F2|%F3|%F5|%F8/g,'o');
varStr = varStr.replace(/%D4|%D2|%D3|%D5|%D8/g,'O');
varStr = varStr.replace(/%u0161/g,'s');
varStr = varStr.replace(/%u0160/g,'S');
varStr = varStr.replace(/%FB|%FA|%F9/g,'u');
varStr = varStr.replace(/%DB|%DA|%D9/g,'U');
varStr = varStr.replace(/%FF|%FD/g,'y');
varStr = varStr.replace(/%DD|%u0178/g,'Y');
varStr = varStr.replace(/%FC/g,'ue');
varStr = varStr.replace(/%DC/g,'Ue');
varStr = varStr.replace(/%E4|%E6/g,'ae');
varStr = varStr.replace(/%C4|%C6/g,'Ae');
varStr = varStr.replace(/%F6|%u0153/g,'oe');
varStr = varStr.replace(/%D6/g,'Oe');
varStr = varStr.replace(/%DF/g,'ss');
return (varStr);
}

// Toggle Toggler
function toggleToggles() {
if (HMToggles.length != null) {
	var toggleState = true;
	for (var i = 0; i < HMToggles.length; i++) {
		if (HMToggles[i].getAttribute("hm.state") == "1") {
			toggleState = false;
			break;
			}
		}
	HMToggleExpandAll(toggleState);
	}
} // End toggleToggles


// Open all toggles around a target if present
function toggleCheck(target) {
 	var tParentToggles = $(target[0]).parents("table[id^='TOGGLE']");
  	var tParentNo = tParentToggles.size();
  	var iconIDon = false;
    	if (tParentNo > 0) {
    		var thisToggle, thisToggleID, thisToggleIconID, thisToggleState;
    		for (var i = 0; i < tParentNo; i++) {
    			thisToggle = tParentToggles[i];
    			thisToggleID = $(thisToggle).attr("id");
    			thisToggleIconID = "$" + thisToggleID + "_ICON";
    			thisToggleState = thisToggle.getAttribute("hm.state");
    			if ($("img[id='"+thisToggleIconID+"']").attr("src") != null) iconIDon = true;
    		if ((thisToggleState) == "0" || (thisToggleState == null)) {
    		 	if (!iconIDon) {
    		 	HMToggle('toggle',thisToggleID);
    		 	} else {
    		 		HMToggle('toggle',thisToggleID,thisToggleIconID);
    		 		}
    		 	}
    		}
		} 
} // End toggleCheck()


// If target is a toggle open it
function openTargetToggle(target,context){
   var toggleTarget;
   var headToggle = false;
   if (context == "menu") { 
   	    // Only for ATOC menu
   		toggleTarget = $(target[0]).parent("span:has(a.dropdown-toggle)").find("a.dropdown-toggle").attr("href");
   		if (!toggleTarget) toggleTarget = $(target[0]).parent("p:has(a.dropdown-toggle)").find("a.dropdown-toggle").attr("href");
         } else {  // This is for all other toggleJump() functions
  	          // Check for target in a toggle header without an icon
   	         toggleTarget = $(target[0]).parent("p:has(a.dropdown-toggle)");
   	         toggleTarget = $(toggleTarget).find("a.dropdown-toggle").attr("href");
       		 if (!toggleTarget) {
   	         // First check for target in a toggle header with an icon
  	            toggleTarget = $(target[0]).parents("table:has(a.dropdown-toggle)")[0];
  	   	        toggleTarget = $(toggleTarget).find("a.dropdown-toggle").attr("href");
   	          }  
   	       }
   var iconToggle = false;
   var iconTarget = "";
   if (toggleTarget) {
   	    if (toggleTarget.indexOf("ICON") != -1) {
   	    	iconToggle = true;
   	    }
   		toggleTarget = toggleTarget.replace(/^.*?\,\'/, "");
   		toggleTarget = toggleTarget.replace(/\'.*$/,"");
   		if (iconToggle) iconTarget = "$" + toggleTarget + "_ICON";
   		if (!iconToggle ) {
   			HMToggle('toggle',toggleTarget);
   			return true;
   			} else {
   				HMToggle('toggle', toggleTarget, iconTarget);
   				return true;
   				} 
   		} else return false;

} // End openTargetToggle


// Toggle Jump - jump to anchors in toggles


// ToggleJump for links coming in from outside 
// This won't work with a jQuery load function in Firefox
// We need to preload an event listener to get it faster

function toggleJump() {

if (location.hash) {
  
  var theTargetID = location.hash.replace(/\#/, "");
  var theTarget;
 if ($("a[id='"+theTargetID+"']").length > 0) {
  	theTarget = $("a[id='"+theTargetID+"']");
  	   } else if ($("a[name='"+theTargetID+"']").length > 0) {
  	theTarget = $("a[name='"+theTargetID+"']");
  	   } else {
  	    return false;
  	    }
   	// If there are toggles on the page close them all
   	if (HMToggles.length != null) HMToggleExpandAll(false);
 
 	toggleCheck(theTarget);
    // If the target is a toggle header open the toggle
 	if ($(theTarget).parent("p:not(:has(a.dropdown-toggle))").length == 0) {
 		openTargetToggle(theTarget,"page");
 		}
    $("#idcontent").scrollTo($(theTarget), 300, { offset: -12, axis:"y"});
    return false;
    }  
} // End function toggleJump()


// ToggleJump for links to anchors from within current topic

$(document).ready(function() {
	
    var IE6 = /msie 6|MSIE 6/.test(navigator.userAgent);
    var thisTopic = document.location.pathname;
    thisTopic = thisTopic.replace(/^.*[/\\]|[?#&].*$/,"");


	// Target H&M-created links and manually-entered anchor links but not href="#" links
	$("a[href^='"+thisTopic+"#'],a[href^='#']:not(a[href='#'])").click(function() {
   	   var localTargetID = $(this).attr("href").replace(/.*?\#/,"");
   	   var localTarget = $("a[id='"+localTargetID+"']");
   	   if (!localTarget.length > 0) localTarget = $("a[name='"+localTargetID+"']");
   	         
   	// If there are toggles on the page close them all
   	if (HMToggles.length != null) HMToggleExpandAll(false);
   	   
   	   toggleCheck(localTarget);
   	   // If it's in a header then open the toggle
   	    if ($(localTarget).parent("p:not(:has(a.dropdown-toggle))").length == 0) {
 			openTargetToggle(localTarget,"page");
 		}
   	   	$("#idcontent").scrollTo($(localTarget), 600, { offset: -12, axis: "y"} );
   	   return false;
   });
    });
