
var prevHiliteElements = new Array();
function hiliteElements (elemNames, className) {
  setClassOfNames(prevHiliteElements,'');
  elemNames = elemNames.split(/\s*,\s*/);
  prevHiliteElements = elemNames;
  setClassOfNames(elemNames, className);
}

function setClassOfNames(elemNames, className) {
  if (!elemNames)
    return;
  for (var i = 0; i < elemNames.length; i++) {
    if (elemNames[i]) {
      var elems = document.getElementsByName(elemNames[i]);
      if (elems) {
        setClassOfElems(elems, className);
      }
    }
  }
}

function setClassOfElems(elems, className) {
  if (!elems)
    return;
  for (var i = 0; i < elems.length; i++) {
    elems[i].className = className;
  }
}

/* TODO: this is only used by the category editor; so make the category editor
 * a proper jquery plugin like the jquery.tagselector component
 */
function toggleValue(fieldName, theValue, selector) {
  writeDebug("toggleValue("+fieldName+","+theValue+","+selector+")");

  var values = jQuery("input#"+fieldName).val() || '';
  values = values.split(/\s*,\s*/);
  writeDebug("values='"+values+"' - length="+values.length);

  clsClearSelection(fieldName, selector, values);

  var found = false;
  var newValues = new Array();
  for (var i = 0; i < values.length; i++)  {
    var value = values[i];
    if (!value)
      continue;
    if (value == theValue) {
      found = true;
    } else {
      newValues.push(value);
    }
  }

  if (!found) {
    newValues.push(theValue)
  }

  clsSetSelection(fieldName, selector, newValues);
  return false;
}

function clsSetSelection(fieldName, selector, values) {
  if (typeof(values) == 'string') {
    values = values.split(/\s*,\s*/);
  }
  writeDebug("clsSetSelection("+fieldName+","+selector+","+values+")");

  for (var i = 0; i < values.length; i++) {
    if (values[i]) {
      jQuery("#"+selector+" a."+values[i]).addClass("current");
    }
  }
  jQuery("input#"+fieldName).val(values.sort().join(", "));
}

function clsClearSelection(fieldName, selector, values) {
  /*jQuery("#"+selector+" input#"+fieldName).val("");
  jQuery("#"+selector+" a").removeClass('current');
  jQuery("#"+selector+" a").removeClass('typed');*/
  writeDebug("clsClearSelection("+fieldName+","+selector+","+values+")");

  if (typeof(values) == 'undefined') {
    jQuery("#"+selector+" a").removeClass('current hover typed');
  } else {
    for (var i = 0; i < values.length; i++) {
      if (values[i]) {
        var thisSelector = "#"+selector+" a."+values[i];
        jQuery(thisSelector).removeClass("current hover typed");
      }
    }
  }
  jQuery("#"+selector+" input#"+fieldName).val("");
}

var clsDebug = 0;
function writeDebug(msg) {
  if (clsDebug) {
    msg = "DEBUG: ClassSelector - "+msg;
    if (window.console && window.console.log) {
      window.console.log(msg);
    } else { 
      //alert(msg);
    }
  }
};

(function($) {
$.fn.clsBrowser = function(options) {
  return this.each(function() {
    var $this = $(this);
    var treeviewOpts = $.extend({}, options);
    $this.find(".clsBrowserList").treeview(treeviewOpts);
    $this.find("#expandAll").click(function() {
      $this.html("<span class='jqAjaxLoader'></span>")
      .load(foswiki.scriptUrlPath+"/rest/RenderPlugin/tag?name=INCLUDE;topic="+foswiki.web+"."+foswiki.topic+";param=Applications/ClassificationApp/RenderCategoryBrowser;expandall=on;section=container");
    });
  });
};

})(jQuery);
