/*  ---------------------------  FUNCOES DE USO GERAL  ---------------------------  */
function $id(elementId) {
	/*
	 * Retorna o objeto com o id passado por parametro
	 * @author: Felipe Tadeu <felipe@dotcode.com.br>
	 * @since: 09/03/2009
	 */
	return document.getElementById(elementId);
}

function addEvent(object, eventType, doIt){
	/*
	 * Adiciona uma fun��o a um evento de um objeto
	 * @author: Felipe Tadeu <felipe@dotcode.com.br>
	 * @since: 09/03/2009
	 */
	if(object.addEventListener){ // ALL BROWSERS
		object.addEventListener(eventType, doIt, false);
		return true;
	} else if (object.attachEvent){ // IE sUx
		var r = object.attachEvent('on'+eventType, doIt);
		return r;
	} else 	return false;
}
/*  ---------------------------  FIM FUNCOES DE USO GERAL  ---------------------------  */

/*  ---------------------------  FUNCOES DE AJAX  ---------------------------  */
var aXmlIds = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "MICROSOFT.XMLHTTP.1.0", "MICROSOFT.XMLHTTP.1", "MICROSOFT.XMLHTTP"];

// Adiciona evento loadAjax() no carregamento da p�gina
addEvent(window,'load', loadAjax);

function loadAjax() {
	/*
	 * Prepara os formul�rios que ser�o enviados via ajax
	 * @author: Felipe Tadeu <felipe@dotcode.com.br>
	 * @since: 09/03/2009
	 */
    var forms = document.getElementsByTagName("form");
    for (var i=0; i<forms.length;i++){
        var frm_class = forms[i].className;
        if(frm_class && frm_class.search("dc_form") >= 0) {
            dc_ajax.loadform(forms[i]);
        }
    }
}

function dc_ajax () {}
function dc_objeto () {}

// fun��o que prepara o formul�rio para ser enviado via ajax
dc_ajax.loadform = function (form) {
	var inputs = form.getElementsByTagName('input');
	var inputsLength = inputs.length;
	for(var ipts=0; ipts<inputsLength; ipts++){
		if(inputs[ipts].type == 'file'){
			inputs[ipts].onchange = dc_ajax.fileChange;
		}
	}
    form.onsubmit = dc_ajax.submit;
    form.getParams = dc_ajax.getParams;
    form.http = dc_ajax.HTTPObject();
    form.async = form.getAttribute('async') ? true : false;
    form.working = false;
    form.callback = eval(form.getAttribute('callback'));
	form.redirect = form.getAttribute('redirect');
    if(typeof(dc_form_validate) == "function"){
        form.validate = dc_form_validate;
    }
    else {
        form.validate = function () { return true; }
    }
    return true;
}

// fun��o para fazer requisi��o sem formulario
dc_ajax.noForm = function (oHTML, method, action, params, async, callback, disable_loading) {
    if(!oXMLHTTP) {
        var oXMLHTTP = dc_ajax.HTTPObject();
        dc_objeto.working = false;
    }
    if(!dc_objeto.working) {
        if(typeof(eval(callback)) == "function"){ dc_objeto.callback = eval(callback); }
        else { dc_objeto.callback = function(e) { return e; } }

        if(method == "post"){
            oXMLHTTP.open(method,action,async);
            dc_objeto.data = params;
            oXMLHTTP.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            oXMLHTTP.setRequestHeader("Content-Length", dc_objeto.data.length);
        }
        else {
            oXMLHTTP.open(method, action+'?'+params, async)
            dc_objeto.data=null;
        }
        if(async) {
            oXMLHTTP.onreadystatechange = function() {
                if (oXMLHTTP.readyState == 4) {
                    dc_objeto.working = false;
                    if (disable_loading != true) {
                        dc_ajax_aguarde();
                    }
                    if(oXMLHTTP.responseXML){
                        var response = oXMLHTTP.responseXML;
                    }
                    else {
                        var response = oXMLHTTP.responseText;
                    }
                    return dc_objeto.callback(response);
                }
                return false;
            }
            oXMLHTTP.send(dc_objeto.data);
            dc_objeto.working = true;
            if (disable_loading != true) {
                dc_ajax_aguarde();
            }
        }
        else {
            dc_objeto.working = true;
            if (disable_loading != true) {
                dc_ajax_aguarde();
            }
            oXMLHTTP.send(dc_objeto.data);
            dc_objeto.working = false;
            if (disable_loading != true) {
                dc_ajax_aguarde();
            }
            if(oXMLHTTP.responseXML){
                var response = oXMLHTTP.responseXML;
            }
            else {
                var response = oXMLHTTP.responseText;
            }
            return dc_objeto.callback(response);
        }
    }
    else { alert('Ocupado: ' + arguments); }
    return true;
}

// fun��o que envia o formulario via ajax
dc_ajax.submit = function() {
    var IE = document.all;
    if(!this.working) {
        if(this.validate()){
            var http = this.http;
            if(this.method == "post"){
                http.open(this.method, this.action, this.async);
                this.data = this.getParams();
                http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                http.setRequestHeader("Content-Length", this.data.length);
            }
            else{
                http.open(this.method, this.action+'?'+this.getParams(), this.async);
                this.data=null;
            }
            if(this.async) {
                http.onreadystatechange = function() {
                    if (http.readyState == 4) {
                        this.working = false;
                        dc_ajax_aguarde();
                        if(http.responseXML){
                            var response = http.responseXML;
                        }
                        else {
                            var response = http.responseText;
                        }
     					try {
                            if(IE) {
                                if(this.callback != null) {
                                    this.callback(response);
                                } else {
                                    if(showMsg(response) == 1 && this.redirect != null) {
        	                            window.setTimeout("window.location.href = '" + this.redirect + "';", 1500);
                                    }
                                }
                            } else {
                                this.callback(response);
                            }
			        	} catch(e) {
				            if(showMsg(response) == 1 && this.redirect != null){
                                window.setTimeout("window.location.href = '" + this.redirect + "';", 1500);
                            }
				        }
                    }
                }
                http.send(this.data);
                this.working = true;
                dc_ajax_aguarde();
            }
            else {
                this.working = true;
                dc_ajax_aguarde();
                http.send(this.data);
                this.working = false;
                dc_ajax_aguarde();
                if(http.responseXML){
                    var response = http.responseXML;
                }
                else {
                    var response = http.responseText;
                }
				try {
                    if(IE) {
                        if(this.callback != null) {
                            this.callback(response);
                        } else {
                            if(showMsg(response) == 1 && this.redirect != null) {
	                            window.setTimeout("window.location.href = '" + this.redirect + "';", 1500);
                            }
                        }
                    } else {
                        this.callback(response);
                    }
				} catch(e) {
	     			if(showMsg(response) == 1 && this.redirect != null){
	                    window.setTimeout("window.location.href = '" + this.redirect + "';", 1500);
                    }
				}
            }
        }
    }
    return false;
}

// instancia objeto do ajax
dc_ajax.HTTPObject = function() {
    if (window.XMLHttpRequest) {
        if (!this.http) {
            return new XMLHttpRequest();
        }
    }
    else if (window.ActiveXObject)
    {
        for (var i = 0; i < aXmlIds.length; i++)
        {
            try
            {
                return new ActiveXObject(aXmlIds[i]);
                break;
            } catch(e) { }
        }
    }
    return false;
}

//funcao que pega os parametros do formul�rio e prepara para envio
dc_ajax.getParams = function() {
    var params = new Array();
    for(var element=0; element<this.elements.length; element++) {
        var param = this.elements[element];
        if(param && typeof param == "object" && param.name && (param.value || (param.options && param.options.length > 0))) {
            if(param.type == "radio" || param.type == "checkbox") {
                if(param.checked)
                    params.push(param.name + '='+ escape(param.value));
                else
                    continue;
            }
            else if(param.type == "select-multiple") {
				var selectOptions = param.getAttribute('select-options');
				var selectLength = param.options.length;
                for(var idxOption=0; idxOption<selectLength; idxOption++) {
                    if(param[idxOption].selected || selectOptions == 'all')
                        params.push(param.name + '[]='+ escape(param[idxOption].value));
                    else
                        continue;
                }
            }
            else {
                if(!isEmpty(param.value)) {
                    params.push(param.name + '=' + escape(param.value));
                }
            }
        }
    }
    return params.join('&');
}

dc_ajax.fileChange = function(){
	/*
	 * FunÃ§Ã£o usada para upload de arquivos via AIM AJAX dinamico
	 * @author: Felipe Tadeu <felipe@dotcode.com.br>
	 * @since: 22/03/2009
	*/
    dc_ajax_aguarde();
	// inicializa variaveis
	var frameId = "if_"+this.id;
    var inputId = this.id;

	if(! $id(frameId)){
		// cria Iframe dinamicamente para receber o post do arquivo
		var oIframe = document.createElement("IFRAME");
		oIframe.setAttribute("id", frameId);
		oIframe.setAttribute("name", frameId);
		oIframe.style.visibility = "hidden";
		oIframe.style.position = "absolute"
		oIframe.style.top = "0px";
		oIframe.style.left = "0px";
		document.body.appendChild(oIframe);

        // registra evento callback no load do iframe, executado quando termina o upload
        var framecb = eval(this.getAttribute('callback'));
      	addEvent($id(frameId), 'load', function (){ framecb(frameId, inputId); });
	}
	window.frames[frameId].name = frameId; // IE sUx

	// seta o target do formulario para o Iframe criado
	if(this.form.target) { var frm_target = this.form.target; }
	this.form.target = frameId;
	// seta o enctype do formulario para post de arquivo
	if(this.form.enctype) { var frm_enctype = this.form.enctype; }
	this.form.enctype = "multipart/form-data"; // está bugando IE (tive que setar no form no HTML)
	// envia o formulario
	this.form.submit();
	// volta os atributos setados pelo formulario para o valor anterior
	this.form.target = frm_target ? frm_target : '';
	this.form.enctype = frm_enctype ? frm_enctype : '';

    // troca o tipo do arquivo para hidden
    dc_ajax.replaceInput(this, 'hidden');
}

dc_ajax.replaceInput = function(obj, type) {
    /** função para trocar o tipo de um input type file para outro tipo de input
    @author: Rodrigo Campos <rodrigo@dotcode.com.br>
    @since: 10/04/2009 **/
    var newO=document.createElement('input');
	var oldRequire = obj.getAttribute('require');
    newO.setAttribute('type', type);
    newO.setAttribute('name',obj.getAttribute('name'));
    newO.setAttribute('id',obj.getAttribute('id'));
	if(oldRequire != null)
    {
        newO.setAttribute('require', oldRequire);
    }
    newO.setAttribute('readonly', 'readonly');
    obj.parentNode.replaceChild(newO, obj);
}


function dc_ajax_aguarde() {
    /** função para abrir e fechar o "loading"
	@author: Rodrigo Campos <rodrigo@dotcode.com.br>
	@since: 16/04/2009 **/
	var div_aguarde = $id('div_aguarde');
	if(div_aguarde.style.display == "block") {
	    dc_closedivaguarde(div_aguarde);    		
	} else {
	    dc_opendivaguarde(div_aguarde);
	}
}


/*  ---------------------------  FIM FUNCOES DE AJAX  ---------------------------  */


/*  ---------------------------  FUNCOES DE CALLBACK DO AJAX  ---------------------------  */
var TOTALTRY = 0;
function loginMsg(xMSG){
    if(showMsg(xMSG) == 1){
        window.location = "adm.php";
    } else {
       TOTALTRY++;
       if (TOTALTRY>=3) {
           document.getElementById('p_captcha').style.display = "block";
       }
    }
}

function loginMsgCli(xMSG){
    if (showMsg(xMSG) == 1){
        window.location = "adm.php";
    }
}

function addMsg(xMSG) {
    if(showMsg(xMSG) == 1){
	    window.setTimeout("window.location.href = window.location.href.replace(/#/,'');", 1500);
    }
}

function showMsg(xMSG, statusCode, callback) {
    var vIE = dc_getIEVersion();
    if (vIE && vIE < 7) {
        showHideSelect("hide");
    }

    var msgs = new Array();
    var stsCode = statusCode;

    var cbParams = '';
    if(arguments.length > 3) {
        for(var w=3; w<arguments.length; w++) {
            cbParams += "'" + arguments[w] + "'";
            if(w<arguments.length-1){
                cbParams += ', ';
            }
        }
    }

    if(typeof(xMSG) == "object" && xMSG.documentElement) {
        var statusNode = xMSG.documentElement.getElementsByTagName('status')[0];
        var stsCode = statusNode.getAttribute("code");
        var msgsNodes = statusNode.childNodes;

        for(var j=0; j<msgsNodes.length; j++){
            if(msgsNodes[j].nodeType == 1){
                msgs.push(msgsNodes[j].childNodes[0].nodeValue);
            }
        }
    }
    else if(typeof(xMSG) == "object") {
        for(var j=0; j<xMSG.length; j++){
            msgs.push(xMSG[j]);
        }
    }
    else {
        msgs.push(xMSG);
    }

	/** Divs customiz�veis para erro, ok e prompt - by Rodrigo **/
	var div_msg = $id("div_msg");
	var div_boxesq = div_msg.getElementsByTagName('div')[0]; div_boxesq.innerHTML = "";
	var div_boxdir = div_msg.getElementsByTagName('div')[1];
    var div_boxclose = div_msg.getElementsByTagName('div')[2]; div_boxclose.style.display = "block";

    var valor_erro = 0;
    if(stsCode == 1) {
	    div_msg.style.display = 'block';
        div_msg.className = "box box_ok";
        var img = document.createElement('img');
        img.src = "images/icon_sucess.gif";
        div_boxesq.appendChild(img);
		div_boxdir.innerHTML = "<ul id=\"list_itens\"><li>" + msgs.join("</li><li>") + "</li></ul>";
		dc_opendivflutuante('div_msg');
    }
    else if(stsCode == 2) {
        div_msg.style.display = 'block';
        div_msg.className = "box box_inform";
        var img = document.createElement('img');
        img.src = "images/icon_question.gif";
        div_boxesq.appendChild(img);
		div_boxdir.innerHTML = "<ul id=\"list_itens\"><li>" + msgs.join("</li><li>") + "</li></ul>";
        div_boxdir.innerHTML += "<input class='botao' type='button' value='Sim' onclick=\"" + callback + "(" + cbParams + ");\" style='cursor:pointer;'/>&nbsp;&nbsp;&nbsp;&nbsp;<input class='botao' type='button' value='N&atilde;o' onclick=\"dc_closedivflutuante('div_msg');\" style='cursor:pointer;'/>";
        div_boxclose.style.display = "none";
		dc_opendivflutuante('div_msg');
    }
    else {
	    div_msg.style.display = 'block';
        div_msg.className = "box box_erro";
        var img = document.createElement('img');
        img.src = "images/icon_erro.gif";
        div_boxesq.appendChild(img);
		div_boxdir.innerHTML = "<ul id=\"list_itens\"><li>" + msgs.join("</li><li>") + "</li></ul>";
		dc_opendivflutuante('div_msg');
    }
    return stsCode;
}

function hideMsg() {
    /**  esconde a div flutuante e faz algumas altera��es a mais no IE6.0
    @author: Rodrigo Campos <rodrigo@dotcode.com.br> **/
    var vIE = dc_getIEVersion();
    dc_closedivflutuante("div_msg");
    if (vIE && vIE < 7) {
        showHideSelect("show");
    }
}

function resetSelect(hSelect, sIndex) {
    if(sIndex == undefined) sIndex=0;
    for(var i=hSelect.length; i>=sIndex; i--){
        hSelect.remove(i);
    }
}

function showHideSelect(type) {
    var oSelects = document.getElementsByTagName('select');
    for (var i=0; i<oSelects.length; i++) {
        if (type=="hide") {
            oSelects[i].style.visibility = "hidden";
        } else if(type=="show") {
            oSelects[i].style.visibility = "visible";
        }
    }
}

function ShowHide(sHTML) {
    var oHTML = $id(sHTML);
	if (oHTML.style.display=="block") {
		oHTML.style.display="none";
	} else {
		oHTML.style.display="block";
	}
}

function updateTable(oXml){
    if(oXml.documentElement.getElementsByTagName('resultset').length == 0){
        showMsg(oXml);
        return true;
    }
	var idreg = 0;
    var tbl = $id("listagem");
    var editTbl = tbl.getAttribute("editScript");
    var delTbl = tbl.getAttribute("delScript");
    var tb = tbl.getElementsByTagName("tbody")[0];
    cleanTable(tb); // IE SUUUUUXX

	// pegando os resultados do resultset e preenchendo a tabela de listagem
	var resultNodes = oXml.documentElement.getElementsByTagName('resultset')[0].getElementsByTagName("row");
    for(var i=0; i<resultNodes.length; i++){
        var irw = tb.insertRow(i);
        var resultChild = resultNodes[i].childNodes;
        var w=0;
        for(var j=0;j<resultChild.length;j++){
            if(resultChild[j].nodeType == 1){
                if(w == 0){
                    if (resultChild[j].childNodes.length > 0 && delTbl) {
                        irw.setAttribute('id',resultChild[j].childNodes[0].nodeValue);
                        var oTD = document.createElement('td');
						oTD.className = "textcenter";
						oTD.innerHTML = "<input type=\"checkbox\" name=\"checkbox2\" class=\"nostyle\" iddel=\""+resultChild[j].childNodes[0].nodeValue+"\"/>";
						irw.appendChild(oTD);
						idreg = resultChild[j].childNodes[0].nodeValue;
                    } else if (!delTbl) {
                        irw.setAttribute('id',resultChild[j].childNodes[0].nodeValue);
					    var oTD = document.createElement('td');
						oTD.className = "textcenter";
						oTD.innerHTML = resultChild[j].childNodes[0].nodeValue;
						irw.appendChild(oTD);
                    } else {
                        irw.setAttribute('id',resultChild[j].childNodes[0].nodeValue);
                        var oTD = document.createElement('td');
						oTD.className = "textcenter";
						oTD.innerHTML = resultChild[j].childNodes[0].nodeValue;
						irw.appendChild(oTD);
                    }
                }
				else if(w==1) {
				    if(resultChild[j].childNodes.length > 0 && editTbl) {
            			irw.insertCell(w).innerHTML = "<strong><a href='"+editTbl+idreg+"'>"+resultChild[j].childNodes[0].nodeValue+"</a></strong>";
					} else if (!delTbl) {
                        var oTD = document.createElement('td');
						oTD.className = "textcenter";
						oTD.innerHTML = resultChild[j].childNodes[0].nodeValue;
						irw.appendChild(oTD);
					} else {
                        irw.insertCell(w).innerHTML = resultChild[j].childNodes[0].nodeValue;
                    }
				}				
                else {
				    if (resultChild[j].childNodes.length > 0) {
					    var oTD = document.createElement('td');
						oTD.className = "textcenter";
						oTD.innerHTML = resultChild[j].childNodes[0].nodeValue;
						irw.appendChild(oTD);
                    } else {
                        irw.insertCell(w).innerHTML = "&nbsp;";
                    }
                }
                w++;
            }
        }
    }
	// gerando o link dinamicamente do efeito de busca
	var iresultSearch = oXml.documentElement.getElementsByTagName('resultsearch');
	if(iresultSearch.length > 0){
		var resultSearch = iresultSearch[0].childNodes;
		var x=0;
		var dLink = '';
		for (var k=0; k<resultSearch.length; k++) {
			if (resultSearch[k].nodeType == 1) {
				if (x > 0) {
					dLink += '&'
				}
				dLink += resultSearch[k].nodeName + '=' + resultSearch[k].childNodes[0].nodeValue;
				x++
			}
		}

		// atributos necess�rios para gera��o da pagina��o
		var totalregistros = oXml.documentElement.getElementsByTagName('resultset')[0].getAttribute('totalregistros');
		var limitregistros = oXml.documentElement.getElementsByTagName('resultset')[0].getAttribute('limitregistros');
		var pagina = oXml.documentElement.getElementsByTagName('resultset')[0].getAttribute('pagina');
		var oScript = oXml.documentElement.getElementsByTagName('resultset')[0].getAttribute('script');
		generatePaging(totalregistros, limitregistros, pagina, dLink, oScript);
	}
    initTabela();
    return true;
}

function updateTableCustom(oXml){
    if(oXml.documentElement.getElementsByTagName('resultset').length == 0){
        showMsg(oXml);
        return true;
    }

    var tbl = $id("listagem");
    trId = tbl.getAttribute('trId');

    // l� cabe�alho da tabela, e joga os parametros em array
    var thRef = {};
    var th = tbl.getElementsByTagName("thead")[0].getElementsByTagName("tr")[0].getElementsByTagName("th");
    for(var i=0; i<th.length; i++){
        thRef[th[i].getAttribute("ref")] = i;
    }

    var tb = tbl.getElementsByTagName("tbody")[0];
    cleanTable(tb); // IE SUUUUUXX

	// pegando os resultados do resultset e preenchendo a tabela de listagem
	var resultNodes = oXml.documentElement.getElementsByTagName('resultset')[0].getElementsByTagName("row");
    for(var i=0; i<resultNodes.length; i++){
        var irw = tb.insertRow(i);
        var resultChild = resultNodes[i].childNodes;
        for(var j=0;j<resultChild.length;j++){
            if(resultChild[j].nodeType == 1 && thRef[resultChild[j].nodeName] != undefined){
                if(resultChild[j].nodeName == trId){
                    irw.setAttribute('id',resultChild[j].childNodes[0].nodeValue);
                }
                if (resultChild[j].childNodes.length > 0) {
                    irw.insertCell(thRef[resultChild[j].nodeName]).innerHTML = resultChild[j].childNodes[0].nodeValue;
                } else {
                    irw.insertCell(thRef[resultChild[j].nodeName]).innerHTML = "&nbsp;";
                }
            }
        }
    }

    initTabela();
    return true;
}

function getTableResult(oXml)
{
    /** função para pegar o resultado do XML e atualizar a tabela, ou se vier
    vazio, limpa a tabela sem retornar mensagem para o usuário
    @author: Rodrigo Campos <rodrigo@dotcode.com.br>
    @since: 30/04/2009 **/

    if(oXml.documentElement.getElementsByTagName('resultset').length == 0){
        var tbl = $id("listagem");
        var tb = tbl.getElementsByTagName("tbody")[0];
        cleanTable(tb); // IE SUUUUUXX
    } else {
        updateTable(oXml);
    }
}

function generatePaging(total, limit, pagina, link, oScript)
{
    /* function to generate paging dynamically to HTML by the search engine.
    @author: Rodrigo Campos <rodrigo@dotcode.com.br>
    @since: 03/11/2008 */
    var html = "";
    var min_pag = 0;
    var max_pag = 0;
    var total_paginas = 0;
    var divP = $id("pagi");
    var paginas = 5;

    divP.innerHTML = "";
    total_paginas = Math.ceil(total/limit);
    if (parseInt(total) > parseInt(limit))
    {
        html += "<div class=\"paging\">";
        if (parseInt(pagina)>1)
        {
            var pagmenor = parseInt(pagina)-1;
            html += "<a href=\"javascript:getPaging("+limit+", 1, '"+link+"', '"+oScript+"')\" class=\"bluetogreen\">&laquo; First&nbsp;</a>";
            html += "<a href=\"javascript:getPaging("+limit+", "+pagmenor+", '"+link+"', '"+oScript+"')\" class=\"bluetogreen\">&lsaquo; Previous |</a>&nbsp;";
        } else {
            html += "&laquo; First &lsaquo; Previous |&nbsp;";
        }
        if (parseInt(total_paginas) <= parseInt(paginas)) {
            min_pag = 1;
            max_pag = total_paginas;
        } else if (parseInt(pagina) >= parseInt(Math.ceil(paginas/2))) {
            if(parseInt(pagina) <= parseInt(total_paginas - Math.floor(paginas/2))) {
                min_pag = parseInt(pagina) - Math.floor(paginas/2);
                max_pag = parseInt(pagina) + Math.floor(paginas/2);
            } else if (parseInt(pagina) > parseInt(total_paginas - Math.floor(paginas/2))) {
                min_pag = (pagina-(2*Math.floor(paginas/2)))+(total_paginas - pagina);
                max_pag = total_paginas;
            }
        } else {
            min_pag=1;
            if(parseInt(paginas)>parseInt(total_paginas)) { max_pag=total_paginas; }
            else { max_pag=paginas; }
        }

        for(var i=parseInt(min_pag); i<=parseInt(max_pag); i++) {
            if(pagina==i) {
                html += i + "&nbsp;|&nbsp;";
            } else {
                html += "<a class=\"bluetogreen\" href=\"javascript:getPaging("+limit+", "+i+", '"+link+"', '"+oScript+"')\">"+i+"</a>&nbsp;|&nbsp;";
            }
        }
        if(parseInt(pagina)<parseInt(total_paginas)) {
            pagmaior = parseInt(pagina)+1;
            html += "<a href=\"javascript:getPaging("+limit+", "+pagmaior+", '"+link+"', '"+oScript+"')\" class=\"bluetogreen\">Next &rsaquo;</a>";
            html += "<a href=\"javascript:getPaging("+limit+", "+total_paginas+", '"+link+"', '"+oScript+"')\" class=\"bluetogreen\"> Last &raquo;</a>";
        } else {
            html += "Next &rsaquo; Last &raquo;";
        }
        html += "</div>";
    }
    divP.innerHTML = html;
}

function getPaging(limit, pagina, link, script)
{
    /* fun��o que faz a pagina��o propriamente dita.
          @author: Rodrigo Campos <rodrigo@dotcode.com.br> */
    var vLink = "";
    if (link != null && link != '') {
        vLink = link + "&pag=" + pagina + "&limit=" + limit;
    } else {
        vLink = "pag=" + pagina + "&limit=" + limit;
    }
    dc_ajax.noForm(this,'get',script,vLink,false,updateTable);
}
/*  ---------------------------  FIM FUNCOES DE CALLBACK DO AJAX  ---------------------------  */

/*  ---------------------------  FUNCOES DE ABAS  ---------------------------  */
function Tab(oTab)
{
    var tabs_name = oTab.parentNode;
    var tabs = tabs_name.parentNode;
    var tabs_container = $id('tabs_container');

    var tn = tabs_name.getElementsByTagName('div');
    for(var i=0;i<tn.length;i++) {
        if(tn[i].id == oTab.id) {
            tn[i].className = 'tab_on';
        }
        else {
            tn[i].className = 'tab';
        }
    }

    var tc = tabs_container.childNodes;

    for(var i=0;i<tc.length;i++) {
        if(tc[i].nodeName == 'DIV'){
            if(tc[i].id == oTab.id + '_container') {
                tc[i].style.display = 'block';
            }
            else {
                tc[i].style.display = 'none';
            }
        }
    }
    return true;
}
/*  ---------------------------  FIM FUNCOES DE ABAS  ---------------------------  */

/*  ---------------------------  FUNCOES DE VALIDACAO DE FORMULARIO  ---------------------------  */
function dc_form_validate() {
    /* fun��o gen�rica de valida��o de formul�rios
	@author: Rodrigo Campos <rodrigo@dotcode.com.br>
	@since: 10/02/2008 */
    formulario = this;
	var errs = new Array();
    var inputsForm = formulario.getElementsByTagName('input');
	var selectsForm = formulario.getElementsByTagName('select');
	var textareasForm = formulario.getElementsByTagName('textarea');

	/** validando inputs **/
	for (var i=0; i<inputsForm.length; i++) {

		/** defini��o dos tipos **/
	    var req = inputsForm[i].getAttribute('require'); // se for do tipo text
        var fnc = inputsForm[i].getAttribute('function'); // funcao de validacao
        if(fnc != null){  // msg de erro de funcao de validacao
            var fnc_err = inputsForm[i].getAttribute(fnc);
        }

		var valor = inputsForm[i].value;
		var id = inputsForm[i].id;

		/** campo obrigatorio **/
        if (req != null) {
           if (inputsForm[i].type != "checkbox") {
    	       if (isEmpty(valor)) {
		   	       errs.push(req);
                   continue;
    		   }
           } else {
               if (!inputsForm[i].checked) {
                   errs.push(req);
                   continue;
               }
           }

		   if (fnc != null) {
		       if (!eval(fnc+'(valor)')) {
				   errs.push(fnc_err);
			   }
		   }
		}

		/** campo com validacao especifica **/
		if (req == null && !isEmpty(valor)) {
		    if (fnc != null) {
			    if (!eval(fnc+'(valor)')) {
					errs.push(fnc_err);
				}
			}
		}
	}

	/** validando selects **/
	for (i=0; i<selectsForm.length; i++) {
		req = selectsForm[i].getAttribute('require');

		fnc = selectsForm[i].getAttribute('function'); // funcao de validacao
        if(fnc != null){  // msg de erro de funcao de validacao
            fnc_err = selectsForm[i].getAttribute(fnc);
        }
		
		id = selectsForm[i].id;
		var sIndex = selectsForm[i].selectedIndex;
		if (req!=null) {
			if (sIndex==0) {
				errs.push(req);
			}
		}

		if(fnc!=null && fnc_err!=null){
			if (!eval(fnc+'(sIndex)')) {
				errs.push(fnc_err);
			}
		}
	}

	/** validando textareas **/
	for (var i=0; i<textareasForm.length;i++) {
		var req = textareasForm[i].getAttribute('require');
		var id = textareasForm[i].id;
		var valor = textareasForm[i].value;
		if (req!=null) {
			if (isEmpty(valor)) {
				errs.push(req);
			}
		}
	}

	if (errs.length > 0) {
		showMsg(errs,0);
     	return false;
	} else {
	    return true;
	}
}

function isEmail(email)
{
    /* fun��o para valida��o de campo de e-mail, utilizando express�o regular
	@author: Rodrigo Campos <rodrigo@dotcode.com.br>
	@since: 10/02/2008 */
    validEmail = /^([\w\.\-])+@+([\w\.\-])+([\.])+([\w\.\-])+$/i;
    return validEmail.test(email);
}

function isEmpty( sValue ) {
   /* fun��o para valida��o de campo texto
	@author: Rodrigo Campos <rodrigo@dotcode.com.br>
	@since: 10/02/2008 */
  var re = /\s/g;
  var s  = sValue.replace( re , "" );
  RegExp.multiline = true;
  return ( s.length == 0 || s == '0,0' ) ? true : false;
}

function equalPass( sPass ) {
    /* fun��o para verificar se a senha foi a mesma digitada
	@author: Rodrigo Campos <rodrigo@dotcode.com.br>
	@since: 05/03/2009 */
	var sSenha = $id('password').value;
	return (sSenha == sPass) ? true : false;
}

function isCpf(numCPFCNPJ){
	/* fun�ao para valida��o de CPF
	 * @author: Rodrigo Campos <rodrigo@dotcode.com.br>
	 * @since: 24/02/2008
	 */
     numCPFCNPJ = numCPFCNPJ.replace(RegExp('[.]'),"");
     numCPFCNPJ = numCPFCNPJ.replace(RegExp('[.]'),"");
     numCPFCNPJ = numCPFCNPJ.replace(RegExp('[.]'),"");
     numCPFCNPJ = numCPFCNPJ.replace(RegExp('[-]'),"");
     numCPFCNPJ = numCPFCNPJ.replace(RegExp('[-]'),"");
     numCPFCNPJ = numCPFCNPJ.replace(RegExp('[/]'),"");
	 if (numCPFCNPJ==00000000000 || numCPFCNPJ==11111111111 || numCPFCNPJ==22222222222 || numCPFCNPJ==33333333333 || numCPFCNPJ==44444444444 || numCPFCNPJ==55555555555 || numCPFCNPJ==66666666666 || numCPFCNPJ==77777777777 || numCPFCNPJ==88888888888 || numCPFCNPJ==99999999999) {
	 	return false;
	 }
     var n1 = numCPFCNPJ.substring(0,1);
     var n2 = numCPFCNPJ.substring(1,2);
     var n3 = numCPFCNPJ.substring(2,3);
     var n4 = numCPFCNPJ.substring(3,4);
     var n5 = numCPFCNPJ.substring(4,5);
     var n6 = numCPFCNPJ.substring(5,6);
     var n7 = numCPFCNPJ.substring(6,7);
     var n8 = numCPFCNPJ.substring(7,8);
     var n9 = numCPFCNPJ.substring(8,9);
     var d1 = n9*2+n8*3+n7*4+n6*5+n5*6+n4*7+n3*8+n2*9+n1*10;
     d1 = 11 - ( mod(d1,11) );
     if (d1>=10) d1 = 0;
     var d2 = d1*2+n9*3+n8*4+n7*5+n6*6+n5*7+n4*8+n3*9+n2*10+n1*11;
     d2 = 11 - ( mod(d2,11) );
     if (d2>=10) d2 = 0;
     if ((d1+':'+d2)==(numCPFCNPJ.substring(9,10)+':'+numCPFCNPJ.substring(10,11))) {
         return true;
     }
     else {
         return false;
     }
}

function isCnpj(numCPFCNPJ){
	/* valida��o de CNPJ
	 * @author: Rodrigo Campos <rodrigo@nextsis.com>
	 * @since: 24/02/2008
	 */
    numCPFCNPJ = numCPFCNPJ.replace(RegExp('[.]'),"");
    numCPFCNPJ = numCPFCNPJ.replace(RegExp('[.]'),"");
    numCPFCNPJ = numCPFCNPJ.replace(RegExp('[.]'),"");
    numCPFCNPJ = numCPFCNPJ.replace(RegExp('[-]'),"");
    numCPFCNPJ = numCPFCNPJ.replace(RegExp('[-]'),"");
    numCPFCNPJ = numCPFCNPJ.replace(RegExp('[/]'),"");
    var n1 = numCPFCNPJ.substring(0,1);
    var n2 = numCPFCNPJ.substring(1,2);
    var n3 = numCPFCNPJ.substring(2,3);
    var n4 = numCPFCNPJ.substring(3,4);
    var n5 = numCPFCNPJ.substring(4,5);
    var n6 = numCPFCNPJ.substring(5,6);
    var n7 = numCPFCNPJ.substring(6,7);
    var n8 = numCPFCNPJ.substring(7,8);
    var n9 = numCPFCNPJ.substring(8,9);
    var n10 = numCPFCNPJ.substring(9,10);
    var n11 = numCPFCNPJ.substring(10,11);
    var n12 = numCPFCNPJ.substring(11,12);
    var d1 = n12*2+n11*3+n10*4+n9*5+n8*6+n7*7+n6*8+n5*9+n4*2+n3*3+n2*4+n1*5;
    d1 = 11 - ( mod(d1,11) );
    if (d1>=10) d1 = 0;
    var d2 = d1*2+n12*3+n11*4+n10*5+n9*6+n8*7+n7*8+n6*9+n5*2+n4*3+n3*4+n2*5+n1*6;
    d2 = 11 - ( mod(d2,11) );
    if (d2>=10) d2 = 0;
    if ((d1+':'+d2)==(numCPFCNPJ.substring(12,13)+':'+numCPFCNPJ.substring(13,14))){
        return true;
    }
    else {
        return false;
    }
}

function isHour(shora){
    /* verifica um hor�rio v�lido
     * @author: Rodrigo Campos <rodrigo@nextsis.com>
     * @since: 24/02/2008
     */
    var arrayhora = shora.split(':');
    var hora = arrayhora[0];
    var minuto = arrayhora[1];
    if ((!hora) || (!minuto)) {
        return false;
    }
    else if ((hora.length > 2) || (minuto.length > 2)) {
        return false;
    }
    else if (parseInt(hora) < 0 || parseInt(hora) > 23) {
        return false;
    }
    else if (parseInt(minuto) < 1 || parseInt(minuto) > 59) {
        return false;
    }
    else {
        return true;
    }
    return false;
}

function isDate(sdata) {
    /* verifica data v�lida
    * @author: Rodrigo Campos <rodrigo@dotcode.com.br>
    * @since: 24/02/2008
    */
    var arraydata = sdata.split('/');
    var day2 = arraydata[1];
    var month2 = arraydata[0];
    var year2 = arraydata[2];
    if((!day2)||(!month2)||(!year2)){
        return false;
    }
    if((day2.length>2)||(month2.length>2)||(year2.length>4)){
        return false;
    }
    while(day2.length<2){
        day2='0'+day2;
    }
    while(month2.length<2){
        month2='0'+month2;
    }
    if(year2.length!=4){
        return false;
    }
    var DayArray = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    var MonthArray = new Array("01","02","03","04","05","06","07","08","09","10","11","12");
    var inpDate = day2 + month2 + year2;
    var filter=/^[0-9]{2}[0-9]{2}[0-9]{4}$/;
    if(! filter.test(inpDate)){
        return false;
    }
    filter=/01|02|03|04|05|06|07|08|09|10|11|12/;
    if(! filter.test(month2)){
        return false;
    }
    var N = Number(year2);
    if( ( N%4==0 && N%100 !=0 ) || ( N%400==0 ) ){
        DayArray[1]=29;
    }
    for(var ctr=0; ctr<=11; ctr++){
        if (MonthArray[ctr]==month2){
          if (day2<= DayArray[ctr] && day2 >0 ){
            inpDate = day2 + '/' + month2 + '/' + year2;
            return true;
          }
          else{
            return false;
          }
        }
    }
    return false;
}

function isMoeda(pStr)
{
    /* fun��o para valida��o de valor monet�rio
	@author: Rodrigo Campos <rodrigo@dotcode.com.br>
	@since: 09/03/2009 **/
    //var reMoeda = /^\d{1,3}(\.\d{3})*\,\d{2}$/;
	if (pStr.indexOf(',') == -1) {
        return true;
	}
	var reMoeda = /^\d*\,\d{2}$/;
	if (reMoeda.test(pStr)) {
		return true;
	} else {
		return false;
	}
}

function isPorcentagem(pStr)
{
    /* fun��o para valida��o de n�mero de porcentagem, podendo ser o m�ximo de 100%
	@author: Rodrigo Campos <rodrigo@dotcode.com.br>
	@since: 09/03/2009 */
	var rePorcentagem = /^\d*\,\d{1,2}$/;
	if (!rePorcentagem.test(pStr) && pStr.indexOf(',') != -1) {
	    return false;
	} else {	
	    if (pStr.indexOf(',') != -1) {
    	    pStr = pStr.replace(',', '.');
	    }	
		try {
		    var pInt = parseFloat(pStr);
			if (pInt < 0 || pInt > 100)
			    return false;
			else
			    return true;
		} catch(e) {
		    return false;
		}
	}
}

function isNumber(sNumber) {
    var numteste = /^[0-9]+$/
    return numteste.test(sNumber);
}

function mod(dividendo,divisor) {
  /* retorna o mod de uma divis�o
  @author: Rodrigo Campos <rodrigo@dotcode.com.br>
  @since: 24/11/2008 */
  return Math.round(dividendo - (Math.floor(dividendo/divisor)*divisor));
}

function hasSize(campo)
{
    /* verifica se determinado campo tem o tamanho maior que 4 caracteres
	@author: Rodrigo Campos <rodrigo@dotcode.com.br>
	@since: 24/11/2008 */
	if (campo.length<4) return false;
	else return true;
}

function isLink(sValue)
{
    /* verifica se um link digitado em algum campo é válido ou inválido 
	@author: Rodrigo Campos <rodrigo@dotcode.com.br>
	@since: 22/04/2009 */
    if( sValue.indexOf('http://') != 0 && sValue.indexOf('https://') != 0) {
        return false
    } else {
        return true;
    }
}
/*  ---------------------------  FIM FUNCOES DE VALIDACAO DE FORMULARIO  ---------------------------  */


/*  ---------------------------  FUNCOES DE CONTROLE DE TABELA  ---------------------------  */
function doDel(confirmMsg, errorMsg) {
    /* delete one or more records.
    @author: Rodrigo Campos <rodrigo@dotcode.com.br>
    @since: 06/03/2009  */
    var qtdeTR = 0;
    var allSel = $id('listagem').getElementsByTagName('input');
    for (var i=0; i<allSel.length; i++) {
        if (i>0) {
            allSel[i].checked ? qtdeTR++ : qtdeTR=qtdeTR;
        }
    }
    if (!qtdeTR > 0) {
        showMsg(errorMsg,0);
        return false;
    } else {
		showMsg(confirmMsg,2,'DelTable');
        return true;
    }
}

function DelTable() {
    /* delete records selected in the table through ajax.
    @author: Rodrigo Campos <rodrigo@dotcode.com.br>
    @since: 07/03/2008 */
    dc_closedivflutuante('div_msg');
    var table = $id('listagem');
    var delScript = table.getAttribute('delScript');
    var oRedirect = table.getAttribute('redirect');
    var allSel = table.getElementsByTagName('input');

    var delParams = Array();
    var arrayParams = Array();
    var arrayTRs = Array();
    for (var i=0; i<allSel.length; i++) {
        if (i>0 && allSel[i].checked) {
            delParams.push('id[]=' + allSel[i].getAttribute('iddel'));
            arrayParams.push(allSel[i].getAttribute('iddel'));
        }
    }
    var params = delParams.join('&');
    if(dc_ajax.noForm(this, 'post', delScript, params, false, showMsg) == 1){
        /** o removeChild estava bugando.. tive que fazer uma marretinha aqui
        pra funf� =) sorry **/
        var oTbody = table.getElementsByTagName('tbody')[0];
        var objTRs = oTbody.getElementsByTagName('tr');
        for (var i=0; i<objTRs.length; i++)
        {
            if (!arrayParams.in_array(objTRs[i].getAttribute('id'))) {
                arrayTRs.push(objTRs[i]);
            }
        }
        cleanTable(oTbody); // IE sux
        for (var j=0; j<arrayTRs.length; j++) {
            oTbody.appendChild(arrayTRs[j]);
        }

        // verifica se alguma página para redirecionar;
        if(oRedirect != null) {
            window.setTimeout("window.location.href = '" + oRedirect + "';", 1500);
        }
    }
}

function selectAll(obj) {
    /* fun��o para selecionar todos os registros
    da tabela listagem para exclus�o
    @author: Rodrigo Campos <rodrigo@dotcode.com.br>
    @since: 06/03/2009 */
    var thisSel = obj.checked;
    var allSel = $id('listagem').getElementsByTagName('input');

    for (var i=0; i<allSel.length; i++) {
        if (i>0) {
            allSel[i].checked = thisSel;
        }
    }
}

function cleanTable(oTbl) {
    while(oTbl.hasChildNodes())
        oTbl.removeChild(oTbl.childNodes[0]);
}
/*  ---------------------------  FIM FUNCOES DE CONTROLE DE TABELA  ---------------------------  */

/*  --------------------------- INICIO FUN��ES DE SELECT ------------------------  */

function troca_select(oSel1, oSel2)
{
    /* fun��o para trocar os valores de um select para o outro.
	  @author: Rodrigo Campos <rodrigo@nextsis.com>
	  @since: 11/06/2008
           */
    var sel1 = $id(oSel1);
    var sel2 = $id(oSel2);
    var opt = new Array;

    //Adiciona os valores no select
    for (var i=0; i<sel1.length; i++)
    {
        if (i == sel1.selectedIndex)
        {
            try
            {
                optNova = new Option(sel1.options[sel1.selectedIndex].text, sel1.options[sel1.selectedIndex].value, false, false);
                sel2.options[sel2.length] = optNova;
                opt[opt.length] = sel1.selectedIndex;
                sel1.options[sel1.selectedIndex].selected = false;
            } catch(exception) {
            } finally {}
        }
    }

    //Retira os valores do select que veio
    var count = 0;
    for (var i=0; i<opt.length; i++)
    {
        sel1[opt[i] - count] = null;
        count ++;
    }
}

function troca_select_custom(oSel1, oSel2)
{
    /* fun��o para trocar os valores de um select para o outro.
	  @author: Rodrigo Campos <rodrigo@nextsis.com>
	  @since: 11/06/2008
           */
    var sel1 = $id(oSel1);
    var sel2 = $id(oSel2);
    var opt = new Array;
	var errs = new Array();

    //Adiciona os valores no select
    for (var i=0; i<sel1.length; i++)
    {
        if (i == sel1.selectedIndex)
        {
            try
            {
				var select_modulos = $id('modulo_multiple');
				if (select_modulos.value == sel1.options[sel1.selectedIndex].getAttribute('modulo'))
				{
                    optNova = new Option(sel1.options[sel1.selectedIndex].text, sel1.options[sel1.selectedIndex].value, false, false);
				    optNova.setAttribute('modulo', sel1.options[sel1.selectedIndex].getAttribute('modulo'));
                    sel2.options[sel2.length] = optNova;
                    opt[opt.length] = sel1.selectedIndex;
                    sel1.options[sel1.selectedIndex].selected = false;
				} else {
				    errs.push('Alguns conte&uacute;dos n&atilde;o foram alocados, pois n&atilde;o pertencem a esse m&oacute;dulo.');
				}
            } catch(exception) {
            } finally {}
        }
    }

    //Retira os valores do select que veio
    var count = 0;
    for (var i=0; i<opt.length; i++)
    {
        sel1[opt[i] - count] = null;
        count ++;
    }
	if (errs.length>0)
	{
	    mostrarErros(errs);
	}
}
/*  --------------------------- FIM FUN��ES DE SELECT ---------------------------  */

/*  --------------------------- IN�CIO DE FUN��ES AUXILIARES ---------------------------  */
function dc_opendivflutuante(id_div)
{
    /** mostra a div flutuante sobre o site **/
    var v_div   = $id(id_div)
	var tam_pag = dc_tamanho_pagina();

    var top  = tam_pag.xScrool + ((tam_pag.h - 90 - 26) / 2);
	var left = ((tam_pag.x - 300 - 40) / 2);
    v_div.style.top     = (top < 0) ? "0px" : top + "px";
	v_div.style.left    = (left < 0) ? "0px" : left + "px";
	v_div.style.zIndex  = '50001';
	v_div.style.display = 'block';

	if(!$id('div_fora')){ /* so cria a div, se ela nao existir - IF by Felipe 29/04/09 */
		var div_fora  = document.createElement('div');

		div_fora.className    = 'fora';
		div_fora.id           = 'div_fora';
		div_fora.style.cssText = "height:"+tam_pag.y+"px;";
		div_fora.style.zIndex = '50000';
		document.body.appendChild(div_fora);
	}
}

function dc_opendivaguarde(v_div)
{
    /** abre a div de aguarde **/
	var tam_pag = dc_tamanho_pagina();

    var top  = tam_pag.xScrool + ((tam_pag.h - 90 - 26) / 2);
	var left = ((tam_pag.x - 300 - 40) / 2);
    v_div.style.top     = (top < 0) ? "0px" : top + "px";
	v_div.style.left    = (left < 0) ? "0px" : left + "px";
	v_div.style.zIndex  = '50001';
	v_div.style.display = 'block';

    if(!$id('div_forawhite')) { /* so cria a div, se ela nao existir - IF COPIADO DO FELIPE BY RODRIGO 05/05/09 */
        var div_fora  = document.createElement('div');

    	div_fora.className    = 'forawhite';
    	div_fora.id           = 'div_forawhite';
        div_fora.style.cssText = "height:"+tam_pag.y+"px;";
        div_fora.style.zIndex = '50000';
        document.body.appendChild(div_fora);
    }
}

function dc_closedivflutuante(id)
{
    /** fecha a div flutuante de mensagens **/
	var v_div = $id(id);
	v_div.style.display = 'none';

	if ($id('div_fora') != null)
		document.body.removeChild($id('div_fora'));
}

function dc_closedivaguarde(v_div)
{
    /** fecha a div de aguarde **/
    v_div.style.display = "none";
	if($id('div_forawhite') != null)
	    document.body.removeChild($id('div_forawhite'));
}

function dc_tamanho_pagina()
{
var x, y, w, h, xScrool;

	if (window.innerHeight && window.scrollMaxY)
	{
		x = window.innerWidth + window.scrollMaxX;
		y = window.innerHeight + window.scrollMaxY;
	}
	else if (document.body.scrollHeight > document.body.offsetHeight)
	{
		x = document.body.scrollWidth;
		y = document.body.scrollHeight;
	}
	else
	{
		x = document.body.offsetWidth;
		y = document.body.offsetHeight;
	}

	if (self.innerHeight)
	{
		w = self.innerWidth;
		h = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight)
	{
		w = document.documentElement.clientWidth;
		h = document.documentElement.clientHeight;
	}
	else if (document.body)
	{
		w = document.body.clientWidth;
		h = document.body.clientHeight;
	}

	if (self.pageYOffset)
		xScrool = self.pageYOffset;
	else if (document.documentElement && document.documentElement.scrollTop)
		xScrool = document.documentElement.scrollTop;
	else if (document.body)
		xScrool = document.body.scrollTop;

	if (y < h)
		y = h;

	if (x < w)
		x = w;

	return { x:x, y:y, w:w, h:h, xScrool:xScrool };
}

function dc_getIEVersion() {
    /** retorna qual a vers�o do internet explorer est� sendo utilizada pelo
    usu�rio. Se n�o for o internet explorer, retorna "false"
    @author: Rodrigo Campos <rodrigo@dotcode.com.br>
    @since: 26/03/2008 **/
    var IE = document.all;
    if (IE) {
        var version = 999;
        if (navigator.appVersion.indexOf("MSIE") != -1) { version = parseFloat(navigator.appVersion.split("MSIE")[1]); }
        return version;
    } else {
        return false;
    }
}
/*  --------------------------- FIM DE FUN��ES AUXILIARES ---------------------------  */

/* ---------------------------- CLASSES DE JS SOBREPOSTAS --------------------------- */
Array.prototype.in_array = function( p_val ) {
	for(var i=0, l= this.length; i<l; i++) {
		if(this[i] == p_val) {
			return true;
		}
	}
	return false;
}

Array.prototype.indexOf = function( value )
{
    for ( var i = 0 ; i < this.length ; i++ )
    {
        if ( this[i] == value )
            return i ;
    }
    return -1 ;
}

String.prototype.replaceAll = function(de, para){
    var str = this;
    var pos = str.indexOf(de);
    while (pos > -1){
      str = str.replace(de, para);
      pos = str.indexOf(de);
   }
    return (str);
}
/* ---------------------------- CLASSES DE JS SOBREPOSTAS --------------------------- */
