

  // checking field name, is it actual content field
  function _checkContentArticleFieldName(name) {
    if (typeof(name) != 'string') return false;
    var parts = name.split('_');
    if (parts.length != 2) return false;
    if (parts[0] != 'field') return false;
    var n = parseInt(parts[1]);
    if (isNaN(n)) return false;
    if (n.toString() != parts[1]) return false;
    return true;
  }

  // Validate date value
  function _isDateValid(dt, form) {
    var mnLen = String('31,28,31,30,31,30,31,31,30,31,30,31').split(',');
    var order = (form.date_order) ? form.date_order.value : 'mdy';
    var yi = order.indexOf('y');
    var mi = order.indexOf('m');
    var di = order.indexOf('d');
    if ((yi<0) || (yi>2) || (mi<0) || (mi>2) || (di<0) || (di>2)) {
      // Default date elements order
      yi = 2; mi = 0; di = 1;
    }
    // Check date elements count
    var sep = (form.date_separator) ? form.date_separator.value : '/';
    dt = dt.split(sep);
    if (dt.length != 3) return false;
    // Check year
    var y = parseInt(dt[yi], 10);
    if (isNaN(y) || (y.toString() != dt[yi])) return false;
    if ((new Date(y, 1, 29)).getMonth() == 1) mnLen[1] = '29';
    // Check month
    var m = parseInt(dt[mi], 10);
    if (isNaN(m)) return false;
    if ((m.toString() != dt[mi]) && ('0' + m.toString() != dt[mi])) return false;
    if ((m<1) || (m>12)) return false;
    // Check day
    var d = parseInt(dt[di], 10);
    if (isNaN(d)) return false;
    if ((d.toString() != dt[di]) && ('0' + d.toString() != dt[di])) return false;
    if ((d < 1) || (d > parseInt(mnLen[m-1]))) return false;
    return true;
  }

  // Validate time value
  function _isTimeValid(tm, form) {
    var n;
    // Check time elements count
    var sep = (form.time_separator) ? form.time_separator.value : ':';
    tm = tm.split(sep);
    if ((tm.length != 2) && (tm.length != 3)) return false;
    // Check hours
    n = parseInt(tm[0], 10);
    if (isNaN(n)) return false;
    if ((n.toString() != tm[0]) && ('0' + n.toString() != tm[0])) return false;
    if ((n<0) || (n>23)) return false;
    // Check minutes
    n = parseInt(tm[1], 10);
    if (isNaN(n)) return false;
    if ((n.toString() != tm[1]) && ('0' + n.toString() != tm[1])) return false;
    if ((n<0) || (n>59)) return false;
    // Check seconds
    if (tm.length == 3) {
      n = parseInt(tm[2], 10);
      if (isNaN(n)) return false;
      if ((n.toString() != tm[2]) && ('0' + n.toString() != tm[2])) return false;
      if ((n<0) || (n>59)) return false;
    }
    return true;
  }

  // Validate DateTime value
  function _isDateTimeValid(dt, form) {
    var order = (form.datetime_order) ? form.datetime_order.value : 'dt';
    var di = order.indexOf('d');
    var ti = order.indexOf('t');
    if ((di<0) || (di>1) || (ti<0) || (ti>1)) {
      // Default date elements order
      di = 0; ti = 1;
    }
    // Check date & time parts
    var sep = (form.datetime_separator) ? form.datetime_separator.value : ' ';
    dt = dt.split(sep);
    if (dt.length != 2) return false;
    // Check date & time
    if (!_isDateValid(dt[di], form)) return false;
    if (!_isTimeValid(dt[ti], form)) return false;
    return true;
  }

  // validating field values and checking required fields
  function _checkContentArticleForm(form) {
    for (var i = 0; i < form.elements.length; i++) {
      var name = form.elements[i].name;
      if (_checkContentArticleFieldName(name)) {
        var value = eval('form.' + name + '.value');
        var field_type = eval('form.' + name + '_type.value');
        var attr = eval('form.' + name + '_name.value');
        // validate field value
        if (value) {
          switch (field_type) {
            case 'Numeric':
              eval('form.' + name + '.value = form.' + name + '.value.replace(",", ".")');
              value = eval('form.' + name + '.value');
              var n = parseFloat(value);
              if (isNaN(n) || (n.toString() != value)) {
                eval('form.' + name + '.focus()');
                alert('Field: [' + attr + ']\n' +
                  '[' + value + '] is not valid numeric value.');
                return false;
              }
              break;
            case 'Date':
              if (!_isDateValid(value, form)) {
                eval('form.' + name + '.focus()');
                alert('Field: [' + attr + ']\n' +
                  '[' + value + '] is not valid Date value.');
                return false;
              }
              break;
            case 'Time':
              if (!_isTimeValid(value, form)) {
                eval('form.' + name + '.focus()');
                alert('Field: [' + attr + ']\n' +
                  '[' + value + '] is not valid Time value.');
                return false;
              }
              break;
            case 'DateTime':
              if (!_isDateTimeValid(value, form)) {
                eval('form.' + name + '.focus()');
                alert('Field: [' + attr + ']\n' +
                  '[' + value + '] is not valid DateTime value.');
                return false;
              }
              break;
          }
        }
        // check required field
        var req = eval('form.' + name + '_required.value');
        if (parseInt(req) == 1) {
          switch (field_type) {
            case 'Relation':
              var radio = eval('form.' + name);
              if ((radio.length > 0) && (radio[0].type == 'radio')) {
                var ch = false;
                for (var j = 0; j < radio.length; j++) {
                  if (radio[j].checked) ch = true;
                }
                if (! ch) {
                  eval('form.' + name + '[0].focus()');
                  alert('Field: [' + attr + '] is required.\n' +
                    'Select [' + attr + '].');
                  return false;
                }
              } else {
                if (parseInt(value) == -1) {
                  eval('form.' + name + '.focus()');
                  alert('Field: [' + attr + '] is required.\n' +
                    'Select [' + attr + '].');
                  return false;
                }
              }
              break;
            default:
              if (value == '') {
                eval('form.' + name + '.focus()');
                alert('Field: [' + attr + '] is required.\n' +
                  'Enter [' + attr + '].');
                return false;
              }
              break;
          }
        }
      }
    }
    return true;
  }

