 var fieldFocused = null;
 var locked = false;
 
/** 
 * Formata um numero em moeda R$.
 */
 
function formatCurrency(num) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
		num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
	cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
	num = num.substring(0,num.length-(4*i+3))+'.'+
	num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + '$' + num + ',' + cents);
}
 
/**
 * Habilita ou desabilita todos os botoes do formulario (incluindo botoes de submissao e reset).
 */ 
function enableDisableAllFormButtons(theForm,operation) {

   for (var i=0;i<theForm.elements.length;i++) {
   
      if (theForm.elements[i].type.indexOf('button')!=-1 ||
      	  theForm.elements[i].type.indexOf('submit')!=-1 ||
      	  theForm.elements[i].type.indexOf('reset')!=-1) {
      	  
      	  if (operation = "disable" ) {
	      	  theForm.elements[i].disabled = true;
	      } else  
      	  if (operation = "enable" ) {
	      	  theForm.elements[i].disabled = false;
	      }   
      } 
      
   } // for.
}

/**
 * Contador para dados digitados em um campo de texto de um formulario.
 */ 
function textCounter( field, countfield, maxlimit ) {
  if ( field.value.length > maxlimit )
  {
    field.value = field.value.substring( 0, maxlimit );
//    alert( 'Textarea value can only be 255 characters in length.' );
    return false;
  }
  else
  {
    countfield.value = maxlimit - field.value.length;
  }
}
 
// Dado um radio button passado como parametro retorna o valor correspondente ou null caso nao tiver sido definido.
function getRadioValue(theRadio) {
  var indexChecked = -1;
  for (i=0;i<theRadio.length;i++){
   if (theRadio[i].checked==true) {
    indexChecked=i;
    break;
   } 
  } // for.

  return indexChecked!=-1 ? theRadio[indexChecked].value : null;  
}


// Coloca o foco no primeiro campo que estiver habilitado e nao estiver em branco
function focusOnFirstEmptyField(theForm) {

   for (var i=0;i<theForm.elements.length;i++) {
	     if (theForm.elements[i].disabled == true || theForm.elements[i].type.indexOf('hidden')!=-1) continue;
	   
  //     if (theForm.elements[i].type.indexOf('text')!=-1) {
         if (trim(theForm.elements[i].value).length==0) {
     //    	alert("focando elemento: "+theForm.elements[i].name);
			theForm.elements[i].focus();
			break;
         } 
	 //  } 
	      	
   } // for.
}

// Funcao que verifica se todos os campos textos do formulario estao vazios.
function areTextsInFormBlanks(theForm) {
 var blank = true;
 
 for (var i=0;blank && i<theForm.elements.length;i++) {
     if (theForm.elements[i].type=='text' || 
     	 theForm.elements[i].type=='textarea') {
     	 blank = blank && trim(theForm.elements[i].value).length==0;
     } 
  } // for.
  
  return blank;
}

// Funcao para impressao
 function printWindow(){
	browserVersion = parseInt(navigator.appVersion)
	if (browserVersion >= 4) window.print()
 }

// Trim whitespace from left and right sides of s.
function trim(s) {
      return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
}

// Trim os campos textos e capitaliza os text-fields.
function trimAndUpperCaseForm(theForm) {
  for (var i=0;i<theForm.elements.length;i++) {
     if (theForm.elements[i].type=='text' || 
     	 theForm.elements[i].type=='textarea') {
     	 theForm.elements[i].value = trim(theForm.elements[i].value);
     	 if (theForm.elements[i].type=='text') {
     	   if (theForm.elements[i].name.toLowerCase().indexOf("url")!=-1) continue;
     	   theForm.elements[i].value = theForm.elements[i].name.toLowerCase().indexOf("email")!=-1 || theForm.elements[i].name.toLowerCase().indexOf("login")!=-1 ?  theForm.elements[i].value.toLowerCase() : theForm.elements[i].value.toUpperCase();
     	 }
     } 
  } // for.
}

// Trim todos os campos textos de um formulario.
function trimForm(theForm) {

  for (var i=0;i<theForm.elements.length;i++) {
     if (theForm.elements[i].type=='text' || 
     	 theForm.elements[i].type=='textarea') {
     	 theForm.elements[i].value = trim(theForm.elements[i].value);
     } 
  } // for.
  
}

/*
 * Esta funcao seleciona o option do select a partir do valor:
 */
 function setOptionValue(obj,value) {
   if (obj!=null) {
 		for (var i=0;i<obj.options.length;i++) {
			if (obj.options[i].value == value) {
			    obj.selectedIndex = i;
			    break;
			}	
		} // for      
   }
 }
 
/*
 * Esta funcao vasculha o historico de URLs do browser e retorna a ultima URL diferente da pagina atual.
 */
function do_back() {
 //alert('Tamanho do history:'+history.length);
 for (var i=1;i<window.history.length;i++) {
    alert("laco "+i+": "+window.history[i]);
    /*
    history = history.previous;
    alert("history="+history.current+",href atual="+location.href);
    if (history.current != location.href) {
       alert("Diferentes!");
       history.go(history.current);
       break;
    }
    */
 }
}
/*
 * Esta funcao limpa os campos do formulario passado como parametro.
 */
function reset(theForm) {
  if (theForm==null) {
     theForm = document.forms[0];
  }
  for (var i=0;i<theForm.elements.length;i++) {
     if (theForm.elements[i].type=='text' || 
     	 theForm.elements[i].type=='textarea') {
     	 theForm.elements[i].value = "";
     } else 
     if (theForm.elements[i].type=='checkbox') {
        theForm.elements[i].checked = false;
     } else
     if (theForm.elements[i].type=='radio' || 
     	 theForm.elements[i].type=='select') {
        theForm.elements[i].selected = false;
     } 
  } // for.
}

/* Function for showing and hiding elements that use 'display:none' to hide */
function toggleDisplay(targetId) {
   if (document.getElementById) {
       target = document.getElementById(targetId);
       if (target.style.display == "none"){
           target.style.display = "";
       } else {
           target.style.display = "none";
       }
   }
} 

 function checkUncheck(controllerObj,checkboxesStr) {
   var formFound = false;
   for (var f=0;!formFound && f<document.forms.length;f++) {
      for (var e=0;e<document.forms[f].elements.length;e++) {
         if (document.forms[f].elements[e].type=='checkbox' && (checkboxesStr==null || document.forms[f].elements[e].name==checkboxesStr)) {
            formFound = true;
            if (document.forms[f].elements[e].disabled == false) {
            	document.forms[f].elements[e].checked = controllerObj.checked;
            }
         }
      } // for e.
   } // for f.
 }
 
 function focusField(field) {
    if (field!=null && (fieldFocused==null || field.name != fieldFocused.name) ) {
      	  var found = false;
	      for (var f=0;!found && f<document.forms.length;f++) {
      		 for (i=0;!found && i<document.forms[f].elements.length;i++) {
      		     if (document.forms[f].elements[i].name == field.name) {
			          fieldFocused = field;
			          locked = true;
			          found = true;
      		     } 
      		 } // for i.
      	  } // for f.
    }
    
 }

 /**
  * Da um forward para o proximo campo.
  * @param field - O campo atual.
  * @param enabled - Se esta funcionalidade esta habilitada.
  * @param force - Se forca passar para o outro campo mesmo que nao se tenha completado o maximo que o campo atual permite.
  */
 function forwardField(field,enabled,force) {
    if (enabled && field!=null) {
       var maxsize = (field.maxLength>0) ? field.maxLength : field.size;
       var pos = field.value.length;
       
   //    alert (field.name+": maxsize="+maxsize+", pos="+pos);
   //    alert("locked : "+locked);
       
       if (force || (pos>=maxsize && !locked)) {
          //alert("Max size reached:"+maxsize);
      	  var found = false;
	      for (var f=0;!found && f<document.forms.length;f++) {
	          var i = getElementsIndex(document.forms[f],field.name);
	          if (i==-1) continue;
		 
	          while (i!=-1 && (i+1 < document.forms[f].elements.length) && (document.forms[f].elements[i+1].disabled || document.forms[f].elements[i+1].type=='hidden')) { i++; }        
	          
	          if (i+1 < document.forms[f].elements.length) {
	          	//alert ("atual elements name:"+document.forms[f].elements[i+1].name+" disabled: "+document.forms[f].elements[i+1].disabled);
	          	document.forms[f].elements[i+1].focus();
	          	document.forms[f].elements[i+1].select();
	          	found = true;
	          }
	          
	          
	      } // for f.
       }	
       
       locked = false;
    }
 }
 
 function getElementsIndex(form,fieldname) {
    
    if (form==null) {
      form = document.forms[0];
    }
    
    for (var i=0;i<form.elements.length;i++) {
        if (form.elements[i].name == fieldname) {
           return i;
        }
    }
    
    return -1;
 }
 
 /*
  * Coloca os dados de um determinado campo de um formulario em letra maiuscula.
  */
 function toUppercase(field) {
    if (field!=null) {
      	  var found = false;
	      for (var f=0;!found && f<document.forms.length;f++) {
      		 for (i=0;!found && i<document.forms[f].elements.length;i++) {
      		     if (document.forms[f].elements[i].name == field.name) {
      		          document.forms[f].elements[i].value =  document.forms[f].elements[i].value.toUpperCase();
			          found = true;
      		     } 
      		 } // for i.
      	  } // for f.
    }
 }
 
 /*
  * Coloca os dados de um determinado campo de um formulario em letra minuscula.
  */
 function toLowercase(field) {
    if (field!=null) {
      	  var found = false;
	      for (var f=0;!found && f<document.forms.length;f++) {
      		 for (i=0;!found && i<document.forms[f].elements.length;i++) {
      		     if (document.forms[f].elements[i].name == field.name) {
      		          document.forms[f].elements[i].value =  document.forms[f].elements[i].value.toLowerCase();
			          found = true;
      		     } 
      		 } // for i.
      	  } // for f.
    }
 }
 
 function filterField(field,ignore) {
    if (field!=null && !ignore) {
      	  var found = false;
	      for (var f=0;!found && f<document.forms.length;f++) {
      		 for (i=0;!found && i<document.forms[f].elements.length;i++) {
      		     if (document.forms[f].elements[i].name == field.name) {
      		         field.value = filterString(document.forms[f].elements[i].value,ignore);
			         found = true;
      		     } 
      		 } // for i.
      	  } // for f.
    }
    
 }

  
 function filterString(str,ignore) {
    var newstr = "";
    if (!ignore) {
    
	  for (var i=0;i<str.length;i++) {
		
	      var code = charcode(str.charAt(i));
	      //alert('charcode from '+str.charAt(i)+':'+code);

		  if ( code >= 192 && code<=195) {
		    newstr = newstr + "A";
		  } else
		  if ( code >= 224 && code<=227) { 
		    newstr = newstr + "a";
		  } else
	  	  if (code >= 200 && code<=202) {
		    newstr = newstr + "E";
	      } else
	      if ( code >= 232 && code<=234) {
	    	newstr = newstr + "e";
	   	  } else
	  	  if ( code >= 204 && code<=206) {
	    	newstr = newstr + "I";
	   	  } else
	  	  if ( code >= 236 && code<=238) {
	  	  	newstr = newstr + "i";
	  	  } else
	  	  if (code >= 210 && code<=213) {
	    	newstr = newstr + "O";
	      } else
	  	  if (code >= 242 && code<=245) {
	  	  	newstr = newstr + "o";
	  	  } else
	  	  if (code >= 217 && code<=219) {
	  	  	newstr = newstr + "U";
	  	  } else
	  	  if (code >= 249 && code<=251) {
	  	  	newstr = newstr + "u";
	  	  } else
	  	  if (code == 199) {
	  	  	newstr = newstr + "C";
	  	  } else 
	  	  if (code == 231) {
	  	  	newstr = newstr + "c";
	  	  } else {
	    	newstr = newstr + ""+str.charAt(i);
	      }
      
       } // for.
    }
    return newstr;
 }
 
 function charcode(ch) {
   var character = ""+ch;
   return character.charCodeAt(0);       
 }
 
 function filterChar(newch,ch,ignore) {
    
    if (!ignore) {
  
      var code = charcode(ch);
      //      alert('charcode from '+ch+':'+code);
      
	  if ( code >= 192 && code<=195) { //����
	     return 'A';
	  } else 
	  if ( code >= 224 && code<=227) { //����
	    return 'a';
	  } else
	  if ( code >= 200 && code<=202) { //���
	    newch = "E";
	  } else
	  if ( code >= 232 && code<=234) { //���
	    return 'e';
	  } else
	  if ( code >= 204 && code<=206) { //���
	    return 'I';
	  } else
	  if ( code >= 236 && code<=238) { //���
	    return 'i';
	  } else
	  if (code >= 210 && code<=213) { //����
	    return 'O';
	  } else
	  if (code >= 242 && code<=245) { //����
	    return 'o';
	  } else
	  if (code >= 217 && code<=219) { //���
	    return 'U';
	  } else
	  if (code >= 249 && code<=251) { //���
	    return 'u';
	  } else
	  if (code == 199) { //�
	    return 'C';
	  } else 
	  if (code == 231) { //�
	    return 'c';
	  } else {
	    return ch;
	  }
	  
   }
 }
 
 /**
  * Esta funcao habilita/desabilita os campos passados no 1o parametro e separados por virgulas.
  */
 function toggleFields(fields,disabled) {
    var tokenField = fields.tokenize(","," ",true);
  //  alert("number of tokens: "+tokenField.length);
    
    for (var i=0;i<tokenField.length;i++) {
        var found = false;
	    for (var f=0;!found && f<document.forms.length;f++) {
	      for (j=0;!found && j<document.forms[f].elements.length;j++) {
		        if (document.forms[f].elements[j].name == tokenField[i]) {
			 //   	alert("element name: "+document.forms[f].elements[j].name);
			    	document.forms[f].elements[j].disabled = disabled;
			    	found = true;
			    }
	      } // for j.
	    } // for f.
    } // for i.
    
}
 
 function showHiddenItem(itemId) {
	 document.getElementById(itemId).style.display = "block";
 }
 
 function hiddenItem(itemId) {
	 document.getElementById(itemId).style.display = "none";
 }
 
 
