function EmptyObject(){}
var RDA=new EmptyObject();
RDA.debug = false;
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
	window.onload = function() { oldonload(); func(); }
  }
}
function Class(data){
  this.$extend=new Function('var destination=arguments[0], source=arguments[1];for(var property in source)destination[property]=source[property]; return destination;');
  return this.$extend(new EmptyObject(),data||{});
}
Class.$extend=Function('var destination=arguments[0], source=arguments[1];for(var property in source)destination[property]=source[property]; return destination;');
Class.require = function() {
  for(var i=0; i<arguments.length;i++) {
    var library = arguments[i];
	if(!RDA.loadedScripts.exists(library)) {
      document.write('<script type="text/javascript" src="/js/'+library+'.js"></script>');
	  RDA.loadedScripts.push(library);
	}
  }
}
var $ = function() {
  var elements = new Array();
  for (var i=0;i<arguments.length;i++) {
    var element=arguments[i];
    if (typeof element == 'string') element=document.getElementById(element);
    if (arguments.length == 1) return element;
    elements.push(element);
  }
  return elements;
}

Function.prototype.foreach = function(object, block, context) {
  for (var key in object) {
    if (typeof this.prototype[key] == "undefined") {
      block.call(context, object[key], key, object);
    }
  }
};

/* from http://dean.edwards.name/weblog/2006/07/enum/ */
foreach = function(object, block, context) {
  if (object) {
    var resolve = Object; // default
    if (object instanceof Function) {
      resolve = Function;
    } else if (object.foreach instanceof Function) {
      object.foreach(block, context);
      return;
    } else if (typeof object.length == "number") {
      resolve = Array;
    }
    resolve.foreach(object, block, context);
  }
};

Class.$extend(Array.prototype,{
  popValue: function(value) {
	if(this.length==0) return [];
	var newList = new Array();
	for(var i=0;i<this.length;i++) {
		if(this[i] != value) {
			newList.push(this[i]);
		}
	}
	this.length=0;
	for(var i=0;i<newList.length;i++) {this.push(newList[i]);}
	return newList;
  },
  clean: function() {
	if(this.length==0) return [];
	var newList = new Array();
	for(var i=0;i<this.length;i++) {
		if(this[i] != null || this[i] != '') {
	 		newList.push(this[i]);
		}
	}
	this.length=0;
	for(var i=0;i<newList.length;i++) {this.push(newList[i]);}
	return newList;
  },
  exists: function(value) {
	if(this.length==0) return false;
	var exists = false;
	for(var i=0;i<this.length;i++) {
		if(this[i] == value) {exists=true;break;}
	}
	return exists;
  },
  '_indexOf': function(item) {
	for(var i=0;i<this.length;i++) {
	  if(this[i]==item) {break; return i;}
	}
	return null;
  },
  'foreach':function(processor) {
	for(var i=0;i<this.length;i++)
	  processor(this[i]);
  }
});

RDA.loadedScripts = new Array();