function isEmpty( value )
{
   if ( value.length == 0 || /^\s+$/.test( value ) ) {
      return true;
   } else {
      return false;
   }
}

function isInteger( value )
{
   if ( !isEmpty( value ) && /^\d+$/.test( value ) ) {
      return true;
   } else {
      return false;
   }
}

function isDouble( value )
{
   if ( !isEmpty( value ) && /^\d+(\.\d+)?$/.test( value ) ) {
      return true;
   } else {
      return false;
   }
}

function isCurrency( value )
{
   if ( !isEmpty( value ) && /^\d+(\.\d{2})?$/.test( value ) ) {
      return true;
   } else {
      return false;
   }
}

function isDate( value )
{
   //
   // currently only dd/MM/yyyy format is supported
   //
   if ( !isEmpty( value ) && /^\d{1,2}\/\d{1,2}\/\d{4}$/.test( value ) ) {
      var dateArray = value.split( "/" );
      var day = dateArray[0];
      var month = dateArray[1];
      var year = dateArray[2];

      if ( year < 1 ) {
         return false;
      } else if ( month < 1 || month > 12 ) {
         return false;
      } else if ( day < 1 || day > getNumberOfDaysInMonth( month, year ) ) {
         return false;
      }

      return true;
   } else {
      return false;
   }
}

function getNumberOfDaysInMonth( month, year )
{
   var numberOfDays = 0;
   
   if ( month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12 ) {
      numberOfDays = 31;
   } else if ( month == 4 || month == 6 || month == 9 || month == 11 ) {
      numberOfDays = 30;
   } else if ( month == 2 ) {
      if ( isLeapYear( year ) ) {
         numberOfDays = 29;
      } else {
         numberOfDays = 28;
      }
   }
   
   return numberOfDays;
}

function isLeapYear( year )
{
   if ( ( ( year % 4 ) == 0 ) && ( ( year % 100 ) != 0 ) || ( ( year % 400 ) == 0 ) ) {
      return true;
   } else {
      return false;
   }
}

function isTime( value )
{
   //
   // currently only HH:mm format is supported
   //
   if ( !isEmpty( value ) && /^\d{1,2}\:\d{2}$/.test( value ) ) {
      var timeArray = value.split( ":" );
      var hours = timeArray[0];
      var minutes = timeArray[1];

      if ( hours > 23 || minutes > 59 ) {
         return false;
      }

      return true;
   } else {
      return false;
   }
}

function isEmailAddress( value )
{
   if ( !isEmpty( value ) && /^.+\@.+\..+$/.test( value ) ) {
      return true;
   } else {
      return false;
   }
}

function validatePageIndex( pageIndex, pageCount )
{
   if ( pageIndex.length > 0 ) {
      if ( isNaN( pageIndex ) || 
           isNaN( parseInt( pageIndex, 10 ) ) || 
           parseInt( pageIndex, 10 ) < 1 || 
           parseInt( pageIndex, 10 ) > pageCount ) 
      {
         return false;
      } else {
         return true;
      }
   } else {
      return false;
   }
}

function continueWithoutSavingChanges( message )
{
   var okToContinue = true;

   if ( hasViewContentChanged() ) {
      if ( !confirm( message ) ) {
         okToContinue = false;
      }
   }
   
   return okToContinue;
}

function setHiddenInputBoolean( checkBox, hiddenInput )
{
   if ( checkBox.checked ) {
      hiddenInput.value = "true";
   } else {
      hiddenInput.value = "false";
   }
}

function setHiddenInputDateTime( dateField, timeField, hiddenInput, defaultComplementaryTimeSuffixString )
{
   if ( isEmpty( dateField.value ) && isEmpty( timeField.value ) ) {
      hiddenInput.value = "";
   } else {
      hiddenInput.value =  dateField.value + " " + timeField.value + defaultComplementaryTimeSuffixString;
   }
}

function setHiddenInputDate( dateField, hiddenInput, defaultTimeNullValueString )
{
   if ( isEmpty( dateField.value ) ) {
      hiddenInput.value = "";
   } else {
      hiddenInput.value = dateField.value + " " + defaultTimeNullValueString;
   }
}

function setHiddenInputTime( timeField, hiddenInput, defaultDateNullValueString, defaultComplementaryTimeSuffixString )
{
   if ( isEmpty( timeField.value ) ) {
      hiddenInput.value = "";
   } else {
      hiddenInput.value =  defaultDateNullValueString + " " + timeField.value + defaultComplementaryTimeSuffixString;
   }
}

function substituteParametersInString( inputString )
{
   for ( var i = arguments.length - 1; i > 0; i-- ) {
      re = new RegExp( "%" + i, "gi" );
      inputString = inputString.replace( re, arguments[i] );
   }
   
   return inputString;
}
