function $(control_id) {
  var elm = document.getElementById(control_id);
  if (!elm)
    return;

  if (!elm.innerText && elm.textContent) {
    elm.__defineGetter__('innerText', function() { return this.textContent; });
    elm.__defineSetter__('innerText', function(val) { return this.textContent = val; });
  }
  return elm;
}

function $css(elm) {
  if (!elm.CssClassObj)
		elm.CssClassObj = new CssClass(elm);
	return elm.CssClassObj;
}
function CssClass(element){
	this.Element = element;
	this.Element.CssClassObj = this;
}
function CssClass_GetClasses(){
	if (this.Element.className == null || this.Element.className == '')
		return [];
	return this.Element.className.split(' ');
}
function CssClass_GetIndex(){
	var classes = this.getClasses();
	var index = {};
	for(var i in classes)
		index[classes[i]] = 1;
	return index;
}
function CssClass_Contains(className){
	var index = this.getIndex();
	return index != null && index[className] == 1;
}
function CssClass_Add(className){
	if(this.contains(className))
		return;
	var classes = this.getClasses();
	classes[classes.length] = className;
	this.Element.className = classes.join(' ');
}
function CssClass_Remove(className){
	var old_classes = this.getClasses();
	var new_classes = [];
	for(var i in old_classes){
		if (old_classes[i] == className)
			continue;
		new_classes[new_classes.length] = old_classes[i];
	}
	this.Element.className = new_classes.join(' ');
}
function CssClass_Toggle(className){
	if (this.contains(className))
		this.remove(className);
	else
		this.add(className);
}
CssClass.prototype.getClasses = CssClass_GetClasses;
CssClass.prototype.getIndex = CssClass_GetIndex;
CssClass.prototype.contains = CssClass_Contains;
CssClass.prototype.add = CssClass_Add;
CssClass.prototype.remove = CssClass_Remove;
CssClass.prototype.toggle = CssClass_Toggle;
