var styles = new Object;
styles['A'] = {
      over: {
          bg:'#3D60F5',
          fg:'#EBEBEB'
      },
      out: {
          bg:'#EBEBEB',
          fg:'#000'
      }
};

styles['P'] = {
      over: {
          bg:'#3D60F5',
          fg:'#EBEBEB'
      },
      out: {
          bg:'#EBEBEB',
          fg:'#505050'
      }
};

styles['ABBR'] = {
      over: {
          bg:'#3D60F5',
          fg:'#EBEBEB'
      },
      out: {
          bg:'#EBEBEB',
          fg:'#505050'
      }
};

styles['LI'] = {
      over: {
          bg:'#3D60F5 url(http://www.appsundmehr.de/fileadmin/templates/img/pfeil_negativ.gif) no-repeat center right',
          fg:'#EBEBEB'
      },
      out: {
          bg:'#EBEBEB url(http://www.appsundmehr.de/fileadmin/templates/img/pfeil_grey.gif) no-repeat center right',
          fg:'#000'
      }
};

styles['TD'] = {
      over: {
          bg:'#3D60F5',
          fg:'#EBEBEB'
      },
      out: {
          bg:'#EBEBEB',
          fg:'#000'
      },
      arrow: {
          over: {
              bg:'#3D60F5 url(http://www.appsundmehr.de/fileadmin/templates/img/pfeil_negativ.gif) no-repeat center right',
              fg:'#EBEBEB'
          },
          out: {
              bg:'#EBEBEB url(http://www.appsundmehr.de/fileadmin/templates/img/pfeil_grey.gif) no-repeat center right',
              fg:'#000'
          }
      }
};

//styles['TD'] = styles['A'];
styles['H2'] = {
      over: {
          bg:'transparent',
          fg:'#EBEBEB'
      },
      out: {
          bg:'transparent',
          fg:'#000'
      }
};
styles['LABEL'] = styles['A'];

var callbacks = {
  onMouseOver: function(event) {
    var target = YAHOO.util.Event.getTarget(event);
    if (! target) {
        return;
    }

    propagateStyle(target, 'over');
  },

  onMouseOut: function(event) {
    var target = YAHOO.util.Event.getTarget(event);
    if (! target) {
        return;
    }

    propagateStyle(target, 'out');
  },

  onClick: function(event) {
    var target = event.target ? event.target : event.srcElement;
    if (! target) {
        return;
    }

    if (target.nodeName != 'A') {
        var parent = null;
        if (target.nodeName == 'LI' || target.nodeName == 'TR') {
            parent = target;
        }

        if (!parent) { parent = getParentNode(target, 'LI'); }

        if (!parent) { parent = getParentNode(target, 'TR'); }

        if (!parent) {
            return;
        }

        var links = parent.getElementsByTagName('A');
        if (!links || links.length < 1) {
            return;
        }

        window.location.href = links[0].href;
    }
  }
};


function init() {
  var elements = new Array().concat(YAHOO.util.Dom.getElementsByClassName('list', 'UL'));
  elements = elements.concat(YAHOO.util.Dom.getElementsByClassName('list', 'TBODY'));

  for(var i = 0; i < elements.length; i++) {
      var el = elements[i];

      YAHOO.util.Event.addListener(el, 'mouseover', callbacks.onMouseOver);
      YAHOO.util.Event.addListener(el, 'mouseout', callbacks.onMouseOut);
      YAHOO.util.Event.addListener(el, 'click', callbacks.onClick);
  }

}

function propagateStyle(target, mode) {

  while (target.nodeName != "UL") { 
    var nodeName = target.nodeName.toUpperCase();
    
    if(nodeName == "LI" || nodeName == "TR") {
        setStyle(target, mode);
        break;
    } else {
        target = target.parentNode;
    }

  }
}

function setStyle(el, mode) {
    var nodeName = el.nodeName;
    var className = el.className;

    //console.debug("Setting style '" + mode + "' on " + el.nodeName);

    if (styles[nodeName] && styles[nodeName][className] && styles[nodeName][className][mode]) {
        YAHOO.util.Dom.setStyle(el, 'background', styles[nodeName][className][mode]['bg']);
        YAHOO.util.Dom.setStyle(el, 'color', styles[nodeName][className][mode]['fg']);
    } else if (styles[nodeName] && styles[nodeName][mode]) {
        YAHOO.util.Dom.setStyle(el, 'background', styles[nodeName][mode]['bg']);
        YAHOO.util.Dom.setStyle(el, 'color', styles[nodeName][mode]['fg']);
    }

    /*
    if (styles[nodeName] && styles[nodeName][mode] && mode == 'out') {

        
        if ( YAHOO.util.ColorAnim ) {          
          var attributes = {
            color: { to:  styles[nodeName][mode]['fg'] },
            backgroundColor: { to: styles[nodeName][mode]['bg'] }
          };

          var anim = new YAHOO.util.ColorAnim(el, attributes, 0.15);
          anim.onComplete.subscribe(function(args) {
              YAHOO.util.Event.addListener(this, 'mouseover', callbacks.onMouseOver);
              YAHOO.util.Event.addListener(this, 'mouseout', callbacks.onMouseOut);
              YAHOO.util.Event.addListener(this, 'click', callbacks.onClick);
          }, el, true);
          
          YAHOO.util.Event.removeListener(el, 'mouseover');
          YAHOO.util.Event.removeListener(el, 'mouseout');
          YAHOO.util.Event.removeListener(el, 'click');
          
          anim.animate();
        //} else {
          YAHOO.util.Dom.setStyle(el, 'background', styles[nodeName][mode]['bg']);
          YAHOO.util.Dom.setStyle(el, 'color', styles[nodeName][mode]['fg']);
        //}
    }
    */

    var children = el.childNodes;
    if (children) {
      for(var i = 0; i < children.length; i++) {
          if (children[i].nodeType != 1) {
              continue;
          }
          setStyle(children[i], mode);
      }
    }
}

function getParentNode(child, parentNodeName) {
    var node = child;

    while(node.parentNode) {
        node = node.parentNode;
        if (node.nodeName == parentNodeName) {
            return node;
        }
    }
    
    return null;
}

YAHOO.util.Event.onDOMReady(init);