String.prototype.htmlEncode = function ()
{
  var chars   = new Array("'",'"','<','>','&');
  var nChars  = chars.length;
  var codes   = new Array('&#39;','&quot;','&lt;','&gt;','&amp;');
  var s       = '';
  var i,
      k;
  var c;

  for (i = 0;i < this.length;i++)
  {
    c = this.charAt(i);

    for (k = 0;k < nChars;k++)
    {
      if (c == chars[k])
      {
        s += codes[k];
        break;
      }
    }

    if (k == nChars)
      s += c;
  }

  return s;
}

String.prototype.xmlEncode = function ()
{
  var chars   = new Array('"','<','>','&');
  var nChars  = chars.length;
  var codes   = new Array('&quot;','&lt;','&gt;','&amp;');
  var s       = '';
  var i,
      k;
  var c;

  for (i = 0;i < this.length;i++)
  {
    c = this.charAt(i);

    for (k = 0;k < nChars;k++)
    {
      if (c == chars[k])
      {
        s += codes[k];
        break;
      }
    }

    if (k == nChars)
      s += c;
  }

  return s;
}

String.prototype.endsWith = function (s)
{
  return (this.slice(-s.length) == s);
}

String.prototype.lTrim = function()
{
  return this.replace(/^\s+/,'');
}

String.prototype.rTrim = function()
{
  return this.replace(/\s+$/,'');
}

String.prototype.trim = function()
{
  return this.replace(/^\s+/,'').replace(/\s+$/,'');
}

function getAbsolutePos (o,stopAtId)
{
  if (o == window)
    return {x:0,y:0};

  var x = o.offsetLeft - document.body.offsetLeft;
  var y = o.offsetTop - document.body.offsetTop;

  while (o.offsetParent)
  {
    o = o.offsetParent;

    if (stopAtId && (o.id == stopAtId))
      break;

    x += o.offsetLeft;
    y += o.offsetTop;
  }

  return {x:x,y:y};
}

function processFullForm (jForm)
{
  var pars = {};

  jForm.find('INPUT,SELECT,TEXTAREA').each(
    function ()
    {
      var value;

      if (this.type == 'checkbox')
      {
        if (this.checked)
          value = this.value;
        else
          value = '';
      }
      else
        value = $(this).val();

      if (typeof(pars[this.name]) != 'undefined')
      {
        if (value != '')
          pars[this.name] += ',' + value;
      }
      else
        pars[this.name] = value;
    }
  );

  return pars;
}

function processVirtualForm (jContainer)
{
  var pars = {};

  jContainer.find('INPUT,SELECT,TEXTAREA').each(
    function ()
    {
      if (this.disabled || this.readonly)
        return;

      if ((this.type == 'checkbox') || (this.type == 'radio'))
      {
        if (this.checked)
          pars[this.name] = this.value;
      }
      else
        pars[this.name] = $(this).val();
    }
  );

  return pars;
}

function number_format (number,decimals,dec_point,thousands_sep)
{
  var n     = number,
      prec  = decimals,
      dec   = dec_point,
      sep   = thousands_sep;

  n     = (!isFinite(+n))?0:+n;
  prec  = (!isFinite(+prec))?0:Math.abs(prec);
  sep   = (sep == undefined)?',':sep;

  var s     = n.toFixed(prec),
      abs   = Math.abs(n).toFixed(prec),
      parts = abs.split(/\D/),
      i     = (parts[0].length % 3) || 3;

  parts[0]  = s.slice(0,i + (n < 0)) + parts[0].slice(i).replace(/(\d{3})/g,sep + '$1');
  s         = parts.join(dec || '.');

  return s;
}

Number.prototype.formatCurrency = function ()
{
  return number_format(this,2,',','.');
}

Number.prototype.euroDashCurrency = function ()
{
  var s = this.formatCurrency().replace(',00',',-');

  return '&euro;&nbsp;' + s;
}

function makeQuantity (s)
{
  try
  {
    var n = Number(s);

    if (isNaN(n) || (n <= 0))
      return 1;
    else
      return n;
  }
  catch (e)
  {
    return 1;
  }
}

function openModal (jObject)
{
  if (browserIE6)
    $('select').css({visibility:'hidden'});
  jObject.modal(modalPars);

  return jObject;
}

function closeModal ()
{
  $.modal.close();
  if (browserIE6)
    $('select').css({visibility:'visible'});
}

function showDlg (jObject)
{
  if (browserIE6)
    $('select').css({visibility:'hidden'});
  jObject.show('fast');

  return jObject;
}

function hideDlg (jObject)
{
  jObject.hide('fast');
  if (browserIE6)
    $('select').css({visibility:'visible'});

  return jObject;
}

function insertFlash (directory,id,fileName,width,height,version,pars)
{
  document.write('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"\n' +
    '  codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=' + version + ',0,0,0"\n' +
    '  width="' + width + '"\n' +
    '  height="' + height + '"\n' +
    '  id="' + id + '"\n' +
    '  align="">\n' +
    '  <param name="movie" value="/' + directory + '/' + fileName + '.swf">\n' +
    '  <param name="flashVars" value="' + pars + '">\n' +
    '  <param name="quality" value="high">\n' +
    '  <param name="scale" value="stretch">\n' +
    '  <param name="bgcolor" value="#ffffff">\n' +
    '  <param name="wmode" value="transparent">\n' +
    '  <param name="allowScriptAccess" value="always">\n' +
    '  <param name="swLiveConnect" value="true">\n' +
    '  <embed src="/' + directory + '/' + fileName + '.swf?' + pars + '"\n' +
    '    flashVars="' + pars + '"\n' +
    '    quality="high"\n' +
    '    scale="stretch"\n' +
    '    bgcolor="#ffffff"\n' +
    '    width="' + width + '"\n' +
    '    height="' + height + '"\n' +
    '    name="' + id + '"\n' +
    '    align=""\n' +
    '    wmode="transparent"\n' +
    '    allowScriptAccess="always"\n' +
    '    swLiveConnect="true"\n' +
    '    type="application/x-shockwave-flash"\n' +
    '    pluginspage="http://www.macromedia.com/go/getflashplayer">\n' +
    '</object>');
}
