var core = new function()
{
	this.scope = this;

	this.redirect = function( url )
	{
		location.href = url;
	}
	this.addEvent = function( obj, type, fn, capture )
	{
		if (obj.addEventListener)
		{
			obj.addEventListener( type, fn, ( typeof capture!="undefined" ? capture : false ) );
		}
		
		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] );
		}
	}
	this.removeEvent = function( obj, type, fn )
	{
		if (obj.removeEventListener)
			obj.removeEventListener( type, fn, false );
		else if (obj.detachEvent)
		{
			obj.detachEvent( "on"+type, obj[type+fn] );
			obj[type+fn] = null;
			obj["e"+type+fn] = null;
		}
	}
	this.insertAfter = function(el_new, el_target)
	{
		el_parent = el_target.parentNode;
		if(el_target == el_parent.lastChild)
		{
			el_parent.appendChild(el_new);
		}
		else
		{
			el_parent.insertBefore(el_new, el_target.nextSibling);
		}
	}
	this.updateClass = function(action, elem, c1, c2)
	{
		switch (action){
			case 'swap':
			elem.className=!core.updateClass('check',elem,c1) ? elem.className.replace(new RegExp('(^| )'+c2+'($| )'),'$1'+c1+'$2') : elem.className.replace(new RegExp('(^| )'+c1+'($| )'),'$1'+c2+'$2');
			break;
		case 'add':
			if(!core.updateClass('check',elem,c1)){elem.className+=elem.className?' '+c1:c1;}
			break;
		case 'remove':
			var rep=elem.className.match(' '+c1)?' '+c1:c1;
			elem.className=elem.className.replace(rep,'');
			break;
		case 'check':
			return new RegExp('(^| )'+c1+'($| )').test(elem.className)
			break;
		}
	}
	this.cancelEvent = function(e)
	{
		var e = e || window.event;
		
		if(typeof e.cancelBubble != "undefined")
			e.cancelBubble = true; // for IE
		if (typeof e.stopPropagation == 'function')
			e.stopPropagation();

		if(typeof e.returnValue != "undefined")
			e.returnValue = false; // for IE
		if (typeof e.preventDefault == 'function')
			e.preventDefault();
	}
};
