var userAgent = navigator.userAgent.toLowerCase();

// Figure out what browser is being used
var browser = {
	version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
	safari: /webkit/.test( userAgent ),
	opera: /opera/.test( userAgent ),
	msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
	mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
};

var keyCode = {up:38,down:40,left:37,right:39,esc:27,enter:13,pgUp:33,pgDown:34,home:36,end:35};

DOMReady = (function(ie){
 var d = document;
 return ie ? function(c){
   var n = d.firstChild,
    f = function(){
     try{
      c(n.doScroll('left'))
     }catch(e){
      setTimeout(f, 10)
     }
    }; f()
  } : 
  /webkit|safari|khtml/i.test(navigator.userAgent) ? function(c){
   var f = function(){
     /loaded|complete/.test(d.readyState) ? c() : setTimeout(f, 10)
    }; f()
  } : 
  function(c){
   d.addEventListener("DOMContentLoaded", c, false);
  }
})(/*@cc_on 1@*/);

function DOM(id){
	var element=null;
	if (!id) element=(browser.mozilla)?window:document;
	else if (typeof(id)=='object') element=id;
	else element=document.getElementById(id);
	
	if (!element) return null;
	element.listen= function(name, f, useCapture){
		var observer= function(e){
			e=op.event(e, name);
			if (!f(e)) e.stop();
		}
		if (name=='scroll'){
			//it's fucken scroll event:
			if ( element.addEventListener ){
				element.addEventListener( (browser.mozilla ? 'DOMMouseScroll' : 'mousewheel'), observer, false);
			}
			else{
				element.onmousewheel = observer;
			}
		}
		else {
			if (element.addEventListener) {
			  element.addEventListener(name, observer, useCapture);
			} else if (element.attachEvent) {
			  element.attachEvent('on' + name, observer);
			}
		}
	};
	//Поиск контейнера по тегу:
	element.parent= function(tagName){
		var n=element;
		while (n.tagName!=tagName){
			n= n.parentNode;
			if (!n) return null;
		}
		return n;
	}
	element.first= function(tagName, className){
		var list= element.getElementsByTagName(tagName);
		if (className){
			var re= new RegExp('\\b'+className+'\\b');
			for (i=0; i<list.length; i++) if (re.test(list[i].className)) return DOM(list[i]);
		}
		else if(list[0]){
			 DOM(list[0]);			
		}
		else return null;
	}
	
	element.hide= function(){
		element.style.display='none';
	}
	element.show= function(){
		element.style.display='block';
	}
	element.attachClass= function(className){
		var re= new RegExp('\\b'+className+'\\b');
		if (!re.test(element.className)){
			element.className+=' '+className;			
		}
	}
	element.detachClass= function(className){
		var re= new RegExp('\\b'+className+'\\b');	
		element.className=element.className.replace(re, '');
	}
	return element;
}

var op= {
	element: DOM,
	event: function(e, name){
		if (e= (e)?e:window.event){
			//Остановить событие:
			e.stop= function(){
				if (!e.preventDefault) {
					e.cancelBubble = true;
					e.returnValue = false;
				}
				else {
					e.preventDefault();
				}
			};
			
			if (browser.msie){
			
				e.pageX=e.clientX;
				e.pageY=e.clientY;				
				if (document.body && typeof document.body.scrollTop != 'undefined') {
					e.pageX += document.body.scrollLeft;
					e.pageY += document.body.scrollTop;
				}
				if (document.body.parentNode && typeof document.body.parentNode.scrollTop != 'undefined') {
					e.pageX += document.body.parentNode.scrollLeft;
					e.pageY += document.body.parentNode.scrollTop;
				}
			}
			if (name=='scroll'){
				if (e&&e.detail) e.scrollDelta = -e.detail;
				else if (window.event.wheelDelta) e.scrollDelta = window.event.wheelDelta; 
			}
			//Целевой элемент события:
			return e;
		}		
		else return null;
	}
};

