
	function addOpt(obj, cod, txt){ 						 
		if (typeof obj == 'string') obj = document.getElementById(obj);		
		var opt = new Option(txt, cod);
		obj.options[obj.length] = opt;
	}
	
	function autotab(original,destination){ 				 
		if(original.getAttribute&&original.value.length==original.getAttribute("maxlength"))destination.focus() 
	}
	
	
	function dataValida(strData){ //recebe uma data no formato DD/MM/AAAA
		var expReg = /^(([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/[1-2][0-9]\d{2})$/;
		var msgErro = 'Formato inválido de data.';
		if(strData=='')return msgErro;
		if (strData.match(expReg)){
			var dia = strData.substring(0,2);
			var mes = strData.substring(3,5);
			var ano = strData.substring(6,10);
			
			if(mes==0 || dia==0)return msgErro;
			
			if(   (mes==4 || mes==6 || mes==9 || mes==11)   &&   (dia > 30)  ){
				msgErro = "Data incorreta! O mês especificado contém no máximo 30 dias.";
				return msgErro;
			} else {				
				if(ano%4!=0 && mes==2 && dia>28){
					msgErro = "Data incorreta! O mês especificado contém no máximo 28 dias."
					return msgErro;
				} else {
					if(ano%4==0 && mes==2 && dia>29){
						msgErro = "Data incorreta! O mês especificado contém no máximo 29 dias."
						return msgErro;
					} else {
						return "Ok";
					}
				}
			}
		} else return msgErro;
	}
	
	function divLoad(id, largura, altura, target, visible, escuro){
		var _id = id;
		var _largura = largura;
		var _altura = altura;
		var _target = target;
		var _visible = visible;
		var _classeFundo = (escuro) ? '2' : '';
		
		var _htmlDiv = ''+
			'<div id="'+ _id +'" class="divLoad_Container" boxType="divLoad" style="width:'+ _largura +'px; height:'+ _altura +'px; display:none;">'+
            '  <div class="divLoad_Fundo'+_classeFundo+'" boxType="divLoad" style="width:'+ _largura +'px; height:'+ _altura +'px;"></div>'+
            '  <div class="divLoad_BoxTexto" boxType="divLoad" style="width:'+ _largura +'px; height:'+ _altura +'px;">'+
            '    <table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0">'+
            '      <tr>'+
            '        <td align="center" valign="middle" style="padding:5px;">'+
			'		   <img src="../_imgs/ajaxLoader_1.gif" width="32" height="32" />'+
			'		 </td>'+
            '      </tr>'+
            '    </table>'+
            '  </div>'+
            '</div>';

		this.getHTML = function(){
			return $('#'+_id).html();
		}
		
		this.setAltura = function(altura){
			$('div[@boxType=divLoad]', '#'+target+'').css("height", altura);
		}
		
		this.setLargura = function(largura){
			$('div[@boxType=divLoad]', '#'+target+'').css("width", largura);
		}
		
		this.show = function(){
			show(_id);
		}
		
		this.hide = function(){
			hide(_id);
		}
		
		//Construtor
		setHTML(_htmlDiv, _target);
		if(_visible)show(_id);
	}

	function existe(idElement){
		if(getElement(idElement)){
			return true;
		}else{
			return false;
		}
	}

	function extensaoInvalida(Arquivo, ExtensoesValidas){	 
	//Para chamar a função use: if(ExtensaoInvalida(Nome_do_Form.Nome_do_Campo.value, "jpg,gif,png"))return false;
	//Onde o segundo parâmetro é uma string contendo todas as extensões permitidas separadas por vírgula
		ExtensoesValidas = ExtensoesValidas.toLowerCase(); //Certificando-se de que as extensões estarão minúsculas
		arrExtensoesValidas = ExtensoesValidas.split(","); //Criando o array de extensões
		
		// Se a string referente ao arquivo for menor do que 4 caracteres ou se 
		// esta mesma string não possuir o caracter "\" deve retornar o erro
		if(Arquivo.lenght < 8  ||  Arquivo.indexOf(":\\") == -1){
			alert("Informe um arquivo válido para envio.");
			return true;
		}
		
		ExtensaoDoArquivoEnviado = Arquivo.slice(Arquivo.lastIndexOf(".")+1).toLowerCase();		
		
		ExtensaoOk = false;
		for (var i = 0; i < arrExtensoesValidas.length; i++) {
			if (arrExtensoesValidas[i] == ExtensaoDoArquivoEnviado) { ExtensaoOk = true; break; }
		}
		
		if(ExtensaoOk)return false;
		else {
			if(arrExtensoesValidas.length > 1)
				msg = ExtensoesValidas.slice(0, ExtensoesValidas.lastIndexOf(",")) + " ou " + ExtensoesValidas.slice(ExtensoesValidas.lastIndexOf(",")+1);
			else
				msg = ExtensoesValidas
			alert("Extensão inválida.\nA extensão do arquivo tem que ser: "+msg);
			return true;
		}
	}
	
	function formataData(Data){								 
		/*--------------  Função de formatação de data  ---------------
		Esta função Recebe como parâmetros uma data. Esta data pode ser 
		passada de duas maneiras. Quando passada no formato AAAAMMDD, a 
		função a converte para DD/MM/AAAA. Já na outra situação, onde a 
		função recebe a data no formato DD/MM/AAAA, a data é convertida
		para o formato AAAAMMDD.									 */
		(Data.indexOf("/")!=-1)?
			Data = Data.slice(6,10) + Data.slice(3,5) + Data.slice(0,2) : 
			Data = Data.slice(6,8) + "/" + Data.slice(4,6) + "/" + Data.slice(0,4);
		return Data;
	}
	
	function formObserver(									 Form, boxType, boxSubmit, boxSubmitiIcn, boxSubmitTxt, boxStatus){
		this.form = Form;
		this.boxMsg_Type = boxType;
		this.boxMsg_Submit = boxSubmit;
		this.boxMsg_SubmitIcn = boxSubmitiIcn;
		this.boxMsg_SubmitTxt = boxSubmitTxt;
		this.boxMsg_Status = boxStatus;
		this.arrElements = '';
		this.validaSendForm = true;
		
	}formObserver.prototype = {	
		addFormElement	: function (element) {
			this.arrElements.length++;
			this.arrElements[this.arrElements.length-1] = (typeof element == 'string') ? document.getElementById(element) : element;
		},
		delFormElement	: function (idElement) {
			var i, j = 0;
			var newArray = new Array(0);
			for (i = 0; i < this.arrElements.length; i++) {
				if(this.arrElements[i].id != idElement){
					newArray.length++;
					newArray[j] = this.arrElements[i];
					j++;
				}
			}
			this.arrElements = newArray;
		},
		dontSendForm	:function(){								 
			//Pode OU NÃO receber como parâmetro funções a serem executadas antes do envio do formulário
			if (this.validaSendForm) {				
				for (i=0; i<arguments.length; i++) eval(arguments[i]); //Executando as funções passadas como parâmetro
				return false;
			} else this.validaSendForm = true;
		},
		resetForm 		: function () {							 
			for (var i = 0; i < this.arrElements.length; i++) {
				setClass('', this.arrElements[i]);
				setValor ('', this.arrElements[i]);
			}
		},
		sendForm		: function(){								 
			//Pode OU NÃO receber como parâmetro funções a serem executadas antes do envio do formulário
			if (this.validaSendForm) {				
				for (i=0; i<arguments.length; i++) eval(arguments[i]); //Executando as funções passadas como parâmetro
				document.getElementById(this.form).submit();
			} else this.validaSendForm = true;
		},
		setErro			: function (msgErro, elements) {
			if(this.validaSendForm){
				for (var i = 0; i < this.arrElements.length; i++) setClass('', this.arrElements[i]);
				
				for (var i = 1; i < arguments.length; i++) {
					var element = arguments[i];
					if (typeof element == 'string') element = document.getElementById(element);
					setHTML(msgErro, this.boxMsg_SubmitTxt);
					setClass('Input_Erro', element);
					setClass('td_TxtErro', this.boxMsg_SubmitTxt);
					setSrc('icn_MsgSubmit', '../_imgs/IcnErro.jpg');
				}
				
				$('#'+this.boxMsg_Submit).fadeIn("slow");
				//show(this.boxMsg_Submit);
				
				this.validaSendForm = false;		
			}
		},
		setFormElements	: function () {						 
			this.arrElements = arguments;	
			for (var i = 0; i < arguments.length; i++) {
				var element = arguments[i];
				if (typeof element == 'string') element = document.getElementById(element);
				this.arrElements[i] = element;
			}
		},
		setFocusMsg 	: function (element, msg, anotherTargetElementDisplay) {
			var focusBoxMsg = (arguments.length == 3) ? anotherTargetElementDisplay : this.boxMsg_Status;			
			
			$("#"+element).bind("focus", function(){
				setHTML(msg, focusBoxMsg);
			});
			
			$("#"+element).bind("blur", function(){
				setHTML('', focusBoxMsg);
			});
		},
		valida 			: function (element, vlrIndevido, msgErro, fncOpcional) {	 
			if(this.validaSendForm){
				for (var i = 0; i < this.arrElements.length; i++) setClass('', this.arrElements[i]);
				if (typeof element == 'string') element = document.getElementById(element);
				if(element.value == vlrIndevido){
					setHTML(msgErro, this.boxMsg_SubmitTxt);
					setClass('Input_Erro', element);
					setClass('td_TxtErro', this.boxMsg_SubmitTxt);
					setSrc('icn_MsgSubmit', '../_imgs/IcnErro.jpg');
					
					
					$('#'+this.boxMsg_Submit).fadeIn("slow");
					//show(this.boxMsg_Submit);	
					
					setFocus(element);
					
					if(arguments.length>3)eval(fncOpcional);
					
					this.validaSendForm = false;
				}else{
					hide(this.boxMsg_Submit);
					this.validaSendForm = true;
				}
			}
		},
		validaCondicao	: function (booleanResult, element, msgErro, fncOpcional) {	 
			if(this.validaSendForm){
				for (var i = 0; i < this.arrElements.length; i++) setClass('', this.arrElements[i]);
				if (typeof element == 'string') element = document.getElementById(element);
				if(booleanResult){ //se o resultado da condição passada por parâmetro for verdadeiro
					setHTML(msgErro, this.boxMsg_SubmitTxt);
					setClass('Input_Erro', element);
					show(this.boxMsg_Submit);
					setFocus(element);
					
					if(arguments.length>3)eval(fncOpcional);
					
					this.validaSendForm = false;
				}else{
					hide(this.boxMsg_Submit);
					this.validaSendForm = true;
				}
			}
		},
		validaEmail		: function (element){
			if(this.validaSendForm){
				var msgDeErro;
				var email = getValor(element);
				/* Testa um email no formato teste@testando. + com.br (3.2) ou + .com (3) ou + .br (2) -----------
				-- NÃO podem comecar com numeros. Antes da @ podem contar numeros letras, pontos e undescore -----
				-- O Dominio pode conter caracteres e numeros porem os seus sufixos apenas caracteres ----------*/
				var objRegExp  = /^[A-Za-z]([\w\.]*)@([A-Za-z0-9\.]*)\.(([A-Za-z]{3}\.[A-Za-z]{2}$)|([A-Za-z]{3}$)|([a-z]{2}$))/i ;
				
				msgDeErro = ( objRegExp.test(email) ) ? 'SemErros' : 'Email incorreto! Informe um email válido' ;
				
				if(msgDeErro == 'SemErros'){
					hide(this.boxMsg_Submit);
					this.validaSendForm = true;
				}else{
					setHTML(msgDeErro, this.boxMsg_SubmitTxt);
					setClass('Input_Erro', element);
					show(this.boxMsg_Submit);
					setFocus(element);
					this.validaSendForm = false;
				}
			}
		},
		validaExtensao 	: function(element, extensoesValidas){
			if(this.validaSendForm){
				var msgDeErro = 'SemErros';
				for (var i = 0; i < this.arrElements.length; i++) setClass('', this.arrElements[i]);
				if (typeof element == 'string') element = document.getElementById(element);
				
				//Para chamar a função use: if(ExtensaoInvalida(Nome_do_Form.Nome_do_Campo.value, "jpg,gif,png"))return false;
				//Onde o segundo parâmetro é uma string contendo todas as extensões permitidas separadas por vírgula
				extensoesValidas = extensoesValidas.toLowerCase(); //Certificando-se de que as extensões estarão minúsculas
				arrExtensoesValidas = extensoesValidas.split(","); //Criando o array de extensões
				
				// Se a string referente ao arquivo for menor do que 4 caracteres ou se 
				// esta mesma string não possuir o caracter "\" deve retornar o erro
				if(getLen(element) < 8  ||  element.value.indexOf(":\\") == -1){
					msgDeErro = 'Informe um arquivo válido para envio.';
				}
				
				ExtensaoDoArquivoEnviado = element.value.slice(element.value.lastIndexOf(".")+1).toLowerCase();	
				
				ExtensaoOk = false;
				for (var i = 0; i < arrExtensoesValidas.length; i++) {
					if (arrExtensoesValidas[i] == ExtensaoDoArquivoEnviado) { ExtensaoOk = true; break; }
				}
				
				if(ExtensaoOk == false) {
					if(arrExtensoesValidas.length > 1)
						msg = extensoesValidas.slice(0, extensoesValidas.lastIndexOf(",")) + " ou " + extensoesValidas.slice(extensoesValidas.lastIndexOf(",")+1);
					else {
						msg = extensoesValidas
					}
					msgDeErro = 'Extensão inválida. A extensão do arquivo tem que ser: ' + msg;
				}
				
				if(msgDeErro == 'SemErros'){
					hide(this.boxMsg_Submit);
					this.validaSendForm = true;
				}else{
					setHTML(msgDeErro, this.boxMsg_SubmitTxt);
					setClass('Input_Erro', element);
					show(this.boxMsg_Submit);
					setFocus(element);
					this.validaSendForm = false;
				}
			}
		},
		validaHora 		: function(element){						 
			if(this.validaSendForm){
				var msgDeErro = '"' + getValor(element) + '" NÃO é um horário/tempo válido. Você deve informar no seguinte formato: HH:MM';
				
				//var reTime1 = /^\d{2}:\d{2}$/;				//Horário HH:MM simples — aceita dois pares de dois dígitos separados por dois-pontos (:); pode ser usado para hora:minutos ou ainda para minutos:segundos, porém não valida as faixas de valor válidos para os dígitos, aceitando assim qualquer valor entre 00 e 99.
				var reTime2 = /^([0-1]\d|2[0-3]):[0-5]\d$/;		//Horário HH:MM 24h — aceita horas na faixa 00-23 e minutos 00-59, separados por dois-pontos.
				//var reTime3 = /^(0[1-9]|1[0-2]):[0-5]\d$/;	//Horário HH:MM 12h — aceita horas na faixa 01-12 e minutos 00-59, separados por dois-pontos.
				//var reTime4 = /^\d+:[0-5]\d:[0-5]\d$/;		//Tempo horas:MM:SS — aceita qualquer quantidade de horas (0 ou mais, um ou mais dígitos), minutos 00-59 e segundos 00-59, todos separados por dois-pontos.
				//var reTime5 = /^\d+:[0-5]\d:[0-5]\.\d{3}\d$/;	//Tempo horas:MM:SS.mili — similar ao anterior, porém inclui 3 dígitos finais para milisegundos 000-999, separados dos anteriores por ponto (.).
		
				eval("reTime = reTime" + 2);
				if (reTime.test(getValor(element)))msgDeErro = 'SemErros';
				
				if(msgDeErro == 'SemErros'){
					hide(this.boxMsg_Submit);
					this.validaSendForm = true;
				}else{
					setHTML(msgDeErro, this.boxMsg_SubmitTxt);
					setClass('Input_Erro', element);
					show(this.boxMsg_Submit);
					setFocus(element);
					this.validaSendForm = false;
				}		
			}
		},
		validaData 		: function(element, fncOpcional){						 
			if(this.validaSendForm){
				if (typeof element == 'string') element = document.getElementById(element);
				if(element.value=="")return true;
				var expReg = /^(([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/[1-2][0-9]\d{2})$/;
				var msgErro = 'Formato inválido de data. Utilize "DD/MM/AAAA".';
				if ((element.value.match(expReg)) && (element.value!='')){
					var dia = element.value.substring(0,2);
					var mes = element.value.substring(3,5);
					var ano = element.value.substring(6,10);
					if(  (mes==4 || mes==6 || mes==9 || mes==11)   &&   (dia > 30)  ){
						msgErro = "Dia incorreto ! O mês especificado contém no máximo 30 dias.";
					} else {
						if(ano%4!=0 && mes==2 && dia>28){
							msgErro = "Data incorreta! O mês especificado contém no máximo 28 dias."
						} else {
							if(ano%4==0 && mes==2 && dia>29){
								msgErro = "Data incorreta! O mês especificado contém no máximo 29 dias."
							} else {
								msgErro = 'SemErros';
							}
						}
					}
				} 
				if(msgErro == 'SemErros'){
					hide(this.boxMsg_Submit);
					this.validaSendForm = true;
				}else{
					setHTML(msgErro, this.boxMsg_SubmitTxt);
					setClass('Input_Erro', element);
					show(this.boxMsg_Submit);
					setFocus(element);
					
					if(arguments.length>1)eval(fncOpcional);
					
					this.validaSendForm = false;
				}
			}
		}
	}
	
	function getAltura(element){							 
		return $('#'+element).height();
	}
	
	function getAlturaDoc(){								 
		return document.body.offsetHeight;
	}
	
	function getAlturaTela(){								 
		return document.body.clientHeight;
	}	
	
	function getAttr(id, attr){
		//Só funciona junto com a jQuery
		return $('#'+id).attr(attr);
	}
	
	function getElement(id){ 								 //Retorna o objeto especificado pelo ID passado como parâmetro
		return document.getElementById(id);		
	}
	
	function getLarguraDoc(){								 
		return document.body.offsetWidth;
	}
	
	function getLarguraTela(){								 
		return document.body.clientWidth;
	}
	
	function getLen(element){								 //Retorna o tamanho da string
		if (typeof element == 'string') element = document.getElementById(element);
		return element.value.length;
	}
	
	function getOptLen(element){							 
		if (typeof element == 'string') element = document.getElementById(element);
		return element.options.length;
	}
	
	function getOptT(element, indice){						 
		obj = (typeof element == 'string') ? document.getElementById(element) : element;
		return (typeof(indice)=="number") ? obj.options[indice].text : obj.options[obj.selectedIndex].text;
	}
	
	function getOptV(id, indice){							 
		obj = document.getElementById(id);
		return (typeof(indice)=="number") ? obj.options[indice].value : obj.options[obj.selectedIndex].value;
	}
	
	function getScrollTop(){								 
		return document.body.scrollTop;
	}
	
	function getScrollLeft(){								 
		return document.body.scrollLeft;
	}
	
	function getSrc(element){						 
		if (typeof element == 'string') element = document.getElementById(element);
		return element.src;
	}
	
	function getTrimValor(id){ 								 
		return trim(document.getElementById(id).value);
	}
	
	function getValor(id){ 									 
		return document.getElementById(id).value;
	}
	
	function getXMLvalue(objXML, elemento, indice){ 		 
		(isNaN(indice))? i=0 : i=indice;
		elemento = objXML.getElementsByTagName(elemento);
		(elemento[i].hasChildNodes()) ? valor=elemento[i].firstChild.nodeValue : valor="";
		return valor;
	}
	
	function getX(element){									 
		if (typeof element == 'string') element = document.getElementById(element);
		return element.offsetLeft;
	}
	
	function getY(element){									 
		if (typeof element == 'string') element = document.getElementById(element);
		return element.offsetTop;
	}
	
	function habilita(){		 							 
		for (var i = 0; i < arguments.length; i++) {
			var element = arguments[i];
			if (typeof element == 'string') element = document.getElementById(element);
			element.disabled = false;
		}
	}

	function hide(){									 	 
		for (var i = 0; i < arguments.length; i++) {
			var element = arguments[i];
			if (typeof element == 'string') element = document.getElementById(element);
			element.style.display = "none";
		}
	}
	
	function left(str, n){									 
		if (n <= 0) 
			return "";
		else if (n > String(str).length)
	    	return str;
		else
	    	return String(str).substring(0,n);
	}
	
	function listboxTolistbox(boxOrigem, boxDestino){		 
		//<input type="button" id="Grupos"    value="Incluir &raquo;" onClick="move('Grupos', 'GruposSel');">
		//<input type="button" id="GruposSel" value="&laquo; Retirar" onClick="move('GruposSel', 'Grupos');">
		
		if (typeof boxOrigem == 'string') boxOrigem = document.getElementById(boxOrigem);
		if (typeof boxDestino == 'string') boxDestino = document.getElementById(boxDestino);
		
		var arrboxOrigem = new Array();
		var arrboxDestino = new Array();
		var arrLookup = new Array();
		var i;
		for (i = 0; i < boxDestino.options.length; i++) {
			arrLookup[boxDestino.options[i].text] = boxDestino.options[i].value;
			arrboxDestino[i] = boxDestino.options[i].text;
		}
		var fLength = 0;
		var tLength = arrboxDestino.length;
		for(i = 0; i < boxOrigem.options.length; i++) {
			arrLookup[boxOrigem.options[i].text] = boxOrigem.options[i].value;
			if (boxOrigem.options[i].selected && boxOrigem.options[i].value != "") {
				arrboxDestino[tLength] = boxOrigem.options[i].text;
				tLength++;
			} else {
				arrboxOrigem[fLength] = boxOrigem.options[i].text;
				fLength++;
		   }
		}
		arrboxOrigem.sort();
		arrboxDestino.sort();
		boxOrigem.length = 0;
		boxDestino.length = 0;
		var c;
		for(c = 0; c < arrboxOrigem.length; c++) {
			var no = new Option();
			no.value = arrLookup[arrboxOrigem[c]];
			no.text = arrboxOrigem[c];
			boxOrigem[c] = no;
		}
		for(c = 0; c < arrboxDestino.length; c++) {
			var no = new Option();
			no.value = arrLookup[arrboxDestino[c]];
			no.text = arrboxDestino[c];
			boxDestino[c] = no;
		}
	}
	
	function lTrim(value){									 
		// Removes left whitespaces	
		var re = /\s*((\S+\s*)*)/;
		return value.replace(re, "$1");	
	}
	
	function numRnd(qtd_rnd){						 	 	 
		qtd_rnd = (isNaN(qtd_rnd)) ? 10000 : qtd_rnd;
		return Math.floor(Math.random()*qtd_rnd);
	}
	
	function replaceBreakLine(str){							 
		var re = /<br>/g;
		return(str.replace(re, String.fromCharCode(13))); 
	}
	
	function replaceSubStr(str, subStrOriginal, subStrNova){
		var novaStr
		var regExp = eval('/'+ subStrOriginal +'/gi');
		
		novaStr = str.replace(regExp, subStrNova);
		
		return novaStr;
	}
	
	function request(varBuscada){							 
		//Iniciando a variável com o valor de retorno. Se não achar a variável procurada retorna ""
		var vlrBuscado = "";

		//Pegando a URL
		var url = document.URL;

		//Separando o endereço da página de seus argumentos (tudo o que vem depois da "?")
		url = url.substring(url.indexOf('?')+1,url.length);
		
		//Retirando o "jogo da velha" caso exista
		if(url.indexOf('#')!=-1)url=url.slice(0,url.indexOf('#'));
			
		//Criando um array com todos as duplas variável=valor passados na url
		var arrParams=url.split("&");
		
		//Procurando a variável solicitada
		for (i=0; i<arrParams.length; i++){
			varArray_Nome = arrParams[i].substring(0,arrParams[i].indexOf('='));
			varArray_Vlr  = arrParams[i].substring(arrParams[i].indexOf('=')+1,arrParams[i].length);
			if (varBuscada == varArray_Nome){
				vlrBuscado = varArray_Vlr;
				i = arrParams.length;
			}
		}
		return vlrBuscado;
	}
	
	function right(str, n){									 
	    if (n <= 0)
	       return "";
	    else if (n > String(str).length)
	       return str;
	    else {
	       var iLen = String(str).length;
	       return String(str).substring(iLen, iLen - n);
	    }
	}

	function rTrim(value){									 
		// Removes ending whitespaces
		var re = /((\s*\S+)*)\s*/;
		return value.replace(re, "$1");
	}
	
	function setAttr(id, attr, valor){
		//Só funciona junto com a jQuery
		$('#'+id).attr(attr, valor);
	}
	
	function setClass(classe, elements){ 					 
		for (var i = 1; i < arguments.length; i++) {
			var element = arguments[i];
			if (typeof element == 'string') element = document.getElementById(element);
			element.setAttribute('class', classe);
			element.setAttribute('className', classe);
		}
	}
		
	function setFocus(element){ 							 
		if (typeof element == 'string') element = document.getElementById(element);
		element.focus();
	}
	
	function setHTML(){			 							 
		// O primeiro parâmetro sempre deve ser o HTML e os demais 
		// os elementos onde esse html deve ser escrito
		html = arguments[0]; 
		for (var i = 1; i < arguments.length; i++) {
			var element = arguments[i];
			if (typeof element == 'string') element = document.getElementById(element);
			element.innerHTML = html;
		}
	}
	
	function setHTMLcss(){		 							 
		// O primeiro parâmetro sempre deve ser o HTML
		// O segndo parâmetro sempre deve ser a classe CSS e os demais
		// os elementos onde esse html deve ser escrito
		var html = arguments[0];
		var classeCSS = arguments[1];
		for (var i = 2; i < arguments.length; i++) {
			var element = arguments[i];
			if (typeof element == 'string') element = document.getElementById(element);
			setClass(classeCSS, element);
			element.innerHTML = html;
		}
	}
	
	function setInputErro(){								 
		for (var i=0; i<arguments.length; i++) {
			var element = arguments[i];
			if (typeof element == 'string') element = document.getElementById(element);
			setClass('Input_Erro', element);
		}		
	}
	
	function setOptV(id, indice, valor){					 
		document.getElementById(id).options[indice].value = valor;
	}
	
	function setOptT(id, indice, texto){					 
		document.getElementById(id).options[indice].text = texto;
	}
	
	function setSrc(element, caminho){						 
		if (typeof element == 'string') element = document.getElementById(element);
		element.src = caminho;
	}
	
	function setStyle(style, value, elements){				 /*
		 - Como Usar:
			* elements = todos os elementos passados por parâmetro. Podem ser at´248.
			* style = o estilo a ser mudado.
			* value = o valor a ser atribuido ao estilo defindo acima.
		 - Exemplos
			* onclick="setStyle('visibility','visible','orange')"
			* onmouseover="setStyle('color','red', this)"
			* onmouseout="setStyle('color','#00f', this)"
			* onclick="setStyle('visibility','hidden', 'orange')"*/ 
		for (var i = 2; i < arguments.length; i++) {
			var element = arguments[i];
			if (typeof element == 'string') element = document.getElementById(element);
			element.style[style] = value;
		}
	}

	function setValor(){ 							 		 
		valor = arguments[0]; //O primeiro parâmetro sempre deve ser o valor
		for (var i = 1; i < arguments.length; i++) {
			var element = arguments[i];
			if (typeof element == 'string') element = document.getElementById(element);
			element.value = valor;
		}
	}

	function setX(posicao, elements){						 
		for (var i = 1; i < arguments.length; i++) {
			var element = arguments[i];
			if (typeof element == 'string') element = document.getElementById(element);
			element.style.left = posicao;
		}
	}
	
	function setY(posicao, elements){						 
		for (var i = 1; i < arguments.length; i++) {
			var element = arguments[i];
			if (typeof element == 'string') element = document.getElementById(element);
			element.style.top = posicao;
		}
	}
	
	function show(){									 	 
		for (var i = 0; i < arguments.length; i++) {
			var element = arguments[i];
			if (typeof element == 'string') element = document.getElementById(element);
			element.style.display = "";
		}
	}
	
	function showHide(){								 	 
		for (var i = 0; i < arguments.length; i++) {
			var element = arguments[i];
			if (typeof element == 'string') element = document.getElementById(element);	
			element.style.display = (element.style.display == "none")? "" : "none";
		}
	}
	
	function soNum(e){										 
		/*-- Como usar:
		<input type="text" onkeypress="return soNum(event);">
		--------------------------------------------------------------*/
		var key = captEvent(e)
			
		if (key!=8 || key < 48 || key > 57) return (((key > 47) && (key < 58)) || (key==8));{
		    return true;
		}
	}

	function trocaSinalIcnMaisMenos(idIcn){
		var src = getSrc(idIcn);

		if(src.indexOf('_Mais.gif') >= 0){
			setSrc(idIcn, src.replace(/_Mais.gif/, '_Menos.gif'));
		}else{
			setSrc(idIcn, src.replace(/_Menos.gif/, '_Mais.gif'));
		}
	}

	function trim(value){									 
		// Removes leading and ending whitespaces
		return lTrim(rTrim(value));
	}
	
	function trOverOut(TR, action){							 
		attribute = (navigator.appName=="Microsoft Internet Explorer") ? "className" : "class";		
		if(action == "over"){
			ClasseTR = TR.getAttribute(attribute);
			TR.setAttribute(attribute, 'TD_LinhaAtiva');
		}else{
			if(ClasseTR != 'TD_LinhaClara'){
				TR.removeAttribute(attribute, 'TD_LinhaAtiva');
			}else{
				TR.setAttribute(attribute, 'TD_LinhaClara');
			}
		}
	}
	
	function valida_Data(campo, alertar){					 
		if(campo.value=="")return true;
		var expReg = /^(([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/[1-2][0-9]\d{2})$/;
		var msgErro = 'Formato inválido de data.';
		if ((campo.value.match(expReg)) && (campo.value!='')){
			var dia = campo.value.substring(0,2);
			var mes = campo.value.substring(3,5);
			var ano = campo.value.substring(6,10);
			
			if(mes==0 || dia==0){
				if(alertar==1){
					alert(msgErro);
					campo.focus();
					return false;
				}else return msgErro;
			}
			
			if(  (mes==4 || mes==6 || mes==9 || mes==11)   &&   (dia > 30)  ){
				msgErro = "Dia incorreto ! O mês especificado contém no máximo 30 dias.";
				if(alertar==1){
					alert(msgErro);
					campo.focus();
					return false;
				}else return msgErro;
			} else {
				if(ano%4!=0 && mes==2 && dia>28){
					msgErro = "Data incorreta! O mês especificado contém no máximo 28 dias."
					if(alertar==1){
						alert(msgErro);
						campo.focus();
						return false;
					}else return msgErro;
				} else {
					if(ano%4==0 && mes==2 && dia>29){
						msgErro = "Data incorreta! O mês especificado contém no máximo 29 dias."
						if(alertar==1){
							alert(msgErro);
							campo.focus();
							return false;
						}else return msgErro;
					} else {
						//alert ("Data correta!");
						return (alertar==1) ? true : "Ok";
					}
				}
			}
		} else {
			if(alertar==1){
				alert(msgErro);
				campo.focus();
				return false;
			}else return msgErro;
		}
	}
	
	function valida_Email(email){							 
		/* Testa um email no formato teste@testando. + com.br (3.2) ou + .com (3) ou + .br (2) -----------
		-- NÃO podem comecar com numeros. Antes da @ podem contar numeros letras, pontos e undescore -----
		-- O Dominio pode conter caracteres e numeros porem os seus sufixos apenas caracteres ----------*/
		var objRegExp  = /^[A-Za-z]([\w\.]*)@([A-Za-z0-9\.]*)\.(([A-Za-z]{3}\.[A-Za-z]{2}$)|([A-Za-z]{3}$)|([a-z]{2}$))/i ;
		return objRegExp.test(email);
		
		/* Como usar:
			if(!valida_Email(form.value)) {
				alert("Email Inválido!\nInforme um email válido e tente novamente.");
				form.focus();
				return true;
			}else{
				return false;
			}
		*/
	}

	function valida_Hora(hora){								 
		//var reTime1 = /^\d{2}:\d{2}$/;				//Horário HH:MM simples — aceita dois pares de dois dígitos separados por dois-pontos (:); pode ser usado para hora:minutos ou ainda para minutos:segundos, porém não valida as faixas de valor válidos para os dígitos, aceitando assim qualquer valor entre 00 e 99.
		var reTime = /^([0-1]\d|2[0-3]):[0-5]\d$/;		//Horário HH:MM 24h — aceita horas na faixa 00-23 e minutos 00-59, separados por dois-pontos.
		//var reTime3 = /^(0[1-9]|1[0-2]):[0-5]\d$/;	//Horário HH:MM 12h — aceita horas na faixa 01-12 e minutos 00-59, separados por dois-pontos.
		//var reTime4 = /^\d+:[0-5]\d:[0-5]\d$/;		//Tempo horas:MM:SS — aceita qualquer quantidade de horas (0 ou mais, um ou mais dígitos), minutos 00-59 e segundos 00-59, todos separados por dois-pontos.
		//var reTime5 = /^\d+:[0-5]\d:[0-5]\.\d{3}\d$/;	//Tempo horas:MM:SS.mili — similar ao anterior, porém inclui 3 dígitos finais para milisegundos 000-999, separados dos anteriores por ponto (.).

		eval("reTime = reTime" + pFmt);
		if (reTime.test(hora)) {
			Msg = hora + " é um horário/tempo válido.";
		} else if (pStr != null && pStr != "") {
			Msg = hora + " NÃO é um horário/tempo válido.";
		}
		
		return Msg;
	 }
	 
	
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
------------------------------------------------------------------------
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/


	//###################################################################################################################
	//---- Funções indiretas -> Aquelas que somente são chamadas por outras funções mas nunca por uma página em si ------
	function captEvent(e){
		var key;
		if(window.event) { key = e.keyCode; } 	// for IE, e.keyCode or window.event.keyCode can be used
		else if(e.which) { key = e.which;   }	// netscape
		return key;
	}
	
	function valida_Data_Msk(objForm, strField, evtKeyPress) {
		
		var i, nCount, sValue, fldLen, mskLen,bolMask, sCod, sMask, nTecla;
		sMask = '99/99/9999';
	
		if(document.all) { // Internet Explorer
			nTecla = evtKeyPress.keyCode;
		} else if(document.layers) { // Nestcape
			nTecla = evtKeyPress.which;
		} else {
			nTecla = evtKeyPress.which;
			if (nTecla == 8) {
				return true;
			}
		}
	
		sValue = objForm[strField].value;
		// Limpa todos os caracteres de formatação que
		// já estiverem no campo.
		sValue = sValue.toString().replace( "-", "" );
		sValue = sValue.toString().replace( "-", "" );
		sValue = sValue.toString().replace( ".", "" );
		sValue = sValue.toString().replace( ".", "" );
		sValue = sValue.toString().replace( "/", "" );
		sValue = sValue.toString().replace( "/", "" );
		sValue = sValue.toString().replace( "(", "" );
		sValue = sValue.toString().replace( "(", "" );
		sValue = sValue.toString().replace( ")", "" );
		sValue = sValue.toString().replace( ")", "" );
		sValue = sValue.toString().replace( " ", "" );
		sValue = sValue.toString().replace( " ", "" );
		fldLen = sValue.length;
		mskLen = sMask.length;
	
		i = 0;
		nCount = 0;
		sCod = "";
		mskLen = fldLen;
		
		while (i <= mskLen) {
			bolMask = ((sMask.charAt(i) == "-") || (sMask.charAt(i) == ":") || (sMask.charAt(i) == ".") || (sMask.charAt(i) == "/"))
			bolMask = bolMask || ((sMask.charAt(i) == "(") || (sMask.charAt(i) == ")") || (sMask.charAt(i) == " "))
		
			if (bolMask) {
				sCod += sMask.charAt(i);
				mskLen++;
			} else {
				sCod += sValue.charAt(nCount);
				nCount++;
			}
			i++;
		}
		
		objForm[strField].value = sCod;
		if (nTecla != 8) { // backspace
			if (sMask.charAt(i-1) == "9") { // apenas números...
				return ((nTecla > 47) && (nTecla < 58)); } // números de 0 a 9
			else { // qualquer caracter...
				return true;
			}
		} else {
			return true;
		}
	}
	//...................................................................................................................
	//-------------------------------------------------------------------------------------------------------------------
	
	
	//###################################################################################################################
	//---- Funções do Dreamweaver que impedem que o IE bloqueie os arquivos .swf ----------------------------------------
	function AC_AddExtension(src, ext){
		if (src.indexOf('?') != -1) return src.replace(/\?/, ext+'?'); 
		else return src + ext;
	}
	
	function AC_Generateobj(objAttrs, params, embedAttrs){ 
		var str = '<object ';
		for (var i in objAttrs) str += i + '="' + objAttrs[i] + '" ';
		str += '>';
		for (var i in params) str += '<param name="' + i + '" value="' + params[i] + '" /> ';
		str += '<embed ';
		for (var i in embedAttrs)str += i + '="' + embedAttrs[i] + '" ';
		str += ' ></embed></object>';
		document.write(str);
	}
	
	function AC_FL_RunContent(){
		var ret = AC_GetArgs(arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000", "application/x-shockwave-flash");
		AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
	}
	
	function AC_SW_RunContent(){
		var ret = AC_GetArgs(arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000", null);
		AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
	}
	
	function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
		var ret = new Object();
		ret.embedAttrs = new Object();
		ret.params = new Object();
		ret.objAttrs = new Object();
		for (var i=0; i < args.length; i=i+2){
			var currArg = args[i].toLowerCase();    
			
			switch (currArg){
				case "classid":
					break;
				case "pluginspage":
					ret.embedAttrs[args[i]] = args[i+1];
					break;
				case "src":
				case "movie":
					args[i+1] = AC_AddExtension(args[i+1], ext);
					ret.embedAttrs["src"] = args[i+1];
					ret.params[srcParamName] = args[i+1];
					break;
				case "onafterupdate":
				case "onbeforeupdate":
				case "onblur":
				case "oncellchange":
				case "onclick":
				case "ondblClick":
				case "ondrag":
				case "ondragend":
				case "ondragenter":
				case "ondragleave":
				case "ondragover":
				case "ondrop":
				case "onfinish":
				case "onfocus":
				case "onhelp":
				case "onmousedown":
				case "onmouseup":
				case "onmouseover":
				case "onmousemove":
				case "onmouseout":
				case "onkeypress":
				case "onkeydown":
				case "onkeyup":
				case "onload":
				case "onlosecapture":
				case "onpropertychange":
				case "onreadystatechange":
				case "onrowsdelete":
				case "onrowenter":
				case "onrowexit":
				case "onrowsinserted":
				case "onstart":
				case "onscroll":
				case "onbeforeeditfocus":
				case "onactivate":
				case "onbeforedeactivate":
				case "ondeactivate":
				case "type":
				case "codebase":
					ret.objAttrs[args[i]] = args[i+1];
					break;
				case "width":
				case "height":
				case "align":
				case "vspace": 
				case "hspace":
				case "class":
				case "title":
				case "accesskey":
				case "name":
				case "id":
				case "tabindex":
					ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
					break;
				default:
					ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
			}
		}
		ret.objAttrs["classid"] = classid;
		if (mimeType) ret.embedAttrs["type"] = mimeType;
		return ret;
	}
	//...................................................................................................................
	//-------------------------------------------------------------------------------------------------------------------
	
