/*======================================================================*/
/* JavaScript file created by Boudewijn Overgaauw on 4 May 2008         */
/* Last updated by Boudewijn Overgaauw on 20 November 2008              */
/* Copyright (c) ISISIA and/or its suppliers, 2008. All Rights Reserved */
/*======================================================================*/

/*==========================================*/
/* Variable declarations: Support variables */
/*==========================================*/
var $FormNameIx = 0;
var $FormActionFileIx = 1;
var $FieldDataIx = 2;
var $ErrorMessageHeaderIx = 3;
var $ErrorMessageFooterIx = 4;
var $MaximumFileSizeIx = 5;

var $FieldNameIx = 0;
var $ErrorListIx = 1;
var $RegExpIx = 2;
var $MinimumLengthIx = 3;
var $MaximumLengthIx = 4;

var $EmptyIx = 0;
var $InvalidIx = 1;
var $TooShortIx = 2;
var $TooLongIx = 3;

var $SingleErrorIx = 0;
var $MultipleErrorsIx = 1;

/*========================================*/
/* Variable declarations: Generic RegExps */
/*========================================*/
var $PrintableLineRegExp = new RegExp('^[\\x20-\\x7E\\xA0-\\xFF]*$');
var $PrintableTextRegExp = new RegExp('^[\\x0A\\x0D\\x20-\\x7E\\xA0-\\xFF]*$');
var $ASCIISubsetRegExp = new RegExp('^[\\x20\\x21\\x23-\\x5B\\x5D-\\x7E]*$');
var $PhoneNumberRegExp = new RegExp('^\\+?[0-9]+[ -.]?(\\([0-9]+\\))?([ -.]?[0-9]+)*$');
var $EMailAddressRegExp = new RegExp
 ('^[A-Za-z0-9_-]+(\\.[A-Za-z0-9_-]+)*\\.?@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*\\.[A-Za-z]{2,}$');

/*==========================================*/
/* Variable declarations: General variables */
/*==========================================*/
var $ErrorArray = new Array();
var $DefaultMaximumFileSize = 2000000;

/*=================================*/
/* Function definition: CheckField */
/*=================================*/
function CheckField($FormData, $FieldIx)
{
  eval
   (
     'var $FieldValue = document.forms[\x27' + $FormData[$FormNameIx] + '\x27].' +
     $FormData[$FieldDataIx][$FieldIx][$FieldNameIx] + '.value'
   );
  if ($FieldValue == '')
  {
    if ($FormData[$FieldDataIx][$FieldIx][$ErrorListIx][$EmptyIx] != '')
    {
      $ErrorArray[$ErrorArray.length] =
       $FormData[$FieldDataIx][$FieldIx][$ErrorListIx][$EmptyIx];
    };
  }
  else
  {
    if ($FormData[$FieldDataIx][$FieldIx][$RegExpIx] != '')
    {
      if (!$FormData[$FieldDataIx][$FieldIx][$RegExpIx].test($FieldValue))
      {
        if ($FormData[$FieldDataIx][$FieldIx][$ErrorListIx][$InvalidIx] != '')
        {
          $ErrorArray[$ErrorArray.length] =
           $FormData[$FieldDataIx][$FieldIx][$ErrorListIx][$InvalidIx];
        };
      };
    };
    if ($FormData[$FieldDataIx][$FieldIx][$MinimumLengthIx] != '')
    {
      if
       ($FieldValue.length < $FormData[$FieldDataIx][$FieldIx][$MinimumLengthIx])
      {
        if ($FormData[$FieldDataIx][$FieldIx][$ErrorListIx][$TooShortIx] != '')
        {
          $ErrorArray[$ErrorArray.length] =
           $FormData[$FieldDataIx][$FieldIx][$ErrorListIx][$TooShortIx].
           replace(/#/, $FormData[$FieldDataIx][$FieldIx][$MinimumLengthIx]);
        };
      };
    };
    if ($FormData[$FieldDataIx][$FieldIx][$MaximumLengthIx] != '')
    {
      if
       ($FieldValue.length > $FormData[$FieldDataIx][$FieldIx][$MaximumLengthIx])
      {
        if ($FormData[$FieldDataIx][$FieldIx][$ErrorListIx][$TooLongIx] != '')
        {
          $ErrorArray[$ErrorArray.length] =
           $FormData[$FieldDataIx][$FieldIx][$ErrorListIx][$TooLongIx].
           replace(/#/, $FormData[$FieldDataIx][$FieldIx][$MaximumLengthIx]);
        };
      };
    };
  };
};

/*============================================*/
/* Function definition: CheckAndSubmitMessage */
/*============================================*/
function CheckAndSubmitMessage($FormData)
{
  $ErrorArray.length = 0;
  for (var $i = 0; $i < $FormData[$FieldDataIx].length; $i++)
  {
    CheckField($FormData, $i);
  };
  if ($ErrorArray.length == 0)
  {
    eval
     (
       '$MaxFileSizeFieldType = typeof document.forms[\x27' + $FormData[$FormNameIx] +
       '\x27].MAX_FILE_SIZE'
     );
    if ($MaxFileSizeFieldType != 'undefined')
    {
      if (typeof $FormData[$MaximumFileSizeIx] == 'undefined')
      {
        $MaximumFileSize = $DefaultMaximumFileSize;
      }
      else
      {
        if
         (
           ($FormData[$MaximumFileSizeIx] == '') ||
           ($FormData[$MaximumFileSizeIx] == 0) ||
           ((typeof $FormData[$MaximumFileSizeIx]) != 'number')
         )
        {
          $MaximumFileSize = $DefaultMaximumFileSize;
        }
        else
        {
          $MaximumFileSize = $FormData[$MaximumFileSizeIx];
        };
      };
      eval
       (
         'document.forms[\x27' + $FormData[$FormNameIx] + '\x27].MAX_FILE_SIZE.value = ' +
         $MaximumFileSize
       );
    };
    eval
     (
       'document.forms[\x27' + $FormData[$FormNameIx] + '\x27].action = \x27' +
       $FormData[$FormActionFileIx] + '\x27'
     );
    eval('document.forms[\x27' + $FormData[$FormNameIx] + '\x27].submit()');
  }
  else
  {
    DisplayErrorMessage($FormData);
  };
};

/*==========================================*/
/* Function definition: DisplayErrorMessage */
/*==========================================*/
function DisplayErrorMessage($FormData)
{
  var $ErrorMessageList = '';
  for (var $i = 0; $i < $ErrorArray.length; $i++)
  {
    $ErrorMessageList += '- ' + $ErrorArray[$i] + '\n';
  };
  if ($ErrorArray.length == 1)
  {
    $ErrorMessage = $FormData[$ErrorMessageHeaderIx][$SingleErrorIx] + '\n\n' +
     $ErrorMessageList + '\n' + $FormData[$ErrorMessageFooterIx][$SingleErrorIx];
  }
  else
  {
    $ErrorMessage =
     $FormData[$ErrorMessageHeaderIx][$MultipleErrorsIx] + '\n\n' +
     $ErrorMessageList + '\n' +
     $FormData[$ErrorMessageFooterIx][$MultipleErrorsIx];
  };
  alert($ErrorMessage);
};
