// JavaScript Document
// Livraria de Funções Genéricas

/*-------------------------------------------------------------------------*/
// Cookie - Setagem de Cookie no navegador do usuário
/*-------------------------------------------------------------------------*/
function cookie_set(name, value, expires, path, domain, secure) {
	var currCookie = name + "=" + escape(value) +
	((expires) ? "; expires=" + expires.toGMTString() : "") +
	((path) ? "; path=" + path : "") +
	((domain) ? "; domain=" + domain : "") +
	((secure) ? "; secure" : "");
	document.cookie = currCookie;
}

/*-------------------------------------------------------------------------*/
// Cookie - Recupera o valor do Cookie solicitado
/*-------------------------------------------------------------------------*/
function cookie_get(myName) {
	cName = myName + '=';
	cPosition  = document.cookie.indexOf(cName);	
	if(cPosition != -1 ) {
		cIni = cPosition + cName.length;
		cFim   = document.cookie.indexOf(";", cIni);
		if (cFim == -1){
			cFim = document.cookie.length;
		}
		return unescape(document.cookie.substring(cIni, cFim) );
	}
}

/*-------------------------------------------------------------------------*/
// Cookie - Deleta o Cookie
/*-------------------------------------------------------------------------*/
function cookie_del(name, path, domain) {
	if (cookieGet(name)) {
		document.cookie = name + "=" + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + "; expires=Thu, 01-Jan-70 00:00:01 GMT";
		history.go(0);
	}
}

/*-------------------------------------------------------------------------*/
// Date - Correção de data em navegadores antigos
/*-------------------------------------------------------------------------*/
function date_fix(date) {
	var base = new Date(0);
	var skew = base.getTime();
	if (skew > 0){
		date.setTime(date.getTime() - skew);
	}
} 

/*-------------------------------------------------------------------------*/
// Date - Retorna uma data futura
/*-------------------------------------------------------------------------*/
function date_exp(myTime){
	var expire = new Date();
	dateFix(expire); //correção da data
	expire.setTime(expire.getTime() + myTime * 24 * 60 * 60 * 1000);
	return expire;
}

/*-------------------------------------------------------------------------*/
// HTML Element - Localiza o elemento alvo pelo ID
/*-------------------------------------------------------------------------*/
function html_getElement(myID){
	theElement = null;
	if(document.getElementById) {
		theElement = document.getElementById(myID);
	} else if(document.all) {
		theElement = document.all[myID];
	} else if(document.layers) {
		theElement = document.layers[myID];
	}
	return theElement;
}

/*-------------------------------------------------------------------------*/
// HTML Element - Seleção múltipla de Checkbox
/*-------------------------------------------------------------------------*/
function html_boxSel(myID,formID) {
	var myBox = html_getElement(myID);
	var myForm = html_getElement(formID);
	for(var i=0;i<myForm.elements.length;i++){
		var targetElement = myForm.elements[i];//seta o elemento pelo índice
		if(targetElement.type=="checkbox"){
			if(myBox.checked){
				targetElement.checked = true;//seleciona o elemento
			}else{
				targetElement.checked = false;//deseleciona o elemento
			}
		}
	}
}

/*-------------------------------------------------------------------------*/
// HTML Element - Deleção múltipla de registros por Checkbox
/*-------------------------------------------------------------------------*/
function html_boxDel(formID,myAction,myTarget) {
	var myForm = html_getElement(formID);//seta o formulário
	var myLength = 0;
	for(var i=0;i<myForm.elements.length;i++){
		if(myForm.elements[i].name!="selectAll"){
			if(myForm.elements[i].checked){
				myLength++;
			}
		}
	}
	if(myLength<=0){
		alert('Nenhum registro a ser deletado!');
		return false;
	}else{
		if(myLength==1){
			sAdd1 = "o registro selecionado?";
			sAdd2 = "ao registro";
		}else{
			sAdd1 = "os " + myLength + " registros selecionados?";
			sAdd2 = "aos registros";
		}
		return html_formSubmit(formID,myAction,myTarget,"Deseja realmente deletar " + sAdd1 + "\nTodos os dados relacionados " + sAdd2 +  " tambem serao excluidos.");
	}
}

/*-------------------------------------------------------------------------*/
// HTML Element - Submição de formulário
/*-------------------------------------------------------------------------*/
function html_formSubmit(formID,myAction,myTarget,myMsg){
	var myForm = html_getElement(formID);
	//submição com confirmação
	if(myMsg){
		if(confirm(myMsg)){
			myForm.action=myAction; target=myTarget; myForm.method='post'; myForm.submit();
		}
	//submição sem confirmação
	}else{
		myForm.action=myAction; target=myTarget; myForm.method='post'; myForm.submit();
	}
}

/*-------------------------------------------------------------------------*/
// HTML Element - Altera a classe CSS do elemento setado
/*-------------------------------------------------------------------------*/
function html_changeStyles(myElement,newClass){
	myElement.className = newClass;
}

/*-------------------------------------------------------------------------*/
// HTML Element - Exibe e/ou oculta elementos
/*-------------------------------------------------------------------------*/
function html_hideShow(hideID,showID){
	if(hideID!=0){
		var hide = html_getElement(hideID);
		hide.style.display = "none";
	}
	if(showID!=0){
		var show = html_getElement(showID);
		show.style.display = "";
	}
}

/*-------------------------------------------------------------------------*/
// HTML Element - Elimina conteúdo de um elemento
/*-------------------------------------------------------------------------*/
function html_clean(myID){
	var myElement = html_getElement(myID);
	myElement.innerHTML = "&nbsp;";
}

/*-------------------------------------------------------------------------*/
// HTML Element - Imprime HTML em elemento
/*-------------------------------------------------------------------------*/
function html_print(targetID,html){
	var myElement = html_getElement(targetID);
	myElement.innerHTML = html;
}

/*-------------------------------------------------------------------------*/
// TEXT - Substitui texto em elemento
/*-------------------------------------------------------------------------*/
function text_replace(txtOrigin,txtDestiny){
	var origin = html_getElement(txtOrigin);
	var destiny = html_getElement(txtDestiny);
	if(!origin && !destiny){
		return;
	}
	destiny.innerHTML = origin.innerHTML;
}

/*-------------------------------------------------------------------------*/
// TEXT - Altera o tamanho da fonte
/*-------------------------------------------------------------------------*/
function text_size(op,num,myID,sizeMin,sizeMax){
	var myText = html_getElement(myID);
	if(op=='dim'){
		if(fontSize!=sizeMin){
			fontSize = fontSize-num;
			myElement.className = "textSize"+(fontSize);
		}
	}else{
		if(fontSize!=sizeMax){
			fontSize = fontSize+num;
			myElement.className = "textSize"+(fontSize);
		}
	}
}

/*-------------------------------------------------------------------------*/
// Format - Formata a data para DDMMYYYY
/*-------------------------------------------------------------------------*/
function for_DDMMYYYY(myID){
	var myField = html_getElement(myID);
	var myDate = myField.value;
	var lenDate = myDate.length;
	if(myDate.indexOf("/")==-1){
		if(lenDate>8){
			alert("Formato incorreto!\nDigite no formato DD/MM/AAAA(sem barras).");
			myField.focus();
			myField.select();
			return false;
		}
		if(lenDate<=0){
			myField.value = myDate;
		}
		if((lenDate>0)&&(lenDate<=1)){
			myField.value = myDate.substr(0,0) + '/' + myDate.substr(0,lenDate);
		}
		if((lenDate>=2)&&(lenDate<=8)){
			myField.value = myDate.substr(0,2) + '/' + myDate.substr(2,2) + '/' + myDate.substr(4,8);
		}
	}
	return true; 
}

/*-------------------------------------------------------------------------*/
// Format - Formata para maiúsculas
/*-------------------------------------------------------------------------*/
function for_UCase(myID){
	myField = html_getElement(myID);
	myField.value = myField.value.toUpperCase(); 
}

/*-------------------------------------------------------------------------*/
// Format - Formata para minúsculas
/*-------------------------------------------------------------------------*/
function for_LCase(myID){
	myField = html_getElement(myID);
	myField.value = myField.value.toLowerCase();
}

/*-------------------------------------------------------------------------*/
// Validation - Expressão regulamentar
/*-------------------------------------------------------------------------*/
function val_expReg(myID,filter){
	var myField = html_getElement(myID);
	if(!filter.test(myField.value)){
    return false;
	}
	return true;
}

/*-------------------------------------------------------------------------*/
// Validation - Valida e-mail
/*-------------------------------------------------------------------------*/
function val_email(myID){
	var mail = html_getElement(myID);
	var filter = /^.+@.+\..{2,3}$/;
	if(!filter.test(mail.value)){
		alert("Informe um e-mail valido!")
    mail.focus();
		mail.select();
    return false;
	}
	return true;
}

/*-------------------------------------------------------------------------*/
// Validation - Valida CPF
/*-------------------------------------------------------------------------*/
function val_CPF(cpfID){
	var cpfField = html_getElement(cpfID);
	var cpf = cpfField.value;
	var i;
	//deleta os pontos
	while((cx=cpf.indexOf("."))!=-1){ 
  	cpf = cpf.substring(0,cx)+cpf.substring(cx+1); 
  }
	//deleta o hífen
	while((cx=cpf.indexOf("-"))!=-1){
		cpf = cpf.substring(0,cx)+cpf.substring(cx+1);
	}
	var c = cpf.substr(0,9); 
	var dv = cpf.substr(9,2);
	var d1 = 0;
	for(i=0; i<9; i++){  
		d1 += c.charAt(i)*(10-i); 
	} 
	if(d1==0){ 
		alert("CPF invalido!");
		cpfField.focus();
		cpfField.select();
		return false; 
	}
	d1 = 11-(d1%11); 
	if(d1>9){
		d1 = 0;
	}
	if(dv.charAt(0)!=d1){
		alert("CPF invalido!");
		cpfField.focus();
		cpfField.select();
		return false; 
	}
	d1 *= 2;
	for (i=0; i<9; i++){
		d1 += c.charAt(i)*(11-i);
	}
	d1 = 11-(d1%11); 
	if(d1>9){
		d1 = 0;
	}
	if(dv.charAt(1)!=d1){
		alert("CPF invalido!");
		cpfField.focus();
		cpfField.select();
		return false;
	}
	cpfField.value = c+'-'+dv;
	return true;
}

/*-------------------------------------------------------------------------*/
// Validation - Teste de CNPJ
/*-------------------------------------------------------------------------*/
function testCNPJ(cnpj,g){ 
	var nr = 0;
	var ind = 2;
	var i;
 	for(i=g;i>0;i--){
  	nr += parseInt(cnpj.charAt(i-1))*ind;
  	if(ind>8){
   		ind = 2;
   	}else{
   		ind++;
   	}
  }
  nr %= 11;
  if(nr==0 || nr==1){
  	nr = 0;
  }else{
    nr = 11-nr;
  }
 	if(nr!=parseInt(cnpj.charAt(g))){
  	return(0);
  }else{
  	return(1);
  }
} 

/*-------------------------------------------------------------------------*/
// Validation - Validação de CNPJ
/*-------------------------------------------------------------------------*/
function val_CNPJ(cnpjID){
	var cnpjField = html_getElement(cnpjID);
	var cnpj = cnpjField.value;
	while((cx=cnpj.indexOf("-"))!=-1){
  	cnpj = cnpj.substring(0,cx)+cnpj.substring(cx+1);
 	}
 	while((cx=cnpj.indexOf("/"))!=-1){
  	cnpj = cnpj.substring(0,cx)+cnpj.substring(cx+1);
 	}
 	while((cx=cnpj.indexOf("."))!=-1){
  	cnpj = cnpj.substring(0,cx)+cnpj.substring(cx+1);
	}
	var cnpjLen = cnpj.length;
  var result;
	result = testCNPJ(cnpj,cnpjLen-2);
  if(result==1){
    result = testCNPJ(cnpj,cnpjLen-1);
  }
  if(result!=1){
		alert("CNPJ inexistente!");
		cnpjField.focus();
		cnpjField.select();
		return false;
	}else{
  	cnpjField.value = cnpj.substr(0,2)+'.'+cnpj.substr(2,3)+'.'+cnpj.substr(5,3)+'/'+cnpj.substr(8,4)+'-'+cnpj.substr(12,2);
	}
	return true;
}

/*-------------------------------------------------------------------------*/
// Validation - Valida CEP
/*-------------------------------------------------------------------------*/
function val_CEP(cepID){
  var cepField = html_getElement(cepID);
	var cep = cepField.value;
	if(!val_expReg(cepID,/^[\-\d]+$/)){
		alert("CEP invalido!\nDigite somente numeros com ou sem hifen.");
		cepField.focus();
		cepField.select();
		return false;
	}
	//deleta o hífen
	while((cx=cep.indexOf("-"))!=-1){
		cep = cep.substring(0,cx)+cep.substring(cx+1);
	}
  var cepLen = cep.length;
  if(cepLen!=8){
		alert("CEP invalido!\nO CEP deve conter 8 numeros.");
		cepField.focus();
		cepField.select();
		return false;
	}
  cepField.value = cep.substr(0,5)+'-'+ cep.substr(5,3);
  return true;
}

/*-------------------------------------------------------------------------*/
// Validation - Valida DDD
/*-------------------------------------------------------------------------*/
function val_DDD(dddID){
  var dddField = html_getElement(dddID);
	var ddd = dddField.value;
	if(!val_expReg(dddID,/^[\d]+$/)){
		alert("DDD invalido!\nDigite somente numeros.");
		dddField.focus();
		dddField.select();
		return false;
	}
  var dddLen = ddd.length;
  if(dddLen!=2){
		alert("DDD invalido!\nO DDD deve conter 2 numeros.");
		dddField.focus();
		dddField.select();
		return false;
	}
  return true;
}

/*-------------------------------------------------------------------------*/
// Validation - Valida telefones
/*-------------------------------------------------------------------------*/
function val_fone(foneID){
  var foneField = html_getElement(foneID);
	var fone = foneField.value;
	if(!val_expReg(foneID,/^[\d]+$/)){
		alert("Telefone invalido!\nDigite somente numeros.");
		foneField.focus();
		foneField.select();
		return false;
	}
  var foneLen = fone.length;
  if(foneLen!=8){
		alert("Telefone invalido!\nO telefone deve conter 8 numeros.");
		foneField.focus();
		foneField.select();
		return false;
	}
  return true;
} 

/*-------------------------------------------------------------------------*/
// Validation - Validação de número máximo de caracters
/*-------------------------------------------------------------------------*/
function val_charMax(myID,maxLen){
	var myField = html_getElement(myID);
	var fieldVlr = myField.value;
	var charNum = html_getElement("charNum");
	var fieldLen = 0;
	
	if(fieldVlr!=""){
		fieldLen = fieldVlr.length;
	}
	
	if(fieldLen>maxLen){
		alert("O limite de caracteres é de " + maxLen + "!");
		myField.value = fieldVlr.substr(0, fieldLen-1);
		myField.focus();
		myField.select();
	}
	charNum.value = myField.value.length;
}

/*-------------------------------------------------------------------------*/
// Browser - Adiciona aos favoritos
/*-------------------------------------------------------------------------*/
function browser_addFav(url,title){
    if(window.sidebar){
		window.sidebar.addPanel(title, url,"");
	}else if(window.opera && window.print){
        var mbm = document.createElement('a');
        mbm.setAttribute('rel','sidebar');
        mbm.setAttribute('href',url);
        mbm.setAttribute('title',title);
        mbm.click();
    }else if(document.all){
		window.external.AddFavorite(url, title);
	}
}

/*-------------------------------------------------------------------------*/
// Browser - Maximiza a janela
/*-------------------------------------------------------------------------*/
function browser_winMax(){
	top.window.moveTo(0,0);
	if(document.all){
		top.window.resizeTo(screen.availWidth,screen.availHeight);
	}else if(document.layers||document.getElementById){
		if(top.window.outerHeight<screen.availHeight||top.window.outerWidth<screen.availWidth){
			top.window.outerHeight = screen.availHeight;
			top.window.outerWidth = screen.availWidth;
		}
	}
}

/*-------------------------------------------------------------------------*/
// Browser - Retorna a resolução do monitor
/*-------------------------------------------------------------------------*/
function browser_resolution(rW,rH){
	var resolution;
	var W;
	var H;
	if(self.screen){
		W = screen.width;
		H = screen.height;
	} else if(self.java){
		var javakit = java.awt.Toolkit.getDefaultToolkit();
		var scrsize = javakit.getScreenSize();
		W = scrsize.width;
		H = scrsize.height;
	}else{
		W = 800;
		H = 600;
	}
	if(rW!=0 && rH!=0){
		resolution = W + "," + H;
	}else if(rW!=0){
		resolution = W;
	}else if(rH!=0){
		resolution = H;
	}
	return resolution;
}

/*-------------------------------------------------------------------------*/
// Browser - Resgata variáveis da url e converte em variáveis acessíveis
/*-------------------------------------------------------------------------*/
function getString(){
	var url = window.location.href;
	var arrSep = url.split("?");
	if(arrSep.length>1){
		var expr = arrSep[1];
		var arrExp = expr.split("&");
		for (i=0 ; i<arrExp.length; i++) {
 			var arrStr = arrExp[i].split("=");
 			eval(arrStr[0]+" = '"+arrStr[1]+"';");
 		}
		return true;
	}else{
		return false;
	}
}

/*-------------------------------------------------------------------------*/
// Browser - Visualizador de imagens em popup redimensionável
/*-------------------------------------------------------------------------*/
function imageViewer(viewer,folder,image){
	var arr = image.split(".");
	var winName = arr[0];
	window.open(viewer+"imageViewer.htm?folder="+folder+"&img="+image, winName, "width=200, height=100");
}