function $(el){
  return document.getElementById(el);
}

function $$(tag, top){
  if (top == undefined)
  return document.getElementsByTagName(tag);
  else
  return top.getElementsByTagName(tag);
  
}

function $$$(tag, type){ 
  tags = document.getElementsByTagName(tag);
  var arr = new Array();
  
  for(i=0; i<tags.length; i++){
    if (tags[i].type == type)
    arr.push(tags[i]);    
  }
  
  return arr;
}

function getElementsByClassName(tag, find, parent){
  parent = (parent == undefined) ? document : parent;
  
  tags = parent.getElementsByTagName(tag);
  var arr = new Array();
  
  for(i=0; i<tags.length; i++){
    if (tags[i].className == find)
    arr.push(tags[i]);    
  }
  
  return arr;
}

function addClass(el, newclass){
  el.className += ' ' + newclass;
}

function removeClass(el, newclass){
    if (el.className.indexOf(' ') != -1){
        
    classes = el.className.split(' ');

    var arr = new Array();
    for(i=0; i<classes.length; i++){
      if (classes[i] != newclass){       
        arr.push(classes[i]);
      }

    }
    el.className = arr.join(' ');
    } 
}

function ajax() {  
    // Testing the Browser XML stuffs
    trythese = new Array('new XMLHttpRequest()','new ActiveXObject("Msxml2.XMLHTTP")','new ActiveXObject("Microsoft.XMLHTTP")');

    for(i=0; i<trythese.length; i++){
      try {
      eval(trythese[i]);
      } catch (e) {
      continue;
      }
      
      this.xmlHttp = eval(trythese[i]);
      break;
    }
}

function scriptRequest(filename, params){
var myajax = new ajax();

myajax.xmlHttp.onreadystatechange = function() 
        { 
          switch(myajax.xmlHttp.readyState){
            case 4:
            eval(myajax.xmlHttp.responseText);
            break;
          }
        }

myajax.xmlHttp.open("GET", filename+'?'+params+"&rand="+new Date().getTime, true);
myajax.xmlHttp.send(null);

}

    function addEvent( obj, type, fn ) {
      if (obj.addEventListener) {
        obj.addEventListener( type, fn, false );
        EventCache.add(obj, type, fn);
      }
      else if (obj.attachEvent) {
        obj["e"+type+fn] = fn;
        obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
        obj.attachEvent( "on"+type, obj[type+fn] );
        EventCache.add(obj, type, fn);
      }
      else {
        obj["on"+type] = obj["e"+type+fn];
      }
    }

    var EventCache = function(){
      var listEvents = [];
      return {
        listEvents : listEvents,
        add : function(node, sEventName, fHandler){
          listEvents.push(arguments);
        },
        flush : function(){
          var i, item;
          for(i = listEvents.length - 1; i >= 0; i = i - 1){
            item = listEvents[i];
            if(item[0].removeEventListener){
              item[0].removeEventListener(item[1], item[2], item[3]);
            };
            if(item[1].substring(0, 2) != "on"){
              item[1] = "on" + item[1];
            };
            if(item[0].detachEvent){
              item[0].detachEvent(item[1], item[2]);
            };
            item[0][item[1]] = null;
          };
        }
      };
    }();
