var cfg_form_name = '';
var cfg_class_label = '';
var cfg_class_err = '';
var id_param = '';
var submit_text = '';
var id_code = '';
var uniq = '';
var err = false;

function docId(id)
{
    return document.getElementById(''+id+'');
}

function validate_length(id)
{
    var sw = false;
    
    if(docId(''+id+'').type == 'checkbox')
    {
        if(!docId(''+id+'').checked)
            sw = true;
    }
    else
    {
        if(docId(''+id+'').type == 'radio')
        {        
            for(i=0; i < document.forms[''+cfg_form_name+''].elements[''+id+''].length; i++)
                if(document.forms[''+cfg_form_name+''].elements[''+id+''][i].checked)
                    return false;
            
            sw = true;
        }
        else
            if(!docId(''+id+'').value.replace(/^\s\s*/, '').replace(/\s\s*$/, '').length)
                sw = true;
    }
    
    if(sw && err_all && docId(''+id+'').title.length)
        err_mes += ((err_mes.length) ? '<br />' : '') + docId(''+id+'').title;
    return sw;
}

function validate_email(id,err_str)
{
    _email = /^[A-Z0-9._%\-\']+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i;
    if(!(_email.exec(docId(''+id+'').value)) || docId(''+id+'').value.toLowerCase().substr(0,4) == 'www.')
    {
        err_mes += ((err_mes.length) ? '<br />' : '') + ((err_str) ? err_str : cfgErrEmail);
        return true;
    }
    
    return false;
}

function validate_identical(id1,id2,err_str)
{
    if(validate_length(id1))
        return true;
    
    if(docId(''+id1+'').value != docId(''+id2+'').value)
    {
        validate_err(id2,true);
        err_mes += ((err_mes.length) ? '<br />' : '') + err_str;
        return true;
    }
    
    validate_err(id2,false);
    return false;
}

function limit_event(ev, doc, limit)
{
    if(docId(''+doc.id+'').value.length < limit)
        return true;
    else
    {
        if(ev.charCode != 0 || ev.keyCode == 13)
            return false;
        else
            return true;
    }
}

function limit_text(doc, limit, counter)
{
    if(docId(''+doc.id+'').value.length>limit)
        docId(''+doc.id+'').value = docId(''+doc.id+'').value.substr(0,limit);
    docId(counter).innerHTML = '(' + (limit-docId(''+doc.id+'').value.length) + ' caractere)';
}

function validate_err(id,status)
{
    if(status)
    {
        err = true;
        if(docId('label_' + id) != null)
        	docId('label_'+id+'').className = cfg_class_label + ' ' + cfg_class_err;
    }
    else
    {
    	if(docId('label_' + id) != null)
        	docId('label_'+id+'').className = cfg_class_label;
	}
}

function change_submit(id, status)
{    
    if(docId(id).value != cfgErrWait)
    {
        submit_text = docId(id).value;
        docId(id).value = cfgErrWait;
    }
    else
        if(status)
            return true;
        else
            docId(id).value = submit_text;
            
    return false;
}

function validate_form(frm, id_optional, frm_ok)
{
    id_code = uniq = err_mes = '';
    err = false;
    cfg_form_name = frm;
    
    if(frm_ok == null)
    {
        if(initForms[''+cfg_form_name+''] != null)
            var arr = initForms[''+cfg_form_name+''];
        else
            return true;
    
        id_param = '';
        if(id_optional != null)        
        {
            id_param = '_' + id_optional;
            cfg_form_name += id_param;
        }
    
        if(change_submit(cfg_form_name + '_submit', true))
            return false;
        
        err_mes = cfgErr;
        if(arr['err'].length)
            if(arr['err'] == 'false')
                err_mes = '';
            else
                err_mes = arr['err'];
        
        err_ok = cfgErrOk;
        if(arr['err_ok'].length)
            if(arr['err_ok'] == 'false')
                err_ok = '';
            else
                err_ok = arr['err_ok'];
        
        err_all = cfgErrAll;
        if(arr['err_all'].length)
            if(arr['err_all'] == 'false')
                err_all = false;
            else
                err_all = true;
        
        if(arr['class_label'].length)
            if(arr['class_label'] == 'false')
                cfg_class_label = '';
            else
                cfg_class_label = arr['class_label'];
        if(arr['class_err'].length)
            if(arr['class_err'] == 'false')
                cfg_class_err = '';
            else
                cfg_class_err = arr['class_err'];
        
        for(k=0; k < arr.length; k++)
            switch(arr[k]['method'])
            {
                case 'email':
                    validate_err(arr[k]['id'] + id_param, validate_email(arr[k]['id'] + id_param,arr[k]['err']));
                    break;
                case 'identic':
                    validate_err(arr[k]['id'] + id_param, validate_identical(arr[k]['id'] + id_param, arr[k]['id2'] + id_param, arr[k]['err']));
                    break;
                case 'code':                
                    id_code = arr[k]['err'] + '#~#' + id_param + '#~#' + docId('' + arr[k]['id'] + id_param + '').value + '#~#' + arr[k]['id'] + id_param;
                    validate_err(arr[k]['id'] + id_param, validate_length(arr[k]['id'] + id_param));
                    break;
                case 'uniq':                
                    uniq += arr[k]['err'] + '#~#' + arr[k]['id2'] + '#~#' + docId('' + arr[k]['id'] + id_param + '').value + '#~#' + arr[k]['id'] + id_param + '#~#' + ((arr[k]['id3'].length && arr[k]['id3'] != null) ? docId('' + arr[k]['id3'] + id_param + '').value : '') + '~##~';
                    break;
                default:
                    validate_err(arr[k]['id'] + id_param, validate_length(arr[k]['id'] + id_param));
            }
        
        if(err)
        {
            docId(cfg_form_name + '_err').innerHTML = err_mes;
            if(docId(cfg_form_name + '_err2') != null)
                docId(cfg_form_name + '_err2').innerHTML = err_mes;
        }
        else
        {
            docId(cfg_form_name + '_err').innerHTML = err_ok;
            if(docId(cfg_form_name + '_err2') != null)
                docId(cfg_form_name + '_err2').innerHTML = err_ok;
            
            if(id_code.length || uniq.length)
            {
                ajaxRequest(websiteURL + 'index.php?page=ajax.validate.form&id_code=' + _format(id_code) + '&uniq=' + _format(uniq) + '&cfg_class_label=' + cfg_class_label + '&cfg_class_err=' + cfg_class_err + '&text_submit=' + _format(submit_text) + '&frm=' + frm + '&id_param=' + id_param, '', cfg_form_name + '_err');
                return false;
            }
        }        
    }
    else
        cfg_form_name += id_optional;
    
    if(typeof(window['validate_' + frm]) == 'function' && !err)
    {
        err = false;
        err_mes = eval('validate_' + frm + '()');
        if(err_mes.length)
        {
            docId(cfg_form_name + '_err').innerHTML = err_mes;
            if(docId(cfg_form_name + '_err2') != null)
                docId(cfg_form_name + '_err2').innerHTML = err_mes;
            
            return false;
        }
    }
    
    if(err)
    {
        err = false;
        change_submit(cfg_form_name + '_submit', false);
        return false;
    }
    
    document.forms['' + cfg_form_name + ''].submit();
}
