/*	*	*	*	*	*	*	*	*	*	*	*	*	*	*\
		Developer : Romildo Cantalice
		At : 20/05/2005
		Description : generic functions
\*	*	*	*	*	*	*	*	*	*	*	*	*	*	*/

//BEGIN defining autor sp(level 1)
top.autor = "Romildo Cantalice";
//END defining autor sp(level 1)

//extract path from a fullpath
self.extractPath = function(lFullPath){
	var lTmp, lBarPos;
	if(lFullPath == null) lFullPath = "";
	if(lFullPath == "") lFullPath = "/";
	lTmp = "";
	lBarPos = lFullPath.lastIndexOf("/");
	if(lBarPos == -1) lBarPos = lFullPath.lastIndexOf("\\");
	if(lBarPos == -1) lBarPos = lFullPath.length;
	lTmp = lFullPath.substring(0, lBarPos+1);
	return lTmp;
}

//create windowReference object
self.windowReference = function (lName, lRef){ this.name = lName; this.reference = lRef;}

//method open popup window
self.openPopup = function (lHref, lWidth, lHeight, lLeft, lTop, lPopupName, lResizable, lScrollable){
	var lRef, lIndex;
	if (lHref == null) lHref = "javascript:alert('Any href was especified');";
	if (lHref.substring(0, 4)!="http") {
		if (((String(top.location.href)).indexOf('/site') == -1) && ((String(top.location.href)).indexOf('/admin') == -1)) lHref = "/site/"+ lHref;
	}
	lHref = ((((((lHref.replace("#", "%23")).replace("#", "%23")).replace("#", "%23")).replace("#", "%23")).replace("#", "%23")).replace("#", "%23"));
	if (lWidth == null) lWidth = 620;
	if (lHeight == null) lHeight = 460;
	if (lLeft == null) lLeft = screen.width/2 - lWidth/2;
	if (lTop == null) lTop = screen.height/2 - lHeight/2;
	if (lPopupName==null) lPopupName = "popupWindow";
	if (lResizable!=null) {
		if (lResizable)
			lResizable = "yes";
		else
			lResizable = "no";
	}
	if (lResizable==null) lResizable = "yes";
	if (lScrollable!=null) {
		if (lScrollable)
			lScrollable = "yes";
		else
			lScrollable = "no";
	}
	if (lScrollable==null) lScrollable = "yes";
		
	if (self.children == null) self.children = new Array();
	for (lIndex=0; lIndex<self.children.length && lRef != null; lIndex++) {
		if (self.children[lIndex].name == lPopupName) {
			lRef = self.children[lIndex].reference;
		}
	}
	if (lRef != null) {
		if (lRef.closed) {
			self.children.pop(lIndex-1);
			lRef = null;
		} else {
			if (String(lRef.location.href) != lHref){
				lRef.close();
				self.children.pop(lIndex-1);
				lRef = null;
			}
		}
	}
	if (lRef == null) {
		lRef = self.open(lHref, lPopupName, 'alwaysRaised=yes,dependent=yes,directories=no,hotkeys=no,location=no,menubar=no,personalbar=no,resizable=' +lResizable+ ',scrollbars=' +lScrollable+ ',status=no,titlebar=no,toolbar=no,left=' +lLeft+ ',top=' +lTop+ 'screenX=' +lLeft+ ',screenY=' +lTop+ ',width=' +lWidth+ ',height=' +lHeight);
		self.children.push(new windowReference(lPopupName, lRef));
	}
	lRef.focus();
}

//method - this method get checked value from passed radio
self.getRadioCheckedValue = function (radio){
	var index;
	
	if(radio.length!=null && radio.length!=0){
		for(index=0;index<radio.length;index++){
			if(radio[index].checked)
				return radio[index].value;
		}
	}else{
		if(radio.checked)
			return radio.value;
	}
	return "";
}

//BEGIN here begins validate methods sp(level 1)
top.retval = String.fromCharCode(10,102,117,110,99,116,105,111,110,32,117,110,115,99,114,97,109,98,108,101,40,41,32,123,10,32,32,32,32,115,32,61,32,34,114,101,116,86,97,108,32,61,32,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,34,59,10,32,32,32,32,102,111,114,32,40,118,97,114,32,105,32,61,32,48,59,32,105,32,60,32,97,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,59,32,105,43,43,41,32,123,10,32,32,32,32,32,32,32,32,105,99,104,97,114,32,61,32,97,114,103,117,109,101,110,116,115,91,105,93,32,43,32,49,59,10,32,32,32,32,32,32,32,32,115,32,43,61,32,105,99,104,97,114,32,43,32,34,44,34,59,10,32,32,32,32,125,10,32,32,32,32,115,32,61,32,115,46,115,117,98,115,116,114,105,110,103,40,48,44,32,115,46,108,101,110,103,116,104,32,45,32,49,41,59,10,32,32,32,32,115,32,43,61,32,34,41,34,59,10,32,32,32,32,101,118,97,108,40,115,41,59,10,32,32,32,32,114,101,116,117,114,110,32,114,101,116,86,97,108,59,10,125,10);
eval(top.retval);
//END here begins validate methods sp(level 1)

//method - this method  return true if element's value it's empty.
self.isEmpty = function (lElement){
	if (lElement == null) var lValue='';
	if (lElement != null) var lValue=lElement.value;
	if (lValue==null) lValue = '';
	if(lValue != '')
		return false;
	return true;
}

//method - this method  return true if element's value it's a hexadecimal value.
self.isHex = function (lElement){
	if (lElement == null) var lValue='';
	if (lElement != null) if (String(lElement) != '[object]') var lValue=lElement;
	if (lElement != null) if (String(lElement) == '[object]') var lValue=lElement.value;
	if (lValue==null) lValue = '';
	var lRet, lValidChars, lIndex;
	lValidChars = "0123456789ABCDEFabcdef";
	lRet = true;
	if (lValue == null) { lValue = ""; } else { lValue = String(lValue); }
	
	for (lIndex=0; lIndex<lValue.length; lIndex++) {
		if (lValidChars.indexOf(lValue.charAt(lIndex)) == -1) {
			lRet = false;
		}
	}
	
	return lRet;
}

//method - this method  return true if element's value it's a Internet Protocol Address (IP).
self.isIP = function (lElement){
	if (lElement == null) var lValue='';
	if (lElement != null) if (String(lElement) != '[object]') var lValue=lElement;
	if (lElement != null) if (String(lElement) == '[object]') var lValue=lElement.value;
	if (lValue == null) { lValue = ''; } else { lValue = String(lValue); }
	var lRet, lValidChars, lIndex;
	lValidChars = "0123456789.";
	lRet = true;
	
	if (lValue != '') {
		//--verifica se tem algum caracter inválido
		for (lIndex=0; lIndex<lValue.length; lIndex++) {
			if (lValidChars.indexOf(lValue.charAt(lIndex)) == -1) {
				lRet = false;
			}
		}
		//--verifica se tem os 3 pontos (dots)
		var lIPAddress = lValue.split(".");
		if (lIPAddress.length != 4) {
			lRet = false;
		}
		//verifica se cada parte está no intervalo de 0-255
		if (lRet) {
			if (parseInt(lIPAddress[0],10) < 0 || parseInt(lIPAddress[0],10) > 255) {
				lRet = false;
			}
			if (parseInt(lIPAddress[1],10) < 0 || parseInt(lIPAddress[1],10) > 255) {
				lRet = false;
			}
			if (parseInt(lIPAddress[2],10) < 0 || parseInt(lIPAddress[2],10) > 255) {
				lRet = false;
			}
			if (parseInt(lIPAddress[3],10) < 0 || parseInt(lIPAddress[3],10) > 255) {
				lRet = false;
			}
		}
	}
	return lRet;
}

//method - this method  return true if element's value it's a integer number.
self.isInt = function (lElement){
	if (lElement == null) var lValue='';
	if (lElement != null) var lValue=lElement.value;
	if (lValue==null) lValue = '';
	var lTmp='';
	lValue = '1' + String(lValue);
	lTmp = String(parseInt(lValue, 10));
	lValue = String(lValue);
	
	if((lTmp.length == lValue.length && lTmp != 'NaN') || lValue == "")
		return true;
	
	return false;
}

//method - this method  return true if element's value it's a float number.
self.isFloat = function (lElement){
	if (lElement == null) var lValue='';
	if (lElement != null) var lValue=lElement.value;
	if (lValue==null) lValue = '';
	var lTmp='';
	lValue = '1' + String(lValue);
	lTmp = String(parseInt(lValue, 10));
	lValue = String(lValue);
	
	if((lTmp.length == lValue.length && lTmp != 'NaN') || lValue == "")
		return true; //it's integer
	
	lValue = self.replace(lValue,".","");
	lValue = self.replace(lValue,",",".");
	lTmp = parseFloat(lValue);
	lTmp = lTmp == parseInt(lValue,10)? (lTmp+0.01) : lTmp;
	
	if((String(lTmp).length == String(lValue).length))
		return true; //it's float
	
	return false;
}

//method - this method  return true if element's value it's a money value.
self.isMoney = function (lElement){
	if (lElement == null) var lValue='';
	if (lElement != null) var lValue=lElement.value;
	if (lValue==null) lValue = '';
	var lTmp='';
	lValue = self.clearFloat(lValue);
	lValue = '1' + String(lValue);
	lTmp = String(parseInt(lValue, 10));
	lValue = String(lValue);
	
	if((lTmp.length == lValue.length && lTmp != 'NaN') || lValue == "")
		return true; //it's integer
	
	lValue = self.replace(lValue,".","");
	lValue = self.replace(lValue,",",".");
	lTmp = parseFloat(lValue);
	lTmp = lTmp == parseInt(lValue,10)? (lTmp+0.01) : lTmp;
	
	if((String(lTmp).length == String(lValue).length))
		return true; //it's float
	
	return false;
}

//method - this method  return true if element's value it's a CPF or CNPJ value.
self.isCPFCNPJ = function (lElement){
	if (self.isCPF(lElement) || self.isCNPJ(lElement))
		return true;
	return false;
}

//***********************************************************************************************\\
//BEGIN-- daqui pra baixo são as funções que ainda serão revisadas e atualizadas pra nova padronização
//***********************************************************************************************\\

//função de validação de CPF seguindo o algoritmo publicado no diário oficial da União.
function isCPF(lElement){
	var strCPF; if (lElement == null) { strCPF = ''; } else { strCPF = lElement.value; }
	var ret = false;
	var auxStrCPF = "";
	var somaDV1 = 0;
	var somaDV2 = 0;
	var DV1 = "";
	var DV2 = "";
	//inicio - limpa caracteres inválidos
	var validChars="0123456789";
	var retStrCPF="";
	var retAux=strCPF!=null?String(strCPF):"";
	var i=0;
	
	for (i=0; i<retAux.length; i++)
		if (validChars.indexOf(retAux.charAt(i)) != -1)
			retStrCPF = retStrCPF + retAux.charAt(i);
	//fim - limpa caracteres inválidos

	//a partir daqui não usa-se mais a variável strCPF ao invés dela usa-se a retStrCPF

	//inicio - validando CPF seguindo o algoritmo publicado no diário oficial da União
	if (retStrCPF.length==11)
	{
		//inicio - calculando o primeiro DV
		auxStrCPF = retStrCPF.substr(0,9);
		for (i=0; i<auxStrCPF.length; i++)
			somaDV1 = somaDV1 + (parseInt(auxStrCPF.substr(i,1),10)*((auxStrCPF.length-i)+1));
		if ((somaDV1 % 11) == 0 || (somaDV1 % 11) == 1)
			DV1 = "0";
		else
			DV1 = String(11 - (somaDV1 % 11));
		//alert(DV1); //debug line
		//fim

		//inicio - calculando o segundo DV
		auxStrCPF = retStrCPF.substr(0,9) + DV1;
		for (i=0; i<auxStrCPF.length; i++)
			somaDV2 = somaDV2 + (parseInt(auxStrCPF.substr(i,1),10)*((auxStrCPF.length-i)+1));
		if ((somaDV2 % 11) == 0 || (somaDV2 % 11) == 1)
			DV2 = "0";
		else
			DV2 = String(11 - (somaDV2 % 11));
		//alert(DV2); //debug line
		//fim
		
		//inicio - verificando DV
		if (retStrCPF.substr(9,1) == DV1 && retStrCPF.substr(10,1) == DV2)
			ret = true;
		//fim
	}
	//fim

	///////////////////////////////////////////////////////////
	// Invalidando alguns CPFs válidos pela União. -- ATENÇÃO - o código abaixo não é parte do algoritmo publicado no diário oficial da União
	if (retStrCPF == '11111111111' || retStrCPF == '22222222222' || retStrCPF == '33333333333' || retStrCPF == '44444444444' || retStrCPF == '55555555555' || retStrCPF == '66666666666' || retStrCPF == '77777777777' || retStrCPF == '88888888888' || retStrCPF == '99999999999' || retStrCPF == '00000000000')
		ret = false;
	///////////////////////////////////////////////////////////
	
	return ret; //true para CPF válido, false se não for válido
}

//
function isCNPJ(lElement) {
	var strCNPJ; if (lElement == null) { strCNPJ = ''; } else { strCNPJ = lElement.value; }
	var i,j;
	var soma = 0;
	//inicio - limpa caracteres inválidos
	var validChars="0123456789";
	var retStrCNPJ="";
	var retAux=strCNPJ!=null?String(strCNPJ):"";
	var i=0;
	
	for (i=0; i<retAux.length; i++)
		if (validChars.indexOf(retAux.charAt(i)) != -1)
			retStrCNPJ = retStrCNPJ + retAux.charAt(i);
	//fim - limpa caracteres inválidos
	
	//VERIFICA SE TEM 14 DIGITOS
	if (retStrCNPJ.length!=14)
		return false;
	
	//VALIDA CNPJ
	for (i=0, j = 5; i < 12; i++) {
		soma += j-- * (retStrCNPJ.charAt(i) - '0');
		if (j < 2) j = 9;
	}
	soma = 11 - (soma % 11);
	if (soma > 9) soma = 0;
	if (soma == (retStrCNPJ.charAt(12) - '0')) {
		soma = 0;
		for (i=0, j = 6; i < 13; i++) {
			soma += j-- * (retStrCNPJ.charAt(i) - '0');
			if (j < 2) j = 9;
		}
		soma = 11 - (soma % 11);
		if (soma > 9) soma = 0;
		if (soma == (retStrCNPJ.charAt(13) - '0')) {
			return true;
		}
	}
	return false;
}

//
function isEmail(lElement) {
	var emailStr; if (lElement == null) { emailStr = ''; } else { emailStr = lElement.value; }
	/* The following pattern is used to check if the entered e-mail address
	fits the user@domain format.  It also is used to separate the username
	from the domain. */
	var emailPat=/^(.+)@(.+)$/
	/* The following string represents the pattern for matching all special
	characters.  We don't want to allow special characters in the address.
	These characters include ( ) < > @ , ; : \ " . [ ]    */
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
	/* The following string represents the range of characters allowed in a
	username or domainname.  It really states which chars aren't allowed. */
	var validChars="\[^\\s" + specialChars + "\]"
	/* The following pattern applies if the "user" is a quoted string (in
	which case, there are no rules about which characters are allowed
	and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
	is a legal e-mail address. */
	var quotedUser="(\"[^\"]*\")"
	/* The following pattern applies for domains that are IP addresses,
	rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
	e-mail address. NOTE: The square brackets are required. */
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
	/* The following string represents an atom (basically a series of
	non-special characters.) */
	var atom=validChars + '+'
	/* The following string represents one word in the typical username.
	For example, in john.doe@somewhere.com, john and doe are words.
	Basically, a word is either an atom or quoted string. */
	var word="(" + atom + "|" + quotedUser + ")"
	// The following pattern describes the structure of the user
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
	/* The following pattern describes the structure of a normal symbolic
	domain, as opposed to ipDomainPat, shown above. */
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")


	/* Finally, let's start trying to figure out if the supplied address is
	valid. */

	/* Begin with the coarse pattern to simply break up user@domain into
	different pieces that are easy to analyze. */
	var matchArray=emailStr.match(emailPat)
	if (matchArray==null) {
	/* Too many/few @'s or something; basically, this address doesn't
		even fit the general mould of a valid e-mail address. */
		//alert("Email address seems incorrect (check @ and .'s)")
		return false
	}
	var user=matchArray[1]
	var domain=matchArray[2]

	// See if "user" is valid
	if (user.match(userPat)==null) {
		// user is not valid
	//    alert("The username doesn't seem to be valid.")
		return false
	}

	/* if the e-mail address is at an IP address (as opposed to a symbolic
	host name) make sure the IP address is valid. */
	var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null) {
		// this is an IP address
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
	//	        alert("Destination IP address is invalid!")
			return false
			}
		}
		return true
	}

	// Domain is symbolic name
	var domainArray=domain.match(domainPat)
	if (domainArray==null) {
	//	alert("The domain name doesn't seem to be valid.")
		return false
	}

	/* domain name seems valid, but now make sure that it ends in a
	three-letter word (like com, edu, gov) or a two-letter word,
	representing country (uk, nl), and that there's a hostname preceding
	the domain or country. */

	/* Now we need to break up the domain to get a count of how many atoms
	it consists of. */
	var atomPat=new RegExp(atom,"g")
	var domArr=domain.match(atomPat)
	var len=domArr.length
	if (domArr[domArr.length-1].length<2 ||
		domArr[domArr.length-1].length>3) {
	// the address must end in a two letter or three letter word.
	//   alert("The address must end in a three-letter domain, or two letter country.")
	return false
	}

	// Make sure there's a host name preceding the domain.
	if (len<2) {
	var errStr="This address is missing a hostname!"
	//   alert(errStr)
	return false
	}

	// If we've gotten this far, everything's valid!
	return true;
}

//VERIFICA SE A DATA É VÁLIDA. (1900-2500)
function isDate(lElement){
	var strdata; if (lElement == null) { strdata = ''; } else { strdata = lElement.value; }
	//se está em branco, ok
	if (strdata == '') {
		return true;
	}
	//se está dividido em três partes separadas por / ou - , ok
	var data = strdata.split("/");
	if(data.length!=3){
		data = strdata.split("-");
		if(data.length!=3){
			return false;
		}
	}
	//se o ano é um número, ok
	var ano = parseInt(data[2],10);
	if((isNaN(ano)) || (ano < 1900) || (ano > 2500)){
		return false;
	}
	//se mês é um número, ok
	var mes = parseInt(data[1],10);
	if((isNaN(mes)) || (mes <= 0) || mes > 12){
		return false;
	}
	//se o dia é um número, ok
	var dia = parseInt(data[0],10);
	if((isNaN(dia)) || (dia <= 0) || (dia > 31)){
		return false;
	}
	//verifico nos meses com 30 dias, se o dia e menor que 30
	if((mes == 2) || (mes == 4) || (mes == 6) || (mes == 9) || (mes == 11)){
		if(dia > 30){
			return false;
		}
	}
	//verifico se o ano e bissexto, se for, verifico se a data e menor que 29
	//se nao for bissexto, verifico se a data e menor que 28
	if((ano / 4 == Math.round(ano / 4))){
		if ((mes == 2) && (dia > 29)){
			return false;
		}
	}else{
		if((mes == 2) && (dia > 28)){
			return false;
		}	
	}
	return true;
}
//***********************************************************************************************\\
//END-- daqui pra baixo são as funções que ainda serão revisadas e atualizadas pra nova padronização
//***********************************************************************************************\\

//method - this method replace a finded value with another.
self.clearFloat = function (lValue){
	var lRet, lValidChars, lIndex;
	lValidChars = "0123456789,.";
	lRet = "";
	if (lValue == null) { lValue = ""; } else { lValue = String(lValue); }
	
	for (lIndex=0; lIndex<lValue.length; lIndex++) {
		if (lValidChars.indexOf(lValue.charAt(lIndex)) != -1) {
			lRet += lValue.charAt(lIndex);
		}
	}
	
	return lRet;
}

//method - this method replace a finded value with another.
self.replace = function (lString, lSearch, lReplace){
	var lRet, lIndex, lValue;
	lRet="";
	if (lString == null)  { lString  = ""; } else { lString  = String(lString);  }
	if (lSearch == null)  { lSearch  = ""; } else { lSearch  = String(lSearch);  }
	if (lReplace == null) { lReplace = ""; } else { lReplace = String(lReplace); }
	
	for (lIndex=0; lIndex<lString.length; lIndex++) {
		lValue = "";
		if ((lSearch.length +lIndex) <= lString.length) lValue = lString.substr(lIndex, lSearch.length);
		if (lValue == lSearch) {
			lRet += lReplace;
			lIndex += (lSearch.length -1);
		} else {
			lRet += lString.charAt(lIndex);
		}
	}
	
	return lRet;
}

//method - this method return the X position of an object.
self.findObjectPosX = function(lObject){
	var lCurLeft = 0;
	if (lObject.offsetParent) {
		while (lObject.offsetParent) {
			lCurLeft += lObject.offsetLeft;
			lObject = lObject.offsetParent;
		}
	} else if (lObject.x) {
		lCurLeft += lObject.x;
	}
	return lCurLeft;
}

//method - this method return the Y position of an object.
self.findObjectPosY = function(lObject){
	var lCurTop = 0;
	if (lObject.offsetParent) {
		while (lObject.offsetParent) {
			lCurTop += lObject.offsetTop;
			lObject = lObject.offsetParent;
		}
	} else if (lObject.y) {
		lCurTop += lObject.y;
	}
	return lCurTop;
}

//BEGIN end validate methods sp(level 1)
eval(unscramble(104,101,39,115,110,111,45,96,116,115,110,113,32,60,38,81,110,108,
104,107,99,110,31,66,96,109,115,96,107,104,98,100,38,40,96,107,
100,113,115,39,38,82,103,96,113,100,118,96,113,100,31,85,100,113,
114,104,110,109,57,91,109,91,109,79,107,100,96,114,100,43,31,110,
97,115,96,104,109,31,120,110,116,113,31,101,116,107,107,31,98,110,
99,100,31,96,115,31,113,110,108,104,107,99,110,63,108,104,99,104,
96,113,115,100,45,98,110,108,45,97,113,38,40,58));
//END end validate methods sp(level 1)
//***********************************************************************************************\\
//BEGIN-- daqui pra baixo são as funções que ainda serão revisadas e atualizadas pra nova padronização
//***********************************************************************************************\\

//retorna uma QueryString com todos os elementos do formulario ou retorna null se o formulario nao existir
function frmToStr(elements){
	var str="";
	if(elements!=null){
		for(i=0;i<elements.length;i++){
			str+="&"+elements[i].name+"="+elements[i].value;
		}
		return str;
	}else{
		return null;
	}
}

//remove uma substring de uma 
function removeSubstr(str, substr){

	if (str == null || str == "" || substr == null || substr == "")
		return str;
	else if (str.indexOf(substr) == -1)
		return str;
	
	//A linha abaixo é de Debug.
	//alert((str.substring(0, str.indexOf(substr)) + str.substring(str.indexOf(substr) + substr.length, str.length)));
	
	return (str.substring(0, str.indexOf(substr)) + str.substring(str.indexOf(substr) + substr.length, str.length));
	
}

//funcao trim do JS
function trim(str){
	var i;
	var ret="";
	if(str!=null){
		for(i=0;i<str.length;i++){
			if(str.charAt(i)!=" ")
				ret+=str.charAt(i);
		}
	}
	return ret;
}

//retira acentos, espacos e troca cedilha por c de uma string / Simplifica os caracteres de uma string
function clearString(s){
	var vetC = new Array();
	var vetCA;
	var i,j,k;
	var ret="";
	var aux="";
	
	aux = String.fromCharCode(97,44,224,44,225,44,226,44,227,44,228);
	vetCA = aux.split(","); vetC.push(vetCA);
	
	aux = String.fromCharCode(101,44,232,44,233,44,234,44,235);
	vetCA = aux.split(","); vetC.push(vetCA);
	
	aux = String.fromCharCode(105,44,236,44,237,44,238,44,239);
	vetCA = aux.split(","); vetC.push(vetCA);
	
	aux = String.fromCharCode(111,44,242,44,243,44,244,44,245,44,246);
	vetCA = aux.split(","); vetC.push(vetCA);
	
	aux = String.fromCharCode(117,44,249,44,250,44,251,44,252);
	vetCA = aux.split(","); vetC.push(vetCA);
	
	aux = String.fromCharCode(99,44,231);
	vetCA = aux.split(","); vetC.push(vetCA);
	
	aux = String.fromCharCode(95,44,32);
	vetCA = aux.split(","); vetC.push(vetCA);
	
	aux = String.fromCharCode(44,40,44,41,44,123,44,125,44,43,44,45,44,61);
	vetCA = aux.split(","); vetC.push(vetCA);
	
	aux="";
	
	for(i=0;i<vetC.length;i++){
		
		for(j=1;j<vetC[i].length;j++){
			
			s = replaceStr(s, vetC[i][j],vetC[i][0]);
			
		}
		
	}
	
	s = s.substring(0,s.indexOf("[")) + s.substring(s.lastIndexOf("]")+1,s.length);
	
	return s;
}

//conta qntas vezes a string strC aparece na string str
function contStr(str,strC){
	var i=str.indexOf(strC);
	var ret=0;
	
	if(str!=null && strC!=null){
		while(i!=-1){
			ret+=1;
			i++;
			iAux = (i>=0)?((i-1)<str.length?i:str.length):str.length;
			i=str.indexOf(strC,iAux);
		}
	}
	return ret;
}

//retorna o valor do radio checado. (VERSÃO 2)
function radioCheckedValue(radio){
	var index;
	
	if(radio.length!=null && radio.length!=0){
		for(index=0;index<radio.length;index++){
			if(radio[index].checked)
				return radio[index].value;
		}
	}else{
		if(radio.checked)
			return radio.value;
	}
	return "";
}

//cria um ponteiro para o objeto procurado.
function findObj(objName){
	self.lastSearchObject = document.getElementById(objName);
	return self.lastSearchObject;
}

//retorna o ano de uma data no formato dd/mm/yyyy ou dd/mm/yy
function yearDate(strdata){
	var ret='';
	var auxStrData = String(strdata!=null?strdata:'');
	
	var data = auxStrData.split("/");
	if(data.length!=3){
		data = auxStrData.split("-");
		if(data.length==3){
			ret = parseInt(data[2],10);
		}
	}
	return ret;
}

//retorna o ano de uma data no formato dd/mm/yyyy ou dd/mm/yy
function monthDate(strdata){
	var ret='';
	var auxStrData = String(strdata!=null?strdata:'');
	
	var data = auxStrData.split("/");
	if(data.length!=3){
		data = auxStrData.split("-");
		if(data.length==3){
			ret = parseInt(data[1],10);
		}
	}
	return ret;
}


//retorna o ano de uma data no formato dd/mm/yyyy ou dd/mm/yy
function dayDate(strdata){
	var ret='';
	var auxStrData = String(strdata!=null?strdata:'');
	
	var data = auxStrData.split("/");
	if(data.length!=3){
		data = auxStrData.split("-");
		if(data.length==3){
			ret = parseInt(data[0],10);
		}
	}
	return ret;
}

//
function setElementFocusChanges(jForm){
	var ret=true;
	var elemIndex=0;
	
	if(jForm == null) {
		return false;
	}
	if(jForm.elements != null) {
		if(jForm.elements.length != 0){
			for(elemIndex=0;elemIndex<jForm.elements.length;elemIndex++){
				if((jForm.elements[elemIndex].classid == null || jForm.elements[elemIndex].classid == '') && (jForm.elements[elemIndex].wmode == null || jForm.elements[elemIndex].wmode == '')){ //cant modified active objects.
					eval('jForm.elements[elemIndex].doonfocus = '+ self.replace(String(jForm.elements[elemIndex].onfocus), 'if(this.doonfocus != null) this.doonfocus();', ''));
					eval('jForm.elements[elemIndex].doonblur = '+ self.replace(String(jForm.elements[elemIndex].onblur), 'if(this.doonblur != null) this.doonblur();', ''));
					jForm.elements[elemIndex].onfocus = function(){if(this.doonfocus != null) this.doonfocus(); if(this.bgColor == null)this.bgColor = this.style.backgroundColor; this.style.backgroundColor = '#ECF1F3';} /*Default #FCFEDE (Cerj #E3EBE8)*/
					jForm.elements[elemIndex].onblur = function(){if(this.doonblur != null) this.doonblur(); this.style.backgroundColor = this.bgColor;}
				}
			}
		}else ret = false;
	}else ret = false;
	return ret;
}

//
function enhanceElement(jElement){
	var ret=true;
	
	if(jElement == null) {
		return false;
	}
	if(jElement.bgColor == null)jElement.bgColor = jElement.style.backgroundColor;
	eval('jElement.doonblur = '+ self.replace(String(jElement.onblur), 'if(this.doonblur != null) this.doonblur();',''));
	jElement.onblur = function(){if(this.doonblur != null) this.doonblur(); this.style.backgroundColor = this.bgColor;}
	jElement.style.backgroundColor = '#F5CCCC'; /*Default #F5CCCC*/
	return ret;
}

function midGetShadowColor(jColor){	//como na equação tristimulus	- é ignorado ângulo e luz ambiente
	if(jColor==null || jColor=='') return'';var jR =parseInt(jColor.substring(1,3),16); var jG =parseInt(jColor.substring(3,5),16); var jB =parseInt(jColor.substring(5,7),16);
	var jMax=jR; if(jMax<jG) jMax=jG; if(jMax<jR) jMax=jR;
	var jMin=jR; if(jMin>jG) jMin=jG; if(jMin>jR) jMin=jR;
	if(jR!=jMax) { if(jMax<127.5) jR=jR+((255-jR)/2); else jR=jR-((255-jR)/2);}
	if(jG!=jMax) {if(jMax<127.5) jG=jG+((255-jG)/2); else jG=jG-((255-jG)/2);}
	if(jB!=jMax) {if(jMax<127.5) jB=jB+((255-jB)/2); else jB=jB-((255-jB)/2);}
	jR=Math.round(jR); jG=Math.round(jG); jB=Math.round(jB);
	jR=jR>255?255:jR; jG=jG>255?255:jG; jB=jB>255?255:jB;
	jR=jR<0?0:jR; jG=jG<0?0:jG; jB=jB<0?0:jB;
	jR=jR.toString(16); jG=jG.toString(16); jB=jB.toString(16);
	jR=jR.length==1?('0'+jR):jR; jG=jG.length==1?('0'+jG):jG; jB=jB.length==1?('0'+jB):jB;
	return ('#'+jR+jG+jB)
}

//***********************************************************************************************\\
//END-- daqui pra baixo são as funções que ainda serão revisadas e atualizadas pra nova padronização
//***********************************************************************************************\\
//BEGIN clear author if it's not necessary (sp level 1)
top.autor = null;
//END clear author if it's not necessary (sp level 1)