var utils=(function(){
	
	var d=document.documentElement;
	
	var getPattern=function(theClass){
		
		return new RegExp('(^| )' + theClass + '( |$)');
		
	};
	
	var u={
		
		hasClass:function(node, theClass){
			
			var p=getPattern(theClass);
			return p.test(node.className);
			
		},
		
		addClass:function(node, theClass){
			
			if(! this.hasClass(node, theClass)){
				
				if(node.className==''){
					
					node.className=theClass;
					
				}else{
					
					node.className+=' ' + theClass;
					
				}
				
			}
			
		},
		
		removeClass:function(node, theClass){
			
			var p=getPattern(theClass);
			node.className=node.className.replace(p, '$1');
			node.className=node.className.replace(/ $/, '');
			
		},
		
		replaceClass:function(node, oldClass, newClass){
			
			var p=getPattern(oldClass);
			node.className=node.className.replace(p, '$1' + newClass + '$2');
			
		},
		
		addEvent:function(node, type, listener, useCapture){
			
			node.addEventListener(type, listener, useCapture);
			
		},
		
		removeEvent:function(node, type, listener, useCapture){
			
			node.removeEventListener(type, listener, useCapture);
			
		},
		
		preventDefault:function(e){
			
			e.preventDefault();
			
		},
		
		stopPropagation:function(e){
			
			e.stopPropagation();
			
		},
		
		target:'target',
		
		getWindowInfo:function(){
			
			return {
				
				x:pageXOffset,
				y:pageYOffset,
				width:innerWidth,
				height:innerHeight
				
			};
			
		}
		
	};
	
	if(typeof d.addEventListener == 'undefined' && typeof d.attachEvent != 'undefined'){
		
		u.addEvent=function(node, type, listener){
			
			node.attachEvent('on' + type, listener);
			
		};
		
		u.removeEvent=function(node, type, listener){
			
			node.detachEvent('on' + type, listener);
			
		};
		
		u.preventDefault=function(e){
			
			e.returnValue=false;
			
		};
		
		u.stopPropagation=function(e){
			
			e.cancelBubble=true;
			
		};
		
		u.target='srcElement';
		
		u.getWindowInfo=function(){
			
			return {
				
				x:d.scrollLeft,
				y:d.scrollTop,
				width:d.clientWidth,
				height:d.clientHeight
				
			};
			
		};
		
	}
	
	return u;
	
}());
