function createRequest()
{
  var req = false;
  if(window.XMLHttpRequest) {
    try {
      req = new XMLHttpRequest();
    } catch(e) {
      req = false;
    }
  }
  else if(window.ActiveXObject)
  {
    try {
      req = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      try {
        req = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(e) {
        req = false;
      }
    }
  }
  return req;
}

function createXMLDocument()
{
   var doc;
   if (window.ActiveXObject)
   {
     doc=new ActiveXObject("Microsoft.XMLDOM");
   }
   else 
   {
      doc=document.implementation.createDocument("","",null);
   }
   return doc;
}

function XMLDocument()
{
   this.XMLDocument = createXMLDocument();
   this.description = 'XMLDocument';
   this.documentElement;
   this.loadXML = function(text)
   {
      if (window.ActiveXObject)
      {
        this.XMLDocument.loadXML(text);
        this.documentElement = this.XMLDocument.documentElement;
      }
      else
      {
         var parser=new DOMParser();
         this.XMLDocument=parser.parseFromString(text,"text/xml");
         this.documentElement = this.XMLDocument.documentElement;
      }
   }
   this.load = function(url,async,callback)
   {
      this.XMLDocument.async = async;
      if (window.ActiveXObject)
      {
//         this.XMLDocument.async = async;
         this.XMLDocument.load(url);
	 if(async)this.XMLDocument.onreadystatechange = callback ;
      }
      else
      {
         this.XMLDocument.load(url);
         if(async)this.XMLDocument.onload = callback;
      }
   }
}

function e(id)
{
   return document.getElementById(id);
}

function addScript(url,onload,onerror)
{
   var script = document.createElement('script');
   script.setAttribute("src",url);
   script.setAttribute("onload",onload);
   script.setAttribute("onerror",onerror);
   document.body.appendChild(script);
//   script.src = url;
   return script;
}

function D(d,l) {
    if (l == null) l = 1;
    var s = '';
    if (typeof(d) == "object") {
        s += typeof(d) + " {\n";
        for (var k in d) {
            for (var i=0; i<l; i++) s += "  ";
            s += k+": " +d[k];
        }
        for (var i=0; i<l-1; i++) s += "  ";
        s += "}\n"
    } else {
        s += "" + d + "\n";
    }
    return s;
}


function newClass(parent, prop) {
  // Dynamically create class constructor.
  var clazz = function() {
    // Stupid JS need exactly one "operator new" calling for parent
    // constructor just after class definition.
    if (clazz.preparing) return delete(clazz.preparing);
    // Call custom constructor.
    if (clazz.constr) {
      this.constructor = clazz; // we need it!
      clazz.constr.apply(this, arguments);
    }
  }
  clazz.prototype = {}; // no prototype by default
  if (parent) {
    parent.preparing = true;
    clazz.prototype = new parent;
    clazz.prototype.constructor = parent;
    clazz.constr = parent; // BY DEFAULT - parent constructor
  }
  if (prop) {
    var cname = "constructor";
    for (var k in prop) {
      if (k != cname) clazz.prototype[k] = prop[k];
    }
    if (prop[cname] && prop[cname] != Object)
      clazz.constr = prop[cname];
  }
  return clazz;
}

function date2str(date)
{
   if(!date){return;}
   var year    = date.getYear();
   var month   = addChar(date.getMonth()+1);
   var day     = addChar(date.getDate());
   var hours   = addChar(date.getHours());
   var minutes = addChar(date.getMinutes());
   var seconds = addChar(date.getSeconds());

   return day+'.'+month+'.'+year+' '+hours+':'+minutes+':'+seconds;
}
function date2strFullYear(date)
{
   if(!date){return;}
   var year    = date.getFullYear();
   var month   = addChar(date.getMonth()+1);
   var day     = addChar(date.getDate());
   var hours   = addChar(date.getHours());
   var minutes = addChar(date.getMinutes());
   var seconds = addChar(date.getSeconds());

   return day+'.'+month+'.'+year+' '+hours+':'+minutes+':'+seconds;
}
function str2date(string)
{
   var date = string.split(' ')[0];
   var time = string.split(' ')[1];

   var year  = date.split('.')[2];
   var month = date.split('.')[1];
   var day   = date.split('.')[0];

   var hours   = time.split(':')[0];
   var minutes = time.split(':')[1];
   var seconds = time.split(':')[2];;

   date = new Date(Number(year),Number(month)-1,Number(day),Number(hours),Number(minutes),Number(seconds));

   return date;
}

function date2string(date)
{
   if(!date){return;}
   if(typeof(date)=='string'){return date;}
   var year    = date.getFullYear();
   var month   = addChar(date.getMonth()+1);
   var day     = addChar(date.getDate());
   var hours   = addChar(date.getHours());
   var minutes = addChar(date.getMinutes());
   var seconds = addChar(date.getSeconds());

   return year+'-'+month+'-'+day+' '+hours+':'+minutes+':'+seconds;
}

function string2date(string)
{
   var date = string.split(' ')[0];
   var time = string.split(' ')[1];

   var year  = date.split('-')[0];
   var month = date.split('-')[1];
   var day   = date.split('-')[2];

   var hours   = time.split(':')[0];
   var minutes = time.split(':')[1];
   var seconds = time.split(':')[2];;

   date = new Date(Number(year),Number(month)-1,Number(day),Number(hours),Number(minutes),Number(seconds));

   return date;
}
 

function addChar(s)
{
   s = s + '';
   if( s.length < 2 ){ s = '0'+s; }
   return s;
}

function addTime(date,minutes)
{
   var d = new Date();
   d.setTime(date.getTime());
   minutes = Number(minutes) * 60 * 1000;
   d.setTime(d.getTime() + minutes);
   return d;
}

function _addTime(date)
{
   var year    = date.getYear();
   var month   = date.getMonth();
   var day     = date.getDate();
   var hours   = date.getHours();
   var minutes = date.getMinutes();
   var seconds = date.getSeconds();

   minutes = minutes + 2;
   hours   = hours + 0;

   date = new Date(year,month,day,hours,minutes,seconds);
   return date;
}

function getBackTime(date)
{
   var year  = date.getYear();
   var month = date.getMonth();
   var day   = date.getDate();
   date = new Date(year,month,day,0,0,0);
   return date;
}


function getTimezone()
{
  var d, s;
  d = new Date();
  s = d.getTimezoneOffset()/60*-1;
  return(s);
}


var isFF=0;
if(navigator.appName=='Netscape'){isFF=1;}

function VEvent()
{
  this.events = new Array;
  this.addEvent = function(event,handler)
  {
     if(!this.events[event])
     {
        this.events[event] = new Array;
     }
     this.events[event][this.events[event].length] = handler;
  }
  this.dispatchEvent = function(event,param)
  {
     if(this.events[event])
     {
        for(var i = 0; i< this.events[event].length; i++) 
        {
           if(typeof(this.events[event][i]) == 'function')
           {
              this.events[event][i](param);
           }
        }
     }
  }
}


 function dateStr(date, r){
 if(!date){return;}
   var year    = date.getFullYear();
   var month   = addChar(date.getMonth()+1);
   var day     = addChar(date.getDate()-r);
   return day+'.'+month+'.'+year;
}

