 <!--

/**
 * Retorna o tipo do objeto de formulário (select,select-one,select-multiple,radio,checkbox,text)
 * @param string fieldName Nome do ID do campo
 * @return String
 */

function fieldType(fieldName,alertOnNotFound) {
    obj = findObj(fieldName);
    if(!obj) {
        if(alertOnNotFound != false) alert('fieldType() say: Campo "'+fieldName+'" não foi encontrado');
        return null;
    }
    if(!obj.type) {
      if(obj[0]) {
          if(!obj[0].type) {
              alert('fieldType() say: Não conseguiu determinar o tipo do campo para "'+fieldName+'"');
              return null;
          }else{
              tipo = obj[0].type;
          }
      }else{
          tipo = null;
      }
    }else{
        tipo = obj.type;
    }
    if(!tipo) {
        alert('fieldType() say: Não conseguiu determinar o tipo do campo para "'+fieldName+'"');
        return null;
    }
    return tipo;
}

/**
 * Retorna o valor de um objeto de formulário. Para campo multi seleção, retorna uma Array com os índices selecionados.
 * @param string fieldName Nome do ID do campo
 * @return mixed
 * @version 1.0
 */


function getValue(fieldName) {
  var obj = findObj(fieldName);
  if(!obj) {
      window.status = 'getValue() say: Campo "'+fieldName+'" não foi encontrado';
      return '';
  }

  var tipo = fieldType(fieldName); //alert(fieldName+'='+tipo); //debug

  switch(tipo) {
    case 'select' :
    case 'select-one' :
        return (obj.selectedIndex != -1) ? obj.options[obj.selectedIndex].value : '';
    case 'select-multiple' :
        var temp = Array(), i = 0;
        for(var j = 0; j < obj.length; ++j) {
            if(obj.options[j].selected) {
              temp[i] = (obj.options[j].value) ? obj.options[j].value : obj.options[j].text;
              i++;
            }
        }
        return temp;
    case 'radio' :
        if(obj.value) {
            return obj.value;
        }else{
            for(var j = 0 ; j < obj.length ; ++j) {
              if(obj[j].checked) return obj[j].value;
            }
        }
        return '';
    case 'checkbox' :
        if(obj.length > 0) {
      var temp = Array(), i = 0;
      for(var j = 0 ; j < obj.length ; ++j) {
        if(obj[j].checked) {
          temp[i] = obj[j].value;
          i++;
        }
      }
    }else{
      var temp = (obj.checked) ? obj.value : '';
    }
    return temp;
    break;
    case 'text' :
        try {
            while(''+obj.value.charAt(0)==' ') obj.value=obj.value.substring(1,obj.value.length); //trim
            while(''+obj.value.charAt(obj.value.length-1)==' ') obj.value=obj.value.substring(0,obj.value.length-1); //trim
            return (obj.value) ? obj.value : '';
        }catch(e) {
            alert('getValue() say: Campo "'+fieldName+'": '+e.message+'\n obj: '+obj);
            return '';
        }
    default :
        return (obj.value) ? obj.value : '';
    break;
  }
}

function getTextValue(fieldName) {
  var obj = findObj(fieldName);
  if(!obj) {
      window.status = 'getValue() say: Campo "'+fieldName+'" não foi encontrado';
      return '';
  }

  var tipo = fieldType(fieldName); //alert(fieldName+'='+tipo); //debug

  switch(tipo) {
    case 'select' :
    case 'select-one' :
        return (obj.selectedIndex != -1) ? obj.options[obj.selectedIndex].text : '';
    case 'select-multiple' :
        var temp = Array(), i = 0;
        for(var j = 0; j < obj.length; ++j) {
            if(obj.options[j].selected) {
              temp[i] = obj.options[j].text;
              i++;
            }
        }
        return temp;
    break;
  }
  
  return '';
}



/**
 * Define um valor/conteúdo/opções selecionadas para um objeto de formulário
 * @param string fieldName Nome do ID do campo de formulário
 * @version EXPERIMENTAL
 * @return void
 */

function setValue(fieldName,newValue,alertOnNotFound)
{
  var obj = findObj(fieldName);
  if(!obj) {
      if(alertOnNotFound != false) alert('setValue() say: Campo "'+fieldName+'" não foi encontrado');
      return null;
  }

  var tipo = fieldType(fieldName,alertOnNotFound); //alert(tipo); //debug

  //alert('setValue() say: Campo "'+fieldName+'" tipo "'+tipo+'"');

  switch(tipo) {
    case 'select' :
    case 'select-one' :
      for(var j = 0; j < obj.length; ++j) {
          if(obj.options[j].value == newValue) {
              obj.selectedIndex = j;
              break;
          }
      }
    break;
    case 'select-multiple' :
      var isArray = (newValue.constructor.toString().indexOf('Array') > 0);
      //alert("setValue('"+fieldName+"','"+newValue+"')");
      for(var j = 0; j < obj.length; ++j) {
        obj.options[j].selected = (isArray) ? inArray(newValue,obj.options[j].value) : (obj.options[j].value == newValue);
      }
    break;
    case 'radio' :
      if(obj.length == 0 || newValue.length == 0) {
          for(var j = 0 ; j < obj.length ; ++j) {
              obj[j].checked = false;
          }
      }else{
          for(var j = 0 ; j < obj.length ; ++j) {
              if(obj[j].value == newValue)
              obj[j].checked = true;
          }
      }
    break;
    case 'checkbox' :
      var mount = Array(), m = 0;
      if(obj.length) {
          for(var j = 0 ; j < obj.length ; ++j) {
            if(obj[j].checked) { mount[m] = obj[j].value; m++; }
          }
      }else{
          obj.checked = (empty(newValue) || newValue == '0' || newValue == 'f') ? false : true;
      }
    break;
    case 'text' :
    default :
        obj.value = newValue;
    break;
  }
}

function fillValues(fieldName,arrKeys,arrValues,alertOnNotFound)
{



}


function selectAll(fieldName)
{
    var obj = findObj(fieldName);
    if(!obj) {
        alert('selectAll() say: Campo "'+fieldName+'" não foi encontrado');
        return null;
    }

    var tipo = fieldType(fieldName); 
    //alert('selectAll() say: Campo "'+fieldName+'" tipo "'+tipo+'"'); //debug

    switch(tipo) {
      case 'text' :
        obj.focus();
        obj.select();
      break;
      case 'select-one' :
        obj.multiple = true;
        for(var i = 0 ; i < obj.options.length ; ++i) {
            obj.options[i].selected = true;
        }
        obj.multiple = false;
      break;
      case 'select-multiple' :
        for(var i = 0 ; i < obj.options.length ; ++i) {
            obj.options[i].selected = true;
        }
      break;
      case 'checkbox' :
        if(obj.length) {
            for(var i = 0 ; i < obj.length ; ++i) {
                obj[i].checked = true;
            }
        }else{
            obj.checked = true;
        }
      break;
    }

}

function setOption(fieldName,newValue,newText,alertOnNotFound)
{
  var obj = findObj(fieldName);
  if(!obj) {
      if(alertOnNotFound != false) alert('setValue() say: Campo "'+fieldName+'" não foi encontrado');
      return null;
  }

  var tipo = fieldType(fieldName,alertOnNotFound); //alert(tipo); //debug

  //alert('setValue() say: Campo "'+fieldName+'" tipo "'+tipo+'"');

  if(empty(newText)) newText = newValue;
  
  switch(tipo) {
    case 'select' :
    case 'select-one' :
    case 'select-multiple' :
        obj.options[obj.options.length] = new Option(newText,newValue);
    break;
  }
}

function invertCheckbox(fieldName)
{
    var obj = findObj(fieldName);
    if(obj) {
        obj.checked = !obj.checked;
    }
}

function setSelectValue(fieldName,lineId,lineFields,saveFields,lineIdTargetMode,lineSep) 
{

  // parametros
  
  if(!saveFields) { alert('setSelectValue() say: Parâmetro saveFields obrigatório'); return false; }
  if(!fieldName)  { alert('setSelectValue() say: Parâmetro strFields obrigatório');  return false; }
  if(!lineId)     { alert('setSelectValue() say: Parâmetro lineId obrigatório');     return false; }
  
  if(!lineIdTargetMode) lineIdTargetMode = 'value'; // permitidos: value,value1,text,text1
  if(!lineSep) lineSep = ';';

  var fields = new Array();
  var values = new Array();

  saveFields = saveFields.split(lineSep);

  for(i in saveFields) {
      v = saveFields[i].split('=');
      fields[i] = v[0];
      values[i] = v[1];
  }

  //alert(fields); //debug
  //alert(values); //debug
  
  // objeto <select>

  var obj = findObj(fieldName);
  if(!obj) { alert('setSelectValue() say: Campo \''+fieldName+'\' não foi encontrado'); return false; }
  if(!obj.length) { alert('setSelectValue() say: Campo \''+fieldName+'\' não possui <options>'); return false; }
  //if(obj.length == 0) return false;
  
  // procura linha

  for(var i = 0; i <= obj.length; i++)
  {
      if(obj.options[i].value == lineId)
      {
          // encontrou linha

          obj.options[i].selected = true;
          inlineFields = obj.options[i].text.split(lineSep);

          try{
          
              // cria variáveis dos valores da linha

              for(inlineFieldId in inlineFields) {
                  inlineFieldName = lineFields[inlineFieldId];
                  setvar = 'var '+inlineFieldName+' = inlineFields['+inlineFieldId+'];'; //alert(setvar); //debug
                  eval(setvar);
              }

              // altera as variáveis com base na string saveFields

              for(saveFieldId in saveFields) {
                  saveFieldName = fields[saveFieldId];
                  setvar = ''+saveFieldName+' = values['+saveFieldId+'];'; //alert(setvar); //debug
                  eval(setvar);                  
              }

              // recria a linha

              var newLine = new Array();

              for(campoId in info) {
                  campoNome = camposJavascript[campoId];
                  setvar = 'newLine['+campoId+']  = '+campoNome+';'; //alert(setvar); //debug
                  eval(setvar);
              }

              // salva a linha

              var newLineStr = '';
              
              for(var c = 0; c < newLine.length; c++) {
                  if(c > 0) newLineStr+=lineSep; newLineStr+= newLine[c];
              }

              obj.options[i].text = newLineStr;
              
              return newLineStr;
              
              //alert('newLine: '+obj.options[i].text);

          }catch(e){
              alert('setSelectValue() say:'+e.message);
          }

          break; // basta a primeira ocorrencia
      }
      
  }
  
  return false; // não encontrado
  
}

function focusForm(formName) 
{
  if(document.forms) 
  {
    var theElems = findObj(formName).elements;    
    for (i = 0; i < theElems.length; i++) 
    {
      theElem = theElems[i];
      if(theElem.type == 'text') {
        theElem.focus();
        break;
      }
    }
  }
}

function disable(fieldName)
{
    var obj = findObj(fieldName);
    obj.disabled = true;
}

function enable(fieldName)
{
    var obj = findObj(fieldName);
    obj.disabled = false;
}

function resetForm(formName) 
{
    var obj = findObj(formName);
    obj.reset();

    var theElems = obj.elements;    
    for (i = 0; i < theElems.length; i++) 
    {
      theElem = theElems[i];
      try {
        theElem.disabled = false;
      }catch(e) { }
    }

}

//-->