function DFfield(fld, defOblig) {
    var T = this;
    T.obj = fld;
    T.t = fld.type;
    T.n = fld.name;
    T.tit = fld.getAttribute('title');
    T.xt = fld.getAttribute('xtype');
    T.minL = fld.getAttribute('minlength');
    T.maxL = fld.getAttribute('maxlength');
    T.equal = fld.getAttribute('equal');
    T.dIni = fld.getAttribute('DFdateIni');
    T.dFin = fld.getAttribute('DFdateFin');
    T.ob = (defOblig == true);
    if (T.t == 'submit' || T.t == 'button' || T.t == 'image' || T.t == 'reset') {
        T.ob = false;
    }
    else {
        var tAt = fld.getAttribute('obligatory');
        if (tAt == 'true') {
            T.ob = true;
        }
        else if (tAt == 'false') {
            T.ob = false;
        }
    }
    if (T.t == 'file') {
        T.ext = fld.getAttribute('extension');
    }
    T.ckFrmAlert = DFckFrmAlert;
    T.ckEqual = DFckEqual;
    T.ckMinLen = DFckMinLen;
    T.ckMaxLen = DFckMaxLen;
    T.ckFile = DFckFile;
    T.getDateValues = DFgetDateValues;
    T.ckNumber = DFckNumber;
	T.ckNumber2 = DFckNumber2;
    T.ckFullname = DFckFullname;
    T.ckEmail = DFckEmail;
    T.ckDateDay = DFckDateDay;
    T.ckDateMonth = DFckDateMonth;
    T.ckDateYear = DFckDateYear;
    T.ckDate = DFckDate;
    T.ckCpf = DFckCpf;
    T.ckImei = DFckImei;
    T.ckCnpj = DFckCnpj;
    T.getValues = DFgetValues;
    T.v = [];
    T.v = T.getValues()[0];
    T.len = T.getValues()[1][0];
    T.lenSel = T.getValues()[1][1];
}
function DFgetValues() {
    var T = this;
    var Tobj = T.obj;
    var Tf = Tobj.form;
    var vals = [];
    vals[0] = [];
    vals[1] = [];
    vals[1][0] = 1;
    vals[1][1] = 0;
    if (T.xt == 'date') {
        vals[0] = T.getDateValues();
    }
    else {
        if (T.t == 'text' || T.t == 'file' || T.t == 'textarea' || T.t == 'password') {
            if (Tobj.value != '') {
                vals[0][0] = Tobj.value;
                vals[1][1] = Tobj.value.length;
            }
        }
        else if (T.t == 'select-one') {
            vals[1][0] = Tobj.length;
            if (Tobj[Tobj.selectedIndex].value != '') {
                vals[0][0] = Tobj[Tobj.selectedIndex].value;
                vals[1][1] = 1;
            }
        }
        else if (T.t == 'select-multiple') {
            vals[1][0] = Tobj.length;
            for (var sm = 0; sm < vals[1][0]; sm++) {
                if (Tobj[sm].selected) {
                    vals[0][T.v.length] = Tobj[sm].value;
                    vals[1][1]++;
                }
            }
        }
        else if (T.t == 'checkbox') {
            if (Tf[T.n].length != null) {
                vals[1][0] = Tf[T.n].length;
                for (var j = 0; j < vals[1][0]; j++) {
                    if (Tf[T.n][j].checked) {
                        vals[0][T.v.length] = Tf[T.n][j].value;
                        vals[1][1]++;
                    }
                }
            }
            else {
                if (Tobj.checked)vals[0][0] = Tobj.value;
                vals[1][1] = 1;
            }
        }
        else if (T.t == 'radio') {
            if (Tf[T.n].length != null) {
                vals[1][0] = Tf[T.n].length;
                for (var j = 0; j < vals[1][0]; j++) {
                    if (Tf[T.n][j].checked)vals[0][0] = Tf[T.n][j].value;
                    vals[1][1]++;
                }
            }
            else {
                if (Tf[T.n].checked)vals[0][0] = Tf[T.n].value;
                vals[1][1] = 1;
            }
        }
    }
    return vals;
}
function DFgetDateValues() {
    var T = this;
    var Tobj = T.obj;
    var Tf = Tobj.form;
    var fName = T.n.substr(0, T.n.lastIndexOf('_') + 1);
    var d = (T.t == 'text') ? eval('Tf.' + fName + 'dia').value : DFgetValSel(eval('Tf.' + fName + 'dia'));
    var m = (T.t == 'text') ? eval('Tf.' + fName + 'mes').value : DFgetValSel(eval('Tf.' + fName + 'mes'));
    var a = (T.t == 'text') ? eval('Tf.' + fName + 'ano').value : DFgetValSel(eval('Tf.' + fName + 'ano'));
    return Array(d, m, a);
}
function DFgetDateObject(d, m, a) {
    if (d == '' || m == '' || a == '')return null;
    m--;
    if (!DFckDateDay(d))return false;
    else if (!DFckDateMonth(m))return false;
    else if (!DFckDateYear(a))return false;
    else if ((m == 3 || m == 5 || m == 8 || m == 10) && (d == 31))return false;
    else if (m == 1 && (d > 29 || (d == 29 && ((a % 4) != 0))))return false;
    return new Date(a, m, d);
}
function DFgetValSel(c, ind) {
    var i = c.selectedIndex;
    return (ind) ? i : c[i].value;
}

function DFckForm(f, defOblig) {
    DFclrClass(f);
    for (var i = 0; i < f.length; i++) {
        if (f[i].type == null)i++;
        var T = new DFfield(f[i], defOblig);
        if (T.xt == 'date') {
            var ret = T.ckDate();
            if (T.ob &&!ret) {
                if (!ret)return T.ckFrmAlert(((ret == null) ? 1 : null));
            }
            else {
                if (T.v[0] != '' || T.v[1] != '' || T.v[2] != '') {
                    if (!ret)return T.ckFrmAlert();
                }
            }
            i = i + 2;
        }
        else {
            if ((T.t == 'radio') || (T.t == 'checkbox')) {
                i = i + (T.len - 1);
            }
            if (T.v.length == 0) {
                if (T.t != 'hidden' && (T.ob)) {
                    if (T.t == 'select-one' || T.t == 'select-multiple' || T.t == 'checkbox' || T.t == 'radio') {
                        return T.ckFrmAlert(0);
                    }
                    else if (T.t == 'text' || T.t == 'textarea' || T.t == 'password') {
                        return T.ckFrmAlert(1);
                    }
                }
            }
            else {
                if (T.t == 'text' || T.t == 'textarea' || T.t == 'password' || T.t == 'select-multiple' || T.t == 'checkbox') {
                    if (T.minL) {
                        if (!T.ckMinLen((T.t == 'select-multiple' || T.t == 'checkbox') ? 1 : 0))return false;
                    }
                    if (T.maxL && (T.t != 'text' || T.t != 'password')) {
                        if (!T.ckMaxLen())return false;
                    }
                    if (T.xt) {
                        S = 'T.ck' + T.xt.charAt(0).toUpperCase() + T.xt.substring(1).toLowerCase() + '()';
                        if (!eval(S)) {
                            return T.ckFrmAlert();
                        }
                    }
                    if (T.equal) {
                        if (!T.ckEqual(f[T.equal]))return false;
                    }
                }
                else if (T.t == 'file' && T.v.length != 0 && T.ext) {
                    if (!T.ckFile(T.ext))return T.ckFrmAlert(8);
                }
            }
        }
    }
   return true;
}
function DFckFrmAlert(m) {
    var T = this;
    var scrTop = DFscrollTopPosition();
    if (T.t != 'hidden') {
        var Tf = T.obj.form;
        if ((T.t == 'radio' || T.t == 'checkbox') && T.len > 1) {
            for (var i = 0; i < T.len; i++) {
                Tf[T.n][i].className = 'DF-alert';
            }
        }
        else if (T.xt == 'date') {
            var fName = T.n.substr(0, T.n.lastIndexOf('_') + 1);
            eval('Tf.' + fName + 'dia').className = 'DF-alert';
            eval('Tf.' + fName + 'mes').className = 'DF-alert';
            eval('Tf.' + fName + 'ano').className = 'DF-alert';
        }
        else T.obj.className = 'DF-alert';
        if (T.equal)Tf[T.equal].className = 'DF-alert';
        T.obj.focus();
    }
    if (scrTop != DFscrollTopPosition())scrollBy(null, scrTop > DFscrollTopPosition() ?- 20 : 80);
    if (null != m) {
        if (m == 7) {
            var maxL = T.maxL;
        }
        else if (m == 5) {
            var minL = T.minL;
        }
        else if (m == 8) {
            var ext = T.ext;
        }
        S = eval(DFMsg[m]);
    }
    else {
		if (T.xt == 'number2') {
			if (T.xt)S = eval(DFMsg[9]);
		
		}
		else{
			if (T.xt)S = eval(DFMsg[2]);	
		}
        
    }
    alert(S);
    return false;
}
function DFalert(a, cArr) {
    var c1 = ((cArr[0].length > 0) ? cArr[0][0] : cArr[0]);
    DFclrClass(c1.form);
    for (var i = 0; i < cArr.length; i++) {
        var T = cArr[i];
        if (T.length > 0) {
            if (T[0].type == 'radio' || T[0].type == 'checkbox') {
                for (var j = 0; j < T.length; j++) {
                    T[0].form[T[0].name][j].className = 'DF-alert';
                }
            }
            else {
                T.className = 'DF-alert';
            }
        }
        else {
            T.className = 'DF-alert';
        }
    }
    c1.focus();
    alert(a);
    DFsbm = false;
    return false;
}
function DFclrClass(f) {
    for (var i = 0; i < f.length; i++) {
        if (!f[i].classNameOld) {
            f[i].classNameOld = f[i].className || 'DF-null';
        }
        else {
            f[i].className = f[i].classNameOld;
        }
    }
}
function DFscrollTopPosition() {
    return (is.ie) ? document.body.scrollTop : pageYOffset;
}
function DFckEqual(cF) {
    if (this.v[0] != cF.value)return this.ckFrmAlert(3);
    else return true;
}
function DFckMinLen(ar) {
    var T = this;
    if (T.minL && (T.lenSel < T.minL)) {
        return T.ckFrmAlert((ar) ? 5 : 4);
    }
    return true;
}
function DFckMaxLen() {
    var T = this;
    if (T.maxL && (T.lenSel > T.maxL)) {
        if (T.t == 'textarea') {
            if (typeof (T.obj.form.DFcounter) != 'undefined' && typeof (T.obj.form.DFcounter) != 'unknown') {
                DFtextareaCounter(T.obj);
            }
        }
        return T.ckFrmAlert((T.t != 'textarea') ? 7 : 6);
    }
    return true;
}
function DFckFile(ext) {
    var e = ext.split(",");
    var v = this.v[0].toLowerCase();
    for (var i = 0; i < e.length; i++) {
        if (v.substr(v.lastIndexOf('.') + 1) == e[i])return true;
    }
    return false;
}
function DFckNumber() {
    return (this.v[0].match(/^[0-9]+$/));
}

function DFckNumber2() {
	return this.v[0].indexOf('+')==0
}

function DFckFullname() {
    return (this.v[0].match(/[^ ]+.+/));
}
function DFckEmail() {
    var Tv = this.v[0].toLowerCase();
    return (Tv.match(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]{2,64}(\.[a-z0-9-]{2,64})*\.[a-z]{2,4}$/));
}
function DFckDateDay(v) {
    if (v > 0 && v < 32)return true;
}
function DFckDateMonth(v) {
    if (v >= 0 && v < 12)return true;
}
function DFckDateYear(v) {
    if (v > 0 && v.length == 4)return true;
}
function DFckDate() {
    var T = this;
    var Tdate = DFgetDateObject(T.v[0], T.v[1], T.v[2]);
    if (!Tdate)return Tdate;
    if (T.dIni || T.dFin) {
        var dI = T.dIni.split('/');
        var dF = T.dFin.split('/');
        var dI = (T.dIni) ? DFgetDateObject(dI[0], dI[1], dI[2]) : new Date(1900, 00, 01);
        var dF = (T.dFin) ? DFgetDateObject(dF[0], dF[1], dF[2]) : new Date();
        if (Tdate < dI || Tdate > dF)return false;
    }
    return true;
}
function DFckCpf() {
    var s = null;
    var r = null;
    var v = this.v[0];
    if (v.length != 11 || v.match(/1{11}|2{11}|3{11}|4{11}|5{11}|6{11}|7{11}|8{11}|9{11}|0{11}/))return false;
    s = 0;
    for (var i = 0; i < 9; i++)s += parseInt(v.charAt(i)) * (10 - i); r = 11 - (s % 11); if (r == 10 || r == 11)r = 0; if (r != parseInt(v.charAt(9)))return false; s = 0; for (var i = 0; i < 10; i++)s += parseInt(v.charAt(i)) * (11 - i); r = 11 - (s % 11); if (r == 10 || r == 11)r = 0; if (r != parseInt(v.charAt(10)))return false; return true; ; }
function DFckImei() {
    var sum = 0;
    var aux = 0;
    var ret = false;
    v = this.v[0];
    if (v.length == 15) {
        for (i = 14; i > 0; i--) {
            aux = v.substring((i - 1), i);
            aux = (i % 2 == 0) ? aux * 2 : aux;
            aux = aux.toString();
            sum += aux.length == 1 ? parseInt(aux) : parseInt(aux.substring(0, 1)) + parseInt(aux.substring(1, 2));
        }
        aux = (sum % 10 == 0) ? 0 : 10 - (sum % 10);
        ret = (aux == v.substring(14));
    }
    if (!ret)return false;
    return true;
}
function DFckCnpj() {
    var v = this.v[0];
    var m = ['543298765432', '6543298765432'];
    var d = [0, 0];
    for (var t = 0; t < 2; t++) {
        for (x = 0; x < 13; x++) {
            if ((t == 0 && x != 12) || t == 1)d[t] += (parseInt(v.slice(x, x + 1)) * parseInt(m[t].slice(x, x + 1)));
        }
        d[t] = (d[t] * 10) % 11;
        if (d[t] == 10)d[t] = 0;
    }
    return (d[0] == parseInt(v.slice(12, 13)) && d[1] == parseInt(v.slice(13, 14)));
}
function DFtextareaMaxLen(f, l, e) {
    if (is.ns) {
        if (e.which == 0 || e.which == 8)return true;
    }
    if (f.value.length >= l)return false;
}
function DFtextareaCounter(f) {
    f.form.DFcounter.value = f.value.length;
}
function DFonlyThisChars(n, l, o, e) {
    if (window.event)key = window.event.keyCode;
    else if (e)key = e.which;
    else return true;
    S = (o) ? o : '';
    if (n)S += '0123456789';
    if (l)S += 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    if (key == null || key == 0 || key == 8 || key == 9 || key == 13 || key == 27)return true;
    else if (S.indexOf(String.fromCharCode(key)) !=- 1)return true;
    else return false;
}
function DFnotOnlyThisChars(S, e) {
    if (window.event)key = window.event.keyCode;
    else if (e)key = e.which;
    else return true;
    if (!S)return false;
    else if (key == null || key == 0 || key == 8 || key == 9 || key == 13 || key == 27)return true;
    else if (S.indexOf(String.fromCharCode(key)) !=- 1)return false;
    else return true;
}
function DFchangeField(o, e, d) {
    if (window.event)key = window.event.keyCode;
    else if (e)key = e.which;
    else return true;
    if (key == 9 || key == 2 || key == 16)return false;
    if (d <= 2 && o.value.length == o.maxLength) {
        for (var i = 0; i < o.form.length; i++) {
            if (o.form[i] == o && o.form[i + 1]) {
                o.form[i + 1].focus();
                break;
            }
        }
    }
    if (d > 1 && o.value.length == 0 && key == 8) {
        for (var i = 0; i < o.form.length; i++) {
            if (o.form[i] == o && o.form[i - 1]) {
                o.form[i - 1].focus();
                o.form[i - 1].value = o.form[i - 1].value;
                break;
            }
        }
    }
}