function createRequest(){
  try{
    return new XMLHttpRequest();
  } catch(e) {
    return new ActiveXObject("Msxml2.XMLHTTP");
  }//try
}//createRequest

function addEvent(element,event,handler){
  if(element.addEventListener)
    element.addEventListener(event,handler,false);
  else if(element.attachEvent)
    element.attachEvent('on'+event,handler);
  else
    throw 'Can\'t add event';
}//addEvent

function removeEvent(element,event,handler){
  if(element.removeEventListener)
    element.removeEventListener(event,handler,false);
  else if(element.detachEvent)
    element.detachEvent('on'+event,handler);
  else
    throw 'Can\'t remove event';
}//removeEvent

function cancelEvent(e){
  if(e && e.stopPropagation)
    e.stopPropagation();
  else if(window.event)
    window.event.cancelBubble=true;
}//cancelEvent

function currentTarget(e){
  if(e.currentTarget)
    return e.currentTarget;
  return event.srcElement;
}//currentTarget

function getKeyCode(e){
  if(e && e.keyCode!=undefined)
    return e.keyCode;
  if(e && e.which!=undefined)
    return e.which;
  if(window.event && window.event.charCode!=undefined)
    return window.event.charCode;
  if(window.event && window.event.keyCode!=undefined)
    return window.event.keyCode;
  return null;
}//getKeyCode

function hasAttribute(element,attribute){
  if(element.hasAttribute)
    return element.hasAttribute(attribute);
  else
    return (element.getAttribute(attribute)!=null);
}//hasAttribute

function elLeft(el){
  result=0;
  while(el && el.offsetParent != document.body){
    result+=el.offsetLeft;
    el=el.offsetParent;
  }//while
  return result;
}//elLeft

function elTop(el){
  result=0;
  while(el){
    result+=el.offsetTop;
    el=el.offsetParent;
  }//while
  return result;
}//elTop

function scrollToElement(el, before) {
  var offset = elTop(el);
  if (!before)
    before = 0;
  if (offset > document.body.parentNode.scrollTop) {
    document.body.parentNode.scrollTop = offset - before;
  }//if
}//scrollToElement

function indexOf(object,array){
  for(var i=0;i<array.length;i++)
    if(array[i]==object)
      return i;
  return -1;
}//indexOf

function hasClass(el,value){
  var class_re=new RegExp('(^|\\s)('+value+')($|\\s)');
  match=el.className.match(class_re);
  if(match)
    return match[2];
  else
    return null;
}//hasClass

function addClass(el,value){
  if(!hasClass(el,value))
    el.className+=' '+value;
}//addClass

function removeClass(el,value){
  var class_re=new RegExp('(^|\\s)'+value+'($|\\s)','g');
  el.className=el.className.replace(class_re,'$2');
}//removeClass

function getElementsByClass(value,scope,tag_name) {
	if(!scope)
		scope=document;
	if(!tag_name)
		tag_name='*';
	var els = scope.getElementsByTagName(tag_name);
  values=value.split(' ');
  class_res=[];
  for(var i=0;i<values.length;i++)
    class_res[class_res.length]=new RegExp('(^|\\s)'+values[i]+'($|\\s)');
  result=[];
  for(var i=0;i<els.length;i++) {
    var found=true;
    for(var j=0;j<class_res.length;j++)
      if(!els[i].className.match(class_res[j])){
        found=false;
        break;
      }//if
    if(found)
      result[result.length]=els[i];
  }//for
	return result;
}//getElementsByClass

function imgToggle(img,block){
  if(!block.offsetHeight){
    removeClass(block,'hidden');
    block.style.display='';
    if(img)
      img.src=style_url+'grip-open.png';
  } else {
    block.style.display='none';
    if(img)
      img.src=style_url+'grip-closed.png';
  }//if
}//toggle

function commentFormToggle(form, scroll){
  if (scroll == undefined)
    scroll = true;
  imgToggle(null, form);
  if (form.offsetHeight) {
    focusForm(form);
    if (scroll)
      scrollToElement(form);
  }//if
  return false;
}//commentFormToggle

function focusForm(form) {
  for (var i = 0; i < form.elements.length; i++) {
    if ((form.elements[i].nodeName == 'INPUT' && form.elements[i].type == 'text') ||
        form.elements[i].nodeName == 'TEXTAREA') {
      form.elements[i].focus();
      return;
    }//if
  }//for
}//focusForm

function setDisableOnSubmit(form){
  addEvent(form,'submit',function(e){
    var form=currentTarget(e);
    for(var i=0;i<form.elements.length;i++)
      if(form.elements[i].type=='submit'){
        form.elements[i].disabled=true;
        addClass(form.elements[i],'disabled');
      }//if
  });
}//setDisableOnSubmit

addClass(document.body,'js')
addEvent(window,'load',function(){
  var forms=document.getElementsByTagName('FORM');
  for(var i=0;i<forms.length;i++)
    if(forms[i].method=='post')
      setDisableOnSubmit(forms[i]);
});
