var Utils = new Object();
Utils.replaceWith = function(el, content) {
    var oldEl = (typeof el === "string" ? document.getElementById(el) : el);
    newEl = document.createElement(oldEl.nodeName);
    newEl.id = oldEl.id;
    newEl.className = oldEl.className;
    var oldStyle =  oldEl.attributes['style'].value;
    newEl.setAttribute('style', oldStyle);
    newEl.appendChild(content.nodeType==1?content:document.createTextNode(content));
    oldEl.parentNode.replaceChild(newEl, oldEl);
}
Utils.isEmpty = function(element) {
	if (element==undefined || element==null) {
		return true;
	}
	else if (element instanceof String) {
		return jQuery.trim(element).length==0;
	}
	else if (typeof (element)==='object' && element instanceof Array) {
		return element.length==0;
	}
	return false;
}
function ArrayList()
{
  this.array = new Array();
  this.add = function(obj){
    this.array[this.array.length] = obj;
  }
  this.iterator = function (){
    return new Iterator(this)
  }
  this.length = function (){
    return this.array.length;
  }
  this.get = function (index){
    return this.array[index];
  }
  this.addAll = function (obj)
  {
    if (obj instanceof Array){
      for (var i=0;i<obj.length;i++)
      {
        this.add(obj[i]);
      }
    } else if (obj instanceof ArrayList){
      for (var i=0;i<obj.length();i++)
      {
        this.add(obj.get(i));
      }
    }
  }
}

function Iterator (arrayList){
  this.arrayList;
  this.index = 0;
  this.hasNext = function (){
    return this.index < this.arrayList.length();
  }
  this.next = function() {
    return this.arrayList.get(index++);
  }
}

function Map(){
    var keys = new Array();
    this.contains = function(key){
       var entry = findEntry(key);
       return !(entry == null || entry instanceof NullKey);
    }
    this.get = function(key) {
     var entry = findEntry(key);
     if ( !(entry == null || entry instanceof NullKey) )
        return entry.value;
      else
        return null;
    }
    this.put = function(key, value) {
      var entry = findEntry(key);
      if (entry){
        entry.value = value;
      } else {
        addNewEntry(key, value);
      }
    };
    this.remove = function (key){
      for (var i=0;i<keys.length;i++){
        var entry = keys[i];
        if (entry instanceof NullKey) continue;
        if (entry.key == key){
            keys[i] = NullKey;
        }
      }        
    }
    function findEntry(key){
      for (var i=0;i<keys.length;i++){
        var entry = keys[i];
        if (entry instanceof NullKey) continue;
        if (entry.key == key){
            return entry
        }
      }
      return null;
    }
    function addNewEntry(key, value){
        var entry = new Object();
        entry.key = key;
        entry.value = value;
        keys[keys.length] = entry; 
    }
  }
  //replace the entries of map in key array, removing the former value;  
  function NullKey(){
  }
  new NullKey();

