/**
* @version $Id: mod_tnt_transmenu.php
* @copyright (C) 2006 TNTWebDesign.co.uk
*/

if (typeof TNTAttachEvent == 'undefined') {

  function TNTAttachEvent(obj, evt, fnc, useCapture) {
    //alert('TNTAttachEvent('+obj.tagName+','+evt+','+fnc+','+useCapture+')');

	  if (obj.addEventListener){
      // W3C DOM
	    if (!useCapture)
        useCapture = false;
		  obj.addEventListener(evt, fnc, useCapture);
		  return true;

	  } else if (obj.attachEvent) {
      // IE 6 DOM
       return obj.attachEvent('on'+evt, fnc);

	  } else {
      // Legacy
		  _TNTAttachEvent(obj, evt, fnc);
		  obj['on'+evt] = function() { _TNTFireEvent(obj, evt) };
	  }
  } 
  
  // The following are for browsers like NS4 or IE5Mac which don't support
  // either attachEvent or addEventListener
  function _TNTAttachEvent(obj, evt, fnc) {
    //alert('_TNTAttachEvent('+obj.tagName+','+evt+','+fnc+')');

	  if (!obj.tntEvents)
      obj.tntEvents = {};
	  if (!obj.tntEvents[evt])
      obj.tntEvents[evt] = [];
	  var evts = obj.tntEvents[evt];
	  evts[evts.length] = fnc;
  }
  
  function _TNTFireEvent(obj, evt) {
    //alert('_TNTFireEvent('+obj.tagName+','+evt+')');

	  if (!obj || !obj.tntEvents || !obj.tntEvents[evt])
      return;
	  var evts = obj.tntEvents[evt];
	  for (var i = 0, len = evts.length; i < len; i++)
      evts[i]();
  }
  
}

if (typeof TNTTransMenuLoad == 'undefined') {

  function TNTTransMenuInit() {
    //alert('TNTTransMenuInit()');

    if (!TransMenu || !TransMenu.isSupported()) {
      return;
    }

    TransMenu.initialize();            
  }
  
  function TNTTransMenuLoad(path) {
    //alert('TNTTransMenuLoad('+path+')');
  
    if (typeof TransMenu != 'undefined') {
      return;
    }
  
    var ua = navigator.userAgent.toLowerCase();
  
    if (ua.indexOf('msie 5')) {
      // loads XHTML uncompliant code to allow menu to work in IE 5
      document.writeln('\
<script type = "text/javascript" src="'+path+'/transmenu.js"></script>\n\
<link rel="stylesheet" type="text/css" href="'+path+'/transmenu.css" />\n\
<link rel="stylesheet" type="text/css" href="'+path+'/tnttransmenu.css" />\n');
  
    } else {
      // loads XHTML compliant code
      var head = document.getElementsByTagName('head').item(0);
  
      var o = document.createElement('script');
      o.setAttribute('src', path+'/transmenu.js');
      o.setAttribute('type', 'text/javascript');
      head.appendChild(o);
  
      var o = document.createElement('link');
      o.setAttribute('href', path+'/transmenu.css');
      o.setAttribute('rel', 'stylesheet');
      o.setAttribute('type', 'text/css');
      head.appendChild(o);
  
      var o = document.createElement('link');
      o.setAttribute('href', path+'/tnttransmenu.css');
      o.setAttribute('rel', 'stylesheet');
      o.setAttribute('type', 'text/css');
      head.appendChild(o);
    }
  
    TNTAttachEvent(window, 'load', TNTTransMenuInit, false);
  }
  
  // Create a transmenu
  function TNTTransMenu(menuid, menu, opts, path) {
    //alert('TNTTransMenu('+menuid+')');
  
    if (!TransMenu || !TransMenu.isSupported()) {
      return;
    }
  
    TransMenu.spacerGif = path + '/img/x.gif';
    TransMenu.dingbatOn = path + '/img/submenu-on.gif';
    TransMenu.dingbatOff = path + '/img/submenu-off.gif';
    TransMenu.shadowPng = path + '/img/grey-40.png';
    TransMenu.backgroundPng = path + '/img/white-90.png';
    TransMenu.subpad_x = opts.subPadLeft || 0;
    TransMenu.subpad_y = opts.subPadTop || 0;
    TransMenu.dingbatSize = opts.dingbatSize || 14;
    TransMenu.menuPadding = opts.menuPad || 0;
    TransMenu.itemPadding = opts.itemPad || 3;
    TransMenu.hideDelay = opts.hideDelay || 1000;
    TransMenu.slideTime = opts.slideTime || 400;

    // Get the current top menu style and replicate that to the sub menu
    // if required.
    var bgColor = null;
    var elm = document.getElementById('tnt-transmenu-'+menuid+'-submenu');
    while (elm) {
      if (elm.tagName) {
        if (elm.currentStyle) {
          bgColor = elm.currentStyle.backgroundColor;
        } else if (window.getComputedStyle) {
          bgColor = window.getComputedStyle(elm, null).backgroundColor;
        } else {
          elm.style.backgroundColor;
        }
        //alert('elm.tagName='+elm.tagName+', bgColor = '+bgColor);
        if (bgColor && bgColor != 'inherit' && bgColor != 'transparent') {
          break;
        }
      }
      elm = elm.parentNode;
    }

    TransMenu.backgroundColor = bgColor || 'white';
    
    var ms = new TransMenuSet(
      opts.dir || TransMenu.direction.down,
      opts.left || 0,
      opts.top || 0,
      opts.pos || TransMenu.reference.bottomLeft);

    ms._opts = opts;
  
    // Add the submenus off the main menu
    var pid, id, item, tm = {}, ti, cnt;
    for (pid in menu) {
      cnt = 0;
      for (id in menu[pid]) {
        item = menu[pid][id];
        if (pid == 0) {
          var o = document.getElementById('tnt-transmenu-'+menuid+'-'+id);
          if (!o) {
            alert('object not found: tnt-transmenu-'+menuid+'-'+id);
          } else {
            tm[id] = ms.addMenu(o);
            tm[id]._oActuator = o;
            tm[id].onactivate = function() { this._oActuator.className += ' hover' };
            tm[id].ondeactivate = function() { this._oActuator.className = this._oActuator.className.replace(' hover', ''); };
          }
          continue;
        }
        if (!tm[pid]) {
          alert('no parent '+pid+': '+item.name+' ('+item.link+')');
          continue;
        }
  
        //alert('Adding item '+id+' to parent '+pid+': '+item.name+' ('+item.link+')');
        tm[pid].addItem(item.name, item.link, item.browserNav, item.active);
  
        // If we are a parent then create a submenu
        if (typeof menu[id] != 'undefined') {
          //alert('Adding submenu to item '+id+': '+item.name+' ('+item.link+')');
          tm[id] = tm[pid].addMenu(tm[pid].items[cnt]);
        }
  
        cnt++;
      }
    }
  
    // Render the menu set (we only render the just created menu as opposed to
    // TransMenu.renderAll() which will render all menus in one go and really
    // should be called at the end of the body)
    var aHtml = [];
    for (var m in tm) {
      aHtml.push(tm[m].toString());
    }
    document.write(aHtml.join(''));
  }
}

/* vim: set expandtab tabstop=2 shiftwidth=2: */


