/* author: Vicentiu Maxim */
/* Creation date: 04.06.2001 */
/* Update date: 15.02.2006, 18.07.2006, 17.09.2008 */
//Vicentiu Maxim, Amax SRL CUI2206377, proprietate intelectuala. 
//Proiect/document data: iulie-octombrie 2006
//Toate drepturile rezervate
///////////////////////////////////////////////////////////////////
/* numarfisiercurent=018 */

function valid_ne(){
    var r = 1;
    var s;
    for (var i = 0; i < arguments.length; i++) {
        //	if (arguments[i].value=="")
        s = arguments[i].value;
        if (s.replace(/\ /g, "") == "") 
        
            r *= 0;
        else 
            r *= 1;
    }
    if (r == 0) 
        alert("Va rugam sa completati rubricile formularului, cel putin cele marcate cu *.");
    return r
}

function valid_ne_s(){
    var r = 1;
    var s;
    for (var i = 0; i < arguments.length; i++) {
        s = arguments[i].value;
        if (s.replace(/\ /g, "") == "") 
            r *= 0;
        else 
            r *= 1;
    }
    return r
}

function egale(x, y, z){
    var r = 1;
    if (x.value != y.value) {
        r = 0;
        x.focus();
        alert(z)
    }
    return r
}

function not_eq_sel(x, y, xq, yq, z){
    var r = 1;
    if (x.selectedIndex > y.selectedIndex) {
        r = 0;
        x.focus();
        alert(z)
    }
    else {
        if ((x.selectedIndex == y.selectedIndex) && (xq.selectedIndex >= yq.selectedIndex)) {
            r = 0;
            xq.focus();
            alert(z)
        }
    }
    return r
}

function NWEditMeniu(meniu, id){
    //window.open("./fisa....php?id="+id, "Fisa", "alwaysRaised=yes, dependent=yes, directories=no, innerHeight=630, innerWidth=663, location=no, menubar=no, resizable=yes, screenX=20, screenY=20, toolbar=no");//js 1.2
    window.open("./ameniu_edit.php?" + meniu + "=" + id, "intretinere_tabele_meniu", "alwaysRaised=yes, dependent=yes, directories=no, height=250, width=550, location=no, menubar=no, resizable=yes, screenX=20, screenY=20, toolbar=no, scrollbars=yes");//js 1.0, 1.1
}

function NWAddMeniu(meniu, id){
    //window.open("./fisa....php?id="+id, "Fisa", "alwaysRaised=yes, dependent=yes, directories=no, innerHeight=630, innerWidth=663, location=no, menubar=no, resizable=yes, screenX=20, screenY=20, toolbar=no");//js 1.2
    window.open("./ameniu_edit.php?" + meniu + "=" + id + "&new=1", "intretinere_tabele_meniu", "alwaysRaised=yes, dependent=yes, directories=no, height=250, width=550, location=no, menubar=no, resizable=yes, screenX=20, screenY=20, toolbar=no, scrollbars=yes");//js 1.0, 1.1
}

function DeschideFisaProd(){
    var pid;
    pid = arguments[0];
    window.open("./fisa_prod.php?id=" + pid, "fisa_produsului", "alwaysRaised=yes, dependent=yes, directories=no, height=650, width=780, location=no, menubar=no, resizable=yes, screenX=20, screenY=10, toolbar=yes, scrollbars=yes");//js 1.0, 1.1
}

function DeschideAsocieri(pid){

    window.open("./arude_edit.php?pid=" + pid, "wnd_asocieri", "alwaysRaised=yes, dependent=yes, directories=no, height=650, width=800, location=no, menubar=no, resizable=yes, screenX=20, screenY=10, toolbar=no");//js 1.0, 1.1
    return true;
}
function isprintcv(uid){

    var w = window.open("./isprintcv.php?uid="+uid, "wnd_myCV", "alwaysRaised=yes, dependent=yes, directories=no, height=550, width=800, location=no, menubar=no, resizable=yes, screenX=20, screenY=10, toolbar=no, scrollbars=yes");//js 1.0, 1.1
    w.focus();
	return true;
}

function isbookmark(url, title){
    //  alert(navigator.appName);
    //alert(url);
    if (window.external) {
        window.external.AddFavorite(url, title);
    }
    else {
        alert("Pentru a memora acest site va rugam tastati,\r\nCTRL-D (Netscape) sau CTRL-T (Opera)\r\nVa multumim!");
    }
    
    //     if ((navigator.appName == "Microsoft Internet Explorer") && (parseInt(navigator.appVersion) >= 4))
    //    {
    //     window.external.AddFavorite(url,title);
    //     }
    //     else
    //     if (navigator.appName == "Netscape")
    //     {
    //     window.sidebar.addPanel(title,url,"");
    //     }
    //     else
    //     {
    //     alert("Press CTRL-D (Netscape) or CTRL-T (Opera) to bookmark");
    //     }


}

function ListaPersNwslttr(){

    window.open("./alistapersnwslttr.php", "wnd_persnwslttr", "alwaysRaised=yes, dependent=yes, directories=no, height=650, width=800, location=no, menubar=no, resizable=yes, screenX=20, screenY=10, toolbar=no");//js 1.0, 1.1
    return true;
}

function SetDataNasterii(dest, dest_an, dest_luna, dest_zi, val){
    //seteaza data nasterii din cnp  
    var s = String(parseInt(val, 10));
    if ((s == val) && (s.length == 13)) //numai pt cnp-uri aparent cel putin corecte, eventual conditie >6 a.i inseamna ca am dat cel putin data nasterii si sexul in CNP
    {
        var t = document.getElementById(dest);//saallzz
        var t_an = document.getElementById(dest_an);
        var t_luna = document.getElementById(dest_luna);
        var t_zi = document.getElementById(dest_zi);
        var secol = '19';
        if (val[0] > 0 && val[0] < 3) 
            secol = '19';//1/2 b/f 1900-1999
        else 
            if (val[0] > 2 && val[0] < 5) 
                secol = '18';//3/4 b/f 1800-1899
            else 
                if (val[0] > 4 && val[0] < 7) 
                    secol = '20';//5/6 b/f 2000-2099
                else 
                    if (val[0] > 6 && val[0] < 9) 
                        secol = '19';//7/8 b/f ??? straini ??? ce ani? cica si 9 e rezervat straini
        x = parseInt(val[1] + val[2], 10);
        if (x >= 0 && x <= 99) {
            t_an.value = secol + val[1] + val[2];
            
            x = parseInt(val[5] + val[6], 10);
            if (x > 0 && x < 32) {
                t_zi.value = val[5] + val[6];
                var luna = parseInt(val[3] + val[4], 10) - 1;
                //	t_luna.options[luna].selected = true;
                if (luna >= 0 && luna < 12) {
                    t_luna.selectedIndex = luna;
                    //t_luna.options[luna].selected = true;
                    //setez per general numai daca am trecut prin toate, altfel e de verificat particular
                    t.value = val[5] + val[6] + '/' + val[3] + val[4] + '/' + secol + val[1] + val[2];
                }
            }
        }
    }
}

function SetZiua(dest, val){
    var t = document.getElementById(dest);//
    var vt = t.value;
    var re = /([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{1,4})/;
    var ival = parseInt(val, 10);
    
    if (ival > 0 && ival < 32) {
        vt = vt.replace(re, val + "/$2/$3");
    }
    //	alert(vt+'--'+val);
    t.value = vt;
    
}

//seteaza anul cu validare intre limita inferioara si limita superioara relativ la anul curent
function SetAnul(dest, val, li, ls){
    var t = document.getElementById(dest);//
    var vt = t.value;
    var re = /([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{1,4})/;
    var ival = parseInt(val, 10);
    var azi = new Date();
    var ancurent = azi.getFullYear();
    if (ival >= (ancurent - li) && ival <= (ancurent - ls))//i.e. individul are intre 12 si 70 de ani
    {
        vt = vt.replace(re, "$1/$2/" + val);
    }
    //	alert(vt+'--'+val);
    t.value = vt;
}

function SetLuna(dest, val){
    var t = document.getElementById(dest);//
    var vt = t.value;
    var re = /([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{1,4})/;
    var ival = parseInt(val, 10);
    if (ival >= 0 && ival < 12)//i.e. de fapt always fiind selectie, dar nu se stie; poate se schimba
    {
        vt = vt.replace(re, "$1/" + (ival + 1) + "/$3");
    }
    //	alert(vt+'--'+val);
    t.value = vt;
}
//////////////////////////////////////////////////////////////////////////////
var dest;
var request;
//functia ajax in care se intoarce raspunsul response
function sqlExecResponse(){
    if (request.readyState == 4) {
        if (request.status == 200) {
            response = request.responseText;
            //            alert(response);//it works - pe opera mai ales ajunge si aici
        }
        else {
            response = '';//error/ eventual seteaza ceva pe altceva - 1
        }
    }
    //	else alert(request.readyState);/// eventual seteaza ceva/careva element pe altceva - 2
}

//functia ajax de invocare a unei executii la distanta
function sqlExec(qry, val){
    var url = 'isremotesql.php';
    var post_data = '';
    var contentType = "application/x-www-form-urlencoded; charset=UTF-8";
    
    //datele care vor fi transmise. in acest caz post; daca se schimba modul, get;
    post_data = 'qry=' + encodeURIComponent(qry);//primul parametru
    for (var i = 1, ln_arg = arguments.length; i < ln_arg; i++) 
        post_data += '&val' + i + '=' + encodeURIComponent(arguments[i]);//restul parametrilor, un fel de indexare
    //ajax	cu post de data asta
    if (window.XMLHttpRequest) {
        request = new XMLHttpRequest();
        request.onreadystatechange = sqlExecResponse;
        request.open("POST", url, false);//parametrul 3 asyncron sau sincron: adica sa stea dupa el rezultatul sau ba
        request.setRequestHeader("Content-Type", contentType);
        request.send(post_data);
        //               alert(request.responseText);
        return request.responseText;
        //return true;
    }
    else 
        if (window.ActiveXObject) {
            request = new ActiveXObject("Microsoft.XMLHTTP");
            if (request) {
                request.onreadystatechange = sqlExecResponse;
                request.open("POST", url, false);
                request.setRequestHeader("Content-Type", contentType);
                request.send(post_data);
                return request.responseText;
            //return true;
            }
        }
    return false;
}

///////////////////////////////////////////////////////////////////
//functia ajax in care se intoarce raspunsul response la setnrrpp
function setRpPResponse(){
    if (request.readyState == 4) {
        if (request.status == 200) {
            response = request.responseText;
            //            alert(response);//it works - pe opera mai ales ajunge si aici
        }
        else {
            response = '';//error/ eventual seteaza ceva pe altceva - 1
        }
    }
    //	else alert(request.readyState);/// eventual seteaza ceva/careva element pe altceva - 2
}

//seteaza nr de rezultate per pagina
function isSetNrRpP(rpp)
{
    var url = 'issetnrrpp.php?rpp='+rpp;//seteaza numarul de rezultate per pagina
    var get_data = '';
    var contentType = "application/x-www-form-urlencoded; charset=UTF-8";
    
    //datele care vor fi transmise. in acest caz get;
    //get_data = 'rpp=' + rpp;//primul parametru si singurul

    //ajax	cu get
    if (window.XMLHttpRequest) {
        request = new XMLHttpRequest();
        request.onreadystatechange = setRpPResponse;
        request.open("GET", url, false);//parametrul 3 asyncron sau sincron: adica sa stea dupa el rezultatul sau ba
        request.setRequestHeader("Content-Type", contentType);
        request.send(get_data);
        //               alert(request.responseText);
        return request.responseText;
        //return true;
    }
    else 
        if (window.ActiveXObject) {
            request = new ActiveXObject("Microsoft.XMLHTTP");
            if (request) {
                request.onreadystatechange = setRpPResponse;
                request.open("GET", url, false);
                request.setRequestHeader("Content-Type", contentType);
                request.send(get_data);
                return request.responseText;
            //return true;
            }
        }
    return false;
	
}
///////////////////////////////////////////////////////////////////
//set de mesaje
var Xmsg = new Array();
Xmsg['RO'] = " valoare eronata sau neprecizata; va rugam corectati.";
Xmsg['EN'] = " inappropriate or empty value; please correct.";
var Nmsg = new Array();
Nmsg['RO'] = " precizati numai cifre; va rugam corectati.";
Nmsg['EN'] = " number expected; please correct.";
var NZSmsg = new Array();
NZSmsg['RO'] = " selectati o optiune.";
NZSmsg['EN'] = " choose an option.";
var Amsg = new Array();
Amsg['RO'] = " introduceti doar text, literal.";
Amsg['EN'] = " text expected; please correct.";
var Tmsg = new Array();
Tmsg['RO'] = " caractere nepermise pentru un nr de telefon; va rugam corectati.";
Tmsg['EN'] = " wrong phone number; please correct.";
var Emsg = new Array();
Emsg['RO'] = " adresa de e-mail invalida; va rugam corectati.";
Emsg['EN'] = " wrong e-mail address; please correct.";
var Dmsg = new Array();
Dmsg['RO'] = " data incorecta; va rugam corectati.";
Dmsg['EN'] = " wrong date value; please correct.";
//end set de mesaje
///////////////////////////////////////////////////////////////////
//seria de functii quod validatem diferentiae per valor
//functia de stergere a alertelor din familia al
function isRmAlert(al){
    var l, i;
    var e = document.getElementsByName(al);
    l = e.length;
    for (i = 0; i < l; i++) {
        //adica intotdeauna sa fie elementul urmat de elementul alerta if the case pt ca sa pot remove fundalul de eroare
        e[0].previousSibling.removeAttribute("style");
        e[0].parentNode.removeChild(e[0]);
    }
    return l;//cate erat si eliminat
}

//validare data
function isvalidd_core(z, l, a){
    var vz = new Array();
    vz[1] = 31;
    if ((a % 4) == 0) 
        vz[2] = 29;
    else 
        vz[2] = 28;
    vz[3] = 31;
    vz[4] = 30;
    vz[5] = 31;
    vz[6] = 30;
    vz[7] = 31;
    vz[8] = 31;
    vz[9] = 30;
    vz[10] = 31;
    vz[11] = 30;
    vz[12] = 31;
    
    if (a < 1000 || a > 9999) 
        return false;
    if (l < 1 || l > 12) 
        return false;
    if (z < 1 || z > vz[l]) 
        return false;
    return true;
}

//validare X, non empty
function isValidX(lang){
    var r = 1;
    var s, e, c, l, i, msg;
    //1. elimin nodurile din grupa....
    isRmAlert("isgrpXvalidare");
    //2. validarea dupa toate argumentele	
    l = arguments.length;
    //argumentul 0 e lang
    for (i = 1; i < l; i++) {
        s = arguments[i].value;
        //if not ok - orice, mai putin spatieri
        if (s.replace(/\ /g, "") == "") {
            //caz de eroare, afisez alerta
            e = document.getElementById(arguments[i].name);//potential problem; mai bine se trece cu apelare pe ID si aici se schimba in GetElementById
            if (e.nodeName == "INPUT") {
                e.setAttribute("style", "background-color: #ffd0d0;");
            }
            //pregatesc elementul/textul relatie tata fiu: span cu clasa si text. elegant.
            c = document.createElement("SPAN");
            c.setAttribute("class", "alerta");
            c.setAttribute("name", "isgrpXvalidare");
            if (Xmsg[lang]) 
                msg = Xmsg[lang];
            else 
                msg = "*";
            c.appendChild(document.createTextNode(msg));//mesajul
            //sibling deci la elementul eronat plasez alerta
            e.parentNode.appendChild(c);
            //			return 0;//prima eroare -iese afara; altfel cata aller erorile, le marcheaza and gata
            r *= 0;
        }
        else 
            r *= 1;
    }
    return r
}

//validare N, non empty; numar natural de vazut analog si pt float, etc
function isValidN(lang){
    var r = 1;
    var s, e, c, l, i, msg;
    //1. elimin nodurile din grupa....
    isRmAlert("isgrpNvalidare");
    //2. validarea dupa toate argumentele	
    l = arguments.length;
    //argumentul 0 e lang
    for (i = 1; i < l; i++) {
        s = arguments[i].value;
        //if not ok
        if ((s == "") || (s.replace(/[0-9]+/, "") != "")) {
            //caz de eroare, afisez alerta
            e = document.getElementById(arguments[i].name);//potential problem; mai bine se trece cu apelare pe ID si aici se schimba in GetElementById
            if (e.nodeName == "INPUT") {
                e.setAttribute("style", "background-color: #ffd0d0;");
            }
            //pregatesc elementul/textul relatie tata fiu: span cu clasa si text. elegant.
            c = document.createElement("SPAN");
            c.setAttribute("class", "alerta");
            c.setAttribute("name", "isgrpNvalidare");
            if (Nmsg[lang]) 
                msg = Nmsg[lang];
            else 
                msg = "*";
            c.appendChild(document.createTextNode(msg));//mesajul
            //sibling deci la elementul eronat plasez alerta
            e.parentNode.appendChild(c);
            //			return 0;//prima eroare -iese afara; altfel cata aller erorile, le marcheaza and gata
            r *= 0;
        }
        else 
            r *= 1;
    }
    return r
}

//validare pe numeric non zero (select)- util de ex la combo/selecturi, checkbox, radio, etc;
function isValidNZS(lang){
    var r = 1;
    var s, e, c, l, i, msg;
    //1. elimin nodurile din grupa....
    isRmAlert("isgrpNZvalidare");
    //2. validarea dupa toate argumentele	
    l = arguments.length;
    //argumentul 0 e lang
    for (i = 1; i < l; i++) {
        s = arguments[i].value;
        //if not ok
        if ((s == "") || (s.replace(/[0-9]+/, "") != "") || parseInt(s, 10) <= 0) {
            //caz de eroare, afisez alerta
            e = document.getElementById(arguments[i].name);//potential problem; mai bine se trece cu apelare pe ID si aici se schimba in GetElementById
            if (e.nodeName == "INPUT") {
                e.setAttribute("style", "background-color: #ffd0d0;");
            }
            //pregatesc elementul/textul relatie tata fiu: span cu clasa si text. elegant.
            c = document.createElement("SPAN");
            c.setAttribute("class", "alerta");
            c.setAttribute("name", "isgrpNZvalidare");
            if (NZSmsg[lang]) 
                msg = NZSmsg[lang];
            else 
                msg = "*";
            c.appendChild(document.createTextNode(msg));//mesajul
            //sibling deci la elementul eronat plasez alerta
            e.parentNode.appendChild(c);
            //			return 0;//prima eroare -iese afara; altfel cata aller erorile, le marcheaza and gata
            r *= 0;
        }
        else 
            r *= 1;
    }
    return r
}

//validare A, non empty; alfabetic
function isValidA(lang){
    var r = 1;
    var s, e, c, l, i, msg;
    //1. elimin nodurile din grupa....
    isRmAlert("isgrpAvalidare");
    //2. validarea dupa toate argumentele	
    l = arguments.length;
    //argumentul 0 e lang
    for (i = 1; i < l; i++) {
        s = arguments[i].value;
        //if not ok
        if ((s == "") || (s.replace(/[a-zA-Z_]{1}[a-zA-Z\-\(\)\!\?\/\ \{\}\:\;\,\%\&\*_\=]*/, "") != "")) {
            //caz de eroare, afisez alerta
            e = document.getElementById(arguments[i].name);//potential problem; mai bine se trece cu apelare pe ID si aici se schimba in GetElementById
            if (e.nodeName == "INPUT") {
                e.setAttribute("style", "background-color: #ffd0d0;");
            }
            //pregatesc elementul/textul relatie tata fiu: span cu clasa si text. elegant.
            c = document.createElement("SPAN");
            c.setAttribute("class", "alerta");
            c.setAttribute("name", "isgrpAvalidare");
            if (Amsg[lang]) 
                msg = Amsg[lang];
            else 
                msg = "*";
            c.appendChild(document.createTextNode(msg));//mesajul
            //sibling deci la elementul eronat plasez alerta
            e.parentNode.appendChild(c);
            //			return 0;//prima eroare -iese afara; altfel cata aller erorile, le marcheaza and gata
            r *= 0;
        }
        else 
            r *= 1;
    }
    return r
}

//validare Telefon, fax, non empty
function isValidT(lang){
    var r = 1;
    var s, e, c, l, i, msg;
    //1. elimin nodurile din grupa....
    isRmAlert("isgrpTvalidare");
    //2. validarea dupa toate argumentele	
    l = arguments.length;
    //argumentul 0 e lang
    for (i = 1; i < l; i++) {
        s = arguments[i].value;
        //if not ok
        if ((s == "") || (s.replace(/[\+]{0,1}[0-9]{2}[0-9\-\.\ ]*/, "") != "")) {
            //caz de eroare, afisez alerta
            e = document.getElementById(arguments[i].name);//potential problem; mai bine se trece cu apelare pe ID si aici se schimba in GetElementById
            if (e.nodeName == "INPUT") {
                e.setAttribute("style", "background-color: #ffd0d0;");
            }
            //pregatesc elementul/textul relatie tata fiu: span cu clasa si text. elegant.
            c = document.createElement("SPAN");
            c.setAttribute("class", "alerta");
            c.setAttribute("name", "isgrpTvalidare");
            if (Tmsg[lang]) 
                msg = Tmsg[lang];
            else 
                msg = "*";
            c.appendChild(document.createTextNode(msg));//mesajul
            //sibling deci la elementul eronat plasez alerta
            e.parentNode.appendChild(c);
            //			return 0;//prima eroare -iese afara; altfel cata aller erorile, le marcheaza and gata
            r *= 0;
        }
        else 
            r *= 1;
    }
    return r
}

//validare Email, non empty
function isValidE(lang){
    var r = 1;
    var s, e, c, l, i, msg;
    //1. elimin nodurile din grupa....
    isRmAlert("isgrpEvalidare");
    //2. validarea dupa toate argumentele	
    l = arguments.length;
    //argumentul 0 e lang
    for (i = 1; i < l; i++) {
        s = arguments[i].value;
        //if not ok
        if ((s == "") || (s.replace(/[a-zA-Z0-9_][a-zA-Z0-9._-]*@[a-zA-Z0-9-.]+\.[a-zA-Z]{2,4}/, "") != "")) {
            //caz de eroare, afisez alerta
            e = document.getElementById(arguments[i].name);//potential problem; mai bine se trece cu apelare pe ID si aici se schimba in GetElementById
            if (e.nodeName == "INPUT") {
                e.setAttribute("style", "background-color: #ffd0d0;");
            }
            //pregatesc elementul/textul relatie tata fiu: span cu clasa si text. elegant.
            c = document.createElement("SPAN");
            c.setAttribute("class", "alerta");
            c.setAttribute("name", "isgrpEvalidare");
            if (Emsg[lang]) 
                msg = Emsg[lang];
            else 
                msg = "*";
            c.appendChild(document.createTextNode(msg));//mesajul
            //sibling deci la elementul eronat plasez alerta
            e.parentNode.appendChild(c);
            //			return 0;//prima eroare -iese afara; altfel cata aller erorile, le marcheaza and gata
            r *= 0;
        }
        else 
            r *= 1;
    }
    return r
}


//validare data, not empty; parametri: lanf si string formatul
function isValidD(lang, fmt){
    var r = 1;
    var s, e, c, l, i, msg, re;
    //1. elimin nodurile din grupa....
    isRmAlert("isgrpDvalidare");
    //2. validarea dupa toate argumentele	
    l = arguments.length;
    //argumentul 0 e lang
    //argumentul 1 e formatul
    for (i = 2; i < l; i++) {
        s = arguments[i].value;
        err_param = false;
        if (fmt == "d/m/Y") //i.e. dd/mm/YYYY
        {
            re = /([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})/;
            if (k = s.match(re)) {
                ziua = parseInt(k[1], 10);
                luna = parseInt(k[2], 10);
                anul = parseInt(k[3], 10);//k[0] e expresia insasi
            }
            else {
                err_param = true;
            }
        }
        else {
            //inainte de err true: verificari pt celelalte sabloane posibile, etc;
            err_param = true;
        }
        //aici avem zi luna an de verificat
        if (!err_param && (s != "") && isvalidd_core(ziua, luna, anul)) 
            r *= 1;//oarecumva inversat; explicatie: la sau face evaluare totala, la si progresiva; 
        else {
            //caz de eroare, afisez alerta
            e = document.getElementById(arguments[i].name);//potential problem; mai bine se trece cu apelare pe ID si aici se schimba in GetElementById
            if (e.nodeName == "INPUT") {
                e.setAttribute("style", "background-color: #ffd0d0;");
            }
            //pregatesc elementul/textul relatie tata fiu: span cu clasa si text. elegant.
            c = document.createElement("SPAN");
            c.setAttribute("class", "alerta");
            c.setAttribute("name", "isgrpDvalidare");
            if (Dmsg[lang]) 
                msg = Dmsg[lang];
            else 
                msg = "*";
            c.appendChild(document.createTextNode(msg));//mesajul
            //sibling deci la elementul eronat plasez alerta
            e.parentNode.appendChild(c);
            //			return 0;//prima eroare -iese afara; altfel cata aller erorile, le marcheaza and gata
            r *= 0;
        }
    }
    return r
}

//reseteaza valorile formului dat pe "", mai putin ultimele n campuri, (sau primele n campuri daca n e negativ)
function isResetCampuri(nume_form, n){
    var i, l, f, o = 0;
    
    f = document.forms[nume_form];
    l = f.elements.length;
    if (n) {
        if (n > 0) 
            l = l - n;
        else 
            o = o - n;
    }
    for (i = o; i < l; i++) {
        f.elements[i].value = "";
    }
}

////////////////////////////////////////////////
//traducere de caractere, in special cele cu probleme
function htmlentities(s){
    //	var s =new String;
    s = s.replace(/(')/g, "&#39;");
    s = s.replace(/(")/g, "&quot;");
    s = s.replace(/(<)/g, "&lt;");
    s = s.replace(/(>)/g, "&gt;");
    return s;
}

//functia inversa lui htmlentities
function html_entity_decode(s){
    //	var s =new String;
    s = s.replace(/(&#39;)/g, "\'");
    s = s.replace(/(&quot;)/g, '\"');
    s = s.replace(/(&lt;)/g, "<");
    s = s.replace(/(&gt;)/g, ">");
    return s;
}

function no_quot(s)
{
    s = s.replace(/(')/g, "&#39;");
    s = s.replace(/(")/g, "&quot;");
    return s;

}

var alt = new Array();
var flip = 1;//bascula; 
var request;

//intra in mod editare - 
function enterEdit(){
    var id = this.getAttribute('id');

//    var pos = id.indexOf('o');
//    var key1 = id.substr(pos + 1);//id_msg
//    var key2 = id.substr(0, pos);//lang
    var params = this.getAttribute('name');

    var who = this;
    
    if (null == id) 
        return true;//nu fac nimic - nu a dat id, nu ma ating de celula

    if (!document.getElementById('i' + id) || flip == 0)//nu am form inca in document sau caz de bascula: pe un camp fac pe flip=1, pe altul 0 dupa cum vreua sa basculeze sau nu. 
        if (!who) 
            return false;
        else {
            gasit = false;
            in_editare = false;
            index = 0;
            l = alt.length;
            i = 0;
            while (i < l) {
                if (alt[i][1] == id) {
                    gasit = true;
                    index = i;
                    if (alt[i][2] == 0) 
                        in_editare = false;
                    else 
                        in_editare = true;
                }
                else //inchid restul
                     if (alt[i][2] == 1) {

                        if (alt[i][0] !== htmlentities(document.xx.inp.value)) //aici la copierea val din input de facut ceva de genul htmlentities;
                            if (0 == sqlExec(params, no_quot(document.xx.inp.value))) { //	sqlExec('update isgrup set descriere=\'' + document.xx.inp.value + '\' where ' + params);
                                alt[i][0] = htmlentities(document.xx.inp.value);//punem si aici htmlentities??da.
                            }
                        w = document.getElementById(alt[i][1]);
                        w.innerHTML = html_entity_decode(alt[i][0]);
                        alt[i][2] = 0;
                        
                    }
                i++;
            }
            if (gasit) {
            
                if (in_editare) {
                    if (alt[index][0] !== htmlentities(document.xx.inp.value)) //aici la copierea val din input de facut ceva de genul htmlentities;
                        if (0 == sqlExec(params, no_quot(document.xx.inp.value))) { //important: erat: htmlentities(document.xx.inp.value); scos htmlentities din cauza ca la utf8 nu merge bine, face harceaparcea sirul salvat;//	sqlExec('update isgrup set descriere=\'' + document.xx.inp.value + '\' where ' + params);
                            alt[index][0] = htmlentities(document.xx.inp.value);//punem si aici htmlentities??da.
                        //                            alert(alt[index][0]);
                        }
                    who.innerHTML = html_entity_decode(alt[index][0]);
                    alt[index][2] = 0;
                }
                else {
                    alt[index][0] = htmlentities(who.innerHTML);
                    if ((lung = 0.89 * alt[index][0].length) > 50) 
                        lung = 50;
                    //era cu but save                    who.innerHTML = '<form name="xx" method="POST" action="" onSubmit="return nosubmit();"><input type="text" name="inp" maxlength="400" size="' + lung + '" value="' + alt[index][0] + '" id="i' + id + '" onClick="javascript: flip=1;">&nbsp;<input type="button" name="save" value="save" onClick="javascript: flip=0;"></form>';
                    who.innerHTML = '<form name="xx"><input type="text" name="inp" maxlength="400" size="' + lung + '" value="' + alt[index][0] + '" id="i' + id + '" onClick="javascript: flip=1;" onChange="javascript: flip=0;">&nbsp;&nbsp;[set]</form>';
                    alt[index][2] = 1;
                }
            }
            else//negasit - adaug elementul
            {
//                alt[l] = new Array(htmlentities(who.innerHTML), id, 1, key1, key2);//campul3=1 i.e. e in editare (0 sau nedefinit inseamna ca nu e in editare sau a iesit din editare
                alt[l] = new Array(htmlentities(who.innerHTML), id, 1);//campul3=1 i.e. e in editare (0 sau nedefinit inseamna ca nu e in editare sau a iesit din editare
                if ((lung = 0.89 * alt[l][0].length) > 50) 
                    lung = 50;
                //era cu but save:                who.innerHTML = '<form name="xx" method="POST" action="" onSubmit="return nosubmit();"><input type="text" name="inp" maxlength="400" size="' + lung + '" value="' + alt[l][0] + '" id="i' + id + '" onClick="javascript: flip=1;">&nbsp;<input type="button" name="save" value="save" onClick="javascript: flip=0;"></form>';
                who.innerHTML = '<form name="xx"><input type="text" name="inp" maxlength="400" size="' + lung + '" value="' + alt[l][0] + '" id="i' + id + '" onClick="javascript: flip=1;" onChange="javascript: flip=0;">&nbsp;&nbsp;[set]</form>';
            }
            return true;
        }
    
}

//adauga macheta de editare in situ pentru entitatea careia ii este asociat enterEdit
function addEditForm(){
    var altlist = document.getElementById("taltlist");//sectiunea delimitata de id taltlist
    var altlistElements = altlist.getElementsByTagName("td");//elementele din acea sectiune, elementele td
    //    var altlistForms =    altlist.getElementsByTagName("input");//butoanele de submit save din form-urile respective fiecare din td de fapt 
    
    for (var i = 0, l = altlistElements.length; i < l; i++) {
        altlistElements[i].onclick = enterEdit;
    }
}


