/*
 * Author: Ravneet Singh
 * Email: thecheatah@gmail.com
 * This code can only be used if Ravneet Singh has authorized to do so.
 */

function addToSet(set, element)
  {
  var freeSpot = set.length;
  for(var i = 0; i < set.length; i++)
    {
    if (set[i] == null)
      {
      freeSpot = i;
      break;
      }
    }
  set[freeSpot] = element;
  return freeSpot;
  }

function intToHex(input, hexSize)
  {
  input = parseInt(input);
  var letters = "01234567890ABCDEF";
  var out = letters.substr(input%16, 1);
  while(input > 15)
    {
    input >>= 4;
    out = letters.substr(input%16, 1) + out;
    }
  while (hexSize != null && out.length < hexSize)
    {
    out = out + letters.substr(0, 1);
    }
  return out;
  }

function removeFromSet(set, element)
  {
  for(var i = 0; i < set.length; i++)
    {
    if (set[i] == element)
      {
      set[i] = null;
      return true;
      }
    }
  return false;
  }

function clearChildNodes(parent)
  {
  while(parent.childNodes.length != 0)
    {
    parent.removeChild(parent.childNodes[0]);
    }
  }

function parseHTML(html)
  {

  var div = document.createElement('div');
  document.body.appendChild(div);
  div.innerHTML = "";
  div.innerHTML = html;
  var node = div.removeChild(div.childNodes[0]);

  while (div.childNodes.length != 0)
    {
    div.removeChild(div.childNodes[0]);
    }

  document.body.removeChild(div);
  return node;

  }

function isExplorer()
  {
  if (document.all)
    {
    return true;
    }else
    {
    return false;
    }
  }


function isMozilla()
  {
  if (document.all)
    {
    return false;
    }else
    {
    return true;
    }
  }


function eventBroadcaster()
  {
  this.events = new Array();

  this.clearHooks = function()
    {
    this.events = new Array();
    }

  this.addHook = function(handler)
    {
    var newid = this.events.length;
    this.events[newid] = handler;
    return newid;
    }

  this.broadcast = function()
    {
    for(var i = 0; i < this.events.length; i++)
      {
      if (this.events[i] != null)
        {
        this.events[i].runArr(arguments);
        }
      }
    }

  }

function isArray(a)
  {
  return a.constructor == Array;
  }

function isEqual(st1, st2)
  {
  if (isArray(st1) != isArray(st2))
    {
    return false;
    }

  if (isArray(st1) && isArray(st2))
    {
    for(var i in st1)
      {
      if (isArray(st1[i]) != isArray(st2[i]))
        {
        return false;
        }
      if (isArray(st1[i]) && isArray(st2[i]))
        {
        if (!isEqual(st1[i], st2[i]))
          {
          return false;
          }
        }else
        {
        if (!(st1[i] == st2[i]))
          {
          return false;
          }
        }
      }
    return true;
    }else
    {
    return st1 == st2;
    }
  }

function XMLtoVar(node)
  {
  if (node == null)
    {
    return;
    }

  var type = node.getAttribute('type');

  if (type == "string")
    {
    if (node.childNodes.length == 1)
      {
      return node.childNodes[0].nodeValue;
      }else
      {
      var str = "";
      for(var i = 0; i < node.childNodes.length; i++)
        {
        str = str + node.childNodes[i].nodeValue;
        }
      return str;
      }
    }else if (type == "array")
    {
    var result = new Array();

    for(var i = 0; i < node.childNodes.length; i++)
      {
      result[node.childNodes[i].getAttribute('key')] = XMLtoVar(node.childNodes[i].childNodes[0]);
      }

    return result;
    }

  }

function varToPostExport(variable, base)
  {
  if (variable == null && base == null) {return "";}

  if (base == null)
    {
    base = "input";
    }

  if (variable == null) {return "&"+base+"=";}

  if (!(typeof variable == 'object'))
    {
    return "&"+base+"="+escape(variable);
    }else if(isArray(variable))
    {
    if (variable.length == 0) {return "&"+base+"=";}
    var toReturn = '';
    for(var i = 0; i < variable.length; i++)
      {
      toReturn = toReturn + varToPostExport(variable[i], base+"["+i+"]");
      }
    return toReturn;
    }else
    {
    var toReturn = '';
    for (i in variable)
      {
      toReturn = toReturn + varToPostExport(variable[i], base+"["+i+"]");
      }
    return toReturn;
    }
  }

function removeFromArray(arr, index)
  {
  for(var i = index; i < (arr.length-1); i++)
    {
    arr[i] = arr[i+1];
    }
  arr.pop();
  }

