/*
    // dimaninc general js functions

    // 2006/12/15
        * check_correct_email() added

    // 2006/03/28
        * getHTTPRequestObject() added
        * diXMLRequest.get() and .post() added

    // 2006/02/28
        * standard escape() rewritten

    // 2006/02/20
        * is_ie added

    // 2006/02/11
        * getLeft(), getTop() added
        * _px() improved

    // 2006/02/08
        * _add_event() added
        * _px() added

    // 2006/02/06
        * the first version of this shit
*/

var is_ie = (document.all) ? true : false;

var agt = navigator.userAgent.toLowerCase();
var is_major = parseInt(navigator.appVersion);
var is_minor = parseFloat(navigator.appVersion);
var is_gecko = (agt.indexOf('gecko') != -1);
var is_ie4up = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1) && (is_major >= 4));
var is_opera = (agt.indexOf("opera") != -1);

var ie_ver = getInternetExplorerVersion();
var is_ie8 = ie_ver >= 8.0 && ie_ver <= 9.0 ? true : false;

if (is_ie4up)
{
  document.execCommand("BackgroundImageCache",false,true);
}

function getInternetExplorerVersion()
{
  var rv = -1; // Return value assumes failure.
  if (navigator.appName == 'Microsoft Internet Explorer')
  {
    var ua = navigator.userAgent;
    var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat(RegExp.$1);
  }

  return rv;
}

function isEmpty(str)
{
  if (str == null || str == "" || isNaN(str))
    return true;
  else
    return false;
}

function _ge(eid)
{
  return document.getElementById(eid);
}

function _ge2(win, eid)
{
  return win && win.document ? win.document.getElementById(eid) : false;
}

function _add_event(elem, evname, func)
{
  if (elem.attachEvent)
  {
    //elem.attachEvent("on" + evname, func);
    //alert("elem.on"+evname+"=func;");
    eval("elem.on"+evname+"=func;");
  }
  else
    elem.addEventListener(evname, func, false); //true
}

function delEvent(elem, evname, func)
{
  if (elem.attachEvent)
  {
    eval("elem.on"+evname+"=null;");
  }
  else
    elem.removeEventListener(evname, func, false); //true
}

function _px(px)
{
  var x = parseInt(px, 10);

  if (isNaN(x)) x = 0;

  return x;
}

function getLeft(o)
{
  var x = o.offsetLeft;
  while (o = o.offsetParent) x += o.offsetLeft;
  return x;
}

function getLeft2(o)
{
  var x = o.offsetLeft;
  if (o = o.offsetParent) x += o.offsetLeft;
  return x;
}

function getTop(o)
{
  var y = o.offsetTop;
  while (o = o.offsetParent) y += o.offsetTop;
  return y;
}

function getTop2(o)
{
  var y = o.offsetTop;
  if (o = o.offsetParent) y += o.offsetTop;
  return y;
}

function getWidth(o)
{
  var x = o.offsetWidth;
  //while (o = o.offsetParent) x += o.offsetLeft;
  return x;
}

/*
function getTop(o) {
   var y = o.offsetTop;
   while (o.offsetParent)
    {
      y += o.offsetTop;
      o = o.offsetParent;
    }
   return y
}
*/

function _get_left(o)
{
  var x = o.offsetLeft;
  while (o = o.offsetParent) x += o.offsetLeft;
  return x;
}

function _get_top(o)
{
  var y = o.offsetTop;
  while (o = o.offsetParent) y += o.offsetTop;
  return y;
}

// escape function
var escape_trans = [];
for (var i = 0x410; i <= 0x44F; i++) escape_trans[i] = i - 0x350; // А-Яа-я
escape_trans[0x401] = 0xA8;    // Ё
escape_trans[0x451] = 0xB8;    // ё

var escapeOrig = window.escape;

window.escape = function(str)
{
  var ret = [];
  var str1 = str.toString();

  for (var i = 0; i < str1.length; i++)
  {
    var n = str1.charCodeAt(i);
    if (typeof escape_trans[n] != 'undefined') n = escape_trans[n];
    if (n <= 0xFF) ret.push(n);
  }
  return escapeOrig(String.fromCharCode.apply(null, ret)).replace('+','%2B');
}

function getHTTPRequestObject()
{
  var xmlHttpRequest = false;

  if (typeof ActiveXObject != 'undefined')
  {
    try {
      xmlHttpRequest = new ActiveXObject('Microsoft.XMLHTTP');
    } catch(e) {}

    if (!xmlHttpRequest) try {
      xmlHttpRequest = new ActiveXObject('Msxml2.XMLHTTP');
    } catch(e) {}
  }
  else if (typeof XMLHttpRequest != 'undefined')
  {
    xmlHttpRequest = new XMLHttpRequest();
  } else
  {
    xmlHttpRequest = false;
  }

  return xmlHttpRequest;
}

var diXMLRequest =
{
  get : function (url, callback)
  {
    var _getter = getHTTPRequestObject();
    _getter.open("GET", url, true);

    _getter.onreadystatechange = function() {
      if (_getter.readyState == 4)
      {
        callback(_getter.responseXML);
      }
    }

    _getter.send(null)
  },

  post : function (url, form, callback)
  {
    var _poster = getHTTPRequestObject();

    _poster.open("POST", url, true);
    _poster.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    _poster.setRequestHeader('Connection', 'close');
    _poster.send(form);

    _poster.onreadystatechange = function() {
      if (_poster.readyState == 4)
      {
        callback(_poster.responseXML);
      }
    };

    //if (!is_ie) _poster.send(null);
  }
}

function MM_preloadImages() {
 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
   var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
   if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}}

var __correct_latin_symbols_regexp = new RegExp("^[a-z0-9-_.]+$", "i");
var __correct_digits_regexp = new RegExp("^[0-9.,]+$", "i");
var __correct_email_regexp = new RegExp('^[0-9a-z]([-_.]*[0-9a-z])*@[0-9a-z]([-._]*[0-9a-z])*[.]{1}[a-z]{2,4}$', 'i');

function check_correct_latin_symbols(s)
{
  return __correct_latin_symbols_regexp.test(s);
}

function check_correct_digits(s)
{
  return __correct_digits_regexp.test(s);
}

function check_correct_email(s)
{
  return __correct_email_regexp.test(s);
}

function mysprintf(num, afterdot)
{
  var d = Math.pow(10, afterdot);
  num = Math.round(num * d) / d;

  var a = num.toString().split('.');
  if (!a[1]) a[1] = '';

  while (a[1].length < afterdot) a[1] += '0';

  return a[0]+'.'+a[1];
}

function str_cut_end(s, max_len)
{
  var trailer = arguments[2] || '...';

  if (s.length > max_len)
    s = s.substr(0, max_len - trailer.length)+trailer;

  return s;
}

function in_array(search_term, ar)
{
  var i = ar.length;

  if (i > 0)
  {
     do
     {
       if (ar[i] == search_term)
       {
         return true;
       }
     } while (i--);
  }

  return false;
}

function get_screen_dimensions(what)
{
  var viewportwidth;
  var viewportheight;

  if (typeof window.innerWidth != 'undefined')
  {
    viewportwidth = window.innerWidth;
    viewportheight = window.innerHeight;
  }
  else if (typeof document.documentElement != 'undefined'
           && typeof document.documentElement.clientWidth !=
           'undefined' && document.documentElement.clientWidth != 0)
  {
    viewportwidth = document.documentElement.clientWidth;
    viewportheight = document.documentElement.clientHeight;
  }
  else
  {
    viewportwidth = document.getElementsByTagName('body')[0].clientWidth;
    viewportheight = document.getElementsByTagName('body')[0].clientHeight;
  }

  switch (what)
  {
    case 'x':
    case 'w':
      return viewportwidth;

    case 'y':
    case 'h':
      return viewportheight;

    default:
      return [viewportwidth,viewportheight];
  }
}

function set_as_homepage(a)
{
  var homepage = window.location.href;

  if (a.style.behavior)
  {
    a.setHomePage(homepage);
  }

  return false;
}

function add_to_bookmarks(a)
{
  var url = window.document.location;
  var title = window.document.title;

  if (is_ie4up)
    window.external.AddFavorite(url, title);
  else if (is_opera)
  {
    a.href = url;
    a.rel = "sidebar";
    //a.title = url+','+title;
    a.title = title;
    return true;
  }
  else if (is_gecko)
    window.sidebar.addPanel(title, url, '');
  else
    alert('Нажмите CTRL-D, чтобы добавить страницу в закладки.');

  return false;
}

function lead0(x)
{
  x += '';

  return x.length == 1 ? '0'+x : x;
}

function get_xml_text(e)
{
  var xxx = e.firstChild;

  if (typeof xxx == 'undefined' || !xxx)
    return false;

  if (typeof xxx.nodeValue != 'undefined' && xxx.nodeValue)
  {
    return xxx.nodeValue;
  }
  else if (typeof xxx.textContent != 'undefined' && xxx.textContent)
  {
    return xxx.textContent;
  }

  return '';
}

function di_xml2array(r)
{
  var e = r.firstChild;
  var ar = [];

  do
  {
    ar[e.nodeName] = get_xml_text(e);
  }
  while (e = e.nextSibling);

  return ar;
}

// type == false => all types
// id_mask - string/regexp
function _ge_inputs(/*type = false, parent = document, id_mask = false, checked_only = false*/)
{
  var type = typeof arguments[0] != 'undefined' && arguments[0] ? arguments[0] : false;
  var parent = typeof arguments[1] != 'undefined' && arguments[1] ? arguments[1] : document;
  var id_mask = typeof arguments[2] != 'undefined' && arguments[2] ? arguments[2] : false;
  var checked_only = typeof arguments[3] != 'undefined' && arguments[3] ? arguments[3] : false;
  var _input = parent.getElementsByTagName('input');
  var ar = [];

  for (var i = 0 ; i < _input.length; i++)
  {
    if (id_mask)
    {
      if (typeof id_mask == 'object' && !id_mask.test(_input[i].id))
        continue;
      else if (typeof id_mask == 'string' && _input[i].id.substr(0, id_mask.length) != id_mask)
        continue;
    }

    if ((!type || (type && _input[i].type == type)) && (!checked_only || (checked_only && _input[i].checked)))
      ar.push(_input[i]);
  }

  return ar;
}

function divide3dig(s, divider)
{
  if (typeof divider == 'undefined') var divider = ',';

  s = s.toString();

  var x = s.indexOf('.');
  var s2 = x != -1 ? s.substr(x) : '';
  s = x != -1 ? s.substr(0, x) : s;

  var ss = '';
  var start = s.length - 3;
  var j = Math.ceil(s.length / 3);
  var len;

  for (var i = 0; i < j; i++)
  {
    len = 3;

    if (start < 0)
    {
      len += start;
      start = 0;
    }

    ss = s.substr(start, len)+divider+ss;

    start -= 3;
  }

  ss = ss.substr(0, ss.length - 1);

  return ss+s2;
}

function isleapyear(year)
{
  return year % 4 == 0 && year % 100 != 0 || year % 400 == 0 ? true : false;
}

function get_wd(date_obj)
{
  var x = date_obj.getDay();
  if (x == 0) x = 7;

  return x;
}

function get_yday(date_obj)
{
  return date_obj && typeof date_obj == 'object' ? Math.floor((date_obj - (new Date(date_obj.getFullYear(), 0, 1))) / 86400000) : 0;
}

function get_big_yday(y, yday)
{
  if (typeof yday == 'undefined')
  {
    if (!y || typeof y != 'object')
      return 0;

    var yday = get_yday(y);
    y = y.getFullYear();
  }

  yday += '';

  while (yday.length < 3)
    yday = '0'+yday;

  return (y+''+yday)*1;
}

function get_time(date_obj)
{
  return date_obj && typeof date_obj == 'object' ? Math.round(date_obj.getTime() / 1000) : 0;
}

