//macromedia code
/**
 * true when the mouse pointer is inside the menu
 */
var mouseIsInMenu = false;

function MM_swapImgRestore() { //v3.0
  var i, x, a=document.MM_sr;
  for (i=0; a && i < a.length && (x=a[i]) && x.oSrc; i++) 
    x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.0
  var p,i,x;  
  
  if(!d) d=document; 
  
  if( (p=n.indexOf("?") )> 0&&parent.frames.length) {
  
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);
  }
  
  if(!(x=d[n])&&d.all) x=d.all[n]; 
  
  for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  
  if(!x && document.getElementById) x=document.getElementById(n); 
  
  return x;
  
}

function MM_swapImage() {
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}




/******  detect browsers ******/
// navigator object is supported by ie and netscape6 or above.
var appname = navigator.appName.toLowerCase();
var appversion = navigator.appVersion.toLowerCase();
var uagent = navigator.userAgent.toLowerCase();
var verArray = appversion.split(" ");

var ts = new Array();   // tech support docs array
var samp = new Array(); // samples docs array

// note - doc types moved to menu-doc-types.js

var ns4 = document.layers;
var ie4up = (appname.indexOf("microsoft internet explorer") != -1) && (verArray[0] >= 4) && document.all;
var ns6up = (appname.indexOf("netscape") != -1) && (verArray[0] > 4) && document.getElementById;
var isOpera = (navigator.userAgent.indexOf('Opera') != -1);

/****** global variable initialization ******/
link_id= null;
current_link = null;                 //netscape
var tid = null;                         //stores refrence to setTimeout object
var menuHTML = null;             //stores menu html
var theTop = null;                   //absolute top position of current window (scroll down is actived)
var theLeft = null;                   //absolute left position of current window (scroll left is actived)
var mt = null;                        //menu top position
var mh = null;                       //menu height
var lnkWidth = null;               //link offsetwidth
var lnkHeight = null;              //link offsetheight
var lnkLeft= null;       //link left position
var lnkTop = null;                 //link top position
var clntHeight = null;             //window resize height

//preload these images to prevent multiple requests for the same image
preload0=new Image();
preload0.src="/images/related/related-block.gif";
preload1=new Image();
preload1.src="/images/spacer.gif";
preload2=new Image();
preload2.src="/images/related/related-u-rt.gif";
preload3=new Image();
preload3.src="/images/close.gif";
preload4=new Image();
preload4.src="/images/related/related-l-rt.gif";
preload5=new Image();
preload5.src="/images/related/related-info-hover.gif";
preload6=new Image();
preload6.src="/images/related/related-dots.gif";
preload7=new Image();
preload7.src="/images/pdfmini.gif";

outerTop = '<table border=0 cellspacing=0 cellpadding=0 width=150>'
    + '<tr><td valign="top" width=12><img src="/images/related/related-block.gif" width=12 height=10/></td>'
    + '<td bgcolor="#F0E4D8" align=left valign="top"><img src="/images/spacer.gif" width=12 height=10 /></td>'
    + '<td align=right valign="top" width=12><img src="/images/related/related-u-rt.gif" width=12 height=10/></td></tr>'
    + '<tr><td bgcolor="#F0E4D8"><img src="/images/spacer.gif"/></td>'
    + '<td bgcolor="#F0E4D8" align=left valign="top"><table border=0 cellspacing=0 cellpadding=4>';
outerBot = '</table></td>'
    + '<td bgcolor="#F0E4D8"><img src="/images/spacer.gif"/></td></tr>'
    + '<tr><td bgcolor="#F0E4D8"><img src="/images/spacer.gif"/></td>'
    + '<td bgcolor="#F0E4D8" align=right valign="top"><a href="javascript:closemenu();"><img src="/images/close.gif" border="0"/></a></td>'
    + '<td bgcolor="#F0E4D8"><img src="/images/spacer.gif"/></td></tr>'
    + '<tr><td valign="top" width=12><img src="/images/related/related-block.gif" width=12 height=10/></td>'
    + '<td bgcolor="#F0E4D8" align=left valign="top"><img src="/images/spacer.gif" width=12 height=10/></td>'
    + '<td align=right valign="top" width=12><img src="/images/related/related-l-rt.gif" width=12 height=10/></td></tr></table>';

function preGenerateMenus(){

  // from the tech support docs and sample docs arrays, eliminate any entries for which there are related docs already
  // specified (a docid exists) in the menuscript array
  if (  (menuScript[0] != null)  &&  ((techDocs[0] != null) || (sampleDocs[0] != null))  ) {
    for (var i=0; i<=menuScript.length; i++)  {
      if (menuScript[i]>10000) {        
        for (var x=0; x<=techDocs.length; x++) {
          if (menuScript[i]==techDocs[x]) {
            techDocs.splice(x, 2);
          }
        }        
        for (var x=0; x<=sampleDocs.length; x++) {
          if (menuScript[i]==sampleDocs[x]) {
            sampleDocs.splice(x, 2);
          }
        }
      }
    }
  }
  //alert("menuScript.legth="+menuScript.length+", techDocs.length="+techDocs.length+", sampleDocs.length="+sampleDocs.length); // 162 on lxmv65
  // if there's anything left over in the tech support docs and sample docs arrays, append them to the menuscript array  
  if(techDocs[0] != null) {
    var a = techDocs;
    if(menuScript[0] != null && (navigator.appName.toUpperCase().match(/NETSCAPE/) == null)) {
      menuScript.pop();
    }
    menuScript = menuScript.concat(a);
  }
  if(sampleDocs[0] != null) {
    var a = sampleDocs;
    if(menuScript[0] != null && (navigator.appName.toUpperCase().match(/NETSCAPE/) == null)) {
      menuScript.pop();
    }
    menuScript = menuScript.concat(a);
  }

  // prepare docType array (fill gaps if needed and strip off ID)
  var MaxID = -1;
  for(var i=0; i<docTypes.length; i++) {
	var ID = parseInt(docTypes[i].match(/^\d+/)[0], 10);
	if(ID > MaxID) MaxID = ID;
  }
  var newDocTypes = Array(MaxID);
  for(var i=0; i<docTypes.length; i++) {
	var docType = docTypes[i];
	var ID = parseInt(docType.match(/^\d+/)[0], 10);
	var newDocType = docType.replace(new RegExp("^"+ID), '');
	/*
	var gap = ID - i;
	while(gap > 0) {
		newDocTypes.push("fakeidUnknown document type.pdf");
		gap--;
	}
	*/
	newDocTypes[ID] = newDocType;
  }
  docTypes = newDocTypes;
  
  dbgCntr = 0;
  while(menuScript[0] != null){
    var contents = '';
    var techSupp = '';
    var samples = '';
    doc = _shift(menuScript, -42, "doc");;

    while(menuScript[0] < 10000){
      if(menuScript[0] >= 0){
        type = _shift(menuScript, doc, "type");  // this is empty!!!
        docType = docTypes[type];
        anchor = docType.substr(0,6);
        label = docType.substring(6,docType.length - 4);
        graphic = docType.substr(docType.length - 3);
        if(menuScript[0] > 10000){
          rel_doc = _shift(menuScript, doc, "rel_doc");
          //contents += '<img src="/images/' + graphic + 'mini.gif" border="0" /> <a href="/doc?' + rel_doc + '">' + label + '</a><br />';
          contents += '<img src="/images/' + graphic + 'mini.gif" border="0" /> <a href="' + directDocLocations[rel_doc] + '" target="_blank">' + label + '</a><br />';
//if(doc == 83666) alert("A "+dbgCntr+": "+contents);
          if(menuScript[0] == -1) {
            techSupp += _shift(menuScript, doc, "techSupp1");
          }
          if(menuScript[0] == -2) {
            samples += _shift(menuScript, doc, "samples1");
          }
		  /*
          if(menuScript[0] == -3) {
            break; // next will be a new document number of a (new) parent
          }
		  */
        }
        else{
          count = _shift(menuScript, doc, "count");
          contents += '<a href="/' + gatewayName + '/list/product-' + doc + '/#' + anchor + '"> ' + label + '</a> (' + count + ')<br />';
//if(doc == 83666) alert("B "+dbgCntr+": "+contents);
        }
      }
      else if(menuScript[0] == -1) {
        techSupp += _shift(menuScript, doc, "techSupp2");
//if(doc == 83666) alert("C "+dbgCntr+": "+techSupp);
      }
      else if(menuScript[0] == -2) {
        samples += _shift(menuScript, doc, "samples2");
//if(doc == 83666) alert("C "+dbgCntr+": "+samples);
      }
//	  	  if(dbgCntr<3)alert(contents);

    }
    menuContents[doc] = contents;
//if(doc == 83666) alert("Finally "+dbgCntr+": "+menuContents[83666]+"\n--------------------------------"+contents);
   
    // if ts array doesn't already have a value, add current value;
    // if it already has a value, don't clobber the existing value (we've added it on a previous loop)
    if (ts[doc] == null) {
      ts[doc] = techSupp;
    }        
    samp[doc] = samples;
  } // while(menuScript[0] != null){
}

var dbgCntr = 0;
var prevDbgSum = 0;
function _shift(array, doc, msg) {
	var value = array.shift();
	var sum = (dbgCntr + array.length);
	//if(sum != prevDbgSum) alert("************** ERROR **************\n Sum changed from previous "+prevDbgSum+" to "+sum);
	//if(doc == 83666) alert("shifted "+msg+" '"+value+"'   "+dbgCntr+"/"+array.length+" sum="+sum);
	dbgCntr++;
	prevDbgSum = sum;
	return value;
}

function init(){
//  if (ns4){
//    document.captureEvents(Event.MOUSEMOVE|Event.MOUSEDOWN|Event.MOUSEUP);
//    document.onmousemove = mouseTracker;
//    document.onmousedown = hidemenu;
//    document.onmouseup = stopRoutEvent;
//  }
//  else
  //alert("init A "+menuScript.length);
  if (ns6up || ie4up){
    document.onmousemove = mouseTracker;
    document.onmouseup = hidemenu;
  }
  preGenerateMenus();
  //alert("init B "+menuScript.length);
}

function m(doc_id, lnk, ns_link_id, img){
  //alert("id="+doc_id+", lnk="+lnk+", ns_link_id="+ns_link_id+", img="+img+"\n"+menuContents[doc_id]);
  //restoreAll();
  MM_swapImgRestore();
  // known issue - status messages only supported for doc ids that have related docs (getInnerDocs function)
  if(typeof(menuContents[doc_id]) == 'undefined' || menuContents[doc_id]=='') {
    menuHTML = outerTop + getInnerSupport(doc_id) + outerBot;
//  if(doc_id == 34006) { alert("A\n"+menuHTML); }

  } else {  
    menuHTML = outerTop + getInnerDocs(doc_id) + getInnerSupport(doc_id) + getProdInfo (doc_id) + outerBot;
//  if(doc_id == 34006) { alert("B\n"+menuHTML); }
  }     
  MM_swapImage(img,'','/images/related/related-info-hover.gif',1);
  //swap(img);
  
  // bugfix - more reliable way to swap image (wasn't always swapping after sort/filter)
  restoreIButtonImage();  // clear any existing hover i-buttons first
  lnk.getElementsByTagName("img")[0].setAttribute("src", "/images/related/related-info-hover.gif");
  
  menuTest(lnk, ns_link_id);
}

function getInnerDocs (doc_id) {
  var statusMsg = statusMsgs[doc_id];
  var thisMenuContents = menuContents[doc_id];
  //if(! thisMenuContents) thisMenuContents= "";
  innerDocs = '<tr><td valign="top">'
      + '<b>Related documents</b></td></tr>'
      + '<tr><td><font size="1">'
      + thisMenuContents
      + '&nbsp;&nbsp;&nbsp;&nbsp;'
      + '<br /><img src="/images/pdfmini.gif" border="0" /><a href="/doc?'
      + doc_id
      + '" target="_blank"> Datasheet</a><br />';    
  if(statusMsg != null){innerDocs += '<font color=red>' + statusMsg + '</font>';}    
  innerDocs += '</font></td></tr>'
      + '<tr><td background="/images/related/related-dots.gif"><img src="/images/spacer.gif" width="4" />'
      + '</td></tr>';
  return innerDocs;
}

//build url for tech support here
function getInnerSupport (doc_id) {
  var prodPage = "/" + gatewayName + "/list/product-" + doc_id + "/";
  var innerSupport = '<tr><td><b>Product support</b></td></tr>'
        + '<tr><td><font size="1"><a href="' + prodPage
        + 'sales">Sales contacts</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';      
  if ((ts[doc_id] == -1) && (typeof(menuContents[doc_id]) != 'undefined')){
    innerSupport += '<br /> <a href="' + prodPage
        + '#tech">Technical questions</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp';
  }
  if ((samp[doc_id] == -2) && (typeof(menuContents[doc_id]) != 'undefined')){ 
    innerSupport += '<br /> <a href="' + prodPage
        + '#sample">Sample request</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp';
  }     
  return innerSupport;
}

function getProdInfo (doc_id) {
  prodInfo = '<br /><a href="/'
      + gatewayName
      + '/list/product-'
      + doc_id
      + '/">All product information</a></font>'
      + '</td></tr>';
  return prodInfo;
}

//tests browser and generates menu
function menuTest(lnk, ns_link_id){
  theTop = null;
  theLeft = null;
  clntHeight = null;
  lnkLeft = null;
  lnkTop = null;
  lnkWidth = null;
  lnkHeight = null;

  if (typeof(window.pageYOffset) == 'number' && !ie4up){ //netscape  compliant
    theTop = window.pageYOffset;
    theLeft =  window.pageXOffset;
  }else if (document.documentElement && document.documentElement.scrollTop){ //ie 6
    theTop = document.documentElement.scrollTop;
    theLeft = document.documentElement.scrollLeft;
  }else if (document.body){ //ie 4 and 5
    theTop = document.body.scrollTop;
    theLeft = document.body.scrollLeft;
  }

  if ((typeof(window.innerWidth) == 'number' && !ie4up) || isOpera){ //non-IE
    clntHeight = window.innerHeight;
  }else{
    if (document.documentElement && document.documentElement.clientHeight){ //ie 6
      clntHeight = document.documentElement.clientHeight;
    }else if (document.body){ //ie 4 and 5
      clntHeight = document.body.clientHeight;
    }
  }

  if (ie4up){
    current_link = lnk;
//    document.getElementById('myTable').innerHTML= menuHTML;
    myTable.innerHTML = menuHTML;
    lnkLeft = getleft(lnk);
    lnkTop = gettop(lnk);
    lnkWidth=  lnk.offsetWidth;
    lnkHeight = lnk.offsetHeight;
    mh = document.all('myTable').offsetHeight;
    var wh = document.body.offsetHeight;
    mt = lnkTop + mh - clntHeight - theTop + 2;
    if (mt>0){
       document.all('myTable').style.pixelLeft = lnkLeft + lnkWidth;
     //added 1px to top location for visual alignment
       document.all('myTable').style.pixelTop = lnkTop-mh+20;
              }else{
                 document.all('myTable').style.pixelLeft = lnkLeft + lnkWidth;
     //added 1px to top location for visual alignment
       document.all('myTable').style.pixelTop = lnkTop + 1 ;
    }
  }else if (ns6up) {
    lnkLeft = getleft(lnk);
    lnkTop = gettop(lnk) + 8;
    lnkWidth=  lnk.offsetWidth;
    lnkHeight = lnk.offsetHeight;
    document.getElementById('myTable').style.visibility='hidden';
    document.getElementById('myTable').innerHTML= menuHTML;
    mh = document.getElementById('myTable').offsetHeight;
    var wh = document.body.offsetHeight;
    mt = lnkTop+mh- clntHeight - theTop;
    if (mt>0) {
      document.getElementById('myTable').style.left = lnkLeft + lnkWidth + "px";
      document.getElementById('myTable').style.top = lnkTop+10-mh+ "px";
      document.getElementById('myTable').style.visibility='visible';
    }else{
      document.getElementById('myTable').style.left = lnkLeft + lnkWidth + "px";
      document.getElementById('myTable').style.top = lnkTop-10 + "px";
      document.getElementById('myTable').style.visibility='visible';
    }
  }
  document.getElementById('myTable').style.zIndex = 150;
  jQuery("#myTable").bind("mouseenter.tracking", function() {
	mouseIsInMenu = true;
  });
  jQuery("#myTable").bind("mouseleave.tracking", function() {
	mouseIsInMenu = false;
  });
  // console.log("lnk=" + lnk);
}

function relLeftOffset() {
  var offset = 0;
  if(globalTableWidth =='narrow') {
    offset = -140;
  }
  return offset;
}
function relTopOffset() {
  var offset = 0;
  if(globalTableWidth =='narrow') {
    offset = -150;
  }
  return offset;
}

function getleft (el){
  var ol = 0;
  while (el.offsetParent) { ol += el.offsetLeft; el = el.offsetParent;}
  return ol + relLeftOffset();
}

function gettop (el){
  var ot = 0;
  while (el.offsetParent) { ot += el.offsetTop; el = el.offsetParent;}
  return ot + relTopOffset();
}

//calculate mouse position
function mouseTracker(e) {
	e = e || window.event; // e = event object for ns, window.event = event object for ie
	window.pageX = e.pageX || e.clientX; //store the mouse positon relative to the web page
	window.pageY = e.pageY || e.clientY;
	e.cancelBubble = true;  //don't bubble up
	if (ie4up || ns6up) {  //I don't think netscape 4 support timeout function. need  to investagate
		//string = "MM_swapImgRestore(); close();";
		string = "restoreIButtonImage(); close();";
		//string ="restoreAll(); close();";
		if (tid != null) { clearTimeout(tid); }

		//if it is outside of menu and hover over image, call close menu function
		var iol = isOutLayer(); // !mouseIsInMenu; // isOutLayer();
		var iisi = isInSideImg();

		// console.log("iol=" + iol + " iisi=" + iisi);
		if (iol && !iisi) {
			tid = setTimeout(string, 200);
		}
	}
}

function getInternetExplorerVersion() {

    var rv = -1; // Return value assumes failure.

    if (navigator.appName == 'Microsoft Internet Explorer') {

        var ua = navigator.userAgent;

        var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");

        if (re.exec(ua) != null)

            rv = parseFloat(RegExp.$1);

    }
	// console.log(rv);
    return rv;

}

/****** calculate menu and hover over image region ******/
function isInSideImg(){
  var result;
  var thisCase = "";
  if (getInternetExplorerVersion() <= 8&& getInternetExplorerVersion() > 0){
    thisCase = "ie8+";
    if (window.pageX>=(lnkLeft - theLeft - 10) &&
      window.pageX<=(lnkLeft+lnkWidth-theLeft + 10) &&
      window.pageY>=(lnkTop-theTop - 10)&&
      window.pageY<=(lnkTop+lnkHeight-theTop + 10)){
      result = true;
    }else{
      result = false; // this got executed in IE9 (compatibility mode off) when page was scrolled down (a bit)
    }
  }else if(ns6up || isOpera || getInternetExplorerVersion() > 8){
    thisCase = "ns6up || isOpera";
    if (window.pageX>=(lnkLeft-10) &&
      window.pageX<=(lnkLeft+lnkWidth+10) &&
      window.pageY>=(lnkTop-10) &&
      window.pageY<=(lnkTop+lnkHeight+10)){
      result = true;
    }else{
      result = false;
    }
  }else if (ie4up && !isOpera){
    thisCase = "ie4up && !isOpera";
    if (window.pageX>=(lnkLeft - theLeft - relLeftOffset()) &&
      window.pageX<=(lnkLeft+lnkWidth-theLeft - relLeftOffset()) &&
      window.pageY>=(lnkTop-theTop - relTopOffset())&&
      window.pageY<=(lnkTop+lnkHeight-theTop - relTopOffset())){
      result = true;
    }else{
      result = false;
    }
  }
  // console.log(thisCase);
  return result;
}

//mouse is outside menu
function isOutLayer() {
	return !mouseIsInMenu;
}

function hidemenu(){
  if (isOutLayer()){
    MM_swapImgRestore();
    //restoreAll();
    close();
  }
}

function closemenu(){
  MM_swapImgRestore();
  //restoreAll();
  close();
}

function close() {
  jQuery("#myTable").unbind("tracking");
  jQuery("#myTable").empty();
}

function stopRoutEvent(){
  if (isOutLayer()){
    if (ns4){
      if (document.layers['myTable'] != null && link_id != null){
        changBack(link_id);
        link_id = null;
        document.layers['myTable'].document.open();
        document.layers['myTable'].document.writeln('');
        document.layers['myTable'].document.close();
        for (var i=0; i<document.layers.length; i++){document.layers[i] = null;}
      }
    }
  }
}

function myVoid() { ; }

function goSearch( params ) {
  versionNumber = parseInt( navigator.appVersion );
  if ( versionNumber >= 4 ) { openSearch( params ); }
  else { window.location.href = "/vishay.com/errors/browser.html"; }
}

function restoreIButtonImage() {
  var images = document.getElementsByTagName("img");
  //alert("images.length = " + images.length);
  for (var i = 0; i < images.length; i++) {
    if ( images[i].getAttribute("src").indexOf("related-info-hover") > -1 ) {
     images[i].setAttribute("src", "/images/related/related-info.gif");
    }
  } 
}  
