function addEvent(element,type,handler){
 if(element.addEventListener){
  element.addEventListener(type,handler,false);
 }
 else{
  if(!handler.$$guid)
   handler.$$guid=addEvent.guid++;if(!element.events)
  element.events={};
  var handlers=element.events[type];
  if(!handlers){
   handlers=element.events[type]={};
   if(element["on"+type]){
    handlers[0]=element["on"+type];
   }
  }
  handlers[handler.$$guid]=handler;
  element["on"+type]=handleEvent;
 }
};

addEvent.guid=1;

function removeEvent(element,type,handler){
 if(element.removeEventListener){
  element.removeEventListener(type,handler,false);
 }
 else{
  if(element.events&&element.events[type]){
   delete element.events[type][handler.$$guid];
  }
 }
};

function handleEvent(event){
 var returnValue=true;
 event=event||fixEvent(((this.ownerDocument||this.document||this).parentWindow||window).event);
 var handlers=this.events[event.type];
 for(var i in handlers){
  this.$$handleEvent=handlers[i];
  if(this.$$handleEvent(event)===false){
   returnValue=false;
  }
 }
 return returnValue;
};

function fixEvent(event){
 event.preventDefault=fixEvent.preventDefault;
 event.stopPropagation=fixEvent.stopPropagation;return event;
};

fixEvent.preventDefault=function(){this.returnValue=false;};
fixEvent.stopPropagation=function(){this.cancelBubble=true;};

function $(id){
 return document.getElementById(id);
 
};

function cancelEvent(ev){
 ev=(ev)?ev:window.event;
 (ev.stopPropagation)?ev.stopPropagation():ev.cancelBubble=true;
 (ev.preventDefault)?ev.preventDefault():ev.returnValue=false;
 return false;
}


function createRequest() {
 return req;
}

function trim(str) {
 return str.replace(/(^\s+)|(\s+$)/g,'');
}

function px(val) {
 return val+'px';
}


function clearChilds(obj) {
 while(obj.firstChild) {
  obj.removeChild(obj.firstChild);
 }
}

function hideSelects() {
 var list=document.body.getElementsByTagName('SELECT');
 for(var i=0;i<list.length;i++) {
  list[i].style.visibility='hidden';
 }
}

function showSelects() {
 var list=document.body.getElementsByTagName('SELECT');
 for(var i=0;i<list.length;i++) {
  list[i].style.visibility='visible';
 }
}

function Request() {

 var req;
 var reqTimeout;
 var callback;
 

 if(window.XMLHttpRequest) {
  try {
   req=new XMLHttpRequest();
  } catch(e) {}
 } else if(window.ActiveXObject) {
  try {
   req=new ActiveXObject('Msxml2.XMLHTTP');
  } catch(e) {
   try{
    teq=new ActiveXObject('Microsoft.XMLHTTP');
   } catch(e) {}
  }
 }
 
 function loadResponse() {
  if(req.readyState==4) {
   if(req.status==200) {
    clearTimeout(reqTimeout);
    if(callback) {callback(req.responseText);}
   }
   else {
    clearTimeout(reqTimeout);
   } 
  }
 }

 this.getResponse=function() {
 	return req.responseText;
 }

 
 this.sendPost=function(uri,func,data) {
  req.open('POST',uri,true);
  req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  req.setRequestHeader('Content-Length', data.length);
  req.setRequestHeader('Connection', 'close');  
  callback=func;
  req.onreadystatechange=loadResponse;
  reqTimeout=setTimeout('req.abort();',30000);
  req.send(data);
//  return req.responseText;
 }
 
 this.sendGet=function(uri,func) {
  req.open('GET',uri,true);
  callback=func;
  req.onreadystatechange=loadResponse;
  reqTimeout=setTimeout('req.abort();',30000);
  req.send(null);
 }
 
 this.sendForm=function(form,func) {
  var post='', first=true;
  for(var i=0;i<form.elements.length;i++) {
   if(form.elements[i].name!='' && form.elements[i].disabled==false) {  
    if(first) {
      first=false;
     }
     else {
      post+='&';
     }
     post+=form.elements[i].name+'=';
     if(form.elements[i].selectedIndex) {
      post+=encodeURIComponent(form.elements[i].options[form.elements[i].selectedIndex].value);
     }
     else {
      post+=encodeURIComponent(form.elements[i].value);
     }    
   }
  }
  this.sendPost(form.action,func,post);
 }

}

function getOpacityProperty() {
  if (typeof document.body.style.opacity == 'string') // CSS3 compliant (Moz 1.7+, Safari 1.2+, Opera 9)
    return 'opacity';
  else if (typeof document.body.style.MozOpacity == 'string') // Mozilla 1.6 и младше, Firefox 0.8 
    return 'MozOpacity';
  else if (typeof document.body.style.KhtmlOpacity == 'string') // Konqueror 3.1, Safari 1.1
    return 'KhtmlOpacity';
  else if (document.body.filters && navigator.appVersion.match(/MSIE ([\d.]+);/)[1]>=5.5) // Internet Exploder 5.5+
    return 'filter';
  return false; //нет прозрачности
}

function setElementOpacity(elem, nOpacity) {
 
 var opacityProp = getOpacityProperty();

 if (!elem || !opacityProp) return; // Если не существует элемент с указанным id или браузер не поддерживает ни один из известных функции способов управления прозрачностью
  
 if (opacityProp=="filter") {  // Internet Exploder 5.5+
  nOpacity *= 100;
  // Если уже установлена прозрачность, то меняем её через коллекцию filters, иначе добавляем прозрачность через style.filter
  var oAlpha = elem.filters['DXImageTransform.Microsoft.alpha'] || elem.filters.alpha;
  if(oAlpha) {
   oAlpha.opacity = nOpacity;
  }
  else {
   elem.style.filter += "progid:DXImageTransform.Microsoft.Alpha(opacity="+nOpacity+")"; // Для того чтобы не затереть другие фильтры используем "+="
  }   
 }
 else {// Другие браузеры
  elem.style[opacityProp] = nOpacity;
 }
 
}

function getStyle(element,sname) {
 var item=getComputedStyle(element,'');
 return item.getPropertyValue(sname);
}

if(!window.getComputedStyle) {
 window.getComputedStyle = function(el, pseudo) {
  this.el = el;
  this.getPropertyValue = function(prop) {
   var re = /(\-([a-z]){1})/g;
   if (prop == 'float') prop = 'styleFloat';
   if (re.test(prop)) {
    prop = prop.replace(re, function(){return arguments[2].toUpperCase();});
   }
   return el.currentStyle[prop] ? el.currentStyle[prop] : null;
  }
  return this;
 }
}


var isIE=(/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent));

var req=new Request();

