/* global var d */
var d=document

/* get body sroll size */
function bodyScrollW(){return d.body.scrollWidth}
function bodyScrollH(){return d.body.scrollHeight}

/* get body size */
function bodyW(){return d.body.clientWidth}
function bodyH(){return d.body.clientHeight}

/* get html scroll size */
function htmlScrollLeft(){return d.documentElement.scrollLeft}
function htmlScrollTop(){return d.documentElement.scrollTop}

/* get html size */
function htmlW(){return d.documentElement.clientWidth}
function htmlH(){return d.documentElement.clientHeight}

/* text to eval */
function text2eval(text) {return eval('(' + text + ')')}

/* JSON Browser */
var BrowserDetect={
	init:function(){
		this.browser=this.searchString(this.dataBrowser)||'An unknown browser'
		this.version=this.searchVersion(navigator.userAgent)||this.searchVersion(navigator.appVersion)||'an unknown version'
		this.OS=this.searchString(this.dataOS)||'an unknown OS'
	},
	searchString:function(data){
		for(var i=0;i<data.length;i++){
			var dataString=data[i].string
			var dataProp=data[i].prop
			this.versionSearchString=data[i].versionSearch||data[i].identity
			if(dataString){
				if(dataString.indexOf(data[i].subString)!=-1)return data[i].identity
			}else if(dataProp)return data[i].identity
		}
	},
	searchVersion:function(dataString){
		var index=dataString.indexOf(this.versionSearchString)
		if(index==-1)return
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1))
	},
	dataBrowser:[
		{string:navigator.userAgent,subString:'OmniWeb',versionSearch:'OmniWeb/',identity:'OmniWeb'},
		{string:navigator.vendor,subString:'Apple',identity:'Safari'},
		{prop:window.opera,identity:'Opera'},
		{string:navigator.vendor,subString:'iCab',identity:'iCab'},
		{string:navigator.vendor,subString:'KDE',identity:'Konqueror'},
		{string:navigator.userAgent,subString:'Firefox',identity:'Firefox'},
		{string:navigator.vendor,subString:'Camino',identity:'Camino'},
		{string:navigator.userAgent,subString:'Netscape',identity:'Netscape'},
		{string:navigator.userAgent,subString:'MSIE',	identity:'Explorer',versionSearch:'MSIE'},
		{string:navigator.userAgent,subString:'Gecko',identity:'Mozilla',versionSearch:'rv'},
		{string:navigator.userAgent,subString:'Mozilla',identity:'Netscape',	versionSearch:'Mozilla'}
	],
	dataOS:[
		{string:navigator.platform,subString:'Win',identity:'Windows'},
		{string:navigator.platform,subString:'Mac',identity:'Mac'},
		{string:navigator.platform,subString:'Linux',identity:'Linux'}
	]
}

/* Init Browser JSON */
BrowserDetect.init()

/* Check if function exist and execute */
function function_exists(S){return(eval('typeof('+S+')')!='undefined'&&eval('typeof('+S+')')!='unknown')}

/* get element by id */
function $gid(id){return document.getElementById(id)}

/*  Change to value from all tags "a" wich have attribute rel, setting the "a" target */
function relLinks(valor){
	if(!valor)valor='blank'
	var anchors=d.getElementsByTagName('a')
	for(var i=0;i<anchors.length;i++){
		if(anchors[i].getAttribute('href')&&anchors[i].getAttribute('rel')==valor)anchors[i].target='_'+valor
	}
}

/* get element style looking inside of class */
function getStyle(el,styleProp){
	var x=el
	if(x.currentStyle){
		if(styleProp.indexOf('-')!=-1){
			styleProp=styleProp.split('-')
			styleProp=styleProp[0]+styleProp[1].charAt(0).toUpperCase()+styleProp[1].substring(1)
		}
		var y=x.currentStyle[styleProp]
	}else if(window.getComputedStyle)var y=d.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp)
	return y
}

/* get margin and padding from element */
function getMarginPadding(obj){
	if(!obj)return
	var objMarginTop=getStyle(obj,'margin-top')
	var objMarginBottom=getStyle(obj,'margin-bottom')
	var objMargin=(parseInt(objMarginTop.replace('px',''))+parseInt(objMarginBottom.replace('px','')))
	var objPaddingTop=getStyle(obj,'padding-top')
	var objPaddingBottom=getStyle(obj,'padding-bottom')
	var objPadding=(parseInt(objPaddingTop.replace('px',''))+parseInt(objPaddingBottom.replace('px','')))
	var objTotal=objMargin+objPadding
	return [objTotal,objMargin,objPadding]
}

/* reposition for div footer */
function reposFooter(main,footer){
	if(main)var objMain=$gid(main); else return
	if(footer)var objFooter=$gid(footer); else return
	if(!objMain&&!objFooter)return
	var objMainMarginPadding=getMarginPadding(objMain)
	var objFooterMarginPadding=getMarginPadding(objFooter)
	var desTotal=objMainMarginPadding[1]+objFooterMarginPadding[1]
	var h=htmlH()
	var valor=0
	if(objFooter){
		var hFooter=objFooter.offsetHeight
		valor=h-hFooter-desTotal
	}else valor=h
	if(BrowserDetect.browser=='Explorer'&&BrowserDetect.version<7)objMain.style.height=valor+'px'
	objMain.style.minHeight=valor+'px'
	return
}

/* Decodify a url */
function urlDecode(str){
	if(!str)return
	str=str.replace(new RegExp('\\+','g'),' ')
	return unescape(str)
}

/* Codify a url */
function urlEncode(str){
	if(!str)return
	str=escape(str)
	str=str.replace(new RegExp('\\+','g'),'%2B')
	return str.replace(new RegExp('%20','g'),'+')
}

/* Put the absolute element on center */
function getCenterElm(obj){
	obj.style.left=parseInt(htmlScrollLeft()+(htmlW()-obj.offsetWidth)/2)+'px'
	obj.style.top=parseInt(htmlScrollTop()+(htmlH()-obj.offsetHeight)/2)+'px'
	return;
}

/* Remove values from combo */
function comboRemove(obj,valor){
	for(var i=obj.length-1;i>=valor;i--)obj.remove(i)
	var optGrps=obj.getElementsByTagName('optgroup')
	if(optGrps){
		for(var gr=optGrps.length-1;gr>=0;gr--)obj.removeChild(optGrps[gr])
	}
}

/* Add values in combo */
function comboAppend(obj,varId,varValor){
	var OptNew=d.createElement('option')
	OptNew.value=varId
	OptNew.text=varValor
	try{obj.add(OptNew,null)}
	catch(e){obj.add(OptNew)}
}

/* Add group in combo */
function comboAppendGroup(obj,grupo){
	var OptNewGroup=d.createElement('optgroup')
	OptNewGroup.label=grupo
	obj.appendChild(OptNewGroup)
}

/* //
@ param content		Elemento pai
@ param elm		Elemento filho que será removido
// */
function removeElm(content,elm){
	if(!content||!elm)return
	var OBJcontent=$gid(content)
	var OBJelm=$gid(elm)
	if(OBJelm&&OBJcontent)OBJcontent.removeChild(OBJelm)
}

/* //
@ param content		Elemento pai
@ param elm		Elemento filho que será criado
@ param param		Array contendo os parametros do Elemento
// */
function createElm(content,elm,param){
	if(!content||!elm)return
	var cElm=d.createElement(elm)
	if(cElm&&content){
		content.appendChild(cElm)
		if(param){
			for(i in param)cElm.eval(param[i])
		}	
	}
}

/* //
@ param goURL		endereço que será processado
@ param func		função de resposta (callback)
@ param qsArray		Array com a informações que serão passada por querystring - exemplo ['a=1','b=2']
@ param obj		Utilizado somente quando o metodo for POST, pega as informações do obj e gera uma querystring para POST
@ param metodo		Metodo utilizado para submeter
// */
function ajax_request(goURL,func,qsArray,obj,metodo){
	if(!metodo)metodo='GET'
	submitTo=goURL+((qsArray)?((qsArray.length)?'?'+qsArray.join('&'):''):'')
	jsmx.http(metodo,submitTo,func,obj)
}

/* //
@ param goURL		endereço que será processado
@ param qsArray		Array com a informações que serão passada por querystring - exemplo ['a=1','b=2']
// */
function cmd(goURL,qsArray){
	return location=goURL+((qsArray)?((qsArray.length)?'?'+qsArray.join('&'):''):'')
}

/* //
@ param fixo		Elemento de destino
@ param movel		Elemento absoluto que irá para posição do Elemento de destino
@ param xplus		Reajuste na posição no eixo x
@ param yplus		Reajuste na posição no eixo y
// */
function findPos(fixo,movel,xplus,yplus){
	if(!xplus)xplus=0
	if(!yplus)yplus=0
	var curleft=curtop=0
	if(fixo.offsetParent){
		curleft=fixo.offsetLeft
		curtop=fixo.offsetTop
		while(fixo=fixo.offsetParent){
			curleft+=fixo.offsetLeft
			curtop+=fixo.offsetTop
		}
	}
	movel.style.top=curtop+yplus+'px'
	movel.style.left=curleft+xplus+'px'
}

/* //
@ param el			Elemento que será adicionado a classe
@ param sClassName	Nome da classe que será adicionada
// */
function addClassName(el,sClassName){
	var s=el.className
	var p=s.split(' ')
	var l=p.length
	for (var i=0;i<l;i++){
		if(p[i]==sClassName)return
	}
	p[p.length]=sClassName
	el.className=p.join(' ').replace(/(^\s+)|(\s+$)/g,'')
}

/* //
@ param el			Elemento que será removido a classe
@ param sClassName	Nome da classe que será removida
// */
function removeClassName(el,sClassName){
	var s=el.className
	var p=s.split(' ')
	var np=[]
	var l=p.length
	var j=0
	for(var i=0;i<l;i++){
		if(p[i]!=sClassName)np[j++]=p[i]
	}
	el.className=np.join(' ').replace(/(^\s+)|(\s+$)/g,'')
}

/* //
@ param tabela			Tabela que tenha tbody
@ param classe1			Nome da classe css
@ param classe2			Nome da classe css
// */
function rowAddColor(tabela,classe1,classe2){
	if(!classe1)classe1='even'
	if(!classe2)classe2='odd'
	var rows=tabela.tBodies[0].rows
	var l=rows.length
	for (var i=0;i<l;i++){
		if(rows[i].className!='set')rows[i].className=i%2?classe1:classe2
		rowAddEvent(rows[i])
	}
}

function rowAddEvent(row){
	if(typeof row.addEventListener!='undefined')row.addEventListener('mouseover',rowOvercolorSort,false)
	else if(typeof row.attachEvent!='undefined')row.attachEvent('onmouseover',rowOvercolorSort)
	if(typeof row.addEventListener!='undefined')row.addEventListener('mouseout',rowOutcolorSort,false)
	else if(typeof row.attachEvent!='undefined')row.attachEvent('onmouseout',rowOutcolorSort)
}

function rowOvercolorSort(e){
	var elm=(e.srcElement!=undefined)?e.srcElement:e.target
	var tr=(elm.parentNode.tagName=='TR')?elm.parentNode:elm.parentNode.parentNode
	var classcolor=tr.className+' colorover'
	tr.className=classcolor
}

function rowOutcolorSort(e){
	var elm=(e.srcElement!=undefined)?e.srcElement:e.target
	var tr=(elm.parentNode.tagName=='TR')?elm.parentNode:elm.parentNode.parentNode
	var classcolor=tr.className.split(' ')
	tr.className=classcolor[0]
}

/* ------- Temporário ------- */

function hideShowObj(str,sinal){
	var obj=$gid(str)
	if(obj.style.display=='none'){
		obj.style.display=''
		sinal.className='bottom'
	}else{
		obj.style.display='none'
		sinal.className='top'
	}
}

/* ------- Temporário ------- */

// url_encode version 1.0  
function url_encode(str) { 
    var hex_chars = "0123456789ABCDEF";  
    var noEncode = /^([a-zA-Z0-9\_\-\.])$/;  
    var n, strCode, hex1, hex2, strEncode = "";  
	for(n = 0; n < str.length; n++) {  
        if (noEncode.test(str.charAt(n))) {  
        	strEncode += str.charAt(n);  
		} else {  
			strCode = str.charCodeAt(n);  
			hex1 = hex_chars.charAt(Math.floor(strCode / 16));  
			hex2 = hex_chars.charAt(strCode % 16);  
			strEncode += "%" + (hex1 + hex2);  
		}  
	}  
	return strEncode;  
}  

// url_decode version 1.0  
function url_decode(str) {  
	var n, strCode, strDecode = "";  
	for (n = 0; n < str.length; n++) {  
        if (str.charAt(n) == "%") {  
        	strCode = str.charAt(n + 1) + str.charAt(n + 2);  
        	strDecode += String.fromCharCode(parseInt(strCode, 16));  
        	n += 2;  
        } else {  
			strDecode += str.charAt(n);  
		}  
	} 
	
	strDecode = strDecode.replace(new RegExp('%20','g'),' ');
	strDecode = strDecode.replace(new RegExp('\\\\','g'),'');
	
	return strDecode;  
}  

function abreJanela(linkJanela, lag, alt, id, scrolls){
	LeftPosition = (screen.width) ? (screen.width-lag)/2 : 0;
	TopPosition = (screen.height) ? (screen.height-alt)/2 : 0;
	if(navigator.appName=="Microsoft Internet Explorer") {
		window.open(linkJanela,id,'fullscreen=0,channelmode=0,toolbar=0,location=0,directories=0,status=0,scrollbars='+scrolls+',resizable=0,menubar=0,width=' + lag + ',height=' + alt + ',left='+LeftPosition+',top='+TopPosition+'');
	} else {
		window.open(linkJanela,id,'location=0,fullscreen=0,menubar=0,toolbar=0,status=0,screenX=0,screenY=0,scrollbars='+scrolls+',resizable=0,width=' + lag + ',height=' + alt + ',left='+LeftPosition+',top='+TopPosition+'');
	}
}

function preencheCep(string){
	var text = url_decode(string)
	var array = text2eval(text)
	parent.opener.$gid('cep').value      = array['cep'] 
	parent.opener.$gid('endereco').value = array['tipo']+" "+array['logradouro_sem_acento'] 
	parent.opener.$gid('cidade').value   = array['cidade']
	parent.opener.$gid('estado').value   = array['uf']
	parent.opener.$gid('bairro').value   = array['bairro']
	parent.opener.$gid('numero').focus();
	window.close();
}

function paint(id){
	$gid(id).style.backgroundColor='#FFE6D2';
}
    
function unpaint(id){
	$gid(id).style.backgroundColor='';
}

// AJAX
//quick calendar
function displayQCalendar(url,m,y) {
	var http = criarObjMSXMLHttp();
	var ran_no=(Math.round((Math.random()*9999))); 
	//alert(url+'&m='+m+'&y='+y+'&ran='+ran_no)
	http.open('get', url+'&m='+m+'&y='+y+'&ran='+ran_no);
   	http.onreadystatechange = function() {
		if(http.readyState == 4 && http.status == 200) { 
      		var response = http.responseText;
      		if(response) { 
				//alert(http.responseText)
				$gid("quickCalender").innerHTML = http.responseText; 
      		} 
   		} 
	} 
   	http.send(null); 
}

function send(url, funcao){ // funcao = callback
	var req = criarObjMSXMLHttp();
	var calledOnce=false
	req.open("GET", url, true);	
	req.onreadystatechange = function() {
		if (req.readyState < 4 && !calledOnce) {
			popWait()
			calledOnce=true
		}
		if (req.readyState == 4) {
			killWait()
			if (req.status == 200) {		
				funcao(req.responseText)				
			} else {
				alert("Erro!")
			}
			//delete req
			calledOnce = false
		}
	}
    req.send(null)
}

function criarObjMSXMLHttp() {
	if (window.ActiveXObject) {  // IE
		var versoes = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp", "Microsoft.XMLHttp"];	
		for (var i = 0; i < versoes.length; i++) {
			try {
				var objetoXMLHttp = new ActiveXObject(versoes[i]);
				return objetoXMLHttp;
			} catch (ex) {
			}
		}		
	} else if (window.XMLHttpRequest) { // Mozilla, Safari, ...	
		objetoXMLHttp = new XMLHttpRequest();
		return objetoXMLHttp;		
	}	
	return false;	
}

function popWait(){
	var p=document.createElement('div')
	p.id='load'
	document.body.appendChild(p)
	p.style.visibility='hidden'
	p.innerHTML='Loading...'
	p.className='loadingStyle'
	getCenterElm(p)
	p.style.visibility='visible'
}

function killWait(){
	proc=document.getElementById('load')
	if(proc!=null) document.body.removeChild(proc)
	return;
}

/* Put the absolute element on center */
function getCenterElm(obj){
	obj.style.left=parseInt(htmlScrollLeft()+(htmlW()-obj.offsetWidth)/2)+'px'
	obj.style.top=parseInt(htmlScrollTop()+(htmlH()-obj.offsetHeight)/2)+'px'
	return;
}
// AJAX - fim
var id_anexo = 0;
function addAnexo(table_id){
	id_anexo++;
    var tbody = document.getElementById(table_id).getElementsByTagName("TBODY")[0];   
	
	// Link anexo
	var row0 = document.createElement("TR") 
	var th0 = document.createElement("TH")   
    th0.appendChild(document.createTextNode("Link do "+(id_anexo+1)+"º Anexo:"))   
	var td0 = document.createElement("TD")
	// input link anexo
    var text = document.createElement("input");   
    text.setAttribute("type", "text");  
	text.setAttribute("size", "52");  
    text.setAttribute("name", "linkanexo[" + id_anexo + "]");   
    text.setAttribute("id", "linkanexo[" + id_anexo + "]");   
	td0.appendChild(text);  
	
    row0.appendChild(th0);   
    row0.appendChild(td0); 
    tbody.appendChild(row0);
	
	// Anexo:
    var row1 = document.createElement("TR")
    var th1 = document.createElement("TH")   
    th1.appendChild(document.createTextNode((id_anexo+1)+"º Anexo:"))   
    var td1 = document.createElement("TD") 
  	// input file anexo
    var file = document.createElement("input");   
    file.setAttribute("type", "file");  
	file.setAttribute("size", "52");  
    file.setAttribute("name", "anexo[" + id_anexo + "]");   
    file.setAttribute("id", "anexo[" + id_anexo + "]");  
    td1.appendChild(file);  
  
    row1.appendChild(th1);   
    row1.appendChild(td1);    
    tbody.appendChild(row1);  
}

function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
	    while (c.charAt(0)==' ') c = c.substring(1,c.length);
		    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function fontSize(action, container){
	container = typeof(container) != 'undefined' ? container : 'div.texto'; //se não for especificado um container será 'div.texto'
	var pegaTodos = {pega : function(maiorDeTodos){
		var filho;
		// Passo por todos os controles.
		$(maiorDeTodos).children().each(function(i){
			filho = $(this);
			$fs = parseInt($(filho).css('font-size'));
			if (action == 'mais') {
				$fs += 1;
			}
			if (action == 'menos') {
				$fs -= 1;
			}
			$(filho).css('font-size', $fs);
			if ($(filho).children().length != 0) {
				pegaTodos.pega($(filho));
			}
		});
	}};
	pegaTodos.pega($(container));
	$('div#content').css({'height' : ($('div#miolo').height()+30)+'px'});
}