var $ = function(element_id){
  return document.getElementById(element_id);
}

var add_class_name = function(element, class_name){
  var temp = null;
  var re = new RegExp('((?:^|[^\\w]+)'+class_name+'(?:[^\\w]+|$))');
  if (element && !re.test(element.className)) element.className += ' '+class_name;
}

var remove_class_name = function(element, class_name){
  var temp = null;
  var re = new RegExp('((?:^|[^\\w]+)'+class_name+'(?:[^\\w]+|$))');
  if (element && element.className){
    temp = element.className;
    if (temp) element.className = temp.replace(re, ' ');
  }
}

var fieldsCollection = function(fields_hash, error_class_name){
  var error = false;
  var temp = null;
  var self = {};
  
  var field_value = function(field_id, mask){
    var field = null;
    var value = null;
    var result = {
      value: null,
      error: null
    }
    
    if ((mask == null) || (mask instanceof RegExp)){
      field = $(field_id);
      if (!field) result.error = true;
      else{
        value = (field.type || '').toLowerCase();
        if ((value == 'checkbox') || (value == 'radio')) value = field.checked ? (field.value || true) : '';
        else value = field.value || '';
      
        if (mask){
          if (mask.test(value)){
            remove_class_name(field, error_class_name);
            result.value = value;
          }
          else{
            add_class_name(field, error_class_name);
            result.error = true;
          }
        }
        else result.value = value||null;
      }
    }
    else if (typeof mask == 'object'){
      for (var id in mask){
        result = field_value(id, mask[id]);
        if (result.value || result.error) break;
      }
    }
    
    return result;
  }
  
  for (var index in fields_hash){
    temp = field_value(index, fields_hash[index]);
    if (!temp.error) self[index] = temp.value;
    else error = true;
  }
  
  return error ? null : self;
}

var elementsCollection = function(ids_array){
  var self = null;
  var index = null;
  var temp = null;
  var element = null;
  if (ids_array instanceof Array){
    index = ids_array.length;
    if (index){
      self = {};
      while (index--){
        temp = ids_array[index];
        element = $(temp);
        if (element) self[temp] = element;
        else{
          self = null;
          break;
        }
      }
    }
  }
  return self;
}











