function $$(id) { return document.getElementById(id) } var interface = { Info: { Versao: '0.0.1', Autor: 'Roberto Rabadan', Email: 'roberto@rabadan.com.br' }, pegarObj: function(obj) { if(typeof obj=="undefined")obj=document if(typeof obj=="string")obj=$$(obj) return obj }, tags: function(tagName) { return document.getElementsByTagName(tagName) }, novo: function(tagName,innerHTML) { var newTag=document.createElement(tagName) if(typeof innerHTML=="string") newTag.innerHTML=innerHTML return newTag }, inserirAntes: function(n,o){ o=interface.pegarObj(o) o.parentNode.insertBefore(n,o) }, substituir: function(n,o){ o=interface.pegarObj(o) o.parentNode.replaceChild(n,o) }, remover: function(o){ o=interface.pegarObj(o) o.parentNode.removeChild(o) }, removerClasse: function(o,className) { o=interface.pegarObj(o) var r=eval("/\\b"+className+"\\b/g") o.className=o.className.replace(r,"") }, /* Funcao que permite mudar a classe de um objeto ou array de objetos. Podem ser informadas até duas classes, e a funcao faz a variacao de uma pela outra. Caso seja informada apenas uma, a funcao se torna monodirecional aplicando sempre a classe informada. Ex. mudarClasse (['id-1','id-2','id-3',], 'classA', 'classB') mudarClasse ('id', 'classA', 'classB') mudarClasse ('id', 'classA') => aplica sempre a classe classA */ mudarClasse: function(id, classA, classB) { if (id instanceof Array) for (i=0; i id='tab-1' e no seu div de contexto => id='tab-contexto-1', informar tambem a classe de tab selecionada e nao selecionada (nome das classes). Ex. tabs('1', 'tab' 'selecionada', 'nao_selecionada') O Id dos seus elementos devem ser baseados no prefixo informado (ex. 'tab') sempre assim: tab => id="tab1" (1 é o número da tab) contexto => id="tab-contexto1" */ tabs: function(id, prefixo, cssAtivo, cssDesativo) { for (i=1; i < 100; i++) { if ($$(prefixo+i)) $$(prefixo+i).className = cssDesativo if ($$(prefixo+'-contexto'+i)) interface.display(prefixo+'-contexto'+i, 'none') } $$(prefixo+id).className = cssAtivo interface.display(prefixo+'-contexto'+id, 'block') }, /* Funcao que inverte o display de um elemento a partir de seu id, permite receber apenas um id ou array de ids e/ou tambem o tipo de display css ou um array deles. Quando o parametro display css é informado, a funcao se torna monodirecional administrando apenas o display css informado. Ex. interface.display('id') interface.display('id', 'block') interface.display(['id-1', 'id-2']) interface.display(['id-1', 'id-2'], 'table') interface.display(['id-1', 'id-2'], ['table','inline']) */ display: function(id, d, o) { muda = function (id, d) { ob = $$(id).style, e = ob.display if (d) ob.display = d else e!='none' ? ob.display = 'none' : ob.display = '' } if (id instanceof Array && d instanceof Array) for (i=0; i Título A
conteudo desejado
O css abaixo é recomendado para uso inicial, podendo ser personalizado a vontade: .colapse-titulo { overflow:hidden; cursor:pointer; } .colapse-conteudo { visibility:hidden; height:0px; overflow:hidden; position:relative; } .colapse-conteudo_content { position:relative; } */ col_vars: { colapse_slideSpeed: 10, colapse_timer: 10, objectIdToSlideDown: false, colapse_activeId: false, colapse_slideInProgress: false }, showHideContent: function(e,inputId) { // Apenas esconde o conteudo if(interface.col_vars.colapse_slideInProgress)return; interface.col_vars.colapse_slideInProgress = true; if(!inputId) inputId = this.id; inputId = inputId + ''; var numericId = inputId.replace(/[^0-9]/g,''); var answerDiv = $$('colapse_a' + numericId); interface.col_vars.objectIdToSlideDown = false; if (!answerDiv.style.display || answerDiv.style.display == 'none') { if (interface.col_vars.colapse_activeId && interface.col_vars.colapse_activeId!=numericId) { interface.col_vars.objectIdToSlideDown = numericId; interface.slideContent(interface.col_vars.colapse_activeId,(interface.col_vars.colapse_slideSpeed*-1)); interface.mudarClasse('colapse-icone-'+interface.col_vars.colapse_activeId, 'expandido', 'contraido') interface.mudarClasse('colapse-icone-'+numericId, 'expandido', 'contraido') } else { answerDiv.style.display = 'block'; answerDiv.style.visibility = 'visible'; interface.slideContent(numericId,interface.col_vars.colapse_slideSpeed); interface.mudarClasse('colapse-icone-'+numericId, 'expandido', 'contraido') } } else { interface.slideContent(numericId,(interface.col_vars.colapse_slideSpeed*-1)); interface.col_vars.colapse_activeId = false; interface.mudarClasse('colapse-icone-'+numericId, 'expandido', 'contraido') } }, slideContent: function(inputId,direction) { var obj =$$('colapse_a' + inputId); var contentObj = $$('colapse_ac' + inputId); height = obj.clientHeight; if (height==0) height = obj.offsetHeight; height = height + direction; rerunFunction = true; if (height>contentObj.offsetHeight) { height = contentObj.offsetHeight; rerunFunction = false; } if (height<=1) { height = 1; rerunFunction = false; } obj.style.height = height + 'px'; var topPos = height - contentObj.offsetHeight; if (topPos>0) topPos=0; contentObj.style.top = topPos + 'px'; if (rerunFunction) setTimeout('interface.slideContent(' + inputId + ',' + direction + ')',interface.col_vars.colapse_timer); else { if(height<=1){ obj.style.display='none'; if(interface.col_vars.objectIdToSlideDown && interface.col_vars.objectIdToSlideDown!=inputId){ interface.display('colapse_a' + interface.col_vars.objectIdToSlideDown,'block'); $$('colapse_a' + interface.col_vars.objectIdToSlideDown).style.visibility='visible'; interface.slideContent(interface.col_vars.objectIdToSlideDown,interface.col_vars.colapse_slideSpeed); }else{ interface.col_vars.colapse_slideInProgress = false; } }else{ interface.col_vars.colapse_activeId = inputId; interface.col_vars.colapse_slideInProgress = false; } } }, initShowHideDivs: function() { var divs = interface.tags('DIV'); var divCounter = 1; for(var no=0;no */ validaForm: function(f) { for(var i=0; i < f.length; i++) if (!f.elements[i].value) { alert("Por favor, preencha o campo " + f.elements[i].title) f.elements[i].focus() return false } }, /* FUNCAO AJAX PARA CARREGAR CONTEUDOS DINAMICAMENTE ------------------------------------------------- Exemplo de como chamar a funcao... proAjax( "pagina.php", // url "parametro1=22¶metro2=23", // parametros (completos) "id", // id da div de retorno "block", // parametro css display da div de retorno (block/none/inline, etc) "sim", // permitir retorno innerHTML (sim/nao) "id-loading", // id do elemento loading "sim", // utilizar alert ao finalizar procedimento (sim/nao) "A exclusao foi realizada com sucesso!" // mensagem para o alert (se sim) ); */ proAjax: function( url, parametros, div_retorno, display_retorno, innerHTML_retorno, loading, opcao_alert, msg_alert, callBack ) { // Instanciando xmlhttp para trabalhar com ajax try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } if (!xmlhttp && typeof XMLHttpRequest != 'undefined' ) { try { xmlhttp = new XMLHttpRequest(); } catch (e) { xmlhttp = false ; } } interface.overlay_transparent(); interface.display(loading, 'block'); xmlhttp.open("POST", url, "TRUE"); xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1"); xmlhttp.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate"); xmlhttp.setRequestHeader("Cache-Control", "post-check=0, pre-check=0"); xmlhttp.setRequestHeader("Pragma", "no-cache"); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4) { if (xmlhttp.status == 200) { retorno=xmlhttp.responseText interface.display(loading, 'none'); interface.overlay_transparent(); interface.display('div_modal_loading', 'none'); interface.display(div_retorno, display_retorno); if (innerHTML_retorno == "sim") $$(div_retorno).innerHTML=retorno; if (opcao_alert == "sim") alert(msg_alert); if(callBack){ callBack(); } } else //a mensagem abaixo pode aparecer tbm se o site não estiver dentro de um servidor alert("Ocorreu um erro na sua solicitação(Erro:"+ xmlhttp.status +").\nPor favor, tente novamente dentro de alguns instantes!"); } } xmlhttp.send(parametros); }, exemploAjax: function(id) { interface.proAjax( "ajax.html", // url "n=n", // parametros (completos) "ajax-exemplo", // id da div de retorno "block", // parametro css display da div de retorno (block/none/inline, etc) "sim", // permitir retorno innerHTML (sim/nao) "ajax-exemplo", // id do elemento loading "nao", // utilizar alert ao finalizar procedimento (sim/nao) "n" // mensagem para o alert (se sim) ); }, /* Funcao que pode trabalhar em conjunto com caixas de dialogo modais, criando uma camada intermediaria opaca entre a caixa de dialogo e o conteudo da pagina */ overlay: function(display) { var showing = false; if($('#modal-overlay').css('display')=='none'){ $('#modal-overlay').css('width',$(window).width()); $('#modal-overlay').css('height',$('#geral').height()+50); $('#modal-overlay').show(); } else{ $('#modal-overlay').hide(); } var s = interface.tags('SELECT') for(i=0; i < s.length; i++) { if(!s[i].id) s[i].id = Math.random() if(showing){ interface.display(s[i].id, 'none') } else{ if (display){ interface.display(s[i].id, display) } else{ interface.display(s[i].id, 'inline') } } } }, /* Funcao que pode trabalhar em conjunto com caixas de dialogo modais, criando uma camada intermediaria transparente entre a caixa de dialogo e o conteudo da pagina */ overlay_transparent: function(display) { var showing = false; if($('#modal-overlay-transparent').css('display')=='none'){ $('#modal-overlay-transparent').css('width',$(window).width()); $('#modal-overlay-transparent').css('height',$('#geral').height()+50); $('#modal-overlay-transparent').show(); } else{ $('#modal-overlay-transparent').hide(); } var s = interface.tags('SELECT') for(i=0; i < s.length; i++) { if(!s[i].id) s[i].id = Math.random() if(showing){ interface.display(s[i].id, 'none') } else{ if (display){ interface.display(s[i].id, display) } else{ interface.display(s[i].id, 'inline') } } } } } // Fim interface window.onload = interface.initShowHideDivs;