if (typeof [].push == 'undefined')
{
  Array.prototype.push=function(i)
  {
  this[this.length]=i
  }
}

if (typeof [].splice == 'undefined')
{
  Array.prototype.splice=function(i,k)
  {
  for (var z=i; z<this.length-k; z++)
    this[z] = this[z+k];
  this.length = this.length - k;
  }
}

if (typeof document.createElementNS == 'function')
{
  document.createElement = function(tagName)
  {
    return this.createElementNS('http://www.w3.org/1999/xhtml', tagName);
  }
}

function openURLInOpener(url)
{
  if (self.opener && !self.opener.closed)
  self.opener.location=url;
  else
  window.location=url;
}

function hideClass(el,classToHide)
{
  var tags = document.getElementsByTagName(el);
  for (var i=0; i<tags.length; i++)
  if (tags[i].className == classToHide)
    tags[i].style.display = 'none';
}

function storeCaret(element) 
{
  if (typeof(document.selection) != 'undefined' && typeof(document.selection.createRange) != 'undefined')
  element.caretPos=document.selection.createRange().duplicate();
}

function insertText(element,text) 
{ 
  if (element && typeof(element.caretPos) != 'undefined') 
  element.caretPos.text=text;
  else if (element && element.selectionStart+1 && element.selectionEnd+1 && navigator.productSub >= 20030312)
  element.value=element.value.substring(0,element.selectionStart)+text+element.value.substring(element.selectionEnd,element.value.length); 
  else if (element) 
  element.value+=text; 
}

function insertUserRef(userid,username)
{
  var box = document.getElementById("messageComposer");
  insertText(box,'[[xpointUser'+userid+' '+username+']]');
  box.focus();
}

function rateMessageEx(sel,id,orig)
{
  var value = parseInt(sel.options[sel.selectedIndex].text);
  if (isNaN(value))
    value = 0;

  if (typeof sel.originalValue != 'undefined')
    orig = sel.originalValue;

  var onresult = function(params, result) {
    if (typeof result.error == 'undefined')
      sel.originalValue = value;
    else
    {
      alert(result.error.message);
      for (var i = 0; i < sel.options.length; i++)
      {
        var v = parseInt(sel.options[i].text);
        if (isNaN(v))
          v = 0;

        if (v == orig)
          sel.selectedIndex = i;
      }
    }

    sel.disabled = false;
  }

  var params = {};
  params['rating'+id] = value;
  callRemoteProc('rateMessage', params, onresult);
  sel.disabled = true;
}

function pushHandler(object, event, handler)
{
  if (typeof object.addEventListener != 'undefined')
    object.addEventListener(event, handler, false);
  else if (typeof object.attachEvent != 'undefined')
    object.attachEvent('on' + event, handler);
  else
  {
    var handlersProp = '_handlerStack_' + event;
    var eventProp = 'on' + event;
    if (typeof object[handlersProp] == 'undefined')
    {
      object[handlersProp] = [];
      if (typeof object[eventProp] != 'undefined')
        object[handlersProp].push(object[eventProp]);
      object[eventProp] = function(e)
      {
        var ret = true;
        for (var i = 0; ret != false && i < object[handlersProp].length; i++)
          ret = object[handlersProp][i](e);
        return ret;
      }
    }
    object[handlersProp].push(handler);
  }
}

function removeHandler(object, event, handler)
{
  if (typeof object.removeEventListener != 'undefined')
    object.removeEventListener(event, handler, false);
  else if (typeof object.detachEvent != 'undefined')
    object.detachEvent('on' + event, handler);
  else
  {
    var handlersProp = '_handlerStack_' + event;
    if (typeof object[handlersProp] != 'undefined')
    {
      for (var i = 0; i < object[handlersProp].length; i++)
      {
        if (object[handlersProp][i] == handler)
        {
          object[handlersProp].splice(i, 1);
          return;
        }
      }
    }
  }
}

function escapeUnicode(element, name)
{
  var text = element.value;

  var regexp = "[^\u0001-\u007F\u00A0\u00A4\u00A6\u00A7\u00A9\u00AB-\u00AE\u00B0\u00B1\u00B5-\u00B7\u00BB\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u0490\u0491\u2013\u2014\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2026\u2030\u2039\u203A\u20AC\u2116\u2122]";
  var f = function(c){return '&&#' + c.charCodeAt(0) + '&&'};

  if ('a'.replace(/./, f) == '&&#97&&')
    text = text.replace(new RegExp(regexp, 'g'), f);
  else
  {
    regexp = new RegExp(regexp);
    var pos;
    while ((pos = text.search(regexp)) != -1)
      text = text.substr(0, pos) + f(text.substr(pos, 1)) + text.substr(pos + 1);
  }

  if (typeof element._hiddenField == 'undefined')
  {
    var tmp = document.createElement('input');
    tmp.type = 'hidden';
    element.form.appendChild(tmp);
    tmp.name = element.name;
    element.removeAttribute('name');
    element._hiddenField = tmp;
  }
  element._hiddenField.value = text;
}
