<script language="javascript" type="text/javascript">

/* Event Functions */

// Add an event to the obj given

// event_name refers to the event trigger, without the "on", like click or mouseover

// func_name refers to the function callback when event is triggered

function addEvent(obj,event_name,func_name){

 if (obj.attachEvent){

  obj.attachEvent("on"+event_name, func_name);

 }else if(obj.addEventListener){

  obj.addEventListener(event_name,func_name,true);

 }else{

  obj["on"+event_name] = func_name;

 }

}

// Removes an event from the object

function removeEvent(obj,event_name,func_name){

 if (obj.detachEvent){

  obj.detachEvent("on"+event_name,func_name);

 }else if(obj.removeEventListener){

  obj.removeEventListener(event_name,func_name,true);

 }else{

  obj["on"+event_name] = null;

 }

}

// Stop an event from bubbling up the event DOM

function stopEvent(evt){

 evt || window.event;

 if (evt.stopPropagation){

  evt.stopPropagation();

  evt.preventDefault();

 }else if(typeof evt.cancelBubble != "undefined"){

  evt.cancelBubble = true;

  evt.returnValue = false;

 }

 return false;

}

// Get the obj that starts the event

function getElement(evt){

 if (window.event){

  return window.event.srcElement;

 }else{

  return evt.currentTarget;

 }

}

// Get the obj that triggers off the event

function getTargetElement(evt){

 if (window.event){

  return window.event.srcElement;

 }else{

  return evt.target;

 }

}

// For IE only, stops the obj from being selected

function stopSelect(obj){

 if (typeof obj.onselectstart != 'undefined'){

  addEvent(obj,"selectstart",function(){ return false;});

 }

}

/*        Caret Functions         */

// Get the end position of the caret in the object. Note that the obj needs to be in focus first

function getCaretEnd(obj){

 if(typeof obj.selectionEnd != "undefined"){

  return obj.selectionEnd;

 }else if(document.selection&&document.selection.createRange){

  var M=document.selection.createRange();

  try{

   var Lp = M.duplicate();

   Lp.moveToElementText(obj);

  }catch(e){

   var Lp=obj.createTextRange();

  }

  Lp.setEndPoint("EndToEnd",M);

  var rb=Lp.text.length;

  if(rb>obj.value.length){

   return -1;

  }

  return rb;

 }

}

// Get the start position of the caret in the object

function getCaretStart(obj){

 if(typeof obj.selectionStart != "undefined"){

  return obj.selectionStart;

 }else if(document.selection&&document.selection.createRange){

  var M=document.selection.createRange();

  try{

   var Lp = M.duplicate();

   Lp.moveToElementText(obj);

  }catch(e){

   var Lp=obj.createTextRange();

  }

  Lp.setEndPoint("EndToStart",M);

  var rb=Lp.text.length;

  if(rb>obj.value.length){

   return -1;

  }

  return rb;

 }

}

// sets the caret position to l in the object

function setCaret(obj,l){

 obj.focus();

 if (obj.setSelectionRange){

  obj.setSelectionRange(l,l);

 }else if(obj.createTextRange){

  m = obj.createTextRange();  

  m.moveStart('character',l);

  m.collapse();

  m.select();

 }

}

// sets the caret selection from s to e in the object

function setSelection(obj,s,e){

 obj.focus();

 if (obj.setSelectionRange){

  obj.setSelectionRange(s,e);

 }else if(obj.createTextRange){

  m = obj.createTextRange();  

  m.moveStart('character',s);

  m.moveEnd('character',e);

  m.select();

 }

}

/*        Escape function   */

String.prototype.addslashes = function(){

 return this.replace(/(["\\\.\|\[\]\^\*\+\?\$\(\)])/g, '\\$1');

}

String.prototype.trim = function () {

        return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");

};

/* --- Escape --- */

/* Offset position from top of the screen */

function curTop(obj){

 toreturn = 0;

 while(obj){

  toreturn += obj.offsetTop;

  obj = obj.offsetParent;

 }

 return toreturn;

}

function curLeft(obj){

 toreturn = 0;

 while(obj){

  toreturn += obj.offsetLeft;

  obj = obj.offsetParent;

 }

 return toreturn;

}

/* ------ End of Offset function ------- */

/* Types Function */

// is a given input a number?

function isNumber(a) {

        return typeof a == 'number' && isFinite(a);

}

/* Object Functions */

function replaceHTML(obj,text){

 while(el = obj.childNodes[0]){

  obj.removeChild(el);

 };

 obj.appendChild(document.createTextNode(text));

}

</script>