/*
 * Start of a MNjslib, just a hack yet, based on some code from 2007
 * MeteoNews AG, Beat Vontobel, 2010-11-18
 */

MNjslib = new Object;

/** boolean MNjslib.classAdd(node, string)
  */
MNjslib.classAdd = function(obj, cl) {
    if(!obj) return false;
    if(cl == null) return true;
    var classes = obj.className.split(/\s+/);
    for(i in classes) {
        if(cl == classes[i]) return true;
    }
    classes.push(cl);
    obj.className = classes.join(' ');
    return true;
}
 
/** boolean MNjslib.classRemove(node, string)
  */   
MNjslib.classRemove = function(obj, cl) {
    if(!obj) return false;
    if(cl == null) return true;
    var classes = obj.className.split(/\s+/);
    for(i in classes) {
        if(cl == classes[i]) classes[i] = undefined;
    }
    obj.className = classes.join(' ');
    return true;
}

/** boolean MNjslib.classReplace(node, string)
  */
MNjslib.classReplace = function(obj, cl1, cl2) {
    if(MNjslib.classRemove(obj, cl1)) return MNjslib.classAdd(obj, cl2);
    return false;
}

/** boolean MNjslib.classContains(node, string)
  */
MNjslib.classContains = function(obj, cl) {
  if(!obj)
    return false;
  if(cl == null) return true;
  var result = false;
  var classes = obj.className.split(/\s+/);
  for (var i in classes)
    if (cl == classes[i])
      result = true;
  return result;
}

/** boolean MNjslib.classToggle(node, string)
  */
MNjslib.classToggle = function(obj, cl1, cl2) {
  if (MNjslib.classContains(obj, cl1) &&
      (cl1 != null ||
       !MNjslib.classContains(obj, cl2)))
    return MNjslib.classReplace(obj, cl1, cl2);
  else if (MNjslib.classContains(obj, cl2) &&
      (cl2 != null ||
       !MNjslib.classContains(obj, cl1)))
    return MNjslib.classReplace(obj, cl2, cl1);
  return false;
}

/** var MNjslib.clone(var)
  * Gibt eine wirkliche Kopie (im Speicher) von var zurück
  */
MNjslib.clone = function(variable) {
  if (variable &&
      typeof variable == "object") {
    var newVariable = (variable instanceof Array) ? [] : {};
    for (i in variable) {
      if (variable[i] && typeof variable[i] == "object")
        newVariable[i] = MNjslib.clone(variable[i]);
      else
        newVariable[i] = variable[i];
    }
    return newVariable;
  }
  else
    return variable;    
}

/** string MNjslib.getText(node)
  * Gibt den Textinhalt eines Knotens zurück
  * Dafür müssen die beiden Eigenschaften "textContent", "innerText" verwendet
  * werden, da "textContent" oder "text" im IE nicht zur Verfügung stehen,
  * andererseits steht "innerText" im Firefox nicht zur Verfügung.
*/
MNjslib.getText = function(element) {
  return (element.textContent) ? element.textContent : element.innerText;
}
/** boolean MNjslib.setText(node, string)
  * Setzt den Textinhalt eines Knotens neu (gibt true im Erfolgsfall zurück)
  */
MNjslib.setText = function(element, text) {
  if (element.textContent)
    element.textContent = text;
  else
    element.innerText = text;
  return (MNjslib.getText(element) == text);
}

/** boolean toggleText(node, array of strings)
  * Ändert den Textinhalt eines Knoten "node" gemäss dem Inhalt von
  * "toggle_textes". Dabei wird der Reihe nach immer einen String weiter
  * geschaltet. Am Ende des Arrays wird wieder von vorne begonnen.
  * Gibt im Erfolgsfall true zurück.
  */
MNjslib.toggleText = function(element, toggle_textes) {
  var result = false;
  if (element) {
    // Verwende for-Schleife, damit i Integer ist
    for (var i=0; i<toggle_textes.length; i++) {
      if (MNjslib.getText(element) == toggle_textes[i]) {
        if ((i+1) < toggle_textes.length)
          result = MNjslib.setText(element, toggle_textes[i+1]);
        else
          result = MNjslib.setText(element, toggle_textes[0]);
        break;
      }
    }
  }
  return result;
}
