/* Alexandre Gans @ www.intip.com.br */
function addCampoBloco(id_bloco, qtde)
{
    qtde = parseInt(qtde);
    var bloco = document.getElementById(id_bloco);
    var spans = bloco.getElementsByTagName('span');

    if (spans.length > qtde)
    {
        while (spans.length > qtde)
        {
            bloco.removeChild(spans[spans.length-1]);
            spans = bloco.getElementsByTagName('span');
        }
    } else {
        var max = qtde - spans.length;
        for (var i=0; i<max; i++)
        {
            var clone = spans[0].cloneNode(true);
            var inputs = clone.getElementsByTagName('input');
            for (var j=0; j<inputs.length; j++)
            {   
                if (inputs[j].type != 'text')
                    continue;
                validateElement(inputs[j]);
            }
            limparConteudo(clone);
            bloco.appendChild(clone);
        }
    }
}
function limparConteudo(obj)
{
    var inputs = obj.getElementsByTagName('input');
    for (var i=0; i<inputs.length; i++)
    {
        if (inputs[i].type == 'text')
        {
            inputs[i].value = '';
        } else if (inputs[i].type == 'file') {
            inputs[i].value = '';
            var table = inputs[i];
            while (table.tagName.toLowerCase() != 'table')
                table = table.parentNode;
            var tds = table.getElementsByTagName('td');
            tds[0].innerHTML = '';
            tds[2].getElementsByTagName('input')[0].value = '';
        } 
    }
    var selec = obj.getElementsByTagName('select');
    for (var i=0; i<selec.length; i++)
    {
        selec[i].selectedIndex = 0;
    }
}
function hiddeBox()
{
    var elerro = document.getElementById('erroform');
    var elok = document.getElementById('okform');    
    elerro.style.display = 'none';
    elok.style.display = 'none';
}
function showError(errs)
{
    hiddeBox();
    var diverro = document.getElementById('erroform');
    var p = diverro.getElementsByTagName('p');
    while (p.length > 0)
    {
        diverro.removeChild(p[0]);
        p = diverro.getElementsByTagName('p');
    }
    for (var i=0; i<errs.length; i++)
    {
        var p = document.createElement('p');
        p.innerHTML = errs[i];
        diverro.appendChild(p);
    }
    diverro.style.display = 'block';
    document.location.hash = 'erroform';
    //window.scrollTo(0, 0);
}
function showOk(msg)
{
    hiddeBox();
    var elok = document.getElementById('okform');
    var td = elok.getElementsByTagName('td');
    td[1].innerHTML = msg;
    elok.style.display = 'block';
    document.location.hash = 'top_form';
    window.scrollTo(0, 0);
}

function validarValores() 
{
    var handler = new XMLHandler();
    var xmlreq = new XMLClient(ACTION);
	
	var erros = validarForms(handler,xmlreq);
    if (erros.length > 0)
    {
        showError(erros);
        return;
    }
	executapost(handler,xmlreq);

}

function executapost(handler,xmlreq) {

    if (window.TITLE && window.TITLE != undefined)
        xmlreq.addParam('titulo', TITLE);
    xmlreq.addParam('id_configuracao', ID_CONFIGURACAO);
    handler.onError = function(e) { showError(['Servi&ccedil;o indispon&iacute;vel no momento, tente mais tarde. ' + e]); };
    handler.onProgress = function() {};
    handler.onInit = function() { /*desabilitarBto();*/ };
    handler.onLoad = function (xmlStr)
    {
        var parser = new XMLParser();
        var xmlobj = parser.parseString(xmlStr);  
        var rootnd = xmlobj.documentElement;
        for (var i=0; i<rootnd.childNodes.length; i++)
        {
            if (rootnd.childNodes[i].tagName == 'ok')
            {
                if (window.MSGOK)
                {
                    showOk(window.MSGOK);
                } else {
                    showOk(unescape(rootnd.childNodes[i].firstChild.nodeValue));
                }
                resetConteudo();
                break;
            }
            if (rootnd.childNodes[i].tagName == 'erros')
            {
               if (window.changeIm)
                   changeIm();
               var erros = rootnd.getElementsByTagName('erro');
               var errs = [];
               for (var j = 0; j < erros.length; j++)
                   errs.push( unescape(erros[i].firstChild.nodeValue) );
               showError(errs);
            }
        }
//        abilitarBto();
    }
    xmlreq.query(handler);


/*valida formulario*/
/* executa acao*/
}


function validarForms(handler,xmlreq)

{
    if (window.beforeAction)
        beforeAction();
		
    var field = document.getElementById('blocos');
    var blocos = [];
    var childs = field.childNodes;
    for (var i=0; i<childs.length; i++)
    {
         if (childs[i].tagName && childs[i].tagName.toLowerCase() == 'div')
             blocos.push(childs[i]);
    }
    /* verificaç global */
    var erros = [];
    for (var i=0; i<blocos.length; i++)
    {
        var bloco = blocos[i];
        //var id_aba = bloco.getAttribute('id');
        var grupo = (bloco.getAttribute('bloco') == 'bloco' ? true:false);
        var spans = bloco.getElementsByTagName('span');
        var id_bloco = bloco.getAttribute('id_bloco');
        /* verificaç por bloco
        var erros = [];*/

        for (var j=0; j<spans.length; j++)
        {
            var divs = spans[j].getElementsByTagName('div');
            for (var k=0; k<divs.length; k++)
            {
                var tipo = divs[k].getAttribute('tipo');
                var record = (grupo == true ? 'records':'record');
                var input = divs[k].getElementsByTagName('input');
                var textarea = divs[k].getElementsByTagName('textarea');
                var select = divs[k].getElementsByTagName('select');
                var label = divs[k].getElementsByTagName('label');
                var olabel = label[0];
                if (label.length) label = label[0].innerHTML.replace(':', '');

                switch (tipo)
                {
                    case 'texto':
                        var obrigatorio = (input[0].getAttribute('obrigatorio') == 'obrigatorio' ? true:false);
                        if (input[0].value == '' && obrigatorio)
                        {
                            erros.push('O campo \'' + label + '\' &eacute; obrigat&oacute;rio.');
                            olabel.className = 'label_descricao_erro';
                        } else {
                            olabel.className = 'label_descricao';
                        }
                        xmlreq.addParam(id_bloco + '.' + input[0].name + ':' + record, input[0].value);
                        break;

                    case 'senha':
                        var obrigatorio = (input[0].getAttribute('obrigatorio') == 'obrigatorio' ? true:false);
                        if (input[0].value == '' && obrigatorio)
                        {
                            erros.push('O campo \'' + label + '\' &eacute; obrigat&oacute;rio.');
                            olabel.className = 'label_descricao_erro';
                        } else if (input[0].value.length <= 5) {
                            erros.push('O campo \'' + label + '\' deve ser maior que 5 caracteres.');
                            olabel.className = 'label_descricao_erro';
                        } else {
                            olabel.className = 'label_descricao';
                        }
                        xmlreq.addParam(id_bloco + '.' + input[0].name + ':' + record, input[0].value);
                        break;


                    case 'data':
                        var obrigatorio = (input[0].getAttribute('obrigatorio') == 'obrigatorio' ? true:false);
                        if (input[0].value == '' && obrigatorio)
                        {
                            erros.push('O campo \'' + label + '\' &eacute; obrigat&oacute;rio.');
                            olabel.className = 'label_descricao_erro';
                        } else if (obrigatorio && !isDate(input[0].value, 'dd/MM/yyyy')) {
                            erros.push('O campo \'' + label + '\' n&atilde;o &eacute; v&aacute;lido.');
                            olabel.className = 'label_descricao_erro';
                        } else {
                            olabel.className = 'label_descricao';
                        }
                        xmlreq.addParam(id_bloco + '.' + input[0].name + ':' + record, input[0].value);
                        break;
                    case 'cpf':
                        var obrigatorio = (input[0].getAttribute('obrigatorio') == 'obrigatorio' ? true:false);
                        if (input[0].value == '' && obrigatorio)
                        {
                            erros.push('O campo \'' + label + '\' &eacute; obrigat&oacute;rio.');
                            olabel.className = 'label_descricao_erro';
                        } else if (!isCpf(input[0].value)) {
                            erros.push('O campo \'' + label + '\' n&atilde;o &eacute; v&aacute;lido.');
                            olabel.className = 'label_descricao_erro';
                        } else {
                            olabel.className = 'label_descricao';
                        }
                        xmlreq.addParam(id_bloco + '.' + input[0].name + ':' + record, input[0].value);
                        break;
                    case 'telefone':
                        var obrigatorio = (input[0].getAttribute('obrigatorio') == 'obrigatorio' ? true:false);
                        if (input[0].value == '' && obrigatorio)
                        {
                            erros.push('O campo \'' + label + '\' &eacute; obrigat&oacute;rio.');
                            olabel.className = 'label_descricao_erro';
                        } else {
                            olabel.className = 'label_descricao';
                        }
                        xmlreq.addParam(id_bloco + '.' + input[0].name + ':' + record, input[0].value);
                        break;

                    case 'monetario':
                        var obrigatorio = (input[0].getAttribute('obrigatorio') == 'obrigatorio' ? true:false);
                        if (input[0].value == '' && obrigatorio)
                        {
                            erros.push('O campo \'' + label + '\' &eacute; obrigat&oacute;rio.');
                            olabel.className = 'label_descricao_erro';
                        } else {
                            olabel.className = 'label_descricao';
                        }
                        xmlreq.addParam(id_bloco + '.' + input[0].name + ':' + record, input[0].value);
                        break;

                    case 'textarea':
                        var obrigatorio = (textarea[0].getAttribute('obrigatorio') == 'obrigatorio' ? true:false);
                        if (textarea[0].value == '' && obrigatorio)
                        {
                            erros.push('O campo \'' + label + '\' &eacute; obrigat&oacute;rio.');
                            olabel.className = 'label_descricao_erro';
                        } else {
                            olabel.className = 'label_descricao';
                        }
                        xmlreq.addParam(id_bloco + '.' + textarea[0].name + ':' + record, textarea[0].value);
                        break;
                    case 'textarea_plus':
                        textarea = textarea[0];
                        valor = tinyMCE.getContent( textarea.id );
                        var obrigatorio = (textarea.getAttribute('obrigatorio') == 'obrigatorio' ? true:false);
                        if (valor == '' && obrigatorio)
                        {
                            erros.push('O campo \'' + label + '\' &eacute; obrigat&oacute;rio.');
                            olabel.className = 'label_descricao_erro';
                        } else {
                            olabel.className = 'label_descricao';
                        }
                        xmlreq.addParam(id_bloco + '.' + textarea.name + ':' + record, valor);
                        break;
                    case 'radiobox':
                        check = false;
                        var obrigatorio = false;
                        for (var c=0; c<input.length; c++)
                        {
                            obrigatorio = (input[c].getAttribute('obrigatorio') == 'obrigatorio' ? true:false);
                            if (input[c].checked == true)
                            {
                                xmlreq.addParam(id_bloco + '.' + input[c].name + ':' + record, input[c].value);
                                check = true;
                                break;
                            }
                        }
                        if (!check && obrigatorio)
                        {
                            erros.push('O campo \'' + label + '\' &eacute; obrigat&oacute;rio.');
                            olabel.className = 'label_descricao_erro';
                        } else {
                            olabel.className = 'label_descricao';
                        }
                        break;
                    case 'checkbox':
                        check = false;
                        var obrigatorio = false;
                        for (var c=0; c<input.length; c++)
                        {
                            obrigatorio = (input[c].getAttribute('obrigatorio') == 'obrigatorio' ? true:false);
                            if (input[c].checked == true)
                            {
                                xmlreq.addParam(id_bloco + '.' + input[c].name + ':list:' + record, input[c].value);
                                check = true;
                            }
                        }
                        if (!check && obrigatorio)
                        {
                            erros.push('O campo \'' + label + '\' &eacute; obrigat&oacute;rio.');
                            olabel.className = 'label_descricao_erro';
                        } else {
                            olabel.className = 'label_descricao';
                        }
                        break;
                    case 'select':
                        select = select[0]
                        var obrigatorio = (select.getAttribute('obrigatorio') == 'obrigatorio' ? true:false);
                        
                        if (select.options[select.selectedIndex].value == '' && obrigatorio)
                        {
                            erros.push('O campo \'' + label + '\' &eacute; obrigat&oacute;rio.');
                            olabel.className = 'label_descricao_erro';
                        } else {
                            olabel.className = 'label_descricao';
                        }
                        xmlreq.addParam(id_bloco + '.' + select.name + ':' + record, select.options[select.selectedIndex].value);
                        break;
                    case 'file':
                        var obrigatorio = (input[0].getAttribute('obrigatorio') == 'obrigatorio' ? true:false);
                        if (input[1].value == '' && obrigatorio)
                        {
                            erros.push('O campo \'' + label + '\' &eacute; obrigat&oacute;rio.');
                            olabel.className = 'label_descricao_erro';
                        } else {
                            olabel.className = 'label_descricao';
                        }
                        xmlreq.addParam(id_bloco + '.' + input[1].name + ':' + record, input[1].value);
                        break;
                }
            }
        }
        /* Verificar por blocos
        if (erros.length > 0)
        {
            showError(erros);
            return;
        }*/

        var cod = document.getElementById('codigo');
        if (cod && cod.value == '')
        {
          erros.push('Digite o código de verificação.');
        } else if (cod) {
          xmlreq.addParam('captcha', cod.value.toLowerCase());
        }

        if (window.REL)
        {
            for (j in REL)
                xmlreq.addParam('relacionamento.' + j + ':records', REL[j]);
        }
    }
    /* Verificacao global */
	return erros
}
function resetConteudo()
{
    var field = document.getElementById('blocos');
    var inputs = field.getElementsByTagName('input');
    var textarea = field.getElementsByTagName('textarea');
    var select = field.getElementsByTagName('select');

    for (var i=0; i<inputs.length; i++)
    {
        if (inputs[i].type == 'checkbox')
            inputs[i].checked = false;
        else if (inputs[i].type != 'radio')
            inputs[i].value = '';
    }
    for (var i=0; i<textarea.length; i++)
        textarea[i].value = '';

    for (var i=0; i<select.length; i++)
    {
        select[i].selectedIndex = 0;
        if (select[i].onchange)
            select[i].onchange();
    }
}
function initForm()
{
    var form = document.forms['form_conteudo'];
    form.style.display = 'block';
    var inputs = form.getElementsByTagName('input');
    for (var i=0; i<form.length; i++)
    {
        if (form[i].type.toLowerCase() == 'text')
            validateElement(form[i]);
    }
}
