//Makes it possible to add classes to parent nodes
//by for example giving the node the class giveClass_newClass_toRow

// Version 1.1: Small fix
// Version 1.0: Basic functionality

//Runs initializeGiveClass automatically, check last line.
var GiveClass = {
  inputClassName : "giveClass", //Editable
  itemClassName : "tableFormat1",
  
  debug : false,
  debugPreString : "c_giveclass.js: ",
  debugPostString : "-error: ",

  initializeGiveClass : function() {
    try {
      var elements = Utilities.getElementsByClassAndTagName(GiveClass.inputClassName, new Array("TABLE", "DIV", "INPUT")); /* Add "INPUT" if DM-project*/
      for(var i=0; i<elements.length; i++) {
          var className = new Array();
          var to;
          var cssClassArguments = Utilities.getFakeClassArguments(elements[i], GiveClass.inputClassName);
          if(cssClassArguments.length >= 2) {
            if(cssClassArguments[1].indexOf("-") != -1) className = cssClassArguments[1].split("-");
            else className.push(cssClassArguments[1]);
            to = GiveClass.getTargetParent(cssClassArguments[2], elements[i]);
            Utilities.addClassName(to, className);
          }
      }
    } catch(err) {if(GiveClass.debug) alert(GiveClass.debugPreString + "initializeGiveClass" + GiveClass.debugPostString + err);}
  },
  getTargetParent : function(toParentString, element) {
    try {
      var to = element;
        switch(toParentString) {
          case "toSelf":
            break;
          case "toCell":
          case "toColumn":
            to = Utilities.getKin(element, "parent", "TD");
            break;
          case "toRow":
            to = Utilities.getKin(element, "parent", "TR");
            break;
          case "toTable":
            to = Utilities.getKin(element, "parent", "TABLE");
            break;
          case "toItem":
            to = Utilities.getKin(element, "parent", "DIV", GiveClass.itemClassName);
            break;
          case "1":
            to = element.parentNode;
            break;
          case "2":
            to = element.parentNode.parentNode;
            break;
          case "3":
            to = element.parentNode.parentNode.parentNode;
            break; 
          case "4":
            to = element.parentNode.parentNode.parentNode.parentNode;
            break;
          default:
            break;               
        }
      return to;
    } catch(err) {if(GiveClass.debug) alert(GiveClass.debugPreString + "getTargetParent" + GiveClass.debugPostString + err);}
  }
};
if(addOnloadEvent) addOnloadEvent(GiveClass.initializeGiveClass);
else GiveClass.initializeGiveClass();
