﻿// Elements

function __el (id) {
  return document.getElementById (id);
}

function __el_of (el,tag) {
  return el.getElementsByTagName (tag);
}

function _getX (el) {
  if (el.style && parseInt (el.style.left) && el.style.position == 'absolute') return parseInt (el.style.left);
  var x = 0;
  while (el) {
    x += parseInt (el.offsetLeft) + parseInt (el.clientLeft);
    el = el.offsetParent;
  }
  return x;
}

function _getY (el) {
  if (el.style && parseInt (el.style.top) && el.style.position == 'absolute') return parseInt (el.style.top);
  var y = 0;
  while (el) {
    y += parseInt (el.offsetTop) + parseInt (el.clientTop);
    el = el.offsetParent;
  }
  return y;
}

function _width (obj) {
  if (obj.style && parseInt (obj.style.width)) return parseInt (obj.style.width);
  return obj.offsetWidth;
}

function _height (obj) {
  if (obj.style && parseInt (obj.style.height)) return parseInt (obj.style.height);
  return obj.offsetHeight;
}

function debug (el) {
  var str = '';
  for (k in el) {
    str += k + ' = ' + el[k] + '<br/>';
  }
  __el ('debug_div').innerHTML = str;
}






// Ajax

var Request = null;
var Request_loading_div = null;
var AjaxQueue = new Array ();
var waiting = 0;

function CreateRequest()
{
  if (Request) return Request;

  if (window.XMLHttpRequest) {
    Request = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    try {
      Request = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (CatchException) {
      Request = new ActiveXObject("Msxml2.XMLHTTP");
    }
  }

  if (!Request) {
    alert("Невозможно создать XMLHttpRequest");
  }

    Request_loading_div = document.createElement ('DIV');
    Request_loading_div.style.display = 'none';
    document.body.appendChild (Request_loading_div);
}


function sendQRequest (path,param,result_func) {
  if (waiting == 0) {
    sendRequest (path,param,result_func);
  } else {
    AjaxQueue.push ({path: path,param: param,result_func: result_func});
  }
}

var loaded_xml = {};
function sendRequest (path,param,result_func,from_process) {
  if (waiting == 1 && !from_process) return;

  waiting = 1;
  CreateRequest ();
  Request_loading_div.style.display = 'block';
  Request.my_path = path;
  Request.my_param = param;
  Request.my_func = result_func;

  Request.onreadystatechange = function() {
    if (Request.readyState == 4) {
      loaded_xml[Request.my_path] = Request.responseText;
      if (Request.my_func) { Request.my_func (Request.responseText); }

      if (AjaxQueue.length) {
        var obj = AjaxQueue.shift ();
        sendRequest (obj.path,obj.param,obj.result_func,1);
      } else {
        Request_loading_div.style.display = 'none';
        waiting = 0;
      }
    }
  }

  Request.open('POST','/pages/' + path,true);

  var param_str = 'empty_param_for_request=junk&';
  for (nm in param) {
    param_str += nm + "=" + encodeURIComponent(param[nm]) + "&";
  }


  Request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  Request.setRequestHeader("Content-Length", param_str.length);

  Request.send(param_str);
}

function getResult () {
  eval ("var req_values = " + Request.responseText);
  return req_values;
}



