//Ajax functions var id_xml = 0; /** * function evalFunc(func, type, params, xmlObj) * * Functie de evaluare a rezultatului intors de ajaxRead. Este apelata in momentul in care apelul ajax are un rezultat (state = 200) * * @memberOf Global * @param {Function} func functia care va fi apelata pentru a parsa xml-ul intors in cazul in care type = "xml" * @param {String} type tipul apelului ajax ("xml" - apel cu rezultat in format XML; "js" - apel cu rezultat in format text care va fi parsat drept cod JS) * @param {Array} params parametrii care vor fi pasati catre functia definia mai sus (func), in cazul in care type = "xml" * @param {Object} xmlObj rezultatul intors de apelul AJAX * @returns void * */ function evalFunc(func, type, params, xmlObj){ xml = xmlObj.responseXML; if (type == "xml"){ var err = xml.getElementsByTagName("runtime_error"); if (err.length > 0){ var mes = ""; if (err[0].childNodes.length > 0) mes = err[0].firstChild.data; alert("Eroare la procesarea request-ului. Eroarea este: " + mes); return ; } } if (type == "xml"){ if (typeof(func) == "function") { if (params == "undefined") func(xml); else func(xml, params); } } else if (type == "text"){ if (typeof(func) == "function") { if (params == "undefined") func(xmlObj.responseText, xml); else func(xmlObj.responseText, xml, params); } } else if (type == "js"){ eval(ReplaceAll("\n", "", xmlObj.responseText)); } } /** * function ajaxRead(file, method, asing, send_text, func, not_modified_func, _type, params) * * Realizeaza un apel ajax. Intoarce obiectul XML intors de apelul AJAX. * * @memberOf Global * @param {String} file script-ul care va fi apelat * @param {String} method metoda prin care se va face apelul (GET sau POST) * @param {Boolean} asinc tipul apelului: asincron sau sincron * @param {String} send_text textul care va fi trimis catre script prin POST (daca e cazul) * @param {Function} func functia care va fi apelata dupa apelul AJAX pentru a parsa rezultatul (daca apelul este de tip XML); NULL daca nu se doreste apelarea unei functii dupa * @param {Function} not_modified_func functia care va fi apelata in cazul in care apelul va intoarce HTTP 302 Not modified; NULL daca nu se doreste setarea unei astfel de functii. * @param {String} _type tipul apelului AJAX: "xml" pentru apel care intoarce rezultat in format XML; "js" pentru apel care intoarce rezultat in format text care va fi parsat ca un cod JS. * @param {Array} params vector cu parametrii care ar trebui transmisi functiei care parseaza rezultatul in format XML in cazul in care tipul apelului este XML. * @returns Object * */ function ajaxRead(file, method, asinc, send_text, func, not_modified_func, _type, params){ var xmlObj = null; var executed = false; var type; if (_type == null) type = "xml"; else type = _type; if(window.XMLHttpRequest){ xmlObj = new XMLHttpRequest(); } else if(window.ActiveXObject){ xmlObj = new ActiveXObject("Microsoft.XMLHTTP"); } else { return; } xmlObj.onreadystatechange = function(){ if (xmlObj.readyState == 4){ try { st = xmlObj.status; } catch (e) { // TODO: handle exception st = 200; } if (st == 200 && !executed) { executed = true; evalFunc(func, type, params, xmlObj); } else if (st == 304 && !executed){ executed = true; evalFunc(not_modified_func, type, params, xmlObj) } } } var address_bar = "&id_xml=" + id_xml++ + "&type=" + type + "&nocache=" + Math.random(); xmlObj.open (method, file + address_bar, asinc); if (method=='POST') { send_text = send_text.replace(/\+/g, escape("+")); xmlObj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); } xmlObj.send(send_text); if (!asinc && !executed) { executed = true; evalFunc(func, type, params, xmlObj); } return xmlObj; } /** * function getXMLData(xml, tag_name, default_value) * * Extrage un nod dintr-un arbore XML. In cazul in care nodul nu este gasit, intoarce NOT FOUND. In cazul in care sunt mai multe noduri cu numele cautat, atunci este intors primul dintre ele. * In cazul in care nodul este gasit, dar are nu are nicio valoare, se intoarce default_value, in caz ca e setata, sau string-ul "" altfel. * * @memberOf Global * @param {Object} xml arborele XML * @param {String} tag_name numele tag-ului cautat. * @param {String} default_value valoarea care va fi intoarsa default, daca tag-ul e gasit dar nu are valoare. * @returns {String} * */ function getXMLData(xml, tag_name, default_value){ var data = xml.getElementsByTagName(tag_name); if (data.length == 0) return "NOT FOUND"; if (data[0].childNodes.length > 0) return data[0].firstChild.data; if (default_value == null) return ""; return default_value; } //Common functions var BROWSER = navigator.appName; /** * function IE_Browser() * * Functie care intoarce tipul true daca ruleaza in Internet Explorer, false altfel * * @memberOf Global * @returns {Boolean} * */ function IE_Browser(){ return BROWSER == "Microsoft Internet Explorer"; } /** * function getClientHeight() * * Intoarce inaltimea in pixeli a spatiului folosit efectiv de browser pentru randarea paginii * * @memberOf Global * @returns {Integer} * */ function getClientHeight(){ return (IE_Browser()?document.body.parentElement.offsetHeight:window.innerHeight); } /** * function getClientWidth() * * Intoarce latimea in pixeli a spatiului folosit efectiv de browser pentru randarea paginii * * @memberOf Global * @returns {Integer} * */ function getClientWidth(){ return (IE_Browser()?document.body.parentElement.offsetWidth:window.innerWidth); } /** * function clearNodes(element) * * Sterge toate nodurile copil ale unui element de tip DOM * * @memberOf Global * @param {Object} element elementul ale carui noduri vor fi sterse * @returns {void} * */ function clearNodes(element){ while (element.childNodes.length >= 1) { element.removeChild(element.firstChild); } } /** * function checkEmail(e_mail) * * Verifica daca un string este e-mail. * * @memberOf Global * @param {String} e_mail string-ul verificat * @returns {Boolean} * */ function checkEmail(e_mail) { return /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(e_mail); } /** * function array2POST(arr) * * Intoarce un string compus din toate elementele unui array in format POST. De exemplu pt {"id" => 1, "nume" => "test"}, va intoarce "id=1&nume=test" * * @memberOf Global * @param {Array} arr vectorul care va fi trecut in format POST * @returns {String} * */ function array2POST(arr){ var rez = ""; for (key in arr){ rez += (rez == ""?"":"&") + key + "=" + escape(arr[key]); } return rez; } /** * function form2POST(arr) * * Similar cu array2POST, doar ca valorile vectorului sunt interpretate ca id-uri de elemente HTML. De exemplu, pentru {"id1" => "id1", "id2" => "id2"}, * se intoarce "id1=" + document.getElementById('id1') + "&id2=" + document.getElementById('id2') * * @memberOf Global * @param {Array} arr vectorul care va fi trecut in format POST * @returns {String} * */ function form2POST(arr){ var rez = ""; for (key in arr){ rez += (rez == ""?"":"&") + key + "=" + (document.getElementById(key).type == "checkbox"?document.getElementById(key).checked:escape(arr[key])); } return rez; } /** * function ReplaceAll(s1, s2, s3) * * Inlocuieste toate aparitiile lui s1 cu s2 in s3 * * @memberOf Global * @param {String} s1 string-ul care va fi inlocuit * @param {String} s2 string-ul cu care va fi inlocuit * @param {String} s3 string-ul in care se face inlocuirea * @returns {String} * */ function ReplaceAll(s1, s2, s3){ //return s3; while (s3.indexOf(s1)>=0) {s3 = s3.replace(s1, s2);} return s3; } /** * function clearArray(a) * * Sterge toate elementele unui vector * * @memberOf Global * @param {Array} a vectorul ale carui elemente vor fi sterge * @returns {void} * */ function clearArray(a){ while (a.length > 0) { a.pop(); } } /** * function getFormData(_ids) * * Intoarce un array cu toate valorile elementelor HTML cu id-urile date in string-ul _ids si despartite prin virgula. * * @memberOf Global * @param {String} _ids id-urile despartite prin virgula * @returns {Array} * */ function getFormData(_ids){ var ids = _ids.split(","); var rez = new Array(); for(var i=0; i