﻿// JavaScript File
// Validation related Javacript - Copyright 2007, 2008 by Promising-Jobs.com
// Author: Nalin D.Jayasuriya, Ottawa ON. Canada
//
var arrValControls = new Array();
var arrValTypes = new Array();
var arrValName  = new Array();
var arrValErrControls = null;
var arrValErrReasons = null;

var strValClientIDPrefix = '';

var strValReason = null; // temporary

function ValPerformBasicValidationsShow()
{
  MsgClearMessages();
  var bolOK = ValPerformBasicValidations();
  if (!bolOK)
   {
      var intItemCount = arrValErrReasons.length;
      for (var intItemIndex = 0; intItemIndex < intItemCount; intItemIndex++)
       {
         var strError = arrValErrReasons[intItemIndex];
         MsgAddMessage(strError);
       }
      MsgDisplayError('Please correct the following:');       
   }
  else
   {
     MsgClearMessages();
   }
   
   return bolOK;
}

function ValPerformBasicValidations()
{  
  var bolSuccess = true;
  arrValErrControls = new Array(); // start fresh
  arrValErrReasons = new Array();
 
  HighlightErrors(arrValControls, '',''); // clear visual error indicators
    
  var intItemCount = arrValControls.length;
  for (var intItemIndex = 0; intItemIndex < intItemCount; intItemIndex++)
   {
     // find control to validate
     var strCompleteID = strValClientIDPrefix + arrValControls[intItemIndex];
     var cntControl = document.getElementById(strCompleteID);
     if (null != cntControl)
      {
        var strValidations = arrValTypes[intItemIndex];
        if (null != strValidations)
         { 
           var bolOK = ValBasicValidation(cntControl, strValidations);
           if (!bolOK)
            {
              arrValErrControls.push(arrValControls[intItemIndex]);
              var strControlName = arrValName[intItemIndex];
              arrValErrReasons.push("'" + strControlName + "' " + strValReason);
              bolSuccess = false;
            }
         }
      }      
   } // for
  
   
  if (!bolSuccess)
   {
     HighlightErrors(arrValErrControls, '#ff1111','1');
   }
  arrValErrControls = null; 
  
  return bolSuccess;
} // fn

function ValBasicValidation(cntControl, strValidations)
{
  var bolSuccess = true;
  
  var arrComponents = strValidations.split(',');
  var intComponentCount = arrComponents.length;
  for (var intItemIndex = 0; (intItemIndex < intComponentCount) && bolSuccess; intItemIndex++)
   {
     var strPart = arrComponents[intItemIndex] + '';
     var strFirstChar = strPart.substr(0,1);
     switch(strFirstChar)
     {
       case 'R':
               if (0 == cntControl.value.length)
                {
                  bolSuccess = false;
                  strValReason = 'is required';
                }
               break;
       case 'W':
               var strText = cntControl.value;
               var intLocation = strText.indexOf('<');
               if (-1 == intLocation)
               {
                 intLocation = strText.indexOf('>');
               }
               if (-1 == intLocation)
               {
                 intLocation = strText.indexOf('?');
               }
               if (-1 == intLocation)
               {
                 intLocation = strText.indexOf('&');
               }
               if (-1 != intLocation)
                {
                  bolSuccess = false;
                  strValReason = 'has unacceptable characters (<,>,?,&)';
                }
               break;               
       case 'M':
               var intLength = cntControl.value.length;
               var strMinLength = arrComponents[intItemIndex].substr(1,3);
               var intMinLength = DecimalEvaluate(strMinLength);
               if (intLength < intMinLength)
               {
                  bolSuccess = false;
                  strValReason = 'is less than ' + intMinLength + ' characters in length';
               }
               break;
       case 'E':
               var intLength = arrComponents[intItemIndex].length;
               var strSecondControl = arrComponents[intItemIndex].substr(1,intLength-1); // skip E
               var cntSecondControl = document.getElementById(strValClientIDPrefix + strSecondControl);
               if (cntControl.value != cntSecondControl.value)
                {
                  bolSuccess = false;
                  strValReason = 'must be the same';
                }               
               break;
               
       case 'A':
               var strText = cntControl.value;
               if (!IsValidEmail(strText))
                {
                  bolSuccess = false;
                  strValReason = 'is not a valid email address';
                }
               break;               
               
       case 'S':
               var count = cntControl.children.length;
               if (count < 1)
                {
                  bolSuccess = false;
                  strValReason = 'has no items';
                }
               break;               
               
       case 'K':
               if (!cntControl.checked)
                {
                  bolSuccess = false;
                  strValReason = 'must be checked';
                }
               break;               
               
       case 'C':
               var intLength = arrComponents[intItemIndex].length;
               var strOtherData = arrComponents[intItemIndex].substr(1,intLength-1); // skip C
               var arrDataComponents = strOtherData.split(':');
               var checkButton = document.getElementById(strValClientIDPrefix + arrDataComponents[0]);
               var bolChecked = checkButton.checked;
               if (bolChecked)
                {
                   var intLength = cntControl.value.length;
                   var intMinLength = DecimalEvaluate(arrDataComponents[1]);
                   if (intLength < intMinLength)
                   {
                      bolSuccess = false;
                      strValReason = 'is less than ' + intMinLength + ' characters in length';
                   }
                }
               break;                               
       case 'T':
               bolSuccess = cntControl.checked;
               if (!bolSuccess)
               {
                 var intLength = arrComponents[intItemIndex].length;
                 var strOtherData = arrComponents[intItemIndex].substr(1,intLength-1); // skip T
                 var radioButton2 = document.getElementById(strValClientIDPrefix + strOtherData);
                 bolSuccess = radioButton2.checked;
                 if (!bolSuccess)
                 {
                      strValReason = 'must be specified';
                 }
               }
               break;               
     }     
   } // for
      
   return bolSuccess;  
} // fn

function IsValidEmail(source)
{  
     var regex  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
     return regex.test(source);
}

// Evaluate as decimal (fix octal recognition issue if applicable)
function DecimalEvaluate(source)
{
  var result = source;
  if (result.substr(0,1) == '0')
   {
     result = result.substr(1, result.length-1); // take remaining
   }
  if (result.substr(0,1) == '0')
   {
     result = result.substr(1, result.length-1); // take remaining
   }
   return eval(result);
}

function HighlightErrors(arrControls, strBorderColor, strBorderWidth)
{
  var intItemCount = arrControls.length;
  for (var intItemIndex = 0; intItemIndex < intItemCount; intItemIndex++)
   {
     var strCompleteID = strValClientIDPrefix + arrControls[intItemIndex];
     var cntControl = document.getElementById(strCompleteID);
     // highlight
     cntControl.style.borderColor = strBorderColor;
     cntControl.style.borderWidth = strBorderWidth;
   }
} // fn