/* 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));

}