﻿/*
  Copyright (c) 2003,2008 Nesterovsky bros.  All rights reserved.
  
  Utility object.

  You must not remove this notice, or any other, from this software.
*/

function Util() {}

/*
  Creates XMLHttpRequest object.
*/
Util.createXMLHttpRequest = function() 
{
  if (window.XMLHttpRequest)
  {
    // If IE7, Mozilla, Safari, etc: Use native object
    return new XMLHttpRequest();
  }
  else if (window.ActiveXObject)
  {
    // ...otherwise, use the ActiveX control for IE5.x and IE6
    return new ActiveXObject("Microsoft.XMLHTTP"); 
  }
  else
  {
    throw new Error("XMLHttp not supported.");
  }
}

/*
  Sends an http request in asynchronous way.
*/
Util.sendRequest = function(url, callback, data)
{
  var request = Util.createXMLHttpRequest();

  request.open(data ? "POST" : "GET", url, true);
  
  if (data)
  {
    request.setRequestHeader('Content-type','application/x-www-form-urlencoded');
  }
  
  request.onreadystatechange = function() 
  {
    if (request.readyState == 4) 
    {
      callback(request, (request.status == 200) || (request.status == 304));
    }
  }

  request.send(data);
}

/*
  Gets a query (name, value) map.
*/
Util.getQueryParameters = function()
{
  var result = new Object;
  var url = window.location.href;
  var pos = url.indexOf("?");
  
  if (pos != -1)
  {
    var query = url.substr(pos + 1);
    var params = query.split("&");

    for(var i = 0; i < params.length; i++)
    {
      var pair = params[i].split("=");
      
      if (pair.length == 2)
      {
        result[pair[0]] = unescape(pair[1]);
      }
    }
  }
  
  return result;
}

/*
  Runs asynchronous action.
*/
Util.run = function(action, delay)
{
  window.setTimeout(action, delay);
}

/*
  Makes a deep copy from source to a destination object.
*/
Util.deepCopy = function(src, dest)
{
  for(var item in src)
  {
    var value = src[item];

    if (value != null)
    {
      if (typeof(value) == "object")
      {
        var destValue = value instanceof Array ? new Array(value.length) : new Object;
        
        Util.deepCopy(value, destValue);
        value = destValue;    
      }
  
      dest[item] = value;
    }
  }
}

