xdblang='pt-br';
/**
 * Tupinamba javascript functions
 *
 * Tupinamba is a simple database frontend and editor for mysql, mssql and odbc
 * databases.
 *
 * @author      Guilherme Capilé <capile@tcdesign.com.br>
 * @package     tupinamba
 * @subpackage  xdb-components.js
 * @version     0.5.200612-beta
 */
if(!window.tupia){tupia={};};
if(!window.xdblang || xdblang=='en-us'){
    if(!tupia.s){tupia.s={decimals:'.',thousands:','};};
    xdblang='en-us';var xdblabels = {q:'"',sending:'Sending request...',loading:'Loading information...',loaded:'Information loaded.',complete:'Request completed.',fail:'Request failed.',error:'Request failed.',noless:"It's not possible to exclude another ",nomore:"It's not possible to insert more ",wait:'The form is being sent, please wait.',wrong_phone:'O número deve ser escrito no formato (dd) dddd-dddd',max_chars1:'This field should contain ',max_chars2:' characters at most. Exceeding this limit will truncate the result.',wrong_email :'You must fill in a valid email address.',wrong_date : 'The date must be inserted in the format yyyy-mm-dd',wrong_datetime : 'The date must be inserted in the format yyyy-mm-dd hh:ii:ss',wrong_int : 'This field only accepts numbers as input.',confirm_delete : 'Do you really want to delete the document? \nAll the references toit will be lost.',confirm_record_delete : 'Do you really want to delete the record? \nAll the information and references to it will be lost.',confirm_copy_delete : 'Really?',confirm_cancel : 'Do you want to cancel your choice?',field : 'The field "',shouldmatch : '" should be the same as "',not_empty : '" cannot be empty.',not_selected : '" must be selected.',lang : 'en-us',confirm_discard:'Do you want to discard your changes?\nIf you don\'t, click at \'Cancel\' and save the document before proceeding.',confirm_delete:'Are you sure you want to delete this record?\nThis operation cannot be undone.',wrong_value:'this is not a valid value.'};
} else {
    if(!tupia.s){tupia.s={decimals:',',thousands:'.'};};
    xdblang='pt-br';var xdblabels = {q:'"',sending:'Enviando requisição...',loading:'Carregando informações...',loaded:'Informações carregadas.',complete:'Requisição concluída.',fail:'A requisição falhou.',error:'A requisição falhou.',noless:'Não é possível excluir mais ',nomore:'Não é possível inserir mais ',wait:'O formulário está sendo submetido, por favor aguarde.',wrong_phone:'O número deve ser escrito no formato (dd) dddd-dddd',max_chars1:'Este campo deve conter ',max_chars2:' caracteres no máximo. O que estiver acima deste limite será truncado.',wrong_email :'Você precisa preencher um email válido.',wrong_date : 'A data deve ser inserida no formato dd/mm/aaaa',wrong_datetime : 'A data deve ser inserida no formato aaaa-mm-dd hh:mm:ss',wrong_int : 'Este campo aceita apenas números.',confirm_delete : 'Deseja realmente apagar o documento? \nTodas as informações e referências a ele \nserão perdidas.',confirm_record_delete : 'Deseja realmente apagar o registro? \nTodas as informações e referências a ele \nserão perdidas.',confirm_copy_delete : 'Deseja realmente apagar a c=pia do registro?',confirm_cancel : 'Deseja cancelar a escolha?',field : 'O campo "',shouldmatch : '" deveria ser igual a "',not_empty : '" não pode ser vazio.',not_selected : '" deve estar selecionado.',lang : 'pt-br',confirm_discard:'Você quer descartar as alterações feitas?\nCaso não queira, clique em \'Cancelar\', e salve o documento antes de prosseguir.',confirm_delete:'Você tem certeza que quer apagar este registro?\nEsta operação não pode ser desfeita.',wrong_value:'Este não é um valor válido.'};
}
if(!window.tupia){tupia={};};
tupia.p=(tupia.p)?(tupia.p):({});
tupia.p.email=(tupia.p.email)?(tupia.p.email):(/^\s*[0-9a-z\.\-\_]+\@[0-9a-z\.\-\_]+\s*$/i);
tupia.p.date=(tupia.p.date)?(tupia.p.date):(/^(([0-9]{4}\-[0-9]{2}\-[0-9]{2})|([0-9]{2}\/[0-9]{2}\/[0-9]{4}))/);
tupia.p.datetime=(tupia.p.datetime)?(tupia.p.datetime):(/^(([0-9]{4}\-[0-9]{2}\-[0-9]{2}[\T ][0-9]{2}:[0-9]{2}:[0-9]{2})|([0-9]{2}\/[0-9]{2}\/[0-9]{4}))/);
tupia.p.int=(tupia.p.int)?(tupia.p.int):(/^[0-9]+$/);
tupia.p.integer=(tupia.p.integer)?(tupia.p.integer):(tupia.p.int);
tupia.p.float=(tupia.p.float)?(tupia.p.float):(/^(((([0-9]+(([\.])[0-9]{3})*)?((\,)[0-9]*)?))|(([0-9]+(([\,])[0-9]{3})*)?((\.)[0-9]*)?)){1}$/);
var editor = [];
var base_url = '';
var oldvalues = [];
var xdb_sent = false;
var xdb_modified = false;
var xdboptions = [];
var xdbnames = [];
var xdbinfo = {};
var xdbconfig = {};
// calendar
var xdbstyle = { color:'#000066',background:'#eeeef6' };
var xdbnewstyle = { color:'#6666cc',background:'#333366' };
var xdbmarks = [];

var xVersion='3.14.1',xOp7=false,xOp7Up=false,xOp5or6=false,xIE4Up=false,xNN4=false,xUA=navigator.userAgent.toLowerCase();
if(window.opera){
  xOp7=(xUA.indexOf('opera 7')!=-1 || xUA.indexOf('opera/7')!=-1);
  if (!xOp7) { xOp5or6=(xUA.indexOf('opera 5')!=-1 || xUA.indexOf('opera/5')!=-1 || xUA.indexOf('opera 6')!=-1 || xUA.indexOf('opera/6')!=-1);}
} else if(document.layers) { xNN4=true;
} else {xIE4Up=document.all && xUA.indexOf('msie')!=-1 && parseInt(navigator.appVersion)>=4;}

/**
 * Verify the required fields of forms
 *
 * Use xdbconfig['colorize_required'] to colorize a field required
 *
 * @see     xdb_checkrequired
 * @see     xRemoveClass
 * @see		xAddClass
 */
function xCheckForms()
{
    var oldquiet = xdbquiet;
    xdbquiet=true;
    var fname = '';
    var colorize = (xdbconfig['colorize_required'] != undefined)?(true):(false);
    if(!colorize){return '';}
    forms = (document.forms)?(document.forms):(document);
    var res=true;
    for(var i=0;i<forms.length;i++){
        if(forms[i].name != undefined && forms[i].elements != undefined && xdbinfo[forms[i].name]){
            x=forms[i];
            for (var j=0;j< x.elements.length;j++){
                var y = x.elements[j];
                if(y.name == undefined || y.name.search(/^xsearch\_/) > -1){continue;};
                fname = 'f_' + y.name;
                fname = fname.replace(/\[[0-9]+\]$/, '');
                if (!xdb_checkrequired(y, false)) {
                    res=false;
                    if(colorize){xAddClass(fname, 'required');}
                } else if(colorize && !xNN4 && y.getAttribute('required') != undefined && y.getAttribute('required') == 'yes'){
                    xRemoveClass(fname, 'required');
                }
            }
        }
    }
    xdbquiet=oldquiet;
}

/**
 * Submit form
 *
 * @param   object	x is a form submmited
 * @see     xdb_checkrequired
 * @see     xdb_soap_update
 */
function send(x)
{
    if (xdb_sent || xdbhttp_sent) {
        alert(xdblabels.wait);
        return false;
    } else {
        xdb_sent = true;
        window.setTimeout("xdb_sent = false;", 10000);
    }
    if (editor != null) {
        for (i=0; i < editor.length; i++) {
            editor[i]._textArea.value = editor[i].getHTML();
        }
    }
    xdbquiet = false;
    for ( i = 0; i < x.elements.length; i++ ) {
        var y = x.elements[i];
        if (!xdb_checkrequired(y)) {
            xdb_sent = false;
            return false;
            break;
        }
    }
    if(xDef(xdbinfo, x.name) && xdbinfo[x.name].method == 'soap'){
        xdb_soap_update(x);
    } else {
        x.submit();
    }
    return false;
}

function xdb_xml_escape(str)
{
    var s = [/\&/g, /\</g, /\>/g];
    var r = ['&amp;', '&lt;', '&gt;'];
    if (xdb_xml_escape.arguments.length > 1 && xdb_xml_escape.arguments[1]) {
        s[s.length] = /\"/g;
        r[r.length] = '&#034;';
    }
    if (xdb_xml_escape.arguments.length > 2 && xdb_xml_escape.arguments[2]) {
        s[s.length] = /\'/g;
        r[r.length] = '&#039;';
    }
    for(var i=0;i<s.length;i++){
      str=str.replace(s[i], r[i]);
    }
    return str;
}

function xdb_soap_update(x)
{
  var soap = '<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:xdb="' + xdbinfo[x.name].schema + '">' +
  '\n<s:Body>' +
  '\n<xdb:tableupdate>' +
  '\n<xdb:table>' + xdbinfo[x.name].name + '</xdb:table>' +
  //'\n<xdb:options/>';
  '\n<xdb:values xdb:type="url-encoded">' + xdb_xml_escape(xdbformvalue) + '</xdb:values>' +
  '\n</xdb:tableupdate>' +
  '\n</s:Body>' +
  '\n</s:Envelope>';
  xdb_request(xdbinfo[x.name].action, soap, 'POST', 'Content-Type: text/xml', function(){alert(xdbhttp.response);});
}

function xdb_filter(str, formel)
{
    if(formel.elements == undefined){
        return false;
    }
    for(var i=0;i< xdboptions.length;i++){
        var fops = new Array();
        var filter = false;
        //if(xDef(formel.elements[xdboptions[i].name + '_0']) && formel.elements[xdboptions[i].name + '_0'].type == 'chckbox'){
        //checking if (xdboptions[i].filterby == str) when xdboptions[i].filterby.search('\[««number»»\]') > -1
        if(xdboptions[i].filterby == str){
            var elname = xdboptions[i].name;
        } else if (str.search(/\[[0-9]+\]/) > -1 && str.replace(/\[[0-9]+\]/, '[««number»»]') == xdboptions[i].filterby){
            var elname = xdboptions[i].name.replace('[««number»»]', str.match(/\[[0-9]+\]/)[0]);
        } else {
            continue;
        }
        // radio
        if(formel.elements[str] != undefined && formel.elements[str].type == undefined) {
            var fvalue = '';
           for (j = 0; j < formel.elements.length; j++) {
                if (formel.elements[j].name === str && formel.elements[j].type != undefined && formel.elements[j].type == 'radio' && formel.elements[j].checked) {
                    fvalue = formel.elements[j].value;
                }
            }
            filter = true;
            fops = [fvalue];
        // select
        } else if (formel.elements[str] != undefined && formel.elements[str].type.search(/^select\-/) > -1){
            filter = true;
            var fop = formel.elements[str].options;
            var fops = new Array();
           for (j = 0; j < fop.length; j++) {
                if (fop[j].selected === true) {
                    fops[fops.length] = fop[j].value;
                }
            }
        // simple input
        } else if(xdboptions[i].value != undefined && formel.elements[str] != undefined){
            filter = true;
            fops = xdb_formelement_value(str, formel);
        } else if(xdbnames[str] != undefined){
            filter = true;
            var fvalue = ''
           for (j = 0; j < xdbnames[str].length; j++) {
               fvalue = xdb_formelement_value(xdbnames[str][j], formel);
                if (fvalue[0] != undefined) {
                    for (k = 0; k < fvalue.length; k++) {
                        fops.push(fvalue[k]);
                    }
                }
            }
        } else if(formel.elements[str] != undefined){
            filter = true;
            fops = xdb_formelement_value(str, formel);
        }
        if(filter && formel.elements['xsearch_' + elname] != undefined){
            check('search', formel.elements['xsearch_' + elname]);
        }
        if(filter && (formel.elements[elname] != undefined || formel.elements[elname + '_0'] != undefined || formel.elements[elname + '[0]'] != undefined) && xdboptions[i]['action'] != undefined){
            var fobj=[];
            if(formel.elements[elname+'_0'] != undefined){
                j = 0;
                while(formel.elements[elname+'_'+j] != undefined){
                 fobj[fobj.length] = formel.elements[elname + '_' + j];
                 j++;
                }
            } else if(formel.elements[elname+'[0]'] != undefined){
                j = 0;
                while(formel.elements[elname+'['+j+']'] != undefined){
                 fobj[fobj.length] = formel.elements[elname+'['+j+']'];
                 j++;
                }
            } else if(formel.elements[elname] != undefined){
				fobj = formel.elements[elname];
			}
            var applyfilter = false;
            if(xdboptions[i].value != undefined){
                xdboptions[i].values = [xdboptions[i].value];
            }
            if(xdboptions[i].values != undefined && xdboptions[i].values.length > 0) {
               for (j = 0; j < fops.length; j++) {
                   for (k = 0; k < xdboptions[i].values.length; k++) {
                       if(xdboptions[i].values[k] == fops[j]){
                           applyfilter = true;
                           break;
                       }
                   }
                }
            }

            //apply mandatory
            if (xdboptions[i].mandatory == 1){
            	//if (fobj.constructor==Array){
            	//if (xisArray(fobj)){
					for(jb = 0; jb < fobj.length; jb++){
						if(applyfilter) {
                			fobj[jb].setAttribute('required','yes');
                		} else {
                			fobj[jb].removeAttribute('required');
						}
        			}
        		/*} else {
        			if(applyfilter) {
						fobj.setAttribute('required','yes');
					} else {
					
						fobj.removeAttribute('required');
					}
				}*/
        	}

            if(xdboptions[i].action == 'hide'){
                if(applyfilter){
                    xChangeVisibility('f_' + elname, 'none');
                } else {
                    xChangeVisibility('f_' + elname, 'block');
                }
            } else if(xdboptions[i].action == 'display'){
                if(!applyfilter){
                    xChangeVisibility('f_' + elname, 'none');
                } else {
                    xChangeVisibility('f_' + elname, 'block');
                }
            } else if(xdboptions[i].action == 'disable'){
                if(applyfilter){
                    xdb_disable(fobj);
                } else {
                    xdb_enable(fobj);
                }
            } else if(xdboptions[i].action == 'enable'){
                if(!applyfilter){
                    xdb_disable(fobj);
                } else {
                    xdb_enable(fobj);
                }
            }
        } else if(filter && formel.elements[elname] != undefined && formel.elements[elname].type.search(/^select\-/) > -1){
            var op = formel.elements[elname].options;
            var ops = new Array();
            var opt =  '';
           for (j = 0; j < op.length; j++) {
                if (op[j].selected === true) {
                    ops[ops.length] = op[j].value;
                }
                if (op[j].value == '') {
                    opt = op[j].text;
                }
            }
            while(op.length > 0) {
                op[0] = null;
            }
            if(formel.elements[elname].type.search(/^(select\-multiple|checkbox)/) < 0){
                op[op.length] = new Option(opt, '');
            }
            var nop = xdboptions[i].values;
            var uop = new Object();
           for (var j = 0; j < nop.length; j++) {
               for(var k=0;k < fops.length;k++) {
                   if (fops[k] == nop[j].filter && uop[nop[j].key] != nop[j].value) {
                       // add option
                       uop[nop[j].key] = nop[j].value;
                       var opl = op.length;
                       op[opl] = new Option(nop[j].value, nop[j].key);
                       for(var l=0;l < ops.length;l++){
                           if (ops[l] == nop[j].key){
                               // mark as selected
                               op[opl].selected = true;
                           }
                       }
                   }
               }
            }
        } else if(filter && formel.elements[elname + '_0'] !=undefined && formel.elements[elname + '_0'].type == 'checkbox'){
            /*
            var ops = new Array();*/
           var nop = xdboptions[i].values;
           if(nop.length == 0){
            j = 0;
            while(formel.elements[elname+'_'+j] != undefined){
             nop[nop.length] = formel.elements[elname + '_' + j].value;
             j++;
            }
           }
           for (var j = 0; j < nop.length; j++) {
               for(var k=0;k < fops.length;k++) {
                   if (fops[k] == nop[j].filter) {
                       // let visible [elname + '__' + nop[j].key]
                       xChangeVisibility(elname + '__' + nop[j].key, 'block');
                   } else {
                      xChangeVisibility(elname + '__' + nop[j].key, 'none');
                      // enable the delection from hidden divs when filter-action != hide
                   }
               }
            }

        }
    }
}

function xdb_disable(formel)
{
    if(typeof(formel) != 'object'){return false;}
    if(formel[0] != undefined && formel['id'] == undefined){
        for(var i in formel){
            xdb_disable(formel[i]);
        }
        return true;
    }
    formel.disabled = true;
    formel.style.background = '#cccccc';
    formel.style.color = '#666666';
    return true;
}
function xdb_enable(formel)
{
    if(typeof(formel) != 'object'){return false;}
    if(formel[0] != undefined && formel['id'] == undefined){
        for(var i in formel){
            xdb_enable(formel[i]);
        }
        return true;
    }
    formel.disabled = false;
    formel.style.background = '';
    formel.style.color = '';
    return true;
}
function xdb_insertfield(fieldname, maxf, label)
{
    if(xdbformfields != undefined && xdbformfields[fieldname].text != ''){
        if(maxf > 0 && xdbformfields[fieldname].count == maxf){
            alert(xdblabels.nomore + label);
            return true;
        }
        var num = xdbformfields[fieldname].count;
        while(xGetElementById('xdbformfield_' + fieldname + '_' + num)){
            num++;
            if(num > 1000){
                break;
            }
        }
        var text = xdbformfields[fieldname].text.replace(/««number»»/g, num);
        if(xdb_insertfield.arguments.length > 3 && xdb_insertfield.arguments[3]){
            xdb_prependaselement(text, 'xdbformfield_' + fieldname);
        } else {
            xdb_appendaselement(text, 'xdbformfield_' + fieldname);
        }
        xdbformfields[fieldname].count = xdbformfields[fieldname].count + 1;
        xCheckForms();
        return true;
    }
}

function xdb_deletefield(fieldname, minf, label)
{
 var argv = xdb_deletefield.arguments;
 var argc = xdb_deletefield.arguments.length;

    if(xdbformfields != undefined && xdbformfields[fieldname].text != ''){
        if(minf >= 0 && xdbformfields[fieldname].count == minf){
            alert(xdblabels.noless + label);
            return true;
        }
     var num = (argc > 3) ? argv[3] : xdbformfields[fieldname].count;
        xdb_write_html('', 'xdbformfield_' + fieldname + '_' + num);
        xChangeVisibility('xdbformfield_' + fieldname + '_' + num, 'none');
        xdbformfields[fieldname].count = xdbformfields[fieldname].count - 1;
        return true;
    }
}

function xdb_delete_html(e)
{
    if ((e=xGetElementById(e))){
        e.outerHTML = '';
    } else if (document.all && (e=document.all[e])){
        e.outerHTML = '';
    } else if (document.layers && (e=document.layers[e])) {
        e.document.open();
        e.document.write('');
        e.document.close();
    }
}

function xdb_write_html(text,e)
{
    if ((e=xGetElementById(e))){
        e.innerHTML = text;
    } else if (document.all && (e=document.all[e])) {
        e.innerHTML = text;
    } else if (document.layers && (e=document.layers[e])) {
        var text2 = '<p class="testclass">' + text + '</p>';
        e.document.open();
        e.document.write(text2);
        e.document.close();
    }
}

function xdb_appendaselement(text,e)
{
 el = document.createElement('div');
 if(xdb_appendaselement.arguments.length > 2 && xdb_appendaselement.arguments[2] != null){el.id=xdb_appendaselement.arguments[2];}
 if(xdb_appendaselement.arguments.length > 3 && xdb_appendaselement.arguments[3] != null){el.className=xdb_appendaselement.arguments[3];}
 if ((e=xGetElementById(e))){
   el.innerHTML = text;
   e.appendChild(el);
 } else if (document.all && (e=document.all[e])){
   el.innerHTML = text;
   e.appendChild(el);
 } else if (document.layers && (e=document.layers[e])) {
   var text2 = '<div>' + text + '</div>';
   e.document.open();
   e.document.write(text2);
   e.document.close();
 }
}

function xdb_prependaselement(text,e)
{
 el = document.createElement('div');
    if ((e=xGetElementById(e))){
        el.innerHTML = text;
        e.insertBefore(el, e.childNodes[1]);
        //e.insertBefore(el, e.getElementsByTagName('div')[0]);
    } else if (document.all && (e=document.all[e])){
        el.innerHTML = text;
        e.insertBefore(el, e.childNodes[1]);
        //e.insertBefore(el, e.getElementsByTagName('div')[0]);
    } else if (document.layers && (e=document.layers[e])) {
        var text2 = '<div>' + text + '</div>';
        e.document.open();
        e.document.write(text2);
        e.document.close();
    }
}
function xdb_get_html(e)
{
    if ((e=xGetElementById(e))){
        return e.innerHTML;
    } else if (document.all && (e=document.all[e])) {
        return e.innerHTML;
    } else if (document.layers && (e=document.layers[e])) {
        return e.value;
    } else {
        return false;
    }
}

function send_page(arr, x, pg1, pg2)
{
    xdbquiet = false;
    for ( i = 0; i < arr.length; i++ ) {
        var y = x.elements[arr[i]];
        if (!xdb_checkrequired(y)) {
            return false;
            break;
        }
    }
    if (pg1 != false && pg1 != '') {
        xChangeVisibility(pg1);
    }
    if (pg2 != false && pg2 != '') {
        xChangeVisibility(pg2);
    }
    return false;
}

var xdbformvalue = '';
var xdbformfiles = [];
function xdb_checkrequired(y)
{
    var concat = (xdbformvalue != '')?('&'):('');
    if(y.name == undefined){
        return true;
    }
    if (xNN4) {return true;}
    if (y.getAttribute('required') != undefined && y.getAttribute('label') != undefined) {
        var required = false;
        var elabel = y.getAttribute('label');
        if (y.getAttribute('required') == "yes") { required = true; }
        var etype = y.type;
        if(etype == 'password') {
            xdbformvalue += concat + y.name + '=' + encodeURIComponent(y.value);
            if (required && y.value.search(/^\s*$/) > -1) { if(!xdbquiet){alert(xdblabels.field + elabel + xdblabels.not_empty);}; return false; };
        } else if (etype == 'checkbox' || etype == 'radio') {
            var checked = false;
            if (etype == 'radio') {
                for(var iii=0; iii < y.form[y.name].length; iii++) {
                    if (y.form[y.name][iii].checked) {
                        xdbformvalue += concat + y.name + '=' + encodeURIComponent(y.form[y.name][iii].value);
                        checked = true;
                        //break;
                    }
                }
            } else {
                // looping for all elements to check matching names
                var elname = y.name.replace(/\[[0-9]*\]/g, '_');
                var curname = '';
                for(var iii=0; iii < y.form.elements.length; iii++) {
                    if (y.form.elements[iii]['type'] == undefined || y.form.elements[iii].type != 'checkbox') {
                        continue;
                    }
                    curname = y.form.elements[iii].name.replace(/\[[0-9]*\]/g, '_')
                    if (curname != '' && y.form.elements[iii].type == 'checkbox' && curname == elname && y.form.elements[iii].checked) {
                        checked = true;
                        if(y.value == y.form.elements[iii].value && y.name == y.form.elements[iii].name){
                            concat = (xdbformvalue != '')?('&'):('');
                            xdbformvalue += concat + y.name + '=' + encodeURIComponent(y.value);
                        }
                    }
                }
            }
            if (required && !checked) { if(!xdbquiet){alert(xdblabels.field + elabel + xdblabels.not_empty);}; return false; }
        } else if(etype == 'select-one') {
            xdbformvalue += concat + y.name + '=' + encodeURIComponent(y.value);
            if(required && !y.options.selectedIndex) { if(!xdbquiet){alert(xdblabels.field + elabel + xdblabels.not_selected);}; return false; }
        } else if(etype == 'select-multiple') {
            var ok = false;
         var op = y.options;
         for (j = 0; j < op.length; j++) {
             if (op[j].selected === true) {
                    concat = (xdbformvalue != '')?('&'):('');
                    xdbformvalue += concat + y.name + '=' + encodeURIComponent(op[j].value);
                 ok = true;
                 //break;
             }
         }
            if(required && !ok) { if(!xdbquiet){alert(xdblabels.field + elabel + xdblabels.not_selected);}; return false; }
        } else if(etype=='file') {
            xdbformvalue += concat + y.name + '=' + encodeURIComponent(y.value);
            if (required && y.value.search(/^\s*$/) > -1) { if(!xdbquiet){alert(xdblabels.field + elabel + xdblabels.not_empty);}; return false; }
        } else {
            xdbformvalue += concat + y.name + '=' + encodeURIComponent(y.value);
            if (required && y.value.search(/^\s*$/) > -1) { if(!xdbquiet){alert(xdblabels.field + elabel + xdblabels.not_empty);}; return false; }
        }
    }
    return true;
}

var xkeymenu = [];
xdbconfig['currmenu']='';
function xKeyMenu(){
    if(xKeyMenu.arguments.length > 0){
        xdbconfig['currmenu']=xKeyMenu.arguments[0];
    }
    //alert(this.keyCode);
};

function xdb_fieldsearch_response()
{
    if(xdbhttp.responseJS != undefined && xdbhttp.responseJS.Body['field-searchResponse'] != undefined){
        var elname = xdbhttp.responseJS.Body['field-searchResponse'].element;
        var elpart = elname.split('.');
        var elform = document.forms['xdb_' + elpart[0]];
        var el = elform['xsearch_' + elpart[1]];
        var str = '';
        result = xdbhttp.responseJS.Body['field-searchResponse'].result;
        elform[elpart[1]].value = '';

        var colorize = (xdbconfig['colorize_required'] != undefined && elform[elpart[1]].getAttribute && elform[elpart[1]].getAttribute('required')=='yes')?(true):(false);
        var fname = 'f_' + elpart[1];
        fname = fname.replace(/\[[0-9]+\]$/, '');

        if(result.length == undefined || result.length == 0){
            if(colorize){xAddClass(fname, 'required');}
            str += '<p class="msg">Não foi encontrado nenhum registro para a consulta por "<em>' + el.value + '</em>"</p>';
            xRemoveEventListener(self,'keyPress',xKeyMenu,true);
        } else if(result.length == 1){
            elform[elpart[1]].value = result[0].key;
            el.value=result[0].value;
            xCheckForms();

            if(xdbconfig.timeout == undefined){xdbconfig['timeout'] ={};};
            if(xdbconfig.timeout[elname] != undefined && xdbconfig.timeout[elname] != ''){
                clearTimeout(xdbconfig.timeout[elname]);
            }
            xRemoveEventListener(self,'keyPress',xKeyMenu,true);
            return false;
        } else {
            if(colorize){xAddClass(fname, 'required');}
            for(var i=0;i<result.length;i++){
                str += '<p><a href="#" id="xs' + result[i].key + '" name="xs' + result[i].key + '" onmouseover="xKeyMenu(' + i + ');return false;" " onclick="var text=(this.text != undefined)?(this.text):(this.innerHTML);document.forms[\'xdb_' + elpart[0] + '\'][\'xsearch_' + elpart[1] + '\'].value=text;document.forms[\'xdb_' + elpart[0] + '\'][\'' + elpart[1] + '\'].value=this.name.substr(2);xCheckForms();return false;">' + result[i].value + '</a></p>';
            }
            xAddEventListener(self,'keyPress',xKeyMenu,true);
        }

        var box = xGetElementById('xres_' + elpart[1]);
        var e=xGetElementById('xsearch_' + elpart[1]);
        if (!box) {
         var box = document.createElement('div');
         box.id = 'xres_' + elpart[1];
            box.style.position = 'absolute';
            box.className = 'textinput xsearch';
            document.body.appendChild(box);
        }
        if(e){
            box.style.width=xWidth(e)+'px';
        }
        document.onclick=function(){document.onclick=null;xChangeVisibility('xres_' + elpart[1], 'none');};
        box.innerHTML = str;
        xChangeVisibility('xres_' + elpart[1], 'block');
        if(el){
            var xpos = xPageX(el);
            xMoveTo(box, xpos, xPageY(el) + xHeight(el));
        }
        //box.focus();
    }
}
function xdb_check_timeout(el, elform)
{
    var id=elform.form.name+'.'+elform.name;
    if(xdbconfig.timeout == undefined){xdbconfig['timeout'] ={};};
    if(xdbconfig.timeout[id] != undefined && xdbconfig.timeout[id] != ''){
        clearTimeout(xdbconfig.timeout[id]);
        xdbconfig.timeout[id]=setTimeout("check('"+el+"',document.forms."+elform.form.name+"['"+elform.name+"']);", 1000);
    } else {
        xdbconfig.timeout[id]=setTimeout("check('"+el+"',document.forms."+elform.form.name+"['"+elform.name+"']);", 1000);
    }
}
check=tupiCheck=function(el, elform)
{
    if(xdbconfig.timeout == undefined){xdbconfig['timeout'] ={};};
    var id=elform.form.name+'.'+elform.name;
    if(xdbconfig.timeout[id] != ''){
        clearTimeout(xdbconfig.timeout[id]);
        xdbconfig.timeout[id]='';
    }
    xdb_modified = true;
    if (el == '') {
        xCheckForms();
        return;
    }
    var msg = '',nv=false,r;
    el=el.replace('-','');
    var oldvalue = '';
    if (el == 'search' && elform.name.substr(0, 8) == 'xsearch_') {
        if(elform.value==''){
            elform.form[elform.name.substr(8)].value='';
        } else {
            //filter?
            //xdboptions[xdbi] = {name:'responsavel', filterby:'tipo_responsavel_financeiro'
            var filter = false;
            var filtervalue = '';
            if(xdboptions.length > 0){
                for(var i=0;i<xdboptions.length;i++){
                    var elname = xdboptions[i].name;
                    if(elname==elform.name.substr(8)){
                        filter = true;
                        filtervalue=xdb_formelement_value(elname, elform.form);
                    }
                }
            }
            if(filter){
                xdb_soap_request(self.location.href, 'field-search', xdb_fieldsearch_response, {name:'element',value:elform.form.name.substr(4)+'.'+elform.name.substr(8)},{name:'words',value:tupiXmlEscape(elform.value)},{name:'filter',value:filtervalue});
            } else {
                xdb_soap_request(self.location.href, 'field-search', xdb_fieldsearch_response, {name:'element',value:elform.form.name.substr(4)+'.'+elform.name.substr(8)},{name:'words',value:tupiXmlEscape(elform.value)});
            }
        }
        msg=false;
    } else if (el == 'integer') {
        if (elform.value.search(/[^0-9]/) > -1) {
            msg=(xdblabels.wrong_int);
            nv = elform.value.replace(/[^0-9]/g, '');
        }
    } else if (el == 'phone') {
        var phone = elform.value.replace(/[^0-9]/g, "");
        if (phone.length > 8) {
            nv = "("+ phone.substr(0, 2) + ") " + phone.substr(2, 4) + "-" + phone.substr(6);
            msg=false;
        } else {
            msg=xdblabels.wrong_phone;
            nv=oldvalue;
        }
    } else if(el=='datetime'){
        if (elform.value.search(tupia.p.date) >= 0 && elform.value != "") {
            var zeros = '00';
            var now = new Date();
            msg=xdblabels.wrong_datetime;
            nv = elform.value+'T'+ zeros.substr(now.getHours().toString()) + now.getHours().toString() + ":" + zeros.substr(now.getSeconds().toString()) + now.getSeconds().toString();
        }
    } else if(el=='float'){
        if(elform.value != '' && (r=tupia.p.float.exec(elform.value)) && r.length && r.length > 0){
            if(r[9] && (r[0].substr(0,1)==tupia.s.decimals || (r[12] && r[12]!=tupia.s.thousands) || (r[14] && r[14]!=tupia.s.decimals))){
                nv = (r[10])?(r[10].replace(new RegExp('\\'+r[12],'g'),tupia.s.thousands)):('0');
                nv+= (r[13])?(r[13].replace(r[14],tupia.s.decimals)):('');
            }else if(r[3] && (r[0].substr(0,1)==tupia.s.decimals || (r[6] && r[6]!=tupia.s.thousands) || (r[8] && r[8]!=tupia.s.decimals))){
                nv = (r[4])?(r[4].replace(new RegExp('\\'+r[6],'g'),tupia.s.thousands)):('0');
                nv+= (r[7])?(r[7].replace(r[8],tupia.s.decimals)):('');
            };
        } else if(elform.value!=''){
            msg=xdblabels.wrong_value;nv=oldvalue;
        }
    } else if (el != 'bool' && elform.getAttribute('maxlength') != undefined && elform.getAttribute('maxlength') > 0 && elform.value.length > elform.getAttribute('maxlength')) {
        msg=xdblabels.max_chars1 + elform.getAttribute('maxlength') + xdblabels.max_chars2;
    }
    if(msg=== '' && elform.value && elform.value != ''){
        for(var i in tupia.p){
            if(el==i){
                if(tupia.p[el] && elform.value.search(tupia.p[el]) < 0){
                    if(xdblabels['wrong_'+el]){
                        msg=xdblabels['wrong_'+el];
                    } else {
                        msg=xdblabels.wrong_value;
                    }
                    nv = oldvalue;
                }
                break;
            }
        }
    }
    if(msg!== '' && msg !== false){
        alert(msg);
    }
    if(nv!==false){
        elform.value=nv;
    }
    if(msg!==false && xdbconfig['auto_submit'] != undefined && xdbconfig['auto_submit']){
        send(elform.form);
    }
    xCheckForms();
}
tupiXmlEscape=xdb_xml_escape=function(str){if(typeof str != 'string'){str=''+str;};var s=[/\&/g,/\</g,/\>/g];var r=['&amp;','&lt;','&gt;'];if(arguments.length > 1 && arguments[1]){s.push(/\"/g);r.push('&#034;');};if(arguments.length > 2 && arguments[2]){ s.push(/\'/g);r.push('&#039;');};while(s.length > 0){str=str.replace(s.shift(), r.shift());};return str;};


function xChangeVisibility(e) {
 var argv = xChangeVisibility.arguments;
 var argc = xChangeVisibility.arguments.length;
 var xv = (argc > 1) ? argv[1] : null;
 var objeto;
    if (!(objeto=xGetStyleObj(e))){
        return false;
    } else {
        if (xv != null){
            objeto.display = xv;
        } else if (objeto.display == "none") {
            objeto.display = "block";
        } else {
            objeto.display = "none";
        }
        return true;
    }
}

function xChangeClass(e,classname){
    if (!(e=xGetElementById(e))) return null;
    e.className=classname;
}
function xAddClass(e,classname){
    if (!(e=xGetElementById(e))) return null;
    if(e.ClassName != undefined && e.ClassName.search(classname) > -1) return true;
    e.className=(e.className != '')?(' ' + classname):(classname);
}
function xRemoveClass(e,classname){
    if (!(e=xGetElementById(e))) return null;
    if(e.ClassName != undefined && e.ClassName.search(classname) <= -1) return true;
    e.className=e.className.replace(' ' + classname, '');
    e.className=e.className.replace(classname, '');
}
function xGetStyleObj(e) {
    if(document.getElementById && document.getElementById(e)) {
        return document.getElementById(e).style;
    } else if (document.all && document.all(e)) {
        return document.all(e).style;
    } else if (document.layers && document.layers[e]) {
        return document.layers[e];
    } else {
        return false;
    }
}

function xDef() {
  if(xDef.arguments.length > 1 && xDef.arguments[0] != undefined && xDef.arguments[1] != undefined){
    if(xIE4Up){for (var i in xDef.arguments[0]){if(i==xDef.arguments[1]){return true;}}return false;}
    return !(xDef.arguments[0][xDef.arguments[1]]==undefined);
  }
  for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])=='undefined') return false;}
  return true;
}

function xdb_autotab(elfield, nextid){
    if (elfield.getAttribute && elfield.value.length == elfield.getAttribute('maxlength')){
        var x = elfield.form;
        var next = false;
        for (i=0;i<x.elements.length;i++) {
            if(x.elements[i].type != 'hidden'){
                if(next){
                    x.elements[i].focus();
                    return true;
                } else if (x.elements[i].name == elfield.name){
                    next = true;
                }
            }
        }
    }
}

function xdb_formelement_value(idstr, x)
{
    var value = new Array();
    for (i=0;i<x.elements.length;i++) {
        if (x.elements[i].name != '' && x.elements[i].name == idstr) {
   var ft = x.elements[i].type;
   if(ft == 'password') {
       value[value.length] = x.elements[i].value;
   } else if(ft == 'checkbox' || ft == 'radio'){
       if (x.elements[i].checked) {
                    value[value.length] = x.elements[i].value;
                }
            } else if(ft == 'select-one' || ft == 'select-multiple') {
       var op = x.elements[i].options;
       for (k = 0; k < op.length; k++) {
           if (op[k].selected) {
                        value[value.length] = op[k].value;
           }
       }
   } else { value[value.length] = x.elements[i].value; }
        }
    }
    return value;
}

function xdb_formreset(x)
{
    for (i=0;i<x.elements.length;i++) {
        if (x.elements[i].name != '') {
   var ft = x.elements[i].type;
   if(ft == 'password') {
       x.elements[i].value = '';
   } else if(ft == 'hidden' && x.elements[i].value != '-1') {
       continue;
   } else if(ft == 'checkbox' || ft == 'radio'){
       x.elements[i].checked = false;
            } else if(ft == 'select-one' || ft == 'select-multiple') {
       x.elements[i].selectedIndex = '';
       var op = x.elements[i].options;
       for (k = 0; k < op.length; k++) {
                    op[k].selected = false;
       }
   } else { x.elements[i].value = ''; }
        }
    }
    return false;
}

function xdb_parsepost(post, x)
{
    for (i=0;i<x.elements.length;i++) {
        for (j=0;j<post.length;j++) {
            if (x.elements[i].name != "" && x.elements[i].name == post[j].name) {
    ft = x.elements[i].type;
    if(ft == 'password') {}
    else if(ft == 'checkbox' || ft == 'radio') { if (x.elements[i].value == post[j].value) { x.elements[i].checked = true; post.splice(j, 1)} }
    else if(ft == 'select-one' || ft == 'select-multiple') {
        var op = x.elements[i].options;
        for (k = 0; k < op.length; k++) {
            if (op[k].value == post[j].value) {
                op[k].selected = true;
                break;
            }
        }
    }
    else { x.elements[i].value = post[j].value; }
                break;
            }
        }
    }
}

// calendar functions
function xdbmark(datestr)
{
    var objname = 'd' + datestr.replace(/\-/g, '');
    //alert(objname);
    if(xdbmarks.length > 1){
        xdbunfill();
        xdbfill(objname);
    } else if(xdbmarks.length > 0){
        if (xdbdates(xdbmarks[xdbmarks.length -1], objname.substr(1))){
            xdbfill(objname);
        }
    } else {
        xdbfill(objname);
    }
}
function xdbsetdate(datefrom, dateend)
{
    return xdbdates(datefrom, dateend);
}
function xdbdates(datefrom, dateend)
{
    var fdate = new Date(datefrom.substr(0,4),datefrom.substr(4,2) -1,datefrom.substr(6,2));
    var tdate = new Date(dateend.substr(0,4), dateend.substr(4,2) -1, dateend.substr(6,2));
    var ft = 0;
    var tt = 0;
    var objname = '';
    tt = tdate.valueOf();
    ft = fdate.valueOf();
    var fbigger = false;
    var fmod = 1;
    if(fdate.valueOf() > tdate.valueOf()){
        fbigger = true;
        fmod = -1;
    }

    var y = 0;
    while((!fbigger && ft < tt) || (fbigger && ft > tt)){
        ft = ft + (86400000 * fmod);
        tdate.setTime(ft);
        y = tdate.getYear();
        if (y < 1000){ y=(y >= 100)?(y + 1900):('20' + y);};
        objname = 'd' + y;
        objname += (tdate.getMonth() > 8)?(tdate.getMonth() +1):('0'+ (tdate.getMonth() + 1));
        objname += (tdate.getDate() > 9)?(tdate.getDate()):('0'+tdate.getDate());
        if (!xdbfill(objname)) {
            return false;
            break;
        }
    }
    return true;
}
function xColorize(e,cobj)
{
    if (!(obj=xGetStyleObj(e))){
        return false;
    } else {
        if(cobj.color != ''){obj.color = cobj.color;};
        if(cobj.bkg != ''){obj.background = cobj.bkg;};
        return true;
    }
}
function xdbfill(objname)
{
    xdbmarks[xdbmarks.length] = objname.substr(1);
    var obj = xGetStyleObj(objname);
    if(obj) {
        obj.color = xdbnewstyle.color;
        obj.background = xdbnewstyle.background;
        return true;
    }
    return false;
}
function xdbunfill()
{
    var objname = '';
    var obj = new Object();
    while(xdbmarks.length > 0){
        objname = "d" + xdbmarks.pop();
        obj = xGetStyleObj(objname);
        if(obj) {
            obj.color = xdbstyle.color;
            obj.background = xdbstyle.background;
        }
    }
}

function xdb_displayinline(el, text)
{
    return false;
    if (!(el=xGetElementById(el))) return null;
 var iframe = document.createElement("iframe");
 el.appendChild(iframe);

 if (!xIE4Up) {
  iframe.style.borderWidth = "1px";
 }
 var doc = iframe.contentWindow.document;
 if (!doc) {
 }
 doc.open();
 doc.write(text);
 doc.close();
}

function xdb_popup(text)
{
    var xwindow=window.open('', 'xwindow', 'scrollbars=yes,width=175, height=300');
    xwindow.document.writeln(text);
    xwindow.document.close();
    //onClick="window3.document.writeln('Hey there'); window3.document.close()">
    //onClick="window3.close()">
}


function xdb_popinfo(e, elref)
{
    if(xdb_popinfo.arguments.length > 2 && xdb_popinfo.arguments[2]){ xChangeVisibility(e, 'block'); } else { xChangeVisibility(e); }
    //setTimeout('document.onclick=function(){xChangeVisibility("' + e + '", "none");document.onclick=null;return false;};', 500);
    if (!(el=xGetElementById(e))) return null;
    if(elref == undefined){ return null; }
    if (!(elref=xGetElementById(elref))) return null;
    xMoveTo(el, xPageX(elref), xPageY(elref));
}

/* xt functions */
function xGetElementById(e) {
  if(typeof(e)!='string') return e;
  if(document.getElementById) e=document.getElementById(e);
  else if(document.all) e=document.all[e];
  else if(document.layers) e=xLayer(e);
  else e=null;
  return e;
}
function xParent(e,bNode){
  if (!(e=xGetElementById(e))) return null;
  var p=null;
  if (!bNode && xDef(e.offsetParent)) p=e.offsetParent;
  else if (xDef(e.parentNode)) p=e.parentNode;
  else if (xDef(e.parentElement)) p=e.parentElement;
  else if (xDef(e.parentLayer)){if (e.parentLayer!=window) p=e.parentLayer;}
  return p;
}
function xStr(s) {
  return typeof(s)=='string';
}
function xNum(n) {
  return typeof(n)=='number';
}
// Appearance:
function xShow(e) {
  if(!(e=xGetElementById(e))) return;
  if(e.style && xDef(e.style.visibility)) e.style.visibility='visible';
  else if(xDef(e.visibility)) e.visibility='show';
}
function xHide(e) {
  if(!(e=xGetElementById(e))) return;
  if(e.style && xDef(e.style.visibility)) e.style.visibility='hidden';
  else if(xDef(e.visibility)) e.visibility='hide';
}
function xZIndex(e,uZ) {
  if(!(e=xGetElementById(e))) return 0;
  if(e.style && xDef(e.style.zIndex)) {
    if(xNum(uZ)) e.style.zIndex=uZ;
    uZ=parseInt(e.style.zIndex);
  }
  else if(xDef(e.zIndex)) {
    if(xNum(uZ)) e.zIndex=uZ;
    uZ=e.zIndex;
  }
  return uZ;
}
function xColor(e,sColor) {
  if(!(e=xGetElementById(e))) return '';
  var c='';
  if(e.style && xDef(e.style.color)) {
    if(xStr(sColor)) e.style.color=sColor;
    c=e.style.color;
  }
  return c;
}
function xBackground(e,sColor,sImage) {
  if(!(e=xGetElementById(e))) return '';
  var bg='';
  if(e.style) {
    if(xStr(sColor)) {
      if(!xOp5or6) e.style.backgroundColor=sColor;
      else e.style.background=sColor;
    }
    if(xStr(sImage)) e.style.backgroundImage=(sImage!='')? 'url('+sImage+')' : null;
    if(!xOp5or6) bg=e.style.backgroundColor;
    else bg=e.style.background;
  }
  else if(xDef(e.bgColor)) {
    if(xStr(sColor)) e.bgColor=sColor;
    bg=e.bgColor;
    if(xStr(sImage)) e.background.src=sImage;
  }
  return bg;
}
// Position:
function xMoveTo(e,iX,iY) {
  xLeft(e,iX);
  xTop(e,iY);
}
function xLeft(e,iX) {
  if(!(e=xGetElementById(e))) return 0;
  var css=xDef(e.style);
  if (css && xStr(e.style.left)) {
    if(xNum(iX)) e.style.left=iX+'px';
    else {
      iX=parseInt(e.style.left);
      if(isNaN(iX)) iX=0;
    }
  }
  else if(css && xDef(e.style.pixelLeft)) {
    if(xNum(iX)) e.style.pixelLeft=iX;
    else iX=e.style.pixelLeft;
  }
  else if(xDef(e.left)) {
    if(xNum(iX)) e.left=iX;
    else iX=e.left;
  }
  return iX;
}
function xTop(e,iY) {
  if(!(e=xGetElementById(e))) return 0;
  var css=xDef(e.style);
  if(css && xStr(e.style.top)) {
    if(xNum(iY)) e.style.top=iY+'px';
    else {
      iY=parseInt(e.style.top);
      if(isNaN(iY)) iY=0;
    }
  }
  else if(css && xDef(e.style.pixelTop)) {
    if(xNum(iY)) e.style.pixelTop=iY;
    else iY=e.style.pixelTop;
  }
  else if(xDef(e.top)) {
    if(xNum(iY)) e.top=iY;
    else iY=e.top;
  }
  return iY;
}
function xPageX(e) {
  if (!(e=xGetElementById(e))) return 0;
  if (xDef(e.pageX)) return e.pageX;
  var x = 0;
  while (e) {
    if (xDef(e.offsetLeft)) x += e.offsetLeft;
    e = xDef(e.offsetParent) ? e.offsetParent : null;
  }
  return x;
}
function xPageY(e) {
  if (!(e=xGetElementById(e))) return 0;
  if (xDef(e.pageY)) return e.pageY;
  var y = 0;
  while (e) {
    if (xDef(e.offsetTop)) y += e.offsetTop;
    if (window.opera && xDef(e, 'offsetParent') && xDef(e.offsetParent, 'scrollTop')) { y += e.offsetParent.scrollTop; }
    e = xDef(e.offsetParent) ? e.offsetParent : null;
  }
  return y;
}
function xOffsetLeft(e) { // v3.14, see x_nn4.js
  if (!(e=xGetElementById(e))) return 0;
  if (xDef(e.offsetLeft)) return e.offsetLeft;
  else return 0;
}
function xOffsetTop(e) {
  if (!(e=xGetElementById(e))) return 0;
  if (xDef(e.offsetTop)) return e.offsetTop;
  else return 0;
}
function xScrollLeft(e) {
  var offset=0;
  if (!(e=xGetElementById(e))) {
    if(xDef(window.pageXOffset)) offset=window.pageXOffset;
    else if(document.documentElement && document.documentElement.scrollLeft) offset=document.documentElement.scrollLeft;
    else if(document.body && xDef(document.body.scrollLeft)) offset=document.body.scrollLeft;
  }
  else { if (xNum(e.scrollLeft)) offset = e.scrollLeft; }
  return offset;
}
function xScrollTop(e) {
  var offset=0;
  if (!(e=xGetElementById(e))) {
    if(xDef(window.pageYOffset)) offset=window.pageYOffset;
    else if(document.documentElement && document.documentElement.scrollTop) offset=document.documentElement.scrollTop;
    else if(document.body && xDef(document.body.scrollTop)) offset=document.body.scrollTop;
  }
  else { if (xNum(e.scrollTop)) offset = e.scrollTop; }
  return offset;
}
// Size:
function xResizeTo(e,uW,uH) {
  xWidth(e,uW);
  xHeight(e,uH);
}
function xWidth(e,uW) {
  if(!(e=xGetElementById(e))) return 0;
  if (xNum(uW)) { // v3.13.1
    if (uW<0) uW = 0;
    else uW=Math.round(uW);
  }
  else uW=0;
  var css=xDef(e.style);
  if(css && xDef(e.offsetWidth) && xStr(e.style.width)) {
    if(uW) xSetCW(e, uW);
    uW=e.offsetWidth;
  }
  else if(css && xDef(e.style.pixelWidth)) {
    if(uW) e.style.pixelWidth=uW;
    uW=e.style.pixelWidth;
  }
  else if(xDef(e.clip) && xDef(e.clip.right)) {
    if(uW) e.clip.right=uW;
    uW=e.clip.right;
  }
  return uW;
}
function xHeight(e,uH) {
  if(!(e=xGetElementById(e))) return 0;
  if (xNum(uH)) { // v3.13.1
    if (uH<0) uH = 0;
    else uH=Math.round(uH);
  }
  else uH=0;
  var css=xDef(e.style);
  if(css && xDef(e.offsetHeight) && xStr(e.style.height)) {
    if(uH) xSetCH(e, uH);
    uH=e.offsetHeight;
  }
  else if(css && xDef(e.style.pixelHeight)) {
    if(uH) e.style.pixelHeight=uH;
    uH=e.style.pixelHeight;
  }
  else if(xDef(e.clip) && xDef(e.clip.bottom)) {
    if(uH) e.clip.bottom=uH;
    uH=e.clip.bottom;
  }
  return uH;
}
function xGetCS(ele,sP){return parseInt(document.defaultView.getComputedStyle(ele,'').getPropertyValue(sP));}
function xSetCW(ele,uW){
  var pl=0,pr=0,bl=0,br=0;
  if(xDef(document.defaultView) && xDef(document.defaultView.getComputedStyle)){
    pl=xGetCS(ele,'padding-left');
    pr=xGetCS(ele,'padding-right');
    bl=xGetCS(ele,'border-left-width');
    br=xGetCS(ele,'border-right-width');
  }
  else if(xDef(ele.currentStyle,document.compatMode)){
    if(document.compatMode=='CSS1Compat'){
      pl=parseInt(ele.currentStyle.paddingLeft);
      pr=parseInt(ele.currentStyle.paddingRight);
      bl=parseInt(ele.currentStyle.borderLeftWidth);
      br=parseInt(ele.currentStyle.borderRightWidth);
    }
  }
  else if(xDef(ele.offsetWidth,ele.style.width)){ // ?
    ele.style.width=uW+'px';
    pl=ele.offsetWidth-uW;
  }
  if(isNaN(pl)) pl=0; if(isNaN(pr)) pr=0; if(isNaN(bl)) bl=0; if(isNaN(br)) br=0;
  var cssW=uW-(pl+pr+bl+br);
  if(isNaN(cssW)||cssW<0) return;
  else ele.style.width=cssW+'px';
}
function xSetCH(ele,uH){
  var pt=0,pb=0,bt=0,bb=0;
  if(xDef(document.defaultView) && xDef(document.defaultView.getComputedStyle)){
    pt=xGetCS(ele,'padding-top');
    pb=xGetCS(ele,'padding-bottom');
    bt=xGetCS(ele,'border-top-width');
    bb=xGetCS(ele,'border-bottom-width');
  }
  else if(xDef(ele.currentStyle,document.compatMode)){
    if(document.compatMode=='CSS1Compat'){
      pt=parseInt(ele.currentStyle.paddingTop);
      pb=parseInt(ele.currentStyle.paddingBottom);
      bt=parseInt(ele.currentStyle.borderTopWidth);
      bb=parseInt(ele.currentStyle.borderBottomWidth);
    }
  }
  else if(xDef(ele.offsetHeight,ele.style.height)){ // ?
    ele.style.height=uH+'px';
    pt=ele.offsetHeight-uH;
  }
  if(isNaN(pt)) pt=0; if(isNaN(pb)) pb=0; if(isNaN(bt)) bt=0; if(isNaN(bb)) bb=0;
  var cssH=uH-(pt+pb+bt+bb);
  if(isNaN(cssH)||cssH<0) return;
  else ele.style.height=cssH+'px';
}
function xClip(e,iTop,iRight,iBottom,iLeft) {
  if(!(e=xGetElementById(e))) return;
  if(e.style) {
    if (xNum(iLeft)) e.style.clip='rect('+iTop+'px '+iRight+'px '+iBottom+'px '+iLeft+'px)';
    else e.style.clip='rect(0 '+parseInt(e.style.width)+'px '+parseInt(e.style.height)+'px 0)';
  }
  else if(e.clip) {
    if (xNum(iLeft)) { e.clip.top=iTop; e.clip.right=iRight; e.clip.bottom=iBottom; e.clip.left=iLeft; }
    else { e.clip.top=0; e.clip.right=xWidth(e); e.clip.bottom=xHeight(e); e.clip.left=0; }
  }
}
// Window:
function xClientWidth() {
  var w=0;
  if(xOp5or6) w=window.innerWidth;
  else if(!window.opera && document.documentElement && document.documentElement.clientWidth) // v3.12
    w=document.documentElement.clientWidth;
  else if(document.body && document.body.clientWidth)
    w=document.body.clientWidth;
  else if(xDef(window.innerWidth,window.innerHeight,document.height)) {
    w=window.innerWidth;
    if(document.height>window.innerHeight) w-=16;
  }
  return w;
}
function xClientHeight() {
  var h=0;
  if(xOp5or6) h=window.innerHeight;
  else if(!window.opera && document.documentElement && document.documentElement.clientHeight) // v3.12
    h=document.documentElement.clientHeight;
  else if(document.body && document.body.clientHeight)
    h=document.body.clientHeight;
  else if(xDef(window.innerWidth,window.innerHeight,document.width)) {
    h=window.innerHeight;
    if(document.width>window.innerWidth) h-=16;
  }
  return h;
}
// Animation:
function xSlideTo(e,x,y,uTime) {
  if (!(e=xGetElementById(e))) return;
  if (!e.timeout) e.timeout = 25;
  e.xTarget = x; e.yTarget = y; e.slideTime = uTime; e.stop = false;
  e.yA = e.yTarget - xTop(e); e.xA = e.xTarget - xLeft(e); // A = distance
  e.B = Math.PI / (2 * e.slideTime); // B = period
  e.yD = xTop(e); e.xD = xLeft(e); // D = initial position
  var d = new Date(); e.C = d.getTime();
  if (!e.moving) xSlide(e);
}
function xSlide(e) {
  if (!(e=xGetElementById(e))) return;
  var now, s, t, newY, newX;
  now = new Date();
  t = now.getTime() - e.C;
  if (e.stop) { e.moving = false; }
  else if (t < e.slideTime) {
    setTimeout("xSlide('"+e.id+"')", e.timeout);
    s = Math.sin(e.B * t);
    newX = Math.round(e.xA * s + e.xD);
    newY = Math.round(e.yA * s + e.yD);
    xMoveTo(e, newX, newY);
    e.moving = true;
  }
  else {
    xMoveTo(e, e.xTarget, e.yTarget);
    e.moving = false;
  }
}
// Event:
function xAddEventListener(e,eventType,eventListener,useCapture) {
  if(!(e=xGetElementById(e))) return;
  eventType=eventType.toLowerCase();
  if((!xIE4Up && !xOp7) && e==window) {
    if(eventType=='resize') { window.xPCW=xClientWidth(); window.xPCH=xClientHeight(); window.xREL=eventListener; xResizeEvent(); return; }
    if(eventType=='scroll') { window.xPSL=xScrollLeft(); window.xPST=xScrollTop(); window.xSEL=eventListener; xScrollEvent(); return; }
  }
  var eh='e.on'+eventType+'=eventListener';
  if(e.addEventListener) e.addEventListener(eventType,eventListener,useCapture);
  else if(e.attachEvent) e.attachEvent('on'+eventType,eventListener);
  else if(e.captureEvents) {
    if(useCapture||(eventType.indexOf('mousemove')!=-1)) { e.captureEvents(eval('Event.'+eventType.toUpperCase())); }
    eval(eh);
  }
  else eval(eh);
}
function xRemoveEventListener(e,eventType,eventListener,useCapture) {
  if(!(e=xGetElementById(e))) return;
  eventType=eventType.toLowerCase();
  if((!xIE4Up && !xOp7) && e==window) {
    if(eventType=='resize') { window.xREL=null; return; }
    if(eventType=='scroll') { window.xSEL=null; return; }
  }
  var eh='e.on'+eventType+'=null';
  if(e.removeEventListener) e.removeEventListener(eventType,eventListener,useCapture);
  else if(e.detachEvent) e.detachEvent('on'+eventType,eventListener);
  else if(e.releaseEvents) {
    if(useCapture||(eventType.indexOf('mousemove')!=-1)) { e.releaseEvents(eval('Event.'+eventType.toUpperCase())); }
    eval(eh);
  }
  else eval(eh);
}
function xEvent(evt) { // cross-browser event object prototype
  this.type = '';
  this.target = null;
  this.pageX = 0;
  this.pageY = 0;
  this.offsetX = 0;
  this.offsetY = 0;
  this.keyCode = 0;
  var e = evt ? evt : window.event;
  if(!e) return;
  if(e.type) this.type = e.type;
  if(e.target) this.target = e.target;
  else if(e.srcElement) this.target = e.srcElement;
  else if(xNN4) this.target = xLayerFromPoint(e.pageX, e.pageY);
  if(xOp5or6) { this.pageX = e.clientX; this.pageY = e.clientY; }
  else if(xDef(e.pageX,e.pageY)) { this.pageX = e.pageX; this.pageY = e.pageY; } // v3.14
  else if(xDef(e.clientX,e.clientY)) { this.pageX = e.clientX + xScrollLeft(); this.pageY = e.clientY + xScrollTop(); }
  if(xDef(e.offsetX,e.offsetY)) { this.offsetX = e.offsetX; this.offsetY = e.offsetY; }
  else if(xDef(e.layerX,e.layerY)) { this.offsetX = e.layerX; this.offsetY = e.layerY; }
  else { this.offsetX = this.pageX - xPageX(this.target); this.offsetY = this.pageY - xPageY(this.target); }
  if (e.keyCode) { this.keyCode = e.keyCode; } // for moz/fb, if keyCode==0 use which
  else if (xDef(e.which)) { this.keyCode = e.which; }
}
function xResizeEvent() { // window resize event simulation
  if (window.xREL) setTimeout('xResizeEvent()', 250);
  var cw = xClientWidth(), ch = xClientHeight();
  if (window.xPCW != cw || window.xPCH != ch) { window.xPCW = cw; window.xPCH = ch; if (window.xREL) window.xREL(); }
}
function xScrollEvent() { // window scroll event simulation
  if (window.xSEL) setTimeout('xScrollEvent()', 250);
  var sl = xScrollLeft(), st = xScrollTop();
  if (window.xPSL != sl || window.xPST != st) { window.xPSL = sl; window.xPST = st; if (window.xSEL) window.xSEL(); }
}
// end x.js

/* Simple AJAX Code-Kit (SACK) */
/* ©2005 Gregory Wild-Smith */
/* www.twilightuniverse.com */
/* Software licenced under a modified X11 licence, see documentation or authors website for more details */

var xdbhttp = '';
var xdbr = {};
var xdbhttp_sent = false;
var xdbautosave_timeout = '';
var xdbmsg_timeout = '';
var xdbquiet = false;

function xdb_autosave_delayed(x)
{
    if(xdbautosave_timeout != ''){
        clearTimeout(xdbautosave_timeout);
    }
    xdbautosave_timeout = window.setTimeout("xdb_autosave(document['" + x.name + "'])", 1000);
}

function xdb_autosave(x){
    if(typeof(xdbhttp) == 'string'){
        xdbhttp = new xdb_xmlhttp();
    }
    if (xdbhttp_sent || xdb_sent) {
        return false;
    } else {
        xdbhttp_sent = true;
        //window.setTimeout("xdb_sent = false;", 10000);
    }
    if (editor != null) {
        for (i=0; i < editor.length; i++) {
            editor[i]._textArea.value = editor[i].getHTML();
        }
    }
    xdbformvalue = '';
    xdbquiet = true;
    for ( i = 0; i < x.elements.length; i++ ) {
        var y = x.elements[i];
        if (!xdb_checkrequired(y)) {
            xdbhttp_sent = false;
            return false;
            break;
        }
    }
 xdbhttp.requestFile = x.action;
 xdbformvalue += '&xdb-autosave=' + encodeURIComponent(x.name);
 xdbhttp.method = 'POST';
 xdbhttp.element = 'xdbformmsg';
 xdbhttp.runAJAX(xdbformvalue);
}
function xdb_soap_request(url, method)
{
var argv = xdb_soap_request.arguments;
var argc = xdb_soap_request.arguments.length;
var action=(argc > 2)?(argv[2]):(function(){});
var soap = '<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:o="http://www.tcdesign.com.br/soap">' +
  '\n<s:Body>' +
  '\n<o:' + method + '>';
  for(var i=3;i<argc;i++){
    if(argv[i].name != undefined){
        soap += '\n<o:'+argv[i].name+'>'+xdb_xml_escape(argv[i].value)+'</o:'+argv[i].name+'>';
    } else if(argv[i] != '') {
        soap += '\n<o:param>' + xdb_xml_escape(argv[i]) + '</o:param>';
    }
  }
  soap += '\n</o:'+method+'>'+
  '\n</s:Body>' +
  '\n</s:Envelope>';
  if(xdb_request(url, soap, 'POST', 'Content-Type: text/xml\nSoap-action: '+method, action)){
    return true;
  } else {
    return false;
  }
}

function xdb_request(url)
{ // url, data, http-method, headers, showat
  var obj = new xdb_xmlhttp(url);
  if(!xdbquiet){
    obj.element='xstatus';
  }
  data=(xdb_request.arguments.length > 1)?(xdb_request.arguments[1]):('');
  obj.method=(xdb_request.arguments.length > 2)?(xdb_request.arguments[2]):('');
  obj.headers=(xdb_request.arguments.length > 3)?(xdb_request.arguments[3]):('');
  var showat = (xdb_request.arguments.length > 4)?(xdb_request.arguments[4]):(function(){});
  if(typeof(showat)=='object' && showat.innerHTML==undefined){
    for(var i in showat){obj[i] = showat[i];}
  } else { obj.onCompletion = showat; }
  obj.URLString=data;
  obj.xmlhttp = null;
  obj.createAJAX();
  var xdbid = '';var i=0;
  while(xdbid==''){if(xdbr['r'+i] == undefined){xdbid='r'+i;break;}i++;}
  obj.xdbid = xdbid;xdbr[xdbid]=obj;
  xdbr[xdbid].runAJAX();
  return true;
}

function xdb_xmlhttp(file) {
  this.xmlhttp = null;

  this.resetData = function() {
    this.method = "POST";
    this.queryStringSeparator = "?";
    this.argumentSeparator = "&";
    this.URLString = "";
    this.encodeURIString = true;
    this.execute = false;
    this.element = null;
    this.elementObj = null;
    this.requestFile = file;
    this.vars = new Object();
    this.responseStatus = new Array(2);
    this.label_sending = xdblabels.sending;
    this.label_loading = xdblabels.loading;
    this.label_loaded = xdblabels.loaded;
    this.label_complete = xdblabels.complete;
    this.label_fail = xdblabels.fail;
    this.label_error = xdblabels.error;
  };
  this.resetFunctions = function() {
    this.onLoading = function() { };
    this.onLoaded = function() { };
    this.onInteractive = function() { };
    this.onCompletion = function() { };
    this.onError = function() { };
    this.onFail = function() { };
  };

  this.reset = function() {
    this.resetFunctions();
    this.resetData();
  };

  this.createAJAX = function() {
    try {
      this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e1) {
      try {
        this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e2) {
        this.xmlhttp = null;
      }
    }

    if (!this.xmlhttp) {
      if (typeof XMLHttpRequest != "undefined") {
        this.xmlhttp = new XMLHttpRequest();
      } else {
        this.failed = true;
      }
    }
  };

  this.setVar = function(name, value){
    this.vars[name] = Array(value, false);
  };

  this.encVar = function(name, value, returnvars) {
    if (true == returnvars) {
      return Array(encodeURIComponent(name), encodeURIComponent(value));
    } else {
      this.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true);
    }
  }

  this.processURLString = function(string, encode) {
    encoded = encodeURIComponent(this.argumentSeparator);
    regexp = new RegExp(this.argumentSeparator + "|" + encoded);
    varArray = string.split(regexp);
    for (i = 0; i < varArray.length; i++){
      urlVars = varArray[i].split("=");
      if (true == encode){
        this.encVar(urlVars[0], urlVars[1]);
      } else {
        this.setVar(urlVars[0], urlVars[1]);
      }
    }
  }

  this.createURLString = function(urlstring) {
    if(this.URLString.length){
        return true;
    }
    if (this.encodeURIString && this.URLString.length) {
      this.processURLString(this.URLString, true);
    }

    if (urlstring) {
      if (this.URLString.length) {
        this.URLString += this.argumentSeparator + urlstring;
      } else {
        this.URLString = urlstring;
      }
    }
    urlstringtemp = new Array();
    for (key in this.vars) {
      if (false == this.vars[key][1] && true == this.encodeURIString) {
        encoded = this.encVar(key, this.vars[key][0], true);
        delete this.vars[key];
        this.vars[encoded[0]] = Array(encoded[1], true);
        key = encoded[0];
      }

      urlstringtemp[urlstringtemp.length] = key + "=" + this.vars[key][0];
    }
    if (urlstring){
      this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator);
    } else {
      this.URLString += urlstringtemp.join(this.argumentSeparator);
    }
  }

  this.runResponse = function() {
    eval(this.response);
  }

  this.runAJAX = function(urlstring) {
    if (this.failed) {
      if (this.element) {
        this.elementObj = (typeof(this.element) != 'object')?(xGetElementById(this.element)):(this.element);
        xdb_status(this.label_fail, this.elementObj);
      }
      this.onFail();
    } else {
      this.createURLString(urlstring);
      if (this.element) {
        this.elementObj = (typeof(this.element) != 'object')?(xGetElementById(this.element)):(this.element);
      }
      if (this.xmlhttp) {
        var self = this;
        if (this.method == 'GET') {
          totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString;
          this.xmlhttp.open(this.method, totalurlstring, true);
        } else {
          this.xmlhttp.open(this.method, this.requestFile, true);
        }
        if(this.headers != 'undefined' && this.headers != '') {
          var arrh = this.headers.split(/\s*\r?\n\s*/);
          var arrhp = [];
          for(var i=0;i<arrh.length;i++){
              arrhp=arrh[i].split(/\:\s*/,2);
              if(arrhp.length == 2){
                  try { this.xmlhttp.setRequestHeader(arrhp[0],arrhp[1]) } catch (e) {}
              }
          }
        } else if (this.method == 'POST'){
          try {this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")} catch (e) { }
        }

        this.xmlhttp.onreadystatechange = function() {
          switch (self.xmlhttp.readyState) {
            case 1:
              if (self.elementObj){xdb_status(self.label_sending, self.elementObj);}
              self.onLoading();
              break;
            case 2:
              if (self.elementObj){xdb_status(self.label_loading, self.elementObj);}
              self.onLoaded();
              break;
            case 3:
              if (self.elementObj){xdb_status(self.label_loaded, self.elementObj);}
              self.onInteractive();
              break;
            case 4:
              self.response = self.xmlhttp.responseText;
              self.responseXML = self.xmlhttp.responseXML;
              self.responseStatus[0] = self.xmlhttp.status;
              self.responseStatus[1] = self.xmlhttp.statusText;

              if(self.responseXML != undefined && self.responseXML.documentElement != undefined && self.responseXML != null){
                self.responseJS = xdb_xml2js(self.responseXML.documentElement);
              } else {
                self.response = self.xmlhttp.responseText;
              }
              xdbhttp =(xDef(xdbr, self.xdbid))?(xdbr[self.xdbid]):(xdbhttp);
              if (self.responseStatus[0] != '200') {
                if (self.elementObj){xdb_status(self.label_error+': '+self.responseStatus[1], self.elementObj, 3000);}
                self.onError();
              } else {
                if(typeof(self.onCompletion) == 'function'){
                  if(self.elementObj){xdb_status(self.label_complete, self.elementObj, 1000);}
                  self.onCompletion();
                } else if(self.response != 'undefined') {
                  var str = self.response;
                  xdb_write_html(str, self.onCompletion);
                  var jspos = str.search(/\<script[^\>]*\>[\n\r\s]*(\<\!\-\-)?/i);
                  while(jspos > -1){
                    var js = str.substr(jspos);
                    jspos = (js.substr(1).search(/\<script[^\>]*\>[\n\r\s]*(\<\!\-\-)?/i) > -1)?(jspos + 1 + js.substr(1).search(/\<script[^\>]*\>[\n\r\s]*(\<\!\-\-)?/i)):(-1);
                    js = js.replace(/\<script[^\>]*\>[\n\r\s]*(\<\!\-\-)?/i, '');
                    js = js.substr(0, js.search(/(\/\/\-\-\>)?\<\/script\>/i));
                    setTimeout(js, 1);
                  }
                }
                self.URLString = '';

                if (self.execute) {
                  self.runResponse();
                }
              }
              if(xDef(xdbr, self.xdbid)){
                xdbr[self.xdbid] = null;
              }
              xdbhttp_sent=false;
              break;
          }
        };

        this.xmlhttp.send(this.URLString);
      }
    }
  };

  this.reset();
  this.createAJAX();
}

function xdb_status(text, el)
{
  var id = (el.id != undefined)?('xdbs_'+el.id):('xdbs');

  if(xdbconfig.timeout == undefined){xdbconfig['timeout'] ={};};
  var t = 'xChangeVisibility("'+id+'","none");';
  if(xdbconfig.timeout[t] != undefined){
      clearTimeout(xdbconfig.timeout[t]);
      xdbconfig.timeout[t] = null;
  }
  if(!(se=xGetElementById(id))){
    xdb_appendaselement(text, el, id, 'xstatus');
  } else {
    se.innerHTML = text;
  }
  xMoveTo(id, xPageX(el), xPageY(el));
  xChangeVisibility(id,'block');
  if(xdb_status.arguments.length > 2){
    xdbconfig.timeout[t] = setTimeout(t, xdb_status.arguments[2]);
  }
}

function xdb_xml2js(xmlobj)
{ // função recursiva para transformar o conteúdo do s:Body em uma variável js
    var retval;
    var type = (xdb_xml2js.arguments.length > 1)?(xdb_xml2js.arguments[1]):('');
    if(xmlobj == null || typeof(xmlobj) != 'object' || !xDef(xmlobj.nodeName)){
        return xmlobj;
    } else if(xmlobj.attributes !== undefined && xmlobj.attributes.length > 0){
        for(var i=0;i<xmlobj.attributes.length;i++){
            if(xmlobj.attributes[i].nodeName.search(/\:type$/) > -1){
                type = xmlobj.attributes[i].nodeValue;
            }
        }
    }
    if(type == '' && xmlobj.childNodes != undefined && xmlobj.childNodes.length > 0){
        for(i=0;i<xmlobj.childNodes.length;i++){
            if(xmlobj.childNodes[i].nodeType==3 && xmlobj.childNodes[i].nodeValue.indexOf(/[^\s]/) > -1){
                type = 'string';
                break;
            }
        }
    }
    if(type.search(/\:?boolean$/) > -1){
        var nv = (xmlobj.childNodes.length > 0)?(xmlobj.childNodes[0].nodeValue):('');
        retval = (nv == 'false' || nv <= 0)?(false):(true);
    } else if(type.search(/\:?(int|i4|integer)$/) > -1){
        var nv = (xmlobj.childNodes.length > 0)?(xmlobj.childNodes[0].nodeValue):('');
        retval = parseInt(nv);
    } else if(type.search(/\:?string$/) > -1){
        var nv = '';
        for (var xi=0;xi<xmlobj.childNodes.length;xi++){
            nv += xmlobj.childNodes[xi].nodeValue;
        }
        retval = nv;
    } else if(type.search(/\:?(double|real|float)$/) > -1){
        var nv = (xmlobj.childNodes.length > 0)?(xmlobj.childNodes[0].nodeValue):('');
        retval = parseFloat(nv);
    } else if(type.search(/\:?date\-?[tT]ime$/) > -1){
        var nv = (xmlobj.childNodes.length > 0)?(xmlobj.childNodes[0].nodeValue):('');
        if(nv.search(/^[0-9]{4}-[0-9]{2}-[0-9]{2}((([\sT]?[0-9]{2})?\:[0-9]{2})?\:[0-9]{2})?/) > -1){
            retval = nv.split(/[\-\sT\:]+/);
            while(retval.length < 6){
                retval[retval.length]=0;
            }
            retval = new Date(retval[0], retval[1], retval[2], retval[3], retval[4], retval[5]);
        } else {
            retval = new Date(nv);
        }
    } else if(type.search(/\:?array$/) > -1 && xmlobj.childNodes.length == 1 && xmlobj.childNodes[0].nodeType==3){
        var nv = (xmlobj.childNodes.length > 0)?(xmlobj.childNodes[0].nodeValue):('');
        retval = nv.split(/\s+/);
    } else if(type.search(/\:?array$/) > -1){
        retval = [];
        for(var i=0;i<xmlobj.childNodes.length;i++){
            if(xmlobj.childNodes[i].nodeType == 1 || (xmlobj.childNodes[i].nodeType == 3 && xmlobj.childNodes[i].nodeValue.search(/[^\s]/) > -1)){
                retval[retval.length] = xdb_xml2js(xmlobj.childNodes[i]);
            }
        }
    } else {//struct
        retval = {};
        for(var i=0;i<xmlobj.childNodes.length;i++){
            if(xmlobj.childNodes[i].nodeType == 1 || (xmlobj.childNodes[i].nodeType == 3 && xmlobj.childNodes[i].nodeValue.search(/[^\s]/) > -1)){
                var nodeName = xmlobj.childNodes[i].nodeName.replace(/^[^\:]+\:/, '');
                /*if(nodeName == 'Body' && type.search(/\:?struct$/) <= -1){// soap body -> array
                    retval[nodeName] = xdb_xml2js(xmlobj.childNodes[i], 'array');
                } else {*/
                    retval[nodeName] = xdb_xml2js(xmlobj.childNodes[i]);
                //}
            }
        }
    }
    //alert('<' + xmlobj.nodeName + '>: ' + typeof(retval) + ' --> ' + retval.toSource());
    return retval;
}

function xdb_redirect(str)
{
    window.location.href=str;
}

function xdb_message(str)
{
    str += (xdb_getcookie('xdbmessage') != null)?(xdb_getcookie('xdbmessage')):('');
    if (xdb_setcookie('xdbmessage', str, null, '/')) {
        return true;
    }
    return false;
}

function xdb_setcookie(name, value) {
 var argv = xdb_setcookie.arguments;
 var argc = xdb_setcookie.arguments.length;
 var expires = (argc > 2) ? argv[2] : null;
 var path = (argc > 3) ? argv[3] : null;
 var domain = (argc > 4) ? argv[4] : null;
 var secure = (argc > 5) ? argv[5] : false;
 document.cookie = name + "=" + escape (value) +
 ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
 ((path == null) ? "" : ("; path=" + path)) +
 ((domain == null) ? "" : ("; domain=" + domain)) +
 ((secure == true) ? "; secure" : "");
 return true;
}

function xdb_getcookie_val(offset) {
 var endstr = document.cookie.indexOf (";", offset);
 if (endstr == -1) { endstr = document.cookie.length; }
 return unescape(document.cookie.substring(offset, endstr));
}

function xdb_getcookie(name) {
 var arg = name + "=";
 var alen = arg.length;
 var clen = document.cookie.length;
 var i = 0;
 while (i < clen) {
  var j = i + alen;
  if (document.cookie.substring(i, j) == arg) return xdb_getcookie_val(j);
  i = document.cookie.indexOf(" ", i) + 1;
  if (i == 0) break;
 }
 return null;
}

/**
 * Dialog of confirmation
 *
 * @param   string	msg	message
 * @see     xPageX
 * @see     xClientWidth
 * @see      xGetElementById
 * @see     xChangeVisibility
 * @see     xMoveTo
 */
function xdb_confirm(msg)
{
 var argv = xdb_confirm.arguments;
 var argc = xdb_confirm.arguments.length;
 var obj = (argc > 1) ? argv[1] : null;
 var trueaction = (argc > 2)?(argv[2]):("window.location.href='" + obj.href + "';");
 var falseaction = (argc > 3)?(argv[3]):("window.location.href='" + obj.href + "';");
 var obj = (argc > 1) ? argv[1] : null;

    var box = xGetElementById('xdbmsgbox');
    if (!box) {
     var box = document.createElement('div');
     box.id = 'xdbmsgbox';
        box.style.position = 'absolute';
        document.body.appendChild(box);
    }
    str = msg.replace("\n", "<br />");
    str += '<form name="xdbconfirm" action="#" onsubmit="return false;"><input type="button" value="Sim" onclick="'+trueaction+'" />&#160;<input type="button" value="Não" onclick="'+falseaction+'" /></form>';
    box.innerHTML = str;
    xChangeVisibility('xdbmsgbox', 'block');
    setTimeout("document.onclick=function(){xChangeVisibility('xdbmsgbox', 'none');document.onclick=null;};", 100);
    if(obj){
        var xpos = xPageX(obj);
        if ((xClientWidth()- xWidth(box)) < xpos){
            xpos = xClientWidth() - xWidth(box);
        }
        xMoveTo(box, xpos, xPageY(obj));
    }
}
function xDrag(e){
  if(!(e=xGetElementById(e))) return;
  if(xDrag.arguments.length > 1){
  f=xDrag.arguments[1];
  if(!(f=xGetElementById(f))) return;
  Drag.init(e, f);
  } else {
  Drag.init(e);
  }
}
var Drag = {

 obj : null,

 init : function(o, oRoot, minX, maxX, minY, maxY, bSwapHorzRef, bSwapVertRef, fXMapper, fYMapper)
 {
  o.onmousedown = Drag.start;

  o.hmode   = bSwapHorzRef ? false : true ;
  o.vmode   = bSwapVertRef ? false : true ;

  o.root = oRoot && oRoot != null ? oRoot : o ;

  if (o.hmode  && isNaN(parseInt(o.root.style.left  ))) o.root.style.left   = "0px";
  if (o.vmode  && isNaN(parseInt(o.root.style.top   ))) o.root.style.top    = "0px";
  if (!o.hmode && isNaN(parseInt(o.root.style.right ))) o.root.style.right  = "0px";
  if (!o.vmode && isNaN(parseInt(o.root.style.bottom))) o.root.style.bottom = "0px";

  o.minX = typeof minX != 'undefined' ? minX : null;
  o.minY = typeof minY != 'undefined' ? minY : null;
  o.maxX = typeof maxX != 'undefined' ? maxX : null;
  o.maxY = typeof maxY != 'undefined' ? maxY : null;

  o.xMapper = fXMapper ? fXMapper : null;
  o.yMapper = fYMapper ? fYMapper : null;

  o.root.onDragStart = new Function();
  o.root.onDragEnd = new Function();
  o.root.onDrag  = new Function();
 },

 start : function(e)
 {
  var o = Drag.obj = this;
  e = Drag.fixE(e);
  var y = parseInt(o.vmode ? o.root.style.top  : o.root.style.bottom);
  var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
  o.root.onDragStart(x, y);

  o.lastMouseX = e.clientX;
  o.lastMouseY = e.clientY;

  if (o.hmode) {
   if (o.minX != null) o.minMouseX = e.clientX - x + o.minX;
   if (o.maxX != null) o.maxMouseX = o.minMouseX + o.maxX - o.minX;
  } else {
   if (o.minX != null) o.maxMouseX = -o.minX + e.clientX + x;
   if (o.maxX != null) o.minMouseX = -o.maxX + e.clientX + x;
  }

  if (o.vmode) {
   if (o.minY != null) o.minMouseY = e.clientY - y + o.minY;
   if (o.maxY != null) o.maxMouseY = o.minMouseY + o.maxY - o.minY;
  } else {
   if (o.minY != null) o.maxMouseY = -o.minY + e.clientY + y;
   if (o.maxY != null) o.minMouseY = -o.maxY + e.clientY + y;
  }

  document.onmousemove = Drag.drag;
  document.onmouseup  = Drag.end;

  return false;
 },

 drag : function(e)
 {
  e = Drag.fixE(e);
  var o = Drag.obj;

  var ey = e.clientY;
  var ex = e.clientX;
  var y = parseInt(o.vmode ? o.root.style.top  : o.root.style.bottom);
  var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
  var nx, ny;

  if (o.minX != null) ex = o.hmode ? Math.max(ex, o.minMouseX) : Math.min(ex, o.maxMouseX);
  if (o.maxX != null) ex = o.hmode ? Math.min(ex, o.maxMouseX) : Math.max(ex, o.minMouseX);
  if (o.minY != null) ey = o.vmode ? Math.max(ey, o.minMouseY) : Math.min(ey, o.maxMouseY);
  if (o.maxY != null) ey = o.vmode ? Math.min(ey, o.maxMouseY) : Math.max(ey, o.minMouseY);

  nx = x + ((ex - o.lastMouseX) * (o.hmode ? 1 : -1));
  ny = y + ((ey - o.lastMouseY) * (o.vmode ? 1 : -1));

  if (o.xMapper)  nx = o.xMapper(y)
  else if (o.yMapper) ny = o.yMapper(x)

  Drag.obj.root.style[o.hmode ? "left" : "right"] = nx + "px";
  Drag.obj.root.style[o.vmode ? "top" : "bottom"] = ny + "px";
  Drag.obj.lastMouseX = ex;
  Drag.obj.lastMouseY = ey;

  Drag.obj.root.onDrag(nx, ny);
  return false;
 },

 end : function()
 {
  document.onmousemove = null;
  document.onmouseup   = null;
  Drag.obj.root.onDragEnd( parseInt(Drag.obj.root.style[Drag.obj.hmode ? "left" : "right"]),
         parseInt(Drag.obj.root.style[Drag.obj.vmode ? "top" : "bottom"]));
  Drag.obj = null;
 },

 fixE : function(e)
 {
  if (typeof e == 'undefined') e = window.event;
  if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;
  if (typeof e.layerY == 'undefined') e.layerY = e.offsetY;
  return e;
 }
};

function xDragStart(event,e)
{
  if (!(e=xGetElementById(e))) return false;
  xdrag.elNode = e;

  // Get cursor position with respect to the page.
  if (xIE4Up) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  } else {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }

  // Save starting positions of cursor and element.

  xdrag.cursorStartX = x;
  xdrag.cursorStartY = y;
  xdrag.elStartLeft  = parseInt(xdrag.elNode.style.left, 10);
  xdrag.elStartTop   = parseInt(xdrag.elNode.style.top,  10);

  if (isNaN(xdrag.elStartLeft)) xdrag.elStartLeft = 0;
  if (isNaN(xdrag.elStartTop))  xdrag.elStartTop  = 0;

  // Update element's z-index.

  xdrag.elNode.style.zIndex = ++xdrag.zIndex;

  // Capture mousemove and mouseup events on the page.
  xAddEventListener(document,'mousemove',xDragGo,false);
  xAddEventListener(document,'mouseup',xDragStop,false);
  return false;
}

function xDragGo(event) {

  var x, y;

  // Get cursor position with respect to the page.

  if (xIE4Up) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  } else {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }

  // Move drag element by the same amount the cursor has moved.

  xdrag.elNode.style.left = (xdrag.elStartLeft + x - xdrag.cursorStartX) + "px";
  xdrag.elNode.style.top  = (xdrag.elStartTop  + y - xdrag.cursorStartY) + "px";

  if (xIE4Up) {
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  } else {
    event.preventDefault();
  }
}

function xDragStop(event) {

  // Stop capturing mousemove and mouseup events.
  xRemoveEventListener(document,'mousemove',xDragGo,false);
  xRemoveEventListener(document,'mouseup',xDragStop,false);
}
function xdb_load(uri)
{
    if(xdb_load.arguments.length <= 1){
        return false;
    }
    action = xdb_load.arguments[1];
    var param = '';
    if(xdb_load.arguments.length > 2){
        var x = xdb_load.arguments[2];
        if (editor != null) {
            for (i=0; i < editor.length; i++) {
                editor[i]._textArea.value = editor[i].getHTML();
            }
        }
        xdbformvalue = '';
        //xdbquiet = true;
        for ( i = 0; i < x.elements.length; i++ ) {
            var y = x.elements[i];
            if(!xDef(y, 'name') || y.name == ''){
                continue;
            }
            if (!xdb_checkrequired(y)) {
                xdbhttp_sent = false;
                return true;
                break;
            }
        }
        if(x.method.search(/^get$/i) > -1){
            uri = uri.replace(/\?.*/, '', uri);
            uri = uri+'?'+xdbformvalue;
        } else {
            param = {name:'post',value:xdbformvalue};
        }
    }
    if(xdb_load.arguments.length > 3){
        e = xdb_load.arguments[3];
    } else if (!(e=xGetElementById('xdb'+action))){
        e = function(){};
    }
    if(xdb_soap_request(uri, action, e, param)){
        return true;
    } else {
        return false;
    }
    return false;
}

function xtrace(obj){var text = '';var pat=(xtrace.arguments.length > 1)?(xtrace.arguments[1]):('');for (var i in obj){if(pat!='' && i.search(pat) < 0){continue;};text += (text != '')?(', '):('');text += i+'('+typeof(obj[i])+')';text += (typeof(obj[i]) == 'boolean' || typeof(obj[i]) == 'string' || typeof(obj[i]) == 'number')?('['+obj[i]+']'):('');}; alert(text);}

/* 14/03/2007 */
function xdb_counter(el,eltam) {

 var numCaracteres = eltam - el.value.length;
 var id_lentxt = el.name+'len';

 if(numCaracteres<0){
    el.value = el.value.substring(0,el.value.length + numCaracteres);
    numCaracteres=0;
    //alert('A mensagem ultrapassou o limite de ' + eltam + ' caracteres!');
    alert(xdblabels.max_chars1 + eltam + xdblabels.max_chars2);
    return false;
  }
  document.getElementById(id_lentxt).innerHTML = numCaracteres;
  return true;
}

function xisArray(obj) {
   if (obj.constructor.toString().indexOf("Array") == -1){
      return false;
   } else {
      return true;
   }
}
