
// **************************
// * Версия 2.0             *
// * without ie for canvas  *
// *                        *
// **************************
//window.oncontextmenu = function(){eventStop(arguments[0]); return void 0;};
//document.oncontextmenu = function(){eventStop((arguments[0]||window.event)); return void 0;};
//document.onselect = function(){eventStop((arguments[0]||window.event)); return void 0;};
//window.onselect = function(){eventStop(arguments[0]); return void 0;};

var $ = function(){
	if (arguments[0]) {
		if (typeof(arguments[0])=='string')	this.el=document.getElementById(arguments[0]);
		else this.el = arguments[0];
	}
	this.empty = function(){
		while(this.el.childNodes.length)
		this.el.removeChild(this.el.childNodes[0]);
		return this;
	}
	this.hide = function(){
		this.el.style.display = 'none';
	    return this;
	}
	this.opacity = function(){		var val = (arguments[0]||40);
		this.el.style.opacity = (val/100);
		this.el.style.MozOpacity = (val/100);
		this.el.style.KhtmlOpacity = (val/100);
		this.el.style.filter = "alpha(opacity="+val+")";
		return this;
	}
	this.show = function(){
		this.el.style.display = 'block';
	    return this;
	}
	this.style = function(obj){
		if(obj)	for(var i in obj) this.el.style[i]=obj[i];
		return this;
	}
	this.param = function(obj){
		if(obj)	for(var i in obj) this.el[i]=obj[i];
		return this;
	}
	this.hide_cnt = function(){
		this.el._content_display == 'none';
		var len = this.el.childNodes.length;
		for (var i=0; i<len; i++)
			if (this.el.childNodes[i].nodeType==1) {
				this.el.childNodes[i]._old_display = (this.el.childNodes[i]['style']['display']||'block');
				this.el.childNodes[i]['style']['display'] = 'none';
			}
	    return this;
	}
	this.show_cnt = function(){
		this.el._content_display == 'block';
		var len = this.el.childNodes.length;
		for (var i=0; i<len; i++)
			if (this.el.childNodes[i].nodeType==1)
				this.el.childNodes[i]['style']['display'] = (this.el.childNodes[i]._old_display||'block');
		return this;
	}
	this.drop=function(){
		this.el.parentNode.removeChild(this.el);
		return this;
	}
	this.create = function(name){
        this.el = document.createElement(name);
        if (!arguments[1]) return this;
        var obj=arguments[1];
		for (var i in obj) {			if (i=='style' && typeof(obj[i])!='string')  for (var i in obj.style ) this.el.style[i]=obj.style[i];
			else this.el.setAttribute(i,obj[i]);
		}
		return this;
	}
	this.appendChild = function(obj){       	if (typeof(obj)=='string') obj = document.getElementById(obj);
       	this.el.appendChild(obj);
       	return this;	}
	this.appendTo = function(){       	var o = arguments[0];
       	if (typeof(o)=='string'){       		document.getElementById(o).appendChild(this.el);       	}else o.appendChild(this.el);
       	return this;	}
	this.position = function () {
      var x = 0;
      var y = 0;
      var obj = this.el;
       do{
            x += parseInt(obj.offsetLeft)+parseInt((obj.offsetParent && obj.offsetParent.scrollLeft && !browser.ie)?obj.offsetParent.scrollLeft:0);
            y += parseInt(obj.offsetTop)+parseInt((obj.offsetParent && obj.offsetParent.scrollTop && !browser.ie)?obj.offsetParent.scrollTop:0)
            obj = obj.offsetParent;
      }while(obj)
      return {x:x, y:y};
	}
	this.size = function(){		if (this.el) return {width:parseInt((this.el.clientWidth||this.el.offsetWidth)),
			height:parseInt((this.el.clientHeight||this.el.offsetHeight))};
		else return {width:parseInt(document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientWidth:document.body.clientWidth),
			height:parseInt(document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight)};
	}
	return this;
}

var browser = {
	ie:(function(){return window.navigator.userAgent.toLowerCase().search(/msie/gi) != -1;})(),
	mozila:(function(){return window.navigator.userAgent.toLowerCase().search(/firefox/gi) != -1;})(),
	opera:(function(){return window.navigator.userAgent.toLowerCase().search(/opera/gi) != -1;})(),
	safari:(function(){return window.navigator.userAgent.toLowerCase().search(/safari/gi) != -1;})()
}

function extendClass (_class,func){
	if (!_class)
	{		var __class = function(){};
		for (var i in func) __class.prototype[i]=func[i];
		return new (__class)();
	}
	else
	{		var __class = function(){};
		for (var i in _class) __class.prototype[i]=_class[i];
		for (var i in func) __class.prototype[i]=func[i];
		return new (__class)();
	}
}

var eventStop = function(e){
  	if (!e) return;
  	if (e.preventDefault) {e.preventDefault();} else {e.returnValue = false;}
  	if (e.stopPropagation) {e.stopPropagation();} else {e.cancelBubble = true;}
  	e.stopped = true;
  	return false;
};

var XML = extendClass (null,{
	load_file : function(xmlfile){
		if(document.implementation && document.implementation.createDocument)
	    {   var doc = document.implementation.createDocument("","",null);
	    }
	    else if(window.ActiveXObject)
	    {
	    	var doc = new ActiveXObject ('Microsoft.XMLDOM');
	    }
	    doc.async = false;
	    doc.load(xmlfile);
	    return doc || null;
	},
	load_string : function(xmlstr){
		if(document.implementation && document.implementation.createDocument)
	    {    var parser = new DOMParser();
	         var doc = parser.parseFromString(xmlstr,"text/xml");
	    }
	    else if(window.ActiveXObject)
	    {
	    	var doc = new ActiveXObject ('Microsoft.XMLDOM');
	        doc.async = false;
	        doc.loadXML(xmlstr);
	    }
	    return doc || null;
	},
	xslt : function(xmldoc,xsldoc){
		if(document.implementation && document.implementation.createDocument)
	    {   var proc = new XSLTProcessor();
	        proc.importStylesheet(xsldoc);
	        var xhtmldoc = proc.transformToDocument(xmldoc);
	        var ser = new XMLSerializer();
	        return ser.serializeToString(xhtmldoc);
	    }
	    else if(window.ActiveXObject)
	    {   return xmldoc.transformNode(xsldoc);
	    }
	},
	asXML : function(xmldoc){
		if(document.implementation && document.implementation.createDocument)
	    {   var ser = new XMLSerializer();
	        return ser.serializeToString(xmldoc);
	    }
	    else if(window.ActiveXObject)
	    {   return xmldoc.xml;
	    }
	}
});

function mouseButton(e){
	if(!e.which) return (e.button<2)?'left':((e.button==4)?'middle':'right');
	else return (e.which<2)?'left':((e.which==2)?'middle':'right');
}

function move(o, event,rule)
{
	var _oo = o;
	if (!event) event = window.event;
	var  dy = event.clientY-(rule.move?parseInt(o.style.top):parseInt(o.style.height));
	var  dx = event.clientX-(rule.move?parseInt(o.style.left):parseInt(o.style.width));
	var ex = event.clientX;
	var ey = event.clientY;
	var actionMove = rule.actionMove;
    if (typeof(actionMove)!='function') actionMove =function(obj,point){}
    var actionUp = rule.actionUp;
    if (typeof(actionUp)!='function') actionUp =function(obj){}

	if (document.addEventListener){
	   document.addEventListener('mousemove', moveHandler, true);
	   document.addEventListener('mouseup', upHandler, true);
	 }
	 else{
	   document.attachEvent('onmousemove', moveHandler);
	   document.attachEvent('onmouseup', upHandler);
	 }
	function moveHandler ()
	{
	 	var e = (arguments[0]||window.event);
	  	var y= e.clientY - dy;
	  	var x= e.clientX - dx;
	  actionMove(e,_oo,x,y, ex, ey);
	  e.stopped = true;
	  if (e.stopPropagation) {e.stopPropagation();} else {e.cancelBubble = true;}
	  if (e.preventDefault) {e.preventDefault();} else {e.returnValue = false;}
	}
	function upHandler ()
	{
	 var e = (arguments[0]||window.event);
	 if (document.removeEventListener){
	   document.removeEventListener('mousemove', moveHandler, true);
	   document.removeEventListener('mouseup', upHandler, true);}
	 else{
	   document.detachEvent('onmousemove', moveHandler);
	   document.detachEvent('onmouseup', upHandler);}
     if (e.stopPropagation) {e.stopPropagation();} else {e.cancelBubble = true;}
     if (e.preventDefault) {e.preventDefault();} else {e.returnValue = false;}
     e.stopped = true;
     actionUp(e,_oo);
	}
};

function px(x){ return parseInt(x)+'px';};
function trim(str){ if (typeof str != "string") return str; str = str.replace(/^\s+|\s+$/g, ""); return str;}

